-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Neo4j 5 changelog
-
Update the import admin tool with a new
--schema
option that allows Cypher schema commands to be provided to the create indexes/constraints during the import process.Currently, all the data is imported and then the indexes are built followed by all the constraint validation.
This functionality is only available in FULL imports - SPD and incremental imports will follow later.
-
The DUMP/LOAD/BACKUP/RESTORE/AGGREGATE/CHECK/IMPORT commands and Cypher's LOAD CSV can now use Azure Storage URIs where appropriate, ex. neo4j-admin database backup --to-path azb://some-account/some-container/some/directory/ neo4j , neo4j-admin database restore --from-path azb://some-account/some-container/some/directory/ neo4j , neo4j-admin import --nodes azb://some-account/some-container/data/large.csv -- newdb and LOAD CSV FROM 'azb://some-account/some-container/path/to/data.csv' AS line RETURN count(line)
-
A bug fix for format migration. Note that the bug had the effect of preserving some element ids and this is no longer the case, users should expect element ids to change.
-
Improves block format importer performance in some cases where ratio between relationship data imported and the configured page cache was high.
-
Fixes a bug only present in 5.23 that may cause an invalid in-memory state regarding latest committed id after concurrent transactions. Symptoms can include failing backups with message like:
java.lang.IllegalArgumentException: Not a valid range. Range to [xx] must be higher or equal to range from [xx].
. Can be fixed by restarting the server. -
Fixes an issue in
block
format where relationship ids could be incorrectly reused instantly after deletion -
Fixes an issue in
block
format where the creation of huge tokens could lead to database panic. -
Fixes a block format relationship cursor issue reading correct relationships from a node for a specific neighbor node for
ALL_RELATIONSHIPS
selection and both nodes having at least one type that was dense.
-
Added the GQL conformant
OPTIONAL
keyword to procedure and subquery calls. If no results are returned from the procedure or subquery,OPTIONAL CALL
will return null instead of an empty result. -
Introduces
DROP DATABASE name CASCADE ALIASES
, specifyingCASCADE ALIASES
will ensure that any local aliases targeting the database or constituents in the composite database are dropped together with the database instead of throwing an error on existing aliases/constituents. -
Making error messages more general when natively authenticated users are deleted or suspended mid-session.
Removing all privileges from natively authenticated users who are deleted mid-session, making the behaviour consistent with being suspended mid-session.
-
Allow ORDER BY , SKIP/OFFSET , and LIMIT to be used as standalone clauses. The keyword OFFSET is a synonym for SKIP. These are now GQL conformant statements.
-
OIDC HTTP discovery parsing is more tolerant of missing mandatory fields in the IdP discovery response. These missing values can still be overridden by configuration.
-
Fixes issues https://github.com/neo4j/neo4j/issues/13436, https://github.com/neo4j/neo4j/issues/13487, https://github.com/neo4j/neo4j/issues/13491, with incorrect evaluation order of UNION in some updating queries.
-
Added the ability to dynamically reference labels and properties in
SET
andREMOVE
clauses. For example:SET n[$prop]
,REMOVE n[$prop]
,SET n:$($label)
andREMOVE n:$($label)
.
- Introduction of
dbms.cluster.recreateDatabase
procedure, which recreates a database while keeping all RBAC settings. The procedure initiates a process, which when complete, will have synchronized and started all database instances within the cluster. - Changes the internal process when creating a database with designated seeder. The other members may, if possible, update incrementally from the designated seeder instead of throwing away and downloading the entire store.
- Making the rafted status check procedure public under the signature "dbms.cluster.statusCheck()". This procedure can be used to replicate an entry and verify that the raft layer is available. It was previously used by Aura with another signature "internal.dbms.cluster.statusCheck()". The old signature will be available until Aura have switched over to the new one.
- Filter out System Leadership during LeadershipCounter when we have
EQUAL_BALANCING
strategy. - Add option
--temp-path
for backup-related commands (BACKUP, RESTORE, AGGREGATE). This path will be used for temporarily storing backup files until the command is completed.
- Allow authentication and authorization to be controlled on a user-level using Cypher by setting Auth Providers on users. Allow making it mandatory for local db users to exist for authentication to succeed. Includes addition of the
WITH AUTH
flag to theSHOW USERS
command which can be used to view users' Auth Providers (addingWITH AUTH
will return one row per Auth Provider for a given user).
- Add support for docker secrets
- Fixes a bug where duplicated HTTP headers were returned when returning browser content.
-
Fixes an issue in block format importer where some relationships wouldn't be imported if there were lots of relationships for some nodes.
-
Fixes a block format indexing issue where relationship indexes could miss some updates, specifically for multiple relationship creations/updates/deletions for the same node in the same transaction.
-
Fixes an issue where index usage statistics wouldn't be updated for point (bounding box) queries.
-
Increase timeout on consistency checking of dense node stores and id generators
-
Fixes an issue for
block
format where trying to create an index on a lot of (1000+) labels/relationship types/properties would result in database panic. -
Expand the allowed index settings for
vector-2.0
vector index provider. Newly created vector indexes can explicitly enable or disable quantization of the vectors within the index usingvector.quantization.enable
, new indexes will have quantization enabled by default. Previously created vector indexes will continue to work as if quantization is disabled.In addition, the ability to control the advanced customisation of HNSW hyperparameters
vector.hnsw.m
andvector.hnsw.ef_construction
. Please consult the documentation for their meaning and their defaults. Previouslyvector.dimensions
andvector.similarity_function
were required to be set; however, withvector-2.0
indexes, this requirement has been relaxed.vector.similarity_function
will default to'COSINE'
if not specified, and the existence ofvector.dimensions
will ensure additional checks. This allows theOPTIONS
map in Cypher to become optional, though it is recommended to specify the dimensionality and the similarity function. -
Fixes a block format recovery issue that could cause
DataTreeNotEmptyException
to be thrown during recovery. -
Publish last commit batch only after log sync. To prevent publication of index and position that will potentially point to not visible data
-
Prevent interrupted background sampling of a large index on shutdown triggering a blocking resampling on start up. The bug was introduced in 5.15.
- Deprecates naked CALL subqueries and the Importing WITH clause. CALL subqueries must now be scoped e.g CALL (a, b) { ... }.
- Added a scope clause for importing variables into CALL subqueries e.g CALL (a, b) { ... }. This replaces the Importing WITH.
- Added the GQL conformant
TIME ZONE
keyword to Type Predicate Expressions as an alias to theTIMEZONE
keyword. - Introducing Bolt 5.6 with GqlStatusObject
- Fix an issue where the planner would look to use the text index to search for strings that are not yet initialized.
- Introducing checks to make sure that Authentication plugins and Auth plugins (combined authentication and authorization plugins) are forbidden from returning null or blank principals.
- Fixing a bug whereby multiple simultaneous successful external authorizations were not possible for a given user
- Fixes an [issue] (https://github.com/neo4j/neo4j/issues/13467) with showing cartesian product warnings when a valid query has the predicates in a different order.
- Introduce GqlStatusObject API on the server side
- Limited allocation procedures are now available for cluster management
- Correct the
values
field of the response so that it contains separate arrays for each record. - Fix issue with Unmanaged Extensions not being able to bind to
org.neo4j.logging.Log
- Fixes an issue (which was first introduced in 5.19) where record IDs for any internal store in the near vicinity of
4294967295
could be invalidly marked as deleted when growing the ID space beyond that particular ID. - The default store format for new databases in Enterprise Edition is now Block format. Block format supersedes all previous formats and we highly recommend its adoption. The configuration setting
db.format
can be used to override this change and specify a different default store format.
- Introduce
--idle-timeout
argument to Cypher Shell. When set it will exit the application after the specified amount of idle time in interactive mode. - Backup metadata scripts and
SHOW PRIVILEGES AS COMMANDS
will now correctly escape special characters in procedure, function and settings globs. - Fix issue that could result in error
class org.neo4j.cypher.internal.physicalplanning.ast.NullCheckReferenceProperty cannot be cast to class org.neo4j.cypher.internal.expressions.ASTCachedProperty
for some queries. - Fixes an [issue] (https://github.com/neo4j/neo4j/issues/13466, https://github.com/neo4j/neo4j/issues/13473) with planning complex boolean expressions
- Fixed issue that could produce errors like:
Neo.DatabaseError.General.UnknownError key not found: VariableSlotKey(b)
for queries with...RETURN b AS renamedB, count(b)
or similar. - fix bug when resolving quoted aliases with dots in query router
- Improvements to validation and parsing of database names containing '.' characters. Fixed some incorrect behavior with
CREATE DATABASE
and improved error reporting in other cases.
- Register internal lighthouse metrics that will be collected by default
- set default locale of C.UTF-8
- Fixes an issue (which was first introduced in 5.19) where record IDs for any internal store in the near vicinity of 4294967295 could be invalidly marked as deleted when growing the ID space beyond that particular ID.
- Fix issue that could result in error
class org.neo4j.cypher.internal.physicalplanning.ast.NullCheckReferenceProperty cannot be cast to class org.neo4j.cypher.internal.expressions.ASTCachedProperty
for some queries.
- Fixed issue that could produce errors like:
Neo.DatabaseError.General.UnknownError key not found: VariableSlotKey(b)
for queries with...RETURN b AS renamedB, count(b)
or similar.
- The DUMP/LOAD/BACKUP/RESTORE/AGGREGATE/CHECK/IMPORT commands and Cypher's LOAD CSV can now use Google Storage URIs where appropriate, ex.
neo4j-admin database backup --to-path gs://some-bucket/some/directory/ neo4j
,neo4j-admin database restore --from-path gs://some-bucket/some/directory/ neo4j
,neo4j-admin import --nodes gs://my-bucket/data/large.csv -- newdb
andLOAD CSV FROM 'gs://some-bucket/some/path/to/data.csv' AS line RETURN count(line)
- Greatly improved scalability of the block format importer, allowing for good performance even for large data sets.
- Support
CALL {...} IN CONCURRENT TRANSACTIONS
with interpreted runtime. - Bug fix for page cache metric page_cache.usage_ratio, now accurate when transactions are open
- Fix error when executing
SHOW CONSTRAINTS
in a transaction where a constraint has been created. Constraint IDs are not allocated until commit; rather than returning an error, we now render the ID asnull
. - Update log message to error level when index recovery cleanup fails
- Add new logical operator,
SubtractionNodeByLabelsScan
, for patterns such asMATCH (:A1&A2..&!B1&!B2...)...
. - Fixes a bug where it's no longer possible to drop/replace session database
- Fixes a bug where username is always logged with value null.
- Allowing Foreach to interpret scalar values as list similar to Unwind.
- Property-based access control
- Correct error messages displayed when starting a DBMS when unable to determine the admin user.
- GQL conformance: Introduces upper() and lower() functions, which are aliases for the toUpper() and toLower() functions.
- checking OIDC token expiry at the start of tx even when OIDC only configured for AuthN, not AuthZ. Treating OIDC token expiry as AuthN error.
- Use ANTLR based parser by default for parsing Cypher queries, can be disabled by configuration setting
internal.cypher.parser.antlr_enabled=false
. - Add 'Bearer' token authentication support to the HTTP server.
- Add new column
deprecatedBy
toSHOW PROCEDURES
andSHOW FUNCTIONS
to tell if the procedure/function has a replacement when it has been deprecated. - Addresses the performance regression introduced in 5.19 affecting eagerness analysis logic in the Cypher query planner. In some cases, a previously benign write query would either hang or lead to an out-of-memory error during planning.
- Fix bug where csv strings were triple quoted
- Ensure credentials are not left in form after disconnect
- Avoid running
SHOW ALIASES
to show only non-composite aliases in database dropdown - Fix csv export of 100k+ rows
- Fix formatting of large duration values
- Add ‘Bearer’ token authentication support to the HTTP server.
- Netty-tcnative drivers are provided in /lib adding support for OpenSSL 3 network encryption. This allows customers to configure their database for FIPS 140 compliance.
- Allow S3 objects to be accessed from alternative backends via the system properties (
aws.endpointUrls3
,aws.endpointUrlS3
oraws.endpointUrl
) or environments variables (AWS_ENDPOINT_URL_S3
orAWS_ENDPOINT_URL
) - Use the correct setting name in the error message when the
db.memory.transaction.max
limit is exceeded. -
neo4j-admin database load
can now load full Neo4j backups created by Enterprise Edition - Fix a few circumstances where vector similarity scores were provided slightly outside of their documented range due to aggregated floating point uncertainty in large dimensional vectors.
- Fixes a performance issue with recovering many property key, label and relationship type token creations
- Backup metadata scripts and SHOW PRIVILEGES AS COMMANDS will now correctly escape special characters in node, relationship, property and usernames.
- Add option to specify access mode in Cypher shell by command line argument
--access-mode read/write
or command:access-mode read/write
. - It is now possible to reference elements from within a QPP that are not directly adjacent to the QPP.
- Improve back-pressure in parallel runtime to prevent certain query plans, e.g. with existential subqueries, from eagerly accumulating too many intermediate results on servers with high CPU counts.
- Extends the existing
trim()
,ltrim()
andrtrim()
functions to optionally allow the specification of which characters to trim, as well as the addition of abtrim()
function which trims both ends of a string.
- Return false in "available" http endpoint, if database is in "Story copying" state
- Updated ubi8 deprecation warning and removed option for suppressing the warning
- Add
server.http.transaction_idle_timeout
as a replacement for the removeddbms.rest.transaction.idle_timeout
- Add Anonymous Usage Data Reporting
-
GenAI plugin: add support for Vertex AI
taskType
andtitle
embedding parameters -
GenAI plugin: add support for Vertex AI vector encoding models
textembedding-gecko@002
,textembedding-gecko@003
, andtextembedding-gecko-multilingual@001
. -
Perform an additional lease check in clustered environments to ensure the replicated token state is up-to-date before checking for the existence of a token in the database. This fixes a problem, only present in version 5.18, where a token could try to be created a second time directly after a leader switch but fail to be applied because it is non-unique which would cause a database panic.
-
Fixed transaction logs metrics that weren't incremented in cluster settings
-
Add a new version of CDC's Change Identifier to allow their validation based on transaction commit timestamps
This is to allow the change identifiers to be validated against the current transaction log for the provided transaction ID.
This is for the case when a backup/restore has occurred but the restore is to a point in time before an active CDC subscriber. Their current change ID would have a transaction ID ahead of the restored DB but subsequent transaction would have a commit timestamps that is before the new changes.
This change allows this situation to be discovered and an error reported back to the user
-
Update LOAD CSV functionality on Enterprise databases to allow cloud storage URIs to be specified as the source of the data, ex.
LOAD CSV FROM 's3://some-bucket/some/path/to/data.csv' AS line RETURN count(line)
Currently, the behaviour can be disabled by setting
dbms.security.allow_csv_import_from_file_urls
to false. In a future PR, an additional setting will be added that is specific to disabling cloud storage access. PLEASE NOTE thatdbms.security.allow_csv_import_from_file_urls
defaults to true normally but it IS set to false in Aura -
Fixes a rare issue where some internal record IDs could be reused twice in a clustered setting for ID allocations of multiple consecutive IDs and frequent leader switches.
-
When running
neo4j-admin database dump --to-stdout neo4j
any logging output is now directed to standard err rather than standard out (which will contain the actual database dump) -
The database DUMP and LOAD commands can now accept cloud storage URIs on Enterprise databases. For example
neo4j-admin database dump --to-path s3://some-bucket/some/directory/ neo4j
andneo4j-admin database load --from-path s3://some-bucket/some/directory/ neo4j
-
Update
neo4j-admin database import
command on Enterprise databases to allow cloud storage URIs to be specified as the source of the data, ex. neo4j-admin import --nodes s3://my-bucket/data/large.csv -- newdb
- Bug fixes and security updates on IMMUTABLE privileges
- New information about planned Eager operators was added to the plan descriptions produced by EXPLAIN and PROFILE in the 'Detail' column. A new improved eagerness analysis algorithm reduces the number of Eager operators and improves explainability.
- Add the optional keyword
DISTINCT
afterUNION
as the explicit form of aUNION
with duplicate removal. - Adds
||
as a synonym of+
forLIST
andSTRING
concatenation. - Fix bug in pipelined runtime where a fused pipeline following a CALL IN TRANSACTION subquery without RETURN could have incorrect generated code for reading from input rows, which could lead to an IndexOutOfBoundsException.
- In line with OpenID Connect Core 1.0 updates to errata set 2, remove checks on the
azp
claim in OIDC tokens when there are multiple values in theaud
claim. - Add
FINISH
clause, which can be optionally used to define a query that returns no result. - Update Apache Shiro to 2.0.0
- Change error type to ClientError when using an explicit transaction for CALL {} IN TRANSACTIONS
- Validate allowed and denied database values, rejecting ones that are not valid database names.
- The database BACKUP, RESTORE, AGGREGATE and CHECK commands can now accept cloud storage URIs on Enterprise databases. For example
neo4j-admin database backup --to-path s3://some-bucket/some/directory/ neo4j
andneo4j-admin database restore --from-path s3://some-bucket/some/directory/ neo4j
- set permissions on /var/lib/neo4j/bin to 755
- Memory leak fixed when using the Kubernetes resolver
- Introduce and default to a new vector search index provider,
vector-2.0
. It supports up to 4096 dimensional vectors, integral element vectors, an improved cosine similarity implementation, and relationship vector indexes. - Added support for the OpenAI
text-embedding-3-large
andtext-embedding-3-small
models, as well as thedimensions
parameter, to the GenAI plugin. - Added support for using Azure OpenAI as the embedding provider in the GenAI plugin
- Added pairwise vector similarity functions
vector.similarity.euclidean
andvector.similarity.cosine
.
-
Extends the Simple
CASE
expression, allowing comma separatedWHEN operands
as well as extended comparison operators. -
INSERT can now be used as a synonym of CREATE when creating graph elements
-
Adds support to execute CALL IN TRANSACTIONS on composite databases. For example:
LOAD CSV FROM '%s' AS line CALL { USE %s WITH line CREATE (n:Number {value:toInteger(line[0])}) RETURN n } IN TRANSACTIONS OF 1 ROW RETURN n.value
- Fixes an issue where a cursor could be kept open pointing to an old raft log file which could block pruning from properly deleting log history.
- added docker default configuration for recovery address to match similar overrides for raft and discovery addresses
- Move the CDC procedures [cdc.earliest, cdc.current and cdc.current] into the database namespace [db.cdc.earliest, db.cdc.current and db.cdc.current]
- In FULL mode, when updating a node that was also part of either a new or deleted relationship change, the BEFORE state for that entity did not contain all the node’s properties - only the logical key properties.
-
CREATE INDEX ... IF NOT EXISTS ...
,CREATE CONSTRAINT ... IF NOT EXISTS ...
,DROP INDEX ... IF EXISTS
, andDROP CONSTRAINT ... IF EXISTS
now return a notification if the index/constraint attempted to be created already exists or attempted to be dropped doesn't exist, that is if the command does nothing. - Add additional logging at WARN for tokens missing
iat
,exp
and with bad or missingsub
andaud
. Also make the missing public key error log at WARN instead of DEBUG. - Improve caching when obfuscating literals in the query log.
-
WGS84 invalid coordinate error
for large spatial distances, see neo4j/neo4j#13384. - Fix issue with EXPLAIN and nested temporal types leading to a
failed to pretty print RuntimeConstant
error. - Add argument
--notifications
to Cypher Shell to enable notifications in interactive mode. - Fix a bug where in some circumstances when OpenID Connect discovery was configured, values from the discovery endpoint could displace values from neo4j.conf which should take precedence.
- Fix a bug where a query using
&
conjunction like e.g.CREATE (:A&B)
would create a node without the labels. - Adds a normailze predicate expression,
IS [NOT] NORMALIZED
, which is used to check if a string is normalized according to the given normal form, defaulting toNFC
. Normalization makes it possible to determine if two Unicode strings are equivalent to each other. - Add string normalize function.
- Allow Cypher Shell users to control the statement history by argument
--history <path>|in-memory
or environmental variableNEO4J_CYPHER_SHELL_HISTORY
.
- Add RHEL 9 based images and deprecate RHEL8 ones
- Add HTTP/2 support for HTTP server
- Constraint indexes waiting for their owning constraint to be created will no longer come online upon a restart.
- Fixes a bug in
neo4j-admin server report
where the command would only collect information for the default database, and transaction logs could be missed. - Fix incorrect check point flushed bytes metric type in CheckPointingMetrics
-
Wrap internal parser errors in SyntaxException and improve EOF error message.
This way, the errors will have the Neo4j status Neo.ClientError.Statement.SyntaxError instead of Neo.Database.General.UnknownError, meaning they will stop polluting the debug log.
-
Allow for parameters for the index/constraint name in
CREATE INDEX
,DROP INDEX
,CREATE CONSTRAINT
andDROP CONSTRAINT
commands, for exampleCREATE INDEX $name FOR (n:Label) ON (n.property)
. -
Expand the
LOAD
privilege to support CIDR ranges, e.g.GRANT LOAD ON CIDR "127.0.0.1/32" TO role
. -
Solve https://github.com/neo4j/neo4j/issues/13113 by allowing convertible types in reduce. E.g.
RETURN reduce(a=[1], b in [["a"]] | a+b)
will return[1, "a"]
instead of failing with a type error.
- Enable core members to perform a snapshot download without a leader present.
- Add setting to specify read transactions on cypher queries
- Ensure right protocol is used for http reachablity check
- Fix element-id showing incorrectly in table
- Respect
visible
field in SSO provider configuration - Only show non-composite aliases in database dropdown
- Update outdated documentation links
-
neo4j-admin database import
normalization behavior for array types have been reverted to 5.13, which means thatbyte[]
,short[]
,int[]
andfloat[]
properties will not be normalized into the corresponding Cypher types:long[]
,long[]
,long[]
, anddouble[]
respectively. -
Prevent background sampling of large indexes from blocking shutdown
-
Updating AWS SDK to V2.20.162 (from v1.12.563). The default credentials chain resolution has been updated in this version (the environment variables have changed to AWS_ACCESS_KEY -> AWS_ACCESS_KEY_ID, AWS_SECRET_KEY -> AWS_SECRET_ACCESS_KEY and
AWS_CREDENTIAL_PROFILES_FILE -> AWS_SHARED_CREDENTIALS_FILE and the system property aws.secretKey -> aws.secretAccessKey) Please see https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/migration-client-credentials.html for more details.
- Throws a type mismatch error in semantic checking instead of at runtime when Map Projections are done on types that are not: MAP, NODE or RELATIONSHIP, fixing the issue: https://github.com/neo4j/neo4j/issues/12997
- Add
CREATE VECTOR INDEX ...
command for node vector indexes. As the vector dimensions and similarity function is mandatory, they need to be specified as part of theindexConfig
in theOPTIONS
map. - Fixes issue https://github.com/neo4j/neo4j/issues/13077 where some valid property names were not allowed when using dot access e.g n._1
- Make the
@Sensitive
procedure/function parameter annotation part of the public API. - Deprecation of some characters in identifiers, of which support will be removed in future versions. For the full list of characters see the Cypher Docs on Deprecations.
- Add support for filtering out vector indexes in
SHOW INDEXES
using keywords (similarly to the other index types):SHOW VECTOR INDEXES
. This is equivalent toSHOW INDEXES WHERE type = 'VECTOR'
. - Fix a null-handling error in
toInteger
. See neo4j/neo4j#13327 and neo4j/neo4j#13337 - Fix bug in type checking where the resulting type of a list concatenation could vary depending on which list was to the left and right, respectively, as reported in https://github.com/neo4j/neo4j/issues/13093
- Update Apache Shiro to 1.13.0
-
Fix issue in store copy which could cause inconsistencies in the store. The problem was that the highest transaction in a store file was not represented correctly, either by not being sent or by using the last checkpointed transaction. Therefore, enough transaction are not present to perform recovery correctly. The fix makes sure the highest committed transaction is always sent.
This PR also enables transactions larger than 2GB on secondaries.
-
Allow aborting the retrieval of lock handle
-
Introduce forward recovery in backup. This may improve the speed of restoring or aggregating artefact chains.
-
WAIT will now include servers that are offline or have not published their ports
-
Add
DEALLOCATED
server state. -
Fix bug introduced in #18359 which would cause restarts during startup of primaries to fail.
-
neo4j-admin database backup
now accepts multiple database name patterns. - Fixes a consistency checker performance issue for databases with many times more relationships than nodes in combination with relationship indexes
-
neo4j-admin database import
now can normalizebyte[]
,short[]
,int[]
, andfloat[]
properties into the corresponding Cypher types;long[]
,long[]
,long[]
, anddouble[]
respectively. - Fixes an issue where
neo4j-admin database check
would report the valid combination of a type constraint and an existence constraint on the same schema as an inconsistency. - Fixes an issue where
neo4j-admin database import full
could run on an online database. This could result in not seeing the imported data until after a restart. - Fix issue where index capabilities were not properly replicated on followers in a cluster, resulting in TEXT and VECTOR indexes rejecting valid queries.
- Users using only native authorization will no longer retain the PUBLIC role when they are suspended.
- Adds a new function
nullIf()
which returns null if the two given parameters are equivalent, otherwise returns the value of the first parameter. - Extends Cypher Type syntax to allow for an exclamation mark as shorthand for
NOT NULL
e.gINTEGER!
- Introduces the keyword
NODETACH
to be optionally used in a delete statement e.gMATCH (b) NODETACH DELETE n
- Fix an issue where Raft could deadlock when trying to deallocate a member at the same time as other members are downloading snapshots.
- Verify the expiration time of all loaded SSL certificates at load time and refuse to use them if they have already expired.
- replaced gosu with su-exec for better security traceability
- Upgrade jetty to 10.0.17 for CVE-2023-36478. Please note: this CVE only impacts HTTP/2 and since the server does not support HTTP/2, it is not affected.
-
Upgraded Netty version 4.1.97.Final -> 4.1.100.Final
-
Fix an issue in back pressure handling that might cause a CDC subscriber to fail when multiple subscribers are scanning the logs with larger gaps.
-
Lifting the vector search index feature out of beta alongside the creation and query procedures,
db.index.vector.createNodeIndex
anddb.index.vector.queryNodes
respectively.The validated and space-optimized vector setting procedure(s) will remain in beta; however, we are deprecating
db.create.setVectorProperty
in favor ofdb.create.setNodeVectorProperty
, both improving naming consistency and extendability. The new procedure no longer returns the node which enhances the user experience of the procedure in more complex queries. -
Upgraded commons-compress to 1.24.0 to mitigate CVE-2023-42503
-
Fix issue where index type query metrics for FULLTEXT and LOOKUP would always report zero.
-
Fixed issue where vector index queries would throw an exception if there were changes in the transaction state, instead of ignoring transaction state as intended.
-
Fixes an issue where terminating the creation of a Constraint, would not also terminate the creation of the backing Index.
-
Size restricted default transaction logs retention policy in the default config
- Improved planning of pattern predicates that previously weren't using
Argument
. - Change Data Capture (CDC) feature, which is based on transaction logs, is now available as a public beta in Aura and Neo4j Enterprise subscription. CDC can be enabled on individual databases in FULL or DIFF mode using Cypher's CREATE or ALTER database commands.
- Introduces
char_length()
andcharacter_length()
functions which returns the number of Unicode characters in aSTRING
. It is an alias of the size()` function. - Enable parallel runtime.
- Solve a bug where Cypher queries containing related equalities in different scopes, e.g.
WHERE any(x IN [1, 2, 3] WHERE a.prop = toInteger(x)) AND a.prop = b.prop
would fail withVariable ... not defined
. Disable the transitiveEqualities rewriter if theWHERE
clause contains multiple scopes. - Procedure and Function signatures have been changed to be inline with the syntax for Cypher Types. Procedures with no return values are no longer appended with
:: VOID
and function return values are no longer surrounded by parenthesis. Procedure signatures will now follow the pattern:"procedureName(param1 :: TYPE, param2 :: TYPE, .., paramN :: TYPE) :: (returnParam1 :: TYPE, returnParam2, .., returnParamN :: TYPE)"
or"procedureName(param1 :: TYPE, param2 :: TYPE, .., paramN :: TYPE)"
and function signatures:"functionName(param1 :: TYPE, param2 :: TYPE, .., paramN :: TYPE) :: TYPE"
, see the Cypher Manual for more information. This alters the output of thesignatures
column inSHOW PROCEDURES
andSHOW FUNCTIONS
. - Introduce
LOAD ALL DATA
privilege to control access toLOAD CSV
from RBAC. Permission toLOAD
all data will be automatically granted to thePUBLIC
role to maintain compatibility. If administrators desire to controlLOADS
they should revoke this privilege and grant privileges to roles as required. - Introduces a new valueType() function which returns a string representation of the most precise value type that the given expression evaluates to.
- Free memory of unused variables during Cypher query execution.
- Resolve a rare bug where aggregation functions would be planned incorrectly, resulting in an error during runtime. This would happen for very specific and rare underlying statistics.
- Fix plan view for DbHits over 32 bit integer max
- Handle more database states
- Expand completion detail by default
- Ensure sso access token is always refreshed on expiry
- Bugfix where neo4j.conf without a trailing new line would get
NEO4J_PLUGINS
settings wrongly appended causing startup failure. - The
streams
plugin was erroneously listed as being a supported plugin in 5.x versions. This has been removed from 5.x docker source (the plugin integration remains in 4.4 and earlier images).
- Upgraded jetty to 10.0.16 to mitigate CVE-2023-40167, CVE-2023-36479, CVE-2023-41900, and GHSA-58qw-p7qm-5rvh.
- Adds the functionality to use a graph which contains the given element id, e.g.
USE graph.byElementId("4:c0a65d96-4993-4b0c-b036-e7ebd9174905:0")
. Is it only possible to use this functionality on a composite database, where one of the constituent contains the element.
- Vector index creation missed a check to limit the dimensionality to an upper supported limit of 2048.
- Fixed an issue with vector index creation during a rolling upgrade from a pre-5.11 database in a cluster, where all members have yet to roll onto the new version. Now vector indexes cannot be created until
dbms.upgrade()
has been called, indicating all members have been upgraded; which is the intended procedure for newer features during a rolling upgrade. - Fixed some issues around vector validation for the vector index. Some extreme component vectors were incorrectly flagged as valid; however, would return a score of
0
, thus not affecting most queries. Otherwise valid cosine query vectors with a final component of ±0 would incorrectly be flagged as invalid. - Fixes an issue that logged vector index as being unknown, preventing recreation commands from being included in
neo4j-admin database copy
logs, and incorrect escaping for some cases of the recreation command withSHOW INDEXES
- Improve argument validation in vector index procedures for better error messages
- Fix issue where vector index based procedures were not being displayed with
SHOW PROCEDURES
- Replace
db.logs.query.annotation_data_as_json_enabled
withdb.logs.query.annotation_data_format
to allow for more formats - Fix wildcards(*) for command-line tools on Windows
- Fix Cypher type normalization during CSV import so that
char
is converted toString
.
- Adds function
db.nameFromElementId
, which resolves the database name for a given element id. - Track memory of de-referenced nodes and relationships in
ProduceResult
. This fix will avoid some OutOfMemoryErrors in queries that returns lots of nodes or relationships. For example in queries likeMATCH (n) RETURN collect(n)
. When returning entities, all their properties and labels will be populated inProduceResult
operator which can cause lots of memory allocations. Before this change we would not track this memory towards the transaction limits. - Fixes https://github.com/neo4j/neo4j/issues/13204 where a query wrongly errored for variables within a CALL subquery that shadow outside variables.
- "Remove transaction size limit in Raft. Before this change, large transactions could be written to the raft log but not read. This could lead to unexpected behaviours, for example a leader could stop sending entries to its followers."
- Database state
STORE_COPYING
will be reported earlier as soon as the decision is made that a store copy is necessary.
- Fixes a bug that changed default certificate hostname verification on HTTP API to be more strict.
-
Add beta support for Vector Indexes on nodes with an approximate k-nearest neighbour query, supporting Euclidean and cosine similarity functions.
Provides the procedures
db.index.vector.createNodeIndex
anddb.index.vector.queryNodes
for creation and querying respectively. Thedb.create.setVectorProperty
is provided in addition, to set a vector property on a given node in a more space-efficient representation than if using Cypher'sSET
. -
Introduce rudimentary index metrics:
<prefix>.index.<indexType>.(queried|populated)
. -
Reduce noise level from ArchiveProgressPrinter
-
Change behaviour of 'ALTER CURRENT USER SET PASSWORD' to auto commit even when executed inside an explicit transaction.
- Expand property type constraints with support for union types, e.g
ZONED TIME | LOCAL TIME
,INTEGER | LIST<INTEGER NOT NULL>
. - Add :sysinfo command to Cypher Shell.
- Extends Type Predicate Expressions to allow for multiple types to be checked at once (closed dynamic unions). E.g.
IS :: INTEGER | FLOAT
- Fixes two bugs around durations with fractional components. Negation was not properly propagated to the components, so that "-P0.5Y" was presented as 6 months rather than -6 months. Fractional minutes > 60 was not properly converted into hours, so that 1 h 72.5 min was presented as 1h 12 min 30s instead of 2h 12 min 30s.
- Fixes https://github.com/neo4j/neo4j/issues/13102 where a variable inside a subquery becomes undefined if after a WITH
- Update Apache Shiro to 1.12.0
- fixes github issue https://github.com/neo4j/neo4j/issues/13215. Graph.names should only return the graphs the user has access to.
- Fixes neo4j/neo4j#13155, neo4j/neo4j#13189 and neo4j/neo4j#13191 where shadowing variables in SKIP and LIMIT caused unexpected errors.
- Fix bug in fused piplined runtime
ProjectEndpoints
operator that could lead to incorrect results.
-
SHOW DATABASE
now reports databases starting and stopping with valuesstarting
andstopping
in columnactualStatus
.
- SSO papercuts (more logs & make downloading them easier)
- Fix bug where :auto hint would not show
- fix bug where metadata was incorrectly formated
- Migrate to Jetty 10
- Add status code to
TransactionFailureException
. Prior to this PR TransactionFailure exception did not have any status code, which meant that they eventually was treated as DatabaseErrors. Also, in this PR the constructors for creating TransactionFailureException without giving a status code are deprecated.
- Adds additional types to org.neo4j.graphdb.schema.PropertyType in the Core API
- Checkpoint
flushed_bytes
metric to show accumulated number of bytes written by checkpoint
- Expand property type constraints with support for list types, e.g
LIST<STRING NOT NULL>
,LIST<INTEGER NOT NULL>
. The inner type of the list type cannot be nullable. - Introduces
<SCALAR TYPE> NOT NULL
variants to the Type Predicate Expression, e.gBOOLEAN NOT NULL
, as well as non-property value types, and simple lists, e.g.MAP
,NODE
,RELATIONSHIP
,PATH
,LIST<SCALAR TYPE>
,ANY
,PROPERTY VALUE
. - The SHOW ALIAS command will now only show the names of the databases targetted by an alias if that database is visible to the user.
- Fixes neo4j/neo4j#13194 where
toBooleanOrNull
with an inner function of null would fail. - The
server.memory.query_cache.shared_cache_num_entries
andserver.memory.query_cache.per_db_cache_num_entries
settings can now be dynamically changed without restarting -
split(s, [a1, a2,...])
should returnnull
if any delimiter (a_i
) isnull
. See neo4j/neo4j#13196 - Fixes $13163 by making deprecation checks more type safe
- Deprecate property references across patterns in
CREATE
, e.g.CREATE (a {p:1}), ({p:a.p})
- Fixed a bug where predicates with uppercase
NODES()
andRELATIONSHIPS()
functions would be planned as aFilter
afterVarExpand
/ShortestPath
instead of being applied directly during path search.
- Added a config setting and a procedure to allow free servers to be auto-enabled.
- Panicked Servers now attempt to rid themselves of all raft leaderships
- updated debian base image to bookworm-slim
- Added new docker image based on redhat/ubi8-minimal
- New metrics counters for server-side routing decisions:
dbms.routing.query.count.*
-
Collapse nested JSON objects in the query logger when
db.logs.query.annotation_data_as_json_enabled
setting is true. -
Introduces property type constraints to restrict the type of node and/or relationship properties. Can be created with commands like:
CREATE CONSTRAINT nodePropertyStringType FOR (n:Label) REQUIRE n.prop IS :: STRING
orCREATE CONSTRAINT relPropertyBooleanType FOR ()-[r:REL_TYPE]-() REQUIRE r.prop IS :: BOOLEAN
-
Restore stateless ConfiguredQueryLogger
-
Period-based transaction log pruning strategy with max size restriction
-
Adds additional types to org.neo4j.graphdb.schema.ConstraintType in the Core API
-
Reduced overheads when running on operation systems with 64K memory page sizes.
-
Fixes an issue where the CSV importer wouldn't enforce the value of
--bad-tolerance
-
Fixed an issue with
neo4j-admin database check
where provided paths with the '.report' extension were incorrectly interpreted as a directory.
- Introduces type predicate expressions to verify the type of a variable, literal, property or other Cypher expression, using syntax like
n.prop IS :: STRING
- Add new column
isDeprecated
toSHOW PROCEDURES
,SHOW FUNCTIONS
, andSHOW SETTINGS
to tell if the procedure/function/setting is deprecated. - Grant, deny and revoke roles and privileges will now generate notifications when the commands have no effect.
- Provide a method for a client application (Neo4j Ops Manager) to request a list of supported privileges which can be granted.
- Extended the language pattern-matching capabilities with the introduction of quantified path patterns. Subpaths containing an arbitrary number of nodes and relationships can now be repeatedly matched against the data.
- Improve error handling and reporting when executing administration commands. This change may result in administration commands returning different, but more accurate status codes.
- Fixes bug where updates would not always get applied before a
LIMIT 0
or aWHERE false
.
- Fixed bug where a server that was a designated seeder for a database couldn't be reallocated for that database.
- DBMS upgrades will now happen automatically, once all servers are on matching versions. You no longer need to call dbms.upgrade().
- Gracefully handle when some databases are unavailable
- Faster bootup & better connection handling
- improve sysinfo frame consistency
- Debug connectivity touch ups
- prevent briefly storing credentials before reading setting
- Added neo4j-admin report functionality to 5.x and 4.4 images.
- Add setting
db.logs.query.annotation_data_as_json_enabled
to configure the output format of annotation data in the query log to be JSON instead of a Cypher map. - Improved configuration file validation output on startup
- Defaults --strict option in import to false due to it causing too large a performance hit in some scenarios
- Configuration file character encoding can be overridden by the
NEO4J_CONFIG_FILE_CHARSET
environment variable - Fix an issue with using certain configuration settings, query options, built-in functions or procedures, containing the letter "i", when running with a Turkish locale.
-
Changed the notification description for deprecated procedure return fields and deprecated functions and procedures without replacement to no longer include 'is no longer supported' as that was misleading.
-
Fix a bug in pipelined runtime that can cause
bitIndex < 0: -1
errors in plans withOrderedUnion
. -
Fix
A bug has occurred in the morsel runtime: The target morsel cannot hold the data to copy
error. See Github issue: neo4j/neo4j#13148. -
Fix overflow when using count store. See Github issue: neo4j/neo4j#13170.
-
Fix issue where an error,
arraycopy: length -1 is negative
occurred, Github issue: neo4j/neo4j#13141 -
Fix a bug with LIMIT that could lead to error:
UnknownError:Failed to evaluate expression
.See Github issue: neo4j/neo4j#13172 and neo4j/neo4j#13173.
-
Fix unexpected
TypeError
when using thetoStringOrNull
function, for example inCREATE (n) RETURN reverse(toStringOrNull(n))
. -
Fix bug in fused pipelined runtime that could lead to lost updates if a property was cached. For example when running queries like
MATCH (n) WITH n.prop AS oldValue SET n.prop = n.prop + 1 WITH n.prop AS newValue RETURN *
concurrently. Note, Cypher will not always prevent lost updates, see documentation for more details. -
Handle large precision values in
round
, gh-issue -
Fixes https://github.com/neo4j/neo4j/issues/13106 and https://github.com/neo4j/neo4j/issues/13109 by changing the way Cypher checks for variable shadowing inside subqueries
-
Backup metadata scripts created using neo4j-admin database backup will now include the cluster topology of the database to be backed up.
-
Fail
LOAD CSV <url>
queries if the URL led to a redirect that we can't follow (protocol changes or Location header is missing). -
Using map projections, e.g,
RETURN n{.p1, p2: 2}
, on composite databases could lead to wrong results. -
allow new unicode characters as whitespace
- DBMS upgrade procedures will check all servers are on matching versions before allowing an upgrade.
- Panic DBMS when local system graph components are behind those installed in the system db
- Fixed java dependencies to use java-17 metapackage provided by both openjdk and oracle java.
- fixed bug where Neo4j will automatically start on installation in debian.
- Fixed 5.x bug where requesting
apoc
plugin actually installsapoc-core
. Also addedapoc-core
as optional plugin.
- Fix
neo4j.dbms.bolt.connections_idle
metric.
-
Introducing a new Status for transaction timeout.
-
Upgraded Jettison version to 1.5.4 to fix CVE-2023-1436
-
Introduces two new constraint types: relationship property uniqueness and relationship key. They can be created with
CREATE CONSTRAINT FOR ()-[r:TYPE]-() REQUIRE r.prop IS UNIQUE
andCREATE CONSTRAINT FOR ()-[r:TYPE]-() REQUIRE r.prop IS REL KEY
, respectively. -
Fixes an issue where a temporary read-only setting for a database could become permanent for some Lucene indexes
-
'neo4j-admin report' now correctly captures kubernetes style configs
-
Fix a bug where some data would be lost from index during a full online backup. The data would still be present in the store, but index would be inconsistent. Affected index types are FULLTEXT or TEXT and the data would only be lost on the backup client, the server would still have the correct data.
-
Fixes an issue where recovery would temporarily hold onto more memory than necessary, making it more likely for recovery to run out of heap on recovering very large transactions.
- Fix broken query cancellation (ctrl+c) in Cypher Shell.
- Plan predicates containing sub-queries independently
- fix bug when reusing variable names in merge clauses with multiple relationships
- Add new option
server.memory.query_cache.sharing_enabled
to toggle the use of a shared cache between databases, replacing the individual caches. When using the shared cache, databases may compete for cache space, but may not observe each others entries. Size of the shared cache is configured withserver.memory.query_cache.shared_cache_num_entries
. - Adapt
:param
and:params
in Cypher Shell to Cypher map based syntax, for example:param {a: 1, b: 1+1}
. The existing arrow syntax is also still supported. - Add WAIT to ALTER DATABASE administration command.
- Deprecate the Cypher query option
connectComponentsPlanner
. - Introduce error and status output for CALL IN TRANSACTIONS
- Queries using composite indexes and duplicated search terms, such as
a.p1 IN [1, 1, 1] AND a.p2 = 3
, could result in incorrect results. - Fix virtual entities creation from procedure in the composite database
- We now log a warning if a security provider is listed in
dbms.security.authentication_providers
ordbms.security.authorization_providers
but is not available for use. - Status code Neo.ClientNotification.Statement.SuboptimalIndexForWildcardQuery has been deprecated for removal.
- Fixes bug with error message "Unexpected error: out of bounds for object " when having
ORDER BY
with a literal in certain cases. - seeking for an empty array would lead to an empty result even if a match existed in the index.
- Fix bug where rafted system databases were unable to pass seed validation when the instances had initial_mode_constraints.
- Fixed a bug where dropping a remote alias would not clean up access privileges on it correctly, resulting in any user with a role having that privilege failing to authorize.
- Add codes to frame notifications
- Add :debug-connectivity frame to help debugging bolt connections
- fix bug where plan view downloads got very low resolution
- Align text table display of nodes with cypher shell
- Fix an issue with
migrate-configuration
admin command where plugin settings were incorrectly handled - Fixes an issue where the importer could interpret a non-existent node
ID
from the relationships data as one of the imported nodes. A flag--strict
has been added to the import command to control this added strict validation of the node IDs and is enabled by default. Running import with strict check enabled may have a negative performance impact during relationship import. - Fix
neo4j-admin database info --from-path
path validation on paths external to standard config, which incorrectly failed on otherwise valid paths to databases. - Fix issue with console appenders in server-logs.xml
- seeking for an empty array would lead to an empty result even if a match existed in the index.
- Introduce COLLECT Subqueries, This collects the results of the subquery into a list.
- Add a command to list configuration settings,
SHOW SETTINGS
. - Fix bug for MERGE queries in pipelined runtime.
- Solve bug where unnecessary sort was planned for some queries beginning with an
OPTIONAL MATCH
.
- Deprecate
dbms.cluster.secondaryReplicationToggle
(usedbms.cluster.secondaryReplicationDisable
) - Splitting out discovery modules
- [1wUXB3gt] Revert setting name back to dbms.max_databases from server.max_databases
-
JVM additional configuration set by environment variable will now stop overriding default jvm configurations.
-
Invalid NEO4J_PLUGINS values now produces a helpful error message.
For example:
NEO4J_PLUGINS='["gds"]'
will now return:"gds" is not a known Neo4j plugin. Options are: apoc apoc-core bloom graph-algorithms graph-data-science graphql n10s streams
- Add ability to run
CALL {} IN TRANSACTIONS
to HTTP Cypher Transactional API using the single request endpoint (e.gdb/neo4j/tx/commit
) - Fix possible deadlock in transaction termination
- HTTP Transactional Cypher API bookmark support
- Fix reporting of JVM memory metrics
-
neo4j-admin database copy
can be used to compact/clean-up a database in-place by setting target to be the same as the source. - Add command for performing configuration validation without starting server:
neo4j-admin server validate-config
- Recovery logging and dependencies adaptation
- Fixes an issue with property key names in importer CSV header couldn't be parsed if they contained
:
characters. Now this works if the header entry also specifies a property type, e.g.my-key:with-colons:string
- Plan count store lookup for relationship endpoints
- It is possible now to
ALTER DATABASE
where the topology is changed with number of primaries increasing chnage from 1 to n. - Deprecation of the usage of differently ordered variables in UNION Clauses
- Fix bug in
MERGE ()-[:R]-()
- Fix a bug where group to role mappings defined for OpenID connect in
dbms.security.oidc.<provider>.authorization.group_to_role_mapping
were not matched correctly with claims containing capital letters. - It is now permitted to repeat a relationship variable in a pattern. This will not return any results, though, as a relationship is not permitted to be traversed more than once. We therefore issue a warning instead.
- Neo4j will now retry calls to the OpenID Connect discovery endpoint if they do not succeed initially. This applies on initial database startup and if the configuration is updated with
dbms.setConfigValue
- Upgraded Apache Shiro from 1.10.1 to 1.11.0. This version includes fixes for CVE-2023-22602
- Fix bug in scoping with self referencing variables in a CREATE clause used in conjunction with list comprehension.
- Fixed a bug where an
OPTIONAL MATCH
withshortestPath
, followed byDISTINCT
, would fail during planning. - Fix a bug where SKIP and LIMIT was ignored for simple
COUNT(...)
aggregation queries that was solved with aCountFromCountStore
plan. - Adds eagerness when returning a full entity node if a node or relationships property or label has been updated.
- Prevent system database bootstrapping with too few Raft members when there are discovery restarts between publishing the Raft member id and observing successful publication.
- Bug fix where a server went back and forth between pipeline and catchup mode even if there was no load.
-
Upgrading from 4.4 to 5.x now prompts user to confirm that backups have been made before continuing the upgrade. During the upgrade the data directory is also moved to a new location to prevent data loss.
- This is a critical bug fix. The system database cannot be migrated from 4.4 to 5.x, and must be rebuilt entirely on upgrade. This left users who upgrade using the deb or rpm packages in an unrecoverable situation where Neo4j will not start because of an unmigratable system database.
- Full upgrade instructions are available at: https://neo4j.com/docs/upgrade-migration-guide/current/version-5/
- Docker now allows users to accept an evaluation license if they do not have a commercial license.
- Fixes an issue where we throw an error if a notification does not have an input position. This happens when queries that produce certain notifications are re-routed to another cluster member with server-side routing. Fixes github issue https://github.com/neo4j/neo4j/issues/13025.
- Fix issue where server-side routed transactions might not be retried when encountering transient errors
- Ability to specify what license is agreed to during install and startup
- Completion scripts for
neo4j
andneo4j-admin
cli for Unix. Automatic installation for deb and rpm - Fixing security issues
- Fixes an issue in import where some date value types didn't handle empty values from the CSV files
- Fixing a couple of small issues with TX log rotation
- Fixes a performance issue creating Lucene indexes where workers ended up waiting unnecessarily on other threads for merging internal Lucene segment files.
- Generates warnings when the user issues a query with a relationship type expression that can never be fulfilled.
- Fixes problems where Cypher queries with
DELETE
insideCALL
would not return correct results. The fix was to insert a missingEager
operator. - for show databases entries with undetermined roles null is returned rather than unknown.
- Fix a bug where frequently executed queries never were re-planned. This could happen if the time between executions of a query was always less than
cypher.min_replan_interval
, and cache space was generous enough. - Introduce new operator, IntersectionNodeByLabelsScan, for more efficiently handle queries like MATCH (n:A&B&C)
- The JWT claim specified in
dbms.security.oidc.<provider>.claims.groups
may now also contain a single group returned as a string as well as a list of groups as was previously required. - fix bug for list literals with in expressions
- Fix bug in privilege evaluation for the
ALTER DATABASE
command, where it was possible to bypass deniedSET DATABASE ACCESS
privilege by leveragingALTER DATABASE
privilege instead.
- Deprecate
server.groups
forinitial.server.tags
(#18629)
-
Upgrading from 4.4 to 5.x now prompts user to confirm that backups have been made before continuing the upgrade. During the upgrade the data directory is also moved to a new location to prevent data loss.
- This is a critical bug fix. The system database cannot be migrated from 4.4 to 5.x, and must be rebuilt entirely on upgrade. This left users who upgrade using the deb or rpm packages in an unrecoverable situation where Neo4j will not start because of an unmigratable system
- Full upgrade instructions are available at: https://neo4j.com/docs/upgrade-migration-guide/current/version-5/
- Update driver
- Fix bug where email was not supported as a username in :server user list
- Fix performance issue with browser background metadata for rbac users
- Handle connections to composite databases
- Fix indent formatting in nested objects
- Fix relationship stylings not getting applied
- show alias name in database selector
- Clear metadata on switching database
- Add neo4j trial banners
- Allow setting parameters on composite databases
- Bugfix: role cluster role incorrectly reported as leader
- Ensure lost connection doesn't break browser
- Bugfix - :auto didn't handle newlines
- Update driver to 5.3.0
- Multiple
:ID
columns can be specified in importer CSV header to form composite IDs referable from the relationship CSV data. - Fixes a bug where
neo4j-admin database import incremental
would both miss enforcing uniqueness of node key constraints and leave them in an inconsistent state after the import. Also fixes that indexes could have nodes/relationships that violated property existence constraints in them after the import even though these nodes/relationship never made it into the actually imported data.
-
SHOW DATABASES
now show correct role (primary/secondary) for stopped databases - Adding password length requirement for creating and alter user. Default 8 characters but can be modified by using configuration setting
dbms.security.auth_minimum_password_length
- A new implementation of the shortest path algorithm.
- Introduced eagerness for overlap between writing a property and property function reads.
- Since 4.4 we were not able to plan value hash joins when the properties are wrapped in a function call. This has been fixed now.
- Extending subquery support in Exists and Count Expressions to allow full non-updating subqueries.
- We now validate that URIs used for communicating with OpenId Connect identity providers use the HTTPS scheme. This is required by the specification, but will break for any customers connecting to their identity providers over HTTP which is no longer supported.
- Previously, the planner did not assume an expression like
n.prop =~ ...
to filter the results more than just the bare existence ofn.prop
. This was changed, such that the planner would prefer to apply these predicates earlier during the query evaluation. - Fix error
Exception closing multiple resources
that could happen for plans using Expand(Into), see Github issue: neo4j/neo4j#12968 - Fixed a bug where an updating query might get stuck in an infinite loop during planning.
-
SHOW DATABASES
returns databases from servers even if the server is offline.
- Fixed leak of drivers and connection pools when server side routing
- Quarantine user databases if recovery fails at startup. A quarantined state will indicate that something is wrong with the store and that manual intervention is required.
- Routing procedure returns all servers which host the given database (secondaries too) as routers
- Fix sysinfo depending on setting missing in 5.0
- Improve messaging around startup of newly created database
- fix northwind data not loading properly due to https redirect
- support connecting to cluster members missing default database
- Docker image will warn if password length is less than 8 characters before attempting to start Neo4j database. If the password is too short the container will fail to start.
- Fix issue where a high frequency of
ALTER ALIAS
would create a large number of threads - Fix issue where temporal functions failed to run directly on composite databases
- Changing the default value of 'dbms.memory.transaction.total.max' to …
- Fix edge case where active transactions metrics were inconsistently decremented on closing a transaction, which lead to
<prefix>.database.transaction.active_read
to potentially appear negative. - Fixes possible crashes when using very small page cache sizes
- Adds additional types to
org.neo4j.graphdb.schema.ConstraintType
in the Core API - Removing internal feature of custom lock manager selection, controlled by
internal.dbms.lock_manager
- Bump commons-text 1.9 -> 1.10.0 so as to address CVE-2022-42889
- The use of the same relationship variable for multiple variable length relationships, e.g.
MATCH ()-[r*]->(), ()-[r*]->()
is deprecated and will be removed in a future version - Upgraded Apache Shiro from 1.9.1 to 1.10.0
- Added DRYRUN option for server commands
- Fixes a bug in pipelined execution graph construction, that could cause some queries with UNION inside an updating subquery to fail with the message
Could not find downstream argumentStateBuffer with id ArgumentStateMapId(x)
. - Fix bug in
Expand(Into)
where we could fail to find existing relationships if the same node is expanded multiple times. - Fix a bug where pressing ctrl+c in Cypher Shell would leave you in an infinite loop of
IOException: Input/Output error
errors.
- Fix bug where store copy failed to retry against certain remotes due to issues with address locking logic.
- Bug fix where a member in a two member raft group couldn't be drained since it was wrongly considered unsafe.
- Bug fix where the wrong artefact was chosen for databases with the same name but different database ids.
- Create a 'synonym' for each of the metric cluster.core. cluster.read_replica. with the correct naming cluster.raft. and cluster.store_copy.
- Include a packaging information file under neo4j home
- New function
graph.propertiesByName()
for retrieving properties of constituent graphs on composite databases. - Fix bug with map projection in Fabric, where the value of the map projection is returned outside a subquery. Fixes github issue https://github.com/neo4j/neo4j/issues/12939
- Range seek indexed searches will not match NaN, consistent with non indexed range searches
- Improved performance for Text indexes using new default provider text-2.0.
- Ability to specify an analyzer in full-text queries.
- Fixes a bug that caused XML logging files not to be included in neo4j-admin server report.
- CSV header for incremental import tool can now specify the value type for IDs in its group using the option
id-type
, e.g:id:ID(MyGroup){label:MyLabel, id-type: int}
-
Various security fixes
This PR is structured to be read either commit by commit, or by looking at the overall diff.
The source code change is a one-liner. The rest of the PR is adding tests which explore the current behaviour, and make sure this one-liner correctly protects from Path traversal vulnerabilities.
Please read below if you want to explore the PR commit by commit.
-
52ca2b078ca2bff9b889e59602841ec09c2e507f Adds about ~1000 tests which measure the current behaviour. Some of these tests highlight existing bugs, when this is the case there is a "TODO" comment.
-
88b492b544e375c1923c7dd86c33dcba3a699bb7 Adds a few tests which measure the current behaviour. Some of these tests highlight existing bugs, when this is the case there is a "TODO" comment.
-
225d316e8ffca3d5c4ffa98127fe0463af539974 One-liner source code change, and fixes the incorrect tests results.
-
-
Fix issue where performance regressed for queries with "impossible predicates"
-
Update the list of valid timezones to include
Europe/Kyiv
, as per IANA 2020b. -
Fix bug where a user could change the database topology with incorrect privileges.
-
Fix bug in pipelined runtime where some queries using AssertingMultiNodeIndexSeekOperator would fail incorrectly with
Merge did not find a matching node...
. For example in queries likeUNWIND [0,1] AS id MERGE (n:A:B {id: id})
, if there is a uniqueness constraint on the id property for both A and B labels. -
Fix bug in pipelined runtime where AssertingMultiNodeIndexSeekOperator failed to perform locking index seeks. This could lead to failures when running concurrent transactions in queries like
MERGE (n:A:B {id: x})
when we have a uniqueness constraint on id for both labels A and B. -
Fixed bug where
DROP DATABASE ... IF EXISTS
andALTER DATABASE ... IF EXISTS ...
could giveDatabaseNotFoundException
when there exists a remote database alias with the name. -
Fixed bug for having * and order by id in same RETURN clause
-
Allow setting/modifying TOPOLOGY without specifying PRIMARY (keeping the default / previous value)
-
Fix a bug where SHOW DATABASES may not include all servers for a database if the servers have the same value for
server.bolt.advertised_address
-
Fix a bug with memory tracking in
CALL IN TRANSACTION
that could lead to an exception with the message "Expected non-negative long value ...". -
Fix bug where columns could be swapped for UNION queries.
-
Fix a bug in pipelined runtime that can cause incorrect row ordering in queries that leverage order and contain an aggregation.
- Default database is created and allocated to initial members during dbms creation in a best effort way
- Add server-side routing support for read queries.
- Fix deadlock in RaftDrainingService area
- Fix sysinfo depending on setting missing in 5.0
- Improve messaging around startup of newly created database
- fix northwind data not loading properly due to https redirect
- support connecting to cluster members missing default database
- Fixes a memory leak issue when using the Transactional HTTP API (see: https://github.com/neo4j/neo4j/issues/12945)
-
FULLTEXT indexes can include lists of strings.
-
Disable io limiters only on global shutdown
-
Introduces a faster variant of consistency check for relationship indexes.
-
Remove neo4j based profilers.
-
Change dbms.tx_state.memory_allocation to use ON_HEAP tx state by default
-
Removes the deprecated
--check-label-scan-store
,--check-relationship-type-scan-store
and--check-property-owners
options from consistency checker. -
Pull Node::delete and Relationship::delete up into Entity
-
Remove deprecated procedure: db.indexDetails. Replaced by
SHOW INDEXES YIELD *
. -
Remove deprecated procedure: db.schemaStatements. Replaced by
SHOW INDEXES YIELD *
andSHOW CONSTRAINTS YIELD *
-
Removal of some deprecated code
-
Remove redefinition of MaxInlineLevel
-
Remove deprecated procedure: db.createIndex. Replaced by CREATE INDEX command.
-
Remove deprecated procedure:
db.createUniquePropertyConstraint
. Replaced byCREATE CONSTRAINT ... IS UNIQUE
command -
Remove deprecated procedure: db.createNodeKey. Replaced by CREATE CONSTRAINT ... IS NODE KEY command
-
Fix bolt connections to respect dynamic setting of
dbms.transaction.timeout
-
Fixes a bug in index transaction state where nodes/relationships created/changed in the same transaction could sometimes be returned several times for queries using composite indexes.
-
Fix false-positive "Potential direct memory leak"
-
Do not select legacy
graph.db
as the default if present -
neo4j-admin import
does not accept any existing database (even empty ones). Supply--force
to remove any files prior to import -
CSV Import: add support for array data types
point[]
,date[]
,time[]
,datetime[]
,localtime[]
,localdatetime[]
,duration[]
-
Fixes an issue where under very specific circumstances an upgraded database could get into a state where it had a chance to assign non-unique transaction IDs to committing transactions
-
Fixes an importer issue where looking up an ID where there were multiple equal in different groups may result in ArrayIndexOutOfBoundsException.
-
Remove support for
US/Pacific-New
timezone. Existing values that use unsupported timezone will be interpreted asUS/Pacific
. -
DatabaseTransactionEventListeners calls afterCommit/Rollback on all
-
Update Log4j to 2.15.0 to address CVE-2021-44228
-
Update Log4j to 2.16.0 CVE-2021-45046
-
Breaking change: Stop shading log4j and update the public logging API
-
Close kernel transaction on periodic transaction context commit
-
Fixes an issue in importer where large node IDs from CSV source that were additionally stored as node property may sometimes end up with the wrong value.
-
Fix an issue where ExpandInto can call get degrees on a dense node when DENY privileges are present. This causes a large amount of unnecessary permissions checks to occur.
-
-
Points are now incomparable, i.e.
x < point
andx > point
evaluates toNULL
for allx
. For range seek queries please usepoint.withingBBox
instead- Fix so that we get consistent results for range queries on durations regardless if there is an index or not.
- Fix inconsistent behaviour:
duration < duration
andpoint < point
evaluates toNULL
instead ofFALSE
-
-
Add isAvailable() to GraphDatabaseService
-
Restrict Node::getRelationships return types such that its resource can be released
-
Extend ResourceIterable such that it can release its resource
-
Remove obsolete NeoStoreCommand
-
Adds "element ID" accessors to the neo4j embedded java API:
-
Node#getElementId()
andRelationship#getElementId()
-
Transaction#getNodeByElementId(String)
andTransaction#getRelationshipByElementId(String)
Element IDs are references to entities that, in addition to the internal entity ID, contains information about which database it belongs to.
-
-
Update relationship index schema syntax in logs and exception messages to align with cypher syntax i.e
-[:REL {prop1, prop2}]-
becomes()-[:REL {prop1, prop2}]-()
-
Reduces memory overhead of temporarily buffered deleted internal record IDs
-
Ensure resources closed when using ResourceIterables and ResourceIterators
-
Remove lucene+native-3.0 index provider. It is replaced by TEXT, RANGE and POINT indexes.
-
Fixes an issue cleaning up registered metrics after a failure to start a database, preventing it from being start after that point within the same dbms session.
-
Remove legacy dbms.directories.tx_log setting
-
Remove
dbms.index.default_schema_provider
setting and associatedSchemaIndex
enum. Index provider can be selected through theOPTIONS
clause forCREATE INDEX/CONSTRAINT
-
Fixes a bug in
neo4j-admin report
command where using theheap
classifier would make the command fail withError: Failed to write heapdump.hprof
-
CREATE DATABASE
acceptsstoreFormat
inOPTIONS
clause. The option controls the store format of a newly created database, if using the command to connect a loaded database the option will have no effect. -
Remove support for the
USING PERIODIC COMMIT
query hint. The recommended replacement isCALL {...} IN TRANSACTIONS
-
Removed the following deprecated procedures (replaced by
SHOW TRANSACTIONS
andTERMINATE TRANSACTIONS
):dbms.listTransactions()
dbms.killTransaction(<tx-id>)
dbms.killTransactions(<tx-ids>)
dbms.listQueries()
dbms.killQuery(<query-id>)
dbms.killQueries(<query-ids>)
-
Much faster rebuild of relationship group degrees store
-
Update PublicApi so that PathExpander returns ResourceIterable
-
neo4j-admin import
respectsdbms.logs.debug.format
setting -
Update classification of Terminated and LockAcquisitionTimeout status codes
-
Always attempt to create database constraints in system graph during upgrade.
-
Escape character in config path parsing are now ignored. E.g setting
dbms.directories.data=\test dir\
, the\t
is no longer interpreted as a tab character. Mostly relevant for paths on Windows -
Advertised address settings will no longer inherit port from its corresponding listen address setting when unspecified. Instead default value for each affected setting will be used.
-
The old parameter
dbms.config.strict_validation
, which was false by default, has been replaced byserver.config.strict_validation.enabled
, which is true by default -
Removes
dbms.allow_upgrade
anddbms.record_format
settings. Changes to the store that used to be triggered by settingdbms.allow_upgrade=true
are now classified as either store upgrades or store migrations. Store upgrades (small, constant time changes) are done automatically on start up and store migrations must be done with the newmigrate-store
admin command.dbms.record_format
had two usages. First as the format used for newly created databases, that has been replaced by thedb.format
. Secondly as the format to use when upgrading the database, changing format family is classified as a migration and can now be done using themigrate-store
admin command. -
Remove BTREE index type. BTREE is replaced by RANGE, TEXT and/or POINT indexes. Make sure to replace or remove any BTREE indexes and constraints backed by BTREE indexes before migrating to 5.0. See the migration guide for more information.
-
Strict config validation (managed by
server.config.strict_validation.enabled
) no longer allows settings to be declared multiple times inneo4j.conf
, with the exception ofserver.jvm.additional
. -
Core API blocked from creating composite point indexes. Only single-property point indexes are supported
-
Closing relevant CSV metrics writers when database is shut down
-
Fixes a bug in import to
high_limit
format where an interrupted import could fail on being resumed withIllegal secondary record reference
-
The type of
<prefix>.vm.pause_time
metric is changed from gauge to counter. -
Consistency checker now checks id files for nodes, relationships and properties. Any used record with id up for reuse will result in a report:
The referenced record is in use but the id is up for reuse in the id file.
-
Fixes a bug where nodes not having the required property for a node key constraint could be created during the creation of the constraint. They would silently violate the constraint and leave the database with a non-fulfilled node key constraint
-
Setting namespaces validation
-
The
DbmsInfo
class accessible through theorg.neo4j.kernel.extension.context.ExtensionContext
does not contain theOperationalMode
(core, read replica, single) anymore. Extension users can resolve the dependency toHostedOnMode
if they want to find the allocation mode of a database at a particular instance. -
Update
org.neo4j.kernel.impl.coreapi.schema.PropertyConstraintDefinition#toString
to output the latest Cypher syntax for constraint creation. -
Update javadoc for IndexDefinition to not assume how index was originally created. Nothing has changed in terms of implementation.
-
Changes to output from
IndexDefinition#toString
. "UNIQUE" and "TOKEN" is not included in description of "type" anymore. Type will be only LOOKUP, FULLTEXT, RANGE, TEXT or POINT. -
New index types 'RANGE' and 'POINT' are now fully supported. 'RANGE' indexes support exact lookup and range type queries over all value types and is very similar to the removed 'BTREE' type. 'POINT' indexes support bounding box queries and exact lookup for point values. See documentation for more information.
-
Introducing
dbms.checkConfigValue(setting, value)
(enterprise,admin) prodcedure for checking if a given value is valid for provided setting. Extending existing proceduredbms.listConfig
result with additional information -
code review and more accurate documentation of the Traversal API
documentation: https://github.com/neo4j/docs-java-reference/pull/39
-
Clean usage of deprecated dbms.read_only in default neo4j.conf files.
-
Move
systemdb.secrets.*
settings intodbms.security.*
. -
More user-friendly exceptions when entities not found by elementId.
-
Fixes a bug where some transaction objects could be leaked instead of being released properly.
-
Remove deprecated procedures: db.indexes and db.constraints
-
Greatly improves worst-case performance of scanning for deleted IDs to be reused for new records
-
Changing the default transaction log retention from 7 days down to 2 days. Controlled by setting
db.tx_log.rotation.retention_policy
-
Make metrics namespaces mandatory.
-
Jvm additional setting should not split inside quoted values
-
Fixing an issue where 'CALL { ... } IN TRANSACTIONS' could leak inner transactions when the outer transaction was terminated during execution, e.g by timeout
-
Update Coordinate class to expose coordinates as array of primitives instead of list of objects
-
Renaming
Neostore records
header in diagnostics logging toMetadata
-
Removal of dbms.allow_single_automatic_upgrade setting
-
Fix node degree calculation when relationships are removed in the same transaction
-
Allow underscore between digits in number literals.
-
add support for WHERE clauses inside relationship patterns
-
Bug fix: Neo4j now also accepts datetime expressions including an offset of times immediately after switching from summer time to winter time.
-
update to driver version 4.4.0
-
Fix bug in cypher shell where it would fail to start in windows.
-
update to driver version 4.4.1
-
Fix unnecessary
Eager
planned betweenMATCH
andMERGE
on different labels. -
Fix bug where planner would fail to find a sorted plan to fulfil order on two variables including aggregation, which would result in issuing an "Expected a sorted plan" error.
-
Remove deprecated security procedures:
- dbms.security.createUser. Replaced by CREATE USER
- dbms.security.deleteUser. Replaced by DROP USER
- dbms.security.suspendUser. Replaced by ALTER USER
- dbms.security.activateUser. Replaced by ALTER USER
- dbms.security.changeUserPassword. Replaced by ALTER USER
- dbms.security.changePassword. Replaced by ALTER CURRENT USER SET PASSWORD
- dbms.security.createRole. Replaced by CREATE ROLE
- dbms.security.deleteRole. Replaced by DROP ROLE
- dbms.security.addRoleToUser. Replaced by GRANT ROLE
- dbms.security.removeRoleFromUser. Replaced by REVOKE ROLE
- dbms.security.listUsers. Replaced by SHOW USERS
- dbms.security.listRolesForUser. Replaced by SHOW USER
- dbms.security.listRoles. Replaced by SHOW ROLES
- dbms.security.listUsersForRole. Replaced by SHOW ROLES WITH USERS
-
Upgrade to Scala 2.13
-
Neo4j now utilises range indexes when planning queries.
-
The function
distance
has been been replaced bypoint.distance
-
Removed the commands for dropping indexes and constraints by schema.
-
DROP INDEX ON :Label(prop)
- Replaced byDROP INDEX name
. -
DROP CONSTRAINT ON (node:Label) ASSERT (node.prop1,node.prop2) IS NODE KEY
- Replaced byDROP CONSTRAINT name
. -
DROP CONSTRAINT ON (node:Label) ASSERT node.prop IS UNIQUE
- Replaced byDROP CONSTRAINT name
. -
DROP CONSTRAINT ON (node:Label) ASSERT EXISTS (node.prop)
- Replaced byDROP CONSTRAINT name
. -
DROP CONSTRAINT ON ()-[r:R]-() ASSERT EXISTS (r.prop)
- Replaced byDROP CONSTRAINT name
.
-
-
Fixed a bug where using values returned from a procedure would cause a type error like
Type mismatch: expected Float, Integer or Duration but was Number
. -
Removed the
BRIEF
,VERBOSE
andEXISTS
keywords forSHOW INDEXES
andSHOW CONSTRAINTS
.-
SHOW INDEXES BRIEF
- Replaced bySHOW INDEXES
. -
SHOW INDEXES VERBOSE
- Replaced bySHOW INDEXES YIELD *
. -
SHOW CONSTRAINTS BRIEF
- Replaced bySHOW CONSTRAINTS
. -
SHOW CONSTRAINTS VERBOSE
- Replaced bySHOW CONSTRAINTS YIELD *
. -
SHOW EXISTS CONSTRAINTS
- Replaced bySHOW EXIST CONSTRAINTS
. -
SHOW NODE EXISTS CONSTRAINTS
- Replaced bySHOW NODE EXIST CONSTRAINTS
. -
SHOW RELATIONSHIP EXISTS CONSTRAINTS
- Replaced bySHOW RELATIONSHIP EXIST CONSTRAINTS
.
-
-
Fixes exception "org.neo4j.exceptions.CypherTypeException: Property values can only be of primitive types or arrays thereof" thrown when concatenating a list with an empty list.
-
Auto completion of commands in Cypher Shell.
-
Fix a bug where, in rare cases, matching with an optional match on the same thing as a preceding match would fail during planning.
-
Update to driver version 4.4.2
-
Fix a bug in the heap memory tracking of intermediate results in the pipelined runtime, that could lead to underestimation of the heap usage for certain queries, and potentially trigger JVM out-of-memory errors for queries consuming too much memory.
-
Fix a bug where, in rare cases, reusing a variable that had previously been used as a path variable would fail during planning.
-
Fix a bug where errors could be masked when using
IS NULL
orIS NOT NULL
-
Fix a bug that could trigger a null pointer exception in the slotted and pipelined runtimes for certain query plans where an
OPTIONAL MATCH
with a predicate containingOR
was planned with aUnion
operator. -
During a rolling upgrade from 4.1 or earlier, roles don't have the privilege required to execute UDFs.
These privileges are added to the PUBLIC role after the upgrade is done, but not during compatibility mode.
This is the error when trying to execute a UDF:
Executing a user defined function is not allowed for user 'XXX' with roles [PUBLIC, architect].
This privilege is now in the list of temporary privileges which take effect during upgrades.
-
Improved performance of queries containing
UNWIND
andCALL IN TRANSACTIONS
-
Fix a memory leak of the runtime transactional context into the query plan cache
-
Support new syntax for expressing node labels. New operators include:
-
&
: logicalAND
-
|
: logicalOR
-
!
: logicalNOT
-
%
: A "wildcard", meaning "any label" (in Cypher this translates tosize(labels(n)) > 0
Operators can be combined to form assertions on node labels in
MATCH
clauses, e.g.MATCH (n:A|(B&!C))
. -
-
Implied grouping keys are no longer supported. Only expressions that do not contain aggregations are grouping keys.
-
"Expose driver logs in Cypher Shell, with the new
--log
parameter and:log
command. -
Patterns like
CREATE (a {prop:7})-[r:R {prop: a.prop}]->(b)
where a variable introduced in the pattern is also referenced from the same pattern are no longer supported. -
If a query was accessing values via the index (
prop[...]
), the planner would always assume that these were dynamic properties. and plan anEager
operator if there may have been a read-write-conflict. This is now changed if the index access is using literals likeprop[0]
orprop['key']
. -
The deprecated
ON DEFAULT GRAPH
andON DEFAULT DATABASE
syntax for privileges are no longer supported, useON HOME GRAPH
andON HOME DATABASE
instead. -
Fix bug in aggregations with LIMIT where query would fail with an array copy out of bounds error.
-
Represent empty column headers with empty string in
LOAD CSV
. -
Removal of the old parboiled parser for Cypher. This has been fully replaced by the new Javacc parser.
-
Support for impersonation in Cypher Shell.
-
Fixed issue where query analysis and planning was not terminated when transaction was terminated.
-
Removed the procedures for creating and dropping fulltext indexes.
-
db.index.fulltext.createNodeIndex()
- Replaced byCREATE FULLTEXT INDEX ...
. -
db.index.fulltext.createRelationshipIndex()
- Replaced byCREATE FULLTEXT INDEX ...
. -
db.index.fulltext.drop()
- Replaced byDROP INDEX ...
.
-
-
Removed the deprecated syntax for creating indexes and constraints.
-
CREATE INDEX ON :Label(prop)
- Replaced byCREATE INDEX [name] FOR (node:Label) ON (node.prop)
. -
CREATE CONSTRAINT ON (node:Label) ASSERT (node.prop1,node.prop2) IS NODE KEY
- Replaced byCREATE CONSTRAINT [name] FOR (node:Label) REQUIRE (node.prop1,node.prop2) IS NODE KEY
. -
CREATE CONSTRAINT ON (node:Label) ASSERT node.prop IS UNIQUE
- Replaced byCREATE CONSTRAINT [name] FOR (node:Label) REQUIRE node.prop IS UNIQUE
. -
CREATE CONSTRAINT ON (node:Label) ASSERT EXISTS (node.prop)
- Replaced byCREATE CONSTRAINT [name] FOR (node:Label) REQUIRE node.prop IS NOT NULL
. -
CREATE CONSTRAINT ON (node:Label) ASSERT node.prop IS NOT NULL
- Replaced byCREATE CONSTRAINT [name] FOR (node:Label) REQUIRE node.prop IS NOT NULL
. -
CREATE CONSTRAINT ON ()-[r:R]-() ASSERT EXISTS (r.prop)
- Replaced byCREATE CONSTRAINT [name] FOR ()-[r:R]-() REQUIRE r.prop IS NOT NULL
. -
CREATE CONSTRAINT ON ()-[r:R]-() ASSERT r.prop IS NOT NULL
- Replaced byCREATE CONSTRAINT [name] FOR ()-[r:R]-() REQUIRE r.prop IS NOT NULL
.
-
-
Fixed a bug where matching on the same variable multiple times would trigger an exception during planning or produce incorrect results.
-
SHOW PRIVILEGES will now display the home database as 'HOME' instead of 'DEFAULT'
-
Fix bug where you could get an error message like
Cannot put key x before first key y
, for example in queries usingSelectOrSemiApply
orConditionalApply
andLimit
. -
Faster execution of queries of the form
MATCH (n)-[*..5]->(m) RETURN DISTINCT m
, that is queries where you are only interested in the distinct end-nodes of a pattern and do not require all relationships to be traversed. -
Fix cache properties invalidation when row does not match the predicate in optional expand
-
Fix a rare bug where the output rows of some queries would be unordered, even though an
ORDER BY
had been correctly placed, see: https://github.com/neo4j/neo4j/issues/12840 -
Fix bug where range index seeks of array types always returns empty result. For example in queries like
MATCH (n:Node) WHERE n.indexedProperty > [0] RETURN n;
. -
The aliases column in SHOW DATABASES should be CTList(CTString)
-
Fix error of the kind arraycopy: last source index 1 out of bounds for long[0]
which could occur when a CartesianProduct was planned under a NestedPlanExpression in pipelined runtime.
-
Fixed an error due to which very particular queries with the same predicate on both sides of an
OR
expression could not be planned. -
Pattern expressions for checking existence are no longer supported, except for use in
WHERE
clauses. Use a pattern comprehension instead. -
Use lists that are stored in properties as input to toIntegerList, Github issue: opencypher/opencypher#526
-
Fix an issue with user-defined aggregation functions where the result-method could sometimes be called twice on the same row (incorrectly assuming the implementation to be idempotent)
-
Remove support for existence check of properties using
exists()
. The syntaxexists(property)
has been replaced byproperty IS NOT NULL
. -
Add ability to yield and filter the output from
TERMINATE TRANSACTIONS
. This will not affect what is terminated, only what is returned afterwards.TERMINATE TRANSACTIONS
does not allow just filtering withoutYIELD
, soTERMINATE TRANSACTION 'txId' WHERE message <> 'Transaction terminated.'
is not valid butTERMINATE TRANSACTION 'txId' YIELD * WHERE message <> 'Transaction terminated.'
is. -
Usages of GetDegree wasn't obvious in the plan description. Now instead
of
size([pattern])
usages of GetDegree will be rendered withgetDegree([pattern])
. -
Update driver to 4.4.5
-
Unaliased expressions are no longer supported in subquery
RETURN
clause. UseRETURN <expression> AS name
. -
Updated the output column set for
SHOW TRANSACTIONS
. Removed columnallocatedBytes
as it was not tracked. Added columnscurrentQueryStartTime
,currentQueryStatus
,currentQueryActiveLockCount
,currentQueryElapsedTime
,currentQueryCpuTime
,currentQueryWaitTime
,currentQueryIdleTime
,currentQueryAllocatedBytes
,currentQueryPageHits
, andcurrentQueryPageFaults
for the current query in the transaction (previously part ofdbms.listQueries
). -
Cypher now supports relationship type expressions like
MATCH ()-[r:!A&!B]->()
. -
Before this change, pattern expressions in boolean contexts were marked as deprecated. This deprecation was removed.
-
Fixed bug where eagerness was handled incorrectly for overlaps in labels for predicates.
-
A new function that returns wether a value is or is not a NaN value
-
Decouple the
EXECUTE
andEXECUTE BOOSTED
privileges to remove the implicitEXECUTE
from theEXECUTE BOOSTED
privilege. -
Add new operator
Trail
used for solving quantified graph patterns. -
Add columns creationTime, lastStopTime, lastStopTime to the column set for SHOW DATABASES.
-
Introduced the COUNT{} expression to replace the deprecated uses of size() with a relationship pattern
-
The octal syntax
0123
and hexadecimal syntax0X123
is no longer supported. Use0o123
and0x123
instead. -
discontinue support for remaining patterns with repeated relationship variables such as `MATCH ()-[r]-()
RETURN [ ()-[r]-()-[r]-() | r ] AS rs`
-
Discontinue support of coercion of list to boolean such as
WHERE [1, 2, 3]
. Please useNOT isEmpty(...)
instead. -
Fixed
Comparison method violates its general contract
error during planning. -
The commands
SHOW TRANSACTIONS
andTERMINATE TRANSACTIONS
can now be used together in a single query. For example, terminating all ofAlice
transactions:SHOW TRANSACTIONS YIELD transactionId AS txId, username AS user WHERE user = 'Alice' TERMINATE TRANSACTION txId YIELD message RETURN txId, message
-
Github issue: neo4j/neo4j#12887, fix an issue with
ltrim
,rtrim
, andtrim
. -
Fix potential
Expected as string value 'substring', but got NO_VALUE'
error when the output of
reduce
is used as input to another function. -
New surface to administer fabric databases, now named “COMPOSITE DATABASES�. Configuration settings have been removed and Composite Databases are now administered via Cypher commands.
-
Fixed rare bug where self reference in equality (´WHERE n:L AND n.p = (n.p = n.p)´) caused stackoverflow error.
-
slotted runtime is now the new default community runtime.
-
Remove dbms.security.oidc.<provider>.redirect_uri setting which has been deprecated and is no longer required.
-
Removed the ability to change Cypher Versions by prepending queries with "CYPHER X.Y" or using the config setting "cypher.default_language_version".
-
Enable use of environment variable
NEO4J_ADDRESS
to specify connection address in Cypher Shell. -
Updated output columns for
SHOW INDEXES
andSHOW CONSTRAINTS
:- Removed
uniqueness
column fromSHOW INDEXES
. - Added column
owningConstraint
(string) toSHOW INDEXES
, giving the name of the connected constraint (or null when the index does not belong to any constraint). - Changed column
ownedIndexId
(long) toownedIndex
(string) forSHOW CONSTRAINTS
, giving the name of the backing index (or null when not index backed).
- Removed
-
Adds
DEALLOCATE DATABASES FOR SERVER
,DROP SERVER
, andSHOW SERVERS
commands for managing server instances. -
null values will now match the ELSE clause in CASE expressions
-
Fix bug in Reduce Expressions and List comprehensions hiding variables that should be in scope https://github.com/neo4j/neo4j/issues/12868
-
Logical plans where the same variable is introduced in multiple leaves can cause trouble with inserting eager, which might make the query end up with incorrect results. Before this fix we assumed that a variable was stable as long as it was stable on one leaf. Fix: A variable should be considered unstable if it is both unstable and stable. Fixes github issue https://github.com/neo4j/neo4j/issues/12878
-
Deprecate the use of nodes/relationships on the RHS of a Set Clause e.g
MATCH (n)-[r:REL]->(m) SET n=r
should now beMATCH (n)-[r:REL]->(m) SET n=properties(r)
-
Upgrade Apache Shiro from
1.8.0
to1.9.1
. This version includes fixes forCVE-2022-32532
. -
Add new operators, DirectedAllRelationshipsScan and UndirectedAllRelationshipScan to Cypher.
Benchmarks:
- 2.12x generatedmusicdata_read Q35
- 3.11x musicbrainz Q25
- no regressions, there aren't many queries where this would be a candidate though. Typically queries use a relationship type and a RelationshipTypeScan should in those cases be more efficient.
-
Fix a bug where SHOW TRANSACTIONS would fail when transaction metadata contains types that cannot be serialised to a property (e.g. List)
-
Fix bug with undirected relationship scans and self-loops
-
Fix overflow in resource manager. Users could get errors like java.lang.IllegalArgumentException: Expected positive long value, got -8589934576 because of an overflow when trying to grow the number of tracked resources.
-
Add store column to SHOW DATABASES output
-
Disconnect driver session on exit in Cypher Shell.
-
It is not allowed to in one clause mix label expressions containing non-GPM symbols such as ':' together with GPM-specific symbols such as '(', ')', '&', '!'.
-
Add parameter
--uri
and environmental variableNEO4J_URI
as alternative ways to specify connection address. -
fix issue where ExpandInto could return the wrong result
-
All notifications should have classification
ClientNotification
. In this PR we fix some of the current notifications which had severityClientError
orDatabaseError
. -
introduce Infinity, Inf and NaN as Float literals
-
When debug logging is enabled, LdapRealm can attempt to directly log
Neo4jPrincipal objects resulting in logging like org.neo4j.server.security.auth.Neo4jPrincipal@f1d6260f. Fix it to log the username as expected.
-
Adds
ENABLE SERVER
command for managing servers. -
Updates severity on some of the existing notifications. Also, updates status code accordingly (removing
Warning
from the name if it now has severityInformation
) -
Deprecate
runtime=interpreted
-
Don't throw when seeking the index for values that cannot be indexed.
-
The deprecated username field has been removed from the security and query logs.
-
Adds
RENAME SERVER
command for managing servers -
Adds TOPOLOGY option to CREATE and ALTER DATABASE to specify desired count or primary and secondary servers per database.
-
Adds
REALLOCATE DATABASES
andALTER SERVER
command for managing servers
-
Fixes an issue with token creation (labels, property keys and relationship types) in clustering where internal IDs of created tokens may not be unique, i.e. multiple members could end up creating tokens with the same internal IDs.
-
dbms startup is now asynchronous, which mean that after system database is started the bolt port opens, and other databases start asynchronously and may not be available immediately.
-
Track size of log entries to avoid prefetch buffer exceeding memory constraints.
-
Remove requirement to have multi-DC licence to access multi-DC features.
Ticket: https://trello.com/c/ECvnAxM4
-
Neo4j and cypher-shell deb installers' dependencies changed to be compatible with Oracle java 17.
- Can no longer use headless JRE due to a circular dependency bug in OpenJDK17 on Ubuntu 18.04
-
cypher-shell java 17 dependency changed to non-headless jre to be compatible with zulu java
-
Fully removed init.d support for 5.0 in the rpm and deb packages. Users must use
systemctl
and the neo4j.service file installed by the packages. For examplesudo systemctl start neo4j
.
- Update
jackson-databind
from2.13.1
to2.13.2.2
(and thus alsocom.fasterxml.jackson.*
from2.13.1
to2.13.2
), to address CVE-2020-36518 - Upgraded jetty to v9.4.48 in order to mitigate CVE-2022-2047 and CVE-2022-2048
- Touch up guides ✨styling✨
- Fix cluster detection on neo4j 4.3+
- Fix bug with incorrect version number & add git hash to overview in stand-alone deployment
- Zoom to cursor on scroll in visualization
- Make sure editor displays full database name
- Zoom graph to fit after initial visualization animation
- Clear credentials in connection form on disconnect
- Update :help articles on INDEX & CONSTRAINT
- Fix credential timeout without initial user interaction
- Fix links not being blue and not being highlighted in the sidebar
- Remove Legacy HTTP API (where endpoints begin with
/db/data/transaction/
). Please use the endpoints that include the database name (e.g./db/neo4j/tx/commit
).
- Fix an issue with
migrate-configuration
admin command where plugin settings were incorrectly handled - Fixes an issue where the importer could interpret a non-existent node
ID
from the relationships data as one of the imported nodes. A flag--strict
has been added to the import command to control this added strict validation of the node IDs and is enabled by default. Running import with strict check enabled may have a negative performance impact during relationship import. - Fix
neo4j-admin database info --from-path
path validation on paths external to standard config, which incorrectly failed on otherwise valid paths to databases. - Fix issue with console appenders in server-logs.xml
- seeking for an empty array would lead to an empty result even if a match existed in the index.
- Introduce COLLECT Subqueries, This collects the results of the subquery into a list.
- Add a command to list configuration settings,
SHOW SETTINGS
. - Fix bug for MERGE queries in pipelined runtime.
- Solve bug where unnecessary sort was planned for some queries beginning with an
OPTIONAL MATCH
.
- Deprecate
dbms.cluster.secondaryReplicationToggle
(usedbms.cluster.secondaryReplicationDisable
) - Splitting out discovery modules
- [1wUXB3gt] Revert setting name back to dbms.max_databases from server.max_databases
-
JVM additional configuration set by environment variable will now stop overriding default jvm configurations.
-
Invalid NEO4J_PLUGINS values now produces a helpful error message.
For example:
NEO4J_PLUGINS='["gds"]'
will now return:"gds" is not a known Neo4j plugin. Options are: apoc apoc-core bloom graph-algorithms graph-data-science graphql n10s streams
- Add ability to run
CALL {} IN TRANSACTIONS
to HTTP Cypher Transactional API using the single request endpoint (e.gdb/neo4j/tx/commit
) - Fix possible deadlock in transaction termination
- HTTP Transactional Cypher API bookmark support
- Fix reporting of JVM memory metrics
-
neo4j-admin database copy
can be used to compact/clean-up a database in-place by setting target to be the same as the source. - Add command for performing configuration validation without starting server:
neo4j-admin server validate-config
- Recovery logging and dependencies adaptation
- Fixes an issue with property key names in importer CSV header couldn't be parsed if they contained
:
characters. Now this works if the header entry also specifies a property type, e.g.my-key:with-colons:string
- Plan count store lookup for relationship endpoints
- It is possible now to
ALTER DATABASE
where the topology is changed with number of primaries increasing chnage from 1 to n. - Deprecation of the usage of differently ordered variables in UNION Clauses
- Fix bug in
MERGE ()-[:R]-()
- Fix a bug where group to role mappings defined for OpenID connect in
dbms.security.oidc.<provider>.authorization.group_to_role_mapping
were not matched correctly with claims containing capital letters. - It is now permitted to repeat a relationship variable in a pattern. This will not return any results, though, as a relationship is not permitted to be traversed more than once. We therefore issue a warning instead.
- Neo4j will now retry calls to the OpenID Connect discovery endpoint if they do not succeed initially. This applies on initial database startup and if the configuration is updated with
dbms.setConfigValue
- Upgraded Apache Shiro from 1.10.1 to 1.11.0. This version includes fixes for CVE-2023-22602
- Fix bug in scoping with self referencing variables in a CREATE clause used in conjunction with list comprehension.
- Fixed a bug where an
OPTIONAL MATCH
withshortestPath
, followed byDISTINCT
, would fail during planning. - Fix a bug where SKIP and LIMIT was ignored for simple
COUNT(...)
aggregation queries that was solved with aCountFromCountStore
plan. - Adds eagerness when returning a full entity node if a node or relationships property or label has been updated.
- Prevent system database bootstrapping with too few Raft members when there are discovery restarts between publishing the Raft member id and observing successful publication.
- Bug fix where a server went back and forth between pipeline and catchup mode even if there was no load.
-
Upgrading from 4.4 to 5.x now prompts user to confirm that backups have been made before continuing the upgrade. During the upgrade the data directory is also moved to a new location to prevent data loss.
- This is a critical bug fix. The system database cannot be migrated from 4.4 to 5.x, and must be rebuilt entirely on upgrade. This left users who upgrade using the deb or rpm packages in an unrecoverable situation where Neo4j will not start because of an unmigratable system database.
- Full upgrade instructions are available at: https://neo4j.com/docs/upgrade-migration-guide/current/version-5/
- Docker now allows users to accept an evaluation license if they do not have a commercial license.
- Fixes an issue where we throw an error if a notification does not have an input position. This happens when queries that produce certain notifications are re-routed to another cluster member with server-side routing. Fixes github issue https://github.com/neo4j/neo4j/issues/13025.
- Fix issue where server-side routed transactions might not be retried when encountering transient errors
- Ability to specify what license is agreed to during install and startup
- Completion scripts for
neo4j
andneo4j-admin
cli for Unix. Automatic installation for deb and rpm - Fixing security issues
- Fixes an issue in import where some date value types didn't handle empty values from the CSV files
- Fixing a couple of small issues with TX log rotation
- Fixes a performance issue creating Lucene indexes where workers ended up waiting unnecessarily on other threads for merging internal Lucene segment files.
- Generates warnings when the user issues a query with a relationship type expression that can never be fulfilled.
- Fixes problems where Cypher queries with
DELETE
insideCALL
would not return correct results. The fix was to insert a missingEager
operator. - for show databases entries with undetermined roles null is returned rather than unknown.
- Fix a bug where frequently executed queries never were re-planned. This could happen if the time between executions of a query was always less than
cypher.min_replan_interval
, and cache space was generous enough. - Introduce new operator, IntersectionNodeByLabelsScan, for more efficiently handle queries like MATCH (n:A&B&C)
- The JWT claim specified in
dbms.security.oidc.<provider>.claims.groups
may now also contain a single group returned as a string as well as a list of groups as was previously required. - fix bug for list literals with in expressions
- Fix bug in privilege evaluation for the
ALTER DATABASE
command, where it was possible to bypass deniedSET DATABASE ACCESS
privilege by leveragingALTER DATABASE
privilege instead.
- Deprecate
server.groups
forinitial.server.tags
(#18629)
-
Upgrading from 4.4 to 5.x now prompts user to confirm that backups have been made before continuing the upgrade. During the upgrade the data directory is also moved to a new location to prevent data loss.
- This is a critical bug fix. The system database cannot be migrated from 4.4 to 5.x, and must be rebuilt entirely on upgrade. This left users who upgrade using the deb or rpm packages in an unrecoverable situation where Neo4j will not start because of an unmigratable system
- Full upgrade instructions are available at: https://neo4j.com/docs/upgrade-migration-guide/current/version-5/
- Update driver
- Fix bug where email was not supported as a username in :server user list
- Fix performance issue with browser background metadata for rbac users
- Handle connections to composite databases
- Fix indent formatting in nested objects
- Fix relationship stylings not getting applied
- show alias name in database selector
- Clear metadata on switching database
- Add neo4j trial banners
- Allow setting parameters on composite databases
- Bugfix: role cluster role incorrectly reported as leader
- Ensure lost connection doesn't break browser
- Bugfix - :auto didn't handle newlines
- Update driver to 5.3.0
- Multiple
:ID
columns can be specified in importer CSV header to form composite IDs referable from the relationship CSV data. - Fixes a bug where
neo4j-admin database import incremental
would both miss enforcing uniqueness of node key constraints and leave them in an inconsistent state after the import. Also fixes that indexes could have nodes/relationships that violated property existence constraints in them after the import even though these nodes/relationship never made it into the actually imported data.
-
SHOW DATABASES
now show correct role (primary/secondary) for stopped databases - Adding password length requirement for creating and alter user. Default 8 characters but can be modified by using configuration setting
dbms.security.auth_minimum_password_length
- A new implementation of the shortest path algorithm.
- Introduced eagerness for overlap between writing a property and property function reads.
- Since 4.4 we were not able to plan value hash joins when the properties are wrapped in a function call. This has been fixed now.
- Extending subquery support in Exists and Count Expressions to allow full non-updating subqueries.
- We now validate that URIs used for communicating with OpenId Connect identity providers use the HTTPS scheme. This is required by the specification, but will break for any customers connecting to their identity providers over HTTP which is no longer supported.
- Previously, the planner did not assume an expression like
n.prop =~ ...
to filter the results more than just the bare existence ofn.prop
. This was changed, such that the planner would prefer to apply these predicates earlier during the query evaluation. - Fix error
Exception closing multiple resources
that could happen for plans using Expand(Into), see Github issue: neo4j/neo4j#12968 - Fixed a bug where an updating query might get stuck in an infinite loop during planning.
-
SHOW DATABASES
returns databases from servers even if the server is offline.
- Fixed leak of drivers and connection pools when server side routing
- Quarantine user databases if recovery fails at startup. A quarantined state will indicate that something is wrong with the store and that manual intervention is required.
- Routing procedure returns all servers which host the given database (secondaries too) as routers
- Fix sysinfo depending on setting missing in 5.0
- Improve messaging around startup of newly created database
- fix northwind data not loading properly due to https redirect
- support connecting to cluster members missing default database
- Docker image will warn if password length is less than 8 characters before attempting to start Neo4j database. If the password is too short the container will fail to start.
- Fix issue where a high frequency of
ALTER ALIAS
would create a large number of threads - Fix issue where temporal functions failed to run directly on composite databases
- Changing the default value of 'dbms.memory.transaction.total.max' to …
- Fix edge case where active transactions metrics were inconsistently decremented on closing a transaction, which lead to
<prefix>.database.transaction.active_read
to potentially appear negative. - Fixes possible crashes when using very small page cache sizes
- Adds additional types to
org.neo4j.graphdb.schema.ConstraintType
in the Core API - Removing internal feature of custom lock manager selection, controlled by
internal.dbms.lock_manager
- Bump commons-text 1.9 -> 1.10.0 so as to address CVE-2022-42889
- The use of the same relationship variable for multiple variable length relationships, e.g.
MATCH ()-[r*]->(), ()-[r*]->()
is deprecated and will be removed in a future version - Upgraded Apache Shiro from 1.9.1 to 1.10.0
- Added DRYRUN option for server commands
- Fixes a bug in pipelined execution graph construction, that could cause some queries with UNION inside an updating subquery to fail with the message
Could not find downstream argumentStateBuffer with id ArgumentStateMapId(x)
. - Fix bug in
Expand(Into)
where we could fail to find existing relationships if the same node is expanded multiple times. - Fix a bug where pressing ctrl+c in Cypher Shell would leave you in an infinite loop of
IOException: Input/Output error
errors.
- Fix bug where store copy failed to retry against certain remotes due to issues with address locking logic.
- Bug fix where a member in a two member raft group couldn't be drained since it was wrongly considered unsafe.
- Bug fix where the wrong artefact was chosen for databases with the same name but different database ids.
- Create a 'synonym' for each of the metric cluster.core. cluster.read_replica. with the correct naming cluster.raft. and cluster.store_copy.
- Include a packaging information file under neo4j home
- New function
graph.propertiesByName()
for retrieving properties of constituent graphs on composite databases. - Fix bug with map projection in Fabric, where the value of the map projection is returned outside a subquery. Fixes github issue https://github.com/neo4j/neo4j/issues/12939
- Range seek indexed searches will not match NaN, consistent with non indexed range searches
- Improved performance for Text indexes using new default provider text-2.0.
- Ability to specify an analyzer in full-text queries.
- Fixes a bug that caused XML logging files not to be included in neo4j-admin server report.
- CSV header for incremental import tool can now specify the value type for IDs in its group using the option
id-type
, e.g:id:ID(MyGroup){label:MyLabel, id-type: int}
-
Various security fixes
This PR is structured to be read either commit by commit, or by looking at the overall diff.
The source code change is a one-liner. The rest of the PR is adding tests which explore the current behaviour, and make sure this one-liner correctly protects from Path traversal vulnerabilities.
Please read below if you want to explore the PR commit by commit.
-
52ca2b078ca2bff9b889e59602841ec09c2e507f Adds about ~1000 tests which measure the current behaviour. Some of these tests highlight existing bugs, when this is the case there is a "TODO" comment.
-
88b492b544e375c1923c7dd86c33dcba3a699bb7 Adds a few tests which measure the current behaviour. Some of these tests highlight existing bugs, when this is the case there is a "TODO" comment.
-
225d316e8ffca3d5c4ffa98127fe0463af539974 One-liner source code change, and fixes the incorrect tests results.
-
-
Fix issue where performance regressed for queries with "impossible predicates"
-
Update the list of valid timezones to include
Europe/Kyiv
, as per IANA 2020b. -
Fix bug where a user could change the database topology with incorrect privileges.
-
Fix bug in pipelined runtime where some queries using AssertingMultiNodeIndexSeekOperator would fail incorrectly with
Merge did not find a matching node...
. For example in queries likeUNWIND [0,1] AS id MERGE (n:A:B {id: id})
, if there is a uniqueness constraint on the id property for both A and B labels. -
Fix bug in pipelined runtime where AssertingMultiNodeIndexSeekOperator failed to perform locking index seeks. This could lead to failures when running concurrent transactions in queries like
MERGE (n:A:B {id: x})
when we have a uniqueness constraint on id for both labels A and B. -
Fixed bug where
DROP DATABASE ... IF EXISTS
andALTER DATABASE ... IF EXISTS ...
could giveDatabaseNotFoundException
when there exists a remote database alias with the name. -
Fixed bug for having * and order by id in same RETURN clause
-
Allow setting/modifying TOPOLOGY without specifying PRIMARY (keeping the default / previous value)
-
Fix a bug where SHOW DATABASES may not include all servers for a database if the servers have the same value for
server.bolt.advertised_address
-
Fix a bug with memory tracking in
CALL IN TRANSACTION
that could lead to an exception with the message "Expected non-negative long value ...". -
Fix bug where columns could be swapped for UNION queries.
-
Fix a bug in pipelined runtime that can cause incorrect row ordering in queries that leverage order and contain an aggregation.
- Default database is created and allocated to initial members during dbms creation in a best effort way
- Add server-side routing support for read queries.
- Fix deadlock in RaftDrainingService area
- Fix sysinfo depending on setting missing in 5.0
- Improve messaging around startup of newly created database
- fix northwind data not loading properly due to https redirect
- support connecting to cluster members missing default database
- Fixes a memory leak issue when using the Transactional HTTP API (see: https://github.com/neo4j/neo4j/issues/12945)
-
FULLTEXT indexes can include lists of strings.
-
Disable io limiters only on global shutdown
-
Introduces a faster variant of consistency check for relationship indexes.
-
Remove neo4j based profilers.
-
Change dbms.tx_state.memory_allocation to use ON_HEAP tx state by default
-
Removes the deprecated
--check-label-scan-store
,--check-relationship-type-scan-store
and--check-property-owners
options from consistency checker. -
Pull Node::delete and Relationship::delete up into Entity
-
Remove deprecated procedure: db.indexDetails. Replaced by
SHOW INDEXES YIELD *
. -
Remove deprecated procedure: db.schemaStatements. Replaced by
SHOW INDEXES YIELD *
andSHOW CONSTRAINTS YIELD *
-
Removal of some deprecated code
-
Remove redefinition of MaxInlineLevel
-
Remove deprecated procedure: db.createIndex. Replaced by CREATE INDEX command.
-
Remove deprecated procedure:
db.createUniquePropertyConstraint
. Replaced byCREATE CONSTRAINT ... IS UNIQUE
command -
Remove deprecated procedure: db.createNodeKey. Replaced by CREATE CONSTRAINT ... IS NODE KEY command
-
Fix bolt connections to respect dynamic setting of
dbms.transaction.timeout
-
Fixes a bug in index transaction state where nodes/relationships created/changed in the same transaction could sometimes be returned several times for queries using composite indexes.
-
Fix false-positive "Potential direct memory leak"
-
Do not select legacy
graph.db
as the default if present -
neo4j-admin import
does not accept any existing database (even empty ones). Supply--force
to remove any files prior to import -
CSV Import: add support for array data types
point[]
,date[]
,time[]
,datetime[]
,localtime[]
,localdatetime[]
,duration[]
-
Fixes an issue where under very specific circumstances an upgraded database could get into a state where it had a chance to assign non-unique transaction IDs to committing transactions
-
Fixes an importer issue where looking up an ID where there were multiple equal in different groups may result in ArrayIndexOutOfBoundsException.
-
Remove support for
US/Pacific-New
timezone. Existing values that use unsupported timezone will be interpreted asUS/Pacific
. -
DatabaseTransactionEventListeners calls afterCommit/Rollback on all
-
Update Log4j to 2.15.0 to address CVE-2021-44228
-
Update Log4j to 2.16.0 CVE-2021-45046
-
Breaking change: Stop shading log4j and update the public logging API
-
Close kernel transaction on periodic transaction context commit
-
Fixes an issue in importer where large node IDs from CSV source that were additionally stored as node property may sometimes end up with the wrong value.
-
Fix an issue where ExpandInto can call get degrees on a dense node when DENY privileges are present. This causes a large amount of unnecessary permissions checks to occur.
-
-
Points are now incomparable, i.e.
x < point
andx > point
evaluates toNULL
for allx
. For range seek queries please usepoint.withingBBox
instead- Fix so that we get consistent results for range queries on durations regardless if there is an index or not.
- Fix inconsistent behaviour:
duration < duration
andpoint < point
evaluates toNULL
instead ofFALSE
-
-
Add isAvailable() to GraphDatabaseService
-
Restrict Node::getRelationships return types such that its resource can be released
-
Extend ResourceIterable such that it can release its resource
-
Remove obsolete NeoStoreCommand
-
Adds "element ID" accessors to the neo4j embedded java API:
-
Node#getElementId()
andRelationship#getElementId()
-
Transaction#getNodeByElementId(String)
andTransaction#getRelationshipByElementId(String)
Element IDs are references to entities that, in addition to the internal entity ID, contains information about which database it belongs to.
-
-
Update relationship index schema syntax in logs and exception messages to align with cypher syntax i.e
-[:REL {prop1, prop2}]-
becomes()-[:REL {prop1, prop2}]-()
-
Reduces memory overhead of temporarily buffered deleted internal record IDs
-
Ensure resources closed when using ResourceIterables and ResourceIterators
-
Remove lucene+native-3.0 index provider. It is replaced by TEXT, RANGE and POINT indexes.
-
Fixes an issue cleaning up registered metrics after a failure to start a database, preventing it from being start after that point within the same dbms session.
-
Remove legacy dbms.directories.tx_log setting
-
Remove
dbms.index.default_schema_provider
setting and associatedSchemaIndex
enum. Index provider can be selected through theOPTIONS
clause forCREATE INDEX/CONSTRAINT
-
Fixes a bug in
neo4j-admin report
command where using theheap
classifier would make the command fail withError: Failed to write heapdump.hprof
-
CREATE DATABASE
acceptsstoreFormat
inOPTIONS
clause. The option controls the store format of a newly created database, if using the command to connect a loaded database the option will have no effect. -
Remove support for the
USING PERIODIC COMMIT
query hint. The recommended replacement isCALL {...} IN TRANSACTIONS
-
Removed the following deprecated procedures (replaced by
SHOW TRANSACTIONS
andTERMINATE TRANSACTIONS
):dbms.listTransactions()
dbms.killTransaction(<tx-id>)
dbms.killTransactions(<tx-ids>)
dbms.listQueries()
dbms.killQuery(<query-id>)
dbms.killQueries(<query-ids>)
-
Much faster rebuild of relationship group degrees store
-
Update PublicApi so that PathExpander returns ResourceIterable
-
neo4j-admin import
respectsdbms.logs.debug.format
setting -
Update classification of Terminated and LockAcquisitionTimeout status codes
-
Always attempt to create database constraints in system graph during upgrade.
-
Escape character in config path parsing are now ignored. E.g setting
dbms.directories.data=\test dir\
, the\t
is no longer interpreted as a tab character. Mostly relevant for paths on Windows -
Advertised address settings will no longer inherit port from its corresponding listen address setting when unspecified. Instead default value for each affected setting will be used.
-
The old parameter
dbms.config.strict_validation
, which was false by default, has been replaced byserver.config.strict_validation.enabled
, which is true by default -
Removes
dbms.allow_upgrade
anddbms.record_format
settings. Changes to the store that used to be triggered by settingdbms.allow_upgrade=true
are now classified as either store upgrades or store migrations. Store upgrades (small, constant time changes) are done automatically on start up and store migrations must be done with the newmigrate-store
admin command.dbms.record_format
had two usages. First as the format used for newly created databases, that has been replaced by thedb.format
. Secondly as the format to use when upgrading the database, changing format family is classified as a migration and can now be done using themigrate-store
admin command. -
Remove BTREE index type. BTREE is replaced by RANGE, TEXT and/or POINT indexes. Make sure to replace or remove any BTREE indexes and constraints backed by BTREE indexes before migrating to 5.0. See the migration guide for more information.
-
Strict config validation (managed by
server.config.strict_validation.enabled
) no longer allows settings to be declared multiple times inneo4j.conf
, with the exception ofserver.jvm.additional
. -
Core API blocked from creating composite point indexes. Only single-property point indexes are supported
-
Closing relevant CSV metrics writers when database is shut down
-
Fixes a bug in import to
high_limit
format where an interrupted import could fail on being resumed withIllegal secondary record reference
-
The type of
<prefix>.vm.pause_time
metric is changed from gauge to counter. -
Consistency checker now checks id files for nodes, relationships and properties. Any used record with id up for reuse will result in a report:
The referenced record is in use but the id is up for reuse in the id file.
-
Fixes a bug where nodes not having the required property for a node key constraint could be created during the creation of the constraint. They would silently violate the constraint and leave the database with a non-fulfilled node key constraint
-
Setting namespaces validation
-
The
DbmsInfo
class accessible through theorg.neo4j.kernel.extension.context.ExtensionContext
does not contain theOperationalMode
(core, read replica, single) anymore. Extension users can resolve the dependency toHostedOnMode
if they want to find the allocation mode of a database at a particular instance. -
Update
org.neo4j.kernel.impl.coreapi.schema.PropertyConstraintDefinition#toString
to output the latest Cypher syntax for constraint creation. -
Update javadoc for IndexDefinition to not assume how index was originally created. Nothing has changed in terms of implementation.
-
Changes to output from
IndexDefinition#toString
. "UNIQUE" and "TOKEN" is not included in description of "type" anymore. Type will be only LOOKUP, FULLTEXT, RANGE, TEXT or POINT. -
New index types 'RANGE' and 'POINT' are now fully supported. 'RANGE' indexes support exact lookup and range type queries over all value types and is very similar to the removed 'BTREE' type. 'POINT' indexes support bounding box queries and exact lookup for point values. See documentation for more information.
-
Introducing
dbms.checkConfigValue(setting, value)
(enterprise,admin) prodcedure for checking if a given value is valid for provided setting. Extending existing proceduredbms.listConfig
result with additional information -
code review and more accurate documentation of the Traversal API
documentation: https://github.com/neo4j/docs-java-reference/pull/39
-
Clean usage of deprecated dbms.read_only in default neo4j.conf files.
-
Move
systemdb.secrets.*
settings intodbms.security.*
. -
More user-friendly exceptions when entities not found by elementId.
-
Fixes a bug where some transaction objects could be leaked instead of being released properly.
-
Remove deprecated procedures: db.indexes and db.constraints
-
Greatly improves worst-case performance of scanning for deleted IDs to be reused for new records
-
Changing the default transaction log retention from 7 days down to 2 days. Controlled by setting
db.tx_log.rotation.retention_policy
-
Make metrics namespaces mandatory.
-
Jvm additional setting should not split inside quoted values
-
Fixing an issue where 'CALL { ... } IN TRANSACTIONS' could leak inner transactions when the outer transaction was terminated during execution, e.g by timeout
-
Update Coordinate class to expose coordinates as array of primitives instead of list of objects
-
Renaming
Neostore records
header in diagnostics logging toMetadata
-
Removal of dbms.allow_single_automatic_upgrade setting
-
Fix node degree calculation when relationships are removed in the same transaction
-
Allow underscore between digits in number literals.
-
add support for WHERE clauses inside relationship patterns
-
Bug fix: Neo4j now also accepts datetime expressions including an offset of times immediately after switching from summer time to winter time.
-
update to driver version 4.4.0
-
Fix bug in cypher shell where it would fail to start in windows.
-
update to driver version 4.4.1
-
Fix unnecessary
Eager
planned betweenMATCH
andMERGE
on different labels. -
Fix bug where planner would fail to find a sorted plan to fulfil order on two variables including aggregation, which would result in issuing an "Expected a sorted plan" error.
-
Remove deprecated security procedures:
- dbms.security.createUser. Replaced by CREATE USER
- dbms.security.deleteUser. Replaced by DROP USER
- dbms.security.suspendUser. Replaced by ALTER USER
- dbms.security.activateUser. Replaced by ALTER USER
- dbms.security.changeUserPassword. Replaced by ALTER USER
- dbms.security.changePassword. Replaced by ALTER CURRENT USER SET PASSWORD
- dbms.security.createRole. Replaced by CREATE ROLE
- dbms.security.deleteRole. Replaced by DROP ROLE
- dbms.security.addRoleToUser. Replaced by GRANT ROLE
- dbms.security.removeRoleFromUser. Replaced by REVOKE ROLE
- dbms.security.listUsers. Replaced by SHOW USERS
- dbms.security.listRolesForUser. Replaced by SHOW USER
- dbms.security.listRoles. Replaced by SHOW ROLES
- dbms.security.listUsersForRole. Replaced by SHOW ROLES WITH USERS
-
Upgrade to Scala 2.13
-
Neo4j now utilises range indexes when planning queries.
-
The function
distance
has been been replaced bypoint.distance
-
Removed the commands for dropping indexes and constraints by schema.
-
DROP INDEX ON :Label(prop)
- Replaced byDROP INDEX name
. -
DROP CONSTRAINT ON (node:Label) ASSERT (node.prop1,node.prop2) IS NODE KEY
- Replaced byDROP CONSTRAINT name
. -
DROP CONSTRAINT ON (node:Label) ASSERT node.prop IS UNIQUE
- Replaced byDROP CONSTRAINT name
. -
DROP CONSTRAINT ON (node:Label) ASSERT EXISTS (node.prop)
- Replaced byDROP CONSTRAINT name
. -
DROP CONSTRAINT ON ()-[r:R]-() ASSERT EXISTS (r.prop)
- Replaced byDROP CONSTRAINT name
.
-
-
Fixed a bug where using values returned from a procedure would cause a type error like
Type mismatch: expected Float, Integer or Duration but was Number
. -
Removed the
BRIEF
,VERBOSE
andEXISTS
keywords forSHOW INDEXES
andSHOW CONSTRAINTS
.-
SHOW INDEXES BRIEF
- Replaced bySHOW INDEXES
. -
SHOW INDEXES VERBOSE
- Replaced bySHOW INDEXES YIELD *
. -
SHOW CONSTRAINTS BRIEF
- Replaced bySHOW CONSTRAINTS
. -
SHOW CONSTRAINTS VERBOSE
- Replaced bySHOW CONSTRAINTS YIELD *
. -
SHOW EXISTS CONSTRAINTS
- Replaced bySHOW EXIST CONSTRAINTS
. -
SHOW NODE EXISTS CONSTRAINTS
- Replaced bySHOW NODE EXIST CONSTRAINTS
. -
SHOW RELATIONSHIP EXISTS CONSTRAINTS
- Replaced bySHOW RELATIONSHIP EXIST CONSTRAINTS
.
-
-
Fixes exception "org.neo4j.exceptions.CypherTypeException: Property values can only be of primitive types or arrays thereof" thrown when concatenating a list with an empty list.
-
Auto completion of commands in Cypher Shell.
-
Fix a bug where, in rare cases, matching with an optional match on the same thing as a preceding match would fail during planning.
-
Update to driver version 4.4.2
-
Fix a bug in the heap memory tracking of intermediate results in the pipelined runtime, that could lead to underestimation of the heap usage for certain queries, and potentially trigger JVM out-of-memory errors for queries consuming too much memory.
-
Fix a bug where, in rare cases, reusing a variable that had previously been used as a path variable would fail during planning.
-
Fix a bug where errors could be masked when using
IS NULL
orIS NOT NULL
-
Fix a bug that could trigger a null pointer exception in the slotted and pipelined runtimes for certain query plans where an
OPTIONAL MATCH
with a predicate containingOR
was planned with aUnion
operator. -
During a rolling upgrade from 4.1 or earlier, roles don't have the privilege required to execute UDFs.
These privileges are added to the PUBLIC role after the upgrade is done, but not during compatibility mode.
This is the error when trying to execute a UDF:
Executing a user defined function is not allowed for user 'XXX' with roles [PUBLIC, architect].
This privilege is now in the list of temporary privileges which take effect during upgrades.
-
Improved performance of queries containing
UNWIND
andCALL IN TRANSACTIONS
-
Fix a memory leak of the runtime transactional context into the query plan cache
-
Support new syntax for expressing node labels. New operators include:
-
&
: logicalAND
-
|
: logicalOR
-
!
: logicalNOT
-
%
: A "wildcard", meaning "any label" (in Cypher this translates tosize(labels(n)) > 0
Operators can be combined to form assertions on node labels in
MATCH
clauses, e.g.MATCH (n:A|(B&!C))
. -
-
Implied grouping keys are no longer supported. Only expressions that do not contain aggregations are grouping keys.
-
"Expose driver logs in Cypher Shell, with the new
--log
parameter and:log
command. -
Patterns like
CREATE (a {prop:7})-[r:R {prop: a.prop}]->(b)
where a variable introduced in the pattern is also referenced from the same pattern are no longer supported. -
If a query was accessing values via the index (
prop[...]
), the planner would always assume that these were dynamic properties. and plan anEager
operator if there may have been a read-write-conflict. This is now changed if the index access is using literals likeprop[0]
orprop['key']
. -
The deprecated
ON DEFAULT GRAPH
andON DEFAULT DATABASE
syntax for privileges are no longer supported, useON HOME GRAPH
andON HOME DATABASE
instead. -
Fix bug in aggregations with LIMIT where query would fail with an array copy out of bounds error.
-
Represent empty column headers with empty string in
LOAD CSV
. -
Removal of the old parboiled parser for Cypher. This has been fully replaced by the new Javacc parser.
-
Support for impersonation in Cypher Shell.
-
Fixed issue where query analysis and planning was not terminated when transaction was terminated.
-
Removed the procedures for creating and dropping fulltext indexes.
-
db.index.fulltext.createNodeIndex()
- Replaced byCREATE FULLTEXT INDEX ...
. -
db.index.fulltext.createRelationshipIndex()
- Replaced byCREATE FULLTEXT INDEX ...
. -
db.index.fulltext.drop()
- Replaced byDROP INDEX ...
.
-
-
Removed the deprecated syntax for creating indexes and constraints.
-
CREATE INDEX ON :Label(prop)
- Replaced byCREATE INDEX [name] FOR (node:Label) ON (node.prop)
. -
CREATE CONSTRAINT ON (node:Label) ASSERT (node.prop1,node.prop2) IS NODE KEY
- Replaced byCREATE CONSTRAINT [name] FOR (node:Label) REQUIRE (node.prop1,node.prop2) IS NODE KEY
. -
CREATE CONSTRAINT ON (node:Label) ASSERT node.prop IS UNIQUE
- Replaced byCREATE CONSTRAINT [name] FOR (node:Label) REQUIRE node.prop IS UNIQUE
. -
CREATE CONSTRAINT ON (node:Label) ASSERT EXISTS (node.prop)
- Replaced byCREATE CONSTRAINT [name] FOR (node:Label) REQUIRE node.prop IS NOT NULL
. -
CREATE CONSTRAINT ON (node:Label) ASSERT node.prop IS NOT NULL
- Replaced byCREATE CONSTRAINT [name] FOR (node:Label) REQUIRE node.prop IS NOT NULL
. -
CREATE CONSTRAINT ON ()-[r:R]-() ASSERT EXISTS (r.prop)
- Replaced byCREATE CONSTRAINT [name] FOR ()-[r:R]-() REQUIRE r.prop IS NOT NULL
. -
CREATE CONSTRAINT ON ()-[r:R]-() ASSERT r.prop IS NOT NULL
- Replaced byCREATE CONSTRAINT [name] FOR ()-[r:R]-() REQUIRE r.prop IS NOT NULL
.
-
-
Fixed a bug where matching on the same variable multiple times would trigger an exception during planning or produce incorrect results.
-
SHOW PRIVILEGES will now display the home database as 'HOME' instead of 'DEFAULT'
-
Fix bug where you could get an error message like
Cannot put key x before first key y
, for example in queries usingSelectOrSemiApply
orConditionalApply
andLimit
. -
Faster execution of queries of the form
MATCH (n)-[*..5]->(m) RETURN DISTINCT m
, that is queries where you are only interested in the distinct end-nodes of a pattern and do not require all relationships to be traversed. -
Fix cache properties invalidation when row does not match the predicate in optional expand
-
Fix a rare bug where the output rows of some queries would be unordered, even though an
ORDER BY
had been correctly placed, see: https://github.com/neo4j/neo4j/issues/12840 -
Fix bug where range index seeks of array types always returns empty result. For example in queries like
MATCH (n:Node) WHERE n.indexedProperty > [0] RETURN n;
. -
The aliases column in SHOW DATABASES should be CTList(CTString)
-
Fix error of the kind arraycopy: last source index 1 out of bounds for long[0]
which could occur when a CartesianProduct was planned under a NestedPlanExpression in pipelined runtime.
-
Fixed an error due to which very particular queries with the same predicate on both sides of an
OR
expression could not be planned. -
Pattern expressions for checking existence are no longer supported, except for use in
WHERE
clauses. Use a pattern comprehension instead. -
Use lists that are stored in properties as input to toIntegerList, Github issue: opencypher/opencypher#526
-
Fix an issue with user-defined aggregation functions where the result-method could sometimes be called twice on the same row (incorrectly assuming the implementation to be idempotent)
-
Remove support for existence check of properties using
exists()
. The syntaxexists(property)
has been replaced byproperty IS NOT NULL
. -
Add ability to yield and filter the output from
TERMINATE TRANSACTIONS
. This will not affect what is terminated, only what is returned afterwards.TERMINATE TRANSACTIONS
does not allow just filtering withoutYIELD
, soTERMINATE TRANSACTION 'txId' WHERE message <> 'Transaction terminated.'
is not valid butTERMINATE TRANSACTION 'txId' YIELD * WHERE message <> 'Transaction terminated.'
is. -
Usages of GetDegree wasn't obvious in the plan description. Now instead
of
size([pattern])
usages of GetDegree will be rendered withgetDegree([pattern])
. -
Update driver to 4.4.5
-
Unaliased expressions are no longer supported in subquery
RETURN
clause. UseRETURN <expression> AS name
. -
Updated the output column set for
SHOW TRANSACTIONS
. Removed columnallocatedBytes
as it was not tracked. Added columnscurrentQueryStartTime
,currentQueryStatus
,currentQueryActiveLockCount
,currentQueryElapsedTime
,currentQueryCpuTime
,currentQueryWaitTime
,currentQueryIdleTime
,currentQueryAllocatedBytes
,currentQueryPageHits
, andcurrentQueryPageFaults
for the current query in the transaction (previously part ofdbms.listQueries
). -
Cypher now supports relationship type expressions like
MATCH ()-[r:!A&!B]->()
. -
Before this change, pattern expressions in boolean contexts were marked as deprecated. This deprecation was removed.
-
Fixed bug where eagerness was handled incorrectly for overlaps in labels for predicates.
-
A new function that returns wether a value is or is not a NaN value
-
Decouple the
EXECUTE
andEXECUTE BOOSTED
privileges to remove the implicitEXECUTE
from theEXECUTE BOOSTED
privilege. -
Add new operator
Trail
used for solving quantified graph patterns. -
Add columns creationTime, lastStopTime, lastStopTime to the column set for SHOW DATABASES.
-
Introduced the COUNT{} expression to replace the deprecated uses of size() with a relationship pattern
-
The octal syntax
0123
and hexadecimal syntax0X123
is no longer supported. Use0o123
and0x123
instead. -
discontinue support for remaining patterns with repeated relationship variables such as `MATCH ()-[r]-()
RETURN [ ()-[r]-()-[r]-() | r ] AS rs`
-
Discontinue support of coercion of list to boolean such as
WHERE [1, 2, 3]
. Please useNOT isEmpty(...)
instead. -
Fixed
Comparison method violates its general contract
error during planning. -
The commands
SHOW TRANSACTIONS
andTERMINATE TRANSACTIONS
can now be used together in a single query. For example, terminating all ofAlice
transactions:SHOW TRANSACTIONS YIELD transactionId AS txId, username AS user WHERE user = 'Alice' TERMINATE TRANSACTION txId YIELD message RETURN txId, message
-
Github issue: neo4j/neo4j#12887, fix an issue with
ltrim
,rtrim
, andtrim
. -
Fix potential
Expected as string value 'substring', but got NO_VALUE'
error when the output of
reduce
is used as input to another function. -
New surface to administer fabric databases, now named “COMPOSITE DATABASES�. Configuration settings have been removed and Composite Databases are now administered via Cypher commands.
-
Fixed rare bug where self reference in equality (´WHERE n:L AND n.p = (n.p = n.p)´) caused stackoverflow error.
-
slotted runtime is now the new default community runtime.
-
Remove dbms.security.oidc.<provider>.redirect_uri setting which has been deprecated and is no longer required.
-
Removed the ability to change Cypher Versions by prepending queries with "CYPHER X.Y" or using the config setting "cypher.default_language_version".
-
Enable use of environment variable
NEO4J_ADDRESS
to specify connection address in Cypher Shell. -
Updated output columns for
SHOW INDEXES
andSHOW CONSTRAINTS
:- Removed
uniqueness
column fromSHOW INDEXES
. - Added column
owningConstraint
(string) toSHOW INDEXES
, giving the name of the connected constraint (or null when the index does not belong to any constraint). - Changed column
ownedIndexId
(long) toownedIndex
(string) forSHOW CONSTRAINTS
, giving the name of the backing index (or null when not index backed).
- Removed
-
Adds
DEALLOCATE DATABASES FOR SERVER
,DROP SERVER
, andSHOW SERVERS
commands for managing server instances. -
null values will now match the ELSE clause in CASE expressions
-
Fix bug in Reduce Expressions and List comprehensions hiding variables that should be in scope https://github.com/neo4j/neo4j/issues/12868
-
Logical plans where the same variable is introduced in multiple leaves can cause trouble with inserting eager, which might make the query end up with incorrect results. Before this fix we assumed that a variable was stable as long as it was stable on one leaf. Fix: A variable should be considered unstable if it is both unstable and stable. Fixes github issue https://github.com/neo4j/neo4j/issues/12878
-
Deprecate the use of nodes/relationships on the RHS of a Set Clause e.g
MATCH (n)-[r:REL]->(m) SET n=r
should now beMATCH (n)-[r:REL]->(m) SET n=properties(r)
-
Upgrade Apache Shiro from
1.8.0
to1.9.1
. This version includes fixes forCVE-2022-32532
. -
Add new operators, DirectedAllRelationshipsScan and UndirectedAllRelationshipScan to Cypher.
Benchmarks:
- 2.12x generatedmusicdata_read Q35
- 3.11x musicbrainz Q25
- no regressions, there aren't many queries where this would be a candidate though. Typically queries use a relationship type and a RelationshipTypeScan should in those cases be more efficient.
-
Fix a bug where SHOW TRANSACTIONS would fail when transaction metadata contains types that cannot be serialised to a property (e.g. List)
-
Fix bug with undirected relationship scans and self-loops
-
Fix overflow in resource manager. Users could get errors like java.lang.IllegalArgumentException: Expected positive long value, got -8589934576 because of an overflow when trying to grow the number of tracked resources.
-
Add store column to SHOW DATABASES output
-
Disconnect driver session on exit in Cypher Shell.
-
It is not allowed to in one clause mix label expressions containing non-GPM symbols such as ':' together with GPM-specific symbols such as '(', ')', '&', '!'.
-
Add parameter
--uri
and environmental variableNEO4J_URI
as alternative ways to specify connection address. -
fix issue where ExpandInto could return the wrong result
-
All notifications should have classification
ClientNotification
. In this PR we fix some of the current notifications which had severityClientError
orDatabaseError
. -
introduce Infinity, Inf and NaN as Float literals
-
When debug logging is enabled, LdapRealm can attempt to directly log
Neo4jPrincipal objects resulting in logging like org.neo4j.server.security.auth.Neo4jPrincipal@f1d6260f. Fix it to log the username as expected.
-
Adds
ENABLE SERVER
command for managing servers. -
Updates severity on some of the existing notifications. Also, updates status code accordingly (removing
Warning
from the name if it now has severityInformation
) -
Deprecate
runtime=interpreted
-
Don't throw when seeking the index for values that cannot be indexed.
-
The deprecated username field has been removed from the security and query logs.
-
Adds
RENAME SERVER
command for managing servers -
Adds TOPOLOGY option to CREATE and ALTER DATABASE to specify desired count or primary and secondary servers per database.
-
Adds
REALLOCATE DATABASES
andALTER SERVER
command for managing servers
-
Fixes an issue with token creation (labels, property keys and relationship types) in clustering where internal IDs of created tokens may not be unique, i.e. multiple members could end up creating tokens with the same internal IDs.
-
dbms startup is now asynchronous, which mean that after system database is started the bolt port opens, and other databases start asynchronously and may not be available immediately.
-
Track size of log entries to avoid prefetch buffer exceeding memory constraints.
-
Remove requirement to have multi-DC licence to access multi-DC features.
Ticket: https://trello.com/c/ECvnAxM4
-
Neo4j and cypher-shell deb installers' dependencies changed to be compatible with Oracle java 17.
- Can no longer use headless JRE due to a circular dependency bug in OpenJDK17 on Ubuntu 18.04
-
cypher-shell java 17 dependency changed to non-headless jre to be compatible with zulu java
-
Fully removed init.d support for 5.0 in the rpm and deb packages. Users must use
systemctl
and the neo4j.service file installed by the packages. For examplesudo systemctl start neo4j
.
- Update
jackson-databind
from2.13.1
to2.13.2.2
(and thus alsocom.fasterxml.jackson.*
from2.13.1
to2.13.2
), to address CVE-2020-36518 - Upgraded jetty to v9.4.48 in order to mitigate CVE-2022-2047 and CVE-2022-2048
- Touch up guides ✨styling✨
- Fix cluster detection on neo4j 4.3+
- Fix bug with incorrect version number & add git hash to overview in stand-alone deployment
- Zoom to cursor on scroll in visualization
- Make sure editor displays full database name
- Zoom graph to fit after initial visualization animation
- Clear credentials in connection form on disconnect
- Update :help articles on INDEX & CONSTRAINT
- Fix credential timeout without initial user interaction
- Fix links not being blue and not being highlighted in the sidebar
- Remove Legacy HTTP API (where endpoints begin with
/db/data/transaction/
). Please use the endpoints that include the database name (e.g./db/neo4j/tx/commit
).