diff options
author | Mikhail Surin <ssmike@ydb.tech> | 2025-02-18 18:45:41 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-02-18 15:45:41 +0000 |
commit | 0339e8016fc45e8b115074d13f9af497c4b54645 (patch) | |
tree | 3cdce063552bb80ed1d554428800bc6b58075e10 | |
parent | 6acf3864127e61abb53212a5cb520a31b53d0fd2 (diff) | |
download | ydb-0339e8016fc45e8b115074d13f9af497c4b54645.tar.gz |
fix returning from invalid table (#14738)
-rw-r--r-- | ydb/core/kqp/provider/yql_kikimr_datasink.cpp | 15 | ||||
-rw-r--r-- | ydb/core/kqp/ut/opt/kqp_returning_ut.cpp | 10 |
2 files changed, 22 insertions, 3 deletions
diff --git a/ydb/core/kqp/provider/yql_kikimr_datasink.cpp b/ydb/core/kqp/provider/yql_kikimr_datasink.cpp index c86e005486..28a9b30ef6 100644 --- a/ydb/core/kqp/provider/yql_kikimr_datasink.cpp +++ b/ydb/core/kqp/provider/yql_kikimr_datasink.cpp @@ -1031,7 +1031,12 @@ public: TString(dataSink.Cluster()), key.GetTablePath(), node->Pos(), ctx); - returningColumns = BuildColumnsList(*table, node->Pos(), ctx, sysColumnsEnabled, true /*ignoreWriteOnlyColumns*/); + if (table) { + returningColumns = BuildColumnsList(*table, node->Pos(), ctx, sysColumnsEnabled, true /*ignoreWriteOnlyColumns*/); + return true; + } else { + return false; + } }; TVector<TExprBase> columnsToReturn; @@ -1040,7 +1045,9 @@ public: auto pgResultNode = item.Cast<TCoPgResultItem>(); const auto value = pgResultNode.ExpandedColumns().Cast<TCoAtom>().Value(); if (value.empty()) { - fillStar(); + if (!fillStar()) { + return nullptr; + } break; } else { auto atom = Build<TCoAtom>(ctx, node->Pos()) @@ -1051,7 +1058,9 @@ public: } else if (auto returningItem = item.Maybe<TCoReturningListItem>()) { columnsToReturn.push_back(returningItem.Cast().ColumnRef()); } else if (auto returningStar = item.Maybe<TCoReturningStar>()) { - fillStar(); + if (!fillStar()) { + return nullptr; + } break; } } diff --git a/ydb/core/kqp/ut/opt/kqp_returning_ut.cpp b/ydb/core/kqp/ut/opt/kqp_returning_ut.cpp index 887c66267b..3b7096d456 100644 --- a/ydb/core/kqp/ut/opt/kqp_returning_ut.cpp +++ b/ydb/core/kqp/ut/opt/kqp_returning_ut.cpp @@ -302,6 +302,16 @@ Y_UNIT_TEST(ReturningSerial) { UNIT_ASSERT(result.IsSuccess()); CompareYson(R"([[2;[2]];[3;[2]];[1;[3]]])", FormatResultSetYson(result.GetResultSet(0))); } + + { + const auto query = Q_(R"( + --!syntax_v1 + DELETE FROM ReturningTable10 WHERE key <= 3 RETURNING *; + )"); + + auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).GetValueSync(); + UNIT_ASSERT(!result.IsSuccess()); + } } Y_UNIT_TEST(ReturningColumnsOrder) { |