You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by da...@apache.org on 2019/03/06 19:08:24 UTC

[hive] 01/03: HIVE-21253: Support DB2 in JDBC StorageHandler (Daniel Dai, reviewed by Thejas Nair)

This is an automated email from the ASF dual-hosted git repository.

daijy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git

commit 125288658938dcfa1fe8c144dff8b1f800b1bcc4
Author: Daniel Dai <da...@gmail.com>
AuthorDate: Fri Mar 1 21:23:02 2019 -0800

    HIVE-21253: Support DB2 in JDBC StorageHandler (Daniel Dai, reviewed by Thejas Nair)
    
    Signed-off-by: Thejas M Nair <th...@hortonworks.com>
---
 .../hive/storage/jdbc/JdbcStorageHandler.java      |  4 ++
 .../hive/storage/jdbc/conf/DatabaseType.java       |  1 +
 .../hive/storage/jdbc/dao/DB2DatabaseAccessor.java | 44 ++++++++++++++++++++++
 .../storage/jdbc/dao/DatabaseAccessorFactory.java  |  4 ++
 4 files changed, 53 insertions(+)

diff --git a/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/JdbcStorageHandler.java b/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/JdbcStorageHandler.java
index d8c5433..0479eec 100644
--- a/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/JdbcStorageHandler.java
+++ b/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/JdbcStorageHandler.java
@@ -150,6 +150,10 @@ public class JdbcStorageHandler implements HiveStorageHandler {
     } catch (Exception e) {
     }
     try {
+      classesToLoad.add(Class.forName("com.ibm.db2.jcc.DB2Driver"));
+    } catch (Exception e) {
+    } // Adding db2 jdbc driver if exists
+    try {
       JarUtils.addDependencyJars(conf, classesToLoad);
     } catch (IOException e) {
       LOGGER.error("Could not add necessary JDBC storage handler dependencies to classpath", e);
diff --git a/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/conf/DatabaseType.java b/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/conf/DatabaseType.java
index b8b770f..bdcc3f3 100644
--- a/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/conf/DatabaseType.java
+++ b/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/conf/DatabaseType.java
@@ -17,6 +17,7 @@ package org.apache.hive.storage.jdbc.conf;
 public enum DatabaseType {
   MYSQL,
   H2,
+  DB2,
   DERBY,
   ORACLE,
   POSTGRES,
diff --git a/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/DB2DatabaseAccessor.java b/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/DB2DatabaseAccessor.java
new file mode 100644
index 0000000..fab9829
--- /dev/null
+++ b/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/DB2DatabaseAccessor.java
@@ -0,0 +1,44 @@
+/*
+ * 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.hive.storage.jdbc.dao;
+
+/**
+ * DB2 specific data accessor. DB2 JDBC drivers works similar to Postgres, so the current
+ * implementation of DB2DatabaseAccessor is the same as PostgresDatabaseAccessor
+ */
+public class DB2DatabaseAccessor extends GenericJdbcDatabaseAccessor {
+  @Override
+  protected String addLimitAndOffsetToQuery(String sql, int limit, int offset) {
+    if (offset == 0) {
+      return addLimitToQuery(sql, limit);
+    } else {
+      if (limit == -1) {
+        return sql;
+      }
+      return sql + " LIMIT " + limit + " OFFSET " + offset;
+    }
+  }
+
+  @Override
+  protected String addLimitToQuery(String sql, int limit) {
+    if (limit == -1) {
+      return sql;
+    }
+    return sql + " LIMIT " + limit;
+  }
+}
diff --git a/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/DatabaseAccessorFactory.java b/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/DatabaseAccessorFactory.java
index 692cb23..e531ecc 100644
--- a/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/DatabaseAccessorFactory.java
+++ b/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/DatabaseAccessorFactory.java
@@ -51,6 +51,10 @@ public class DatabaseAccessorFactory {
       accessor = new MsSqlDatabaseAccessor();
       break;
 
+    case DB2:
+      accessor = new DB2DatabaseAccessor();
+      break;
+
     default:
       accessor = new GenericJdbcDatabaseAccessor();
       break;