2.3-M01
-------

Cypher:
o Added new warning mechanism. The first supported warning is generated for queries that contain a potentially
  unintended catesian product
o Cypher may now use full index scans to solve queries containing has(n.prop) if apropriate

2.2.2
-----
o Fixes problem when using named paths and aggregation

2.2.1
-----
o NOTE: Support for Cypher version 2.0 and 2.1 will be removed in Neo4j 2.3
o Fixes #4315 - UNWIND not binding to identifier
o Fixes #4341 - START clause ignores associated WHERE
o Fixes #4331 - Alleged duplicate result column names
o Fixes #4342 - NameSpacing Identifiers in StartItem which are not in scope
o Fixes #4332 - ORDER BY not seeing identifiers from earlier scope
o Fixes problems with relationships passing through WITH in RULE planner

2.2.0
-----
o Fixed problem where undirected paths weren't being properly projected
o Introduced DP based algorithm as a planner option
o Ensure that the relationship unique constraint is respected when solving patterns in pattern-expressions
o Fixed bug when constructing named paths from undirected variable length relationship patterns
o Fixed NPEs when serializing data with missing keys through LOAD CSV

2.2.0-RC1
---------
o Fixes problem where eagerness was unnecessarily being introduced.
o Updates to the cost model to reflect measured costs of operators.
o Fixes problem with PERIODIC COMMIT interacting badly with LOAD CSV

2.2.0-M04
---------
o Fixes #3910 - Semantic errors not propagated correctly to the user
o Support ExpandInto mode for variable length paths
o Faster performance when counting number of relationships
o Support ExpandInto mode for projection of relationship end points
o Estimated rows in plan descriptions are rounded to three decimals
o Fixes DbHit counting for pattern expressions
o Faster performance when starting a pattern expression from a relationship
o Improved compile times by faster AST rewriting
o Fixes problem where the rule planner was always used for pattern expressions
o Adds the KEYS() function to Cypher
o Better performance by allowing index lookups on the RHS of Apply
o Fixes bug when using named paths and undirected relationships


2.2.0-M03
---------
o Re-allows legacy START syntax for loading nodes/rels by id or index lookup
o Treats named shortest path of length 1 as a var length path 1..1
o Fixes #3727: Handling of empty fields by LOAD CSV
o Fixes: Correctly report planner type in plan descriptions of UNION queries
o Shares plans between profiled/explained and regular variants of the same query in the plan cache
o Fixes: JSON plan descriptions now contain all identifiers
o Fixes #3828: ClassCastException during rewriting
o Removes unnecessarily introduced eargerness around use of MERGE ... ON CREATE SET ...
o Prevents literal property constraints in shortest path patterns
o Adds terminology section to Cypher manual

2.2.0-M01
---------
o Ronja, the cost based planner, is now the default
o Adds EXPLAIN and PROFILE to Cypher

2.1.8
-----
o Throw an exception when toInt() is used to parse a number too big to fit in 64 bits

2.1.7
-----
o Fixes problem when using undirected variable length paths
o Fix type error that made numbers coercible to boolean
o Fail with a helpful error message when predicates in shortest path can't
  be used as expected
o Fixes problem when using shortest paths with minimal length of 0
o Fixes bug when using index hints with OPTIONAL MATCH
o Fixes behaviour of REMOVE on NULL entities

2.1.5
-----
o Solves shortest path end points when they are missing
o Removes eager loading of data for OPTIONAL MATCH

2.1.4
-----
o Reduces memory usage for updating queries, in situations where eager loading of data is not necessary

2.1.3
-----
o Adds support for Octal literals (using a preceding 0, e.g. 03517)
o Adds support for Hexadecimal literals (using a preceding 0x, e.g. 0xF0071E55)
o Add `exists(...)` predicate function for checking patterns and properties
o Ensure `toString(...)` only does type conversion
o No longer introduces eagerness in some trivially decidable cases, such as
  MATCH a, b CREATE (a)-[r:X]->(b)
o Avoids opening two transactions per single request REST transaction by
  introducing caching of PreparedQueries in ExecutionEngine.

2.1.2
-----
o Allow Cypher to use indexes to solve IN queries
o Fix problems where indexes where not picked up if multiple labels
  where used on a pattern node
o Fix problem where indexes where not picked up when a query uses UNWIND
o Fixes problem where predicates are evaluated wrongly in NOT
o Fixes problem when WITH introduces a symbol that shadows an existing identifier

2.1.1
-----
o Add a new (experimental) cost based planner
o Adds UNWIND
o Add LOAD CSV
o Add USING PERIODIC COMMIT

2.0.3
-----
o MERGE must fail when trying to create 2 nodes with same id but different labels (e.g., MERGE (a: Foo)-[r:KNOWS]->(a: Bar))
o Allow Cypher split() with empty separator
o Ensure Cypher range() works with negative step values

2.0.2
-----
o Fixes #1897 - goes into never ending loop for some aggregate queries
o Add the functions toInt(...) and toFloat(...)
o Renames the Cypher type Double to Float
o Add the function split(...)
o Reading a non-existent property from a map returns null rather than failing
o MERGE will choose a direction when it has to create a relationship if you use an undirected relationship pattern
o Solves problem where non deterministic predicates where run too early

2.0.1
-----
o Fixes bug around MERGE inside a FOREACH inside a FOREACH
o Makes it possible to write MERGE queries with no already known parts
o Fixes problem with compiling queries with NOT expressions in them
o Fixes #1735 - Indexes and AND predicates produce wrong results
o Fixes #1876 - Null nodes and properties should be ignored when SETting properties
o Fixes problem with parser not being thread safe.
o Add support for double literals in exponent form
o Use internal heirarchy for types. Previously dependeded on Scala type hierarchy
o Fixes MERGE without any identifier previously known
o Corrects numerous inconsistencies when performing static type inference during compilation.

2.0
---
o Fix for problem with index lookups against properties
o Fix: MERGE should work when finding multiple elements
o Fix: Should support updates for merging
o Fix issue when mixing Cypher queries of different versions
o Fix problems with CREATE for relationships without declared nodes
o Allow MERGE to run inside FOREACH
o Prevent the use of parameter maps in MATCH and MERGE

2.0.0-RC1
---------
o Add OPTIONAL MATCH to Cypher
o Remove question mark symbol from patterns in Cypher
o Fixes 1313
o Fixes problem with collection index types
o Changes behaviour of LAST/HEAD/TAIL and collection slice -
  they now all return null for ranges outside a collection
o Fixed #1471 - SETting a relationship to a map value fails

2.0.0-M06
---------
o Add "haversin" function (useful for spherical distance calculation)
o Parenthesis around nodes are now mandatory if a label is used on the node
o Removes the legacy parser
o Relationship uniqueness is now more explicit and documented
o Use camelCase names for all functions
o Rename percentile_cont and percentile_disc to percentileCont and percentileDisc respectively

2.0.0-M05
---------
o Promote the experimental parser to the default
o Added literal maps
o Makes RETURN only queries valid
o Labels on optional nodes no longer stop the whole MATCH
  clause from returning results.
o Updated NOT precedence
o Added collection slice and collection index
o Added list comprehension documentation

2.0.0-M04
---------
o Fixes #844 - Label predicate do not work on optional nodes that are null
o Fixes #897 - Cypher start doesnt allow combining multiple starting points with start node sets
o BREAKING CHANGE: Removes "?", "!" syntax for accessing properties. Missing properties are now treated as null.
o Introduced a new experimental PEG parser
o BREAKING CHANGE: Escaped identifiers in the RETURN clause are kept as the user entered them.
o BREAKING CHANGE: No longer possible to use expressions and params to identify nodes in patterns.
o BREAKING CHANGE: Use "|" in favor of ":" in FOREACH, EXTRACT and REDUCE to avoid disambiguity with label syntax

2.0.0-M03
---------
o Added startNode()/endNode()
o Fixes #780 - Queries with literal collections fail against schema indexes
o Make Cypher execution results closable
o Adds Cypher label scan hint
o Removes alternative WITH syntax in Cypher
o Fixes bug with UNION text output

2.0.0-M02
---------
o Added MERGE clause
o MATCH now supports single-node patterns

2.0.0-M01
---------
o BREAKING CHANGE: It is no longer possible to use parameterized identifiers in START
o Added the possibility to set labels on and remove labels from nodes
o Now uses the labels specified in MATCH while matching
o Supports label matching with ("|" syntax) in MATCH
o Added label-based indexes
o Added UNION
o Added CASE
o Added index hints ("USING INDEX")
o START now is optional when using index hints or there is exactly one useable index
o Cypher now uses the label-based indexes to perform lookups
o Profiler now shows which entity producers have been chosen

1.9.3
-----
o Fixes problems with extra columns showing up in some conditions

1.9.2 (2013-07-16)
-----------------
o Fixes problem where Cypher would see changes while the query was running

1.9.1 (2013-06-24)
------------------
o Cypher execution results are now closeable
o Allow | to be used as a separator in foreach and extract+reduce

1.9.RC2 (2013-04-30)
--------------------
o Fixes problem when sending down custom queries to index providers

1.9.RC1 (2013-04-15)
--------------------
o Fixed #578 - problem with profiling queries that use LIMIT
o Fixes #550 - problem when using START after WITH
o Allows single node patterns in MATCH
o Fixes problem for some patterns and all-nodes start points
o Fixes #650 - issue when doing multiple aggregation expressions on the same identifier
o Added timestamp function

1.9.M05 (2013-03-05)
--------------------
o Fixes #450 - Predicates in WHERE are not evaluated correctly for certain patterns
o Fixes problem with null comparisons and optional relationships
o Made it possible to run the parser concurrently
o DISTINCT is now lazy, and keeps the incoming ordering
o Added execution plan descriptions to execution results
o Fixes #464 - getDeletedRelationships does not work for javacompat.ExecutionResult
o Fixes #535 - 'INTERNAL_SORT' columns show when doing RETURN * ORDER BY
o Added experimental profiled query support
o Fixes #489 - CREATE UNIQUE does not work as expected inside FOREACH

1.9.M04 (2013-01-17)
--------------------
o Clearer error message for when aggregations are used in ORDER BY and not in RETURN
o Fixes #394 - Identifiers inside of FOREACH get the wrong type
o Fixes #390 - IN/ANY/NONE/ANY/SINGLE causes RuntimeException for some patterns
o Fixes #387 - Some patterns produced "Unexpected traversal state" in Cypher
o Upgraded the Scala version to 2.10
o Fixes #355 - Collections in collections are still Scala collections instead of Java collections

1.9.M03
-------
o Fixes #336 - Patterns that re-use a pattern node can produce non-existing matches
o Fixes #369 - The substring-function sometimes fails when no length is specified

1.9.M02
-------
o The traversal pattern matcher now supports variable length relationship patterns
o Fixes #946 - HAS(...) fails with ThisShouldNotHappenException for some patterns
o Made Cypher better at keeping a numeric type. Adding two integers now returns an integer, and not a double.
o Major refactoring to make certain Cypher is more lazy
o When asking for the top x rows by some value, Cypher will now only keep a list the size of x
o Fix so identifiers created inside a foreach can be used by other statements in the foreach
o Fix for problems when using patterns with multiple unnamed nodes
o Fixes problems when doing ORDER BY ... LIMIT x. When x is larger than the input set, sorting was never done.
o Fixed problem with dependencies inside foreach statements being reported wrongly
o Fixes problems when updating a graph element with a map containing null values

1.9.M01 (2012-10-23)
--------------------
o Refactored the type system from the bottom up
o Predicates can now be returned and used to set properties
o Fixes #797: CREATE UNIQUE now makes sure used identifiers have the same properties even if
  they are re-used without the properties
o Added the traversal matcher, which uses the new traversal framework abilities to do
  pattern matching. It should provide for nice performance benefits for a lot of queries.
o Fixed #866: Changed the LRU cache to make it safe to use concurrently, and made the parser single threaded
o Added the reduce() functionality
o Made addition automatically convert numbers to strings when adding the two together
o Added the string functions: str(), replace(), substring(), left(), right(), ltrim(), rtrim(), trim(), lower(), upper()
o Added the possibility to use ORDER BY, SKIP and LIMIT together with WITH
o Fixes #904: CREATE UNIQUE doesn't work with parameter maps
o Fixes #908: Parameters do not survive WITH if it has aggregation
o SET can now be used to set properties on nodes and relationships from maps or other graph elements

1.8.RC1 (2012-09-05)
--------------------
o Removed the /../ literal for regular expressions. Now a normal string literal is used instead
o Concatenation handles types better
o Changed how the graph-matching module is used, to make it safe for concurrent use
o Better type error messages
o Renamed iterable to collection
o Fixed #795: so that WITH keeps parameters also for empty aggregation results
o Fixed #772: Creating nodes/relationships goes before SET, so SET can run on already created elements
o Added error when using != instead of <>
o Fixed #787: Issue when comparing array properties with literal collections
o Fixed #751: Better error message for some type errors
o Fixed #818: Problem where properties could only have scalar values (they can be arrays as well)
o Fixed #834: Gives relevant syntax exception when properties are entered in MATCH

1.8.M07 (2012-08-08)
--------------------
o Added escape characters to string literals
o Renamed `RELATE` to `CREATE UNIQUE`

1.8.M06 (2012-07-06)
--------------------
o Fixes problem when graph elements are deleted multiple times in the same query
o Fixes #625: Values passed through WITH have the wrong type
o Fixes #654: Some paths are returned the wrong way

1.8.M05 (2012-06-21)
--------------------
o CREATE and RELATE can now introduce path identifiers
o Fixes #600: Double optional with no matching relationships returns too many rows
o Fixes #613: Missing dependencies not reported correctly for queries with RELATE/SET/DELETE
o String literals can now contain escape characters

1.8.M04 (2012-06-07)
--------------------
o CREATE now accepts full paths and not only single nodes and relationships
o Path patterns can now be used as expressions and as predicates
o Fixes bug where RELATE fails to compare array properties
o Fixes #573: Arithmetics operations have wrong type
o Fixes #567: Parameter maps coming through REST are not parsed correctly
o Fixes #563: COUNT(*) does not return 0 for empty result
o Fixes #561: RELATE doesn't work as expected with map-parameters
o Fixes problem with optional properties and collection predicates (ALL/ANY/NONE/SINGLE/IN)

1.8.M03 (2012-05-24)
--------------------
o Added RELATE
o Changed the CREATE syntax, so it looks more like RELATE
o Fixes #506: delete head(rels) doesn't work
o Fixes #508: length function on array properties doesn't work
o Fixes #512: start n=node(*) match n-[r?]->() delete n,r not working
o Fixes #514: Extract doesn't work with array properties
o Fixes #523: String literals not parsed correctly in CREATE statement
o Fixes #526: cypher filter in return clause
o Fixes #536: SQRT only returns an integer
o Fixes #543: Appending elements to collections

1.8.M02 (2012-05-11)
--------------------
o Added the possibility to create nodes from an iterable of maps
o Fixes issue #479

1.8.M01 (2012-04-27)
--------------------
o Added the possibility to return all graph elements using RETURN *
o Added CREATE, SET, DELETE, FOREACH, WITH
o Fixes issue #432, #446

1.7 (2012-04-18)
----------------
o Added the possibility to use multiple relationship types on patterns
o Fixed bug when aggregation is used in order by and not listed in the RETURN clause

1.7.M01 (2012-03-12)
--------------------
o Added literal collections and the IN predicate
o Added HEAD, TAIL, LAST and FILTER
o Added comments
o Added ! so that missing property can evaluate to false
o The column names are now exactly as written in the RETURN expression
o BREAKING CHANGE: To check whether a property exists on a node, use the HAS(...) function
o Arithmetic & string concatenation
o An identifier can now be assigned all the nodes/rels in the graph - START a=node(*)
o Predicates can be specified inside of a pattern relationship description
o Fixed issues #196, #164, #193, #217, #214, #201, #198, #240, #254

1.6 (2012-01-19)
----------------
o Lots of changes to the parsers error reporting
o Queries can now be pre-pended with which parser version to use
o Database configuration can now change which version of the parser to use as default

1.6.M03 (2012-01-12)
--------------------
o Added a different aggregation logic. Makes aggregating on the same columns as sorting much faster
o Made it possible to query on array properties
o Fixed bug #157 - Comparing things of different types now gives false instead of type error
o Fixed bug #140 - Identifier can now named same thing as a parameter
o Fixed bug that tripped up the patter matchern when a node is sent in as a parameter
o Fixed bug #168 - Ordering on renamed columns now works well
o Fixed bug #170 - Arrays are now pretty-printed instead of Array.toString

1.6.M02 (2011-12-16)
--------------------
o Added allShortestPaths
o Added COALESCE
o Added column aliasing with AS
o Variable length relationships can now introduce a rel-iterable
o BREAKING CHANGE: Changed the syntax for iterable predicated ALL/NONE/ANY/SINGLE to use WHERE instead of a colon
o BREAKING CHANGE: ExecutionResult is now a read-once, forward only iterator.
o Fixed problems with optional graph elements

1.6.M01 (2011-11-24)
--------------------
o Made zero length (a single node) paths possible
o Skip, limit and regular expressions can now be parameterized
o Column order is now preserved
o Distinct and order by can now be used at the same time
o Paths can now be optional
o Execution plans can now be pretty printed
o Solved a bug when using multiple regular expressions in the same query
o Added the extract function

1.5 (2011-10-18)
----------------
o Added DISTINCT for all aggregate functions
o Nodes/relationships can be parameters as well

1.5.M02 (2011-10-10)
--------------------
o Relationships can now be optional
o Added new predicated for iterables: ALL/ANY/NONE/SINGLE
o Added path functions: NODES/RELATIONSHIPS/LENGTH
o Parameters for literals, index queries and node/relationship id
o Shortest path added
o Pattern matcher will, if possible, eliminate subgraphs early, by using the predicates from the WHERE clause
o Relationships can be bound now
o Added IS NULL for NULL checking
o Added new aggregate function - COLLECT

1.5.M01 (2011-08-31)
--------------------
o Added paths
o Changed r.TYPE to type(r)
o Variable length path supported
