summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniil Timizhev <[email protected]>2025-04-11 13:33:04 +0300
committerGitHub <[email protected]>2025-04-11 13:33:04 +0300
commite7cfbdc21f9a11f15fb5f5d6991179d0a1989b6e (patch)
treedc63cae4a5bf2dd576dbb900883e2bd456fdd414
parent6ef9631df67692fa44ce6e727f5711bc1e9e93f1 (diff)
Fix MODE_UPSERT for update queries (#17002)
-rw-r--r--ydb/core/kqp/opt/kqp_opt_kql.cpp8
-rw-r--r--ydb/core/kqp/ut/query/kqp_explain_ut.cpp4
-rw-r--r--ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_update.sql-plan_/write_update.sql.plan2
3 files changed, 11 insertions, 3 deletions
diff --git a/ydb/core/kqp/opt/kqp_opt_kql.cpp b/ydb/core/kqp/opt/kqp_opt_kql.cpp
index e17184b0f9c..b56d27b3a47 100644
--- a/ydb/core/kqp/opt/kqp_opt_kql.cpp
+++ b/ydb/core/kqp/opt/kqp_opt_kql.cpp
@@ -205,6 +205,10 @@ TExprNode::TPtr GetPgNotNullColumns(
TExprNode::TPtr IsUpdateSetting(TExprContext& ctx, const TPositionHandle& pos) {
return Build<TCoNameValueTupleList>(ctx, pos)
.Add()
+ .Name().Build("Mode")
+ .Value<TCoAtom>().Build("update")
+ .Build()
+ .Add()
.Name().Build("IsUpdate")
.Build()
.Done().Ptr();
@@ -213,6 +217,10 @@ TExprNode::TPtr IsUpdateSetting(TExprContext& ctx, const TPositionHandle& pos) {
TExprNode::TPtr IsConditionalUpdateSetting(TExprContext& ctx, const TPositionHandle& pos) {
return Build<TCoNameValueTupleList>(ctx, pos)
.Add()
+ .Name().Build("Mode")
+ .Value<TCoAtom>().Build("update")
+ .Build()
+ .Add()
.Name().Build("IsUpdate")
.Build()
.Add()
diff --git a/ydb/core/kqp/ut/query/kqp_explain_ut.cpp b/ydb/core/kqp/ut/query/kqp_explain_ut.cpp
index ae7016418ef..1b5a5c9ae74 100644
--- a/ydb/core/kqp/ut/query/kqp_explain_ut.cpp
+++ b/ydb/core/kqp/ut/query/kqp_explain_ut.cpp
@@ -523,7 +523,7 @@ Y_UNIT_TEST_SUITE(KqpExplain) {
auto deletesConstCount = CountPlanNodesByKv(plan, "Node Type", "Delete-ConstantExpr");
UNIT_ASSERT_VALUES_EQUAL(deletesConstCount, UseSink ? 0 : 1);
- auto upsertsCount = CountPlanNodesByKv(plan, "Name", "Upsert");
+ auto upsertsCount = CountPlanNodesByKv(plan, "Name", UseSink ? "Update" : "Upsert");
UNIT_ASSERT_VALUES_EQUAL(upsertsCount, UseSink ? 2 : 2);
auto deletesCount = CountPlanNodesByKv(plan, "Name", "Delete");
@@ -549,7 +549,7 @@ Y_UNIT_TEST_SUITE(KqpExplain) {
countOperationsByType("reads");
countOperationsByType("writes");
- UNIT_ASSERT_VALUES_EQUAL(counter["MultiUpsert"], UseSink ? upsertsCount : upsertsConstCount);
+ UNIT_ASSERT_VALUES_EQUAL(counter[UseSink ? "MultiUpdate" : "MultiUpsert"], UseSink ? upsertsCount : upsertsConstCount);
UNIT_ASSERT_VALUES_EQUAL(counter["MultiErase"], UseSink ? deletesCount : deletesConstCount);
UNIT_ASSERT_VALUES_EQUAL(counter["FullScan"], fullScansCount);
UNIT_ASSERT_VALUES_EQUAL(counter["Scan"], rangeScansCount);
diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_update.sql-plan_/write_update.sql.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_update.sql-plan_/write_update.sql.plan
index 257d7e1c163..7d68c9c3efa 100644
--- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_update.sql-plan_/write_update.sql.plan
+++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_update.sql-plan_/write_update.sql.plan
@@ -29,7 +29,7 @@
"Group",
"Name"
],
- "type": "MultiUpsert"
+ "type": "MultiUpdate"
}
]
}