diff --git a/src/ast/query.rs b/src/ast/query.rs index a1f301af7..f1ed75c02 100644 --- a/src/ast/query.rs +++ b/src/ast/query.rs @@ -740,7 +740,6 @@ pub enum TableFactor { /// For example `FROM monthly_sales PIVOT(sum(amount) FOR MONTH IN ('JAN', 'FEB'))` /// See Pivot { - #[cfg_attr(feature = "visitor", visit(with = "visit_table_factor"))] table: Box, aggregate_function: Expr, // Function expression value_column: Vec, @@ -756,7 +755,6 @@ pub enum TableFactor { /// /// See . Unpivot { - #[cfg_attr(feature = "visitor", visit(with = "visit_table_factor"))] table: Box, value: Ident, name: Ident, diff --git a/src/ast/visitor.rs b/src/ast/visitor.rs index d78c61212..c4f9c494d 100644 --- a/src/ast/visitor.rs +++ b/src/ast/visitor.rs @@ -832,6 +832,31 @@ mod tests { "POST: STATEMENT: SELECT * FROM t1 WHERE EXISTS (SELECT column FROM t2) UNION SELECT * FROM t3", ], ), + ( + concat!( + "SELECT * FROM monthly_sales ", + "PIVOT(SUM(a.amount) FOR a.MONTH IN ('JAN', 'FEB', 'MAR', 'APR')) AS p (c, d) ", + "ORDER BY EMPID" + ), + vec![ + "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", + "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", + "PRE: TABLE FACTOR: monthly_sales PIVOT(SUM(a.amount) FOR a.MONTH IN ('JAN', 'FEB', 'MAR', 'APR')) AS p (c, d)", + "PRE: TABLE FACTOR: monthly_sales", + "PRE: RELATION: monthly_sales", + "POST: RELATION: monthly_sales", + "POST: TABLE FACTOR: monthly_sales", + "PRE: EXPR: SUM(a.amount)", + "PRE: EXPR: a.amount", + "POST: EXPR: a.amount", + "POST: EXPR: SUM(a.amount)", + "POST: TABLE FACTOR: monthly_sales PIVOT(SUM(a.amount) FOR a.MONTH IN ('JAN', 'FEB', 'MAR', 'APR')) AS p (c, d)", + "PRE: EXPR: EMPID", + "POST: EXPR: EMPID", + "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", + "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", + ] + ) ]; for (sql, expected) in tests { let actual = do_visit(sql);