Skip to content

Commit 091de61

Browse files
committed
Fixed bug of multistatement processing in QueryReader
1 parent 871ddc1 commit 091de61

File tree

2 files changed

+58
-2
lines changed

2 files changed

+58
-2
lines changed

query/src/main/java/tech/ydb/query/tools/QueryReader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ QueryReader toReader(QueryInfo info) {
8787
long lastInserted = 0;
8888
for (Map.Entry<Long, ResultSetParts> entry: results.entrySet()) {
8989
long key = entry.getKey();
90-
while (lastInserted < key) {
90+
while (lastInserted + 1 < key) {
9191
ordered.add(new ResultSetParts(lastInserted));
9292
lastInserted++;
9393
}

query/src/test/java/tech/ydb/query/impl/QueryIntegrationTest.java

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ public void testQueryStats() {
399399
}
400400

401401
@Test
402-
public void testQueryWarngins() {
402+
public void testQueryWarnings() {
403403
try (QueryClient client = QueryClient.newClient(ydbTransport).build()) {
404404
try (QuerySession session = client.createSession(Duration.ofSeconds(5)).join().getValue()) {
405405
CompletableFuture<Result<QueryInfo>> createTable = session
@@ -433,4 +433,60 @@ public void testQueryWarngins() {
433433
}
434434
}
435435
}
436+
437+
@Test
438+
public void testMultiStatement() {
439+
try (QueryClient client = QueryClient.newClient(ydbTransport).build()) {
440+
try (QuerySession session = client.createSession(Duration.ofSeconds(5)).join().getValue()) {
441+
String query = ""
442+
+ "SELECT * FROM `" + TEST_TABLE + "` WHERE id = $s1;"
443+
+ "INSERT INTO `" + TEST_TABLE + "` (id, name) VALUES ($id1, $name1);"
444+
+ "SELECT * FROM `" + TEST_TABLE + "` WHERE id = $s2;"
445+
+ "INSERT INTO `" + TEST_TABLE + "` (id, name) VALUES ($id2, $name2);"
446+
+ "SELECT * FROM `" + TEST_TABLE + "` ORDER BY id";
447+
448+
Params params = Params.of(
449+
"$s1", PrimitiveValue.newInt32(100),
450+
"$s2", PrimitiveValue.newInt32(100),
451+
"$id1", PrimitiveValue.newInt32(100),
452+
"$name1", PrimitiveValue.newText("TEST1"),
453+
"$id2", PrimitiveValue.newInt32(200),
454+
"$name2", PrimitiveValue.newText("TEST2")
455+
);
456+
457+
Result<QueryReader> result = QueryReader.readFrom(
458+
session.createQuery(query, TxMode.SERIALIZABLE_RW, params)
459+
).join();
460+
461+
Assert.assertTrue(result.isSuccess());
462+
Assert.assertTrue(result.getStatus().getIssues().length == 0);
463+
464+
QueryReader reader = result.getValue();
465+
Assert.assertEquals(3, reader.getResultSetCount());
466+
467+
ResultSetReader rs1 = reader.getResultSet(0);
468+
Assert.assertFalse(rs1.next());
469+
470+
ResultSetReader rs2 = reader.getResultSet(1);
471+
Assert.assertTrue(rs2.next());
472+
Assert.assertEquals(100, rs2.getColumn("id").getInt32());
473+
Assert.assertEquals("TEST1", rs2.getColumn("name").getText());
474+
Assert.assertFalse(rs2.next());
475+
476+
ResultSetReader rs3 = reader.getResultSet(2);
477+
Assert.assertTrue(rs3.next());
478+
Assert.assertEquals(100, rs3.getColumn("id").getInt32());
479+
Assert.assertEquals("TEST1", rs3.getColumn("name").getText());
480+
Assert.assertTrue(rs3.next());
481+
Assert.assertEquals(200, rs3.getColumn("id").getInt32());
482+
Assert.assertEquals("TEST2", rs3.getColumn("name").getText());
483+
Assert.assertFalse(rs3.next());
484+
} finally {
485+
try (QuerySession session = client.createSession(SESSION_TIMEOUT).join().getValue()) {
486+
session.createQuery("DELETE FROM " + TEST_TABLE, TxMode.SERIALIZABLE_RW).execute()
487+
.join().getStatus().expectSuccess();
488+
}
489+
}
490+
}
491+
}
436492
}

0 commit comments

Comments
 (0)