diff options
| author | vvvv <[email protected]> | 2025-09-22 10:42:28 +0300 |
|---|---|---|
| committer | vvvv <[email protected]> | 2025-09-22 11:19:58 +0300 |
| commit | c3b1ec6787697f6bfd4e9af60e6535d6bd7448db (patch) | |
| tree | e839795d8631215910f96053df586e267b66f65d /yql/essentials/sql | |
| parent | 6153345dae69e862003993069afe458677cd432a (diff) | |
YQL-20339 expr low level funcs
init
commit_hash:ededd246fa929931de6e89fd5f809157d9fe4d16
Diffstat (limited to 'yql/essentials/sql')
| -rw-r--r-- | yql/essentials/sql/v1/builtin.cpp | 19 | ||||
| -rw-r--r-- | yql/essentials/sql/v1/list_builtin.cpp | 44 | ||||
| -rw-r--r-- | yql/essentials/sql/v1/list_builtin.h | 29 |
3 files changed, 92 insertions, 0 deletions
diff --git a/yql/essentials/sql/v1/builtin.cpp b/yql/essentials/sql/v1/builtin.cpp index 52504f88523..234282d4945 100644 --- a/yql/essentials/sql/v1/builtin.cpp +++ b/yql/essentials/sql/v1/builtin.cpp @@ -3076,6 +3076,25 @@ struct TBuiltinFuncData { {"dictlookup", {"DictLookup", "Normal", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Lookup", 2, 2) }}, {"dictcontains", {"DictContains", "Normal", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Contains", 2, 2)}}, + {"todynamiclinear", {"ToDynamicLinear", "Normal", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ToDynamicLinear", 1, 1) }}, + {"fromdynamiclinear", {"FromDynamicLinear", "Normal", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("FromDynamicLinear", 1, 1) }}, + // MutDict builtins + {"mutdictcreate", {"MutDictCreate", "Normal", BuildSimpleBuiltinFactoryCallback<TMutDictCreateBuiltin>()}}, + {"tomutdict", {"ToMutDict", "Normal", BuildSimpleBuiltinFactoryCallback<TToMutDictBuiltin>()}}, + {"frommutdict", {"FromMutDict", "Normal", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("FromMutDict", 1, 1)}}, + {"mutdictinsert", {"MutDictInsert", "Normal", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("MutDictInsert", 3, 3)}}, + {"mutdictupsert", {"MutDictUpsert", "Normal", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("MutDictUpsert", 3, 3)}}, + {"mutdictupdate", {"MutDictUpdate", "Normal", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("MutDictUpdate", 3, 3)}}, + {"mutdictremove", {"MutDictRemove", "Normal", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("MutDictRemove", 2, 2)}}, + {"mutdictpop", {"MutDictPop", "Normal", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("MutDictPop", 2, 2)}}, + {"mutdictcontains", {"MutDictContains", "Normal", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("MutDictContains", 2, 2)}}, + {"mutdictlookup", {"MutDictLookup", "Normal", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("MutDictLookup", 2, 2)}}, + {"mutdicthasitems", {"MutDictHasItems", "Normal", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("MutDictHasItems", 1, 1)}}, + {"mutdictlength", {"MutDictLength", "Normal", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("MutDictLength", 1, 1)}}, + {"mutdictitems", {"MutDictItems", "Normal", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("MutDictItems", 1, 1)}}, + {"mutdictkeys", {"MutDictKeys", "Normal", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("MutDictKeys", 1, 1)}}, + {"mutdictpayloads", {"MutDictPayloads", "Normal", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("MutDictPayloads", 1, 1)}}, + // Atom builtins {"asatom", {"AsAtom", "Normal", BuildSimpleBuiltinFactoryCallback<TYqlAsAtom>()}}, {"secureparam", {"SecureParam", "Normal", BuildNamedBuiltinFactoryCallback<TYqlAtom>("SecureParam")}}, diff --git a/yql/essentials/sql/v1/list_builtin.cpp b/yql/essentials/sql/v1/list_builtin.cpp index a6965a70755..b1ba690dcde 100644 --- a/yql/essentials/sql/v1/list_builtin.cpp +++ b/yql/essentials/sql/v1/list_builtin.cpp @@ -139,4 +139,48 @@ void TSetCreateBuiltin::DoUpdateState() const { State_.Set(ENodeState::Const); } +bool TMutDictCreateBuiltin::DoInit(TContext& ctx, ISource* src) { + if (Args_.size() < 3) { + ctx.Error(Pos_) << OpName_ << " requires at least 3 parameters"; + return false; + } + + for (ui32 i = 0; i < Args_.size(); ++i) { + if (!Args_[i]->Init(ctx, src)) { + return false; + } + } + + Node_ = Y("MutDictCreate", Y("DictType", Args_[0], Args_[1])); + for (ui32 i = 2; i < Args_.size(); ++i) { + Node_ = L(Node_, Y("DependsOn", Args_[i])); + } + + return true; +} + +void TMutDictCreateBuiltin::DoUpdateState() const { + State_.Set(ENodeState::Const); +} + +bool TToMutDictBuiltin::DoInit(TContext& ctx, ISource* src) { + if (Args_.size() < 2) { + ctx.Error(Pos_) << OpName_ << " requires at least 2 parameters"; + return false; + } + + for (ui32 i = 0; i < Args_.size(); ++i) { + if (!Args_[i]->Init(ctx, src)) { + return false; + } + } + + Node_ = Y("ToMutDict", Args_[0]); + for (ui32 i = 1; i < Args_.size(); ++i) { + Node_ = L(Node_, Y("DependsOn", Args_[i])); + } + + return true; +} + } // namespace NSQLTranslationV1 diff --git a/yql/essentials/sql/v1/list_builtin.h b/yql/essentials/sql/v1/list_builtin.h index 92961e2840d..d4e11e4951c 100644 --- a/yql/essentials/sql/v1/list_builtin.h +++ b/yql/essentials/sql/v1/list_builtin.h @@ -157,4 +157,33 @@ public: } }; +class TMutDictCreateBuiltin final: public TListBuiltin { +public: + TMutDictCreateBuiltin(TPosition pos, + const TVector<TNodePtr>& args) + : TListBuiltin(pos, "MutDictCreate", args) + {} + + bool DoInit(TContext& ctx, ISource* src) override; + void DoUpdateState() const override; + + TNodePtr DoClone() const final { + return new TMutDictCreateBuiltin(Pos_, CloneContainer(Args_)); + } +}; + +class TToMutDictBuiltin final: public TListBuiltin { +public: + TToMutDictBuiltin(TPosition pos, + const TVector<TNodePtr>& args) + : TListBuiltin(pos, "ToMutDict", args) + {} + + bool DoInit(TContext& ctx, ISource* src) override; + + TNodePtr DoClone() const final { + return new TToMutDictBuiltin(Pos_, CloneContainer(Args_)); + } +}; + } // namespace NSQLTranslationV1 |
