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