#include "proto_parser.h" #include #include #include #include #include #if defined(_tsan_enabled_) #include #endif using namespace NYql; namespace NSQLTranslationV1 { #if defined(_tsan_enabled_) TMutex SanitizerSQLTranslationMutex; #endif namespace { void ReportError(NAST::IErrorCollector& err, const TString& name) { err.Error(0, 0, TStringBuilder() << "Parser " << name << " is not supported"); } } // namespace google::protobuf::Message* SqlAST(const TParsers& parsers, const TString& query, const TString& queryName, TIssues& err, size_t maxErrors, bool ansiLexer, google::protobuf::Arena* arena) { NSQLTranslation::TErrorCollectorOverIssues collector(err, maxErrors, queryName); return SqlAST(parsers, query, queryName, collector, ansiLexer, arena); } google::protobuf::Message* SqlAST(const TParsers& parsers, const TString& query, const TString& queryName, NAST::IErrorCollector& err, bool ansiLexer, google::protobuf::Arena* arena) { YQL_ENSURE(arena); #if defined(_tsan_enabled_) TGuard grd(SanitizerSQLTranslationMutex); #endif if (ansiLexer) { google::protobuf::Message* res = nullptr; if (parsers.Antlr4Ansi) { res = parsers.Antlr4Ansi->MakeParser()->Parse(query, queryName, err, arena); if (!res) { return res; } } else { ReportError(err, "antlr4_ansi"); return nullptr; } return res; } else { google::protobuf::Message* res = nullptr; if (parsers.Antlr4) { res = parsers.Antlr4->MakeParser()->Parse(query, queryName, err, arena); if (!res) { return res; } } else { ReportError(err, "antlr4"); return nullptr; } return res; } } google::protobuf::Message* SqlAST(const TParsers& parsers, const TString& query, const TString& queryName, NYql::TIssues& err, size_t maxErrors, bool ansiLexer, bool antlr4, google::protobuf::Arena* arena) { YQL_ENSURE(antlr4); return SqlAST(parsers, query, queryName, err, maxErrors, ansiLexer, arena); } google::protobuf::Message* SqlAST(const TParsers& parsers, const TString& query, const TString& queryName, NAST::IErrorCollector& err, bool ansiLexer, bool antlr4, google::protobuf::Arena* arena) { YQL_ENSURE(antlr4); return SqlAST(parsers, query, queryName, err, ansiLexer, arena); } } // namespace NSQLTranslationV1