#pragma once #include "input.h" #include #include #include #include #include #include #include namespace NSQLComplete { using TNamedNode = std::variant< SQLv1::ExprContext*, NYT::TNode, std::monostate>; struct TNamedNodeRef { TString Name; TPosition Position; friend bool operator==(const TNamedNodeRef& lhs, const TNamedNodeRef& rhs) = default; friend bool operator!=(const TNamedNodeRef& lhs, const TNamedNodeRef& rhs) = default; }; class INamedNodes { public: using TPtr = THolder; virtual ~INamedNodes() = default; [[nodiscard]] virtual const TNamedNode* Resolve(const TNamedNodeRef& ref) const = 0; virtual void Dump(IOutputStream& out) const = 0; }; TMaybe GetNamedNodeRef(SQLv1::Bind_parameterContext* ctx); INamedNodes::TPtr ResolveNamedNodes(TParsedInput input, const TEnvironment& env); } // namespace NSQLComplete template <> struct THash { inline size_t operator()(const NSQLComplete::TNamedNodeRef& x) const { return THash>()( std::tie(x.Name, x.Position)); } };