diff options
author | ditimizhev <[email protected]> | 2025-01-16 16:05:48 +0300 |
---|---|---|
committer | ditimizhev <[email protected]> | 2025-01-16 16:30:54 +0300 |
commit | 7e86bcaf10a418760708b0be68e02abd715b745b (patch) | |
tree | a48b0c9efd485af31384bfaf60c8aada1f9ca3a8 /yql/essentials/sql/v1/insert.cpp | |
parent | e812e2c1c25ae5339044634886773f66f443c061 (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.cpp | 25 |
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: |