/*
* Copyright 2001-2008 Geert Bevin (gbevin[remove] at uwyn dot com)
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: TestCreateTable.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.database.queries;
import com.uwyn.rife.database.DbQueryManager;
import com.uwyn.rife.database.DbTransactionUserWithoutResult;
import com.uwyn.rife.database.exceptions.DatabaseException;
import com.uwyn.rife.tools.exceptions.InnerClassException;
public abstract class TestCreateTable extends TestQuery
{
public TestCreateTable(String name)
{
super(name);
}
public void execute(CreateTable query)
{
DbQueryManager manager = new DbQueryManager(query.getDatasource());
Execution execution = new Execution(query, manager);
if (query.isTemporary())
{
manager.inTransaction(execution);
}
else
{
execution.useTransactionWithoutResult();
}
}
class Execution extends DbTransactionUserWithoutResult
{
private CreateTable mQuery = null;
private DbQueryManager mManager = null;
public Execution(CreateTable query, DbQueryManager manager)
{
mQuery = query;
mManager = manager;
}
public void useTransactionWithoutResult()
throws InnerClassException
{
CreateTable foreign_table = new CreateTable(mQuery.getDatasource());
try
{
if (mQuery.getForeignKeys().size() > 0)
{
foreign_table.table("foreigntable")
.column("foreignIntColumn", int.class)
.column("foreignStringColumn", String.class, 50)
.unique("foreignIntColumn")
.primaryKey(new String[] {"foreignIntColumn", "foreignStringColumn"})
.temporary(mQuery.isTemporary());
mManager.executeUpdate(foreign_table);
}
// try to execute the table creation
mManager.executeUpdate(mQuery);
// String driver = mManager.getDatasource().getAliasedDriver();
// System.out.println("\n");
// System.out.println(driver);
// System.out.println(mQuery.getSql());
//
// DatabaseMetaData meta_data = mManager.getConnection().getMetaData();
// try
// {
// String table_name = mQuery.getTable();
// if (driver.equals("oracle.jdbc.driver.OracleDriver") ||
// driver.equals("org.hsqldb.jdbcDriver") ||
// driver.equals("org.apache.derby.jdbc.EmbeddedDriver"))
// {
// table_name = table_name.toUpperCase();
// }
//
// ArrayList<String> primary_keys = new ArrayList<String>();
//
// ResultSet primary_keys_rs = meta_data.getPrimaryKeys(null, null, table_name);
// while (primary_keys_rs.next())
// {
// primary_keys.add(primary_keys_rs.getString("COLUMN_NAME"));
// }
//
// System.out.println("COLUMNS");
// ResultSet columns_rs = meta_data.getColumns(null, null, table_name, "%");
// while (columns_rs.next())
// {
// String column_name = columns_rs.getString("COLUMN_NAME");
// int data_type = columns_rs.getInt("DATA_TYPE");
// String type_name = columns_rs.getString("TYPE_NAME");
// int column_size = columns_rs.getInt("COLUMN_SIZE");
// int column_decimal_digits = columns_rs.getInt("DECIMAL_DIGITS");
// String column_default = columns_rs.getString("COLUMN_DEF");
// boolean column_primarykey = primary_keys.contains(column_name);
// boolean column_nullable = true;
// if(columns_rs.getString("IS_NULLABLE").equals("NO"))
// {
// column_nullable = false;
// }
// String remarks = columns_rs.getString("REMARKS");
// System.out.println(column_name+"; "+data_type+"; "+type_name+"; "+column_size+"; "+column_decimal_digits+"; "+column_default+"; "+column_primarykey+"; "+column_nullable+"; "+remarks);
// }
//
// System.out.println("INDICES");
// ResultSet index_rs = meta_data.getIndexInfo(null, null, table_name, false, false);
// while (index_rs.next())
// {
// String column_name = index_rs.getString("COLUMN_NAME");
// boolean non_unique = index_rs.getBoolean("NON_UNIQUE");
// String index_qualifier = index_rs.getString("INDEX_QUALIFIER");
// String index_name = index_rs.getString("INDEX_NAME");
// short type = index_rs.getShort("TYPE");
// String asc_or_desc = index_rs.getString("ASC_OR_DESC");
// String filter_condition = index_rs.getString("FILTER_CONDITION");
// System.out.println(column_name+"; "+non_unique+"; "+index_qualifier+"; "+index_name+"; "+type+"; "+asc_or_desc+"; "+filter_condition);
// }
//
// System.out.println("FOREIGN KEYS");
// ResultSet imported_keys_rs = meta_data.getImportedKeys(null, null, table_name);
// while (imported_keys_rs.next())
// {
// String fkcolumn_name = imported_keys_rs.getString("FKCOLUMN_NAME");
// String pktable_name = imported_keys_rs.getString("PKTABLE_NAME");
// String pkcolumn_name = imported_keys_rs.getString("PKCOLUMN_NAME");
// short update_rule = imported_keys_rs.getShort("UPDATE_RULE");
// short delete_rule = imported_keys_rs.getShort("DELETE_RULE");
// String fk_name = imported_keys_rs.getString("FK_NAME");
// String pk_name = imported_keys_rs.getString("PK_NAME");
// System.out.println(fkcolumn_name+"; "+pktable_name+"; "+pkcolumn_name+"; "+update_rule+"; "+delete_rule+"; "+fk_name+"; "+pk_name);
// }
// }
// catch (SQLException e)
// {
// e.printStackTrace();
// }
// it was succesful, remove the table again
mManager.executeUpdate(new DropTable(mQuery.getDatasource()).table(mQuery.getTable()));
}
catch (DatabaseException e)
{
throw new RuntimeException(e);
}
finally
{
// clean up foreign key table
try
{
if (mQuery.getForeignKeys().size() > 0)
{
mManager.executeUpdate(new DropTable(mQuery.getDatasource()).table(foreign_table.getTable()));
}
}
catch (DatabaseException e)
{
throw new RuntimeException(e);
}
}
}
}
}