001: /*
002: * Copyright 2001-2007 Geert Bevin <gbevin[remove] at uwyn dot com>
003: * Distributed under the terms of either:
004: * - the common development and distribution license (CDDL), v1.0; or
005: * - the GNU Lesser General Public License, v2.1 or later
006: * $Id: TestCreateTable.java 3634 2007-01-08 21:42:24Z gbevin $
007: */
008: package com.uwyn.rife.database.queries;
009:
010: import com.uwyn.rife.database.DbQueryManager;
011: import com.uwyn.rife.database.DbTransactionUserWithoutResult;
012: import com.uwyn.rife.database.exceptions.DatabaseException;
013: import com.uwyn.rife.tools.InnerClassException;
014:
015: public abstract class TestCreateTable extends TestQuery {
016: public TestCreateTable(String name) {
017: super (name);
018: }
019:
020: public void execute(CreateTable query) {
021: DbQueryManager manager = new DbQueryManager(query
022: .getDatasource());
023:
024: Execution execution = new Execution(query, manager);
025: if (query.isTemporary()) {
026: manager.inTransaction(execution);
027: } else {
028: execution.useTransactionWithoutResult();
029: }
030: }
031:
032: class Execution extends DbTransactionUserWithoutResult {
033: private CreateTable mQuery = null;
034: private DbQueryManager mManager = null;
035:
036: public Execution(CreateTable query, DbQueryManager manager) {
037: mQuery = query;
038: mManager = manager;
039: }
040:
041: public void useTransactionWithoutResult()
042: throws InnerClassException {
043: CreateTable foreign_table = new CreateTable(mQuery
044: .getDatasource());
045: try {
046: if (mQuery.getForeignKeys().size() > 0) {
047: foreign_table.table("foreigntable").column(
048: "foreignIntColumn", int.class).column(
049: "foreignStringColumn", String.class, 50)
050: .unique("foreignIntColumn").primaryKey(
051: new String[] { "foreignIntColumn",
052: "foreignStringColumn" })
053: .temporary(mQuery.isTemporary());
054:
055: mManager.executeUpdate(foreign_table);
056: }
057:
058: // try to execute the table creation
059: mManager.executeUpdate(mQuery);
060:
061: // String driver = mManager.getDatasource().getAliasedDriver();
062: // System.out.println("\n");
063: // System.out.println(driver);
064: // System.out.println(mQuery.getSql());
065: //
066: // DatabaseMetaData meta_data = mManager.getConnection().getMetaData();
067: // try
068: // {
069: // String table_name = mQuery.getTable();
070: // if (driver.equals("oracle.jdbc.driver.OracleDriver") ||
071: // driver.equals("org.hsqldb.jdbcDriver") ||
072: // driver.equals("org.apache.derby.jdbc.EmbeddedDriver"))
073: // {
074: // table_name = table_name.toUpperCase();
075: // }
076: //
077: // ArrayList<String> primary_keys = new ArrayList<String>();
078: //
079: // ResultSet primary_keys_rs = meta_data.getPrimaryKeys(null, null, table_name);
080: // while (primary_keys_rs.next())
081: // {
082: // primary_keys.add(primary_keys_rs.getString("COLUMN_NAME"));
083: // }
084: //
085: // System.out.println("COLUMNS");
086: // ResultSet columns_rs = meta_data.getColumns(null, null, table_name, "%");
087: // while (columns_rs.next())
088: // {
089: // String column_name = columns_rs.getString("COLUMN_NAME");
090: // int data_type = columns_rs.getInt("DATA_TYPE");
091: // String type_name = columns_rs.getString("TYPE_NAME");
092: // int column_size = columns_rs.getInt("COLUMN_SIZE");
093: // int column_decimal_digits = columns_rs.getInt("DECIMAL_DIGITS");
094: // String column_default = columns_rs.getString("COLUMN_DEF");
095: // boolean column_primarykey = primary_keys.contains(column_name);
096: // boolean column_nullable = true;
097: // if(columns_rs.getString("IS_NULLABLE").equals("NO"))
098: // {
099: // column_nullable = false;
100: // }
101: // String remarks = columns_rs.getString("REMARKS");
102: // System.out.println(column_name+"; "+data_type+"; "+type_name+"; "+column_size+"; "+column_decimal_digits+"; "+column_default+"; "+column_primarykey+"; "+column_nullable+"; "+remarks);
103: // }
104: //
105: // System.out.println("INDICES");
106: // ResultSet index_rs = meta_data.getIndexInfo(null, null, table_name, false, false);
107: // while (index_rs.next())
108: // {
109: // String column_name = index_rs.getString("COLUMN_NAME");
110: // boolean non_unique = index_rs.getBoolean("NON_UNIQUE");
111: // String index_qualifier = index_rs.getString("INDEX_QUALIFIER");
112: // String index_name = index_rs.getString("INDEX_NAME");
113: // short type = index_rs.getShort("TYPE");
114: // String asc_or_desc = index_rs.getString("ASC_OR_DESC");
115: // String filter_condition = index_rs.getString("FILTER_CONDITION");
116: // System.out.println(column_name+"; "+non_unique+"; "+index_qualifier+"; "+index_name+"; "+type+"; "+asc_or_desc+"; "+filter_condition);
117: // }
118: //
119: // System.out.println("FOREIGN KEYS");
120: // ResultSet imported_keys_rs = meta_data.getImportedKeys(null, null, table_name);
121: // while (imported_keys_rs.next())
122: // {
123: // String fkcolumn_name = imported_keys_rs.getString("FKCOLUMN_NAME");
124: // String pktable_name = imported_keys_rs.getString("PKTABLE_NAME");
125: // String pkcolumn_name = imported_keys_rs.getString("PKCOLUMN_NAME");
126: // short update_rule = imported_keys_rs.getShort("UPDATE_RULE");
127: // short delete_rule = imported_keys_rs.getShort("DELETE_RULE");
128: // String fk_name = imported_keys_rs.getString("FK_NAME");
129: // String pk_name = imported_keys_rs.getString("PK_NAME");
130: // System.out.println(fkcolumn_name+"; "+pktable_name+"; "+pkcolumn_name+"; "+update_rule+"; "+delete_rule+"; "+fk_name+"; "+pk_name);
131: // }
132: // }
133: // catch (SQLException e)
134: // {
135: // e.printStackTrace();
136: // }
137:
138: // it was succesful, remove the table again
139: mManager.executeUpdate(new DropTable(mQuery
140: .getDatasource()).table(mQuery.getTable()));
141: } catch (DatabaseException e) {
142: throw new RuntimeException(e);
143: } finally {
144: // clean up foreign key table
145: try {
146: if (mQuery.getForeignKeys().size() > 0) {
147: mManager.executeUpdate(new DropTable(mQuery
148: .getDatasource()).table(foreign_table
149: .getTable()));
150: }
151: } catch (DatabaseException e) {
152: throw new RuntimeException(e);
153: }
154: }
155: }
156: }
157: }
|