diff --git a/modules/ROOT/pages/appendix/gql-conformance/supported-mandatory.adoc b/modules/ROOT/pages/appendix/gql-conformance/supported-mandatory.adoc index 4115d134d..58a1dcf25 100644 --- a/modules/ROOT/pages/appendix/gql-conformance/supported-mandatory.adoc +++ b/modules/ROOT/pages/appendix/gql-conformance/supported-mandatory.adoc @@ -26,7 +26,7 @@ The below table is instead listed in order of their appearance in the link:https | xref:values-and-types/property-structural-constructed.adoc#property-types[Property types], xref:values-and-types/property-structural-constructed.adoc#type-synonyms[Types and their synonyms]. | Includes: `BOOLEAN` (`BOOL`), `FLOAT`, `INTEGER` (`SIGNED INTEGER`, `INT`), and `STRING` (`VARCHAR`). -Cypher supports the boolean type predicate for `TRUE`, `FALSE`, and `NULL` but does not support the GQL keyword `UNKNOWN`. +Cypher supports the boolean type predicate for `true`, `false`, and `null` but does not support the GQL keyword `UNKNOWN`. | 9.1 | @@ -138,7 +138,7 @@ This is currently not available in Cypher. | 19.5 | -| xref:expressions/predicates/type-predicate-expressions.adoc#type-predicate-null[Type predicate expressions for `NULL`] +| xref:expressions/predicates/type-predicate-expressions.adoc#type-predicate-null[Type predicate expressions for `null`] | | 19.6 @@ -170,8 +170,8 @@ In Cypher, current user details can be seen using the link:{neo4j-docs-base-uri} | 20.9 | | xref:functions/aggregating.adoc#functions-avg[`avg()`], xref:functions/aggregating.adoc#functions-count[`count()`], xref:functions/aggregating.adoc#functions-max[`max`], xref:functions/aggregating.adoc#functions-mind[`min()`], xref:functions/aggregating.adoc#functions-sum[`sum()`] -| Cypher and GQL handle `NULL` values differently for the `sum()` function when queries return 0 rows. -For example, `RETURN sum()` on an empty table returns `NULL` in GQL, but in Cypher it returns `0`. +| Cypher and GQL handle `null` values differently for the `sum()` function when queries return 0 rows. +For example, `RETURN sum()` on an empty table returns `null` in GQL, but in Cypher it returns `0`. | 20.11 | diff --git a/modules/ROOT/pages/appendix/gql-conformance/supported-optional.adoc b/modules/ROOT/pages/appendix/gql-conformance/supported-optional.adoc index e841d5191..4516bf27b 100644 --- a/modules/ROOT/pages/appendix/gql-conformance/supported-optional.adoc +++ b/modules/ROOT/pages/appendix/gql-conformance/supported-optional.adoc @@ -208,8 +208,8 @@ GQL also defines a parameterless version of the function not in Cypher: `CURRENT | | GV70 -| Immaterial value types: null type support (`NULL`) -| xref:values-and-types/working-with-null.adoc[Working with `NULL`] +| Immaterial value types: null type support (`null`) +| xref:values-and-types/working-with-null.adoc[Working with `null`] | | GV71 diff --git a/modules/ROOT/pages/clauses/with.adoc b/modules/ROOT/pages/clauses/with.adoc index 258e72062..7060b7889 100644 --- a/modules/ROOT/pages/clauses/with.adoc +++ b/modules/ROOT/pages/clauses/with.adoc @@ -256,11 +256,11 @@ ORDER BY price |=== | product | price | isAffordable | discountCategory -| "Chocolate" | 5 | TRUE | 'Budget' -| "Coffee" | 10 | TRUE | 'Budget' -| "Headphones" | 250 | TRUE | 'Budget' -| "Phone" | 500 | FALSE | 'High-end' -| "Laptop" | 1000 | FALSE | 'High-end' +| "Chocolate" | 5 | true | 'Budget' +| "Coffee" | 10 | true | 'Budget' +| "Headphones" | 250 | true | 'Budget' +| "Phone" | 500 | false | 'High-end' +| "Laptop" | 1000 | false | 'High-end' 4+d|Rows: 5 |=== @@ -395,9 +395,9 @@ RETURN c.firstName AS customer, |=== | customer | totalSpent | topSpender -| "Mateo" | 1015 | TRUE -| "Amir" | 1005 | TRUE -| "Yusuf" | 1005 | TRUE +| "Mateo" | 1015 | true +| "Amir" | 1005 | true +| "Yusuf" | 1005 | true 3+d|Rows: 3 |=== @@ -423,10 +423,10 @@ RETURN c.firstName AS customer, |=== | customer | totalSpent | topSpender -| "Leila" | 1000 | FALSE -| "Niko" | 760 | FALSE -| "Hannah" | 260 | FALSE -| "Keisha" | 250 | FALSE +| "Leila" | 1000 | false +| "Niko" | 760 | false +| "Hannah" | 260 | false +| "Keisha" | 250 | false 3+d|Rows: 4 |=== diff --git a/modules/ROOT/pages/deprecations-additions-removals-compatibility.adoc b/modules/ROOT/pages/deprecations-additions-removals-compatibility.adoc index 4b741fa5f..e21adba9f 100644 --- a/modules/ROOT/pages/deprecations-additions-removals-compatibility.adoc +++ b/modules/ROOT/pages/deprecations-additions-removals-compatibility.adoc @@ -2141,7 +2141,7 @@ Changes to the visibility of databases hosted on offline servers. For such databases: -* The `address` column will return `NULL`. +* The `address` column will return `null`. * The `currentStatus` column will return `unknown`. * The `statusMessage` will return `Server is unavailable`. diff --git a/modules/ROOT/pages/expressions/list-expressions.adoc b/modules/ROOT/pages/expressions/list-expressions.adoc index 2426d776b..d370a76ac 100644 --- a/modules/ROOT/pages/expressions/list-expressions.adoc +++ b/modules/ROOT/pages/expressions/list-expressions.adoc @@ -167,7 +167,7 @@ RETURN 3 IN nestedList[0] AS elementPresent |=== -Attempting to reference an element outside the bounds of the `LIST` will return `NULL`, as will attempting to access elements from an empty `LIST`. +Attempting to reference an element outside the bounds of the `LIST` will return `null`, as will attempting to access elements from an empty `LIST`. .Out-of-bounds and empty `LIST` access [source, cypher] @@ -181,7 +181,7 @@ RETURN list[5] AS outOfBound, emptyList[0] AS emptyAccess |=== | outOfBound | emptyAccess -| NULL | NULL +| null | null 2+d|Rows: 1 |=== @@ -340,9 +340,9 @@ RETURN cecil.skills || cecilia.skills AS combinedSkills 1+d|Rows: 1 |=== -If `NULL` is part of a concatenated `LIST`, `NULL` will be a part of the new `LIST`. +If `null` is part of a concatenated `LIST`, `null` will be a part of the new `LIST`. -.Concatenate `LIST` including `NULL` +.Concatenate `LIST` including `null` [source, cypher] ---- RETURN [1, 2] || [3, null] AS listWithNull @@ -353,12 +353,12 @@ RETURN [1, 2] || [3, null] AS listWithNull |=== | listWithNull -| [1, 2, 3, NULL] +| [1, 2, 3, null] 1+d|Rows: 1 |=== -For removing `NULL` values when concatenating `LIST` values, see xref:expressions/list-expressions.adoc#null-list-concatenation-list-comprehension[`NULL`, list concatenation, and list comprehension]. +For removing `null` values when concatenating `LIST` values, see xref:expressions/list-expressions.adoc#null-list-concatenation-list-comprehension[`null`, list concatenation, and list comprehension]. [[add-elements]] == Add elements to a list @@ -562,9 +562,9 @@ RETURN [person IN collect(p) WHERE 'Python' IN person.skills | person.name] AS p 1+d|Rows: 1 |=== -List comprehension can be used to remove any unknown `NULL` values when concatenating `LIST` values. +List comprehension can be used to remove any unknown `null` values when concatenating `LIST` values. -.List comprehension to remove `NULL` values during list concatenation +.List comprehension to remove `null` values during list concatenation // tag::expressions_list_comprehension_concatenation_remove_null[] [source, cypher] ---- diff --git a/modules/ROOT/pages/expressions/map-expressions.adoc b/modules/ROOT/pages/expressions/map-expressions.adoc index 2424c1818..1f1368da7 100644 --- a/modules/ROOT/pages/expressions/map-expressions.adoc +++ b/modules/ROOT/pages/expressions/map-expressions.adoc @@ -228,7 +228,7 @@ RETURN p[dynamicValue] AS names 1+d|Rows: 2 |=== -Referencing a non-existent key in the `MAP` with the `[]` operator will return `NULL`. +Referencing a non-existent key in the `MAP` with the `[]` operator will return `null`. .Dynamically referencing a non-existent `MAP` key [source, cypher] @@ -243,7 +243,7 @@ RETURN map[dynamicKey] AS dynamicValue |=== | dynamicValue -| NULL +| null 1+d|Rows: 1 |=== @@ -271,7 +271,7 @@ mapVariable {mapElement [, ...n]} [NOTE] The key names in a map must be of type `STRING`. + -If `mapVariable` is `NULL`, the projection evaluates to `NULL`. +If `mapVariable` is `null`, the projection evaluates to `null`. .Map projection with a key selector ===== diff --git a/modules/ROOT/pages/expressions/node-relationship-operators.adoc b/modules/ROOT/pages/expressions/node-relationship-operators.adoc index b00ed8979..2cf7e360e 100644 --- a/modules/ROOT/pages/expressions/node-relationship-operators.adoc +++ b/modules/ROOT/pages/expressions/node-relationship-operators.adoc @@ -133,16 +133,16 @@ RETURN p[$propertyName] AS middleName | "Catherine" | "David" -| NULL +| null 1+d|Rows: 3 |=== -== Handling `NULL` values +== Handling `null` values -If a property (or property value) is missing in an expression that uses tries to access a property statically or dynamically, the whole expression will evaluate to `NULL`. +If a property (or property value) is missing in an expression that uses tries to access a property statically or dynamically, the whole expression will evaluate to `null`. The query below performs a xref:expressions/string-operators.adoc[string concatentation] on the `firstName`, `middleName`, and `lastName` properties on `Person` nodes. -Note that `NULL` is returned for `Cecilia`, who lacks a `middleName` property. +Note that `null` is returned for `Cecilia`, who lacks a `middleName` property. .String concatenation using node properties [source, cypher] @@ -158,15 +158,15 @@ RETURN p.firstName || ' ' || p.middleName || ' ' || p.lastName AS fullName | "Alice Catherine Baxter" | "Cecil David Ericson" -| NULL +| null 1+d|Rows: 3 |=== -The xref:functions/scalar.adoc#functions-coalesce[`coalesce()`] function can be used to skip the first `NULL` values in an expression. -In the below example, it replaces the first `NULL` value found with an empty `STRING`. +The xref:functions/scalar.adoc#functions-coalesce[`coalesce()`] function can be used to skip the first `null` values in an expression. +In the below example, it replaces the first `null` value found with an empty `STRING`. -.Use the `coalesce()` function to skip `NULL` values +.Use the `coalesce()` function to skip `null` values // tag::expressions_node_relationship_operators_null[] [source, cypher] ---- diff --git a/modules/ROOT/pages/expressions/predicates/boolean-operators.adoc b/modules/ROOT/pages/expressions/predicates/boolean-operators.adoc index de86410cf..10ea52385 100644 --- a/modules/ROOT/pages/expressions/predicates/boolean-operators.adoc +++ b/modules/ROOT/pages/expressions/predicates/boolean-operators.adoc @@ -14,15 +14,15 @@ Cypher contains the following boolean operators: [options="header", cols="^,^,^,^,^,^", width="85%"] |=== |a | b | a `AND` b | a `OR` b | a `XOR` b | `NOT` a -|`FALSE` | `FALSE` | `FALSE` | `FALSE` | `FALSE` | `TRUE` -|`FALSE` | `NULL` | `FALSE` | `NULL` | `NULL` | `TRUE` -|`FALSE` | `TRUE` | `FALSE` | `TRUE` | `TRUE` | `TRUE` -|`TRUE` | `FALSE` | `FALSE` | `TRUE` | `TRUE` | `FALSE` -|`TRUE` | `NULL` | `NULL` | `TRUE` | `NULL` | `FALSE` -|`TRUE` | `TRUE` | `TRUE` | `TRUE` | `FALSE` | `FALSE` -|`NULL` | `FALSE` | `FALSE` | `NULL` | `NULL` | `NULL` -|`NULL` | `NULL` | `NULL` | `NULL` | `NULL` | `NULL` -|`NULL` | `TRUE` | `NULL` | `TRUE` | `NULL` | `NULL` +|`false` | `false` | `false` | `false` | `false` | `true` +|`false` | `null` | `false` | `null` | `null` | `true` +|`false` | `true` | `false` | `true` | `true` | `true` +|`true` | `false` | `false` | `true` | `true` | `false` +|`true` | `null` | `null` | `true` | `null` | `false` +|`true` | `true` | `true` | `true` | `false` | `false` +|`null` | `false` | `false` | `null` | `null` | `null` +|`null` | `null` | `null` | `null` | `null` | `null` +|`null` | `true` | `null` | `true` | `null` | `null` |=== [[example-graph]] diff --git a/modules/ROOT/pages/expressions/predicates/index.adoc b/modules/ROOT/pages/expressions/predicates/index.adoc index 7ca49610d..ce68429c0 100644 --- a/modules/ROOT/pages/expressions/predicates/index.adoc +++ b/modules/ROOT/pages/expressions/predicates/index.adoc @@ -1,7 +1,7 @@ = Predicates :Description: Overview of the predicate expressions in Cypher. -Predicates evaluate to a `BOOLEAN` value (`TRUE`, `FALSE`, or `NULL`), and are frequently used for filtering in xref:clauses/where.adoc[`WHERE`] subclauses. +Predicates evaluate to a `BOOLEAN` value (`true`, `false`, or `null`), and are frequently used for filtering in xref:clauses/where.adoc[`WHERE`] subclauses. This chapter is divided into the following sections: diff --git a/modules/ROOT/pages/expressions/predicates/list-operators.adoc b/modules/ROOT/pages/expressions/predicates/list-operators.adoc index 78bd021c8..3e6742617 100644 --- a/modules/ROOT/pages/expressions/predicates/list-operators.adoc +++ b/modules/ROOT/pages/expressions/predicates/list-operators.adoc @@ -112,7 +112,7 @@ Only `Cecilia` is returned because she shares a `role` with `Cecil` (no `Person` ===== The presence of duplicate values in a `LIST` does not affect the result of the `IN` operator, which checks whether an element appears at least once. -For example, the below query returns `TRUE` (two `Person` nodes are `39` years old). +For example, the below query returns `true` (two `Person` nodes are `39` years old). .Membership check in a `LIST` with duplicate values [source, cypher] @@ -127,7 +127,7 @@ RETURN 39 IN allAges AS listWithDuplicates |=== | listWithDuplicates -| TRUE +| true 1+d|Rows: 1 |=== @@ -136,14 +136,14 @@ RETURN 39 IN allAges AS listWithDuplicates [[null-behavior]] -== `NULL` behavior +== `null` behavior -When `NULL` is involved in a membership check, the result is will be `NULL`. +When `null` is involved in a membership check, the result is will be `null`. -.Using the `IN` operator with `NULL` +.Using the `IN` operator with `null` [source, cypher] ---- -RETURN NULL IN [1, 2, NULL] AS nullInList, 123 IN NULL AS valueInNull +RETURN null IN [1, 2, null] AS nullInList, 123 IN null AS valueInNull ---- .Result @@ -151,18 +151,18 @@ RETURN NULL IN [1, 2, NULL] AS nullInList, 123 IN NULL AS valueInNull |=== | nullInList | valueInNull -| NULL | NULL +| null | null 2+d|Rows: 1 |=== -To check if `NULL` is a member of a `LIST`, use the xref:functions/predicate.adoc#functions-any[`any()`] function: +To check if `null` is a member of a `LIST`, use the xref:functions/predicate.adoc#functions-any[`any()`] function: -.Checking if `NULL` is a member of a `LIST` +.Checking if `null` is a member of a `LIST` // tag::expressions_predicates_list_operators_check_null[] [source, cypher] ---- -RETURN any(x IN [1, 2, NULL] WHERE x IS NULL) AS containsNull +RETURN any(x IN [1, 2, null] WHERE x IS NULL) AS containsNull ---- // end::expressions_predicates_list_operators_check_null[] @@ -171,7 +171,7 @@ RETURN any(x IN [1, 2, NULL] WHERE x IS NULL) AS containsNull |=== | containsNull -| TRUE +| true 1+d|Rows: 1 |=== @@ -180,7 +180,7 @@ RETURN any(x IN [1, 2, NULL] WHERE x IS NULL) AS containsNull == Nested lists When used with nested `LIST` values, the `IN` operator evaluates whether a `LIST` is an exact match to any of the nested `LIST` values that are part of an outer `LIST`. -Partial matches of individual elements within a nested `LIST` will return `FALSE`. +Partial matches of individual elements within a nested `LIST` will return `false`. .Checking for membership in nested `LIST` values [source, cypher] @@ -193,7 +193,7 @@ RETURN [0, 2] IN [[1, 2], [3, 4]] AS listInNestedList |=== | listInNestedList -| FALSE +| false 1+d|Rows: 1 |=== @@ -212,7 +212,7 @@ RETURN [3, 4] IN [[1, 2], [3, 4]] AS listInNestedList |=== | listInNestedList -| TRUE +| true 1+d|Rows: 1 |=== @@ -229,7 +229,7 @@ RETURN [1] IN [[1, 2], [3, 4]] AS listInNestedTest |=== | listInNestedList -| FALSE +| false 1+d|Rows: 1 |=== @@ -249,14 +249,14 @@ RETURN all(x IN sub WHERE x IN list) AS subInList ---- // end::expressions_predicates_list_operators_list_subset[] -This returns `TRUE` because all elements in `sub` are part of `list`. +This returns `true` because all elements in `sub` are part of `list`. .Result [role="queryresult",options="header,footer",cols="1* AS isIntList ---- @@ -293,9 +293,9 @@ RETURN val, val IS :: LIST AS isIntList |=== | val | isIntList -| [42] | TRUE -| [42, NULL] | TRUE -| [42, 42.0] | FALSE +| [42] | true +| [42, null] | true +| [42, 42.0] | false 2+d|Rows: 3 |=== @@ -314,7 +314,7 @@ RETURN |=== | isNothingList | isIntList | isFloatNotNullList -| TRUE | TRUE | TRUE +| true | true | true 3+d|Rows: 1 |=== @@ -331,7 +331,7 @@ RETURN booleanList IS :: LIST as isMixedList |=== | isMixedList -| TRUE +| true 1+d|Rows: 1 |=== diff --git a/modules/ROOT/pages/expressions/string-operators.adoc b/modules/ROOT/pages/expressions/string-operators.adoc index 270ce87d4..530da2389 100644 --- a/modules/ROOT/pages/expressions/string-operators.adoc +++ b/modules/ROOT/pages/expressions/string-operators.adoc @@ -128,7 +128,7 @@ RETURN 'My favorite fruits are: ' || 'apples' || ', ' || 'bananas' || ', and ' | |=== [[list-values-and-null]] -== String concatenation, `LIST` values, and `NULL` +== String concatenation, `LIST` values, and `null` `STRING` values in a `LIST` can be concatenated using the xref:functions/list.adoc#functions-reduce[`reduce()`] function. @@ -171,17 +171,17 @@ RETURN 'My favorite fruits are: ' || reduce(acc = head(list), item IN tail(list) 1+d| Rows: 1 |=== -Concatenating a `STRING` value with `NULL` returns `NULL`. -To skip the first `NULL` value in a list of expressions, use the xref:functions/scalar.adoc#functions-coalesce[`coalesce()`] function. +Concatenating a `STRING` value with `null` returns `null`. +To skip the first `null` value in a list of expressions, use the xref:functions/scalar.adoc#functions-coalesce[`coalesce()`] function. -In the following query, `coalesce()` is used with `reduce()` to replace each `NULL` value in the `LIST` with an empty `STRING` (`''`). -This ensures that all `NULL` values are effectively skipped, allowing the `reduce()` function to concatenate the remaining `STRING` values. +In the following query, `coalesce()` is used with `reduce()` to replace each `null` value in the `LIST` with an empty `STRING` (`''`). +This ensures that all `null` values are effectively skipped, allowing the `reduce()` function to concatenate the remaining `STRING` values. -.Using `reduce()` and `coalesce()` to skip `NULL` values when concatenating a `LIST` +.Using `reduce()` and `coalesce()` to skip `null` values when concatenating a `LIST` // tag::expressions_string_concatenation_concatenate_skip_null[] [source, cypher] ---- -WITH ['Apples', NULL, 'Bananas', NULL, 'Oranges', NULL] AS list +WITH ['Apples', null, 'Bananas', null, 'Oranges', null] AS list RETURN 'My favorite fruits are: ' || reduce(acc = head(list), item IN tail(list) | acc || coalesce(', ' || item, '')) || '.' AS result ---- // end::expressions_string_concatenation_concatenate_skip_null[] @@ -196,8 +196,8 @@ RETURN 'My favorite fruits are: ' || reduce(acc = head(list), item IN tail(list) 1+d|Rows: 1 |=== -If a `LIST` is empty, `reduce()` will return `NULL` because there are no elements to process. -In such cases, `coalesce()` can be used to replace the `NULL` with a default value (e.g., `'none'`). +If a `LIST` is empty, `reduce()` will return `null` because there are no elements to process. +In such cases, `coalesce()` can be used to replace the `null` with a default value (e.g., `'none'`). .Using `reduce()` and `coalesce()` to handle empty `LIST` values [source, cypher] diff --git a/modules/ROOT/pages/functions/predicate.adoc b/modules/ROOT/pages/functions/predicate.adoc index 25c6a714f..a8194578a 100644 --- a/modules/ROOT/pages/functions/predicate.adoc +++ b/modules/ROOT/pages/functions/predicate.adoc @@ -169,7 +169,7 @@ RETURN any(i IN emptyList WHERE true) as anyTrue, any(i IN emptyList WHERE false |=== | anyTrue | anyFalse -| FALSE | FALSE +| false | false 2+d|Rows: 1 |=== @@ -466,7 +466,7 @@ RETURN single(i IN emptyList WHERE true) as singleTrue, single(i IN emptyList WH |=== | singleTrue | singleFalse -| FALSE | FALSE +| false | false 2+d|Rows: 1 |=== diff --git a/modules/ROOT/pages/functions/scalar.adoc b/modules/ROOT/pages/functions/scalar.adoc index 79b6663ec..86a4f20c7 100644 --- a/modules/ROOT/pages/functions/scalar.adoc +++ b/modules/ROOT/pages/functions/scalar.adoc @@ -134,7 +134,7 @@ The number of Unicode characters in the `STRING` is returned. | *Syntax* 3+| `coalesce(input)` | *Description* 3+| Returns the first non-null value in a list of expressions. .2+| *Arguments* | *Name* | *Type* | *Description* -| `input` | `ANY` | If this is the first non-`NULL` value, it will be returned. +| `input` | `ANY` | If this is the first non-`null` value, it will be returned. | *Returns* 3+| `ANY` |=== @@ -1256,7 +1256,7 @@ With this in mind, the below list contains all supported types (as of Neo4j 5.13 * Predefined types ** `NOTHING` -** `NULL` +** `null` ** `BOOLEAN` ** `STRING` ** `INTEGER` diff --git a/modules/ROOT/pages/functions/vector.adoc b/modules/ROOT/pages/functions/vector.adoc index cd2cea108..72db5f079 100644 --- a/modules/ROOT/pages/functions/vector.adoc +++ b/modules/ROOT/pages/functions/vector.adoc @@ -29,9 +29,9 @@ For more details, see the {link-vector-indexes}#similarity-functions[vector inde .Considerations |=== -| `vector.similarity.cosine(NULL, NULL)` returns `NULL`. -| `vector.similarity.cosine(NULL, b)` returns `NULL`. -| `vector.similarity.cosine(a, NULL)` returns `NULL`. +| `vector.similarity.cosine(null, null)` returns `null`. +| `vector.similarity.cosine(null, b)` returns `null`. +| `vector.similarity.cosine(a, null)` returns `null`. | Both vectors must be of the same dimension. | Both vectors must be {link-vector-indexes}#indexes-vector-similarity-cosine[*valid*] with respect to cosine similarity. | The implementation is identical to that of the latest available vector index provider (`vector-2.0`). @@ -59,9 +59,9 @@ For more details, see the {link-vector-indexes}#similarity-functions[vector inde .Considerations |=== -| `vector.similarity.euclidean(NULL, NULL)` returns `NULL`. -| `vector.similarity.euclidean(NULL, b)` returns `NULL`. -| `vector.similarity.euclidean(a, NULL)` returns `NULL`. +| `vector.similarity.euclidean(null, null)` returns `null`. +| `vector.similarity.euclidean(null, b)` returns `null`. +| `vector.similarity.euclidean(a, null)` returns `null`. | Both vectors must be of the same dimension. | Both vectors must be {link-vector-indexes}#indexes-vector-similarity-euclidean[*valid*] with respect to Euclidean similarity. | The implementation is identical to that of the latest available vector index provider (`vector-2.0`). diff --git a/modules/ROOT/pages/subqueries/call-subquery.adoc b/modules/ROOT/pages/subqueries/call-subquery.adoc index f3bdf049c..1363ec887 100644 --- a/modules/ROOT/pages/subqueries/call-subquery.adoc +++ b/modules/ROOT/pages/subqueries/call-subquery.adoc @@ -484,7 +484,7 @@ Now all `Player` nodes, regardless of whether they have any `PLAYS_FOR` relation | "Player A" | "Team A" | "Player B" | "Team A" -| "Player C" | NULL +| "Player C" | null | "Player D" | "Team B" | "Player E" | "Team C" | "Player F" | "Team C" diff --git a/modules/ROOT/pages/subqueries/subqueries-in-transactions.adoc b/modules/ROOT/pages/subqueries/subqueries-in-transactions.adoc index 5c8572e6b..78b730bdd 100644 --- a/modules/ROOT/pages/subqueries/subqueries-in-transactions.adoc +++ b/modules/ROOT/pages/subqueries/subqueries-in-transactions.adoc @@ -911,34 +911,34 @@ RETURN status.transactionId AS transaction, status.committed AS commitStatus, st +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | transaction | commitStatus | errorMessage | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| "neo4j-transaction-486" | FALSE | "ForsetiClient[transactionId=486, clientId=8] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=485, clientId=13]} on NODE_RELATIONSHIP_GROUP_DELETE(18) because holders of that lock are waiting for ForsetiClient[transactionId=486, clientId=8]. | +| "neo4j-transaction-486" | false | "ForsetiClient[transactionId=486, clientId=8] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=485, clientId=13]} on NODE_RELATIONSHIP_GROUP_DELETE(18) because holders of that lock are waiting for ForsetiClient[transactionId=486, clientId=8]. | | | \ Wait list:ExclusiveLock[ | | | \ Client[485] waits for [ForsetiClient[transactionId=486, clientId=8]]]" | -| "neo4j-transaction-486" | FALSE | "ForsetiClient[transactionId=486, clientId=8] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=485, clientId=13]} on NODE_RELATIONSHIP_GROUP_DELETE(18) because holders of that lock are waiting for ForsetiClient[transactionId=486, clientId=8]. | +| "neo4j-transaction-486" | false | "ForsetiClient[transactionId=486, clientId=8] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=485, clientId=13]} on NODE_RELATIONSHIP_GROUP_DELETE(18) because holders of that lock are waiting for ForsetiClient[transactionId=486, clientId=8]. | | | \ Wait list:ExclusiveLock[ | | | \ Client[485] waits for [ForsetiClient[transactionId=486, clientId=8]]]" | -| "neo4j-transaction-486" | FALSE | "ForsetiClient[transactionId=486, clientId=8] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=485, clientId=13]} on NODE_RELATIONSHIP_GROUP_DELETE(18) because holders of that lock are waiting for ForsetiClient[transactionId=486, clientId=8]. | +| "neo4j-transaction-486" | false | "ForsetiClient[transactionId=486, clientId=8] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=485, clientId=13]} on NODE_RELATIONSHIP_GROUP_DELETE(18) because holders of that lock are waiting for ForsetiClient[transactionId=486, clientId=8]. | | | \ Wait list:ExclusiveLock[ | | | \ Client[485] waits for [ForsetiClient[transactionId=486, clientId=8]]]" | -| "neo4j-transaction-486" | FALSE | "ForsetiClient[transactionId=486, clientId=8] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=485, clientId=13]} on NODE_RELATIONSHIP_GROUP_DELETE(18) because holders of that lock are waiting for ForsetiClient[transactionId=486, clientId=8]. | +| "neo4j-transaction-486" | false | "ForsetiClient[transactionId=486, clientId=8] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=485, clientId=13]} on NODE_RELATIONSHIP_GROUP_DELETE(18) because holders of that lock are waiting for ForsetiClient[transactionId=486, clientId=8]. | | | \ Wait list:ExclusiveLock[ | | | \ Client[485] waits for [ForsetiClient[transactionId=486, clientId=8]]]" | -| "neo4j-transaction-486" | FALSE | "ForsetiClient[transactionId=486, clientId=8] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=485, clientId=13]} on NODE_RELATIONSHIP_GROUP_DELETE(18) because holders of that lock are waiting for ForsetiClient[transactionId=486, clientId=8]. | +| "neo4j-transaction-486" | false | "ForsetiClient[transactionId=486, clientId=8] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=485, clientId=13]} on NODE_RELATIONSHIP_GROUP_DELETE(18) because holders of that lock are waiting for ForsetiClient[transactionId=486, clientId=8]. | | | \ Wait list:ExclusiveLock[ | | | \ Client[485] waits for [ForsetiClient[transactionId=486, clientId=8]]]" | -| "neo4j-transaction-486" | FALSE | "ForsetiClient[transactionId=486, clientId=8] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=485, clientId=13]} on NODE_RELATIONSHIP_GROUP_DELETE(18) because holders of that lock are waiting for ForsetiClient[transactionId=486, clientId=8]. | +| "neo4j-transaction-486" | false | "ForsetiClient[transactionId=486, clientId=8] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=485, clientId=13]} on NODE_RELATIONSHIP_GROUP_DELETE(18) because holders of that lock are waiting for ForsetiClient[transactionId=486, clientId=8]. | | | \ Wait list:ExclusiveLock[ | | | \ Client[485] waits for [ForsetiClient[transactionId=486, clientId=8]]]" | -| "neo4j-transaction-486" | FALSE | "ForsetiClient[transactionId=486, clientId=8] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=485, clientId=13]} on NODE_RELATIONSHIP_GROUP_DELETE(18) because holders of that lock are waiting for ForsetiClient[transactionId=486, clientId=8]. | +| "neo4j-transaction-486" | false | "ForsetiClient[transactionId=486, clientId=8] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=485, clientId=13]} on NODE_RELATIONSHIP_GROUP_DELETE(18) because holders of that lock are waiting for ForsetiClient[transactionId=486, clientId=8]. | | | \ Wait list:ExclusiveLock[ | | | \ Client[485] waits for [ForsetiClient[transactionId=486, clientId=8]]]" | -| "neo4j-transaction-486" | FALSE | "ForsetiClient[transactionId=486, clientId=8] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=485, clientId=13]} on NODE_RELATIONSHIP_GROUP_DELETE(18) because holders of that lock are waiting for ForsetiClient[transactionId=486, clientId=8]. | +| "neo4j-transaction-486" | false | "ForsetiClient[transactionId=486, clientId=8] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=485, clientId=13]} on NODE_RELATIONSHIP_GROUP_DELETE(18) because holders of that lock are waiting for ForsetiClient[transactionId=486, clientId=8]. | | | \ Wait list:ExclusiveLock[ | | | \ Client[485] waits for [ForsetiClient[transactionId=486, clientId=8]]]" | -| "neo4j-transaction-486" | FALSE | "ForsetiClient[transactionId=486, clientId=8] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=485, clientId=13]} on NODE_RELATIONSHIP_GROUP_DELETE(18) because holders of that lock are waiting for ForsetiClient[transactionId=486, clientId=8]. | +| "neo4j-transaction-486" | false | "ForsetiClient[transactionId=486, clientId=8] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=485, clientId=13]} on NODE_RELATIONSHIP_GROUP_DELETE(18) because holders of that lock are waiting for ForsetiClient[transactionId=486, clientId=8]. | | | \ Wait list:ExclusiveLock[ | | | \ Client[485] waits for [ForsetiClient[transactionId=486, clientId=8]]]" | -| "neo4j-transaction-486" | FALSE | "ForsetiClient[transactionId=486, clientId=8] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=485, clientId=13]} on NODE_RELATIONSHIP_GROUP_DELETE(18) because holders of that lock are waiting for ForsetiClient[transactionId=486, clientId=8]. | +| "neo4j-transaction-486" | false | "ForsetiClient[transactionId=486, clientId=8] can't acquire ExclusiveLock{owner=ForsetiClient[transactionId=485, clientId=13]} on NODE_RELATIONSHIP_GROUP_DELETE(18) because holders of that lock are waiting for ForsetiClient[transactionId=486, clientId=8]. | | | \ Wait list:ExclusiveLock[ | | | \ Client[485] waits for [ForsetiClient[transactionId=486, clientId=8]]]" | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ @@ -971,99 +971,99 @@ The result shows that all transactions are now successful: +-------------------------------------------------+ | transaction | successfulTransaction | +-------------------------------------------------+ -| "neo4j-transaction-500" | TRUE | -| "neo4j-transaction-500" | TRUE | -| "neo4j-transaction-500" | TRUE | -| "neo4j-transaction-500" | TRUE | -| "neo4j-transaction-500" | TRUE | -| "neo4j-transaction-500" | TRUE | -| "neo4j-transaction-500" | TRUE | -| "neo4j-transaction-500" | TRUE | -| "neo4j-transaction-500" | TRUE | -| "neo4j-transaction-500" | TRUE | -| "neo4j-transaction-501" | TRUE | -| "neo4j-transaction-501" | TRUE | -| "neo4j-transaction-501" | TRUE | -| "neo4j-transaction-501" | TRUE | -| "neo4j-transaction-501" | TRUE | -| "neo4j-transaction-501" | TRUE | -| "neo4j-transaction-501" | TRUE | -| "neo4j-transaction-501" | TRUE | -| "neo4j-transaction-501" | TRUE | -| "neo4j-transaction-501" | TRUE | -| "neo4j-transaction-502" | TRUE | -| "neo4j-transaction-502" | TRUE | -| "neo4j-transaction-502" | TRUE | -| "neo4j-transaction-502" | TRUE | -| "neo4j-transaction-502" | TRUE | -| "neo4j-transaction-502" | TRUE | -| "neo4j-transaction-502" | TRUE | -| "neo4j-transaction-502" | TRUE | -| "neo4j-transaction-502" | TRUE | -| "neo4j-transaction-502" | TRUE | -| "neo4j-transaction-504" | TRUE | -| "neo4j-transaction-504" | TRUE | -| "neo4j-transaction-504" | TRUE | -| "neo4j-transaction-504" | TRUE | -| "neo4j-transaction-504" | TRUE | -| "neo4j-transaction-504" | TRUE | -| "neo4j-transaction-504" | TRUE | -| "neo4j-transaction-504" | TRUE | -| "neo4j-transaction-504" | TRUE | -| "neo4j-transaction-504" | TRUE | -| "neo4j-transaction-503" | TRUE | -| "neo4j-transaction-503" | TRUE | -| "neo4j-transaction-503" | TRUE | -| "neo4j-transaction-503" | TRUE | -| "neo4j-transaction-503" | TRUE | -| "neo4j-transaction-503" | TRUE | -| "neo4j-transaction-503" | TRUE | -| "neo4j-transaction-503" | TRUE | -| "neo4j-transaction-503" | TRUE | -| "neo4j-transaction-503" | TRUE | -| "neo4j-transaction-505" | TRUE | -| "neo4j-transaction-505" | TRUE | -| "neo4j-transaction-505" | TRUE | -| "neo4j-transaction-505" | TRUE | -| "neo4j-transaction-505" | TRUE | -| "neo4j-transaction-505" | TRUE | -| "neo4j-transaction-505" | TRUE | -| "neo4j-transaction-505" | TRUE | -| "neo4j-transaction-505" | TRUE | -| "neo4j-transaction-505" | TRUE | -| "neo4j-transaction-506" | TRUE | -| "neo4j-transaction-506" | TRUE | -| "neo4j-transaction-506" | TRUE | -| "neo4j-transaction-506" | TRUE | -| "neo4j-transaction-506" | TRUE | -| "neo4j-transaction-506" | TRUE | -| "neo4j-transaction-506" | TRUE | -| "neo4j-transaction-506" | TRUE | -| "neo4j-transaction-506" | TRUE | -| "neo4j-transaction-506" | TRUE | -| "neo4j-transaction-507" | TRUE | -| "neo4j-transaction-507" | TRUE | -| "neo4j-transaction-507" | TRUE | -| "neo4j-transaction-507" | TRUE | -| "neo4j-transaction-507" | TRUE | -| "neo4j-transaction-507" | TRUE | -| "neo4j-transaction-507" | TRUE | -| "neo4j-transaction-507" | TRUE | -| "neo4j-transaction-507" | TRUE | -| "neo4j-transaction-507" | TRUE | -| "neo4j-transaction-508" | TRUE | -| "neo4j-transaction-508" | TRUE | -| "neo4j-transaction-508" | TRUE | -| "neo4j-transaction-508" | TRUE | -| "neo4j-transaction-508" | TRUE | -| "neo4j-transaction-508" | TRUE | -| "neo4j-transaction-508" | TRUE | -| "neo4j-transaction-508" | TRUE | -| "neo4j-transaction-508" | TRUE | -| "neo4j-transaction-508" | TRUE | -| "neo4j-transaction-509" | TRUE | -| "neo4j-transaction-509" | TRUE | -| "neo4j-transaction-509" | TRUE | +| "neo4j-transaction-500" | true | +| "neo4j-transaction-500" | true | +| "neo4j-transaction-500" | true | +| "neo4j-transaction-500" | true | +| "neo4j-transaction-500" | true | +| "neo4j-transaction-500" | true | +| "neo4j-transaction-500" | true | +| "neo4j-transaction-500" | true | +| "neo4j-transaction-500" | true | +| "neo4j-transaction-500" | true | +| "neo4j-transaction-501" | true | +| "neo4j-transaction-501" | true | +| "neo4j-transaction-501" | true | +| "neo4j-transaction-501" | true | +| "neo4j-transaction-501" | true | +| "neo4j-transaction-501" | true | +| "neo4j-transaction-501" | true | +| "neo4j-transaction-501" | true | +| "neo4j-transaction-501" | true | +| "neo4j-transaction-501" | true | +| "neo4j-transaction-502" | true | +| "neo4j-transaction-502" | true | +| "neo4j-transaction-502" | true | +| "neo4j-transaction-502" | true | +| "neo4j-transaction-502" | true | +| "neo4j-transaction-502" | true | +| "neo4j-transaction-502" | true | +| "neo4j-transaction-502" | true | +| "neo4j-transaction-502" | true | +| "neo4j-transaction-502" | true | +| "neo4j-transaction-504" | true | +| "neo4j-transaction-504" | true | +| "neo4j-transaction-504" | true | +| "neo4j-transaction-504" | true | +| "neo4j-transaction-504" | true | +| "neo4j-transaction-504" | true | +| "neo4j-transaction-504" | true | +| "neo4j-transaction-504" | true | +| "neo4j-transaction-504" | true | +| "neo4j-transaction-504" | true | +| "neo4j-transaction-503" | true | +| "neo4j-transaction-503" | true | +| "neo4j-transaction-503" | true | +| "neo4j-transaction-503" | true | +| "neo4j-transaction-503" | true | +| "neo4j-transaction-503" | true | +| "neo4j-transaction-503" | true | +| "neo4j-transaction-503" | true | +| "neo4j-transaction-503" | true | +| "neo4j-transaction-503" | true | +| "neo4j-transaction-505" | true | +| "neo4j-transaction-505" | true | +| "neo4j-transaction-505" | true | +| "neo4j-transaction-505" | true | +| "neo4j-transaction-505" | true | +| "neo4j-transaction-505" | true | +| "neo4j-transaction-505" | true | +| "neo4j-transaction-505" | true | +| "neo4j-transaction-505" | true | +| "neo4j-transaction-505" | true | +| "neo4j-transaction-506" | true | +| "neo4j-transaction-506" | true | +| "neo4j-transaction-506" | true | +| "neo4j-transaction-506" | true | +| "neo4j-transaction-506" | true | +| "neo4j-transaction-506" | true | +| "neo4j-transaction-506" | true | +| "neo4j-transaction-506" | true | +| "neo4j-transaction-506" | true | +| "neo4j-transaction-506" | true | +| "neo4j-transaction-507" | true | +| "neo4j-transaction-507" | true | +| "neo4j-transaction-507" | true | +| "neo4j-transaction-507" | true | +| "neo4j-transaction-507" | true | +| "neo4j-transaction-507" | true | +| "neo4j-transaction-507" | true | +| "neo4j-transaction-507" | true | +| "neo4j-transaction-507" | true | +| "neo4j-transaction-507" | true | +| "neo4j-transaction-508" | true | +| "neo4j-transaction-508" | true | +| "neo4j-transaction-508" | true | +| "neo4j-transaction-508" | true | +| "neo4j-transaction-508" | true | +| "neo4j-transaction-508" | true | +| "neo4j-transaction-508" | true | +| "neo4j-transaction-508" | true | +| "neo4j-transaction-508" | true | +| "neo4j-transaction-508" | true | +| "neo4j-transaction-509" | true | +| "neo4j-transaction-509" | true | +| "neo4j-transaction-509" | true | +-------------------------------------------------+ ---- diff --git a/modules/ROOT/pages/syntax/keywords.adoc b/modules/ROOT/pages/syntax/keywords.adoc index e1f0fe5ff..1cb475cda 100644 --- a/modules/ROOT/pages/syntax/keywords.adoc +++ b/modules/ROOT/pages/syntax/keywords.adoc @@ -55,7 +55,7 @@ RETURN `true` AS x |=== [NOTE] -The keywords `NOT`, `NULL`, `TYPED`, `NORMALIZED`, `NFC`, `NFD`, `NFKC`, and `NFKD` are not allowed as label names after the keyword `IS` unless they are quoted by backticks. +The keywords `NOT`, `null`, `TYPED`, `NORMALIZED`, `NFC`, `NFD`, `NFKC`, and `NFKD` are not allowed as label names after the keyword `IS` unless they are quoted by backticks. For example, `CREATE (n IS NOT)` is invalid, but `CREATE (n IS ++`NOT`++)` is allowed. == List of keywords @@ -164,7 +164,7 @@ Note that with future functionality, Cypher may be extended with additional keyw === F * `FAIL` -* `FALSE` +* `false` * `FIELDTERMINATOR` * `FINISH` * `FLOAT` @@ -249,7 +249,7 @@ Note that with future functionality, Cypher may be extended with additional keyw * `NOT` * `NOTHING` * `NOWAIT` -* `NULL` +* `null` === O @@ -351,7 +351,7 @@ Note that with future functionality, Cypher may be extended with additional keyw * `TRANSACTIONS` * `TRAVERSE` * `TRIM` -* `TRUE` +* `true` * `TYPE` * `TYPED` * `TYPES` diff --git a/modules/ROOT/pages/values-and-types/ordering-equality-comparison.adoc b/modules/ROOT/pages/values-and-types/ordering-equality-comparison.adoc index 8cf95403d..8ec18d90b 100644 --- a/modules/ROOT/pages/values-and-types/ordering-equality-comparison.adoc +++ b/modules/ROOT/pages/values-and-types/ordering-equality-comparison.adoc @@ -15,9 +15,9 @@ Maps are only equal if they map exactly the same keys to equal values and lists Values of different types are considered as equal according to the following rules: * `PATH` values are treated as lists of alternating nodes and relationships and are equal to all lists that contain an identical sequence of nodes and relationships. -* Testing any value against `NULL` with either the `=` or `<>` operator always evaluates to `NULL`. -This includes `NULL = NULL` and `NULL <> NULL`. -To reliably test if a value is `NULL` use `v IS NULL` or `v IS NOT NULL` (the latter is equivalent to `NOT(v IS NULL)`). +* Testing any value against `null` with either the `=` or `<>` operator always evaluates to `null`. +This includes `null = null` and `null <> null`. +To reliably test if a value is `null` use `v IS NULL` or `v IS NOT NULL` (the latter is equivalent to `NOT(v IS NULL)`). Other combinations of value types cannot be compared with each other. For example, nodes, relationships, and literal maps cannot be compared to one another. @@ -29,12 +29,12 @@ Comparing incomparable values will throw an error. xref:clauses/order-by.adoc[`ORDER BY`] requires that all values are orderable. The following points explain how comparisons are made when using the `\<=`, `<`,`>=`, `>` operators. -* Numerical values are compared for ordering using numerical order (e.g. `3 < 4` is `TRUE`). -* All comparability tests with `java.lang.Double.NaN` evaluate as `FALSE`. -For example, `1 > b` and `1 < b` are both `FALSE` when `b` is NaN. +* Numerical values are compared for ordering using numerical order (e.g. `3 < 4` is `true`). +* All comparability tests with `java.lang.Double.NaN` evaluate as `false`. +For example, `1 > b` and `1 < b` are both `false` when `b` is NaN. * String values are compared for ordering using lexicographic order (e.g. `"x" < "xy"`). -* Boolean values are compared for ordering such that `FALSE < TRUE`. -* When comparing values for ordering, if one of the arguments is `NULL`, the result is always `NULL`. +* Boolean values are compared for ordering such that `false < true`. +* When comparing values for ordering, if one of the arguments is `null`, the result is always `null`. * xref:values-and-types/spatial.adoc[Spatial values] cannot be compared using the operators `\<=`, `<`,`>=`, `>`. To compare spatial values within a specific range, use either the xref:functions/spatial.adoc#functions-withinBBox[`point.withinBBox()`] or the xref:functions/spatial.adoc#functions-point-wgs84-2d[`point()`] function. @@ -60,12 +60,12 @@ Values of different types are ordered based on a predefined hierarchy, from leas * Numbers: xref:values-and-types/property-structural-constructed.adoc[`INTEGER`, `FLOAT`] [NOTE] -`NULL` is ordered after all other values. +`null` is ordered after all other values. .Sorting rules for mixed Cypher types [source, cypher] ---- -WITH [42, "hello", NULL, true, {name: "Alice"}, [1, 2, 3], date("2024-02-10")] AS v +WITH [42, "hello", null, true, {name: "Alice"}, [1, 2, 3], date("2024-02-10")] AS v UNWIND v AS values RETURN values ORDER BY values @@ -80,9 +80,9 @@ ORDER BY values | [1, 2, 3] | 2024-02-10 | "hello" -| TRUE +| true | 42 -| NULL +| null 1+d|Rows: 7 @@ -96,17 +96,17 @@ ORDER BY values * Elements are compared pairwise from the start to the end of the list. The order is defined by the first pair where the elements differ. For example, `[1, 'foo', 3]` is less than `[1, 2, 'bar']` because `'foo'` is less than `2`. -* If one list is shorter, it is padded with an empty element, which is considered less than any other value (including `NULL`). -For example, `[1, 'foo']` is less than `[1, 'foo', 3]`, and `[1]` is less than `[1, NULL]`. +* If one list is shorter, it is padded with an empty element, which is considered less than any other value (including `null`). +For example, `[1, 'foo']` is less than `[1, 'foo', 3]`, and `[1]` is less than `[1, null]`. *Maps are ordered by size, keys, and values:* * Maps are compared primarily by size: the smallest map has the fewest entries. For example, `{a: 1}` is less than `{a: 0, b: 'foo'}`. * Maps of equal size are compared by the alphabetical order of their keys. -For example, `{b: 100, a: 'foo'}` is less than `{a: '', c: NULL}` because `['a', 'b']` is less than `['a', 'c']`. +For example, `{b: 100, a: 'foo'}` is less than `{a: '', c: null}` because `['a', 'b']` is less than `['a', 'c']`. * For maps with identical key sets, the comparison is based on the values. After sorting keys alphabetically, values are compared pairwise. -For example, `{b: 100, a: 'foo'}` is less than `{a: 'foo', b: NULL}` because `['foo', 100]` is less than `['foo', NULL]`. +For example, `{b: 100, a: 'foo'}` is less than `{a: 'foo', b: null}` because `['foo', 100]` is less than `['foo', null]`. For more information about `LIST` and `MAP` values, see xref::values-and-types/property-structural-constructed.adoc#constructed-types[Values and types -> Constructed types]. @@ -143,4 +143,4 @@ If two instants have the same time but different time zones, they are ordered by If they have the same time and offset but different named time zones, they are sorted alphabetically by the time zone name. * Duration values cannot be directly compared. Since the length of a day, month, or year varies, Cypher does not define a strict ordering for durations. -As a result, comparing two durations `(e.g, duration1 < duration2)` will always return `NULL`. +As a result, comparing two durations `(e.g, duration1 < duration2)` will always return `null`. diff --git a/modules/ROOT/pages/values-and-types/property-structural-constructed.adoc b/modules/ROOT/pages/values-and-types/property-structural-constructed.adoc index d3c0c75c5..a64d72745 100644 --- a/modules/ROOT/pages/values-and-types/property-structural-constructed.adoc +++ b/modules/ROOT/pages/values-and-types/property-structural-constructed.adoc @@ -94,7 +94,7 @@ However, not all types can be used in all places. | `MAP` | | `NODE` | `ANY NODE`, `VERTEX`, `ANY VERTEX` | `NOTHING` | -| `NULL` | +| `null` | | `PATH` | | `POINT` | | `PROPERTY VALUE` | `ANY PROPERTY VALUE` @@ -130,7 +130,7 @@ The ordering of types is as follows: * Predefined types ** `NOTHING` - ** `NULL` + ** `null` ** `BOOLEAN` ** `STRING` ** `INTEGER`