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 07:28:20 UTC

[iotdb] branch getObject11 created (now 863708d)

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

haonan pushed a change to branch getObject11
in repository https://gitbox.apache.org/repos/asf/iotdb.git.


      at 863708d  getObject method in JDBC should return an Object

This branch includes the following new commits:

     new 863708d  getObject method in JDBC should return an Object

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[iotdb] 01/01: getObject method in JDBC should return an Object

Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

haonan pushed a commit to branch getObject11
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 863708d235d3e05ae893685af0a9bcd46f171e3a
Author: Haonan <hh...@outlook.com>
AuthorDate: Tue Mar 2 15:11:56 2021 +0800

    getObject method in JDBC should return an Object
---
 .../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));
+    }
+  }
+}