Repository: hive Updated Branches: refs/heads/master 5553c59e3 -> 1fe471d31
HIVE-20937: Postgres jdbc query fail with "LIMIT must not be negative" (Daniel Dai, reviewed by Thejas Nair) Signed-off-by: Thejas M Nair <the...@hortonworks.com> Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/1fe471d3 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/1fe471d3 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/1fe471d3 Branch: refs/heads/master Commit: 1fe471d31867fdffd8fd62ac5180a9377bef13e5 Parents: 5553c59 Author: Daniel Dai <dai...@gmail.com> Authored: Mon Nov 19 15:04:34 2018 -0800 Committer: Daniel Dai <dai...@gmail.com> Committed: Mon Nov 19 15:04:42 2018 -0800 ---------------------------------------------------------------------- .../apache/hive/storage/jdbc/dao/MsSqlDatabaseAccessor.java | 7 ++++++- .../apache/hive/storage/jdbc/dao/OracleDatabaseAccessor.java | 6 ++++++ .../hive/storage/jdbc/dao/PostgresDatabaseAccessor.java | 6 ++++++ 3 files changed, 18 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/1fe471d3/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/MsSqlDatabaseAccessor.java ---------------------------------------------------------------------- diff --git a/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/MsSqlDatabaseAccessor.java b/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/MsSqlDatabaseAccessor.java index 5c5455f..d6e117e 100644 --- a/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/MsSqlDatabaseAccessor.java +++ b/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/MsSqlDatabaseAccessor.java @@ -28,6 +28,9 @@ public class MsSqlDatabaseAccessor extends GenericJdbcDatabaseAccessor { if (offset == 0) { return addLimitToQuery(sql, limit); } else { + if (limit == -1) { + return sql; + } // Order by is not necessary, but MS SQL require it to use FETCH return sql + " ORDER BY 1 OFFSET " + offset + " ROWS FETCH NEXT " + limit + " ROWS ONLY"; } @@ -35,7 +38,9 @@ public class MsSqlDatabaseAccessor extends GenericJdbcDatabaseAccessor { @Override protected String addLimitToQuery(String sql, int limit) { + if (limit == -1) { + return sql; + } return sql + " {LIMIT " + limit + "}"; } - } http://git-wip-us.apache.org/repos/asf/hive/blob/1fe471d3/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/OracleDatabaseAccessor.java ---------------------------------------------------------------------- diff --git a/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/OracleDatabaseAccessor.java b/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/OracleDatabaseAccessor.java index 39c4cda..4a993fb 100644 --- a/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/OracleDatabaseAccessor.java +++ b/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/OracleDatabaseAccessor.java @@ -31,6 +31,9 @@ public class OracleDatabaseAccessor extends GenericJdbcDatabaseAccessor { if (offset == 0) { return addLimitToQuery(sql, limit); } else { + if (limit == -1) { + return sql; + } // A simple ROWNUM > offset and ROWNUM <= (offset + limit) won't work, it will return nothing return "SELECT * FROM (SELECT t.*, ROWNUM AS " + ROW_NUM_COLUMN_NAME + " FROM (" + sql + ") t) WHERE " + ROW_NUM_COLUMN_NAME + " >" + offset + " AND " + ROW_NUM_COLUMN_NAME + " <=" + (offset + limit); @@ -40,6 +43,9 @@ public class OracleDatabaseAccessor extends GenericJdbcDatabaseAccessor { @Override protected String addLimitToQuery(String sql, int limit) { + if (limit == -1) { + return sql; + } return "SELECT * FROM (" + sql + ") WHERE ROWNUM <= " + limit; } http://git-wip-us.apache.org/repos/asf/hive/blob/1fe471d3/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/PostgresDatabaseAccessor.java ---------------------------------------------------------------------- diff --git a/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/PostgresDatabaseAccessor.java b/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/PostgresDatabaseAccessor.java index c0280fd..866b82f 100644 --- a/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/PostgresDatabaseAccessor.java +++ b/jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/PostgresDatabaseAccessor.java @@ -28,12 +28,18 @@ public class PostgresDatabaseAccessor extends GenericJdbcDatabaseAccessor { 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; } }