diff options
author | vvvv <[email protected]> | 2025-02-16 01:37:05 +0300 |
---|---|---|
committer | vvvv <[email protected]> | 2025-02-16 01:52:10 +0300 |
commit | 802da2736bf00631aa408e495b80d6e125f10a9f (patch) | |
tree | 054610611d17d22a8b2677e9c9f8ae5ec6e0eeef /yql/essentials/sql | |
parent | b49c2fc9d96aa43f8f993a9e2f037209f0ebdb68 (diff) |
refactor SQL translators YQL-19594
commit_hash:401d21dd23ee9bb7ee52b2fc42e596cb3e4bdda7
Diffstat (limited to 'yql/essentials/sql')
-rw-r--r-- | yql/essentials/sql/pg/ut/util.h | 14 | ||||
-rw-r--r-- | yql/essentials/sql/sql.cpp | 16 | ||||
-rw-r--r-- | yql/essentials/sql/v1/sql_ut.cpp | 4 | ||||
-rw-r--r-- | yql/essentials/sql/v1/sql_ut.h | 12 | ||||
-rw-r--r-- | yql/essentials/sql/v1/sql_ut_antlr4.cpp | 4 | ||||
-rw-r--r-- | yql/essentials/sql/v1/sql_ut_antlr4.h | 10 |
6 files changed, 42 insertions, 18 deletions
diff --git a/yql/essentials/sql/pg/ut/util.h b/yql/essentials/sql/pg/ut/util.h index e1fff55beb2..72739103643 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 9e18a1bb017..4d768852c66 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 03d7c1e99a9..bdde5cddab9 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 7e9c3df8e8e..d01df1af2ba 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 9472e015437..2784f85f0b6 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 9a0029b67ad..ab473e48d10 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); } |