From a920eb6cb1346a56c2d4166081a561fe65ed7639 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jens=20Pryce-=C3=85klundh?= <112686610+JPryce-Aklundh@users.noreply.github.com> Date: Fri, 25 Apr 2025 15:17:14 +0200 Subject: [PATCH 1/2] Expression tags (#1251) Also updates WHERE and UNION (both of which were changed significantly by Expressions project) --------- Co-authored-by: Richard Sill <156673635+rsill-neo4j@users.noreply.github.com> --- modules/ROOT/pages/clauses/where.adoc | 16 ++++++++-- .../expressions/conditional-expressions.adoc | 9 ++++++ .../pages/expressions/list-expressions.adoc | 30 +++++++++++++++++++ .../pages/expressions/map-expressions.adoc | 18 ++++++++++- .../expressions/mathematical-operators.adoc | 12 ++++++++ .../node-relationship-operators.adoc | 7 ++++- .../predicates/boolean-operators.adoc | 8 +++++ .../predicates/comparison-operators.adoc | 16 ++++++++++ .../predicates/list-operators.adoc | 8 +++++ .../predicates/path-pattern-expressions.adoc | 4 +++ .../predicates/string-operators.adoc | 20 +++++++++++-- .../type-predicate-expressions.adoc | 10 +++++++ .../pages/expressions/string-operators.adoc | 14 +++++++++ .../pages/expressions/temporal-operators.adoc | 4 +++ .../composed-queries/combined-queries.adoc | 10 ++++--- 15 files changed, 175 insertions(+), 11 deletions(-) diff --git a/modules/ROOT/pages/clauses/where.adoc b/modules/ROOT/pages/clauses/where.adoc index 468bb4326..cc4e9e96d 100644 --- a/modules/ROOT/pages/clauses/where.adoc +++ b/modules/ROOT/pages/clauses/where.adoc @@ -43,14 +43,18 @@ CREATE (andy:Swedish:Person {name: 'Andy', age: 36}), == Basic filtering .Filter on a node label +<<<<<<< HEAD // tag::clauses_where_in_match_clause[] +======= +// tag::clauses_where_node_label[] +>>>>>>> a69cc0d9 (Expression tags (#1251)) [source, cypher] ---- MATCH (n) WHERE n:Swedish RETURN n.name AS name ---- -// end::clauses_where_in_match_clause[] +// end::clauses_where_node_label[] .Result [role="queryresult",options="header,footer",cols="1* 40 RETURN n.name AS name, n.age AS age ---- +// end::clauses_where_dynamic[] .Result [role="queryresult",options="header,footer",cols="2*(b:Person WHERE b.age > minAge) RETURN b.name AS name ---- +// end::clauses_where_node_pattern[] .Result [role="queryresult",options="header,footer",cols="1*(b:Person) | r.since] AS years If matching for variable length patterns, `WHERE` can only be used together with the xref:patterns/variable-length-patterns.adoc#quantified-path-patterns[quantified path pattern] or xref:patterns/variable-length-patterns.adoc#quantified-relationships[quantified relationships] syntax. .Allowed - `WHERE` predicate inside a quantified relationship +// tag::clauses_where_var_length[] [source, cypher] ---- MATCH p = (a:Person {name: "Andy"})-[r:KNOWS WHERE r.since < 2011]->{1,4}(:Person) RETURN [n IN nodes(p) | n.name] AS paths ---- +// end::clauses_where_var_length[] -Note that any path´s including `Timothy` and `Susan` are excluded by the `WHERE` predicate, since their incoming `KNOWS` relationships both have a `since` value that is higher than `2011.` +Note that any paths including `Timothy` and `Susan` are excluded by the `WHERE` predicate, since their incoming `KNOWS` relationships both have a `since` value that is higher than `2011.` .Result [role="queryresult",options="header,footer",cols="1* 2 | n] AS filteredList ---- +// end::expressions_list_comprehension[] .Result [role="queryresult",options="header,footer",cols="1*(alice) | employee.name] AS employees ---- +// end::expressions_list_pattern_comprehension[] .Result [role="queryresult",options="header,footer",cols="1*(alice) | employee.name] AS employees Pattern comprehensions can include `WHERE` predicates. .Pattern comprehension including a `WHERE` predicate +// tag::expressions_list_pattern_comprehension_where[] [source, cypher] ---- MATCH (alice:Person {name: 'Alice'}) RETURN [(employee:Person)-[:WORKS_FOR]->(alice) WHERE employee.age > 30 | employee.name || ', ' || toString(employee.age)] AS employeesAbove30 ---- +// end::expressions_list_pattern_comprehension_where[] .Result [role="queryresult",options="header,footer",cols="1*(manager:Person) @@ -69,6 +70,7 @@ RETURN employee.firstName AS employee, r.since AS employedSince, manager.firstName AS manager ---- +// end::expressions_node_relationship_operators_static_property_access[] .Result [role="queryresult",options="header,footer",cols="3* 30 AND n.role = 'Software developer' RETURN n.name AS name, n.age AS age, n.role AS role ---- +// end::expressions_predicates_boolean_operators_and[] .Result [role="queryresult",options="header,footer",cols="3* 30 XOR n.role = 'Software developer' RETURN n.name AS name, n.age AS age, n.role AS role ---- +// end::expressions_predicates_boolean_operators_xor[] .Result [role="queryresult",options="header,footer",cols="3*`) +// tag::expressions_predicates_comparison_operators_inequality[] [source, cypher] ---- MATCH (n:Person) WHERE n.role <> 'Software developer' RETURN n.name AS name, n.role AS role ---- +// end::expressions_predicates_comparison_operators_inequality[] .Result [role="queryresult",options="header,footer",cols="2*`) +// tag::expressions_predicates_comparison_operators_greater_than[] [source, cypher] ---- MATCH (n:Person) WHERE n.age > 39 RETURN n.name AS name, n.age AS age ---- +// end::expressions_predicates_comparison_operators_greater_than[] .Result [role="queryresult",options="header,footer",cols="2*=`) +// tag::expressions_predicates_comparison_operators_greater_than_or_equal[] [source, cypher] ---- MATCH (n:Person) WHERE n.age >= 39 RETURN n.name AS name, n.age AS age ---- +// end::expressions_predicates_comparison_operators_greater_than_or_equal[] .Result [role="queryresult",options="header,footer",cols="2*(:Person {name: 'Alice'}) RETURN employee.name AS employee ---- +// end::expressions_predicates_path_pattern_expression[] .Result [role="queryresult",options="header,footer",cols="1*(:Person {name: 'Alice'}) RETURN employee.name AS employee ---- +// end::expressions_predicates_path_pattern_expression_boolean[] .Result diff --git a/modules/ROOT/pages/expressions/predicates/string-operators.adoc b/modules/ROOT/pages/expressions/predicates/string-operators.adoc index 2669ebd23..18355c8cf 100644 --- a/modules/ROOT/pages/expressions/predicates/string-operators.adoc +++ b/modules/ROOT/pages/expressions/predicates/string-operators.adoc @@ -40,13 +40,14 @@ CREATE (alice:Person {name:'Alice', age: 65, role: 'Project manager', email: 'al ===== .`STARTS WITH` operator +// tag::expressions_predicates_string_operators_prefix[] [source, cypher] ---- MATCH (n:Person) WHERE n.name STARTS WITH 'C' RETURN n.name AS name ---- - +// end::expressions_predicates_string_operators_prefix[] .Result [role="queryresult",options="header,footer",cols="1* 18 RETURN n.name AS name, n.age AS age ---- +// end::expressions_predicates_type_predicate_properties[] [role="queryresult",options="header,footer",cols="2* Date: Fri, 25 Apr 2025 15:32:43 +0200 Subject: [PATCH 2/2] where --- modules/ROOT/pages/clauses/where.adoc | 4 ---- 1 file changed, 4 deletions(-) diff --git a/modules/ROOT/pages/clauses/where.adoc b/modules/ROOT/pages/clauses/where.adoc index cc4e9e96d..08893446e 100644 --- a/modules/ROOT/pages/clauses/where.adoc +++ b/modules/ROOT/pages/clauses/where.adoc @@ -43,11 +43,7 @@ CREATE (andy:Swedish:Person {name: 'Andy', age: 36}), == Basic filtering .Filter on a node label -<<<<<<< HEAD -// tag::clauses_where_in_match_clause[] -======= // tag::clauses_where_node_label[] ->>>>>>> a69cc0d9 (Expression tags (#1251)) [source, cypher] ---- MATCH (n)