diff options
| author | vvvv <[email protected]> | 2025-10-17 07:43:59 +0300 |
|---|---|---|
| committer | vvvv <[email protected]> | 2025-10-17 08:05:07 +0300 |
| commit | 18dc0d862c27f26775e7ed11b6d2d0853f2f9a77 (patch) | |
| tree | 59f720bf2368478a37706d4e45a5bd8685d35210 | |
| parent | 05b4c4f15355983e6342ce37e6f760a6ffe3feac (diff) | |
YQL-20339 composite types in grammar
commit_hash:2fc2878449f90c948e0cd75a3c1d59f07d660620
13 files changed, 55 insertions, 28 deletions
diff --git a/yql/essentials/sql/v1/SQLv1Antlr4.g.in b/yql/essentials/sql/v1/SQLv1Antlr4.g.in index 919da25318d..1bba8d0f1b7 100644 --- a/yql/essentials/sql/v1/SQLv1Antlr4.g.in +++ b/yql/essentials/sql/v1/SQLv1Antlr4.g.in @@ -326,6 +326,8 @@ type_name_enum: ENUM LESS type_name_tag (COMMA type_name_tag)* COMMA? GREATER; type_name_resource: RESOURCE LESS type_name_tag GREATER; type_name_tagged: TAGGED LESS type_name_or_bind COMMA type_name_tag GREATER; type_name_callable: CALLABLE LESS LPAREN callable_arg_list? COMMA? (LBRACE_SQUARE callable_arg_list RBRACE_SQUARE)? RPAREN ARROW type_name_or_bind GREATER; +type_name_linear: LINEAR LESS type_name_or_bind GREATER; +type_name_dynamiclinear: DYNAMICLINEAR LESS type_name_or_bind GREATER; type_name_composite: ( type_name_optional @@ -341,6 +343,8 @@ type_name_composite: | type_name_resource | type_name_tagged | type_name_callable + | type_name_linear + | type_name_dynamiclinear ) QUESTION*; type_name: @@ -1439,6 +1443,7 @@ keyword_as_compat: | DESCRIBE | DETACH | DIRECTORY + | DYNAMICLINEAR | DISABLE | DISCARD // | DO @@ -1497,6 +1502,7 @@ keyword_as_compat: // | LEFT | LEGACY | LIKE + | LINEAR | LOCAL | LOGIN | MANAGE @@ -1671,6 +1677,7 @@ keyword_compat: ( | DESCRIBE | DETACH | DIRECTORY + | DYNAMICLINEAR | DISABLE | DISCARD | DO @@ -1729,6 +1736,7 @@ keyword_compat: ( | LEFT | LEGACY | LIKE + | LINEAR | LOCAL | LOGIN | MANAGE @@ -2018,6 +2026,7 @@ DESCRIBE: D E S C R I B E; DETACH: D E T A C H; DICT: D I C T; DIRECTORY: D I R E C T O R Y; +DYNAMICLINEAR: D Y N A M I C L I N E A R; DISABLE: D I S A B L E; DISCARD: D I S C A R D; DISTINCT: D I S T I N C T; @@ -2095,6 +2104,7 @@ LEFT: L E F T; LEGACY: L E G A C Y; LIKE: L I K E; LIMIT: L I M I T; +LINEAR: L I N E A R; LIST: L I S T; LOCAL: L O C A L; LOGIN: L O G I N; diff --git a/yql/essentials/sql/v1/sql_translation.cpp b/yql/essentials/sql/v1/sql_translation.cpp index 4b81fd07c0e..2d96fa84695 100644 --- a/yql/essentials/sql/v1/sql_translation.cpp +++ b/yql/essentials/sql/v1/sql_translation.cpp @@ -3374,6 +3374,16 @@ TNodePtr TSqlTranslation::TypeNode(const TRule_type_name_composite& node) { result = new TAstListNodeImpl(pos, items); break; } + case TRule_type_name_composite_TBlock1::kAlt14: { + auto& linearType = block.GetAlt14().GetRule_type_name_linear1(); + result = wrapOneParamType(linearType.GetRule_type_name_or_bind3(), "LinearType"); + break; + } + case TRule_type_name_composite_TBlock1::kAlt15: { + auto& linearType = block.GetAlt15().GetRule_type_name_dynamiclinear1(); + result = wrapOneParamType(linearType.GetRule_type_name_or_bind3(), "DynamicLinearType"); + break; + } case TRule_type_name_composite_TBlock1::ALT_NOT_SET: Y_ABORT("You should change implementation according to grammar changes"); } diff --git a/yql/essentials/sql/v1/sql_ut_common.h b/yql/essentials/sql/v1/sql_ut_common.h index 30f01e1c061..630030b24e7 100644 --- a/yql/essentials/sql/v1/sql_ut_common.h +++ b/yql/essentials/sql/v1/sql_ut_common.h @@ -4255,6 +4255,13 @@ Y_UNIT_TEST(AutoSampleWorksWithSubquery) { UNIT_ASSERT(SqlToYql("select * from (select * from plato.Input) sample 0.2").IsOk()); } +Y_UNIT_TEST(LinearAsColumnOrType) { + UNIT_ASSERT(SqlToYql("select FormatType(Linear<Int32>)").IsOk()); + UNIT_ASSERT(SqlToYql("select Linear<2 from (select 1 as Linear)").IsOk()); + UNIT_ASSERT(SqlToYql("select FormatType(DynamicLinear<Int32>)").IsOk()); + UNIT_ASSERT(SqlToYql("select DynamicLinear<2 from (select 1 as DynamicLinear)").IsOk()); +} + Y_UNIT_TEST(CreateTableTrailingComma) { UNIT_ASSERT(SqlToYql("USE plato; CREATE TABLE tableName (Key Uint32, PRIMARY KEY (Key),);").IsOk()); UNIT_ASSERT(SqlToYql("USE plato; CREATE TABLE tableName (Key Uint32,);").IsOk()); diff --git a/yql/essentials/tests/sql/minirun/part6/canondata/result.json b/yql/essentials/tests/sql/minirun/part6/canondata/result.json index 3d476f452ab..21ad5aad8fc 100644 --- a/yql/essentials/tests/sql/minirun/part6/canondata/result.json +++ b/yql/essentials/tests/sql/minirun/part6/canondata/result.json @@ -1073,16 +1073,16 @@ ], "test.test[linear-types-default.txt-Debug]": [ { - "checksum": "013b2c346f23df65f2e461b9a9cff6f9", - "size": 420, - "uri": "https://{canondata_backend}/1781765/972251ebb8228a889fb9ce1afa36c3b56345fcfe/resource.tar.gz#test.test_linear-types-default.txt-Debug_/opt.yql" + "checksum": "e959afd820df98d7a89cbab6713dc174", + "size": 488, + "uri": "https://{canondata_backend}/1936997/cec6a07b611625302390ba988f3ac059f5c8f512/resource.tar.gz#test.test_linear-types-default.txt-Debug_/opt.yql" } ], "test.test[linear-types-default.txt-Results]": [ { - "checksum": "c41448a02612fcc93b6ebd7962faad93", - "size": 1625, - "uri": "https://{canondata_backend}/1781765/972251ebb8228a889fb9ce1afa36c3b56345fcfe/resource.tar.gz#test.test_linear-types-default.txt-Results_/results.txt" + "checksum": "961d16c08981e2d4058c5d6c48f46ccc", + "size": 2244, + "uri": "https://{canondata_backend}/1936997/cec6a07b611625302390ba988f3ac059f5c8f512/resource.tar.gz#test.test_linear-types-default.txt-Results_/results.txt" } ], "test.test[match_recognize-alerts_without_order-default.txt-Debug]": [ diff --git a/yql/essentials/tests/sql/sql2yql/canondata/result.json b/yql/essentials/tests/sql/sql2yql/canondata/result.json index c3a4b4510ab..c30e4b85e42 100644 --- a/yql/essentials/tests/sql/sql2yql/canondata/result.json +++ b/yql/essentials/tests/sql/sql2yql/canondata/result.json @@ -5223,9 +5223,9 @@ ], "test_sql2yql.test[linear-types]": [ { - "checksum": "f756d489eb05467c7a6414636f47f37e", - "size": 1609, - "uri": "https://{canondata_backend}/1781765/e398ef188885373eb0a98e1d374e17ce1b8dfd7c/resource.tar.gz#test_sql2yql.test_linear-types_/sql.yql" + "checksum": "6557c445f5b203f2fcc92868f053a679", + "size": 1988, + "uri": "https://{canondata_backend}/1936997/73046b615bcbb6ccac48880b83eb4e65a52b2433/resource.tar.gz#test_sql2yql.test_linear-types_/sql.yql" } ], "test_sql2yql.test[linear-types_reflection]": [ diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_linear-types_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_linear-types_/formatted.sql index 55128f8b7d7..ff8d5236b7a 100644 --- a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_linear-types_/formatted.sql +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_linear-types_/formatted.sql @@ -1,5 +1,7 @@ SELECT + FormatType(Linear<Int32>), FormatType(LinearType(Int32)), + FormatType(DynamicLinear<Int32>), FormatType(DynamicLinearType(Int32)), FormatType(ParseType('Linear<Int32>')), FormatType(LinearItemType(LinearType(Int32))) diff --git a/yql/essentials/tests/sql/suites/linear/types.yql b/yql/essentials/tests/sql/suites/linear/types.yql index a9d832acd94..04d49c74b9c 100644 --- a/yql/essentials/tests/sql/suites/linear/types.yql +++ b/yql/essentials/tests/sql/suites/linear/types.yql @@ -1,4 +1,6 @@ -select FormatType(LinearType(Int32)), +select FormatType(Linear<Int32>), + FormatType(LinearType(Int32)), + FormatType(DynamicLinear<Int32>), FormatType(DynamicLinearType(Int32)), FormatType(ParseType('Linear<Int32>')), FormatType(LinearItemType(LinearType(Int32))) diff --git a/yql/essentials/udfs/common/python/python3_small/test/canondata/test.test_LinearDynamicFail1_/extracted b/yql/essentials/udfs/common/python/python3_small/test/canondata/test.test_LinearDynamicFail1_/extracted index 05e09cd7eda..21179d95d3f 100644 --- a/yql/essentials/udfs/common/python/python3_small/test/canondata/test.test_LinearDynamicFail1_/extracted +++ b/yql/essentials/udfs/common/python/python3_small/test/canondata/test.test_LinearDynamicFail1_/extracted @@ -1,12 +1,12 @@ <tmp_path>/program.sql:<main>: Error: Execution - <tmp_path>/program.sql:<main>:50:1: Error: Execution of node: Result + <tmp_path>/program.sql:<main>:48:1: Error: Execution of node: Result select $c($p(1)); ^ - <tmp_path>/program.sql:<main>:46:14: Error: Failed to execute: + <tmp_path>/program.sql:<main>:44:14: Error: Failed to execute: Traceback (most recent call last): File "embedded:g", line 35, in g ValueError: The linear value has already been used - $c = Python::g(Callable<($l)->Int32>, $s); + $c = Python::g(Callable<(DynamicLinear<Int32>)->Int32>, $s); ^
\ No newline at end of file diff --git a/yql/essentials/udfs/common/python/python3_small/test/canondata/test.test_LinearDynamicFail2_/extracted b/yql/essentials/udfs/common/python/python3_small/test/canondata/test.test_LinearDynamicFail2_/extracted index 462b4b5332d..79986260774 100644 --- a/yql/essentials/udfs/common/python/python3_small/test/canondata/test.test_LinearDynamicFail2_/extracted +++ b/yql/essentials/udfs/common/python/python3_small/test/canondata/test.test_LinearDynamicFail2_/extracted @@ -1,12 +1,12 @@ <tmp_path>/program.sql:<main>: Error: Execution - <tmp_path>/program.sql:<main>:52:1: Error: Execution of node: Result + <tmp_path>/program.sql:<main>:50:1: Error: Execution of node: Result select $c($a,0),$c($a,1); ^ - <tmp_path>/program.sql:<main>:46:14: Error: Failed to execute: + <tmp_path>/program.sql:<main>:44:14: Error: Failed to execute: Traceback (most recent call last): File "embedded:g", line 35, in g ValueError: The linear value has already been used - $c = Python::g(Callable<($l,Int32)->Int32>, $s); + $c = Python::g(Callable<(DynamicLinear<Int32>,Int32)->Int32>, $s); ^
\ No newline at end of file diff --git a/yql/essentials/udfs/common/python/python3_small/test/cases/Linear.sql b/yql/essentials/udfs/common/python/python3_small/test/cases/Linear.sql index ef4aa9f0132..0f1ebaf2989 100644 --- a/yql/essentials/udfs/common/python/python3_small/test/cases/Linear.sql +++ b/yql/essentials/udfs/common/python/python3_small/test/cases/Linear.sql @@ -6,9 +6,8 @@ def g(x): return x * 2 @@; -$l = LinearType(Int32); -$p = Python::f(Callable<(Int32)->$l>, $s); -$c = Python::g(Callable<($l)->Int32>, $s); +$p = Python::f(Callable<(Int32)->Linear<Int32>>, $s); +$c = Python::g(Callable<(Linear<Int32>)->Int32>, $s); select $c($p(1)); diff --git a/yql/essentials/udfs/common/python/python3_small/test/cases/LinearDynamic.sql b/yql/essentials/udfs/common/python/python3_small/test/cases/LinearDynamic.sql index 58b4a649a05..de8492ff525 100644 --- a/yql/essentials/udfs/common/python/python3_small/test/cases/LinearDynamic.sql +++ b/yql/essentials/udfs/common/python/python3_small/test/cases/LinearDynamic.sql @@ -18,9 +18,8 @@ def g(x): return x.extract() * 2 @@; -$l = DynamicLinearType(Int32); -$p = Python::f(Callable<(Int32)->$l>, $s); -$c = Python::g(Callable<($l)->Int32>, $s); +$p = Python::f(Callable<(Int32)->DynamicLinear<Int32>>, $s); +$c = Python::g(Callable<(DynamicLinear<Int32>)->Int32>, $s); select $c($p(1)); diff --git a/yql/essentials/udfs/common/python/python3_small/test/cases/LinearDynamicFail1.sql b/yql/essentials/udfs/common/python/python3_small/test/cases/LinearDynamicFail1.sql index 5a91c16589f..b6fccfc2865 100644 --- a/yql/essentials/udfs/common/python/python3_small/test/cases/LinearDynamicFail1.sql +++ b/yql/essentials/udfs/common/python/python3_small/test/cases/LinearDynamicFail1.sql @@ -18,9 +18,8 @@ def g(x): return x.extract() * x.extract() @@; -$l = DynamicLinearType(Int32); -$p = Python::f(Callable<(Int32)->$l>, $s); -$c = Python::g(Callable<($l)->Int32>, $s); +$p = Python::f(Callable<(Int32)->DynamicLinear<Int32>>, $s); +$c = Python::g(Callable<(DynamicLinear<Int32>)->Int32>, $s); select $c($p(1)); diff --git a/yql/essentials/udfs/common/python/python3_small/test/cases/LinearDynamicFail2.sql b/yql/essentials/udfs/common/python/python3_small/test/cases/LinearDynamicFail2.sql index 09610de9aa3..79e24c30267 100644 --- a/yql/essentials/udfs/common/python/python3_small/test/cases/LinearDynamicFail2.sql +++ b/yql/essentials/udfs/common/python/python3_small/test/cases/LinearDynamicFail2.sql @@ -18,9 +18,8 @@ def g(x,n): return x.extract() + n @@; -$l = DynamicLinearType(Int32); -$p = Python::f(Callable<(Int32)->$l>, $s); -$c = Python::g(Callable<($l,Int32)->Int32>, $s); +$p = Python::f(Callable<(Int32)->DynamicLinear<Int32>>, $s); +$c = Python::g(Callable<(DynamicLinear<Int32>,Int32)->Int32>, $s); $a = $p(1); select $c($a,0),$c($a,1); |
