Skip to content

Commit 68d5944

Browse files
committed
fix it2
1 parent 4e24c09 commit 68d5944

File tree

1 file changed

+74
-1
lines changed

1 file changed

+74
-1
lines changed

integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBPreparedStatementIT.java

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121

2222
import org.apache.iotdb.it.env.EnvFactory;
2323
import org.apache.iotdb.it.framework.IoTDBTestRunner;
24+
import org.apache.iotdb.itbase.category.TableClusterIT;
2425
import org.apache.iotdb.itbase.category.TableLocalStandaloneIT;
26+
import org.apache.iotdb.itbase.runtime.ClusterTestConnection;
2527

2628
import org.junit.AfterClass;
2729
import org.junit.BeforeClass;
@@ -30,16 +32,19 @@
3032
import org.junit.runner.RunWith;
3133

3234
import java.sql.Connection;
35+
import java.sql.ResultSet;
36+
import java.sql.ResultSetMetaData;
3337
import java.sql.SQLException;
3438
import java.sql.Statement;
3539

3640
import static org.apache.iotdb.db.it.utils.TestUtils.tableResultSetEqualTest;
41+
import static org.junit.Assert.assertEquals;
3742
import static org.junit.Assert.assertThrows;
3843
import static org.junit.Assert.assertTrue;
3944
import static org.junit.Assert.fail;
4045

4146
@RunWith(IoTDBTestRunner.class)
42-
@Category({TableLocalStandaloneIT.class})
47+
@Category({TableLocalStandaloneIT.class, TableClusterIT.class})
4348
public class IoTDBPreparedStatementIT {
4449
private static final String DATABASE_NAME = "test";
4550
private static final String[] sqls =
@@ -76,6 +81,74 @@ public static void tearDown() {
7681
EnvFactory.getEnv().cleanClusterEnvironment();
7782
}
7883

84+
/**
85+
* Execute a prepared statement query and verify the result. For PreparedStatement EXECUTE
86+
* queries, use the write connection directly instead of tableResultSetEqualTest, because
87+
* PreparedStatements are session-scoped and tableResultSetEqualTest may route queries to
88+
* different nodes where the PreparedStatement doesn't exist.
89+
*/
90+
private static void executePreparedStatementAndVerify(
91+
Connection connection,
92+
Statement statement,
93+
String executeSql,
94+
String[] expectedHeader,
95+
String[] expectedRetArray)
96+
throws SQLException {
97+
// Execute with parameters using write connection directly
98+
// In cluster test, we need to use write connection to ensure same session
99+
if (connection instanceof ClusterTestConnection) {
100+
// Use write connection directly for PreparedStatement queries
101+
try (Statement writeStatement =
102+
((ClusterTestConnection) connection)
103+
.writeConnection
104+
.getUnderlyingConnection()
105+
.createStatement();
106+
ResultSet resultSet = writeStatement.executeQuery(executeSql)) {
107+
ResultSetMetaData metaData = resultSet.getMetaData();
108+
109+
// Verify header
110+
assertEquals(expectedHeader.length, metaData.getColumnCount());
111+
for (int i = 1; i <= metaData.getColumnCount(); i++) {
112+
assertEquals(expectedHeader[i - 1], metaData.getColumnName(i));
113+
}
114+
115+
// Verify data
116+
int cnt = 0;
117+
while (resultSet.next()) {
118+
StringBuilder builder = new StringBuilder();
119+
for (int i = 1; i <= expectedHeader.length; i++) {
120+
builder.append(resultSet.getString(i)).append(",");
121+
}
122+
assertEquals(expectedRetArray[cnt], builder.toString());
123+
cnt++;
124+
}
125+
assertEquals(expectedRetArray.length, cnt);
126+
}
127+
} else {
128+
try (ResultSet resultSet = statement.executeQuery(executeSql)) {
129+
ResultSetMetaData metaData = resultSet.getMetaData();
130+
131+
// Verify header
132+
assertEquals(expectedHeader.length, metaData.getColumnCount());
133+
for (int i = 1; i <= metaData.getColumnCount(); i++) {
134+
assertEquals(expectedHeader[i - 1], metaData.getColumnName(i));
135+
}
136+
137+
// Verify data
138+
int cnt = 0;
139+
while (resultSet.next()) {
140+
StringBuilder builder = new StringBuilder();
141+
for (int i = 1; i <= expectedHeader.length; i++) {
142+
builder.append(resultSet.getString(i)).append(",");
143+
}
144+
assertEquals(expectedRetArray[cnt], builder.toString());
145+
cnt++;
146+
}
147+
assertEquals(expectedRetArray.length, cnt);
148+
}
149+
}
150+
}
151+
79152
@Test
80153
public void testPrepareAndExecute() {
81154
String[] expectedHeader = new String[] {"time", "id", "name", "value"};

0 commit comments

Comments
 (0)