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 <[email protected]> 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,
