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
+61-46Lines changed: 61 additions & 46 deletions
Original file line number
Diff line number
Diff line change
@@ -684,111 +684,120 @@ 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!(r#"SELECT a,b FROM (g MATCH [(a:A)-[e:Edge]->(b:A) WHERE a.owner=b.owner]{2,5})"#);
754
+
parse!(r#"SELECT a,b FROM (g MATCH pathVar = (a:A)[()-[e:Edge]->()]{1,3}(b:B))"#);
746
755
747
756
// brackets
748
-
parse!(r#"SELECT a,b FROM g MATCH pathVar = (a:A)[-[e:Edge]->]*(b:B)"#);
757
+
parse!(r#"SELECT a,b FROM (g MATCH pathVar = (a:A)[-[e:Edge]->]*(b:B))"#);
749
758
// parens
750
-
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))"#);
751
760
}
752
761
753
762
#[test]
754
763
fnfilters(){
755
764
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%'"#
765
+
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
766
);
758
767
}
759
768
760
769
#[test]
761
770
fnrestrictors(){
762
771
parse!(
763
-
r#"SELECT p FROM g MATCH TRAIL p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha')"#
772
+
r#"SELECT p FROM (g MATCH TRAIL p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha'))"#
764
773
);
765
774
parse!(
766
-
r#"SELECT p FROM g MATCH SIMPLE p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha')"#
775
+
r#"SELECT p FROM (g MATCH SIMPLE p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha'))"#
767
776
);
768
777
parse!(
769
-
r#"SELECT p FROM g MATCH ACYCLIC p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha')"#
778
+
r#"SELECT p FROM (g MATCH ACYCLIC p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha'))"#
770
779
);
771
780
}
772
781
773
782
#[test]
774
783
fnselectors(){
775
784
parse!(
776
-
r#"SELECT p FROM g MATCH ANY SHORTEST p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha')"#
785
+
r#"SELECT p FROM (g MATCH ANY SHORTEST p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha'))"#
777
786
);
778
787
parse!(
779
-
r#"SELECT p FROM g MATCH ALL SHORTEST p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha')"#
788
+
r#"SELECT p FROM (g MATCH ALL SHORTEST p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha'))"#
780
789
);
781
790
parse!(
782
-
r#"SELECT p FROM g MATCH ANY p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha')"#
791
+
r#"SELECT p FROM (g MATCH ANY p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha'))"#
783
792
);
784
793
parse!(
785
-
r#"SELECT p FROM g MATCH ANY 5 p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha')"#
794
+
r#"SELECT p FROM (g MATCH ANY 5 p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha'))"#
786
795
);
787
796
parse!(
788
-
r#"SELECT p FROM g MATCH SHORTEST 5 p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha')"#
797
+
r#"SELECT p FROM (g MATCH SHORTEST 5 p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha'))"#
789
798
);
790
799
parse!(
791
-
r#"SELECT p FROM g MATCH SHORTEST 5 GROUP p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha')"#
800
+
r#"SELECT p FROM (g MATCH SHORTEST 5 GROUP p = (a WHERE a.owner='Dave') -[t:Transfer]-> * (b WHERE b.owner='Aretha'))"#
792
801
);
793
802
}
794
803
@@ -799,10 +808,16 @@ mod tests {
799
808
);
800
809
}
801
810
811
+
#[test]
812
+
fnunion(){
813
+
parse!(r#"(MyGraph MATCH (x)) UNION SELECT * FROM tbl1"#);
814
+
parse!(r#"SELECT * FROM tbl1 UNION (MyGraph MATCH (x))"#);
815
+
}
816
+
802
817
#[test]
803
818
fnetc(){
804
-
parse!("SELECT * FROM g MATCH ALL SHORTEST [ (x)-[e]->*(y) ]");
805
-
parse!("SELECT * FROM g MATCH ALL SHORTEST [ TRAIL (x)-[e]->*(y) ]");
819
+
parse!("SELECT * FROM (g MATCH ALL SHORTEST [ (x)-[e]->*(y) ])");
820
+
parse!("SELECT * FROM (g MATCH ALL SHORTEST [ TRAIL (x)-[e]->*(y) ])");
0 commit comments