1 21 22 package org.opensubsystems.core.persist.db.driver; 23 24 import java.sql.Connection ; 25 import java.sql.SQLException ; 26 import java.sql.Statement ; 27 import java.util.HashMap ; 28 import java.util.Map ; 29 import java.util.logging.Level ; 30 import java.util.logging.Logger ; 31 32 import org.opensubsystems.core.error.OSSDatabaseAccessException; 33 import org.opensubsystems.core.error.OSSException; 34 import org.opensubsystems.core.persist.db.DatabaseConnectionFactory; 35 import org.opensubsystems.core.persist.db.ModifiableDatabaseSchemaImpl; 36 import org.opensubsystems.core.util.DatabaseUtils; 37 import org.opensubsystems.core.util.Log; 38 39 51 public abstract class DatabaseTestSchema extends ModifiableDatabaseSchemaImpl 52 { 53 179 180 182 185 public static final String DBTEST_SCHEMA_NAME = "DBTEST"; 186 187 190 public static final int DBTEST_SCHEMA_VERSION = 1; 191 192 195 public static final Map TABLE_NAMES; 196 197 199 202 private static Logger s_logger = Log.getInstance(DatabaseTestSchema.class); 203 204 206 209 static 210 { 211 TABLE_NAMES = new HashMap (); 214 TABLE_NAMES.put(new Integer (1), "RESULTSET_TEST"); 215 TABLE_NAMES.put(new Integer (2), "DATE_TEST"); 216 TABLE_NAMES.put(new Integer (3), "TIME_TEST"); 217 TABLE_NAMES.put(new Integer (4), "TIMESTAMP_TEST"); 218 TABLE_NAMES.put(new Integer (5), "TRANSACTION_TEST"); 219 TABLE_NAMES.put(new Integer (6), "TRANSACTION_RELATED_TEST"); 220 TABLE_NAMES.put(new Integer (7), "DELETE_TEST"); 221 TABLE_NAMES.put(new Integer (8), "DELETE_RELATED_TEST"); 222 TABLE_NAMES.put(new Integer (9), "OWN_FK_TEST"); 223 TABLE_NAMES.put(new Integer (10), "GROUP_BASE_TEST"); 224 TABLE_NAMES.put(new Integer (11), "GROUP_CHILD_TEST"); 225 TABLE_NAMES.put(new Integer (12), "SAME_TEST1"); 226 TABLE_NAMES.put(new Integer (13), "SAME_TEST2"); 227 TABLE_NAMES.put(new Integer (14), "POOL_TEST"); 228 TABLE_NAMES.put(new Integer (15), "POOL_TEST2"); 229 TABLE_NAMES.put(new Integer (16), "QUERY_TEST"); 230 TABLE_NAMES.put(new Integer (17), "QUERY_TEST_EXCEPT"); 231 TABLE_NAMES.put(new Integer (18), "UNIQUE_COLUMN_TEST"); 232 TABLE_NAMES.put(new Integer (19), "NULL_COLUMN_TEST"); 233 TABLE_NAMES.put(new Integer (20), "ROLLBACK_TEST"); 234 } 235 236 241 public DatabaseTestSchema( 242 ) throws OSSException 243 { 244 super(null, DBTEST_SCHEMA_NAME, DBTEST_SCHEMA_VERSION, true, TABLE_NAMES); 245 } 246 247 249 252 public void create( 253 Connection cntDBConnection, 254 String strUserName 255 ) throws SQLException 256 { 257 Statement stmQuery = null; 258 try 259 { 260 stmQuery = cntDBConnection.createStatement(); 261 if (stmQuery.execute("CREATE TABLE RESULTSET_TEST" + NL + 262 "(" + NL + 263 " RESULTSET_TEST VARCHAR(20) NOT NULL" + NL + 264 ")")) 265 { 266 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 268 } 269 s_logger.log(Level.FINEST, "Table RESULTSET_TEST created."); 270 280 281 283 if (stmQuery.execute("CREATE TABLE DATE_TEST" + NL + 284 "(" + NL + 285 " DATE_TEST DATE NOT NULL" + NL + 286 ")")) 287 { 288 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 290 } 291 s_logger.log(Level.FINEST, "Table DATE_TEST created."); 292 302 303 305 if (stmQuery.execute("CREATE TABLE TIME_TEST" + NL + 306 "(" + NL + 307 " TIME_TEST TIME NOT NULL" + NL + 308 ")")) 309 { 310 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 312 } 313 s_logger.log(Level.FINEST, "Table TIME_TEST created."); 314 324 325 327 if (stmQuery.execute("CREATE TABLE TIMESTAMP_TEST" + NL + 328 "(" + NL + 329 " TIMESTAMP_TEST TIMESTAMP NOT NULL" + NL + 330 ")")) 331 { 332 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 334 } 335 s_logger.log(Level.FINEST, "Table TIMESTAMP_TEST created."); 336 346 if (stmQuery.execute("CREATE TABLE TRANSACTION_TEST" + NL + 348 "(" + NL + 349 " TEST_ID INTEGER NOT NULL," + NL + 350 " TEST_VALUE VARCHAR(50) NOT NULL," + NL + 351 " CONSTRAINT TEST_ID_PK PRIMARY KEY (TEST_ID)" + NL + 352 ")")) 353 { 354 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 356 } 357 s_logger.log(Level.FINEST, "Table TRANSACTION_TEST created."); 358 368 369 if (stmQuery.execute("CREATE TABLE TRANSACTION_RELATED_TEST" + NL + 371 "(" + NL + 372 " TEST_REL_ID INTEGER NOT NULL," + NL + 373 " TEST_ID INTEGER NOT NULL," + NL + 374 " TEST_VALUE VARCHAR(50)," + NL + 375 " CONSTRAINT TEST_ID_FK FOREIGN KEY (TEST_ID)" + NL + 376 " REFERENCES TRANSACTION_TEST (TEST_ID) ON DELETE CASCADE" + NL + 377 ")")) 378 { 379 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 381 } 382 s_logger.log(Level.FINEST, "Table TRANSACTION_RELATED_TEST created."); 383 393 394 if (stmQuery.execute("CREATE TABLE DELETE_TEST" + NL + 396 "(" + 397 " TEST_ID INTEGER NOT NULL," + NL + 398 " TEST_VALUE VARCHAR(50) NOT NULL," + NL + 399 " CONSTRAINT DTEST_ID_PK PRIMARY KEY (TEST_ID)" + NL + 400 ")")) 401 { 402 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 404 } 405 s_logger.log(Level.FINEST, "Table DELETE_TEST created."); 406 416 if (stmQuery.execute("CREATE TABLE DELETE_RELATED_TEST" + NL + 418 "(" + NL + 419 " TEST_REL_ID INTEGER NOT NULL," + NL + 420 " TEST_ID INTEGER NOT NULL," + NL + 421 " TEST_VALUE VARCHAR(50)," + NL + 422 " CONSTRAINT DTEST_ID_FK FOREIGN KEY (TEST_ID)" + NL + 423 " REFERENCES DELETE_TEST (TEST_ID) ON DELETE CASCADE" + NL + 424 ")")) 425 { 426 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 428 } 429 s_logger.log(Level.FINEST, "Table DELETE_RELATED_TEST created."); 430 440 442 if (stmQuery.execute("CREATE TABLE ROLLBACK_TEST" + NL + 443 "(" + NL + 444 " TEST_COLUMN VARCHAR(50) NOT NULL," + NL + 445 " CONSTRAINT TEST_COLUMN_UQ UNIQUE (TEST_COLUMN)" + NL + 446 ")")) 447 { 448 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 450 } 451 s_logger.log(Level.FINEST, "Table TRANSACTION_TEST created."); 452 462 if (stmQuery.execute("CREATE TABLE OWN_FK_TEST " + NL + 464 "( " + NL + 465 " TEST_ID INTEGER NOT NULL, " + NL + 466 " FK_ID INTEGER," + 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 ")")) 471 { 472 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 474 } 475 s_logger.log(Level.FINEST, "Table OWN_FK_TEST created."); 476 486 487 if (stmQuery.execute("CREATE TABLE GROUP_BASE_TEST" + NL + 489 "(" + NL + 490 " TEST_BASE_ID INTEGER NOT NULL, " + NL + 491 " TEST_BASE_VALUE INTEGER," + NL + 492 " CONSTRAINT GROUP_BASE_TEST_PK PRIMARY KEY (TEST_BASE_ID)" + NL + 493 ")")) 494 { 495 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 497 } 498 s_logger.log(Level.FINEST, "Table GROUP_BASE_TEST created."); 499 509 if (stmQuery.execute( 511 "CREATE TABLE GROUP_CHILD_TEST" + NL + 512 "(" + NL + 513 " TEST_CHILD_ID INTEGER NOT NULL, " + NL + 514 " TEST_BASE_FK_ID INTEGER NOT NULL, " + NL + 515 " TEST_CHILD_VALUE INTEGER," + NL + 516 " CONSTRAINT GROUP_CHILD_TEST_PK PRIMARY KEY (TEST_CHILD_ID)," + NL + 517 " CONSTRAINT TEST_BASE_ID_FK FOREIGN KEY (TEST_BASE_FK_ID) " + NL + 518 " REFERENCES GROUP_BASE_TEST (TEST_BASE_ID) ON DELETE CASCADE" + NL + 519 ")")) 520 { 521 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 523 } 524 s_logger.log(Level.FINEST, "Table GROUP_CHILD_TEST created."); 525 535 if (stmQuery.execute("CREATE TABLE SAME_TEST1" + NL + 537 "(" + NL + 538 " ID INTEGER NOT NULL" + NL + 539 ")")) 540 { 541 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 543 } 544 s_logger.log(Level.FINEST, "Table SAME_TEST1 created."); 545 555 if (stmQuery.execute("CREATE TABLE SAME_TEST2 " + NL + 557 "(" + NL + 558 " ID INTEGER NOT NULL" + NL + 559 ")")) 560 { 561 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 563 } 564 s_logger.log(Level.FINEST, "Table SAME_TEST2 created."); 565 575 if (stmQuery.execute("CREATE TABLE POOL_TEST " + NL + 577 "(" + NL + 578 " TEST_VALUE INTEGER NOT NULL," + NL + 579 " CONSTRAINT TEST_VALUE1_PK PRIMARY KEY (TEST_VALUE)" + NL + 580 ")")) 581 { 582 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 584 } 585 s_logger.log(Level.FINEST, "Table POOL_TEST created."); 586 596 if (stmQuery.execute("CREATE TABLE POOL_TEST2 " + NL + 598 "(" + NL + 599 " TEST_VALUE INTEGER NOT NULL," + NL + 600 " CONSTRAINT TEST_VALUE2_PK PRIMARY KEY (TEST_VALUE)" + NL + 601 ")")) 602 { 603 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 605 } 606 s_logger.log(Level.FINEST, "Table POOL_TEST2 created."); 607 617 618 if (stmQuery.execute("CREATE TABLE QUERY_TEST " + NL + 620 "(" + NL + 621 " VALUE_1 INTEGER NOT NULL," + NL + 622 " VALUE_2 INTEGER NOT NULL" + NL + 623 ")")) 624 { 625 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 627 } 628 s_logger.log(Level.FINEST, "Table QUERY_TEST created."); 629 639 if (stmQuery.execute("CREATE TABLE QUERY_TEST_EXCEPT " + NL + 641 "(" + NL + 642 " VALUE_1 INTEGER NOT NULL" + NL + 643 ")")) 644 { 645 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 647 } 648 s_logger.log(Level.FINEST, "Table QUERY_TEST_EXCEPT created."); 649 659 if (stmQuery.execute("CREATE TABLE UNIQUE_COLUMN_TEST " + NL + 661 "(" + NL + 662 " TEST_ID INTEGER, " + NL + 663 " CONSTRAINT TEST_ID_UQ UNIQUE (TEST_ID) " + NL + 664 ")")) 665 { 666 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 668 } 669 s_logger.log(Level.FINEST, "Table UNIQUE_COLUMN_TEST created."); 670 680 if (stmQuery.execute("CREATE TABLE NULL_COLUMN_TEST " + NL + 682 "(" + NL + 683 " NAME VARCHAR(50)" + NL + 684 ")")) 685 { 686 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 688 } 689 s_logger.log(Level.FINEST, "Table NULL_COLUMN_TEST created."); 690 700 } 701 catch (SQLException sqleExc) 702 { 703 s_logger.log(Level.WARNING, "Failed to create database test schema.", 704 sqleExc); 705 throw sqleExc; 706 } 707 finally 708 { 709 DatabaseUtils.closeStatement(stmQuery); 710 } 711 } 712 713 718 public String getInsertSelectQuery() 719 { 720 return "insert into QUERY_TEST (VALUE_1, VALUE_2) " + 721 "select ?, VALUE_2 from QUERY_TEST where VALUE_2=1"; 722 } 723 724 729 public String getSelectExceptQuery() 730 { 731 return "select value_1 from query_test_except where value_1 in (?, ?, ?) " + 732 "except select value_1 from query_test_except where value_1 in (?, ?) " + 733 "except select value_1 from query_test_except where value_1 in (?, ?)"; 734 } 735 736 741 public String getSelectExceptUnionQuery() 742 { 743 return "select value_1 from query_test_except where value_1 in (?, ?, ?) " + 744 "except select value_1 from query_test_except where value_1 in (?, ?) " + 745 "union select value_1 from query_test_except where value_1 in (?, ?)"; 746 } 747 748 753 public String getSelectExistQuery() 754 { 755 return "select VALUE_1 from QUERY_TEST AS QT where exists " + 756 "(select 1 from QUERY_TEST AS QT1 where QT1.VALUE_2 = QT.VALUE_1)"; 757 } 758 759 764 public abstract String getInsertGeneratedKey( 765 ); 766 767 777 public abstract int[] executeInsertGeneratedKey2( 778 Connection dbConnection, 779 String strValue 780 ) throws SQLException ; 781 782 792 public abstract int[] executeInsertRow( 793 Connection dbConnection, 794 String strValue 795 ) throws SQLException ; 796 797 806 public abstract int executeUpdateTestValue( 807 Connection dbConnection, 808 String strOldValue, 809 String strNewValue 810 ) throws SQLException ; 811 812 823 public void createDataSource( 824 DatabaseConnectionFactory dbConnectionFactory, 825 String strDataSourceName, 826 String strDatabaseDriver, 827 String strDatabaseURL, 828 String strUserName, 829 String strUserPassword 830 ) throws OSSDatabaseAccessException 831 { 832 dbConnectionFactory.addDataSource(strDataSourceName, 833 strDatabaseDriver, 834 strDatabaseURL, 835 strUserName, 836 strUserPassword); 837 } 838 839 848 public abstract void createTestUser( 849 Connection cntAdminDBConnection, 850 String strDatabaseURL, 851 String strUserName, 852 String strUserPassword 853 ) throws SQLException ; 854 855 863 public abstract void dropTestUser( 864 Connection cntAdminDBConnection, 865 String strDatabaseURL, 866 String strUserName 867 ) throws SQLException ; 868 } 869 | Popular Tags |