| 1 21 22 package org.opensubsystems.core.persist.db.driver.oracle; 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 OracleDatabaseTestSchema extends DatabaseTestSchema 48 { 49 217 218 220 223 private static Logger s_logger = Log.getInstance(OracleDatabaseTestSchema.class); 224 225 227 232 public OracleDatabaseTestSchema( 233 ) throws OSSException 234 { 235 super(); 236 } 237 238 240 243 public void create( 244 Connection cntDBConnection, 245 String strUserName 246 ) throws SQLException  247 { 248 252 Statement stmQuery = null; 254 try 255 { 256 stmQuery = cntDBConnection.createStatement(); 257 258 260 if (stmQuery.execute("CREATE SEQUENCE generatedkey_test_seq " + 261 "INCREMENT BY 1 START WITH 1 NOCYCLE")) 262 { 263 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 265 } 266 s_logger.log(Level.FINEST, "Sequence GENERATEDKEY_TEST_SEQ created."); 267 277 278 280 if (stmQuery.execute("CREATE TABLE GENERATEDKEY_TEST" + NL + 281 "(" + NL + 282 " TEST_KEY INTEGER NOT NULL PRIMARY KEY," + NL + 283 " TEST_VALUE VARCHAR(50) NOT NULL" + NL + 284 ")")) 285 { 286 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 288 } 289 s_logger.log(Level.FINEST, "Table GENERATEDKEY_TEST created."); 290 300 301 303 if (stmQuery.execute("CREATE TABLE RESULTSET_TEST" + NL + 304 "(" + NL + 305 " RESULTSET_TEST VARCHAR(20) NOT NULL" + NL + 306 ")")) 307 { 308 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 310 } 311 s_logger.log(Level.FINEST, "Table RESULTSET_TEST created."); 312 322 323 325 if (stmQuery.execute("CREATE TABLE DATE_TEST" + NL + 326 "(" + NL + 327 " DATE_TEST DATE NOT NULL" + NL + 328 ")")) 329 { 330 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 332 } 333 s_logger.log(Level.FINEST, "Table DATE_TEST created."); 334 344 345 347 if (stmQuery.execute("CREATE TABLE TIME_TEST" + NL + 348 "(" + NL + 349 " TIME_TEST TIMESTAMP(9) NOT NULL" + NL + 350 ")")) 351 { 352 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 354 } 355 s_logger.log(Level.FINEST, "Table TIME_TEST created."); 356 366 367 369 if (stmQuery.execute("CREATE TABLE TIMESTAMP_TEST" + NL + 370 "(" + NL + 371 " TIMESTAMP_TEST TIMESTAMP(9) NOT NULL" + NL + 372 ")")) 373 { 374 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 376 } 377 s_logger.log(Level.FINEST, "Table TIMESTAMP_TEST created."); 378 388 389 391 if (stmQuery.execute("CREATE TABLE TRANSACTION_TEST" + NL + 392 "(" + NL + 393 " TEST_ID INTEGER NOT NULL," + NL + 394 " TEST_VALUE VARCHAR(50) NOT NULL," + NL + 395 " CONSTRAINT TEST_ID_PK PRIMARY KEY (TEST_ID)" + NL + 396 ")")) 397 { 398 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 400 } 401 s_logger.log(Level.FINEST, "Table TRANSACTION_TEST created."); 402 412 413 415 if (stmQuery.execute("CREATE TABLE TRANSACTION_RELATED_TEST" + NL + 416 "(" + NL + 417 " TEST_REL_ID INTEGER NOT NULL," + NL + 418 " TEST_ID INTEGER NOT NULL," + NL + 419 " TEST_VALUE VARCHAR(50)," + NL + 420 " CONSTRAINT TEST_ID_FK FOREIGN KEY (TEST_ID)" + NL + 421 " REFERENCES TRANSACTION_TEST (TEST_ID) ON DELETE CASCADE" + NL + 422 ")")) 423 { 424 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 426 } 427 s_logger.log(Level.FINEST, "Table TRANSACTION_RELATED_TEST created."); 428 438 439 441 if (stmQuery.execute("CREATE TABLE DELETE_TEST" + NL + 442 "(" + 443 " TEST_ID INTEGER NOT NULL," + NL + 444 " TEST_VALUE VARCHAR(50) NOT NULL," + NL + 445 " CONSTRAINT DTEST_ID_PK PRIMARY KEY (TEST_ID)" + NL + 446 ")")) 447 { 448 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 450 } 451 s_logger.log(Level.FINEST, "Table DELETE_TEST created."); 452 462 463 465 if (stmQuery.execute("CREATE TABLE DELETE_RELATED_TEST" + NL + 466 "(" + NL + 467 " TEST_REL_ID INTEGER NOT NULL," + NL + 468 " TEST_ID INTEGER NOT NULL," + NL + 469 " TEST_VALUE VARCHAR(50)," + NL + 470 " CONSTRAINT DTEST_ID_FK FOREIGN KEY (TEST_ID)" + NL + 471 " REFERENCES DELETE_TEST (TEST_ID) ON DELETE CASCADE" + NL + 472 ")")) 473 { 474 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 476 } 477 s_logger.log(Level.FINEST, "Table DELETE_RELATED_TEST created."); 478 488 489 491 if (stmQuery.execute("CREATE TABLE ROLLBACK_TEST" + NL + 492 "(" + NL + 493 " TEST_COLUMN VARCHAR(50) NOT NULL," + NL + 494 " CONSTRAINT TEST_COLUMN_UQ UNIQUE (TEST_COLUMN)" + NL + 495 ")")) 496 { 497 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 499 } 500 s_logger.log(Level.FINEST, "Table TRANSACTION_TEST created."); 501 511 512 514 if (stmQuery.execute("CREATE TABLE OWN_FK_TEST " + NL + 515 "( " + NL + 516 " TEST_ID INTEGER NOT NULL, " + NL + 517 " FK_ID INTEGER," + NL + 518 " CONSTRAINT OWN_FK_TEST_PK PRIMARY KEY (TEST_ID), " + NL + 519 " CONSTRAINT OWN_FK_TEST_FK FOREIGN KEY (FK_ID) " + NL + 520 " REFERENCES OWN_FK_TEST (TEST_ID)" + NL + 521 ")")) 522 { 523 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 525 } 526 s_logger.log(Level.FINEST, "Table OWN_FK_TEST created."); 527 537 538 540 if (stmQuery.execute("CREATE TABLE GROUP_BASE_TEST" + NL + 541 "(" + NL + 542 " TEST_BASE_ID INTEGER NOT NULL, " + NL + 543 " TEST_BASE_VALUE INTEGER," + NL + 544 " CONSTRAINT GROUP_BASE_TEST_PK PRIMARY KEY (TEST_BASE_ID)" + NL + 545 ")")) 546 { 547 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 549 } 550 s_logger.log(Level.FINEST, "Table GROUP_BASE_TEST created."); 551 561 562 564 if (stmQuery.execute( 565 "CREATE TABLE GROUP_CHILD_TEST" + NL + 566 "(" + NL + 567 " TEST_CHILD_ID INTEGER NOT NULL, " + NL + 568 " TEST_BASE_FK_ID INTEGER NOT NULL, " + NL + 569 " TEST_CHILD_VALUE INTEGER," + NL + 570 " CONSTRAINT GROUP_CHILD_TEST_PK PRIMARY KEY (TEST_CHILD_ID)," + NL + 571 " CONSTRAINT TEST_BASE_ID_FK FOREIGN KEY (TEST_BASE_FK_ID) " + NL + 572 " REFERENCES GROUP_BASE_TEST (TEST_BASE_ID) ON DELETE CASCADE" + NL + 573 ")")) 574 { 575 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 577 } 578 s_logger.log(Level.FINEST, "Table GROUP_CHILD_TEST created."); 579 589 590 592 if (stmQuery.execute("CREATE TABLE SAME_TEST1" + NL + 593 "(" + NL + 594 " ID INTEGER NOT NULL" + NL + 595 ")")) 596 { 597 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 599 } 600 s_logger.log(Level.FINEST, "Table SAME_TEST1 created."); 601 611 612 614 if (stmQuery.execute("CREATE TABLE SAME_TEST2 " + NL + 615 "(" + NL + 616 " ID INTEGER NOT NULL" + NL + 617 ")")) 618 { 619 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 621 } 622 s_logger.log(Level.FINEST, "Table SAME_TEST2 created."); 623 633 634 636 if (stmQuery.execute("CREATE TABLE POOL_TEST " + NL + 637 "(" + NL + 638 " TEST_VALUE INTEGER NOT NULL," + NL + 639 " CONSTRAINT TEST_VALUE1_PK PRIMARY KEY (TEST_VALUE)" + NL + 640 ")")) 641 { 642 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 644 } 645 s_logger.log(Level.FINEST, "Table POOL_TEST created."); 646 656 657 659 if (stmQuery.execute("CREATE TABLE POOL_TEST2 " + NL + 660 "(" + NL + 661 " TEST_VALUE INTEGER NOT NULL," + NL + 662 " CONSTRAINT TEST_VALUE2_PK PRIMARY KEY (TEST_VALUE)" + NL + 663 ")")) 664 { 665 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 667 } 668 s_logger.log(Level.FINEST, "Table POOL_TEST2 created."); 669 679 680 682 if (stmQuery.execute("CREATE TABLE QUERY_TEST " + NL + 683 "(" + NL + 684 " VALUE_1 INTEGER NOT NULL," + NL + 685 " VALUE_2 INTEGER NOT NULL" + NL + 686 ")")) 687 { 688 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 690 } 691 s_logger.log(Level.FINEST, "Table QUERY_TEST created."); 692 702 703 705 if (stmQuery.execute("CREATE TABLE QUERY_TEST_EXCEPT " + NL + 706 "(" + NL + 707 " VALUE_1 INTEGER NOT NULL" + NL + 708 ")")) 709 { 710 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 712 } 713 s_logger.log(Level.FINEST, "Table QUERY_TEST_EXCEPT created."); 714 724 725 727 if (stmQuery.execute("CREATE TABLE UNIQUE_COLUMN_TEST " + NL + 728 "(" + NL + 729 " TEST_ID INTEGER, " + NL + 730 " CONSTRAINT TEST_ID_UQ UNIQUE (TEST_ID) " + NL + 731 ")")) 732 { 733 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 735 } 736 s_logger.log(Level.FINEST, "Table UNIQUE_COLUMN_TEST created."); 737 747 748 750 if (stmQuery.execute("CREATE TABLE NULL_COLUMN_TEST " + NL + 751 "(" + NL + 752 " NAME VARCHAR(50)" + NL + 753 ")")) 754 { 755 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 757 } 758 s_logger.log(Level.FINEST, "Table NULL_COLUMN_TEST created."); 759 769 770 772 if (stmQuery.execute("CREATE OR REPLACE PROCEDURE INSERT_GENERATEDKEY_TEST( " + NL + 773 "IN_VALUE IN VARCHAR, " + NL + 774 "OUT_KEY OUT INTEGER" + NL + 775 ") IS " + NL + 776 "GEN_VAL INTEGER; " + NL + 777 "BEGIN " + NL + 778 " SELECT GENERATEDKEY_TEST_SEQ.NEXTVAL INTO GEN_VAL FROM DUAL; " + NL + 779 " INSERT INTO GENERATEDKEY_TEST(TEST_KEY, TEST_VALUE) " + NL + 780 " VALUES (GEN_VAL, IN_VALUE); " + NL + 781 " OUT_KEY := GEN_VAL; " + NL + 782 "END;")) 783 { 784 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 786 } 787 s_logger.log(Level.FINEST, "Procedure INSERT_GENERATEDKEY_TEST created."); 788 798 799 801 if (stmQuery.execute("CREATE OR REPLACE PROCEDURE INSERT_ROW_COUNT_TEST( " + NL + 802 "IN_VALUE IN VARCHAR, " + NL + 803 "OUT_ROWS OUT INTEGER " + NL + 804 ") IS " + 805 "GEN_VAL INTEGER; " + NL + 806 "BEGIN " + NL + 807 " SELECT GENERATEDKEY_TEST_SEQ.NEXTVAL INTO GEN_VAL FROM DUAL; " + NL + 808 " INSERT INTO GENERATEDKEY_TEST(TEST_KEY, TEST_VALUE) " + NL + 809 " VALUES (GEN_VAL, IN_VALUE); " + NL + 810 " OUT_ROWS := SQL%ROWCOUNT;" + NL + 811 "END; ")) 812 { 813 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 815 } 816 s_logger.log(Level.FINEST, "Procedure INSERT_ROW_COUNT_TEST created."); 817 827 828 830 if (stmQuery.execute("CREATE OR REPLACE PROCEDURE UPDATE_TRANSACTION_TEST_VALUE( " + NL + 831 "IN_OLD_TEST_VALUE IN VARCHAR, " + NL + 832 "IN_NEW_TEST_VALUE IN VARCHAR " + NL + 833 ") IS " + NL + 834 "BEGIN " + NL + 835 " UPDATE " + strUserName + ".TRANSACTION_TEST SET " + NL + 836 " TEST_VALUE = IN_NEW_TEST_VALUE " + NL + 837 " WHERE TEST_VALUE = IN_OLD_TEST_VALUE; " + NL + 838 "END; ")) 839 840 { 841 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 843 } 844 s_logger.log(Level.FINEST, "Procedure UPDATE_TRANSACTION_TEST_VALUE created."); 845 855 856 } 857 catch (SQLException sqleExc) 858 { 859 s_logger.log(Level.WARNING, "Failed to create database test schema.", 860 sqleExc); 861 throw sqleExc; 862 } 863 finally 864 { 865 DatabaseUtils.closeStatement(stmQuery); 866 } 867 } 868 869 872 public String getSelectExceptQuery() 873 { 874 return "select value_1 from query_test_except where value_1 in (?, ?, ?) " + 875 "minus select value_1 from query_test_except where value_1 in (?, ?) " + 876 "minus select value_1 from query_test_except where value_1 in (?, ?)"; 877 } 878 879 882 public String getSelectExceptUnionQuery() 883 { 884 return "select value_1 from query_test_except where value_1 in (?, ?, ?) " + 885 "minus select value_1 from query_test_except where value_1 in (?, ?) " + 886 "union select value_1 from query_test_except where value_1 in (?, ?)"; 887 } 888 889 892 public String getSelectExistQuery() 893 { 894 return "select VALUE_1 from QUERY_TEST QT where exists " + 895 "(select 1 from QUERY_TEST QT1 where QT1.VALUE_2 = QT.VALUE_1)"; 896 } 897 898 901 public String getInsertGeneratedKey( 902 ) 903 { 904 return "INSERT INTO generatedkey_test(test_key, test_value) " + 905 "VALUES (generatedkey_test_seq.NEXTVAL, ?)"; 906 } 907 908 911 public int[] executeInsertGeneratedKey2( 912 Connection dbConnection, 913 String strValue 914 ) throws SQLException  915 { 916 CallableStatement insertStatement = null; 917 int iInsertCount = 0; 918 int iGeneratedKey = 0; 919 int[] returnValues = null; 920 921 try 922 { 923 insertStatement = dbConnection.prepareCall( 924 "{CALL INSERT_GENERATEDKEY_TEST(?, ?)}"); 925 insertStatement.setString(1, strValue); 926 insertStatement.registerOutParameter(2, Types.INTEGER); 927 928 iInsertCount = insertStatement.executeUpdate(); 929 iGeneratedKey = insertStatement.getInt(2); 930 931 returnValues = new int[2]; 932 returnValues[0] = iInsertCount; 933 returnValues[1] = iGeneratedKey; 934 } 935 finally 936 { 937 DatabaseUtils.closeStatement(insertStatement); 938 } 939 940 return returnValues; 941 } 942 943 946 public int executeUpdateTestValue( 947 Connection dbConnection, 948 String strOldValue, 949 String strNewValue 950 ) throws SQLException  951 { 952 CallableStatement updateStatement = null; 953 int iUpdateCount = 0; 954 955 try 956 { 957 updateStatement = dbConnection.prepareCall("{CALL UPDATE_TRANSACTION_TEST_VALUE(?,?)}"); 958 updateStatement.setString(1, strOldValue); 959 updateStatement.setString(2, strNewValue); 960 961 iUpdateCount = updateStatement.executeUpdate(); 964 } 965 finally 966 { 967 DatabaseUtils.closeStatement(updateStatement); 968 } 969 970 return iUpdateCount; 971 } 972 973 976 public int[] executeInsertRow( 977 Connection dbConnection, 978 String strValue) 979 throws SQLException  980 { 981 CallableStatement insertStatement = null; 982 int iInsertCount = 0; 983 int iInsertCountReturnedFromSP = 0; 984 int[] returnValues = null; 985 986 try 987 { 988 insertStatement = dbConnection.prepareCall( 989 "{CALL INSERT_ROW_COUNT_TEST(?, ?)}"); 990 insertStatement.setString(1, strValue); 991 insertStatement.registerOutParameter(2, Types.INTEGER); 992 993 iInsertCount = insertStatement.executeUpdate(); 994 iInsertCountReturnedFromSP = insertStatement.getInt(2); 995 996 returnValues = new int[2]; 997 998 returnValues[0] = iInsertCount; 1000 1001 returnValues[1] = iInsertCountReturnedFromSP; 1003 } 1004 finally 1005 { 1006 DatabaseUtils.closeStatement(insertStatement); 1007 } 1008 1009 return returnValues; 1010 } 1011 1012 1015 public void createTestUser( 1016 Connection cntAdminDBConnection, 1017 String strDatabaseURL, 1018 String strUserName, 1019 String strUserPassword 1020 ) throws SQLException  1021 { 1022 Statement stmQuery = null; 1023 StringBuffer buffer = new StringBuffer (); 1024 try 1025 { 1026 buffer.append("CREATE USER "); 1028 buffer.append(strUserName); 1029 buffer.append(" PROFILE DEFAULT IDENTIFIED BY "); 1030 buffer.append(strUserPassword); 1031 buffer.append(" DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP ACCOUNT UNLOCK "); 1032 1033 stmQuery = cntAdminDBConnection.createStatement(); 1034 if (stmQuery.execute(buffer.toString())) 1035 { 1036 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 1038 } 1039 1040 buffer.delete(0, buffer.length()); 1042 buffer.append("ALTER USER "); 1043 buffer.append(strUserName); 1044 buffer.append(" QUOTA UNLIMITED ON USERS"); 1045 1046 stmQuery = cntAdminDBConnection.createStatement(); 1047 if (stmQuery.execute(buffer.toString())) 1048 { 1049 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 1051 } 1052 1053 buffer.delete(0, buffer.length()); 1055 buffer.append("GRANT CONNECT, CREATE PROCEDURE TO "); 1056 buffer.append(strUserName); 1057 1058 stmQuery = cntAdminDBConnection.createStatement(); 1059 if (stmQuery.execute(buffer.toString())) 1060 { 1061 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 1063 } 1064 1065 } 1066 finally 1067 { 1068 DatabaseUtils.closeStatement(stmQuery); 1069 } 1070 } 1071 1072 1075 public void dropTestUser( 1076 Connection cntAdminDBConnection, 1077 String strDatabaseURL, 1078 String strUserName 1079 ) throws SQLException  1080 { 1081 Statement stmQuery = null; 1082 try 1083 { 1084 String strDropUserQuery = "DROP USER " + strUserName; 1085 1086 stmQuery = cntAdminDBConnection.createStatement(); 1087 1088 if (stmQuery.execute(strDropUserQuery)) 1089 { 1090 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 1092 } 1093 } 1094 finally 1095 { 1096 DatabaseUtils.closeStatement(stmQuery); 1097 } 1098 } 1099} 1100 | Popular Tags |