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()) {
