Repository: metamodel
Updated Branches:
  refs/heads/master 1b4cd55cf -> 1bc0887ef


METAMODEL-131: Fixed
Fixes #14

Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/1bc0887e
Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/1bc0887e
Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/1bc0887e

Branch: refs/heads/master
Commit: 1bc0887ef3853d11903259133d45e4acce10213c
Parents: 1b4cd55
Author: Hosur Narahari <hnr1992@@gmail.com>
Authored: Thu Apr 9 10:59:15 2015 +0200
Committer: Kasper Sørensen <i.am.kasper.soren...@gmail.com>
Committed: Thu Apr 9 10:59:15 2015 +0200

----------------------------------------------------------------------
 CHANGES.md                                      |   1 +
 .../create/AbstractTableCreationBuilder.java    |  19 +-
 .../create/AbstractCreateTableBuilderTest.java  |   3 +-
 .../metamodel/jdbc/JdbcCreateTableBuilder.java  |  19 +-
 .../org/apache/metamodel/jdbc/DerbyTest.java    |  14 +-
 .../apache/metamodel/jdbc/H2databaseTest.java   |  12 +-
 .../org/apache/metamodel/jdbc/HsqldbTest.java   |  91 ++-
 .../metamodel/jdbc/JdbcTestTemplates.java       | 319 ++++++----
 .../org/apache/metamodel/jdbc/SqliteTest.java   |  13 +-
 .../jdbc/integrationtests/DB2Test.java          |  18 +-
 .../jdbc/integrationtests/MysqlTest.java        | 608 ++++++++++---------
 .../jdbc/integrationtests/OracleTest.java       |  17 +
 .../jdbc/integrationtests/PostgresqlTest.java   |  26 +
 .../SQLServerJtdsDriverTest.java                |  16 +
 14 files changed, 737 insertions(+), 439 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metamodel/blob/1bc0887e/CHANGES.md
----------------------------------------------------------------------
diff --git a/CHANGES.md b/CHANGES.md
index 1b4db2e..627eb5f 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -5,6 +5,7 @@
  * [METAMODEL-124] - Invoked ElasticSearch cross-version incompatible methods 
via reflection
  * [METAMODEL-125] - Added support for comma-separated select items in 
Query.select(String) method argument.
  * [METAMODEL-128] - Fixed bug in DataSet ordering when aggregation functions 
are applied to non-JDBC modules.
+ * [METAMODEL-131] - Added support for composite primary keys in JDBC CREATE 
TABLE statements.
 
 ### Apache MetaModel 4.3.2
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/1bc0887e/core/src/main/java/org/apache/metamodel/create/AbstractTableCreationBuilder.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/metamodel/create/AbstractTableCreationBuilder.java
 
b/core/src/main/java/org/apache/metamodel/create/AbstractTableCreationBuilder.java
index 561eb6d..401be9f 100644
--- 
a/core/src/main/java/org/apache/metamodel/create/AbstractTableCreationBuilder.java
+++ 
b/core/src/main/java/org/apache/metamodel/create/AbstractTableCreationBuilder.java
@@ -123,9 +123,22 @@ public abstract class AbstractTableCreationBuilder<U 
extends UpdateCallback> imp
                     && !column.isNullable().booleanValue()) {
                 sb.append(" NOT NULL");
             }
-            if (column.isPrimaryKey()) {
-                sb.append(" PRIMARY KEY");
-            }
+        }
+        boolean primaryKeyExists = false;
+        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;
+                } else {
+                    sb.append(",");
+                    sb.append(columns[i].getName());
+                }
+            }    
+        }
+        if(primaryKeyExists) {
+               sb.append(")");
         }
         sb.append(")");
         return sb.toString();

http://git-wip-us.apache.org/repos/asf/metamodel/blob/1bc0887e/core/src/test/java/org/apache/metamodel/create/AbstractCreateTableBuilderTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/metamodel/create/AbstractCreateTableBuilderTest.java
 
b/core/src/test/java/org/apache/metamodel/create/AbstractCreateTableBuilderTest.java
index 1884a41..c4d320c 100644
--- 
a/core/src/test/java/org/apache/metamodel/create/AbstractCreateTableBuilderTest.java
+++ 
b/core/src/test/java/org/apache/metamodel/create/AbstractCreateTableBuilderTest.java
@@ -63,7 +63,8 @@ public class AbstractCreateTableBuilderTest extends TestCase {
         
assertEquals("Column[name=baz,columnNumber=2,type=null,nullable=false,nativeType=null,columnSize=null]",
                 table.getColumns()[2].toString());
 
-        assertEquals("CREATE TABLE schema.tablename (foo VARCHAR(1234) PRIMARY 
KEY,bar,baz NOT NULL)", builder.toSql());
+        System.out.println(builder.toSql());
+        assertEquals("CREATE TABLE schema.tablename (foo VARCHAR(1234),bar,baz 
NOT NULL, PRIMARY KEY(foo))", builder.toSql());
     }
 
     public void testLike() throws Exception {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/1bc0887e/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 4d19bb9..c0a5999 100644
--- a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcCreateTableBuilder.java
+++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcCreateTableBuilder.java
@@ -114,10 +114,23 @@ final class JdbcCreateTableBuilder extends 
AbstractTableCreationBuilder<JdbcUpda
                        if (column.isNullable() != null && 
!column.isNullable().booleanValue()) {
                                sb.append(" NOT NULL");
                        }
-                       if (column.isPrimaryKey()) {
-                               sb.append(" PRIMARY KEY");
-                       }
                }
+        boolean primaryKeyExists = false;
+        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;
+                } else {
+                    sb.append(",");
+                    sb.append(columns[i].getName());
+                }
+            }
+        }
+        if(primaryKeyExists) {
+            sb.append(")");
+        }
                sb.append(")");
                return sb.toString();
        }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/1bc0887e/jdbc/src/test/java/org/apache/metamodel/jdbc/DerbyTest.java
----------------------------------------------------------------------
diff --git a/jdbc/src/test/java/org/apache/metamodel/jdbc/DerbyTest.java 
b/jdbc/src/test/java/org/apache/metamodel/jdbc/DerbyTest.java
index 3feb3f6..27e76a9 100644
--- a/jdbc/src/test/java/org/apache/metamodel/jdbc/DerbyTest.java
+++ b/jdbc/src/test/java/org/apache/metamodel/jdbc/DerbyTest.java
@@ -75,6 +75,18 @@ public class DerbyTest extends TestCase {
         }
     }
 
+    public void testCreateInsertAndUpdate() throws Exception {
+        Connection conn = 
DriverManager.getConnection("jdbc:derby:target/temp_derby;create=true");
+        JdbcDataContext dc = new JdbcDataContext(conn);
+        JdbcTestTemplates.simpleCreateInsertUpdateAndDrop(dc, 
"metamodel_test_simple");
+    }
+
+    public void testCompositePrimaryKeyCreation() throws Exception {
+        Connection conn = 
DriverManager.getConnection("jdbc:derby:target/temp_derby;create=true");
+        JdbcDataContext dc = new JdbcDataContext(conn);
+        JdbcTestTemplates.compositeKeyCreation(dc, 
"metamodel_test_composite_keys");
+    }
+
     public void testDifferentOperators() throws Exception {
         Connection conn = 
DriverManager.getConnection("jdbc:derby:target/temp_derby;create=true");
         
@@ -291,7 +303,7 @@ public class DerbyTest extends TestCase {
                         .ofType(ColumnType.INTEGER).execute();
                 writtenTableRef.set(writtenTable);
                 String sql = createTableBuilder.createSqlStatement();
-                assertEquals("CREATE TABLE APP.test_table (id INTEGER PRIMARY 
KEY, name VARCHAR(255), age INTEGER)",
+                assertEquals("CREATE TABLE APP.test_table (id INTEGER, name 
VARCHAR(255), age INTEGER, PRIMARY KEY(id))",
                         sql.replaceAll("\"", "|"));
                 assertNotNull(writtenTable);
             }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/1bc0887e/jdbc/src/test/java/org/apache/metamodel/jdbc/H2databaseTest.java
----------------------------------------------------------------------
diff --git a/jdbc/src/test/java/org/apache/metamodel/jdbc/H2databaseTest.java 
b/jdbc/src/test/java/org/apache/metamodel/jdbc/H2databaseTest.java
index bfe6efb..118864c 100644
--- a/jdbc/src/test/java/org/apache/metamodel/jdbc/H2databaseTest.java
+++ b/jdbc/src/test/java/org/apache/metamodel/jdbc/H2databaseTest.java
@@ -70,6 +70,16 @@ public class H2databaseTest extends TestCase {
         super.tearDown();
         conn.close();
     }
+    
+    public void testCreateInsertAndUpdate() throws Exception {
+        JdbcDataContext dc = new JdbcDataContext(conn);
+        JdbcTestTemplates.simpleCreateInsertUpdateAndDrop(dc, 
"metamodel_test_simple");
+    }
+
+    public void testCompositePrimaryKeyCreation() throws Exception {
+        JdbcDataContext dc = new JdbcDataContext(conn);
+        JdbcTestTemplates.compositeKeyCreation(dc, 
"metamodel_test_composite_keys");
+    }
 
     public void testUsingSingleUpdates() throws Exception {
         final JdbcDataContext dc = new JdbcDataContext(conn);
@@ -263,7 +273,7 @@ public class H2databaseTest extends TestCase {
                         
.withColumn("name").ofSize(255).ofType(ColumnType.VARCHAR).withColumn("age").ofType(ColumnType.INTEGER)
                         .execute();
                 String sql = createTableBuilder.createSqlStatement();
-                assertEquals("CREATE TABLE PUBLIC.test_table (id INTEGER 
PRIMARY KEY, name VARCHAR(255), age INTEGER)", sql);
+                assertEquals("CREATE TABLE PUBLIC.test_table (id INTEGER, name 
VARCHAR(255), age INTEGER, PRIMARY KEY(id))", sql);
                 assertNotNull(writtenTable);
                 assertEquals("[ID, NAME, AGE]", 
Arrays.toString(writtenTable.getColumnNames()));
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/1bc0887e/jdbc/src/test/java/org/apache/metamodel/jdbc/HsqldbTest.java
----------------------------------------------------------------------
diff --git a/jdbc/src/test/java/org/apache/metamodel/jdbc/HsqldbTest.java 
b/jdbc/src/test/java/org/apache/metamodel/jdbc/HsqldbTest.java
index f225526..1d69d6f 100644
--- a/jdbc/src/test/java/org/apache/metamodel/jdbc/HsqldbTest.java
+++ b/jdbc/src/test/java/org/apache/metamodel/jdbc/HsqldbTest.java
@@ -71,6 +71,18 @@ public class HsqldbTest extends TestCase {
         _connection.close();
     }
 
+    public void testCreateInsertAndUpdate() throws Exception {
+        Connection connection = DriverManager.getConnection("jdbc:hsqldb:mem:" 
+ getName(), USERNAME, PASSWORD);
+        JdbcDataContext dc = new JdbcDataContext(connection);
+        JdbcTestTemplates.simpleCreateInsertUpdateAndDrop(dc, 
"metamodel_test_simple");
+    }
+
+    public void testCompositePrimaryKeyCreation() throws Exception {
+        Connection connection = DriverManager.getConnection("jdbc:hsqldb:mem:" 
+ getName(), USERNAME, PASSWORD);
+        JdbcDataContext dc = new JdbcDataContext(connection);
+        JdbcTestTemplates.compositeKeyCreation(dc, 
"metamodel_test_composite_keys");
+    }
+
     public void testGetSchemas() throws Exception {
         assertNotNull(_connection);
         JdbcDataContext dc = new JdbcDataContext(_connection);
@@ -81,26 +93,31 @@ public class HsqldbTest extends TestCase {
         assertSame(defaultSchema, publicSchema);
         Table[] tables = publicSchema.getTables();
         assertEquals(13, tables.length);
-        assertEquals("[Table[name=CUSTOMERS,type=TABLE,remarks=null], " + 
"Table[name=CUSTOMER_W_TER,type=TABLE,remarks=null], "
-                + "Table[name=DEPARTMENT_MANAGERS,type=TABLE,remarks=null], " 
+ "Table[name=DIM_TIME,type=TABLE,remarks=null], "
-                + "Table[name=EMPLOYEES,type=TABLE,remarks=null], " + 
"Table[name=OFFICES,type=TABLE,remarks=null], "
-                + "Table[name=ORDERDETAILS,type=TABLE,remarks=null], " + 
"Table[name=ORDERFACT,type=TABLE,remarks=null], "
-                + "Table[name=ORDERS,type=TABLE,remarks=null], " + 
"Table[name=PAYMENTS,type=TABLE,remarks=null], "
-                + "Table[name=PRODUCTS,type=TABLE,remarks=null], " + 
"Table[name=QUADRANT_ACTUALS,type=TABLE,remarks=null], "
+        assertEquals("[Table[name=CUSTOMERS,type=TABLE,remarks=null], "
+                + "Table[name=CUSTOMER_W_TER,type=TABLE,remarks=null], "
+                + "Table[name=DEPARTMENT_MANAGERS,type=TABLE,remarks=null], "
+                + "Table[name=DIM_TIME,type=TABLE,remarks=null], " + 
"Table[name=EMPLOYEES,type=TABLE,remarks=null], "
+                + "Table[name=OFFICES,type=TABLE,remarks=null], "
+                + "Table[name=ORDERDETAILS,type=TABLE,remarks=null], "
+                + "Table[name=ORDERFACT,type=TABLE,remarks=null], " + 
"Table[name=ORDERS,type=TABLE,remarks=null], "
+                + "Table[name=PAYMENTS,type=TABLE,remarks=null], " + 
"Table[name=PRODUCTS,type=TABLE,remarks=null], "
+                + "Table[name=QUADRANT_ACTUALS,type=TABLE,remarks=null], "
                 + "Table[name=TRIAL_BALANCE,type=TABLE,remarks=null]]", 
Arrays.toString(tables));
 
         Table empTable = publicSchema.getTableByName("EMPLOYEES");
-        
assertEquals("[Column[name=EMPLOYEENUMBER,columnNumber=0,type=INTEGER,nullable=false,nativeType=INTEGER,columnSize=0],
 "
-                + 
"Column[name=LASTNAME,columnNumber=1,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=50],
 "
-                + 
"Column[name=FIRSTNAME,columnNumber=2,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=50],
 "
-                + 
"Column[name=EXTENSION,columnNumber=3,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=10],
 "
-                + 
"Column[name=EMAIL,columnNumber=4,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=100],
 "
-                + 
"Column[name=OFFICECODE,columnNumber=5,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=20],
 "
-                + 
"Column[name=REPORTSTO,columnNumber=6,type=INTEGER,nullable=true,nativeType=INTEGER,columnSize=0],
 "
-                + 
"Column[name=JOBTITLE,columnNumber=7,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=50]]",
+        assertEquals(
+                
"[Column[name=EMPLOYEENUMBER,columnNumber=0,type=INTEGER,nullable=false,nativeType=INTEGER,columnSize=0],
 "
+                        + 
"Column[name=LASTNAME,columnNumber=1,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=50],
 "
+                        + 
"Column[name=FIRSTNAME,columnNumber=2,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=50],
 "
+                        + 
"Column[name=EXTENSION,columnNumber=3,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=10],
 "
+                        + 
"Column[name=EMAIL,columnNumber=4,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=100],
 "
+                        + 
"Column[name=OFFICECODE,columnNumber=5,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=20],
 "
+                        + 
"Column[name=REPORTSTO,columnNumber=6,type=INTEGER,nullable=true,nativeType=INTEGER,columnSize=0],
 "
+                        + 
"Column[name=JOBTITLE,columnNumber=7,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=50]]",
                 Arrays.toString(empTable.getColumns()));
 
-        
assertEquals("[Column[name=EMPLOYEENUMBER,columnNumber=0,type=INTEGER,nullable=false,nativeType=INTEGER,columnSize=0]]",
+        assertEquals(
+                
"[Column[name=EMPLOYEENUMBER,columnNumber=0,type=INTEGER,nullable=false,nativeType=INTEGER,columnSize=0]]",
                 Arrays.toString(empTable.getPrimaryKeys()));
 
         // Only a single relationship registered in the database
@@ -127,7 +144,8 @@ public class HsqldbTest extends TestCase {
         assertEquals(2, tableModel.getColumnCount());
         assertEquals(2996, tableModel.getRowCount());
 
-        assertEquals(110, MetaModelHelper.executeSingleRowQuery(dc, new 
Query().selectCount().from(productsTable)).getValue(0));
+        assertEquals(110, MetaModelHelper.executeSingleRowQuery(dc, new 
Query().selectCount().from(productsTable))
+                .getValue(0));
     }
 
     public void testLimit() throws Exception {
@@ -190,14 +208,16 @@ public class HsqldbTest extends TestCase {
         assertEquals("SELECT pro-ducts.\"PRODUCTCODE\" AS c|o|d|e FROM 
PUBLIC.\"PRODUCTS\" pro-ducts", q.toString());
 
         String queryString = queryRewriter.rewriteQuery(q);
-        assertEquals("SELECT TOP 5 \"pro-ducts\".\"PRODUCTCODE\" AS 
\"c|o|d|e\" FROM PUBLIC.\"PRODUCTS\" \"pro-ducts\"",
+        assertEquals(
+                "SELECT TOP 5 \"pro-ducts\".\"PRODUCTCODE\" AS \"c|o|d|e\" 
FROM PUBLIC.\"PRODUCTS\" \"pro-ducts\"",
                 queryString);
 
         // We have to test that no additional quoting characters are added 
every
         // time we run the rewriting
         queryString = queryRewriter.rewriteQuery(q);
         queryString = queryRewriter.rewriteQuery(q);
-        assertEquals("SELECT TOP 5 \"pro-ducts\".\"PRODUCTCODE\" AS 
\"c|o|d|e\" FROM PUBLIC.\"PRODUCTS\" \"pro-ducts\"",
+        assertEquals(
+                "SELECT TOP 5 \"pro-ducts\".\"PRODUCTCODE\" AS \"c|o|d|e\" 
FROM PUBLIC.\"PRODUCTS\" \"pro-ducts\"",
                 queryString);
 
         // Test that the original query is still the same (ie. it has been
@@ -214,12 +234,15 @@ public class HsqldbTest extends TestCase {
 
         Column column = 
dc.getDefaultSchema().getTableByName("PRODUCTS").getColumnByName("PRODUCTCODE");
         assertEquals("PUBLIC.PRODUCTS.PRODUCTCODE", 
column.getQualifiedLabel());
-        assertEquals("Table[name=PRODUCTS,type=TABLE,remarks=null]", 
dc.getTableByQualifiedLabel("PUBLIC.PRODUCTS").toString());
+        assertEquals("Table[name=PRODUCTS,type=TABLE,remarks=null]", 
dc.getTableByQualifiedLabel("PUBLIC.PRODUCTS")
+                .toString());
         assertEquals("Table[name=PRODUCTS,type=TABLE,remarks=null]", 
dc.getTableByQualifiedLabel("PRODUCTS").toString());
-        
assertEquals("Column[name=PRODUCTCODE,columnNumber=0,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=50]",
 dc
-                
.getColumnByQualifiedLabel("PUBLIC.PRODUCTS.PRODUCTCODE").toString());
-        
assertEquals("Column[name=PRODUCTCODE,columnNumber=0,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=50]",
 dc
-                .getColumnByQualifiedLabel("PRODUCTS.PRODUCTCODE").toString());
+        assertEquals(
+                
"Column[name=PRODUCTCODE,columnNumber=0,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=50]",
+                
dc.getColumnByQualifiedLabel("PUBLIC.PRODUCTS.PRODUCTCODE").toString());
+        assertEquals(
+                
"Column[name=PRODUCTCODE,columnNumber=0,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=50]",
+                
dc.getColumnByQualifiedLabel("PRODUCTS.PRODUCTCODE").toString());
     }
 
     public void testQuoteInWhereClause() throws Exception {
@@ -256,8 +279,8 @@ public class HsqldbTest extends TestCase {
         q = 
dc.query().from(table).selectCount().where("name").isEquals("m'jello").toQuery();
 
         assertEquals("SELECT COUNT(*) FROM PUBLIC.\"TESTTABLE\" WHERE 
\"TESTTABLE\".\"NAME\" = 'm'jello'", q.toSql());
-        assertEquals("SELECT COUNT(*) FROM PUBLIC.\"TESTTABLE\" WHERE 
\"TESTTABLE\".\"NAME\" = 'm''jello'", dc.getQueryRewriter()
-                .rewriteQuery(q));
+        assertEquals("SELECT COUNT(*) FROM PUBLIC.\"TESTTABLE\" WHERE 
\"TESTTABLE\".\"NAME\" = 'm''jello'", dc
+                .getQueryRewriter().rewriteQuery(q));
 
         row = MetaModelHelper.executeSingleRowQuery(dc, q);
         assertEquals(1, ((Number) row.getValue(0)).intValue());
@@ -298,7 +321,8 @@ public class HsqldbTest extends TestCase {
     }
 
     public void testInsertOfDifferentTypes() throws Exception {
-        Connection connection = 
DriverManager.getConnection("jdbc:hsqldb:mem:different_types_insert", USERNAME, 
PASSWORD);
+        Connection connection = 
DriverManager.getConnection("jdbc:hsqldb:mem:different_types_insert", USERNAME,
+                PASSWORD);
 
         try {
             connection.createStatement().execute("DROP TABLE my_table");
@@ -313,9 +337,9 @@ public class HsqldbTest extends TestCase {
             @Override
             public void run(UpdateCallback cb) {
                 Table table = cb.createTable(schema, 
"my_table").withColumn("id").ofType(ColumnType.INTEGER)
-                        
.ofNativeType("IDENTITY").nullable(false).withColumn("name").ofType(ColumnType.VARCHAR).ofSize(10)
-                        
.withColumn("foo").ofType(ColumnType.BOOLEAN).nullable(true).withColumn("bar").ofType(ColumnType.BOOLEAN)
-                        .nullable(true).execute();
+                        
.ofNativeType("IDENTITY").nullable(false).withColumn("name").ofType(ColumnType.VARCHAR)
+                        
.ofSize(10).withColumn("foo").ofType(ColumnType.BOOLEAN).nullable(true).withColumn("bar")
+                        .ofType(ColumnType.BOOLEAN).nullable(true).execute();
 
                 assertEquals("MY_TABLE", table.getName());
             }
@@ -335,11 +359,14 @@ public class HsqldbTest extends TestCase {
 
                     callback.insertInto("my_table").value("name", "row 
5").value("bar", true).execute();
 
-                    callback.insertInto("my_table").value("name", "row 
6").value("foo", true).value("bar", true).execute();
+                    callback.insertInto("my_table").value("name", "row 
6").value("foo", true).value("bar", true)
+                            .execute();
 
-                    callback.insertInto("my_table").value("name", "row 
7").value("foo", true).value("bar", true).execute();
+                    callback.insertInto("my_table").value("name", "row 
7").value("foo", true).value("bar", true)
+                            .execute();
 
-                    callback.insertInto("my_table").value("name", "row 
8").value("foo", false).value("bar", false).execute();
+                    callback.insertInto("my_table").value("name", "row 
8").value("foo", false).value("bar", false)
+                            .execute();
                 }
             });
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/1bc0887e/jdbc/src/test/java/org/apache/metamodel/jdbc/JdbcTestTemplates.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/test/java/org/apache/metamodel/jdbc/JdbcTestTemplates.java 
b/jdbc/src/test/java/org/apache/metamodel/jdbc/JdbcTestTemplates.java
index 0e24d21..ae2d3c9 100644
--- a/jdbc/src/test/java/org/apache/metamodel/jdbc/JdbcTestTemplates.java
+++ b/jdbc/src/test/java/org/apache/metamodel/jdbc/JdbcTestTemplates.java
@@ -38,13 +38,16 @@ import org.apache.metamodel.BatchUpdateScript;
 import org.apache.metamodel.UpdateCallback;
 import org.apache.metamodel.UpdateScript;
 import org.apache.metamodel.create.ColumnCreationBuilder;
+import org.apache.metamodel.create.CreateTable;
 import org.apache.metamodel.data.DataSet;
 import org.apache.metamodel.data.Row;
 import org.apache.metamodel.drop.DropTable;
 import org.apache.metamodel.query.Query;
+import org.apache.metamodel.schema.Column;
 import org.apache.metamodel.schema.ColumnType;
 import org.apache.metamodel.schema.Schema;
 import org.apache.metamodel.schema.Table;
+import org.apache.metamodel.update.Update;
 import org.apache.metamodel.util.DateUtils;
 import org.apache.metamodel.util.Month;
 import org.junit.Ignore;
@@ -63,41 +66,45 @@ public class JdbcTestTemplates {
             dc.executeUpdate(new DropTable(schema, "test_table"));
         }
 
-        dc.executeUpdate(new UpdateScript() {
-            @Override
-            public void run(UpdateCallback cb) {
-                ColumnCreationBuilder createTableBuilder = 
cb.createTable(schema, "test_table").withColumn("id")
-                        
.ofType(ColumnType.FLOAT).withColumn("code").ofType(ColumnType.VARCHAR).ofSize(10);
-                Table table = createTableBuilder.execute();
-
-                cb.insertInto(table).value("id", 1.0).value("code", 
"C01").execute();
-                cb.insertInto(table).value("id", 2.0).value("code", 
"C02").execute();
-                cb.insertInto(table).value("id", 3.0).value("code", 
null).execute();
-                cb.insertInto(table).value("id", 4.0).value("code", 
"C02").execute();
-            }
-        });
-
-        assertEquals(1, 
getCount(dc.query().from("test_table").selectCount().where("code").isNull().execute()));
-        assertEquals(3, 
getCount(dc.query().from("test_table").selectCount().where("code").isNotNull().execute()));
-        assertEquals(2, 
getCount(dc.query().from("test_table").selectCount().where("code").ne("C02").execute()));
-
-        // we put the results into a map, because databases are not in 
agreement
-        // wrt. if NULL is greater than or less than other values, so ordering
-        // does not help
         final Map<Object, Object> map = new HashMap<Object, Object>();
+        try {
+            dc.executeUpdate(new UpdateScript() {
+                @Override
+                public void run(UpdateCallback cb) {
+                    ColumnCreationBuilder createTableBuilder = 
cb.createTable(schema, "test_table").withColumn("id")
+                            
.ofType(ColumnType.FLOAT).withColumn("code").ofType(ColumnType.VARCHAR).ofSize(10);
+                    Table table = createTableBuilder.execute();
+
+                    cb.insertInto(table).value("id", 1.0).value("code", 
"C01").execute();
+                    cb.insertInto(table).value("id", 2.0).value("code", 
"C02").execute();
+                    cb.insertInto(table).value("id", 3.0).value("code", 
null).execute();
+                    cb.insertInto(table).value("id", 4.0).value("code", 
"C02").execute();
+                }
+            });
 
-        DataSet ds = 
dc.query().from("test_table").select("code").selectCount().groupBy("code").execute();
-        assertTrue(ds.next());
-        map.put(ds.getRow().getValue(0), ds.getRow().getValue(1));
-        assertTrue(ds.next());
-        map.put(ds.getRow().getValue(0), ds.getRow().getValue(1));
-        assertTrue(ds.next());
-        map.put(ds.getRow().getValue(0), ds.getRow().getValue(1));
-        assertFalse(ds.next());
-
-        ds.close();
-
-        dc.executeUpdate(new DropTable(schema, "test_table"));
+            assertEquals(1, 
getCount(dc.query().from("test_table").selectCount().where("code").isNull().execute()));
+            assertEquals(3, 
getCount(dc.query().from("test_table").selectCount().where("code").isNotNull().execute()));
+            assertEquals(2, 
getCount(dc.query().from("test_table").selectCount().where("code").ne("C02").execute()));
+
+            // we put the results into a map, because databases are not in
+            // agreement
+            // wrt. if NULL is greater than or less than other values, so
+            // ordering
+            // does not help
+
+            DataSet ds = 
dc.query().from("test_table").select("code").selectCount().groupBy("code").execute();
+            assertTrue(ds.next());
+            map.put(ds.getRow().getValue(0), ds.getRow().getValue(1));
+            assertTrue(ds.next());
+            map.put(ds.getRow().getValue(0), ds.getRow().getValue(1));
+            assertTrue(ds.next());
+            map.put(ds.getRow().getValue(0), ds.getRow().getValue(1));
+            assertFalse(ds.next());
+
+            ds.close();
+        } finally {
+            dc.executeUpdate(new DropTable(schema, "test_table"));
+        }
 
         assertEquals(1, ((Number) map.get(null)).intValue());
         assertEquals(1, ((Number) map.get("C01")).intValue());
@@ -375,85 +382,89 @@ public class JdbcTestTemplates {
             }
         });
 
-        dc.executeUpdate(new UpdateScript() {
-            @Override
-            public void run(UpdateCallback cb) {
-                cb.insertInto(schema.getTableByName(tableName)).value("id", 
3).value("birthdate", "2011-12-21")
-                        .value("wakemeup", "12:00").execute();
-            }
-        });
-
-        DataSet ds = 
dc.query().from(schema.getTableByName(tableName)).select("id", "birthdate", 
"wakemeup")
-                .orderBy("id").execute();
-        assertTrue(ds.next());
-        assertEquals("1", ds.getRow().getValue(0).toString());
-        assertEquals("1982-04-20", ds.getRow().getValue(1).toString());
-        assertTrue("Actual value was: " + ds.getRow().getValue(2),
-                ds.getRow().getValue(2).toString().startsWith("07:55:00"));
-
-        assertTrue(ds.next());
-        assertEquals("2", ds.getRow().getValue(0).toString());
-        assertEquals("1982-04-21", ds.getRow().getValue(1).toString());
-        assertTrue("Actual value was: " + ds.getRow().getValue(2),
-                ds.getRow().getValue(2).toString().startsWith("18:35:00"));
-
-        assertTrue(ds.next());
-        assertEquals("3", ds.getRow().getValue(0).toString());
-        assertEquals("2011-12-21", ds.getRow().getValue(1).toString());
-        assertTrue("Actual value was: " + ds.getRow().getValue(2),
-                ds.getRow().getValue(2).toString().startsWith("12:00"));
-
-        assertFalse(ds.next());
-        ds.close();
-
-        dc.executeUpdate(new UpdateScript() {
-            @Override
-            public void run(UpdateCallback callback) {
-                // update record 1
-
-                // create a 08:00 time.
-                Calendar cal = Calendar.getInstance();
-                cal.setTimeInMillis(0);
-                cal.set(Calendar.HOUR_OF_DAY, 8);
-                cal.set(Calendar.MINUTE, 00);
-                Date wakeUpTime = cal.getTime();
-
-                callback.update(schema.getTableByName(tableName))
-                        .value("birthdate", DateUtils.get(1982, Month.APRIL, 
21)).value("wakemeup", wakeUpTime)
-                        .where("birthdate").isEquals(DateUtils.get(1982, 
Month.APRIL, 20)).execute();
-            }
-        });
-
-        ds = dc.query().from(schema.getTableByName(tableName)).select("id", 
"birthdate", "wakemeup").orderBy("id")
-                .execute();
-        assertTrue(ds.next());
-        assertEquals("1", ds.getRow().getValue(0).toString());
-        assertEquals("1982-04-21", ds.getRow().getValue(1).toString());
-        assertTrue("Actual value was: " + ds.getRow().getValue(2),
-                ds.getRow().getValue(2).toString().startsWith("08:00:00"));
-
-        assertTrue(ds.next());
-        assertEquals("2", ds.getRow().getValue(0).toString());
-        assertEquals("1982-04-21", ds.getRow().getValue(1).toString());
-        assertTrue("Actual value was: " + ds.getRow().getValue(2),
-                ds.getRow().getValue(2).toString().startsWith("18:35:00"));
+        try {
 
-        assertTrue(ds.next());
-        assertEquals("3", ds.getRow().getValue(0).toString());
-        assertEquals("2011-12-21", ds.getRow().getValue(1).toString());
-        assertTrue("Actual value was: " + ds.getRow().getValue(2),
-                ds.getRow().getValue(2).toString().startsWith("12:00"));
+            dc.executeUpdate(new UpdateScript() {
+                @Override
+                public void run(UpdateCallback cb) {
+                    
cb.insertInto(schema.getTableByName(tableName)).value("id", 
3).value("birthdate", "2011-12-21")
+                            .value("wakemeup", "12:00").execute();
+                }
+            });
 
-        assertFalse(ds.next());
-        ds.close();
+            DataSet ds = 
dc.query().from(schema.getTableByName(tableName)).select("id", "birthdate", 
"wakemeup")
+                    .orderBy("id").execute();
+            assertTrue(ds.next());
+            assertEquals("1", ds.getRow().getValue(0).toString());
+            assertEquals("1982-04-20", ds.getRow().getValue(1).toString());
+            assertTrue("Actual value was: " + ds.getRow().getValue(2),
+                    ds.getRow().getValue(2).toString().startsWith("07:55:00"));
+
+            assertTrue(ds.next());
+            assertEquals("2", ds.getRow().getValue(0).toString());
+            assertEquals("1982-04-21", ds.getRow().getValue(1).toString());
+            assertTrue("Actual value was: " + ds.getRow().getValue(2),
+                    ds.getRow().getValue(2).toString().startsWith("18:35:00"));
+
+            assertTrue(ds.next());
+            assertEquals("3", ds.getRow().getValue(0).toString());
+            assertEquals("2011-12-21", ds.getRow().getValue(1).toString());
+            assertTrue("Actual value was: " + ds.getRow().getValue(2),
+                    ds.getRow().getValue(2).toString().startsWith("12:00"));
+
+            assertFalse(ds.next());
+            ds.close();
 
-        if (schema.getTableByName(tableName) != null) {
             dc.executeUpdate(new UpdateScript() {
                 @Override
                 public void run(UpdateCallback callback) {
-                    
callback.dropTable(schema.getTableByName(tableName)).execute();
+                    // update record 1
+
+                    // create a 08:00 time.
+                    Calendar cal = Calendar.getInstance();
+                    cal.setTimeInMillis(0);
+                    cal.set(Calendar.HOUR_OF_DAY, 8);
+                    cal.set(Calendar.MINUTE, 00);
+                    Date wakeUpTime = cal.getTime();
+
+                    callback.update(schema.getTableByName(tableName))
+                            .value("birthdate", DateUtils.get(1982, 
Month.APRIL, 21)).value("wakemeup", wakeUpTime)
+                            .where("birthdate").isEquals(DateUtils.get(1982, 
Month.APRIL, 20)).execute();
                 }
             });
+
+            ds = 
dc.query().from(schema.getTableByName(tableName)).select("id", "birthdate", 
"wakemeup").orderBy("id")
+                    .execute();
+            assertTrue(ds.next());
+            assertEquals("1", ds.getRow().getValue(0).toString());
+            assertEquals("1982-04-21", ds.getRow().getValue(1).toString());
+            assertTrue("Actual value was: " + ds.getRow().getValue(2),
+                    ds.getRow().getValue(2).toString().startsWith("08:00:00"));
+
+            assertTrue(ds.next());
+            assertEquals("2", ds.getRow().getValue(0).toString());
+            assertEquals("1982-04-21", ds.getRow().getValue(1).toString());
+            assertTrue("Actual value was: " + ds.getRow().getValue(2),
+                    ds.getRow().getValue(2).toString().startsWith("18:35:00"));
+
+            assertTrue(ds.next());
+            assertEquals("3", ds.getRow().getValue(0).toString());
+            assertEquals("2011-12-21", ds.getRow().getValue(1).toString());
+            assertTrue("Actual value was: " + ds.getRow().getValue(2),
+                    ds.getRow().getValue(2).toString().startsWith("12:00"));
+
+            assertFalse(ds.next());
+            ds.close();
+
+        } finally {
+            if (schema.getTableByName(tableName) != null) {
+                dc.executeUpdate(new UpdateScript() {
+                    @Override
+                    public void run(UpdateCallback callback) {
+                        
callback.dropTable(schema.getTableByName(tableName)).execute();
+                    }
+                });
+            }
         }
     }
 
@@ -511,4 +522,104 @@ public class JdbcTestTemplates {
 
         System.setProperty(JdbcDataContext.SYSTEM_PROPERTY_CONVERT_LOBS, "");
     }
+
+    public static void simpleCreateInsertUpdateAndDrop(final JdbcDataContext 
dataContext, final String testTableName) {
+        final Schema defaultSchema = dataContext.getDefaultSchema();
+
+        if (defaultSchema.getTableByName(testTableName) != null) {
+            // clean up before
+            dataContext.executeUpdate(new DropTable(defaultSchema, 
testTableName));
+        }
+
+        dataContext.executeUpdate(new CreateTable(defaultSchema, 
testTableName).withColumn("mykey")
+                
.ofType(ColumnType.INTEGER).nullable(false).asPrimaryKey().withColumn("name")
+                .ofType(ColumnType.VARCHAR).ofSize(20));
+        try {
+            final Table table = defaultSchema.getTableByName(testTableName);
+            assertNotNull(table);
+
+            // insert
+            dataContext.executeUpdate(new UpdateScript() {
+                @Override
+                public void run(UpdateCallback callback) {
+                    callback.insertInto(table).value("mykey", 1).value("name", 
"Apache").execute();
+                    callback.insertInto(table).value("mykey", 2).value("name", 
"MetaModel").execute();
+                }
+            });
+
+            // update
+            dataContext.executeUpdate(new Update(table).value("name", 
"MM").where("mykey").eq(2));
+
+            DataSet ds = 
dataContext.query().from(table).selectAll().orderBy("mykey").execute();
+            assertTrue(ds.next());
+            assertEquals("Row[values=[1, Apache]]", ds.getRow().toString());
+            assertTrue(ds.next());
+            assertEquals("Row[values=[2, MM]]", ds.getRow().toString());
+            assertFalse(ds.next());
+            ds.close();
+
+        } finally {
+            // clean up after
+            dataContext.executeUpdate(new DropTable(defaultSchema, 
testTableName));
+        }
+    }
+
+    public static void compositeKeyCreation(JdbcDataContext dataContext, 
String testTableName) {
+        final Schema defaultSchema = dataContext.getDefaultSchema();
+
+        if (defaultSchema.getTableByName(testTableName) != null) {
+            // clean up before
+            dataContext.executeUpdate(new DropTable(defaultSchema, 
testTableName));
+        }
+
+        dataContext.executeUpdate(new CreateTable(defaultSchema, 
testTableName).withColumn("mykey1")
+                
.ofType(ColumnType.INTEGER).nullable(false).asPrimaryKey().withColumn("mykey2").ofType(ColumnType.INTEGER)
+                
.nullable(false).asPrimaryKey().withColumn("name").ofType(ColumnType.VARCHAR).ofSize(20));
+        try {
+            final Table table = defaultSchema.getTableByName(testTableName);
+            assertNotNull(table);
+
+            Column[] primaryKeys = table.getPrimaryKeys();
+            assertEquals(2, primaryKeys.length);
+            assertEquals("mykey1", primaryKeys[0].getName().toLowerCase());
+            assertEquals("mykey2", primaryKeys[1].getName().toLowerCase());
+
+            // insert two records with unique values on both keys
+            dataContext.executeUpdate(new UpdateScript() {
+                @Override
+                public void run(UpdateCallback callback) {
+                    callback.insertInto(table).value("mykey1", 
1).value("mykey2", 100).value("name", "Apache")
+                            .execute();
+                    callback.insertInto(table).value("mykey1", 
2).value("mykey2", 101).value("name", "MetaModel")
+                            .execute();
+                }
+            });
+
+            // insert a record with non-unique value on key 2 only
+            dataContext.executeUpdate(new UpdateScript() {
+                @Override
+                public void run(UpdateCallback callback) {
+                    callback.insertInto(table).value("mykey1", 
3).value("mykey2", 100).value("name", "Foo bar")
+                            .execute();
+                }
+            });
+
+            // update
+            dataContext.executeUpdate(new Update(table).value("name", 
"MM").where("mykey1").eq(2));
+
+            DataSet ds = 
dataContext.query().from(table).selectAll().orderBy("mykey1").execute();
+            assertTrue(ds.next());
+            assertEquals("Row[values=[1, 100, Apache]]", 
ds.getRow().toString());
+            assertTrue(ds.next());
+            assertEquals("Row[values=[2, 101, MM]]", ds.getRow().toString());
+            assertTrue(ds.next());
+            assertEquals("Row[values=[3, 100, Foo bar]]", 
ds.getRow().toString());
+            assertFalse(ds.next());
+            ds.close();
+
+        } finally {
+            // clean up after
+            dataContext.executeUpdate(new DropTable(defaultSchema, 
testTableName));
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/1bc0887e/jdbc/src/test/java/org/apache/metamodel/jdbc/SqliteTest.java
----------------------------------------------------------------------
diff --git a/jdbc/src/test/java/org/apache/metamodel/jdbc/SqliteTest.java 
b/jdbc/src/test/java/org/apache/metamodel/jdbc/SqliteTest.java
index fad6efe..c8cfd28 100644
--- a/jdbc/src/test/java/org/apache/metamodel/jdbc/SqliteTest.java
+++ b/jdbc/src/test/java/org/apache/metamodel/jdbc/SqliteTest.java
@@ -70,6 +70,16 @@ public class SqliteTest extends TestCase {
         _connection.close();
     }
 
+    public void testCreateInsertAndUpdate() throws Exception {
+        JdbcDataContext dc = new JdbcDataContext(_connection);
+        JdbcTestTemplates.simpleCreateInsertUpdateAndDrop(dc, 
"metamodel_test_simple");
+    }
+
+    public void testCompositePrimaryKeyCreation() throws Exception {
+        JdbcDataContext dc = new JdbcDataContext(_connection);
+        JdbcTestTemplates.compositeKeyCreation(dc, 
"metamodel_test_composite_keys");
+    }
+
     public void testDifferentOperators() throws Exception {
         JdbcTestTemplates.differentOperatorsTest(_connection);
     }
@@ -248,8 +258,7 @@ public class SqliteTest extends TestCase {
         JdbcDataContext dc = new JdbcDataContext(_connection);
         JdbcTestTemplates.convertClobToString(dc);
     }
-    
-    
+
     public void testInterpretationOfNull() throws Exception {
         JdbcTestTemplates.interpretationOfNulls(_connection);
     }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/1bc0887e/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/DB2Test.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/DB2Test.java 
b/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/DB2Test.java
index 6e28ee5..c0aeb83 100644
--- a/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/DB2Test.java
+++ b/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/DB2Test.java
@@ -32,12 +32,28 @@ import org.apache.metamodel.schema.Table;
  * modified for whatever server is available (even within Human Inference).
  */
 public class DB2Test extends AbstractJdbIntegrationTest {
-    
+
     @Override
     protected String getPropertyPrefix() {
         return "db2";
     }
 
+    public void testCreateInsertAndUpdate() throws Exception {
+        if (!isConfigured()) {
+            return;
+        }
+
+        JdbcTestTemplates.simpleCreateInsertUpdateAndDrop(getDataContext(), 
"metamodel_db2_test");
+    }
+    
+    public void testCompositePrimaryKeyCreation() throws Exception {
+        if (!isConfigured()) {
+            return;
+        }
+        
+        JdbcTestTemplates.compositeKeyCreation(getDataContext(), 
"metamodel_test_composite_keys");
+    }
+
     public void testInterpretationOfNull() throws Exception {
         if (!isConfigured()) {
             return;

http://git-wip-us.apache.org/repos/asf/metamodel/blob/1bc0887e/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/MysqlTest.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/MysqlTest.java 
b/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/MysqlTest.java
index 76b4d20..4ac0947 100644
--- 
a/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/MysqlTest.java
+++ 
b/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/MysqlTest.java
@@ -49,7 +49,7 @@ import org.apache.metamodel.schema.TableType;
  * Test case that tests mysql interaction. The test requires the "sakila" 
sample
  * database that can be found at dev.mysql.com.
  * 
- * @see http://dev.mysql.com/doc/sakila/en/sakila.html#sakila-installation
+ * @see http://dev.mysql.com/doc/sakila/en/sakila-installation.html
  */
 public class MysqlTest extends AbstractJdbIntegrationTest {
 
@@ -57,333 +57,359 @@ public class MysqlTest extends AbstractJdbIntegrationTest 
{
     protected String getPropertyPrefix() {
         return "mysql";
     }
-    
+
+    public void testCreateInsertAndUpdate() throws Exception {
+        if (!isConfigured()) {
+            return;
+        }
+
+        JdbcTestTemplates.simpleCreateInsertUpdateAndDrop(getDataContext(), 
"metamodel_test_simple");
+    }
+
+    public void testCompositePrimaryKeyCreation() throws Exception {
+        if (!isConfigured()) {
+            return;
+        }
+
+        JdbcTestTemplates.compositeKeyCreation(getDataContext(), 
"metamodel_test_composite_keys");
+    }
+
     public void testInterpretationOfNull() throws Exception {
         if (!isConfigured()) {
             return;
         }
-        
+
         JdbcTestTemplates.interpretationOfNulls(getConnection());
     }
 
-       public void testDatabaseProductName() throws Exception {
-           if (!isConfigured()) {
+    public void testDatabaseProductName() throws Exception {
+        if (!isConfigured()) {
             return;
         }
-        
-               String databaseProductName = 
getConnection().getMetaData().getDatabaseProductName();
-               assertEquals(JdbcDataContext.DATABASE_PRODUCT_MYSQL, 
databaseProductName);
-       }
 
-       public void testAutomaticConversionWhenInsertingString() throws 
Exception {
-           if (!isConfigured()) {
+        String databaseProductName = 
getConnection().getMetaData().getDatabaseProductName();
+        assertEquals(JdbcDataContext.DATABASE_PRODUCT_MYSQL, 
databaseProductName);
+    }
+
+    public void testCreateInsertAndUpdateDateTypes() throws Exception {
+        if (!isConfigured()) {
             return;
         }
-        
-               assertNotNull(getConnection());
-
-               Statement st = getConnection().createStatement();
-               try {
-                       // clean up, if nescesary
-                       st.execute("DROP TABLE test_table");
-                       st.close();
-               } catch (SQLException e) {
-                       // do nothing
-               }
-
-               assertFalse(getConnection().isReadOnly());
-
-               JdbcDataContext dc = new JdbcDataContext(getConnection());
-               final Schema schema = dc.getDefaultSchema();
-               assertEquals("sakila", schema.getName());
-
-               dc.executeUpdate(new UpdateScript() {
-                       @Override
-                       public void run(UpdateCallback cb) {
-                               Table table = cb.createTable(schema, 
"test_table").withColumn("id").ofType(ColumnType.INTEGER)
-                                               
.asPrimaryKey().withColumn("birthdate").ofType(ColumnType.DATE).execute();
-
-                               cb.insertInto(table).value("id", "1").execute();
-                               cb.insertInto(table).value("id", 
2).value("birthdate", "2011-12-21").execute();
-                       }
-               });
-
-               
assertTrue(dc.getColumnByQualifiedLabel("test_table.id").isPrimaryKey());
-               
assertFalse(dc.getColumnByQualifiedLabel("test_table.birthdate").isPrimaryKey());
-
-               DataSet ds = 
dc.query().from("test_table").select("id").and("birthdate").execute();
-               assertTrue(ds.next());
-               assertEquals("Row[values=[1, null]]", ds.getRow().toString());
-               assertEquals("java.lang.Integer", 
ds.getRow().getValue(0).getClass().getName());
-               assertTrue(ds.next());
-               assertEquals("Row[values=[2, 2011-12-21]]", 
ds.getRow().toString());
-               assertEquals("java.sql.Date", 
ds.getRow().getValue(1).getClass().getName());
-               assertFalse(ds.next());
-               ds.close();
-
-               dc.executeUpdate(new UpdateScript() {
-                       @Override
-                       public void run(UpdateCallback callback) {
-                               callback.dropTable("test_table").execute();
-                       }
-               });
-       }
-       
-       public void testCharOfSizeOne() throws Exception {
-           if (!isConfigured()) {
+
+        JdbcDataContext dataContext = getDataContext();
+        JdbcTestTemplates.createInsertAndUpdateDateTypes(dataContext, 
dataContext.getDefaultSchema(),
+                "metamodel_mysql_test");
+    }
+
+    public void testAutomaticConversionWhenInsertingString() throws Exception {
+        if (!isConfigured()) {
             return;
         }
-        
-               JdbcTestTemplates.meaningOfOneSizeChar(getConnection());
-       }
 
-       public void testAlternativeConnectionString() throws Exception {
-           if (!isConfigured()) {
+        assertNotNull(getConnection());
+
+        Statement st = getConnection().createStatement();
+        try {
+            // clean up, if nescesary
+            st.execute("DROP TABLE test_table");
+            st.close();
+        } catch (SQLException e) {
+            // do nothing
+        }
+
+        assertFalse(getConnection().isReadOnly());
+
+        JdbcDataContext dc = new JdbcDataContext(getConnection());
+        final Schema schema = dc.getDefaultSchema();
+        assertEquals("sakila", schema.getName());
+
+        dc.executeUpdate(new UpdateScript() {
+            @Override
+            public void run(UpdateCallback cb) {
+                Table table = cb.createTable(schema, 
"test_table").withColumn("id").ofType(ColumnType.INTEGER)
+                        
.asPrimaryKey().withColumn("birthdate").ofType(ColumnType.DATE).execute();
+
+                cb.insertInto(table).value("id", "1").execute();
+                cb.insertInto(table).value("id", 2).value("birthdate", 
"2011-12-21").execute();
+            }
+        });
+
+        
assertTrue(dc.getColumnByQualifiedLabel("test_table.id").isPrimaryKey());
+        
assertFalse(dc.getColumnByQualifiedLabel("test_table.birthdate").isPrimaryKey());
+
+        DataSet ds = 
dc.query().from("test_table").select("id").and("birthdate").execute();
+        assertTrue(ds.next());
+        assertEquals("Row[values=[1, null]]", ds.getRow().toString());
+        assertEquals("java.lang.Integer", 
ds.getRow().getValue(0).getClass().getName());
+        assertTrue(ds.next());
+        assertEquals("Row[values=[2, 2011-12-21]]", ds.getRow().toString());
+        assertEquals("java.sql.Date", 
ds.getRow().getValue(1).getClass().getName());
+        assertFalse(ds.next());
+        ds.close();
+
+        dc.executeUpdate(new UpdateScript() {
+            @Override
+            public void run(UpdateCallback callback) {
+                callback.dropTable("test_table").execute();
+            }
+        });
+    }
+
+    public void testCharOfSizeOne() throws Exception {
+        if (!isConfigured()) {
             return;
         }
-        
-               DataContext dc = new JdbcDataContext(getConnection(), 
TableType.DEFAULT_TABLE_TYPES, "sakila");
-               Schema[] schemas = dc.getSchemas();
-               assertEquals("[Schema[name=mysql], 
Schema[name=performance_schema], Schema[name=portal], "
-                               + "Schema[name=sakila], Schema[name=world]]", 
Arrays.toString(schemas));
-
-               Table table = 
dc.getSchemaByName("sakila").getTableByName("film");
-               Query q = new Query().from(table).select(table.getColumns());
-               DataSet data = dc.executeQuery(q);
-               TableModel tableModel = new DataSetTableModel(data);
-               assertEquals(13, tableModel.getColumnCount());
-               assertEquals(1000, tableModel.getRowCount());
-       }
-
-       public void testGetCatalogNames() throws Exception {
-           if (!isConfigured()) {
+
+        JdbcTestTemplates.meaningOfOneSizeChar(getConnection());
+    }
+
+    public void testAlternativeConnectionString() throws Exception {
+        if (!isConfigured()) {
             return;
         }
-        
-               JdbcDataContext dataContext = new 
JdbcDataContext(getConnection());
-               assertTrue(dataContext.getQueryRewriter() instanceof 
MysqlQueryRewriter);
-               String[] catalogNames = dataContext.getCatalogNames();
-               assertEquals("[information_schema, mysql, performance_schema, 
portal, sakila, world]",
-                               Arrays.toString(catalogNames));
-       }
-
-       public void testGetDefaultSchema() throws Exception {
-           if (!isConfigured()) {
+
+        DataContext dc = new JdbcDataContext(getConnection(), 
TableType.DEFAULT_TABLE_TYPES, "sakila");
+        Schema[] schemas = dc.getSchemas();
+        assertEquals("[Schema[name=mysql], Schema[name=performance_schema], 
Schema[name=portal], "
+                + "Schema[name=sakila], Schema[name=world]]", 
Arrays.toString(schemas));
+
+        Table table = dc.getSchemaByName("sakila").getTableByName("film");
+        Query q = new Query().from(table).select(table.getColumns());
+        DataSet data = dc.executeQuery(q);
+        TableModel tableModel = new DataSetTableModel(data);
+        assertEquals(13, tableModel.getColumnCount());
+        assertEquals(1000, tableModel.getRowCount());
+    }
+
+    public void testGetCatalogNames() throws Exception {
+        if (!isConfigured()) {
             return;
         }
-        
-               DataContext dc = new JdbcDataContext(getConnection());
-               Schema schema = dc.getDefaultSchema();
-               assertEquals("sakila", schema.getName());
-       }
-
-       public void testExecuteQuery() throws Exception {
-           if (!isConfigured()) {
+
+        JdbcDataContext dataContext = new JdbcDataContext(getConnection());
+        assertTrue(dataContext.getQueryRewriter() instanceof 
MysqlQueryRewriter);
+        String[] catalogNames = dataContext.getCatalogNames();
+        assertEquals("[information_schema, mysql, performance_schema, portal, 
sakila, world]",
+                Arrays.toString(catalogNames));
+    }
+
+    public void testGetDefaultSchema() throws Exception {
+        if (!isConfigured()) {
             return;
         }
-        
-               DataContext dc = new JdbcDataContext(getConnection());
-               Schema schema = dc.getDefaultSchema();
-               Table actorTable = schema.getTableByName("actor");
-               assertEquals(
-                               
"[Column[name=actor_id,columnNumber=0,type=SMALLINT,nullable=false,nativeType=SMALLINT
 UNSIGNED,columnSize=5], 
Column[name=first_name,columnNumber=1,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=45],
 
Column[name=last_name,columnNumber=2,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=45],
 
Column[name=last_update,columnNumber=3,type=TIMESTAMP,nullable=false,nativeType=TIMESTAMP,columnSize=19]]",
-                               Arrays.toString(actorTable.getColumns()));
-               Table filmTable = schema.getTableByName("film");
-               assertEquals(
-                               
"[Column[name=film_id,columnNumber=0,type=SMALLINT,nullable=false,nativeType=SMALLINT
 UNSIGNED,columnSize=5], 
Column[name=title,columnNumber=1,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=255],
 
Column[name=description,columnNumber=2,type=LONGVARCHAR,nullable=true,nativeType=TEXT,columnSize=65535],
 
Column[name=release_year,columnNumber=3,type=DATE,nullable=true,nativeType=YEAR,columnSize=0],
 
Column[name=language_id,columnNumber=4,type=TINYINT,nullable=false,nativeType=TINYINT
 UNSIGNED,columnSize=3], 
Column[name=original_language_id,columnNumber=5,type=TINYINT,nullable=true,nativeType=TINYINT
 UNSIGNED,columnSize=3], 
Column[name=rental_duration,columnNumber=6,type=TINYINT,nullable=false,nativeType=TINYINT
 UNSIGNED,columnSize=3], 
Column[name=rental_rate,columnNumber=7,type=DECIMAL,nullable=false,nativeType=DECIMAL,columnSize=4],
 
Column[name=length,columnNumber=8,type=SMALLINT,nullable=true,nativeType=SMALLINT
 UNSIGNED,columnSize=5], Column[name=replacement_cost,columnNu
 mber=9,type=DECIMAL,nullable=false,nativeType=DECIMAL,columnSize=5], 
Column[name=rating,columnNumber=10,type=CHAR,nullable=true,nativeType=ENUM,columnSize=5],
 
Column[name=special_features,columnNumber=11,type=CHAR,nullable=true,nativeType=SET,columnSize=54],
 
Column[name=last_update,columnNumber=12,type=TIMESTAMP,nullable=false,nativeType=TIMESTAMP,columnSize=19]]",
-                               Arrays.toString(filmTable.getColumns()));
-               Table filmActorJoinTable = schema.getTableByName("film_actor");
-               assertEquals(
-                               
"[Column[name=actor_id,columnNumber=0,type=SMALLINT,nullable=false,nativeType=SMALLINT
 UNSIGNED,columnSize=5], "
-                                               + 
"Column[name=film_id,columnNumber=1,type=SMALLINT,nullable=false,nativeType=SMALLINT
 UNSIGNED,columnSize=5], "
-                                               + 
"Column[name=last_update,columnNumber=2,type=TIMESTAMP,nullable=false,nativeType=TIMESTAMP,columnSize=19]]",
-                               
Arrays.toString(filmActorJoinTable.getColumns()));
-
-               Query q = new Query();
-               q.from(new FromItem(actorTable).setAlias("a"));
-               q.select(actorTable.getColumns());
-               q.getSelectClause().getItem(0).setAlias("foo-bar");
-               assertEquals(
-                               "SELECT a.`actor_id` AS foo-bar, 
a.`first_name`, a.`last_name`, a.`last_update` FROM sakila.`actor` a",
-                               q.toString());
-               FilterItem f1 = new FilterItem(q.getSelectClause().getItem(0), 
OperatorType.EQUALS_TO, 5);
-               FilterItem f2 = new FilterItem(q.getSelectClause().getItem(0), 
OperatorType.EQUALS_TO, 8);
-               q.where(new FilterItem(f1, f2));
-
-               DataSet dataSet = dc.executeQuery(q);
-               TableModel tableModel = new DataSetTableModel(dataSet);
-               assertEquals(4, tableModel.getColumnCount());
-               assertEquals(2, tableModel.getRowCount());
-               assertEquals("LOLLOBRIGIDA", tableModel.getValueAt(0, 2));
-
-               q.setMaxRows(1);
-               dataSet = dc.executeQuery(q);
-               tableModel = new DataSetTableModel(dataSet);
-               assertEquals(4, tableModel.getColumnCount());
-               assertEquals(1, tableModel.getRowCount());
-               assertEquals("LOLLOBRIGIDA", tableModel.getValueAt(0, 2));
-               
-               q.setMaxRows(1);
-               q.setFirstRow(2);
+
+        DataContext dc = new JdbcDataContext(getConnection());
+        Schema schema = dc.getDefaultSchema();
+        assertEquals("sakila", schema.getName());
+    }
+
+    public void testExecuteQuery() throws Exception {
+        if (!isConfigured()) {
+            return;
+        }
+
+        DataContext dc = new JdbcDataContext(getConnection());
+        Schema schema = dc.getDefaultSchema();
+        Table actorTable = schema.getTableByName("actor");
+        assertEquals(
+                
"[Column[name=actor_id,columnNumber=0,type=SMALLINT,nullable=false,nativeType=SMALLINT
 UNSIGNED,columnSize=5], 
Column[name=first_name,columnNumber=1,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=45],
 
Column[name=last_name,columnNumber=2,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=45],
 
Column[name=last_update,columnNumber=3,type=TIMESTAMP,nullable=false,nativeType=TIMESTAMP,columnSize=19]]",
+                Arrays.toString(actorTable.getColumns()));
+        Table filmTable = schema.getTableByName("film");
+        assertEquals(
+                
"[Column[name=film_id,columnNumber=0,type=SMALLINT,nullable=false,nativeType=SMALLINT
 UNSIGNED,columnSize=5], 
Column[name=title,columnNumber=1,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=255],
 
Column[name=description,columnNumber=2,type=LONGVARCHAR,nullable=true,nativeType=TEXT,columnSize=65535],
 
Column[name=release_year,columnNumber=3,type=DATE,nullable=true,nativeType=YEAR,columnSize=0],
 
Column[name=language_id,columnNumber=4,type=TINYINT,nullable=false,nativeType=TINYINT
 UNSIGNED,columnSize=3], 
Column[name=original_language_id,columnNumber=5,type=TINYINT,nullable=true,nativeType=TINYINT
 UNSIGNED,columnSize=3], 
Column[name=rental_duration,columnNumber=6,type=TINYINT,nullable=false,nativeType=TINYINT
 UNSIGNED,columnSize=3], 
Column[name=rental_rate,columnNumber=7,type=DECIMAL,nullable=false,nativeType=DECIMAL,columnSize=4],
 
Column[name=length,columnNumber=8,type=SMALLINT,nullable=true,nativeType=SMALLINT
 UNSIGNED,columnSize=5], Column[name=replacement_c
 
ost,columnNumber=9,type=DECIMAL,nullable=false,nativeType=DECIMAL,columnSize=5],
 
Column[name=rating,columnNumber=10,type=CHAR,nullable=true,nativeType=ENUM,columnSize=5],
 
Column[name=special_features,columnNumber=11,type=CHAR,nullable=true,nativeType=SET,columnSize=54],
 
Column[name=last_update,columnNumber=12,type=TIMESTAMP,nullable=false,nativeType=TIMESTAMP,columnSize=19]]",
+                Arrays.toString(filmTable.getColumns()));
+        Table filmActorJoinTable = schema.getTableByName("film_actor");
+        assertEquals(
+                
"[Column[name=actor_id,columnNumber=0,type=SMALLINT,nullable=false,nativeType=SMALLINT
 UNSIGNED,columnSize=5], "
+                        + 
"Column[name=film_id,columnNumber=1,type=SMALLINT,nullable=false,nativeType=SMALLINT
 UNSIGNED,columnSize=5], "
+                        + 
"Column[name=last_update,columnNumber=2,type=TIMESTAMP,nullable=false,nativeType=TIMESTAMP,columnSize=19]]",
+                Arrays.toString(filmActorJoinTable.getColumns()));
+
+        Query q = new Query();
+        q.from(new FromItem(actorTable).setAlias("a"));
+        q.select(actorTable.getColumns());
+        q.getSelectClause().getItem(0).setAlias("foo-bar");
+        assertEquals(
+                "SELECT a.`actor_id` AS foo-bar, a.`first_name`, 
a.`last_name`, a.`last_update` FROM sakila.`actor` a",
+                q.toString());
+        FilterItem f1 = new FilterItem(q.getSelectClause().getItem(0), 
OperatorType.EQUALS_TO, 5);
+        FilterItem f2 = new FilterItem(q.getSelectClause().getItem(0), 
OperatorType.EQUALS_TO, 8);
+        q.where(new FilterItem(f1, f2));
+
+        DataSet dataSet = dc.executeQuery(q);
+        TableModel tableModel = new DataSetTableModel(dataSet);
+        assertEquals(4, tableModel.getColumnCount());
+        assertEquals(2, tableModel.getRowCount());
+        assertEquals("LOLLOBRIGIDA", tableModel.getValueAt(0, 2));
+
+        q.setMaxRows(1);
+        dataSet = dc.executeQuery(q);
+        tableModel = new DataSetTableModel(dataSet);
+        assertEquals(4, tableModel.getColumnCount());
+        assertEquals(1, tableModel.getRowCount());
+        assertEquals("LOLLOBRIGIDA", tableModel.getValueAt(0, 2));
+
+        q.setMaxRows(1);
+        q.setFirstRow(2);
         dataSet = dc.executeQuery(q);
         tableModel = new DataSetTableModel(dataSet);
         assertEquals(4, tableModel.getColumnCount());
         assertEquals(1, tableModel.getRowCount());
         assertEquals("JOHANSSON", tableModel.getValueAt(0, 2));
 
-               q.getWhereClause().removeItems();
-               q.setMaxRows(25);
-               q.setFirstRow(1);
-               dataSet = dc.executeQuery(q);
-               tableModel = new DataSetTableModel(dataSet);
-               assertEquals(4, tableModel.getColumnCount());
-               assertEquals(25, tableModel.getRowCount());
-               assertEquals("GUINESS", tableModel.getValueAt(0, 2).toString());
-       }
-
-       // Test to query the film table (caused troubles in DataCleaner)
-       public void testFilmQuery() throws Exception {
-           if (!isConfigured()) {
+        q.getWhereClause().removeItems();
+        q.setMaxRows(25);
+        q.setFirstRow(1);
+        dataSet = dc.executeQuery(q);
+        tableModel = new DataSetTableModel(dataSet);
+        assertEquals(4, tableModel.getColumnCount());
+        assertEquals(25, tableModel.getRowCount());
+        assertEquals("GUINESS", tableModel.getValueAt(0, 2).toString());
+    }
+
+    // Test to query the film table (caused troubles in DataCleaner)
+    public void testFilmQuery() throws Exception {
+        if (!isConfigured()) {
             return;
         }
-        
-               DataContext dc = new JdbcDataContext(getConnection());
-               Table table = dc.getDefaultSchema().getTableByName("film");
-               Query q = new 
Query().select(table.getColumns()).from(table).setMaxRows(400);
-               dc.executeQuery(q);
-       }
-
-       public void testGetSchema() throws Exception {
-           if (!isConfigured()) {
+
+        DataContext dc = new JdbcDataContext(getConnection());
+        Table table = dc.getDefaultSchema().getTableByName("film");
+        Query q = new 
Query().select(table.getColumns()).from(table).setMaxRows(400);
+        dc.executeQuery(q);
+    }
+
+    public void testGetSchema() throws Exception {
+        if (!isConfigured()) {
             return;
         }
-        
-               DataContext dc = new JdbcDataContext(getConnection());
-               Schema[] schemas = dc.getSchemas();
-               assertEquals(5, schemas.length);
-               Schema schema = dc.getDefaultSchema();
-
-               assertEquals("[Table[name=actor,type=TABLE,remarks=], " + 
"Table[name=address,type=TABLE,remarks=], "
-                               + "Table[name=category,type=TABLE,remarks=], " 
+ "Table[name=city,type=TABLE,remarks=], "
-                               + "Table[name=country,type=TABLE,remarks=], " + 
"Table[name=customer,type=TABLE,remarks=], "
-                               + "Table[name=film,type=TABLE,remarks=], " + 
"Table[name=film_actor,type=TABLE,remarks=], "
-                               + 
"Table[name=film_category,type=TABLE,remarks=], " + 
"Table[name=film_text,type=TABLE,remarks=], "
-                               + "Table[name=inventory,type=TABLE,remarks=], " 
+ "Table[name=language,type=TABLE,remarks=], "
-                               + "Table[name=payment,type=TABLE,remarks=], " + 
"Table[name=rental,type=TABLE,remarks=], "
-                               + "Table[name=staff,type=TABLE,remarks=], " + 
"Table[name=store,type=TABLE,remarks=], "
-                               + "Table[name=actor_info,type=VIEW,remarks=], " 
+ "Table[name=customer_list,type=VIEW,remarks=], "
-                               + "Table[name=film_list,type=VIEW,remarks=], "
-                               + 
"Table[name=nicer_but_slower_film_list,type=VIEW,remarks=], "
-                               + 
"Table[name=sales_by_film_category,type=VIEW,remarks=], "
-                               + 
"Table[name=sales_by_store,type=VIEW,remarks=], " + 
"Table[name=staff_list,type=VIEW,remarks=]]",
-                               Arrays.toString(schema.getTables()));
-
-               Table filmTable = schema.getTableByName("film");
-               assertEquals(
-                               
"[Column[name=film_id,columnNumber=0,type=SMALLINT,nullable=false,nativeType=SMALLINT
 UNSIGNED,columnSize=5], "
-                                               + 
"Column[name=title,columnNumber=1,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=255],
 "
-                                               + 
"Column[name=description,columnNumber=2,type=LONGVARCHAR,nullable=true,nativeType=TEXT,columnSize=65535],
 "
-                                               + 
"Column[name=release_year,columnNumber=3,type=DATE,nullable=true,nativeType=YEAR,columnSize=0],
 "
-                                               + 
"Column[name=language_id,columnNumber=4,type=TINYINT,nullable=false,nativeType=TINYINT
 UNSIGNED,columnSize=3], "
-                                               + 
"Column[name=original_language_id,columnNumber=5,type=TINYINT,nullable=true,nativeType=TINYINT
 UNSIGNED,columnSize=3], "
-                                               + 
"Column[name=rental_duration,columnNumber=6,type=TINYINT,nullable=false,nativeType=TINYINT
 UNSIGNED,columnSize=3], "
-                                               + 
"Column[name=rental_rate,columnNumber=7,type=DECIMAL,nullable=false,nativeType=DECIMAL,columnSize=4],
 "
-                                               + 
"Column[name=length,columnNumber=8,type=SMALLINT,nullable=true,nativeType=SMALLINT
 UNSIGNED,columnSize=5], "
-                                               + 
"Column[name=replacement_cost,columnNumber=9,type=DECIMAL,nullable=false,nativeType=DECIMAL,columnSize=5],
 "
-                                               + 
"Column[name=rating,columnNumber=10,type=CHAR,nullable=true,nativeType=ENUM,columnSize=5],
 "
-                                               + 
"Column[name=special_features,columnNumber=11,type=CHAR,nullable=true,nativeType=SET,columnSize=54],
 "
-                                               + 
"Column[name=last_update,columnNumber=12,type=TIMESTAMP,nullable=false,nativeType=TIMESTAMP,columnSize=19]]",
-                               Arrays.toString(filmTable.getColumns()));
-               assertEquals(
-                               
"[Relationship[primaryTable=language,primaryColumns=[language_id],foreignTable=film,foreignColumns=[language_id]],
 
Relationship[primaryTable=language,primaryColumns=[language_id],foreignTable=film,foreignColumns=[original_language_id]],
 
Relationship[primaryTable=film,primaryColumns=[film_id],foreignTable=film_actor,foreignColumns=[film_id]],
 
Relationship[primaryTable=film,primaryColumns=[film_id],foreignTable=film_category,foreignColumns=[film_id]],
 
Relationship[primaryTable=film,primaryColumns=[film_id],foreignTable=inventory,foreignColumns=[film_id]]]",
-                               Arrays.toString(filmTable.getRelationships()));
-
-               dc = new JdbcDataContext(getConnection(), 
TableType.DEFAULT_TABLE_TYPES, "sakila");
-               schemas = dc.getSchemas();
-               assertEquals(6, schemas.length);
-               assertEquals("[Table[name=actor,type=TABLE,remarks=], " + 
"Table[name=address,type=TABLE,remarks=], "
-                               + "Table[name=category,type=TABLE,remarks=], " 
+ "Table[name=city,type=TABLE,remarks=], "
-                               + "Table[name=country,type=TABLE,remarks=], " + 
"Table[name=customer,type=TABLE,remarks=], "
-                               + "Table[name=film,type=TABLE,remarks=], " + 
"Table[name=film_actor,type=TABLE,remarks=], "
-                               + 
"Table[name=film_category,type=TABLE,remarks=], " + 
"Table[name=film_text,type=TABLE,remarks=], "
-                               + "Table[name=inventory,type=TABLE,remarks=], " 
+ "Table[name=language,type=TABLE,remarks=], "
-                               + "Table[name=payment,type=TABLE,remarks=], " + 
"Table[name=rental,type=TABLE,remarks=], "
-                               + "Table[name=staff,type=TABLE,remarks=], " + 
"Table[name=store,type=TABLE,remarks=], "
-                               + "Table[name=actor_info,type=VIEW,remarks=], " 
+ "Table[name=customer_list,type=VIEW,remarks=], "
-                               + "Table[name=film_list,type=VIEW,remarks=], "
-                               + 
"Table[name=nicer_but_slower_film_list,type=VIEW,remarks=], "
-                               + 
"Table[name=sales_by_film_category,type=VIEW,remarks=], "
-                               + 
"Table[name=sales_by_store,type=VIEW,remarks=], " + 
"Table[name=staff_list,type=VIEW,remarks=]]",
-                               Arrays.toString(schema.getTables()));
-
-               Table staffView = schema.getTableByName("staff_list");
-               assertEquals(
-                               
"[Column[name=ID,columnNumber=0,type=TINYINT,nullable=false,nativeType=TINYINT 
UNSIGNED,columnSize=3], "
-                                               + 
"Column[name=name,columnNumber=1,type=VARCHAR,nullable=true,nativeType=VARCHAR,columnSize=91],
 "
-                                               + 
"Column[name=address,columnNumber=2,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=50],
 "
-                                               + "Column[name=zip 
code,columnNumber=3,type=VARCHAR,nullable=true,nativeType=VARCHAR,columnSize=10],
 "
-                                               + 
"Column[name=phone,columnNumber=4,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=20],
 "
-                                               + 
"Column[name=city,columnNumber=5,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=50],
 "
-                                               + 
"Column[name=country,columnNumber=6,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=50],
 "
-                                               + 
"Column[name=SID,columnNumber=7,type=TINYINT,nullable=false,nativeType=TINYINT 
UNSIGNED,columnSize=3]]",
-                               Arrays.toString(staffView.getColumns()));
-       }
-
-       public void testSplitQuery() throws Exception {
-           if (!isConfigured()) {
+
+        DataContext dc = new JdbcDataContext(getConnection());
+        Schema[] schemas = dc.getSchemas();
+        assertEquals(5, schemas.length);
+        Schema schema = dc.getDefaultSchema();
+
+        assertEquals("[Table[name=actor,type=TABLE,remarks=], " + 
"Table[name=address,type=TABLE,remarks=], "
+                + "Table[name=category,type=TABLE,remarks=], " + 
"Table[name=city,type=TABLE,remarks=], "
+                + "Table[name=country,type=TABLE,remarks=], " + 
"Table[name=customer,type=TABLE,remarks=], "
+                + "Table[name=film,type=TABLE,remarks=], " + 
"Table[name=film_actor,type=TABLE,remarks=], "
+                + "Table[name=film_category,type=TABLE,remarks=], " + 
"Table[name=film_text,type=TABLE,remarks=], "
+                + "Table[name=inventory,type=TABLE,remarks=], " + 
"Table[name=language,type=TABLE,remarks=], "
+                + "Table[name=payment,type=TABLE,remarks=], " + 
"Table[name=rental,type=TABLE,remarks=], "
+                + "Table[name=staff,type=TABLE,remarks=], " + 
"Table[name=store,type=TABLE,remarks=], "
+                + "Table[name=actor_info,type=VIEW,remarks=], " + 
"Table[name=customer_list,type=VIEW,remarks=], "
+                + "Table[name=film_list,type=VIEW,remarks=], "
+                + "Table[name=nicer_but_slower_film_list,type=VIEW,remarks=], "
+                + "Table[name=sales_by_film_category,type=VIEW,remarks=], "
+                + "Table[name=sales_by_store,type=VIEW,remarks=], " + 
"Table[name=staff_list,type=VIEW,remarks=]]",
+                Arrays.toString(schema.getTables()));
+
+        Table filmTable = schema.getTableByName("film");
+        assertEquals(
+                
"[Column[name=film_id,columnNumber=0,type=SMALLINT,nullable=false,nativeType=SMALLINT
 UNSIGNED,columnSize=5], "
+                        + 
"Column[name=title,columnNumber=1,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=255],
 "
+                        + 
"Column[name=description,columnNumber=2,type=LONGVARCHAR,nullable=true,nativeType=TEXT,columnSize=65535],
 "
+                        + 
"Column[name=release_year,columnNumber=3,type=DATE,nullable=true,nativeType=YEAR,columnSize=0],
 "
+                        + 
"Column[name=language_id,columnNumber=4,type=TINYINT,nullable=false,nativeType=TINYINT
 UNSIGNED,columnSize=3], "
+                        + 
"Column[name=original_language_id,columnNumber=5,type=TINYINT,nullable=true,nativeType=TINYINT
 UNSIGNED,columnSize=3], "
+                        + 
"Column[name=rental_duration,columnNumber=6,type=TINYINT,nullable=false,nativeType=TINYINT
 UNSIGNED,columnSize=3], "
+                        + 
"Column[name=rental_rate,columnNumber=7,type=DECIMAL,nullable=false,nativeType=DECIMAL,columnSize=4],
 "
+                        + 
"Column[name=length,columnNumber=8,type=SMALLINT,nullable=true,nativeType=SMALLINT
 UNSIGNED,columnSize=5], "
+                        + 
"Column[name=replacement_cost,columnNumber=9,type=DECIMAL,nullable=false,nativeType=DECIMAL,columnSize=5],
 "
+                        + 
"Column[name=rating,columnNumber=10,type=CHAR,nullable=true,nativeType=ENUM,columnSize=5],
 "
+                        + 
"Column[name=special_features,columnNumber=11,type=CHAR,nullable=true,nativeType=SET,columnSize=54],
 "
+                        + 
"Column[name=last_update,columnNumber=12,type=TIMESTAMP,nullable=false,nativeType=TIMESTAMP,columnSize=19]]",
+                Arrays.toString(filmTable.getColumns()));
+        assertEquals(
+                
"[Relationship[primaryTable=language,primaryColumns=[language_id],foreignTable=film,foreignColumns=[language_id]],
 
Relationship[primaryTable=language,primaryColumns=[language_id],foreignTable=film,foreignColumns=[original_language_id]],
 
Relationship[primaryTable=film,primaryColumns=[film_id],foreignTable=film_actor,foreignColumns=[film_id]],
 
Relationship[primaryTable=film,primaryColumns=[film_id],foreignTable=film_category,foreignColumns=[film_id]],
 
Relationship[primaryTable=film,primaryColumns=[film_id],foreignTable=inventory,foreignColumns=[film_id]]]",
+                Arrays.toString(filmTable.getRelationships()));
+
+        dc = new JdbcDataContext(getConnection(), 
TableType.DEFAULT_TABLE_TYPES, "sakila");
+        schemas = dc.getSchemas();
+        assertEquals(6, schemas.length);
+        assertEquals("[Table[name=actor,type=TABLE,remarks=], " + 
"Table[name=address,type=TABLE,remarks=], "
+                + "Table[name=category,type=TABLE,remarks=], " + 
"Table[name=city,type=TABLE,remarks=], "
+                + "Table[name=country,type=TABLE,remarks=], " + 
"Table[name=customer,type=TABLE,remarks=], "
+                + "Table[name=film,type=TABLE,remarks=], " + 
"Table[name=film_actor,type=TABLE,remarks=], "
+                + "Table[name=film_category,type=TABLE,remarks=], " + 
"Table[name=film_text,type=TABLE,remarks=], "
+                + "Table[name=inventory,type=TABLE,remarks=], " + 
"Table[name=language,type=TABLE,remarks=], "
+                + "Table[name=payment,type=TABLE,remarks=], " + 
"Table[name=rental,type=TABLE,remarks=], "
+                + "Table[name=staff,type=TABLE,remarks=], " + 
"Table[name=store,type=TABLE,remarks=], "
+                + "Table[name=actor_info,type=VIEW,remarks=], " + 
"Table[name=customer_list,type=VIEW,remarks=], "
+                + "Table[name=film_list,type=VIEW,remarks=], "
+                + "Table[name=nicer_but_slower_film_list,type=VIEW,remarks=], "
+                + "Table[name=sales_by_film_category,type=VIEW,remarks=], "
+                + "Table[name=sales_by_store,type=VIEW,remarks=], " + 
"Table[name=staff_list,type=VIEW,remarks=]]",
+                Arrays.toString(schema.getTables()));
+
+        Table staffView = schema.getTableByName("staff_list");
+        assertEquals(
+                
"[Column[name=ID,columnNumber=0,type=TINYINT,nullable=false,nativeType=TINYINT 
UNSIGNED,columnSize=3], "
+                        + 
"Column[name=name,columnNumber=1,type=VARCHAR,nullable=true,nativeType=VARCHAR,columnSize=91],
 "
+                        + 
"Column[name=address,columnNumber=2,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=50],
 "
+                        + "Column[name=zip 
code,columnNumber=3,type=VARCHAR,nullable=true,nativeType=VARCHAR,columnSize=10],
 "
+                        + 
"Column[name=phone,columnNumber=4,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=20],
 "
+                        + 
"Column[name=city,columnNumber=5,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=50],
 "
+                        + 
"Column[name=country,columnNumber=6,type=VARCHAR,nullable=false,nativeType=VARCHAR,columnSize=50],
 "
+                        + 
"Column[name=SID,columnNumber=7,type=TINYINT,nullable=false,nativeType=TINYINT 
UNSIGNED,columnSize=3]]",
+                Arrays.toString(staffView.getColumns()));
+    }
+
+    public void testSplitQuery() throws Exception {
+        if (!isConfigured()) {
             return;
         }
-        
-               DataContext dc = new JdbcDataContext(getConnection(), 
TableType.DEFAULT_TABLE_TYPES, "sakila");
-               Schema schema = dc.getSchemaByName("sakila");
-               Table staffListTable = schema.getTableByName("staff_list");
-               assertNotNull(staffListTable);
-               Table paymentTable = schema.getTableByName("payment");
-               assertNotNull(paymentTable);
-               Column countryColumn = 
staffListTable.getColumnByName("country");
-               assertNotNull(countryColumn);
-               Column paymentColumn = paymentTable.getColumns()[0];
-               assertNotNull(paymentColumn);
-               Query q = new Query().from(staffListTable, 
"sl").from(paymentTable, "e").select(countryColumn, paymentColumn);
-               assertEquals("SELECT sl.`country`, e.`payment_id` FROM 
sakila.`staff_list` sl, sakila.`payment` e",
-                               q.toString());
-
-               QuerySplitter qs = new QuerySplitter(dc, q);
-               assertEquals(32098, qs.getRowCount());
-               List<Query> splitQueries = qs.setMaxRows(8000).splitQuery();
-               assertEquals(7, splitQueries.size());
-               assertEquals(
-                               "[SELECT sl.`country`, e.`payment_id` FROM 
sakila.`staff_list` sl, sakila.`payment` e WHERE (e.`rental_id` < 4013 OR 
e.`rental_id` IS NULL) AND (e.`customer_id` < 300 OR e.`customer_id` IS NULL), 
SELECT sl.`country`, e.`payment_id` FROM sakila.`staff_list` sl, 
sakila.`payment` e WHERE (e.`rental_id` < 4013 OR e.`rental_id` IS NULL) AND 
(e.`customer_id` > 300 OR e.`customer_id` = 300), SELECT sl.`country`, 
e.`payment_id` FROM sakila.`staff_list` sl, sakila.`payment` e WHERE 
(e.`rental_id` > 4013 OR e.`rental_id` = 4013) AND (e.`rental_id` < 8025 OR 
e.`rental_id` = 4013) AND (e.`payment_id` < 8025 OR e.`payment_id` IS NULL), 
SELECT sl.`country`, e.`payment_id` FROM sakila.`staff_list` sl, 
sakila.`payment` e WHERE (e.`rental_id` > 4013 OR e.`rental_id` = 4013) AND 
(e.`rental_id` < 8025 OR e.`rental_id` = 4013) AND (e.`payment_id` > 8025 OR 
e.`payment_id` = 8025), SELECT sl.`country`, e.`payment_id` FROM 
sakila.`staff_list` sl, sakila.`payment` e WHERE (e.`rental_id` > 8025 OR e.`re
 ntal_id` = 8025) AND (e.`rental_id` < 12037 OR e.`rental_id` = 8025) AND 
(e.`amount` < 6 OR e.`amount` IS NULL), SELECT sl.`country`, e.`payment_id` 
FROM sakila.`staff_list` sl, sakila.`payment` e WHERE (e.`rental_id` > 8025 OR 
e.`rental_id` = 8025) AND (e.`rental_id` < 12037 OR e.`rental_id` = 8025) AND 
(e.`amount` > 6 OR e.`amount` = 6), SELECT sl.`country`, e.`payment_id` FROM 
sakila.`staff_list` sl, sakila.`payment` e WHERE (e.`rental_id` > 12037 OR 
e.`rental_id` = 12037)]",
-                               Arrays.toString(splitQueries.toArray()));
-
-               DataSet data = qs.executeQueries();
-               int count = 0;
-               while (data.next()) {
-                       count++;
-               }
-               data.close();
-               assertEquals(32098, count);
-       }
-
-       public void testQueryWithSingleQuote() throws Exception {
-           if (!isConfigured()) {
+
+        DataContext dc = new JdbcDataContext(getConnection(), 
TableType.DEFAULT_TABLE_TYPES, "sakila");
+        Schema schema = dc.getSchemaByName("sakila");
+        Table staffListTable = schema.getTableByName("staff_list");
+        assertNotNull(staffListTable);
+        Table paymentTable = schema.getTableByName("payment");
+        assertNotNull(paymentTable);
+        Column countryColumn = staffListTable.getColumnByName("country");
+        assertNotNull(countryColumn);
+        Column paymentColumn = paymentTable.getColumns()[0];
+        assertNotNull(paymentColumn);
+        Query q = new Query().from(staffListTable, "sl").from(paymentTable, 
"e").select(countryColumn, paymentColumn);
+        assertEquals("SELECT sl.`country`, e.`payment_id` FROM 
sakila.`staff_list` sl, sakila.`payment` e",
+                q.toString());
+
+        QuerySplitter qs = new QuerySplitter(dc, q);
+        assertEquals(32098, qs.getRowCount());
+        List<Query> splitQueries = qs.setMaxRows(8000).splitQuery();
+        assertEquals(7, splitQueries.size());
+        assertEquals(
+                "[SELECT sl.`country`, e.`payment_id` FROM sakila.`staff_list` 
sl, sakila.`payment` e WHERE (e.`rental_id` < 4013 OR e.`rental_id` IS NULL) 
AND (e.`customer_id` < 300 OR e.`customer_id` IS NULL), SELECT sl.`country`, 
e.`payment_id` FROM sakila.`staff_list` sl, sakila.`payment` e WHERE 
(e.`rental_id` < 4013 OR e.`rental_id` IS NULL) AND (e.`customer_id` > 300 OR 
e.`customer_id` = 300), SELECT sl.`country`, e.`payment_id` FROM 
sakila.`staff_list` sl, sakila.`payment` e WHERE (e.`rental_id` > 4013 OR 
e.`rental_id` = 4013) AND (e.`rental_id` < 8025 OR e.`rental_id` = 4013) AND 
(e.`payment_id` < 8025 OR e.`payment_id` IS NULL), SELECT sl.`country`, 
e.`payment_id` FROM sakila.`staff_list` sl, sakila.`payment` e WHERE 
(e.`rental_id` > 4013 OR e.`rental_id` = 4013) AND (e.`rental_id` < 8025 OR 
e.`rental_id` = 4013) AND (e.`payment_id` > 8025 OR e.`payment_id` = 8025), 
SELECT sl.`country`, e.`payment_id` FROM sakila.`staff_list` sl, 
sakila.`payment` e WHERE (e.`rental_id` > 8
 025 OR e.`rental_id` = 8025) AND (e.`rental_id` < 12037 OR e.`rental_id` = 
8025) AND (e.`amount` < 6 OR e.`amount` IS NULL), SELECT sl.`country`, 
e.`payment_id` FROM sakila.`staff_list` sl, sakila.`payment` e WHERE 
(e.`rental_id` > 8025 OR e.`rental_id` = 8025) AND (e.`rental_id` < 12037 OR 
e.`rental_id` = 8025) AND (e.`amount` > 6 OR e.`amount` = 6), SELECT 
sl.`country`, e.`payment_id` FROM sakila.`staff_list` sl, sakila.`payment` e 
WHERE (e.`rental_id` > 12037 OR e.`rental_id` = 12037)]",
+                Arrays.toString(splitQueries.toArray()));
+
+        DataSet data = qs.executeQueries();
+        int count = 0;
+        while (data.next()) {
+            count++;
+        }
+        data.close();
+        assertEquals(32098, count);
+    }
+
+    public void testQueryWithSingleQuote() throws Exception {
+        if (!isConfigured()) {
             return;
         }
-        
-               DataContext dc = new JdbcDataContext(getConnection(), 
TableType.DEFAULT_TABLE_TYPES, "sakila");
-               Query q = 
dc.query().from("category").selectCount().where("name").eq("kasper's horror 
movies").toQuery();
-               DataSet ds = dc.executeQuery(q);
-               assertTrue(ds.next());
-               assertEquals(0, ((Number) ds.getRow().getValue(0)).intValue());
-               assertFalse(ds.next());
-       }
-
-       public void testWhiteSpaceColumns() throws Exception {
-           if (!isConfigured()) {
+
+        DataContext dc = new JdbcDataContext(getConnection(), 
TableType.DEFAULT_TABLE_TYPES, "sakila");
+        Query q = 
dc.query().from("category").selectCount().where("name").eq("kasper's horror 
movies").toQuery();
+        DataSet ds = dc.executeQuery(q);
+        assertTrue(ds.next());
+        assertEquals(0, ((Number) ds.getRow().getValue(0)).intValue());
+        assertFalse(ds.next());
+    }
+
+    public void testWhiteSpaceColumns() throws Exception {
+        if (!isConfigured()) {
             return;
         }
-        
-               DatabaseMetaData metaData = getConnection().getMetaData();
-               assertEquals("`", metaData.getIdentifierQuoteString());
-       }
+
+        DatabaseMetaData metaData = getConnection().getMetaData();
+        assertEquals("`", metaData.getIdentifierQuoteString());
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/metamodel/blob/1bc0887e/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/OracleTest.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/OracleTest.java 
b/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/OracleTest.java
index a8f8f10..9794f4c 100644
--- 
a/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/OracleTest.java
+++ 
b/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/OracleTest.java
@@ -27,6 +27,7 @@ import org.apache.metamodel.DataContext;
 import org.apache.metamodel.data.DataSet;
 import org.apache.metamodel.data.DataSetTableModel;
 import org.apache.metamodel.jdbc.JdbcDataContext;
+import org.apache.metamodel.jdbc.JdbcTestTemplates;
 import org.apache.metamodel.query.FromItem;
 import org.apache.metamodel.query.JoinType;
 import org.apache.metamodel.query.Query;
@@ -68,6 +69,22 @@ public class OracleTest extends AbstractJdbIntegrationTest {
         return "oracle";
     }
 
+    public void testCreateInsertAndUpdate() throws Exception {
+        if (!isConfigured()) {
+            return;
+        }
+
+        JdbcTestTemplates.simpleCreateInsertUpdateAndDrop(getDataContext(), 
"metamodel_test_simple");
+    }
+
+    public void testCompositePrimaryKeyCreation() throws Exception {
+        if (!isConfigured()) {
+            return;
+        }
+
+        JdbcTestTemplates.compositeKeyCreation(getDataContext(), 
"metamodel_test_composite_keys");
+    }
+
     /**
      * Ticket #170: getIndexInfo causes SQLException. We test that resultsets
      * are closed properly.

http://git-wip-us.apache.org/repos/asf/metamodel/blob/1bc0887e/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/PostgresqlTest.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/PostgresqlTest.java
 
b/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/PostgresqlTest.java
index 2195122..f20ece4 100644
--- 
a/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/PostgresqlTest.java
+++ 
b/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/PostgresqlTest.java
@@ -64,6 +64,22 @@ public class PostgresqlTest extends 
AbstractJdbIntegrationTest {
         return "postgresql";
     }
 
+    public void testCreateInsertAndUpdate() throws Exception {
+        if (!isConfigured()) {
+            return;
+        }
+
+        JdbcTestTemplates.simpleCreateInsertUpdateAndDrop(getDataContext(), 
"metamodel_test_simple");
+    }
+
+    public void testCompositePrimaryKeyCreation() throws Exception {
+        if (!isConfigured()) {
+            return;
+        }
+
+        JdbcTestTemplates.compositeKeyCreation(getDataContext(), 
"metamodel_test_composite_keys");
+    }
+
     public void testInterpretationOfNull() throws Exception {
         if (!isConfigured()) {
             return;
@@ -408,6 +424,16 @@ public class PostgresqlTest extends 
AbstractJdbIntegrationTest {
         }
     }
 
+    public void testCreateInsertAndUpdateDateTypes() throws Exception {
+        if (!isConfigured()) {
+            return;
+        }
+
+        JdbcDataContext dataContext = getDataContext();
+        JdbcTestTemplates.createInsertAndUpdateDateTypes(dataContext, 
dataContext.getDefaultSchema(),
+                "metamodel_postgresql_test");
+    }
+
     public void testCreateTableAndWriteRecords() throws Exception {
         if (!isConfigured()) {
             return;

http://git-wip-us.apache.org/repos/asf/metamodel/blob/1bc0887e/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 1ad6a85..52219c0 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
@@ -52,6 +52,22 @@ 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 testCompositePrimaryKeyCreation() throws Exception {
+        if (!isConfigured()) {
+            return;
+        }
+
+        JdbcTestTemplates.compositeKeyCreation(getDataContext(), 
"metamodel_test_composite_keys");
+    }
 
     public void testWorkingWithDates() throws Exception {
         if (!isConfigured()) {

Reply via email to