#pragma once #include #include #include #include #include #include #include #include #include namespace NSQLComplete { struct TClusterContext { TString Provider; TString Name; friend bool operator==(const TClusterContext& lhs, const TClusterContext& rhs) = default; }; struct TFunctionContext { TString Name; size_t ArgumentNumber = 0; TMaybe Arg0 = Nothing(); TMaybe Arg1 = Nothing(); TMaybe Cluster = Nothing(); friend bool operator==(const TFunctionContext& lhs, const TFunctionContext& rhs) = default; }; // TODO(YQL-19747): Try to refactor to use Map/Set data structures struct TColumnContext { TVector> Tables; TVector Columns; THashMap> WithoutByTableAlias; [[nodiscard]] bool IsAsterisk() const; TColumnContext ExtractAliased(TMaybe alias); TColumnContext Renamed(TStringBuf alias) &&; friend bool operator==(const TColumnContext& lhs, const TColumnContext& rhs) = default; friend TColumnContext operator|(TColumnContext lhs, TColumnContext rhs); static TColumnContext Asterisk(); }; struct TGlobalContext { TMaybe Use; TVector Names; TMaybe EnclosingFunction; TMaybe Column; }; // TODO(YQL-19747): Make it thread-safe to make ISqlCompletionEngine thread-safe. class IGlobalAnalysis { public: using TPtr = THolder; virtual ~IGlobalAnalysis() = default; virtual TGlobalContext Analyze(TCompletionInput input, TEnvironment env) = 0; }; IGlobalAnalysis::TPtr MakeGlobalAnalysis(); } // namespace NSQLComplete