#pragma once #include "linter.h" #include "settings.h" #include #include #include #include #include #include #include #include #include namespace NYql::NFastCheck { class TCheckState { private: struct TLexerResult { bool Success; NSQLTranslation::TSQLHints Hints; TIssues Issues; }; struct TParserResult { google::protobuf::Message* Msg; TIssues Issues; }; struct TPgParserResult { NYql::TPGParseResult Result; TIssues Issues; }; struct TAstResultCache { TAstParseResult Result; TIssues Issues; }; public: explicit TCheckState(const TChecksRequest& request); ~TCheckState(); ESyntax GetEffectiveSyntax(); const TAstParseResult* TranslateSql(TIssues& issues); const TAstParseResult* TranslatePg(TIssues& issues); const TAstParseResult* TranslateSExpr(TIssues& issues); bool CheckLexer(TIssues& issues); google::protobuf::Message* ParseSql(TIssues& issues); const NYql::TPGParseResult* ParsePg(TIssues& issues); const TAstParseResult* ParseSExpr(TIssues& issues); private: const TChecksRequest& Request_; google::protobuf::Arena Arena_; TMaybe ParsedSettingsCache_; TMaybe LexerCache_; TMaybe ParserCache_; TMaybe PgParserCache_; TMaybe TranslateCache_; }; } // namespace NYql::NFastCheck