#pragma once #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, UnknownName, }; struct TCandidate { ECandidateKind Kind; TString Content; 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; }; virtual ~ISqlCompletionEngine() = default; virtual TCompletion Complete(TCompletionInput input) = 0; // TODO(YQL-19747): migrate YDB CLI to CompleteAsync virtual NThreading::TFuture CompleteAsync(TCompletionInput input) = 0; }; using TLexerSupplier = std::function; ISqlCompletionEngine::TPtr MakeSqlCompletionEngine( TLexerSupplier lexer, INameService::TPtr names, ISqlCompletionEngine::TConfiguration configuration = {}); } // namespace NSQLComplete