Skip to content

Commit 315ecc0

Browse files
committed
test: Added DbQueryResult2Test
1 parent 9828f03 commit 315ecc0

File tree

2 files changed

+100
-6
lines changed

2 files changed

+100
-6
lines changed
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package com.tsurugidb.iceaxe.test.sql;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertTrue;
5+
6+
import java.util.Optional;
7+
8+
import org.junit.jupiter.api.BeforeEach;
9+
import org.junit.jupiter.api.Test;
10+
import org.junit.jupiter.api.TestInfo;
11+
12+
import com.tsurugidb.iceaxe.sql.result.TsurugiQueryResult;
13+
import com.tsurugidb.iceaxe.test.util.DbTestTableTester;
14+
import com.tsurugidb.iceaxe.transaction.TsurugiTransaction;
15+
import com.tsurugidb.iceaxe.transaction.manager.event.TsurugiTmEventListener;
16+
import com.tsurugidb.iceaxe.transaction.manager.option.TgTmTxOption;
17+
18+
/**
19+
* {@link TsurugiQueryResult} test
20+
*/
21+
class DbQueryResult2Test extends DbTestTableTester {
22+
23+
private static final int SIZE = 10;
24+
private static final String SELECT_ORDER_BY_SQL = SELECT_SQL + " order by foo";
25+
26+
@BeforeEach
27+
void beforeEach(TestInfo info) throws Exception {
28+
logInitStart(LOG, info);
29+
30+
dropTestTable();
31+
createTestTable();
32+
insertTestTable(SIZE);
33+
34+
logInitEnd(LOG, info);
35+
}
36+
37+
@Test
38+
void whileEach_withRowNumber() throws Exception {
39+
var counter = new Object() {
40+
int i0 = 0; // i==0 が呼ばれた回数
41+
int count = 0; // 正しく読めた件数
42+
int total = 0; // リトライも含めて読んだ件数
43+
boolean updated = false;
44+
boolean retried = false;
45+
};
46+
47+
var session = getSession();
48+
var tm = createTransactionManagerOcc(session, 2);
49+
tm.addEventListener(new TsurugiTmEventListener() {
50+
@Override
51+
public void transactionRetry(TsurugiTransaction transaction, Exception cause, TgTmTxOption nextTmOption) {
52+
counter.retried = true;
53+
}
54+
});
55+
56+
try (var ps = session.createQuery(SELECT_ORDER_BY_SQL, SELECT_MAPPING)) {
57+
tm.execute(transaction -> {
58+
try (var result = transaction.executeQuery(ps)) {
59+
assertEquals(Optional.empty(), result.getHasNextRow());
60+
61+
result.whileEach((i, entity) -> {
62+
if (i == 0) {
63+
counter.i0++;
64+
counter.count = 0;
65+
}
66+
counter.count++;
67+
counter.total++;
68+
69+
var expected = createTestEntity(i);
70+
if (entity.getFoo() == 1 && counter.updated) {
71+
expected.setBar(999L);
72+
}
73+
assertEquals(expected, entity);
74+
75+
if (i == SIZE / 2 && !counter.updated) {
76+
// tmでシリアライゼーションエラーを発生させ、リトライさせる
77+
var tm2 = createTransactionManagerOcc(session);
78+
tm2.executeAndGetCount("update " + TEST + " set bar=999 where foo=1");
79+
counter.updated = true;
80+
}
81+
});
82+
assertEquals(Optional.of(false), result.getHasNextRow());
83+
assertEquals(SIZE, result.getReadCount());
84+
}
85+
});
86+
87+
assertTrue(counter.retried);
88+
assertEquals(2, counter.i0);
89+
assertEquals(SIZE, counter.count);
90+
assertTrue(counter.total > SIZE);
91+
}
92+
}
93+
}

modules/iceaxe-dbtest/src/test/java/com/tsurugidb/iceaxe/test/sql/DbQueryResultTest.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
class DbQueryResultTest extends DbTestTableTester {
2828

2929
private static final int SIZE = 4;
30+
private static final String SELECT_ORDER_BY_SQL = SELECT_SQL + " order by foo";
3031

3132
@BeforeAll
3233
static void beforeAll(TestInfo info) throws Exception {
@@ -44,7 +45,7 @@ static void beforeAll(TestInfo info) throws Exception {
4445
void whileEach() throws Exception {
4546
var session = getSession();
4647
var tm = createTransactionManagerOcc(session);
47-
try (var ps = session.createQuery(SELECT_SQL, SELECT_MAPPING)) {
48+
try (var ps = session.createQuery(SELECT_ORDER_BY_SQL, SELECT_MAPPING)) {
4849
tm.execute(transaction -> {
4950
try (var result = transaction.executeQuery(ps)) {
5051
assertEquals(Optional.empty(), result.getHasNextRow());
@@ -67,7 +68,7 @@ void whileEach() throws Exception {
6768
void getRecordList() throws Exception {
6869
var session = getSession();
6970
var tm = createTransactionManagerOcc(session);
70-
try (var ps = session.createQuery(SELECT_SQL, SELECT_MAPPING)) {
71+
try (var ps = session.createQuery(SELECT_ORDER_BY_SQL, SELECT_MAPPING)) {
7172
tm.execute(transaction -> {
7273
try (var result = transaction.executeQuery(ps)) {
7374
assertEquals(Optional.empty(), result.getHasNextRow());
@@ -86,7 +87,7 @@ void getRecordList() throws Exception {
8687
void findRecord() throws Exception {
8788
var session = getSession();
8889
var tm = createTransactionManagerOcc(session);
89-
try (var ps = session.createQuery(SELECT_SQL + " order by foo", SELECT_MAPPING)) {
90+
try (var ps = session.createQuery(SELECT_ORDER_BY_SQL, SELECT_MAPPING)) {
9091
tm.execute(transaction -> {
9192
try (var result = transaction.executeQuery(ps)) {
9293
assertEquals(Optional.empty(), result.getHasNextRow());
@@ -107,7 +108,7 @@ void findRecord() throws Exception {
107108
void iterator() throws Exception {
108109
var session = getSession();
109110
var tm = createTransactionManagerOcc(session);
110-
try (var ps = session.createQuery(SELECT_SQL, SELECT_MAPPING)) {
111+
try (var ps = session.createQuery(SELECT_ORDER_BY_SQL, SELECT_MAPPING)) {
111112
tm.execute(transaction -> {
112113
try (var result = transaction.executeQuery(ps)) {
113114
assertEquals(Optional.empty(), result.getHasNextRow());
@@ -131,7 +132,7 @@ void iterator() throws Exception {
131132
void forEach() throws Exception {
132133
var session = getSession();
133134
var tm = createTransactionManagerOcc(session);
134-
try (var ps = session.createQuery(SELECT_SQL, SELECT_MAPPING)) {
135+
try (var ps = session.createQuery(SELECT_ORDER_BY_SQL, SELECT_MAPPING)) {
135136
tm.execute(transaction -> {
136137
try (var result = transaction.executeQuery(ps)) {
137138
assertEquals(Optional.empty(), result.getHasNextRow());
@@ -153,7 +154,7 @@ void forEach() throws Exception {
153154
@Test
154155
void constructorError() throws Exception {
155156
var session = getSession();
156-
try (var ps = session.createQuery(SELECT_SQL, SELECT_MAPPING)) {
157+
try (var ps = session.createQuery(SELECT_ORDER_BY_SQL, SELECT_MAPPING)) {
157158
try (var transaction = session.createTransaction(TgTxOption.ofOCC())) {
158159
var future = FutureResponseCloseWrapper.of(transaction.getLowTransaction().executeQuery(ps.getSql()));
159160

0 commit comments

Comments
 (0)