Repository: metamodel Updated Branches: refs/heads/master 7fb3e167a -> 5a0106eec
Don't support primary keys with Hive Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/55f3e6df Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/55f3e6df Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/55f3e6df Branch: refs/heads/master Commit: 55f3e6dfe72ccb86b23813946693daffb84a97cd Parents: 696b9a1 Author: Gerard Dellemann <[email protected]> Authored: Mon Aug 20 14:02:24 2018 +0200 Committer: Gerard Dellemann <[email protected]> Committed: Mon Aug 20 14:02:24 2018 +0200 ---------------------------------------------------------------------- .../metamodel/jdbc/JdbcCreateTableBuilder.java | 28 +++++++++--------- .../jdbc/dialects/DefaultQueryRewriter.java | 5 ++++ .../jdbc/dialects/HiveQueryRewriter.java | 5 ++++ .../metamodel/jdbc/dialects/IQueryRewriter.java | 7 +++++ .../integrationtests/HiveIntegrationTest.java | 30 ++++++++++++++++++++ 5 files changed, 62 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/metamodel/blob/55f3e6df/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 cfde962..009c2d6 100644 --- a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcCreateTableBuilder.java +++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcCreateTableBuilder.java @@ -115,21 +115,23 @@ final class JdbcCreateTableBuilder extends AbstractTableCreationBuilder<JdbcUpda sb.append(" NOT NULL"); } } - boolean primaryKeyExists = false; - for (int i = 0; i < columns.size(); i++) { - if (columns.get(i).isPrimaryKey()) { - if (!primaryKeyExists) { - sb.append(", PRIMARY KEY("); - sb.append(columns.get(i).getName()); - primaryKeyExists = true; - } else { - sb.append(","); - sb.append(columns.get(i).getName()); + if (queryRewriter.isPrimaryKeySupported()) { + boolean primaryKeyExists = false; + for (int i = 0; i < columns.size(); i++) { + if (columns.get(i).isPrimaryKey()) { + if (!primaryKeyExists) { + sb.append(", PRIMARY KEY("); + sb.append(columns.get(i).getName()); + primaryKeyExists = true; + } else { + sb.append(","); + sb.append(columns.get(i).getName()); + } } } - } - if (primaryKeyExists) { - sb.append(")"); + if (primaryKeyExists) { + sb.append(")"); + } } sb.append(")"); return sb.toString(); http://git-wip-us.apache.org/repos/asf/metamodel/blob/55f3e6df/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 7779ff8..0d2b5db 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 @@ -220,4 +220,9 @@ public class DefaultQueryRewriter extends AbstractQueryRewriter { public String escapeQuotes(String item) { return item.replaceAll("\\'", "\\'\\'"); } + + @Override + public boolean isPrimaryKeySupported() { + return true; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/metamodel/blob/55f3e6df/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/HiveQueryRewriter.java ---------------------------------------------------------------------- diff --git a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/HiveQueryRewriter.java b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/HiveQueryRewriter.java index 59608d9..6944ab8 100644 --- a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/HiveQueryRewriter.java +++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/HiveQueryRewriter.java @@ -52,4 +52,9 @@ public class HiveQueryRewriter extends DefaultQueryRewriter { public boolean isTransactional() { return false; } + + @Override + public boolean isPrimaryKeySupported() { + return false; + } } http://git-wip-us.apache.org/repos/asf/metamodel/blob/55f3e6df/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 9d6500a..6af603a 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 @@ -162,4 +162,11 @@ public interface IQueryRewriter { * @return */ public boolean isTransactional(); + + /** + * Determines if the JDBC data source supports primary keys or not. + * + * @return + */ + public boolean isPrimaryKeySupported(); } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/metamodel/blob/55f3e6df/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/HiveIntegrationTest.java ---------------------------------------------------------------------- diff --git a/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/HiveIntegrationTest.java b/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/HiveIntegrationTest.java index b26bfe8..e02109b 100644 --- a/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/HiveIntegrationTest.java +++ b/jdbc/src/test/java/org/apache/metamodel/jdbc/integrationtests/HiveIntegrationTest.java @@ -149,4 +149,34 @@ public class HiveIntegrationTest extends AbstractJdbIntegrationTest { dataContext.executeUpdate(new DropTable(schema, tableName)); } } + + /** + * Hive doesn't support primary keys. If a column is defined as a primary key, + * MetaModel should ignore that for Hive datastores when creating a table. + * @throws Exception + */ + public void testCreateTableWithPrimaryKey() throws Exception { + if (!isConfigured()) { + return; + } + final JdbcDataContext dataContext = getDataContext(); + + final String tableName = "metamodel_" + System.currentTimeMillis(); + final Schema schema = dataContext.getDefaultSchema(); + + dataContext.executeUpdate(new CreateTable(schema, tableName) + .withColumn("foo") + .ofType(ColumnType.STRING) + .asPrimaryKey() + .withColumn("bar") + .ofType(ColumnType.INTEGER) + .withColumn("baz") + .ofType(ColumnType.VARCHAR)); + try { + final Table table = dataContext.getTableByQualifiedLabel(tableName); + assertNotNull(table); + } finally { + dataContext.executeUpdate(new DropTable(schema, tableName)); + } + } }
