1 21 22 package org.opensubsystems.core.persist.db.driver.mysql; 23 24 import java.sql.Connection ; 25 import java.sql.PreparedStatement ; 26 import java.sql.ResultSet ; 27 import java.sql.SQLException ; 28 import java.sql.Statement ; 29 import java.util.logging.Level ; 30 import java.util.logging.Logger ; 31 32 import org.opensubsystems.core.error.OSSException; 33 import org.opensubsystems.core.persist.db.driver.DatabaseTestSchema; 34 import org.opensubsystems.core.util.DatabaseUtils; 35 import org.opensubsystems.core.util.Log; 36 37 47 public class MySQLDatabaseTestSchema extends DatabaseTestSchema 48 { 49 184 185 187 190 private static Logger s_logger = Log.getInstance(MySQLDatabaseTestSchema.class); 191 192 194 199 public MySQLDatabaseTestSchema( 200 ) throws OSSException 201 { 202 super(); 203 } 204 205 207 210 public void create( 211 Connection cntDBConnection, 212 String strUserName 213 ) throws SQLException 214 { 215 219 Statement stmQuery = null; 221 try 222 { 223 stmQuery = cntDBConnection.createStatement(); 224 225 227 if (stmQuery.execute("CREATE TABLE GENERATEDKEY_TEST" + NL + 228 "(" + NL + 229 " TEST_KEY INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY," + NL + 230 " TEST_VALUE VARCHAR(50) NOT NULL" + NL + 231 ") TYPE=INNODB")) 232 { 233 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 235 } 236 s_logger.log(Level.FINEST, "Table GENERATEDKEY_TEST created."); 237 247 248 250 if (stmQuery.execute("CREATE TABLE RESULTSET_TEST" + NL + 251 "(" + NL + 252 " RESULTSET_TEST VARCHAR(20) NOT NULL" + NL + 253 ") TYPE=INNODB")) 254 { 255 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 257 } 258 s_logger.log(Level.FINEST, "Table RESULTSET_TEST created."); 259 269 270 272 if (stmQuery.execute("CREATE TABLE DATE_TEST" + NL + 273 "(" + NL + 274 " DATE_TEST DATE NOT NULL" + NL + 275 ") TYPE=INNODB")) 276 { 277 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 279 } 280 s_logger.log(Level.FINEST, "Table DATE_TEST created."); 281 291 292 294 if (stmQuery.execute("CREATE TABLE TIME_TEST" + NL + 295 "(" + NL + 296 " TIME_TEST TIME NOT NULL" + NL + 297 ") TYPE=INNODB")) 298 { 299 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 301 } 302 s_logger.log(Level.FINEST, "Table TIME_TEST created."); 303 313 314 316 if (stmQuery.execute("CREATE TABLE TIMESTAMP_TEST" + NL + 317 "(" + NL + 318 " TIMESTAMP_TEST TIMESTAMP NOT NULL" + NL + 319 ") TYPE=INNODB")) 320 { 321 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 323 } 324 s_logger.log(Level.FINEST, "Table TIMESTAMP_TEST created."); 325 335 336 338 if (stmQuery.execute("CREATE TABLE TRANSACTION_TEST" + NL + 339 "(" + NL + 340 " TEST_ID INTEGER UNSIGNED UNIQUE NOT NULL," + NL + 341 " TEST_VALUE VARCHAR(50) NOT NULL," + NL + 342 " CONSTRAINT TEST_ID_PK PRIMARY KEY (TEST_ID)" + NL + 343 ") TYPE=INNODB")) 344 { 345 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 347 } 348 s_logger.log(Level.FINEST, "Table TRANSACTION_TEST created."); 349 359 360 362 if (stmQuery.execute("CREATE TABLE TRANSACTION_RELATED_TEST" + NL + 363 "(" + NL + 364 " TEST_REL_ID INTEGER NOT NULL," + NL + 365 " TEST_ID INTEGER UNSIGNED NOT NULL," + NL + 366 " TEST_VALUE VARCHAR(50)," + NL + 367 " INDEX IND_TRAN_TEST_ID (TEST_ID)," + NL + 368 " CONSTRAINT TEST_ID_FK FOREIGN KEY (TEST_ID)" + NL + 369 " REFERENCES TRANSACTION_TEST (TEST_ID) ON DELETE CASCADE" + NL + 370 ") TYPE=INNODB")) 371 { 372 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 374 } 375 s_logger.log(Level.FINEST, "Table TRANSACTION_RELATED_TEST created."); 376 386 387 389 if (stmQuery.execute("CREATE TABLE DELETE_TEST" + NL + 390 "(" + NL + 391 " TEST_ID INTEGER NOT NULL," + NL + 392 " TEST_VALUE VARCHAR(50) NOT NULL," + NL + 393 " CONSTRAINT DTEST_ID_PK PRIMARY KEY (TEST_ID)" + NL + 394 ") TYPE=INNODB")) 395 { 396 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 398 } 399 s_logger.log(Level.FINEST, "Table DELETE_TEST created."); 400 410 411 413 if (stmQuery.execute("CREATE TABLE DELETE_RELATED_TEST" + NL + 414 "(" + NL + 415 " TEST_REL_ID INTEGER NOT NULL," + NL + 416 " TEST_ID INTEGER NOT NULL," + NL + 417 " TEST_VALUE VARCHAR(50)," + NL + 418 " INDEX IND_DEL_TEST_ID (TEST_ID)," + NL + 419 " CONSTRAINT DTEST_ID_FK FOREIGN KEY (TEST_ID)" + NL + 420 " REFERENCES DELETE_TEST (TEST_ID) ON DELETE CASCADE" + NL + 421 ") TYPE=INNODB")) 422 { 423 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 425 } 426 s_logger.log(Level.FINEST, "Table DELETE_RELATED_TEST created."); 427 437 439 if (stmQuery.execute("CREATE TABLE ROLLBACK_TEST" + NL + 440 "(" + NL + 441 " TEST_COLUMN VARCHAR(50) NOT NULL," + NL + 442 " CONSTRAINT TEST_COLUMN_UQ UNIQUE (TEST_COLUMN)" + NL + 443 ") TYPE=INNODB")) 444 { 445 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 447 } 448 s_logger.log(Level.FINEST, "Table TRANSACTION_TEST created."); 449 459 460 462 if (stmQuery.execute("CREATE TABLE OWN_FK_TEST " + NL + 463 "( " + NL + 464 " TEST_ID INTEGER NOT NULL, " + NL + 465 " FK_ID INTEGER," + NL + 466 " INDEX IND_OWN_FK_ID (FK_ID)," + NL + 467 " CONSTRAINT OWN_FK_TEST_PK PRIMARY KEY (TEST_ID), " + NL + 468 " CONSTRAINT OWN_FK_TEST_FK FOREIGN KEY (FK_ID) " + NL + 469 " REFERENCES OWN_FK_TEST (TEST_ID) ON DELETE CASCADE" + NL + 470 ") TYPE=INNODB")) 471 { 472 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 474 } 475 s_logger.log(Level.FINEST, "Table OWN_FK_TEST created."); 476 486 487 489 if (stmQuery.execute("CREATE TABLE GROUP_BASE_TEST" + NL + 490 "(" + NL + 491 " TEST_BASE_ID INTEGER NOT NULL, " + NL + 492 " TEST_BASE_VALUE INTEGER," + NL + 493 " CONSTRAINT GROUP_BASE_TEST_PK PRIMARY KEY (TEST_BASE_ID)" + NL + 494 ") TYPE=INNODB")) 495 { 496 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 498 } 499 s_logger.log(Level.FINEST, "Table GROUP_BASE_TEST created."); 500 510 511 513 if (stmQuery.execute( 514 "CREATE TABLE GROUP_CHILD_TEST" + NL + 515 "(" + NL + 516 " TEST_CHILD_ID INTEGER NOT NULL, " + NL + 517 " TEST_BASE_FK_ID INTEGER NOT NULL, " + NL + 518 " TEST_CHILD_VALUE INTEGER," + NL + 519 " INDEX IND_CHILD_TEST_BASE_FK_ID (TEST_BASE_FK_ID)," + NL + 520 " CONSTRAINT GROUP_CHILD_TEST_PK PRIMARY KEY (TEST_CHILD_ID)," + NL + 521 " CONSTRAINT TEST_BASE_ID_FK FOREIGN KEY (TEST_BASE_FK_ID) " + NL + 522 " REFERENCES GROUP_BASE_TEST (TEST_BASE_ID) ON DELETE CASCADE" + NL + 523 ") TYPE=INNODB")) 524 { 525 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 527 } 528 s_logger.log(Level.FINEST, "Table GROUP_CHILD_TEST created."); 529 539 540 542 if (stmQuery.execute("CREATE TABLE SAME_TEST1" + NL + 543 "(" + NL + 544 " ID INTEGER NOT NULL" + NL + 545 ") TYPE=INNODB")) 546 { 547 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 549 } 550 s_logger.log(Level.FINEST, "Table SAME_TEST1 created."); 551 561 562 564 if (stmQuery.execute("CREATE TABLE SAME_TEST2 " + NL + 565 "(" + NL + 566 " ID INTEGER NOT NULL" + NL + 567 ") TYPE=INNODB")) 568 { 569 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 571 } 572 s_logger.log(Level.FINEST, "Table SAME_TEST2 created."); 573 583 584 586 if (stmQuery.execute("CREATE TABLE POOL_TEST " + NL + 587 "(" + NL + 588 " TEST_VALUE INTEGER NOT NULL," + NL + 589 " CONSTRAINT TEST_VALUE1_PK PRIMARY KEY (TEST_VALUE)" + NL + 590 ") TYPE=INNODB")) 591 { 592 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 594 } 595 s_logger.log(Level.FINEST, "Table POOL_TEST created."); 596 606 607 609 if (stmQuery.execute("CREATE TABLE POOL_TEST2 " + NL + 610 "(" + NL + 611 " TEST_VALUE INTEGER NOT NULL," + NL + 612 " CONSTRAINT TEST_VALUE2_PK PRIMARY KEY (TEST_VALUE)" + NL + 613 ") TYPE=INNODB")) 614 { 615 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 617 } 618 s_logger.log(Level.FINEST, "Table POOL_TEST2 created."); 619 629 630 632 if (stmQuery.execute("CREATE TABLE QUERY_TEST " + NL + 633 "(" + NL + 634 " VALUE_1 INTEGER NOT NULL," + NL + 635 " VALUE_2 INTEGER NOT NULL" + NL + 636 ") TYPE=INNODB")) 637 { 638 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 640 } 641 s_logger.log(Level.FINEST, "Table QUERY_TEST created."); 642 652 653 655 if (stmQuery.execute("CREATE TABLE QUERY_TEST_EXCEPT " + NL + 656 "(" + NL + 657 " VALUE_1 INTEGER NOT NULL" + NL + 658 ") TYPE=INNODB")) 659 { 660 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 662 } 663 s_logger.log(Level.FINEST, "Table QUERY_TEST_EXCEPT created."); 664 674 675 677 if (stmQuery.execute("CREATE TABLE UNIQUE_COLUMN_TEST " + NL + 678 "(" + NL + 679 " TEST_ID INTEGER, " + NL + 680 " CONSTRAINT TEST_ID_UQ UNIQUE (TEST_ID) " + NL + 681 ") TYPE=INNODB")) 682 { 683 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 685 } 686 s_logger.log(Level.FINEST, "Table UNIQUE_COLUMN_TEST created."); 687 697 698 700 if (stmQuery.execute("CREATE TABLE NULL_COLUMN_TEST " + NL + 701 "(" + NL + 702 " NAME VARCHAR(50)" + NL + 703 ") TYPE=INNODB")) 704 { 705 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 707 } 708 s_logger.log(Level.FINEST, "Table NULL_COLUMN_TEST created."); 709 719 720 721 } 722 catch (SQLException sqleExc) 723 { 724 s_logger.log(Level.WARNING, "Failed to create database test schema.", 725 sqleExc); 726 throw sqleExc; 727 } 728 finally 729 { 730 DatabaseUtils.closeStatement(stmQuery); 731 } 732 } 733 734 737 public String getInsertGeneratedKey( 738 ) 739 { 740 return "INSERT INTO generatedkey_test(test_key, test_value) " + 741 "VALUES (null, ?)"; 742 } 743 744 747 public int[] executeInsertGeneratedKey2( 748 Connection dbConnection, 749 String strValue 750 ) throws SQLException 751 { 752 PreparedStatement insertStatement = null; 753 Statement selectStatement = null; 754 ResultSet rsResults = null; 756 int iInsertCount = 0; 757 int iGeneratedKey = 0; 758 int[] returnValues = null; 759 760 try 761 { 762 insertStatement = dbConnection.prepareStatement(getInsertGeneratedKey()); 763 insertStatement.setString(1, strValue); 764 iInsertCount = insertStatement.executeUpdate(); 765 766 selectStatement = dbConnection.createStatement(); 767 768 rsResults = selectStatement.executeQuery("SELECT LAST_INSERT_ID() FROM generatedkey_test"); 769 if (rsResults.next()) 770 { 771 iGeneratedKey = rsResults.getInt(1); 772 773 returnValues = new int[2]; 774 returnValues[0] = iInsertCount; 775 returnValues[1] = iGeneratedKey; 776 } 777 } 778 finally 779 { 780 DatabaseUtils.closeStatement(insertStatement); 781 DatabaseUtils.closeResultSetAndStatement(rsResults, selectStatement); 782 } 783 784 return returnValues; 785 } 786 787 788 791 public int executeUpdateTestValue( 792 Connection dbConnection, 793 String strOldValue, 794 String strNewValue 795 ) throws SQLException 796 { 797 PreparedStatement updateStatement = null; 798 int iUpdateCount = 0; 799 800 try 801 { 802 updateStatement = dbConnection.prepareStatement( 803 "update TRANSACTION_TEST set TEST_VALUE = ? where TEST_VALUE = ?"); 804 updateStatement.setString(1, strNewValue); 805 updateStatement.setString(2, strOldValue); 806 807 iUpdateCount = updateStatement.executeUpdate(); 811 } 812 finally 813 { 814 DatabaseUtils.closeStatement(updateStatement); 815 } 816 817 return iUpdateCount; 818 } 819 820 823 public int[] executeInsertRow( 824 Connection dbConnection, 825 String strValue) 826 throws SQLException 827 { 828 PreparedStatement insertStatement = null; 829 Statement selectStatement = null; 830 ResultSet rsResults = null; 831 int iInsertCount = 0; 832 int iInsertCountReturnedFromSP = 0; 833 int[] returnValues = null; 834 835 try 836 { 837 insertStatement = dbConnection.prepareStatement(getInsertGeneratedKey()); 838 insertStatement.setString(1, strValue); 839 iInsertCount = insertStatement.executeUpdate(); 840 841 selectStatement = dbConnection.createStatement(); 842 843 849 returnValues = new int[2]; 850 851 returnValues[0] = iInsertCount; 853 854 returnValues[1] = iInsertCountReturnedFromSP; 857 } 859 finally 860 { 861 DatabaseUtils.closeStatement(insertStatement); 862 DatabaseUtils.closeResultSetAndStatement(rsResults, selectStatement); 863 } 864 return returnValues; 866 } 867 868 871 public void createTestUser( 872 Connection cntAdminDBConnection, 873 String strDatabaseURL, 874 String strUserName, 875 String strUserPassword 876 ) throws SQLException 877 { 878 Statement stmQuery = null; 879 try 880 { 881 String strDatabaseName = strDatabaseURL.substring( 883 strDatabaseURL.lastIndexOf("/") + 1, 884 strDatabaseURL.length()); 885 886 String strCreateUserQuery = "GRANT Select, Insert, Update, Delete, Index, Alter, " + 887 "Create, Drop, References ON " + strDatabaseName + ".* TO '" + 888 strUserName + "'@'localhost' IDENTIFIED BY '" 889 + strUserPassword + "'"; 890 891 stmQuery = cntAdminDBConnection.createStatement(); 892 893 if (stmQuery.execute(strCreateUserQuery)) 894 { 895 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 897 } 898 } 899 finally 900 { 901 DatabaseUtils.closeStatement(stmQuery); 902 } 903 } 904 905 908 public void dropTestUser( 909 Connection cntAdminDBConnection, 910 String strDatabaseURL, 911 String strUserName 912 ) throws SQLException 913 { 914 Statement stmQuery = null; 915 try 916 { 917 String strHost = strDatabaseURL.substring( 919 strDatabaseURL.indexOf("://") + 3, 920 strDatabaseURL.lastIndexOf("/")); 921 922 String strDropUserQuery = "DELETE FROM mysql.user WHERE User='" + strUserName + "' " + 923 "AND Host='" + strHost + "'"; 924 925 stmQuery = cntAdminDBConnection.createStatement(); 926 927 if (stmQuery.execute(strDropUserQuery)) 928 { 929 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 931 } 932 } 933 finally 934 { 935 DatabaseUtils.closeStatement(stmQuery); 936 } 937 } 938 } 939 | Popular Tags |