summaryrefslogtreecommitdiffstats
path: root/yql/essentials/tests/sql/sql2yql
diff options
context:
space:
mode:
authorvitya-smirnov <[email protected]>2025-10-01 20:51:41 +0300
committervitya-smirnov <[email protected]>2025-10-01 21:25:50 +0300
commitf3f7b33a285e94cb3e27aaa4d9b23b543ece4106 (patch)
tree89740eeddb803123f1ed3d6b6f7be2bcd865f68c /yql/essentials/tests/sql/sql2yql
parent5cfb01d33937d2b2e038abf3b50e04136dcf7496 (diff)
YQL-20307: Support inline subqueries
- Alter grammar to support inline subqueries. - Support inline subqueries in `sql/v1` (translator). - Introduce `sql/v1/proto_ast/parse_tree.h` for reusable parse tree predicates. - Support inline subqueries in `sql/v1/format`. - Support inline subqueries in `sql/v1/complete`. - Add some SQL-tests. - Pass all tests. commit_hash:075b2240778d071e1c7542f912d3cc83019ef849
Diffstat (limited to 'yql/essentials/tests/sql/sql2yql')
-rw-r--r--yql/essentials/tests/sql/sql2yql/canondata/result.json190
-rw-r--r--yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_select_op-select_op_precedence_named_node_/formatted.sql159
-rw-r--r--yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-aggregate_/formatted.sql57
-rw-r--r--yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-aggregate_over_/formatted.sql85
-rw-r--r--yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-flatten_by_/formatted.sql69
-rw-r--r--yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-having_/formatted.sql60
-rw-r--r--yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-limit_/formatted.sql57
-rw-r--r--yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-offset_/formatted.sql65
-rw-r--r--yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-partition_by_/formatted.sql79
-rw-r--r--yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-projection_/formatted.sql39
-rw-r--r--yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-union_/formatted.sql217
-rw-r--r--yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-where_/formatted.sql51
-rw-r--r--yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-where_named_node_/formatted.sql43
13 files changed, 1169 insertions, 2 deletions
diff --git a/yql/essentials/tests/sql/sql2yql/canondata/result.json b/yql/essentials/tests/sql/sql2yql/canondata/result.json
index 9994a22961d..5653adcf262 100644
--- a/yql/essentials/tests/sql/sql2yql/canondata/result.json
+++ b/yql/essentials/tests/sql/sql2yql/canondata/result.json
@@ -5099,7 +5099,7 @@
{
"checksum": "707b29e9ab12763d6c8a135a571bc120",
"size": 1205,
- "uri": "https://{canondata_backend}/1942671/d721729a70844cec9425cad0a129e47d493b2668/resource.tar.gz#test_sql2yql.test_linear-mutdict_copy_/sql.yql"
+ "uri": "https://{canondata_backend}/1031349/d721729a70844cec9425cad0a129e47d493b2668/resource.tar.gz#test_sql2yql.test_linear-mutdict_copy_/sql.yql"
}
],
"test_sql2yql.test[linear-mutdict_empty]": [
@@ -8140,6 +8140,13 @@
"uri": "https://{canondata_backend}/1937150/ec0019724df75083b0e89cab22f57e10ef36744e/resource.tar.gz#test_sql2yql.test_select_op-select_op_precedence_/sql.yql"
}
],
+ "test_sql2yql.test[select_op-select_op_precedence_named_node]": [
+ {
+ "checksum": "56daeccbda41fa7744c105f671fa9dbd",
+ "size": 9595,
+ "uri": "https://{canondata_backend}/1942671/82ed7d067ef141d1fcef204dc3b89bf4e1c70c57/resource.tar.gz#test_sql2yql.test_select_op-select_op_precedence_named_node_/sql.yql"
+ }
+ ],
"test_sql2yql.test[seq_mode-shared_named_expr]": [
{
"checksum": "1bc276a9cb08e31273e24da9ad90582d",
@@ -8322,6 +8329,83 @@
"uri": "https://{canondata_backend}/1775059/be020ceb210e118c9d8f06ae73e0f97466c49478/resource.tar.gz#test_sql2yql.test_side_effects-x_not_x_fail_/sql.yql"
}
],
+ "test_sql2yql.test[subselect-aggregate]": [
+ {
+ "checksum": "f948f4ad0c25bd1bf52f63dc1ba367e7",
+ "size": 7018,
+ "uri": "https://{canondata_backend}/1936842/befed0b346683be8225cf804762adb36685c15a1/resource.tar.gz#test_sql2yql.test_subselect-aggregate_/sql.yql"
+ }
+ ],
+ "test_sql2yql.test[subselect-aggregate_over]": [
+ {
+ "checksum": "358b518ab969fee7019a1255fa3d89a5",
+ "size": 7950,
+ "uri": "https://{canondata_backend}/1689644/0989c91e43a233bd2d2fb3ce8744224bfdd8a98c/resource.tar.gz#test_sql2yql.test_subselect-aggregate_over_/sql.yql"
+ }
+ ],
+ "test_sql2yql.test[subselect-flatten_by]": [
+ {
+ "checksum": "8b2779a99abfdff442a129c801a4df87",
+ "size": 7562,
+ "uri": "https://{canondata_backend}/1871102/5cbff22143d7f6b1bacea6231269c3ce9cc755ce/resource.tar.gz#test_sql2yql.test_subselect-flatten_by_/sql.yql"
+ }
+ ],
+ "test_sql2yql.test[subselect-having]": [
+ {
+ "checksum": "c687c5999ef3ef849b792bd1af66fa58",
+ "size": 7572,
+ "uri": "https://{canondata_backend}/1937429/cde37b81316143769e7c3cb819c2d6539106c0f2/resource.tar.gz#test_sql2yql.test_subselect-having_/sql.yql"
+ }
+ ],
+ "test_sql2yql.test[subselect-limit]": [
+ {
+ "checksum": "0c74577c4404a48838bbb3c9d4599d28",
+ "size": 6692,
+ "uri": "https://{canondata_backend}/1936997/8a972c55862e0eb44e30da5b57454d9d28c36af5/resource.tar.gz#test_sql2yql.test_subselect-limit_/sql.yql"
+ }
+ ],
+ "test_sql2yql.test[subselect-offset]": [
+ {
+ "checksum": "bcffd7739b8bff115c15488f267c12fc",
+ "size": 7032,
+ "uri": "https://{canondata_backend}/1871182/5d02a77ae9eea603f089879e9ca07bcdd644314c/resource.tar.gz#test_sql2yql.test_subselect-offset_/sql.yql"
+ }
+ ],
+ "test_sql2yql.test[subselect-partition_by]": [
+ {
+ "checksum": "d6fcf13e209c8ae6e4fb77fd8a4a056b",
+ "size": 7950,
+ "uri": "https://{canondata_backend}/1937424/d07f8632fc7a29aabb6b585dfce3b46993c21722/resource.tar.gz#test_sql2yql.test_subselect-partition_by_/sql.yql"
+ }
+ ],
+ "test_sql2yql.test[subselect-projection]": [
+ {
+ "checksum": "0115369c6c6f8693e1a957fab28df068",
+ "size": 5702,
+ "uri": "https://{canondata_backend}/1942278/29cbf9b34bce7d402d33a3942ea29f5167d37a1d/resource.tar.gz#test_sql2yql.test_subselect-projection_/sql.yql"
+ }
+ ],
+ "test_sql2yql.test[subselect-union]": [
+ {
+ "checksum": "43d04e67d2f8629c531561e34aa41d90",
+ "size": 20115,
+ "uri": "https://{canondata_backend}/1781765/53187e0fae3b9cd8c495fb9f0a200c799399c140/resource.tar.gz#test_sql2yql.test_subselect-union_/sql.yql"
+ }
+ ],
+ "test_sql2yql.test[subselect-where]": [
+ {
+ "checksum": "865b800246b8889f3938d93da6ba9f85",
+ "size": 5912,
+ "uri": "https://{canondata_backend}/1942278/29cbf9b34bce7d402d33a3942ea29f5167d37a1d/resource.tar.gz#test_sql2yql.test_subselect-where_/sql.yql"
+ }
+ ],
+ "test_sql2yql.test[subselect-where_named_node]": [
+ {
+ "checksum": "dc8f25aaf267d2dcea6724a6df940b43",
+ "size": 4700,
+ "uri": "https://{canondata_backend}/1946324/adec6e8449b8734f0882dc7b5266ea4af0cf09c4/resource.tar.gz#test_sql2yql.test_subselect-where_named_node_/sql.yql"
+ }
+ ],
"test_sql2yql.test[type_literal-evaluate]": [
{
"checksum": "710dafde8986d41d985bd47be65641ab",
@@ -13053,6 +13137,11 @@
"uri": "file://test_sql_format.test_select_op-select_op_precedence_/formatted.sql"
}
],
+ "test_sql_format.test[select_op-select_op_precedence_named_node]": [
+ {
+ "uri": "file://test_sql_format.test_select_op-select_op_precedence_named_node_/formatted.sql"
+ }
+ ],
"test_sql_format.test[seq_mode-shared_named_expr]": [
{
"uri": "file://test_sql_format.test_seq_mode-shared_named_expr_/formatted.sql"
@@ -13183,6 +13272,61 @@
"uri": "file://test_sql_format.test_side_effects-x_not_x_fail_/formatted.sql"
}
],
+ "test_sql_format.test[subselect-aggregate]": [
+ {
+ "uri": "file://test_sql_format.test_subselect-aggregate_/formatted.sql"
+ }
+ ],
+ "test_sql_format.test[subselect-aggregate_over]": [
+ {
+ "uri": "file://test_sql_format.test_subselect-aggregate_over_/formatted.sql"
+ }
+ ],
+ "test_sql_format.test[subselect-flatten_by]": [
+ {
+ "uri": "file://test_sql_format.test_subselect-flatten_by_/formatted.sql"
+ }
+ ],
+ "test_sql_format.test[subselect-having]": [
+ {
+ "uri": "file://test_sql_format.test_subselect-having_/formatted.sql"
+ }
+ ],
+ "test_sql_format.test[subselect-limit]": [
+ {
+ "uri": "file://test_sql_format.test_subselect-limit_/formatted.sql"
+ }
+ ],
+ "test_sql_format.test[subselect-offset]": [
+ {
+ "uri": "file://test_sql_format.test_subselect-offset_/formatted.sql"
+ }
+ ],
+ "test_sql_format.test[subselect-partition_by]": [
+ {
+ "uri": "file://test_sql_format.test_subselect-partition_by_/formatted.sql"
+ }
+ ],
+ "test_sql_format.test[subselect-projection]": [
+ {
+ "uri": "file://test_sql_format.test_subselect-projection_/formatted.sql"
+ }
+ ],
+ "test_sql_format.test[subselect-union]": [
+ {
+ "uri": "file://test_sql_format.test_subselect-union_/formatted.sql"
+ }
+ ],
+ "test_sql_format.test[subselect-where]": [
+ {
+ "uri": "file://test_sql_format.test_subselect-where_/formatted.sql"
+ }
+ ],
+ "test_sql_format.test[subselect-where_named_node]": [
+ {
+ "uri": "file://test_sql_format.test_subselect-where_named_node_/formatted.sql"
+ }
+ ],
"test_sql_format.test[type_literal-evaluate]": [
{
"uri": "file://test_sql_format.test_type_literal-evaluate_/formatted.sql"
@@ -13641,7 +13785,7 @@
{
"checksum": "5362cc94a32ae614cc3808035e96d473",
"size": 388,
- "uri": "https://{canondata_backend}/1937150/ec0019724df75083b0e89cab22f57e10ef36744e/resource.tar.gz#test_sql_negative.test_flatten_by-struct_with_wrong_correlation-default.txt_/err_file.out"
+ "uri": "https://{canondata_backend}/1889210/f76d30924636e40d4d8bbcffdf8ec586290b624e/resource.tar.gz#test_sql_negative.test_flatten_by-struct_with_wrong_correlation-default.txt_/err_file.out"
}
],
"test_sql_negative.test[flatten_by-table_funcs_spec_flatten_by-default.txt]": [
@@ -13805,6 +13949,48 @@
"uri": "https://{canondata_backend}/1937150/ec0019724df75083b0e89cab22f57e10ef36744e/resource.tar.gz#test_sql_negative.test_select-use_subrequest_as_table-default.txt_/err_file.out"
}
],
+ "test_sql_negative.test[subselect-group_by_no_source-default.txt]": [
+ {
+ "checksum": "89df5ece669c02f9a18c773bda291633",
+ "size": 183,
+ "uri": "https://{canondata_backend}/1847551/94ec1bb7188d22f702c7e9004e1fd04d56e74a2c/resource.tar.gz#test_sql_negative.test_subselect-group_by_no_source-default.txt_/err_file.out"
+ }
+ ],
+ "test_sql_negative.test[subselect-group_by_source-default.txt]": [
+ {
+ "checksum": "803a3c4118ec1171dcccf83358e9364e",
+ "size": 204,
+ "uri": "https://{canondata_backend}/1847551/94ec1bb7188d22f702c7e9004e1fd04d56e74a2c/resource.tar.gz#test_sql_negative.test_subselect-group_by_source-default.txt_/err_file.out"
+ }
+ ],
+ "test_sql_negative.test[subselect-group_by_source_filter-default.txt]": [
+ {
+ "checksum": "2c653e2e3eabdf4881fe2b71486e8108",
+ "size": 217,
+ "uri": "https://{canondata_backend}/1847551/94ec1bb7188d22f702c7e9004e1fd04d56e74a2c/resource.tar.gz#test_sql_negative.test_subselect-group_by_source_filter-default.txt_/err_file.out"
+ }
+ ],
+ "test_sql_negative.test[subselect-order_by_no_source-default.txt]": [
+ {
+ "checksum": "96b93e9696061443a0bf95d2234aed49",
+ "size": 168,
+ "uri": "https://{canondata_backend}/1847551/94ec1bb7188d22f702c7e9004e1fd04d56e74a2c/resource.tar.gz#test_sql_negative.test_subselect-order_by_no_source-default.txt_/err_file.out"
+ }
+ ],
+ "test_sql_negative.test[subselect-order_by_source-default.txt]": [
+ {
+ "checksum": "f9b87f51cdd9dbb9bdc6ac499727ba55",
+ "size": 189,
+ "uri": "https://{canondata_backend}/1847551/94ec1bb7188d22f702c7e9004e1fd04d56e74a2c/resource.tar.gz#test_sql_negative.test_subselect-order_by_source-default.txt_/err_file.out"
+ }
+ ],
+ "test_sql_negative.test[subselect-order_by_source_filter-default.txt]": [
+ {
+ "checksum": "7cd36602aca05ed3e3f516bc1bb295ef",
+ "size": 202,
+ "uri": "https://{canondata_backend}/1847551/94ec1bb7188d22f702c7e9004e1fd04d56e74a2c/resource.tar.gz#test_sql_negative.test_subselect-order_by_source_filter-default.txt_/err_file.out"
+ }
+ ],
"test_sql_negative.test[udf-named_args_for_script_with_wrong_order-default.txt]": [
{
"checksum": "e366faf0a12a73e0040753ae74cf0a55",
diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_select_op-select_op_precedence_named_node_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_select_op-select_op_precedence_named_node_/formatted.sql
new file mode 100644
index 00000000000..0a94efda1ca
--- /dev/null
+++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_select_op-select_op_precedence_named_node_/formatted.sql
@@ -0,0 +1,159 @@
+$t1 = (
+ (
+ SELECT
+ *
+ FROM (
+ VALUES
+ (1),
+ (2)
+ ) AS t (
+ x
+ )
+ )
+ UNION
+ (
+ SELECT
+ *
+ FROM (
+ VALUES
+ (2),
+ (3)
+ ) AS t (
+ x
+ )
+ )
+ INTERSECT
+ (
+ SELECT
+ *
+ FROM (
+ VALUES
+ (3)
+ ) AS t (
+ x
+ )
+ )
+);
+
+$t2 = (
+ (
+ SELECT
+ *
+ FROM (
+ VALUES
+ (3)
+ ) AS t (
+ x
+ )
+ )
+ UNION
+ (
+ SELECT
+ *
+ FROM (
+ VALUES
+ (2)
+ ) AS t (
+ x
+ )
+ )
+ EXCEPT
+ (
+ SELECT
+ *
+ FROM (
+ VALUES
+ (3)
+ ) AS t (
+ x
+ )
+ )
+);
+
+$t3 = (
+ (
+ SELECT
+ *
+ FROM (
+ VALUES
+ (1)
+ ) AS t (
+ x
+ )
+ )
+ UNION
+ (
+ SELECT
+ *
+ FROM (
+ VALUES
+ (2)
+ ) AS t (
+ x
+ )
+ )
+ INTERSECT
+ (
+ SELECT
+ *
+ FROM (
+ VALUES
+ (2),
+ (3)
+ ) AS t (
+ x
+ )
+ )
+ EXCEPT
+ (
+ SELECT
+ *
+ FROM (
+ VALUES
+ (3)
+ ) AS t (
+ x
+ )
+ )
+ UNION
+ (
+ SELECT
+ *
+ FROM (
+ VALUES
+ (4),
+ (3)
+ ) AS t (
+ x
+ )
+ )
+ EXCEPT
+ (
+ SELECT
+ *
+ FROM (
+ VALUES
+ (4)
+ ) AS t (
+ x
+ )
+ )
+);
+
+SELECT
+ *
+FROM
+ $t1
+;
+
+SELECT
+ *
+FROM
+ $t2
+;
+
+SELECT
+ *
+FROM
+ $t3
+;
diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-aggregate_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-aggregate_/formatted.sql
new file mode 100644
index 00000000000..09ae6730441
--- /dev/null
+++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-aggregate_/formatted.sql
@@ -0,0 +1,57 @@
+$input = (
+ SELECT
+ *
+ FROM
+ AS_TABLE([
+ <|k: 1, v: 1|>,
+ <|k: 2, v: 2|>,
+ <|k: 3, v: 3|>,
+ <|k: 4, v: 4|>,
+ <|k: 5, v: 5|>,
+ ])
+);
+
+SELECT
+ Sum(3) AS x
+FROM
+ $input
+;
+
+SELECT
+ Sum(
+ (
+ SELECT
+ 3
+ )
+ ) AS x
+FROM
+ $input
+;
+
+SELECT
+ Sum(
+ (
+ SELECT
+ Avg(v)
+ FROM
+ $input
+ )
+ ) AS x
+FROM
+ $input
+;
+
+SELECT
+ Sum(
+ (
+ SELECT
+ Avg(v)
+ FROM
+ $input
+ WHERE
+ v == 3
+ )
+ ) AS x
+FROM
+ $input
+;
diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-aggregate_over_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-aggregate_over_/formatted.sql
new file mode 100644
index 00000000000..a6399abcec2
--- /dev/null
+++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-aggregate_over_/formatted.sql
@@ -0,0 +1,85 @@
+$input = (
+ SELECT
+ *
+ FROM
+ AS_TABLE([
+ <|k: 1, v: 1|>,
+ <|k: 2, v: 2|>,
+ <|k: 3, v: 3|>,
+ <|k: 4, v: 4|>,
+ <|k: 5, v: 5|>,
+ ])
+);
+
+SELECT
+ Sum(3) OVER w AS x
+FROM
+ $input
+WINDOW
+ w AS (
+ PARTITION BY
+ 3
+ ORDER BY
+ k
+ )
+;
+
+SELECT
+ Sum(
+ (
+ SELECT
+ 3
+ )
+ ) OVER w AS x
+FROM
+ $input
+WINDOW
+ w AS (
+ PARTITION BY
+ 3
+ ORDER BY
+ k
+ )
+;
+
+SELECT
+ Sum(
+ (
+ SELECT
+ Avg(v)
+ FROM
+ $input
+ )
+ ) OVER w AS x
+FROM
+ $input
+WINDOW
+ w AS (
+ PARTITION BY
+ 3
+ ORDER BY
+ k
+ )
+;
+
+SELECT
+ Sum(
+ (
+ SELECT
+ Avg(v)
+ FROM
+ $input
+ WHERE
+ v == 3
+ )
+ ) OVER w AS x
+FROM
+ $input
+WINDOW
+ w AS (
+ PARTITION BY
+ 3
+ ORDER BY
+ k
+ )
+;
diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-flatten_by_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-flatten_by_/formatted.sql
new file mode 100644
index 00000000000..b52ae89010c
--- /dev/null
+++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-flatten_by_/formatted.sql
@@ -0,0 +1,69 @@
+$input = (
+ SELECT
+ *
+ FROM
+ AS_TABLE([
+ <|k: 1, v: 1|>,
+ <|k: 1, v: 2|>,
+ <|k: 1, v: 3|>,
+ <|k: 1, v: 4|>,
+ <|k: 1, v: 5|>,
+ ])
+);
+
+SELECT
+ *
+FROM
+ $input
+ FLATTEN BY (
+ ListFromRange(1, 3) AS x
+ )
+;
+
+SELECT
+ *
+FROM
+ $input
+ FLATTEN BY (
+ ListFromRange(
+ 1, (
+ SELECT
+ 3
+ )
+ ) AS x
+ )
+;
+
+SELECT
+ *
+FROM
+ $input
+ FLATTEN BY (
+ ListFromRange(
+ 1, (
+ SELECT
+ Avg(v)
+ FROM
+ $input
+ )
+ ) AS x
+ )
+;
+
+SELECT
+ *
+FROM
+ $input
+ FLATTEN BY (
+ ListFromRange(
+ 1, (
+ SELECT
+ Avg(v)
+ FROM
+ $input
+ WHERE
+ v == 3
+ )
+ ) AS x
+ )
+;
diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-having_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-having_/formatted.sql
new file mode 100644
index 00000000000..ef64fe8521d
--- /dev/null
+++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-having_/formatted.sql
@@ -0,0 +1,60 @@
+$input = (
+ SELECT
+ *
+ FROM
+ AS_TABLE([
+ <|k: 1, v: 1|>, <|k: 2, v: 1|>,
+ <|k: 1, v: 2|>, <|k: 2, v: 2|>,
+ <|k: 1, v: 3|>, <|k: 2, v: 3|>,
+ <|k: 1, v: 4|>, <|k: 2, v: 4|>,
+ <|k: 1, v: 5|>, <|k: 2, v: 5|>,
+ ])
+);
+
+SELECT
+ k,
+ Avg(v)
+FROM
+ $input
+GROUP BY
+ k
+HAVING
+ Avg(v) == (
+ SELECT
+ 3
+ )
+;
+
+SELECT
+ k,
+ Avg(v)
+FROM
+ $input
+GROUP BY
+ k
+HAVING
+ Avg(v) == (
+ SELECT
+ Avg(v)
+ FROM
+ $input
+ )
+;
+
+SELECT
+ k,
+ Avg(v)
+FROM
+ $input
+GROUP BY
+ k
+HAVING
+ Avg(v) == (
+ SELECT
+ Avg(v)
+ FROM
+ $input
+ WHERE
+ v == 3
+ )
+;
diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-limit_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-limit_/formatted.sql
new file mode 100644
index 00000000000..353ef99580c
--- /dev/null
+++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-limit_/formatted.sql
@@ -0,0 +1,57 @@
+$input = (
+ SELECT
+ *
+ FROM
+ AS_TABLE([
+ <|k: 1, v: 1|>,
+ <|k: 2, v: 2|>,
+ <|k: 3, v: 3|>,
+ <|k: 4, v: 4|>,
+ <|k: 5, v: 5|>,
+ ])
+);
+
+SELECT
+ *
+FROM
+ $input
+LIMIT CAST(3 AS UInt64);
+
+SELECT
+ *
+FROM
+ $input
+LIMIT CAST(
+ (
+ SELECT
+ 3
+ ) AS UInt64
+);
+
+SELECT
+ *
+FROM
+ $input
+LIMIT CAST(
+ (
+ SELECT
+ Avg(v)
+ FROM
+ $input
+ ) AS UInt64
+);
+
+SELECT
+ *
+FROM
+ $input
+LIMIT CAST(
+ (
+ SELECT
+ Avg(v)
+ FROM
+ $input
+ WHERE
+ v == 3
+ ) AS UInt64
+);
diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-offset_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-offset_/formatted.sql
new file mode 100644
index 00000000000..df19827c782
--- /dev/null
+++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-offset_/formatted.sql
@@ -0,0 +1,65 @@
+$input = (
+ SELECT
+ *
+ FROM
+ AS_TABLE([
+ <|k: 1, v: 1|>,
+ <|k: 2, v: 2|>,
+ <|k: 3, v: 3|>,
+ <|k: 4, v: 4|>,
+ <|k: 5, v: 5|>,
+ ])
+);
+
+SELECT
+ *
+FROM
+ $input
+ORDER BY
+ k
+LIMIT NULL OFFSET CAST(3 AS Uint64);
+
+SELECT
+ *
+FROM
+ $input
+ORDER BY
+ k
+LIMIT NULL OFFSET CAST(
+ (
+ SELECT
+ 3
+ ) AS Uint64
+);
+
+SELECT
+ *
+FROM
+ $input
+ORDER BY
+ k
+LIMIT NULL OFFSET CAST(
+ (
+ SELECT
+ Avg(v)
+ FROM
+ $input
+ ) AS Uint64
+);
+
+SELECT
+ *
+FROM
+ $input
+ORDER BY
+ k
+LIMIT NULL OFFSET CAST(
+ (
+ SELECT
+ Avg(v)
+ FROM
+ $input
+ WHERE
+ v == 3
+ ) AS Uint64
+);
diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-partition_by_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-partition_by_/formatted.sql
new file mode 100644
index 00000000000..cc34fcfe5b2
--- /dev/null
+++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-partition_by_/formatted.sql
@@ -0,0 +1,79 @@
+$input = (
+ SELECT
+ *
+ FROM
+ AS_TABLE([
+ <|k: 1, v: 1|>,
+ <|k: 2, v: 2|>,
+ <|k: 3, v: 3|>,
+ <|k: 4, v: 4|>,
+ <|k: 5, v: 5|>,
+ ])
+);
+
+SELECT
+ Count(*) OVER w AS x
+FROM
+ $input
+WINDOW
+ w AS (
+ PARTITION BY
+ 3
+ ORDER BY
+ k
+ )
+;
+
+SELECT
+ Count(*) OVER w AS x
+FROM
+ $input
+WINDOW
+ w AS (
+ PARTITION BY
+ (
+ SELECT
+ 3
+ )
+ ORDER BY
+ k
+ )
+;
+
+SELECT
+ Count(*) OVER w AS x
+FROM
+ $input
+WINDOW
+ w AS (
+ PARTITION BY
+ (
+ SELECT
+ Avg(v)
+ FROM
+ $input
+ )
+ ORDER BY
+ k
+ )
+;
+
+SELECT
+ Count(*) OVER w AS x
+FROM
+ $input
+WINDOW
+ w AS (
+ PARTITION BY
+ (
+ SELECT
+ Avg(v)
+ FROM
+ $input
+ WHERE
+ v == 3
+ )
+ ORDER BY
+ k
+ )
+;
diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-projection_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-projection_/formatted.sql
new file mode 100644
index 00000000000..6c66310617e
--- /dev/null
+++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-projection_/formatted.sql
@@ -0,0 +1,39 @@
+$input = (
+ SELECT
+ *
+ FROM
+ AS_TABLE([
+ <|k: 1, v: 1|>,
+ <|k: 2, v: 2|>,
+ <|k: 3, v: 3|>,
+ <|k: 4, v: 4|>,
+ <|k: 5, v: 5|>,
+ ])
+);
+
+SELECT
+ (
+ SELECT
+ 3
+ ) AS x
+;
+
+SELECT
+ (
+ SELECT
+ Avg(v)
+ FROM
+ $input
+ ) AS x
+;
+
+SELECT
+ (
+ SELECT
+ Avg(v)
+ FROM
+ $input
+ WHERE
+ v == 3
+ ) AS x
+;
diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-union_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-union_/formatted.sql
new file mode 100644
index 00000000000..9a7b16eb0ec
--- /dev/null
+++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-union_/formatted.sql
@@ -0,0 +1,217 @@
+$t1 = (
+ SELECT
+ *
+ FROM
+ AS_TABLE([
+ <|k: 1, v: 1|>,
+ <|k: 2, v: 2|>,
+ <|k: 3, v: 3|>,
+ <|k: 4, v: 4|>,
+ <|k: 5, v: 5|>,
+ ])
+);
+
+$t2 = (
+ SELECT
+ *
+ FROM
+ AS_TABLE([
+ <|k: 6, v: 6|>,
+ <|k: 7, v: 7|>,
+ <|k: 8, v: 8|>,
+ <|k: 9, v: 9|>,
+ <|k: 10, v: 10|>,
+ ])
+);
+
+$t3 = (
+ SELECT
+ *
+ FROM
+ AS_TABLE([
+ <|k: 11, v: 11|>,
+ <|k: 12, v: 12|>,
+ <|k: 13, v: 13|>,
+ <|k: 14, v: 14|>,
+ <|k: 15, v: 15|>,
+ ])
+);
+
+SELECT
+ 1 IN (
+ SELECT
+ k
+ FROM
+ $t1
+ ),
+ 1 IN (
+ (
+ SELECT
+ k
+ FROM
+ $t1
+ )
+ ),
+ 1 IN (
+ (
+ (
+ SELECT
+ k
+ FROM
+ $t1
+ )
+ )
+ ),
+ 1 IN (
+ SELECT
+ k
+ FROM
+ $t1
+ UNION
+ SELECT
+ k
+ FROM
+ $t2
+ ),
+ 6 IN (
+ SELECT
+ k
+ FROM
+ $t1
+ UNION
+ SELECT
+ k
+ FROM
+ $t2
+ ),
+ 1 IN (
+ SELECT
+ k
+ FROM
+ $t1
+ UNION
+ (
+ SELECT
+ k
+ FROM
+ $t2
+ )
+ ),
+ 6 IN (
+ SELECT
+ k
+ FROM
+ $t1
+ UNION
+ (
+ SELECT
+ k
+ FROM
+ $t2
+ )
+ ),
+ 1 IN (
+ (
+ SELECT
+ k
+ FROM
+ $t1
+ )
+ UNION
+ SELECT
+ k
+ FROM
+ $t2
+ ),
+ 6 IN (
+ (
+ SELECT
+ k
+ FROM
+ $t1
+ )
+ UNION
+ SELECT
+ k
+ FROM
+ $t2
+ ),
+ 1 IN (
+ (
+ SELECT
+ k
+ FROM
+ $t1
+ )
+ UNION
+ (
+ SELECT
+ k
+ FROM
+ $t2
+ )
+ ),
+ 6 IN (
+ (
+ SELECT
+ k
+ FROM
+ $t1
+ )
+ UNION
+ (
+ SELECT
+ k
+ FROM
+ $t2
+ )
+ ),
+ 1 IN (
+ SELECT
+ k
+ FROM
+ $t1
+ UNION
+ SELECT
+ k
+ FROM
+ $t2
+ UNION
+ SELECT
+ k
+ FROM
+ $t3
+ ),
+ 6 IN (
+ SELECT
+ k
+ FROM
+ $t1
+ UNION
+ SELECT
+ k
+ FROM
+ $t2
+ UNION
+ SELECT
+ k
+ FROM
+ $t3
+ ),
+ 11 IN (
+ SELECT
+ k
+ FROM
+ $t1
+ UNION
+ SELECT
+ k
+ FROM
+ $t2
+ UNION
+ SELECT
+ k
+ FROM
+ $t3
+ ),
+;
diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-where_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-where_/formatted.sql
new file mode 100644
index 00000000000..1fae3b6f54f
--- /dev/null
+++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-where_/formatted.sql
@@ -0,0 +1,51 @@
+$input = (
+ SELECT
+ *
+ FROM
+ AS_TABLE([
+ <|k: 1, v: 1|>,
+ <|k: 2, v: 2|>,
+ <|k: 3, v: 3|>,
+ <|k: 4, v: 4|>,
+ <|k: 5, v: 5|>,
+ ])
+);
+
+SELECT
+ *
+FROM
+ $input
+WHERE
+ v < (
+ SELECT
+ 3
+ )
+;
+
+SELECT
+ *
+FROM
+ $input
+WHERE
+ v < (
+ SELECT
+ Avg(v)
+ FROM
+ $input
+ )
+;
+
+SELECT
+ *
+FROM
+ $input
+WHERE
+ v < (
+ SELECT
+ Avg(v)
+ FROM
+ $input
+ WHERE
+ v == 3
+ )
+;
diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-where_named_node_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-where_named_node_/formatted.sql
new file mode 100644
index 00000000000..56aaaebf0af
--- /dev/null
+++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_subselect-where_named_node_/formatted.sql
@@ -0,0 +1,43 @@
+$input = (
+ SELECT
+ *
+ FROM
+ AS_TABLE([
+ <|k: 1, v: 1|>,
+ <|k: 2, v: 2|>,
+ <|k: 3, v: 3|>,
+ <|k: 4, v: 4|>,
+ <|k: 5, v: 5|>,
+ ])
+);
+
+$x = (
+ SELECT
+ Avg(v)
+ FROM
+ $input
+);
+
+SELECT
+ *
+FROM
+ $input
+WHERE
+ v < $x
+;
+
+SELECT
+ *
+FROM
+ $input
+WHERE
+ v < ($x)
+;
+
+SELECT
+ *
+FROM
+ $input
+WHERE
+ v < (($x))
+;