Skip to content

Commit 0339e80

Browse files
authored
fix returning from invalid table (#14738)
1 parent 6acf386 commit 0339e80

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

ydb/core/kqp/provider/yql_kikimr_datasink.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1031,7 +1031,12 @@ class TKikimrDataSink : public TDataProviderBase
10311031
TString(dataSink.Cluster()),
10321032
key.GetTablePath(), node->Pos(), ctx);
10331033

1034-
returningColumns = BuildColumnsList(*table, node->Pos(), ctx, sysColumnsEnabled, true /*ignoreWriteOnlyColumns*/);
1034+
if (table) {
1035+
returningColumns = BuildColumnsList(*table, node->Pos(), ctx, sysColumnsEnabled, true /*ignoreWriteOnlyColumns*/);
1036+
return true;
1037+
} else {
1038+
return false;
1039+
}
10351040
};
10361041

10371042
TVector<TExprBase> columnsToReturn;
@@ -1040,7 +1045,9 @@ class TKikimrDataSink : public TDataProviderBase
10401045
auto pgResultNode = item.Cast<TCoPgResultItem>();
10411046
const auto value = pgResultNode.ExpandedColumns().Cast<TCoAtom>().Value();
10421047
if (value.empty()) {
1043-
fillStar();
1048+
if (!fillStar()) {
1049+
return nullptr;
1050+
}
10441051
break;
10451052
} else {
10461053
auto atom = Build<TCoAtom>(ctx, node->Pos())
@@ -1051,7 +1058,9 @@ class TKikimrDataSink : public TDataProviderBase
10511058
} else if (auto returningItem = item.Maybe<TCoReturningListItem>()) {
10521059
columnsToReturn.push_back(returningItem.Cast().ColumnRef());
10531060
} else if (auto returningStar = item.Maybe<TCoReturningStar>()) {
1054-
fillStar();
1061+
if (!fillStar()) {
1062+
return nullptr;
1063+
}
10551064
break;
10561065
}
10571066
}

ydb/core/kqp/ut/opt/kqp_returning_ut.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,16 @@ Y_UNIT_TEST(ReturningSerial) {
302302
UNIT_ASSERT(result.IsSuccess());
303303
CompareYson(R"([[2;[2]];[3;[2]];[1;[3]]])", FormatResultSetYson(result.GetResultSet(0)));
304304
}
305+
306+
{
307+
const auto query = Q_(R"(
308+
--!syntax_v1
309+
DELETE FROM ReturningTable10 WHERE key <= 3 RETURNING *;
310+
)");
311+
312+
auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx()).GetValueSync();
313+
UNIT_ASSERT(!result.IsSuccess());
314+
}
305315
}
306316

307317
Y_UNIT_TEST(ReturningColumnsOrder) {

0 commit comments

Comments
 (0)