diff --git a/pom.xml b/pom.xml
index 3544be9a9ae46..36d87a50ab1e0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1715,7 +1715,7 @@
${hive.group}
hive-exec
${hive.classifier}
- ${hive.version}
+ 2.3.6.39
${hive.deps.scope}
diff --git a/sql/hive-thriftserver/src/main/java/org/apache/hive/service/cli/ColumnBasedSet.java b/sql/hive-thriftserver/src/main/java/org/apache/hive/service/cli/ColumnBasedSet.java
index 3ca18f0cdb2f9..36bb3d75ea424 100644
--- a/sql/hive-thriftserver/src/main/java/org/apache/hive/service/cli/ColumnBasedSet.java
+++ b/sql/hive-thriftserver/src/main/java/org/apache/hive/service/cli/ColumnBasedSet.java
@@ -48,10 +48,15 @@ public class ColumnBasedSet implements RowSet {
public static final Logger LOG = LoggerFactory.getLogger(ColumnBasedSet.class);
public ColumnBasedSet(TableSchema schema) {
- descriptors = schema.toTypeDescriptors();
- columns = new ArrayList();
- for (ColumnDescriptor colDesc : schema.getColumnDescriptors()) {
- columns.add(new ColumnBuffer(colDesc.getType()));
+ if (schema == null) {
+ descriptors = new TypeDescriptor[0];
+ columns = new ArrayList();
+ } else {
+ descriptors = schema.toTypeDescriptors();
+ columns = new ArrayList();
+ for (ColumnDescriptor colDesc : schema.getColumnDescriptors()) {
+ columns.add(new ColumnBuffer(colDesc.getType()));
+ }
}
}
diff --git a/sql/hive-thriftserver/src/main/java/org/apache/hive/service/cli/operation/HiveCommandOperation.java b/sql/hive-thriftserver/src/main/java/org/apache/hive/service/cli/operation/HiveCommandOperation.java
index 5d3e0c91eafa6..e2ae067161694 100644
--- a/sql/hive-thriftserver/src/main/java/org/apache/hive/service/cli/operation/HiveCommandOperation.java
+++ b/sql/hive-thriftserver/src/main/java/org/apache/hive/service/cli/operation/HiveCommandOperation.java
@@ -51,6 +51,7 @@
public class HiveCommandOperation extends ExecuteStatementOperation {
private CommandProcessor commandProcessor;
private TableSchema resultSchema = null;
+ private int readRows = 0;
/**
* For processors other than Hive queries (Driver), they output to session.out (a temp file)
@@ -157,10 +158,11 @@ public RowSet getNextRowSet(FetchOrientation orientation, long maxRows) throws H
}
List rows = readResults((int) maxRows);
RowSet rowSet = RowSetFactory.create(resultSchema, getProtocolVersion(), false);
-
+ rowSet.setStartOffset(readRows);
for (String row : rows) {
rowSet.addRow(new String[] {row});
}
+ readRows += rows.size();
return rowSet;
}
@@ -211,5 +213,6 @@ private void resetResultReader() {
ServiceUtils.cleanup(LOG, resultReader);
resultReader = null;
}
+ readRows = 0;
}
}
diff --git a/sql/hive-thriftserver/src/main/java/org/apache/hive/service/cli/operation/OperationManager.java b/sql/hive-thriftserver/src/main/java/org/apache/hive/service/cli/operation/OperationManager.java
index 3df842d2b4af9..dac4015501cb7 100644
--- a/sql/hive-thriftserver/src/main/java/org/apache/hive/service/cli/operation/OperationManager.java
+++ b/sql/hive-thriftserver/src/main/java/org/apache/hive/service/cli/operation/OperationManager.java
@@ -249,6 +249,10 @@ public RowSet getOperationNextRowSet(OperationHandle opHandle,
public RowSet getOperationLogRowSet(OperationHandle opHandle,
FetchOrientation orientation, long maxRows)
throws HiveSQLException {
+ TableSchema tableSchema = new TableSchema(getLogSchema());
+ RowSet rowSet = RowSetFactory.create(tableSchema,
+ getOperation(opHandle).getProtocolVersion(), false);
+
// get the OperationLog object from the operation
OperationLog operationLog = getOperation(opHandle).getOperationLog();
if (operationLog == null) {
@@ -257,17 +261,14 @@ public RowSet getOperationLogRowSet(OperationHandle opHandle,
// read logs
List logs;
+ rowSet.setStartOffset(operationLog.getStartPosition(isFetchFirst(orientation)));
try {
logs = operationLog.readOperationLog(isFetchFirst(orientation), maxRows);
} catch (SQLException e) {
throw new HiveSQLException(e.getMessage(), e.getCause());
}
-
// convert logs to RowSet
- TableSchema tableSchema = new TableSchema(getLogSchema());
- RowSet rowSet = RowSetFactory.create(tableSchema,
- getOperation(opHandle).getProtocolVersion(), false);
for (String log : logs) {
rowSet.addRow(new String[] {log});
}
diff --git a/sql/hive-thriftserver/src/main/java/org/apache/hive/service/cli/operation/SQLOperation.java b/sql/hive-thriftserver/src/main/java/org/apache/hive/service/cli/operation/SQLOperation.java
index 894793152f409..cddff0fca11a1 100644
--- a/sql/hive-thriftserver/src/main/java/org/apache/hive/service/cli/operation/SQLOperation.java
+++ b/sql/hive-thriftserver/src/main/java/org/apache/hive/service/cli/operation/SQLOperation.java
@@ -333,8 +333,11 @@ public RowSet getNextRowSet(FetchOrientation orientation, long maxRows) throws H
fetchStarted = true;
driver.setMaxRows((int) maxRows);
if (driver.getResults(convey)) {
- return decode(convey, rowSet);
+ decode(convey, rowSet);
}
+ long startRowOffset = driver.getStartRowOffset();
+ rowSet.setStartOffset(startRowOffset);
+ driver.setStartRowOffset(startRowOffset + rowSet.numRows());
return rowSet;
} catch (IOException e) {
throw new HiveSQLException(e);