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;

Reply via email to