You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2021/03/02 08:20:42 UTC
[iotdb] branch rel/0.11 updated: cherry-pick getObject method in
JDBC should return an Object (#2760)
This is an automated email from the ASF dual-hosted git repository.
haonan pushed a commit to branch rel/0.11
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/0.11 by this push:
new 6e52c5c cherry-pick getObject method in JDBC should return an Object (#2760)
6e52c5c is described below
commit 6e52c5c0b729a29ece0de46009795f81dab4a268
Author: Haonan <hh...@outlook.com>
AuthorDate: Tue Mar 2 16:20:26 2021 +0800
cherry-pick getObject method in JDBC should return an Object (#2760)
---
.../iotdb/jdbc/AbstractIoTDBJDBCResultSet.java | 3 +-
.../org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java | 9 +++++
.../iotdb/jdbc/IoTDBNonAlignJDBCResultSet.java | 22 +++++++++++
.../apache/iotdb/jdbc/IoTDBJDBCResultSetTest.java | 46 +++++++++++++++++++++-
4 files changed, 78 insertions(+), 2 deletions(-)
diff --git a/jdbc/src/main/java/org/apache/iotdb/jdbc/AbstractIoTDBJDBCResultSet.java b/jdbc/src/main/java/org/apache/iotdb/jdbc/AbstractIoTDBJDBCResultSet.java
index 7acb7ba..0f49d60 100644
--- a/jdbc/src/main/java/org/apache/iotdb/jdbc/AbstractIoTDBJDBCResultSet.java
+++ b/jdbc/src/main/java/org/apache/iotdb/jdbc/AbstractIoTDBJDBCResultSet.java
@@ -425,7 +425,7 @@ public abstract class AbstractIoTDBJDBCResultSet implements ResultSet {
@Override
public Object getObject(String columnName) throws SQLException {
- return getValueByName(columnName);
+ return getObjectByName(columnName);
}
@Override
@@ -1108,4 +1108,5 @@ public abstract class AbstractIoTDBJDBCResultSet implements ResultSet {
abstract String getValueByName(String columnName) throws SQLException;
+ abstract Object getObjectByName(String columnName) throws SQLException;
}
diff --git a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java
index cda5048..2376f9e 100644
--- a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java
+++ b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java
@@ -87,6 +87,15 @@ public class IoTDBJDBCResultSet extends AbstractIoTDBJDBCResultSet {
}
}
+ @Override
+ protected Object getObjectByName(String columnName) throws SQLException {
+ try {
+ return ioTDBRpcDataSet.getObjectByName(columnName);
+ } catch (StatementExecutionException e) {
+ throw new SQLException(e.getMessage());
+ }
+ }
+
public boolean isIgnoreTimeStamp() {
return ioTDBRpcDataSet.ignoreTimeStamp;
}
diff --git a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBNonAlignJDBCResultSet.java b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBNonAlignJDBCResultSet.java
index dd0b513..8c827d8 100644
--- a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBNonAlignJDBCResultSet.java
+++ b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBNonAlignJDBCResultSet.java
@@ -225,4 +225,26 @@ public class IoTDBNonAlignJDBCResultSet extends AbstractIoTDBJDBCResultSet {
.getString(index, ioTDBRpcDataSet.columnTypeDeduplicatedList.get(index),
ioTDBRpcDataSet.values);
}
+
+ @Override
+ protected Object getObjectByName(String columnName) throws SQLException {
+ checkRecord();
+ if (columnName.startsWith(TIMESTAMP_STR)) {
+ String column = columnName.substring(TIMESTAMP_STR_LENGTH);
+ int index = ioTDBRpcDataSet.columnOrdinalMap.get(column) - START_INDEX;
+ if (times[index] == null || times[index].length == 0) {
+ return null;
+ }
+ return BytesUtils.bytesToLong(times[index]);
+ }
+ int index = ioTDBRpcDataSet.columnOrdinalMap.get(columnName) - START_INDEX;
+ if (index < 0
+ || index >= ioTDBRpcDataSet.values.length
+ || ioTDBRpcDataSet.values[index] == null
+ || ioTDBRpcDataSet.values[index].length < 1) {
+ return null;
+ }
+ return ioTDBRpcDataSet.getObject(
+ index, ioTDBRpcDataSet.columnTypeDeduplicatedList.get(index), ioTDBRpcDataSet.values);
+ }
}
diff --git a/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSetTest.java b/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSetTest.java
index 1555678..9be4a4a 100644
--- a/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSetTest.java
+++ b/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSetTest.java
@@ -34,6 +34,7 @@ import java.sql.Statement;
import java.sql.Types;
import java.time.ZoneId;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import org.apache.iotdb.rpc.RpcUtils;
@@ -210,6 +211,7 @@ public class IoTDBJDBCResultSetTest {
// check fetched result
int colCount = resultSetMetaData.getColumnCount();
StringBuilder resultStr = new StringBuilder();
+ List<Object> resultObjectList = new ArrayList<>();
for (int i = 1; i < colCount + 1; i++) { // meta title
resultStr.append(resultSetMetaData.getColumnName(i)).append(",");
}
@@ -217,6 +219,7 @@ public class IoTDBJDBCResultSetTest {
while (resultSet.next()) { // data
for (int i = 1; i <= colCount; i++) {
resultStr.append(resultSet.getString(i)).append(",");
+ resultObjectList.add(resultSet.getObject(i));
}
resultStr.append("\n");
fetchResultsResp.hasResultSet = false; // at the second time to fetch
@@ -233,6 +236,12 @@ public class IoTDBJDBCResultSetTest {
+ "105,11.11,199,33333,11.11,\n"
+ "1000,1000.11,55555,22222,1000.11,\n"; // Note the LIMIT&OFFSET clause takes effect
Assert.assertEquals(standard, resultStr.toString());
+ List<Object> standardObject = new ArrayList<>();
+ constructObjectList(standardObject);
+ Assert.assertEquals(standardObject.size(), resultObjectList.size());
+ for (int i = 0; i < standardObject.size(); i++) {
+ Assert.assertEquals(standardObject.get(i), resultObjectList.get(i));
+ }
}
// The client get TSQueryDataSet at the first request
@@ -338,4 +347,39 @@ public class IoTDBJDBCResultSetTest {
tsQueryDataSet.setValueList(valueList);
return tsQueryDataSet;
}
-}
\ No newline at end of file
+
+ private void constructObjectList(List<Object> standardObject) {
+ Object[][] input = {
+ {
+ 2L, 2.22F, 40000L, null, 2.22F,
+ },
+ {
+ 3L, 3.33F, null, null, 3.33F,
+ },
+ {
+ 4L, 4.44F, null, null, 4.44F,
+ },
+ {
+ 50L, null, 50000L, null, null,
+ },
+ {
+ 100L, null, 199L, null, null,
+ },
+ {
+ 101L, null, 199L, null, null,
+ },
+ {
+ 103L, null, 199L, null, null,
+ },
+ {
+ 105L, 11.11F, 199L, 33333, 11.11F,
+ },
+ {
+ 1000L, 1000.11F, 55555L, 22222, 1000.11F,
+ }
+ };
+ for (Object[] row : input) {
+ standardObject.addAll(Arrays.asList(row));
+ }
+ }
+}