aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniil Cherednik <dan.cherednik@gmail.com>2022-04-21 02:29:06 +0300
committerDaniil Cherednik <dan.cherednik@gmail.com>2022-04-21 02:29:06 +0300
commit168b49d756bf779f776edbb2493bfb49f22d633c (patch)
tree5f10735dc156e3710872635e413e880c242f5ce0
parente114fdf139bc9540b1c5efe99ae6ce88db3662ff (diff)
downloadydb-168b49d756bf779f776edbb2493bfb49f22d633c.tar.gz
ut for upsert in the same pk multiple time in one statement. KIKIMR-14192
ref:5748db9c9e3991caf32f9dbd112d8e7b731b5552
-rw-r--r--ydb/core/kqp/ut/kqp_indexes_multishard_ut.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/ydb/core/kqp/ut/kqp_indexes_multishard_ut.cpp b/ydb/core/kqp/ut/kqp_indexes_multishard_ut.cpp
index eeb9190bed..1a5afadb9a 100644
--- a/ydb/core/kqp/ut/kqp_indexes_multishard_ut.cpp
+++ b/ydb/core/kqp/ut/kqp_indexes_multishard_ut.cpp
@@ -1072,6 +1072,39 @@ Y_UNIT_TEST_SUITE(KqpMultishardIndex) {
UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(idx).table_access(0).reads().rows(), 1);
}
}
+
+ Y_UNIT_TEST_QUAD(DuplicateUpsert, WithMvcc, UseNewEngine) {
+ auto setting = NKikimrKqp::TKqpSetting();
+ auto serverSettings = TKikimrSettings()
+ .SetEnableMvcc(WithMvcc)
+ .SetEnableMvccSnapshotReads(WithMvcc)
+ .SetKqpSettings({setting});
+ TKikimrRunner kikimr(serverSettings);
+ auto db = kikimr.GetTableClient();
+ auto session = db.CreateSession().GetValueSync().GetSession();
+ CreateTableWithMultishardIndexAndDataColumn(kikimr.GetTestClient());
+
+ {
+ const TString query1(Q_(R"(
+ UPSERT INTO `/Root/MultiShardIndexedWithDataColumn` (key, fk, ext_value) VALUES
+ (3u, 3000000000u, "Something"),
+ (3u, 3000000001u, "Something1"),
+ (3u, 3000000002u, "Something2");
+ )"));
+
+ auto result = session.ExecuteDataQuery(
+ query1,
+ TTxControl::BeginTx(TTxSettings::SerializableRW()).CommitTx())
+ .ExtractValueSync();
+ UNIT_ASSERT(result.IsSuccess());
+ }
+
+ {
+ const auto& yson = ReadTableToYson(session, "/Root/MultiShardIndexedWithDataColumn/index/indexImplTable");
+ const TString expected = R"([[[3000000002u];[3u];#]])";
+ UNIT_ASSERT_VALUES_EQUAL(yson, expected);
+ }
+ }
}
}