diff options
author | oleg-g <oleg-g@yandex-team.ru> | 2022-02-10 16:52:20 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:52:20 +0300 |
commit | 9ef4225c5ec185f81cba50096659e62ec01267d8 (patch) | |
tree | 6d0d979bdf491a4c1a25748eafc1f7db35dd24bc | |
parent | 969a4575432dd5cbdcdd3be410af8ddfb9b0cc1a (diff) | |
download | ydb-9ef4225c5ec185f81cba50096659e62ec01267d8.tar.gz |
Restoring authorship annotation for <oleg-g@yandex-team.ru>. Commit 1 of 2.
22 files changed, 1031 insertions, 1031 deletions
diff --git a/ydb/library/yql/core/common_opt/yql_co_simple1.cpp b/ydb/library/yql/core/common_opt/yql_co_simple1.cpp index a32a6c3dabe..017c6ce9fc5 100644 --- a/ydb/library/yql/core/common_opt/yql_co_simple1.cpp +++ b/ydb/library/yql/core/common_opt/yql_co_simple1.cpp @@ -4671,12 +4671,12 @@ void RegisterCoSimpleCallables1(TCallableOptimizerMap& map) { map[LeftName] = std::bind(&OptimizeDirection<false>, _1); map[RightName] = std::bind(&OptimizeDirection<true>, _1); - map["Apply"] = [](const TExprNode::TPtr& node, TExprContext& /*ctx*/, TOptimizeContext& /*optCtx*/) { + map["Apply"] = [](const TExprNode::TPtr& node, TExprContext& /*ctx*/, TOptimizeContext& /*optCtx*/) { auto ret = FoldYsonParseAfterSerialize(node); if (ret != node) { return ret; - } - + } + ret = FoldYson2ParseAfterSerialize(node); if (ret != node) { return ret; @@ -4685,8 +4685,8 @@ void RegisterCoSimpleCallables1(TCallableOptimizerMap& map) { ret = FoldYsonSeralizeAfterParse(node); if (ret != node) { return ret; - } - + } + ret = FoldYson2SeralizeAfterParse(node); if (ret != node) { return ret; @@ -4703,7 +4703,7 @@ void RegisterCoSimpleCallables1(TCallableOptimizerMap& map) { } return node; - }; + }; map["Switch"] = [](const TExprNode::TPtr& node, TExprContext& ctx, TOptimizeContext& /*optCtx*/) { TExprNode::TPtr flatMap; diff --git a/ydb/library/yql/core/expr_nodes/yql_expr_nodes.json b/ydb/library/yql/core/expr_nodes/yql_expr_nodes.json index edfcaa15302..f267ebbb7dc 100644 --- a/ydb/library/yql/core/expr_nodes/yql_expr_nodes.json +++ b/ydb/library/yql/core/expr_nodes/yql_expr_nodes.json @@ -1229,20 +1229,20 @@ ] }, { - "Name": "TCoUdf", - "Base": "TCallable", - "Match": {"Type": "Callable", "Name": "Udf"}, - "Children": [ - {"Index": 0, "Name": "MethodName", "Type": "TCoAtom"}, + "Name": "TCoUdf", + "Base": "TCallable", + "Match": {"Type": "Callable", "Name": "Udf"}, + "Children": [ + {"Index": 0, "Name": "MethodName", "Type": "TCoAtom"}, {"Index": 1, "Name": "RunConfigValue", "Type": "TExprBase", "Optional": true}, {"Index": 2, "Name": "UserType", "Type": "TExprBase", "Optional": true}, {"Index": 3, "Name": "TypeConfig", "Type": "TCoAtom", "Optional": true}, {"Index": 4, "Name": "CachedCallableType", "Type": "TExprBase", "Optional": true}, {"Index": 5, "Name": "CachedRunConfigType", "Type": "TExprBase", "Optional": true}, {"Index": 6, "Name": "FileAlias", "Type": "TCoAtom", "Optional": true} - ] - }, - { + ] + }, + { "Name": "TCoExists", "Base": "TCallable", "Match": {"Type": "Callable", "Name": "Exists"}, diff --git a/ydb/library/yql/core/issue/protos/issue_id.proto b/ydb/library/yql/core/issue/protos/issue_id.proto index a2ed91d6401..8c07a60cece 100644 --- a/ydb/library/yql/core/issue/protos/issue_id.proto +++ b/ydb/library/yql/core/issue/protos/issue_id.proto @@ -29,7 +29,7 @@ message TIssuesIds { CORE_FREE_TABLE_PATH_RECORD = 1101; CORE_CAST_INTEGRAL_TO_TIMESTAMP_UNSAFE = 1102; CORE_FREE_KEY_SWITCH = 1103; - CORE_NON_PERSISTABLE_ENTITY = 1104; + CORE_NON_PERSISTABLE_ENTITY = 1104; CORE_NON_STREAM_BATCH_UDF = 1105; CORE_FLATTEN_BY_OPT = 1106; CORE_IMPLICIT_BITCAST = 1107; diff --git a/ydb/library/yql/core/issue/yql_issue.txt b/ydb/library/yql/core/issue/yql_issue.txt index 897d5d6f9a5..a5a3f58b0bc 100644 --- a/ydb/library/yql/core/issue/yql_issue.txt +++ b/ydb/library/yql/core/issue/yql_issue.txt @@ -88,10 +88,10 @@ ids { severity: S_WARNING } ids { - code: CORE_NON_PERSISTABLE_ENTITY - severity: S_WARNING -} -ids { + code: CORE_NON_PERSISTABLE_ENTITY + severity: S_WARNING +} +ids { code: CORE_NON_STREAM_BATCH_UDF severity: S_WARNING } diff --git a/ydb/library/yql/core/type_ann/type_ann_core.cpp b/ydb/library/yql/core/type_ann/type_ann_core.cpp index 5846e6cb108..74ad131b6b6 100644 --- a/ydb/library/yql/core/type_ann/type_ann_core.cpp +++ b/ydb/library/yql/core/type_ann/type_ann_core.cpp @@ -6144,28 +6144,28 @@ template <NKikimr::NUdf::EDataSlot DataSlot> return IGraphTransformer::TStatus::Repeat; } - IGraphTransformer::TStatus PersistableAssertWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx) { - if (!EnsureArgsCount(*input, 1, ctx.Expr)) { - return IGraphTransformer::TStatus::Error; - } + IGraphTransformer::TStatus PersistableAssertWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx) { + if (!EnsureArgsCount(*input, 1, ctx.Expr)) { + return IGraphTransformer::TStatus::Error; + } if (!EnsureComputable(input->Head(), ctx.Expr)) { return IGraphTransformer::TStatus::Error; } auto nodePtr = input->HeadPtr(); - if (!nodePtr->IsPersistable()) { + if (!nodePtr->IsPersistable()) { auto issue = TIssue(ctx.Expr.GetPosition(nodePtr->Pos()), "Persistable required. Atom, key, world, datasink, datasource, callable, resource, stream and lambda are not persistable"); - SetIssueCode(EYqlIssueCode::TIssuesIds_EIssueCode_CORE_NON_PERSISTABLE_ENTITY, issue); - if (!ctx.Expr.AddWarning(issue)) { - return IGraphTransformer::TStatus::Error; - } - } - - output = nodePtr; - return IGraphTransformer::TStatus::Repeat; - } - + SetIssueCode(EYqlIssueCode::TIssuesIds_EIssueCode_CORE_NON_PERSISTABLE_ENTITY, issue); + if (!ctx.Expr.AddWarning(issue)) { + return IGraphTransformer::TStatus::Error; + } + } + + output = nodePtr; + return IGraphTransformer::TStatus::Repeat; + } + IGraphTransformer::TStatus PersistableReprWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx) { if (!EnsureArgsCount(*input, 1, ctx.Expr)) { return IGraphTransformer::TStatus::Error; @@ -12967,7 +12967,7 @@ template <NKikimr::NUdf::EDataSlot DataSlot> Functions["MatchType"] = &MatchTypeWrapper; Functions["IfType"] = &IfTypeWrapper; Functions["EnsureType"] = &TypeAssertWrapper<true>; - Functions["EnsurePersistable"] = &PersistableAssertWrapper; + Functions["EnsurePersistable"] = &PersistableAssertWrapper; Functions["PersistableRepr"] = &PersistableReprWrapper; Functions["EnsureConvertibleTo"] = &TypeAssertWrapper<false>; Functions["EnsureTupleSize"] = &TupleSizeAssertWrapper; diff --git a/ydb/library/yql/providers/common/proto/gateways_config.proto b/ydb/library/yql/providers/common/proto/gateways_config.proto index 8561fe25368..4ad77ed1146 100644 --- a/ydb/library/yql/providers/common/proto/gateways_config.proto +++ b/ydb/library/yql/providers/common/proto/gateways_config.proto @@ -126,19 +126,19 @@ message TKikimrGatewayConfig { repeated TAttr DefaultSettings = 2; } -/////////////////////////////// Kikimr MVP /////////////////////////////// - -message TKikimrMvpProxyConfig { - optional string Host = 1; - optional uint32 Port = 2; - optional string BasePath = 3; +/////////////////////////////// Kikimr MVP /////////////////////////////// + +message TKikimrMvpProxyConfig { + optional string Host = 1; + optional uint32 Port = 2; + optional string BasePath = 3; optional uint32 TvmId = 4 [default = 0]; -} - -message TKikimrMvpGatewayConfig { - repeated TKikimrMvpProxyConfig ProxyMapping = 1; -} - +} + +message TKikimrMvpGatewayConfig { + repeated TKikimrMvpProxyConfig ProxyMapping = 1; +} + ///////////////////////////// Ydb ///////////////////////////// message TYdbClusterConfig { @@ -440,7 +440,7 @@ message TGatewaysConfig { optional TKikimrGatewayConfig Kikimr = 2; optional TClickHouseGatewayConfig ClickHouse = 3; optional TRtmrGatewayConfig Rtmr = 4; - optional TKikimrMvpGatewayConfig KikimrMvp = 5; + optional TKikimrMvpGatewayConfig KikimrMvp = 5; optional TStatGatewayConfig Stat = 6; optional TChytGatewayConfig Chyt = 7; optional TSolomonGatewayConfig Solomon = 8; diff --git a/ydb/library/yql/sql/v0/aggregation.cpp b/ydb/library/yql/sql/v0/aggregation.cpp index 64406048811..94e3b7f5b26 100644 --- a/ydb/library/yql/sql/v0/aggregation.cpp +++ b/ydb/library/yql/sql/v0/aggregation.cpp @@ -83,7 +83,7 @@ protected: if (!Expr->Init(ctx, src)) { return false; } - if (Expr->IsAggregated() && !Expr->IsAggregationKey() && !IsOverWindow()) { + if (Expr->IsAggregated() && !Expr->IsAggregationKey() && !IsOverWindow()) { ctx.Error(Pos) << "Aggregation of aggregated values is forbidden for no window functions"; return false; } diff --git a/ydb/library/yql/sql/v0/builtin.cpp b/ydb/library/yql/sql/v0/builtin.cpp index a0945f9d05e..30178e29ada 100644 --- a/ydb/library/yql/sql/v0/builtin.cpp +++ b/ydb/library/yql/sql/v0/builtin.cpp @@ -1317,9 +1317,9 @@ public: } void DoUpdateState() const final { - State.Set(ENodeState::Const, false); - } - + State.Set(ENodeState::Const, false); + } + TNodePtr DoClone() const final { return MakeIntrusive<TTableRow>(Pos, ArgsCount); } @@ -1678,18 +1678,18 @@ TAggrFuncFactoryCallback BuildAggrFuncFactoryCallback( const TString& functionName, const TString& factoryName, EAggrFuncTypeCallback type = NORMAL, - const TString& functionNameOverride = TString(), - const TVector<EAggregateMode>& validModes = {}) { + const TString& functionNameOverride = TString(), + const TVector<EAggregateMode>& validModes = {}) { const TString realFunctionName = functionNameOverride.empty() ? functionName : functionNameOverride; - return [functionName, realFunctionName, factoryName, type, validModes] (TPosition pos, const TVector<TNodePtr>& args, EAggregateMode aggMode, bool isFactory) -> INode::TPtr { - if (!validModes.empty()) { - if (!IsIn(validModes, aggMode)) { - const TString errorText = TStringBuilder() - << "Can't use " << functionName << " in " << ToString(aggMode) << " aggregation mode"; - return INode::TPtr(new TInvalidBuiltin(pos, errorText)); - } - } + return [functionName, realFunctionName, factoryName, type, validModes] (TPosition pos, const TVector<TNodePtr>& args, EAggregateMode aggMode, bool isFactory) -> INode::TPtr { + if (!validModes.empty()) { + if (!IsIn(validModes, aggMode)) { + const TString errorText = TStringBuilder() + << "Can't use " << functionName << " in " << ToString(aggMode) << " aggregation mode"; + return INode::TPtr(new TInvalidBuiltin(pos, errorText)); + } + } TAggregationPtr factory = nullptr; switch (type) { case NORMAL: @@ -1748,15 +1748,15 @@ TAggrFuncFactoryCallback BuildAggrFuncFactoryCallback( }; } -TAggrFuncFactoryCallback BuildAggrFuncFactoryCallback( - const TString& functionName, - const TString& factoryName, - const TVector<EAggregateMode>& validModes, - EAggrFuncTypeCallback type = NORMAL, - const TString& functionNameOverride = TString()) { - return BuildAggrFuncFactoryCallback(functionName, factoryName, type, functionNameOverride, validModes); -} - +TAggrFuncFactoryCallback BuildAggrFuncFactoryCallback( + const TString& functionName, + const TString& factoryName, + const TVector<EAggregateMode>& validModes, + EAggrFuncTypeCallback type = NORMAL, + const TString& functionNameOverride = TString()) { + return BuildAggrFuncFactoryCallback(functionName, factoryName, type, functionNameOverride, validModes); +} + template<typename TType> TBuiltinFactoryCallback BuildSimpleBuiltinFactoryCallback() { return [] (TPosition pos, const TVector<TNodePtr>& args) -> TNodePtr { @@ -1818,186 +1818,186 @@ TNodePtr MakePair(TPosition pos, const TVector<TNodePtr>& args) { }); } -struct TBuiltinFuncData { - const TBuiltinFactoryCallbackMap BuiltinFuncs; - const TAggrFuncFactoryCallbackMap AggrFuncs; - const TCoreFuncMap CoreFuncs; - - TBuiltinFuncData(): - BuiltinFuncs(MakeBuiltinFuncs()), - AggrFuncs(MakeAggrFuncs()), - CoreFuncs(MakeCoreFuncs()) - { - } - - TBuiltinFactoryCallbackMap MakeBuiltinFuncs() { - TBuiltinFactoryCallbackMap builtinFuncs = { - // Branching - {"if", BuildSimpleBuiltinFactoryCallback<TYqlIf<false>>()}, - {"ifstrict", BuildSimpleBuiltinFactoryCallback<TYqlIf<true>>() }, - - // String builtins - {"len", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Size", 1, 1)}, - {"length", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Size", 1, 1)}, - {"charlength", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Size", 1, 1)}, - {"characterlength", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Size", 1, 1)}, - {"substring", BuildSimpleBuiltinFactoryCallback<TYqlSubstring>()}, - {"byteat", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ByteAt", 2, 2) }, - - // Numeric builtins - {"abs", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Abs", 1, 1) }, - {"tobytes", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ToBytes", 1, 1) }, - {"frombytes", BuildSimpleBuiltinFactoryCallback<TFromBytes>() }, - - // Compare builtins - {"minof", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Min", 1, -1)}, - {"maxof", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Max", 1, -1)}, - {"greatest", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Max", 1, -1)}, - {"least", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Min", 1, -1)}, - {"in", BuildSimpleBuiltinFactoryCallback<TYqlIn>()}, - - // List builtins - {"aslist", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("AsList", 1, -1)}, - {"asliststrict", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("AsListStrict", 1, -1) }, - {"listlength", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Length", 1, 1)}, - {"listhasitems", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("HasItems", 1, 1)}, - {"listcount", BuildSimpleBuiltinFactoryCallback<TListCountBuiltin>()}, - {"listextend", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Extend", 1, -1)}, - {"listunionall", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("UnionAll", 1, -1) }, - {"listzip", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Zip", -1, -1)}, - {"listzipall", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ZipAll", -1, -1)}, - {"listenumerate", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Enumerate", 1, 3)}, - {"listreverse", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Reverse", 1, 1)}, - {"listskip", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Skip", 2, 2)}, - {"listtake", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Take", 2, 2)}, - {"listsort", BuildBoolBuiltinFactoryCallback<TListSortBuiltin>(true)}, - {"listsortasc", BuildBoolBuiltinFactoryCallback<TListSortBuiltin>(true)}, - {"listsortdesc", BuildBoolBuiltinFactoryCallback<TListSortBuiltin>(false)}, - {"listmap", BuildBoolBuiltinFactoryCallback<TListMapBuiltin>(false)}, - {"listflatmap", BuildBoolBuiltinFactoryCallback<TListMapBuiltin>(true)}, - {"listfilter", BuildSimpleBuiltinFactoryCallback<TListFilterBuiltin>()}, - {"listany", BuildFoldBuiltinFactoryCallback<TListFoldBuiltinImpl>("Or", "false")}, - {"listall", BuildFoldBuiltinFactoryCallback<TListFoldBuiltinImpl>("And", "true")}, - {"listhas", BuildSimpleBuiltinFactoryCallback<TListHasBuiltin>()}, +struct TBuiltinFuncData { + const TBuiltinFactoryCallbackMap BuiltinFuncs; + const TAggrFuncFactoryCallbackMap AggrFuncs; + const TCoreFuncMap CoreFuncs; + + TBuiltinFuncData(): + BuiltinFuncs(MakeBuiltinFuncs()), + AggrFuncs(MakeAggrFuncs()), + CoreFuncs(MakeCoreFuncs()) + { + } + + TBuiltinFactoryCallbackMap MakeBuiltinFuncs() { + TBuiltinFactoryCallbackMap builtinFuncs = { + // Branching + {"if", BuildSimpleBuiltinFactoryCallback<TYqlIf<false>>()}, + {"ifstrict", BuildSimpleBuiltinFactoryCallback<TYqlIf<true>>() }, + + // String builtins + {"len", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Size", 1, 1)}, + {"length", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Size", 1, 1)}, + {"charlength", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Size", 1, 1)}, + {"characterlength", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Size", 1, 1)}, + {"substring", BuildSimpleBuiltinFactoryCallback<TYqlSubstring>()}, + {"byteat", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ByteAt", 2, 2) }, + + // Numeric builtins + {"abs", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Abs", 1, 1) }, + {"tobytes", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ToBytes", 1, 1) }, + {"frombytes", BuildSimpleBuiltinFactoryCallback<TFromBytes>() }, + + // Compare builtins + {"minof", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Min", 1, -1)}, + {"maxof", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Max", 1, -1)}, + {"greatest", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Max", 1, -1)}, + {"least", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Min", 1, -1)}, + {"in", BuildSimpleBuiltinFactoryCallback<TYqlIn>()}, + + // List builtins + {"aslist", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("AsList", 1, -1)}, + {"asliststrict", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("AsListStrict", 1, -1) }, + {"listlength", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Length", 1, 1)}, + {"listhasitems", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("HasItems", 1, 1)}, + {"listcount", BuildSimpleBuiltinFactoryCallback<TListCountBuiltin>()}, + {"listextend", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Extend", 1, -1)}, + {"listunionall", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("UnionAll", 1, -1) }, + {"listzip", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Zip", -1, -1)}, + {"listzipall", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ZipAll", -1, -1)}, + {"listenumerate", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Enumerate", 1, 3)}, + {"listreverse", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Reverse", 1, 1)}, + {"listskip", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Skip", 2, 2)}, + {"listtake", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Take", 2, 2)}, + {"listsort", BuildBoolBuiltinFactoryCallback<TListSortBuiltin>(true)}, + {"listsortasc", BuildBoolBuiltinFactoryCallback<TListSortBuiltin>(true)}, + {"listsortdesc", BuildBoolBuiltinFactoryCallback<TListSortBuiltin>(false)}, + {"listmap", BuildBoolBuiltinFactoryCallback<TListMapBuiltin>(false)}, + {"listflatmap", BuildBoolBuiltinFactoryCallback<TListMapBuiltin>(true)}, + {"listfilter", BuildSimpleBuiltinFactoryCallback<TListFilterBuiltin>()}, + {"listany", BuildFoldBuiltinFactoryCallback<TListFoldBuiltinImpl>("Or", "false")}, + {"listall", BuildFoldBuiltinFactoryCallback<TListFoldBuiltinImpl>("And", "true")}, + {"listhas", BuildSimpleBuiltinFactoryCallback<TListHasBuiltin>()}, {"listmax", BuildNamedBuiltinFactoryCallback<TListFold1Builtin>("AggrMax")}, {"listmin", BuildNamedBuiltinFactoryCallback<TListFold1Builtin>("AggrMin")}, {"listsum", BuildNamedBuiltinFactoryCallback<TListFold1Builtin>("AggrAdd")}, - {"listavg", BuildSimpleBuiltinFactoryCallback<TListAvgBuiltin>()}, - {"listconcat", BuildNamedBuiltinFactoryCallback<TListFold1Builtin>("Concat")}, - {"listextract", BuildSimpleBuiltinFactoryCallback<TListExtractBuiltin>()}, - {"listuniq", BuildSimpleBuiltinFactoryCallback<TListUniqBuiltin>()}, - {"listcreate", BuildSimpleBuiltinFactoryCallback<TListCreateBuiltin>()}, - {"listfromrange", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListFromRange", 2, 3) }, - {"listreplicate", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Replicate", 2, 2) }, - {"listtakewhile", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TakeWhile", 2, 2) }, - {"listskipwhile", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("SkipWhile", 2, 2) }, - {"listcollect", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Collect", 1, 1) }, - - // Dict builtins - {"dictcreate", BuildSimpleBuiltinFactoryCallback<TDictCreateBuiltin>()}, - {"asdict", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("AsDict", 1, -1)}, - {"asdictstrict", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("AsDictStrict", 1, -1)}, + {"listavg", BuildSimpleBuiltinFactoryCallback<TListAvgBuiltin>()}, + {"listconcat", BuildNamedBuiltinFactoryCallback<TListFold1Builtin>("Concat")}, + {"listextract", BuildSimpleBuiltinFactoryCallback<TListExtractBuiltin>()}, + {"listuniq", BuildSimpleBuiltinFactoryCallback<TListUniqBuiltin>()}, + {"listcreate", BuildSimpleBuiltinFactoryCallback<TListCreateBuiltin>()}, + {"listfromrange", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListFromRange", 2, 3) }, + {"listreplicate", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Replicate", 2, 2) }, + {"listtakewhile", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TakeWhile", 2, 2) }, + {"listskipwhile", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("SkipWhile", 2, 2) }, + {"listcollect", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Collect", 1, 1) }, + + // Dict builtins + {"dictcreate", BuildSimpleBuiltinFactoryCallback<TDictCreateBuiltin>()}, + {"asdict", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("AsDict", 1, -1)}, + {"asdictstrict", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("AsDictStrict", 1, -1)}, {"todict", BuildNamedBuiltinFactoryCallback<TYqlToDict<false>>("One")}, {"tomultidict", BuildNamedBuiltinFactoryCallback<TYqlToDict<false>>("Many")}, {"tosorteddict", BuildNamedBuiltinFactoryCallback<TYqlToDict<true>>("One")}, {"tosortedmultidict", BuildNamedBuiltinFactoryCallback<TYqlToDict<true>>("Many")}, - {"dictkeys", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictKeys", 1, 1) }, - {"dictpayloads", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictPayloads", 1, 1) }, - {"dictitems", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictItems", 1, 1) }, - {"dictlookup", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Lookup", 2, 2) }, - {"dictcontains", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Contains", 2, 2) }, - - // Atom builtins - {"asatom", BuildSimpleBuiltinFactoryCallback<TYqlAsAtom>()}, + {"dictkeys", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictKeys", 1, 1) }, + {"dictpayloads", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictPayloads", 1, 1) }, + {"dictitems", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictItems", 1, 1) }, + {"dictlookup", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Lookup", 2, 2) }, + {"dictcontains", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Contains", 2, 2) }, + + // Atom builtins + {"asatom", BuildSimpleBuiltinFactoryCallback<TYqlAsAtom>()}, {"secureparam", BuildNamedBuiltinFactoryCallback<TYqlAtom>("SecureParam")}, {"void", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Void", 0, 0)}, {"callable", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Callable", 2, 2)}, - {"way", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Way", 1, 1) }, - {"variant", BuildSimpleBuiltinFactoryCallback<TYqlVariant>() }, - {"astagged", BuildSimpleBuiltinFactoryCallback<TYqlAsTagged>() }, - {"untag", BuildSimpleBuiltinFactoryCallback<TYqlUntag>() }, - {"parsetype", BuildSimpleBuiltinFactoryCallback<TYqlParseType>() }, - {"ensuretype", BuildSimpleBuiltinFactoryCallback<TYqlTypeAssert<true>>() }, - {"ensureconvertibleto", BuildSimpleBuiltinFactoryCallback<TYqlTypeAssert<false>>() }, - {"ensure", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Ensure", 2, 3) }, - {"evaluateexpr", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EvaluateExpr", 1, 1) }, - {"evaluateatom", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EvaluateAtom", 1, 1) }, - {"evaluatetype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EvaluateType", 1, 1) }, - {"unwrap", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Unwrap", 1, 2) }, - {"just", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Just", 1, 1) }, - {"nothing", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Nothing", 1, 1) }, - {"formattype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("FormatType", 1, 1) }, - {"typeof", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TypeOf", 1, 1) }, - {"instanceof", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("InstanceOf", 1, 1) }, - {"datatype", BuildSimpleBuiltinFactoryCallback<TYqlDataType>() }, - {"optionaltype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("OptionalType", 1, 1) }, - {"listtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListType", 1, 1) }, - {"streamtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StreamType", 1, 1) }, - {"dicttype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictType", 2, 2) }, - {"tupletype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TupleType", 0, -1) }, - {"generictype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("GenericType", 0, 0) }, - {"unittype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("UnitType", 0, 0) }, - {"voidtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("VoidType", 0, 0) }, - {"resourcetype", BuildSimpleBuiltinFactoryCallback<TYqlResourceType>() }, - {"taggedtype", BuildSimpleBuiltinFactoryCallback<TYqlTaggedType>() }, - {"varianttype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("VariantType", 1, 1) }, - {"callabletype", BuildSimpleBuiltinFactoryCallback<TYqlCallableType>() }, - {"optionalitemtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("OptionalItemType", 1, 1) }, - {"listitemtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListItemType", 1, 1) }, - {"streamitemtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StreamItemType", 1, 1) }, - {"dictkeytype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictKeyType", 1, 1) }, - {"dictpayloadtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictPayloadType", 1, 1) }, - {"tupleelementtype", BuildSimpleBuiltinFactoryCallback<TYqlTupleElementType>() }, - {"structmembertype", BuildSimpleBuiltinFactoryCallback<TYqlStructMemberType>() }, - {"callableresulttype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CallableResultType", 1, 1) }, - {"callableargumenttype", BuildSimpleBuiltinFactoryCallback<TYqlCallableArgumentType>() }, - {"variantunderlyingtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("VariantUnderlyingType", 1, 1) }, - {"fromysonsimpletype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("FromYsonSimpleType", 2, 2) }, - {"currentutcdate", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "CurrentUtcDate", 0, -1) }, - {"currentutcdatetime", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "CurrentUtcDatetime", 0, -1) }, - {"currentutctimestamp", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "CurrentUtcTimestamp", 0, -1) }, - {"currentoperationid", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CurrentOperationId", 0, 0) }, - {"currentoperationsharedid", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CurrentOperationSharedId", 0, 0) }, - {"currentauthenticateduser", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CurrentAuthenticatedUser", 0, 0) }, - {"addtimezone", BuildSimpleBuiltinFactoryCallback<TYqlAddTimezone>() }, - {"removetimezone", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("RemoveTimezone", 1, 1) }, - {"typehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TypeHandle", 1, 1) }, - {"parsetypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ParseTypeHandle", 1, 1) }, - {"typekind", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TypeKind", 1, 1) }, - {"datatypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DataTypeComponents", 1, 1) }, - {"datatypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DataTypeHandle", 1, 1) }, - {"optionaltypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("OptionalTypeHandle", 1, 1) }, - {"listtypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListTypeHandle", 1, 1) }, - {"streamtypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StreamTypeHandle", 1, 1) }, - {"tupletypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TupleTypeComponents", 1, 1) }, - {"tupletypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TupleTypeHandle", 1, 1) }, - {"structtypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StructTypeComponents", 1, 1) }, - {"structtypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StructTypeHandle", 1, 1) }, - {"dicttypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictTypeComponents", 1, 1) }, - {"dicttypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictTypeHandle", 2, 2) }, - {"resourcetypetag", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ResourceTypeTag", 1, 1) }, - {"resourcetypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ResourceTypeHandle", 1, 1) }, - {"taggedtypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TaggedTypeComponents", 1, 1) }, - {"taggedtypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TaggedTypeHandle", 2, 2) }, - {"varianttypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("VariantTypeHandle", 1, 1) }, - {"voidtypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("VoidTypeHandle", 0, 0) }, - {"nulltypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("NullTypeHandle", 0, 0) }, - {"callabletypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CallableTypeComponents", 1, 1) }, - {"callableargument", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CallableArgument", 1, 3) }, - {"callabletypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CallableTypeHandle", 2, 4) }, - {"formatcode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("FormatCode", 1, 1) }, + {"way", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Way", 1, 1) }, + {"variant", BuildSimpleBuiltinFactoryCallback<TYqlVariant>() }, + {"astagged", BuildSimpleBuiltinFactoryCallback<TYqlAsTagged>() }, + {"untag", BuildSimpleBuiltinFactoryCallback<TYqlUntag>() }, + {"parsetype", BuildSimpleBuiltinFactoryCallback<TYqlParseType>() }, + {"ensuretype", BuildSimpleBuiltinFactoryCallback<TYqlTypeAssert<true>>() }, + {"ensureconvertibleto", BuildSimpleBuiltinFactoryCallback<TYqlTypeAssert<false>>() }, + {"ensure", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Ensure", 2, 3) }, + {"evaluateexpr", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EvaluateExpr", 1, 1) }, + {"evaluateatom", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EvaluateAtom", 1, 1) }, + {"evaluatetype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EvaluateType", 1, 1) }, + {"unwrap", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Unwrap", 1, 2) }, + {"just", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Just", 1, 1) }, + {"nothing", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Nothing", 1, 1) }, + {"formattype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("FormatType", 1, 1) }, + {"typeof", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TypeOf", 1, 1) }, + {"instanceof", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("InstanceOf", 1, 1) }, + {"datatype", BuildSimpleBuiltinFactoryCallback<TYqlDataType>() }, + {"optionaltype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("OptionalType", 1, 1) }, + {"listtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListType", 1, 1) }, + {"streamtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StreamType", 1, 1) }, + {"dicttype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictType", 2, 2) }, + {"tupletype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TupleType", 0, -1) }, + {"generictype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("GenericType", 0, 0) }, + {"unittype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("UnitType", 0, 0) }, + {"voidtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("VoidType", 0, 0) }, + {"resourcetype", BuildSimpleBuiltinFactoryCallback<TYqlResourceType>() }, + {"taggedtype", BuildSimpleBuiltinFactoryCallback<TYqlTaggedType>() }, + {"varianttype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("VariantType", 1, 1) }, + {"callabletype", BuildSimpleBuiltinFactoryCallback<TYqlCallableType>() }, + {"optionalitemtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("OptionalItemType", 1, 1) }, + {"listitemtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListItemType", 1, 1) }, + {"streamitemtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StreamItemType", 1, 1) }, + {"dictkeytype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictKeyType", 1, 1) }, + {"dictpayloadtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictPayloadType", 1, 1) }, + {"tupleelementtype", BuildSimpleBuiltinFactoryCallback<TYqlTupleElementType>() }, + {"structmembertype", BuildSimpleBuiltinFactoryCallback<TYqlStructMemberType>() }, + {"callableresulttype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CallableResultType", 1, 1) }, + {"callableargumenttype", BuildSimpleBuiltinFactoryCallback<TYqlCallableArgumentType>() }, + {"variantunderlyingtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("VariantUnderlyingType", 1, 1) }, + {"fromysonsimpletype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("FromYsonSimpleType", 2, 2) }, + {"currentutcdate", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "CurrentUtcDate", 0, -1) }, + {"currentutcdatetime", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "CurrentUtcDatetime", 0, -1) }, + {"currentutctimestamp", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "CurrentUtcTimestamp", 0, -1) }, + {"currentoperationid", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CurrentOperationId", 0, 0) }, + {"currentoperationsharedid", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CurrentOperationSharedId", 0, 0) }, + {"currentauthenticateduser", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CurrentAuthenticatedUser", 0, 0) }, + {"addtimezone", BuildSimpleBuiltinFactoryCallback<TYqlAddTimezone>() }, + {"removetimezone", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("RemoveTimezone", 1, 1) }, + {"typehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TypeHandle", 1, 1) }, + {"parsetypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ParseTypeHandle", 1, 1) }, + {"typekind", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TypeKind", 1, 1) }, + {"datatypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DataTypeComponents", 1, 1) }, + {"datatypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DataTypeHandle", 1, 1) }, + {"optionaltypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("OptionalTypeHandle", 1, 1) }, + {"listtypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListTypeHandle", 1, 1) }, + {"streamtypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StreamTypeHandle", 1, 1) }, + {"tupletypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TupleTypeComponents", 1, 1) }, + {"tupletypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TupleTypeHandle", 1, 1) }, + {"structtypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StructTypeComponents", 1, 1) }, + {"structtypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StructTypeHandle", 1, 1) }, + {"dicttypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictTypeComponents", 1, 1) }, + {"dicttypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictTypeHandle", 2, 2) }, + {"resourcetypetag", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ResourceTypeTag", 1, 1) }, + {"resourcetypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ResourceTypeHandle", 1, 1) }, + {"taggedtypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TaggedTypeComponents", 1, 1) }, + {"taggedtypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TaggedTypeHandle", 2, 2) }, + {"varianttypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("VariantTypeHandle", 1, 1) }, + {"voidtypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("VoidTypeHandle", 0, 0) }, + {"nulltypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("NullTypeHandle", 0, 0) }, + {"callabletypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CallableTypeComponents", 1, 1) }, + {"callableargument", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CallableArgument", 1, 3) }, + {"callabletypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CallableTypeHandle", 2, 4) }, + {"formatcode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("FormatCode", 1, 1) }, {"worldcode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("WorldCode", 0, 0) }, - {"atomcode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("AtomCode", 1, 1) }, - {"listcode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListCode", 0, -1) }, - {"funccode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("FuncCode", 1, -1) }, - {"lambdacode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("LambdaCode", 1, 2) }, - {"evaluatecode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EvaluateCode", 1, 1) }, - {"reprcode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ReprCode", 1, 1) }, - {"quotecode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("QuoteCode", 1, 1) }, + {"atomcode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("AtomCode", 1, 1) }, + {"listcode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListCode", 0, -1) }, + {"funccode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("FuncCode", 1, -1) }, + {"lambdacode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("LambdaCode", 1, 2) }, + {"evaluatecode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EvaluateCode", 1, 1) }, + {"reprcode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ReprCode", 1, 1) }, + {"quotecode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("QuoteCode", 1, 1) }, - // Tuple builtins - {"astuple", BuildSimpleBuiltinFactoryCallback<TTupleNode>()}, + // Tuple builtins + {"astuple", BuildSimpleBuiltinFactoryCallback<TTupleNode>()}, // Struct builtins {"addmember", BuildNamedBuiltinFactoryCallback<TAddMember>("AddMember")}, @@ -2006,47 +2006,47 @@ struct TBuiltinFuncData { {"combinemembers", BuildNamedBuiltinFactoryCallback<TCombineMembers>("FlattenMembers")}, {"flattenmembers", BuildNamedBuiltinFactoryCallback<TFlattenMembers>("FlattenMembers")}, - // File builtins + // File builtins {"filepath", BuildNamedBuiltinFactoryCallback<TYqlAtom>("FilePath")}, {"filecontent", BuildNamedBuiltinFactoryCallback<TYqlAtom>("FileContent")}, {"folderpath", BuildNamedBuiltinFactoryCallback<TYqlAtom>("FolderPath") }, {"files", BuildNamedBuiltinFactoryCallback<TYqlAtom>("Files")}, - {"parsefile", BuildSimpleBuiltinFactoryCallback<TYqlParseFileOp>()}, - - // Misc builtins - {"coalesce", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Coalesce", 1, -1)}, - {"nvl", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Coalesce", 1, -1) }, - {"nanvl", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Nanvl", 2, 2) }, - {"likely", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Likely", 1, -1)}, - {"random", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "Random", 1, -1)}, - {"randomnumber", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "RandomNumber", 1, -1)}, - {"randomuuid", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "RandomUuid", 1, -1) }, - {"tablepath", BuildNamedBuiltinFactoryCallback<TCallDirectRow>("TablePath") }, - {"tablerecord", BuildNamedBuiltinFactoryCallback<TCallDirectRow>("TableRecord") }, + {"parsefile", BuildSimpleBuiltinFactoryCallback<TYqlParseFileOp>()}, + + // Misc builtins + {"coalesce", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Coalesce", 1, -1)}, + {"nvl", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Coalesce", 1, -1) }, + {"nanvl", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Nanvl", 2, 2) }, + {"likely", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Likely", 1, -1)}, + {"random", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "Random", 1, -1)}, + {"randomnumber", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "RandomNumber", 1, -1)}, + {"randomuuid", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "RandomUuid", 1, -1) }, + {"tablepath", BuildNamedBuiltinFactoryCallback<TCallDirectRow>("TablePath") }, + {"tablerecord", BuildNamedBuiltinFactoryCallback<TCallDirectRow>("TableRecord") }, {"tablerecordindex", BuildNamedBuiltinFactoryCallback<TCallDirectRow>("TableRecord") }, - {"weakfield", BuildSimpleBuiltinFactoryCallback<TWeakFieldOp>()}, - {"tablerow", BuildSimpleBuiltinFactoryCallback<TTableRow>() }, + {"weakfield", BuildSimpleBuiltinFactoryCallback<TWeakFieldOp>()}, + {"tablerow", BuildSimpleBuiltinFactoryCallback<TTableRow>() }, - // Hint builtins - {"grouping", BuildSimpleBuiltinFactoryCallback<TGroupingNode>()}, + // Hint builtins + {"grouping", BuildSimpleBuiltinFactoryCallback<TGroupingNode>()}, - // Window funcitons - {"rownumber", BuildNamedArgcBuiltinFactoryCallback<TWinRowNumber>("RowNumber", 0, 0)}, - /// by SQL2011 should be with sort + // Window funcitons + {"rownumber", BuildNamedArgcBuiltinFactoryCallback<TWinRowNumber>("RowNumber", 0, 0)}, + /// by SQL2011 should be with sort {"lead", BuildNamedArgcBuiltinFactoryCallback<TWinLeadLag>("Lead", 1, 2)}, {"lag", BuildNamedArgcBuiltinFactoryCallback<TWinLeadLag>("Lag", 1, 2)}, - - // Hopping intervals time functions - {"hopstart", BuildSimpleBuiltinFactoryCallback<THoppingTime<true>>()}, - {"hopend", BuildSimpleBuiltinFactoryCallback<THoppingTime<false>>()}, - }; - return builtinFuncs; - } - - TAggrFuncFactoryCallbackMap MakeAggrFuncs() { - constexpr auto OverWindow = EAggregateMode::OverWindow; - - TAggrFuncFactoryCallbackMap aggrFuncs = { + + // Hopping intervals time functions + {"hopstart", BuildSimpleBuiltinFactoryCallback<THoppingTime<true>>()}, + {"hopend", BuildSimpleBuiltinFactoryCallback<THoppingTime<false>>()}, + }; + return builtinFuncs; + } + + TAggrFuncFactoryCallbackMap MakeAggrFuncs() { + constexpr auto OverWindow = EAggregateMode::OverWindow; + + TAggrFuncFactoryCallbackMap aggrFuncs = { {"min", BuildAggrFuncFactoryCallback("Min", "min_traits_factory")}, {"max", BuildAggrFuncFactoryCallback("Max", "max_traits_factory")}, @@ -2137,7 +2137,7 @@ struct TBuiltinFuncData { {"udaf", BuildAggrFuncFactoryCallback("UDAF", "udaf_traits_factory", UDAF)}, - // Window functions + // Window functions /// by SQL2011 should be with sort {"rank", BuildAggrFuncFactoryCallback("Rank", "rank_traits_factory", WINDOW_AUTOARGS)}, {"denserank", BuildAggrFuncFactoryCallback("DenseRank", "dense_rank_traits_factory", WINDOW_AUTOARGS)}, @@ -2146,43 +2146,43 @@ struct TBuiltinFuncData { //{"percentrank", BuildAggrFuncFactoryCallback("PercentRank", "percent_rank_traits_factory")}, //{"cumedist", BuildAggrFuncFactoryCallback("CumeDist", "cume_dist_traits_factory")}, - {"firstvalue", BuildAggrFuncFactoryCallback("FirstValue", "first_value_traits_factory", {OverWindow})}, - {"lastvalue", BuildAggrFuncFactoryCallback("LastValue", "last_value_traits_factory", {OverWindow})}, - {"firstvalueignorenulls", BuildAggrFuncFactoryCallback("FirstValueIgnoreNulls", "first_value_ignore_nulls_traits_factory", {OverWindow})}, - {"lastvalueignorenulls", BuildAggrFuncFactoryCallback("LastValueIgnoreNulls", "last_value_ignore_nulls_traits_factory", {OverWindow})}, + {"firstvalue", BuildAggrFuncFactoryCallback("FirstValue", "first_value_traits_factory", {OverWindow})}, + {"lastvalue", BuildAggrFuncFactoryCallback("LastValue", "last_value_traits_factory", {OverWindow})}, + {"firstvalueignorenulls", BuildAggrFuncFactoryCallback("FirstValueIgnoreNulls", "first_value_ignore_nulls_traits_factory", {OverWindow})}, + {"lastvalueignorenulls", BuildAggrFuncFactoryCallback("LastValueIgnoreNulls", "last_value_ignore_nulls_traits_factory", {OverWindow})}, }; - return aggrFuncs; - } - - TCoreFuncMap MakeCoreFuncs() { - TCoreFuncMap coreFuncs = { - {"listindexof", { "IndexOf", 2, 2}}, - {"testbit", { "TestBit", 2, 2}}, - {"setbit", { "SetBit", 2, 2}}, - {"clearbit", { "ClearBit", 2, 2}}, - {"flipbit", { "FlipBit", 2, 2 }}, - {"toset", { "ToSet", 1, 1 }}, - {"setisdisjoint", { "SetIsDisjoint", 2, 2}}, - {"setintersection", { "SetIntersection", 2, 3}}, - {"setincludes", { "SetIncludes", 2, 2}}, - {"setunion", { "SetUnion", 2, 3}}, - {"setdifference", { "SetDifference", 2, 2}}, - {"setsymmetricdifference", { "SetSymmetricDifference", 2, 3}}, + return aggrFuncs; + } + + TCoreFuncMap MakeCoreFuncs() { + TCoreFuncMap coreFuncs = { + {"listindexof", { "IndexOf", 2, 2}}, + {"testbit", { "TestBit", 2, 2}}, + {"setbit", { "SetBit", 2, 2}}, + {"clearbit", { "ClearBit", 2, 2}}, + {"flipbit", { "FlipBit", 2, 2 }}, + {"toset", { "ToSet", 1, 1 }}, + {"setisdisjoint", { "SetIsDisjoint", 2, 2}}, + {"setintersection", { "SetIntersection", 2, 3}}, + {"setincludes", { "SetIncludes", 2, 2}}, + {"setunion", { "SetUnion", 2, 3}}, + {"setdifference", { "SetDifference", 2, 2}}, + {"setsymmetricdifference", { "SetSymmetricDifference", 2, 3}}, {"listaggregate", { "ListAggregate", 2, 2}}, {"dictaggregate", { "DictAggregate", 2, 2}}, - }; - return coreFuncs; - } -}; - -TNodePtr BuildBuiltinFunc(TContext& ctx, TPosition pos, TString name, const TVector<TNodePtr>& args, - const TString& nameSpace, EAggregateMode aggMode, bool* mustUseNamed, TFuncPrepareNameNode funcPrepareNameNode) { - - const TBuiltinFuncData* funcData = Singleton<TBuiltinFuncData>(); - const TBuiltinFactoryCallbackMap& builtinFuncs = funcData->BuiltinFuncs; - const TAggrFuncFactoryCallbackMap& aggrFuncs = funcData->AggrFuncs; - const TCoreFuncMap& coreFuncs = funcData->CoreFuncs; - + }; + return coreFuncs; + } +}; + +TNodePtr BuildBuiltinFunc(TContext& ctx, TPosition pos, TString name, const TVector<TNodePtr>& args, + const TString& nameSpace, EAggregateMode aggMode, bool* mustUseNamed, TFuncPrepareNameNode funcPrepareNameNode) { + + const TBuiltinFuncData* funcData = Singleton<TBuiltinFuncData>(); + const TBuiltinFactoryCallbackMap& builtinFuncs = funcData->BuiltinFuncs; + const TAggrFuncFactoryCallbackMap& aggrFuncs = funcData->AggrFuncs; + const TCoreFuncMap& coreFuncs = funcData->CoreFuncs; + for (auto& arg: args) { if (!arg) { return nullptr; diff --git a/ydb/library/yql/sql/v0/context.h b/ydb/library/yql/sql/v0/context.h index 45f40fae61c..fbf76b6a484 100644 --- a/ydb/library/yql/sql/v0/context.h +++ b/ydb/library/yql/sql/v0/context.h @@ -147,7 +147,7 @@ namespace NSQLTranslationV0 { bool PragmaDirectRead = false; bool PragmaYsonAutoConvert = false; bool PragmaYsonStrict = false; - bool PragmaClassicDivision = true; + bool PragmaClassicDivision = true; bool PragmaPullUpFlatMapOverJoin = true; bool EnableSystemColumns = true; ui32 ResultRowsLimit = 0; diff --git a/ydb/library/yql/sql/v0/insert.cpp b/ydb/library/yql/sql/v0/insert.cpp index 1d8aec71349..85806522513 100644 --- a/ydb/library/yql/sql/v0/insert.cpp +++ b/ydb/library/yql/sql/v0/insert.cpp @@ -155,7 +155,7 @@ public: } tuple = L(tuple, rowValues); } - return Y("EnsurePersistable", Q(tuple)); + return Y("EnsurePersistable", Q(tuple)); } TNodePtr DoClone() const final { diff --git a/ydb/library/yql/sql/v0/node.cpp b/ydb/library/yql/sql/v0/node.cpp index 57f0c6a561f..90f88686485 100644 --- a/ydb/library/yql/sql/v0/node.cpp +++ b/ydb/library/yql/sql/v0/node.cpp @@ -121,10 +121,10 @@ bool INode::IsAggregated() const { return HasState(ENodeState::Aggregated); } -bool INode::IsAggregationKey() const { - return HasState(ENodeState::AggregationKey); -} - +bool INode::IsAggregationKey() const { + return HasState(ENodeState::AggregationKey); +} + bool INode::IsOverWindow() const { return HasState(ENodeState::OverWindow); } @@ -1710,7 +1710,7 @@ void ISource::FillSortParts(const TVector<TSortSpecificationPtr>& orderBy, TNode return; } else if (orderBy.size() == 1) { auto& sortSpec = orderBy.front(); - expr = Y("EnsurePersistable", sortSpec->OrderExpr); + expr = Y("EnsurePersistable", sortSpec->OrderExpr); sortDirection = Y("Bool", Q(sortSpec->Ascending ? "true" : "false")); } else { auto exprList = Y(); @@ -1718,7 +1718,7 @@ void ISource::FillSortParts(const TVector<TSortSpecificationPtr>& orderBy, TNode for (const auto& sortSpec: orderBy) { const auto asc = sortSpec->Ascending; sortDirection = L(sortDirection, Y("Bool", Q(asc ? "true" : "false"))); - exprList = L(exprList, Y("EnsurePersistable", sortSpec->OrderExpr)); + exprList = L(exprList, Y("EnsurePersistable", sortSpec->OrderExpr)); } sortDirection = Q(sortDirection); expr = Q(exprList); diff --git a/ydb/library/yql/sql/v0/node.h b/ydb/library/yql/sql/v0/node.h index 4c7cfc273b6..3b2468205f4 100644 --- a/ydb/library/yql/sql/v0/node.h +++ b/ydb/library/yql/sql/v0/node.h @@ -125,7 +125,7 @@ namespace NSQLTranslationV0 { bool IsConstant() const; bool IsAggregated() const; - bool IsAggregationKey() const; + bool IsAggregationKey() const; bool IsOverWindow() const; bool HasState(ENodeState state) const { PrecacheState(); diff --git a/ydb/library/yql/sql/v0/query.cpp b/ydb/library/yql/sql/v0/query.cpp index 7752b28b017..c7d5847adcc 100644 --- a/ydb/library/yql/sql/v0/query.cpp +++ b/ydb/library/yql/sql/v0/query.cpp @@ -1192,10 +1192,10 @@ public: return {}; } - void DoUpdateState() const override { - State.Set(ENodeState::Const); - } - + void DoUpdateState() const override { + State.Set(ENodeState::Const); + } + private: TVector<TString> Args; TVector<TNodePtr> ExprSeq; diff --git a/ydb/library/yql/sql/v0/select.cpp b/ydb/library/yql/sql/v0/select.cpp index ef47023be15..0361db5a51a 100644 --- a/ydb/library/yql/sql/v0/select.cpp +++ b/ydb/library/yql/sql/v0/select.cpp @@ -1163,11 +1163,11 @@ public: } HavingGround = ctx.GroundBlockShortcuts(Pos); src->AddWindowSpecs(WinSpecs); - + if (!InitSelect(ctx, src, isJoin, hasError)) { return false; - } - + } + src->FinishColumns(); Aggregate = src->BuildAggregation("core"); if (src->IsFlattenByColumns() || src->IsFlattenColumns()) { @@ -1234,87 +1234,87 @@ public: return nullptr; } - TNodePtr terms = BuildColumnsTerms(ctx); - + TNodePtr terms = BuildColumnsTerms(ctx); + bool ordered = ctx.UseUnordered(*this); - auto block(Y(Y("let", "core", input))); - if (Flatten) { + auto block(Y(Y("let", "core", input))); + if (Flatten) { block = L(block, Y("let", "core", Y(ordered ? "OrderedFlatMap" : "FlatMap", "core", BuildLambda(Pos, Y("row"), Flatten, "res")))); - } - if (PreaggregatedMap) { - block = L(block, Y("let", "core", Y("FlatMap", "core", BuildLambda(Pos, Y("row"), PreaggregatedMap)))); - if (Source->IsCompositeSource() && !Columns.QualifiedAll) { - block = L(block, Y("let", "preaggregated", "core")); - } - } else if (Source->IsCompositeSource() && !Columns.QualifiedAll) { - block = L(block, Y("let", "origcore", "core")); - } + } + if (PreaggregatedMap) { + block = L(block, Y("let", "core", Y("FlatMap", "core", BuildLambda(Pos, Y("row"), PreaggregatedMap)))); + if (Source->IsCompositeSource() && !Columns.QualifiedAll) { + block = L(block, Y("let", "preaggregated", "core")); + } + } else if (Source->IsCompositeSource() && !Columns.QualifiedAll) { + block = L(block, Y("let", "origcore", "core")); + } auto filter = Source->BuildFilter(ctx, "core", FiltersGround); - if (filter) { - block = L(block, Y("let", "core", filter)); - } - if (Aggregate) { - block = L(block, Y("let", "core", Aggregate)); + if (filter) { + block = L(block, Y("let", "core", filter)); + } + if (Aggregate) { + block = L(block, Y("let", "core", Aggregate)); ordered = false; - } - if (PrewindowMap) { - block = L(block, Y("let", "core", PrewindowMap)); - } - if (CalcOverWindow) { - block = L(block, Y("let", "core", CalcOverWindow)); - } + } + if (PrewindowMap) { + block = L(block, Y("let", "core", PrewindowMap)); + } + if (CalcOverWindow) { + block = L(block, Y("let", "core", CalcOverWindow)); + } block = L(block, Y("let", "core", Y("EnsurePersistable", Y(ordered ? "OrderedFlatMap" : "FlatMap", "core", BuildLambda(Pos, Y("row"), terms, "res"))))); - return Y("block", Q(L(block, Y("return", "core")))); - } - - TNodePtr BuildSort(TContext& ctx, const TString& label) override { - Y_UNUSED(ctx); - if (OrderBy.empty()) { - return nullptr; - } - - return Y("let", label, BuildSortSpec(OrderBy, label, OrderByGround)); - } - - bool IsSelect() const override { + return Y("block", Q(L(block, Y("return", "core")))); + } + + TNodePtr BuildSort(TContext& ctx, const TString& label) override { + Y_UNUSED(ctx); + if (OrderBy.empty()) { + return nullptr; + } + + return Y("let", label, BuildSortSpec(OrderBy, label, OrderByGround)); + } + + bool IsSelect() const override { return true; - } - - bool IsStream() const override { - return Stream; - } - + } + + bool IsStream() const override { + return Stream; + } + bool IsOrdered() const override { return !OrderBy.empty(); } TWriteSettings GetWriteSettings() const override { return Settings; - } - - TMaybe<bool> AddColumn(TContext& ctx, TColumnNode& column) override { - if (OrderByInit && Source->GetJoin()) { - column.SetAsNotReliable(); - auto maybeExist = IRealSource::AddColumn(ctx, column); - if (maybeExist && maybeExist.GetRef()) { - return true; - } - return Source->AddColumn(ctx, column); - } - return IRealSource::AddColumn(ctx, column); - } - - TNodePtr PrepareWithout(const TNodePtr& base) { - auto terms = base; - if (Without) { - for (auto without: Without) { - auto name = *without->GetColumnName(); - if (Source && Source->GetJoin()) { - name = DotJoin(*without->GetSourceName(), name); - } + } + + TMaybe<bool> AddColumn(TContext& ctx, TColumnNode& column) override { + if (OrderByInit && Source->GetJoin()) { + column.SetAsNotReliable(); + auto maybeExist = IRealSource::AddColumn(ctx, column); + if (maybeExist && maybeExist.GetRef()) { + return true; + } + return Source->AddColumn(ctx, column); + } + return IRealSource::AddColumn(ctx, column); + } + + TNodePtr PrepareWithout(const TNodePtr& base) { + auto terms = base; + if (Without) { + for (auto without: Without) { + auto name = *without->GetColumnName(); + if (Source && Source->GetJoin()) { + name = DotJoin(*without->GetSourceName(), name); + } terms = L(terms, Y("let", "row", Y("RemoveMember", "row", Q(name)))); - } - } + } + } if (Source) { for (auto column : Source->GetTmpWindowColumns()) { @@ -1322,198 +1322,198 @@ public: } } - return terms; - } - - TNodePtr DoClone() const final { - TWinSpecs newSpecs; - for (auto cur: WinSpecs) { - newSpecs.emplace(cur.first, cur.second->Clone()); - } + return terms; + } + + TNodePtr DoClone() const final { + TWinSpecs newSpecs; + for (auto cur: WinSpecs) { + newSpecs.emplace(cur.first, cur.second->Clone()); + } return new TSelectCore(Pos, Source->CloneSource(), CloneContainer(GroupByExpr), - CloneContainer(GroupBy), CloneContainer(OrderBy), SafeClone(Having), newSpecs, SafeClone(HoppingWindowSpec), + CloneContainer(GroupBy), CloneContainer(OrderBy), SafeClone(Having), newSpecs, SafeClone(HoppingWindowSpec), CloneContainer(Terms), Distinct, Without, Stream, Settings); - } - -private: - bool InitSelect(TContext& ctx, ISource* src, bool isJoin, bool& hasError) { - for (auto iter: WinSpecs) { - auto winSpec = *iter.second; - ctx.PushBlockShortcuts(); - for (auto& partitionNode: winSpec.Partitions) { - auto invalidPartitionNodeFunc = [&]() { - ctx.Error(partitionNode->GetPos()) << "Expected either column name, either alias" << - " or expression with alias for PARTITION BY expression in WINDOWS clause"; - hasError = true; - }; - if (!partitionNode->GetLabel() && !partitionNode->GetColumnName()) { - invalidPartitionNodeFunc(); - continue; - } - if (!partitionNode->Init(ctx, src)) { - hasError = true; - continue; - } - if (!partitionNode->GetLabel() && !partitionNode->GetColumnName()) { - invalidPartitionNodeFunc(); - continue; - } - } - WinSpecsPartitionByGround = ctx.GroundBlockShortcuts(Pos, WinSpecsPartitionByGround); - if (!src->AddExpressions(ctx, winSpec.Partitions, EExprSeat::WindowPartitionBy)) { - hasError = true; - } - - ctx.PushBlockShortcuts(); - for (auto orderSpec: winSpec.OrderBy) { - if (!orderSpec->OrderExpr->Init(ctx, src)) { - hasError = true; - } - } - WinSpecsOrderByGround = ctx.GroundBlockShortcuts(Pos, WinSpecsOrderByGround); - } - - if (HoppingWindowSpec) { - ctx.PushBlockShortcuts(); - if (!HoppingWindowSpec->TimeExtractor->Init(ctx, src)) { - hasError = true; - } - HoppingWindowSpec->TimeExtractor = ctx.GroundBlockShortcutsForExpr(HoppingWindowSpec->TimeExtractor); - src->SetHoppingWindowSpec(HoppingWindowSpec); - } - - ctx.PushBlockShortcuts(); - for (auto& term: Terms) { - if (!term->Init(ctx, src)) { - hasError = true; - continue; - } - auto column = term->GetColumnName(); - if (Distinct) { - if (!column) { - ctx.Error(Pos) << "SELECT DISTINCT requires a list of column references"; - hasError = true; - continue; - } - if (term->IsAsterisk()) { - ctx.Error(Pos) << "SELECT DISTINCT * is not implemented yet"; - hasError = true; - continue; - } - auto columnName = *column; - if (isJoin) { - auto sourceNamePtr = term->GetSourceName(); - if (!sourceNamePtr || sourceNamePtr->empty()) { - if (src->IsGroupByColumn(columnName)) { - ctx.Error(term->GetPos()) << ErrorDistinctByGroupKey(columnName); - hasError = true; - continue; - } else { - ctx.Error(term->GetPos()) << ErrorDistinctWithoutCorrelation(columnName); - hasError = true; - continue; - } - } - columnName = DotJoin(*sourceNamePtr, columnName); - } - if (src->IsGroupByColumn(columnName)) { - ctx.Error(term->GetPos()) << ErrorDistinctByGroupKey(columnName); - hasError = true; - continue; - } - if (!src->AddGroupKey(ctx, columnName)) { - hasError = true; - continue; - } - GroupBy.push_back(BuildColumn(Pos, columnName)); - } - TString label(term->GetLabel()); + } + +private: + bool InitSelect(TContext& ctx, ISource* src, bool isJoin, bool& hasError) { + for (auto iter: WinSpecs) { + auto winSpec = *iter.second; + ctx.PushBlockShortcuts(); + for (auto& partitionNode: winSpec.Partitions) { + auto invalidPartitionNodeFunc = [&]() { + ctx.Error(partitionNode->GetPos()) << "Expected either column name, either alias" << + " or expression with alias for PARTITION BY expression in WINDOWS clause"; + hasError = true; + }; + if (!partitionNode->GetLabel() && !partitionNode->GetColumnName()) { + invalidPartitionNodeFunc(); + continue; + } + if (!partitionNode->Init(ctx, src)) { + hasError = true; + continue; + } + if (!partitionNode->GetLabel() && !partitionNode->GetColumnName()) { + invalidPartitionNodeFunc(); + continue; + } + } + WinSpecsPartitionByGround = ctx.GroundBlockShortcuts(Pos, WinSpecsPartitionByGround); + if (!src->AddExpressions(ctx, winSpec.Partitions, EExprSeat::WindowPartitionBy)) { + hasError = true; + } + + ctx.PushBlockShortcuts(); + for (auto orderSpec: winSpec.OrderBy) { + if (!orderSpec->OrderExpr->Init(ctx, src)) { + hasError = true; + } + } + WinSpecsOrderByGround = ctx.GroundBlockShortcuts(Pos, WinSpecsOrderByGround); + } + + if (HoppingWindowSpec) { + ctx.PushBlockShortcuts(); + if (!HoppingWindowSpec->TimeExtractor->Init(ctx, src)) { + hasError = true; + } + HoppingWindowSpec->TimeExtractor = ctx.GroundBlockShortcutsForExpr(HoppingWindowSpec->TimeExtractor); + src->SetHoppingWindowSpec(HoppingWindowSpec); + } + + ctx.PushBlockShortcuts(); + for (auto& term: Terms) { + if (!term->Init(ctx, src)) { + hasError = true; + continue; + } + auto column = term->GetColumnName(); + if (Distinct) { + if (!column) { + ctx.Error(Pos) << "SELECT DISTINCT requires a list of column references"; + hasError = true; + continue; + } + if (term->IsAsterisk()) { + ctx.Error(Pos) << "SELECT DISTINCT * is not implemented yet"; + hasError = true; + continue; + } + auto columnName = *column; + if (isJoin) { + auto sourceNamePtr = term->GetSourceName(); + if (!sourceNamePtr || sourceNamePtr->empty()) { + if (src->IsGroupByColumn(columnName)) { + ctx.Error(term->GetPos()) << ErrorDistinctByGroupKey(columnName); + hasError = true; + continue; + } else { + ctx.Error(term->GetPos()) << ErrorDistinctWithoutCorrelation(columnName); + hasError = true; + continue; + } + } + columnName = DotJoin(*sourceNamePtr, columnName); + } + if (src->IsGroupByColumn(columnName)) { + ctx.Error(term->GetPos()) << ErrorDistinctByGroupKey(columnName); + hasError = true; + continue; + } + if (!src->AddGroupKey(ctx, columnName)) { + hasError = true; + continue; + } + GroupBy.push_back(BuildColumn(Pos, columnName)); + } + TString label(term->GetLabel()); bool hasName = true; - if (label.empty()) { - auto source = term->GetSourceName(); + if (label.empty()) { + auto source = term->GetSourceName(); if (term->IsAsterisk() && !source->empty()) { - Columns.QualifiedAll = true; - label = DotJoin(*source, "*"); - } else if (column) { - label = isJoin && source && *source ? DotJoin(*source, *column) : *column; - } else { - label = TStringBuilder() << "column" << Columns.List.size(); + Columns.QualifiedAll = true; + label = DotJoin(*source, "*"); + } else if (column) { + label = isJoin && source && *source ? DotJoin(*source, *column) : *column; + } else { + label = TStringBuilder() << "column" << Columns.List.size(); hasName = false; - } - } + } + } if (!Columns.Add(&label, false, false, true, hasName)) { - ctx.Error(Pos) << "Duplicate column: " << label; - hasError = true; - continue; - } - } - TermsGround = ctx.GroundBlockShortcuts(Pos); - - if (Columns.All || Columns.QualifiedAll) { - Source->AllColumns(); - if (Columns.All && isJoin && ctx.SimpleColumns) { - Columns.All = false; - Columns.QualifiedAll = true; - const auto pos = Terms.front()->GetPos(); - Terms.clear(); - for (const auto& source: Source->GetJoin()->GetJoinLabels()) { + ctx.Error(Pos) << "Duplicate column: " << label; + hasError = true; + continue; + } + } + TermsGround = ctx.GroundBlockShortcuts(Pos); + + if (Columns.All || Columns.QualifiedAll) { + Source->AllColumns(); + if (Columns.All && isJoin && ctx.SimpleColumns) { + Columns.All = false; + Columns.QualifiedAll = true; + const auto pos = Terms.front()->GetPos(); + Terms.clear(); + for (const auto& source: Source->GetJoin()->GetJoinLabels()) { auto withDot = DotJoin(source, "*"); Columns.Add(&withDot, false); - Terms.push_back(BuildColumn(pos, "*", source)); - } - } - } - for (const auto& without: Without) { - auto namePtr = without->GetColumnName(); - auto sourcePtr = without->GetSourceName(); - YQL_ENSURE(namePtr && *namePtr); - if (isJoin && !(sourcePtr && *sourcePtr)) { - ctx.Error(without->GetPos()) << "Expected correlation name for WITHOUT in JOIN"; - hasError = true; - continue; - } - } - if (Having && !Having->Init(ctx, src)) { - hasError = true; - } - if (!src->IsCompositeSource() && !Distinct && !Columns.All && src->HasAggregations()) { - /// verify select aggregation compatibility - TVector<TNodePtr> exprs(Terms); - if (Having) { - exprs.push_back(Having); - } - for (const auto& iter: WinSpecs) { - for (const auto& sortSpec: iter.second->OrderBy) { - exprs.push_back(sortSpec->OrderExpr); - } - } - if (!ValidateAllNodesForAggregation(ctx, exprs)) { - hasError = true; - } - } - const auto label = GetLabel(); - ctx.PushBlockShortcuts(); - for (const auto& sortSpec: OrderBy) { - auto& expr = sortSpec->OrderExpr; - SetLabel(Source->GetLabel()); - OrderByInit = true; - if (!expr->Init(ctx, this)) { - hasError = true; - continue; - } - OrderByInit = false; - if (!IsComparableExpression(ctx, expr, "ORDER BY")) { - hasError = true; - continue; - } - } - OrderByGround = ctx.GroundBlockShortcuts(Pos); - SetLabel(label); - - return true; - } - - TNodePtr BuildColumnsTerms(TContext& ctx) { + Terms.push_back(BuildColumn(pos, "*", source)); + } + } + } + for (const auto& without: Without) { + auto namePtr = without->GetColumnName(); + auto sourcePtr = without->GetSourceName(); + YQL_ENSURE(namePtr && *namePtr); + if (isJoin && !(sourcePtr && *sourcePtr)) { + ctx.Error(without->GetPos()) << "Expected correlation name for WITHOUT in JOIN"; + hasError = true; + continue; + } + } + if (Having && !Having->Init(ctx, src)) { + hasError = true; + } + if (!src->IsCompositeSource() && !Distinct && !Columns.All && src->HasAggregations()) { + /// verify select aggregation compatibility + TVector<TNodePtr> exprs(Terms); + if (Having) { + exprs.push_back(Having); + } + for (const auto& iter: WinSpecs) { + for (const auto& sortSpec: iter.second->OrderBy) { + exprs.push_back(sortSpec->OrderExpr); + } + } + if (!ValidateAllNodesForAggregation(ctx, exprs)) { + hasError = true; + } + } + const auto label = GetLabel(); + ctx.PushBlockShortcuts(); + for (const auto& sortSpec: OrderBy) { + auto& expr = sortSpec->OrderExpr; + SetLabel(Source->GetLabel()); + OrderByInit = true; + if (!expr->Init(ctx, this)) { + hasError = true; + continue; + } + OrderByInit = false; + if (!IsComparableExpression(ctx, expr, "ORDER BY")) { + hasError = true; + continue; + } + } + OrderByGround = ctx.GroundBlockShortcuts(Pos); + SetLabel(label); + + return true; + } + + TNodePtr BuildColumnsTerms(TContext& ctx) { TNodePtr terms; if (Columns.All) { Y_VERIFY_DEBUG(Columns.List.empty()); diff --git a/ydb/library/yql/sql/v0/sql.cpp b/ydb/library/yql/sql/v0/sql.cpp index b028fc04398..df4359d0136 100644 --- a/ydb/library/yql/sql/v0/sql.cpp +++ b/ydb/library/yql/sql/v0/sql.cpp @@ -89,7 +89,7 @@ inline TString GetKeyword(TTranslation& ctx, const TRule_keyword_restricted& nod } static TString Id(const TRule_id& node, TTranslation& ctx) { - // id: IDENTIFIER | keyword; + // id: IDENTIFIER | keyword; switch (node.Alt_case()) { case TRule_id::kAltId1: return ctx.Identifier(node.GetAlt_id1().GetToken1()); @@ -588,7 +588,7 @@ public: } TNodePtr Build(const TRule_expr& node) { - // expr: or_subexpr (OR or_subexpr)*; + // expr: or_subexpr (OR or_subexpr)*; auto getNode = [](const TRule_expr::TBlock2& b) -> const TRule_or_subexpr& { return b.GetRule_or_subexpr2(); }; return BinOper("Or", node.GetRule_or_subexpr1(), getNode, node.GetBlock2().begin(), node.GetBlock2().end()); } @@ -646,25 +646,25 @@ private: TNodePtr SubExpr(const TRule_xor_subexpr& node); TNodePtr SubExpr(const TRule_mul_subexpr& node) { - // mul_subexpr: con_subexpr (DOUBLE_PIPE con_subexpr)*; + // mul_subexpr: con_subexpr (DOUBLE_PIPE con_subexpr)*; auto getNode = [](const TRule_mul_subexpr::TBlock2& b) -> const TRule_con_subexpr& { return b.GetRule_con_subexpr2(); }; return BinOper("Concat", node.GetRule_con_subexpr1(), getNode, node.GetBlock2().begin(), node.GetBlock2().end()); } TNodePtr SubExpr(const TRule_add_subexpr& node) { - // add_subexpr: mul_subexpr ((ASTERISK | SLASH | PERCENT) mul_subexpr)*; + // add_subexpr: mul_subexpr ((ASTERISK | SLASH | PERCENT) mul_subexpr)*; auto getNode = [](const TRule_add_subexpr::TBlock2& b) -> const TRule_mul_subexpr& { return b.GetRule_mul_subexpr2(); }; return BinOpList(node.GetRule_mul_subexpr1(), getNode, node.GetBlock2().begin(), node.GetBlock2().end()); } TNodePtr SubExpr(const TRule_bit_subexpr& node) { - // bit_subexpr: add_subexpr ((PLUS | MINUS) add_subexpr)*; + // bit_subexpr: add_subexpr ((PLUS | MINUS) add_subexpr)*; auto getNode = [](const TRule_bit_subexpr::TBlock2& b) -> const TRule_add_subexpr& { return b.GetRule_add_subexpr2(); }; return BinOpList(node.GetRule_add_subexpr1(), getNode, node.GetBlock2().begin(), node.GetBlock2().end()); } TNodePtr SubExpr(const TRule_neq_subexpr& node) { - // neq_subexpr: bit_subexpr ((SHIFT_LEFT | SHIFT_RIGHT | ROT_LEFT | ROT_RIGHT | AMPERSAND | PIPE | CARET) bit_subexpr)* (DOUBLE_QUESTION neq_subexpr)?; + // neq_subexpr: bit_subexpr ((SHIFT_LEFT | SHIFT_RIGHT | ROT_LEFT | ROT_RIGHT | AMPERSAND | PIPE | CARET) bit_subexpr)* (DOUBLE_QUESTION neq_subexpr)?; auto getNode = [](const TRule_neq_subexpr::TBlock2& b) -> const TRule_bit_subexpr& { return b.GetRule_bit_subexpr2(); }; auto result = BinOpList(node.GetRule_bit_subexpr1(), getNode, node.GetBlock2().begin(), node.GetBlock2().end()); if (!result) { @@ -685,19 +685,19 @@ private: } TNodePtr SubExpr(const TRule_eq_subexpr& node) { - // eq_subexpr: neq_subexpr ((LESS | LESS_OR_EQ | GREATER | GREATER_OR_EQ) neq_subexpr)*; + // eq_subexpr: neq_subexpr ((LESS | LESS_OR_EQ | GREATER | GREATER_OR_EQ) neq_subexpr)*; auto getNode = [](const TRule_eq_subexpr::TBlock2& b) -> const TRule_neq_subexpr& { return b.GetRule_neq_subexpr2(); }; return BinOpList(node.GetRule_neq_subexpr1(), getNode, node.GetBlock2().begin(), node.GetBlock2().end()); } TNodePtr SubExpr(const TRule_or_subexpr& node) { - // or_subexpr: and_subexpr (AND and_subexpr)*; + // or_subexpr: and_subexpr (AND and_subexpr)*; auto getNode = [](const TRule_or_subexpr::TBlock2& b) -> const TRule_and_subexpr& { return b.GetRule_and_subexpr2(); }; return BinOper("And", node.GetRule_and_subexpr1(), getNode, node.GetBlock2().begin(), node.GetBlock2().end()); } TNodePtr SubExpr(const TRule_and_subexpr& node) { - // and_subexpr: xor_subexpr (XOR xor_subexpr)*; + // and_subexpr: xor_subexpr (XOR xor_subexpr)*; auto getNode = [](const TRule_and_subexpr::TBlock2& b) -> const TRule_xor_subexpr& { return b.GetRule_xor_subexpr2(); }; return BinOper("Xor", node.GetRule_xor_subexpr1(), getNode, node.GetBlock2().begin(), node.GetBlock2().end()); } @@ -1565,7 +1565,7 @@ TNodePtr TSqlExpression::CaseRule(const TRule_case_expr& rule) { template<typename TWindowFunctionType> TNodePtr TSqlExpression::WindowFunctionRule(const TWindowFunctionType& rule) { - // window_function: call_expr (null_treatment? OVER window_name_or_specification)?; + // window_function: call_expr (null_treatment? OVER window_name_or_specification)?; // OR // in_window_function: in_call_expr (null_treatment? OVER window_name_or_specification)?; const bool overWindow = rule.HasBlock2(); @@ -1601,16 +1601,16 @@ TNodePtr TSqlExpression::WindowFunctionRule(const TWindowFunctionType& rule) { } TNodePtr TSqlExpression::AtomExpr(const TRule_atom_expr& node) { - // atom_expr: - // literal_value - // | bind_parameter - // | window_function - // | lambda + // atom_expr: + // literal_value + // | bind_parameter + // | window_function + // | lambda // | cast_expr // | exists_expr // | case_expr // | id_or_string NAMESPACE id_or_string - // ; + // ; switch (node.Alt_case()) { case TRule_atom_expr::kAltAtomExpr1: @@ -1778,7 +1778,7 @@ bool TSqlExpression::SqlLambdaExprBody(TContext& ctx, const TRule_lambda_body& n } TNodePtr TSqlExpression::SubExpr(const TRule_con_subexpr& node) { - // con_subexpr: unary_subexpr | unary_op unary_subexpr; + // con_subexpr: unary_subexpr | unary_op unary_subexpr; switch (node.Alt_case()) { case TRule_con_subexpr::kAltConSubexpr1: return UnaryExpr(node.GetAlt_con_subexpr1().GetRule_unary_subexpr1()); @@ -1808,7 +1808,7 @@ TNodePtr TSqlExpression::SubExpr(const TRule_con_subexpr& node) { } TNodePtr TSqlExpression::SubExpr(const TRule_xor_subexpr& node) { - // xor_subexpr: eq_subexpr cond_expr?; + // xor_subexpr: eq_subexpr cond_expr?; TNodePtr res(SubExpr(node.GetRule_eq_subexpr1())); if (!res) { return {}; @@ -2117,9 +2117,9 @@ TNodePtr TSqlExpression::BinOpList(const TNode& node, TGetNode getNode, TIter be case SQLLexerTokens::TOKEN_SLASH: opName = "/"; Ctx.IncrementMonCounter("sql_binary_operations", "Divide"); - if (!Ctx.PragmaClassicDivision) { - partialResult = BuildCast(Ctx, pos, partialResult, "Double"); - } + if (!Ctx.PragmaClassicDivision) { + partialResult = BuildCast(Ctx, pos, partialResult, "Double"); + } break; case SQLLexerTokens::TOKEN_PERCENT: opName = "%"; @@ -2551,10 +2551,10 @@ TSourcePtr TSqlSelect::JoinSource(const TRule_join_source& node) { } bool TSqlSelect::SelectTerm(TVector<TNodePtr>& terms, const TRule_result_column& node) { - // result_column: - // opt_id_prefix ASTERISK - // | expr (AS id_or_string)? - // ; + // result_column: + // opt_id_prefix ASTERISK + // | expr (AS id_or_string)? + // ; switch (node.Alt_case()) { case TRule_result_column::kAltResultColumn1: { auto alt = node.GetAlt_result_column1(); @@ -3071,8 +3071,8 @@ TSourcePtr TSqlSelect::ReduceCore(const TRule_reduce_core& node, const TWriteSet } TSourcePtr TSqlSelect::SelectCore(const TRule_select_core& node, const TWriteSettings& settings, TPosition& selectPos) { - // (FROM join_source)? SELECT STREAM? opt_set_quantifier result_column (COMMA result_column)* (WITHOUT column_list)? (FROM join_source)? (WHERE expr)? - // group_by_clause? (HAVING expr)? window_clause? order_by_clause? + // (FROM join_source)? SELECT STREAM? opt_set_quantifier result_column (COMMA result_column)* (WITHOUT column_list)? (FROM join_source)? (WHERE expr)? + // group_by_clause? (HAVING expr)? window_clause? order_by_clause? if (node.HasBlock1()) { Token(node.GetBlock1().GetToken1()); } else { @@ -4592,8 +4592,8 @@ TNodePtr TSqlQuery::PragmaStatement(const TRule_pragma_stmt& stmt, bool& success } } - const bool withConfigure = prefix || normalizedPragma == "file" || normalizedPragma == "folder" || normalizedPragma == "udf"; - const bool hasLexicalScope = withConfigure || normalizedPragma == "classicdivision"; + const bool withConfigure = prefix || normalizedPragma == "file" || normalizedPragma == "folder" || normalizedPragma == "udf"; + const bool hasLexicalScope = withConfigure || normalizedPragma == "classicdivision"; for (auto pragmaValue : pragmaValues) { if (pragmaValue->HasAlt_pragma_value3()) { values.push_back(TDeferredAtom(Ctx.Pos(), StringContent(Ctx, pragmaValue->GetAlt_pragma_value3().GetToken1().GetValue()))); @@ -4622,7 +4622,7 @@ TNodePtr TSqlQuery::PragmaStatement(const TRule_pragma_stmt& stmt, bool& success } if (prefix.empty()) { - if (!TopLevel && !hasLexicalScope) { + if (!TopLevel && !hasLexicalScope) { Error() << "This pragma '" << pragma << "' is not allowed to be used in actions or subqueries"; Ctx.IncrementMonCounter("sql_errors", "BadPragmaValue"); return{}; @@ -4799,13 +4799,13 @@ TNodePtr TSqlQuery::PragmaStatement(const TRule_pragma_stmt& stmt, bool& success return {}; } Ctx.Error(Ctx.Pos()) << *values[0].GetLiteral(); - } else if (normalizedPragma == "classicdivision") { - if (values.size() != 1 || !TryFromString(*values[0].GetLiteral(), Ctx.PragmaClassicDivision)) { - Error() << "Expected single boolean argument for: " << pragma; - Ctx.IncrementMonCounter("sql_errors", "BadPragmaValue"); - return {}; - } - Ctx.IncrementMonCounter("sql_pragma", "ClassicDivision"); + } else if (normalizedPragma == "classicdivision") { + if (values.size() != 1 || !TryFromString(*values[0].GetLiteral(), Ctx.PragmaClassicDivision)) { + Error() << "Expected single boolean argument for: " << pragma; + Ctx.IncrementMonCounter("sql_errors", "BadPragmaValue"); + return {}; + } + Ctx.IncrementMonCounter("sql_pragma", "ClassicDivision"); } else if (normalizedPragma == "disableunordered") { Ctx.Warning(Ctx.Pos(), TIssuesIds::YQL_DEPRECATED_PRAGMA) << "Use of deprecated DisableUnordered pragma. It will be dropped soon"; @@ -5124,7 +5124,7 @@ bool TSqlTranslation::DefineActionOrSubqueryStatement(const TRule_define_action_ } auto saveCurrCluster = Ctx.CurrCluster; - auto savePragmaClassicDivision = Ctx.PragmaClassicDivision; + auto savePragmaClassicDivision = Ctx.PragmaClassicDivision; auto saveMode = Ctx.Settings.Mode; if (isSubquery) { Ctx.Settings.Mode = NSQLTranslation::ESqlMode::SUBQUERY; @@ -5156,7 +5156,7 @@ bool TSqlTranslation::DefineActionOrSubqueryStatement(const TRule_define_action_ auto ret = !hasError ? BuildQuery(Ctx.Pos(), blocks, false) : nullptr; Ctx.CurrCluster = saveCurrCluster; - Ctx.PragmaClassicDivision = savePragmaClassicDivision; + Ctx.PragmaClassicDivision = savePragmaClassicDivision; Ctx.NamedNodes = saveNamedNodes; Ctx.Settings.Mode = saveMode; diff --git a/ydb/library/yql/sql/v1/aggregation.cpp b/ydb/library/yql/sql/v1/aggregation.cpp index 850e0e5056e..f54cd2f7740 100644 --- a/ydb/library/yql/sql/v1/aggregation.cpp +++ b/ydb/library/yql/sql/v1/aggregation.cpp @@ -105,7 +105,7 @@ protected: if (!Expr->Init(ctx, src)) { return false; } - if (Expr->IsAggregated() && !Expr->IsAggregationKey() && !IsOverWindow()) { + if (Expr->IsAggregated() && !Expr->IsAggregationKey() && !IsOverWindow()) { ctx.Error(Pos) << "Aggregation of aggregated values is forbidden for no window functions"; return false; } diff --git a/ydb/library/yql/sql/v1/builtin.cpp b/ydb/library/yql/sql/v1/builtin.cpp index 43ef1243f10..a0604a34469 100644 --- a/ydb/library/yql/sql/v1/builtin.cpp +++ b/ydb/library/yql/sql/v1/builtin.cpp @@ -1646,9 +1646,9 @@ public: } void DoUpdateState() const override { - State.Set(ENodeState::Const, false); - } - + State.Set(ENodeState::Const, false); + } + TNodePtr DoClone() const final { return new TTableRow<Join>(Pos, ArgsCount); } @@ -2316,13 +2316,13 @@ TAggrFuncFactoryCallback BuildAggrFuncFactoryCallback( const TString& functionName, const TString& factoryName, EAggrFuncTypeCallback type = NORMAL, - const TString& functionNameOverride = TString(), - const TVector<EAggregateMode>& validModes = {}) { + const TString& functionNameOverride = TString(), + const TVector<EAggregateMode>& validModes = {}) { const TString realFunctionName = functionNameOverride.empty() ? functionName : functionNameOverride; - return [functionName, realFunctionName, factoryName, type, validModes] (TPosition pos, const TVector<TNodePtr>& args, EAggregateMode aggMode, bool isFactory) -> INode::TPtr { - if (!validModes.empty()) { - if (!IsIn(validModes, aggMode)) { + return [functionName, realFunctionName, factoryName, type, validModes] (TPosition pos, const TVector<TNodePtr>& args, EAggregateMode aggMode, bool isFactory) -> INode::TPtr { + if (!validModes.empty()) { + if (!IsIn(validModes, aggMode)) { TString errorText; if (TVector{EAggregateMode::OverWindow} == validModes) { errorText = TStringBuilder() @@ -2331,9 +2331,9 @@ TAggrFuncFactoryCallback BuildAggrFuncFactoryCallback( errorText = TStringBuilder() << "Can't use " << functionName << " in " << ToString(aggMode) << " aggregation mode"; } - return INode::TPtr(new TInvalidBuiltin(pos, errorText)); - } - } + return INode::TPtr(new TInvalidBuiltin(pos, errorText)); + } + } TAggregationPtr factory = nullptr; switch (type) { case NORMAL: @@ -2389,15 +2389,15 @@ TAggrFuncFactoryCallback BuildAggrFuncFactoryCallback( }; } -TAggrFuncFactoryCallback BuildAggrFuncFactoryCallback( - const TString& functionName, - const TString& factoryName, - const TVector<EAggregateMode>& validModes, - EAggrFuncTypeCallback type = NORMAL, - const TString& functionNameOverride = TString()) { - return BuildAggrFuncFactoryCallback(functionName, factoryName, type, functionNameOverride, validModes); -} - +TAggrFuncFactoryCallback BuildAggrFuncFactoryCallback( + const TString& functionName, + const TString& factoryName, + const TVector<EAggregateMode>& validModes, + EAggrFuncTypeCallback type = NORMAL, + const TString& functionNameOverride = TString()) { + return BuildAggrFuncFactoryCallback(functionName, factoryName, type, functionNameOverride, validModes); +} + template<typename TType> TBuiltinFactoryCallback BuildSimpleBuiltinFactoryCallback() { return [] (TPosition pos, const TVector<TNodePtr>& args) -> TNodePtr { @@ -2459,53 +2459,53 @@ TNodePtr MakePair(TPosition pos, const TVector<TNodePtr>& args) { }); } -struct TBuiltinFuncData { - const TBuiltinFactoryCallbackMap BuiltinFuncs; - const TAggrFuncFactoryCallbackMap AggrFuncs; - const TCoreFuncMap CoreFuncs; +struct TBuiltinFuncData { + const TBuiltinFactoryCallbackMap BuiltinFuncs; + const TAggrFuncFactoryCallbackMap AggrFuncs; + const TCoreFuncMap CoreFuncs; - TBuiltinFuncData(): - BuiltinFuncs(MakeBuiltinFuncs()), - AggrFuncs(MakeAggrFuncs()), + TBuiltinFuncData(): + BuiltinFuncs(MakeBuiltinFuncs()), + AggrFuncs(MakeAggrFuncs()), CoreFuncs(MakeCoreFuncs()) - { - } - - TBuiltinFactoryCallbackMap MakeBuiltinFuncs() { - TBuiltinFactoryCallbackMap builtinFuncs = { - // Branching - {"if", BuildSimpleBuiltinFactoryCallback<TYqlIf<false>>()}, - {"ifstrict", BuildSimpleBuiltinFactoryCallback<TYqlIf<true>>() }, - - // String builtins - {"len", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Size", 1, 1)}, - {"length", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Size", 1, 1)}, - {"charlength", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Size", 1, 1)}, - {"characterlength", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Size", 1, 1)}, + { + } + + TBuiltinFactoryCallbackMap MakeBuiltinFuncs() { + TBuiltinFactoryCallbackMap builtinFuncs = { + // Branching + {"if", BuildSimpleBuiltinFactoryCallback<TYqlIf<false>>()}, + {"ifstrict", BuildSimpleBuiltinFactoryCallback<TYqlIf<true>>() }, + + // String builtins + {"len", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Size", 1, 1)}, + {"length", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Size", 1, 1)}, + {"charlength", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Size", 1, 1)}, + {"characterlength", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Size", 1, 1)}, {"substring", BuildNamedBuiltinFactoryCallback<TYqlSubstring>("Substring")}, {"find", BuildNamedBuiltinFactoryCallback<TYqlSubstring>("Find")}, {"rfind", BuildNamedBuiltinFactoryCallback<TYqlSubstring>("RFind")}, - {"byteat", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ByteAt", 2, 2) }, + {"byteat", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ByteAt", 2, 2) }, {"startswith", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StartsWith", 2, 2)}, {"endswith", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EndsWith", 2, 2)}, - // Numeric builtins - {"abs", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Abs", 1, 1) }, - {"tobytes", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ToBytes", 1, 1) }, - {"frombytes", BuildSimpleBuiltinFactoryCallback<TFromBytes>() }, + // Numeric builtins + {"abs", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Abs", 1, 1) }, + {"tobytes", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ToBytes", 1, 1) }, + {"frombytes", BuildSimpleBuiltinFactoryCallback<TFromBytes>() }, - // Compare builtins - {"minof", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Min", 1, -1)}, - {"maxof", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Max", 1, -1)}, - {"greatest", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Max", 1, -1)}, - {"least", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Min", 1, -1)}, - {"in", BuildSimpleBuiltinFactoryCallback<TYqlIn>()}, + // Compare builtins + {"minof", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Min", 1, -1)}, + {"maxof", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Max", 1, -1)}, + {"greatest", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Max", 1, -1)}, + {"least", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Min", 1, -1)}, + {"in", BuildSimpleBuiltinFactoryCallback<TYqlIn>()}, - // List builtins + // List builtins {"aslist", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("AsList", 0, -1)}, {"asliststrict", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("AsListStrict", 0, -1) }, - {"listlength", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Length", 1, 1)}, - {"listhasitems", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("HasItems", 1, 1)}, + {"listlength", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Length", 1, 1)}, + {"listhasitems", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("HasItems", 1, 1)}, {"listextend", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListExtend", 0, -1)}, {"listextendstrict", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListExtendStrict", 0, -1)}, {"listunionall", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListUnionAll", 0, -1) }, @@ -2517,11 +2517,11 @@ struct TBuiltinFuncData { {"listtake", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListTake", 2, 2)}, {"listhead", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListHead", 1, 1)}, {"listlast", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListLast", 1, 1)}, - {"listsort", BuildBoolBuiltinFactoryCallback<TListSortBuiltin>(true)}, - {"listsortasc", BuildBoolBuiltinFactoryCallback<TListSortBuiltin>(true)}, - {"listsortdesc", BuildBoolBuiltinFactoryCallback<TListSortBuiltin>(false)}, - {"listmap", BuildBoolBuiltinFactoryCallback<TListMapBuiltin>(false)}, - {"listflatmap", BuildBoolBuiltinFactoryCallback<TListMapBuiltin>(true)}, + {"listsort", BuildBoolBuiltinFactoryCallback<TListSortBuiltin>(true)}, + {"listsortasc", BuildBoolBuiltinFactoryCallback<TListSortBuiltin>(true)}, + {"listsortdesc", BuildBoolBuiltinFactoryCallback<TListSortBuiltin>(false)}, + {"listmap", BuildBoolBuiltinFactoryCallback<TListMapBuiltin>(false)}, + {"listflatmap", BuildBoolBuiltinFactoryCallback<TListMapBuiltin>(true)}, {"listfilter", BuildNamedBuiltinFactoryCallback<TListFilterBuiltin>("ListFilter")}, {"listany", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListAny", 1, 1)}, {"listall", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListAll", 1, 1)}, @@ -2531,10 +2531,10 @@ struct TBuiltinFuncData { {"listsum", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListSum", 1, 1)}, {"listavg", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListAvg", 1, 1)}, {"listconcat", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListConcat", 1, 2)}, - {"listextract", BuildSimpleBuiltinFactoryCallback<TListExtractBuiltin>()}, - {"listuniq", BuildSimpleBuiltinFactoryCallback<TListUniqBuiltin>()}, - {"listcreate", BuildSimpleBuiltinFactoryCallback<TListCreateBuiltin>()}, - {"listfromrange", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListFromRange", 2, 3) }, + {"listextract", BuildSimpleBuiltinFactoryCallback<TListExtractBuiltin>()}, + {"listuniq", BuildSimpleBuiltinFactoryCallback<TListUniqBuiltin>()}, + {"listcreate", BuildSimpleBuiltinFactoryCallback<TListCreateBuiltin>()}, + {"listfromrange", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListFromRange", 2, 3) }, {"listreplicate", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Replicate", 2, 2) }, {"listtakewhile", BuildNamedBuiltinFactoryCallback<TListFilterBuiltin>("ListTakeWhile") }, {"listskipwhile", BuildNamedBuiltinFactoryCallback<TListFilterBuiltin>("ListSkipWhile") }, @@ -2544,10 +2544,10 @@ struct TBuiltinFuncData { {"listnotnull", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListNotNull", 1, 1)}, {"listflatten", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListFlatten", 1, 1)}, - // Dict builtins + // Dict builtins {"dictlength", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Length", 1, 1)}, {"dicthasitems", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("HasItems", 1, 1)}, - {"dictcreate", BuildSimpleBuiltinFactoryCallback<TDictCreateBuiltin>()}, + {"dictcreate", BuildSimpleBuiltinFactoryCallback<TDictCreateBuiltin>()}, {"setcreate", BuildSimpleBuiltinFactoryCallback<TSetCreateBuiltin>()}, {"asdict", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("AsDict", 0, -1)}, {"asdictstrict", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("AsDictStrict", 0, -1)}, @@ -2557,114 +2557,114 @@ struct TBuiltinFuncData { {"tomultidict", BuildNamedBuiltinFactoryCallback<TYqlToDict<false>>("Many")}, {"tosorteddict", BuildNamedBuiltinFactoryCallback<TYqlToDict<true>>("One")}, {"tosortedmultidict", BuildNamedBuiltinFactoryCallback<TYqlToDict<true>>("Many")}, - {"dictkeys", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictKeys", 1, 1) }, - {"dictpayloads", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictPayloads", 1, 1) }, - {"dictitems", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictItems", 1, 1) }, - {"dictlookup", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Lookup", 2, 2) }, + {"dictkeys", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictKeys", 1, 1) }, + {"dictpayloads", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictPayloads", 1, 1) }, + {"dictitems", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictItems", 1, 1) }, + {"dictlookup", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Lookup", 2, 2) }, {"dictcontains", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Contains", 2, 2) }, - // Atom builtins - {"asatom", BuildSimpleBuiltinFactoryCallback<TYqlAsAtom>()}, + // Atom builtins + {"asatom", BuildSimpleBuiltinFactoryCallback<TYqlAsAtom>()}, {"secureparam", BuildNamedBuiltinFactoryCallback<TYqlAtom>("SecureParam")}, {"void", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Void", 0, 0)}, {"emptylist", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EmptyList", 0, 0)}, {"emptydict", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EmptyDict", 0, 0)}, {"callable", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Callable", 2, 2)}, - {"way", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Way", 1, 1) }, - {"variant", BuildSimpleBuiltinFactoryCallback<TYqlVariant>() }, + {"way", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Way", 1, 1) }, + {"variant", BuildSimpleBuiltinFactoryCallback<TYqlVariant>() }, {"enum", BuildSimpleBuiltinFactoryCallback<TYqlEnum>() }, {"asvariant", BuildSimpleBuiltinFactoryCallback<TYqlAsVariant>() }, {"asenum", BuildSimpleBuiltinFactoryCallback<TYqlAsEnum>() }, - {"astagged", BuildSimpleBuiltinFactoryCallback<TYqlAsTagged>() }, - {"untag", BuildSimpleBuiltinFactoryCallback<TYqlUntag>() }, - {"parsetype", BuildSimpleBuiltinFactoryCallback<TYqlParseType>() }, - {"ensuretype", BuildSimpleBuiltinFactoryCallback<TYqlTypeAssert<true>>() }, - {"ensureconvertibleto", BuildSimpleBuiltinFactoryCallback<TYqlTypeAssert<false>>() }, - {"ensure", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Ensure", 2, 3) }, - {"evaluateexpr", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EvaluateExpr", 1, 1) }, - {"evaluateatom", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EvaluateAtom", 1, 1) }, - {"evaluatetype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EvaluateType", 1, 1) }, - {"unwrap", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Unwrap", 1, 2) }, - {"just", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Just", 1, 1) }, - {"nothing", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Nothing", 1, 1) }, - {"formattype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("FormatType", 1, 1) }, - {"typeof", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TypeOf", 1, 1) }, - {"instanceof", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("InstanceOf", 1, 1) }, - {"datatype", BuildSimpleBuiltinFactoryCallback<TYqlDataType>() }, - {"optionaltype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("OptionalType", 1, 1) }, - {"listtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListType", 1, 1) }, - {"streamtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StreamType", 1, 1) }, - {"dicttype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictType", 2, 2) }, - {"tupletype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TupleType", 0, -1) }, - {"generictype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("GenericType", 0, 0) }, - {"unittype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("UnitType", 0, 0) }, - {"voidtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("VoidType", 0, 0) }, - {"resourcetype", BuildSimpleBuiltinFactoryCallback<TYqlResourceType>() }, - {"taggedtype", BuildSimpleBuiltinFactoryCallback<TYqlTaggedType>() }, - {"varianttype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("VariantType", 1, 1) }, - {"callabletype", BuildSimpleBuiltinFactoryCallback<TYqlCallableType>() }, - {"optionalitemtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("OptionalItemType", 1, 1) }, - {"listitemtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListItemType", 1, 1) }, - {"streamitemtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StreamItemType", 1, 1) }, - {"dictkeytype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictKeyType", 1, 1) }, - {"dictpayloadtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictPayloadType", 1, 1) }, - {"tupleelementtype", BuildSimpleBuiltinFactoryCallback<TYqlTupleElementType>() }, - {"structmembertype", BuildSimpleBuiltinFactoryCallback<TYqlStructMemberType>() }, - {"callableresulttype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CallableResultType", 1, 1) }, - {"callableargumenttype", BuildSimpleBuiltinFactoryCallback<TYqlCallableArgumentType>() }, - {"variantunderlyingtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("VariantUnderlyingType", 1, 1) }, - {"fromysonsimpletype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("FromYsonSimpleType", 2, 2) }, - {"currentutcdate", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "CurrentUtcDate", 0, -1) }, - {"currentutcdatetime", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "CurrentUtcDatetime", 0, -1) }, - {"currentutctimestamp", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "CurrentUtcTimestamp", 0, -1) }, + {"astagged", BuildSimpleBuiltinFactoryCallback<TYqlAsTagged>() }, + {"untag", BuildSimpleBuiltinFactoryCallback<TYqlUntag>() }, + {"parsetype", BuildSimpleBuiltinFactoryCallback<TYqlParseType>() }, + {"ensuretype", BuildSimpleBuiltinFactoryCallback<TYqlTypeAssert<true>>() }, + {"ensureconvertibleto", BuildSimpleBuiltinFactoryCallback<TYqlTypeAssert<false>>() }, + {"ensure", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Ensure", 2, 3) }, + {"evaluateexpr", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EvaluateExpr", 1, 1) }, + {"evaluateatom", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EvaluateAtom", 1, 1) }, + {"evaluatetype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EvaluateType", 1, 1) }, + {"unwrap", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Unwrap", 1, 2) }, + {"just", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Just", 1, 1) }, + {"nothing", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Nothing", 1, 1) }, + {"formattype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("FormatType", 1, 1) }, + {"typeof", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TypeOf", 1, 1) }, + {"instanceof", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("InstanceOf", 1, 1) }, + {"datatype", BuildSimpleBuiltinFactoryCallback<TYqlDataType>() }, + {"optionaltype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("OptionalType", 1, 1) }, + {"listtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListType", 1, 1) }, + {"streamtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StreamType", 1, 1) }, + {"dicttype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictType", 2, 2) }, + {"tupletype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TupleType", 0, -1) }, + {"generictype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("GenericType", 0, 0) }, + {"unittype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("UnitType", 0, 0) }, + {"voidtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("VoidType", 0, 0) }, + {"resourcetype", BuildSimpleBuiltinFactoryCallback<TYqlResourceType>() }, + {"taggedtype", BuildSimpleBuiltinFactoryCallback<TYqlTaggedType>() }, + {"varianttype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("VariantType", 1, 1) }, + {"callabletype", BuildSimpleBuiltinFactoryCallback<TYqlCallableType>() }, + {"optionalitemtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("OptionalItemType", 1, 1) }, + {"listitemtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListItemType", 1, 1) }, + {"streamitemtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StreamItemType", 1, 1) }, + {"dictkeytype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictKeyType", 1, 1) }, + {"dictpayloadtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictPayloadType", 1, 1) }, + {"tupleelementtype", BuildSimpleBuiltinFactoryCallback<TYqlTupleElementType>() }, + {"structmembertype", BuildSimpleBuiltinFactoryCallback<TYqlStructMemberType>() }, + {"callableresulttype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CallableResultType", 1, 1) }, + {"callableargumenttype", BuildSimpleBuiltinFactoryCallback<TYqlCallableArgumentType>() }, + {"variantunderlyingtype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("VariantUnderlyingType", 1, 1) }, + {"fromysonsimpletype", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("FromYsonSimpleType", 2, 2) }, + {"currentutcdate", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "CurrentUtcDate", 0, -1) }, + {"currentutcdatetime", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "CurrentUtcDatetime", 0, -1) }, + {"currentutctimestamp", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "CurrentUtcTimestamp", 0, -1) }, { "currenttzdate", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(1, "CurrentTzDate", 1, -1) }, { "currenttzdatetime", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(1, "CurrentTzDatetime", 1, -1) }, { "currenttztimestamp", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(1, "CurrentTzTimestamp", 1, -1) }, - {"currentoperationid", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CurrentOperationId", 0, 0) }, - {"currentoperationsharedid", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CurrentOperationSharedId", 0, 0) }, - {"currentauthenticateduser", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CurrentAuthenticatedUser", 0, 0) }, - {"addtimezone", BuildSimpleBuiltinFactoryCallback<TYqlAddTimezone>() }, - {"removetimezone", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("RemoveTimezone", 1, 1) }, + {"currentoperationid", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CurrentOperationId", 0, 0) }, + {"currentoperationsharedid", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CurrentOperationSharedId", 0, 0) }, + {"currentauthenticateduser", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CurrentAuthenticatedUser", 0, 0) }, + {"addtimezone", BuildSimpleBuiltinFactoryCallback<TYqlAddTimezone>() }, + {"removetimezone", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("RemoveTimezone", 1, 1) }, {"pickle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Pickle", 1, 1) }, {"stablepickle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StablePickle", 1, 1) }, {"unpickle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Unpickle", 2, 2) }, - {"typehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TypeHandle", 1, 1) }, - {"parsetypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ParseTypeHandle", 1, 1) }, - {"typekind", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TypeKind", 1, 1) }, - {"datatypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DataTypeComponents", 1, 1) }, - {"datatypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DataTypeHandle", 1, 1) }, - {"optionaltypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("OptionalTypeHandle", 1, 1) }, - {"listtypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListTypeHandle", 1, 1) }, - {"streamtypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StreamTypeHandle", 1, 1) }, - {"tupletypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TupleTypeComponents", 1, 1) }, - {"tupletypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TupleTypeHandle", 1, 1) }, - {"structtypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StructTypeComponents", 1, 1) }, - {"structtypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StructTypeHandle", 1, 1) }, - {"dicttypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictTypeComponents", 1, 1) }, - {"dicttypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictTypeHandle", 2, 2) }, - {"resourcetypetag", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ResourceTypeTag", 1, 1) }, - {"resourcetypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ResourceTypeHandle", 1, 1) }, - {"taggedtypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TaggedTypeComponents", 1, 1) }, - {"taggedtypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TaggedTypeHandle", 2, 2) }, - {"varianttypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("VariantTypeHandle", 1, 1) }, - {"voidtypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("VoidTypeHandle", 0, 0) }, - {"nulltypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("NullTypeHandle", 0, 0) }, + {"typehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TypeHandle", 1, 1) }, + {"parsetypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ParseTypeHandle", 1, 1) }, + {"typekind", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TypeKind", 1, 1) }, + {"datatypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DataTypeComponents", 1, 1) }, + {"datatypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DataTypeHandle", 1, 1) }, + {"optionaltypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("OptionalTypeHandle", 1, 1) }, + {"listtypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListTypeHandle", 1, 1) }, + {"streamtypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StreamTypeHandle", 1, 1) }, + {"tupletypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TupleTypeComponents", 1, 1) }, + {"tupletypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TupleTypeHandle", 1, 1) }, + {"structtypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StructTypeComponents", 1, 1) }, + {"structtypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StructTypeHandle", 1, 1) }, + {"dicttypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictTypeComponents", 1, 1) }, + {"dicttypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("DictTypeHandle", 2, 2) }, + {"resourcetypetag", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ResourceTypeTag", 1, 1) }, + {"resourcetypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ResourceTypeHandle", 1, 1) }, + {"taggedtypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TaggedTypeComponents", 1, 1) }, + {"taggedtypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("TaggedTypeHandle", 2, 2) }, + {"varianttypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("VariantTypeHandle", 1, 1) }, + {"voidtypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("VoidTypeHandle", 0, 0) }, + {"nulltypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("NullTypeHandle", 0, 0) }, {"emptylisttypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EmptyListTypeHandle", 0, 0) }, {"emptydicttypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EmptyDictTypeHandle", 0, 0) }, - {"callabletypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CallableTypeComponents", 1, 1) }, - {"callableargument", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CallableArgument", 1, 3) }, - {"callabletypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CallableTypeHandle", 2, 4) }, - {"formatcode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("FormatCode", 1, 1) }, + {"callabletypecomponents", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CallableTypeComponents", 1, 1) }, + {"callableargument", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CallableArgument", 1, 3) }, + {"callabletypehandle", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("CallableTypeHandle", 2, 4) }, + {"formatcode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("FormatCode", 1, 1) }, {"worldcode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("WorldCode", 0, 0) }, - {"atomcode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("AtomCode", 1, 1) }, - {"listcode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListCode", 0, -1) }, - {"funccode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("FuncCode", 1, -1) }, - {"lambdacode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("LambdaCode", 1, 2) }, - {"evaluatecode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EvaluateCode", 1, 1) }, - {"reprcode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ReprCode", 1, 1) }, - {"quotecode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("QuoteCode", 1, 1) }, + {"atomcode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("AtomCode", 1, 1) }, + {"listcode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListCode", 0, -1) }, + {"funccode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("FuncCode", 1, -1) }, + {"lambdacode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("LambdaCode", 1, 2) }, + {"evaluatecode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("EvaluateCode", 1, 1) }, + {"reprcode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ReprCode", 1, 1) }, + {"quotecode", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("QuoteCode", 1, 1) }, {"lambdaargumentscount", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("LambdaArgumentsCount", 1, 1) }, {"subqueryextend", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("SubqueryExtend", 1, -1) }, {"subqueryunionall", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("SubqueryUnionAll", 1, -1) }, @@ -2677,8 +2677,8 @@ struct TBuiltinFuncData { {"subqueryorderby", BuildSimpleBuiltinFactoryCallback<TYqlSubqueryOrderBy<SubqueryOrderBy>>() }, {"subqueryassumeorderby", BuildSimpleBuiltinFactoryCallback<TYqlSubqueryOrderBy<SubqueryAssumeOrderBy>>() }, - // Tuple builtins - {"astuple", BuildSimpleBuiltinFactoryCallback<TTupleNode>()}, + // Tuple builtins + {"astuple", BuildSimpleBuiltinFactoryCallback<TTupleNode>()}, // Struct builtins {"trymember", BuildNamedBuiltinFactoryCallback<TTryMember>("TryMember")}, @@ -2691,54 +2691,54 @@ struct TBuiltinFuncData { {"staticmap", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StaticMap", 2, 2) }, {"staticzip", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("StaticZip", 1, -1) }, - // File builtins + // File builtins {"filepath", BuildNamedBuiltinFactoryCallback<TYqlAtom>("FilePath")}, {"filecontent", BuildNamedBuiltinFactoryCallback<TYqlAtom>("FileContent")}, {"folderpath", BuildNamedBuiltinFactoryCallback<TYqlAtom>("FolderPath") }, {"files", BuildNamedBuiltinFactoryCallback<TYqlAtom>("Files")}, - {"parsefile", BuildSimpleBuiltinFactoryCallback<TYqlParseFileOp>()}, - - // Misc builtins - {"coalesce", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Coalesce", 1, -1)}, - {"nvl", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Coalesce", 1, -1) }, - {"nanvl", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Nanvl", 2, 2) }, - {"likely", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Likely", 1, -1)}, - {"random", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "Random", 1, -1)}, - {"randomnumber", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "RandomNumber", 1, -1)}, - {"randomuuid", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "RandomUuid", 1, -1) }, - {"tablepath", BuildNamedBuiltinFactoryCallback<TCallDirectRow>("TablePath") }, + {"parsefile", BuildSimpleBuiltinFactoryCallback<TYqlParseFileOp>()}, + + // Misc builtins + {"coalesce", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Coalesce", 1, -1)}, + {"nvl", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Coalesce", 1, -1) }, + {"nanvl", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Nanvl", 2, 2) }, + {"likely", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("Likely", 1, -1)}, + {"random", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "Random", 1, -1)}, + {"randomnumber", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "RandomNumber", 1, -1)}, + {"randomuuid", BuildNamedDepsArgcBuiltinFactoryCallback<TCallNodeDepArgs>(0, "RandomUuid", 1, -1) }, + {"tablepath", BuildNamedBuiltinFactoryCallback<TCallDirectRow>("TablePath") }, {"tablerecordindex", BuildNamedBuiltinFactoryCallback<TCallDirectRow>("TableRecord") }, {"tablerow", BuildSimpleBuiltinFactoryCallback<TTableRow<false>>() }, {"jointablerow", BuildSimpleBuiltinFactoryCallback<TTableRow<true>>() }, {"tablerows", BuildSimpleBuiltinFactoryCallback<TTableRows>() }, - {"weakfield", BuildSimpleBuiltinFactoryCallback<TWeakFieldOp>()}, + {"weakfield", BuildSimpleBuiltinFactoryCallback<TWeakFieldOp>()}, - // Hint builtins - {"grouping", BuildSimpleBuiltinFactoryCallback<TGroupingNode>()}, + // Hint builtins + {"grouping", BuildSimpleBuiltinFactoryCallback<TGroupingNode>()}, - // Window funcitons - {"rownumber", BuildNamedArgcBuiltinFactoryCallback<TWinRowNumber>("RowNumber", 0, 0)}, + // Window funcitons + {"rownumber", BuildNamedArgcBuiltinFactoryCallback<TWinRowNumber>("RowNumber", 0, 0)}, {"rank", BuildNamedArgcBuiltinFactoryCallback<TWinRank>("Rank", 0, 1)}, {"denserank", BuildNamedArgcBuiltinFactoryCallback<TWinRank>("DenseRank", 0, 1)}, {"lead", BuildNamedArgcBuiltinFactoryCallback<TWinLeadLag>("Lead", 1, 2)}, {"lag", BuildNamedArgcBuiltinFactoryCallback<TWinLeadLag>("Lag", 1, 2)}, - + // Session window {"sessionwindow", BuildSimpleBuiltinFactoryCallback<TSessionWindow>()}, {"sessionstart", BuildSimpleBuiltinFactoryCallback<TSessionStart<true>>()}, {"sessionstate", BuildSimpleBuiltinFactoryCallback<TSessionStart<false>>()}, - // Hopping intervals time functions - {"hopstart", BuildSimpleBuiltinFactoryCallback<THoppingTime<true>>()}, - {"hopend", BuildSimpleBuiltinFactoryCallback<THoppingTime<false>>()}, - }; - return builtinFuncs; - } - - TAggrFuncFactoryCallbackMap MakeAggrFuncs() { - constexpr auto OverWindow = EAggregateMode::OverWindow; - - TAggrFuncFactoryCallbackMap aggrFuncs = { + // Hopping intervals time functions + {"hopstart", BuildSimpleBuiltinFactoryCallback<THoppingTime<true>>()}, + {"hopend", BuildSimpleBuiltinFactoryCallback<THoppingTime<false>>()}, + }; + return builtinFuncs; + } + + TAggrFuncFactoryCallbackMap MakeAggrFuncs() { + constexpr auto OverWindow = EAggregateMode::OverWindow; + + TAggrFuncFactoryCallbackMap aggrFuncs = { {"min", BuildAggrFuncFactoryCallback("Min", "min_traits_factory")}, {"max", BuildAggrFuncFactoryCallback("Max", "max_traits_factory")}, @@ -2828,29 +2828,29 @@ struct TBuiltinFuncData { {"udaf", BuildAggrFuncFactoryCallback("UDAF", "udaf_traits_factory", UDAF)}, - // Window functions - {"firstvalue", BuildAggrFuncFactoryCallback("FirstValue", "first_value_traits_factory", {OverWindow})}, - {"lastvalue", BuildAggrFuncFactoryCallback("LastValue", "last_value_traits_factory", {OverWindow})}, - {"firstvalueignorenulls", BuildAggrFuncFactoryCallback("FirstValueIgnoreNulls", "first_value_ignore_nulls_traits_factory", {OverWindow})}, - {"lastvalueignorenulls", BuildAggrFuncFactoryCallback("LastValueIgnoreNulls", "last_value_ignore_nulls_traits_factory", {OverWindow})}, + // Window functions + {"firstvalue", BuildAggrFuncFactoryCallback("FirstValue", "first_value_traits_factory", {OverWindow})}, + {"lastvalue", BuildAggrFuncFactoryCallback("LastValue", "last_value_traits_factory", {OverWindow})}, + {"firstvalueignorenulls", BuildAggrFuncFactoryCallback("FirstValueIgnoreNulls", "first_value_ignore_nulls_traits_factory", {OverWindow})}, + {"lastvalueignorenulls", BuildAggrFuncFactoryCallback("LastValueIgnoreNulls", "last_value_ignore_nulls_traits_factory", {OverWindow})}, }; - return aggrFuncs; - } - - TCoreFuncMap MakeCoreFuncs() { - TCoreFuncMap coreFuncs = { - {"listindexof", { "IndexOf", 2, 2}}, - {"testbit", { "TestBit", 2, 2}}, - {"setbit", { "SetBit", 2, 2}}, - {"clearbit", { "ClearBit", 2, 2}}, - {"flipbit", { "FlipBit", 2, 2 }}, - {"toset", { "ToSet", 1, 1 }}, - {"setisdisjoint", { "SetIsDisjoint", 2, 2}}, - {"setintersection", { "SetIntersection", 2, 3}}, - {"setincludes", { "SetIncludes", 2, 2}}, - {"setunion", { "SetUnion", 2, 3}}, - {"setdifference", { "SetDifference", 2, 2}}, - {"setsymmetricdifference", { "SetSymmetricDifference", 2, 3}}, + return aggrFuncs; + } + + TCoreFuncMap MakeCoreFuncs() { + TCoreFuncMap coreFuncs = { + {"listindexof", { "IndexOf", 2, 2}}, + {"testbit", { "TestBit", 2, 2}}, + {"setbit", { "SetBit", 2, 2}}, + {"clearbit", { "ClearBit", 2, 2}}, + {"flipbit", { "FlipBit", 2, 2 }}, + {"toset", { "ToSet", 1, 1 }}, + {"setisdisjoint", { "SetIsDisjoint", 2, 2}}, + {"setintersection", { "SetIntersection", 2, 3}}, + {"setincludes", { "SetIncludes", 2, 2}}, + {"setunion", { "SetUnion", 2, 3}}, + {"setdifference", { "SetDifference", 2, 2}}, + {"setsymmetricdifference", { "SetSymmetricDifference", 2, 3}}, {"listaggregate", { "ListAggregate", 2, 2}}, {"dictaggregate", { "DictAggregate", 2, 2}}, {"aggregatetransforminput", { "AggregateTransformInput", 2, 2}}, @@ -2865,19 +2865,19 @@ struct TBuiltinFuncData { {"forcerenamemembers", { "ForceRenameMembers", 2, 2}}, {"spreadmembers", { "SpreadMembers", 2, 2}}, {"forcespreadmembers", { "ForceSpreadMembers", 2, 2}}, - }; - return coreFuncs; - } -}; + }; + return coreFuncs; + } +}; -TNodePtr BuildBuiltinFunc(TContext& ctx, TPosition pos, TString name, const TVector<TNodePtr>& args, +TNodePtr BuildBuiltinFunc(TContext& ctx, TPosition pos, TString name, const TVector<TNodePtr>& args, const TString& originalNameSpace, EAggregateMode aggMode, bool* mustUseNamed, bool warnOnYqlNameSpace) { - - const TBuiltinFuncData* funcData = Singleton<TBuiltinFuncData>(); - const TBuiltinFactoryCallbackMap& builtinFuncs = funcData->BuiltinFuncs; - const TAggrFuncFactoryCallbackMap& aggrFuncs = funcData->AggrFuncs; - const TCoreFuncMap& coreFuncs = funcData->CoreFuncs; - + + const TBuiltinFuncData* funcData = Singleton<TBuiltinFuncData>(); + const TBuiltinFactoryCallbackMap& builtinFuncs = funcData->BuiltinFuncs; + const TAggrFuncFactoryCallbackMap& aggrFuncs = funcData->AggrFuncs; + const TCoreFuncMap& coreFuncs = funcData->CoreFuncs; + for (auto& arg: args) { if (!arg) { return nullptr; diff --git a/ydb/library/yql/sql/v1/node.cpp b/ydb/library/yql/sql/v1/node.cpp index 870bbd9cc7f..7bc888a0429 100644 --- a/ydb/library/yql/sql/v1/node.cpp +++ b/ydb/library/yql/sql/v1/node.cpp @@ -108,10 +108,10 @@ bool INode::IsAggregated() const { return HasState(ENodeState::Aggregated); } -bool INode::IsAggregationKey() const { - return HasState(ENodeState::AggregationKey); -} - +bool INode::IsAggregationKey() const { + return HasState(ENodeState::AggregationKey); +} + bool INode::IsOverWindow() const { return HasState(ENodeState::OverWindow); } diff --git a/ydb/library/yql/sql/v1/node.h b/ydb/library/yql/sql/v1/node.h index de82b45a238..77d745a7105 100644 --- a/ydb/library/yql/sql/v1/node.h +++ b/ydb/library/yql/sql/v1/node.h @@ -132,7 +132,7 @@ namespace NSQLTranslationV1 { bool IsConstant() const; bool MaybeConstant() const; bool IsAggregated() const; - bool IsAggregationKey() const; + bool IsAggregationKey() const; bool IsOverWindow() const; bool HasState(ENodeState state) const { PrecacheState(); diff --git a/ydb/library/yql/sql/v1/query.cpp b/ydb/library/yql/sql/v1/query.cpp index 725356b9f57..95506b2c783 100644 --- a/ydb/library/yql/sql/v1/query.cpp +++ b/ydb/library/yql/sql/v1/query.cpp @@ -1901,10 +1901,10 @@ public: return {}; } - void DoUpdateState() const override { - State.Set(ENodeState::Const); - } - + void DoUpdateState() const override { + State.Set(ENodeState::Const); + } + private: TVector<TString> Args; TVector<TNodePtr> ExprSeq; diff --git a/ydb/library/yql/sql/v1/select.cpp b/ydb/library/yql/sql/v1/select.cpp index 2841f05a5b5..9825b08bc4b 100644 --- a/ydb/library/yql/sql/v1/select.cpp +++ b/ydb/library/yql/sql/v1/select.cpp @@ -1535,12 +1535,12 @@ public: return false; } src->AddWindowSpecs(WinSpecs); - + const bool isJoin = Source->GetJoin(); if (!InitSelect(ctx, src, isJoin, hasError)) { return false; - } - + } + src->FinishColumns(); Aggregate = src->BuildAggregation("core"); if (src->IsFlattenByColumns() || src->IsFlattenColumns()) { @@ -1620,35 +1620,35 @@ public: } bool ordered = ctx.UseUnordered(*this); - auto block(Y(Y("let", "core", input))); + auto block(Y(Y("let", "core", input))); if (PreFlattenMap) { block = L(block, Y("let", "core", Y(ordered ? "OrderedFlatMap" : "FlatMap", "core", BuildLambda(Pos, Y("row"), PreFlattenMap)))); } - if (Flatten) { + if (Flatten) { block = L(block, Y("let", "core", Y(ordered ? "OrderedFlatMap" : "FlatMap", "core", BuildLambda(Pos, Y("row"), Flatten, "res")))); - } - if (PreaggregatedMap) { + } + if (PreaggregatedMap) { block = L(block, Y("let", "core", PreaggregatedMap)); - if (Source->IsCompositeSource() && !Columns.QualifiedAll) { - block = L(block, Y("let", "preaggregated", "core")); - } - } else if (Source->IsCompositeSource() && !Columns.QualifiedAll) { - block = L(block, Y("let", "origcore", "core")); - } + if (Source->IsCompositeSource() && !Columns.QualifiedAll) { + block = L(block, Y("let", "preaggregated", "core")); + } + } else if (Source->IsCompositeSource() && !Columns.QualifiedAll) { + block = L(block, Y("let", "origcore", "core")); + } auto filter = Source->BuildFilter(ctx, "core"); - if (filter) { - block = L(block, Y("let", "core", filter)); - } - if (Aggregate) { - block = L(block, Y("let", "core", Aggregate)); + if (filter) { + block = L(block, Y("let", "core", filter)); + } + if (Aggregate) { + block = L(block, Y("let", "core", Aggregate)); ordered = false; - } - if (PrewindowMap) { - block = L(block, Y("let", "core", PrewindowMap)); - } - if (CalcOverWindow) { - block = L(block, Y("let", "core", CalcOverWindow)); - } + } + if (PrewindowMap) { + block = L(block, Y("let", "core", PrewindowMap)); + } + if (CalcOverWindow) { + block = L(block, Y("let", "core", CalcOverWindow)); + } block = L(block, Y("let", "core", Y("PersistableRepr", BuildSqlProject(ctx, ordered)))); @@ -1656,18 +1656,18 @@ public: block = L(block, Y("let", "core", Y("PersistableRepr", Y("SqlAggregateAll", Y("RemoveSystemMembers", "core"))))); } - return Y("block", Q(L(block, Y("return", "core")))); - } - - TNodePtr BuildSort(TContext& ctx, const TString& label) override { - Y_UNUSED(ctx); - if (OrderBy.empty()) { - return nullptr; - } - + return Y("block", Q(L(block, Y("return", "core")))); + } + + TNodePtr BuildSort(TContext& ctx, const TString& label) override { + Y_UNUSED(ctx); + if (OrderBy.empty()) { + return nullptr; + } + return Y("let", label, BuildSortSpec(OrderBy, label, false, AssumeSorted)); - } - + } + TNodePtr BuildCleanupColumns(TContext& ctx, const TString& label) override { TNodePtr cleanup; if (ctx.EnableSystemColumns && ctx.Settings.Mode != NSQLTranslation::ESqlMode::LIMITED_VIEW) { @@ -1698,14 +1698,14 @@ public: return cleanup; } - bool IsSelect() const override { + bool IsSelect() const override { return true; - } - - bool IsStream() const override { + } + + bool IsStream() const override { return Source->IsStream(); - } - + } + EOrderKind GetOrderKind() const override { if (OrderBy.empty()) { return EOrderKind::None; @@ -1715,31 +1715,31 @@ public: TWriteSettings GetWriteSettings() const override { return Settings; - } - - TMaybe<bool> AddColumn(TContext& ctx, TColumnNode& column) override { - if (OrderByInit && Source->GetJoin()) { - column.SetAsNotReliable(); - auto maybeExist = IRealSource::AddColumn(ctx, column); - if (maybeExist && maybeExist.GetRef()) { - return true; - } - return Source->AddColumn(ctx, column); - } - return IRealSource::AddColumn(ctx, column); - } - - TNodePtr PrepareWithout(const TNodePtr& base) { - auto terms = base; - if (Without) { - for (auto without: Without) { - auto name = *without->GetColumnName(); - if (Source && Source->GetJoin()) { - name = DotJoin(*without->GetSourceName(), name); - } + } + + TMaybe<bool> AddColumn(TContext& ctx, TColumnNode& column) override { + if (OrderByInit && Source->GetJoin()) { + column.SetAsNotReliable(); + auto maybeExist = IRealSource::AddColumn(ctx, column); + if (maybeExist && maybeExist.GetRef()) { + return true; + } + return Source->AddColumn(ctx, column); + } + return IRealSource::AddColumn(ctx, column); + } + + TNodePtr PrepareWithout(const TNodePtr& base) { + auto terms = base; + if (Without) { + for (auto without: Without) { + auto name = *without->GetColumnName(); + if (Source && Source->GetJoin()) { + name = DotJoin(*without->GetSourceName(), name); + } terms = L(terms, Y("let", "row", Y("RemoveMember", "row", Q(name)))); - } - } + } + } if (Source) { for (auto column : Source->GetTmpWindowColumns()) { @@ -1747,22 +1747,22 @@ public: } } - return terms; - } - - TNodePtr DoClone() const final { - TWinSpecs newSpecs; - for (auto cur: WinSpecs) { - newSpecs.emplace(cur.first, cur.second->Clone()); - } + return terms; + } + + TNodePtr DoClone() const final { + TWinSpecs newSpecs; + for (auto cur: WinSpecs) { + newSpecs.emplace(cur.first, cur.second->Clone()); + } return new TSelectCore(Pos, Source->CloneSource(), CloneContainer(GroupByExpr), CloneContainer(GroupBy), CompactGroupBy, AssumeSorted, CloneContainer(OrderBy), SafeClone(Having), newSpecs, SafeClone(HoppingWindowSpec), CloneContainer(Terms), Distinct, Without, SelectStream, Settings); - } - -private: - bool InitSelect(TContext& ctx, ISource* src, bool isJoin, bool& hasError) { + } + +private: + bool InitSelect(TContext& ctx, ISource* src, bool isJoin, bool& hasError) { for (auto& [name, winSpec] : WinSpecs) { for (size_t i = 0; i < winSpec->Partitions.size(); ++i) { auto partitionNode = winSpec->Partitions[i]; @@ -1775,60 +1775,60 @@ private: } sessionWindow->MarkValid(); winSpec->Session = partitionNode; - } + } - if (!partitionNode->Init(ctx, src)) { - hasError = true; - continue; - } - if (!partitionNode->GetLabel() && !partitionNode->GetColumnName()) { + if (!partitionNode->Init(ctx, src)) { + hasError = true; + continue; + } + if (!partitionNode->GetLabel() && !partitionNode->GetColumnName()) { TString label = TStringBuilder() << "group_" << name << "_" << i; partitionNode->SetLabel(label); - } - } + } + } if (!src->AddExpressions(ctx, winSpec->Partitions, EExprSeat::WindowPartitionBy)) { - hasError = true; - } - } - - if (HoppingWindowSpec) { - if (!HoppingWindowSpec->TimeExtractor->Init(ctx, src)) { - hasError = true; - } - src->SetHoppingWindowSpec(HoppingWindowSpec); - } - - for (auto& term: Terms) { + hasError = true; + } + } + + if (HoppingWindowSpec) { + if (!HoppingWindowSpec->TimeExtractor->Init(ctx, src)) { + hasError = true; + } + src->SetHoppingWindowSpec(HoppingWindowSpec); + } + + for (auto& term: Terms) { if (!term->Init(ctx, src)) { - hasError = true; - continue; - } - auto column = term->GetColumnName(); - TString label(term->GetLabel()); + hasError = true; + continue; + } + auto column = term->GetColumnName(); + TString label(term->GetLabel()); bool hasName = true; - if (label.empty()) { - auto source = term->GetSourceName(); + if (label.empty()) { + auto source = term->GetSourceName(); if (term->IsAsterisk() && !source->empty()) { - Columns.QualifiedAll = true; - label = DotJoin(*source, "*"); - } else if (column) { - label = isJoin && source && *source ? DotJoin(*source, *column) : *column; - } else { - label = TStringBuilder() << "column" << Columns.List.size(); + Columns.QualifiedAll = true; + label = DotJoin(*source, "*"); + } else if (column) { + label = isJoin && source && *source ? DotJoin(*source, *column) : *column; + } else { + label = TStringBuilder() << "column" << Columns.List.size(); hasName = false; if (ctx.WarnUnnamedColumns) { ctx.Warning(term->GetPos(), TIssuesIds::YQL_UNNAMED_COLUMN) << "Autogenerated column name " << label << " will be used for expression"; } - } - } + } + } if (!Columns.Add(&label, false, false, true, hasName)) { - ctx.Error(Pos) << "Duplicate column: " << label; - hasError = true; - continue; - } - } - + ctx.Error(Pos) << "Duplicate column: " << label; + hasError = true; + continue; + } + } + CompositeTerms = Y(); if (!hasError && Source->IsCompositeSource() && !Columns.All && !Columns.QualifiedAll && !Columns.List.empty()) { auto compositeSrcPtr = static_cast<TCompositeSelect*>(Source->GetCompositeSource()); @@ -1855,59 +1855,59 @@ private: } } - if (Columns.All || Columns.QualifiedAll) { - Source->AllColumns(); - } - for (const auto& without: Without) { - auto namePtr = without->GetColumnName(); - auto sourcePtr = without->GetSourceName(); - YQL_ENSURE(namePtr && *namePtr); - if (isJoin && !(sourcePtr && *sourcePtr)) { - ctx.Error(without->GetPos()) << "Expected correlation name for WITHOUT in JOIN"; - hasError = true; - continue; - } - } - if (Having && !Having->Init(ctx, src)) { - hasError = true; - } - if (!src->IsCompositeSource() && !Distinct && !Columns.All && src->HasAggregations()) { + if (Columns.All || Columns.QualifiedAll) { + Source->AllColumns(); + } + for (const auto& without: Without) { + auto namePtr = without->GetColumnName(); + auto sourcePtr = without->GetSourceName(); + YQL_ENSURE(namePtr && *namePtr); + if (isJoin && !(sourcePtr && *sourcePtr)) { + ctx.Error(without->GetPos()) << "Expected correlation name for WITHOUT in JOIN"; + hasError = true; + continue; + } + } + if (Having && !Having->Init(ctx, src)) { + hasError = true; + } + if (!src->IsCompositeSource() && !Distinct && !Columns.All && src->HasAggregations()) { WarnIfAliasFromSelectIsUsedInGroupBy(ctx, Terms, GroupBy, GroupByExpr); - /// verify select aggregation compatibility - TVector<TNodePtr> exprs(Terms); - if (Having) { - exprs.push_back(Having); - } - for (const auto& iter: WinSpecs) { - for (const auto& sortSpec: iter.second->OrderBy) { - exprs.push_back(sortSpec->OrderExpr); - } - } - if (!ValidateAllNodesForAggregation(ctx, exprs)) { - hasError = true; - } - } - const auto label = GetLabel(); - for (const auto& sortSpec: OrderBy) { - auto& expr = sortSpec->OrderExpr; - SetLabel(Source->GetLabel()); - OrderByInit = true; - if (!expr->Init(ctx, this)) { - hasError = true; - continue; - } - OrderByInit = false; + /// verify select aggregation compatibility + TVector<TNodePtr> exprs(Terms); + if (Having) { + exprs.push_back(Having); + } + for (const auto& iter: WinSpecs) { + for (const auto& sortSpec: iter.second->OrderBy) { + exprs.push_back(sortSpec->OrderExpr); + } + } + if (!ValidateAllNodesForAggregation(ctx, exprs)) { + hasError = true; + } + } + const auto label = GetLabel(); + for (const auto& sortSpec: OrderBy) { + auto& expr = sortSpec->OrderExpr; + SetLabel(Source->GetLabel()); + OrderByInit = true; + if (!expr->Init(ctx, this)) { + hasError = true; + continue; + } + OrderByInit = false; if (!IsComparableExpression(ctx, expr, AssumeSorted, AssumeSorted ? "ASSUME ORDER BY" : "ORDER BY")) { - hasError = true; - continue; - } - } - SetLabel(label); - + hasError = true; + continue; + } + } + SetLabel(label); + return !hasError; - } - + } + TNodePtr PrepareJoinCoalesce(TContext& ctx, const TNodePtr& base, bool multipleQualifiedAll, const TVector<TString>& coalesceLabels) { const bool isJoin = Source->GetJoin(); const bool needCoalesce = isJoin && ctx.SimpleColumns && diff --git a/ydb/library/yql/sql/v1/sql.cpp b/ydb/library/yql/sql/v1/sql.cpp index ab5a8647885..82d6b0b447f 100644 --- a/ydb/library/yql/sql/v1/sql.cpp +++ b/ydb/library/yql/sql/v1/sql.cpp @@ -982,19 +982,19 @@ private: TNodePtr SubExpr(const TRule_xor_subexpr& node, const TTrailingQuestions& tail); TNodePtr SubExpr(const TRule_mul_subexpr& node, const TTrailingQuestions& tail) { - // mul_subexpr: con_subexpr (DOUBLE_PIPE con_subexpr)*; + // mul_subexpr: con_subexpr (DOUBLE_PIPE con_subexpr)*; auto getNode = [](const TRule_mul_subexpr::TBlock2& b) -> const TRule_con_subexpr& { return b.GetRule_con_subexpr2(); }; return BinOper("Concat", node.GetRule_con_subexpr1(), getNode, node.GetBlock2().begin(), node.GetBlock2().end(), tail); } TNodePtr SubExpr(const TRule_add_subexpr& node, const TTrailingQuestions& tail) { - // add_subexpr: mul_subexpr ((ASTERISK | SLASH | PERCENT) mul_subexpr)*; + // add_subexpr: mul_subexpr ((ASTERISK | SLASH | PERCENT) mul_subexpr)*; auto getNode = [](const TRule_add_subexpr::TBlock2& b) -> const TRule_mul_subexpr& { return b.GetRule_mul_subexpr2(); }; return BinOpList(node.GetRule_mul_subexpr1(), getNode, node.GetBlock2().begin(), node.GetBlock2().end(), tail); } TNodePtr SubExpr(const TRule_bit_subexpr& node, const TTrailingQuestions& tail) { - // bit_subexpr: add_subexpr ((PLUS | MINUS) add_subexpr)*; + // bit_subexpr: add_subexpr ((PLUS | MINUS) add_subexpr)*; auto getNode = [](const TRule_bit_subexpr::TBlock2& b) -> const TRule_add_subexpr& { return b.GetRule_add_subexpr2(); }; return BinOpList(node.GetRule_add_subexpr1(), getNode, node.GetBlock2().begin(), node.GetBlock2().end(), tail); } @@ -1034,19 +1034,19 @@ private: } TNodePtr SubExpr(const TRule_eq_subexpr& node, const TTrailingQuestions& tail) { - // eq_subexpr: neq_subexpr ((LESS | LESS_OR_EQ | GREATER | GREATER_OR_EQ) neq_subexpr)*; + // eq_subexpr: neq_subexpr ((LESS | LESS_OR_EQ | GREATER | GREATER_OR_EQ) neq_subexpr)*; auto getNode = [](const TRule_eq_subexpr::TBlock2& b) -> const TRule_neq_subexpr& { return b.GetRule_neq_subexpr2(); }; return BinOpList(node.GetRule_neq_subexpr1(), getNode, node.GetBlock2().begin(), node.GetBlock2().end(), tail); } TNodePtr SubExpr(const TRule_or_subexpr& node, const TTrailingQuestions& tail) { - // or_subexpr: and_subexpr (AND and_subexpr)*; + // or_subexpr: and_subexpr (AND and_subexpr)*; auto getNode = [](const TRule_or_subexpr::TBlock2& b) -> const TRule_and_subexpr& { return b.GetRule_and_subexpr2(); }; return BinOper("And", node.GetRule_and_subexpr1(), getNode, node.GetBlock2().begin(), node.GetBlock2().end(), tail); } TNodePtr SubExpr(const TRule_and_subexpr& node, const TTrailingQuestions& tail) { - // and_subexpr: xor_subexpr (XOR xor_subexpr)*; + // and_subexpr: xor_subexpr (XOR xor_subexpr)*; auto getNode = [](const TRule_and_subexpr::TBlock2& b) -> const TRule_xor_subexpr& { return b.GetRule_xor_subexpr2(); }; return BinOper("Xor", node.GetRule_xor_subexpr1(), getNode, node.GetBlock2().begin(), node.GetBlock2().end(), tail); } @@ -4581,10 +4581,10 @@ TNodePtr TSqlExpression::CaseRule(const TRule_case_expr& rule) { } TMaybe<TExprOrIdent> TSqlExpression::AtomExpr(const TRule_atom_expr& node, const TTrailingQuestions& tail) { - // atom_expr: - // literal_value - // | bind_parameter - // | lambda + // atom_expr: + // literal_value + // | bind_parameter + // | lambda // | cast_expr // | exists_expr // | case_expr @@ -4594,7 +4594,7 @@ TMaybe<TExprOrIdent> TSqlExpression::AtomExpr(const TRule_atom_expr& node, const // | list_literal // | dict_literal // | struct_literal - // ; + // ; if (node.Alt_case() != TRule_atom_expr::kAltAtomExpr2 && tail.Count) { UnexpectedQuestionToken(tail); return {}; @@ -4878,7 +4878,7 @@ bool TSqlExpression::SqlLambdaExprBody(TContext& ctx, const TRule_lambda_body& n } TNodePtr TSqlExpression::SubExpr(const TRule_con_subexpr& node, const TTrailingQuestions& tail) { - // con_subexpr: unary_subexpr | unary_op unary_subexpr; + // con_subexpr: unary_subexpr | unary_op unary_subexpr; switch (node.Alt_case()) { case TRule_con_subexpr::kAltConSubexpr1: return UnaryExpr(node.GetAlt_con_subexpr1().GetRule_unary_subexpr1(), tail); @@ -4909,7 +4909,7 @@ TNodePtr TSqlExpression::SubExpr(const TRule_con_subexpr& node, const TTrailingQ } TNodePtr TSqlExpression::SubExpr(const TRule_xor_subexpr& node, const TTrailingQuestions& tail) { - // xor_subexpr: eq_subexpr cond_expr?; + // xor_subexpr: eq_subexpr cond_expr?; TNodePtr res(SubExpr(node.GetRule_eq_subexpr1(), node.HasBlock2() ? TTrailingQuestions{} : tail)); if (!res) { return {}; @@ -5232,7 +5232,7 @@ TNodePtr TSqlExpression::BinOpList(const TNode& node, TGetNode getNode, TIter be Ctx.IncrementMonCounter("sql_binary_operations", "Divide"); if (!Ctx.Scoped->PragmaClassicDivision && partialResult) { partialResult = new TCallNodeImpl(pos, "SafeCast", {std::move(partialResult), BuildDataType(pos, "Double")}); - } + } break; case SQLv1LexerTokens::TOKEN_PERCENT: opName = "%"; @@ -5880,10 +5880,10 @@ TSourcePtr TSqlSelect::JoinSource(const TRule_join_source& node) { } bool TSqlSelect::SelectTerm(TVector<TNodePtr>& terms, const TRule_result_column& node) { - // result_column: - // opt_id_prefix ASTERISK + // result_column: + // opt_id_prefix ASTERISK // | expr ((AS an_id) | an_id_pure)? - // ; + // ; switch (node.Alt_case()) { case TRule_result_column::kAltResultColumn1: { auto alt = node.GetAlt_result_column1(); @@ -9157,7 +9157,7 @@ TNodePtr TSqlQuery::PragmaStatement(const TRule_pragma_stmt& stmt, bool& success } } - const bool withConfigure = prefix || normalizedPragma == "file" || normalizedPragma == "folder" || normalizedPragma == "udf"; + const bool withConfigure = prefix || normalizedPragma == "file" || normalizedPragma == "folder" || normalizedPragma == "udf"; static const THashSet<TStringBuf> lexicalScopePragmas = {"classicdivision", "strictjoinkeytypes", "disablestrictjoinkeytypes"}; const bool hasLexicalScope = withConfigure || lexicalScopePragmas.contains(normalizedPragma); for (auto pragmaValue : pragmaValues) { @@ -9197,7 +9197,7 @@ TNodePtr TSqlQuery::PragmaStatement(const TRule_pragma_stmt& stmt, bool& success } if (prefix.empty()) { - if (!TopLevel && !hasLexicalScope) { + if (!TopLevel && !hasLexicalScope) { Error() << "This pragma '" << pragma << "' is not allowed to be used in actions or subqueries"; Ctx.IncrementMonCounter("sql_errors", "BadPragmaValue"); return{}; @@ -9435,13 +9435,13 @@ TNodePtr TSqlQuery::PragmaStatement(const TRule_pragma_stmt& stmt, bool& success return {}; } Ctx.Error(Ctx.Pos()) << *values[0].GetLiteral(); - } else if (normalizedPragma == "classicdivision") { + } else if (normalizedPragma == "classicdivision") { if (values.size() != 1 || !values[0].GetLiteral() || !TryFromString(*values[0].GetLiteral(), Ctx.Scoped->PragmaClassicDivision)) { Error() << "Expected boolean literal as a single argument for: " << pragma; - Ctx.IncrementMonCounter("sql_errors", "BadPragmaValue"); - return {}; - } - Ctx.IncrementMonCounter("sql_pragma", "ClassicDivision"); + Ctx.IncrementMonCounter("sql_errors", "BadPragmaValue"); + return {}; + } + Ctx.IncrementMonCounter("sql_pragma", "ClassicDivision"); } else if (normalizedPragma == "disableunordered") { Ctx.Warning(Ctx.Pos(), TIssuesIds::YQL_DEPRECATED_PRAGMA) << "Use of deprecated DisableUnordered pragma. It will be dropped soon"; |