aboutsummaryrefslogtreecommitdiffstats
path: root/yql
diff options
context:
space:
mode:
authorvvvv <vvvv@yandex-team.com>2025-02-16 01:37:05 +0300
committervvvv <vvvv@yandex-team.com>2025-02-16 01:52:10 +0300
commit802da2736bf00631aa408e495b80d6e125f10a9f (patch)
tree054610611d17d22a8b2677e9c9f8ae5ec6e0eeef /yql
parentb49c2fc9d96aa43f8f993a9e2f037209f0ebdb68 (diff)
downloadydb-802da2736bf00631aa408e495b80d6e125f10a9f.tar.gz
refactor SQL translators YQL-19594
commit_hash:401d21dd23ee9bb7ee52b2fc42e596cb3e4bdda7
Diffstat (limited to 'yql')
-rw-r--r--yql/essentials/core/extract_predicate/ut/extract_predicate_ut.cpp9
-rw-r--r--yql/essentials/core/extract_predicate/ut/ya.make2
-rw-r--r--yql/essentials/core/facade/ya.make2
-rw-r--r--yql/essentials/core/facade/yql_facade.cpp11
-rw-r--r--yql/essentials/core/services/mounts/ya.make2
-rw-r--r--yql/essentials/core/services/mounts/yql_mounts.cpp12
-rw-r--r--yql/essentials/core/ut/ya.make2
-rw-r--r--yql/essentials/core/ut/yql_library_compiler_ut.cpp27
-rw-r--r--yql/essentials/core/yql_library_compiler.cpp14
-rw-r--r--yql/essentials/core/yql_library_compiler.h7
-rw-r--r--yql/essentials/core/yql_type_annotation.cpp6
-rw-r--r--yql/essentials/core/yql_type_annotation.h30
-rw-r--r--yql/essentials/public/fastcheck/fastcheck.cpp12
-rw-r--r--yql/essentials/public/fastcheck/ya.make1
-rw-r--r--yql/essentials/public/purecalc/common/worker_factory.cpp10
-rw-r--r--yql/essentials/public/purecalc/common/ya.make.inc3
-rw-r--r--yql/essentials/sql/pg/ut/util.h14
-rw-r--r--yql/essentials/sql/sql.cpp16
-rw-r--r--yql/essentials/sql/v1/sql_ut.cpp4
-rw-r--r--yql/essentials/sql/v1/sql_ut.h12
-rw-r--r--yql/essentials/sql/v1/sql_ut_antlr4.cpp4
-rw-r--r--yql/essentials/sql/v1/sql_ut_antlr4.h10
-rw-r--r--yql/essentials/tools/pgrun/ya.make1
-rw-r--r--yql/essentials/tools/sql2yql/sql2yql.cpp22
-rw-r--r--yql/essentials/tools/sql2yql/ya.make1
-rw-r--r--yql/essentials/tools/yql_facade_run/ya.make2
-rw-r--r--yql/essentials/tools/yql_facade_run/yql_facade_run.cpp12
-rw-r--r--yql/essentials/udfs/common/json/test/canondata/result.json7
-rw-r--r--yql/essentials/udfs/common/json/test/canondata/test.test_Basic_/results.txt57
-rw-r--r--yql/essentials/udfs/common/json/test/cases/Basic.sql12
-rw-r--r--yql/essentials/udfs/common/json/ya.make4
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
-)