summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/insert.cpp
diff options
context:
space:
mode:
authorditimizhev <[email protected]>2025-01-16 16:05:48 +0300
committerditimizhev <[email protected]>2025-01-16 16:30:54 +0300
commit7e86bcaf10a418760708b0be68e02abd715b745b (patch)
treea48b0c9efd485af31384bfaf60c8aada1f9ca3a8 /yql/essentials/sql/v1/insert.cpp
parente812e2c1c25ae5339044634886773f66f443c061 (diff)
Add BATCH to update/delete stmts
Impl BATCH to UPDATE and DELETE stmts without ON for batch execution in YDB. commit_hash:426f8fae0635a8fec07e940e0f0dfba1974531bf
Diffstat (limited to 'yql/essentials/sql/v1/insert.cpp')
-rw-r--r--yql/essentials/sql/v1/insert.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/yql/essentials/sql/v1/insert.cpp b/yql/essentials/sql/v1/insert.cpp
index 181137457f1..4af4986085b 100644
--- a/yql/essentials/sql/v1/insert.cpp
+++ b/yql/essentials/sql/v1/insert.cpp
@@ -300,6 +300,10 @@ public:
Update = std::move(update);
}
+ void ResetIsBatch(bool isBatch) {
+ IsBatch = isBatch;
+ }
+
bool DoInit(TContext& ctx, ISource* src) override {
TTableList tableList;
TNodePtr values;
@@ -347,6 +351,10 @@ public:
options = L(options, Q(Y(Q("update"), Update->Build(ctx))));
}
+ if (IsBatch) {
+ options = L(options, Q(Y(Q("is_batch"), Q("true"))));
+ }
+
auto write = BuildWriteTable(Pos, "values", Table, Mode, std::move(options), Scoped);
if (!write->Init(ctx, FakeSource.Get())) {
return false;
@@ -379,6 +387,7 @@ protected:
TSourcePtr Update;
TSourcePtr FakeSource;
TNodePtr Options;
+ bool IsBatch = false;
};
EWriteColumnMode ToWriteColumnsMode(ESQLWriteColumnMode sqlWriteColumnMode) {
@@ -398,12 +407,28 @@ TNodePtr BuildUpdateColumns(TPosition pos, TScopedStatePtr scoped, const TTableR
return writeNode;
}
+TNodePtr BuildBatchUpdate(TPosition pos, TScopedStatePtr scoped, const TTableRef& table, TSourcePtr values, TSourcePtr source, TNodePtr options) {
+ YQL_ENSURE(values, "Invalid values node");
+ TIntrusivePtr<TWriteColumnsNode> writeNode = new TWriteColumnsNode(pos, scoped, table, EWriteColumnMode::Update, nullptr, options);
+ writeNode->ResetSource(std::move(source));
+ writeNode->ResetUpdate(std::move(values));
+ writeNode->ResetIsBatch(true);
+ return writeNode;
+}
+
TNodePtr BuildDelete(TPosition pos, TScopedStatePtr scoped, const TTableRef& table, TSourcePtr source, TNodePtr options) {
TIntrusivePtr<TWriteColumnsNode> writeNode = new TWriteColumnsNode(pos, scoped, table, EWriteColumnMode::Delete, nullptr, options);
writeNode->ResetSource(std::move(source));
return writeNode;
}
+TNodePtr BuildBatchDelete(TPosition pos, TScopedStatePtr scoped, const TTableRef& table, TSourcePtr source, TNodePtr options) {
+ TIntrusivePtr<TWriteColumnsNode> writeNode = new TWriteColumnsNode(pos, scoped, table, EWriteColumnMode::Delete, nullptr, options);
+ writeNode->ResetSource(std::move(source));
+ writeNode->ResetIsBatch(true);
+ return writeNode;
+}
+
class TEraseColumnsNode: public TAstListNode {
public: