1+ # MATCH clause
2+
3+ <simple match statement> ::=
4+ "MATCH" <graph pattern>
5+
6+ <graph pattern> ::=
7+ [ <match mode> ] <path pattern> [ { "," <path pattern> }... ] [ <graph pattern where clause> ]
8+
9+ <path pattern> ::=
10+ [ <binding variable> "=" ] [ <path pattern prefix> ] <path pattern expression>
11+
12+ <path pattern prefix> ::=
13+ "ALL" [ "PATH" | "PATHS" ]
14+ | "ANY" [ <unsigned decimal integer> | "$" <parameter name> ] [ "PATH" | "PATHS" ]
15+ | "ALL" "SHORTEST" [ "PATH" | "PATHS" ]
16+ | "ANY" "SHORTEST" [ "PATH" | "PATHS" ]
17+ | "SHORTEST" { <unsigned decimal integer> | "$" <parameter name> } [ "PATH" | "PATHS" ]
18+ | "SHORTEST" [ <unsigned decimal integer> | "$" <parameter name> ] [ "PATH" | "PATHS" ] { "GROUP" | "GROUPS" }
19+
20+ <path pattern expression> ::=
21+ <path term>
22+ | <legacy shortest path pattern>
23+
24+ <path term> ::=
25+ <path factor>
26+ | <path term> <path factor>
27+
28+ <path factor> ::=
29+ <path primary>
30+ | <path primary> <graph pattern quantifier>
31+ | <path primary> "?"
32+
33+ <path primary> ::=
34+ <node pattern>
35+ | <relationship pattern>
36+ | "(" [ <binding variable> "=" ] <path pattern expression> [ "WHERE" <value expression> ] ")"
37+
38+ <node pattern> ::=
39+ "(" [ <binding variable> [ <is node label expression> ] [ <element pattern predicate> ] | <is node label expression> [ <element pattern predicate> ] | <element pattern predicate> ] ")"
40+
41+ <element pattern predicate> ::=
42+ "WHERE" <value expression>
43+ | <element property specification>
44+ | "$" <parameter name>
45+
46+ <element property specification> ::=
47+ "{" <property key value pair list> "}"
48+
49+ <property key value pair list> ::=
50+ <property key value pair> [ { "," <property key value pair> }... ]
51+
52+ <property key value pair> ::=
53+ <property name> ":" <value expression>
54+
55+ <relationship pattern> ::=
56+ "<" "-" [ "[" [ <relationship pattern filler> ] "]" ] "-"
57+ | "-" [ "[" [ <relationship pattern filler> ] "]" ] "-" ">"
58+ | "<" "-" [ "[" [ <relationship pattern filler> ] "]" ] "-" ">"
59+ | "-" [ "[" [ <relationship pattern filler> ] "]" ] "-"
60+
61+ <relationship pattern filler> ::=
62+ <binding variable> [ <is relationship label expression> ] [ <path length> ] [ <element pattern predicate> ]
63+ | <is relationship label expression> [ <path length> ] [ <element pattern predicate> ]
64+ | <path length> [ <element pattern predicate> ]
65+ | <element pattern predicate>
66+
67+ <path length> ::=
68+ "*" [ [ <unsigned decimal integer> ] ".." [ <unsigned decimal integer> ] | <unsigned decimal integer> ]
69+
70+ <graph pattern quantifier> ::=
71+ "*"
72+ | "+"
73+ | "{" <unsigned integer> "}"
74+ | "{" [ <unsigned decimal integer> ] "," [ <unsigned decimal integer> ] "}"
75+
76+ <is node label expression> ::=
77+ ":" <node label expression legacy>
78+ | { ":" | "IS" } <label expression>
79+
80+ <is relationship label expression> ::=
81+ ":" <relationship label expression legacy>
82+ | { ":" | "IS" } <label expression>
83+
84+ <label expression> ::=
85+ <label term>
86+ | <label expression> "|" <label term>
87+
88+ <label term> ::=
89+ <label factor>
90+ | <label term> "&" <label factor>
91+
92+ <label factor> ::=
93+ <label primary>
94+ | <label negation>
95+
96+ <label negation> ::=
97+ "!" <label primary>
98+
99+ <label primary> ::=
100+ <label name>
101+ | "(" <label expression> ")"
102+ | "%"
103+ | "$" [ "ALL" | "ANY" ] "(" <value expression> ")"
104+
105+ <value expression> ::=
106+ <boolean value expression>
107+
108+ <boolean value expression> ::=
109+ <boolean term xor>
110+ | <boolean value expression> "OR" <boolean term xor>
111+
112+ <boolean term xor> ::=
113+ <boolean term>
114+ | <boolean term xor> "XOR" <boolean term>
115+
116+ <boolean term> ::=
117+ <boolean factor>
118+ | <boolean term> "AND" <boolean factor>
119+
120+ <boolean factor> ::=
121+ [ { "NOT" }... ] <boolean primary>
122+
123+ <boolean primary> ::=
124+ <pattern expression>
125+ | <predicate>
126+
127+ <pattern expression> ::=
128+ <node pattern> { <relationship pattern> <node pattern> }...
129+
130+ <label name> ::=
131+ link:/cypher-manual/25/syntax/naming/[<identifier>]
132+
133+ <property name> ::=
134+ link:/cypher-manual/25/syntax/naming/[<identifier>]
135+
136+ <binding variable> ::=
137+ link:/cypher-manual/25/syntax/naming/[<identifier>]
0 commit comments