All notable changes to this project will be documented in this file. This file should follow the standards specified on [http://keepachangelog.com/] This project adheres to Semantic Versioning.
- Old
neo4j-core
API has been removed. All interaction should now be throughNeo4j::Core::CypherSession
. Many paths inside of the gem have been standardized underlib/neo4j/core
. - Bolt adaptor now supports TLS. TLS / SSL required by default. See documentation for more information.
- Speed improvements have been made to the Bolt adaptor
- Bolt adaptor is now using the
net_tcp_client
gem in an effort to improve robustness - Added source line of queries to logs via
verbose_query_logs
option on all adaptors (fixes #1497) - Added Driver adaptor which can leverage a neo4j driver implementation (see preview at https://github.com/neo4jrb/neo4j-ruby-driver )
- Allow newer version of
faraday_middleware
gem (thanks @RicardoTrindade / see #315)
- When getting an error from the server, handle other error cases than just when
errors
is present in the response (thanks @mrstif / see #313)
- Adding link to
CHANGELOG.md
as shown on https://olivierlacan.com/posts/changelogs-on-rubygems-org/
- Require
socket
in Bolt adaptor so that users don't have to (thanks @bglowacki / see #311)
- Added
with_distinct
method sinceDISTINCT
is not something that applies to one column but to all columns
- Add unused argument for HTTP and Embedded adaptors since it was needed for the Bolt adaptor (thanks to @pmaite88 on Gitter)
- Add support for #version in Bolt adaptor to fix migration issue (thanks @gottfrois and @JustinAiken / see #303)
- Avoid confusing error for HTTP adaptor when
uri
library isn't loaded (thanks @simpsonjulian / see #305) - Output request times for Bolt adaptor
- Allow configuration of timeout in Bolt adaptor (thanks @amiel / see #304)
neo4j-rake_tasks
gem is no longer a dependency forneo4j-core
. Because many people don't use it, and because many people don't understand it, it will now need to be explicitly required for your project
- Allow configuration of timeout in Bolt adaptor
- Bolt adaptor fix for JRuby.
sendmsg
was being used, which JRuby doesn't support. Switched tosend
(thanks @jgaskins / see #300)
start_node_neo_id
andend_node_neo_id
onNeo4j::Core::Relationship
objects (see #298 / thanks @klobuczek)
- Support for jRuby 1.7.x
- Support for querying non-integer ranges (see #295 / thanks @jgaskins)
- Guard against
nil
value (thanks @WardCunningham / see #293)
- Use
typhoeus
in old API as well to fix tests. Also includerequire
statements (see this issue)
- Changed default adaptor for HTTP adaptor in new API to use
typhoeus
rather thannet-http-persistent
because it has shown itself to be more stable under higher load
- Guard against
nil
value (thanks @WardCunningham / see #293)
- Changed configurating from
faraday_options
tofaraday_configurator
because it works for all configuration
- Added back ability to configure internal faraday adaptor (thanks @heavydawson / see #288)
- Fix Ruby 2.4 deprecations re: Integer (see #290 / thanks @jboler)
- Allow for newer versions of Faraday (thanks @thanksafestein / see #287)
- Support returning state information from indexes with Bolt (thanks @heavydawson / see #285)
- Handling messages sent in multiple chunks (thanks @dominikgrygiel / see #284)
- Return
Neo4j::Core::CypherSession::ConnectionFailedError
proprety on connection failure with Bolt adaptor
Neo4j::Core::CypherSession::ConnectionFailedError
raised on requests to Neo4j (not just on connections)
after_commit
hooks for transactions (see #277 / thanks @ProGM)
- When requests for constraints and indexes return an error, it is now raised as a Ruby exception (see neo4jrb/devise-activegraph#27 and neo4jrb/activegraph#1334)
NO CHANGES FROM 7.0.0.rc.2
- Gemspec changes to not allow upgrade to
net-http-persistent
because of breaking changes in 3.0.0 of that gem (thanks @ProGM)
- No changes from
alpha.8
- Bug with bolt and large parameters
- Error handling and debug messages
call
method forQuery
API forCALL
clause introduced in Neo4j 3.0 (see #268)
- Changes to reduce memory allocations (Thanks ProGM / see #261)
- Raise standard
Neo4j::Core::CypherSession::ConnectionFailedError
error instead of individual errors from adaptors
- Fixed error when running rake tasks #1251
- Fixed CypherError handling (thanks ProGM / see #263)
- Ability to specify
:neo_id
/'neo_id'
in order clauses to order byID()
(thanks klobuczek / see: #253) - Introducing new Cypher session API which is designed to replace the old API (WHOA!)
- Bolt support via the new session API
- Removed httparty dependency which is no longer used (thanks isaacsanders / see #257)
- If using a threaded server, a new session must be created for each thread (see upgrade guide)
- Fixed
net-http-persistent
errorwrong number of arguments (given 2, expected 0) (ArgumentError)
by requiring~> 2.9.4
(3.0 introduced a breaking change) (Thanks to tildedash on Slack and @swiftly112)
call
method forQuery
API forCALL
clause introduced in Neo4j 3.0 (see #268)
detach_delete
method forQuery
API forDETACH DELETE
clause introduced in Neo4j 2.3
- Added parens to queries to support new required syntax in Neo4j 3.0
- Returning paths within transactions in Server mode could result in incorrectly wrapped nodes.
- The process of parsing responses from the transactional endpoint was simplified and improved. A few methods tied directly to the old implementation and with no reusability were removed. See #249 for changes.
- There is no longer a need to know about / use the
WITHOUT_NEO4J_EMBEDDED
environment variable if you want to use server mode in jRuby. - Node and relationship objects can now be marshaled
- Reverted thread fix from 6.0.2 because I didn't quite know what I was doing. Will tackle it again later...
- Fixed issue where there was a need to
require 'neo4j/core/cypher_session'
(see #224)
- Make sessions thread-safe
- Make sure that limit only gets shifted if it directly follows a
with
ororder
- No changes from rc.1
This release contains no changes since the last alpha. Below are all modifications introduced in alpha releases.
- Depends on
neo4j-rake_tasks
~> 0.3.0. - Removed
Neo4j::Session#on_session_available
, replaced withNeo4j::Session#on_next_session_available
. The new method will empty its queue as it is played. - Refactored
Neo4j::Label#create_index
andNeo4j::Label#create_constraint
to have compatible signatures. As part of the refactoring ofNeo4j::Label#creator_index
, the method no longer accepts multiple properties. The method will need to be called once for each, when needed.
- New session, adaptors, and rewritten Node, Relationship, and Path classes. They are not yet in use but are part of ongoing refactoring and rebuilding.
- Embedded params hash bug, merged from 5.1.x branch and released in 5.1.11.
- Fixes bug in transaction handling introduced by Neo4j 2.2.6.
- Merges changes from 5.1.9
- Embedded params hash bug, merged from 5.1.x branch and released in 5.1.11.
- Fixes bug in transaction handling introduced by Neo4j 2.2.6.
- Merges changes from 5.1.9
- Merges changes from 5.1.8
- Depends on
neo4j-rake_tasks
~> 0.3.0.
- Removed
Neo4j::Session#on_session_available
, replaced withNeo4j::Session#on_next_session_available
. The new method will empty its queue as it is played. - Refactored
Neo4j::Label#create_index
andNeo4j::Label#create_constraint
to have compatible signatures. As part of the refactoring ofNeo4j::Label#creator_index
, the method no longer accepts multiple properties. The method will need to be called once for each, when needed.
- New session, adaptors, and rewritten Node, Relationship, and Path classes. They are not yet in use but are part of ongoing refactoring and rebuilding.
- Fixed case where
config[:properties_map]
was not aHash
- A bug prevented users of Embedded from executing Cypher queries with hashes contained in params.
- Auto-closing transactions appear to have been introduced in 2.2.6.
- Improved logic around auto-closing transactions in 2.3.0
- Issue with transactions in 2.3.0 (see neo4jrb/activegraph#1004)
- Update
neo4j-rake_tasks
to addshell
task
- Fix identification of objects returned from Neo4j which look like nodes or relationships
- Update
neo4j-rake_tasks
version (which now adds theconsole
task)
- Update
neo4j-rake_tasks
version (which now usesrubyzip
gem instead ofzip
gem)
Query#optional_match_nodes
method
- Using parethesis in
where
method call shouldn't make double parens and should allow for question mark params to work correctly
- Query#where_not method to make certain
WHERE NOT()
statements easier
- Bugs from code that was supposed to be on a branch
- Support pretty cypher queries via
Query#print_cypher
andQuery#to_cypher
withpretty: true
- nil passed to limit results in no LIMIT clause
- Parameterize regular expressions passed into
where
clauses
require 'uri'
inCypherSession
for environments where it isn't alreadyrequire
d (Issue #221)
- Added
Query#match_nodes
method to easily match variables to nodes/neo_ids
- Refactoring of instrumentation done in 5.0.2 caused errors in embedded mode
- Added default arguments to
neo4j:install
rake task
- Crash in query logging when params were not given.
- Support Ruby ranges for querying by changing to Cypher RANGE
- Not all queries were being logged. Moved instrumentation to a lower level
- Collections returned from Cypher within transactions were being misinterpreted. (#213)
- Maps returned from Cypher were being treated as node/rel objects in Server mode, Arrays in Embedded. (See #211)
- Allow properties_map Hash in HA configuration
- Error when creating a relationship property as a array value of size one, value is set to first item in array instead (see neo4jrb/activegraph#814)
- Set Ruby version requirement back to 1.9.3 because of problems with JRuby
- Ruby 2.0.0 now required (>= 2.2.1 is recommended)
- Rake tasks
neo4j:(install|start|stop|restart|info|reset_yes_i_am_sure)
now output log messages / errors - In
Query
chains, awith
followed immediately by alimit
and/or anorder
will have thelimit
/order
clauses applied to it as you would expect - Major refactoring using
rubocop
and speed improvements - Queries are retried on failure to deal with
RWLock
errors
- Bug when starting/stopping embedded sessions repeatedly (like for tests) fixed
Query#count
method now availableQuery#clause?
method now available to determine if aQuery
object has a particular clause defined- Arrays can now be passed as labels in a
Query
chain (e.g..match(n: [:Person, "Animal"])
generates: MATCH (n:Person
:Animal
) ) - The
Query#set
andQuery#remove
methods now support setting labels (either viaSymbol
s orArray
s)
(There are probably other changes too!)
Changes above this point should conform to [http://keepachangelog.com/]
- A lot of work working with rubocop to clean up code
- Many instances of using strings were changed to use symbols
- Certain query responses are now automatically retried
Neo4j::Core::Query
changes- WHERE clauses from
Query
chains are now surrounded by parentheses to avoid problems - WHERE clauses now support Arrays and
nil
values for labels - WHERE clauses with strings now support a second argument for parameters. Examples:
where("foo = {bar}", bar: value)
)where("foo = ?", value)
)
- REMOVE clauses now quote labels and support arrays to specify all labels and properties for one variable
- RETURN clauses now turn
:neo_id
intoID(var)
- New method
#clause?
lets you determine if aQuery
object had a clause called upon it in the past - New method
#count
lets you query a count of a variable
This release focuses mostly on performance and security.
- Fixed a few n+1 queries, force the use of params in more common locations.
- The CypherTransaction class was heavily refactored to improve the number of database connections required per transaction. This may be considered a breaking API change. Using
Neo4j::Transaction.new
orNeo4j::Transaction.run
as instructed in all docs and examples protects the user from this, so there should be no changes required to old code in most cases. - New Rake task:
neo4j:start_no_wait
-- thanks, @telzul! - Massive refactoring and general cleanup by Brian.
- Force more basic, common queries to use params. Early benchmarks suggest big performance improvements.
- Auth improvements. You can now use a valid Neo4j token with any username to authenticate.
- Swapped out
START n=node...
forMATCH (n) WHERE ID(n)...
for compatibility with Neo4j 2.2. - Added a new class, CypherAuthentication, to support Neo4j 2.2's new authentication endpoint.
- Modified the
neo4j:install
rake task to disable authentication in Neo4j 2.2. - New rake tasks that do exactly what you expect:
neo4j:enable_auth
,neo4j:disable_auth
,neo4j:change_password
. All 2.2 only, of course. - Travis-CI will run against its MRI specs against Neo4j 2.2 with Ruby 2.1.5.
- Use params for all
create
actions to improve performance and security. - More tweaks to the string escaping process.
- Mild refactoring for DRY and performance.
- Small bugfix. Releasing so neo4jrb/neo4j doesn't need to pull from master in its new release.
- Move improved escaping of Cypher params
- When using Neo4j >= 2.1.5, use the metadata keys in Cypher responses to find labels when loading nodes
- Adds
version
method to Embedded and Server sessions - Improved escaping of Cypher params
- Bug fix: automatic parsing of basic auth params in URL (Thanks, Miha Rekar!)
- Adds find_in_batches method, see github wiki for documentation: https://github.com/neo4jrb/neo4j-core/wiki
- Bug fixes to sanitize params and remove blank clauses
- Adds a user agent string to connections to identify the driver with the server
- Improved detection of transaction responses to prevent conflicts with property names
- Improved handling of cypher responses, particularly within transactions
No changes from rc 5
== 3.0.0.rc.5
- Misc fixes
- Changes to support neo4j gem
- Using faraday gem with net-http-persistent instead of httparty
== 3.0.0.rc.4
- Remove dependency on oj gem pending further tests.
== 3.0.0.rc.3
- Minor gemspec fix
== 3.0.0.rc.2
- Bugfix in gemspec related to oj and JRuby
== 3.0.0.rc.1
- Use JSON oj implementation for better performance on neo4j server
- Some performance improvements on regexps
- Better support for cypher collect to return array
- Security: prevent cypher injection
- Support to install via rake different neo4j server environments
- Support for query logger
- Distinct support for query dsl
== 3.0.0.alpha.19
- Better support for (nested) transaction #94
- Upgrade to Rspec 3 (#93 @ausmarton)
- Performance improvements for Neo4j Server, cache props (#86, #90, #91, chris, brian)
== 3.0.0.alpha.18
- Fix handling of arrays in embedded mode (#89)
- Performance improvements #86
== 3.0.0.alpha.17
- Complete rewrite of the query api (Brian Underwood#85)
- Better performance for Embedded Db - single ExecutionEngine instance in embedded DB (#83 chris)
- Added better error handling when trying to install Neo4j which does not exist via Rake
- Added better error handling when user forgot to create a session
== 3.0.0.alpha.16
- Impl rel_type for Neo4j::Relationship
== 3.0.0.alpha.15
- Prepared for RSpec 3.x
- Bumped neo4j-community to 2.1.1
== 3.0.0.alpha.14
- Improved and moved Neo4j::Label.query to Neo4j::Session.query (thanks Brian Underwood, Mark Bao)
- Implemented inspect method for some neo4j-server classes to make PRY/IRB happy.
== 3.0.0.alpha.13
- Fixing the neo4j:install rake task for systems without wget and Windows (#64, @ausmarton)
- Support for adding labels on existing nodes closes (#63)
- Session#query returns a hash for all values in a row (#61, @fiddur)
== 3.0.0.alpha.12
- Fixing find_nodes to not quote numeric values (#48)
== 3.0.0.alpha.11
- Added Basic Auth (HTTParty config) configuration on session (#58)
- Drop nil value on create (#56)
== 3.0.0.alpha.10
- Fix of data url in cypher session (#55)
- add escape sequence sanitization to cypher translator (#53)
- Handle update_props with nil value (#46)
== 3.0.0.alpha.9
- Support for RegExp search (#45)
== 3.0.0.alpha.8
- Support for Schema Constraints (#44)
- Fix for Rake Neo4j task (#43)
== 3.0.0.alpha.7
- Support for named sessions (#40, alex)
- Added method #update_props for Relationship and Node
- Added Neo4j::Relationship.create method
== 3.0.0.alpha.6
- Fixes for wrapper method on nodes needed by the neo4j 3.0 gem
== 3.0.0.alpha.5
- Better support for wrapping nodes, see Neo4j::Node::Wrapper
== 3.0.0.alpha.4
- Fix for cypher query, the wrapper hook method must be called to make neo4j gem happy
== 3.0.0.alpha.3
- Fix for cypher query where the column values was wrong
== 3.0.0.alpha.2
- Support for Neo4j 2.0.0 and the neo4j-community jar, removed includedd JAR files
- Simple Event support, notifying listener when database is started/usable
- Fix requirement for standalone neo4j-core Gem (#34, Kevin Hall)
== 3.0.0.alpha.1
- First test
== 2.3.0 / 2013-06-18
- Use 1.9 Neo4j Jars, (#29, Jannis)
- added ability to pass in params to Neo4j._query method (#28, kmussel)
== 2.2.4 / 2013-05-19
- Fix for from.rels(...).to_other(to), #27
- Add support for Relationship#nodes accessor #25, David Butler
- Fix for NoMethodError on exception message for the []= property method, #24, Aish Aishfenton
- Made Neo4j.start threadsafe #23, David Butler
- Better logging for Java Exception #22, David Butler
- Fixed RSpec problems and make it compatible with future RSpec 3
== 2.2.3 / 2012-12-28
- Raise an exception if get_or_create is called inside a transaction
- fix for JRuby 1.8 mode, #20
== 2.2.2 / 2012-12-27
- Use Neo4j 1.8.1 and avoid JRuby Warnings #19
== 2.2.1 / 2012-12-17
- Fix for create nodes and relationship using Cypher #17
- Fix for JRuby 1.7.1 - don't impl eql and == #18
== 2.2.0 / 2012-10-02
- Use 1.0.0 of neo4j-cypher
- Fix of Neo4j::Config issue using boolean values, neo4jrb/activegraph#218
- The []= operator checks that the value is a valid Neo4j value #16
== 2.2.0.rc1 / 2012-09-21
- Deleted, refactored, improved and moved cypher stuff to neo4j-cypher gem
- Add neo4j statistics, #15
== 2.1.0 / 2012-08-14
- Fix for cypher query with node(*) throw error. #13
- Add methods for Neo4j HA: ha_enabled? ha_master? #12
- Upgrade to 1.8.M06 - breaking changes, some traversals methods use path objects
== 2.0.1 / 2012-06-07
- Remove hard coded Gem dependencies to neo4j-advanced and neo4j-enterprise, #11
- Make it possible to specify protected keys for Neo4j::Node.update, #8, #9
- Added missing method for start and end_node, #7
== 2.0.0 / 2012-06-05