Repository: metamodel Updated Branches: refs/heads/master 8cb88ff79 -> d5dee995f
METAMODEL-142: Fixed Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/f9ba2470 Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/f9ba2470 Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/f9ba2470 Branch: refs/heads/master Commit: f9ba2470a2593bb24ac599c30f21b94622036548 Parents: 3b7c4fc Author: Kasper Sørensen <[email protected]> Authored: Tue May 19 18:51:25 2015 +0200 Committer: Kasper Sørensen <[email protected]> Committed: Tue May 19 18:51:25 2015 +0200 ---------------------------------------------------------------------- .../metamodel/jdbc/JdbcCreateTableBuilder.java | 152 +++++++++---------- .../apache/metamodel/jdbc/JdbcDataContext.java | 9 +- .../metamodel/jdbc/JdbcDropTableBuilder.java | 9 +- .../metamodel/jdbc/JdbcMetadataLoader.java | 71 ++++++--- .../org/apache/metamodel/jdbc/JdbcSchema.java | 73 +++++---- .../apache/metamodel/jdbc/MetadataLoader.java | 22 ++- .../AbstractJdbIntegrationTest.java | 29 ++-- .../SQLServerJtdsDriverTest.java | 34 ++++- 8 files changed, 251 insertions(+), 148 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/metamodel/blob/f9ba2470/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcCreateTableBuilder.java ---------------------------------------------------------------------- diff --git a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcCreateTableBuilder.java b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcCreateTableBuilder.java index c0a5999..5170dd9 100644 --- a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcCreateTableBuilder.java +++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcCreateTableBuilder.java @@ -38,87 +38,87 @@ import org.slf4j.LoggerFactory; */ final class JdbcCreateTableBuilder extends AbstractTableCreationBuilder<JdbcUpdateCallback> { - private static final Logger logger = LoggerFactory.getLogger(JdbcCreateTableBuilder.class); + private static final Logger logger = LoggerFactory.getLogger(JdbcCreateTableBuilder.class); - public JdbcCreateTableBuilder(JdbcUpdateCallback updateCallback, Schema schema, String name) { - super(updateCallback, schema, name); - if (!(schema instanceof JdbcSchema)) { - throw new IllegalArgumentException("Not a valid JDBC schema: " + schema); - } - } + public JdbcCreateTableBuilder(JdbcUpdateCallback updateCallback, Schema schema, String name) { + super(updateCallback, schema, name); + if (!(schema instanceof JdbcSchema)) { + throw new IllegalArgumentException("Not a valid JDBC schema: " + schema); + } + } - @Override - public Table execute() { - final String sql = createSqlStatement(); - logger.info("Create table statement created: {}", sql); + @Override + public Table execute() { + final String sql = createSqlStatement(); + logger.info("Create table statement created: {}", sql); - Connection connection = getUpdateCallback().getConnection(); - Statement st = null; - try { - st = connection.createStatement(); - int rowsAffected = st.executeUpdate(sql); - logger.debug("Create table statement executed, {} rows affected", rowsAffected); - } catch (SQLException e) { - throw JdbcUtils.wrapException(e, "execute create table statement: " + sql); - } finally { - FileHelper.safeClose(st); - } + final Connection connection = getUpdateCallback().getConnection(); + Statement st = null; + try { + st = connection.createStatement(); + final int rowsAffected = st.executeUpdate(sql); + logger.debug("Create table statement executed, {} rows affected", rowsAffected); + } catch (SQLException e) { + throw JdbcUtils.wrapException(e, "execute create table statement: " + sql); + } finally { + FileHelper.safeClose(st); + } - JdbcSchema schema = (JdbcSchema) getSchema(); - schema.refreshTables(); - return schema.getTableByName(getTable().getName()); - } + final JdbcSchema schema = (JdbcSchema) getSchema(); + schema.refreshTables(connection); + return schema.getTableByName(getTable().getName()); + } - protected String createSqlStatement() { - return createSqlStatement(getTable()); - } + protected String createSqlStatement() { + return createSqlStatement(getTable()); + } - private String createSqlStatement(Table table) { - final IQueryRewriter queryRewriter = getUpdateCallback().getDataContext().getQueryRewriter(); - final StringBuilder sb = new StringBuilder(); - sb.append("CREATE TABLE "); - final Schema schema = getSchema(); - if (schema != null && schema.getName() != null) { - sb.append(schema.getQualifiedLabel()); - sb.append("."); - } - sb.append(getUpdateCallback().quoteIfNescesary(table.getName())); - sb.append(" ("); - final Column[] columns = table.getColumns(); - for (int i = 0; i < columns.length; i++) { - final Column column = columns[i]; - if (i != 0) { - sb.append(", "); - } - sb.append(getUpdateCallback().quoteIfNescesary(column.getName())); - sb.append(' '); - final String nativeType = column.getNativeType(); - if (nativeType == null) { - ColumnType columnType = column.getType(); - if (columnType == null) { - columnType = ColumnType.VARCHAR; - } + private String createSqlStatement(Table table) { + final IQueryRewriter queryRewriter = getUpdateCallback().getDataContext().getQueryRewriter(); + final StringBuilder sb = new StringBuilder(); + sb.append("CREATE TABLE "); + final Schema schema = getSchema(); + if (schema != null && schema.getName() != null) { + sb.append(schema.getQualifiedLabel()); + sb.append("."); + } + sb.append(getUpdateCallback().quoteIfNescesary(table.getName())); + sb.append(" ("); + final Column[] columns = table.getColumns(); + for (int i = 0; i < columns.length; i++) { + final Column column = columns[i]; + if (i != 0) { + sb.append(", "); + } + sb.append(getUpdateCallback().quoteIfNescesary(column.getName())); + sb.append(' '); + final String nativeType = column.getNativeType(); + if (nativeType == null) { + ColumnType columnType = column.getType(); + if (columnType == null) { + columnType = ColumnType.VARCHAR; + } - final String columnTypeString = queryRewriter.rewriteColumnType(columnType); + final String columnTypeString = queryRewriter.rewriteColumnType(columnType); - sb.append(columnTypeString); - } else { - sb.append(nativeType); - } - final Integer columnSize = column.getColumnSize(); - if (columnSize != null) { - sb.append('('); - sb.append(columnSize.intValue()); - sb.append(')'); - } - if (column.isNullable() != null && !column.isNullable().booleanValue()) { - sb.append(" NOT NULL"); - } - } + sb.append(columnTypeString); + } else { + sb.append(nativeType); + } + final Integer columnSize = column.getColumnSize(); + if (columnSize != null) { + sb.append('('); + sb.append(columnSize.intValue()); + sb.append(')'); + } + if (column.isNullable() != null && !column.isNullable().booleanValue()) { + sb.append(" NOT NULL"); + } + } boolean primaryKeyExists = false; - for(int i = 0 ; i < columns.length ; i++) { - if(columns[i].isPrimaryKey()) { - if(!primaryKeyExists) { + for (int i = 0; i < columns.length; i++) { + if (columns[i].isPrimaryKey()) { + if (!primaryKeyExists) { sb.append(", PRIMARY KEY("); sb.append(columns[i].getName()); primaryKeyExists = true; @@ -128,11 +128,11 @@ final class JdbcCreateTableBuilder extends AbstractTableCreationBuilder<JdbcUpda } } } - if(primaryKeyExists) { + if (primaryKeyExists) { sb.append(")"); } - sb.append(")"); - return sb.toString(); - } + sb.append(")"); + return sb.toString(); + } } http://git-wip-us.apache.org/repos/asf/metamodel/blob/f9ba2470/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java ---------------------------------------------------------------------- diff --git a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java index a20924c..b4e3795 100644 --- a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java +++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java @@ -743,8 +743,13 @@ public class JdbcDataContext extends AbstractDataContext implements UpdateableDa @Override protected Schema getSchemaByNameInternal(String name) { - JdbcSchema schema = new JdbcSchema(name, _metadataLoader); - _metadataLoader.loadTables(schema); + final JdbcSchema schema = new JdbcSchema(name, _metadataLoader); + final Connection connection = getConnection(); + try { + _metadataLoader.loadTables(schema, connection); + } finally { + close(connection, null, null); + } return schema; } http://git-wip-us.apache.org/repos/asf/metamodel/blob/f9ba2470/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDropTableBuilder.java ---------------------------------------------------------------------- diff --git a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDropTableBuilder.java b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDropTableBuilder.java index aa3cc98..e4f387b 100644 --- a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDropTableBuilder.java +++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDropTableBuilder.java @@ -18,6 +18,7 @@ */ package org.apache.metamodel.jdbc; +import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @@ -44,16 +45,16 @@ final class JdbcDropTableBuilder extends AbstractTableDropBuilder implements Tab @Override public void execute() { - String sql = createSqlStatement(); - - PreparedStatement statement = _updateCallback.getPreparedStatement(sql, false); + final String sql = createSqlStatement(); + final PreparedStatement statement = _updateCallback.getPreparedStatement(sql, false); try { _updateCallback.executePreparedStatement(statement, false); // remove the table reference from the schema final Schema schema = getTable().getSchema(); if (schema instanceof JdbcSchema) { - ((JdbcSchema) schema).refreshTables(); + final Connection connection = _updateCallback.getConnection(); + ((JdbcSchema) schema).refreshTables(connection); } } catch (SQLException e) { throw JdbcUtils.wrapException(e, "execute drop table statement: " + sql); http://git-wip-us.apache.org/repos/asf/metamodel/blob/f9ba2470/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcMetadataLoader.java ---------------------------------------------------------------------- diff --git a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcMetadataLoader.java b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcMetadataLoader.java index 54ad378..2254617 100644 --- a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcMetadataLoader.java +++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcMetadataLoader.java @@ -73,6 +73,15 @@ final class JdbcMetadataLoader implements MetadataLoader { public void loadTables(JdbcSchema schema) { final Connection connection = _dataContext.getConnection(); try { + loadTables(schema, connection); + } finally { + _dataContext.close(connection, null, null); + } + } + + @Override + public void loadTables(JdbcSchema schema, Connection connection) { + try { final DatabaseMetaData metaData = connection.getMetaData(); // Creates string array to represent the table types @@ -80,8 +89,6 @@ final class JdbcMetadataLoader implements MetadataLoader { loadTables(schema, metaData, types); } catch (SQLException e) { throw JdbcUtils.wrapException(e, "retrieve table metadata for " + schema.getName()); - } finally { - _dataContext.close(connection, null, null); } } @@ -139,9 +146,19 @@ final class JdbcMetadataLoader implements MetadataLoader { _dataContext.close(null, rs, null); } } + + @Override + public void loadIndexes(JdbcTable jdbcTable) { + final Connection connection = _dataContext.getConnection(); + try { + loadIndexes(jdbcTable, connection); + } finally { + _dataContext.close(connection, null, null); + } + } @Override - public void loadIndexes(JdbcTable table) { + public void loadIndexes(JdbcTable table, Connection connection) { final int identity = System.identityHashCode(table); if (_loadedIndexes.contains(identity)) { return; @@ -151,21 +168,28 @@ final class JdbcMetadataLoader implements MetadataLoader { return; } - final Connection connection = _dataContext.getConnection(); try { DatabaseMetaData metaData = connection.getMetaData(); loadIndexes(table, metaData); _loadedIndexes.add(identity); } catch (SQLException e) { throw JdbcUtils.wrapException(e, "load indexes"); - } finally { - _dataContext.close(connection, null, null); } } } + + @Override + public void loadPrimaryKeys(JdbcTable jdbcTable) { + final Connection connection = _dataContext.getConnection(); + try { + loadPrimaryKeys(jdbcTable, connection); + } finally { + _dataContext.close(connection, null, null); + } + } @Override - public void loadPrimaryKeys(JdbcTable table) { + public void loadPrimaryKeys(JdbcTable table, Connection connection) { final int identity = System.identityHashCode(table); if (_loadedPrimaryKeys.contains(identity)) { return; @@ -174,15 +198,12 @@ final class JdbcMetadataLoader implements MetadataLoader { if (_loadedPrimaryKeys.contains(identity)) { return; } - final Connection connection = _dataContext.getConnection(); try { DatabaseMetaData metaData = connection.getMetaData(); loadPrimaryKeys(table, metaData); _loadedPrimaryKeys.add(identity); } catch (SQLException e) { throw JdbcUtils.wrapException(e, "load primary keys"); - } finally { - _dataContext.close(connection, null, null); } } } @@ -244,6 +265,16 @@ final class JdbcMetadataLoader implements MetadataLoader { _dataContext.close(null, rs, null); } } + + @Override + public void loadColumns(JdbcTable jdbcTable) { + final Connection connection = _dataContext.getConnection(); + try { + loadColumns(jdbcTable, connection); + } finally { + _dataContext.close(connection, null, null); + } + } /** * Loads column metadata (no indexes though) for a table @@ -251,7 +282,7 @@ final class JdbcMetadataLoader implements MetadataLoader { * @param table */ @Override - public void loadColumns(JdbcTable table) { + public void loadColumns(JdbcTable table, Connection connection) { final int identity = System.identityHashCode(table); if (_loadedColumns.contains(identity)) { return; @@ -261,15 +292,12 @@ final class JdbcMetadataLoader implements MetadataLoader { return; } - final Connection connection = _dataContext.getConnection(); try { DatabaseMetaData metaData = connection.getMetaData(); loadColumns(table, metaData); _loadedColumns.add(identity); } catch (Exception e) { logger.error("Could not load columns for table: " + table, e); - } finally { - _dataContext.close(connection, null, null); } } } @@ -353,9 +381,19 @@ final class JdbcMetadataLoader implements MetadataLoader { _dataContext.close(null, rs, null); } } + + @Override + public void loadRelations(JdbcSchema jdbcSchema) { + final Connection connection = _dataContext.getConnection(); + try { + loadRelations(jdbcSchema, connection); + } finally { + _dataContext.close(connection, null, null); + } + } @Override - public void loadRelations(JdbcSchema schema) { + public void loadRelations(JdbcSchema schema, Connection connection) { final int identity = System.identityHashCode(schema); if (_loadedRelations.contains(identity)) { return; @@ -364,7 +402,6 @@ final class JdbcMetadataLoader implements MetadataLoader { if (_loadedRelations.contains(identity)) { return; } - final Connection connection = _dataContext.getConnection(); try { final Table[] tables = schema.getTables(); final DatabaseMetaData metaData = connection.getMetaData(); @@ -374,8 +411,6 @@ final class JdbcMetadataLoader implements MetadataLoader { _loadedRelations.add(identity); } catch (Exception e) { logger.error("Could not load relations for schema: " + schema, e); - } finally { - _dataContext.close(connection, null, null); } } } http://git-wip-us.apache.org/repos/asf/metamodel/blob/f9ba2470/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcSchema.java ---------------------------------------------------------------------- diff --git a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcSchema.java b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcSchema.java index 043e477..06aa93c 100644 --- a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcSchema.java +++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcSchema.java @@ -19,6 +19,7 @@ package org.apache.metamodel.jdbc; import java.io.ObjectStreamException; +import java.sql.Connection; import org.apache.metamodel.schema.MutableSchema; import org.apache.metamodel.schema.MutableTable; @@ -29,41 +30,49 @@ import org.apache.metamodel.schema.Schema; */ final class JdbcSchema extends MutableSchema { - private static final long serialVersionUID = 7543633400859277467L; - private transient MetadataLoader _metadataLoader; + private static final long serialVersionUID = 7543633400859277467L; + private transient MetadataLoader _metadataLoader; - public JdbcSchema(String name, MetadataLoader metadataLoader) { - super(name); - _metadataLoader = metadataLoader; - } + public JdbcSchema(String name, MetadataLoader metadataLoader) { + super(name); + _metadataLoader = metadataLoader; + } - protected void refreshTables() { - if (_metadataLoader != null) { - _metadataLoader.loadTables(this); - } - } + protected void refreshTables(Connection connection) { + if (_metadataLoader != null) { + _metadataLoader.loadTables(this, connection); + } + } - public void loadRelations() { - if (_metadataLoader != null) { - _metadataLoader.loadRelations(this); - } - } + public void loadRelations(Connection connection) { + if (_metadataLoader != null) { + if (connection == null) { + _metadataLoader.loadRelations(this); + } else { + _metadataLoader.loadRelations(this, connection); + } + } + } + + public void loadRelations() { + loadRelations(null); + } - public Schema toSerializableForm() { - MutableTable[] tables = getTables(); - for (MutableTable table : tables) { - table.getColumns(); - table.getIndexedColumns(); - table.getPrimaryKeys(); - } - loadRelations(); - return this; - } + public Schema toSerializableForm() { + MutableTable[] tables = getTables(); + for (MutableTable table : tables) { + table.getColumns(); + table.getIndexedColumns(); + table.getPrimaryKeys(); + } + loadRelations(); + return this; + } - /** - * Called by the Java Serialization API to serialize the object. - */ - private Object writeReplace() throws ObjectStreamException { - return toSerializableForm(); - } + /** + * Called by the Java Serialization API to serialize the object. + */ + private Object writeReplace() throws ObjectStreamException { + return toSerializableForm(); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/metamodel/blob/f9ba2470/jdbc/src/main/java/org/apache/metamodel/jdbc/MetadataLoader.java ---------------------------------------------------------------------- diff --git a/jdbc/src/main/java/org/apache/metamodel/jdbc/MetadataLoader.java b/jdbc/src/main/java/org/apache/metamodel/jdbc/MetadataLoader.java index 3e80426..1f5fafc 100644 --- a/jdbc/src/main/java/org/apache/metamodel/jdbc/MetadataLoader.java +++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/MetadataLoader.java @@ -18,19 +18,31 @@ */ package org.apache.metamodel.jdbc; +import java.sql.Connection; + /** * Defines the interface for a component capable of loading schema-model * metadata. */ interface MetadataLoader { - public void loadTables(JdbcSchema jdbcSchema); + public void loadTables(JdbcSchema jdbcSchema); + + public void loadRelations(JdbcSchema jdbcSchema); + + public void loadColumns(JdbcTable jdbcTable); + + public void loadIndexes(JdbcTable jdbcTable); + + public void loadPrimaryKeys(JdbcTable jdbcTable); + + public void loadTables(JdbcSchema jdbcSchema, Connection connection); - public void loadRelations(JdbcSchema jdbcSchema); + public void loadRelations(JdbcSchema jdbcSchema, Connection connection); - public void loadColumns(JdbcTable jdbcTable); + public void loadColumns(JdbcTable jdbcTable, Connection connection); - public void loadIndexes(JdbcTable jdbcTable); + public void loadIndexes(JdbcTable jdbcTable, Connection connection); - public void loadPrimaryKeys(JdbcTable jdbcTable); + public void loadPrimaryKeys(JdbcTable jdbcTable, Connection connection); } http://git-wip-us.apache.org/repos/asf/metamodel/blob/f9ba2470/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/AbstractJdbIntegrationTest.java ---------------------------------------------------------------------- diff --git a/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/AbstractJdbIntegrationTest.java b/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/AbstractJdbIntegrationTest.java index 6faec03..a2d9164 100644 --- a/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/AbstractJdbIntegrationTest.java +++ b/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/AbstractJdbIntegrationTest.java @@ -24,6 +24,7 @@ import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties; +import org.apache.commons.dbcp.BasicDataSource; import org.apache.metamodel.jdbc.JdbcDataContext; import org.apache.metamodel.util.FileHelper; @@ -62,27 +63,27 @@ public abstract class AbstractJdbIntegrationTest extends TestCase { _configured = false; } } - + protected Properties getProperties() { return _properties; } - + protected String getDriver() { return _driver; } - + protected String getUsername() { return _username; } - + protected String getPassword() { return _password; } - + protected String getUrl() { return _url; } - + @Override protected final void tearDown() throws Exception { FileHelper.safeClose(_connection); @@ -102,7 +103,7 @@ public abstract class AbstractJdbIntegrationTest extends TestCase { throw new IllegalStateException(className + " is not properly configured from file: " + getPropertyFilePath()); } - + if (_connection == null) { try { Class.forName(_driver); @@ -111,14 +112,24 @@ public abstract class AbstractJdbIntegrationTest extends TestCase { throw new IllegalStateException("Failed to create JDBC connection for " + className, e); } } - + return _connection; } - + protected JdbcDataContext getDataContext() { return new JdbcDataContext(getConnection()); } + protected BasicDataSource getDataSource() { + final BasicDataSource dataSource = new BasicDataSource(); + dataSource.setUrl(getUrl()); + dataSource.setDriverClassName(getDriver()); + dataSource.setUsername(getUsername()); + dataSource.setPassword(getPassword()); + + return dataSource; + } + private String getPropertyFilePath() { String userHome = System.getProperty("user.home"); return userHome + "/metamodel-integrationtest-configuration.properties"; http://git-wip-us.apache.org/repos/asf/metamodel/blob/f9ba2470/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/SQLServerJtdsDriverTest.java ---------------------------------------------------------------------- diff --git a/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/SQLServerJtdsDriverTest.java b/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/SQLServerJtdsDriverTest.java index 52219c0..336814e 100644 --- a/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/SQLServerJtdsDriverTest.java +++ b/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/SQLServerJtdsDriverTest.java @@ -22,9 +22,11 @@ import java.sql.Connection; import java.sql.SQLException; import java.util.Arrays; +import org.apache.commons.dbcp.BasicDataSource; import org.apache.metamodel.UpdateCallback; import org.apache.metamodel.UpdateScript; import org.apache.metamodel.data.DataSet; +import org.apache.metamodel.drop.DropTable; import org.apache.metamodel.jdbc.JdbcDataContext; import org.apache.metamodel.jdbc.JdbcTestTemplates; import org.apache.metamodel.jdbc.dialects.IQueryRewriter; @@ -52,15 +54,43 @@ public class SQLServerJtdsDriverTest extends AbstractJdbIntegrationTest { protected String getPropertyPrefix() { return "sqlserver.jtds_driver"; } - + public void testCreateInsertAndUpdate() throws Exception { if (!isConfigured()) { return; } - JdbcTestTemplates.simpleCreateInsertUpdateAndDrop(getDataContext(), "metamodel_test_simple"); } + public void testCreateTableInUpdateScript() throws Exception { + if (!isConfigured()) { + return; + } + + final BasicDataSource dataSource = getDataSource(); + + final String tableName = "Pairs"; + final JdbcDataContext dc = new JdbcDataContext(dataSource); + final Schema schema = dc.getDefaultSchema(); + + if (schema.getTableByName(tableName) != null) { + dc.executeUpdate(new DropTable(schema, tableName)); + } + + dc.executeUpdate(new UpdateScript() { + @Override + public void run(UpdateCallback callback) { + Table table = callback.createTable(schema, tableName).withColumn("GroupID").withColumn("RecordID_1") + .withColumn("RecordID_2").withColumn("SimilarityScore").ofType(ColumnType.VARCHAR).execute(); + assertNotNull(table); + } + }); + + assertNotNull(schema.getTableByName(tableName)); + + dc.executeUpdate(new DropTable(schema, tableName)); + } + public void testCompositePrimaryKeyCreation() throws Exception { if (!isConfigured()) { return;
