Skip to content

Commit dc0d877

Browse files
committed
fix redundant visits of table factors in pivot/unpivot
1 parent 32871f8 commit dc0d877

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

src/ast/query.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -740,7 +740,6 @@ pub enum TableFactor {
740740
/// For example `FROM monthly_sales PIVOT(sum(amount) FOR MONTH IN ('JAN', 'FEB'))`
741741
/// See <https://docs.snowflake.com/en/sql-reference/constructs/pivot>
742742
Pivot {
743-
#[cfg_attr(feature = "visitor", visit(with = "visit_table_factor"))]
744743
table: Box<TableFactor>,
745744
aggregate_function: Expr, // Function expression
746745
value_column: Vec<Ident>,
@@ -756,7 +755,6 @@ pub enum TableFactor {
756755
///
757756
/// See <https://docs.snowflake.com/en/sql-reference/constructs/unpivot>.
758757
Unpivot {
759-
#[cfg_attr(feature = "visitor", visit(with = "visit_table_factor"))]
760758
table: Box<TableFactor>,
761759
value: Ident,
762760
name: Ident,

src/ast/visitor.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,31 @@ mod tests {
832832
"POST: STATEMENT: SELECT * FROM t1 WHERE EXISTS (SELECT column FROM t2) UNION SELECT * FROM t3",
833833
],
834834
),
835+
(
836+
concat!(
837+
"SELECT * FROM monthly_sales ",
838+
"PIVOT(SUM(a.amount) FOR a.MONTH IN ('JAN', 'FEB', 'MAR', 'APR')) AS p (c, d) ",
839+
"ORDER BY EMPID"
840+
),
841+
vec![
842+
"PRE: STATEMENT: SELECT * FROM monthly_sales PIVOT(SUM(a.amount) FOR a.MONTH IN ('JAN', 'FEB', 'MAR', 'APR')) AS p (c, d) ORDER BY EMPID",
843+
"PRE: QUERY: SELECT * FROM monthly_sales PIVOT(SUM(a.amount) FOR a.MONTH IN ('JAN', 'FEB', 'MAR', 'APR')) AS p (c, d) ORDER BY EMPID",
844+
"PRE: TABLE FACTOR: monthly_sales PIVOT(SUM(a.amount) FOR a.MONTH IN ('JAN', 'FEB', 'MAR', 'APR')) AS p (c, d)",
845+
"PRE: TABLE FACTOR: monthly_sales",
846+
"PRE: RELATION: monthly_sales",
847+
"POST: RELATION: monthly_sales",
848+
"POST: TABLE FACTOR: monthly_sales",
849+
"PRE: EXPR: SUM(a.amount)",
850+
"PRE: EXPR: a.amount",
851+
"POST: EXPR: a.amount",
852+
"POST: EXPR: SUM(a.amount)",
853+
"POST: TABLE FACTOR: monthly_sales PIVOT(SUM(a.amount) FOR a.MONTH IN ('JAN', 'FEB', 'MAR', 'APR')) AS p (c, d)",
854+
"PRE: EXPR: EMPID",
855+
"POST: EXPR: EMPID",
856+
"POST: QUERY: SELECT * FROM monthly_sales PIVOT(SUM(a.amount) FOR a.MONTH IN ('JAN', 'FEB', 'MAR', 'APR')) AS p (c, d) ORDER BY EMPID",
857+
"POST: STATEMENT: SELECT * FROM monthly_sales PIVOT(SUM(a.amount) FOR a.MONTH IN ('JAN', 'FEB', 'MAR', 'APR')) AS p (c, d) ORDER BY EMPID",
858+
]
859+
)
835860
];
836861
for (sql, expected) in tests {
837862
let actual = do_visit(sql);

0 commit comments

Comments
 (0)