blaginin commented on code in PR #15621:
URL: https://github.com/apache/datafusion/pull/15621#discussion_r2031911786
##########
datafusion/sql/tests/cases/plan_to_sql.rs:
##########
@@ -509,219 +555,378 @@ fn roundtrip_statement_with_dialect() -> Result<()> {
) abc
ORDER BY
j2_string",
- expected: r#"SELECT abc.j1_string FROM (SELECT j1.j1_string,
j2.j2_string FROM j1 INNER JOIN j2 ON (j1.j1_id = j2.j2_id) ORDER BY j1.j1_id
DESC NULLS FIRST, j2.j2_id DESC NULLS FIRST LIMIT 10) AS abc ORDER BY
abc.j2_string ASC NULLS LAST"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect: Box::new(UnparserDefaultDialect {}),
- },
- TestStatementWithDialect {
- sql: "SELECT id FROM (SELECT j1_id from j1) AS c (id)",
- expected: r#"SELECT c.id FROM (SELECT j1.j1_id FROM j1) AS c
(id)"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect: Box::new(UnparserDefaultDialect {}),
- },
- TestStatementWithDialect {
- sql: "SELECT id FROM (SELECT j1_id as id from j1) AS c",
- expected: r#"SELECT c.id FROM (SELECT j1.j1_id AS id FROM j1) AS
c"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect: Box::new(UnparserDefaultDialect {}),
- },
- // Test query that has calculation in derived table with columns
- TestStatementWithDialect {
- sql: "SELECT id FROM (SELECT j1_id + 1 * 3 from j1) AS c (id)",
- expected: r#"SELECT c.id FROM (SELECT (j1.j1_id + (1 * 3)) FROM
j1) AS c (id)"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect: Box::new(UnparserDefaultDialect {}),
- },
- // Test query that has limit/distinct/order in derived table with
columns
- TestStatementWithDialect {
- sql: "SELECT id FROM (SELECT distinct (j1_id + 1 * 3) FROM j1
LIMIT 1) AS c (id)",
- expected: r#"SELECT c.id FROM (SELECT DISTINCT (j1.j1_id + (1 *
3)) FROM j1 LIMIT 1) AS c (id)"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect: Box::new(UnparserDefaultDialect {}),
- },
- TestStatementWithDialect {
- sql: "SELECT id FROM (SELECT j1_id + 1 FROM j1 ORDER BY j1_id DESC
LIMIT 1) AS c (id)",
- expected: r#"SELECT c.id FROM (SELECT (j1.j1_id + 1) FROM j1 ORDER
BY j1.j1_id DESC NULLS FIRST LIMIT 1) AS c (id)"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect: Box::new(UnparserDefaultDialect {}),
- },
- TestStatementWithDialect {
- sql: "SELECT id FROM (SELECT CAST((CAST(j1_id as BIGINT) + 1) as
int) * 10 FROM j1 LIMIT 1) AS c (id)",
- expected: r#"SELECT c.id FROM (SELECT (CAST((CAST(j1.j1_id AS
BIGINT) + 1) AS INTEGER) * 10) FROM j1 LIMIT 1) AS c (id)"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect: Box::new(UnparserDefaultDialect {}),
- },
- TestStatementWithDialect {
- sql: "SELECT id FROM (SELECT CAST(j1_id as BIGINT) + 1 FROM j1
ORDER BY j1_id LIMIT 1) AS c (id)",
- expected: r#"SELECT c.id FROM (SELECT (CAST(j1.j1_id AS BIGINT) +
1) FROM j1 ORDER BY j1.j1_id ASC NULLS LAST LIMIT 1) AS c (id)"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect: Box::new(UnparserDefaultDialect {}),
- },
- TestStatementWithDialect {
- sql: "SELECT temp_j.id2 FROM (SELECT j1_id, j1_string FROM j1) AS
temp_j(id2, string2)",
- expected: r#"SELECT temp_j.id2 FROM (SELECT j1.j1_id, j1.j1_string
FROM j1) AS temp_j (id2, string2)"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect: Box::new(UnparserDefaultDialect {}),
- },
- TestStatementWithDialect {
- sql: "SELECT temp_j.id2 FROM (SELECT j1_id, j1_string FROM j1) AS
temp_j(id2, string2)",
- expected: r#"SELECT `temp_j`.`id2` FROM (SELECT `j1`.`j1_id` AS
`id2`, `j1`.`j1_string` AS `string2` FROM `j1`) AS `temp_j`"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect: Box::new(SqliteDialect {}),
- },
- TestStatementWithDialect {
- sql: "SELECT * FROM (SELECT j1_id + 1 FROM j1) AS temp_j(id2)",
- expected: r#"SELECT `temp_j`.`id2` FROM (SELECT (`j1`.`j1_id` + 1)
AS `id2` FROM `j1`) AS `temp_j`"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect: Box::new(SqliteDialect {}),
- },
- TestStatementWithDialect {
- sql: "SELECT * FROM (SELECT j1_id FROM j1 LIMIT 1) AS temp_j(id2)",
- expected: r#"SELECT `temp_j`.`id2` FROM (SELECT `j1`.`j1_id` AS
`id2` FROM `j1` LIMIT 1) AS `temp_j`"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect: Box::new(SqliteDialect {}),
- },
- TestStatementWithDialect {
- sql: "SELECT * FROM UNNEST([1,2,3])",
- expected: r#"SELECT
"UNNEST(make_array(Int64(1),Int64(2),Int64(3)))" FROM (SELECT UNNEST([1, 2, 3])
AS "UNNEST(make_array(Int64(1),Int64(2),Int64(3)))")"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect: Box::new(UnparserDefaultDialect {}),
- },
- TestStatementWithDialect {
- sql: "SELECT * FROM UNNEST([1,2,3]) AS t1 (c1)",
- expected: r#"SELECT t1.c1 FROM (SELECT UNNEST([1, 2, 3]) AS
"UNNEST(make_array(Int64(1),Int64(2),Int64(3)))") AS t1 (c1)"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect: Box::new(UnparserDefaultDialect {}),
- },
- TestStatementWithDialect {
- sql: "SELECT * FROM UNNEST([1,2,3]), j1",
- expected: r#"SELECT
"UNNEST(make_array(Int64(1),Int64(2),Int64(3)))", j1.j1_id, j1.j1_string FROM
(SELECT UNNEST([1, 2, 3]) AS "UNNEST(make_array(Int64(1),Int64(2),Int64(3)))")
CROSS JOIN j1"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect: Box::new(UnparserDefaultDialect {}),
- },
- TestStatementWithDialect {
- sql: "SELECT * FROM UNNEST([1,2,3]) u(c1) JOIN j1 ON u.c1 =
j1.j1_id",
- expected: r#"SELECT u.c1, j1.j1_id, j1.j1_string FROM (SELECT
UNNEST([1, 2, 3]) AS "UNNEST(make_array(Int64(1),Int64(2),Int64(3)))") AS u
(c1) INNER JOIN j1 ON (u.c1 = j1.j1_id)"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect: Box::new(UnparserDefaultDialect {}),
- },
- TestStatementWithDialect {
- sql: "SELECT * FROM UNNEST([1,2,3]) u(c1) UNION ALL SELECT * FROM
UNNEST([4,5,6]) u(c1)",
- expected: r#"SELECT u.c1 FROM (SELECT UNNEST([1, 2, 3]) AS
"UNNEST(make_array(Int64(1),Int64(2),Int64(3)))") AS u (c1) UNION ALL SELECT
u.c1 FROM (SELECT UNNEST([4, 5, 6]) AS
"UNNEST(make_array(Int64(4),Int64(5),Int64(6)))") AS u (c1)"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect: Box::new(UnparserDefaultDialect {}),
- },
- TestStatementWithDialect {
- sql: "SELECT * FROM UNNEST([1,2,3])",
- expected: r#"SELECT UNNEST(make_array(Int64(1),Int64(2),Int64(3)))
FROM UNNEST([1, 2, 3])"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect:
Box::new(CustomDialectBuilder::default().with_unnest_as_table_factor(true).build()),
- },
- TestStatementWithDialect {
- sql: "SELECT * FROM UNNEST([1,2,3]) AS t1 (c1)",
- expected: r#"SELECT t1.c1 FROM UNNEST([1, 2, 3]) AS t1 (c1)"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect:
Box::new(CustomDialectBuilder::default().with_unnest_as_table_factor(true).build()),
- },
- TestStatementWithDialect {
- sql: "SELECT * FROM UNNEST([1,2,3]) AS t1 (c1)",
- expected: r#"SELECT t1.c1 FROM UNNEST([1, 2, 3]) AS t1 (c1)"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect:
Box::new(CustomDialectBuilder::default().with_unnest_as_table_factor(true).build()),
- },
- TestStatementWithDialect {
- sql: "SELECT * FROM UNNEST([1,2,3]), j1",
- expected: r#"SELECT
UNNEST(make_array(Int64(1),Int64(2),Int64(3))), j1.j1_id, j1.j1_string FROM
UNNEST([1, 2, 3]) CROSS JOIN j1"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect:
Box::new(CustomDialectBuilder::default().with_unnest_as_table_factor(true).build()),
- },
- TestStatementWithDialect {
- sql: "SELECT * FROM UNNEST([1,2,3]) u(c1) JOIN j1 ON u.c1 =
j1.j1_id",
- expected: r#"SELECT u.c1, j1.j1_id, j1.j1_string FROM UNNEST([1,
2, 3]) AS u (c1) INNER JOIN j1 ON (u.c1 = j1.j1_id)"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect:
Box::new(CustomDialectBuilder::default().with_unnest_as_table_factor(true).build()),
- },
- TestStatementWithDialect {
- sql: "SELECT * FROM UNNEST([1,2,3]) u(c1) UNION ALL SELECT * FROM
UNNEST([4,5,6]) u(c1)",
- expected: r#"SELECT u.c1 FROM UNNEST([1, 2, 3]) AS u (c1) UNION
ALL SELECT u.c1 FROM UNNEST([4, 5, 6]) AS u (c1)"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect:
Box::new(CustomDialectBuilder::default().with_unnest_as_table_factor(true).build()),
- },
- TestStatementWithDialect {
- sql: "SELECT UNNEST([1,2,3])",
- expected: r#"SELECT * FROM UNNEST([1, 2, 3])"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect:
Box::new(CustomDialectBuilder::default().with_unnest_as_table_factor(true).build()),
- },
- TestStatementWithDialect {
- sql: "SELECT UNNEST([1,2,3]) as c1",
- expected: r#"SELECT UNNEST([1, 2, 3]) AS c1"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect:
Box::new(CustomDialectBuilder::default().with_unnest_as_table_factor(true).build()),
- },
- TestStatementWithDialect {
- sql: "SELECT UNNEST([1,2,3]), 1",
- expected: r#"SELECT UNNEST([1, 2, 3]) AS
UNNEST(make_array(Int64(1),Int64(2),Int64(3))), Int64(1)"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect:
Box::new(CustomDialectBuilder::default().with_unnest_as_table_factor(true).build()),
- },
- TestStatementWithDialect {
- sql: "SELECT * FROM unnest_table u, UNNEST(u.array_col)",
- expected: r#"SELECT u.array_col, u.struct_col,
UNNEST(outer_ref(u.array_col)) FROM unnest_table AS u CROSS JOIN
UNNEST(u.array_col)"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect:
Box::new(CustomDialectBuilder::default().with_unnest_as_table_factor(true).build()),
- },
- TestStatementWithDialect {
- sql: "SELECT * FROM unnest_table u, UNNEST(u.array_col) AS t1
(c1)",
- expected: r#"SELECT u.array_col, u.struct_col, t1.c1 FROM
unnest_table AS u CROSS JOIN UNNEST(u.array_col) AS t1 (c1)"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect:
Box::new(CustomDialectBuilder::default().with_unnest_as_table_factor(true).build()),
- },
- TestStatementWithDialect {
- sql: "SELECT unnest([1, 2, 3, 4]) from unnest([1, 2, 3]);",
- expected: r#"SELECT UNNEST([1, 2, 3, 4]) AS
UNNEST(make_array(Int64(1),Int64(2),Int64(3),Int64(4))) FROM UNNEST([1, 2,
3])"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect:
Box::new(CustomDialectBuilder::default().with_unnest_as_table_factor(true).build()),
- },
- TestStatementWithDialect {
- sql: "SELECT * FROM unnest_table u, UNNEST(u.array_col)",
- expected: r#"SELECT u.array_col, u.struct_col,
"UNNEST(outer_ref(u.array_col))" FROM unnest_table AS u CROSS JOIN LATERAL
(SELECT UNNEST(u.array_col) AS "UNNEST(outer_ref(u.array_col))")"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect: Box::new(UnparserDefaultDialect {}),
- },
- TestStatementWithDialect {
- sql: "SELECT * FROM unnest_table u, UNNEST(u.array_col) AS t1
(c1)",
- expected: r#"SELECT u.array_col, u.struct_col, t1.c1 FROM
unnest_table AS u CROSS JOIN LATERAL (SELECT UNNEST(u.array_col) AS
"UNNEST(outer_ref(u.array_col))") AS t1 (c1)"#,
- parser_dialect: Box::new(GenericDialect {}),
- unparser_dialect: Box::new(UnparserDefaultDialect {}),
- },
- ];
+ parser_dialect: GenericDialect {},
+ unparser_dialect: UnparserDefaultDialect {},
+ expected: @r#"SELECT abc.j1_string FROM (SELECT j1.j1_string,
j2.j2_string FROM j1 INNER JOIN j2 ON (j1.j1_id = j2.j2_id) ORDER BY j1.j1_id
DESC NULLS FIRST, j2.j2_id DESC NULLS FIRST LIMIT 10) AS abc ORDER BY
abc.j2_string ASC NULLS LAST"#,
+ );
+ Ok(())
+}
- for query in tests {
- let statement = Parser::new(&*query.parser_dialect)
- .try_with_sql(query.sql)?
- .parse_statement()?;
+#[test]
+fn roundtrip_statement_with_dialect_16() -> Result<(), DataFusionError> {
+ roundtrip_statement_with_dialect_helper!(
+ sql: "SELECT id FROM (SELECT j1_id from j1) AS c (id)",
+ parser_dialect: GenericDialect {},
+ unparser_dialect: UnparserDefaultDialect {},
+ expected: @r#"SELECT c.id FROM (SELECT j1.j1_id FROM j1) AS c (id)"#,
+ );
+ Ok(())
+}
- let state = MockSessionState::default()
- .with_aggregate_function(max_udaf())
- .with_aggregate_function(min_udaf())
- .with_expr_planner(Arc::new(CoreFunctionPlanner::default()))
- .with_expr_planner(Arc::new(NestedFunctionPlanner));
+#[test]
+fn roundtrip_statement_with_dialect_17() -> Result<(), DataFusionError> {
+ roundtrip_statement_with_dialect_helper!(
+ sql: "SELECT id FROM (SELECT j1_id as id from j1) AS c",
+ parser_dialect: GenericDialect {},
+ unparser_dialect: UnparserDefaultDialect {},
+ expected: @r#"SELECT c.id FROM (SELECT j1.j1_id AS id FROM j1) AS c"#,
+ );
+ Ok(())
+}
- let context = MockContextProvider { state };
- let sql_to_rel = SqlToRel::new(&context);
- let plan = sql_to_rel
- .sql_statement_to_plan(statement)
- .unwrap_or_else(|e| panic!("Failed to parse sql: {}\n{e}",
query.sql));
+// Test query that has calculation in derived table with columns
+#[test]
+fn roundtrip_statement_with_dialect_18() -> Result<(), DataFusionError> {
+ roundtrip_statement_with_dialect_helper!(
+ sql: "SELECT id FROM (SELECT j1_id + 1 * 3 from j1) AS c (id)",
+ parser_dialect: GenericDialect {},
+ unparser_dialect: UnparserDefaultDialect {},
+ expected: @r#"SELECT c.id FROM (SELECT (j1.j1_id + (1 * 3)) FROM j1)
AS c (id)"#,
+ );
+ Ok(())
+}
- let unparser = Unparser::new(&*query.unparser_dialect);
- let roundtrip_statement = unparser.plan_to_sql(&plan)?;
+// Test query that has limit/distinct/order in derived table with columns
+#[test]
+fn roundtrip_statement_with_dialect_19() -> Result<(), DataFusionError> {
+ roundtrip_statement_with_dialect_helper!(
+ sql: "SELECT id FROM (SELECT distinct (j1_id + 1 * 3) FROM j1 LIMIT 1)
AS c (id)",
+ parser_dialect: GenericDialect {},
+ unparser_dialect: UnparserDefaultDialect {},
+ expected: @r#"SELECT c.id FROM (SELECT DISTINCT (j1.j1_id + (1 * 3))
FROM j1 LIMIT 1) AS c (id)"#,
+ );
+ Ok(())
+}
- let actual = &roundtrip_statement.to_string();
+#[test]
+fn roundtrip_statement_with_dialect_20() -> Result<(), DataFusionError> {
+ roundtrip_statement_with_dialect_helper!(
+ sql: "SELECT id FROM (SELECT j1_id + 1 FROM j1 ORDER BY j1_id DESC
LIMIT 1) AS c (id)",
+ parser_dialect: GenericDialect {},
+ unparser_dialect: UnparserDefaultDialect {},
+ expected: @r#"SELECT c.id FROM (SELECT (j1.j1_id + 1) FROM j1 ORDER BY
j1.j1_id DESC NULLS FIRST LIMIT 1) AS c (id)"#,
+ );
+ Ok(())
+}
- assert_eq!(query.expected, actual);
- }
+#[test]
+fn roundtrip_statement_with_dialect_21() -> Result<(), DataFusionError> {
+ roundtrip_statement_with_dialect_helper!(
+ sql: "SELECT id FROM (SELECT CAST((CAST(j1_id as BIGINT) + 1) as int)
* 10 FROM j1 LIMIT 1) AS c (id)",
+ parser_dialect: GenericDialect {},
+ unparser_dialect: UnparserDefaultDialect {},
+ expected: @r#"SELECT c.id FROM (SELECT (CAST((CAST(j1.j1_id AS BIGINT)
+ 1) AS INTEGER) * 10) FROM j1 LIMIT 1) AS c (id)"#,
+ );
+ Ok(())
+}
+#[test]
+fn roundtrip_statement_with_dialect_22() -> Result<(), DataFusionError> {
+ roundtrip_statement_with_dialect_helper!(
+ sql: "SELECT id FROM (SELECT CAST(j1_id as BIGINT) + 1 FROM j1 ORDER
BY j1_id LIMIT 1) AS c (id)",
+ parser_dialect: GenericDialect {},
+ unparser_dialect: UnparserDefaultDialect {},
+ expected: @r#"SELECT c.id FROM (SELECT (CAST(j1.j1_id AS BIGINT) + 1)
FROM j1 ORDER BY j1.j1_id ASC NULLS LAST LIMIT 1) AS c (id)"#,
+ );
+ Ok(())
+}
+
+#[test]
+fn roundtrip_statement_with_dialect_23() -> Result<(), DataFusionError> {
+ roundtrip_statement_with_dialect_helper!(
+ sql: "SELECT temp_j.id2 FROM (SELECT j1_id, j1_string FROM j1) AS
temp_j(id2, string2)",
+ parser_dialect: GenericDialect {},
+ unparser_dialect: UnparserDefaultDialect {},
+ expected: @r#"SELECT temp_j.id2 FROM (SELECT j1.j1_id, j1.j1_string
FROM j1) AS temp_j (id2, string2)"#,
+ );
+ Ok(())
+}
+
+#[test]
+fn roundtrip_statement_with_dialect_24() -> Result<(), DataFusionError> {
+ roundtrip_statement_with_dialect_helper!(
+ sql: "SELECT temp_j.id2 FROM (SELECT j1_id, j1_string FROM j1) AS
temp_j(id2, string2)",
+ parser_dialect: GenericDialect {},
+ unparser_dialect: SqliteDialect {},
+ expected: @r#"SELECT `temp_j`.`id2` FROM (SELECT `j1`.`j1_id` AS
`id2`, `j1`.`j1_string` AS `string2` FROM `j1`) AS `temp_j`"#,
+ );
+ Ok(())
+}
+
+#[test]
+fn roundtrip_statement_with_dialect_25() -> Result<(), DataFusionError> {
+ roundtrip_statement_with_dialect_helper!(
+ sql: "SELECT * FROM (SELECT j1_id + 1 FROM j1) AS temp_j(id2)",
+ parser_dialect: GenericDialect {},
+ unparser_dialect: SqliteDialect {},
+ expected: @r#"SELECT `temp_j`.`id2` FROM (SELECT (`j1`.`j1_id` + 1) AS
`id2` FROM `j1`) AS `temp_j`"#,
+ );
+ Ok(())
+}
+
+#[test]
+fn roundtrip_statement_with_dialect_26() -> Result<(), DataFusionError> {
+ roundtrip_statement_with_dialect_helper!(
+ sql: "SELECT * FROM (SELECT j1_id FROM j1 LIMIT 1) AS temp_j(id2)",
+ parser_dialect: GenericDialect {},
+ unparser_dialect: SqliteDialect {},
+ expected: @r#"SELECT `temp_j`.`id2` FROM (SELECT `j1`.`j1_id` AS `id2`
FROM `j1` LIMIT 1) AS `temp_j`"#,
+ );
+ Ok(())
+}
+
+#[test]
+fn roundtrip_statement_with_dialect_27() -> Result<(), DataFusionError> {
+ roundtrip_statement_with_dialect_helper!(
+ sql: "SELECT * FROM UNNEST([1,2,3])",
+ parser_dialect: GenericDialect {},
+ unparser_dialect: UnparserDefaultDialect {},
+ expected: @r#"SELECT "UNNEST(make_array(Int64(1),Int64(2),Int64(3)))"
FROM (SELECT UNNEST([1, 2, 3]) AS
"UNNEST(make_array(Int64(1),Int64(2),Int64(3)))")"#,
+ );
+ Ok(())
+}
+
+#[test]
+fn roundtrip_statement_with_dialect_28() -> Result<(), DataFusionError> {
+ roundtrip_statement_with_dialect_helper!(
+ sql: "SELECT * FROM UNNEST([1,2,3]) AS t1 (c1)",
+ parser_dialect: GenericDialect {},
+ unparser_dialect: UnparserDefaultDialect {},
+ expected: @r#"SELECT t1.c1 FROM (SELECT UNNEST([1, 2, 3]) AS
"UNNEST(make_array(Int64(1),Int64(2),Int64(3)))") AS t1 (c1)"#,
+ );
+ Ok(())
+}
+
+#[test]
+fn roundtrip_statement_with_dialect_29() -> Result<(), DataFusionError> {
+ roundtrip_statement_with_dialect_helper!(
+ sql: "SELECT * FROM UNNEST([1,2,3]), j1",
+ parser_dialect: GenericDialect {},
+ unparser_dialect: UnparserDefaultDialect {},
+ expected: @r#"SELECT "UNNEST(make_array(Int64(1),Int64(2),Int64(3)))",
j1.j1_id, j1.j1_string FROM (SELECT UNNEST([1, 2, 3]) AS
"UNNEST(make_array(Int64(1),Int64(2),Int64(3)))") CROSS JOIN j1"#,
+ );
+ Ok(())
+}
+
+#[test]
+fn roundtrip_statement_with_dialect_30() -> Result<(), DataFusionError> {
+ roundtrip_statement_with_dialect_helper!(
+ sql: "SELECT * FROM UNNEST([1,2,3]) u(c1) JOIN j1 ON u.c1 = j1.j1_id",
+ parser_dialect: GenericDialect {},
+ unparser_dialect: UnparserDefaultDialect {},
+ expected: @r#"SELECT u.c1, j1.j1_id, j1.j1_string FROM (SELECT
UNNEST([1, 2, 3]) AS "UNNEST(make_array(Int64(1),Int64(2),Int64(3)))") AS u
(c1) INNER JOIN j1 ON (u.c1 = j1.j1_id)"#,
+ );
+ Ok(())
+}
+
+#[test]
+fn roundtrip_statement_with_dialect_31() -> Result<(), DataFusionError> {
+ roundtrip_statement_with_dialect_helper!(
+ sql: "SELECT * FROM UNNEST([1,2,3]) u(c1) UNION ALL SELECT * FROM
UNNEST([4,5,6]) u(c1)",
+ parser_dialect: GenericDialect {},
+ unparser_dialect: UnparserDefaultDialect {},
+ expected: @r#"SELECT u.c1 FROM (SELECT UNNEST([1, 2, 3]) AS
"UNNEST(make_array(Int64(1),Int64(2),Int64(3)))") AS u (c1) UNION ALL SELECT
u.c1 FROM (SELECT UNNEST([4, 5, 6]) AS
"UNNEST(make_array(Int64(4),Int64(5),Int64(6)))") AS u (c1)"#,
+ );
+ Ok(())
+}
+
+#[test]
+fn roundtrip_statement_with_dialect_32() -> Result<(), DataFusionError> {
+ let unparser = CustomDialectBuilder::default()
+ .with_unnest_as_table_factor(true)
+ .build();
+ roundtrip_statement_with_dialect_helper!(
+ sql: "SELECT * FROM UNNEST([1,2,3])",
+ parser_dialect: GenericDialect {},
+ unparser_dialect: unparser,
+ expected: @r#"SELECT UNNEST(make_array(Int64(1),Int64(2),Int64(3)))
FROM UNNEST([1, 2, 3])"#,
+ );
+ Ok(())
+}
+
+#[test]
+fn roundtrip_statement_with_dialect_33() -> Result<(), DataFusionError> {
+ let unparser = CustomDialectBuilder::default()
+ .with_unnest_as_table_factor(true)
+ .build();
+ roundtrip_statement_with_dialect_helper!(
+ sql: "SELECT * FROM UNNEST([1,2,3]) AS t1 (c1)",
+ parser_dialect: GenericDialect {},
+ unparser_dialect: unparser,
+ expected: @r#"SELECT t1.c1 FROM UNNEST([1, 2, 3]) AS t1 (c1)"#,
+ );
+ Ok(())
+}
+
+#[test]
+fn roundtrip_statement_with_dialect_34() -> Result<(), DataFusionError> {
+ let unparser = CustomDialectBuilder::default()
+ .with_unnest_as_table_factor(true)
+ .build();
+ roundtrip_statement_with_dialect_helper!(
+ sql: "SELECT * FROM UNNEST([1,2,3]) AS t1 (c1)",
+ parser_dialect: GenericDialect {},
+ unparser_dialect: unparser,
+ expected: @r#"SELECT t1.c1 FROM UNNEST([1, 2, 3]) AS t1 (c1)"#,
+ );
+ Ok(())
+}
Review Comment:
should we delete one of them ?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]