@jexp jexp released this Aug 8, 2018 · 2 commits to 3.4 since this release

Assets 3

This summer release of APOC has seen a lot of contributions from many folks.

  • Alberto De Lazzari
  • Angelo Busato
  • Gabor Szarnyas
  • Alex Iudice
  • Cayetano
  • ArGeBre
  • Benjamin
  • Tobias Lindaaker
  • Adam Cowley
  • Karol Brejna
  • Andrew Bowman

Thanks so much to everyone who contributed new functionality, documentation updates and fixes.

Here are the highlights:

  • Version upgrade Neo4j 3.4.5 APOC 3.4.0.2

  • Support reverse geocoding in apoc.spatial (#876)

  • Support of Base64url encoding and decoding (#870)

  • apoc.text.clean strips utf8 characters (incl. cyrillic/chinese/japanese symbols) (#869)

  • Add support for loading CSVs formatted according the import tool's specification (#581)

  • add a configuration option to mergeNodes that allows to combine relationships of the same type and direction (#850)

  • implement functions from pgsql - degree, label exists (#860)

  • Adds text similarity/distance methods and double metaphone text encoder (#865)

  • Added support to function apoc.date.fromISO8601 (#837)

  • Added unit "weekday" to apoc.date.field() (#838)

  • Added optional 4th parameter to procedure 'apoc.periodic.repeat'. (#853)

  • Added optional parameter to procedure 'apoc.trigger.add' that allows configuration to be passed in. (#859)

  • Add concurrency parameter (default to 50) to periodic.iterate

  • add index selectivity to apoc.meta.data apoc.meta.schema and the apoc.index procedures (#842)

  • Add apoc.diff user functions (#760)

  • Read headers for load csv from config object (#834)

  • Allow passing parameters to apoc.cypher.runFile (#813)

  • Allow direction-only (typeless) relationships in the path expander relationshipFilter and sequences (#821)

  • Added whitelistNodes and blacklistNodes, to finish up node-specific filtering for path expanders. (#796)

Bugfixes

  • Also index collection values as arrays so that they are properly added to Lucene. Fixes #814
  • fix runFirstColumn for neo4j-graphql-js, fixes #819 fixes #776
  • Added thrown runtime exception if an 'apoc.trigger.*' procedure is called but 'apoc.trigger.enabled=true' has not been set in the neo4j.conf file. (#861)

Documentation

  • Update Grouping Docs
  • Corrected Elasticsearch methods to match their documentation. (#863)

@jexp jexp released this Aug 8, 2018 · 56 commits to 3.4 since this release

Assets 3

This summer release of APOC has seen a lot of contributions from many folks.

  • Alberto De Lazzari
  • Angelo Busato
  • Gabor Szarnyas
  • Alex Iudice
  • Cayetano
  • ArGeBre
  • Benjamin
  • Tobias Lindaaker
  • Adam Cowley
  • Karol Brejna
  • Andrew Bowman

Thanks so much to everyone who contributed new functionality, documentation updates and fixes.

Here are the highlights:

  • Version upgrade Neo4j 3.3.6 APOC 3.3.0.4

  • Support reverse geocoding in apoc.spatial (#876)

  • Support of Base64url encoding and decoding (#870)

  • apoc.text.clean strips utf8 characters (incl. cyrillic/chinese/japanese symbols) (#869)

  • Add support for loading CSVs formatted according the import tool's specification (#581)

  • add a configuration option to mergeNodes that allows to combine relationships of the same type and direction (#850)

  • implement functions from pgsql - degree, label exists (#860)

  • Adds text similarity/distance methods and double metaphone text encoder (#865)

  • Added support to function apoc.date.fromISO8601 (#837)

  • Added unit "weekday" to apoc.date.field() (#838)

  • Added optional 4th parameter to procedure 'apoc.periodic.repeat'. (#853)

  • Added optional parameter to procedure 'apoc.trigger.add' that allows configuration to be passed in. (#859)

  • Add concurrency parameter (default to 50) to periodic.iterate

  • add index selectivity to apoc.meta.data apoc.meta.schema and the apoc.index procedures (#842)

  • Add apoc.diff user functions (#760)

  • Read headers for load csv from config object (#834)

  • Allow passing parameters to apoc.cypher.runFile (#813)

  • Allow direction-only (typeless) relationships in the path expander relationshipFilter and sequences (#821)

  • Added whitelistNodes and blacklistNodes, to finish up node-specific filtering for path expanders. (#796)

Bugfixes

  • Also index collection values as arrays so that they are properly added to Lucene. Fixes #814
  • fix runFirstColumn for neo4j-graphql-js, fixes #819 fixes #776
  • Added thrown runtime exception if an 'apoc.trigger.*' procedure is called but 'apoc.trigger.enabled=true' has not been set in the neo4j.conf file. (#861)

Documentation

  • Update Grouping Docs
  • Corrected Elasticsearch methods to match their documentation. (#863)

@jexp jexp released this May 16, 2018 · 38 commits to 3.3 since this release

Assets 3

The first release for Neo4j 3.4 comes with many changes under the hood but not that many new features.

As Neo4j 3.4 completely changed the SPI (Kernel-API) we had to rewrite large parts in APOC to adapt to these changes. Thanks so much to Stefan Armbruster for handling this large chunk of work.

Features/Improvements

  • apoc.load.xls for loading data from Excel files, supports both xls and xlsx
  • Improvements for apoc.group.nodes, e.g. filtering of rel-types or of outputs by counts
  • Accessor functions for (virtual) entities (e.g. to postfilter them by property or label)
  • dijkstra algorithm supporting multiple results
  • date.format(null) returns null, also add ISO8601 convenience format

Bugfixes

  • fix for apoc.periodic.iterate with statements that already started with WITH
  • fix for deleted nodes in explicit index
  • apoc.cypher.runTimeboxed uses separate thread
  • Missing Iterator Utils in apoc .jar file
  • Add missing apoc.coll.combinations()
  • check for availability before running sync index update thread

Documentation

  • docs for apoc.load.csv and apoc.load.xls
  • docs for apoc.group.nodes
  • docs for apoc.coll.contains

@jexp jexp released this May 16, 2018 · 33 commits to 3.3 since this release

Assets 3

This release comes with not that many new features as we were busy making APOC ready for Neo4j 3.4.

Thanks so much to Stefan Armbruster for handling that large chunk of work.

Features/Improvements

  • apoc.load.xls for loading data from Excel files, supports both xls and xlsx
  • Improvements for apoc.group.nodes, e.g. filtering of rel-types or of outputs by counts
  • Accessor functions for (virtual) entities (e.g. to postfilter them by property or label)
  • dijkstra algorithm supporting multiple results
  • date.format(null) returns null, also add ISO8601 convenience format

Bugfixes

  • fix for apoc.periodic.iterate with statements that already started with WITH
  • fix for deleted nodes in explicit index
  • apoc.cypher.runTimeboxed uses separate thread
  • Missing Iterator Utils in apoc .jar file
  • Add missing apoc.coll.combinations()
  • check for availability before running sync index update thread

Documentation

  • docs for apoc.load.csv and apoc.load.xls
  • docs for apoc.group.nodes
  • docs for apoc.coll.contains

@jexp jexp released this Feb 23, 2018 · 99 commits to 3.2 since this release

Assets 3

Happy to announce the 3.3.0.2 release of APOC

APOC wouldn't be there where it is today with countless people contributing, reporting ideas and issues and everyone liking it telling their friends. Please do the same.

I also added a code of conduct and contribution guidelines to APOC, so every contributor feels welcome and safe and also quickly knows how to join our efforts.

For this release again, our friends at Larus Italy, did a lot of the work, besides many bugfixes Angelo Busato also added S3 URL support, which is really cool.

Andrea Santurbano worked on the HDFS support (read / write)

Andrew Bowman worked on a number of improvements around Path expanders

  • added support for sequences of labels and rel-types to express more complex paths
  • support for known end nodes
  • support for compound labels

I also found some time to code and added a bunch of things :)

Aggregation functions (something I wanted to add for a long time)

  • more efficient variants of collect(x)[a..b]
  • apoc.agg.nth, apoc.agg.first, apoc.agg.last, apoc.agg.slice
  • apoc.agg.median(x)
  • apoc.agg.percentiles(x,[0.5,0.9])
  • apoc.agg.product(x)
  • apoc.agg.statistics() provides a full numeric statistic

Indexing

Implemented an idea of my colleague Ryan Boyd to allow indexing of full "documents", i.e. map-structures per node or relationship that can also contain information from the neighborhood or computed data. Later those can be searched as keys and values of the indexed data.

  • apoc.index.addNodeMap(node, {map})
  • apoc.index.addRelationshipMap(node, {map})

As part of that work, I also wanted to add support for deconstructing complex values or structs.
apoc.map.values to select the values of a subset of keys into a mixed type list
apoc.coll.elements is used to deconstruct a sublist into typed variables (this can also be done with WITH, but requires an extra declaration of the list to be concise)

Path Functions (from a request in neo4j.com/slack)

  • apoc.path.create(startNode, [rels])
  • apoc.path.slice(path, offset, length)
  • apoc.path.combine(path1, path2)

Text functions

  • apoc.text.code(codepoint), apoc.text.hexCharAt(), apoc.text.charAt() (thanks Andrew Bowman)
  • apoc.text.toCypher(value, {}) for generating valid cypher representations of nodes, relationships, paths, values
  • Sørensen–Dice similarity (thanks Florent Biville)
  • Roman <-> arabic conversions (thanks Marcin Cylke)
  • new email and domain extraction functions (thanks David)
  • apoc.text.bytes/apoc.text.byteCount

Data Integration

  • generic XML import with apoc.import.xml() (thanks Stefan Armbruster)
  • pass Cypher parameters to apoc.export.csv.query
  • mongodb integration Added paging parameter in the get and find procedure (Thanks Gleb Belokrys)
  • stream apoc.export.cypher script export back to client when no file-name is given
  • apoc.load.csv
  • handling of converted null values/null columns
  • explicit "nullValues" option to define values that will be replaced by null (global and per field)
  • explicit "results" option to determine which output columns are provided

Collection Functions

  • apoc.coll.combinations(), apoc.coll.frequencies() (Thanks Andrew)
  • update/remove/insert value at collection index (Thanks Brad Nussbaum)

Graph Refactoring

  • per property configurable merge strategy for mergeNodes
  • means to skip properties for cloneNodes

Other Additions

  • added apoc.date.field UDF

Bugfixes around:

  • apoc.load.jdbc (type conversion, connection handling, logging)
  • apoc.refactor.mergeNodes
  • apoc.cypher.run*
  • apoc.schema.properties.distinctCount
  • composite indexes in Cypher export
  • ElasticSearch integration for ES 6
  • Made larger parts of apoc not needing the unrestricted configuration
  • apoc.json.toTree (also config for relationship-name casing)
  • Warmup Improvements (dynamic properties, rel-group)
  • Compound index using apoc.schema.assert (thanks Chris Skardon)
  • Explicit Index Reads don't require read-write-user
  • Enable parsing of lists in GraphML Import (thanks Alex Wilson)
  • Change CYPHER_SHELL format from upper case to lower case. (:begin,:commit)
  • Allowed apoc.node.degree() to use untyped directions (thanks Andrew)

@jexp jexp released this Feb 23, 2018 · 12 commits to 3.2 since this release

Assets 3

Happy to announce the 3.2.3.6 release of APOC

APOC wouldn't be there where it is today with countless people contributing, reporting ideas and issues and everyone liking it telling their friends. Please do the same.

I also added a code of conduct and contribution guidelines to APOC, so every contributor feels welcome and safe and also quickly knows how to join our efforts.

For this release again, our friends at Larus Italy, did a lot of the work, besides many bugfixes Angelo Busato also added S3 URL support, which is really cool.

Andrea Santurbano worked on the HDFS support (read / write)

Andrew Bowman worked on a number of improvements around Path expanders

  • added support for sequences of labels and rel-types to express more complex paths
  • support for known end nodes
  • support for compound labels

I also found some time to code and added a bunch of things :)

Aggregation functions (something I wanted to add for a long time)

  • more efficient variants of collect(x)[a..b]
  • apoc.agg.nth, apoc.agg.first, apoc.agg.last, apoc.agg.slice
  • apoc.agg.median(x)
  • apoc.agg.percentiles(x,[0.5,0.9])
  • apoc.agg.product(x)
  • apoc.agg.statistics() provides a full numeric statistic

Indexing

Implemented an idea of my colleague Ryan Boyd to allow indexing of full "documents", i.e. map-structures per node or relationship that can also contain information from the neighborhood or computed data. Later those can be searched as keys and values of the indexed data.

  • apoc.index.addNodeMap(node, {map})
  • apoc.index.addRelationshipMap(node, {map})

As part of that work, I also wanted to add support for deconstructing complex values or structs.
apoc.map.values to select the values of a subset of keys into a mixed type list
apoc.coll.elements is used to deconstruct a sublist into typed variables (this can also be done with WITH, but requires an extra declaration of the list to be concise)

Path Functions (from a request in neo4j.com/slack)

  • apoc.path.create(startNode, [rels])
  • apoc.path.slice(path, offset, length)
  • apoc.path.combine(path1, path2)

Text functions

  • apoc.text.code(codepoint), apoc.text.hexCharAt(), apoc.text.charAt() (thanks Andrew Bowman)
  • apoc.text.toCypher(value, {}) for generating valid cypher representations of nodes, relationships, paths, values
  • Sørensen–Dice similarity (thanks Florent Biville)
  • Roman <-> arabic conversions (thanks Marcin Cylke)
  • new email and domain extraction functions (thanks David)
  • apoc.text.bytes/apoc.text.byteCount

Data Integration

  • generic XML import with apoc.import.xml() (thanks Stefan Armbruster)
  • pass Cypher parameters to apoc.export.csv.query
  • mongodb integration Added paging parameter in the get and find procedure (Thanks Gleb Belokrys)
  • stream apoc.export.cypher script export back to client when no file-name is given
  • apoc.load.csv
  • handling of converted null values/null columns
  • explicit "nullValues" option to define values that will be replaced by null (global and per field)
  • explicit "results" option to determine which output columns are provided

Collection Functions

  • apoc.coll.combinations(), apoc.coll.frequencies() (Thanks Andrew)
  • update/remove/insert value at collection index (Thanks Brad Nussbaum)

Graph Refactoring

  • per property configurable merge strategy for mergeNodes
  • means to skip properties for cloneNodes

Other Additions

  • added apoc.date.field UDF

Bugfixes around:

  • apoc.load.jdbc (type conversion, connection handling, logging)
  • apoc.refactor.mergeNodes
  • apoc.cypher.run*
  • apoc.schema.properties.distinctCount
  • composite indexes in Cypher export
  • ElasticSearch integration for ES 6
  • Made larger parts of apoc not needing the unrestricted configuration
  • apoc.json.toTree (also config for relationship-name casing)
  • Warmup Improvements (dynamic properties, rel-group)
  • Compound index using apoc.schema.assert (thanks Chris Skardon)
  • Explicit Index Reads don't require read-write-user
  • Enable parsing of lists in GraphML Import (thanks Alex Wilson)
  • Change CYPHER_SHELL format from upper case to lower case. (:begin,:commit)
  • Allowed apoc.node.degree() to use untyped directions (thanks Andrew)

@jexp jexp released this Feb 23, 2018 · 205 commits to 3.2 since this release

Assets 3

This is a maintenance release for Neo4j 3.1.x

It contains the following changes since the last release.

  • Make apoc.meta.* to use db-statistics for total node and rel counts
  • Fixes/Improvements for apoc.refactor.mergeNodes
  • Add more error handling + logging for load jdbc
  • Cypher fails to execute because of empty statement
  • Close all Kernel statements using try-with-resources
  • Added apoc.text.base64Encode, apoc.text.base64Decode functions
  • Add apoc.cypher.runFirstColumn, apoc.coll.sortMulti, apoc.coll.flatten functions
  • add an failOnError:false option to load.json and friends
  • implementing read locks
  • apoc.import.file.use_neo4j_config=true does not work as expected
  • Allow accessing other databases via bolt
  • Added apoc.text.capitalize, apoc.text.capitalizeAll, apoc.text.decapitalize, apoc.text.swapCase, apoc.text.camelCase, apoc.text.snakeCase, apoc.text.toUpperCase functions -
  • Added apoc.text.random(length, [valid_chars]) - Fixes
  • Fix memory issue with periodic.iterate with too large tx-size
  • Added support for multi value JSON sources in apoc.load.json
  • Make default thread pool size configurable
  • Parallelize Warmup
  • Added aggregation to grouping nodes, made the implementation parallel
  • Move versions.json generation to master branch
  • added apoc.load.ldap
  • Added function apoc.convert.toListOf(value, type)
  • Added parallel degree distribution apoc.stats.degrees
  • Adding apoc.log.* with procedures for logging out messages
  • Adding apoc.date.currentTimestamp
  • MongoDB compatible values flag for non-packable values
  • add apoc.text.split function that splits a string using a regexp (fixes )
  • fixes - Add a apoc.version function

@jexp jexp released this Oct 23, 2017 · 99 commits to 3.2 since this release

Assets 3

With the Neo4j 3.3.0 release, we're happy to also release a new version of APOC.

Thanks again to our friends from LARUS for their continuous support as well as some old and new contributors:
Brad Nussbaum, Marcin Cylke, Dávid Csákvári, Stefan Armbruster, Tomaz Bratanic, Johan Teleman, Will Lyon, Adam Cowley, Paul Jongsma, Kees Vegter, Michael Wolter.

There were quite a number of changes and additions, so let's get started.

New Features

  • added apoc.load.ldap

  • Allow accessing other databases via bolt

  • Added parallel degree distribution apoc.stats.degrees

  • Add apoc.cypher.runFirstColumn, apoc.coll.sortMulti, apoc.coll.flatten functions

  • implementing read locks

  • Added support for multi value JSON sources in apoc.load.json

  • Adding apoc.log.* with procedures for logging out messages

  • Adding apoc.date.currentTimestamp

  • add apoc.convert.toInteger, apoc.convert.toDouble functions

  • Added apoc.text.base64Encode, apoc.text.base64Decode functions

  • Added apoc.text.capitalize, apoc.text.capitalizeAll, apoc.text.decapitalize, apoc.text.swapCase, apoc.text.camelCase, apoc.text.snakeCase, apoc.text.toUpperCase functions

  • Added apoc.text.random(length, [valid_chars])

  • add apoc.text.split function that splits a string using a regexp

  • Added function apoc.convert.toListOf(value, type)

  • Add a apoc.version function

Bugfixes & Small Improvements

  • Fix memory issue with periodic.iterate with too large tx-size
  • Enable pipe as CSV arraySep character, fix
  • Consistent Label order for CSV export
  • Fixes #584 - Allow asterisk as node label filter
  • Make default thread pool size configurable
  • Parallelize Warmup
  • Added aggregation to grouping nodes, made the implementation parallel
  • Configurable pool size for Pools.SCHEDULED
  • MongoDB compatible values flag for non-packable values
  • Add exporting properties to gephi
  • Add an failOnError:false option to load.json and friends

@jexp jexp released this Oct 23, 2017 · 78 commits to 3.2 since this release

Assets 3

With the Neo4j 3.3.0 release, we're happy to also release a new version of APOC.

Thanks again to our friends from LARUS for their continuous support as well as some old and new contributors:
Brad Nussbaum, Marcin Cylke, Dávid Csákvári, Stefan Armbruster, Tomaz Bratanic, Johan Teleman, Will Lyon, Adam Cowley, Paul Jongsma, Kees Vegter, Michael Wolter.

There were quite a number of changes and additions, so let's get started.

New Features

  • added apoc.load.ldap

  • Allow accessing other databases via bolt

  • Added parallel degree distribution apoc.stats.degrees

  • Add apoc.cypher.runFirstColumn, apoc.coll.sortMulti, apoc.coll.flatten functions

  • implementing read locks

  • Added support for multi value JSON sources in apoc.load.json

  • Adding apoc.log.* with procedures for logging out messages

  • Adding apoc.date.currentTimestamp

  • add apoc.convert.toInteger, apoc.convert.toDouble functions

  • Added apoc.text.base64Encode, apoc.text.base64Decode functions

  • Added apoc.text.capitalize, apoc.text.capitalizeAll, apoc.text.decapitalize, apoc.text.swapCase, apoc.text.camelCase, apoc.text.snakeCase, apoc.text.toUpperCase functions

  • Added apoc.text.random(length, [valid_chars])

  • add apoc.text.split function that splits a string using a regexp

  • Added function apoc.convert.toListOf(value, type)

  • Add a apoc.version function

Bugfixes & Small Improvements

  • Fix memory issue with periodic.iterate with too large tx-size
  • Enable pipe as CSV arraySep character, fix
  • Consistent Label order for CSV export
  • Fixes #584 - Allow asterisk as node label filter
  • Make default thread pool size configurable
  • Parallelize Warmup
  • Added aggregation to grouping nodes, made the implementation parallel
  • Configurable pool size for Pools.SCHEDULED
  • MongoDB compatible values flag for non-packable values
  • Add exporting properties to gephi
  • Add an failOnError:false option to load.json and friends

@jexp jexp released this Oct 3, 2017 · 91 commits to 3.2 since this release

Assets 3
  • 298869c Add apoc.cypher.runFirstColumn, apoc.coll.sortMulti, apoc.coll.flatten functions
  • b40e735 Fixes #597 - apoc.import.file.use_neo4j_config=true does not work as expected (#602)
  • 886df44 Fixed Bolt Test
  • 5c53203 Fixes #607 - add an failOnError:false option to load.json and friends (#613)
  • 9e1b6ed Added missing bolt driver to build.gradle
  • 1737368 Fixes #483 - Allow accessing other databases via bolt
  • 219d615 Issue #590 - test passing fine (#592)
  • 61692cb implementing read locks (#601)
  • 341d1ea Documentation for functions merged in #587
  • 47b4eee Added apoc.text.capitalize, apoc.text.capitalizeAll, apoc.text.decapitalize, apoc.text.swapCase, apoc.text.camelCase, apoc.text.snakeCase, apoc.text.toUpperCase functions - #530
  • 91b96a7 Added apoc.text.random(length, [valid_chars]) - Fixes #563
  • f46da13 Fix memory issue with periodic.iterate with too large tx-size
  • 14ed60e Fixes #584 - Allow asterisk as node label filter (#585)
  • 9a0a5c5 Added support for multi value JSON sources in apoc.load.json
  • 9ec76b8 Make default thread pool size configurable
  • 0c48b17 Update exportCypher.adoc (#576)
  • 88cd3a1 Parallelize Warmup
  • d6d30ab Added aggregation to grouping nodes, made the implementation parallel
  • cc82574 Adding apoc.log.* with procedures for logging out messages (#529)
  • 1d8923a Revert "gradle task for automatic mapping between neo4j and apoc versions fixes #461 (#552)"
  • b39d838 gradle task for automatic mapping between neo4j and apoc versions fixes #461 (#552)
  • 78d24c6 Configurable pool size for Pools.SCHEDULED (#547)
  • b0e55d8 Adding apoc.date.currentTimestamp (#554)
  • 6ea5396 fixes #550 test call silent failure (#555)
  • 9728992 KernelStatements in try() clause fixes #532 (#549)
  • 6ef8318 MongoDB compatible values flag for non-packable values (#533)
  • a442386 added apoc.load.ldap (#537)
  • 087e6c9 upgrade to gradle 4.1 and gradle plugin updates
  • bc7ecf8 shrinking pagecache for less memory consumption (#540)
  • 2f3e124 Added function apoc.convert.toListOf(value, type)
  • 34d3ced Added parallel degree distribution apoc.stats.degrees
  • 4b0072d Removed debug log from Trigger, fixes #522
  • 4afaead add apoc.text.split function that splits a string using a regexp (fixes #502) (#526)
  • 1ebee7b fixes #523 - Add a apoc.version function (#524)
  • d3c45be Fix Warmup for Neo4j 3.2