@@ -646,6 +646,18 @@ mod tests {
646
646
impl Visitor for TestVisitor {
647
647
type Break = ( ) ;
648
648
649
+ /// Invoked for any queries that appear in the AST before visiting children
650
+ fn pre_visit_query ( & mut self , query : & Query ) -> ControlFlow < Self :: Break > {
651
+ self . visited . push ( format ! ( "PRE: QUERY: {query}" ) ) ;
652
+ ControlFlow :: Continue ( ( ) )
653
+ }
654
+
655
+ /// Invoked for any queries that appear in the AST after visiting children
656
+ fn post_visit_query ( & mut self , query : & Query ) -> ControlFlow < Self :: Break > {
657
+ self . visited . push ( format ! ( "POST: QUERY: {query}" ) ) ;
658
+ ControlFlow :: Continue ( ( ) )
659
+ }
660
+
649
661
fn pre_visit_relation ( & mut self , relation : & ObjectName ) -> ControlFlow < Self :: Break > {
650
662
self . visited . push ( format ! ( "PRE: RELATION: {relation}" ) ) ;
651
663
ControlFlow :: Continue ( ( ) )
@@ -715,17 +727,20 @@ mod tests {
715
727
"SELECT * from table_name as my_table" ,
716
728
vec![
717
729
"PRE: STATEMENT: SELECT * FROM table_name AS my_table" ,
730
+ "PRE: QUERY: SELECT * FROM table_name AS my_table" ,
718
731
"PRE: TABLE FACTOR: table_name AS my_table" ,
719
732
"PRE: RELATION: table_name" ,
720
733
"POST: RELATION: table_name" ,
721
734
"POST: TABLE FACTOR: table_name AS my_table" ,
735
+ "POST: QUERY: SELECT * FROM table_name AS my_table" ,
722
736
"POST: STATEMENT: SELECT * FROM table_name AS my_table" ,
723
737
] ,
724
738
) ,
725
739
(
726
740
"SELECT * from t1 join t2 on t1.id = t2.t1_id" ,
727
741
vec![
728
742
"PRE: STATEMENT: SELECT * FROM t1 JOIN t2 ON t1.id = t2.t1_id" ,
743
+ "PRE: QUERY: SELECT * FROM t1 JOIN t2 ON t1.id = t2.t1_id" ,
729
744
"PRE: TABLE FACTOR: t1" ,
730
745
"PRE: RELATION: t1" ,
731
746
"POST: RELATION: t1" ,
@@ -740,67 +755,80 @@ mod tests {
740
755
"PRE: EXPR: t2.t1_id" ,
741
756
"POST: EXPR: t2.t1_id" ,
742
757
"POST: EXPR: t1.id = t2.t1_id" ,
758
+ "POST: QUERY: SELECT * FROM t1 JOIN t2 ON t1.id = t2.t1_id" ,
743
759
"POST: STATEMENT: SELECT * FROM t1 JOIN t2 ON t1.id = t2.t1_id" ,
744
760
] ,
745
761
) ,
746
762
(
747
763
"SELECT * from t1 where EXISTS(SELECT column from t2)" ,
748
764
vec![
749
765
"PRE: STATEMENT: SELECT * FROM t1 WHERE EXISTS (SELECT column FROM t2)" ,
766
+ "PRE: QUERY: SELECT * FROM t1 WHERE EXISTS (SELECT column FROM t2)" ,
750
767
"PRE: TABLE FACTOR: t1" ,
751
768
"PRE: RELATION: t1" ,
752
769
"POST: RELATION: t1" ,
753
770
"POST: TABLE FACTOR: t1" ,
754
771
"PRE: EXPR: EXISTS (SELECT column FROM t2)" ,
772
+ "PRE: QUERY: SELECT column FROM t2" ,
755
773
"PRE: EXPR: column" ,
756
774
"POST: EXPR: column" ,
757
775
"PRE: TABLE FACTOR: t2" ,
758
776
"PRE: RELATION: t2" ,
759
777
"POST: RELATION: t2" ,
760
778
"POST: TABLE FACTOR: t2" ,
779
+ "POST: QUERY: SELECT column FROM t2" ,
761
780
"POST: EXPR: EXISTS (SELECT column FROM t2)" ,
781
+ "POST: QUERY: SELECT * FROM t1 WHERE EXISTS (SELECT column FROM t2)" ,
762
782
"POST: STATEMENT: SELECT * FROM t1 WHERE EXISTS (SELECT column FROM t2)" ,
763
783
] ,
764
784
) ,
765
785
(
766
786
"SELECT * from t1 where EXISTS(SELECT column from t2)" ,
767
787
vec![
768
788
"PRE: STATEMENT: SELECT * FROM t1 WHERE EXISTS (SELECT column FROM t2)" ,
789
+ "PRE: QUERY: SELECT * FROM t1 WHERE EXISTS (SELECT column FROM t2)" ,
769
790
"PRE: TABLE FACTOR: t1" ,
770
791
"PRE: RELATION: t1" ,
771
792
"POST: RELATION: t1" ,
772
793
"POST: TABLE FACTOR: t1" ,
773
794
"PRE: EXPR: EXISTS (SELECT column FROM t2)" ,
795
+ "PRE: QUERY: SELECT column FROM t2" ,
774
796
"PRE: EXPR: column" ,
775
797
"POST: EXPR: column" ,
776
798
"PRE: TABLE FACTOR: t2" ,
777
799
"PRE: RELATION: t2" ,
778
800
"POST: RELATION: t2" ,
779
801
"POST: TABLE FACTOR: t2" ,
802
+ "POST: QUERY: SELECT column FROM t2" ,
780
803
"POST: EXPR: EXISTS (SELECT column FROM t2)" ,
804
+ "POST: QUERY: SELECT * FROM t1 WHERE EXISTS (SELECT column FROM t2)" ,
781
805
"POST: STATEMENT: SELECT * FROM t1 WHERE EXISTS (SELECT column FROM t2)" ,
782
806
] ,
783
807
) ,
784
808
(
785
809
"SELECT * from t1 where EXISTS(SELECT column from t2) UNION SELECT * from t3" ,
786
810
vec![
787
811
"PRE: STATEMENT: SELECT * FROM t1 WHERE EXISTS (SELECT column FROM t2) UNION SELECT * FROM t3" ,
812
+ "PRE: QUERY: SELECT * FROM t1 WHERE EXISTS (SELECT column FROM t2) UNION SELECT * FROM t3" ,
788
813
"PRE: TABLE FACTOR: t1" ,
789
814
"PRE: RELATION: t1" ,
790
815
"POST: RELATION: t1" ,
791
816
"POST: TABLE FACTOR: t1" ,
792
817
"PRE: EXPR: EXISTS (SELECT column FROM t2)" ,
818
+ "PRE: QUERY: SELECT column FROM t2" ,
793
819
"PRE: EXPR: column" ,
794
820
"POST: EXPR: column" ,
795
821
"PRE: TABLE FACTOR: t2" ,
796
822
"PRE: RELATION: t2" ,
797
823
"POST: RELATION: t2" ,
798
824
"POST: TABLE FACTOR: t2" ,
825
+ "POST: QUERY: SELECT column FROM t2" ,
799
826
"POST: EXPR: EXISTS (SELECT column FROM t2)" ,
800
827
"PRE: TABLE FACTOR: t3" ,
801
828
"PRE: RELATION: t3" ,
802
829
"POST: RELATION: t3" ,
803
830
"POST: TABLE FACTOR: t3" ,
831
+ "POST: QUERY: SELECT * FROM t1 WHERE EXISTS (SELECT column FROM t2) UNION SELECT * FROM t3" ,
804
832
"POST: STATEMENT: SELECT * FROM t1 WHERE EXISTS (SELECT column FROM t2) UNION SELECT * FROM t3" ,
805
833
] ,
806
834
) ,
0 commit comments