Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
93a9602
Improve JDBC driver metadata
Caideyipi Jun 8, 2026
7e01b4e
Fix JDBC URL parsing defaults
Caideyipi Jun 8, 2026
d49e183
Handle null JDBC data source properties
Caideyipi Jun 8, 2026
dfcd589
Improve JDBC URL parameter parsing
Caideyipi Jun 8, 2026
11be88c
Validate JDBC URL query parameters
Caideyipi Jun 8, 2026
10fe581
Clean up legacy TsFile JDBC wording
Caideyipi Jun 8, 2026
14c92f3
Improve JDBC DataSource standard behavior
Caideyipi Jun 8, 2026
e180e1f
Improve JDBC standard interface behavior
Caideyipi Jun 8, 2026
66e88f2
Fix JDBC URL and DataSource edge cases
Caideyipi Jun 9, 2026
bc18c42
Fix JDBC edge case handling
Caideyipi Jun 9, 2026
12d609f
Improve JDBC result set edge cases
Caideyipi Jun 9, 2026
b679589
Fix JDBC parameter and result set edge cases
Caideyipi Jun 9, 2026
c23ff58
Fix JDBC statement and metadata edge cases
Caideyipi Jun 9, 2026
02884ff
Reject JDBC operations after close
Caideyipi Jun 9, 2026
764db05
Reject closed JDBC wrapper and result set operations
Caideyipi Jun 9, 2026
30ca82e
Reject closed JDBC connection operations
Caideyipi Jun 9, 2026
871a995
Reject more closed JDBC connection entry points
Caideyipi Jun 9, 2026
2eb2652
Reject closed JDBC unsupported operations
Caideyipi Jun 9, 2026
b1522a9
Reject additional closed JDBC entry points
Caideyipi Jun 9, 2026
ebe1117
Fix JDBC metadata result set close handling
Caideyipi Jun 9, 2026
164931f
Fix JDBC resource lifecycle cleanup
Caideyipi Jun 10, 2026
49f8b0b
JDBC IT Fix
Caideyipi Jun 12, 2026
b7abc79
Fix closed ResultSet in load tsfile IT
Caideyipi Jun 15, 2026
1e0fd5e
Merge branch 'master' of https://github.com/apache/iotdb into codex/j…
Caideyipi Jun 22, 2026
28ac6f0
Fix filter IT result set lifecycle
Caideyipi Jun 22, 2026
677db0c
Merge branch 'master' of https://github.com/apache/iotdb into codex/j…
Caideyipi Jul 3, 2026
69759c9
Merge branch 'master' of https://github.com/apache/iotdb into codex/j…
Caideyipi Jul 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -215,21 +215,23 @@ public void testMismatchedDataTypes() {
@Test
public void testFilterWithUDTF() {
try (Connection connection = EnvFactory.getEnv().getConnection();
Statement statement = connection.createStatement();
ResultSet containsResultSet =
statement.executeQuery(
"select s1 from root.vehicle.testUDTF where STRING_CONTAINS(s1, 's'='s')");
ResultSet sinResultSet =
statement.executeQuery("select s1 from root.vehicle.testUDTF where sin(s2) = 0")) {
Statement statement = connection.createStatement()) {
int containsCnt = 0;
while (containsResultSet.next()) {
++containsCnt;
try (ResultSet containsResultSet =
statement.executeQuery(
"select s1 from root.vehicle.testUDTF where STRING_CONTAINS(s1, 's'='s')")) {
while (containsResultSet.next()) {
++containsCnt;
}
}
assertEquals(1, containsCnt);

int sinCnt = 0;
while (sinResultSet.next()) {
++sinCnt;
try (ResultSet sinResultSet =
statement.executeQuery("select s1 from root.vehicle.testUDTF where sin(s2) = 0")) {
while (sinResultSet.next()) {
++sinCnt;
}
}
assertEquals(1, sinCnt);
assertTestFail(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1314,31 +1314,26 @@ public void testUseSameStatement() throws SQLException {
statement.execute("insert into root.sg1.d1(timestamp,s0,s1) values(1000,1000,1000)");
statement.execute("insert into root.sg1.d0(timestamp,s0,s1) values(10,10,10)");

List<ResultSet> resultSetList = new ArrayList<>();

ResultSet r1 = statement.executeQuery("select * from root.sg1.d0 where time <= 1");
resultSetList.add(r1);

ResultSet r2 = statement.executeQuery("select * from root.sg1.d1 where s0 == 1000");
resultSetList.add(r2);

ResultSet r3 = statement.executeQuery("select * from root.sg1.d0 where s1 == 10");
resultSetList.add(r3);

r1.next();
Assert.assertEquals(r1.getLong(1), 1L);
Assert.assertEquals(r1.getLong(2), 1L);
Assert.assertEquals(r1.getLong(3), 1L);
try (ResultSet r1 = statement.executeQuery("select * from root.sg1.d0 where time <= 1")) {
Assert.assertTrue(r1.next());
Assert.assertEquals(r1.getLong(1), 1L);
Assert.assertEquals(r1.getLong(2), 1L);
Assert.assertEquals(r1.getLong(3), 1L);
}

r2.next();
Assert.assertEquals(r2.getLong(1), 1000L);
Assert.assertEquals(r2.getLong(2), 1000L);
Assert.assertEquals(r2.getLong(3), 1000L);
try (ResultSet r2 = statement.executeQuery("select * from root.sg1.d1 where s0 == 1000")) {
Assert.assertTrue(r2.next());
Assert.assertEquals(r2.getLong(1), 1000L);
Assert.assertEquals(r2.getLong(2), 1000L);
Assert.assertEquals(r2.getLong(3), 1000L);
}

r3.next();
Assert.assertEquals(r3.getLong(1), 10L);
Assert.assertEquals(r3.getLong(2), 10L);
Assert.assertEquals(r3.getLong(3), 10L);
try (ResultSet r3 = statement.executeQuery("select * from root.sg1.d0 where s1 == 10")) {
Assert.assertTrue(r3.next());
Assert.assertEquals(r3.getLong(1), 10L);
Assert.assertEquals(r3.getLong(2), 10L);
Assert.assertEquals(r3.getLong(3), 10L);
}
} finally {
executeQuietly(statement, "DELETE DATABASE root.sg1");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -410,10 +410,10 @@ private void testWithTimeColumn(
final Statement statement = connection.createStatement()) {
statement.execute(String.format("create database if not exists %s", SchemaConfig.DATABASE_0));
statement.execute(String.format("use %s", SchemaConfig.DATABASE_0));
ResultSet resultSetOld = null;
List<List<String>> oldTableDescription = null;
if (Objects.nonNull(schemaList1)) {
statement.execute(convert2TableSQL(SchemaConfig.TABLE_0, schemaList1, columnCategories));
resultSetOld = statement.executeQuery("desc " + SchemaConfig.TABLE_0);
oldTableDescription = getTableDescription(statement, SchemaConfig.TABLE_0);
}
statement.execute(
String.format(
Expand All @@ -433,23 +433,29 @@ private void testWithTimeColumn(
}

// Time column's difference shall not affect the old column
if (Objects.nonNull(resultSetOld)) {
try (final ResultSet resultSet = statement.executeQuery("desc " + SchemaConfig.TABLE_0)) {
while (resultSet.next() && resultSetOld.next()) {
Assert.assertEquals(resultSet.getString(1), resultSetOld.getString(1));
Assert.assertEquals(resultSet.getString(2), resultSetOld.getString(2));
Assert.assertEquals(resultSet.getString(3), resultSetOld.getString(3));
}
if (resultSet.next() || resultSetOld.next()) {
Assert.fail("The table schema has changed after load.");
}
}
if (Objects.nonNull(oldTableDescription)) {
final List<List<String>> newTableDescription =
getTableDescription(statement, SchemaConfig.TABLE_0);
Assert.assertEquals(
"The table schema has changed after load.", oldTableDescription, newTableDescription);
}

statement.execute(String.format("drop database %s", SchemaConfig.DATABASE_0));
}
}

private List<List<String>> getTableDescription(final Statement statement, final String tableName)
throws Exception {
final List<List<String>> tableDescription = new ArrayList<>();
try (final ResultSet resultSet = statement.executeQuery("desc " + tableName)) {
while (resultSet.next()) {
tableDescription.add(
Arrays.asList(resultSet.getString(1), resultSet.getString(2), resultSet.getString(3)));
}
}
return tableDescription;
}

private List<ColumnCategory> generateTabletColumnCategory(final int fieldNum) {
return generateTabletColumnCategory(0, fieldNum, -1);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -212,20 +212,22 @@ public void testMismatchedDataTypes() {
@Test
public void testFilterWithUDTF() {
try (Connection connection = EnvFactory.getEnv().getConnection();
Statement statement = connection.createStatement();
ResultSet containsResultSet =
statement.executeQuery("select s1 from testUDTF where STRING_CONTAINS(s1, 's'='s')");
ResultSet sinResultSet =
statement.executeQuery("select s1 from testUDTF where sin(s2) = 0")) {
Statement statement = connection.createStatement()) {
int containsCnt = 0;
while (containsResultSet.next()) {
++containsCnt;
try (ResultSet containsResultSet =
statement.executeQuery("select s1 from testUDTF where STRING_CONTAINS(s1, 's'='s')")) {
while (containsResultSet.next()) {
++containsCnt;
}
}
assertEquals(1, containsCnt);

int sinCnt = 0;
while (sinResultSet.next()) {
++sinCnt;
try (ResultSet sinResultSet =
statement.executeQuery("select s1 from testUDTF where sin(s2) = 0")) {
while (sinResultSet.next()) {
++sinCnt;
}
}
assertEquals(1, sinCnt);
assertTestFail(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -577,31 +577,29 @@ public void testUseSameStatement() throws SQLException {
statement.execute("insert into table1(time,device,s0,s1) values(1000,'d1',1000,1000)");
statement.execute("insert into table1(time,device,s0,s1) values(10,'d0',10,10)");

List<ResultSet> resultSetList = new ArrayList<>();

ResultSet r1 = statement.executeQuery("select * from table1 where device='d0' and time <= 1");
resultSetList.add(r1);

ResultSet r2 = statement.executeQuery("select * from table1 where device='d1' and s0 = 1000");
resultSetList.add(r2);

ResultSet r3 = statement.executeQuery("select * from table1 where device='d0' and s1 = 10");
resultSetList.add(r3);

r1.next();
Assert.assertEquals(r1.getLong(1), 1L);
Assert.assertEquals(r1.getLong(3), 1L);
Assert.assertEquals(r1.getLong(4), 1L);
try (ResultSet r1 =
statement.executeQuery("select * from table1 where device='d0' and time <= 1")) {
Assert.assertTrue(r1.next());
Assert.assertEquals(r1.getLong(1), 1L);
Assert.assertEquals(r1.getLong(3), 1L);
Assert.assertEquals(r1.getLong(4), 1L);
}

r2.next();
Assert.assertEquals(r2.getLong(1), 1000L);
Assert.assertEquals(r2.getLong(3), 1000L);
Assert.assertEquals(r2.getLong(4), 1000L);
try (ResultSet r2 =
statement.executeQuery("select * from table1 where device='d1' and s0 = 1000")) {
Assert.assertTrue(r2.next());
Assert.assertEquals(r2.getLong(1), 1000L);
Assert.assertEquals(r2.getLong(3), 1000L);
Assert.assertEquals(r2.getLong(4), 1000L);
}

r3.next();
Assert.assertEquals(r3.getLong(1), 10L);
Assert.assertEquals(r3.getLong(3), 10L);
Assert.assertEquals(r3.getLong(4), 10L);
try (ResultSet r3 =
statement.executeQuery("select * from table1 where device='d0' and s1 = 10")) {
Assert.assertTrue(r3.next());
Assert.assertEquals(r3.getLong(1), 10L);
Assert.assertEquals(r3.getLong(3), 10L);
Assert.assertEquals(r3.getLong(4), 10L);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,8 @@
import java.sql.Statement;
import java.sql.Types;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import static org.apache.iotdb.db.it.utils.TestUtils.defaultFormatDataTime;
import static org.apache.iotdb.db.it.utils.TestUtils.tableResultSetEqualTest;
Expand Down Expand Up @@ -453,31 +451,29 @@ public void testUseSameStatement() throws SQLException {
statement.execute(
"CREATE VIEW table1(device STRING TAG, s0 INT64 FIELD, s1 INT64 FIELD) as root.sg1.**");

List<ResultSet> resultSetList = new ArrayList<>();

ResultSet r1 = statement.executeQuery("select * from table1 where device='d0' and time <= 1");
resultSetList.add(r1);

ResultSet r2 = statement.executeQuery("select * from table1 where device='d1' and s0 = 1000");
resultSetList.add(r2);

ResultSet r3 = statement.executeQuery("select * from table1 where device='d0' and s1 = 10");
resultSetList.add(r3);

r1.next();
Assert.assertEquals(r1.getLong(1), 1L);
Assert.assertEquals(r1.getLong(3), 1L);
Assert.assertEquals(r1.getLong(4), 1L);
try (ResultSet r1 =
statement.executeQuery("select * from table1 where device='d0' and time <= 1")) {
Assert.assertTrue(r1.next());
Assert.assertEquals(r1.getLong(1), 1L);
Assert.assertEquals(r1.getLong(3), 1L);
Assert.assertEquals(r1.getLong(4), 1L);
}

r2.next();
Assert.assertEquals(r2.getLong(1), 1000L);
Assert.assertEquals(r2.getLong(3), 1000L);
Assert.assertEquals(r2.getLong(4), 1000L);
try (ResultSet r2 =
statement.executeQuery("select * from table1 where device='d1' and s0 = 1000")) {
Assert.assertTrue(r2.next());
Assert.assertEquals(r2.getLong(1), 1000L);
Assert.assertEquals(r2.getLong(3), 1000L);
Assert.assertEquals(r2.getLong(4), 1000L);
}

r3.next();
Assert.assertEquals(r3.getLong(1), 10L);
Assert.assertEquals(r3.getLong(3), 10L);
Assert.assertEquals(r3.getLong(4), 10L);
try (ResultSet r3 =
statement.executeQuery("select * from table1 where device='d0' and s1 = 10")) {
Assert.assertTrue(r3.next());
Assert.assertEquals(r3.getLong(1), 10L);
Assert.assertEquals(r3.getLong(3), 10L);
Assert.assertEquals(r3.getLong(4), 10L);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public final class JdbcMessages {

// IoTDBDriver
public static final String REGISTER_DRIVER_ERROR =
"Error occurs when registering TsFile driver";
"Error occurs when registering IoTDB driver";
public static final String METHOD_NOT_SUPPORTED = "Method not supported";

// StringUtils
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public final class JdbcMessages {

// IoTDBDriver
public static final String REGISTER_DRIVER_ERROR =
"注册 TsFile 驱动时发生错误";
"注册 IoTDB 驱动时发生错误";
public static final String METHOD_NOT_SUPPORTED = "不支持此方法";

// StringUtils
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ private Config() {
/** If host is provided, without a port. */
static final int IOTDB_DEFAULT_PORT = 6667;

/** TsFile's default series name. */
/** Default series name. */
static final String DEFAULT_SERIES_NAME = "default";

static final String AUTH_USER = "user";
Expand All @@ -51,6 +51,9 @@ private Config() {
static final int RETRY_NUM = 3;
static final long RETRY_INTERVAL_MS = 1000;

static final int DRIVER_MAJOR_VERSION = 4;
static final int DRIVER_MINOR_VERSION = 3;

public static final int DEFAULT_FETCH_SIZE = 5000;
static final int DEFAULT_CONNECTION_TIMEOUT_MS = 0;

Expand Down
Loading
Loading