aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMikhail Surin <ssmike@ydb.tech>2025-02-18 18:45:41 +0300
committerGitHub <noreply@github.com>2025-02-18 15:45:41 +0000
commit0339e8016fc45e8b115074d13f9af497c4b54645 (patch)
tree3cdce063552bb80ed1d554428800bc6b58075e10
parent6acf3864127e61abb53212a5cb520a31b53d0fd2 (diff)
downloadydb-0339e8016fc45e8b115074d13f9af497c4b54645.tar.gz
fix returning from invalid table (#14738)
-rw-r--r--ydb/core/kqp/provider/yql_kikimr_datasink.cpp15
-rw-r--r--ydb/core/kqp/ut/opt/kqp_returning_ut.cpp10
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) {