@@ -12,6 +12,7 @@ The following are all Neo4j notifications, grouped by category, when they are re
1212* <<_deprecated_notifications, `DEPRECATION` category>>
1313* <<_security_notifications, `SECURITY` category>>
1414* <<_topology_notifications, `TOPOLOGY` category>>
15+ * <<_schema_notifications, `SCHEMA` category>>
1516* <<_generic, `GENERIC` category>>
1617
1718
@@ -923,6 +924,18 @@ The product's default behavior of using a cost-based IDP search algorithm when c
923924For more information, see link:https://neo4j.com/docs/cypher-manual/current/query-tuning/query-options/#cypher-planner[Cypher manual -> Cypher planner].
924925====
925926
927+ .Using the unicode \u0085 in an unescaped identifier
928+ ====
929+ Query::
930+ +
931+ [source,cypher]
932+ ----
933+ RETURN 1 as my\u0085identifier
934+ ----
935+ Description of the returned code::
936+ The Unicode character \`\u0085` is deprecated for unescaped identifiers and will be considered as a whitespace character in the future. To continue using it, escape the identifier by adding backticks around the identifier \`my
identifier`.
937+ ====
938+
926939[#_neo_clientnotification_request_deprecatedformat]
927940=== DeprecatedFormat
928941
@@ -1373,6 +1386,182 @@ Verify that this is the intended server.
13731386
13741387====
13751388
1389+ [#_schema_notifications]
1390+ == `SCHEMA` category
1391+
1392+ Schema notifications provide additional information related to indexes and constraints.
1393+
1394+ [#_neo_clientnotification_schema_indexorconstraintalreadyexists]
1395+ === IndexOrConstraintAlreadyExists
1396+
1397+ .Notification details
1398+ [cols="<1s,<4"]
1399+ |===
1400+ |Code
1401+ m|Neo.ClientNotification.Schema.IndexOrConstraintAlreadyExists
1402+ |Title
1403+ a|`<command>` has no effect.
1404+ |Description
1405+ a|`<conflicting>` already exists.
1406+ |Severity
1407+ m|INFORMATION
1408+ |Category
1409+ m|SCHEMA
1410+ |===
1411+
1412+ .Creating an index when an equivalent index already exists
1413+ ====
1414+ Given a range index on `(:Label \{property})` named `existingRangeIndex`.
1415+
1416+ Command::
1417+ +
1418+ [source, cypher]
1419+ ----
1420+ CREATE INDEX labelProperyRangeIndex IF NOT EXISTS FOR (n:Label) ON (n.property)
1421+ ----
1422+
1423+ Full title of the returned code::
1424+ `CREATE RANGE INDEX labelProperyRangeIndex IF NOT EXISTS FOR (e:Label) ON (e.property)` has no effect.
1425+
1426+ Full description of the returned code::
1427+ `RANGE INDEX existingRangeIndex FOR (e:Label) ON (e.property)` already exists.
1428+
1429+ ====
1430+
1431+ .Creating an index when another unrelated index using that name already exists
1432+ ====
1433+ Given a range index on `(:Label \{property})` named `myIndex`.
1434+
1435+ Command::
1436+ +
1437+ [source, cypher]
1438+ ----
1439+ CREATE TEXT INDEX myIndex IF NOT EXISTS FOR ()-[r:REL_TYPE]-() ON (r.property)
1440+ ----
1441+
1442+ Full title of the returned code::
1443+ `CREATE TEXT INDEX myIndex IF NOT EXISTS FOR ()-[e:REL_TYPE]-() ON (e.property)` has no effect.
1444+
1445+ Full description of the returned code::
1446+ `RANGE INDEX myIndex FOR (e:Label) ON (e.property)` already exists.
1447+
1448+ Suggestions for improvement::
1449+ Choose a different name for the new index and try again.
1450+ +
1451+ [source, cypher]
1452+ ----
1453+ CREATE TEXT INDEX myIndex2 IF NOT EXISTS FOR ()-[r:REL_TYPE]-() ON (r.property)
1454+ ----
1455+
1456+ ====
1457+
1458+ .Creating a constraint when an identical constraint already exists
1459+ ====
1460+ Given a node key constraint on `(:Label \{property})` named `nodeKeyLabelPropertyConstraint`.
1461+
1462+ Command::
1463+ +
1464+ [source, cypher]
1465+ ----
1466+ CREATE CONSTRAINT nodeKeyLabelPropertyConstraint IF NOT EXISTS FOR (n:Label) REQUIRE (n.property) IS NODE KEY
1467+ ----
1468+
1469+ Full title of the returned code::
1470+ `CREATE CONSTRAINT nodeKeyLabelPropertyConstraint IF NOT EXISTS FOR (e:Label) REQUIRE (e.property) IS NODE KEY` has no effect.
1471+
1472+ Full description of the returned code::
1473+ `CONSTRAINT nodeKeyLabelPropertyConstraint FOR (e:Label) REQUIRE (e.property) IS NODE KEY` already exists.
1474+
1475+ ====
1476+
1477+ .Creating a constraint when another unrelated constraint using that name already exists
1478+ ====
1479+ Given a node key constraint on `(:Label \{property})` named `myConstraint`.
1480+
1481+ Command::
1482+ +
1483+ [source, cypher]
1484+ ----
1485+ CREATE CONSTRAINT myConstraint IF NOT EXISTS FOR (n:Label2) REQUIRE (n.property2) IS NOT NULL
1486+ ----
1487+
1488+ Full title of the returned code::
1489+ `CREATE CONSTRAINT myConstraint IF NOT EXISTS FOR (e:Label2) REQUIRE (e.property2) IS NOT NULL` has no effect.
1490+
1491+ Full description of the returned code::
1492+ `CONSTRAINT myConstraint FOR (e:Label) REQUIRE (e.property) IS NODE KEY` already exists.
1493+
1494+ Suggestions for improvement::
1495+ Choose a different name for the new constraint and try again.
1496+ +
1497+ [source, cypher]
1498+ ----
1499+ CREATE CONSTRAINT myConstraint2 IF NOT EXISTS FOR (n:Label2) REQUIRE (n.property2) IS NOT NULL
1500+ ----
1501+
1502+ ====
1503+
1504+ [#_neo_clientnotification_schema_indexorconstraintdoesnotexist]
1505+ === IndexOrConstraintDoesNotExist
1506+
1507+ .Notification details
1508+ [cols="<1s,<4"]
1509+ |===
1510+ |Code
1511+ m|Neo.ClientNotification.Schema.IndexOrConstraintDoesNotExist
1512+ |Title
1513+ a|`<command>` has no effect.
1514+ |Description
1515+ a|`<name>` does not exist.
1516+ |Severity
1517+ m|INFORMATION
1518+ |Category
1519+ m|SCHEMA
1520+ |===
1521+
1522+ .Attempting to drop a non-existing index
1523+ ====
1524+
1525+ Command::
1526+ +
1527+ [source, cypher]
1528+ ----
1529+ DROP INDEX nonExistingIndex IF EXISTS
1530+ ----
1531+
1532+ Full title of the returned code::
1533+ `DROP INDEX nonExistingIndex IF EXISTS` has no effect.
1534+
1535+ Full description of the returned code::
1536+ `nonExistingIndex` does not exist.
1537+
1538+ Suggestions for improvement::
1539+ Verify that this is the intended index and that it is spelled correctly.
1540+
1541+ ====
1542+
1543+ .Attempting to drop a non-existing constraint
1544+ ====
1545+
1546+ Command::
1547+ +
1548+ [source, cypher]
1549+ ----
1550+ DROP CONSTRAINT nonExistingConstraint IF EXISTS
1551+ ----
1552+
1553+ Full title of the returned code::
1554+ `DROP CONSTRAINT nonExistingConstraint IF EXISTS` has no effect.
1555+
1556+ Full description of the returned code::
1557+ `nonExistingConstraint` does not exist.
1558+
1559+ Suggestions for improvement::
1560+ Verify that this is the intended constraint and that it is spelled correctly.
1561+
1562+ ====
1563+
1564+
13761565[#_generic]
13771566== `GENERIC` category
13781567
0 commit comments