You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2021/06/04 08:12:16 UTC
[iotdb] 01/04: jdbc - get col type bug (#3220)
This is an automated email from the ASF dual-hosted git repository.
xiangweiwei pushed a commit to branch rel/0.12
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit c0b2c8bef5733dbec2c7408db66a84ed663ddc0d
Author: Haimei Guo <68...@users.noreply.github.com>
AuthorDate: Mon May 31 15:32:21 2021 +0800
jdbc - get col type bug (#3220)
(cherry picked from commit 275918e52fb030355b2e60b7e160ca7ed2f4e63d)
---
.../iotdb/jdbc/AbstractIoTDBJDBCResultSet.java | 4 ++-
.../iotdb/jdbc/IoTDBNonAlignJDBCResultSet.java | 3 ++
.../org/apache/iotdb/jdbc/IoTDBResultMetadata.java | 8 ++---
.../apache/iotdb/jdbc/IoTDBResultMetadataTest.java | 2 +-
.../iotdb/db/integration/IoTDBSimpleQueryIT.java | 39 ++++++++++++++++++++++
.../java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java | 8 ++---
.../org/apache/iotdb/session/SessionDataSet.java | 2 +-
.../iotdb/session/pool/SessionDataSetWrapper.java | 3 +-
.../apache/iotdb/session/IoTDBSessionSimpleIT.java | 2 +-
9 files changed, 55 insertions(+), 16 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 36f74fd..5e13b77 100644
--- a/jdbc/src/main/java/org/apache/iotdb/jdbc/AbstractIoTDBJDBCResultSet.java
+++ b/jdbc/src/main/java/org/apache/iotdb/jdbc/AbstractIoTDBJDBCResultSet.java
@@ -399,7 +399,9 @@ public abstract class AbstractIoTDBJDBCResultSet implements ResultSet {
@Override
public ResultSetMetaData getMetaData() {
return new IoTDBResultMetadata(
- ioTDBRpcDataSet.columnNameList, columnTypeList, ioTDBRpcDataSet.ignoreTimeStamp);
+ ioTDBRpcDataSet.columnNameList,
+ ioTDBRpcDataSet.columnTypeList,
+ ioTDBRpcDataSet.ignoreTimeStamp);
}
@Override
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 f293bad..da0831a 100644
--- a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBNonAlignJDBCResultSet.java
+++ b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBNonAlignJDBCResultSet.java
@@ -81,6 +81,7 @@ public class IoTDBNonAlignJDBCResultSet extends AbstractIoTDBJDBCResultSet {
times = new byte[columnNameList.size()][Long.BYTES];
ioTDBRpcDataSet.columnNameList = new ArrayList<>();
+ ioTDBRpcDataSet.columnTypeList = new ArrayList<>();
// deduplicate and map
ioTDBRpcDataSet.columnOrdinalMap = new HashMap<>();
ioTDBRpcDataSet.columnOrdinalMap.put(TIMESTAMP_STR, 1);
@@ -93,6 +94,8 @@ public class IoTDBNonAlignJDBCResultSet extends AbstractIoTDBJDBCResultSet {
String name = columnNameList.get(i);
ioTDBRpcDataSet.columnNameList.add(TIMESTAMP_STR + name);
ioTDBRpcDataSet.columnNameList.add(name);
+ ioTDBRpcDataSet.columnTypeList.add(String.valueOf(TSDataType.INT64));
+ ioTDBRpcDataSet.columnTypeList.add(columnTypeList.get(i));
if (!ioTDBRpcDataSet.columnOrdinalMap.containsKey(name)) {
int index = columnNameIndex.get(name);
ioTDBRpcDataSet.columnOrdinalMap.put(name, index + START_INDEX);
diff --git a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBResultMetadata.java b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBResultMetadata.java
index 5fa70a0..e4ed8e5 100644
--- a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBResultMetadata.java
+++ b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBResultMetadata.java
@@ -115,12 +115,8 @@ public class IoTDBResultMetadata implements ResultSetMetaData {
return Types.TIMESTAMP;
}
// BOOLEAN, INT32, INT64, FLOAT, DOUBLE, TEXT,
- String columnType;
- if (!ignoreTimestamp) {
- columnType = columnTypeList.get(column - 2);
- } else {
- columnType = columnTypeList.get(column - 1);
- }
+ String columnType = columnTypeList.get(column - 1);
+
switch (columnType.toUpperCase()) {
case "BOOLEAN":
return Types.BOOLEAN;
diff --git a/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBResultMetadataTest.java b/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBResultMetadataTest.java
index cd208f8..a10bd05 100644
--- a/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBResultMetadataTest.java
+++ b/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBResultMetadataTest.java
@@ -143,7 +143,7 @@ public class IoTDBResultMetadataTest {
"root.a.b.double",
"root.a.b.text"
};
- String[] typesString = {"BOOLEAN", "INT32", "INT64", "FLOAT", "DOUBLE", "TEXT"};
+ String[] typesString = {"TIMESTAMP", "BOOLEAN", "INT32", "INT64", "FLOAT", "DOUBLE", "TEXT"};
int[] types = {
Types.BOOLEAN, Types.INTEGER, Types.BIGINT, Types.FLOAT, Types.DOUBLE, Types.VARCHAR
};
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBSimpleQueryIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBSimpleQueryIT.java
index 3a6fb43..1a309fd 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBSimpleQueryIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBSimpleQueryIT.java
@@ -38,6 +38,7 @@ import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
+import java.sql.Types;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -1276,4 +1277,42 @@ public class IoTDBSimpleQueryIT {
fail();
}
}
+
+ @Test
+ public void testDisableAlign() throws Exception {
+ Class.forName(Config.JDBC_DRIVER_NAME);
+ try (Connection connection =
+ DriverManager.getConnection(
+ Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
+ Statement statement = connection.createStatement()) {
+ statement.execute("CREATE TIMESERIES root.sg1.d1.s1 WITH DATATYPE=INT32");
+ statement.execute("CREATE TIMESERIES root.sg1.d1.s2 WITH DATATYPE=BOOLEAN");
+ ResultSet resultSet = statement.executeQuery("select s1, s2 from root.sg1.d1 disable align");
+ ResultSetMetaData metaData = resultSet.getMetaData();
+ int[] types = {Types.TIMESTAMP, Types.INTEGER, Types.BIGINT, Types.BOOLEAN};
+ int columnCount = metaData.getColumnCount();
+ for (int i = 0; i < columnCount; i++) {
+ Assert.assertEquals(types[i], metaData.getColumnType(i + 1));
+ }
+ }
+ }
+
+ @Test
+ public void testEnableAlign() throws Exception {
+ Class.forName(Config.JDBC_DRIVER_NAME);
+ try (Connection connection =
+ DriverManager.getConnection(
+ Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
+ Statement statement = connection.createStatement()) {
+ statement.execute("CREATE TIMESERIES root.sg1.d1.s1 WITH DATATYPE=INT32");
+ statement.execute("CREATE TIMESERIES root.sg1.d1.s2 WITH DATATYPE=BOOLEAN");
+ ResultSet resultSet = statement.executeQuery("select s1, s2 from root.sg1.d1");
+ ResultSetMetaData metaData = resultSet.getMetaData();
+ int[] types = {Types.TIMESTAMP, Types.INTEGER, Types.BOOLEAN};
+ int columnCount = metaData.getColumnCount();
+ for (int i = 0; i < columnCount; i++) {
+ Assert.assertEquals(types[i], metaData.getColumnType(i + 1));
+ }
+ }
+ }
}
diff --git a/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java b/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
index a85b21f..fe2ab91 100644
--- a/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
+++ b/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
@@ -50,7 +50,7 @@ public class IoTDBRpcDataSet {
public boolean isClosed = false;
public TSIService.Iface client;
public List<String> columnNameList; // no deduplication
- public List<TSDataType> columnTypeList; // no deduplication
+ public List<String> columnTypeList; // no deduplication
public Map<String, Integer>
columnOrdinalMap; // used because the server returns deduplicated columns
public List<TSDataType> columnTypeDeduplicatedList; // deduplicated from columnTypeList
@@ -105,7 +105,7 @@ public class IoTDBRpcDataSet {
this.columnTypeList = new ArrayList<>();
if (!ignoreTimeStamp) {
this.columnNameList.add(TIMESTAMP_STR);
- this.columnTypeList.add(TSDataType.INT64);
+ this.columnTypeList.add(String.valueOf(TSDataType.INT64));
}
// deduplicate and map
this.columnOrdinalMap = new HashMap<>();
@@ -122,7 +122,7 @@ public class IoTDBRpcDataSet {
for (int i = 0; i < columnNameList.size(); i++) {
String name = columnNameList.get(i);
this.columnNameList.add(name);
- this.columnTypeList.add(TSDataType.valueOf(columnTypeList.get(i)));
+ this.columnTypeList.add(columnTypeList.get(i));
if (!columnOrdinalMap.containsKey(name)) {
int index = columnNameIndex.get(name);
columnOrdinalMap.put(name, index + START_INDEX);
@@ -135,7 +135,7 @@ public class IoTDBRpcDataSet {
for (int i = 0; i < columnNameList.size(); i++) {
String name = columnNameList.get(i);
this.columnNameList.add(name);
- this.columnTypeList.add(TSDataType.valueOf(columnTypeList.get(i)));
+ this.columnTypeList.add(columnTypeList.get(i));
if (!columnOrdinalMap.containsKey(name)) {
columnOrdinalMap.put(name, index++);
columnTypeDeduplicatedList.add(TSDataType.valueOf(columnTypeList.get(i)));
diff --git a/session/src/main/java/org/apache/iotdb/session/SessionDataSet.java b/session/src/main/java/org/apache/iotdb/session/SessionDataSet.java
index 5e6bef5..541d6e4 100644
--- a/session/src/main/java/org/apache/iotdb/session/SessionDataSet.java
+++ b/session/src/main/java/org/apache/iotdb/session/SessionDataSet.java
@@ -110,7 +110,7 @@ public class SessionDataSet {
return new ArrayList<>(ioTDBRpcDataSet.columnNameList);
}
- public List<TSDataType> getColumnTypes() {
+ public List<String> getColumnTypes() {
return new ArrayList<>(ioTDBRpcDataSet.columnTypeList);
}
diff --git a/session/src/main/java/org/apache/iotdb/session/pool/SessionDataSetWrapper.java b/session/src/main/java/org/apache/iotdb/session/pool/SessionDataSetWrapper.java
index fa5eb4c..e2e3b2c 100644
--- a/session/src/main/java/org/apache/iotdb/session/pool/SessionDataSetWrapper.java
+++ b/session/src/main/java/org/apache/iotdb/session/pool/SessionDataSetWrapper.java
@@ -23,7 +23,6 @@ import org.apache.iotdb.rpc.StatementExecutionException;
import org.apache.iotdb.session.Session;
import org.apache.iotdb.session.SessionDataSet;
import org.apache.iotdb.session.SessionDataSet.DataIterator;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.read.common.RowRecord;
import java.util.List;
@@ -88,7 +87,7 @@ public class SessionDataSetWrapper implements AutoCloseable {
return sessionDataSet.getColumnNames();
}
- public List<TSDataType> getColumnTypes() {
+ public List<String> getColumnTypes() {
return sessionDataSet.getColumnTypes();
}
diff --git a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
index ed72527..a227a3d 100644
--- a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
+++ b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
@@ -610,7 +610,7 @@ public class IoTDBSessionSimpleIT {
"root.sg.d1.s2"
});
Assert.assertArrayEquals(
- dataSet.getColumnTypes().toArray(new TSDataType[0]),
+ dataSet.getColumnTypes().toArray(new String[0]),
new TSDataType[] {
TSDataType.INT64,
TSDataType.INT64,