diff options
| author | Daniil Timizhev <[email protected]> | 2025-04-11 13:33:04 +0300 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-04-11 13:33:04 +0300 |
| commit | e7cfbdc21f9a11f15fb5f5d6991179d0a1989b6e (patch) | |
| tree | dc63cae4a5bf2dd576dbb900883e2bd456fdd414 | |
| parent | 6ef9631df67692fa44ce6e727f5711bc1e9e93f1 (diff) | |
Fix MODE_UPSERT for update queries (#17002)
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" } ] } |
