#pragma once #include #include #include #include #include #include #include #include namespace NSQLComplete { struct TCompletedToken { TStringBuf Content; size_t SourcePosition; }; enum class ECandidateKind { Keyword, PragmaName, TypeName, FunctionName, HintName, FolderName, TableName, ClusterName, BindingName, UnknownName, }; struct TCandidate { ECandidateKind Kind; TString Content; size_t CursorShift = 0; friend bool operator==(const TCandidate& lhs, const TCandidate& rhs) = default; }; struct TCompletion { TCompletedToken CompletedToken; TVector Candidates; }; class ISqlCompletionEngine { public: using TPtr = THolder; struct TConfiguration { size_t Limit = 256; THashSet IgnoredRules; }; virtual ~ISqlCompletionEngine() = default; virtual TCompletion Complete(TCompletionInput input) = 0; // TODO(YQL-19747): migrate YDB CLI to CompleteAsync virtual NThreading::TFuture CompleteAsync(TCompletionInput input, TEnvironment env = {}) = 0; }; using TLexerSupplier = std::function; ISqlCompletionEngine::TConfiguration MakeYDBConfiguration(); ISqlCompletionEngine::TConfiguration MakeYQLConfiguration(); ISqlCompletionEngine::TPtr MakeSqlCompletionEngine( TLexerSupplier lexer, INameService::TPtr names, ISqlCompletionEngine::TConfiguration configuration = {}); } // namespace NSQLComplete