未验证 提交 275918e5 编写于 作者: H Haimei Guo 提交者: GitHub

jdbc - get col type bug (#3220)

上级 5ea3c2e5
......@@ -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
......
......@@ -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);
......
......@@ -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;
......
......@@ -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
};
......
......@@ -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;
......@@ -1280,4 +1281,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));
}
}
}
}
......@@ -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)));
......
......@@ -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);
}
......
......@@ -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();
}
......
......@@ -746,7 +746,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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册