You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: partiql-parser/src/parse/mod.rs
+63-46Lines changed: 63 additions & 46 deletions
Original file line number
Diff line number
Diff line change
@@ -684,111 +684,122 @@ mod tests {
684
684
685
685
#[test]
686
686
fnno_labels(){
687
-
parse!(r#"SELECT 1 FROM my_graph MATCH ()"#);
688
-
parse!(r#"SELECT 1 FROM my_graph MATCH () WHERE contains_value('1')"#);
689
-
parse!(r#"SELECT x.info AS info FROM my_graph MATCH (x) WHERE x.name LIKE 'foo'"#);
690
-
//parse!(r#"SELECT 1 FROM g MATCH -[]-> "#);
687
+
parse!(r#"SELECT 1 FROM (my_graph MATCH ())"#);
688
+
parse!(r#"SELECT 1 FROM (my_graph MATCH ()) WHERE contains_value('1')"#);
689
+
parse!(r#"SELECT x.info AS info FROM (my_graph MATCH (x)) WHERE x.name LIKE 'foo'"#);
690
+
// TODO fails due to edge first
691
+
// parse!(r#"SELECT 1 FROM (g MATCH -[]->) "#);
692
+
}
693
+
694
+
#[test]
695
+
fnlone_match_expr(){
696
+
parse!(r#"(MyGraph MATCH (x))"#);
697
+
parse!(r#"(MyGraph MATCH (x), (y) )"#);
698
+
// TODO fails due to edge first
699
+
//parse!(r#"(MyGraph MATCH (x), -[u]-> )"#);
691
700
}
692
701
693
702
#[test]
694
703
fnlabelled_nodes(){
695
-
parse!(r#"SELECT x AS target FROM my_graph MATCH (x:Label) WHERE x.has_data = true"#);
704
+
parse!(r#"SELECT x AS target FROM (my_graph MATCH (x:Label)) WHERE x.has_data = true"#);
696
705
}
697
706
698
707
#[test]
699
708
fnedges(){
700
-
parse!(r#"SELECT a,b FROM g MATCH (a:A) -[e:E]-> (b:B)"#);
701
-
parse!(r#"SELECT a,b FROM g MATCH (a:A) -> (b:B)"#);
702
-
parse!(r#"SELECT a,b FROM g MATCH (a:A) ~[e:E]~ (b:B)"#);
703
-
parse!(r#"SELECT a,b FROM g MATCH (a:A) ~ (b:B)"#);
704
-
parse!(r#"SELECT a,b FROM g MATCH (a:A) <-[e:E]- (b:B)"#);
705
-
parse!(r#"SELECT a,b FROM g MATCH (a:A) <- (b:B)"#);
706
-
parse!(r#"SELECT a,b FROM g MATCH (a:A) ~[e:E]~> (b:B)"#);
707
-
parse!(r#"SELECT a,b FROM g MATCH (a:A) ~> (b:B)"#);
708
-
parse!(r#"SELECT a,b FROM g MATCH (a:A) <~[e:E]~ (b:B)"#);
709
-
parse!(r#"SELECT a,b FROM g MATCH (a:A) <~ (b:B)"#);
710
-
parse!(r#"SELECT a,b FROM g MATCH (a:A) <-[e:E]-> (b:B)"#);
711
-
parse!(r#"SELECT a,b FROM g MATCH (a:A) <-> (b:B)"#);
712
-
parse!(r#"SELECT a,b FROM g MATCH (a:A) -[e:E]- (b:B)"#);
713
-
parse!(r#"SELECT a,b FROM g MATCH (a:A) - (b:B)"#);
709
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A) -[e:E]-> (b:B))"#);
710
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A) -> (b:B))"#);
711
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A) ~[e:E]~ (b:B))"#);
712
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A) ~ (b:B))"#);
713
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A) <-[e:E]- (b:B))"#);
714
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A) <- (b:B))"#);
715
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A) ~[e:E]~> (b:B))"#);
716
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A) ~> (b:B))"#);
717
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A) <~[e:E]~ (b:B))"#);
718
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A) <~ (b:B))"#);
719
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A) <-[e:E]-> (b:B))"#);
720
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A) <-> (b:B))"#);
721
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A) -[e:E]- (b:B))"#);
722
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A) - (b:B))"#);
714
723
}
715
724
716
725
#[test]
717
726
fnquantifiers(){
718
-
parse!(r#"SELECT a,b FROM g MATCH (a:A)-[:edge]->*(b:B)"#);
719
-
parse!(r#"SELECT a,b FROM g MATCH (a:A)<-[:edge]-+(b:B)"#);
720
-
parse!(r#"SELECT a,b FROM g MATCH (a:A)~[:edge]~{5,}(b:B)"#);
721
-
parse!(r#"SELECT a,b FROM g MATCH (a:A)-[e:edge]-{2,6}(b:B)"#);
722
-
parse!(r#"SELECT a,b FROM g MATCH (a:A)->*(b:B)"#);
723
-
parse!(r#"SELECT a,b FROM g MATCH (a:A)<-+(b:B)"#);
724
-
parse!(r#"SELECT a,b FROM g MATCH (a:A)~{5,}(b:B)"#);
725
-
parse!(r#"SELECT a,b FROM g MATCH (a:A)-{2,6}(b:B)"#);
727
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A)-[:edge]->*(b:B))"#);
728
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A)<-[:edge]-+(b:B))"#);
729
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A)~[:edge]~{5,}(b:B))"#);
730
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A)-[e:edge]-{2,6}(b:B))"#);
731
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A)->*(b:B))"#);
732
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A)<-+(b:B))"#);
733
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A)~{5,}(b:B))"#);
734
+
parse!(r#"SELECT a,b FROM (g MATCH (a:A)-{2,6}(b:B))"#);
726
735
}
727
736
728
737
#[test]
729
738
fnpatterns(){
730
739
parse!(
731
-
r#"SELECT the_a.name AS src, the_b.name AS dest FROM my_graph MATCH (the_a:a) -[the_y:y]-> (the_b:b) WHERE the_y.score > 10"#
740
+
r#"SELECT the_a.name AS src, the_b.name AS dest FROM (my_graph MATCH (the_a:a) -[the_y:y]-> (the_b:b)) WHERE the_y.score > 10"#
732
741
);
733
-
parse!(r#""SELECT a,b FROM g MATCH (a)-[:has]->()-[:contains]->(b)""#);
742
+
parse!(r#""SELECT a,b FROM (g MATCH (a)-[:has]->()-[:contains]->(b))""#);
734
743
parse!(r#"SELECT a,b FROM (g MATCH (a) -[:has]-> (x), (x)-[:contains]->(b))"#);
735
744
}
736
745
737
746
#[test]
738
747
fnpath_var(){
739
-
parse!(r#"SELECT a,b FROM g MATCH p = (a:A) -[e:E]-> (b:B)"#);
748
+
parse!(r#"SELECT a,b FROM (g MATCH p = (a:A) -[e:E]-> (b:B))"#);
740
749
}
741
750
742
751
#[test]
743
752
fnparanthesized(){
744
-
parse!(r#"SELECT a,b FROM g MATCH [(a:A)-[e:Edge]->(b:A) WHERE a.owner=b.owner]{2,5}"#);
745
-
parse!(r#"SELECT a,b FROM g MATCH pathVar = (a:A)[()-[e:Edge]->()]{1,3}(b:B)"#);
753
+
parse!(
754
+
r#"SELECT a,b FROM (g MATCH [(a:A)-[e:Edge]->(b:A) WHERE a.owner=b.owner]{2,5})"#
755
+
);
756
+
parse!(r#"SELECT a,b FROM (g MATCH pathVar = (a:A)[()-[e:Edge]->()]{1,3}(b:B))"#);
746
757
747
758
// brackets
748
-
parse!(r#"SELECT a,b FROM g MATCH pathVar = (a:A)[-[e:Edge]->]*(b:B)"#);
759
+
parse!(r#"SELECT a,b FROM (g MATCH pathVar = (a:A)[-[e:Edge]->]*(b:B))"#);
749
760
// parens
750
-
parse!(r#"SELECT a,b FROM g MATCH pathVar = (a:A)(-[e:Edge]->)*(b:B)"#);
761
+
parse!(r#"SELECT a,b FROM (g MATCH pathVar = (a:A)(-[e:Edge]->)*(b:B))"#);
751
762
}
752
763
753
764
#[test]
754
765
fnfilters(){
755
766
parse!(
756
-
r#"SELECT u as banCandidate FROM g MATCH (p:Post Where p.isFlagged = true) <-[:createdPost]- (u:User WHERE u.isBanned = false AND u.karma < 20) -[:createdComment]->(c:Comment WHERE c.isFlagged = true) WHERE p.title LIKE '%considered harmful%'"#
767
+
r#"SELECT u as banCandidate FROM (g MATCH (p:Post Where p.isFlagged = true) <-[:createdPost]- (u:User WHERE u.isBanned = false AND u.karma < 20) -[:createdComment]->(c:Comment WHERE c.isFlagged = true)) WHERE p.title LIKE '%considered harmful%'"#
757
768
);
758
769
}
759
770
760
771
#[test]
761
772
fnrestrictors(){
762
773
parse!(
763
-
r#"SELECT p FROM g MATCH TRAIL p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha')"#
774
+
r#"SELECT p FROM (g MATCH TRAIL p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha'))"#
764
775
);
765
776
parse!(
766
-
r#"SELECT p FROM g MATCH SIMPLE p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha')"#
777
+
r#"SELECT p FROM (g MATCH SIMPLE p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha'))"#
767
778
);
768
779
parse!(
769
-
r#"SELECT p FROM g MATCH ACYCLIC p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha')"#
780
+
r#"SELECT p FROM (g MATCH ACYCLIC p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha'))"#
770
781
);
771
782
}
772
783
773
784
#[test]
774
785
fnselectors(){
775
786
parse!(
776
-
r#"SELECT p FROM g MATCH ANY SHORTEST p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha')"#
787
+
r#"SELECT p FROM (g MATCH ANY SHORTEST p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha'))"#
777
788
);
778
789
parse!(
779
-
r#"SELECT p FROM g MATCH ALL SHORTEST p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha')"#
790
+
r#"SELECT p FROM (g MATCH ALL SHORTEST p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha'))"#
780
791
);
781
792
parse!(
782
-
r#"SELECT p FROM g MATCH ANY p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha')"#
793
+
r#"SELECT p FROM (g MATCH ANY p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha'))"#
783
794
);
784
795
parse!(
785
-
r#"SELECT p FROM g MATCH ANY 5 p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha')"#
796
+
r#"SELECT p FROM (g MATCH ANY 5 p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha'))"#
786
797
);
787
798
parse!(
788
-
r#"SELECT p FROM g MATCH SHORTEST 5 p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha')"#
799
+
r#"SELECT p FROM (g MATCH SHORTEST 5 p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha'))"#
789
800
);
790
801
parse!(
791
-
r#"SELECT p FROM g MATCH SHORTEST 5 GROUP p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha')"#
802
+
r#"SELECT p FROM (g MATCH SHORTEST 5 GROUP p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha'))"#
792
803
);
793
804
}
794
805
@@ -799,10 +810,16 @@ mod tests {
799
810
);
800
811
}
801
812
813
+
#[test]
814
+
fnunion(){
815
+
parse!(r#"(MyGraph MATCH (x)) UNION SELECT * FROM tbl1"#);
816
+
parse!(r#"SELECT * FROM tbl1 UNION (MyGraph MATCH (x))"#);
817
+
}
818
+
802
819
#[test]
803
820
fnetc(){
804
-
parse!("SELECT * FROM g MATCH ALL SHORTEST [ (x)-[e]->*(y) ]");
805
-
parse!("SELECT * FROM g MATCH ALL SHORTEST [ TRAIL (x)-[e]->*(y) ]");
821
+
parse!("SELECT * FROM (g MATCH ALL SHORTEST [ (x)-[e]->*(y) ])");
822
+
parse!("SELECT * FROM (g MATCH ALL SHORTEST [ TRAIL (x)-[e]->*(y) ])");
0 commit comments