This is an automated email from the ASF dual-hosted git repository.
rong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new d0f17446687 JDBC: Fix IndexOutOfBoundsException when calling getBytes
(#12662)
d0f17446687 is described below
commit d0f17446687b9f41e8cf630b5f0c55894ff61709
Author: Steve Yurong Su <[email protected]>
AuthorDate: Wed Jun 5 14:55:00 2024 +0800
JDBC: Fix IndexOutOfBoundsException when calling getBytes (#12662)
* JDBC: Fix ArrayOutOfBoundException when calling getBytes
* Update JDBCCharsetExample.java
---
.../src/main/java/org/apache/iotdb/JDBCCharsetExample.java | 2 +-
.../main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java | 12 ++++++++++--
.../src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java | 8 +++++++-
3 files changed, 18 insertions(+), 4 deletions(-)
diff --git
a/example/jdbc/src/main/java/org/apache/iotdb/JDBCCharsetExample.java
b/example/jdbc/src/main/java/org/apache/iotdb/JDBCCharsetExample.java
index 79ae881e301..3ecb9c05646 100644
--- a/example/jdbc/src/main/java/org/apache/iotdb/JDBCCharsetExample.java
+++ b/example/jdbc/src/main/java/org/apache/iotdb/JDBCCharsetExample.java
@@ -45,7 +45,7 @@ public class JDBCCharsetExample {
final IoTDBStatement statement = (IoTDBStatement)
connection.createStatement()) {
final String insertSQLWithGB18030 =
- "insert into root.测试(timestamp, 维语, 彝语, 繁体, 蒙文, 简体, 标点符号, 藏语)
values(1, 'ئۇيغۇر تىلى', 'ꆈꌠꉙ', \"繁體\", 'ᠮᠣᠩᠭᠣᠯ ᠬᠡᠯᠡ', '简体', '——?!',
\"བོད་སྐད།\");";
+ "insert into root.测试(timestamp, 彝语, 繁体, 蒙文, 简体, 标点符号, 藏语) values(1,
'ꆈꌠꉙ', \"繁體\", 'ᠮᠣᠩᠭᠣᠯ ᠬᠡᠯᠡ', '简体', '——?!', \"བོད་སྐད།\");";
final byte[] insertSQLWithGB18030Bytes =
insertSQLWithGB18030.getBytes("GB18030");
statement.execute(insertSQLWithGB18030Bytes);
} catch (IoTDBSQLException e) {
diff --git
a/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java
b/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java
index 60fa9c98373..ab6009343aa 100644
---
a/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java
+++
b/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java
@@ -377,7 +377,11 @@ public class IoTDBJDBCResultSet implements ResultSet {
@Override
public byte[] getBytes(int columnIndex) throws SQLException {
try {
- return ioTDBRpcDataSet.getDataType(columnIndex).equals(TSDataType.BLOB)
+ final TSDataType dataType = ioTDBRpcDataSet.getDataType(columnIndex);
+ if (dataType == null) {
+ return null;
+ }
+ return dataType.equals(TSDataType.BLOB)
? ioTDBRpcDataSet.getBinary(columnIndex).getValues()
: ioTDBRpcDataSet.getString(columnIndex).getBytes(charset);
} catch (StatementExecutionException e) {
@@ -388,7 +392,11 @@ public class IoTDBJDBCResultSet implements ResultSet {
@Override
public byte[] getBytes(String columnName) throws SQLException {
try {
- return ioTDBRpcDataSet.getDataType(columnName).equals(TSDataType.BLOB)
+ final TSDataType dataType = ioTDBRpcDataSet.getDataType(columnName);
+ if (dataType == null) {
+ return null;
+ }
+ return dataType.equals(TSDataType.BLOB)
? ioTDBRpcDataSet.getBinary(columnName).getValues()
: ioTDBRpcDataSet.getString(columnName).getBytes(charset);
} catch (StatementExecutionException e) {
diff --git
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
index c32e310b65f..014c5eedae1 100644
---
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
+++
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
@@ -528,7 +528,13 @@ public class IoTDBRpcDataSet {
}
public TSDataType getDataType(String columnName) throws
StatementExecutionException {
- return columnTypeDeduplicatedList.get(columnOrdinalMap.get(columnName) -
START_INDEX);
+ if (columnName.equals(TIMESTAMP_STR)) {
+ return TSDataType.INT64;
+ }
+ final int index = columnOrdinalMap.get(columnName) - START_INDEX;
+ return index < 0 || index >= columnTypeDeduplicatedList.size()
+ ? null
+ : columnTypeDeduplicatedList.get(index);
}
public int findColumn(String columnName) {