diff options
| author | YDBot <[email protected]> | 2025-10-07 00:52:12 +0000 |
|---|---|---|
| committer | YDBot <[email protected]> | 2025-10-07 00:52:12 +0000 |
| commit | 0f7e91aa5ae33d20f2ef0d5cb2c80bb66924417f (patch) | |
| tree | 6307f61a54aea3be0afeeaf766a30597fe047e81 /yql/essentials/tools/sql2yql/sql2yql.cpp | |
| parent | 86c7a4b4c37e709428ebc61fb8a6e79c7260374c (diff) | |
| parent | 3ab4f52f9654e20e38084313aa6861cb0c17eb1d (diff) | |
Sync branches 251007-0050
Diffstat (limited to 'yql/essentials/tools/sql2yql/sql2yql.cpp')
| -rw-r--r-- | yql/essentials/tools/sql2yql/sql2yql.cpp | 64 |
1 files changed, 31 insertions, 33 deletions
diff --git a/yql/essentials/tools/sql2yql/sql2yql.cpp b/yql/essentials/tools/sql2yql/sql2yql.cpp index 2e34c196694..5d891333c74 100644 --- a/yql/essentials/tools/sql2yql/sql2yql.cpp +++ b/yql/essentials/tools/sql2yql/sql2yql.cpp @@ -22,7 +22,6 @@ #include <yql/essentials/parser/pg_wrapper/interface/context.h> #include <yql/essentials/providers/common/gateways_utils/gateways_utils.h> - #include <library/cpp/getopt/last_getopt.h> #include <library/cpp/testing/unittest/registar.h> @@ -107,8 +106,7 @@ bool TestFormat( const TString& queryFile, const NYql::TAstParseResult& parseRes, const TString& outFileName, - const bool checkDoubleFormatting -) { + const bool checkDoubleFormatting) { TStringStream yqlProgram; parseRes.Root->PrettyPrintTo(yqlProgram, NYql::TAstPrintFlags::PerLine | NYql::TAstPrintFlags::ShortQuote); @@ -128,7 +126,7 @@ bool TestFormat( NYql::TAstParseResult frmParseRes = NSQLTranslation::SqlToYql(translators, frmQuery, settings); if (!frmParseRes.Issues.Empty()) { frmParseRes.Issues.PrintWithProgramTo(Cerr, queryFile, frmQuery); - if (AnyOf(frmParseRes.Issues, [](const auto& issue) { return issue.GetSeverity() == NYql::TSeverityIds::S_ERROR;})) { + if (AnyOf(frmParseRes.Issues, [](const auto& issue) { return issue.GetSeverity() <= NYql::TSeverityIds::S_ERROR; })) { return false; } } @@ -204,7 +202,6 @@ private: char Delim_; }; - void ParseProtoConfig(const TString& cfgFile, google::protobuf::Message* config) { TString configData = TFileInput(cfgFile).ReadAll(); @@ -221,7 +218,6 @@ static THolder<TMessage> ParseProtoConfig(const TString& cfgFile) { return config; } - int BuildAST(int argc, char* argv[]) { NLastGetopt::TOpts opts = NLastGetopt::TOpts::Default(); @@ -273,27 +269,26 @@ int BuildAST(int argc, char* argv[]) { opts.AddLongOption("test-antlr4", "check antlr4 parser").NoArgument(); opts.AddLongOption("test-lexers", "check other lexers").NoArgument(); opts.AddLongOption("test-complete", "check completion engine").NoArgument(); + opts.AddLongOption("test-syntax-ambiguity", "test syntax ambiguity").NoArgument(); + opts.AddLongOption("debug-syntax-ambiguity", "debug syntax ambiguity").NoArgument(); opts.AddLongOption("format-output", "Saves formatted query to it").RequiredArgument("format-output").StoreResult(&outFileNameFormat); opts.AddLongOption("langver", "Set current language version").Optional().RequiredArgument("VER").Handler1T<TString>(langVerHandler); opts.AddLongOption("mem-limit", "Set memory limit in megabytes").Handler1T<ui32>(0, NYql::SetAddressSpaceLimit); - opts.AddLongOption("gateways-cfg", "Gateways configuration file").Optional().RequiredArgument("FILE") - .Handler1T<TString>([&gatewaysConfig, &clusterMapping](const TString& file) { - gatewaysConfig = ParseProtoConfig<NYql::TGatewaysConfig>(file); - GetClusterMappingFromGateways(*gatewaysConfig, clusterMapping); - }); - opts.AddLongOption("pg-ext", "Pg extensions config file").Optional().RequiredArgument("FILE") - .Handler1T<TString>([](const TString& file) { - - auto pgExtConfig = ParseProtoConfig<NYql::NProto::TPgExtensions>(file); - if (!pgExtConfig) { - throw yexception() << "Bad format of config file " << file; - } - TVector<NYql::NPg::TExtensionDesc> extensions; - NYql::PgExtensionsFromProto(*pgExtConfig, extensions); - NYql::NPg::RegisterExtensions(extensions, true, - *NSQLTranslationPG::CreateExtensionSqlParser(), - NKikimr::NMiniKQL::CreateExtensionLoader().get()); - }); + opts.AddLongOption("gateways-cfg", "Gateways configuration file").Optional().RequiredArgument("FILE").Handler1T<TString>([&gatewaysConfig, &clusterMapping](const TString& file) { + gatewaysConfig = ParseProtoConfig<NYql::TGatewaysConfig>(file); + GetClusterMappingFromGateways(*gatewaysConfig, clusterMapping); + }); + opts.AddLongOption("pg-ext", "Pg extensions config file").Optional().RequiredArgument("FILE").Handler1T<TString>([](const TString& file) { + auto pgExtConfig = ParseProtoConfig<NYql::NProto::TPgExtensions>(file); + if (!pgExtConfig) { + throw yexception() << "Bad format of config file " << file; + } + TVector<NYql::NPg::TExtensionDesc> extensions; + NYql::PgExtensionsFromProto(*pgExtConfig, extensions); + NYql::NPg::RegisterExtensions(extensions, true, + *NSQLTranslationPG::CreateExtensionSqlParser(), + NKikimr::NMiniKQL::CreateExtensionLoader().get()); + }); opts.SetFreeArgDefaultTitle("query file"); opts.AddHelpOption(); @@ -321,14 +316,17 @@ int BuildAST(int argc, char* argv[]) { lexers.Antlr4 = NSQLTranslationV1::MakeAntlr4LexerFactory(); lexers.Antlr4Ansi = NSQLTranslationV1::MakeAntlr4AnsiLexerFactory(); NSQLTranslationV1::TParsers parsers; - parsers.Antlr4 = NSQLTranslationV1::MakeAntlr4ParserFactory(); - parsers.Antlr4Ansi = NSQLTranslationV1::MakeAntlr4AnsiParserFactory(); + parsers.Antlr4 = NSQLTranslationV1::MakeAntlr4ParserFactory( + res.Has("test-syntax-ambiguity"), + res.Has("debug-syntax-ambiguity")); + parsers.Antlr4Ansi = NSQLTranslationV1::MakeAntlr4AnsiParserFactory( + res.Has("test-syntax-ambiguity"), + res.Has("debug-syntax-ambiguity")); NSQLTranslation::TTranslators translators( nullptr, NSQLTranslationV1::MakeTranslator(lexers, parsers), - NSQLTranslationPG::MakeTranslator() - ); + NSQLTranslationPG::MakeTranslator()); TVector<TString> queries; int errors = 0; @@ -365,7 +363,7 @@ int BuildAST(int argc, char* argv[]) { queries.push_back(queryString); } - for (const auto& query: queries) { + for (const auto& query : queries) { if (query.empty()) { continue; } @@ -400,7 +398,7 @@ int BuildAST(int argc, char* argv[]) { issues.PrintTo(Cerr); } - bool hasError = AnyOf(issues, [](const auto& issue) { return issue.GetSeverity() == NYql::TSeverityIds::S_ERROR;}); + bool hasError = AnyOf(issues, [](const auto& issue) { return issue.GetSeverity() == NYql::TSeverityIds::S_ERROR; }); if (hasError) { ++errors; } @@ -413,7 +411,7 @@ int BuildAST(int argc, char* argv[]) { } else { if (res.Has("tree") || res.Has("diff") || res.Has("dump")) { google::protobuf::Message* ast(NSQLTranslation::SqlAST(translators, query, queryFile, parseRes.Issues, - NSQLTranslation::SQL_MAX_PARSER_ERRORS, settings)); + NSQLTranslation::SQL_MAX_PARSER_ERRORS, settings)); if (ast) { if (res.Has("tree")) { out << ast->DebugString() << Endl; @@ -430,7 +428,7 @@ int BuildAST(int argc, char* argv[]) { NSQLTranslation::TSQLHints hints; auto lexer = SqlLexer(translators, query, parseRes.Issues, settings); if (lexer && CollectSqlHints(*lexer, query, queryFile, settings.File, hints, parseRes.Issues, - settings.MaxErrors, settings.Antlr4Parser)) { + settings.MaxErrors, settings.Antlr4Parser)) { parseRes = NSQLTranslation::SqlASTToYql(translators, query, *ast, hints, settings); } } @@ -455,7 +453,7 @@ int BuildAST(int argc, char* argv[]) { bool hasError = false; if (!parseRes.Issues.Empty()) { - hasError = AnyOf(parseRes.Issues, [](const auto& issue) { return issue.GetSeverity() == NYql::TSeverityIds::S_ERROR;}); + hasError = AnyOf(parseRes.Issues, [](const auto& issue) { return issue.GetSeverity() <= NYql::TSeverityIds::S_ERROR; }); if (hasError || !noDebug) { parseRes.Issues.PrintWithProgramTo(Cerr, queryFile, query); |
