Repository: metamodel
Updated Branches:
  refs/heads/master 3b7c4fcdf -> 8cb88ff79


METAMODEL-141: Fixed

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

Branch: refs/heads/master
Commit: 8cb88ff79d56ebb546a209d9e3fdce24abea96e1
Parents: 3b7c4fc
Author: Kasper Sørensen <[email protected]>
Authored: Tue May 19 16:22:03 2015 +0200
Committer: Kasper Sørensen <[email protected]>
Committed: Tue May 19 16:22:03 2015 +0200

----------------------------------------------------------------------
 CHANGES.md                                      |  1 +
 .../metamodel/jdbc/JdbcCreateTableBuilder.java  | 15 ++--
 .../apache/metamodel/jdbc/JdbcDataContext.java  |  4 +
 .../jdbc/dialects/AbstractQueryRewriter.java    | 15 +++-
 .../jdbc/dialects/DB2QueryRewriter.java         |  4 +-
 .../jdbc/dialects/DefaultQueryRewriter.java     | 18 ++++-
 .../jdbc/dialects/HsqldbQueryRewriter.java      |  7 +-
 .../metamodel/jdbc/dialects/IQueryRewriter.java |  5 +-
 .../jdbc/dialects/MysqlQueryRewriter.java       | 17 +++++
 .../jdbc/dialects/OracleQueryRewriter.java      | 80 ++++++++++++++++++++
 .../jdbc/dialects/PostgresqlQueryRewriter.java  |  7 +-
 .../jdbc/dialects/SQLServerQueryRewriter.java   | 17 +++++
 .../dialects/DB2QueryRewriterTest.java          |  4 +-
 .../dialects/MysqlQueryRewriterTest.java        | 10 +++
 .../dialects/SQLServerQueryRewriterTest.java    | 12 ++-
 .../jdbc/integrationtests/OracleTest.java       | 11 +++
 16 files changed, 204 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metamodel/blob/8cb88ff7/CHANGES.md
----------------------------------------------------------------------
diff --git a/CHANGES.md b/CHANGES.md
index cff4ce4..ab095a8 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -2,6 +2,7 @@
 
  * [METAMODEL-136] - Added LIKE operator native support (using conversion to 
regex) for MongoDB.
  * [METAMODEL-138] - Allow empty characteres before AS keyword.
+ * [METAMODEL-141] - Improved mapping of ColumnType to SQL data types for 
Oracle, SQL Server, MySQL, DB2 and PostgreSQL
 
 ### Apache MetaModel 4.3.3
 

http://git-wip-us.apache.org/repos/asf/metamodel/blob/8cb88ff7/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcCreateTableBuilder.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcCreateTableBuilder.java 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcCreateTableBuilder.java
index c0a5999..404f7ea 100644
--- a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcCreateTableBuilder.java
+++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcCreateTableBuilder.java
@@ -93,23 +93,22 @@ final class JdbcCreateTableBuilder extends 
AbstractTableCreationBuilder<JdbcUpda
                        
sb.append(getUpdateCallback().quoteIfNescesary(column.getName()));
                        sb.append(' ');
                        final String nativeType = column.getNativeType();
+                       final Integer columnSize = column.getColumnSize();
                        if (nativeType == null) {
                                ColumnType columnType = column.getType();
                                if (columnType == null) {
                                        columnType = ColumnType.VARCHAR;
                                }
 
-                               final String columnTypeString = 
queryRewriter.rewriteColumnType(columnType);
-
+                               final String columnTypeString = 
queryRewriter.rewriteColumnType(columnType, columnSize);
                                sb.append(columnTypeString);
                        } else {
                                sb.append(nativeType);
-                       }
-                       final Integer columnSize = column.getColumnSize();
-                       if (columnSize != null) {
-                               sb.append('(');
-                               sb.append(columnSize.intValue());
-                               sb.append(')');
+                               if (columnSize != null) {
+                                   sb.append('(');
+                                   sb.append(columnSize.intValue());
+                                   sb.append(')');
+                               }
                        }
                        if (column.isNullable() != null && 
!column.isNullable().booleanValue()) {
                                sb.append(" NOT NULL");

http://git-wip-us.apache.org/repos/asf/metamodel/blob/8cb88ff7/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java
index a20924c..4c55b15 100644
--- a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java
+++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java
@@ -47,6 +47,7 @@ import org.apache.metamodel.jdbc.dialects.H2QueryRewriter;
 import org.apache.metamodel.jdbc.dialects.HsqldbQueryRewriter;
 import org.apache.metamodel.jdbc.dialects.IQueryRewriter;
 import org.apache.metamodel.jdbc.dialects.MysqlQueryRewriter;
+import org.apache.metamodel.jdbc.dialects.OracleQueryRewriter;
 import org.apache.metamodel.jdbc.dialects.PostgresqlQueryRewriter;
 import org.apache.metamodel.jdbc.dialects.SQLServerQueryRewriter;
 import org.apache.metamodel.query.CompiledQuery;
@@ -79,6 +80,7 @@ public class JdbcDataContext extends AbstractDataContext 
implements UpdateableDa
     public static final String DATABASE_PRODUCT_SQLSERVER = "Microsoft SQL 
Server";
     public static final String DATABASE_PRODUCT_DB2 = "DB2";
     public static final String DATABASE_PRODUCT_DB2_PREFIX = "DB2/";
+    public static final String DATABASE_PRODUCT_ORACLE = "Oracle";
 
     public static final ColumnType COLUMN_TYPE_CLOB_AS_STRING = new 
ColumnTypeImpl("CLOB",
             SuperColumnType.LITERAL_TYPE, String.class, true);
@@ -213,6 +215,8 @@ public class JdbcDataContext extends AbstractDataContext 
implements UpdateableDa
             setQueryRewriter(new MysqlQueryRewriter(this));
         } else if (DATABASE_PRODUCT_POSTGRESQL.equals(_databaseProductName)) {
             setQueryRewriter(new PostgresqlQueryRewriter(this));
+        } else if (DATABASE_PRODUCT_ORACLE.equals(_databaseProductName)) {
+            setQueryRewriter(new OracleQueryRewriter(this));
         } else if (DATABASE_PRODUCT_SQLSERVER.equals(_databaseProductName)) {
             setQueryRewriter(new SQLServerQueryRewriter(this));
         } else if (DATABASE_PRODUCT_DB2.equals(_databaseProductName)

http://git-wip-us.apache.org/repos/asf/metamodel/blob/8cb88ff7/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/AbstractQueryRewriter.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/AbstractQueryRewriter.java
 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/AbstractQueryRewriter.java
index f83057e..f36c10a 100644
--- 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/AbstractQueryRewriter.java
+++ 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/AbstractQueryRewriter.java
@@ -96,8 +96,19 @@ public abstract class AbstractQueryRewriter implements 
IQueryRewriter {
     }
 
     @Override
-    public String rewriteColumnType(ColumnType columnType) {
-        return columnType.toString();
+    public String rewriteColumnType(ColumnType columnType, Integer columnSize) 
{
+        return rewriteColumnTypeInternal(columnType.toString(), columnSize);
+    }
+    
+    protected String rewriteColumnTypeInternal(String columnType, Object 
columnParameter) {
+        final StringBuilder sb = new StringBuilder();
+        sb.append(columnType);
+        if (columnParameter != null) {
+            sb.append('(');
+            sb.append(columnParameter);
+            sb.append(')');
+        }
+        return sb.toString();
     }
 
     protected String rewriteOrderByClause(Query query, OrderByClause 
orderByClause) {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/8cb88ff7/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/DB2QueryRewriter.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/DB2QueryRewriter.java 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/DB2QueryRewriter.java
index 03e9318..0a4c31e 100644
--- 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/DB2QueryRewriter.java
+++ 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/DB2QueryRewriter.java
@@ -116,11 +116,11 @@ public class DB2QueryRewriter extends 
DefaultQueryRewriter implements IQueryRewr
     }
 
     @Override
-    public String rewriteColumnType(ColumnType columnType) {
+    public String rewriteColumnType(ColumnType columnType, Integer columnSize) 
{
         if (columnType == ColumnType.BOOLEAN || columnType == ColumnType.BIT) {
             return "SMALLINT";
         }
-        return super.rewriteColumnType(columnType);
+        return super.rewriteColumnType(columnType, columnSize);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/metamodel/blob/8cb88ff7/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/DefaultQueryRewriter.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/DefaultQueryRewriter.java
 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/DefaultQueryRewriter.java
index 1ac72bc..e44df06 100644
--- 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/DefaultQueryRewriter.java
+++ 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/DefaultQueryRewriter.java
@@ -27,6 +27,7 @@ import org.apache.metamodel.query.FromItem;
 import org.apache.metamodel.query.OperatorType;
 import org.apache.metamodel.query.Query;
 import org.apache.metamodel.query.SelectItem;
+import org.apache.metamodel.schema.ColumnType;
 import org.apache.metamodel.util.CollectionUtils;
 
 /**
@@ -68,6 +69,19 @@ public class DefaultQueryRewriter extends 
AbstractQueryRewriter {
         return query;
     }
 
+    @Override
+    public String rewriteColumnType(ColumnType columnType, Integer columnSize) 
{
+        if (columnType == ColumnType.STRING) {
+            // convert STRING to VARCHAR as the default SQL type for strings
+            rewriteColumnType(ColumnType.VARCHAR, columnSize);
+        }
+        if (columnType == ColumnType.NUMBER) {
+            // convert NUMBER to FLOAT as the default SQL type for numbers
+            rewriteColumnType(ColumnType.FLOAT, columnSize);
+        }
+        return super.rewriteColumnType(columnType, columnSize);
+    }
+
     private boolean needsQuoting(String alias, String identifierQuoteString) {
         boolean result = false;
         if (alias != null && identifierQuoteString != null) {
@@ -111,7 +125,9 @@ public class DefaultQueryRewriter extends 
AbstractQueryRewriter {
                 for (ListIterator<Object> it = elements.listIterator(); 
it.hasNext();) {
                     Object next = it.next();
                     if (next == null) {
-                        logger.warn("element in IN list is NULL, which isn't 
supported by SQL. Stripping the element from the list: {}", item);
+                        logger.warn(
+                                "element in IN list is NULL, which isn't 
supported by SQL. Stripping the element from the list: {}",
+                                item);
                         it.remove();
                     } else if (next instanceof String) {
                         String str = (String) next;

http://git-wip-us.apache.org/repos/asf/metamodel/blob/8cb88ff7/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/HsqldbQueryRewriter.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/HsqldbQueryRewriter.java
 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/HsqldbQueryRewriter.java
index cc3d202..5d64b31 100644
--- 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/HsqldbQueryRewriter.java
+++ 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/HsqldbQueryRewriter.java
@@ -36,11 +36,14 @@ public class HsqldbQueryRewriter extends 
DefaultQueryRewriter {
     }
 
     @Override
-    public String rewriteColumnType(ColumnType columnType) {
+    public String rewriteColumnType(ColumnType columnType, Integer columnSize) 
{
+        if (columnType == ColumnType.BIT) {
+            return "BOOLEAN";
+        }
         if (columnType == ColumnType.BLOB) {
             return "LONGVARBINARY";
         }
-        return super.rewriteColumnType(columnType);
+        return super.rewriteColumnType(columnType, columnSize);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/metamodel/blob/8cb88ff7/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/IQueryRewriter.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/IQueryRewriter.java 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/IQueryRewriter.java
index 17140e3..1b05402 100644
--- a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/IQueryRewriter.java
+++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/IQueryRewriter.java
@@ -74,10 +74,11 @@ public interface IQueryRewriter {
         * different names for them. The implementation of this method will do 
that
         * conversion.
         * 
-        * @param columnType
+        * @param columnType the (non-null) {@link ColumnType} to rewrite
+        * @param columnSize the (possibly null) column size that may or may 
not have been specified
         * @return
         */
-       public String rewriteColumnType(ColumnType columnType);
+       public String rewriteColumnType(ColumnType columnType, Integer 
columnSize);
 
        /**
         * Gets the column type for a specific JDBC type (as defined in

http://git-wip-us.apache.org/repos/asf/metamodel/blob/8cb88ff7/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/MysqlQueryRewriter.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/MysqlQueryRewriter.java 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/MysqlQueryRewriter.java
index 3c0037b..4ea8f78 100644
--- 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/MysqlQueryRewriter.java
+++ 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/MysqlQueryRewriter.java
@@ -19,6 +19,7 @@
 package org.apache.metamodel.jdbc.dialects;
 
 import org.apache.metamodel.jdbc.JdbcDataContext;
+import org.apache.metamodel.schema.ColumnType;
 
 /**
  * Query rewriter for MySQL
@@ -33,4 +34,20 @@ public class MysqlQueryRewriter extends 
LimitOffsetQueryRewriter implements IQue
     public String escapeQuotes(String filterItemOperand) {
         return filterItemOperand.replaceAll("\\'", "\\\\'");
     }
+
+    @Override
+    public String rewriteColumnType(ColumnType columnType, Integer columnSize) 
{
+        if (columnType == ColumnType.NUMERIC) {
+            return super.rewriteColumnType(ColumnType.DECIMAL, columnSize);
+        }
+        if (columnType.isLiteral() && columnSize == null) {
+            if (columnType == ColumnType.STRING || columnType == 
ColumnType.VARCHAR
+                    || columnType == ColumnType.NVARCHAR) {
+                // MySQL requires size to be specified, so instead we choose 
the
+                // text type
+                return "TEXT";
+            }
+        }
+        return super.rewriteColumnType(columnType, columnSize);
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/metamodel/blob/8cb88ff7/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriter.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriter.java
 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriter.java
new file mode 100644
index 0000000..cad357b
--- /dev/null
+++ 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/OracleQueryRewriter.java
@@ -0,0 +1,80 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.metamodel.jdbc.dialects;
+
+import org.apache.metamodel.jdbc.JdbcDataContext;
+import org.apache.metamodel.schema.ColumnType;
+
+/**
+ * Query rewriter for Oracle
+ */
+public class OracleQueryRewriter extends DefaultQueryRewriter {
+
+    public OracleQueryRewriter(JdbcDataContext dataContext) {
+        super(dataContext);
+    }
+
+    @Override
+    public String rewriteColumnType(ColumnType columnType, Integer columnSize) 
{
+        if (columnType == ColumnType.NUMBER || columnType == 
ColumnType.NUMERIC || columnType == ColumnType.DECIMAL) {
+            // as one of the only relational databases out there, Oracle has a
+            // NUMBER type. For this reason NUMBER would be replaced by the
+            // super-type's logic, but we handle it specifically here.
+            super.rewriteColumnTypeInternal("NUMBER", columnSize);
+        }
+        if (columnType == ColumnType.BOOLEAN || columnType == ColumnType.BIT) {
+            // Oracle has no boolean type, but recommends NUMBER(3) or CHAR(1).
+            // For consistency with most other databases who have either a
+            // boolean or a bit, we use the number variant because it's return
+            // values (0 or 1) can be converted the most easily back to a
+            // boolean.
+            return "NUMBER(3)";
+        }
+        if (columnType == ColumnType.DOUBLE) {
+            return "BINARY_DOUBLE";
+        }
+        if (columnType == ColumnType.FLOAT) {
+            return "BINARY_FLOAT";
+        }
+        if (columnType == ColumnType.BINARY || columnType == 
ColumnType.VARBINARY) {
+            return "RAW";
+        }
+
+        // following conversions based on
+        // http://docs.oracle.com/cd/B19306_01/gateways.102/b14270/apa.htm
+        if (columnType == ColumnType.TINYINT) {
+            return "NUMBER(3)";
+        }
+        if (columnType == ColumnType.SMALLINT) {
+            return "NUMBER(5)";
+        }
+        if (columnType == ColumnType.INTEGER) {
+            return "NUMBER(10)";
+        }
+        if (columnType == ColumnType.BIGINT) {
+            return "NUMBER(19)";
+        }
+
+        // Oracle has no "time only" data type but 'date' also includes time
+        if (columnType == ColumnType.TIME) {
+            super.rewriteColumnType(ColumnType.DATE, columnSize);
+        }
+        return super.rewriteColumnType(columnType, columnSize);
+    }
+}

http://git-wip-us.apache.org/repos/asf/metamodel/blob/8cb88ff7/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/PostgresqlQueryRewriter.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/PostgresqlQueryRewriter.java
 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/PostgresqlQueryRewriter.java
index c3fd322..d0b9ab5 100644
--- 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/PostgresqlQueryRewriter.java
+++ 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/PostgresqlQueryRewriter.java
@@ -45,11 +45,14 @@ public class PostgresqlQueryRewriter extends 
LimitOffsetQueryRewriter implements
     }
 
     @Override
-    public String rewriteColumnType(ColumnType columnType) {
+    public String rewriteColumnType(ColumnType columnType, Integer columnSize) 
{
         if (columnType == ColumnType.BLOB) {
             return "bytea";
         }
-        return super.rewriteColumnType(columnType);
+        if (columnType == ColumnType.BIT) {
+            return "BOOLEAN";
+        }
+        return super.rewriteColumnType(columnType, columnSize);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/metamodel/blob/8cb88ff7/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/SQLServerQueryRewriter.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/SQLServerQueryRewriter.java
 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/SQLServerQueryRewriter.java
index d83d6d2..f261d40 100644
--- 
a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/SQLServerQueryRewriter.java
+++ 
b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/SQLServerQueryRewriter.java
@@ -28,6 +28,7 @@ import org.apache.metamodel.query.Query;
 import org.apache.metamodel.query.SelectClause;
 import org.apache.metamodel.query.SelectItem;
 import org.apache.metamodel.schema.Column;
+import org.apache.metamodel.schema.ColumnType;
 import org.apache.metamodel.util.DateUtils;
 
 public class SQLServerQueryRewriter extends DefaultQueryRewriter {
@@ -67,6 +68,22 @@ public class SQLServerQueryRewriter extends 
DefaultQueryRewriter {
     }
 
     @Override
+    public String rewriteColumnType(ColumnType columnType, Integer columnSize) 
{
+        if (columnType == ColumnType.DOUBLE) {
+            return "FLOAT";
+        }
+        if (columnType == ColumnType.BOOLEAN) {
+            return "BIT";
+        }
+        if (columnType.isLiteral() && columnSize == null) {
+            // SQL server provides the convenient MAX parameter. If not
+            // specified, the default size of e.g. a VARCHAR is 1!
+            return rewriteColumnTypeInternal(columnType.getName(), "MAX");
+        }
+        return super.rewriteColumnType(columnType, columnSize);
+    }
+
+    @Override
     public String rewriteFilterItem(FilterItem item) {
         if (item.isCompoundFilter()) {
             return super.rewriteFilterItem(item);

http://git-wip-us.apache.org/repos/asf/metamodel/blob/8cb88ff7/jdbc/src/test/java/org/apache/metamodel/dialects/DB2QueryRewriterTest.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/test/java/org/apache/metamodel/dialects/DB2QueryRewriterTest.java 
b/jdbc/src/test/java/org/apache/metamodel/dialects/DB2QueryRewriterTest.java
index 9108461..06c667e 100644
--- a/jdbc/src/test/java/org/apache/metamodel/dialects/DB2QueryRewriterTest.java
+++ b/jdbc/src/test/java/org/apache/metamodel/dialects/DB2QueryRewriterTest.java
@@ -114,9 +114,9 @@ public class DB2QueryRewriterTest extends TestCase {
     }
 
     public void testRewriteColumnType() throws Exception {
-        assertEquals("SMALLINT", new 
DB2QueryRewriter(null).rewriteColumnType(ColumnType.BOOLEAN));
+        assertEquals("SMALLINT", new 
DB2QueryRewriter(null).rewriteColumnType(ColumnType.BOOLEAN, null));
 
-        assertEquals("VARCHAR", new 
DB2QueryRewriter(null).rewriteColumnType(ColumnType.VARCHAR));
+        assertEquals("VARCHAR", new 
DB2QueryRewriter(null).rewriteColumnType(ColumnType.VARCHAR, null));
     }
 
     public void testRewriteSelectItems() throws Exception {

http://git-wip-us.apache.org/repos/asf/metamodel/blob/8cb88ff7/jdbc/src/test/java/org/apache/metamodel/dialects/MysqlQueryRewriterTest.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/test/java/org/apache/metamodel/dialects/MysqlQueryRewriterTest.java 
b/jdbc/src/test/java/org/apache/metamodel/dialects/MysqlQueryRewriterTest.java
index f9aec48..dfbb0e5 100644
--- 
a/jdbc/src/test/java/org/apache/metamodel/dialects/MysqlQueryRewriterTest.java
+++ 
b/jdbc/src/test/java/org/apache/metamodel/dialects/MysqlQueryRewriterTest.java
@@ -23,6 +23,7 @@ import junit.framework.TestCase;
 import org.apache.metamodel.jdbc.dialects.MysqlQueryRewriter;
 import org.apache.metamodel.query.OperatorType;
 import org.apache.metamodel.query.Query;
+import org.apache.metamodel.schema.ColumnType;
 import org.apache.metamodel.schema.MutableColumn;
 import org.apache.metamodel.schema.MutableTable;
 
@@ -43,4 +44,13 @@ public class MysqlQueryRewriterTest extends TestCase {
                assertEquals("SELECT bar FROM foo WHERE bar = 'M\\'jellow 
strain\\'ger'",
                                queryString);
        }
+       
+       public void testRewriteLiteralColumnTypesWithoutArgs() throws Exception 
{
+           MysqlQueryRewriter qr = new MysqlQueryRewriter(null);
+        assertEquals("TEXT", qr.rewriteColumnType(ColumnType.VARCHAR, null));
+        assertEquals("TEXT", qr.rewriteColumnType(ColumnType.NVARCHAR, null));
+        assertEquals("TEXT", qr.rewriteColumnType(ColumnType.STRING, null));
+        assertEquals("CHAR", qr.rewriteColumnType(ColumnType.CHAR, null));
+        assertEquals("NCHAR", qr.rewriteColumnType(ColumnType.NCHAR, null));
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/metamodel/blob/8cb88ff7/jdbc/src/test/java/org/apache/metamodel/dialects/SQLServerQueryRewriterTest.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/test/java/org/apache/metamodel/dialects/SQLServerQueryRewriterTest.java
 
b/jdbc/src/test/java/org/apache/metamodel/dialects/SQLServerQueryRewriterTest.java
index fd55486..9b588ab 100644
--- 
a/jdbc/src/test/java/org/apache/metamodel/dialects/SQLServerQueryRewriterTest.java
+++ 
b/jdbc/src/test/java/org/apache/metamodel/dialects/SQLServerQueryRewriterTest.java
@@ -20,7 +20,6 @@ package org.apache.metamodel.dialects;
 
 import junit.framework.TestCase;
 
-import org.apache.metamodel.jdbc.dialects.IQueryRewriter;
 import org.apache.metamodel.jdbc.dialects.SQLServerQueryRewriter;
 import org.apache.metamodel.query.FilterItem;
 import org.apache.metamodel.query.FromItem;
@@ -37,7 +36,7 @@ public class SQLServerQueryRewriterTest extends TestCase {
 
     private MutableTable table;
     private MutableColumn column;
-    private IQueryRewriter qr = new SQLServerQueryRewriter(null);
+    private SQLServerQueryRewriter qr = new SQLServerQueryRewriter(null);
 
     @Override
     protected void setUp() throws Exception {
@@ -50,6 +49,15 @@ public class SQLServerQueryRewriterTest extends TestCase {
         column.setTable(table);
     }
 
+    public void testRewriteColumnTypeDouble() throws Exception {
+        assertEquals("FLOAT", qr.rewriteColumnType(ColumnType.DOUBLE, null));
+    }
+
+    public void testRewriteColumnTypeVarchar() throws Exception {
+        assertEquals("VARCHAR(128)", qr.rewriteColumnType(ColumnType.VARCHAR, 
128));
+        assertEquals("VARCHAR(MAX)", qr.rewriteColumnType(ColumnType.VARCHAR, 
null));
+    }
+
     public void testRewriteFromItem() throws Exception {
         assertEquals("foo", qr.rewriteFromItem(new FromItem(new 
MutableTable("foo"))));
     }

http://git-wip-us.apache.org/repos/asf/metamodel/blob/8cb88ff7/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 9794f4c..d16547f 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
@@ -28,6 +28,8 @@ 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.jdbc.dialects.IQueryRewriter;
+import org.apache.metamodel.jdbc.dialects.OracleQueryRewriter;
 import org.apache.metamodel.query.FromItem;
 import org.apache.metamodel.query.JoinType;
 import org.apache.metamodel.query.Query;
@@ -68,6 +70,15 @@ public class OracleTest extends AbstractJdbIntegrationTest {
     protected String getPropertyPrefix() {
         return "oracle";
     }
+    
+    public void testGetQueryRewriter() throws Exception {
+        if (!isConfigured()) {
+            return;
+        }
+
+        IQueryRewriter queryRewriter = getDataContext().getQueryRewriter();
+        assertEquals(OracleQueryRewriter.class, queryRewriter.getClass());
+    }
 
     public void testCreateInsertAndUpdate() throws Exception {
         if (!isConfigured()) {

Reply via email to