diff options
author | vvvv <vvvv@yandex-team.com> | 2025-02-16 01:37:05 +0300 |
---|---|---|
committer | vvvv <vvvv@yandex-team.com> | 2025-02-16 01:52:10 +0300 |
commit | 802da2736bf00631aa408e495b80d6e125f10a9f (patch) | |
tree | 054610611d17d22a8b2677e9c9f8ae5ec6e0eeef /yql | |
parent | b49c2fc9d96aa43f8f993a9e2f037209f0ebdb68 (diff) | |
download | ydb-802da2736bf00631aa408e495b80d6e125f10a9f.tar.gz |
refactor SQL translators YQL-19594
commit_hash:401d21dd23ee9bb7ee52b2fc42e596cb3e4bdda7
Diffstat (limited to 'yql')
31 files changed, 197 insertions, 131 deletions
diff --git a/yql/essentials/core/extract_predicate/ut/extract_predicate_ut.cpp b/yql/essentials/core/extract_predicate/ut/extract_predicate_ut.cpp index 87dd1c06c7..44445768a5 100644 --- a/yql/essentials/core/extract_predicate/ut/extract_predicate_ut.cpp +++ b/yql/essentials/core/extract_predicate/ut/extract_predicate_ut.cpp @@ -6,6 +6,7 @@ #include <yql/essentials/providers/common/provider/yql_provider_names.h> #include <yql/essentials/sql/settings/translation_settings.h> #include <yql/essentials/sql/sql.h> +#include <yql/essentials/sql/v1/sql.h> #include <yql/essentials/ast/yql_ast_annotation.h> #include <yql/essentials/ast/yql_expr.h> #include <yql/essentials/core/cbo/simple/cbo_simple.h> @@ -53,7 +54,13 @@ Y_UNIT_TEST_SUITE(TYqlExtractPredicate) { NSQLTranslation::TTranslationSettings settings; settings.SyntaxVersion = 1; - TAstParseResult astRes = SqlToYql(program, settings); + NSQLTranslation::TTranslators translators( + nullptr, + NSQLTranslationV1::MakeTranslator(), + nullptr + ); + + TAstParseResult astRes = SqlToYql(translators, program, settings); UNIT_ASSERT(astRes.IsOk()); TExprNode::TPtr exprRoot; UNIT_ASSERT(CompileExpr(*astRes.Root, exprRoot, exprCtx, nullptr, nullptr)); diff --git a/yql/essentials/core/extract_predicate/ut/ya.make b/yql/essentials/core/extract_predicate/ut/ya.make index 4fd34796b4..8232ce6cbc 100644 --- a/yql/essentials/core/extract_predicate/ut/ya.make +++ b/yql/essentials/core/extract_predicate/ut/ya.make @@ -21,6 +21,8 @@ PEERDIR( yql/essentials/minikql/invoke_builtins/llvm16 yql/essentials/sql/pg yql/essentials/parser/pg_wrapper + yql/essentials/sql + yql/essentials/sql/v1 ) YQL_LAST_ABI_VERSION() diff --git a/yql/essentials/core/facade/ya.make b/yql/essentials/core/facade/ya.make index c8fd9f9668..4e5a778518 100644 --- a/yql/essentials/core/facade/ya.make +++ b/yql/essentials/core/facade/ya.make @@ -21,6 +21,8 @@ PEERDIR( yql/essentials/core/qplayer/storage/interface yql/essentials/core/qplayer/udf_resolver yql/essentials/sql + yql/essentials/sql/v1 + yql/essentials/parser/pg_wrapper/interface yql/essentials/utils/log yql/essentials/core yql/essentials/core/type_ann diff --git a/yql/essentials/core/facade/yql_facade.cpp b/yql/essentials/core/facade/yql_facade.cpp index b1b7267c29..9732079e0f 100644 --- a/yql/essentials/core/facade/yql_facade.cpp +++ b/yql/essentials/core/facade/yql_facade.cpp @@ -10,6 +10,9 @@ #include <yql/essentials/core/type_ann/type_ann_expr.h> #include <yql/essentials/core/services/yql_plan.h> #include <yql/essentials/core/services/yql_eval_params.h> +#include <yql/essentials/sql/sql.h> +#include <yql/essentials/sql/v1/sql.h> +#include <yql/essentials/parser/pg_wrapper/interface/parser.h> #include <yql/essentials/utils/log/context.h> #include <yql/essentials/utils/log/profile.h> #include <yql/essentials/utils/limiting_allocator.h> @@ -728,7 +731,13 @@ bool TProgram::ParseSql(const NSQLTranslation::TTranslationSettings& settings) } currentSettings->EmitReadsForExists = true; - return FillParseResult(SqlToYql(sourceCode, *currentSettings, &warningRules), &warningRules); + NSQLTranslation::TTranslators translators( + nullptr, + NSQLTranslationV1::MakeTranslator(), + NSQLTranslationPG::MakeTranslator() + ); + + return FillParseResult(SqlToYql(translators, sourceCode, *currentSettings, &warningRules), &warningRules); } bool TProgram::Compile(const TString& username, bool skipLibraries) { diff --git a/yql/essentials/core/services/mounts/ya.make b/yql/essentials/core/services/mounts/ya.make index f6180eef6e..0fd3bada7c 100644 --- a/yql/essentials/core/services/mounts/ya.make +++ b/yql/essentials/core/services/mounts/ya.make @@ -10,6 +10,8 @@ PEERDIR( yql/essentials/core/user_data yql/essentials/core yql/essentials/utils/log + yql/essentials/sql + yql/essentials/sql/v1 ) YQL_LAST_ABI_VERSION() diff --git a/yql/essentials/core/services/mounts/yql_mounts.cpp b/yql/essentials/core/services/mounts/yql_mounts.cpp index 683a7fe84b..a8c8cd30df 100644 --- a/yql/essentials/core/services/mounts/yql_mounts.cpp +++ b/yql/essentials/core/services/mounts/yql_mounts.cpp @@ -1,6 +1,8 @@ #include "yql_mounts.h" #include <yql/essentials/core/yql_library_compiler.h> +#include <yql/essentials/sql/sql.h> +#include <yql/essentials/sql/v1/sql.h> #include <yql/essentials/utils/log/profile.h> #include <library/cpp/resource/resource.h> @@ -124,8 +126,14 @@ namespace NYql { TUserDataTable mounts; LoadYqlDefaultMounts(mounts); + NSQLTranslation::TTranslators translators( + nullptr, + NSQLTranslationV1::MakeTranslator(), + nullptr + ); + TModulesTable modulesTable; - if (!CompileLibraries(mounts, *ctx, modulesTable, optimizeLibraries)) { + if (!CompileLibraries(translators, mounts, *ctx, modulesTable, optimizeLibraries)) { return {}; } @@ -133,7 +141,7 @@ namespace NYql { AddUserDataToTable(mounts, item); } - moduleResolver = std::make_shared<TModuleResolver>(std::move(modulesTable), ctx->NextUniqueId, + moduleResolver = std::make_shared<TModuleResolver>(translators, std::move(modulesTable), ctx->NextUniqueId, clusterMapping, sqlFlags, optimizeLibraries, std::move(ownedCtx)); return mounts; } diff --git a/yql/essentials/core/ut/ya.make b/yql/essentials/core/ut/ya.make index 70c9ede38a..e3a03ad340 100644 --- a/yql/essentials/core/ut/ya.make +++ b/yql/essentials/core/ut/ya.make @@ -32,6 +32,8 @@ PEERDIR( yql/essentials/minikql/invoke_builtins/llvm16 yql/essentials/parser/pg_wrapper yql/essentials/sql/pg + yql/essentials/sql + yql/essentials/sql/v1 yql/essentials/udfs/common/string ) diff --git a/yql/essentials/core/ut/yql_library_compiler_ut.cpp b/yql/essentials/core/ut/yql_library_compiler_ut.cpp index 0942dfc424..d1c9356232 100644 --- a/yql/essentials/core/ut/yql_library_compiler_ut.cpp +++ b/yql/essentials/core/ut/yql_library_compiler_ut.cpp @@ -2,6 +2,9 @@ #include "yql_library_compiler.h" +#include <yql/essentials/sql/sql.h> +#include <yql/essentials/sql/v1/sql.h> + namespace NYql { Y_UNIT_TEST_SUITE(TLibraryCompilerTests) { @@ -9,9 +12,15 @@ Y_UNIT_TEST_SUITE(TLibraryCompilerTests) { static const char* alias = "/lib/ut.yql"; static bool CompileAndLink(const THashMap<TString, TString>& libs, TExprContext& ctx) { + NSQLTranslation::TTranslators translators( + nullptr, + NSQLTranslationV1::MakeTranslator(), + nullptr + ); + THashMap<TString, TLibraryCohesion> compiled; for (const auto& lib : libs) - if (!CompileLibrary(alias, lib.second, ctx, compiled[lib.first])) + if (!CompileLibrary(translators, alias, lib.second, ctx, compiled[lib.first])) return false; return LinkLibraries(compiled, ctx, ctx); @@ -25,9 +34,15 @@ Y_UNIT_TEST_SUITE(TLibraryCompilerTests) { "(export X)\n" ")\n"; + NSQLTranslation::TTranslators translators( + nullptr, + NSQLTranslationV1::MakeTranslator(), + nullptr + ); + TExprContext ctx; TLibraryCohesion cohesion; - UNIT_ASSERT(CompileLibrary(alias, s, ctx, cohesion)); + UNIT_ASSERT(CompileLibrary(translators, alias, s, ctx, cohesion)); UNIT_ASSERT_VALUES_EQUAL(2, cohesion.Exports.Symbols().size()); UNIT_ASSERT(cohesion.Imports.empty()); } @@ -41,9 +56,15 @@ Y_UNIT_TEST_SUITE(TLibraryCompilerTests) { "(export ex)\n" ")\n"; + NSQLTranslation::TTranslators translators( + nullptr, + NSQLTranslationV1::MakeTranslator(), + nullptr + ); + TExprContext ctx; TLibraryCohesion cohesion; - UNIT_ASSERT(CompileLibrary(alias, s, ctx, cohesion)); + UNIT_ASSERT(CompileLibrary(translators, alias, s, ctx, cohesion)); UNIT_ASSERT_VALUES_EQUAL(1, cohesion.Exports.Symbols().size()); UNIT_ASSERT_VALUES_EQUAL(2, cohesion.Imports.size()); } diff --git a/yql/essentials/core/yql_library_compiler.cpp b/yql/essentials/core/yql_library_compiler.cpp index 57265ab7e1..90824e19cf 100644 --- a/yql/essentials/core/yql_library_compiler.cpp +++ b/yql/essentials/core/yql_library_compiler.cpp @@ -89,14 +89,15 @@ bool OptimizeLibrary(TLibraryCohesion& cohesion, TExprContext& ctx) { return true; } -bool CompileLibrary(const TString& alias, const TString& script, TExprContext& ctx, TLibraryCohesion& cohesion, bool optimize) +bool CompileLibrary(const NSQLTranslation::TTranslators& translators, const TString& alias, + const TString& script, TExprContext& ctx, TLibraryCohesion& cohesion, bool optimize) { TAstParseResult res; if (alias.EndsWith(".sql")) { NSQLTranslation::TTranslationSettings translationSettings; translationSettings.SyntaxVersion = 1; translationSettings.Mode = NSQLTranslation::ESqlMode::LIBRARY; - res = NSQLTranslation::SqlToYql(script, translationSettings); + res = NSQLTranslation::SqlToYql(translators, script, translationSettings); } else { res = ParseAst(script, nullptr, alias); } @@ -198,7 +199,8 @@ bool LinkLibraries(THashMap<TString, TLibraryCohesion>& libs, TExprContext& ctx, return true; } -bool CompileLibraries(const TUserDataTable& userData, TExprContext& ctx, TModulesTable& modules, bool optimize) +bool CompileLibraries(const NSQLTranslation::TTranslators& translators, const TUserDataTable& userData, + TExprContext& ctx, TModulesTable& modules, bool optimize) { THashMap<TString, TLibraryCohesion> libs; for (const auto& data : userData) { @@ -212,7 +214,7 @@ bool CompileLibraries(const TUserDataTable& userData, TExprContext& ctx, TModule } if (!libraryData.empty()) { - if (CompileLibrary(alias, libraryData, ctx, libs[alias], optimize)) + if (CompileLibrary(translators, alias, libraryData, ctx, libs[alias], optimize)) modules[TModuleResolver::NormalizeModuleName(alias)] = libs[alias].Exports; else return false; @@ -223,4 +225,8 @@ bool CompileLibraries(const TUserDataTable& userData, TExprContext& ctx, TModule return LinkLibraries(libs, ctx, ctx); } +bool CompileLibraries(const TUserDataTable& userData, TExprContext& ctx, TModulesTable& modules, bool optimize) { + return CompileLibraries(NSQLTranslation::MakeAllTranslators(), userData, ctx, modules, optimize); +} + } diff --git a/yql/essentials/core/yql_library_compiler.h b/yql/essentials/core/yql_library_compiler.h index b0b3ca6b8e..f44c5b4255 100644 --- a/yql/essentials/core/yql_library_compiler.h +++ b/yql/essentials/core/yql_library_compiler.h @@ -2,14 +2,19 @@ #include <yql/essentials/ast/yql_expr.h> #include "yql_type_annotation.h" +#include <yql/essentials/sql/sql.h> namespace NYql { bool OptimizeLibrary(TLibraryCohesion& cohesion, TExprContext& ctx); -bool CompileLibrary(const TString& alias, const TString& script, TExprContext& ctx, TLibraryCohesion& cohesion, bool optimize = true); +bool CompileLibrary(const NSQLTranslation::TTranslators& translators, const TString& alias, + const TString& script, TExprContext& ctx, TLibraryCohesion& cohesion, bool optimize = true); bool LinkLibraries(THashMap<TString, TLibraryCohesion>& libs, TExprContext& ctx, TExprContext& ctxToClone, const std::function<const TExportTable*(const TString&)>& module2ExportTable); bool LinkLibraries(THashMap<TString, TLibraryCohesion>& libs, TExprContext& ctx, TExprContext& ctxToClone, const TModulesTable* loadedModules = nullptr); +bool CompileLibraries(const NSQLTranslation::TTranslators& translators, const TUserDataTable& userData, + TExprContext& ctx, TModulesTable& modules, bool optimize = true); +//FIXME remove bool CompileLibraries(const TUserDataTable& userData, TExprContext& ctx, TModulesTable& modules, bool optimize = true); } diff --git a/yql/essentials/core/yql_type_annotation.cpp b/yql/essentials/core/yql_type_annotation.cpp index 214d7602dc..943267ae46 100644 --- a/yql/essentials/core/yql_type_annotation.cpp +++ b/yql/essentials/core/yql_type_annotation.cpp @@ -4,8 +4,6 @@ #include "yql_library_compiler.h" #include "yql_type_helpers.h" -#include <yql/essentials/sql/sql.h> -#include <yql/essentials/sql/settings/translation_settings.h> #include <yql/essentials/ast/yql_constraint.h> #include <yql/essentials/utils/log/log.h> @@ -529,7 +527,7 @@ bool TModuleResolver::AddFromMemory(const TString& fullName, const TString& modu settings.SyntaxVersion = syntaxVersion; settings.V0Behavior = NSQLTranslation::EV0Behavior::Silent; settings.FileAliasPrefix = FileAliasPrefix; - astRes = SqlToYql(query, settings); + astRes = SqlToYql(Translators, query, settings); if (!astRes.IsOk()) { ctx.AddError(addSubIssues(TIssue(pos, TStringBuilder() << "Failed to parse SQL: " << fullName), astRes.Issues)); return false; @@ -646,7 +644,7 @@ IModuleResolver::TPtr TModuleResolver::CreateMutableChild() const { throw yexception() << "Module resolver should not contain user data and URL loader"; } - return std::make_shared<TModuleResolver>(&Modules, LibsContext.NextUniqueId, ClusterMapping, SqlFlags, OptimizeLibraries, KnownPackages, Libs, FileAliasPrefix); + return std::make_shared<TModuleResolver>(Translators, &Modules, LibsContext.NextUniqueId, ClusterMapping, SqlFlags, OptimizeLibraries, KnownPackages, Libs, FileAliasPrefix); } void TModuleResolver::SetFileAliasPrefix(TString&& prefix) { diff --git a/yql/essentials/core/yql_type_annotation.h b/yql/essentials/core/yql_type_annotation.h index 0146aa6dcd..96dfcb971d 100644 --- a/yql/essentials/core/yql_type_annotation.h +++ b/yql/essentials/core/yql_type_annotation.h @@ -12,6 +12,7 @@ #include <yql/essentials/core/url_lister/interface/url_lister_manager.h> #include <yql/essentials/core/qplayer/storage/interface/yql_qstorage.h> #include <yql/essentials/ast/yql_expr.h> +#include <yql/essentials/sql/sql.h> #include <library/cpp/yson/node/node.h> #include <library/cpp/time_provider/time_provider.h> @@ -39,9 +40,11 @@ public: class TModuleResolver : public IModuleResolver { public: - TModuleResolver(TModulesTable&& modules, ui64 nextUniqueId, const THashMap<TString, TString>& clusterMapping, + TModuleResolver(const NSQLTranslation::TTranslators& translators, TModulesTable&& modules, + ui64 nextUniqueId, const THashMap<TString, TString>& clusterMapping, const THashSet<TString>& sqlFlags, bool optimizeLibraries = true, THolder<TExprContext> ownedCtx = {}) - : OwnedCtx(std::move(ownedCtx)) + : Translators(translators) + , OwnedCtx(std::move(ownedCtx)) , LibsContext(nextUniqueId) , Modules(std::move(modules)) , ClusterMapping(clusterMapping) @@ -53,10 +56,19 @@ public: } } - TModuleResolver(const TModulesTable* parentModules, ui64 nextUniqueId, const THashMap<TString, TString>& clusterMapping, + //FIXME remove + TModuleResolver(TModulesTable&& modules, + ui64 nextUniqueId, const THashMap<TString, TString>& clusterMapping, + const THashSet<TString>& sqlFlags, bool optimizeLibraries = true, THolder<TExprContext> ownedCtx = {}) + : TModuleResolver(NSQLTranslation::MakeAllTranslators(), std::move(modules), nextUniqueId, clusterMapping, sqlFlags, optimizeLibraries, std::move(ownedCtx)) + {} + + TModuleResolver(const NSQLTranslation::TTranslators& translators, const TModulesTable* parentModules, + ui64 nextUniqueId, const THashMap<TString, TString>& clusterMapping, const THashSet<TString>& sqlFlags, bool optimizeLibraries, const TSet<TString>& knownPackages, const THashMap<TString, THashMap<int, TLibraryCohesion>>& libs, const TString& fileAliasPrefix) - : ParentModules(parentModules) + : Translators(translators) + , ParentModules(parentModules) , LibsContext(nextUniqueId) , KnownPackages(knownPackages) , Libs(libs) @@ -67,6 +79,15 @@ public: { } + //FIXME remove + TModuleResolver(const TModulesTable* parentModules, + ui64 nextUniqueId, const THashMap<TString, TString>& clusterMapping, + const THashSet<TString>& sqlFlags, bool optimizeLibraries, const TSet<TString>& knownPackages, const THashMap<TString, + THashMap<int, TLibraryCohesion>>& libs, const TString& fileAliasPrefix) + : TModuleResolver(NSQLTranslation::MakeAllTranslators(), parentModules, nextUniqueId, + clusterMapping, sqlFlags, optimizeLibraries, knownPackages, libs, fileAliasPrefix) + {} + static TString NormalizeModuleName(const TString& path); void AttachUserData(TUserDataStorage::TPtr userData) { @@ -111,6 +132,7 @@ private: TString SubstParameters(const TString& str); private: + const NSQLTranslation::TTranslators Translators; THolder<TExprContext> OwnedCtx; const TModulesTable* ParentModules = nullptr; TUserDataStorage::TPtr UserData; diff --git a/yql/essentials/public/fastcheck/fastcheck.cpp b/yql/essentials/public/fastcheck/fastcheck.cpp index 2beccc8665..deefd288e2 100644 --- a/yql/essentials/public/fastcheck/fastcheck.cpp +++ b/yql/essentials/public/fastcheck/fastcheck.cpp @@ -6,11 +6,19 @@ #include <yql/essentials/core/yql_type_annotation.h> #include <yql/essentials/core/yql_user_data_storage.h> #include <yql/essentials/sql/sql.h> +#include <yql/essentials/sql/v1/sql.h> +#include <yql/essentials/parser/pg_wrapper/interface/parser.h> namespace NYql { namespace NFastCheck { bool CheckProgram(const TString& program, const TOptions& options, TIssues& errors) { + NSQLTranslation::TTranslators translators( + nullptr, + NSQLTranslationV1::MakeTranslator(), + NSQLTranslationPG::MakeTranslator() + ); + TAstParseResult astRes; if (options.IsSql) { NSQLTranslation::TTranslationSettings settings; @@ -22,7 +30,7 @@ bool CheckProgram(const TString& program, const TOptions& options, TIssues& erro settings.Mode = NSQLTranslation::ESqlMode::LIBRARY; } - astRes = SqlToYql(program, settings); + astRes = SqlToYql(translators, program, settings); } else { astRes = ParseAst(program); } @@ -46,7 +54,7 @@ bool CheckProgram(const TString& program, const TOptions& options, TIssues& erro settings.File = x.first; settings.Mode = NSQLTranslation::ESqlMode::LIBRARY; - astRes = SqlToYql(x.second, settings); + astRes = SqlToYql(translators, x.second, settings); if (!astRes.IsOk()) { errors = std::move(astRes.Issues); return false; diff --git a/yql/essentials/public/fastcheck/ya.make b/yql/essentials/public/fastcheck/ya.make index d1574d5707..2423af4ea6 100644 --- a/yql/essentials/public/fastcheck/ya.make +++ b/yql/essentials/public/fastcheck/ya.make @@ -23,6 +23,7 @@ PEERDIR( yql/essentials/sql/v1/format yql/essentials/sql/settings yql/essentials/parser/pg_wrapper/interface + yql/essentials/sql/v1 ) GENERATE_ENUM_SERIALIZATION(linter.h) diff --git a/yql/essentials/public/purecalc/common/worker_factory.cpp b/yql/essentials/public/purecalc/common/worker_factory.cpp index e75d9e5815..9877429a9f 100644 --- a/yql/essentials/public/purecalc/common/worker_factory.cpp +++ b/yql/essentials/public/purecalc/common/worker_factory.cpp @@ -5,6 +5,8 @@ #include "compile_mkql.h" #include <yql/essentials/sql/sql.h> +#include <yql/essentials/sql/v1/sql.h> +#include <yql/essentials/parser/pg_wrapper/interface/parser.h> #include <yql/essentials/ast/yql_expr.h> #include <yql/essentials/core/yql_expr_optimize.h> #include <yql/essentials/core/yql_type_helpers.h> @@ -206,7 +208,13 @@ TExprNode::TPtr TWorkerFactory<TBase>::Compile( } } - astRes = SqlToYql(TString(query), settings); + NSQLTranslation::TTranslators translators( + nullptr, + NSQLTranslationV1::MakeTranslator(), + NSQLTranslationPG::MakeTranslator() + ); + + astRes = SqlToYql(translators, TString(query), settings); } else { astRes = ParseAst(TString(query)); } diff --git a/yql/essentials/public/purecalc/common/ya.make.inc b/yql/essentials/public/purecalc/common/ya.make.inc index eb9387da4f..0a81505642 100644 --- a/yql/essentials/public/purecalc/common/ya.make.inc +++ b/yql/essentials/public/purecalc/common/ya.make.inc @@ -37,6 +37,9 @@ PEERDIR( yql/essentials/utils/log yql/essentials/core yql/essentials/core/type_ann + yql/essentials/sql + yql/essentials/sql/v1 + yql/essentials/parser/pg_wrapper/interface yql/essentials/providers/common/codec yql/essentials/providers/common/comp_nodes yql/essentials/providers/common/mkql diff --git a/yql/essentials/sql/pg/ut/util.h b/yql/essentials/sql/pg/ut/util.h index e1fff55beb..7273910364 100644 --- a/yql/essentials/sql/pg/ut/util.h +++ b/yql/essentials/sql/pg/ut/util.h @@ -5,6 +5,7 @@ #include <yql/essentials/sql/sql.h> #include <yql/essentials/parser/pg_catalog/catalog.h> #include <yql/essentials/parser/pg_wrapper/interface/config.h> +#include <yql/essentials/parser/pg_wrapper/interface/parser.h> enum class EDebugOutput { None, @@ -183,7 +184,14 @@ inline NYql::TAstParseResult SqlToYqlWithMode(const TString& query, NSQLTranslat settings.PgParser = true; TTestAutoParamBuilderFactory autoParamFactory; settings.AutoParamBuilderFactory = &autoParamFactory; - auto res = SqlToYql(query, settings); + + NSQLTranslation::TTranslators translators( + nullptr, + nullptr, + NSQLTranslationPG::MakeTranslator() + ); + + auto res = SqlToYql(translators, query, settings); if (debug == EDebugOutput::ToCerr) { Err2Str(res, debug); } @@ -206,10 +214,10 @@ inline void VisitAstNodes(const NYql::TAstNode& root, const TAstNodeVisitFunc& v } } - + inline TMaybe<const NYql::TAstNode*> MaybeGetQuotedValue(const NYql::TAstNode& node) { const bool isQuotedList = - node.IsListOfSize(2) && node.GetChild(0)->IsAtom() + node.IsListOfSize(2) && node.GetChild(0)->IsAtom() && node.GetChild(0)->GetContent() == "quote"; if (isQuotedList) { return node.GetChild(1); diff --git a/yql/essentials/sql/sql.cpp b/yql/essentials/sql/sql.cpp index 9e18a1bb01..4d768852c6 100644 --- a/yql/essentials/sql/sql.cpp +++ b/yql/essentials/sql/sql.cpp @@ -14,6 +14,14 @@ namespace NSQLTranslation { + TTranslators MakeAllTranslators() { + return TTranslators( + NSQLTranslationV0::MakeTranslator(), + NSQLTranslationV1::MakeTranslator(), + NSQLTranslationPG::MakeTranslator() + ); + } + NYql::TAstParseResult SqlToYql(const TTranslators& translators, const TString& query, const TTranslationSettings& settings, NYql::TWarningRules* warningRules, NYql::TStmtParseInfo* stmtParseInfo, TTranslationSettings* effectiveSettings) { @@ -244,14 +252,6 @@ namespace NSQLTranslation { return SqlToAstStatements(MakeAllTranslators(), query, settings, warningRules, actualSyntaxVersion, stmtParseInfo); } - TTranslators MakeAllTranslators() { - return TTranslators( - NSQLTranslationV0::MakeTranslator(), - NSQLTranslationV1::MakeTranslator(), - NSQLTranslationPG::MakeTranslator() - ); - } - TTranslators::TTranslators(TTranslatorPtr v0, TTranslatorPtr v1, TTranslatorPtr pg) : V0(v0 ? v0 : MakeDummyTranslator("v0")) , V1(v1 ? v1 : MakeDummyTranslator("v1")) diff --git a/yql/essentials/sql/v1/sql_ut.cpp b/yql/essentials/sql/v1/sql_ut.cpp index 03d7c1e99a..bdde5cddab 100644 --- a/yql/essentials/sql/v1/sql_ut.cpp +++ b/yql/essentials/sql/v1/sql_ut.cpp @@ -2996,7 +2996,7 @@ Y_UNIT_TEST_SUITE(SqlParsingOnly) { Y_UNIT_TEST(WithNonStructSchemaS3) { NSQLTranslation::TTranslationSettings settings; settings.ClusterMapping["s3bucket"] = NYql::S3ProviderName; - UNIT_ASSERT(SqlToYql("select * from s3bucket.`foo` with schema (col1 Int32, String as col2, Int64 as col3);", settings).IsOk()); + UNIT_ASSERT(SqlToYqlWithSettings("select * from s3bucket.`foo` with schema (col1 Int32, String as col2, Int64 as col3);", settings).IsOk()); } Y_UNIT_TEST(AllowNestedTuplesInGroupBy) { @@ -5201,7 +5201,7 @@ select FormatType($f()); Y_UNIT_TEST(WarnForDeprecatedSchema) { NSQLTranslation::TTranslationSettings settings; settings.ClusterMapping["s3bucket"] = NYql::S3ProviderName; - NYql::TAstParseResult res = SqlToYql("select * from s3bucket.`foo` with schema (col1 Int32, String as col2, Int64 as col3);", settings); + NYql::TAstParseResult res = SqlToYqlWithSettings("select * from s3bucket.`foo` with schema (col1 Int32, String as col2, Int64 as col3);", settings); UNIT_ASSERT(res.Root); UNIT_ASSERT_STRING_CONTAINS(res.Issues.ToString(), "Warning: Deprecated syntax for positional schema: please use 'column type' instead of 'type AS column', code: 4535\n"); } diff --git a/yql/essentials/sql/v1/sql_ut.h b/yql/essentials/sql/v1/sql_ut.h index 7e9c3df8e8..d01df1af2b 100644 --- a/yql/essentials/sql/v1/sql_ut.h +++ b/yql/essentials/sql/v1/sql_ut.h @@ -1,6 +1,7 @@ #include <yql/essentials/providers/common/provider/yql_provider_names.h> #include <yql/essentials/sql/sql.h> +#include <yql/essentials/sql/v1/sql.h> #include <util/generic/map.h> #include <library/cpp/regex/pcre/pcre.h> @@ -44,7 +45,14 @@ inline NYql::TAstParseResult SqlToYqlWithMode(const TString& query, NSQLTranslat settings.AnsiLexer = ansiLexer; settings.Antlr4Parser = false; settings.SyntaxVersion = 1; - auto res = SqlToYql(query, settings); + + NSQLTranslation::TTranslators translators( + nullptr, + NSQLTranslationV1::MakeTranslator(), + nullptr + ); + + auto res = SqlToYql(translators, query, settings); if (debug == EDebugOutput::ToCerr) { Err2Str(res, debug); } @@ -55,7 +63,7 @@ inline NYql::TAstParseResult SqlToYql(const TString& query, size_t maxErrors = 1 return SqlToYqlWithMode(query, NSQLTranslation::ESqlMode::QUERY, maxErrors, provider, debug); } -inline NYql::TAstParseResult +inline NYql::TAstParseResult SqlToYqlWithSettings(const TString& query, const NSQLTranslation::TTranslationSettings& settings) { return SqlToYqlWithMode(query, NSQLTranslation::ESqlMode::QUERY, 10, {}, EDebugOutput::None, false, settings); } diff --git a/yql/essentials/sql/v1/sql_ut_antlr4.cpp b/yql/essentials/sql/v1/sql_ut_antlr4.cpp index 9472e01543..2784f85f0b 100644 --- a/yql/essentials/sql/v1/sql_ut_antlr4.cpp +++ b/yql/essentials/sql/v1/sql_ut_antlr4.cpp @@ -3114,7 +3114,7 @@ Y_UNIT_TEST_SUITE(SqlParsingOnly) { Y_UNIT_TEST(WithNonStructSchemaS3) { NSQLTranslation::TTranslationSettings settings; settings.ClusterMapping["s3bucket"] = NYql::S3ProviderName; - UNIT_ASSERT(SqlToYql("select * from s3bucket.`foo` with schema (col1 Int32, String as col2, Int64 as col3);", settings).IsOk()); + UNIT_ASSERT(SqlToYqlWithSettings("select * from s3bucket.`foo` with schema (col1 Int32, String as col2, Int64 as col3);", settings).IsOk()); } Y_UNIT_TEST(AllowNestedTuplesInGroupBy) { @@ -5197,7 +5197,7 @@ select FormatType($f()); Y_UNIT_TEST(WarnForDeprecatedSchema) { NSQLTranslation::TTranslationSettings settings; settings.ClusterMapping["s3bucket"] = NYql::S3ProviderName; - NYql::TAstParseResult res = SqlToYql("select * from s3bucket.`foo` with schema (col1 Int32, String as col2, Int64 as col3);", settings); + NYql::TAstParseResult res = SqlToYqlWithSettings("select * from s3bucket.`foo` with schema (col1 Int32, String as col2, Int64 as col3);", settings); UNIT_ASSERT(res.Root); UNIT_ASSERT_STRING_CONTAINS(res.Issues.ToString(), "Warning: Deprecated syntax for positional schema: please use 'column type' instead of 'type AS column', code: 4535\n"); } diff --git a/yql/essentials/sql/v1/sql_ut_antlr4.h b/yql/essentials/sql/v1/sql_ut_antlr4.h index 9a0029b67a..ab473e48d1 100644 --- a/yql/essentials/sql/v1/sql_ut_antlr4.h +++ b/yql/essentials/sql/v1/sql_ut_antlr4.h @@ -1,6 +1,7 @@ #include <yql/essentials/providers/common/provider/yql_provider_names.h> #include <yql/essentials/sql/sql.h> +#include <yql/essentials/sql/v1/sql.h> #include <util/generic/map.h> #include <library/cpp/testing/unittest/registar.h> @@ -43,7 +44,14 @@ inline NYql::TAstParseResult SqlToYqlWithMode(const TString& query, NSQLTranslat settings.AnsiLexer = ansiLexer; settings.Antlr4Parser = true; settings.SyntaxVersion = 1; - auto res = SqlToYql(query, settings); + + NSQLTranslation::TTranslators translators( + nullptr, + NSQLTranslationV1::MakeTranslator(), + nullptr + ); + + auto res = SqlToYql(translators, query, settings); if (debug == EDebugOutput::ToCerr) { Err2Str(res, debug); } diff --git a/yql/essentials/tools/pgrun/ya.make b/yql/essentials/tools/pgrun/ya.make index 420679420d..b22318c169 100644 --- a/yql/essentials/tools/pgrun/ya.make +++ b/yql/essentials/tools/pgrun/ya.make @@ -33,7 +33,6 @@ PEERDIR( yql/essentials/providers/common/proto yql/essentials/providers/common/provider yql/essentials/providers/common/udf_resolve - contrib/ydb/library/yql/providers/dq/provider yt/yql/providers/yt/common yt/yql/providers/yt/lib/schema yt/yql/providers/yt/gateway/file diff --git a/yql/essentials/tools/sql2yql/sql2yql.cpp b/yql/essentials/tools/sql2yql/sql2yql.cpp index 199f2fa476..dea00f68fc 100644 --- a/yql/essentials/tools/sql2yql/sql2yql.cpp +++ b/yql/essentials/tools/sql2yql/sql2yql.cpp @@ -5,6 +5,7 @@ #include <yql/essentials/parser/lexer_common/hints.h> #include <yql/essentials/sql/sql.h> +#include <yql/essentials/sql/v1/sql.h> #include <yql/essentials/providers/common/provider/yql_provider_names.h> #include <yql/essentials/parser/pg_wrapper/interface/parser.h> @@ -86,6 +87,7 @@ static void ExtractQuery(TPosOutput& out, const google::protobuf::Message& node) } bool TestFormat( + const NSQLTranslation::TTranslators& translators, const TString& query, const NSQLTranslation::TTranslationSettings& settings, const TString& queryFile, @@ -103,7 +105,7 @@ bool TestFormat( Cerr << "Failed to format query: " << issues.ToString() << Endl; return false; } - NYql::TAstParseResult frmParseRes = NSQLTranslation::SqlToYql(frmQuery, settings); + 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;})) { @@ -217,6 +219,12 @@ int BuildAST(int argc, char* argv[]) { opts.PrintUsage(argv[0], Cerr); } + NSQLTranslation::TTranslators translators( + nullptr, + NSQLTranslationV1::MakeTranslator(), + NSQLTranslationPG::MakeTranslator() + ); + TVector<TString> queries; int errors = 0; for (ui32 i = 0; i <= queryFiles.size(); ++i) { @@ -276,7 +284,7 @@ int BuildAST(int argc, char* argv[]) { if (res.Has("lexer")) { NYql::TIssues issues; - auto lexer = NSQLTranslation::SqlLexer(query, issues, settings); + auto lexer = NSQLTranslation::SqlLexer(translators, query, issues, settings); NSQLTranslation::TParsedTokenList tokens; if (lexer && NSQLTranslation::Tokenize(*lexer, query, queryFile, tokens, issues, NSQLTranslation::SQL_MAX_PARSER_ERRORS)) { for (auto& token : tokens) { @@ -299,7 +307,7 @@ int BuildAST(int argc, char* argv[]) { parseRes = NSQLTranslationPG::PGToYql(query, settings); } else { if (res.Has("tree") || res.Has("diff") || res.Has("dump")) { - google::protobuf::Message* ast(NSQLTranslation::SqlAST(query, queryFile, parseRes.Issues, + google::protobuf::Message* ast(NSQLTranslation::SqlAST(translators, query, queryFile, parseRes.Issues, NSQLTranslation::SQL_MAX_PARSER_ERRORS, settings)); if (ast) { if (res.Has("tree")) { @@ -315,14 +323,14 @@ int BuildAST(int argc, char* argv[]) { } NSQLTranslation::TSQLHints hints; - auto lexer = SqlLexer(query, parseRes.Issues, settings); + auto lexer = SqlLexer(translators, query, parseRes.Issues, settings); if (lexer && CollectSqlHints(*lexer, query, queryFile, settings.File, hints, parseRes.Issues, settings.MaxErrors, settings.Antlr4Parser)) { - parseRes = NSQLTranslation::SqlASTToYql(query, *ast, hints, settings); + parseRes = NSQLTranslation::SqlASTToYql(translators, query, *ast, hints, settings); } } } else { - parseRes = NSQLTranslation::SqlToYql(query, settings); + parseRes = NSQLTranslation::SqlToYql(translators, query, settings); } } @@ -350,7 +358,7 @@ int BuildAST(int argc, char* argv[]) { } if (res.Has("test-format") && syntaxVersion == 1 && !hasError && parseRes.Root) { - hasError = !TestFormat(query, settings, queryFile, parseRes, outFileNameFormat, res.Has("test-double-format")); + hasError = !TestFormat(translators, query, settings, queryFile, parseRes, outFileNameFormat, res.Has("test-double-format")); } if (hasError) { diff --git a/yql/essentials/tools/sql2yql/ya.make b/yql/essentials/tools/sql2yql/ya.make index 83284540f5..339169744a 100644 --- a/yql/essentials/tools/sql2yql/ya.make +++ b/yql/essentials/tools/sql2yql/ya.make @@ -8,6 +8,7 @@ PEERDIR( yql/essentials/parser/pg_wrapper yql/essentials/public/udf/service/stub yql/essentials/sql + yql/essentials/sql/v1 yql/essentials/sql/pg yql/essentials/sql/v1/format ) diff --git a/yql/essentials/tools/yql_facade_run/ya.make b/yql/essentials/tools/yql_facade_run/ya.make index e67e0b6c7f..f434c449fb 100644 --- a/yql/essentials/tools/yql_facade_run/ya.make +++ b/yql/essentials/tools/yql_facade_run/ya.make @@ -37,6 +37,8 @@ PEERDIR( yql/essentials/protos yql/essentials/sql/settings yql/essentials/sql/v1/format + yql/essentials/sql/v1 + yql/essentials/sql library/cpp/resource library/cpp/getopt 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 5a2dc645a6..ac09dda500 100644 --- a/yql/essentials/tools/yql_facade_run/yql_facade_run.cpp +++ b/yql/essentials/tools/yql_facade_run/yql_facade_run.cpp @@ -40,6 +40,8 @@ #include <yql/essentials/protos/pg_ext.pb.h> #include <yql/essentials/sql/settings/translation_settings.h> #include <yql/essentials/sql/v1/format/sql_format.h> +#include <yql/essentials/sql/v1/sql.h> +#include <yql/essentials/sql/sql.h> #include <library/cpp/resource/resource.h> #include <library/cpp/yson/node/node_io.h> @@ -557,6 +559,12 @@ int TFacadeRunner::DoMain(int argc, const char *argv[]) { FuncRegistry_ = NKikimr::NMiniKQL::CreateFunctionRegistry(&NYql::NBacktrace::KikimrBackTrace, NKikimr::NMiniKQL::CreateBuiltinRegistry(), true, RunOptions_.UdfsPaths); + NSQLTranslation::TTranslators translators( + nullptr, + NSQLTranslationV1::MakeTranslator(), + NSQLTranslationPG::MakeTranslator() + ); + TExprContext ctx; if (RunOptions_.PgSupport) { ctx.NextUniqueId = NPg::GetSqlLanguageParser()->GetContext().NextUniqueId; @@ -566,13 +574,13 @@ int TFacadeRunner::DoMain(int argc, const char *argv[]) { TModulesTable modules; FillUserDataTableFromFileSystem(*RunOptions_.MountConfig, RunOptions_.DataTable); - if (!CompileLibraries(RunOptions_.DataTable, ctx, modules, RunOptions_.OptimizeLibs && RunOptions_.Mode >= ERunMode::Validate)) { + if (!CompileLibraries(translators, RunOptions_.DataTable, ctx, modules, RunOptions_.OptimizeLibs && RunOptions_.Mode >= ERunMode::Validate)) { *RunOptions_.ErrStream << "Errors on compile libraries:" << Endl; ctx.IssueManager.GetIssues().PrintTo(*RunOptions_.ErrStream); return -1; } - moduleResolver = std::make_shared<TModuleResolver>(std::move(modules), ctx.NextUniqueId, ClusterMapping_, RunOptions_.SqlFlags, RunOptions_.Mode >= ERunMode::Validate); + moduleResolver = std::make_shared<TModuleResolver>(translators, std::move(modules), ctx.NextUniqueId, ClusterMapping_, RunOptions_.SqlFlags, RunOptions_.Mode >= ERunMode::Validate); } else { if (!GetYqlDefaultModuleResolver(ctx, moduleResolver, ClusterMapping_, RunOptions_.OptimizeLibs && RunOptions_.Mode >= ERunMode::Validate)) { *RunOptions_.ErrStream << "Errors loading default YQL libraries:" << Endl; diff --git a/yql/essentials/udfs/common/json/test/canondata/result.json b/yql/essentials/udfs/common/json/test/canondata/result.json deleted file mode 100644 index fb6112fc5b..0000000000 --- a/yql/essentials/udfs/common/json/test/canondata/result.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "test.test[Basic]": [ - { - "uri": "file://test.test_Basic_/results.txt" - } - ] -} diff --git a/yql/essentials/udfs/common/json/test/canondata/test.test_Basic_/results.txt b/yql/essentials/udfs/common/json/test/canondata/test.test_Basic_/results.txt deleted file mode 100644 index 8cd3200dab..0000000000 --- a/yql/essentials/udfs/common/json/test/canondata/test.test_Basic_/results.txt +++ /dev/null @@ -1,57 +0,0 @@ -[ - { - "Write" = [ - { - "Type" = [ - "ListType"; - [ - "StructType"; - [ - [ - "column0"; - [ - "ListType"; - [ - "DataType"; - "String" - ] - ] - ]; - [ - "column1"; - [ - "ListType"; - [ - "DataType"; - "String" - ] - ] - ]; - [ - "column2"; - [ - "ListType"; - [ - "DataType"; - "String" - ] - ] - ] - ] - ] - ]; - "Data" = [ - [ - [ - "11" - ]; - [ - "" - ]; - [] - ] - ] - } - ] - } -]
\ No newline at end of file diff --git a/yql/essentials/udfs/common/json/test/cases/Basic.sql b/yql/essentials/udfs/common/json/test/cases/Basic.sql deleted file mode 100644 index 512246d766..0000000000 --- a/yql/essentials/udfs/common/json/test/cases/Basic.sql +++ /dev/null @@ -1,12 +0,0 @@ -/* syntax version 0 */ -$json1 = @@{ - "x": { - "y": ["15", "11", "17"], - "z": 1 - } -}@@; - -SELECT - Json::GetField($json1, "/x/y/[1]"), - Json::GetField("[]", "/"), - Json::GetField($json1, "///"); diff --git a/yql/essentials/udfs/common/json/ya.make b/yql/essentials/udfs/common/json/ya.make index 2b2df2dd9a..689714e306 100644 --- a/yql/essentials/udfs/common/json/ya.make +++ b/yql/essentials/udfs/common/json/ya.make @@ -15,7 +15,3 @@ YQL_UDF_CONTRIB(json_udf) ) END() - -RECURSE_FOR_TESTS( - test -) |