aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsnaury <snaury@ydb.tech>2023-04-13 12:46:14 +0300
committersnaury <snaury@ydb.tech>2023-04-13 12:46:14 +0300
commit77b68f3d70229113f21eab72e419bc603a4193e0 (patch)
treeaa75cce0e789a4e1788858edb05ffec45d21fdfe
parentcbde992ac1b298645d76d74f243af426cb74f5dc (diff)
downloadydb-77b68f3d70229113f21eab72e419bc603a4193e0.tar.gz
Fix change visibility in read-write then read with commit
-rw-r--r--ydb/core/kqp/session_actor/kqp_tx.h2
-rw-r--r--ydb/core/kqp/ut/effects/kqp_immediate_effects_ut.cpp50
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