#pragma once #include "configuration.h" #include #include #include #include #include #include #include #include #include #include namespace NSQLComplete { struct TCompletedToken { TStringBuf Content; size_t SourcePosition = 0; }; enum class ECandidateKind { Keyword, PragmaName, TypeName, FunctionName, HintName, FolderName, TableName, ClusterName, ColumnName, BindingName, UnknownName, }; struct TCandidate { ECandidateKind Kind; TString Content; size_t CursorShift = 0; TMaybe Documentation = Nothing(); friend bool operator==(const TCandidate& lhs, const TCandidate& rhs) = default; TString FilterText() const; }; struct TCompletion { TCompletedToken CompletedToken; TVector Candidates; }; // TODO(YQL-19747): Make it thread-safe. class ISqlCompletionEngine { public: using TPtr = THolder; virtual ~ISqlCompletionEngine() = default; virtual NThreading::TFuture Complete(TCompletionInput input, TEnvironment env = {}) = 0; virtual NThreading::TFuture // TODO(YQL-19747): Migrate YDB CLI to `Complete` method CompleteAsync(TCompletionInput input, TEnvironment env = {}) = 0; }; using TLexerSupplier = std::function; ISqlCompletionEngine::TPtr MakeSqlCompletionEngine( TLexerSupplier lexer, INameService::TPtr names, TConfiguration configuration = {}, IRanking::TPtr ranking = nullptr); } // namespace NSQLComplete