Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion bom/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

<properties>
<ydb-auth-api.version>1.0.0</ydb-auth-api.version>
<ydb-proto-api.version>1.9.4</ydb-proto-api.version>
<ydb-proto-api.version>1.9.5</ydb-proto-api.version>
<yc-auth.version>2.3.1</yc-auth.version>
</properties>

Expand Down
3 changes: 2 additions & 1 deletion common/src/main/java/tech/ydb/common/transaction/TxMode.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@ public enum TxMode {
SERIALIZABLE_RW,
SNAPSHOT_RO,
SNAPSHOT_RW,
STALE_RO,
READ_COMMITTED_RW,

STALE_RO,
ONLINE_RO,
ONLINE_INCONSISTENT_RO
}
3 changes: 3 additions & 0 deletions query/src/main/java/tech/ydb/query/impl/TableClientImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,9 @@ private YdbQuery.TransactionControl mapTxControl(YdbTable.TransactionControl tc)
if (tc.getBeginTx().hasSnapshotReadWrite()) {
return TxControl.txModeCtrl(TxMode.SNAPSHOT_RW, tc.getCommitTx());
}
if (tc.getBeginTx().hasReadCommittedReadWrite()) {
return TxControl.txModeCtrl(TxMode.READ_COMMITTED_RW, tc.getCommitTx());
}
if (tc.getBeginTx().hasStaleReadOnly()) {
return TxControl.txModeCtrl(TxMode.STALE_RO, tc.getCommitTx());
}
Expand Down
6 changes: 6 additions & 0 deletions query/src/main/java/tech/ydb/query/impl/TxControl.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ class TxControl {
.setSnapshotReadWrite(YdbQuery.SnapshotRWModeSettings.getDefaultInstance())
.build();

private static final YdbQuery.TransactionSettings TS_READ_COMMITTED_RW = YdbQuery.TransactionSettings.newBuilder()
.setReadCommittedReadWrite(YdbQuery.ReadCommittedRWModeSettings.getDefaultInstance())
.build();

private static final YdbQuery.TransactionSettings TS_STALE = YdbQuery.TransactionSettings.newBuilder()
.setStaleReadOnly(YdbQuery.StaleModeSettings.getDefaultInstance())
.build();
Expand Down Expand Up @@ -61,6 +65,8 @@ public static YdbQuery.TransactionSettings txSettings(TxMode tx) {
return TS_SNAPSHOT;
case SNAPSHOT_RW:
return TS_SNAPSHOT_RW;
case READ_COMMITTED_RW:
return TS_READ_COMMITTED_RW;
case STALE_RO:
return TS_STALE;
case ONLINE_RO:
Expand Down
45 changes: 45 additions & 0 deletions query/src/test/java/tech/ydb/query/impl/QueryIntegrationTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -626,4 +626,49 @@ public void testNoTxStatement() {
}
}
}

@Test
@Ignore // disable while READ_COMMITTED is not supported
public void testReadCommittedStatement() {
String selectQuery = "SELECT * FROM `" + TEST_TABLE + "` ORDR BY id";
String insertQuery = "DECLARE $id AS Int32; DECLARE $name AS Text; "
+ "INSERT INTO `" + TEST_TABLE + "` (id, name) VALUES ($id, $name)";
try (QueryClient client = QueryClient.newClient(ydbTransport).build()) {
QuerySession session1 = client.createSession(Duration.ofSeconds(5)).join().getValue();
QuerySession session2 = client.createSession(Duration.ofSeconds(5)).join().getValue();

try {
QueryTransaction tx1 = session1.createNewTransaction(TxMode.READ_COMMITTED_RW);
QueryTransaction tx2 = session2.createNewTransaction(TxMode.READ_COMMITTED_RW);

Result<QueryReader> s1 = QueryReader.readFrom(tx1.createQuery(selectQuery)).join();
Result<QueryReader> s2 = QueryReader.readFrom(tx2.createQuery(selectQuery)).join();

Assert.assertTrue("Cannot read with " + s1, s1.isSuccess());
Assert.assertTrue("Cannot read with " + s1, s2.isSuccess());

Params prms1 = Params.of("$id", PrimitiveValue.newInt32(1), "$name", PrimitiveValue.newText("value1"));
Params prms2 = Params.of("$id", PrimitiveValue.newInt32(2), "$name", PrimitiveValue.newText("value2"));

Result<QueryInfo> i1 = tx1.createQuery(insertQuery, prms1).execute().join();
Result<QueryInfo> i2 = tx2.createQuery(insertQuery, prms2).execute().join();

Assert.assertTrue("Cannot insert with " + i1, i1.isSuccess());
Assert.assertTrue("Cannot insert with " + i2, i2.isSuccess());

Result<QueryInfo> c1 = tx1.commit().join();
Result<QueryInfo> c2 = tx2.commit().join();

Assert.assertTrue("Cannot commit with " + c1, c1.isSuccess());
Assert.assertTrue("Cannot commit with " + c2, c2.isSuccess());
} finally {
session1.close();
session2.close();
try (QuerySession session = client.createSession(SESSION_TIMEOUT).join().getValue()) {
session.createQuery("DELETE FROM " + TEST_TABLE, TxMode.SERIALIZABLE_RW).execute()
.join().getStatus().expectSuccess();
}
}
}
}
}
6 changes: 6 additions & 0 deletions table/src/main/java/tech/ydb/table/impl/TxControlToPb.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ public class TxControlToPb {
.setSnapshotReadWrite(YdbTable.SnapshotRWModeSettings.getDefaultInstance())
.build();

private static final YdbTable.TransactionSettings TS_READ_COMMITTED_RW = YdbTable.TransactionSettings.newBuilder()
.setReadCommittedReadWrite(YdbTable.ReadCommittedRWModeSettings.getDefaultInstance())
.build();

private static final YdbTable.TransactionSettings TS_STALE = YdbTable.TransactionSettings.newBuilder()
.setStaleReadOnly(YdbTable.StaleModeSettings.getDefaultInstance())
.build();
Expand Down Expand Up @@ -61,6 +65,8 @@ public static YdbTable.TransactionSettings txSettings(TxMode tx) {
return TS_SNAPSHOT_RO;
case SNAPSHOT_RW:
return TS_SNAPSHOT_RW;
case READ_COMMITTED_RW:
return TS_READ_COMMITTED_RW;
case STALE_RO:
return TS_STALE;
case ONLINE_RO:
Expand Down
Loading