summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/sql_call_expr.h
diff options
context:
space:
mode:
authorvvvv <[email protected]>2024-11-07 12:29:36 +0300
committervvvv <[email protected]>2024-11-07 13:49:47 +0300
commitd4c258e9431675bab6745c8638df6e3dfd4dca6b (patch)
treeb5efcfa11351152a4c872fccaea35749141c0b11 /yql/essentials/sql/v1/sql_call_expr.h
parent13a4f274caef5cfdaf0263b24e4d6bdd5521472b (diff)
Moved other yql/essentials libs YQL-19206
init commit_hash:7d4c435602078407bbf20dd3c32f9c90d2bbcbc0
Diffstat (limited to 'yql/essentials/sql/v1/sql_call_expr.h')
-rw-r--r--yql/essentials/sql/v1/sql_call_expr.h98
1 files changed, 98 insertions, 0 deletions
diff --git a/yql/essentials/sql/v1/sql_call_expr.h b/yql/essentials/sql/v1/sql_call_expr.h
new file mode 100644
index 00000000000..9b9d39b81a8
--- /dev/null
+++ b/yql/essentials/sql/v1/sql_call_expr.h
@@ -0,0 +1,98 @@
+#pragma once
+
+#include "sql_translation.h"
+
+namespace NSQLTranslationV1 {
+
+TNodePtr BuildSqlCall(TContext& ctx, TPosition pos, const TString& module, const TString& name, const TVector<TNodePtr>& args,
+ TNodePtr positionalArgs, TNodePtr namedArgs, TNodePtr customUserType, const TDeferredAtom& typeConfig, TNodePtr runConfig);
+
+using namespace NSQLv1Generated;
+
+class TSqlCallExpr: public TSqlTranslation {
+public:
+ TSqlCallExpr(TContext& ctx, NSQLTranslation::ESqlMode mode)
+ : TSqlTranslation(ctx, mode)
+ {
+ }
+
+ TSqlCallExpr(const TSqlCallExpr& call, const TVector<TNodePtr>& args)
+ : TSqlTranslation(call.Ctx, call.Mode)
+ , Pos(call.Pos)
+ , Func(call.Func)
+ , Module(call.Module)
+ , Node(call.Node)
+ , Args(args)
+ , AggMode(call.AggMode)
+ , DistinctAllowed(call.DistinctAllowed)
+ , UsingCallExpr(call.UsingCallExpr)
+ , IsExternalCall(call.IsExternalCall)
+ , CallConfig(call.CallConfig)
+ {
+ }
+
+ void AllowDistinct() {
+ DistinctAllowed = true;
+ }
+
+ void InitName(const TString& name);
+ void InitExpr(const TNodePtr& expr);
+
+ bool Init(const TRule_using_call_expr& node);
+ bool Init(const TRule_value_constructor& node);
+ bool Init(const TRule_invoke_expr& node);
+ bool ConfigureExternalCall(const TRule_external_call_settings& node);
+ void IncCounters();
+
+ TNodePtr BuildUdf(bool forReduce);
+
+ TNodePtr BuildCall();
+
+ TPosition GetPos() const {
+ return Pos;
+ }
+
+ const TVector<TNodePtr>& GetArgs() const {
+ return Args;
+ }
+
+ void SetOverWindow() {
+ YQL_ENSURE(AggMode == EAggregateMode::Normal);
+ AggMode = EAggregateMode::OverWindow;
+ }
+
+ void SetOverWindowDistinct() {
+ YQL_ENSURE(AggMode == EAggregateMode::Distinct);
+ AggMode = EAggregateMode::OverWindowDistinct;
+ }
+
+ void SetIgnoreNulls() {
+ Func += "_IgnoreNulls";
+ }
+
+ bool IsExternal() {
+ return IsExternalCall;
+ }
+
+private:
+ bool ExtractCallParam(const TRule_external_call_param& node);
+ bool FillArg(const TString& module, const TString& func, size_t& idx, const TRule_named_expr& node);
+ bool FillArgs(const TRule_named_expr_list& node);
+
+private:
+ TPosition Pos;
+ TString Func;
+ TString Module;
+ TNodePtr Node;
+ TVector<TNodePtr> Args;
+ TVector<TNodePtr> PositionalArgs;
+ TVector<TNodePtr> NamedArgs;
+ EAggregateMode AggMode = EAggregateMode::Normal;
+ TString WindowName;
+ bool DistinctAllowed = false;
+ bool UsingCallExpr = false;
+ bool IsExternalCall = false;
+ TFunctionConfig CallConfig;
+};
+
+} // namespace NSQLTranslationV1