diff options
author | snaury <snaury@ydb.tech> | 2023-04-13 12:46:14 +0300 |
---|---|---|
committer | snaury <snaury@ydb.tech> | 2023-04-13 12:46:14 +0300 |
commit | 77b68f3d70229113f21eab72e419bc603a4193e0 (patch) | |
tree | aa75cce0e789a4e1788858edb05ffec45d21fdfe | |
parent | cbde992ac1b298645d76d74f243af426cb74f5dc (diff) | |
download | ydb-77b68f3d70229113f21eab72e419bc603a4193e0.tar.gz |
Fix change visibility in read-write then read with commit
-rw-r--r-- | ydb/core/kqp/session_actor/kqp_tx.h | 2 | ||||
-rw-r--r-- | ydb/core/kqp/ut/effects/kqp_immediate_effects_ut.cpp | 50 |
2 files changed, 51 insertions, 1 deletions
diff --git a/ydb/core/kqp/session_actor/kqp_tx.h b/ydb/core/kqp/session_actor/kqp_tx.h index 31b8d538cdd..7c7cd10fd0c 100644 --- a/ydb/core/kqp/session_actor/kqp_tx.h +++ b/ydb/core/kqp/session_actor/kqp_tx.h @@ -230,7 +230,7 @@ public: return false; // Do not acquire locks after first lock issue } - if (!DeferredEffects.Empty()) { + if (TxHasEffects()) { return true; // Acquire locks in read write tx } diff --git a/ydb/core/kqp/ut/effects/kqp_immediate_effects_ut.cpp b/ydb/core/kqp/ut/effects/kqp_immediate_effects_ut.cpp index fd0119a2754..4d0302ec1fc 100644 --- a/ydb/core/kqp/ut/effects/kqp_immediate_effects_ut.cpp +++ b/ydb/core/kqp/ut/effects/kqp_immediate_effects_ut.cpp @@ -1387,6 +1387,56 @@ Y_UNIT_TEST_SUITE(KqpImmediateEffects) { } } + Y_UNIT_TEST(WriteThenReadWithCommit) { + auto serverSettings = TKikimrSettings() + .SetEnableKqpImmediateEffects(true); + TKikimrRunner kikimr(serverSettings); + auto db = kikimr.GetTableClient(); + auto session = db.CreateSession().GetValueSync().GetSession(); + + CreateShardedTestTable(session); + + kikimr.GetTestServer().GetRuntime()->SetLogPriority(NKikimrServices::KQP_EXECUTER, NLog::PRI_DEBUG); + + auto session1 = db.CreateSession().GetValueSync().GetSession(); + TMaybe<TTransaction> tx1; + { + auto result = session.ExecuteDataQuery(R"( + --!syntax_v1 + + SELECT * FROM TestImmediateEffects WHERE Key = 1u; + )", TTxControl::BeginTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + CompareYson(R"([ + [[1u];["Value1"]] + ])", FormatResultSetYson(result.GetResultSet(0))); + tx1 = result.GetTransaction(); + UNIT_ASSERT(tx1); + } + + { + auto result = session.ExecuteDataQuery(R"( + --!syntax_v1 + + UPSERT INTO TestImmediateEffects (Key, Value) VALUES + (1u, "ModifiedValue1"); + )", TTxControl::Tx(*tx1)).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + } + + { + auto result = session.ExecuteDataQuery(R"( + --!syntax_v1 + + SELECT * FROM TestImmediateEffects WHERE Key = 1u; + )", TTxControl::Tx(*tx1).CommitTx()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + CompareYson(R"([ + [[1u];["ModifiedValue1"]] + ])", FormatResultSetYson(result.GetResultSet(0))); + } + } + } } // namespace NKqp |