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));
+        }
+    }
 }

Reply via email to