summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvvvv <[email protected]>2025-10-17 07:43:59 +0300
committervvvv <[email protected]>2025-10-17 08:05:07 +0300
commit18dc0d862c27f26775e7ed11b6d2d0853f2f9a77 (patch)
tree59f720bf2368478a37706d4e45a5bd8685d35210
parent05b4c4f15355983e6342ce37e6f760a6ffe3feac (diff)
YQL-20339 composite types in grammar
commit_hash:2fc2878449f90c948e0cd75a3c1d59f07d660620
-rw-r--r--yql/essentials/sql/v1/SQLv1Antlr4.g.in10
-rw-r--r--yql/essentials/sql/v1/sql_translation.cpp10
-rw-r--r--yql/essentials/sql/v1/sql_ut_common.h7
-rw-r--r--yql/essentials/tests/sql/minirun/part6/canondata/result.json12
-rw-r--r--yql/essentials/tests/sql/sql2yql/canondata/result.json6
-rw-r--r--yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_linear-types_/formatted.sql2
-rw-r--r--yql/essentials/tests/sql/suites/linear/types.yql4
-rw-r--r--yql/essentials/udfs/common/python/python3_small/test/canondata/test.test_LinearDynamicFail1_/extracted6
-rw-r--r--yql/essentials/udfs/common/python/python3_small/test/canondata/test.test_LinearDynamicFail2_/extracted6
-rw-r--r--yql/essentials/udfs/common/python/python3_small/test/cases/Linear.sql5
-rw-r--r--yql/essentials/udfs/common/python/python3_small/test/cases/LinearDynamic.sql5
-rw-r--r--yql/essentials/udfs/common/python/python3_small/test/cases/LinearDynamicFail1.sql5
-rw-r--r--yql/essentials/udfs/common/python/python3_small/test/cases/LinearDynamicFail2.sql5
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);