1 21 22 package org.opensubsystems.core.persist.db.driver.db2; 23 24 import java.sql.CallableStatement ; 25 import java.sql.Connection ; 26 import java.sql.SQLException ; 27 import java.sql.Statement ; 28 import java.sql.Types ; 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 DB2DatabaseTestSchema extends DatabaseTestSchema 48 { 49 227 228 230 233 private static Logger s_logger = Log.getInstance(DB2DatabaseTestSchema.class); 234 235 237 242 public DB2DatabaseTestSchema( 243 ) throws OSSException 244 { 245 super(); 246 } 247 248 250 253 public String getInsertSelectQuery() 254 { 255 return "insert into QUERY_TEST (VALUE_1, VALUE_2) " + 256 "select CAST(? AS INTEGER), VALUE_2 from QUERY_TEST where VALUE_2=1"; 257 } 258 259 262 public void create( 263 Connection cntDBConnection, 264 String strUserName 265 ) throws SQLException 266 { 267 272 Statement stmQuery = null; 274 try 275 { 276 stmQuery = cntDBConnection.createStatement(); 277 278 if (stmQuery.execute("CREATE SEQUENCE generatedkey_test_seq " + 279 "INCREMENT BY 1 START WITH 1 NO CYCLE")) 280 { 281 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 283 } 284 s_logger.log(Level.FINEST, "Sequence GENERATEDKEY_TEST_SEQ created."); 285 295 296 298 if (stmQuery.execute("CREATE TABLE RESULTSET_TEST" + NL + 299 "(" + NL + 300 " RESULTSET_TEST VARCHAR(20) NOT NULL" + NL + 301 ")")) 302 { 303 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 305 } 306 s_logger.log(Level.FINEST, "Table RESULTSET_TEST created."); 307 317 318 320 if (stmQuery.execute("CREATE TABLE DATE_TEST" + NL + 321 "(" + NL + 322 " DATE_TEST DATE NOT NULL" + NL + 323 ")")) 324 { 325 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 327 } 328 s_logger.log(Level.FINEST, "Table DATE_TEST created."); 329 339 340 342 if (stmQuery.execute("CREATE TABLE TIME_TEST" + NL + 343 "(" + NL + 344 " TIME_TEST TIME NOT NULL" + NL + 345 ")")) 346 { 347 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 349 } 350 s_logger.log(Level.FINEST, "Table TIME_TEST created."); 351 361 362 364 if (stmQuery.execute("CREATE TABLE TIMESTAMP_TEST" + NL + 365 "(" + NL + 366 " TIMESTAMP_TEST TIMESTAMP NOT NULL" + NL + 367 ")")) 368 { 369 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 371 } 372 s_logger.log(Level.FINEST, "Table TIMESTAMP_TEST created."); 373 383 384 386 if (stmQuery.execute("CREATE TABLE TRANSACTION_TEST" + NL + 387 "(" + NL + 388 " TEST_ID INTEGER NOT NULL," + NL + 389 " TEST_VALUE VARCHAR(50) NOT NULL," + NL + 390 " CONSTRAINT TEST_ID_PK PRIMARY KEY (TEST_ID)" + NL + 391 ")")) 392 { 393 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 395 } 396 s_logger.log(Level.FINEST, "Table TRANSACTION_TEST created."); 397 407 408 410 if (stmQuery.execute("CREATE TABLE TRANSACTION_RELATED_TEST" + NL + 411 "(" + NL + 412 " TEST_REL_ID INTEGER NOT NULL," + NL + 413 " TEST_ID INTEGER NOT NULL," + NL + 414 " TEST_VALUE VARCHAR(50)," + NL + 415 " CONSTRAINT TEST_ID_FK FOREIGN KEY (TEST_ID)" + NL + 416 " REFERENCES TRANSACTION_TEST (TEST_ID) ON DELETE CASCADE" + NL + 417 ")")) 418 { 419 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 421 } 422 s_logger.log(Level.FINEST, "Table TRANSACTION_RELATED_TEST created."); 423 433 434 436 if (stmQuery.execute("CREATE TABLE DELETE_TEST" + NL + 437 "(" + 438 " TEST_ID INTEGER NOT NULL," + NL + 439 " TEST_VALUE VARCHAR(50) NOT NULL," + NL + 440 " CONSTRAINT DTEST_ID_PK PRIMARY KEY (TEST_ID)" + NL + 441 ")")) 442 { 443 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 445 } 446 s_logger.log(Level.FINEST, "Table DELETE_TEST created."); 447 457 458 460 if (stmQuery.execute("CREATE TABLE DELETE_RELATED_TEST" + NL + 461 "(" + NL + 462 " TEST_REL_ID INTEGER NOT NULL," + NL + 463 " TEST_ID INTEGER NOT NULL," + NL + 464 " TEST_VALUE VARCHAR(50)," + NL + 465 " CONSTRAINT DTEST_ID_FK FOREIGN KEY (TEST_ID)" + NL + 466 " REFERENCES DELETE_TEST (TEST_ID) ON DELETE CASCADE" + NL + 467 ")")) 468 { 469 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 471 } 472 s_logger.log(Level.FINEST, "Table DELETE_RELATED_TEST created."); 473 483 484 486 if (stmQuery.execute("CREATE TABLE ROLLBACK_TEST" + NL + 487 "(" + NL + 488 " TEST_COLUMN VARCHAR(50) NOT NULL," + NL + 489 " CONSTRAINT TEST_COLUMN_UQ UNIQUE (TEST_COLUMN)" + NL + 490 ")")) 491 { 492 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 494 } 495 s_logger.log(Level.FINEST, "Table TRANSACTION_TEST created."); 496 506 507 509 if (stmQuery.execute("CREATE TABLE OWN_FK_TEST " + NL + 510 "( " + NL + 511 " TEST_ID INTEGER NOT NULL, " + NL + 512 " FK_ID INTEGER," + NL + 513 " CONSTRAINT OWN_FK_TEST_PK PRIMARY KEY (TEST_ID), " + NL + 514 " CONSTRAINT OWN_FK_TEST_FK FOREIGN KEY (FK_ID) " + NL + 515 " REFERENCES OWN_FK_TEST (TEST_ID) ON DELETE CASCADE" + NL + 516 ")")) 517 { 518 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 520 } 521 s_logger.log(Level.FINEST, "Table OWN_FK_TEST created."); 522 532 533 535 if (stmQuery.execute("CREATE TABLE GROUP_BASE_TEST" + NL + 536 "(" + NL + 537 " TEST_BASE_ID INTEGER NOT NULL, " + NL + 538 " TEST_BASE_VALUE INTEGER," + NL + 539 " CONSTRAINT GROUP_BASE_TEST_PK PRIMARY KEY (TEST_BASE_ID)" + NL + 540 ")")) 541 { 542 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 544 } 545 s_logger.log(Level.FINEST, "Table GROUP_BASE_TEST created."); 546 556 557 559 if (stmQuery.execute( 560 "CREATE TABLE GROUP_CHILD_TEST" + NL + 561 "(" + NL + 562 " TEST_CHILD_ID INTEGER NOT NULL, " + NL + 563 " TEST_BASE_FK_ID INTEGER NOT NULL, " + NL + 564 " TEST_CHILD_VALUE INTEGER," + NL + 565 " CONSTRAINT GROUP_CH_TEST_PK PRIMARY KEY (TEST_CHILD_ID)," + NL + 566 " CONSTRAINT TEST_BASE_ID_FK FOREIGN KEY (TEST_BASE_FK_ID) " + NL + 567 " REFERENCES GROUP_BASE_TEST (TEST_BASE_ID) ON DELETE CASCADE" + NL + 568 ")")) 569 { 570 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 572 } 573 s_logger.log(Level.FINEST, "Table GROUP_CHILD_TEST created."); 574 584 585 587 if (stmQuery.execute("CREATE TABLE SAME_TEST1" + NL + 588 "(" + NL + 589 " ID INTEGER NOT NULL" + NL + 590 ")")) 591 { 592 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 594 } 595 s_logger.log(Level.FINEST, "Table SAME_TEST1 created."); 596 606 607 609 if (stmQuery.execute("CREATE TABLE SAME_TEST2 " + NL + 610 "(" + NL + 611 " ID INTEGER NOT NULL" + NL + 612 ")")) 613 { 614 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 616 } 617 s_logger.log(Level.FINEST, "Table SAME_TEST2 created."); 618 628 629 631 if (stmQuery.execute("CREATE TABLE POOL_TEST " + NL + 632 "(" + NL + 633 " TEST_VALUE INTEGER NOT NULL," + NL + 634 " CONSTRAINT TEST_VALUE1_PK PRIMARY KEY (TEST_VALUE)" + NL + 635 ")")) 636 { 637 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 639 } 640 s_logger.log(Level.FINEST, "Table POOL_TEST created."); 641 651 652 654 if (stmQuery.execute("CREATE TABLE POOL_TEST2 " + NL + 655 "(" + NL + 656 " TEST_VALUE INTEGER NOT NULL," + NL + 657 " CONSTRAINT TEST_VALUE2_PK PRIMARY KEY (TEST_VALUE)" + NL + 658 ")")) 659 { 660 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 662 } 663 s_logger.log(Level.FINEST, "Table POOL_TEST2 created."); 664 674 675 677 if (stmQuery.execute("CREATE TABLE QUERY_TEST " + NL + 678 "(" + NL + 679 " VALUE_1 INTEGER NOT NULL," + NL + 680 " VALUE_2 INTEGER NOT NULL" + NL + 681 ")")) 682 { 683 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 685 } 686 s_logger.log(Level.FINEST, "Table QUERY_TEST created."); 687 697 698 700 if (stmQuery.execute("CREATE TABLE QUERY_TEST_EXCEPT " + NL + 701 "(" + NL + 702 " VALUE_1 INTEGER NOT NULL" + NL + 703 ")")) 704 { 705 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 707 } 708 s_logger.log(Level.FINEST, "Table QUERY_TEST_EXCEPT created."); 709 719 720 722 if (stmQuery.execute("CREATE TABLE GENERATEDKEY_TEST" + NL + 723 "(" + NL + 724 " TEST_KEY INTEGER NOT NULL PRIMARY KEY," + NL + 725 " TEST_VALUE VARCHAR(50) NOT NULL" + NL + 726 ")")) 727 { 728 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 730 } 731 s_logger.log(Level.FINEST, "Table GENERATEDKEY_TEST created."); 732 742 if (stmQuery.execute("CREATE TABLE UNIQUE_COLUMN_TEST " + NL + 744 "(" + NL + 745 " TEST_ID INTEGER NOT NULL, " + NL + 746 " CONSTRAINT TEST_ID_UQ UNIQUE (TEST_ID) " + NL + 747 ")")) 748 { 749 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 751 } 752 s_logger.log(Level.FINEST, "Table UNIQUE_COLUMN_TEST created."); 753 763 764 766 if (stmQuery.execute("CREATE TABLE NULL_COLUMN_TEST " + NL + 767 "(" + NL + 768 " NAME VARCHAR(50)" + NL + 769 ")")) 770 { 771 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 773 } 774 s_logger.log(Level.FINEST, "Table NULL_COLUMN_TEST created."); 775 785 786 788 789 if (stmQuery.execute("CREATE PROCEDURE insert_generatedkey_test (" + 790 " IN in_value VARCHAR(50), " + 791 " OUT out_key INTEGER, " + 792 " OUT out_rows INTEGER) " + 793 "LANGUAGE SQL SPECIFIC insert_genkey_test " + 794 "BEGIN " + 795 " DECLARE new_out_key INTEGER DEFAULT -1; " + 796 " DECLARE rows_inserted INTEGER DEFAULT 0; " + 797 " SET new_out_key = NEXT VALUE FOR generatedkey_test_seq; " + 798 " INSERT INTO GENERATEDKEY_TEST(test_key, test_value) " + 799 " VALUES (new_out_key, in_value); " + 800 " GET DIAGNOSTICS rows_inserted = ROW_COUNT; " + 801 " SET out_key = new_out_key; " + 802 " SET out_rows = rows_inserted; " + 803 "END")) 804 { 805 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 807 } 808 s_logger.log(Level.FINEST, "Procedure INSERT_GENERATEDKEY_TEST created."); 809 819 820 822 if (stmQuery.execute("CREATE PROCEDURE insert_row_count_test (" + 823 " IN in_value VARCHAR(50), " + 824 " OUT out_rows INTEGER) " + 825 "LANGUAGE SQL SPECIFIC insert_rowc_test " + 826 "BEGIN " + 827 " DECLARE rows_inserted INTEGER DEFAULT 0; " + 828 " INSERT INTO GENERATEDKEY_TEST(test_key, test_value) " + 829 " VALUES (NEXT VALUE FOR generatedkey_test_seq, in_value); " + 830 " GET DIAGNOSTICS rows_inserted = ROW_COUNT; " + 831 " SET out_rows = rows_inserted; " + 832 "END")) 833 { 834 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 836 } 837 s_logger.log(Level.FINEST, "Procedure INSERT_ROW_COUNT_TEST created."); 838 848 849 851 if (stmQuery.execute("CREATE PROCEDURE update_transaction_test_value (" + 852 " IN IN_OLD_TEST_VALUE VARCHAR(50), " + 853 " IN IN_NEW_TEST_VALUE VARCHAR(50)) " + 854 "LANGUAGE SQL SPECIFIC update_tran_value " + 855 "BEGIN " + 856 " UPDATE transaction_test SET test_value = IN_NEW_TEST_VALUE " + 857 " WHERE test_value = IN_OLD_TEST_VALUE; " + 858 "END")) 859 { 860 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 862 } 863 s_logger.log(Level.FINEST, "Procedure UPDATE_TRANSACTION_TEST_VALUE created."); 864 874 } 875 catch (SQLException sqleExc) 876 { 877 s_logger.log(Level.WARNING, "Failed to create database test schema.", 878 sqleExc); 879 throw sqleExc; 880 } 881 finally 882 { 883 DatabaseUtils.closeStatement(stmQuery); 884 } 885 } 886 887 890 public String getInsertGeneratedKey( 891 ) 892 { 893 return "INSERT INTO generatedkey_test(test_key, test_value) " + 894 "VALUES (NEXTVAL FOR generatedkey_test_seq, ?)"; 895 } 896 897 900 public int[] executeInsertGeneratedKey2( 901 Connection dbConnection, 902 String strValue 903 ) throws SQLException 904 { 905 CallableStatement insertStatement = null; 906 int iInsertCount; 907 int iGeneratedKey = 0; 908 int[] returnValues = null; 909 910 try 911 { 912 insertStatement = dbConnection.prepareCall( 913 "call INSERT_GENERATEDKEY_TEST(?, ?, ?)"); 914 insertStatement.setString(1, strValue); 915 insertStatement.registerOutParameter(2, Types.INTEGER); 916 insertStatement.registerOutParameter(3, Types.INTEGER); 917 918 insertStatement.executeUpdate(); 920 iGeneratedKey = insertStatement.getInt(2); 921 iInsertCount = insertStatement.getInt(3); 922 923 returnValues = new int[2]; 924 returnValues[0] = iInsertCount; 925 returnValues[1] = iGeneratedKey; 926 } 927 finally 928 { 929 DatabaseUtils.closeStatement(insertStatement); 930 } 931 932 return returnValues; 933 } 934 935 938 public int executeUpdateTestValue( 939 Connection dbConnection, 940 String strOldValue, 941 String strNewValue 942 ) throws SQLException 943 { 944 CallableStatement updateStatement = null; 945 int iUpdateCount = 0; 946 947 try 948 { 949 updateStatement = dbConnection.prepareCall("call UPDATE_TRANSACTION_TEST_VALUE (?, ?)"); 950 updateStatement.setString(1, strOldValue); 951 updateStatement.setString(2, strNewValue); 952 953 updateStatement.executeUpdate(); 956 957 } 958 finally 959 { 960 DatabaseUtils.closeStatement(updateStatement); 961 } 962 963 return iUpdateCount; 964 } 965 966 969 public int[] executeInsertRow( 970 Connection dbConnection, 971 String strValue 972 ) throws SQLException 973 { 974 CallableStatement insertStatement = null; 975 int iInsertCount = 0; 976 int iInsertCountReturnedFromSP = 0; 977 int[] returnValues = null; 978 979 try 980 { 981 insertStatement = dbConnection.prepareCall( 982 "call INSERT_ROW_COUNT_TEST(?, ?)"); 983 insertStatement.setString(1, strValue); 984 insertStatement.registerOutParameter(2, Types.INTEGER); 985 986 iInsertCount = insertStatement.executeUpdate(); 988 iInsertCountReturnedFromSP = insertStatement.getInt(2); 989 990 returnValues = new int[2]; 991 992 returnValues[0] = iInsertCount; 994 995 returnValues[1] = iInsertCountReturnedFromSP; 997 } 998 finally 999 { 1000 DatabaseUtils.closeStatement(insertStatement); 1001 } 1002 1003 return returnValues; 1004 } 1005 1006 1009 public void createTestUser( 1010 Connection cntAdminDBConnection, 1011 String strDatabaseURL, 1012 String strUserName, 1013 String strUserPassword 1014 ) throws SQLException 1015 { 1016 Statement stmQuery = null; 1017 try 1018 { 1019 String strCreateUserQuery = "GRANT CONNECT ON DATABASE TO USER " + strUserName; 1020 1021 stmQuery = cntAdminDBConnection.createStatement(); 1022 1023 if (stmQuery.execute(strCreateUserQuery)) 1024 { 1025 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 1027 } 1028 } 1029 finally 1030 { 1031 DatabaseUtils.closeStatement(stmQuery); 1032 } 1033 } 1034 1035 1038 public void dropTestUser( 1039 Connection cntAdminDBConnection, 1040 String strDatabaseURL, 1041 String strUserName 1042 ) throws SQLException 1043 { 1044 Statement stmQuery = null; 1045 try 1046 { 1047 String strDropUserQuery = "REVOKE CONNECT ON DATABASE FROM USER " + strUserName; 1048 1049 stmQuery = cntAdminDBConnection.createStatement(); 1050 1051 if (stmQuery.execute(strDropUserQuery)) 1052 { 1053 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 1055 } 1056 } 1057 finally 1058 { 1059 DatabaseUtils.closeStatement(stmQuery); 1060 } 1061 } 1062} 1063 | Popular Tags |