From 96bddf8336a6ca765ee3141049197b8bff1810b5 Mon Sep 17 00:00:00 2001 From: vitya-smirnov Date: Mon, 6 Oct 2025 09:00:56 +0300 Subject: YQL-20116: Introduce ANTLR4 ambiguity detection - Ignored 2 known ambiguities. - Tested tools. commit_hash:9e29bb2f876dabc68293b3e5c26a470d373506ae --- yql/essentials/tools/sql2yql/sql2yql.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'yql/essentials/tools/sql2yql/sql2yql.cpp') diff --git a/yql/essentials/tools/sql2yql/sql2yql.cpp b/yql/essentials/tools/sql2yql/sql2yql.cpp index 2e34c196694..ec567045125 100644 --- a/yql/essentials/tools/sql2yql/sql2yql.cpp +++ b/yql/essentials/tools/sql2yql/sql2yql.cpp @@ -128,7 +128,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; } } @@ -273,6 +273,8 @@ 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(langVerHandler); opts.AddLongOption("mem-limit", "Set memory limit in megabytes").Handler1T(0, NYql::SetAddressSpaceLimit); @@ -321,8 +323,12 @@ 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, @@ -455,7 +461,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); -- cgit v1.3 From f20e9ebc5b0e69419f9a6ca6662a7cab8a1cb764 Mon Sep 17 00:00:00 2001 From: robot-piglet Date: Mon, 6 Oct 2025 19:59:57 +0300 Subject: Intermediate changes commit_hash:ab4976b763ebd56a8961ed2ba5e9f289926a0086 --- .../arrow_kernels_dump/arrow_kernels_dump.cpp | 2 +- yql/essentials/tools/arrow_kernels_dump/ya.make | 2 + yql/essentials/tools/astdiff/astdiff.cpp | 22 +- yql/essentials/tools/astdiff/ya.make | 2 + yql/essentials/tools/langver_dump/langver_dump.cpp | 7 +- yql/essentials/tools/langver_dump/test/test.py | 12 +- yql/essentials/tools/langver_dump/ya.make | 2 + yql/essentials/tools/minirun/minirun.cpp | 7 +- yql/essentials/tools/minirun/ya.make | 2 + yql/essentials/tools/pg-make-test/__main__.py | 59 ++- .../tools/pg_catalog_dump/pg_catalog_dump.cpp | 36 +- yql/essentials/tools/pg_catalog_dump/ya.make | 2 + yql/essentials/tools/pgrun/pgrun.cpp | 249 +++++----- yql/essentials/tools/pgrun/ya.make | 2 + yql/essentials/tools/purebench/purebench.cpp | 67 +-- yql/essentials/tools/purebench/test/test.py | 3 +- yql/essentials/tools/purebench/ya.make | 2 + yql/essentials/tools/sql2yql/sql2yql.cpp | 54 +- yql/essentials/tools/sql2yql/ya.make | 2 + .../tools/sql_formatter/sql_formatter.cpp | 14 +- yql/essentials/tools/sql_formatter/ya.make | 2 + .../sql_functions_dump/sql_functions_dump.cpp | 7 +- .../tools/sql_functions_dump/test/test.py | 12 +- yql/essentials/tools/sql_functions_dump/ya.make | 2 + yql/essentials/tools/types_dump/test/test.py | 12 +- yql/essentials/tools/types_dump/types_dump.cpp | 7 +- yql/essentials/tools/types_dump/ya.make | 2 + yql/essentials/tools/udf_dep_stub/ya.make | 2 + yql/essentials/tools/udf_probe/udf_probe.cpp | 4 +- yql/essentials/tools/udf_probe/ya.make | 2 + yql/essentials/tools/udf_resolver/discover.cpp | 18 +- yql/essentials/tools/udf_resolver/discover.h | 6 +- yql/essentials/tools/udf_resolver/udf_resolver.cpp | 281 ++++++----- yql/essentials/tools/udf_resolver/ya.make | 2 + yql/essentials/tools/yql_complete/ya.make | 2 + yql/essentials/tools/yql_facade_run/ya.make | 2 + .../tools/yql_facade_run/yql_facade_run.cpp | 351 ++++++------- .../tools/yql_facade_run/yql_facade_run.h | 54 +- yql/essentials/tools/yql_highlight/generator.cpp | 44 +- yql/essentials/tools/yql_highlight/generator.h | 16 +- .../tools/yql_highlight/generator_highlight_js.cpp | 190 +++---- .../tools/yql_highlight/generator_highlight_js.h | 2 +- .../tools/yql_highlight/generator_json.cpp | 10 +- .../tools/yql_highlight/generator_json.h | 2 +- .../tools/yql_highlight/generator_monarch.cpp | 372 +++++++------- .../tools/yql_highlight/generator_monarch.h | 2 +- .../tools/yql_highlight/generator_textmate.cpp | 546 ++++++++++----------- .../tools/yql_highlight/generator_textmate.h | 4 +- .../tools/yql_highlight/generator_vim.cpp | 280 +++++------ yql/essentials/tools/yql_highlight/generator_vim.h | 2 +- .../tools/yql_highlight/highlighting.cpp | 12 +- yql/essentials/tools/yql_highlight/highlighting.h | 20 +- yql/essentials/tools/yql_highlight/json.cpp | 16 +- yql/essentials/tools/yql_highlight/json.h | 2 +- yql/essentials/tools/yql_highlight/ya.make | 2 + .../tools/yql_highlight/yqls_highlight.cpp | 168 +++---- .../tools/yql_highlight/yqls_highlight.h | 2 +- yql/essentials/tools/yql_linter/ya.make | 2 + yql/essentials/tools/yql_linter/yql_linter.cpp | 28 +- 59 files changed, 1530 insertions(+), 1508 deletions(-) (limited to 'yql/essentials/tools/sql2yql/sql2yql.cpp') diff --git a/yql/essentials/tools/arrow_kernels_dump/arrow_kernels_dump.cpp b/yql/essentials/tools/arrow_kernels_dump/arrow_kernels_dump.cpp index 9c7778bfa70..a12b9b8781d 100644 --- a/yql/essentials/tools/arrow_kernels_dump/arrow_kernels_dump.cpp +++ b/yql/essentials/tools/arrow_kernels_dump/arrow_kernels_dump.cpp @@ -5,7 +5,7 @@ #include #include -int main(int argc, char **argv) { +int main(int argc, char** argv) { Y_UNUSED(argc); Cerr << TFsPath(argv[0]).GetName() << " ABI version: " << NKikimr::NUdf::CurrentAbiVersionStr() << Endl; diff --git a/yql/essentials/tools/arrow_kernels_dump/ya.make b/yql/essentials/tools/arrow_kernels_dump/ya.make index 95b00f95b25..29659ab6725 100644 --- a/yql/essentials/tools/arrow_kernels_dump/ya.make +++ b/yql/essentials/tools/arrow_kernels_dump/ya.make @@ -1,5 +1,7 @@ PROGRAM() +ENABLE(YQL_STYLE_CPP) + SRCS( arrow_kernels_dump.cpp ) diff --git a/yql/essentials/tools/astdiff/astdiff.cpp b/yql/essentials/tools/astdiff/astdiff.cpp index f35b04bbf34..2414bb71a0a 100644 --- a/yql/essentials/tools/astdiff/astdiff.cpp +++ b/yql/essentials/tools/astdiff/astdiff.cpp @@ -29,11 +29,10 @@ std::string CalculateDiff(const TString& oldAst, const TString& newAst) { return ss.str(); } - const int DIFF_LINES_LIMIT = 16; void DumpSmallNodes(const TExprNode* rootOne, const TExprNode* rootTwo) { - const auto isDumpSmall = [] (const TString& dump) { + const auto isDumpSmall = [](const TString& dump) { return std::count(dump.begin(), dump.end(), '\n') < DIFF_LINES_LIMIT; }; const auto rootOneDump = rootOne->Dump(); @@ -45,10 +44,11 @@ void DumpSmallNodes(const TExprNode* rootOne, const TExprNode* rootTwo) { return; } - Cerr << rootOneDump << '\n' << rootTwoDump; + Cerr << rootOneDump << '\n' + << rootTwoDump; } -int Main(int argc, const char *argv[]) +int Main(int argc, const char* argv[]) { if (argc != 3) { PrintProgramSvnVersion(); @@ -103,17 +103,20 @@ int Main(int argc, const char *argv[]) if (rootOne->Type() != rootTwo->Type()) { Cerr << "Node in " << fileOne << " at [" << rootOnePos.Row << ":" << rootOnePos.Column << "] type is " << rootOne->Type() << Endl; Cerr << "Node in " << fileTwo << " at [" << rootTwoPos.Row << ":" << rootTwoPos.Column << "] type is " << rootTwo->Type() << Endl; - Cerr << "\nFile diff:\n" << diff; + Cerr << "\nFile diff:\n" + << diff; } else if (rootOne->ChildrenSize() != rootTwo->ChildrenSize()) { Cerr << "Node '" << rootOne->Content() << "' in " << fileOne << " at [" << rootOnePos.Row << ":" << rootOnePos.Column << "] has " << rootOne->ChildrenSize() << " children." << Endl; Cerr << "Node '" << rootTwo->Content() << "' in " << fileTwo << " at [" << rootTwoPos.Row << ":" << rootTwoPos.Column << "] has " << rootTwo->ChildrenSize() << " children." << Endl; DumpSmallNodes(rootOne, rootTwo); - Cerr << "\nFile diff:\n" << diff; + Cerr << "\nFile diff:\n" + << diff; } else { Cerr << "Node in " << fileOne << " at [" << rootOnePos.Row << ":" << rootOnePos.Column << "]:"; Cerr << "Node in " << fileTwo << " at [" << rootTwoPos.Row << ":" << rootTwoPos.Column << "]:"; DumpSmallNodes(rootOne, rootTwo); - Cerr << "\nFile diff:\n" << diff; + Cerr << "\nFile diff:\n" + << diff; } return 5; } @@ -121,14 +124,13 @@ int Main(int argc, const char *argv[]) return 0; } -int main(int argc, const char *argv[]) { +int main(int argc, const char* argv[]) { NYql::NBacktrace::RegisterKikimrFatalActions(); NYql::NBacktrace::EnableKikimrSymbolize(); try { return Main(argc, argv); - } - catch (...) { + } catch (...) { Cerr << CurrentExceptionMessage() << Endl; return 1; } diff --git a/yql/essentials/tools/astdiff/ya.make b/yql/essentials/tools/astdiff/ya.make index 2facdcd095a..e7e3e193c1a 100644 --- a/yql/essentials/tools/astdiff/ya.make +++ b/yql/essentials/tools/astdiff/ya.make @@ -1,5 +1,7 @@ PROGRAM(astdiff) +ENABLE(YQL_STYLE_CPP) + SRCS( astdiff.cpp ) diff --git a/yql/essentials/tools/langver_dump/langver_dump.cpp b/yql/essentials/tools/langver_dump/langver_dump.cpp index ea048c7377e..b6f92553816 100644 --- a/yql/essentials/tools/langver_dump/langver_dump.cpp +++ b/yql/essentials/tools/langver_dump/langver_dump.cpp @@ -12,7 +12,7 @@ void WriteVersion(NJsonWriter::TBuf& json, TLangVersion ver) { json.WriteString(result); } -int Main(int argc, const char *argv[]) +int Main(int argc, const char* argv[]) { Y_UNUSED(argc); Y_UNUSED(argv); @@ -35,14 +35,13 @@ int Main(int argc, const char *argv[]) return 0; } -int main(int argc, const char *argv[]) { +int main(int argc, const char* argv[]) { NYql::NBacktrace::RegisterKikimrFatalActions(); NYql::NBacktrace::EnableKikimrSymbolize(); try { return Main(argc, argv); - } - catch (...) { + } catch (...) { Cerr << CurrentExceptionMessage() << Endl; return 1; } diff --git a/yql/essentials/tools/langver_dump/test/test.py b/yql/essentials/tools/langver_dump/test/test.py index cf366233197..c2d38143b96 100644 --- a/yql/essentials/tools/langver_dump/test/test.py +++ b/yql/essentials/tools/langver_dump/test/test.py @@ -9,12 +9,8 @@ TOOL_PATH = yatest.common.binary_path('yql/essentials/tools/langver_dump/langver def test_langver_dump(): with open(os.path.join(DATA_PATH, "langver.json")) as f: langver_from_file = json.load(f) - res = yatest.common.execute( - [TOOL_PATH], - check_exit_code=True, - wait=True - ) + res = yatest.common.execute([TOOL_PATH], check_exit_code=True, wait=True) langver_from_tool = json.loads(res.stdout) - assert langver_from_file == langver_from_tool, 'JSON_DIFFER\n' \ - 'File:\n %(langver_from_file)s\n\n' \ - 'Tool:\n %(langver_from_tool)s\n' % locals() + assert langver_from_file == langver_from_tool, ( + 'JSON_DIFFER\n' 'File:\n %(langver_from_file)s\n\n' 'Tool:\n %(langver_from_tool)s\n' % locals() + ) diff --git a/yql/essentials/tools/langver_dump/ya.make b/yql/essentials/tools/langver_dump/ya.make index c89ab5ebd56..725844ff728 100644 --- a/yql/essentials/tools/langver_dump/ya.make +++ b/yql/essentials/tools/langver_dump/ya.make @@ -1,5 +1,7 @@ PROGRAM() +ENABLE(YQL_STYLE_CPP) + SRCS( langver_dump.cpp ) diff --git a/yql/essentials/tools/minirun/minirun.cpp b/yql/essentials/tools/minirun/minirun.cpp index 1282212bb2c..d2887e549a5 100644 --- a/yql/essentials/tools/minirun/minirun.cpp +++ b/yql/essentials/tools/minirun/minirun.cpp @@ -32,13 +32,12 @@ public: } }; -} // NYql +} // namespace NYql -int main(int argc, const char *argv[]) { +int main(int argc, const char* argv[]) { try { return NYql::TMiniRunTool().Main(argc, argv); - } - catch (...) { + } catch (...) { Cerr << CurrentExceptionMessage() << Endl; return 1; } diff --git a/yql/essentials/tools/minirun/ya.make b/yql/essentials/tools/minirun/ya.make index bb1a62dbb63..4dad8f00ed3 100644 --- a/yql/essentials/tools/minirun/ya.make +++ b/yql/essentials/tools/minirun/ya.make @@ -1,5 +1,7 @@ PROGRAM() +ENABLE(YQL_STYLE_CPP) + SUBSCRIBER(g:yql) ALLOCATOR(J) diff --git a/yql/essentials/tools/pg-make-test/__main__.py b/yql/essentials/tools/pg-make-test/__main__.py index e21104e7c7c..4497dda592f 100644 --- a/yql/essentials/tools/pg-make-test/__main__.py +++ b/yql/essentials/tools/pg-make-test/__main__.py @@ -120,7 +120,7 @@ class TestCaseBuilder: statements = list(self.split_out_file(splitted_stmts, outdata, logger)) logger.debug("Matching sql statements to .out file lines") - for (s_sql, s_out) in statements: + for s_sql, s_out in statements: stmt = '\n'.join(str(sql_line) for sql_line in s_sql) only_out_stmts[stmt] += 1 logger.debug( @@ -144,7 +144,9 @@ class TestCaseBuilder: for init_script in init_scripts: logger.debug("Running init script %s '%s'", self.config.runner, init_script) - with open(init_script, 'rb') as f, open(init_out_name, 'wb') as fout, open(init_err_name, 'wb') as ferr: + with open(init_script, 'rb') as f, open(init_out_name, 'wb') as fout, open( + init_err_name, 'wb' + ) as ferr: pi = subprocess.run(runner_args, stdin=f, stdout=fout, stderr=ferr) if pi.returncode != 0: @@ -164,7 +166,7 @@ class TestCaseBuilder: real_statements = list(self.split_out_file(splitted_stmts, out, logger)) logger.debug("Matching sql statements to pgrun's output") - for (s_sql, s_out) in real_statements: + for s_sql, s_out in real_statements: stmt = '\n'.join(str(sql_line) for sql_line in s_sql) logger.debug( "<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n%s\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n%s\n============================", @@ -178,21 +180,31 @@ class TestCaseBuilder: del only_out_stmts[stmt] else: only_pgrun_stmts[stmt] += 1 - reserrfile = reserrfile_base if outfile_idx == 0 else reserrfile_base.with_suffix(reserrfile_base.suffix + ".{0}".format(outfile_idx)) + reserrfile = ( + reserrfile_base + if outfile_idx == 0 + else reserrfile_base.with_suffix(reserrfile_base.suffix + ".{0}".format(outfile_idx)) + ) shutil.move(test_err_name, reserrfile) if only_pgrun_stmts: - logger.info("Statements in pgrun output, but not in out file:\n%s", - "\n--------------------------------\n".join(stmt for stmt in only_pgrun_stmts)) + logger.info( + "Statements in pgrun output, but not in out file:\n%s", + "\n--------------------------------\n".join(stmt for stmt in only_pgrun_stmts), + ) if only_out_stmts: - logger.info("Statements in out file, but not in pgrun output:\n%s", - "\n--------------------------------\n".join(stmt for stmt in only_out_stmts)) + logger.info( + "Statements in out file, but not in pgrun output:\n%s", + "\n--------------------------------\n".join(stmt for stmt in only_out_stmts), + ) stmts_run = 0 stmts = [] outs = [] - assert len(statements) == len(real_statements), f"Incorrect statements split in {test_name}. Statements in out-file: {len(statements)}, statements in pgrun output: {len(real_statements)}" - for ((l_sql, out), (r_sql, res)) in zip(statements, real_statements): + assert len(statements) == len( + real_statements + ), f"Incorrect statements split in {test_name}. Statements in out-file: {len(statements)}, statements in pgrun output: {len(real_statements)}" + for (l_sql, out), (r_sql, res) in zip(statements, real_statements): if l_sql != r_sql: logger.warning("out SQL <> pgrun SQL:\n <: %s\n >: %s", l_sql, r_sql) break @@ -478,7 +490,7 @@ def patch_cases(cases, patches, patchdir): default=INIT_SCRIPTS_CFG, required=False, multiple=False, - type=click.Path(exists=True, dir_okay=False, resolve_path=True, path_type=Path) + type=click.Path(exists=True, dir_okay=False, resolve_path=True, path_type=Path), ) @click.option( "--initscriptsdir", @@ -486,7 +498,7 @@ def patch_cases(cases, patches, patchdir): default=INIT_SCRIPTS_DIR, required=False, multiple=False, - type=click.Path(exists=True, file_okay=False, resolve_path=True, path_type=Path) + type=click.Path(exists=True, file_okay=False, resolve_path=True, path_type=Path), ) @click.option("--skip", "-s", help="Comma-separated list of testsuits to skip", multiple=False, type=click.STRING) @click.option("--runner", help="Test runner", default=RUNNER, required=False, multiple=False, type=click.STRING) @@ -514,7 +526,22 @@ def patch_cases(cases, patches, patchdir): ) @click.option("--debug/--no-debug", help="Logs verbosity", default=False, required=False) @click.version_option(version=svn_version(), prog_name=PROGRAM_NAME) -def cli(cases, srcdir, dstdir, patchdir, udf, initscriptscfg, initscriptsdir, skip, runner, splitter, report, parallel, logfile, debug): +def cli( + cases, + srcdir, + dstdir, + patchdir, + udf, + initscriptscfg, + initscriptsdir, + skip, + runner, + splitter, + report, + parallel, + logfile, + debug, +): setup_logging(logfile, debug) if udf: @@ -553,7 +580,11 @@ def cli(cases, srcdir, dstdir, patchdir, udf, initscriptscfg, initscriptsdir, sk builder = TestCaseBuilder(config) if config.parallel: with Pool() as pool: - results = list(pool.imap_unordered(builder.build, [(test_case, init_scripts.get(test_case.stem) or []) for test_case in cases])) + results = list( + pool.imap_unordered( + builder.build, [(test_case, init_scripts.get(test_case.stem) or []) for test_case in cases] + ) + ) else: results = [builder.build(c) for c in cases] diff --git a/yql/essentials/tools/pg_catalog_dump/pg_catalog_dump.cpp b/yql/essentials/tools/pg_catalog_dump/pg_catalog_dump.cpp index e2daf449722..2a1014eee02 100644 --- a/yql/essentials/tools/pg_catalog_dump/pg_catalog_dump.cpp +++ b/yql/essentials/tools/pg_catalog_dump/pg_catalog_dump.cpp @@ -7,7 +7,7 @@ using namespace NYql; using namespace NJson; -int Main(int argc, const char *argv[]) +int Main(int argc, const char* argv[]) { Y_UNUSED(argc); Y_UNUSED(argv); @@ -27,14 +27,12 @@ int Main(int argc, const char *argv[]) json.WriteKey("strict").WriteBool(desc.IsStrict); const auto& retTypeDesc = NPg::LookupType(desc.ResultType); json.WriteKey("ret_type").WriteString(retTypeDesc.Name); - json.WriteKey("ret_type_fixed").WriteBool(retTypeDesc.PassByValue && - retTypeDesc.TypeLen > 0 && retTypeDesc.TypeLen <= 8); + json.WriteKey("ret_type_fixed").WriteBool(retTypeDesc.PassByValue && retTypeDesc.TypeLen > 0 && retTypeDesc.TypeLen <= 8); if (desc.VariadicType != 0) { const auto& varTypeDesc = NPg::LookupType(desc.VariadicType); - json.WriteKey("var_type").WriteString( varTypeDesc.Name); + json.WriteKey("var_type").WriteString(varTypeDesc.Name); if (varTypeDesc.Name != "any") { - json.WriteKey("var_type_fixed").WriteBool(varTypeDesc.PassByValue && - varTypeDesc.TypeLen > 0 && varTypeDesc.TypeLen <= 8); + json.WriteKey("var_type_fixed").WriteBool(varTypeDesc.PassByValue && varTypeDesc.TypeLen > 0 && varTypeDesc.TypeLen <= 8); } } json.WriteKey("args").BeginList(); @@ -42,8 +40,7 @@ int Main(int argc, const char *argv[]) const auto& argTypeDesc = NPg::LookupType(a); json.BeginObject(); json.WriteKey("arg_type").WriteString(argTypeDesc.Name); - json.WriteKey("arg_type_fixed").WriteBool(argTypeDesc.PassByValue && - argTypeDesc.TypeLen > 0 && argTypeDesc.TypeLen <= 8); + json.WriteKey("arg_type_fixed").WriteBool(argTypeDesc.PassByValue && argTypeDesc.TypeLen > 0 && argTypeDesc.TypeLen <= 8); json.EndObject(); } json.EndList(); @@ -67,8 +64,7 @@ int Main(int argc, const char *argv[]) const auto& argTypeDesc = NPg::LookupType(a); json.BeginObject(); json.WriteKey("arg_type").WriteString(argTypeDesc.Name); - json.WriteKey("arg_type_fixed").WriteBool(argTypeDesc.PassByValue && - argTypeDesc.TypeLen > 0 && argTypeDesc.TypeLen <= 8); + json.WriteKey("arg_type_fixed").WriteBool(argTypeDesc.PassByValue && argTypeDesc.TypeLen > 0 && argTypeDesc.TypeLen <= 8); json.EndObject(); } @@ -87,20 +83,15 @@ int Main(int argc, const char *argv[]) const auto& transDesc = NPg::LookupType(NPg::LookupProc(desc.TransFuncId).ResultType); json.WriteKey("trans_type").WriteString(transDesc.Name); - json.WriteKey("trans_type_fixed").WriteBool(transDesc.PassByValue && - transDesc.TypeLen > 0 && transDesc.TypeLen <= 8); + json.WriteKey("trans_type_fixed").WriteBool(transDesc.PassByValue && transDesc.TypeLen > 0 && transDesc.TypeLen <= 8); - const auto& serializedDesc = NPg::LookupType(NPg::LookupProc(desc.SerializeFuncId ? - desc.SerializeFuncId : desc.TransFuncId).ResultType); + const auto& serializedDesc = NPg::LookupType(NPg::LookupProc(desc.SerializeFuncId ? desc.SerializeFuncId : desc.TransFuncId).ResultType); json.WriteKey("serialized_type").WriteString(serializedDesc.Name); - json.WriteKey("serialized_type_fixed").WriteBool(serializedDesc.PassByValue && - serializedDesc.TypeLen > 0 && serializedDesc.TypeLen <= 8); + json.WriteKey("serialized_type_fixed").WriteBool(serializedDesc.PassByValue && serializedDesc.TypeLen > 0 && serializedDesc.TypeLen <= 8); - const auto& retDesc = NPg::LookupType(NPg::LookupProc(desc.FinalFuncId ? - desc.FinalFuncId : desc.TransFuncId).ResultType); + const auto& retDesc = NPg::LookupType(NPg::LookupProc(desc.FinalFuncId ? desc.FinalFuncId : desc.TransFuncId).ResultType); json.WriteKey("ret_type").WriteString(retDesc.Name); - json.WriteKey("ret_type_fixed").WriteBool(retDesc.PassByValue && - retDesc.TypeLen > 0 && retDesc.TypeLen <= 8); + json.WriteKey("ret_type_fixed").WriteBool(retDesc.PassByValue && retDesc.TypeLen > 0 && retDesc.TypeLen <= 8); json.WriteKey("has_init_value").WriteBool(!desc.InitValue.empty()); json.EndObject(); @@ -113,14 +104,13 @@ int Main(int argc, const char *argv[]) return 0; } -int main(int argc, const char *argv[]) { +int main(int argc, const char* argv[]) { NYql::NBacktrace::RegisterKikimrFatalActions(); NYql::NBacktrace::EnableKikimrSymbolize(); try { return Main(argc, argv); - } - catch (...) { + } catch (...) { Cerr << CurrentExceptionMessage() << Endl; return 1; } diff --git a/yql/essentials/tools/pg_catalog_dump/ya.make b/yql/essentials/tools/pg_catalog_dump/ya.make index d49789a7614..bf170e9f14c 100644 --- a/yql/essentials/tools/pg_catalog_dump/ya.make +++ b/yql/essentials/tools/pg_catalog_dump/ya.make @@ -1,5 +1,7 @@ PROGRAM(pg_catalog_dump) +ENABLE(YQL_STYLE_CPP) + SRCS( pg_catalog_dump.cpp ) diff --git a/yql/essentials/tools/pgrun/pgrun.cpp b/yql/essentials/tools/pgrun/pgrun.cpp index 65e4da83d8e..7f8cfec4a01 100644 --- a/yql/essentials/tools/pgrun/pgrun.cpp +++ b/yql/essentials/tools/pgrun/pgrun.cpp @@ -49,7 +49,7 @@ namespace NMiniKQL = NKikimr::NMiniKQL; const ui32 PRETTY_FLAGS = NYql::TAstPrintFlags::PerLine | NYql::TAstPrintFlags::ShortQuote | NYql::TAstPrintFlags::AdaptArbitraryContent; -enum class EByteaOutput{ +enum class EByteaOutput { hex, escape, }; @@ -66,8 +66,7 @@ bool IsEscapedChar(const TString& s, size_t pos) { } class TStatementIterator final - : public TInputRangeAdaptor -{ + : public TInputRangeAdaptor { enum class State { InOperator, EndOfOperator, @@ -133,8 +132,9 @@ public: const TString* Next() { - if (TStringBuf::npos == Pos_) + if (TStringBuf::npos == Pos_) { return nullptr; + } size_t startPos = Pos_; size_t curPos = Pos_; @@ -186,8 +186,9 @@ public: stmt << RemoveEmptyLines(rawStmt, inStatement); // inv: Pos_ is at the start of next token - if (startPos == endPos) + if (startPos == endPos) { return nullptr; + } stmt << '\n'; Cur_ = stmt; @@ -198,7 +199,6 @@ public: } private: - // States: // - in-operator // - line comment @@ -219,43 +219,45 @@ private: // $tag$, not preceded by alnum char (a bit of simplification here but sufficient) -> tag := tag, next: $ string literal // ; -> current_mode := end-of-operator, next: end-of-operator - // - line comment - // EOL -> next: current_mode + // - line comment + // EOL -> next: current_mode - // - block comment - // /* -> ++depth - // */ -> --depth, if (depth == 0) -> next: current_mode + // - block comment + // /* -> ++depth + // */ -> --depth, if (depth == 0) -> next: current_mode - // - quoted identifier - // " -> next: in-operator + // - quoted identifier + // " -> next: in-operator - // - string literal - // ' -> next: in-operator + // - string literal + // ' -> next: in-operator - // - E string literal - // ' -> if not preceeded by \ next: in-operator + // - E string literal + // ' -> if not preceeded by \ next: in-operator - // - $ string literal - // $tag$ -> next: in-operator + // - $ string literal + // $tag$ -> next: in-operator - // - end-of-operator - // -- -> next: line comment, just once - // /* -> depth := 1, next: block comment - // non-space char -> unget, emit, current_mode := in-operator, next: in-operator + // - end-of-operator + // -- -> next: line comment, just once + // /* -> depth := 1, next: block comment + // non-space char -> unget, emit, current_mode := in-operator, next: in-operator // In every state: // EOS -> emit if consumed part of the input is not empty bool SaveDollarTag() { - if (Pos_ + 1 == Program_.length()) + if (Pos_ + 1 == Program_.length()) { return false; + } auto p = Program_.cbegin() + (Pos_ + 1); - if (std::isdigit(*p)) + if (std::isdigit(*p)) { return false; + } - for (;p != Program_.cend(); ++p) { + for (; p != Program_.cend(); ++p) { if (*p == '$') { auto bp = &Program_[Pos_]; auto l = p - bp; @@ -264,8 +266,9 @@ private: return true; } - if (!(std::isalpha(*p) || std::isdigit(*p) || *p == '_')) + if (!(std::isalpha(*p) || std::isdigit(*p) || *p == '_')) { return false; + } } return false; } @@ -300,8 +303,8 @@ private: switch (Program_[Pos_]) { case '\'': State_ = (!StandardConformingStrings_ || 0 < Pos_ && std::toupper(Program_[Pos_ - 1]) == 'E') - ? State::EscapedStringLiteral - : State::StringLiteral; + ? State::EscapedStringLiteral + : State::StringLiteral; break; case '"': @@ -310,8 +313,8 @@ private: case ';': State_ = Mode_ = IsCopyFromStdin(startPos, Pos_) - ? State::InCopyFromStdin - : State::EndOfOperator; + ? State::InCopyFromStdin + : State::EndOfOperator; break; case '-': @@ -331,8 +334,9 @@ private: case '$': if (Pos_ == 0 || std::isspace(Program_[Pos_ - 1])) { - if (SaveDollarTag()) + if (SaveDollarTag()) { State_ = State::DollarStringLiteral; + } } break; @@ -346,7 +350,7 @@ private: break; case ':': - if (Pos_ == 0 || Program_[Pos_-1] == '\n') { + if (Pos_ == 0 || Program_[Pos_ - 1] == '\n') { State_ = State::InVar; } break; @@ -420,8 +424,9 @@ private: bool LineCommentParser() { Pos_ = Program_.find('\n', Pos_); - if (TString::npos == Pos_) + if (TString::npos == Pos_) { return true; + } ++Pos_; if (Program_.length() == Pos_) { @@ -441,10 +446,11 @@ private: bool BlockCommentParser() { Pos_ = Program_.find_first_of("*/", Pos_); - if (TString::npos == Pos_) + if (TString::npos == Pos_) { return true; + } - switch(Program_[Pos_]) { + switch (Program_[Pos_]) { case '/': if (Pos_ < Program_.length() && Program_[Pos_ + 1] == '*') { ++Depth_; @@ -475,8 +481,9 @@ private: bool QuotedIdentifierParser() { Pos_ = Program_.find('"', Pos_); - if (TString::npos == Pos_) + if (TString::npos == Pos_) { return true; + } ++Pos_; if (Program_.length() == Pos_) { @@ -493,8 +500,9 @@ private: bool StringLiteralParser() { Pos_ = Program_.find('\'', Pos_); - if (TString::npos == Pos_) + if (TString::npos == Pos_) { return true; + } ++Pos_; if (Program_.length() == Pos_) { @@ -511,8 +519,9 @@ private: bool EscapedStringLiteralParser() { Pos_ = Program_.find('\'', Pos_); - if (TString::npos == Pos_) + if (TString::npos == Pos_) { return true; + } if (IsEscapedChar(Program_, Pos_)) { ++Pos_; @@ -536,8 +545,9 @@ private: Pos_ = Program_.find(Tag_, Pos_); - if (TString::npos == Pos_) + if (TString::npos == Pos_) { return true; + } Pos_ += Tag_.length(); if (Program_.length() == Pos_) { @@ -556,8 +566,9 @@ private: bool MetaCommandParser() { Pos_ = Program_.find('\n', Pos_); - if (TString::npos == Pos_) + if (TString::npos == Pos_) { return true; + } ++Pos_; if (Program_.length() == Pos_) { @@ -571,8 +582,9 @@ private: bool InCopyFromStdinParser() { Pos_ = Program_.find("\n\\.\n", Pos_); - if (TString::npos == Pos_) + if (TString::npos == Pos_) { return true; + } Pos_ += 4; return Emit(false); @@ -583,8 +595,9 @@ private: // TODO: validate var name Pos_ = Program_.find('\n', Pos_); - if (TString::npos == Pos_) + if (TString::npos == Pos_) { return true; + } ++Pos_; if (Program_.length() == Pos_) { @@ -670,14 +683,17 @@ TString GetFormattedStmt(const TStringBuf& stmt) { } pos = next_pos + 1; } - if (pos < stmt.length()) + if (pos < stmt.length()) { result += stmt.substr(pos); + } - if (0 < result.length() && '\n' == result.back()) + if (0 < result.length() && '\n' == result.back()) { result.pop_back(); + } - if (0 < result.length() && '\r' == result.back()) + if (0 < result.length() && '\r' == result.back()) { result.pop_back(); + } return result; } @@ -708,8 +724,9 @@ TString GetPgErrorMessage(const TIssue& issue) { auto pos = msg.find(anchor); - if (TString::npos == pos) + if (TString::npos == pos) { return TString(msg); + } return msg.substr(pos + anchor.length()); } @@ -718,7 +735,7 @@ void WriteErrorToStream(const TProgramPtr program) { program->PrintErrorsTo(Cerr); - for (const auto& topIssue: program->Issues()) { + for (const auto& topIssue : program->Issues()) { WalkThroughIssues(topIssue, true, [&](const TIssue& issue, ui16 /*level*/) { const auto msg = GetPgErrorMessage(issue); Cout << msg; @@ -737,10 +754,10 @@ inline const TString FormatBool(const TString& value) static const TString T = "t"; static const TString F = "f"; - return (value == "true") ? T - : (value == "false") ? F - : (value == nullRepr) ? nullRepr - : ythrow yexception() << "Unexpected bool literal: " << value; + return (value == "true") ? T + : (value == "false") ? F + : (value == nullRepr) ? nullRepr + : ythrow yexception() << "Unexpected bool literal: " << value; } inline const TString FormatNumeric(const TString& value) @@ -756,11 +773,11 @@ const TString FormatFloat(const TString& value, std::function ColumnFormatters { - { "bool", FormatBool }, - { "numeric", FormatNumeric }, - { "float4", FormatFloat4 }, - { "float8", FormatFloat8 }, +static const THashMap ColumnFormatters{ + {"bool", FormatBool}, + {"numeric", FormatNumeric}, + {"float4", FormatFloat4}, + {"float8", FormatFloat8}, }; -static const THashSet RightAlignedTypes { +static const THashSet RightAlignedTypes{ "int2", "int4", "int8", @@ -812,11 +829,13 @@ struct TColumn { std::string FormatCell(const TString& data, const TColumn& column, size_t index, size_t numberOfColumns) { const auto delim = (index == 0) ? " " : " | "; - if (column.RightAligned) + if (column.RightAligned) { return fmt::format("{0}{1:>{2}}", delim, data, column.Width); + } - if (index == numberOfColumns - 1) + if (index == numberOfColumns - 1) { return fmt::format("{0}{1}", delim, data); + } return fmt::format("{0}{1:<{2}}", delim, data, column.Width); } @@ -824,8 +843,8 @@ std::string FormatCell(const TString& data, const TColumn& column, size_t index, TString GetCellData(const NYT::TNode& cell, const TColumn& column) { if (column.Type == "bytea") { const auto rawValue = (cell.IsList()) - ? Base64Decode(cell.AsList()[0].AsString()) - : cell.AsString(); + ? Base64Decode(cell.AsList()[0].AsString()) + : cell.AsString(); switch (byteaOutput) { case EByteaOutput::hex: { @@ -845,13 +864,13 @@ TString GetCellData(const NYT::TNode& cell, const TColumn& column) { TString result; ui64 expectedSize = std::accumulate(rawValue.cbegin(), rawValue.cend(), 0U, - [] (ui64 acc, char c) { - return acc + ((c == '\\') - ? 2 - : ((ui8)c < 0x20 || 0x7e < (ui8)c) - ? 4 - : 1); - }); + [](ui64 acc, char c) { + return acc + ((c == '\\') + ? 2 + : ((ui8)c < 0x20 || 0x7e < (ui8)c) + ? 4 + : 1); + }); result.resize(expectedSize); auto p = result.begin(); for (const auto c : rawValue) { @@ -864,7 +883,7 @@ TString GetCellData(const NYT::TNode& cell, const TColumn& column) { *p++ = '\\'; *p++ = ((val >> 6) & 03) + '0'; *p++ = ((val >> 3) & 07) + '0'; - *p++ = (val & 07) + '0'; + *p++ = (val & 07) + '0'; } else { *p++ = c; } @@ -884,7 +903,7 @@ void WriteTableToStream(IOutputStream& stream, const NYT::TNode::TListType& cols TVector columns; TList> formattedData; - for (const auto& col: cols) { + for (const auto& col : cols) { const auto& colName = col[0].AsString(); const auto& colType = col[1][1].AsString(); @@ -900,17 +919,19 @@ void WriteTableToStream(IOutputStream& stream, const NYT::TNode::TListType& cols for (const auto& row : rows) { auto& rowData = formattedData.emplace_back(); - { int i = 0; - for (const auto& cell : row.AsList()) { - auto& c = columns[i]; + { + int i = 0; + for (const auto& cell : row.AsList()) { + auto& c = columns[i]; - const auto cellData = cell.HasValue() ? GetCellData(cell, c) : nullRepr; + const auto cellData = cell.HasValue() ? GetCellData(cell, c) : nullRepr; - rowData.emplace_back(c.Formatter(cellData)); - c.Width = std::max(c.Width, rowData.back().length()); + rowData.emplace_back(c.Formatter(cellData)); + c.Width = std::max(c.Width, rowData.back().length()); - ++i; - }} + ++i; + } + } } if (columns.empty()) { @@ -918,7 +939,8 @@ void WriteTableToStream(IOutputStream& stream, const NYT::TNode::TListType& cols } else { const auto totalTableWidth = std::accumulate(columns.cbegin(), columns.cend(), std::size_t{0}, - [] (const auto& sum, const auto& elem) { return sum + elem.Width; }) + columns.size() * 3 - 1; + [](const auto& sum, const auto& elem) { return sum + elem.Width; }) + + columns.size() * 3 - 1; TString filler(totalTableWidth, '-'); stream << fmt::format(" {0:^{1}} ", columns[0].Name, columns[0].Width); for (size_t i = 1, pos = columns[0].Width + 2; i < columns.size(); ++i) { @@ -928,11 +950,12 @@ void WriteTableToStream(IOutputStream& stream, const NYT::TNode::TListType& cols filler[pos] = '+'; pos += c.Width + 3; } - stream << '\n' << filler; + stream << '\n' + << filler; } for (const auto& row : formattedData) { - stream << '\n'; + stream << '\n'; for (size_t i = 0; i < row.size(); ++i) { stream << FormatCell(row[i], columns[i], i, columns.size()); @@ -948,9 +971,9 @@ std::pair GetYtTableDataPaths(const TFsPath& dataDir, const TS } void CreateYtFileTable(const TFsPath& dataDir, const TString tableName, const TExprNode::TPtr columnsNode, - THashMap& tablesMapping, TExprContext& ctx, const TPosition& pos) { - const auto [dataFilePath, attrFilePath] = - GetYtTableDataPaths(dataDir, tableName); + THashMap& tablesMapping, TExprContext& ctx, const TPosition& pos) { + const auto [dataFilePath, attrFilePath] = + GetYtTableDataPaths(dataDir, tableName); TFile dataFile{dataFilePath, CreateNew}; TFile attrFile{attrFilePath, CreateNew}; @@ -963,18 +986,18 @@ void CreateYtFileTable(const TFsPath& dataDir, const TString tableName, const TE TStringBuilder ysonType; ysonType << "[\"StructType\";["; - for (const auto &columnNode : columnsNode->Children()) { - const auto &colName = columnNode->Child(0)->Content(); - const auto &colTypeNode = columnNode->Child(1); + for (const auto& columnNode : columnsNode->Children()) { + const auto& colName = columnNode->Child(0)->Content(); + const auto& colTypeNode = columnNode->Child(1); - columnOrder.AddColumn(TString(colName)); + columnOrder.AddColumn(TString(colName)); - ysonType << fmt::format("[\"{0}\";[\"{1}\";\"{2}\";];];", - colName, colTypeNode->Content(), - colTypeNode->Child(0)->Content()); + ysonType << fmt::format("[\"{0}\";[\"{1}\";\"{2}\";];];", + colName, colTypeNode->Content(), + colTypeNode->Child(0)->Content()); } ysonType << "];]"; - const auto *typeNode = NCommon::ParseTypeFromYson(TStringBuf(ysonType), ctx, pos); + const auto* typeNode = NCommon::ParseTypeFromYson(TStringBuf(ysonType), ctx, pos); rowSpec->SetType(typeNode->Cast()); rowSpec->SetColumnOrder(std::move(columnOrder)); @@ -1054,9 +1077,8 @@ void WriteToYtTableScheme( Y_ENSURE(columnsNode); CreateYtFileTable(tempDir.Path(), TString(tableName), columnsNode->ChildPtr(1), - yqlNativeServices->GetTablesMapping(), ctx, writeNode.Pos(ctx)); - } - else if (mode == "drop") { + yqlNativeServices->GetTablesMapping(), ctx, writeNode.Pos(ctx)); + } else if (mode == "drop") { DeleteYtFileTable(tempDir.Path(), TString(tableName), yqlNativeServices->GetTablesMapping()); } } @@ -1095,7 +1117,7 @@ void FillTablesMapping(const TFsPath& dataDir, THashMap& table dataDir.List(children); bool regMsgLogged = false; - for (const auto& f: children) { + for (const auto& f : children) { if (f.GetExtension() != "attr") { continue; } @@ -1158,7 +1180,7 @@ int Main(int argc, char* argv[]) fileStorage = WithAsync(fileStorage); auto funcRegistry = CreateFunctionRegistry(&NYql::NBacktrace::KikimrBackTrace, CreateBuiltinRegistry(), false, udfsPaths); - IUdfResolver::TPtr udfResolver = NCommon::CreateSimpleUdfResolver(funcRegistry.Get(), fileStorage, true);; + IUdfResolver::TPtr udfResolver = NCommon::CreateSimpleUdfResolver(funcRegistry.Get(), fileStorage, true); bool keepTempFiles = true; bool emulateOutputForMultirun = false; @@ -1206,7 +1228,8 @@ int Main(int argc, char* argv[]) const auto stmt = GetFormattedStmt(raw_stmt); Cout << stmt << '\n'; - Cerr << "\n" << stmt << "\n\n"; + Cerr << "\n" + << stmt << "\n\n"; if (stmt[0] == '\\') { ProcessMetaCmd(stmt); @@ -1268,15 +1291,15 @@ int Main(int argc, char* argv[]) PrintExprTo(program, Cerr); } - static const THashSet ignoredNodes{"CommitAll!", "Commit!" }; + static const THashSet ignoredNodes{"CommitAll!", "Commit!"}; const auto opNode = NYql::FindNode(program->ExprRoot(), - [] (const TExprNode::TPtr& node) { return !ignoredNodes.contains(node->Content()); }); + [](const TExprNode::TPtr& node) { return !ignoredNodes.contains(node->Content()); }); if (opNode->IsCallable("Write!")) { Y_ENSURE(opNode->ChildrenSize() == 5); const auto* keyNode = opNode->Child(2); const bool isWriteToTableSchemeNode = keyNode->IsCallable("Key") && 0 < keyNode->ChildrenSize() && - keyNode->Child(0)->Child(0)->IsAtom("tablescheme"); + keyNode->Child(0)->Child(0)->IsAtom("tablescheme"); if (isWriteToTableSchemeNode) { try { @@ -1311,9 +1334,9 @@ int Main(int argc, char* argv[]) } if (program->HasResults()) { - if (needPrintResult) { + if (needPrintResult) { Cerr << program->ResultsAsString() << Endl; - } + } const auto root = ParseYson(program->ResultsAsString()); @@ -1340,10 +1363,8 @@ int main(int argc, char* argv[]) } } return Main(argc, argv); - } - catch (...) { + } catch (...) { Cerr << CurrentExceptionMessage() << Endl; return 1; } } - diff --git a/yql/essentials/tools/pgrun/ya.make b/yql/essentials/tools/pgrun/ya.make index b22318c1698..a497f5d2e33 100644 --- a/yql/essentials/tools/pgrun/ya.make +++ b/yql/essentials/tools/pgrun/ya.make @@ -2,6 +2,8 @@ IF (NOT OPENSOURCE) PROGRAM(pgrun) +ENABLE(YQL_STYLE_CPP) + ALLOCATOR(J) SRCS( diff --git a/yql/essentials/tools/purebench/purebench.cpp b/yql/essentials/tools/purebench/purebench.cpp index 48ea07b20a4..a500afce61a 100644 --- a/yql/essentials/tools/purebench/purebench.cpp +++ b/yql/essentials/tools/purebench/purebench.cpp @@ -34,10 +34,11 @@ using namespace NYql::NPureCalc; using namespace NKikimr::NMiniKQL; using namespace NYql::NUdf; -struct TPickleInputSpec : public TInputSpecBase { +struct TPickleInputSpec: public TInputSpecBase { TPickleInputSpec(const TVector& schemas) : Schemas(schemas) - {} + { + } const TVector& GetSchemas() const final { return Schemas; @@ -53,13 +54,12 @@ public: const TPickleInputSpec& /* inputSpec */, ui32 index, IInputStream* underlying, - IWorker* worker - ) - : TCustomListValue(memInfo) - , Underlying_(underlying) - , Worker_(worker) - , ScopedAlloc_(Worker_->GetScopedAlloc()) - , Packer_(false, Worker_->GetInputType(index)) + IWorker* worker) + : TCustomListValue(memInfo) + , Underlying_(underlying) + , Worker_(worker) + , ScopedAlloc_(Worker_->GetScopedAlloc()) + , Packer_(false, Worker_->GetInputType(index)) { } @@ -78,7 +78,7 @@ public: YQL_ENSURE(read == sizeof(len)); if (len > RecordBuffer_.size()) { - RecordBuffer_.resize(Max(2*RecordBuffer_.size(), len)); + RecordBuffer_.resize(Max(2 * RecordBuffer_.size(), len)); } Underlying_->LoadOrFail(RecordBuffer_.data(), len); @@ -109,9 +109,9 @@ struct TInputSpecTraits { static void PreparePullListWorker(const TPickleInputSpec& spec, IPullListWorker* worker, const TVector& streams) { YQL_ENSURE(worker->GetInputsCount() == streams.size(), - "number of input streams should match number of inputs provided by spec"); + "number of input streams should match number of inputs provided by spec"); - with_lock(worker->GetScopedAlloc()) { + with_lock (worker->GetScopedAlloc()) { auto& holderFactory = worker->GetGraph().GetHolderFactory(); for (ui32 i = 0; i < streams.size(); i++) { auto input = holderFactory.template Create( @@ -122,10 +122,11 @@ struct TInputSpecTraits { } }; -struct TPickleOutputSpec : public TOutputSpecBase { +struct TPickleOutputSpec: public TOutputSpecBase { TPickleOutputSpec(const NYT::TNode& schema) : Schema(schema) - {} + { + } const NYT::TNode& GetSchema() const final { return Schema; @@ -146,7 +147,8 @@ public: TPickleOutputHandle(TWorkerHolder worker) : Worker_(std::move(worker)) , Packer_(false, Worker_->GetOutputType()) - {} + { + } NKikimr::NMiniKQL::TType* GetOutputType() const final { return const_cast(Worker_->GetOutputType()); @@ -159,7 +161,7 @@ public: TBindTerminator bind(Worker_->GetGraph().GetTerminator()); - with_lock(Worker_->GetScopedAlloc()) { + with_lock (Worker_->GetScopedAlloc()) { const auto outputIterator = Worker_->GetOutputIterator(); TUnboxedValue value; @@ -192,10 +194,11 @@ struct TOutputSpecTraits { } }; -struct TPrintOutputSpec : public TOutputSpecBase { +struct TPrintOutputSpec: public TOutputSpecBase { TPrintOutputSpec(const NYT::TNode& schema) : Schema(schema) - {} + { + } const NYT::TNode& GetSchema() const final { return Schema; @@ -208,7 +211,8 @@ class TPrintOutputHandle final: public TStreamOutputHandle { public: TPrintOutputHandle(TWorkerHolder worker) : Worker_(std::move(worker)) - {} + { + } NKikimr::NMiniKQL::TType* GetOutputType() const final { return const_cast(Worker_->GetOutputType()); @@ -221,7 +225,7 @@ public: TBindTerminator bind(Worker_->GetGraph().GetTerminator()); - with_lock(Worker_->GetScopedAlloc()) { + with_lock (Worker_->GetScopedAlloc()) { const auto outputIterator = Worker_->GetOutputIterator(); TUnboxedValue value; @@ -278,7 +282,7 @@ TStringStream MakeGenInput(ui64 count) { } template -using TRunCallable = std::function>&)>; +using TRunCallable = std::function>&)>; template NYT::TNode RunGenSql( @@ -286,8 +290,7 @@ NYT::TNode RunGenSql( const TVector& inputSchema, const TString& sql, ETranslationMode isPg, - TRunCallable runCallable -) { + TRunCallable runCallable) { auto inputSpec = TPickleInputSpec(inputSchema); auto outputSpec = TOutputSpec({NYT::TNode::CreateEntity()}); auto program = factory->MakePullListProgram(inputSpec, outputSpec, sql, isPg); @@ -303,8 +306,7 @@ void ShowResults( const TVector& inputSchema, const TString& sql, ETranslationMode isPg, - TStream* input -) { + TStream* input) { auto inputSpec = TInputSpec(inputSchema); auto outputSpec = TPrintOutputSpec({NYT::TNode::CreateEntity()}); auto program = factory->MakePullListProgram(inputSpec, outputSpec, sql, isPg); @@ -327,8 +329,7 @@ double RunBenchmarks( const TString& sql, ETranslationMode isPg, ui32 repeats, - TRunCallable runCallable -) { + TRunCallable runCallable) { auto inputSpec = TInputSpec(inputSchema); auto outputSpec = TOutputSpec({NYT::TNode::CreateEntity()}); auto program = factory->MakePullListProgram(inputSpec, outputSpec, sql, isPg); @@ -353,12 +354,12 @@ double RunBenchmarks( times.erase(times.end() - times.size() / 3, times.end()); double sum = std::transform_reduce(times.cbegin(), times.cend(), - .0, std::plus{}, [](auto t) { return std::log(t.MicroSeconds()); }); + .0, std::plus{}, [](auto t) { return std::log(t.MicroSeconds()); }); return std::exp(sum / times.size()); } -int Main(int argc, const char *argv[]) +int Main(int argc, const char* argv[]) { Y_UNUSED(NUdf::GetStaticSymbols()); using namespace NLastGetopt; @@ -489,7 +490,8 @@ int Main(int argc, const char *argv[]) factory, {outputGenSchema}, testSql, isPgTest, repeats, [&](const auto& program) { auto handle = program->Apply(StreamFromVector(outputGenStream)); - while (/* arrow::compute::ExecBatch* batch = */ handle->Fetch()) {} + while (/* arrow::compute::ExecBatch* batch = */ handle->Fetch()) { + } }); } @@ -499,7 +501,7 @@ int Main(int argc, const char *argv[]) return 0; } -int main(int argc, const char *argv[]) { +int main(int argc, const char* argv[]) { if (argc > 1 && TString(argv[1]) != TStringBuf("--ndebug")) { Cerr << "purebench ABI version: " << NKikimr::NUdf::CurrentAbiVersionStr() << Endl; } @@ -510,7 +512,8 @@ int main(int argc, const char *argv[]) { try { return Main(argc, argv); } catch (const TCompileError& e) { - Cerr << e.what() << "\n" << e.GetIssues(); + Cerr << e.what() << "\n" + << e.GetIssues(); } catch (...) { Cerr << CurrentExceptionMessage() << Endl; return 1; diff --git a/yql/essentials/tools/purebench/test/test.py b/yql/essentials/tools/purebench/test/test.py index d2324907654..2924e62758f 100644 --- a/yql/essentials/tools/purebench/test/test.py +++ b/yql/essentials/tools/purebench/test/test.py @@ -5,8 +5,7 @@ PUREBENCH = yatest.common.build_path('yql/essentials/tools/purebench/purebench') def test_purebench_smoke(): - result = yatest.common.execute([PUREBENCH, '--ndebug', '-r', '1'], - text=True, check_exit_code=True) + result = yatest.common.execute([PUREBENCH, '--ndebug', '-r', '1'], text=True, check_exit_code=True) # Mask elapsed time and duration, since both can change in # different environments. stdout = result.stdout diff --git a/yql/essentials/tools/purebench/ya.make b/yql/essentials/tools/purebench/ya.make index dd1d962bcb8..5d9e2eb8b2b 100644 --- a/yql/essentials/tools/purebench/ya.make +++ b/yql/essentials/tools/purebench/ya.make @@ -2,6 +2,8 @@ IF (NOT OPENSOURCE) PROGRAM(purebench) +ENABLE(YQL_STYLE_CPP) + ALLOCATOR(J) SRCS( diff --git a/yql/essentials/tools/sql2yql/sql2yql.cpp b/yql/essentials/tools/sql2yql/sql2yql.cpp index ec567045125..5d891333c74 100644 --- a/yql/essentials/tools/sql2yql/sql2yql.cpp +++ b/yql/essentials/tools/sql2yql/sql2yql.cpp @@ -22,7 +22,6 @@ #include #include - #include #include @@ -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 ParseProtoConfig(const TString& cfgFile) { return config; } - int BuildAST(int argc, char* argv[]) { NLastGetopt::TOpts opts = NLastGetopt::TOpts::Default(); @@ -278,24 +274,21 @@ int BuildAST(int argc, char* argv[]) { 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(langVerHandler); opts.AddLongOption("mem-limit", "Set memory limit in megabytes").Handler1T(0, NYql::SetAddressSpaceLimit); - opts.AddLongOption("gateways-cfg", "Gateways configuration file").Optional().RequiredArgument("FILE") - .Handler1T([&gatewaysConfig, &clusterMapping](const TString& file) { - gatewaysConfig = ParseProtoConfig(file); - GetClusterMappingFromGateways(*gatewaysConfig, clusterMapping); - }); - opts.AddLongOption("pg-ext", "Pg extensions config file").Optional().RequiredArgument("FILE") - .Handler1T([](const TString& file) { - - auto pgExtConfig = ParseProtoConfig(file); - if (!pgExtConfig) { - throw yexception() << "Bad format of config file " << file; - } - TVector 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([&gatewaysConfig, &clusterMapping](const TString& file) { + gatewaysConfig = ParseProtoConfig(file); + GetClusterMappingFromGateways(*gatewaysConfig, clusterMapping); + }); + opts.AddLongOption("pg-ext", "Pg extensions config file").Optional().RequiredArgument("FILE").Handler1T([](const TString& file) { + auto pgExtConfig = ParseProtoConfig(file); + if (!pgExtConfig) { + throw yexception() << "Bad format of config file " << file; + } + TVector extensions; + NYql::PgExtensionsFromProto(*pgExtConfig, extensions); + NYql::NPg::RegisterExtensions(extensions, true, + *NSQLTranslationPG::CreateExtensionSqlParser(), + NKikimr::NMiniKQL::CreateExtensionLoader().get()); + }); opts.SetFreeArgDefaultTitle("query file"); opts.AddHelpOption(); @@ -333,8 +326,7 @@ int BuildAST(int argc, char* argv[]) { NSQLTranslation::TTranslators translators( nullptr, NSQLTranslationV1::MakeTranslator(lexers, parsers), - NSQLTranslationPG::MakeTranslator() - ); + NSQLTranslationPG::MakeTranslator()); TVector queries; int errors = 0; @@ -371,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; } @@ -406,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; } @@ -419,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; @@ -436,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); } } @@ -461,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); diff --git a/yql/essentials/tools/sql2yql/ya.make b/yql/essentials/tools/sql2yql/ya.make index 030fe870256..06fdf58b80c 100644 --- a/yql/essentials/tools/sql2yql/ya.make +++ b/yql/essentials/tools/sql2yql/ya.make @@ -2,6 +2,8 @@ IF (NOT EXPORT_CMAKE OR NOT OPENSOURCE OR OPENSOURCE_PROJECT != "yt") PROGRAM(sql2yql) +ENABLE(YQL_STYLE_CPP) + PEERDIR( contrib/libs/antlr3_cpp_runtime library/cpp/getopt diff --git a/yql/essentials/tools/sql_formatter/sql_formatter.cpp b/yql/essentials/tools/sql_formatter/sql_formatter.cpp index d25e4817c91..546db2da8f7 100644 --- a/yql/essentials/tools/sql_formatter/sql_formatter.cpp +++ b/yql/essentials/tools/sql_formatter/sql_formatter.cpp @@ -24,12 +24,11 @@ int RunFormat(int argc, char* argv[]) { opts.AddLongOption('p', "print-query", "print given query before parsing").NoArgument(); opts.AddLongOption('f', "obfuscate", "obfuscate query").NoArgument(); opts.AddLongOption("ansi-lexer", "use ansi lexer").NoArgument(); - opts.AddLongOption("langver", "Set current language version").Optional().RequiredArgument("VER") - .Handler1T([&](const TString& str) { - if (!NYql::ParseLangVersion(str, langver)) { - throw yexception() << "Failed to parse language version: " << str; - } - }); + opts.AddLongOption("langver", "Set current language version").Optional().RequiredArgument("VER").Handler1T([&](const TString& str) { + if (!NYql::ParseLangVersion(str, langver)) { + throw yexception() << "Failed to parse language version: " << str; + } + }); opts.SetFreeArgsNum(0); opts.AddHelpOption(); @@ -73,8 +72,7 @@ int RunFormat(int argc, char* argv[]) { TString frm_query; TString error; NYql::TIssues issues; - if (!formatter->Format(queryString, frm_query, issues, res.Has("obfuscate") ? - NSQLFormat::EFormatMode::Obfuscate : NSQLFormat::EFormatMode::Pretty)) { + if (!formatter->Format(queryString, frm_query, issues, res.Has("obfuscate") ? NSQLFormat::EFormatMode::Obfuscate : NSQLFormat::EFormatMode::Pretty)) { ++errors; Cerr << "Error formatting query: " << issues.ToString() << Endl; } else { diff --git a/yql/essentials/tools/sql_formatter/ya.make b/yql/essentials/tools/sql_formatter/ya.make index 558dbe3bd5a..748c9ad2471 100644 --- a/yql/essentials/tools/sql_formatter/ya.make +++ b/yql/essentials/tools/sql_formatter/ya.make @@ -2,6 +2,8 @@ IF (NOT EXPORT_CMAKE OR NOT OPENSOURCE OR OPENSOURCE_PROJECT != "yt") PROGRAM() +ENABLE(YQL_STYLE_CPP) + PEERDIR( library/cpp/getopt contrib/libs/protobuf diff --git a/yql/essentials/tools/sql_functions_dump/sql_functions_dump.cpp b/yql/essentials/tools/sql_functions_dump/sql_functions_dump.cpp index 66dae62d636..4094d2ffce9 100644 --- a/yql/essentials/tools/sql_functions_dump/sql_functions_dump.cpp +++ b/yql/essentials/tools/sql_functions_dump/sql_functions_dump.cpp @@ -5,7 +5,7 @@ using namespace NYql; -int Main(int argc, const char *argv[]) +int Main(int argc, const char* argv[]) { Y_UNUSED(argc); Y_UNUSED(argv); @@ -26,14 +26,13 @@ int Main(int argc, const char *argv[]) return 0; } -int main(int argc, const char *argv[]) { +int main(int argc, const char* argv[]) { NYql::NBacktrace::RegisterKikimrFatalActions(); NYql::NBacktrace::EnableKikimrSymbolize(); try { return Main(argc, argv); - } - catch (...) { + } catch (...) { Cerr << CurrentExceptionMessage() << Endl; return 1; } diff --git a/yql/essentials/tools/sql_functions_dump/test/test.py b/yql/essentials/tools/sql_functions_dump/test/test.py index ca4d1ad5b87..0e8a6ef6ab5 100644 --- a/yql/essentials/tools/sql_functions_dump/test/test.py +++ b/yql/essentials/tools/sql_functions_dump/test/test.py @@ -9,12 +9,8 @@ TOOL_PATH = yatest.common.binary_path('yql/essentials/tools/sql_functions_dump/s def test_functions_dump(): with open(os.path.join(DATA_PATH, "sql_functions.json")) as f: func_from_file = json.load(f) - res = yatest.common.execute( - [TOOL_PATH], - check_exit_code=True, - wait=True - ) + res = yatest.common.execute([TOOL_PATH], check_exit_code=True, wait=True) func_from_tool = json.loads(res.stdout) - assert func_from_tool == func_from_file, 'JSON_DIFFER\n' \ - 'File:\n %(func_from_file)s\n\n' \ - 'Tool:\n %(func_from_tool)s\n' % locals() + assert func_from_tool == func_from_file, ( + 'JSON_DIFFER\n' 'File:\n %(func_from_file)s\n\n' 'Tool:\n %(func_from_tool)s\n' % locals() + ) diff --git a/yql/essentials/tools/sql_functions_dump/ya.make b/yql/essentials/tools/sql_functions_dump/ya.make index 73dda185476..5467c07bbfc 100644 --- a/yql/essentials/tools/sql_functions_dump/ya.make +++ b/yql/essentials/tools/sql_functions_dump/ya.make @@ -1,5 +1,7 @@ PROGRAM() +ENABLE(YQL_STYLE_CPP) + SRCS( sql_functions_dump.cpp ) diff --git a/yql/essentials/tools/types_dump/test/test.py b/yql/essentials/tools/types_dump/test/test.py index 1f809863c29..565ebb87322 100644 --- a/yql/essentials/tools/types_dump/test/test.py +++ b/yql/essentials/tools/types_dump/test/test.py @@ -9,12 +9,8 @@ TOOL_PATH = yatest.common.binary_path('yql/essentials/tools/types_dump/types_dum def test_types_dump(): with open(os.path.join(DATA_PATH, "types.json")) as f: types_from_file = json.load(f) - res = yatest.common.execute( - [TOOL_PATH], - check_exit_code=True, - wait=True - ) + res = yatest.common.execute([TOOL_PATH], check_exit_code=True, wait=True) types_from_tool = json.loads(res.stdout) - assert types_from_tool == types_from_file, 'JSON_DIFFER\n' \ - 'File:\n %(types_from_file)s\n\n' \ - 'Tool:\n %(types_from_tool)s\n' % locals() + assert types_from_tool == types_from_file, ( + 'JSON_DIFFER\n' 'File:\n %(types_from_file)s\n\n' 'Tool:\n %(types_from_tool)s\n' % locals() + ) diff --git a/yql/essentials/tools/types_dump/types_dump.cpp b/yql/essentials/tools/types_dump/types_dump.cpp index 32117c20e89..8ce475e9d2b 100644 --- a/yql/essentials/tools/types_dump/types_dump.cpp +++ b/yql/essentials/tools/types_dump/types_dump.cpp @@ -6,7 +6,7 @@ using namespace NYql; -int Main(int argc, const char *argv[]) +int Main(int argc, const char* argv[]) { Y_UNUSED(argc); Y_UNUSED(argv); @@ -45,14 +45,13 @@ int Main(int argc, const char *argv[]) return 0; } -int main(int argc, const char *argv[]) { +int main(int argc, const char* argv[]) { NYql::NBacktrace::RegisterKikimrFatalActions(); NYql::NBacktrace::EnableKikimrSymbolize(); try { return Main(argc, argv); - } - catch (...) { + } catch (...) { Cerr << CurrentExceptionMessage() << Endl; return 1; } diff --git a/yql/essentials/tools/types_dump/ya.make b/yql/essentials/tools/types_dump/ya.make index 5bea1a09d80..c59a3c43143 100644 --- a/yql/essentials/tools/types_dump/ya.make +++ b/yql/essentials/tools/types_dump/ya.make @@ -1,5 +1,7 @@ PROGRAM() +ENABLE(YQL_STYLE_CPP) + SRCS( types_dump.cpp ) diff --git a/yql/essentials/tools/udf_dep_stub/ya.make b/yql/essentials/tools/udf_dep_stub/ya.make index abe778ed121..69bb3f8f45c 100644 --- a/yql/essentials/tools/udf_dep_stub/ya.make +++ b/yql/essentials/tools/udf_dep_stub/ya.make @@ -1,5 +1,7 @@ DLL(yql_udf_dep_stub) +ENABLE(YQL_STYLE_CPP) + SRCS( main.cpp ) diff --git a/yql/essentials/tools/udf_probe/udf_probe.cpp b/yql/essentials/tools/udf_probe/udf_probe.cpp index 7f7e7d28a8c..89e2dc2567b 100644 --- a/yql/essentials/tools/udf_probe/udf_probe.cpp +++ b/yql/essentials/tools/udf_probe/udf_probe.cpp @@ -10,7 +10,7 @@ void ListModules(const TString& dir) { TVector udfPaths; NMiniKQL::FindUdfsInDir(dir, &udfPaths); auto funcRegistry = CreateFunctionRegistry(nullptr, IBuiltinFunctionRegistry::TPtr(), false, udfPaths, - NUdf::IRegistrator::TFlags::TypesOnly); + NUdf::IRegistrator::TFlags::TypesOnly); for (auto& m : funcRegistry->GetAllModuleNames()) { auto path = *funcRegistry->FindUdfPath(m); @@ -18,7 +18,7 @@ void ListModules(const TString& dir) { } } -int main(int argc, char **argv) { +int main(int argc, char** argv) { try { if (argc != 2) { Cerr << "Expected directory path\n"; diff --git a/yql/essentials/tools/udf_probe/ya.make b/yql/essentials/tools/udf_probe/ya.make index d6cbedec450..4df603700bc 100644 --- a/yql/essentials/tools/udf_probe/ya.make +++ b/yql/essentials/tools/udf_probe/ya.make @@ -1,5 +1,7 @@ PROGRAM() +ENABLE(YQL_STYLE_CPP) + SRCS( udf_probe.cpp ) diff --git a/yql/essentials/tools/udf_resolver/discover.cpp b/yql/essentials/tools/udf_resolver/discover.cpp index 240cd174b46..b531010def0 100644 --- a/yql/essentials/tools/udf_resolver/discover.cpp +++ b/yql/essentials/tools/udf_resolver/discover.cpp @@ -37,10 +37,10 @@ NYql::TResolveResult DoDiscover(const NYql::TResolve& inMsg, IMutableFunctionReg if (inserted) { THashSet modules; functionRegistry.LoadUdfs(import.GetPath(), - {}, - NUdf::IRegistrator::TFlags::TypesOnly, - import.GetCustomUdfPrefix(), - &modules); + {}, + NUdf::IRegistrator::TFlags::TypesOnly, + import.GetCustomUdfPrefix(), + &modules); FillImportResultModules(modules, *importRes); it->second = modules; } else { @@ -67,7 +67,7 @@ NYql::TResolveResult DoDiscover(const NYql::TResolve& inMsg, IMutableFunctionReg TFunctionTypeInfo funcInfo; if (!f.second.IsTypeAwareness) { auto status = functionRegistry.FindFunctionTypeInfo(NYql::UnknownLangVersion, env, typeInfoHelper, - nullptr, funcName, nullptr, nullptr, NUdf::IUdfModule::TFlags::TypesOnly, {}, nullptr, logProvider.Get(), &funcInfo); + nullptr, funcName, nullptr, nullptr, NUdf::IUdfModule::TFlags::TypesOnly, {}, nullptr, logProvider.Get(), &funcInfo); if (!status.IsOk()) { udfRes->SetError("Failed to resolve signature, error: " + status.GetError()); @@ -106,7 +106,7 @@ void Print(const NYql::TResolveResult& result, IOutputStream& out, bool printAsP } void DiscoverInFiles(const TVector& udfPaths, IOutputStream& out, bool printAsProto, - NYql::NUdf::ELogLevel logLevel) { + NYql::NUdf::ELogLevel logLevel) { NYql::TResolve inMsg; inMsg.SetRuntimeLogLevel(static_cast(logLevel)); for (auto& path : udfPaths) { @@ -123,7 +123,7 @@ void DiscoverInFiles(const TVector& udfPaths, IOutputStream& out, bool Print(result, out, printAsProto); } -} +} // namespace void DiscoverInDir(const TString& dir, IOutputStream& out, bool printAsProto, NYql::NUdf::ELogLevel logLevel) { TVector udfPaths; @@ -132,7 +132,7 @@ void DiscoverInDir(const TString& dir, IOutputStream& out, bool printAsProto, NY } void DiscoverInFile(const TString& filePath, IOutputStream& out, bool printAsProto, NYql::NUdf::ELogLevel logLevel) { - DiscoverInFiles({ filePath }, out, printAsProto, logLevel); + DiscoverInFiles({filePath}, out, printAsProto, logLevel); } void Discover(IInputStream& in, IOutputStream& out, bool printAsProto) { @@ -154,4 +154,4 @@ void FillImportResultModules(const THashSet& modules, NYql::TImportResu importRes.AddModules(m); } } -} +} // namespace NUdfResolver diff --git a/yql/essentials/tools/udf_resolver/discover.h b/yql/essentials/tools/udf_resolver/discover.h index d32d3fa5a5a..3c78604d7de 100644 --- a/yql/essentials/tools/udf_resolver/discover.h +++ b/yql/essentials/tools/udf_resolver/discover.h @@ -10,10 +10,10 @@ namespace NUdfResolver { void DiscoverInDir(const TString& dir, IOutputStream& out, bool printAsProto, - NYql::NUdf::ELogLevel logLevel); + NYql::NUdf::ELogLevel logLevel); void DiscoverInFile(const TString& filePath, IOutputStream& out, bool printAsProto, - NYql::NUdf::ELogLevel logLevel); + NYql::NUdf::ELogLevel logLevel); void Discover(IInputStream& in, IOutputStream& out, bool printAsProto); void FillImportResultModules(const THashSet& modules, NYql::TImportResult& importRes); ; -} +} // namespace NUdfResolver diff --git a/yql/essentials/tools/udf_resolver/udf_resolver.cpp b/yql/essentials/tools/udf_resolver/udf_resolver.cpp index 9db127d0864..b04f52a7cdd 100644 --- a/yql/essentials/tools/udf_resolver/udf_resolver.cpp +++ b/yql/essentials/tools/udf_resolver/udf_resolver.cpp @@ -28,71 +28,70 @@ #include #ifdef _linux_ -#include -#include -#include -#include -#include -#include -#ifndef GRND_RANDOM -#include -#endif - -#include -#include -#include -#ifndef GRND_RANDOM -#include -#endif - -#ifndef __SI_MAX_SIZE -#define __SI_MAX_SIZE 128 -#endif - -#ifndef __SI_PAD_SIZE -#if __WORDSIZE == 64 -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4) -#else -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3) -#endif -#endif - - -#if !defined(SYS_newfstatat) -#if defined(__x86_64__) - #define SYS_newfstatat 262 -#elif defined(__i386__) - #error Unsupported syscall -#elif defined(__aarch64__) - #define SYS_newfstatat 79 -#elif defined(__arm__) - #error Unsupported syscall -#elif defined(__powerpc__) - #define SYS_newfstatat 291 -#else -#error Unsupported platform -#endif -#endif - -#if !defined(SYS_clone3) - #define SYS_clone3 435 -#endif - -#if !defined(SYS_rseq) -#if defined(__x86_64__) - #define SYS_rseq 334 -#elif defined(__i386__) - #define SYS_rseq 386 -#elif defined(__aarch64__) - #define SYS_rseq 293 -#elif defined(__arm__) - #define SYS_rseq 398 -#elif defined(__powerpc__) - #define SYS_rseq 387 -#else -#error Unsupported platform -#endif -#endif + #include + #include + #include + #include + #include + #include + #ifndef GRND_RANDOM + #include + #endif + + #include + #include + #include + #ifndef GRND_RANDOM + #include + #endif + + #ifndef __SI_MAX_SIZE + #define __SI_MAX_SIZE 128 + #endif + + #ifndef __SI_PAD_SIZE + #if __WORDSIZE == 64 + #define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof(int)) - 4) + #else + #define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof(int)) - 3) + #endif + #endif + + #if !defined(SYS_newfstatat) + #if defined(__x86_64__) + #define SYS_newfstatat 262 + #elif defined(__i386__) + #error Unsupported syscall + #elif defined(__aarch64__) + #define SYS_newfstatat 79 + #elif defined(__arm__) + #error Unsupported syscall + #elif defined(__powerpc__) + #define SYS_newfstatat 291 + #else + #error Unsupported platform + #endif + #endif + + #if !defined(SYS_clone3) + #define SYS_clone3 435 + #endif + + #if !defined(SYS_rseq) + #if defined(__x86_64__) + #define SYS_rseq 334 + #elif defined(__i386__) + #define SYS_rseq 386 + #elif defined(__aarch64__) + #define SYS_rseq 293 + #elif defined(__arm__) + #define SYS_rseq 398 + #elif defined(__powerpc__) + #define SYS_rseq 387 + #else + #error Unsupported platform + #endif + #endif #endif @@ -136,10 +135,10 @@ void ResolveUDFs() { if (inserted) { THashSet modules; newRegistry->LoadUdfs(import.GetPath(), - {}, - NUdf::IRegistrator::TFlags::TypesOnly, - import.GetCustomUdfPrefix(), - &modules); + {}, + NUdf::IRegistrator::TFlags::TypesOnly, + import.GetCustomUdfPrefix(), + &modules); NUdfResolver::FillImportResultModules(modules, *importRes); it->second = modules; @@ -168,17 +167,17 @@ void ResolveUDFs() { mkqlUserType = NYql::NCommon::ParseTypeFromYson(TStringBuf{udf.GetUserType()}, pgmBuilder, err); if (!mkqlUserType) { udfRes->SetError(TStringBuilder() << "Invalid user type for function: " - << udf.GetName() << ", error: " << err.Str()); + << udf.GetName() << ", error: " << err.Str()); continue; } } TFunctionTypeInfo funcInfo; auto status = newRegistry->FindFunctionTypeInfo(udf.GetLangVer(), env, typeInfoHelper, nullptr, - udf.GetName(), mkqlUserType, udf.GetTypeConfig(), NUdf::IUdfModule::TFlags::TypesOnly, {}, nullptr, logProvider.Get(), &funcInfo); + udf.GetName(), mkqlUserType, udf.GetTypeConfig(), NUdf::IUdfModule::TFlags::TypesOnly, {}, nullptr, logProvider.Get(), &funcInfo); if (!status.IsOk()) { udfRes->SetError(TStringBuilder() << "Failed to find UDF function: " << udf.GetName() - << ", reason: " << status.GetError()); + << ", reason: " << status.GetError()); continue; } @@ -198,8 +197,8 @@ void ResolveUDFs() { udfRes->SetMaxLangVer(funcInfo.MaxLangVer); } catch (yexception& e) { udfRes->SetError(TStringBuilder() - << "Internal error was found when udf metadata is loading for function: " << udf.GetName() - << ", reason: " << e.what()); + << "Internal error was found when udf metadata is loading for function: " << udf.GetName() + << ", reason: " << e.what()); } } @@ -210,7 +209,7 @@ void ListModules(const TString& dir) { TVector udfPaths; NMiniKQL::FindUdfsInDir(dir, &udfPaths); auto funcRegistry = CreateFunctionRegistry(&NYql::NBacktrace::KikimrBackTrace, IBuiltinFunctionRegistry::TPtr(), false, udfPaths, - NUdf::IRegistrator::TFlags::TypesOnly); + NUdf::IRegistrator::TFlags::TypesOnly); for (auto& m : funcRegistry->GetAllModuleNames()) { auto path = *funcRegistry->FindUdfPath(m); @@ -220,43 +219,40 @@ void ListModules(const TString& dir) { // NOLINTBEGIN(readability-identifier-naming) #ifdef _linux_ -struct my_siginfo_t - { - int si_signo; /* Signal number. */ -#if __SI_ERRNO_THEN_CODE - int si_errno; /* If non-zero, an errno value associated with - this signal, as defined in . */ - int si_code; /* Signal code. */ -#else +struct my_siginfo_t { + int si_signo; /* Signal number. */ + #if __SI_ERRNO_THEN_CODE + int si_errno; /* If non-zero, an errno value associated with + this signal, as defined in . */ + int si_code; /* Signal code. */ + #else int si_code; int si_errno; -#endif -#if __WORDSIZE == 64 - int __pad0; /* Explicit padding. */ -#endif - union - { + #endif + #if __WORDSIZE == 64 + int __pad0; /* Explicit padding. */ + #endif + union { int _pad[__SI_PAD_SIZE]; struct - { - void *_call_addr; /* Calling user insn. */ - int _syscall; /* Triggering system call number. */ + { + void* _call_addr; /* Calling user insn. */ + int _syscall; /* Triggering system call number. */ unsigned int _arch; /* AUDIT_ARCH_* of syscall. */ - } _sigsys; + } _sigsys; - } _sifields; - }; + } _sifields; +}; // NOLINTEND(readability-identifier-naming) -void SigSysHandler(int sig, my_siginfo_t *info, void *) { - Cerr << "SigSysHandler: " << sig << ", code: " << info->si_code << ", errno: " << - info->si_errno << ", call: " << info->_sifields._sigsys._syscall << ", arch:" << info->_sifields._sigsys._arch << "\n"; +void SigSysHandler(int sig, my_siginfo_t* info, void*) { + Cerr << "SigSysHandler: " << sig << ", code: " << info->si_code << ", errno: " << info->si_errno << ", call: " << info->_sifields._sigsys._syscall << ", arch:" << info->_sifields._sigsys._arch << "\n"; // repeat SIGSYS signal (this will kill current process) raise(sig); } #endif -int main(int argc, char **argv) { +int main(int argc, char** argv) { NYql::NBacktrace::RegisterKikimrFatalActions(); NYql::NBacktrace::EnableKikimrSymbolize(); @@ -265,11 +261,11 @@ int main(int argc, char **argv) { struct sigaction sa; memset(&sa, 0, sizeof(sa)); sa.sa_flags = SA_RESETHAND | SA_SIGINFO; - typedef void (*TSigSysHandler)(int, siginfo_t *, void *); + typedef void (*TSigSysHandler)(int, siginfo_t*, void*); sa.sa_sigaction = (TSigSysHandler)SigSysHandler; sigfillset(&sa.sa_mask); if (sigaction(SIGSYS, &sa, nullptr) == -1) { - ythrow TSystemError() << "Cannot set handler for signal " << strsignal(SIGSYS); + ythrow TSystemError() << "Cannot set handler for signal " << strsignal(SIGSYS); } #endif @@ -344,26 +340,26 @@ int main(int argc, char **argv) { if (res.Has("filter-syscalls")) { #ifdef _linux_ -#define ArchField offsetof(struct seccomp_data, arch) // NOLINT(readability-identifier-naming) + #define ArchField offsetof(struct seccomp_data, arch) // NOLINT(readability-identifier-naming) -// NOLINTNEXTLINE(readability-identifier-naming) -#define Allow(syscall) \ - BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, SYS_##syscall, 0, 1), \ - BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_ALLOW) + // NOLINTNEXTLINE(readability-identifier-naming) + #define Allow(syscall) \ + BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, SYS_##syscall, 0, 1), \ + BPF_STMT(BPF_RET + BPF_K, SECCOMP_RET_ALLOW) struct sock_filter filter[] = { /* validate arch */ - BPF_STMT(BPF_LD+BPF_W+BPF_ABS, ArchField), - BPF_JUMP( BPF_JMP+BPF_JEQ+BPF_K, AUDIT_ARCH_X86_64, 1, 0), - BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_TRAP), + BPF_STMT(BPF_LD + BPF_W + BPF_ABS, ArchField), + BPF_JUMP(BPF_JMP + BPF_JEQ + BPF_K, AUDIT_ARCH_X86_64, 1, 0), + BPF_STMT(BPF_RET + BPF_K, SECCOMP_RET_TRAP), /* load syscall */ - BPF_STMT(BPF_LD+BPF_W+BPF_ABS, offsetof(struct seccomp_data, nr)), + BPF_STMT(BPF_LD + BPF_W + BPF_ABS, offsetof(struct seccomp_data, nr)), - /* list of allowed syscalls */ -#ifndef _arm64_ + /* list of allowed syscalls */ + #ifndef _arm64_ Allow(access), -#endif + #endif Allow(brk), Allow(chdir), Allow(clock_gettime), @@ -371,13 +367,13 @@ int main(int argc, char **argv) { Allow(clone), Allow(clone3), Allow(close), -#ifndef _arm64_ + #ifndef _arm64_ Allow(creat), -#endif + #endif Allow(dup), -#ifndef _arm64_ + #ifndef _arm64_ Allow(dup2), -#endif + #endif Allow(dup3), Allow(eventfd2), Allow(exit), @@ -391,18 +387,18 @@ int main(int argc, char **argv) { Allow(futex), Allow(get_robust_list), Allow(getcwd), -#ifndef _arm64_ + #ifndef _arm64_ Allow(getdents), -#endif + #endif Allow(getdents64), Allow(getegid), Allow(geteuid), Allow(getgid), Allow(getgroups), Allow(getpgid), -#ifndef _arm64_ + #ifndef _arm64_ Allow(getpgrp), -#endif + #endif Allow(getpid), Allow(getppid), Allow(getpriority), @@ -416,21 +412,21 @@ int main(int argc, char **argv) { Allow(getxattr), Allow(ioctl), Allow(lgetxattr), -#ifndef _arm64_ + #ifndef _arm64_ Allow(link), -#endif + #endif Allow(listxattr), Allow(llistxattr), Allow(lremovexattr), Allow(lseek), Allow(lsetxattr), -#ifndef _arm64_ + #ifndef _arm64_ Allow(lstat), -#endif + #endif Allow(madvise), -#ifndef _arm64_ + #ifndef _arm64_ Allow(mkdir), -#endif + #endif Allow(mkdirat), Allow(mlock), Allow(mlockall), @@ -441,27 +437,27 @@ int main(int argc, char **argv) { Allow(munmap), Allow(nanosleep), Allow(newfstatat), -#ifndef _arm64_ + #ifndef _arm64_ Allow(open), -#endif + #endif Allow(openat), Allow(pipe2), Allow(prctl), Allow(pread64), Allow(pwrite64), Allow(read), -#ifndef _arm64_ + #ifndef _arm64_ Allow(readlink), -#endif + #endif Allow(readv), Allow(removexattr), -#ifndef _arm64_ + #ifndef _arm64_ Allow(rename), -#endif + #endif Allow(renameat), -#ifndef _arm64_ + #ifndef _arm64_ Allow(rmdir), -#endif + #endif Allow(rseq), Allow(rt_sigaction), Allow(rt_sigpending), @@ -475,26 +471,25 @@ int main(int argc, char **argv) { Allow(sched_setaffinity), Allow(set_robust_list), Allow(setxattr), -#ifndef _arm64_ + #ifndef _arm64_ Allow(stat), -#endif + #endif Allow(sysinfo), Allow(sigaltstack), Allow(uname), -#ifndef _arm64_ + #ifndef _arm64_ Allow(unlink), -#endif + #endif Allow(unlinkat), Allow(write), Allow(writev), /* and if we don't match above, die */ - BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_TRAP), + BPF_STMT(BPF_RET + BPF_K, SECCOMP_RET_TRAP), }; struct sock_fprog filterprog = { - .len = sizeof(filter)/sizeof(filter[0]), - .filter = filter - }; + .len = sizeof(filter) / sizeof(filter[0]), + .filter = filter}; if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) == -1) { ythrow yexception() << "prctl(PR_SET_NO_NEW_PRIVS, 1, ...) failed with: " << LastSystemErrorText(); diff --git a/yql/essentials/tools/udf_resolver/ya.make b/yql/essentials/tools/udf_resolver/ya.make index 2dff7abf78f..4cc31ea96bd 100644 --- a/yql/essentials/tools/udf_resolver/ya.make +++ b/yql/essentials/tools/udf_resolver/ya.make @@ -1,5 +1,7 @@ PROGRAM() +ENABLE(YQL_STYLE_CPP) + SRCS( udf_resolver.cpp discover.cpp diff --git a/yql/essentials/tools/yql_complete/ya.make b/yql/essentials/tools/yql_complete/ya.make index 07c7b7cffdc..7a620d58514 100644 --- a/yql/essentials/tools/yql_complete/ya.make +++ b/yql/essentials/tools/yql_complete/ya.make @@ -2,6 +2,8 @@ IF (NOT EXPORT_CMAKE OR NOT OPENSOURCE OR OPENSOURCE_PROJECT != "yt") PROGRAM() +ENABLE(YQL_STYLE_CPP) + PEERDIR( library/cpp/getopt library/cpp/iterator diff --git a/yql/essentials/tools/yql_facade_run/ya.make b/yql/essentials/tools/yql_facade_run/ya.make index 67804ded36e..1cf8a196d38 100644 --- a/yql/essentials/tools/yql_facade_run/ya.make +++ b/yql/essentials/tools/yql_facade_run/ya.make @@ -1,5 +1,7 @@ LIBRARY() +ENABLE(YQL_STYLE_CPP) + SRCS( yql_facade_run.cpp ) diff --git a/yql/essentials/tools/yql_facade_run/yql_facade_run.cpp b/yql/essentials/tools/yql_facade_run/yql_facade_run.cpp index 637869aa019..48c0f27d1dc 100644 --- a/yql/essentials/tools/yql_facade_run/yql_facade_run.cpp +++ b/yql/essentials/tools/yql_facade_run/yql_facade_run.cpp @@ -74,7 +74,7 @@ namespace { const ui32 PRETTY_FLAGS = NYql::TAstPrintFlags::PerLine | NYql::TAstPrintFlags::ShortQuote | - NYql::TAstPrintFlags::AdaptArbitraryContent; + NYql::TAstPrintFlags::AdaptArbitraryContent; template THolder ParseProtoFromResource(TStringBuf resourceName) { @@ -91,7 +91,7 @@ THolder ParseProtoFromResource(TStringBuf resourceName) { return config; } -class TOptPipelineConfigurator : public NYql::IPipelineConfigurator { +class TOptPipelineConfigurator: public NYql::IPipelineConfigurator { public: TOptPipelineConfigurator(NYql::TProgramPtr prg, IOutputStream* planStream, IOutputStream* exprStream, bool withTypes) : Program_(std::move(prg)) @@ -107,7 +107,7 @@ public: void AfterTypeAnnotation(NYql::TTransformationPipeline* pipeline) const final { pipeline->Add(NYql::TExprLogTransformer::Sync("OptimizedExpr", NYql::NLog::EComponent::Core, NYql::NLog::ELevel::TRACE), - "OptTrace", NYql::TIssuesIds::CORE, "OptTrace"); + "OptTrace", NYql::TIssuesIds::CORE, "OptTrace"); } void AfterOptimize(NYql::TTransformationPipeline* pipeline) const final { @@ -118,6 +118,7 @@ public: pipeline->Add(NYql::TPlanOutputTransformer::Sync(PlanStream_, Program_->GetPlanBuilder(), Program_->GetOutputFormat()), "PlanOutput"); } } + private: NYql::TProgramPtr Program_; IOutputStream* PlanStream_; @@ -125,7 +126,7 @@ private: bool WithTypes_; }; -class TPeepHolePipelineConfigurator : public NYql::IPipelineConfigurator { +class TPeepHolePipelineConfigurator: public NYql::IPipelineConfigurator { public: TPeepHolePipelineConfigurator() { } @@ -136,7 +137,7 @@ public: void AfterTypeAnnotation(NYql::TTransformationPipeline* pipeline) const final { pipeline->Add(NYql::TExprLogTransformer::Sync("OptimizedExpr", NYql::NLog::EComponent::Core, NYql::NLog::ELevel::TRACE), - "OptTrace", NYql::TIssuesIds::CORE, "OptTrace"); + "OptTrace", NYql::TIssuesIds::CORE, "OptTrace"); } void AfterOptimize(NYql::TTransformationPipeline* pipeline) const final { @@ -144,8 +145,7 @@ public: } }; -} // unnamed - +} // namespace namespace NYql { @@ -188,7 +188,7 @@ void TFacadeRunOptions::ParseProtoConfig(const TString& cfgFile, google::protobu } } -void TFacadeRunOptions::Parse(int argc, const char *argv[]) { +void TFacadeRunOptions::Parse(int argc, const char* argv[]) { User = GetUsername(); if (EnableCredentials) { @@ -205,79 +205,69 @@ void TFacadeRunOptions::Parse(int argc, const char *argv[]) { NLastGetopt::TOpts opts = NLastGetopt::TOpts::Default(); opts.AddHelpOption(); - opts.AddLongOption('p', "program", "Program file (use - to read from stdin)").Optional().RequiredArgument("FILE") - .Handler1T([this](const TString& file) { - ProgramFile = file; - if (ProgramFile == "-") { - ProgramFile = "-stdin-"; - ProgramText = Cin.ReadAll(); - } else { - ProgramText = TFileInput(ProgramFile).ReadAll(); - } - }); + opts.AddLongOption('p', "program", "Program file (use - to read from stdin)").Optional().RequiredArgument("FILE").Handler1T([this](const TString& file) { + ProgramFile = file; + if (ProgramFile == "-") { + ProgramFile = "-stdin-"; + ProgramText = Cin.ReadAll(); + } else { + ProgramText = TFileInput(ProgramFile).ReadAll(); + } + }); opts.AddLongOption('s', "sql", "Program is SQL query").NoArgument().StoreValue(&ProgramType, EProgramType::Sql); if (PgSupport) { opts.AddLongOption("pg", "Program has PG syntax").NoArgument().StoreValue(&ProgramType, EProgramType::Pg); - opts.AddLongOption("pg-ext", "Pg extensions config file").Optional().RequiredArgument("FILE") - .Handler1T([this](const TString& file) { - PgExtConfig = TFacadeRunOptions::ParseProtoConfig(file); - }); + opts.AddLongOption("pg-ext", "Pg extensions config file").Optional().RequiredArgument("FILE").Handler1T([this](const TString& file) { + PgExtConfig = TFacadeRunOptions::ParseProtoConfig(file); + }); } - opts.AddLongOption('f', "file", "Additional files").RequiredArgument("name@path") - .KVHandler([this](TString name, TString path) { - if (name.empty() || path.empty()) { - throw yexception() << "Incorrect file mapping, expected form name@path, e.g. MyFile@file.txt"; - } - - auto& entry = DataTable[NYql::TUserDataKey::File(NYql::GetDefaultFilePrefix() + name)]; - entry.Type = NYql::EUserDataType::PATH; - entry.Data = path; - }, '@'); + opts.AddLongOption('f', "file", "Additional files").RequiredArgument("name@path").KVHandler([this](TString name, TString path) { + if (name.empty() || path.empty()) { + throw yexception() << "Incorrect file mapping, expected form name@path, e.g. MyFile@file.txt"; + } - opts.AddLongOption('U', "url", "Additional urls").RequiredArgument("name@path") - .KVHandler([this](TString name, TString url) { - if (name.empty() || url.empty()) { - throw yexception() << "url mapping, expected form name@url, e.g. MyUrl@http://example.com/file"; - } + auto& entry = DataTable[NYql::TUserDataKey::File(NYql::GetDefaultFilePrefix() + name)]; + entry.Type = NYql::EUserDataType::PATH; + entry.Data = path; + }, '@'); - auto& entry = DataTable[NYql::TUserDataKey::File(NYql::GetDefaultFilePrefix() + name)]; - entry.Type = NYql::EUserDataType::URL; - entry.Data = url; - }, '@'); + opts.AddLongOption('U', "url", "Additional urls").RequiredArgument("name@path").KVHandler([this](TString name, TString url) { + if (name.empty() || url.empty()) { + throw yexception() << "url mapping, expected form name@url, e.g. MyUrl@http://example.com/file"; + } - opts.AddLongOption('m', "mounts", "Mount points config file.").Optional().RequiredArgument("FILE") - .Handler1T([this](const TString& file) { - MountConfig = TFacadeRunOptions::ParseProtoConfig(file); - }); - opts.AddLongOption("params-file", "Query parameters values in YSON format").Optional().RequiredArgument("FILE") - .Handler1T([this](const TString& file) { - Params = TFileInput(file).ReadAll(); - }); + auto& entry = DataTable[NYql::TUserDataKey::File(NYql::GetDefaultFilePrefix() + name)]; + entry.Type = NYql::EUserDataType::URL; + entry.Data = url; + }, '@'); + + opts.AddLongOption('m', "mounts", "Mount points config file.").Optional().RequiredArgument("FILE").Handler1T([this](const TString& file) { + MountConfig = TFacadeRunOptions::ParseProtoConfig(file); + }); + opts.AddLongOption("params-file", "Query parameters values in YSON format").Optional().RequiredArgument("FILE").Handler1T([this](const TString& file) { + Params = TFileInput(file).ReadAll(); + }); opts.AddLongOption("yson-attrs", "Provide operation yson attribues").Optional().RequiredArgument("VALUE").StoreResult(&YsonAttrs); - opts.AddLongOption('G', "gateways", TStringBuilder() << "Used gateways, available: " << JoinSeq(",", SupportedGateways_)).DefaultValue(JoinSeq(",", GatewayTypes)) - .Handler1T([this](const TString& gateways) { - GatewayTypes.clear(); - ::StringSplitter(gateways).Split(',').Consume([&](const TStringBuf& val) { - if (!SupportedGateways_.contains(val)) { - throw yexception() << "Unsupported gateway \"" << val << '"'; - } - GatewayTypes.emplace(val); - }); - }); - opts.AddLongOption("gateways-cfg", "Gateways configuration file").Optional().RequiredArgument("FILE") - .Handler1T([this](const TString& file) { - GatewaysConfig = TFacadeRunOptions::ParseProtoConfig(file); - }); - opts.AddLongOption("fs-cfg", "Fs configuration file").Optional().RequiredArgument("FILE") - .Handler1T([this](const TString& file) { - FsConfig = MakeHolder(); - LoadFsConfigFromFile(file, *FsConfig); + opts.AddLongOption('G', "gateways", TStringBuilder() << "Used gateways, available: " << JoinSeq(",", SupportedGateways_)).DefaultValue(JoinSeq(",", GatewayTypes)).Handler1T([this](const TString& gateways) { + GatewayTypes.clear(); + ::StringSplitter(gateways).Split(',').Consume([&](const TStringBuf& val) { + if (!SupportedGateways_.contains(val)) { + throw yexception() << "Unsupported gateway \"" << val << '"'; + } + GatewayTypes.emplace(val); }); + }); + opts.AddLongOption("gateways-cfg", "Gateways configuration file").Optional().RequiredArgument("FILE").Handler1T([this](const TString& file) { + GatewaysConfig = TFacadeRunOptions::ParseProtoConfig(file); + }); + opts.AddLongOption("fs-cfg", "Fs configuration file").Optional().RequiredArgument("FILE").Handler1T([this](const TString& file) { + FsConfig = MakeHolder(); + LoadFsConfigFromFile(file, *FsConfig); + }); opts.AddLongOption('u', "udf", "Load shared library with UDF by given path").RequiredArgument("PATH").AppendTo(&UdfsPaths); - opts.AddLongOption("udfs-dir", "Load all shared libraries with UDFs found in given directory").RequiredArgument("DIR") - .Handler1T([this](const TString& dir) { - NKikimr::NMiniKQL::FindUdfsInDir(dir, &UdfsPaths); - }); + opts.AddLongOption("udfs-dir", "Load all shared libraries with UDFs found in given directory").RequiredArgument("DIR").Handler1T([this](const TString& dir) { + NKikimr::NMiniKQL::FindUdfsInDir(dir, &UdfsPaths); + }); opts.AddLongOption("udf-resolver", "Path to udf-resolver").Optional().RequiredArgument("PATH").StoreResult(&UdfResolverPath); opts.AddLongOption("udf-resolver-log", "Path to udf resolver log").Optional().RequiredArgument("PATH").StoreResult(&UdfResolverLog); opts.AddLongOption("udf-resolver-filter-syscalls", "Filter syscalls in udf resolver").Optional().NoArgument().SetFlag(&UdfResolverFilterSyscalls); @@ -287,36 +277,32 @@ void TFacadeRunOptions::Parse(int argc, const char *argv[]) { opts.AddLongOption("compile-only", "Compile program and exit").NoArgument().StoreValue(&Mode, ERunMode::Compile); opts.AddLongOption("validate", "Validate program and exit").NoArgument().StoreValue(&Mode, ERunMode::Validate); opts.AddLongOption("lineage", "Calculate program lineage and exit").NoArgument().StoreValue(&Mode, ERunMode::Lineage); - opts.AddLongOption('O',"optimize", "Optimize program and exit").NoArgument().StoreValue(&Mode, ERunMode::Optimize); + opts.AddLongOption('O', "optimize", "Optimize program and exit").NoArgument().StoreValue(&Mode, ERunMode::Optimize); opts.AddLongOption('D', "discover", "Discover tables in the program and exit").NoArgument().StoreValue(&Mode, ERunMode::Discover); opts.AddLongOption("peephole", "Perform peephole program optimization and exit").NoArgument().StoreValue(&Mode, ERunMode::Peephole); - opts.AddLongOption('R',"run", "Run program (use by default)").NoArgument().StoreValue(&Mode, ERunMode::Run); + opts.AddLongOption('R', "run", "Run program (use by default)").NoArgument().StoreValue(&Mode, ERunMode::Run); opts.AddLongOption('L', "show-log", "Show transformation log").Optional().NoArgument().SetFlag(&ShowLog); opts.AddLongOption('v', "verbosity", "Log verbosity level").Optional().RequiredArgument("LEVEL").StoreResult(&Verbosity); opts.AddLongOption("print-ast", "Print AST after loading").NoArgument().SetFlag(&PrintAst); - opts.AddLongOption("print-expr", "Print rebuild AST before execution").NoArgument() - .Handler0([this]() { - if (!ExprStream) { - ExprStream = &Cout; - } - }); + opts.AddLongOption("print-expr", "Print rebuild AST before execution").NoArgument().Handler0([this]() { + if (!ExprStream) { + ExprStream = &Cout; + } + }); opts.AddLongOption("with-types", "Print types annotation").NoArgument().SetFlag(&WithTypes); - opts.AddLongOption("trace-opt", "Print AST in the begin of each transformation").NoArgument() - .Handler0([this]() { - TraceOptStream = &Cerr; - }); - opts.AddLongOption("expr-file", "Print AST to that file instead of stdout").Optional().RequiredArgument("FILE") - .Handler1T([this](const TString& file) { - ExprStreamHolder_ = MakeHolder(file); - ExprStream = ExprStreamHolder_.Get(); - }); - opts.AddLongOption("print-result", "Print program execution result to stdout").NoArgument() - .Handler0([this]() { - if (!ResultStream) { - ResultStream = &Cout; - } - }); + opts.AddLongOption("trace-opt", "Print AST in the begin of each transformation").NoArgument().Handler0([this]() { + TraceOptStream = &Cerr; + }); + opts.AddLongOption("expr-file", "Print AST to that file instead of stdout").Optional().RequiredArgument("FILE").Handler1T([this](const TString& file) { + ExprStreamHolder_ = MakeHolder(file); + ExprStream = ExprStreamHolder_.Get(); + }); + opts.AddLongOption("print-result", "Print program execution result to stdout").NoArgument().Handler0([this]() { + if (!ResultStream) { + ResultStream = &Cout; + } + }); opts.AddLongOption("format", "Results format") .Optional() .RequiredArgument("STR") @@ -333,22 +319,19 @@ void TFacadeRunOptions::Parse(int argc, const char *argv[]) { } }); - opts.AddLongOption("result-file", "Print program execution result to file").Optional().RequiredArgument("FILE") - .Handler1T([this](const TString& file) { - ResultStreamHolder_ = MakeHolder(file); - ResultStream = ResultStreamHolder_.Get(); - }); - opts.AddLongOption('P',"trace-plan", "Print plan before execution").NoArgument() - .Handler0([this]() { - if (!PlanStream) { - PlanStream = &Cerr; - } - }); - opts.AddLongOption("plan-file", "Print program plan to file").Optional().RequiredArgument("FILE") - .Handler1T([this](const TString& file) { - PlanStreamHolder_ = MakeHolder(file); - PlanStream = PlanStreamHolder_.Get(); - }); + opts.AddLongOption("result-file", "Print program execution result to file").Optional().RequiredArgument("FILE").Handler1T([this](const TString& file) { + ResultStreamHolder_ = MakeHolder(file); + ResultStream = ResultStreamHolder_.Get(); + }); + opts.AddLongOption('P', "trace-plan", "Print plan before execution").NoArgument().Handler0([this]() { + if (!PlanStream) { + PlanStream = &Cerr; + } + }); + opts.AddLongOption("plan-file", "Print program plan to file").Optional().RequiredArgument("FILE").Handler1T([this](const TString& file) { + PlanStreamHolder_ = MakeHolder(file); + PlanStream = PlanStreamHolder_.Get(); + }); opts.AddLongOption("err-file", "Print validate/optimize/runtime errors to file") .Handler1T([this](const TString& file) { ErrStreamHolder_ = MakeHolder(file); @@ -363,15 +346,14 @@ void TFacadeRunOptions::Parse(int argc, const char *argv[]) { .Handler1T([this](const TString& mode) { ValidateMode = NUdf::ValidateModeByStr(mode); }); - opts.AddLongOption("stat", "Print execution statistics").Optional().OptionalArgument("FILE") - .Handler1T([this](const TString& file) { - if (file) { - StatStreamHolder_ = MakeHolder(file); - StatStream = StatStreamHolder_.Get(); - } else { - StatStream = &Cerr; - } - }); + opts.AddLongOption("stat", "Print execution statistics").Optional().OptionalArgument("FILE").Handler1T([this](const TString& file) { + if (file) { + StatStreamHolder_ = MakeHolder(file); + StatStream = StatStreamHolder_.Get(); + } else { + StatStream = &Cerr; + } + }); opts.AddLongOption("full-stat", "Output full execution statistics").Optional().NoArgument().SetFlag(&FullStatistics); opts.AddLongOption("sql-flags", "SQL translator pragma flags").SplitHandler(&SqlFlags, ','); @@ -411,29 +393,25 @@ void TFacadeRunOptions::Parse(int argc, const char *argv[]) { }); } if (EnableQPlayer) { - opts.AddLongOption("qstorage-dir", "Directory for QStorage").RequiredArgument("DIR") - .Handler1T([this](const TString& dir) { - QPlayerStorage_ = MakeFileQStorage(dir); - }); + opts.AddLongOption("qstorage-dir", "Directory for QStorage").RequiredArgument("DIR").Handler1T([this](const TString& dir) { + QPlayerStorage_ = MakeFileQStorage(dir); + }); opts.AddLongOption("op-id", "QStorage operation id").StoreResult(&OperationId).DefaultValue("dummy_op"); - opts.AddLongOption("capture", "Write query metadata to QStorage").NoArgument() - .Handler0([this]() { - if (EQPlayerMode::Replay == QPlayerMode) { - throw yexception() << "replay and capture options can't be used simultaneously"; - } - QPlayerMode = EQPlayerMode::Capture; - }); - opts.AddLongOption("replay", "Read query metadata from QStorage").NoArgument() - .Handler0([this]() { - if (EQPlayerMode::Capture == QPlayerMode) { - throw yexception() << "replay and capture options can't be used simultaneously"; - } - QPlayerMode = EQPlayerMode::Replay; - }); - opts.AddLongOption("gateways-patch", "QPlayer patch for gateways conf").Optional().RequiredArgument("FILE") - .Handler1T([this](const TString& file) { - GatewaysPatch = TFileInput(file).ReadAll(); - }); + opts.AddLongOption("capture", "Write query metadata to QStorage").NoArgument().Handler0([this]() { + if (EQPlayerMode::Replay == QPlayerMode) { + throw yexception() << "replay and capture options can't be used simultaneously"; + } + QPlayerMode = EQPlayerMode::Capture; + }); + opts.AddLongOption("replay", "Read query metadata from QStorage").NoArgument().Handler0([this]() { + if (EQPlayerMode::Capture == QPlayerMode) { + throw yexception() << "replay and capture options can't be used simultaneously"; + } + QPlayerMode = EQPlayerMode::Replay; + }); + opts.AddLongOption("gateways-patch", "QPlayer patch for gateways conf").Optional().RequiredArgument("FILE").Handler1T([this](const TString& file) { + GatewaysPatch = TFileInput(file).ReadAll(); + }); } if (CustomTests) { @@ -445,25 +423,23 @@ void TFacadeRunOptions::Parse(int argc, const char *argv[]) { opts.AddLongOption("validate-result-format", "Check that result-format can parse Result").NoArgument().SetFlag(&ValidateResultFormat); } - opts.AddLongOption("langver", "Set current language version").Optional().RequiredArgument("VER") - .Handler1T([this](const TString& str) { - if (str == "unknown") { - LangVer = UnknownLangVersion; - } else if (!ParseLangVersion(str, LangVer)) { - throw yexception() << "Failed to parse language version: " << str; - } - }); + opts.AddLongOption("langver", "Set current language version").Optional().RequiredArgument("VER").Handler1T([this](const TString& str) { + if (str == "unknown") { + LangVer = UnknownLangVersion; + } else if (!ParseLangVersion(str, LangVer)) { + throw yexception() << "Failed to parse language version: " << str; + } + }); - opts.AddLongOption("max-langver", "Set maximum language version").Optional().RequiredArgument("VER") - .Handler1T([this](const TString& str) { - if (!ParseLangVersion(str, MaxLangVer)) { - throw yexception() << "Failed to parse language version: " << str; - } - }); + opts.AddLongOption("max-langver", "Set maximum language version").Optional().RequiredArgument("VER").Handler1T([this](const TString& str) { + if (!ParseLangVersion(str, MaxLangVer)) { + throw yexception() << "Failed to parse language version: " << str; + } + }); opts.SetFreeArgsMax(0); - for (auto& ext: OptExtenders_) { + for (auto& ext : OptExtenders_) { ext(opts); } @@ -513,12 +489,12 @@ void TFacadeRunOptions::Parse(int argc, const char *argv[]) { } if (EnableCredentials && Token) { - for (auto name: SupportedGateways_) { + for (auto name : SupportedGateways_) { Credentials->AddCredential(TStringBuilder() << "default_" << name, TCredential(name, "", Token)); } } - for (auto& handle: OptHandlers_) { + for (auto& handle : OptHandlers_) { handle(res); } } @@ -536,21 +512,20 @@ TIntrusivePtr TFacadeRunner::GetFuncRegist return FuncRegistry_; } -int TFacadeRunner::Main(int argc, const char *argv[]) { +int TFacadeRunner::Main(int argc, const char* argv[]) { NYql::NBacktrace::RegisterKikimrFatalActions(); NYql::NBacktrace::EnableKikimrSymbolize(); EnableKikimrBacktraceFormat(); try { return DoMain(argc, argv); - } - catch (...) { + } catch (...) { Cerr << CurrentExceptionMessage() << Endl; return 1; } } -int TFacadeRunner::DoMain(int argc, const char *argv[]) { +int TFacadeRunner::DoMain(int argc, const char* argv[]) { Y_UNUSED(NUdf::GetStaticSymbols()); RunOptions_.Parse(argc, argv); @@ -571,15 +546,16 @@ int TFacadeRunner::DoMain(int argc, const char *argv[]) { TVector extensions; PgExtensionsFromProto(*RunOptions_.PgExtConfig, extensions); NPg::RegisterExtensions(extensions, RunOptions_.QPlayerContext.CanRead(), - *NSQLTranslationPG::CreateExtensionSqlParser(), - NKikimr::NMiniKQL::CreateExtensionLoader().get()); + *NSQLTranslationPG::CreateExtensionSqlParser(), + NKikimr::NMiniKQL::CreateExtensionLoader().get()); } NPg::GetSqlLanguageParser()->Freeze(); } auto funcRegistry = NKikimr::NMiniKQL::CreateFunctionRegistry(&NYql::NBacktrace::KikimrBackTrace, - NKikimr::NMiniKQL::CreateBuiltinRegistry(), true, RunOptions_.UdfsPaths)->Clone(); + NKikimr::NMiniKQL::CreateBuiltinRegistry(), true, RunOptions_.UdfsPaths) + ->Clone(); NKikimr::NMiniKQL::FillStaticModules(*funcRegistry); FuncRegistry_ = funcRegistry; @@ -588,15 +564,14 @@ int TFacadeRunner::DoMain(int argc, const char *argv[]) { lexers.Antlr4Ansi = NSQLTranslationV1::MakeAntlr4AnsiLexerFactory(); NSQLTranslationV1::TParsers parsers; parsers.Antlr4 = NSQLTranslationV1::MakeAntlr4ParserFactory( - /*isAmbiguityError=*/ RunOptions_.TestSyntaxAmbiguities); + /*isAmbiguityError=*/RunOptions_.TestSyntaxAmbiguities); parsers.Antlr4Ansi = NSQLTranslationV1::MakeAntlr4AnsiParserFactory( - /*isAmbiguityError=*/ RunOptions_.TestSyntaxAmbiguities); + /*isAmbiguityError=*/RunOptions_.TestSyntaxAmbiguities); NSQLTranslation::TTranslators translators( nullptr, NSQLTranslationV1::MakeTranslator(lexers, parsers), - NSQLTranslationPG::MakeTranslator() - ); + NSQLTranslationPG::MakeTranslator()); TExprContext ctx; if (RunOptions_.PgSupport) { @@ -605,13 +580,11 @@ int TFacadeRunner::DoMain(int argc, const char *argv[]) { IModuleResolver::TPtr moduleResolver; TModuleResolver::TModuleChecker moduleChecker; if (RunOptions_.TestLexers || RunOptions_.TestComplete || RunOptions_.TestSyntaxAmbiguities) { - moduleChecker = [ - lexers, parsers, - testLexers = RunOptions_.TestLexers, - testComplete = RunOptions_.TestComplete, - testSyntaxAmbiguities = RunOptions_.TestSyntaxAmbiguities, - clusters = ClusterMapping_](const TString& query, const TString& fileName, TExprContext& ctx) { - + moduleChecker = [lexers, parsers, + testLexers = RunOptions_.TestLexers, + testComplete = RunOptions_.TestComplete, + testSyntaxAmbiguities = RunOptions_.TestSyntaxAmbiguities, + clusters = ClusterMapping_](const TString& query, const TString& fileName, TExprContext& ctx) { if (testLexers) { TIssues issues; if (!NSQLTranslationV1::CheckLexers(TPosition(0, 0, fileName), query, issues)) { @@ -672,10 +645,10 @@ int TFacadeRunner::DoMain(int argc, const char *argv[]) { } moduleResolver = std::make_shared(translators, std::move(modules), ctx.NextUniqueId, - ClusterMapping_, RunOptions_.SqlFlags, RunOptions_.Mode >= ERunMode::Validate, THolder(), moduleChecker); + ClusterMapping_, RunOptions_.SqlFlags, RunOptions_.Mode >= ERunMode::Validate, THolder(), moduleChecker); } else { if (!GetYqlDefaultModuleResolver(ctx, moduleResolver, ClusterMapping_, - RunOptions_.OptimizeLibs && RunOptions_.Mode >= ERunMode::Validate, moduleChecker)) { + RunOptions_.OptimizeLibs && RunOptions_.Mode >= ERunMode::Validate, moduleChecker)) { *RunOptions_.ErrStream << "Errors loading default YQL libraries:" << Endl; ctx.IssueManager.GetIssues().PrintTo(*RunOptions_.ErrStream); return -1; @@ -686,7 +659,7 @@ int TFacadeRunner::DoMain(int argc, const char *argv[]) { if (RunOptions_.Mode >= ERunMode::Validate) { std::vector downloaders; - for (auto& factory: FsDownloadFactories_) { + for (auto& factory : FsDownloadFactories_) { if (auto download = factory()) { downloaders.push_back(std::move(download)); } @@ -720,8 +693,8 @@ int TFacadeRunner::DoMain(int argc, const char *argv[]) { RunOptions_.PrintInfo(TStringBuilder() << TInstant::Now().ToStringLocalUpToSeconds() << " Udfs scanned"); } else { udfResolver = FileStorage_ && RunOptions_.UdfResolverPath - ? NCommon::CreateOutProcUdfResolver(FuncRegistry_.Get(), FileStorage_, RunOptions_.UdfResolverPath, {}, {}, RunOptions_.UdfResolverFilterSyscalls, {}) - : NCommon::CreateSimpleUdfResolver(FuncRegistry_.Get(), FileStorage_, true); + ? NCommon::CreateOutProcUdfResolver(FuncRegistry_.Get(), FileStorage_, RunOptions_.UdfResolverPath, {}, {}, RunOptions_.UdfResolverFilterSyscalls, {}) + : NCommon::CreateSimpleUdfResolver(FuncRegistry_.Get(), FileStorage_, true); if (RunOptions_.UdfResolverLog) { udfResolver = NCommon::CreateUdfResolverDecoratorWithLogger(FuncRegistry_.Get(), udfResolver, RunOptions_.UdfResolverLog, RunOptions_.OperationId); } @@ -731,14 +704,14 @@ int TFacadeRunner::DoMain(int argc, const char *argv[]) { if (RunOptions_.PgSupport) { dataProvidersInit.push_back(GetPgDataProviderInitializer()); } - for (auto& factory: ProviderFactories_) { + for (auto& factory : ProviderFactories_) { if (auto init = factory()) { dataProvidersInit.push_back(std::move(init)); } } TVector urlListers; - for (auto& factory: UrlListerFactories_) { + for (auto& factory : UrlListerFactories_) { if (auto listener = factory()) { urlListers.push_back(std::move(listener)); } @@ -870,9 +843,9 @@ int TFacadeRunner::DoRun(TProgramFactory& factory) { NSQLTranslationV1::TParsers parsers = { .Antlr4 = NSQLTranslationV1::MakeAntlr4ParserFactory( - /*isAmbiguityError=*/ true), + /*isAmbiguityError=*/true), .Antlr4Ansi = NSQLTranslationV1::MakeAntlr4AnsiParserFactory( - /*isAmbiguityError=*/ true), + /*isAmbiguityError=*/true), }; NSQLTranslation::TTranslators translators( @@ -964,7 +937,7 @@ int TFacadeRunner::DoRun(TProgramFactory& factory) { } if (!RunOptions_.FullExpr && ERunMode::Peephole != RunOptions_.Mode) { - program->Print(RunOptions_.ExprStream, RunOptions_.PlanStream, /*cleanPlan*/true); + program->Print(RunOptions_.ExprStream, RunOptions_.PlanStream, /*cleanPlan*/ true); } program->ConfigureYsonResultFormat(RunOptions_.ResultsFormat); @@ -1023,12 +996,12 @@ TProgram::TStatus TFacadeRunner::DoRunProgram(TProgramPtr program) { TProgram::TStatus status = TProgram::TStatus::Ok; auto defOptConfig = TOptPipelineConfigurator(program, RunOptions_.FullExpr ? RunOptions_.PlanStream : nullptr, RunOptions_.FullExpr ? RunOptions_.ExprStream : nullptr, RunOptions_.WithTypes); - IPipelineConfigurator* optConfig = OptPipelineConfigurator_ ? OptPipelineConfigurator_ : &defOptConfig; + IPipelineConfigurator* optConfig = OptPipelineConfigurator_ ? OptPipelineConfigurator_ : &defOptConfig; if (ERunMode::Peephole == RunOptions_.Mode) { RunOptions_.PrintInfo("Peephole..."); auto defConfig = TPeepHolePipelineConfigurator(); - IPipelineConfigurator* config = PeepholePipelineConfigurator_ ? PeepholePipelineConfigurator_ : &defConfig; + IPipelineConfigurator* config = PeepholePipelineConfigurator_ ? PeepholePipelineConfigurator_ : &defConfig; status = program->OptimizeWithConfig(RunOptions_.User, *config); } else if (ERunMode::Run == RunOptions_.Mode) { RunOptions_.PrintInfo("Run program..."); @@ -1050,4 +1023,4 @@ TProgram::TStatus TFacadeRunner::DoRunProgram(TProgramPtr program) { return status; } -} // NYql +} // namespace NYql diff --git a/yql/essentials/tools/yql_facade_run/yql_facade_run.h b/yql/essentials/tools/yql_facade_run/yql_facade_run.h index d720ca7838a..b7fdcbbb0ae 100644 --- a/yql/essentials/tools/yql_facade_run/yql_facade_run.h +++ b/yql/essentials/tools/yql_facade_run/yql_facade_run.h @@ -24,45 +24,45 @@ #include namespace NKikimr::NMiniKQL { - class IFunctionRegistry; -} +class IFunctionRegistry; +} // namespace NKikimr::NMiniKQL namespace NYql { - class TFileStorageConfig; - class TGatewaysConfig; -} +class TFileStorageConfig; +class TGatewaysConfig; +} // namespace NYql namespace NYql::NProto { - class TPgExtensions; -} +class TPgExtensions; +} // namespace NYql::NProto namespace NYqlMountConfig { - class TMountConfig; -} +class TMountConfig; +} // namespace NYqlMountConfig namespace NYql { enum class ERunMode { - Parse /* "parse" */, - Compile /* "compile" */, - Validate /* "validate" */, - Optimize /* "optimize" */, - Peephole /* "peephole" */, - Lineage /* "lineage" */, - Discover /* "discover" */, - Run /* "run" */, + Parse /* "parse" */, + Compile /* "compile" */, + Validate /* "validate" */, + Optimize /* "optimize" */, + Peephole /* "peephole" */, + Lineage /* "lineage" */, + Discover /* "discover" */, + Run /* "run" */, }; enum class EProgramType { - SExpr /* "s-expr" */, - Sql /* "sql" */, - Pg /* "pg" */, + SExpr /* "s-expr" */, + Sql /* "sql" */, + Pg /* "pg" */, }; enum class EQPlayerMode { - None /* "none" */, + None /* "none" */, Capture /* "capture" */, - Replay /* "replay" */, + Replay /* "replay" */, }; class TFacadeRunOptions { @@ -142,7 +142,7 @@ public: bool OptimizeLibs = true; bool CustomTests = false; - void Parse(int argc, const char *argv[]); + void Parse(int argc, const char* argv[]); void AddOptExtension(std::function optExtender) { OptExtenders_.push_back(std::move(optExtender)); @@ -184,7 +184,7 @@ public: TFacadeRunner(TString name); ~TFacadeRunner(); - int Main(int argc, const char *argv[]); + int Main(int argc, const char* argv[]); void AddFsDownloadFactory(std::function factory) { FsDownloadFactories_.push_back(std::move(factory)); @@ -200,7 +200,7 @@ public: } template void FillClusterMapping(const TPbConfig& config, const TString& provider) { - for (auto& cluster: config.GetClusterMapping()) { + for (auto& cluster : config.GetClusterMapping()) { ClusterMapping_.emplace(to_lower(cluster.GetName()), provider); } } @@ -223,7 +223,7 @@ public: } protected: - virtual int DoMain(int argc, const char *argv[]); + virtual int DoMain(int argc, const char* argv[]); virtual int DoRun(TProgramFactory& factory); virtual TProgram::TStatus DoRunProgram(TProgramPtr program); @@ -243,4 +243,4 @@ private: std::unique_ptr YqlLogger_; }; -} // NYql +} // namespace NYql diff --git a/yql/essentials/tools/yql_highlight/generator.cpp b/yql/essentials/tools/yql_highlight/generator.cpp index 45f95624760..27d7eff9118 100644 --- a/yql/essentials/tools/yql_highlight/generator.cpp +++ b/yql/essentials/tools/yql_highlight/generator.cpp @@ -4,28 +4,28 @@ namespace NSQLHighlight { - class TOnlyFunctionGenerator: public IGenerator { - public: - explicit TOnlyFunctionGenerator(TGeneratorFunction function) - : Function_(std::move(function)) - { - } - - void Write(IOutputStream& out, const THighlighting& highlighting, bool ansi) override { - Function_(out, highlighting, ansi); - } - - void Write(const TFsPath& path, const THighlighting& highlighting, bool ansi) override { - TFileOutput out(path); - Write(out, highlighting, ansi); - } - - private: - TGeneratorFunction Function_; - }; - - IGenerator::TPtr MakeOnlyFileGenerator(TGeneratorFunction function) { - return new TOnlyFunctionGenerator(std::move(function)); +class TOnlyFunctionGenerator: public IGenerator { +public: + explicit TOnlyFunctionGenerator(TGeneratorFunction function) + : Function_(std::move(function)) + { } + void Write(IOutputStream& out, const THighlighting& highlighting, bool ansi) override { + Function_(out, highlighting, ansi); + } + + void Write(const TFsPath& path, const THighlighting& highlighting, bool ansi) override { + TFileOutput out(path); + Write(out, highlighting, ansi); + } + +private: + TGeneratorFunction Function_; +}; + +IGenerator::TPtr MakeOnlyFileGenerator(TGeneratorFunction function) { + return new TOnlyFunctionGenerator(std::move(function)); +} + } // namespace NSQLHighlight diff --git a/yql/essentials/tools/yql_highlight/generator.h b/yql/essentials/tools/yql_highlight/generator.h index 83341276ef9..0d7f6180e52 100644 --- a/yql/essentials/tools/yql_highlight/generator.h +++ b/yql/essentials/tools/yql_highlight/generator.h @@ -7,16 +7,16 @@ namespace NSQLHighlight { - class IGenerator: public TThrRefBase { - public: - using TPtr = TIntrusivePtr; +class IGenerator: public TThrRefBase { +public: + using TPtr = TIntrusivePtr; - virtual void Write(IOutputStream& out, const THighlighting& highlighting, bool ansi) = 0; - virtual void Write(const TFsPath& path, const THighlighting& highlighting, bool ansi) = 0; - }; + virtual void Write(IOutputStream& out, const THighlighting& highlighting, bool ansi) = 0; + virtual void Write(const TFsPath& path, const THighlighting& highlighting, bool ansi) = 0; +}; - using TGeneratorFunction = std::function; +using TGeneratorFunction = std::function; - IGenerator::TPtr MakeOnlyFileGenerator(TGeneratorFunction function); +IGenerator::TPtr MakeOnlyFileGenerator(TGeneratorFunction function); } // namespace NSQLHighlight diff --git a/yql/essentials/tools/yql_highlight/generator_highlight_js.cpp b/yql/essentials/tools/yql_highlight/generator_highlight_js.cpp index d8673a24601..1a04c7d6b4d 100644 --- a/yql/essentials/tools/yql_highlight/generator_highlight_js.cpp +++ b/yql/essentials/tools/yql_highlight/generator_highlight_js.cpp @@ -8,114 +8,114 @@ namespace NSQLHighlight { - TString ToHighlightJSClass(EUnitKind kind) { - switch (kind) { - case EUnitKind::Keyword: - return "keyword"; - case EUnitKind::Punctuation: - return "punctuation"; - case EUnitKind::QuotedIdentifier: - return "symbol"; - case EUnitKind::BindParameterIdentifier: - return "variable"; - case EUnitKind::TypeIdentifier: - return "type"; - case EUnitKind::FunctionIdentifier: - return "title.function"; - case EUnitKind::Identifier: - return ""; - case EUnitKind::Literal: - return "number"; - case EUnitKind::StringLiteral: - return "string"; - case EUnitKind::Comment: - return "comment"; - case EUnitKind::Whitespace: - return ""; - case EUnitKind::Error: - return ""; - } +TString ToHighlightJSClass(EUnitKind kind) { + switch (kind) { + case EUnitKind::Keyword: + return "keyword"; + case EUnitKind::Punctuation: + return "punctuation"; + case EUnitKind::QuotedIdentifier: + return "symbol"; + case EUnitKind::BindParameterIdentifier: + return "variable"; + case EUnitKind::TypeIdentifier: + return "type"; + case EUnitKind::FunctionIdentifier: + return "title.function"; + case EUnitKind::Identifier: + return ""; + case EUnitKind::Literal: + return "number"; + case EUnitKind::StringLiteral: + return "string"; + case EUnitKind::Comment: + return "comment"; + case EUnitKind::Whitespace: + return ""; + case EUnitKind::Error: + return ""; } +} - // FIXME: copy-pasted from generator_textmate.cpp. - TString ToTextMateRegex(const TUnit& unit, const NSQLTranslationV1::TRegexPattern& pattern) { - TStringBuilder regex; - - if (unit.IsPlain) { - regex << R"re(\b)re"; - } - - if (!pattern.Before.empty()) { - regex << "(?<=" << pattern.Before << ")"; - } - - regex << "(" << pattern.Body << ")"; - - if (!pattern.After.empty()) { - regex << "(?=" << pattern.After << ")"; - } - - if (unit.IsPlain) { - regex << R"re(\b)re"; - } - - return regex; - } +// FIXME: copy-pasted from generator_textmate.cpp. +TString ToTextMateRegex(const TUnit& unit, const NSQLTranslationV1::TRegexPattern& pattern) { + TStringBuilder regex; - NJson::TJsonValue ToHighlightJSPattern(const TUnit& unit, const NSQLTranslationV1::TRegexPattern& pattern) { - NJson::TJsonMap json; - json["className"] = ToHighlightJSClass(unit.Kind); - json["begin"] = ToTextMateRegex(unit, pattern); - return json; + if (unit.IsPlain) { + regex << R"re(\b)re"; } - NJson::TJsonValue ToHighlightJSPattern(const TUnit& unit, const TRangePattern& pattern) { - NJson::TJsonMap json; - json["className"] = ToHighlightJSClass(unit.Kind); - json["begin"] = RE2::QuoteMeta(pattern.Begin); - json["end"] = RE2::QuoteMeta(pattern.End); - return json; + if (!pattern.Before.empty()) { + regex << "(?<=" << pattern.Before << ")"; } - NJson::TJsonValue ToHighlightJSContains(const THighlighting& highlighting) { - NJson::TJsonArray array; - - for (const TUnit& unit : highlighting.Units) { - if (unit.IsCodeGenExcluded || unit.Kind == EUnitKind::Identifier) { - continue; - } - - for (const NSQLTranslationV1::TRegexPattern& pattern : unit.Patterns) { - array.AppendValue(ToHighlightJSPattern(unit, pattern)); - } - if (auto range = unit.RangePattern) { - array.AppendValue(ToHighlightJSPattern(unit, *range)); - } - } + regex << "(" << pattern.Body << ")"; - return array; + if (!pattern.After.empty()) { + regex << "(?=" << pattern.After << ")"; } - NJson::TJsonValue ToHighlightJSON(const THighlighting& highlighting) { - NJson::TJsonMap json; - json["name"] = highlighting.Name; - json["case_insensitive"] = IsCaseInsensitive(highlighting); - json["contains"] = NJson::TJsonArray{{NJson::TJsonMap{ - {"begin", ""}, - {"end", ";"}, - {"endsWithParent", true}, - {"lexemes", R"re(\w+)re"}, - {"contains", ToHighlightJSContains(highlighting)}, - }}}; - return json; + if (unit.IsPlain) { + regex << R"re(\b)re"; } - void GenerateHighlightJS(IOutputStream& out, const THighlighting& highlighting, bool /* ansi */) { - Print(out, ToHighlightJSON(highlighting)); - } + return regex; +} + +NJson::TJsonValue ToHighlightJSPattern(const TUnit& unit, const NSQLTranslationV1::TRegexPattern& pattern) { + NJson::TJsonMap json; + json["className"] = ToHighlightJSClass(unit.Kind); + json["begin"] = ToTextMateRegex(unit, pattern); + return json; +} + +NJson::TJsonValue ToHighlightJSPattern(const TUnit& unit, const TRangePattern& pattern) { + NJson::TJsonMap json; + json["className"] = ToHighlightJSClass(unit.Kind); + json["begin"] = RE2::QuoteMeta(pattern.Begin); + json["end"] = RE2::QuoteMeta(pattern.End); + return json; +} + +NJson::TJsonValue ToHighlightJSContains(const THighlighting& highlighting) { + NJson::TJsonArray array; + + for (const TUnit& unit : highlighting.Units) { + if (unit.IsCodeGenExcluded || unit.Kind == EUnitKind::Identifier) { + continue; + } - IGenerator::TPtr MakeHighlightJSGenerator() { - return MakeOnlyFileGenerator(GenerateHighlightJS); + for (const NSQLTranslationV1::TRegexPattern& pattern : unit.Patterns) { + array.AppendValue(ToHighlightJSPattern(unit, pattern)); + } + if (auto range = unit.RangePattern) { + array.AppendValue(ToHighlightJSPattern(unit, *range)); + } } + return array; +} + +NJson::TJsonValue ToHighlightJSON(const THighlighting& highlighting) { + NJson::TJsonMap json; + json["name"] = highlighting.Name; + json["case_insensitive"] = IsCaseInsensitive(highlighting); + json["contains"] = NJson::TJsonArray{{NJson::TJsonMap{ + {"begin", ""}, + {"end", ";"}, + {"endsWithParent", true}, + {"lexemes", R"re(\w+)re"}, + {"contains", ToHighlightJSContains(highlighting)}, + }}}; + return json; +} + +void GenerateHighlightJS(IOutputStream& out, const THighlighting& highlighting, bool /* ansi */) { + Print(out, ToHighlightJSON(highlighting)); +} + +IGenerator::TPtr MakeHighlightJSGenerator() { + return MakeOnlyFileGenerator(GenerateHighlightJS); +} + } // namespace NSQLHighlight diff --git a/yql/essentials/tools/yql_highlight/generator_highlight_js.h b/yql/essentials/tools/yql_highlight/generator_highlight_js.h index 160a4cf708d..d262a593d52 100644 --- a/yql/essentials/tools/yql_highlight/generator_highlight_js.h +++ b/yql/essentials/tools/yql_highlight/generator_highlight_js.h @@ -4,6 +4,6 @@ namespace NSQLHighlight { - IGenerator::TPtr MakeHighlightJSGenerator(); +IGenerator::TPtr MakeHighlightJSGenerator(); } // namespace NSQLHighlight diff --git a/yql/essentials/tools/yql_highlight/generator_json.cpp b/yql/essentials/tools/yql_highlight/generator_json.cpp index 846d2f85d2d..c77f116183d 100644 --- a/yql/essentials/tools/yql_highlight/generator_json.cpp +++ b/yql/essentials/tools/yql_highlight/generator_json.cpp @@ -6,10 +6,10 @@ namespace NSQLHighlight { - IGenerator::TPtr MakeJsonGenerator() { - return MakeOnlyFileGenerator([](IOutputStream& out, const THighlighting& highlighting, bool /* ansi */) { - Print(out, ToJson(highlighting)); - }); - } +IGenerator::TPtr MakeJsonGenerator() { + return MakeOnlyFileGenerator([](IOutputStream& out, const THighlighting& highlighting, bool /* ansi */) { + Print(out, ToJson(highlighting)); + }); +} } // namespace NSQLHighlight diff --git a/yql/essentials/tools/yql_highlight/generator_json.h b/yql/essentials/tools/yql_highlight/generator_json.h index 24f09041ff5..5fc3b36c413 100644 --- a/yql/essentials/tools/yql_highlight/generator_json.h +++ b/yql/essentials/tools/yql_highlight/generator_json.h @@ -4,6 +4,6 @@ namespace NSQLHighlight { - IGenerator::TPtr MakeJsonGenerator(); +IGenerator::TPtr MakeJsonGenerator(); } // namespace NSQLHighlight diff --git a/yql/essentials/tools/yql_highlight/generator_monarch.cpp b/yql/essentials/tools/yql_highlight/generator_monarch.cpp index 56867072ec6..8ad28e7d15d 100644 --- a/yql/essentials/tools/yql_highlight/generator_monarch.cpp +++ b/yql/essentials/tools/yql_highlight/generator_monarch.cpp @@ -10,215 +10,215 @@ namespace NSQLHighlight { - TString ToMonarchRegex(const TUnit& unit, const NSQLTranslationV1::TRegexPattern& pattern) { - TStringBuilder regex; +TString ToMonarchRegex(const TUnit& unit, const NSQLTranslationV1::TRegexPattern& pattern) { + TStringBuilder regex; - if (unit.IsPlain && pattern.Before.empty()) { - regex << R"re(\b)re"; - } + if (unit.IsPlain && pattern.Before.empty()) { + regex << R"re(\b)re"; + } - regex << "(" << pattern.Body << ")"; + regex << "(" << pattern.Body << ")"; - if (!pattern.After.empty()) { - regex << "(?=" << pattern.After << ")"; - } - - if (unit.IsPlain && pattern.Before.empty()) { - regex << R"re(\b)re"; - } - - return regex; + if (!pattern.After.empty()) { + regex << "(?=" << pattern.After << ")"; } - TString ToMonarchSelector(EUnitKind kind) { - switch (kind) { - case EUnitKind::Keyword: - return "keyword"; - case EUnitKind::Punctuation: - return "operator.sql"; - case EUnitKind::QuotedIdentifier: - return "string.tablepath"; - case EUnitKind::BindParameterIdentifier: - return "variable"; - case EUnitKind::TypeIdentifier: - return "keyword.type"; - case EUnitKind::FunctionIdentifier: - return "support.function"; - case EUnitKind::Identifier: - return "identifier"; - case EUnitKind::Literal: - return "number"; - case EUnitKind::StringLiteral: - return "string"; - case EUnitKind::Comment: - return "comment"; - case EUnitKind::Whitespace: - return "white"; - case EUnitKind::Error: - return ""; - } + if (unit.IsPlain && pattern.Before.empty()) { + regex << R"re(\b)re"; } - TString ToMonarchStateName(EUnitKind kind) { - switch (kind) { - case EUnitKind::Keyword: - return "keyword"; - case EUnitKind::Punctuation: - return "punctuation"; - case EUnitKind::QuotedIdentifier: - return "quotedIdentifier"; - case EUnitKind::BindParameterIdentifier: - return "bindParameterIdentifier"; - case EUnitKind::TypeIdentifier: - return "typeIdentifier"; - case EUnitKind::FunctionIdentifier: - return "functionIdentifier"; - case EUnitKind::Identifier: - return "identifier"; - case EUnitKind::Literal: - return "literal"; - case EUnitKind::StringLiteral: - return "stringLiteral"; - case EUnitKind::Comment: - return "comment"; - case EUnitKind::Whitespace: - return "whitespace"; - case EUnitKind::Error: - return "error"; - } + return regex; +} + +TString ToMonarchSelector(EUnitKind kind) { + switch (kind) { + case EUnitKind::Keyword: + return "keyword"; + case EUnitKind::Punctuation: + return "operator.sql"; + case EUnitKind::QuotedIdentifier: + return "string.tablepath"; + case EUnitKind::BindParameterIdentifier: + return "variable"; + case EUnitKind::TypeIdentifier: + return "keyword.type"; + case EUnitKind::FunctionIdentifier: + return "support.function"; + case EUnitKind::Identifier: + return "identifier"; + case EUnitKind::Literal: + return "number"; + case EUnitKind::StringLiteral: + return "string"; + case EUnitKind::Comment: + return "comment"; + case EUnitKind::Whitespace: + return "white"; + case EUnitKind::Error: + return ""; } +} + +TString ToMonarchStateName(EUnitKind kind) { + switch (kind) { + case EUnitKind::Keyword: + return "keyword"; + case EUnitKind::Punctuation: + return "punctuation"; + case EUnitKind::QuotedIdentifier: + return "quotedIdentifier"; + case EUnitKind::BindParameterIdentifier: + return "bindParameterIdentifier"; + case EUnitKind::TypeIdentifier: + return "typeIdentifier"; + case EUnitKind::FunctionIdentifier: + return "functionIdentifier"; + case EUnitKind::Identifier: + return "identifier"; + case EUnitKind::Literal: + return "literal"; + case EUnitKind::StringLiteral: + return "stringLiteral"; + case EUnitKind::Comment: + return "comment"; + case EUnitKind::Whitespace: + return "whitespace"; + case EUnitKind::Error: + return "error"; + } +} - NJson::TJsonValue ToMonarchMultiLineState(const TUnit& unit, bool ansi) { - Y_ENSURE(unit.RangePattern); - - TString group = ToMonarchSelector(unit.Kind); - TString begin = RE2::QuoteMeta(unit.RangePattern->Begin); - TString end = RE2::QuoteMeta(unit.RangePattern->End); - - NJson::TJsonValue json; - - if (unit.Kind == EUnitKind::StringLiteral) { - json.AppendValue(NJson::TJsonArray{ - "#py", - NJson::TJsonMap{ - {"token", "string.python"}, - {"nextEmbedded", "python"}, - {"next", "@embedded"}, - {"goBack", 3}, - }, - }); - json.AppendValue(NJson::TJsonArray{ - "\\/\\/js", - NJson::TJsonMap{ - {"token", "string.js"}, - {"nextEmbedded", "javascript"}, - {"next", "@embedded"}, - {"goBack", 4}, - }, - }); - json.AppendValue(NJson::TJsonArray{ - "{", - NJson::TJsonMap{ - {"token", "string.json"}, - {"nextEmbedded", "json"}, - {"next", "@embedded"}, - {"goBack", 1}, - }, - }); - } else if (unit.Kind == EUnitKind::Comment && ansi) { - json.AppendValue(NJson::TJsonArray{begin, group, "@" + group}); - } +NJson::TJsonValue ToMonarchMultiLineState(const TUnit& unit, bool ansi) { + Y_ENSURE(unit.RangePattern); - json.AppendValue(NJson::TJsonArray{"[^" + begin + "]", group}); - json.AppendValue(NJson::TJsonArray{end, group, "@pop"}); - json.AppendValue(NJson::TJsonArray{begin, group}); + TString group = ToMonarchSelector(unit.Kind); + TString begin = RE2::QuoteMeta(unit.RangePattern->Begin); + TString end = RE2::QuoteMeta(unit.RangePattern->End); - return json; - } + NJson::TJsonValue json; - NJson::TJsonValue MonarchEmbeddedState() { - return NJson::TJsonArray{{NJson::TJsonArray{ - "([^@]|^)([@]{4})*[@]{2}([@]([^@]|$)|[^@]|$)", + if (unit.Kind == EUnitKind::StringLiteral) { + json.AppendValue(NJson::TJsonArray{ + "#py", NJson::TJsonMap{ - {"token", "@rematch"}, - {"next", "@pop"}, - {"nextEmbedded", "@pop"}, + {"token", "string.python"}, + {"nextEmbedded", "python"}, + {"next", "@embedded"}, + {"goBack", 3}, }, - }}}; - } - - NJson::TJsonValue ToMonarchWhitespaceState(const THighlighting& highlighting) { - NJson::TJsonValue json; - - const TUnit& ws = *FindIfPtr(highlighting.Units, [](const TUnit& unit) { - return unit.Kind == EUnitKind::Whitespace; }); - Y_ENSURE(ws.Patterns.size() == 1); - json.AppendValue(NJson::TJsonArray{ToMonarchRegex(ws, ws.Patterns.at(0)), "white"}); - - ForEachMultiLine(highlighting, [&](const TUnit& unit) { - json.AppendValue(NJson::TJsonArray{ - RE2::QuoteMeta(unit.RangePattern->Begin), - ToMonarchSelector(unit.Kind), - "@" + ToMonarchStateName(unit.Kind), - }); + json.AppendValue(NJson::TJsonArray{ + "\\/\\/js", + NJson::TJsonMap{ + {"token", "string.js"}, + {"nextEmbedded", "javascript"}, + {"next", "@embedded"}, + {"goBack", 4}, + }, }); - - return json; - } - - NJson::TJsonValue ToMonarchRootState(const THighlighting& highlighting, bool ansi) { - NJson::TJsonValue json; - json.AppendValue(NJson::TJsonMap{{"include", "@whitespace"}}); - for (const TUnit& unit : highlighting.Units) { - if (unit.IsCodeGenExcluded) { - continue; - } - - TString group = ToMonarchSelector(unit.Kind); - - const auto* patterns = &unit.Patterns; - if (!unit.PatternsANSI.Empty() && ansi) { - patterns = unit.PatternsANSI.Get(); - } - - for (const NSQLTranslationV1::TRegexPattern& pattern : *patterns) { - TString regex = ToMonarchRegex(unit, pattern); - json.AppendValue(NJson::TJsonArray{regex, group}); - } - } - return json; + json.AppendValue(NJson::TJsonArray{ + "{", + NJson::TJsonMap{ + {"token", "string.json"}, + {"nextEmbedded", "json"}, + {"next", "@embedded"}, + {"goBack", 1}, + }, + }); + } else if (unit.Kind == EUnitKind::Comment && ansi) { + json.AppendValue(NJson::TJsonArray{begin, group, "@" + group}); } - void GenerateMonarch(IOutputStream& out, const THighlighting& highlighting, bool ansi) { - NJsonWriter::TBuf buf(NJsonWriter::HEM_DONT_ESCAPE_HTML, &out); - buf.SetIndentSpaces(4); - - const auto write_json = [&](TStringBuf key, const NJson::TJsonValue& json) { - buf.WriteKey(key); - buf.WriteJsonValue(&json); - }; + json.AppendValue(NJson::TJsonArray{"[^" + begin + "]", group}); + json.AppendValue(NJson::TJsonArray{end, group, "@pop"}); + json.AppendValue(NJson::TJsonArray{begin, group}); + + return json; +} + +NJson::TJsonValue MonarchEmbeddedState() { + return NJson::TJsonArray{{NJson::TJsonArray{ + "([^@]|^)([@]{4})*[@]{2}([@]([^@]|$)|[^@]|$)", + NJson::TJsonMap{ + {"token", "@rematch"}, + {"next", "@pop"}, + {"nextEmbedded", "@pop"}, + }, + }}}; +} + +NJson::TJsonValue ToMonarchWhitespaceState(const THighlighting& highlighting) { + NJson::TJsonValue json; + + const TUnit& ws = *FindIfPtr(highlighting.Units, [](const TUnit& unit) { + return unit.Kind == EUnitKind::Whitespace; + }); + Y_ENSURE(ws.Patterns.size() == 1); + json.AppendValue(NJson::TJsonArray{ToMonarchRegex(ws, ws.Patterns.at(0)), "white"}); + + ForEachMultiLine(highlighting, [&](const TUnit& unit) { + json.AppendValue(NJson::TJsonArray{ + RE2::QuoteMeta(unit.RangePattern->Begin), + ToMonarchSelector(unit.Kind), + "@" + ToMonarchStateName(unit.Kind), + }); + }); - buf.BeginObject(); + return json; +} - buf.WriteKey("ignoreCase"); - buf.WriteBool(IsCaseInsensitive(highlighting)); +NJson::TJsonValue ToMonarchRootState(const THighlighting& highlighting, bool ansi) { + NJson::TJsonValue json; + json.AppendValue(NJson::TJsonMap{{"include", "@whitespace"}}); + for (const TUnit& unit : highlighting.Units) { + if (unit.IsCodeGenExcluded) { + continue; + } - buf.WriteKey("tokenizer"); - buf.BeginObject(); - write_json("root", ToMonarchRootState(highlighting, ansi)); - write_json("whitespace", ToMonarchWhitespaceState(highlighting)); - ForEachMultiLine(highlighting, [&](const TUnit& unit) { - write_json(ToMonarchStateName(unit.Kind), ToMonarchMultiLineState(unit, ansi)); - }); - write_json("embedded", MonarchEmbeddedState()); - buf.EndObject(); + TString group = ToMonarchSelector(unit.Kind); - buf.EndObject(); - } + const auto* patterns = &unit.Patterns; + if (!unit.PatternsANSI.Empty() && ansi) { + patterns = unit.PatternsANSI.Get(); + } - IGenerator::TPtr MakeMonarchGenerator() { - return MakeOnlyFileGenerator(GenerateMonarch); + for (const NSQLTranslationV1::TRegexPattern& pattern : *patterns) { + TString regex = ToMonarchRegex(unit, pattern); + json.AppendValue(NJson::TJsonArray{regex, group}); + } } + return json; +} + +void GenerateMonarch(IOutputStream& out, const THighlighting& highlighting, bool ansi) { + NJsonWriter::TBuf buf(NJsonWriter::HEM_DONT_ESCAPE_HTML, &out); + buf.SetIndentSpaces(4); + + const auto write_json = [&](TStringBuf key, const NJson::TJsonValue& json) { + buf.WriteKey(key); + buf.WriteJsonValue(&json); + }; + + buf.BeginObject(); + + buf.WriteKey("ignoreCase"); + buf.WriteBool(IsCaseInsensitive(highlighting)); + + buf.WriteKey("tokenizer"); + buf.BeginObject(); + write_json("root", ToMonarchRootState(highlighting, ansi)); + write_json("whitespace", ToMonarchWhitespaceState(highlighting)); + ForEachMultiLine(highlighting, [&](const TUnit& unit) { + write_json(ToMonarchStateName(unit.Kind), ToMonarchMultiLineState(unit, ansi)); + }); + write_json("embedded", MonarchEmbeddedState()); + buf.EndObject(); + + buf.EndObject(); +} + +IGenerator::TPtr MakeMonarchGenerator() { + return MakeOnlyFileGenerator(GenerateMonarch); +} } // namespace NSQLHighlight diff --git a/yql/essentials/tools/yql_highlight/generator_monarch.h b/yql/essentials/tools/yql_highlight/generator_monarch.h index d42841a53b3..ef6a9492e1d 100644 --- a/yql/essentials/tools/yql_highlight/generator_monarch.h +++ b/yql/essentials/tools/yql_highlight/generator_monarch.h @@ -4,6 +4,6 @@ namespace NSQLHighlight { - IGenerator::TPtr MakeMonarchGenerator(); +IGenerator::TPtr MakeMonarchGenerator(); } // namespace NSQLHighlight diff --git a/yql/essentials/tools/yql_highlight/generator_textmate.cpp b/yql/essentials/tools/yql_highlight/generator_textmate.cpp index 8de2a201eb2..3450715ecb6 100644 --- a/yql/essentials/tools/yql_highlight/generator_textmate.cpp +++ b/yql/essentials/tools/yql_highlight/generator_textmate.cpp @@ -14,323 +14,323 @@ namespace NSQLHighlight { - namespace NTextMate { +namespace NTextMate { - using TRegex = TString; +using TRegex = TString; - struct TRange { - TRegex Begin; - TRegex End; - }; +struct TRange { + TRegex Begin; + TRegex End; +}; - struct TMatcher { - TString Name; - TString Group; - std::variant Pattern; - }; +struct TMatcher { + TString Name; + TString Group; + std::variant Pattern; +}; - struct TLanguage { - TString Name; - TString ScopeName; - TString FileType; - TVector Matchers; - }; +struct TLanguage { + TString Name; + TString ScopeName; + TString FileType; + TVector Matchers; +}; - } // namespace NTextMate +} // namespace NTextMate - namespace { +namespace { - NTextMate::TRegex ToTextMateRegex(const TUnit& unit, const NSQLTranslationV1::TRegexPattern& pattern) { - TStringBuilder regex; +NTextMate::TRegex ToTextMateRegex(const TUnit& unit, const NSQLTranslationV1::TRegexPattern& pattern) { + TStringBuilder regex; - if (pattern.IsCaseInsensitive) { - regex << "(?i)"; - } + if (pattern.IsCaseInsensitive) { + regex << "(?i)"; + } - if (unit.IsPlain) { - regex << R"re(\b)re"; - } + if (unit.IsPlain) { + regex << R"re(\b)re"; + } - if (!pattern.Before.empty()) { - regex << "(?<=" << pattern.Before << ")"; - } + if (!pattern.Before.empty()) { + regex << "(?<=" << pattern.Before << ")"; + } - regex << "(" << pattern.Body << ")"; + regex << "(" << pattern.Body << ")"; - if (!pattern.After.empty()) { - regex << "(?=" << pattern.After << ")"; - } + if (!pattern.After.empty()) { + regex << "(?=" << pattern.After << ")"; + } - if (unit.IsPlain) { - regex << R"re(\b)re"; - } + if (unit.IsPlain) { + regex << R"re(\b)re"; + } - return regex; - } + return regex; +} + +TString ToTextMateGroup(EUnitKind kind) { + switch (kind) { + case EUnitKind::Keyword: + return "keyword.control"; + case EUnitKind::Punctuation: + return "keyword.operator"; + case EUnitKind::QuotedIdentifier: + return "string.interpolated"; + case EUnitKind::BindParameterIdentifier: + return "variable.parameter"; + case EUnitKind::TypeIdentifier: + return "entity.name.type"; + case EUnitKind::FunctionIdentifier: + return "entity.name.function"; + case EUnitKind::Identifier: + return "variable.other"; + case EUnitKind::Literal: + return "constant.numeric"; + case EUnitKind::StringLiteral: + return "string.quoted.double"; + case EUnitKind::Comment: + return "comment.block"; + case EUnitKind::Whitespace: + return ""; + case EUnitKind::Error: + return ""; + } +} - TString ToTextMateGroup(EUnitKind kind) { - switch (kind) { - case EUnitKind::Keyword: - return "keyword.control"; - case EUnitKind::Punctuation: - return "keyword.operator"; - case EUnitKind::QuotedIdentifier: - return "string.interpolated"; - case EUnitKind::BindParameterIdentifier: - return "variable.parameter"; - case EUnitKind::TypeIdentifier: - return "entity.name.type"; - case EUnitKind::FunctionIdentifier: - return "entity.name.function"; - case EUnitKind::Identifier: - return "variable.other"; - case EUnitKind::Literal: - return "constant.numeric"; - case EUnitKind::StringLiteral: - return "string.quoted.double"; - case EUnitKind::Comment: - return "comment.block"; - case EUnitKind::Whitespace: - return ""; - case EUnitKind::Error: - return ""; - } - } +TString ToTextMateName(EUnitKind kind) { + return ToString(kind); +} - TString ToTextMateName(EUnitKind kind) { - return ToString(kind); - } +TMaybe TextMateMultilinePattern(const TUnit& unit) { + auto range = unit.RangePattern; + if (!range) { + return Nothing(); + } - TMaybe TextMateMultilinePattern(const TUnit& unit) { - auto range = unit.RangePattern; - if (!range) { - return Nothing(); - } - - return NTextMate::TMatcher{ - .Name = ToTextMateName(unit.Kind), - .Group = ToTextMateGroup(unit.Kind), - .Pattern = NTextMate::TRange{ - .Begin = RE2::QuoteMeta(range->Begin), - .End = RE2::QuoteMeta(range->End), - }, - }; - } + return NTextMate::TMatcher{ + .Name = ToTextMateName(unit.Kind), + .Group = ToTextMateGroup(unit.Kind), + .Pattern = NTextMate::TRange{ + .Begin = RE2::QuoteMeta(range->Begin), + .End = RE2::QuoteMeta(range->End), + }, + }; +} - NTextMate::TMatcher ToTextMatePattern(const TUnit& unit, const NSQLTranslationV1::TRegexPattern& pattern) { - return NTextMate::TMatcher{ - .Name = ToTextMateName(unit.Kind), - .Group = ToTextMateGroup(unit.Kind), - .Pattern = ToTextMateRegex(unit, pattern), - }; - } +NTextMate::TMatcher ToTextMatePattern(const TUnit& unit, const NSQLTranslationV1::TRegexPattern& pattern) { + return NTextMate::TMatcher{ + .Name = ToTextMateName(unit.Kind), + .Group = ToTextMateGroup(unit.Kind), + .Pattern = ToTextMateRegex(unit, pattern), + }; +} - } // namespace +} // namespace - NTextMate::TLanguage ToTextMateLanguage(const THighlighting& highlighting) { - NTextMate::TLanguage language = { - .Name = highlighting.Name, - .ScopeName = "source." + highlighting.Extension, - .FileType = highlighting.Extension, - }; +NTextMate::TLanguage ToTextMateLanguage(const THighlighting& highlighting) { + NTextMate::TLanguage language = { + .Name = highlighting.Name, + .ScopeName = "source." + highlighting.Extension, + .FileType = highlighting.Extension, + }; - for (const TUnit& unit : highlighting.Units) { - if (unit.IsCodeGenExcluded) { - continue; - } - - for (const NSQLTranslationV1::TRegexPattern& pattern : unit.Patterns) { - language.Matchers.emplace_back(ToTextMatePattern(unit, pattern)); - } - if (auto textmate = TextMateMultilinePattern(unit)) { - language.Matchers.emplace_back(*textmate); - } + for (const TUnit& unit : highlighting.Units) { + if (unit.IsCodeGenExcluded) { + continue; } - return language; - } - - NJson::TJsonValue ToJson(const NTextMate::TMatcher& matcher) { - NJson::TJsonMap json = {{"name", matcher.Group}}; - std::visit([&](const auto& pattern) { - using T = std::decay_t; - - if constexpr (std::is_same_v) { - json["match"] = pattern; - } else if constexpr (std::is_same_v) { - json["begin"] = pattern.Begin; - json["end"] = pattern.End; - } else { - static_assert(false); - } - }, matcher.Pattern); - return json; - } - - NJson::TJsonValue ToJson(const NTextMate::TLanguage& language) { - NJson::TJsonMap root; - root["$schema"] = "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json"; - root["name"] = language.FileType; - root["scopeName"] = language.ScopeName; - root["scope"] = language.ScopeName; - root["fileTypes"] = NJson::TJsonArray({language.FileType}); - - root["patterns"].AppendValue(NJson::TJsonMap({ - {"begin", "@@#py"}, - {"end", "@@"}, - {"patterns", NJson::TJsonArray({NJson::TJsonMap{{"include", "source.python"}}})}, - })); - - root["patterns"].AppendValue(NJson::TJsonMap({ - {"begin", "@@//js"}, - {"end", "@@"}, - {"patterns", NJson::TJsonArray({NJson::TJsonMap{{"include", "source.js"}}})}, - })); - - root["patterns"].AppendValue(NJson::TJsonMap({ - {"begin", "@@{"}, - {"end", "@@"}, - {"patterns", NJson::TJsonArray({NJson::TJsonMap{{"include", "source.json"}}})}, - })); - - THashSet visited; - for (const NTextMate::TMatcher& matcher : language.Matchers) { - root["repository"][matcher.Name]["patterns"].AppendValue(ToJson(matcher)); - - if (!visited.contains(matcher.Name)) { - root["patterns"].AppendValue(NJson::TJsonMap({{"include", "#" + matcher.Name}})); - visited.emplace(matcher.Name); - } + for (const NSQLTranslationV1::TRegexPattern& pattern : unit.Patterns) { + language.Matchers.emplace_back(ToTextMatePattern(unit, pattern)); + } + if (auto textmate = TextMateMultilinePattern(unit)) { + language.Matchers.emplace_back(*textmate); } - - return root; } - TString EscapeXML(TString string) { - SubstGlobal(string, "<", "<"); - SubstGlobal(string, ">", ">"); - return string; - } + return language; +} + +NJson::TJsonValue ToJson(const NTextMate::TMatcher& matcher) { + NJson::TJsonMap json = {{"name", matcher.Group}}; + std::visit([&](const auto& pattern) { + using T = std::decay_t; - void WriteXML(IOutputStream& out, const NJson::TJsonValue& json, TString indent = "") { - static constexpr TStringBuf extra = " "; - - if (TString string; json.GetString(&string)) { - out << indent << "" << EscapeXML(string) << "" << "\n"; - } else if (NJson::TJsonValue::TMapType dict; json.GetMap(&dict)) { - out << indent << "" << '\n'; - for (const auto& [key, value] : dict) { - out << indent << extra << "" << EscapeXML(key) << "" << '\n'; - WriteXML(out, value, indent + extra); - } - out << indent << "" << '\n'; - } else if (NJson::TJsonValue::TArray array; json.GetArray(&array)) { - out << indent << "" << '\n'; - for (const auto& value : array) { - WriteXML(out, value, indent + extra); - } - out << indent << "" << '\n'; + if constexpr (std::is_same_v) { + json["match"] = pattern; + } else if constexpr (std::is_same_v) { + json["begin"] = pattern.Begin; + json["end"] = pattern.End; } else { - TStringStream str; - Print(str, json); - ythrow yexception() << "Unexpected JSON '" + str.Str() + "'"; + static_assert(false); + } + }, matcher.Pattern); + return json; +} + +NJson::TJsonValue ToJson(const NTextMate::TLanguage& language) { + NJson::TJsonMap root; + root["$schema"] = "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json"; + root["name"] = language.FileType; + root["scopeName"] = language.ScopeName; + root["scope"] = language.ScopeName; + root["fileTypes"] = NJson::TJsonArray({language.FileType}); + + root["patterns"].AppendValue(NJson::TJsonMap({ + {"begin", "@@#py"}, + {"end", "@@"}, + {"patterns", NJson::TJsonArray({NJson::TJsonMap{{"include", "source.python"}}})}, + })); + + root["patterns"].AppendValue(NJson::TJsonMap({ + {"begin", "@@//js"}, + {"end", "@@"}, + {"patterns", NJson::TJsonArray({NJson::TJsonMap{{"include", "source.js"}}})}, + })); + + root["patterns"].AppendValue(NJson::TJsonMap({ + {"begin", "@@{"}, + {"end", "@@"}, + {"patterns", NJson::TJsonArray({NJson::TJsonMap{{"include", "source.json"}}})}, + })); + + THashSet visited; + for (const NTextMate::TMatcher& matcher : language.Matchers) { + root["repository"][matcher.Name]["patterns"].AppendValue(ToJson(matcher)); + + if (!visited.contains(matcher.Name)) { + root["patterns"].AppendValue(NJson::TJsonMap({{"include", "#" + matcher.Name}})); + visited.emplace(matcher.Name); } } - void GenerateTextMateJson(IOutputStream& out, const THighlighting& highlighting, bool /* ansi */) { - Print(out, ToJson(ToTextMateLanguage(highlighting))); - } - - static const THashMap UUID = { - {"InfoYQL", "059de4a7-ff49-4dbd-8a9d-a8114b77c4b9"}, - {"SyntaxYQL", "bb7a80e5-733c-4ea6-9654-40db0675950c"}, - {"InfoYQLs", "7f536d44-2667-430e-b145-540992400cb3"}, - {"SyntaxYQLs", "6e62e13a-487b-4333-bbb2-9453d0783f8f"}, - }; - - class TTextMateBundleGenerator: public IGenerator { - private: - template - void Write( - NTar::TArchiveWriter& acrhive, - TStringBuf path, - TWriter writer, - const NTextMate::TLanguage& langugage) - { - TStringStream stream; - writer(stream, langugage); - TBlob blob = TBlob::FromString(stream.Str()); - acrhive.WriteFile(TString(path), blob); + return root; +} + +TString EscapeXML(TString string) { + SubstGlobal(string, "<", "<"); + SubstGlobal(string, ">", ">"); + return string; +} + +void WriteXML(IOutputStream& out, const NJson::TJsonValue& json, TString indent = "") { + static constexpr TStringBuf extra = " "; + + if (TString string; json.GetString(&string)) { + out << indent << "" << EscapeXML(string) << "" << "\n"; + } else if (NJson::TJsonValue::TMapType dict; json.GetMap(&dict)) { + out << indent << "" << '\n'; + for (const auto& [key, value] : dict) { + out << indent << extra << "" << EscapeXML(key) << "" << '\n'; + WriteXML(out, value, indent + extra); } - - public: - void Write(IOutputStream& out, const THighlighting& highlighting, bool /* ansi */) final { - const auto [bundle, info, syntax] = Paths(highlighting); - - out << "File " << bundle << "/" << info << ":" << '\n'; - WriteInfo(out, ToTextMateLanguage(highlighting)); - out << "File " << bundle << "/" << syntax << ":" << '\n'; - WriteSyntax(out, ToTextMateLanguage(highlighting)); + out << indent << "" << '\n'; + } else if (NJson::TJsonValue::TArray array; json.GetArray(&array)) { + out << indent << "" << '\n'; + for (const auto& value : array) { + WriteXML(out, value, indent + extra); } + out << indent << "" << '\n'; + } else { + TStringStream str; + Print(str, json); + ythrow yexception() << "Unexpected JSON '" + str.Str() + "'"; + } +} + +void GenerateTextMateJson(IOutputStream& out, const THighlighting& highlighting, bool /* ansi */) { + Print(out, ToJson(ToTextMateLanguage(highlighting))); +} + +static const THashMap UUID = { + {"InfoYQL", "059de4a7-ff49-4dbd-8a9d-a8114b77c4b9"}, + {"SyntaxYQL", "bb7a80e5-733c-4ea6-9654-40db0675950c"}, + {"InfoYQLs", "7f536d44-2667-430e-b145-540992400cb3"}, + {"SyntaxYQLs", "6e62e13a-487b-4333-bbb2-9453d0783f8f"}, +}; + +class TTextMateBundleGenerator: public IGenerator { +private: + template + void Write( + NTar::TArchiveWriter& acrhive, + TStringBuf path, + TWriter writer, + const NTextMate::TLanguage& langugage) + { + TStringStream stream; + writer(stream, langugage); + TBlob blob = TBlob::FromString(stream.Str()); + acrhive.WriteFile(TString(path), blob); + } - void Write(const TFsPath& path, const THighlighting& highlighting, bool /* ansi */) final { - const auto [bundle, info, syntax] = Paths(highlighting); - - if (TString name = path.GetName(); !name.StartsWith(bundle)) { - ythrow yexception() - << "Invalid path '" << name - << "', expected '" << bundle << "' " - << "as an archive name"; - } +public: + void Write(IOutputStream& out, const THighlighting& highlighting, bool /* ansi */) final { + const auto [bundle, info, syntax] = Paths(highlighting); - NTextMate::TLanguage language = ToTextMateLanguage(highlighting); + out << "File " << bundle << "/" << info << ":" << '\n'; + WriteInfo(out, ToTextMateLanguage(highlighting)); + out << "File " << bundle << "/" << syntax << ":" << '\n'; + WriteSyntax(out, ToTextMateLanguage(highlighting)); + } - NTar::TArchiveWriter archive(path); - Write(archive, info, WriteInfo, language); - Write(archive, syntax, WriteSyntax, language); - } + void Write(const TFsPath& path, const THighlighting& highlighting, bool /* ansi */) final { + const auto [bundle, info, syntax] = Paths(highlighting); - private: - static std::tuple Paths(const THighlighting& h) { - return { - TStringBuilder() << h.Name << ".tmbundle", - TStringBuilder() << "info.plist", - TStringBuilder() << "Syntaxes/" << h.Name << ".tmLanguage", - }; + if (TString name = path.GetName(); !name.StartsWith(bundle)) { + ythrow yexception() + << "Invalid path '" << name + << "', expected '" << bundle << "' " + << "as an archive name"; } - static void WriteInfo(IOutputStream& out, const NTextMate::TLanguage& language) { - out << R"()" << '\n'; - out << R"()" << '\n'; - out << R"()" << '\n'; - out << R"()" << '\n'; - out << R"( name)" << '\n'; - out << R"( )" << language.Name << R"()" << '\n'; - out << R"( uuid)" << '\n'; - out << R"( )" << UUID.at("Info" + language.Name) << R"()" << '\n'; - out << R"()" << '\n'; - out << R"()" << '\n'; - } + NTextMate::TLanguage language = ToTextMateLanguage(highlighting); - static void WriteSyntax(IOutputStream& out, const NTextMate::TLanguage& language) { - NJson::TJsonValue json = ToJson(language); - json.EraseValue("$schema"); - json["uuid"] = UUID.at("Syntax" + language.Name); + NTar::TArchiveWriter archive(path); + Write(archive, info, WriteInfo, language); + Write(archive, syntax, WriteSyntax, language); + } - out << R"()" << '\n'; - out << R"()" << '\n'; - out << R"()" << '\n'; - WriteXML(out, json); - out << R"()" << '\n'; - } - }; +private: + static std::tuple Paths(const THighlighting& h) { + return { + TStringBuilder() << h.Name << ".tmbundle", + TStringBuilder() << "info.plist", + TStringBuilder() << "Syntaxes/" << h.Name << ".tmLanguage", + }; + } - IGenerator::TPtr MakeTextMateJsonGenerator() { - return MakeOnlyFileGenerator(GenerateTextMateJson); + static void WriteInfo(IOutputStream& out, const NTextMate::TLanguage& language) { + out << R"()" << '\n'; + out << R"()" << '\n'; + out << R"()" << '\n'; + out << R"()" << '\n'; + out << R"( name)" << '\n'; + out << R"( )" << language.Name << R"()" << '\n'; + out << R"( uuid)" << '\n'; + out << R"( )" << UUID.at("Info" + language.Name) << R"()" << '\n'; + out << R"()" << '\n'; + out << R"()" << '\n'; } - IGenerator::TPtr MakeTextMateBundleGenerator() { - return new TTextMateBundleGenerator(); + static void WriteSyntax(IOutputStream& out, const NTextMate::TLanguage& language) { + NJson::TJsonValue json = ToJson(language); + json.EraseValue("$schema"); + json["uuid"] = UUID.at("Syntax" + language.Name); + + out << R"()" << '\n'; + out << R"()" << '\n'; + out << R"()" << '\n'; + WriteXML(out, json); + out << R"()" << '\n'; } +}; + +IGenerator::TPtr MakeTextMateJsonGenerator() { + return MakeOnlyFileGenerator(GenerateTextMateJson); +} + +IGenerator::TPtr MakeTextMateBundleGenerator() { + return new TTextMateBundleGenerator(); +} } // namespace NSQLHighlight diff --git a/yql/essentials/tools/yql_highlight/generator_textmate.h b/yql/essentials/tools/yql_highlight/generator_textmate.h index d1ffbac87a2..87e4dad947f 100644 --- a/yql/essentials/tools/yql_highlight/generator_textmate.h +++ b/yql/essentials/tools/yql_highlight/generator_textmate.h @@ -4,8 +4,8 @@ namespace NSQLHighlight { - IGenerator::TPtr MakeTextMateJsonGenerator(); +IGenerator::TPtr MakeTextMateJsonGenerator(); - IGenerator::TPtr MakeTextMateBundleGenerator(); +IGenerator::TPtr MakeTextMateBundleGenerator(); } // namespace NSQLHighlight diff --git a/yql/essentials/tools/yql_highlight/generator_vim.cpp b/yql/essentials/tools/yql_highlight/generator_vim.cpp index a709e4cba90..4029844dc0d 100644 --- a/yql/essentials/tools/yql_highlight/generator_vim.cpp +++ b/yql/essentials/tools/yql_highlight/generator_vim.cpp @@ -10,172 +10,172 @@ namespace NSQLHighlight { - namespace { +namespace { - TString ToVim(TString regex) { - static RE2 LikelyUnquotedLParen(R"((^|[^\\])(\())"); - static RE2 LikelyNonGreedyMatch(R"re((^|[^\\])(\*\?))re"); +TString ToVim(TString regex) { + static RE2 LikelyUnquotedLParen(R"((^|[^\\])(\())"); + static RE2 LikelyNonGreedyMatch(R"re((^|[^\\])(\*\?))re"); - // We can leave some capturing groups in case `\\\\(`, - // but it is okay as the goal is to meet the Vim limit. + // We can leave some capturing groups in case `\\\\(`, + // but it is okay as the goal is to meet the Vim limit. - YQL_ENSURE(!regex.Contains(R"(\\*?)"), "" << regex); + YQL_ENSURE(!regex.Contains(R"(\\*?)"), "" << regex); - RE2::GlobalReplace(®ex, LikelyUnquotedLParen, R"(\1%()"); - RE2::GlobalReplace(®ex, LikelyNonGreedyMatch, R"re(\1{-})re"); + RE2::GlobalReplace(®ex, LikelyUnquotedLParen, R"(\1%()"); + RE2::GlobalReplace(®ex, LikelyNonGreedyMatch, R"re(\1{-})re"); - return regex; - } - - TString ToVim(const TUnit& unit, const NSQLTranslationV1::TRegexPattern& pattern) { - TStringBuilder vim; + return regex; +} - vim << R"(")"; - vim << R"(\v)"; +TString ToVim(const TUnit& unit, const NSQLTranslationV1::TRegexPattern& pattern) { + TStringBuilder vim; - if (unit.IsPlain) { - vim << R"(<)"; - } + vim << R"(")"; + vim << R"(\v)"; - if (pattern.IsCaseInsensitive) { - vim << R"(\c)"; - } + if (unit.IsPlain) { + vim << R"(<)"; + } - if (!pattern.Before.empty()) { - vim << "(" << ToVim(pattern.Before) << ")@<="; - } + if (pattern.IsCaseInsensitive) { + vim << R"(\c)"; + } - vim << "(" << ToVim(pattern.Body) << ")"; + if (!pattern.Before.empty()) { + vim << "(" << ToVim(pattern.Before) << ")@<="; + } - if (!pattern.After.empty()) { - vim << "(" << ToVim(pattern.After) << ")@="; - } + vim << "(" << ToVim(pattern.Body) << ")"; - if (unit.IsPlain) { - vim << R"(>)"; - } + if (!pattern.After.empty()) { + vim << "(" << ToVim(pattern.After) << ")@="; + } - vim << R"(")"; + if (unit.IsPlain) { + vim << R"(>)"; + } - // Prevent a range pattern conflict - if (unit.RangePattern) { - SubstGlobal(vim, "|\\n", ""); - } + vim << R"(")"; - return vim; - } + // Prevent a range pattern conflict + if (unit.RangePattern) { + SubstGlobal(vim, "|\\n", ""); + } - TString ToVimName(EUnitKind kind) { - switch (kind) { - case EUnitKind::Keyword: - return "yqlKeyword"; - case EUnitKind::Punctuation: - return "yqlPunctuation"; - case EUnitKind::QuotedIdentifier: - return "yqlQuotedIdentifier"; - case EUnitKind::BindParameterIdentifier: - return "yqlBindParameterIdentifier"; - case EUnitKind::TypeIdentifier: - return "yqlTypeIdentifier"; - case EUnitKind::FunctionIdentifier: - return "yqlFunctionIdentifier"; - case EUnitKind::Identifier: - return "yqlIdentifier"; - case EUnitKind::Literal: - return "yqlLiteral"; - case EUnitKind::StringLiteral: - return "yqlStringLiteral"; - case EUnitKind::Comment: - return "yqlComment"; - case EUnitKind::Whitespace: - return "yqlWhitespace"; - case EUnitKind::Error: - return "yqlError"; - } - } + return vim; +} + +TString ToVimName(EUnitKind kind) { + switch (kind) { + case EUnitKind::Keyword: + return "yqlKeyword"; + case EUnitKind::Punctuation: + return "yqlPunctuation"; + case EUnitKind::QuotedIdentifier: + return "yqlQuotedIdentifier"; + case EUnitKind::BindParameterIdentifier: + return "yqlBindParameterIdentifier"; + case EUnitKind::TypeIdentifier: + return "yqlTypeIdentifier"; + case EUnitKind::FunctionIdentifier: + return "yqlFunctionIdentifier"; + case EUnitKind::Identifier: + return "yqlIdentifier"; + case EUnitKind::Literal: + return "yqlLiteral"; + case EUnitKind::StringLiteral: + return "yqlStringLiteral"; + case EUnitKind::Comment: + return "yqlComment"; + case EUnitKind::Whitespace: + return "yqlWhitespace"; + case EUnitKind::Error: + return "yqlError"; + } +} + +TString VimRangeEscaped(TString range) { + SubstGlobal(range, "*", "\\*"); + return range; +} + +void PrintRules(IOutputStream& out, const TUnit& unit) { + TString name = ToVimName(unit.Kind); + for (const auto& pattern : std::ranges::reverse_view(unit.Patterns)) { + out << "syn match " << ToVimName(unit.Kind) << " " + << ToVim(unit, pattern) << '\n'; + } + if (auto range = unit.RangePattern) { + out << "syntax region " << name << "Multiline" << " " + << "start=\"" << VimRangeEscaped(range->Begin) << "\" " + << "end=\"" << VimRangeEscaped(range->End) << "\"" + << '\n'; + } +} + +TVector ToVimGroups(EUnitKind kind) { + switch (kind) { + case EUnitKind::Keyword: + return {"Keyword"}; + case EUnitKind::Punctuation: + return {"Operator"}; + case EUnitKind::QuotedIdentifier: + return {"Special", "Underlined"}; + case EUnitKind::BindParameterIdentifier: + return {"Define"}; + case EUnitKind::TypeIdentifier: + return {"Type"}; + case EUnitKind::FunctionIdentifier: + return {"Function"}; + case EUnitKind::Identifier: + return {"Identifier"}; + case EUnitKind::Literal: + return {"Number"}; + case EUnitKind::StringLiteral: + return {"String"}; + case EUnitKind::Comment: + return {"Comment"}; + case EUnitKind::Whitespace: + return {}; + case EUnitKind::Error: + return {}; + } +} - TString VimRangeEscaped(TString range) { - SubstGlobal(range, "*", "\\*"); - return range; - } +} // namespace - void PrintRules(IOutputStream& out, const TUnit& unit) { - TString name = ToVimName(unit.Kind); - for (const auto& pattern : std::ranges::reverse_view(unit.Patterns)) { - out << "syn match " << ToVimName(unit.Kind) << " " - << ToVim(unit, pattern) << '\n'; - } - if (auto range = unit.RangePattern) { - out << "syntax region " << name << "Multiline" << " " - << "start=\"" << VimRangeEscaped(range->Begin) << "\" " - << "end=\"" << VimRangeEscaped(range->End) << "\"" - << '\n'; - } - } +void GenerateVim(IOutputStream& out, const THighlighting& highlighting, bool /* ansi */) { + out << "if exists(\"b:current_syntax\")" << '\n'; + out << " finish" << '\n'; + out << "endif" << '\n'; + out << '\n'; - TVector ToVimGroups(EUnitKind kind) { - switch (kind) { - case EUnitKind::Keyword: - return {"Keyword"}; - case EUnitKind::Punctuation: - return {"Operator"}; - case EUnitKind::QuotedIdentifier: - return {"Special", "Underlined"}; - case EUnitKind::BindParameterIdentifier: - return {"Define"}; - case EUnitKind::TypeIdentifier: - return {"Type"}; - case EUnitKind::FunctionIdentifier: - return {"Function"}; - case EUnitKind::Identifier: - return {"Identifier"}; - case EUnitKind::Literal: - return {"Number"}; - case EUnitKind::StringLiteral: - return {"String"}; - case EUnitKind::Comment: - return {"Comment"}; - case EUnitKind::Whitespace: - return {}; - case EUnitKind::Error: - return {}; - } + for (const TUnit& unit : std::ranges::reverse_view(highlighting.Units)) { + if (unit.IsCodeGenExcluded) { + continue; } - } // namespace - - void GenerateVim(IOutputStream& out, const THighlighting& highlighting, bool /* ansi */) { - out << "if exists(\"b:current_syntax\")" << '\n'; - out << " finish" << '\n'; - out << "endif" << '\n'; - out << '\n'; - - for (const TUnit& unit : std::ranges::reverse_view(highlighting.Units)) { - if (unit.IsCodeGenExcluded) { - continue; - } - - PrintRules(out, unit); - } + PrintRules(out, unit); + } - out << '\n'; + out << '\n'; - for (const TUnit& unit : std::ranges::reverse_view(highlighting.Units)) { - TString name = ToVimName(unit.Kind); - for (TStringBuf group : ToVimGroups(unit.Kind)) { - out << "highlight default link " << name << "Multiline" << " " << group << '\n'; - out << "highlight default link " << name << " " << group << '\n'; - } + for (const TUnit& unit : std::ranges::reverse_view(highlighting.Units)) { + TString name = ToVimName(unit.Kind); + for (TStringBuf group : ToVimGroups(unit.Kind)) { + out << "highlight default link " << name << "Multiline" << " " << group << '\n'; + out << "highlight default link " << name << " " << group << '\n'; } + } - out << '\n'; + out << '\n'; - out << "let b:current_syntax = \"" << highlighting.Extension << "\"" << '\n'; - out.Flush(); - } + out << "let b:current_syntax = \"" << highlighting.Extension << "\"" << '\n'; + out.Flush(); +} - IGenerator::TPtr MakeVimGenerator() { - return MakeOnlyFileGenerator(GenerateVim); - } +IGenerator::TPtr MakeVimGenerator() { + return MakeOnlyFileGenerator(GenerateVim); +} } // namespace NSQLHighlight diff --git a/yql/essentials/tools/yql_highlight/generator_vim.h b/yql/essentials/tools/yql_highlight/generator_vim.h index 1e3927f8417..560e67f31d4 100644 --- a/yql/essentials/tools/yql_highlight/generator_vim.h +++ b/yql/essentials/tools/yql_highlight/generator_vim.h @@ -4,6 +4,6 @@ namespace NSQLHighlight { - IGenerator::TPtr MakeVimGenerator(); +IGenerator::TPtr MakeVimGenerator(); } // namespace NSQLHighlight diff --git a/yql/essentials/tools/yql_highlight/highlighting.cpp b/yql/essentials/tools/yql_highlight/highlighting.cpp index 238eb1f32b3..d38eb96bfae 100644 --- a/yql/essentials/tools/yql_highlight/highlighting.cpp +++ b/yql/essentials/tools/yql_highlight/highlighting.cpp @@ -2,12 +2,12 @@ namespace NSQLHighlight { - bool IsCaseInsensitive(const THighlighting& highlighting) { - return AnyOf(highlighting.Units, [](const TUnit& unit) { - return AnyOf(unit.Patterns, [](const NSQLTranslationV1::TRegexPattern& p) { - return p.IsCaseInsensitive; - }); +bool IsCaseInsensitive(const THighlighting& highlighting) { + return AnyOf(highlighting.Units, [](const TUnit& unit) { + return AnyOf(unit.Patterns, [](const NSQLTranslationV1::TRegexPattern& p) { + return p.IsCaseInsensitive; }); - } + }); +} } // namespace NSQLHighlight diff --git a/yql/essentials/tools/yql_highlight/highlighting.h b/yql/essentials/tools/yql_highlight/highlighting.h index 6cb4e0dd691..66b5bdc7721 100644 --- a/yql/essentials/tools/yql_highlight/highlighting.h +++ b/yql/essentials/tools/yql_highlight/highlighting.h @@ -4,18 +4,18 @@ namespace NSQLHighlight { - bool IsCaseInsensitive(const THighlighting& highlighting); +bool IsCaseInsensitive(const THighlighting& highlighting); - template Action> - void ForEachMultiLine(const THighlighting& highlighting, Action action) { - for (const TUnit& unit : highlighting.Units) { - TMaybe range = unit.RangePattern; - if (!range) { - continue; - } - - action(unit); +template Action> +void ForEachMultiLine(const THighlighting& highlighting, Action action) { + for (const TUnit& unit : highlighting.Units) { + TMaybe range = unit.RangePattern; + if (!range) { + continue; } + + action(unit); } +} } // namespace NSQLHighlight diff --git a/yql/essentials/tools/yql_highlight/json.cpp b/yql/essentials/tools/yql_highlight/json.cpp index 114f53b9668..2c0c0167292 100644 --- a/yql/essentials/tools/yql_highlight/json.cpp +++ b/yql/essentials/tools/yql_highlight/json.cpp @@ -9,14 +9,14 @@ namespace NSQLHighlight { - void Print(IOutputStream& out, const NJson::TJsonValue& json) { - NJson::TJsonWriterConfig config = { - .SortKeys = true, - }; +void Print(IOutputStream& out, const NJson::TJsonValue& json) { + NJson::TJsonWriterConfig config = { + .SortKeys = true, + }; - TStringStream output; - NJson::WriteJson(&output, &json, config); - YQL_ENSURE(NJson::PrettifyJson(output.Str(), out)); - } + TStringStream output; + NJson::WriteJson(&output, &json, config); + YQL_ENSURE(NJson::PrettifyJson(output.Str(), out)); +} } // namespace NSQLHighlight diff --git a/yql/essentials/tools/yql_highlight/json.h b/yql/essentials/tools/yql_highlight/json.h index 08dd43173fb..748459cc5a5 100644 --- a/yql/essentials/tools/yql_highlight/json.h +++ b/yql/essentials/tools/yql_highlight/json.h @@ -4,6 +4,6 @@ namespace NSQLHighlight { - void Print(IOutputStream& out, const NJson::TJsonValue& json); +void Print(IOutputStream& out, const NJson::TJsonValue& json); } // namespace NSQLHighlight diff --git a/yql/essentials/tools/yql_highlight/ya.make b/yql/essentials/tools/yql_highlight/ya.make index 15a0fd5ab01..4f50a969445 100644 --- a/yql/essentials/tools/yql_highlight/ya.make +++ b/yql/essentials/tools/yql_highlight/ya.make @@ -1,6 +1,8 @@ IF (NOT EXPORT_CMAKE OR NOT OPENSOURCE OR OPENSOURCE_PROJECT != "yt") PROGRAM() + ENABLE(YQL_STYLE_CPP) + PEERDIR( library/cpp/getopt library/cpp/json diff --git a/yql/essentials/tools/yql_highlight/yqls_highlight.cpp b/yql/essentials/tools/yql_highlight/yqls_highlight.cpp index 2894b3f9529..1707405c2ec 100644 --- a/yql/essentials/tools/yql_highlight/yqls_highlight.cpp +++ b/yql/essentials/tools/yql_highlight/yqls_highlight.cpp @@ -2,97 +2,97 @@ namespace NSQLHighlight { - using TRe = NSQLTranslationV1::TRegexPattern; - using NSQLTranslationV1::Merged; +using TRe = NSQLTranslationV1::TRegexPattern; +using NSQLTranslationV1::Merged; - THighlighting MakeYQLsHighlighting() { - TString id = R"re([A-Za-z_\-0-9]+)re"; - TString lower = R"re([a-z_0-9])re" + SubstGlobalCopy(id, '+', '*'); - TString title = R"re([A-Z])re" + SubstGlobalCopy(id, '+', '*'); +THighlighting MakeYQLsHighlighting() { + TString id = R"re([A-Za-z_\-0-9]+)re"; + TString lower = R"re([a-z_0-9])re" + SubstGlobalCopy(id, '+', '*'); + TString title = R"re([A-Z])re" + SubstGlobalCopy(id, '+', '*'); - TRe keywords = Merged({ - {"let"}, - {"return"}, - {"quote"}, - {"block"}, - {"lambda"}, - {"declare"}, - {"import"}, - {"export"}, - {"library"}, - {"override_library"}, - {"package"}, - {"set_package_version"}, - }); - keywords.Before = R"re(\()re"; + TRe keywords = Merged({ + {"let"}, + {"return"}, + {"quote"}, + {"block"}, + {"lambda"}, + {"declare"}, + {"import"}, + {"export"}, + {"library"}, + {"override_library"}, + {"package"}, + {"set_package_version"}, + }); + keywords.Before = R"re(\()re"; - return { - .Name = "YQLs", - .Extension = "yqls", - .Units = { - TUnit{ - .Kind = EUnitKind::Comment, - .Patterns = {TRe{R"re(#.*)re"}}, - .IsPlain = false, - }, - TUnit{ - .Kind = EUnitKind::Keyword, - .Patterns = {keywords}, - }, - TUnit{ - .Kind = EUnitKind::BindParameterIdentifier, - .Patterns = {TRe{"world"}}, - }, - TUnit{ - .Kind = EUnitKind::QuotedIdentifier, - .Patterns = { - TRe{.Body = id + "!", .Before = R"re(\()re"}, - }, - .IsPlain = false, - }, - TUnit{ - .Kind = EUnitKind::FunctionIdentifier, - .Patterns = { - TRe{.Body = title, .Before = R"re(\()re"}, - TRe{.Body = "'" + id + "\\." + id}, - }, - .IsPlain = false, - }, - TUnit{ - .Kind = EUnitKind::Literal, - .Patterns = {TRe{"'" + id}}, - .IsPlain = false, - }, - TUnit{ - .Kind = EUnitKind::Identifier, - .Patterns = {TRe{lower}}, + return { + .Name = "YQLs", + .Extension = "yqls", + .Units = { + TUnit{ + .Kind = EUnitKind::Comment, + .Patterns = {TRe{R"re(#.*)re"}}, + .IsPlain = false, + }, + TUnit{ + .Kind = EUnitKind::Keyword, + .Patterns = {keywords}, + }, + TUnit{ + .Kind = EUnitKind::BindParameterIdentifier, + .Patterns = {TRe{"world"}}, + }, + TUnit{ + .Kind = EUnitKind::QuotedIdentifier, + .Patterns = { + TRe{.Body = id + "!", .Before = R"re(\()re"}, }, - TUnit{ - .Kind = EUnitKind::StringLiteral, - .Patterns = { - TRe{R"re(\"[^\"\n]*\")re"}, - TRe{R"re(\@\@(.|\n)*\@\@)re"}, - }, - .RangePattern = TRangePattern{ - .Begin = "@@", - .End = "@@", - }, - .IsPlain = false, + .IsPlain = false, + }, + TUnit{ + .Kind = EUnitKind::FunctionIdentifier, + .Patterns = { + TRe{.Body = title, .Before = R"re(\()re"}, + TRe{.Body = "'" + id + "\\." + id}, }, - TUnit{ - .Kind = EUnitKind::Punctuation, - .Patterns = {TRe{R"re(['\(\)])re"}}, - .IsPlain = false, - .IsCodeGenExcluded = true, + .IsPlain = false, + }, + TUnit{ + .Kind = EUnitKind::Literal, + .Patterns = {TRe{"'" + id}}, + .IsPlain = false, + }, + TUnit{ + .Kind = EUnitKind::Identifier, + .Patterns = {TRe{lower}}, + }, + TUnit{ + .Kind = EUnitKind::StringLiteral, + .Patterns = { + TRe{R"re(\"[^\"\n]*\")re"}, + TRe{R"re(\@\@(.|\n)*\@\@)re"}, }, - TUnit{ - .Kind = EUnitKind::Whitespace, - .Patterns = {TRe{R"re(\s+)re"}}, - .IsPlain = false, - .IsCodeGenExcluded = true, + .RangePattern = TRangePattern{ + .Begin = "@@", + .End = "@@", }, + .IsPlain = false, + }, + TUnit{ + .Kind = EUnitKind::Punctuation, + .Patterns = {TRe{R"re(['\(\)])re"}}, + .IsPlain = false, + .IsCodeGenExcluded = true, + }, + TUnit{ + .Kind = EUnitKind::Whitespace, + .Patterns = {TRe{R"re(\s+)re"}}, + .IsPlain = false, + .IsCodeGenExcluded = true, }, - }; - } + }, + }; +} } // namespace NSQLHighlight diff --git a/yql/essentials/tools/yql_highlight/yqls_highlight.h b/yql/essentials/tools/yql_highlight/yqls_highlight.h index d803015331b..ab35dfe1a78 100644 --- a/yql/essentials/tools/yql_highlight/yqls_highlight.h +++ b/yql/essentials/tools/yql_highlight/yqls_highlight.h @@ -4,6 +4,6 @@ namespace NSQLHighlight { - THighlighting MakeYQLsHighlighting(); +THighlighting MakeYQLsHighlighting(); } // namespace NSQLHighlight diff --git a/yql/essentials/tools/yql_linter/ya.make b/yql/essentials/tools/yql_linter/ya.make index ac6cd7013ce..8f8ae6ca7cf 100644 --- a/yql/essentials/tools/yql_linter/ya.make +++ b/yql/essentials/tools/yql_linter/ya.make @@ -2,6 +2,8 @@ IF (NOT EXPORT_CMAKE OR NOT OPENSOURCE OR OPENSOURCE_PROJECT != "yt") PROGRAM() +ENABLE(YQL_STYLE_CPP) + PEERDIR( library/cpp/getopt yql/essentials/public/fastcheck diff --git a/yql/essentials/tools/yql_linter/yql_linter.cpp b/yql/essentials/tools/yql_linter/yql_linter.cpp index 0b97b3ee012..51dfe2b01d2 100644 --- a/yql/essentials/tools/yql_linter/yql_linter.cpp +++ b/yql/essentials/tools/yql_linter/yql_linter.cpp @@ -26,13 +26,12 @@ int Run(int argc, char* argv[]) { opts.AddLongOption('v', "verbose", "show lint issues").NoArgument(); opts.AddLongOption("list-checks", "list all enabled checks and exit").NoArgument(); opts.AddLongOption("checks", "comma-separated list of globs with optional '-' prefix").StoreResult(&checks); - opts.AddLongOption('C', "cluster", "cluster to service mapping").RequiredArgument("name@service") - .KVHandler([&](TString cluster, TString provider) { - if (cluster.empty() || provider.empty()) { - throw yexception() << "Incorrect service mapping, expected form cluster@provider, e.g. plato@yt"; - } - clusterMapping[cluster] = provider; - }, '@'); + opts.AddLongOption('C', "cluster", "cluster to service mapping").RequiredArgument("name@service").KVHandler([&](TString cluster, TString provider) { + if (cluster.empty() || provider.empty()) { + throw yexception() << "Incorrect service mapping, expected form cluster@provider, e.g. plato@yt"; + } + clusterMapping[cluster] = provider; + }, '@'); opts.AddLongOption('m', "mode", "query mode, allowed values: " + GetEnumAllNames()).StoreResult(&modeStr); opts.AddLongOption('s', "syntax", "query syntax, allowed values: " + GetEnumAllNames()).StoreResult(&syntaxStr); @@ -40,12 +39,11 @@ int Run(int argc, char* argv[]) { opts.AddLongOption("cluster-system", "cluster system").StoreResult(&clusterSystem); opts.AddLongOption("ansi-lexer", "use ansi lexer").NoArgument(); opts.AddLongOption("no-colors", "disable colors for output").NoArgument(); - opts.AddLongOption("langver", "Set current language version").Optional().RequiredArgument("VER") - .Handler1T([&](const TString& str) { - if (!NYql::ParseLangVersion(str, langver)) { - throw yexception() << "Failed to parse language version: " << str; - } - }); + opts.AddLongOption("langver", "Set current language version").Optional().RequiredArgument("VER").Handler1T([&](const TString& str) { + if (!NYql::ParseLangVersion(str, langver)) { + throw yexception() << "Failed to parse language version: " << str; + } + }); opts.SetFreeArgsNum(0); opts.AddHelpOption(); @@ -90,8 +88,8 @@ int Run(int argc, char* argv[]) { checkReq.Program = queryString; checkReq.Syntax = NYql::NFastCheck::ESyntax::YQL; checkReq.ClusterMapping = clusterMapping; - checkReq.Mode = FromString(modeStr); - checkReq.Syntax = FromString(syntaxStr); + checkReq.Mode = FromString(modeStr); + checkReq.Syntax = FromString(syntaxStr); checkReq.ClusterMode = FromString(clusterModeStr); checkReq.ClusterSystem = clusterSystem; auto checkResp = NYql::NFastCheck::RunChecks(checkReq); -- cgit v1.3