diff --git a/.github/workflows/CI.yaml b/.github/workflows/CI.yaml index dea633025f..ceb4119f61 100644 --- a/.github/workflows/CI.yaml +++ b/.github/workflows/CI.yaml @@ -27,4 +27,4 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build with Gradle - run: ./gradlew build --continue + run: ./gradlew build diff --git a/40_notes.adoc b/40_notes.adoc index 21cf2f629c..9db4653563 100644 --- a/40_notes.adoc +++ b/40_notes.adoc @@ -8,7 +8,7 @@ All freetext/fulltext stuff has been removed in favour of 3.5+ productized fullt apoc.index.relatedNodes (index feature ootb) apoc.index.orderedRange (index feature ootb) -apoc.algo.* (use separate graph algo apackage instead) +apoc.algo.* (use separate graph algo package instead) apoc.static.get (proc deleted, function exists) apoc.static.getAll (proc deleted, function exists) diff --git a/build.gradle b/build.gradle index abad4d8b3a..671baebc59 100644 --- a/build.gradle +++ b/build.gradle @@ -28,8 +28,7 @@ repositories { /*maven { // this contains the neo4j 4.0.0-beta jars url "https://neo4j.bintray.com/community/" }*/ - jcenter() - //mavenCentral() + mavenCentral() maven { url "https://repo.gradle.org/gradle/libs-releases" } @@ -44,8 +43,7 @@ subprojects { /*maven { // this contains the neo4j 4.0.0-beta jars url "https://neo4j.bintray.com/community/" }*/ - jcenter() - //mavenCentral() + mavenCentral() maven { url "https://repo.gradle.org/gradle/libs-releases" } @@ -86,7 +84,12 @@ subprojects { setFailOnNoMatchingTests(false) } - ignoreFailures(true) + // in TC we don't have the CI env so we can manage it in this way + if (System.env.TEAMCITY_VERSION != null) { + ignoreFailures(true) + } + testLogging.showStandardStreams = true + testLogging.exceptionFormat = 'full' } configurations { diff --git a/core/build.gradle b/core/build.gradle index 7cee45feef..2eeb9e4557 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -36,13 +36,12 @@ generateGrammarSource { } dependencies { + testCompile project(':test-utils') + apt project(':processor') -// apt 'net.biville.florent:neo4j-sproc-compiler:1.2' // temporarily disabled until byte[] is supported by sproc compiler - apt group: 'org.neo4j', name: 'neo4j', version: neo4jVersionEffective + apt group: 'org.neo4j', name: 'neo4j', version: neo4jVersionEffective compile group: 'commons-codec', name: 'commons-codec', version: '1.14' - compileOnly group: 'com.sun.mail', name: 'javax.mail', version: '1.6.0' - testCompile group: 'com.sun.mail', name: 'javax.mail', version: '1.6.0' compile group: 'com.jayway.jsonpath', name: 'json-path', version: '2.4.0' compile group: 'net.minidev', name: 'json-smart', version: '2.4.2' compile group: 'org.hdrhistogram', name: 'HdrHistogram', version: '2.1.9' @@ -112,8 +111,8 @@ dependencies { testCompile group: 'org.apache.hive', name: 'hive-jdbc', version: '1.2.2', withoutServers - compileOnly group: 'org.apache.hadoop', name: 'hadoop-hdfs', version: '2.7.5', withoutServers - compileOnly group: 'org.apache.hadoop', name: 'hadoop-common', version: '2.7.5', withoutServers + compileOnly group: 'org.apache.hadoop', name: 'hadoop-hdfs', version: '3.3.1', withoutServers + compileOnly group: 'org.apache.hadoop', name: 'hadoop-common', version: '3.3.1', withoutServers compile group: 'org.apache.commons', name: 'commons-math3', version: '3.6.1' // explicit update comomns.io version @@ -135,8 +134,9 @@ dependencies { exclude group: 'com.google.guava', module: 'guava' } - // there is a compatibility problem between the Guava Library used by HDFS, Google Cloud Storage and Reflections; the only version that fits for all is the following - compile group: 'com.google.guava', name: 'guava', version: '20.0' + compile group: 'com.google.guava', name: 'guava', version: '27.0-jre' + + compile group: 'xerces', name: 'xercesImpl', version: '2.12.1' configurations.all { exclude group: 'org.slf4j', module: 'slf4j-nop' diff --git a/core/src/main/java/apoc/CoreApocGlobalComponents.java b/core/src/main/java/apoc/CoreApocGlobalComponents.java index 95c17aa6c7..3e6924d056 100644 --- a/core/src/main/java/apoc/CoreApocGlobalComponents.java +++ b/core/src/main/java/apoc/CoreApocGlobalComponents.java @@ -21,7 +21,8 @@ public Map getServices(GraphDatabaseAPI db, ApocExtensionFacto dependencies.apocConfig(), dependencies.log().getUserLog(TriggerHandler.class), dependencies.globalProceduresRegistry(), - dependencies.pools()) + dependencies.pools(), + dependencies.scheduler()) ); } diff --git a/core/src/main/java/apoc/SystemLabels.java b/core/src/main/java/apoc/SystemLabels.java index b9a5a4d0ed..d18433c221 100644 --- a/core/src/main/java/apoc/SystemLabels.java +++ b/core/src/main/java/apoc/SystemLabels.java @@ -8,5 +8,5 @@ public enum SystemLabels implements Label { Procedure, Function, ApocUuid, - ApocTrigger + ApocTriggerMeta, ApocTrigger } diff --git a/core/src/main/java/apoc/algo/PathFinding.java b/core/src/main/java/apoc/algo/PathFinding.java deleted file mode 100644 index 258bc39e2c..0000000000 --- a/core/src/main/java/apoc/algo/PathFinding.java +++ /dev/null @@ -1,149 +0,0 @@ -package apoc.algo; - -import apoc.path.RelationshipTypeAndDirections; -import apoc.result.PathResult; -import apoc.result.WeightedPathResult; -import apoc.util.Util; -import org.neo4j.graphalgo.*; -import org.neo4j.graphdb.*; -import org.neo4j.internal.helpers.collection.Pair; -import org.neo4j.procedure.Context; -import org.neo4j.procedure.Description; -import org.neo4j.procedure.Name; -import org.neo4j.procedure.Procedure; - -import java.util.Collections; -import java.util.Map; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; - -public class PathFinding { - - @Context - public GraphDatabaseService db; - - @Context - public Transaction tx; - - @Procedure - @Description("apoc.algo.aStar(startNode, endNode, 'KNOWS|', 'distance','lat','lon') " + - "YIELD path, weight - run A* with relationship property name as cost function") - public Stream aStar( - @Name("startNode") Node startNode, - @Name("endNode") Node endNode, - @Name("relationshipTypesAndDirections") String relTypesAndDirs, - @Name("weightPropertyName") String weightPropertyName, - @Name("latPropertyName") String latPropertyName, - @Name("lonPropertyName") String lonPropertyName) { - - PathFinder algo = GraphAlgoFactory.aStar( - new BasicEvaluationContext(tx, db), - buildPathExpander(relTypesAndDirs), - CommonEvaluators.doubleCostEvaluator(weightPropertyName), - CommonEvaluators.geoEstimateEvaluator(latPropertyName, lonPropertyName)); - return WeightedPathResult.streamWeightedPathResult(startNode, endNode, algo); - } - - @Procedure - @Description("apoc.algo.aStar(startNode, endNode, 'KNOWS|', {weight:'dist',default:10," + - "x:'lon',y:'lat'}) YIELD path, weight - run A* with relationship property name as cost function") - public Stream aStarConfig( - @Name("startNode") Node startNode, - @Name("endNode") Node endNode, - @Name("relationshipTypesAndDirections") String relTypesAndDirs, - @Name("config") Map config) { - - config = config == null ? Collections.emptyMap() : config; - String relationshipCostPropertyKey = config.getOrDefault("weight", "distance").toString(); - double defaultCost = ((Number) config.getOrDefault("default", Double.MAX_VALUE)).doubleValue(); - String latPropertyName = config.getOrDefault("y", "latitude").toString(); - String lonPropertyName = config.getOrDefault("x", "longitude").toString(); - - PathFinder algo = GraphAlgoFactory.aStar( - new BasicEvaluationContext(tx, db), - buildPathExpander(relTypesAndDirs), - CommonEvaluators.doubleCostEvaluator(relationshipCostPropertyKey, defaultCost), - CommonEvaluators.geoEstimateEvaluator(latPropertyName, lonPropertyName)); - return WeightedPathResult.streamWeightedPathResult(startNode, endNode, algo); - } - - @Procedure - @Description("apoc.algo.dijkstra(startNode, endNode, 'KNOWS|', 'distance', defaultValue, numberOfWantedResults) YIELD path," + - " weight - run dijkstra with relationship property name as cost function") - public Stream dijkstra( - @Name("startNode") Node startNode, - @Name("endNode") Node endNode, - @Name("relationshipTypesAndDirections") String relTypesAndDirs, - @Name("weightPropertyName") String weightPropertyName, - @Name(value = "defaultWeight", defaultValue = "NaN") double defaultWeight, - @Name(value = "numberOfWantedPaths", defaultValue = "1") long numberOfWantedPaths) { - - PathFinder algo = GraphAlgoFactory.dijkstra( - buildPathExpander(relTypesAndDirs), - (relationship, direction) -> Util.toDouble(relationship.getProperty(weightPropertyName, defaultWeight)), - (int)numberOfWantedPaths - ); - return WeightedPathResult.streamWeightedPathResult(startNode, endNode, algo); - } - - @Procedure - @Description("apoc.algo.allSimplePaths(startNode, endNode, 'KNOWS|', 5) YIELD path, " + - "weight - run allSimplePaths with relationships given and maxNodes") - public Stream allSimplePaths( - @Name("startNode") Node startNode, - @Name("endNode") Node endNode, - @Name("relationshipTypesAndDirections") String relTypesAndDirs, - @Name("maxNodes") long maxNodes) { - - PathFinder algo = GraphAlgoFactory.allSimplePaths( - new BasicEvaluationContext(tx, db), - buildPathExpander(relTypesAndDirs), - (int) maxNodes - ); - Iterable allPaths = algo.findAllPaths(startNode, endNode); - return StreamSupport.stream(allPaths.spliterator(), false) - .map(PathResult::new); - } - - @Procedure(deprecatedBy = "apoc.algo.dijkstra") - @Description("apoc.algo.dijkstraWithDefaultWeight(startNode, endNode, 'KNOWS|', " + - "'distance', 10) YIELD path, weight - run dijkstra with relationship property name as cost function" + - " and a default weight if the property does not exist") - @Deprecated - public Stream dijkstraWithDefaultWeight( - @Name("startNode") Node startNode, - @Name("endNode") Node endNode, - @Name("relationshipTypesAndDirections") String relTypesAndDirs, - @Name("weightPropertyName") String weightPropertyName, - @Name("defaultWeight") double defaultWeight) { - - PathFinder algo = GraphAlgoFactory.dijkstra( - new BasicEvaluationContext(tx, db), - buildPathExpander(relTypesAndDirs), - (relationship, direction) -> Util.toDouble(relationship.getProperty(weightPropertyName, defaultWeight)) - ); - return WeightedPathResult.streamWeightedPathResult(startNode, endNode, algo); - } - - private PathExpander buildPathExpander(String relationshipsAndDirections) { - PathExpanderBuilder builder = PathExpanderBuilder.empty(); - for (Pair pair : RelationshipTypeAndDirections - .parse(relationshipsAndDirections)) { - if (pair.first() == null) { - if (pair.other() == null) { - builder = PathExpanderBuilder.allTypesAndDirections(); - } else { - builder = PathExpanderBuilder.allTypes(pair.other()); - } - } else { - if (pair.other() == null) { - builder = builder.add(pair.first()); - } else { - builder = builder.add(pair.first(), pair.other()); - } - } - } - return builder.build(); - } - -} diff --git a/core/src/main/java/apoc/atomic/util/AtomicUtils.java b/core/src/main/java/apoc/atomic/util/AtomicUtils.java index 79411f17b4..a10ba08194 100644 --- a/core/src/main/java/apoc/atomic/util/AtomicUtils.java +++ b/core/src/main/java/apoc/atomic/util/AtomicUtils.java @@ -10,8 +10,12 @@ public class AtomicUtils { public static Number sum(Number oldValue, Number number){ if(oldValue instanceof Long) return oldValue.longValue() + number.longValue(); + if(oldValue instanceof Integer) + return oldValue.intValue() + number.intValue(); if(oldValue instanceof Double) return oldValue.doubleValue() + number.doubleValue(); + if(oldValue instanceof Float) + return oldValue.floatValue() + number.floatValue(); if(oldValue instanceof Short) return oldValue.shortValue() + number.shortValue(); if(oldValue instanceof Byte) @@ -22,8 +26,12 @@ public static Number sum(Number oldValue, Number number){ public static Number sub(Number oldValue, Number number){ if(oldValue instanceof Long) return oldValue.longValue() - number.longValue(); + if(oldValue instanceof Integer) + return oldValue.intValue() - number.intValue(); if(oldValue instanceof Double) return oldValue.doubleValue() - number.doubleValue(); + if(oldValue instanceof Float) + return oldValue.floatValue() - number.floatValue(); if(oldValue instanceof Short) return oldValue.shortValue() - number.shortValue(); if(oldValue instanceof Byte) diff --git a/core/src/main/java/apoc/coll/Coll.java b/core/src/main/java/apoc/coll/Coll.java index 368de80046..3bc9467fdc 100644 --- a/core/src/main/java/apoc/coll/Coll.java +++ b/core/src/main/java/apoc/coll/Coll.java @@ -3,6 +3,7 @@ import apoc.result.ListResult; import com.google.common.util.concurrent.AtomicDouble; import org.apache.commons.lang3.mutable.MutableInt; +import org.apache.commons.math3.stat.descriptive.moment.StandardDeviation; import org.apache.commons.math3.util.Combinations; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Node; @@ -51,6 +52,16 @@ public class Coll { @Context public Transaction tx; + @UserFunction + @Description("apoc.coll.stdev(list, isBiasCorrected) - returns the sample or population standard deviation with isBiasCorrected true or false respectively. For example apoc.coll.stdev([10, 12, 23]) return 7") + public Number stdev(@Name("list") List list, @Name(value = "isBiasCorrected", defaultValue = "true") boolean isBiasCorrected) { + if (list == null || list.isEmpty()) return null; + final double stdev = new StandardDeviation(isBiasCorrected) + .evaluate(list.stream().mapToDouble(Number::doubleValue).toArray()); + if ((long) stdev == stdev) return (long) stdev; + return stdev; + } + @UserFunction @Description("apoc.coll.runningTotal(list1) - returns an accumulative array. For example apoc.coll.runningTotal([1,2,3.5]) return [1,3,6.5]") public List runningTotal(@Name("list") List list) { diff --git a/core/src/main/java/apoc/convert/Json.java b/core/src/main/java/apoc/convert/Json.java index f4ae1ec6bd..df1d66a724 100644 --- a/core/src/main/java/apoc/convert/Json.java +++ b/core/src/main/java/apoc/convert/Json.java @@ -82,9 +82,9 @@ private Map mapWithOptionalProps(Map mapEntity, M public org.neo4j.graphdb.GraphDatabaseService db; @UserFunction("apoc.json.path") - @Description("apoc.json.path('{json}','json-path')") - public Object path(@Name("json") String json, @Name(value = "path",defaultValue = "$") String path) { - return JsonUtil.parse(json,path,Object.class); + @Description("apoc.json.path('{json}' [,'json-path' , 'path-options'])") + public Object path(@Name("json") String json, @Name(value = "path",defaultValue = "$") String path, @Name(value = "pathOptions", defaultValue = "null") List pathOptions) { + return JsonUtil.parse(json, path, Object.class, pathOptions); } @UserFunction("apoc.convert.toJson") @Description("apoc.convert.toJson([1,2,3]) or toJson({a:42,b:\"foo\",c:[1,2,3]}) or toJson(NODE/REL/PATH)") @@ -107,29 +107,29 @@ public void setJsonProperty(@Name("node") Node node, @Name("key") String key, @N } @UserFunction// ("apoc.json.getJsonProperty") - @Description("apoc.convert.getJsonProperty(node,key[,'json-path']) - converts serialized JSON in property back to original object") - public Object getJsonProperty(@Name("node") Node node, @Name("key") String key,@Name(value = "path",defaultValue = "") String path) { + @Description("apoc.convert.getJsonProperty(node,key[,'json-path', 'path-options']) - converts serialized JSON in property back to original object") + public Object getJsonProperty(@Name("node") Node node, @Name("key") String key,@Name(value = "path",defaultValue = "") String path, @Name(value = "pathOptions", defaultValue = "null") List pathOptions) { String value = (String) node.getProperty(key, null); - return JsonUtil.parse(value, path, Object.class); + return JsonUtil.parse(value, path, Object.class, pathOptions); } @UserFunction// ("apoc.json.getJsonPropertyMap") - @Description("apoc.convert.getJsonPropertyMap(node,key[,'json-path']) - converts serialized JSON in property back to map") - public Map getJsonPropertyMap(@Name("node") Node node, @Name("key") String key,@Name(value = "path",defaultValue = "") String path) { + @Description("apoc.convert.getJsonPropertyMap(node,key[,'json-path', 'path-options']) - converts serialized JSON in property back to map") + public Map getJsonPropertyMap(@Name("node") Node node, @Name("key") String key,@Name(value = "path",defaultValue = "") String path, @Name(value = "pathOptions", defaultValue = "null") List pathOptions) { String value = (String) node.getProperty(key, null); - return JsonUtil.parse(value, path, Map.class); + return JsonUtil.parse(value, path, Map.class, pathOptions); } @UserFunction - @Description("apoc.convert.fromJsonMap('{\"a\":42,\"b\":\"foo\",\"c\":[1,2,3]}'[,'json-path'])") - public Map fromJsonMap(@Name("map") String value,@Name(value = "path",defaultValue = "") String path) { - return JsonUtil.parse(value, path, Map.class); + @Description("apoc.convert.fromJsonMap('{\"a\":42,\"b\":\"foo\",\"c\":[1,2,3]}'[,'json-path', 'path-options'])") + public Map fromJsonMap(@Name("map") String value,@Name(value = "path",defaultValue = "") String path, @Name(value = "pathOptions", defaultValue = "null") List pathOptions) { + return JsonUtil.parse(value, path, Map.class, pathOptions); } @UserFunction - @Description("apoc.convert.fromJsonList('[1,2,3]'[,'json-path'])") - public List fromJsonList(@Name("list") String value, @Name(value = "path",defaultValue = "") String path) { - return JsonUtil.parse(value, path, List.class); + @Description("apoc.convert.fromJsonList('[1,2,3]'[,'json-path', 'path-options'])") + public List fromJsonList(@Name("list") String value, @Name(value = "path",defaultValue = "") String path, @Name(value = "pathOptions", defaultValue = "null") List pathOptions) { + return JsonUtil.parse(value, path, List.class, pathOptions); } @Procedure("apoc.convert.toTree") diff --git a/core/src/main/java/apoc/create/Create.java b/core/src/main/java/apoc/create/Create.java index aafc97a88f..c4570f5bc4 100644 --- a/core/src/main/java/apoc/create/Create.java +++ b/core/src/main/java/apoc/create/Create.java @@ -220,6 +220,30 @@ public Stream virtualPath(@Name("labelsN") List label return Stream.of(new VirtualPathResult(from, rel, to)); } + @Procedure + @Description("apoc.create.clonePathToVirtual") + public Stream clonePathToVirtual(@Name("path") Path path) { + return Stream.of(createVirtualPath(path)); + } + + @Procedure + @Description("apoc.create.clonePathsToVirtual") + public Stream clonePathsToVirtual(@Name("paths") List paths) { + return paths.stream().map(this::createVirtualPath); + } + + private PathResult createVirtualPath(Path path) { + final Iterable relationships = path.relationships(); + final Node first = path.startNode(); + VirtualPath virtualPath = new VirtualPath(new VirtualNode(first, Iterables.asList(first.getPropertyKeys()))); + for (Relationship rel : relationships) { + VirtualNode start = VirtualNode.from(rel.getStartNode()); + VirtualNode end = VirtualNode.from(rel.getEndNode()); + virtualPath.addRel(VirtualRelationship.from(start, end, rel)); + } + return new PathResult(virtualPath); + } + private T setProperties(T pc, Map p) { if (p == null) return pc; for (Map.Entry entry : p.entrySet()) { diff --git a/core/src/main/java/apoc/date/Date.java b/core/src/main/java/apoc/date/Date.java index 9d41e5d884..fbe20de19b 100644 --- a/core/src/main/java/apoc/date/Date.java +++ b/core/src/main/java/apoc/date/Date.java @@ -2,6 +2,7 @@ import apoc.util.DateFormatUtil; import apoc.util.Util; +import org.apache.commons.lang3.StringUtils; import org.neo4j.graphdb.Label; import org.neo4j.graphdb.Node; import org.neo4j.procedure.*; @@ -162,7 +163,7 @@ public Long fromISO8601(final @Name("time") String time) { @UserFunction @Description("apoc.date.parse('2012-12-23','ms|s|m|h|d','yyyy-MM-dd') - parse date string using the specified format into the specified time unit") public Long parse(@Name("time") String time, @Name(value = "unit", defaultValue = "ms") String unit, @Name(value = "format",defaultValue = DEFAULT_FORMAT) String format, final @Name(value = "timezone", defaultValue = "") String timezone) { - Long value = parseOrThrow(time, getFormat(format, timezone)); + Long value = StringUtils.isBlank(time) ? null : parseOrThrow(time, getFormat(format, timezone)); return value == null ? null : unit(unit).convert(value, TimeUnit.MILLISECONDS); } diff --git a/core/src/main/java/apoc/export/csv/CsvEntityLoader.java b/core/src/main/java/apoc/export/csv/CsvEntityLoader.java index 1534f4ef10..7a85d7983a 100644 --- a/core/src/main/java/apoc/export/csv/CsvEntityLoader.java +++ b/core/src/main/java/apoc/export/csv/CsvEntityLoader.java @@ -136,7 +136,7 @@ public void loadNodes(final String fileName, final List labels, final Gr node.setProperty(field.getName(), idValue); props++; } else { - boolean propertyAdded = CsvPropertyConverter.addPropertyToGraphEntity(node, field, value); + boolean propertyAdded = CsvPropertyConverter.addPropertyToGraphEntity(node, field, value,clc); props += propertyAdded ? 1 : 0; } } @@ -232,7 +232,7 @@ public void loadRelationships( for (CsvHeaderField field : edgePropertiesFields) { final String name = field.getName(); Object value = result.map.get(name); - boolean propertyAdded = CsvPropertyConverter.addPropertyToGraphEntity(rel, field, value); + boolean propertyAdded = CsvPropertyConverter.addPropertyToGraphEntity(rel, field, value, clc); props += propertyAdded ? 1 : 0; } reporter.update(0, 1, props); diff --git a/core/src/main/java/apoc/export/csv/CsvFormat.java b/core/src/main/java/apoc/export/csv/CsvFormat.java index 3eb9a9f507..a168ba9872 100644 --- a/core/src/main/java/apoc/export/csv/CsvFormat.java +++ b/core/src/main/java/apoc/export/csv/CsvFormat.java @@ -144,8 +144,8 @@ public String[] writeResultHeader(Result result, CSVWriter out) { } public void writeAll(SubGraph graph, Reporter reporter, ExportConfig config, CSVWriter out) { - Map nodePropTypes = collectPropTypesForNodes(graph); - Map relPropTypes = collectPropTypesForRelationships(graph); + Map nodePropTypes = collectPropTypesForNodes(graph, db, config); + Map relPropTypes = collectPropTypesForRelationships(graph, db, config); List nodeHeader = generateHeader(nodePropTypes, config.useTypes(), NODE_HEADER_FIXED_COLUMNS); List relHeader = generateHeader(relPropTypes, config.useTypes(), REL_HEADER_FIXED_COLUMNS); List header = new ArrayList<>(nodeHeader); @@ -264,11 +264,6 @@ private void writeRow(ExportConfig config, ExportFileManager writer, Set } } - public void writeAll2(SubGraph graph, Reporter reporter, ExportConfig config, CSVWriter out) { - writeNodes(graph, out, reporter,config); - writeRels(graph, out, reporter,config); - } - private List generateHeader(Map propTypes, boolean useTypes, String... starters) { List result = new ArrayList<>(); if (useTypes) { @@ -287,15 +282,6 @@ private List generateHeader(Map propTypes, boolean useTyp return result; } - private void writeNodes(SubGraph graph, CSVWriter out, Reporter reporter, ExportConfig config) { - Map nodePropTypes = collectPropTypesForNodes(graph); - List nodeHeader = generateHeader(nodePropTypes, config.useTypes(), NODE_HEADER_FIXED_COLUMNS); - String[] header = nodeHeader.toArray(new String[nodeHeader.size()]); - out.writeNext(header, applyQuotesToAll); // todo types - int cols = header.length; - writeNodes(graph, out, reporter, nodeHeader.subList(NODE_HEADER_FIXED_COLUMNS.length, nodeHeader.size()), cols, config.getBatchSize(), config.getDelim()); - } - private void writeNodes(SubGraph graph, CSVWriter out, Reporter reporter, List header, int cols, int batchSize, String delimiter) { String[] row=new String[cols]; int nodes = 0; @@ -328,15 +314,6 @@ private void collectProps(Collection fields, Entity pc, Reporter reporte } } - private void writeRels(SubGraph graph, CSVWriter out, Reporter reporter, ExportConfig config) { - Map relPropTypes = collectPropTypesForRelationships(graph); - List header = generateHeader(relPropTypes, config.useTypes(), REL_HEADER_FIXED_COLUMNS); - out.writeNext(header.toArray(new String[header.size()]), applyQuotesToAll); - int cols = header.size(); - int offset = 0; - writeRels(graph, out, reporter, header.subList(REL_HEADER_FIXED_COLUMNS.length, header.size()), cols, offset, config.getBatchSize(), config.getDelim()); - } - private void writeRels(SubGraph graph, CSVWriter out, Reporter reporter, List relHeader, int cols, int offset, int batchSize, String delimiter) { String[] row=new String[cols]; int rels = 0; diff --git a/core/src/main/java/apoc/export/csv/CsvLoaderConfig.java b/core/src/main/java/apoc/export/csv/CsvLoaderConfig.java index b55a7e1cc0..99e11be705 100644 --- a/core/src/main/java/apoc/export/csv/CsvLoaderConfig.java +++ b/core/src/main/java/apoc/export/csv/CsvLoaderConfig.java @@ -15,6 +15,7 @@ public class CsvLoaderConfig { private static final String SKIP_LINES = "skipLines"; private static final String BATCH_SIZE = "batchSize"; private static final String IGNORE_DUPLICATE_NODES = "ignoreDuplicateNodes"; + private static final String IGNORE_BLANK_STRING = "ignoreBlankString"; private static char DELIMITER_DEFAULT = ','; private static char ARRAY_DELIMITER_DEFAULT = ';'; @@ -23,6 +24,7 @@ public class CsvLoaderConfig { private static int SKIP_LINES_DEFAULT = 1; private static int BATCH_SIZE_DEFAULT = 2000; private static boolean IGNORE_DUPLICATE_NODES_DEFAULT = false; + private static boolean IGNORE_BLANK_STRING_DEFAULT = false; private final char delimiter; private final char arrayDelimiter; @@ -31,6 +33,7 @@ public class CsvLoaderConfig { private final int skipLines; private final int batchSize; private final boolean ignoreDuplicateNodes; + private final boolean ignoreBlankString; private CsvLoaderConfig(Builder builder) { this.delimiter = builder.delimiter; @@ -40,6 +43,7 @@ private CsvLoaderConfig(Builder builder) { this.skipLines = builder.skipLines; this.batchSize = builder.batchSize; this.ignoreDuplicateNodes = builder.ignoreDuplicateNodes; + this.ignoreBlankString = builder.ignoreBlankString; } public char getDelimiter() { @@ -68,6 +72,10 @@ public int getBatchSize() { public boolean getIgnoreDuplicateNodes() { return ignoreDuplicateNodes; } + public boolean isIgnoreBlankString() { + return ignoreBlankString; + } + /** * Creates builder to build {@link CsvLoaderConfig}. * @@ -102,7 +110,7 @@ public static CsvLoaderConfig from(Map config) { if (config.get(SKIP_LINES) != null) builder.skipLines((int) config.get(SKIP_LINES)); if (config.get(BATCH_SIZE) != null) builder.batchSize((int) config.get(BATCH_SIZE)); if (config.get(IGNORE_DUPLICATE_NODES) != null) builder.ignoreDuplicateNodes((boolean) config.get(IGNORE_DUPLICATE_NODES)); - + if (config.get(IGNORE_BLANK_STRING) != null) builder.ignoreBlankString((boolean) config.get(IGNORE_BLANK_STRING)); return builder.build(); } @@ -117,6 +125,7 @@ public static final class Builder { private int skipLines = SKIP_LINES_DEFAULT; private int batchSize = BATCH_SIZE_DEFAULT; private boolean ignoreDuplicateNodes = IGNORE_DUPLICATE_NODES_DEFAULT; + private boolean ignoreBlankString = IGNORE_BLANK_STRING_DEFAULT; private Builder() { } @@ -156,6 +165,11 @@ public Builder ignoreDuplicateNodes(boolean ignoreDuplicateNodes) { return this; } + public Builder ignoreBlankString(boolean ignoreBlankString) { + this.ignoreBlankString = ignoreBlankString; + return this; + } + public CsvLoaderConfig build() { return new CsvLoaderConfig(this); } diff --git a/core/src/main/java/apoc/export/csv/CsvPropertyConverter.java b/core/src/main/java/apoc/export/csv/CsvPropertyConverter.java index 84b52f28b9..fc43a37e65 100644 --- a/core/src/main/java/apoc/export/csv/CsvPropertyConverter.java +++ b/core/src/main/java/apoc/export/csv/CsvPropertyConverter.java @@ -1,20 +1,30 @@ package apoc.export.csv; +import org.apache.commons.lang3.StringUtils; import org.neo4j.graphdb.Entity; import java.util.List; +import java.util.Objects; public class CsvPropertyConverter { - public static boolean addPropertyToGraphEntity(Entity entity, CsvHeaderField field, Object value) { - if (field.isIgnore()) { + public static boolean addPropertyToGraphEntity(Entity entity, CsvHeaderField field, Object value, CsvLoaderConfig config) { + if (field.isIgnore() || value == null) { return false; } if (field.isArray()) { + final List list = (List) value; + final boolean listContainingNull = list.stream().anyMatch(Objects::isNull); + if (listContainingNull) { + return false; + } final Object[] prototype = getPrototypeFor(field.getType()); - final Object[] array = ((List) value).toArray(prototype); + final Object[] array = list.toArray(prototype); entity.setProperty(field.getName(), array); } else { + if (config.isIgnoreBlankString() && value instanceof String && StringUtils.isBlank((String) value)) { + return false; + } entity.setProperty(field.getName(), value); } return true; @@ -22,9 +32,9 @@ public static boolean addPropertyToGraphEntity(Entity entity, CsvHeaderField fie static Object[] getPrototypeFor(String type) { switch (type) { - case "INT": return new Integer [] {}; + case "INT": case "LONG": return new Long [] {}; - case "FLOAT": return new Float [] {}; + case "FLOAT": case "DOUBLE": return new Double [] {}; case "BOOLEAN": return new Boolean [] {}; case "BYTE": return new Byte [] {}; diff --git a/core/src/main/java/apoc/export/graphml/XmlGraphMLReader.java b/core/src/main/java/apoc/export/graphml/XmlGraphMLReader.java index 7a5a80dd48..1ba854d264 100644 --- a/core/src/main/java/apoc/export/graphml/XmlGraphMLReader.java +++ b/core/src/main/java/apoc/export/graphml/XmlGraphMLReader.java @@ -3,7 +3,7 @@ import apoc.export.util.BatchTransaction; import apoc.export.util.Reporter; import apoc.util.JsonUtil; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.neo4j.graphdb.*; import javax.xml.namespace.QName; diff --git a/core/src/main/java/apoc/export/json/ImportJson.java b/core/src/main/java/apoc/export/json/ImportJson.java index ee07c68cd3..5e3fad5147 100644 --- a/core/src/main/java/apoc/export/json/ImportJson.java +++ b/core/src/main/java/apoc/export/json/ImportJson.java @@ -13,6 +13,7 @@ import org.neo4j.procedure.Mode; import org.neo4j.procedure.Name; import org.neo4j.procedure.Procedure; +import org.neo4j.procedure.TerminationGuard; import java.util.Map; import java.util.Scanner; @@ -25,6 +26,9 @@ public class ImportJson { @Context public Pools pools; + @Context + public TerminationGuard terminationGuard; + @Procedure(value = "apoc.import.json", mode = Mode.WRITE) @Description("apoc.import.json(file,config) - imports the json list to the provided file") public Stream all(@Name("file") String fileName, @Name(value = "config", defaultValue = "{}") Map config) { @@ -36,7 +40,7 @@ public Stream all(@Name("file") String fileName, @Name(value = "co try (final CountingReader reader = FileUtils.readerFor(fileName); final Scanner scanner = new Scanner(reader).useDelimiter("\n|\r"); JsonImporter jsonImporter = new JsonImporter(importJsonConfig, db, reporter)) { - while (scanner.hasNext()) { + while (scanner.hasNext() && !Util.transactionIsTerminated(terminationGuard)) { Map row = JsonUtil.OBJECT_MAPPER.readValue(scanner.nextLine(), Map.class); jsonImporter.importRow(row); } diff --git a/core/src/main/java/apoc/export/json/JsonImporter.java b/core/src/main/java/apoc/export/json/JsonImporter.java index 02b1d93548..fff374bbb3 100644 --- a/core/src/main/java/apoc/export/json/JsonImporter.java +++ b/core/src/main/java/apoc/export/json/JsonImporter.java @@ -2,9 +2,12 @@ import apoc.export.util.Reporter; import apoc.util.Util; +import com.google.common.collect.Iterables; import org.apache.commons.lang3.StringUtils; import org.neo4j.graphdb.GraphDatabaseService; +import org.neo4j.graphdb.Label; import org.neo4j.graphdb.Transaction; +import org.neo4j.graphdb.schema.Schema; import org.neo4j.values.storable.CoordinateReferenceSystem; import org.neo4j.values.storable.DurationValue; import org.neo4j.values.storable.PointValue; @@ -26,14 +29,18 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import java.util.stream.Stream; +import java.util.stream.StreamSupport; public class JsonImporter implements Closeable { - private static final String CREATE_NODE = "UNWIND $rows AS row " + + private static final String UNWIND = "UNWIND $rows AS row "; + private static final String CREATE_NODE = UNWIND + "CREATE (n%s {%s: row.id}) SET n += row.properties"; - private static final String CREATE_RELS = "UNWIND $rows AS row " + + private static final String CREATE_RELS = UNWIND + "MATCH (s%s {%s: row.start.id}) " + "MATCH (e%s {%2$s: row.end.id}) " + "CREATE (s)-[r:%s]->(e) SET r += row.properties"; + public static final String MISSING_CONSTRAINT_ERROR_MSG = "Missing constraint required for import. Execute this query: \n" + + "CREATE CONSTRAINT ON (n:%s) assert n.%s IS UNIQUE;"; private final List> paramList; private final int unwindBatchSize; @@ -111,14 +118,19 @@ private void manageEntityType(String type) { } private void manageRelationship(Map param) { + final List startLabels = getLabels((Map) param.get("start")); + final List endLabels = getLabels((Map) param.get("end")); Map relType = Util.map( - "start", getLabels((Map) param.get("start")), - "end", getLabels((Map) param.get("end")), + "start", startLabels, + "end", endLabels, "label", getType(param)); + List allLabels = Stream.concat(startLabels.stream(), endLabels.stream()).collect(Collectors.toList()); if (lastRelTypes == null) { + checkConstraints(allLabels); lastRelTypes = relType; } if (!relType.equals(lastRelTypes)) { + checkConstraints(allLabels); flush(); lastRelTypes = relType; } @@ -127,14 +139,34 @@ private void manageRelationship(Map param) { private void manageNode(Map param) { List labels = getLabels(param); if (lastLabels == null) { + checkConstraints(labels); lastLabels = labels; } if (!labels.equals(lastLabels)) { + checkConstraints(labels); flush(); lastLabels = labels; } } + private void checkConstraints(List labels) { + if (labels.isEmpty()) { + return; + } + try (final Transaction tx = db.beginTx()) { + final Schema schema = tx.schema(); + final String importIdName = importJsonConfig.getImportIdName(); + final String missingConstraint = labels.stream().filter(label -> + StreamSupport.stream(schema.getConstraints(Label.label(label)).spliterator(), false) + .noneMatch(constraint -> Iterables.contains(constraint.getPropertyKeys(), importIdName)) + ).findAny() + .orElse(null); + if (missingConstraint != null) { + throw new RuntimeException(String.format(MISSING_CONSTRAINT_ERROR_MSG, missingConstraint, importIdName)); + } + } + } + private void updateReporter(String type, Map properties) { final int size = properties.size() + 1; // +1 is for the "neo4jImportId" switch (type) { @@ -277,21 +309,22 @@ private String getType(Map param) { } private List getLabels(Map param) { - return ((List) param.getOrDefault("labels", Collections.emptyList())).stream() - .map(Util::quote) - .collect(Collectors.toList()); + return (List) param.getOrDefault("labels", Collections.emptyList()); } private String getLabelString(List labels) { labels = labels == null ? Collections.emptyList() : labels; - final String join = StringUtils.join(labels, ":"); - return join.isBlank() ? join : (":" + join); + final String delimiter = ":"; + final String join = labels.stream() + .map(Util::quote) + .collect(Collectors.joining(delimiter)); + return join.isBlank() ? join : (delimiter + join); } private void write(Transaction tx, List> resultList) { if (resultList.isEmpty()) return; final String type = (String) resultList.get(0).get("type"); - String query = null; + String query; switch (type) { case "node": query = String.format(CREATE_NODE, getLabelString(lastLabels), importJsonConfig.getImportIdName()); diff --git a/core/src/main/java/apoc/export/util/ExportConfig.java b/core/src/main/java/apoc/export/util/ExportConfig.java index ec446b990b..5e04164b1a 100644 --- a/core/src/main/java/apoc/export/util/ExportConfig.java +++ b/core/src/main/java/apoc/export/util/ExportConfig.java @@ -28,6 +28,7 @@ public class ExportConfig { private int batchSize; private boolean silent; private boolean bulkImport = false; + private boolean sampling; private String delim; private String quotes; private boolean useTypes; @@ -45,6 +46,7 @@ public enum OptimizationType {NONE, UNWIND_BATCH, UNWIND_BATCH_PARAMS} private OptimizationType optimizationType; private int unwindBatchSize; private long awaitForIndexes; + private final Map samplingConfig; public int getBatchSize() { return batchSize; @@ -99,6 +101,8 @@ public ExportConfig(Map config) { this.optimizations = (Map) config.getOrDefault("useOptimizations", Collections.emptyMap()); this.optimizationType = OptimizationType.valueOf(optimizations.getOrDefault("type", OptimizationType.UNWIND_BATCH.toString()).toString().toUpperCase()); this.batchSize = ((Number)config.getOrDefault("batchSize", DEFAULT_BATCH_SIZE)).intValue(); + this.sampling = toBoolean(config.getOrDefault("sampling", false)); + this.samplingConfig = (Map) config.getOrDefault("samplingConfig", new HashMap<>()); this.unwindBatchSize = ((Number)getOptimizations().getOrDefault("unwindBatchSize", DEFAULT_UNWIND_BATCH_SIZE)).intValue(); this.awaitForIndexes = ((Number)config.getOrDefault("awaitForIndexes", 300)).longValue(); validate(); @@ -195,4 +199,12 @@ public long getAwaitForIndexes() { return awaitForIndexes; } + public Map getSamplingConfig() { + return samplingConfig; + } + + public boolean isSampling() { + return sampling; + } + } diff --git a/core/src/main/java/apoc/export/util/MetaInformation.java b/core/src/main/java/apoc/export/util/MetaInformation.java index bf61e102a0..e1b8f3ca6d 100644 --- a/core/src/main/java/apoc/export/util/MetaInformation.java +++ b/core/src/main/java/apoc/export/util/MetaInformation.java @@ -1,38 +1,82 @@ package apoc.export.util; import apoc.meta.Meta; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.ClassUtils; import org.neo4j.cypher.export.SubGraph; import org.neo4j.graphdb.Entity; +import org.neo4j.graphdb.GraphDatabaseService; +import org.neo4j.graphdb.Label; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Relationship; +import org.neo4j.graphdb.RelationshipType; +import org.neo4j.graphdb.ResultTransformer; +import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; import static apoc.gephi.GephiFormatUtils.getCaption; +import static apoc.meta.tablesforlabels.PropertyTracker.typeMappings; import static java.util.Arrays.asList; +import static org.neo4j.internal.helpers.collection.Iterables.stream; /** * @author mh * @since 19.01.14 */ public class MetaInformation { - - public static Map collectPropTypesForNodes(SubGraph graph) { - Map propTypes = new LinkedHashMap<>(); - for (Node node : graph.getNodes()) { - updateKeyTypes(propTypes, node); + + private static final Map REVERSED_TYPE_MAP = MapUtils.invertMap(typeMappings); + + public static Map collectPropTypesForNodes(SubGraph graph, GraphDatabaseService db, ExportConfig config) { + if (!config.isSampling()) { + Map propTypes = new LinkedHashMap<>(); + for (Node node : graph.getNodes()) { + updateKeyTypes(propTypes, node); + } + return propTypes; } - return propTypes; + final Map conf = config.getSamplingConfig(); + conf.putIfAbsent("includeLabels", stream(graph.getAllLabelsInUse()).map(Label::name).collect(Collectors.toList())); + + return db.executeTransactionally("CALL apoc.meta.nodeTypeProperties($conf)", + Map.of("conf", conf), getMapResultTransformer()); } - public static Map collectPropTypesForRelationships(SubGraph graph) { - Map propTypes = new LinkedHashMap<>(); - for (Relationship node : graph.getRelationships()) { - updateKeyTypes(propTypes, node); + + public static Map collectPropTypesForRelationships(SubGraph graph, GraphDatabaseService db, ExportConfig config) { + if (!config.isSampling()) { + Map propTypes = new LinkedHashMap<>(); + for (Relationship relationship : graph.getRelationships()) { + updateKeyTypes(propTypes, relationship); + } + return propTypes; } - return propTypes; + final Map conf = config.getSamplingConfig(); + conf.putIfAbsent("includeRels", stream(graph.getAllRelationshipTypesInUse()).map(RelationshipType::name).collect(Collectors.toList())); + + return db.executeTransactionally("CALL apoc.meta.relTypeProperties($conf)", + Map.of("conf", conf), getMapResultTransformer()); + } + + private static ResultTransformer> getMapResultTransformer() { + return result -> result.stream() + .filter(map -> map.get("propertyName") != null) + .collect(Collectors.toMap(map -> (String) map.get("propertyName"), + map -> { + final String propertyTypes = ((List) map.get("propertyTypes")).get(0); + // take the className from the result, inversely to the meta.relTypeProperties/nodeTypeProperties procedures + String className = REVERSED_TYPE_MAP.get(propertyTypes); + try { + return ClassUtils.getClass(className); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + }, (e1, e2) -> e2)); } public static void updateKeyTypes(Map keyTypes, Entity pc) { @@ -49,7 +93,7 @@ public static void updateKeyTypes(Map keyTypes, Entity pc) { } public final static Set GRAPHML_ALLOWED = new HashSet<>(asList("boolean", "int", "long", "float", "double", "string")); - + public static String typeFor(Class value, Set allowed) { if (value == void.class) return null; // Is this necessary? Meta.Types type = Meta.Types.of(value); diff --git a/core/src/main/java/apoc/export/util/PointSerializer.java b/core/src/main/java/apoc/export/util/PointSerializer.java index 803c8e0ade..1ea8b01a85 100644 --- a/core/src/main/java/apoc/export/util/PointSerializer.java +++ b/core/src/main/java/apoc/export/util/PointSerializer.java @@ -91,14 +91,14 @@ class PointWgs { private Double longitude; private Double height; - public PointWgs(String crs, Double latitude, Double longitude, Double height) { + public PointWgs(String crs, Double longitude, Double latitude, Double height) { this.crs = crs; this.latitude = latitude; this.longitude = longitude; this.height = height; } - public PointWgs(String crs, Double latitude, Double longitude) { + public PointWgs(String crs, Double longitude, Double latitude) { this.crs = crs; this.latitude = latitude; this.longitude = longitude; diff --git a/core/src/main/java/apoc/graph/Graphs.java b/core/src/main/java/apoc/graph/Graphs.java index b490b4bf32..10ecce5d18 100644 --- a/core/src/main/java/apoc/graph/Graphs.java +++ b/core/src/main/java/apoc/graph/Graphs.java @@ -71,7 +71,7 @@ else if (data instanceof Iterator) { return found; } - @Description("apoc.graph.fromPaths(path,'name',{properties}) - creates a virtual graph object for later processing") + @Description("apoc.graph.fromPath(path,'name',{properties}) - creates a virtual graph object for later processing") @Procedure public Stream fromPath(@Name("path") Path paths, @Name("name") String name, @Name("properties") Map properties) { return Stream.of(new VirtualGraph(name, paths.nodes(), paths.relationships(),properties)); diff --git a/core/src/main/java/apoc/graph/document/builder/RelationshipBuilder.java b/core/src/main/java/apoc/graph/document/builder/RelationshipBuilder.java index 6c7a394905..3216449ad2 100644 --- a/core/src/main/java/apoc/graph/document/builder/RelationshipBuilder.java +++ b/core/src/main/java/apoc/graph/document/builder/RelationshipBuilder.java @@ -9,6 +9,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import java.util.stream.StreamSupport; @@ -21,7 +22,9 @@ public RelationshipBuilder(GraphsConfig config) { } public Collection buildRelation(Node parent, Node child, String relationName) { - RelationshipType type = RelationshipType.withName(relationName.toUpperCase()); + + RelationshipType type = RelationshipType + .withName(config.getRelMapping().getOrDefault(relationName, relationName.toUpperCase())); // check if already exists // find only relation between parent and child node diff --git a/core/src/main/java/apoc/graph/util/GraphsConfig.java b/core/src/main/java/apoc/graph/util/GraphsConfig.java index 66ff5483ab..dfecbda77c 100644 --- a/core/src/main/java/apoc/graph/util/GraphsConfig.java +++ b/core/src/main/java/apoc/graph/util/GraphsConfig.java @@ -1,5 +1,7 @@ package apoc.graph.util; +import org.apache.commons.collections4.MapUtils; + import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.regex.Matcher; @@ -103,6 +105,7 @@ public static GraphMapping from(String pattern) { private boolean generateId; private String defaultLabel; private Map mappings; + private Map relMapping; private boolean skipValidation; @@ -117,6 +120,7 @@ public GraphsConfig(Map config) { defaultLabel = config.getOrDefault("defaultLabel", "DocNode").toString(); mappings = toMappings((Map) config.getOrDefault("mappings", Collections.emptyMap())); skipValidation = toBoolean(config.getOrDefault("skipValidation", false)); + relMapping = MapUtils.emptyIfNull((Map) config.get("relMapping")); } private Map toMappings(Map mappings) { @@ -145,6 +149,10 @@ public String getDefaultLabel() { return defaultLabel; } + public Map getRelMapping() { + return relMapping; + } + public boolean isSkipValidation() { return skipValidation; } diff --git a/core/src/main/java/apoc/load/LoadJson.java b/core/src/main/java/apoc/load/LoadJson.java index 4de87285fa..7e91e6b773 100644 --- a/core/src/main/java/apoc/load/LoadJson.java +++ b/core/src/main/java/apoc/load/LoadJson.java @@ -26,8 +26,8 @@ public class LoadJson { @SuppressWarnings("unchecked") @Procedure @Description("apoc.load.jsonArray('url') YIELD value - load array from JSON URL (e.g. web-api) to import JSON as stream of values") - public Stream jsonArray(@Name("url") String url, @Name(value = "path",defaultValue = "") String path) { - return JsonUtil.loadJson(url, null, null, path, true) + public Stream jsonArray(@Name("url") String url, @Name(value = "path",defaultValue = "") String path, @Name(value = "config",defaultValue = "{}") Map config) { + return JsonUtil.loadJson(url, null, null, path, true, (List) config.get("pathOptions")) .flatMap((value) -> { if (value instanceof List) { List list = (List) value; @@ -51,16 +51,17 @@ public Stream json(@Name("url") String url, @Name(value = "path",defa public Stream jsonParams(@Name("urlOrKey") String urlOrKey, @Name("headers") Map headers, @Name("payload") String payload, @Name(value = "path",defaultValue = "") String path, @Name(value = "config",defaultValue = "{}") Map config) { if (config == null) config = Collections.emptyMap(); boolean failOnError = (boolean) config.getOrDefault("failOnError", true); - return loadJsonStream(urlOrKey, headers, payload, path, failOnError); + List pathOptions = (List) config.get("pathOptions"); + return loadJsonStream(urlOrKey, headers, payload, path, failOnError, pathOptions); } public static Stream loadJsonStream(@Name("url") String url, @Name("headers") Map headers, @Name("payload") String payload) { - return loadJsonStream(url, headers, payload, "", true); + return loadJsonStream(url, headers, payload, "", true, null); } - public static Stream loadJsonStream(@Name("url") String url, @Name("headers") Map headers, @Name("payload") String payload, String path, boolean failOnError) { + public static Stream loadJsonStream(@Name("url") String url, @Name("headers") Map headers, @Name("payload") String payload, String path, boolean failOnError, List pathOptions) { headers = null != headers ? headers : new HashMap<>(); headers.putAll(Util.extractCredentialsIfNeeded(url, failOnError)); - Stream stream = JsonUtil.loadJson(url,headers,payload, path, failOnError); + Stream stream = JsonUtil.loadJson(url,headers,payload, path, failOnError, pathOptions); return stream.flatMap((value) -> { if (value instanceof Map) { return Stream.of(new MapResult((Map) value)); diff --git a/core/src/main/java/apoc/load/util/LoadJdbcConfig.java b/core/src/main/java/apoc/load/util/LoadJdbcConfig.java index 8e2ba28812..64a7ed5a5f 100644 --- a/core/src/main/java/apoc/load/util/LoadJdbcConfig.java +++ b/core/src/main/java/apoc/load/util/LoadJdbcConfig.java @@ -1,7 +1,7 @@ package apoc.load.util; import apoc.util.Util; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import java.time.DateTimeException; import java.time.ZoneId; diff --git a/core/src/main/java/apoc/meta/Meta.java b/core/src/main/java/apoc/meta/Meta.java index d7d2929664..9607bda9d6 100644 --- a/core/src/main/java/apoc/meta/Meta.java +++ b/core/src/main/java/apoc/meta/Meta.java @@ -46,6 +46,7 @@ import java.time.LocalTime; import java.time.OffsetTime; import java.time.ZonedDateTime; +import java.util.AbstractMap; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -66,6 +67,7 @@ import java.util.stream.StreamSupport; import static apoc.util.MapUtil.map; +import static java.lang.String.format; import static java.util.Arrays.asList; import static java.util.Collections.singletonMap; import static org.neo4j.internal.kernel.api.TokenRead.ANY_LABEL; @@ -383,11 +385,11 @@ private MetaStats collectStats() { TokenRead tokenRead = kernelTx.tokenRead(); Read read = kernelTx.dataRead(); - int labelCount = tokenRead.labelCount(); - int relTypeCount = tokenRead.relationshipTypeCount(); + long relTypeCount = Iterables.count(tx.getAllRelationshipTypesInUse()); + long labelCount = Iterables.count(tx.getAllLabelsInUse()); - Map labelStats = new LinkedHashMap<>(labelCount); - Map relStats = new LinkedHashMap<>(2 * relTypeCount); + Map labelStats = new LinkedHashMap<>((int) labelCount); + Map relStats = new LinkedHashMap<>(2 * (int) relTypeCount); collectStats(new DatabaseSubGraph(transaction), null, null, new StatsCallback() { public void label(int labelId, String labelName, long count) { @@ -489,11 +491,20 @@ public Stream data(@Name(value = "config",defaultValue = "{}") Map schema(@Name(value = "config",defaultValue = "{}") Map config) { MetaStats metaStats = collectStats(); MetaConfig metaConfig = new MetaConfig(config); - Map> metaData = collectMetaData(new DatabaseSubGraph(transaction), metaConfig); + Map, Map> metaData = collectMetaData(new DatabaseSubGraph(transaction), metaConfig); Map relationships = collectRelationshipsMetaData(metaStats, metaData); Map nodes = collectNodesMetaData(metaStats, metaData, relationships); - + final Collection commonKeys = CollectionUtils.intersection(nodes.keySet(), relationships.keySet()); + if (!commonKeys.isEmpty()) { + relationships = relationships.entrySet().stream() + .map(e -> { + final String key = e.getKey(); + return commonKeys.contains(key) + ? new AbstractMap.SimpleEntry<>(format("%s (%s)", key, Types.RELATIONSHIP.name()), e.getValue()) + : e; + }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + } nodes.putAll(relationships); return Stream.of(new MapResult(nodes)); } @@ -612,19 +623,20 @@ private Tables4LabelsProfile collectTables4LabelsProfile (MetaConfig config) { // End new code - private Map> collectMetaData(SubGraph graph, MetaConfig config) { - Map> metaData = new LinkedHashMap<>(100); + private Map, Map> collectMetaData(SubGraph graph, MetaConfig config) { + Map, Map> metaData = new LinkedHashMap<>(100); Set types = Iterables.asSet(graph.getAllRelationshipTypesInUse()); Map> relConstraints = new HashMap<>(20); for (RelationshipType type : graph.getAllRelationshipTypesInUse()) { - metaData.put(type.name(), new LinkedHashMap<>(10)); + metaData.put(Set.of(Types.RELATIONSHIP.name(), type.name()), new LinkedHashMap<>(10)); relConstraints.put(type.name(),graph.getConstraints(type)); } for (Label label : graph.getAllLabelsInUse()) { Map nodeMeta = new LinkedHashMap<>(50); String labelName = label.name(); - metaData.put(labelName, nodeMeta); + // workaround in case of duplicated keys + metaData.put(Set.of(Types.NODE.name(), labelName), nodeMeta); Iterable constraints = graph.getConstraints(label); Set indexed = new LinkedHashSet<>(); for (IndexDefinition index : graph.getIndexes(label)) { @@ -670,15 +682,15 @@ public long getSampleForLabelCount(long labelCount, long sample) { } } - private Map collectNodesMetaData(MetaStats metaStats, Map> metaData, Map relationships) { + private Map collectNodesMetaData(MetaStats metaStats, Map, Map> metaData, Map relationships) { Map nodes = new LinkedHashMap<>(); Map>> startNodeNameToRelationshipsMap = new HashMap<>(); - for (String entityName : metaData.keySet()) { - Map entityData = metaData.get(entityName); + for (Set metadataKey : metaData.keySet()) { + Map entityData = metaData.get(metadataKey); Map entityProperties = new LinkedHashMap<>(); Map entityRelationships = new LinkedHashMap<>(); List labels = new LinkedList<>(); - boolean isNode = true; + boolean isNode = metaStats.labels.keySet().stream().anyMatch(metadataKey::contains); for (String entityDataKey : entityData.keySet()) { MetaResult metaResult = entityData.get(entityDataKey); if (metaResult.elementType.equals("relationship")) { @@ -693,11 +705,11 @@ private Map collectNodesMetaData(MetaStats metaStats, Map) relationships.get(metaResult.property)).get("properties"))); + "properties", ((Map) relationships.getOrDefault(metaResult.property, Map.of())).get("properties"))); metaResult.other.forEach(o -> { Map mirroredRelationship = new LinkedHashMap<>(); mirroredRelationship.put(metaResult.property, MapUtil.map("direction", "in", "count", metaResult.leftCount, "labels", new LinkedList<>(Arrays.asList(metaResult.label)) , - "properties", ((Map) relationships.get(metaResult.property)).get("properties"))); + "properties", ((Map) relationships.getOrDefault(metaResult.property, Map.of())).get("properties"))); if (startNodeNameToRelationshipsMap.containsKey(o)) startNodeNameToRelationshipsMap.get(o).add(mirroredRelationship); @@ -711,9 +723,10 @@ private Map collectNodesMetaData(MetaStats metaStats, Map nodes, Map collectRelationshipsMetaData(MetaStats metaStats, Map> metaData) { + private Map collectRelationshipsMetaData(MetaStats metaStats, Map, Map> metaData) { Map relationships = new LinkedHashMap<>(); - for(String entityName : metaData.keySet()) { - Map entityData = metaData.get(entityName); + for(Set metadataKey : metaData.keySet()) { + Map entityData = metaData.get(metadataKey); Map entityProperties = new LinkedHashMap<>(); - if (entityData.isEmpty()) { - continue; - } - boolean isRelationship = true; + boolean isRelationship = metaStats.relTypesCount.keySet().stream().anyMatch(metadataKey::contains); for (String entityDataKey : entityData.keySet()) { MetaResult metaResult = entityData.get(entityDataKey); if (!metaResult.elementType.equals("relationship")) { @@ -768,15 +778,20 @@ private Map collectRelationshipsMetaData(MetaStats metaStats, Ma } } if (isRelationship) { - relationships.put(entityName, MapUtil.map( + String key = getKeyFromEntityName(metadataKey, Types.RELATIONSHIP.name()); + relationships.put(key, MapUtil.map( "type", "relationship", - "count", metaStats.relTypesCount.get(entityName), + "count", metaStats.relTypesCount.get(key), "properties", entityProperties)); } } return relationships; } + private String getKeyFromEntityName(Set entityName, String suffix) { + return new HashSet<>(entityName).stream().filter(entity -> !entity.equals(suffix)).findFirst().get(); + } + private void addProperties(Map properties, String labelName, Iterable constraints, Set indexed, Entity pc, Node node) { for (String prop : pc.getPropertyKeys()) { if (properties.containsKey(prop)) continue; @@ -787,7 +802,7 @@ private void addProperties(Map properties, String labelName, } } - private void addRelationships(Map> metaData, + private void addRelationships(Map, Map> metaData, Map nodeMeta, String labelName, Node node, @@ -800,12 +815,13 @@ private void addRelationships(Map> metaData, if (out == 0) return; String typeName = type.name(); + // workaround in case of duplicated keys Iterable constraints = relConstraints.get(typeName); if (!nodeMeta.containsKey(typeName)) nodeMeta.put(typeName, new MetaResult(labelName,typeName)); // int in = node.getDegree(type, Direction.INCOMING); - Map typeMeta = metaData.get(typeName); + Map typeMeta = metaData.get(Set.of(typeName, Types.RELATIONSHIP.name())); if (!typeMeta.containsKey(labelName)) typeMeta.put(labelName,new MetaResult(typeName,labelName)); MetaResult relMeta = nodeMeta.get(typeName); addOtherNodeInfo(node, labelName, out, type, relMeta , typeMeta, constraints); @@ -821,7 +837,8 @@ private void addOtherNodeInfo(Node node, String labelName, int out, Relationship int in = endNode.getDegree(type, Direction.INCOMING); relMeta.inc().other(labels).rel(out , in); relNodeMeta.inc().other(labels).rel(out,in); - addProperties(typeMeta, type.name(), relConstraints, Collections.emptySet(), rel, node); + final String typeName = type.name(); + addProperties(typeMeta, typeName, relConstraints, Collections.emptySet(), rel, node); relNodeMeta.elementType(Types.RELATIONSHIP.name()); } } diff --git a/core/src/main/java/apoc/meta/tablesforlabels/PropertyTracker.java b/core/src/main/java/apoc/meta/tablesforlabels/PropertyTracker.java index f7d2f2af23..f4b164196e 100644 --- a/core/src/main/java/apoc/meta/tablesforlabels/PropertyTracker.java +++ b/core/src/main/java/apoc/meta/tablesforlabels/PropertyTracker.java @@ -39,7 +39,7 @@ public List propertyTypes() { return ret; } - private static final Map typeMappings = new HashMap(); + public static final Map typeMappings = new HashMap(); static { typeMappings.put("java.lang.String", "String"); typeMappings.put("java.lang.String[]", "StringArray"); diff --git a/core/src/main/java/apoc/number/Numbers.java b/core/src/main/java/apoc/number/Numbers.java index 90b17f630c..49e421ccce 100644 --- a/core/src/main/java/apoc/number/Numbers.java +++ b/core/src/main/java/apoc/number/Numbers.java @@ -1,5 +1,6 @@ package apoc.number; +import org.apache.commons.lang3.StringUtils; import org.neo4j.procedure.Description; import org.neo4j.procedure.Name; import org.neo4j.procedure.UserFunction; @@ -35,6 +36,9 @@ public Long parseInt(final @Name("text") String text, @Name(value = "pattern",de } private Number parseNumber(@Name("text") String text, @Name(value = "pattern", defaultValue = "") String pattern, @Name(value = "lang", defaultValue = "") String lang) { + if (StringUtils.isBlank(text)) { + return null; + } try { return buildFormatter(pattern, lang).parse(text); } catch (ParseException e) { diff --git a/core/src/main/java/apoc/number/exact/Exact.java b/core/src/main/java/apoc/number/exact/Exact.java index 423ad247cf..ac9dc87f6d 100644 --- a/core/src/main/java/apoc/number/exact/Exact.java +++ b/core/src/main/java/apoc/number/exact/Exact.java @@ -1,6 +1,6 @@ package apoc.number.exact; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.neo4j.procedure.Description; import org.neo4j.procedure.Name; import org.neo4j.procedure.UserFunction; diff --git a/core/src/main/java/apoc/periodic/Periodic.java b/core/src/main/java/apoc/periodic/Periodic.java index c964f1bc85..aa28168b51 100644 --- a/core/src/main/java/apoc/periodic/Periodic.java +++ b/core/src/main/java/apoc/periodic/Periodic.java @@ -29,10 +29,13 @@ import static apoc.util.Util.merge; public class Periodic { + + enum Planner {DEFAULT, COST, IDP, DP } + public static final Pattern PLANNER_PATTERN = Pattern.compile("\\bplanner\\s*=\\s*[^\\s]*", Pattern.CASE_INSENSITIVE); public static final Pattern RUNTIME_PATTERN = Pattern.compile("\\bruntime\\s*=", Pattern.CASE_INSENSITIVE); - public static final Pattern CYPHER_PREFIX_PATTERN = Pattern.compile("\\bcypher\\b", Pattern.CASE_INSENSITIVE); - public static final String CYPHER_RUNTIME_SLOTTED = "cypher runtime=slotted "; + public static final Pattern CYPHER_PREFIX_PATTERN = Pattern.compile("^\\s*\\bcypher\\b", Pattern.CASE_INSENSITIVE); + public static final String CYPHER_RUNTIME_SLOTTED = " runtime=slotted "; final static Pattern LIMIT_PATTERN = Pattern.compile("\\slimit\\s", Pattern.CASE_INSENSITIVE); @Context public GraphDatabaseService db; @@ -150,12 +153,13 @@ public Stream cancel(@Name("name") String name) { } @Procedure(mode = Mode.WRITE) - @Description("apoc.periodic.submit('name',statement) - submit a one-off background statement") - public Stream submit(@Name("name") String name, @Name("statement") String statement) { + @Description("apoc.periodic.submit('name',statement,params) - submit a one-off background statement; parameter 'params' is optional and can contain query parameters for Cypher statement") + public Stream submit(@Name("name") String name, @Name("statement") String statement, @Name(value = "params", defaultValue = "{}") Map config) { validateQuery(statement); + Map params = (Map)config.getOrDefault("params", Collections.emptyMap()); JobInfo info = submit(name, () -> { try { - db.executeTransactionally(statement); + db.executeTransactionally(statement, params); } catch(Exception e) { log.warn("in background task via submit", e); throw new RuntimeException(e); @@ -259,7 +263,7 @@ public Stream iterate( try (Result result = tx.execute(slottedRuntime(cypherIterate),params)) { Pair prepared = PeriodicUtils.prepareInnerStatement(cypherAction, batchMode, result.columns(), "_batch"); - String innerStatement = prepared.first(); + String innerStatement = applyPlanner(prepared.first(), Planner.valueOf((String) config.getOrDefault("planner", Planner.DEFAULT.name()))); boolean iterateList = prepared.other(); log.info("starting batching from `%s` operation using iteration `%s` in separate thread", cypherIterate,cypherAction); return PeriodicUtils.iterateAndExecuteBatchedInSeparateThread( @@ -278,10 +282,29 @@ static String slottedRuntime(String cypherIterate) { if (RUNTIME_PATTERN.matcher(cypherIterate).find()) { return cypherIterate; } - Matcher matcher = CYPHER_PREFIX_PATTERN.matcher(cypherIterate.substring(0, Math.min(15,cypherIterate.length()))); - return matcher.find() ? CYPHER_PREFIX_PATTERN.matcher(cypherIterate).replaceFirst(CYPHER_RUNTIME_SLOTTED) : CYPHER_RUNTIME_SLOTTED + cypherIterate; + + return prependQueryOption(cypherIterate, CYPHER_RUNTIME_SLOTTED); + } + + public static String applyPlanner(String query, Planner planner) { + if(planner.equals(Planner.DEFAULT)) { + return query; + } + Matcher matcher = PLANNER_PATTERN.matcher(query); + String cypherPlanner = String.format(" planner=%s ", planner.name().toLowerCase()); + if (matcher.find()) { + return matcher.replaceFirst(cypherPlanner); + } + return prependQueryOption(query, cypherPlanner); } + private static String prependQueryOption(String query, String cypherOption) { + String cypherPrefix = "cypher"; + String completePrefix = cypherPrefix + cypherOption; + return CYPHER_PREFIX_PATTERN.matcher(query).find() + ? query.replaceFirst("(?i)" + cypherPrefix, completePrefix) + : completePrefix + query; + } static abstract class ExecuteBatch implements Function { diff --git a/core/src/main/java/apoc/result/AssertSchemaResult.java b/core/src/main/java/apoc/result/AssertSchemaResult.java index 6efd6a5a9a..ced4f04f5f 100644 --- a/core/src/main/java/apoc/result/AssertSchemaResult.java +++ b/core/src/main/java/apoc/result/AssertSchemaResult.java @@ -5,13 +5,13 @@ import java.util.List; public class AssertSchemaResult { - public final String label; + public final Object label; public final String key; public final List keys; public boolean unique = false; public String action = "KEPT"; - public AssertSchemaResult(String label, List keys) { + public AssertSchemaResult(Object label, List keys) { this.label = label; if (keys.size() == 1) { this.key = keys.get(0); diff --git a/core/src/main/java/apoc/result/IndexConstraintNodeInfo.java b/core/src/main/java/apoc/result/IndexConstraintNodeInfo.java index 6bb7756fae..75a25c1d4d 100644 --- a/core/src/main/java/apoc/result/IndexConstraintNodeInfo.java +++ b/core/src/main/java/apoc/result/IndexConstraintNodeInfo.java @@ -9,7 +9,7 @@ public class IndexConstraintNodeInfo { public final String name; - public final String label; + public final Object label; public final List properties; @@ -40,7 +40,7 @@ public class IndexConstraintNodeInfo { * @param size * @param userDescription */ - public IndexConstraintNodeInfo(String name, String label, List properties, String status, String type, String failure, float populationProgress, long size, double valuesSelectivity, String userDescription) { + public IndexConstraintNodeInfo(String name, Object label, List properties, String status, String type, String failure, float populationProgress, long size, double valuesSelectivity, String userDescription) { this.name = name; this.label = label; this.properties = properties; diff --git a/core/src/main/java/apoc/result/VirtualNode.java b/core/src/main/java/apoc/result/VirtualNode.java index b687a666dc..03c7ec9056 100644 --- a/core/src/main/java/apoc/result/VirtualNode.java +++ b/core/src/main/java/apoc/result/VirtualNode.java @@ -45,6 +45,10 @@ public VirtualNode(Node node, List propertyNames) { this.props.putAll(node.getProperties(keys)); } + public static VirtualNode from(Node node) { + return new VirtualNode(node, Iterables.asList(node.getPropertyKeys())); + } + @Override public long getId() { return id; diff --git a/core/src/main/java/apoc/result/VirtualPath.java b/core/src/main/java/apoc/result/VirtualPath.java new file mode 100644 index 0000000000..b94ec4ff53 --- /dev/null +++ b/core/src/main/java/apoc/result/VirtualPath.java @@ -0,0 +1,121 @@ +package apoc.result; + +import org.neo4j.graphdb.Entity; +import org.neo4j.graphdb.Node; +import org.neo4j.graphdb.Path; +import org.neo4j.graphdb.Relationship; +import org.neo4j.graphdb.traversal.Paths; + +import javax.annotation.Nonnull; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; + +import static org.apache.commons.collections4.IterableUtils.reversedIterable; + + +public class VirtualPath implements Path { + + private final Node start; + private final List relationships = new ArrayList<>(); + + public VirtualPath(Node start) { + Objects.requireNonNull(start); + this.start = start; + } + + public void addRel(Relationship relationship) { + Objects.requireNonNull(relationship); + this.relationships.add(relationship); + } + + @Override + public Node startNode() { + return start; + } + + @Override + public Node endNode() { + return reverseNodes().iterator().next(); + } + + @Override + public Relationship lastRelationship() { + return relationships.isEmpty() ? null : relationships.get(relationships.size() - 1); + } + + @Override + public Iterable relationships() { + return relationships; + } + + @Override + public Iterable reverseRelationships() { + return reversedIterable(relationships()); + } + + @Override + public Iterable nodes() { + List nodes = new ArrayList<>(); + nodes.add(start); + + AtomicReference currNode = new AtomicReference<>(start); + final List otherNodes = relationships.stream().map(rel -> { + final Node otherNode = rel.getOtherNode(currNode.get()); + currNode.set(otherNode); + return otherNode; + }).collect(Collectors.toList()); + + nodes.addAll(otherNodes); + return nodes; + } + + @Override + public Iterable reverseNodes() { + return reversedIterable(nodes()); + } + + @Override + public int length() { + return relationships.size(); + } + + @Override + @Nonnull + public Iterator iterator() { + return new Iterator<>() { + Iterator current = nodes().iterator(); + Iterator next = relationships().iterator(); + + @Override + public boolean hasNext() { + return current.hasNext(); + } + + @Override + public Entity next() { + try { + return current.next(); + } + finally { + Iterator temp = current; + current = next; + next = temp; + } + } + + @Override + public void remove() { + next.remove(); + } + }; + } + + @Override + public String toString() { + return Paths.defaultPathToString(this); + } +} diff --git a/core/src/main/java/apoc/result/VirtualRelationship.java b/core/src/main/java/apoc/result/VirtualRelationship.java index 3de1e059a6..9c9d050bf8 100644 --- a/core/src/main/java/apoc/result/VirtualRelationship.java +++ b/core/src/main/java/apoc/result/VirtualRelationship.java @@ -37,6 +37,10 @@ public VirtualRelationship(long id, Node startNode, Node endNode, RelationshipTy this.type = type; this.props.putAll(props); } + + public static Relationship from(VirtualNode start, VirtualNode end, Relationship rel) { + return new VirtualRelationship(start, end, rel.getType()).withProperties(rel.getAllProperties()); + } @Override public long getId() { diff --git a/core/src/main/java/apoc/schema/Schemas.java b/core/src/main/java/apoc/schema/Schemas.java index 1681c9f015..14cd4d733d 100644 --- a/core/src/main/java/apoc/schema/Schemas.java +++ b/core/src/main/java/apoc/schema/Schemas.java @@ -4,6 +4,7 @@ import apoc.result.ConstraintRelationshipInfo; import apoc.result.IndexConstraintNodeInfo; import org.apache.commons.lang3.StringUtils; +import org.neo4j.common.EntityType; import org.neo4j.common.TokenNameLookup; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Label; @@ -28,6 +29,7 @@ import java.util.*; import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; +import java.util.stream.IntStream; import java.util.stream.Stream; import java.util.stream.StreamSupport; @@ -148,7 +150,7 @@ public List assertIndexes(Map> indexes0 if (definition.isConstraintIndex()) continue; - String label = Iterables.single(definition.getLabels()).name(); + Object label = getLabelForAssert(definition, definition.isNodeIndex()); List keys = new ArrayList<>(); definition.getPropertyKeys().forEach(keys::add); @@ -185,6 +187,18 @@ public List assertIndexes(Map> indexes0 return result; } + private Object getLabelForAssert(IndexDefinition definition, boolean nodeIndex) { + if (nodeIndex) { + return definition.isMultiTokenIndex() + ? Iterables.stream(definition.getLabels()).map(Label::name).collect(Collectors.toList()) + : Iterables.single(definition.getLabels()).name(); + } else { + return definition.isMultiTokenIndex() + ? Iterables.stream(definition.getRelationshipTypes()).map(RelationshipType::name).collect(Collectors.toList()) + : Iterables.single(definition.getRelationshipTypes()).name(); + } + } + private AssertSchemaResult createSinglePropertyIndex(Schema schema, String lbl, String key) { schema.indexFor(label(lbl)).on(key).create(); return new AssertSchemaResult(lbl, key).created(); @@ -300,7 +314,8 @@ private Stream indexesAndConstraintsForNode(Map Arrays.stream(index.schema().getEntityTokenIds()).noneMatch(id -> { + .filter(index -> index.schema().entityType().equals(EntityType.NODE) + && Arrays.stream(index.schema().getEntityTokenIds()).noneMatch(id -> { try { return excludeLabels.contains(tokenRead.nodeLabelName(id)); } catch (LabelNotFoundKernelException e) { @@ -336,15 +351,14 @@ private Stream indexesAndConstraintsForNode(Map constraintNodeInfoStream = StreamSupport.stream(constraintsIterator.spliterator(), false) - .filter(constraintDescriptor -> constraintDescriptor.type().equals(org.neo4j.internal.schema.ConstraintType.EXISTS)) + .filter(ConstraintDescriptor::isNodePropertyExistenceConstraint) .map(constraintDescriptor -> this.nodeInfoFromConstraintDescriptor(constraintDescriptor, tokenRead)) - .sorted(Comparator.comparing(i -> i.label)); + .sorted(Comparator.comparing(i -> i.label.toString())); Stream indexNodeInfoStream = StreamSupport.stream(indexesIterator.spliterator(), false) .map(indexDescriptor -> this.nodeInfoFromIndexDefinition(indexDescriptor, schemaRead, tokenRead)) - .sorted(Comparator.comparing(i -> i.label)); + .sorted(Comparator.comparing(i -> i.label.toString())); return Stream.of(constraintNodeInfoStream, indexNodeInfoStream).flatMap(e -> e); } @@ -377,12 +391,11 @@ private Stream constraintsForRelationship(Map allConstraints = schema.getConstraints(); constraintsIterator = StreamSupport.stream(allConstraints.spliterator(),false) - .filter(index -> !excludeRelationships.contains(index.getRelationshipType().name())) + .filter(index -> index.isConstraintType(ConstraintType.RELATIONSHIP_PROPERTY_EXISTENCE) && !excludeRelationships.contains(index.getRelationshipType().name())) .collect(Collectors.toList()); } Stream constraintRelationshipInfoStream = StreamSupport.stream(constraintsIterator.spliterator(), false) - .filter(constraintDefinition -> constraintDefinition.isConstraintType(ConstraintType.RELATIONSHIP_PROPERTY_EXISTENCE)) .map(this::relationshipInfoFromConstraintDefinition); return constraintRelationshipInfoStream; @@ -425,14 +438,13 @@ private IndexConstraintNodeInfo nodeInfoFromConstraintDescriptor(ConstraintDescr */ private IndexConstraintNodeInfo nodeInfoFromIndexDefinition(IndexDescriptor indexDescriptor, SchemaRead schemaRead, TokenNameLookup tokens){ int[] labelIds = indexDescriptor.schema().getEntityTokenIds(); - if (labelIds.length != 1) throw new IllegalStateException("Index with more than one label"); - String labelName = tokens.labelGetName(labelIds[0]); + Object labelName = labelIds.length > 1 ? IntStream.of(labelIds).boxed().map(tokens::labelGetName).sorted().collect(Collectors.toList()) : tokens.labelGetName(labelIds[0]); List properties = new ArrayList<>(); Arrays.stream(indexDescriptor.schema().getPropertyIds()).forEach((i) -> properties.add(tokens.propertyKeyGetName(i))); try { return new IndexConstraintNodeInfo( // Pretty print for index name - String.format(":%s(%s)", labelName, StringUtils.join(properties, ",")), + getSchemaInfoName(labelName, properties), labelName, properties, schemaRead.indexGetState(indexDescriptor).toString(), @@ -446,7 +458,7 @@ private IndexConstraintNodeInfo nodeInfoFromIndexDefinition(IndexDescriptor inde } catch(IndexNotFoundKernelException e) { return new IndexConstraintNodeInfo( // Pretty print for index name - String.format(":%s(%s)", labelName, StringUtils.join(properties, ",")), + getSchemaInfoName(labelName, properties), labelName, properties, "NOT_FOUND", @@ -472,4 +484,9 @@ private ConstraintRelationshipInfo relationshipInfoFromConstraintDefinition(Cons "" ); } + + private String getSchemaInfoName(Object labelOrType, List properties) { + final String labelOrTypeAsString = labelOrType instanceof String ? (String) labelOrType : StringUtils.join(labelOrType, ","); + return String.format(":%s(%s)", labelOrTypeAsString, StringUtils.join(properties, ",")); + } } diff --git a/core/src/main/java/apoc/trigger/Trigger.java b/core/src/main/java/apoc/trigger/Trigger.java index 1dd8152d08..0adc4264e0 100644 --- a/core/src/main/java/apoc/trigger/Trigger.java +++ b/core/src/main/java/apoc/trigger/Trigger.java @@ -1,13 +1,15 @@ package apoc.trigger; -import apoc.coll.SetBackedList; import apoc.util.Util; import org.neo4j.graphdb.GraphDatabaseService; -import org.neo4j.graphdb.Label; -import org.neo4j.graphdb.Node; -import org.neo4j.procedure.*; - -import java.util.*; +import org.neo4j.procedure.Context; +import org.neo4j.procedure.Description; +import org.neo4j.procedure.Mode; +import org.neo4j.procedure.Name; +import org.neo4j.procedure.Procedure; + +import java.util.Collections; +import java.util.Map; import java.util.stream.Stream; /** @@ -94,13 +96,13 @@ public TriggerInfo toTriggerInfo(Map.Entry e) { return new TriggerInfo(name, null, null, false, false); } - @Procedure(mode = Mode.WRITE) + @Procedure(mode = Mode.READ) @Description("list all installed triggers") public Stream list() { return triggerHandler.list().entrySet().stream() .map( (e) -> new TriggerInfo(e.getKey(), (String)e.getValue().get("statement"), - (Map)e.getValue().get("selector"), + (Map) e.getValue().get("selector"), (Map) e.getValue().get("params"), true, (Boolean) e.getValue().getOrDefault("paused", false)) diff --git a/core/src/main/java/apoc/trigger/TriggerHandler.java b/core/src/main/java/apoc/trigger/TriggerHandler.java index 918e60e0b7..23d6790dbc 100644 --- a/core/src/main/java/apoc/trigger/TriggerHandler.java +++ b/core/src/main/java/apoc/trigger/TriggerHandler.java @@ -21,26 +21,39 @@ import org.neo4j.kernel.api.procedure.GlobalProcedures; import org.neo4j.kernel.lifecycle.LifecycleAdapter; import org.neo4j.logging.Log; +import org.neo4j.scheduler.Group; +import org.neo4j.scheduler.JobHandle; +import org.neo4j.scheduler.JobScheduler; import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.Function; import java.util.stream.Collectors; import static apoc.ApocConfig.APOC_TRIGGER_ENABLED; +import static apoc.ApocConfig.apocConfig; public class TriggerHandler extends LifecycleAdapter implements TransactionEventListener { private enum Phase {before, after, rollback, afterAsync} + public static final String TRIGGER_REFRESH = "apoc.trigger.refresh"; + private final ConcurrentHashMap> activeTriggers = new ConcurrentHashMap(); private final Log log; private final GraphDatabaseService db; private final DatabaseManagementService databaseManagementService; private final ApocConfig apocConfig; private final Pools pools; + private final JobScheduler jobScheduler; + + private long lastUpdate; + + private JobHandle restoreTriggerHandler; private final AtomicBoolean registeredWithKernel = new AtomicBoolean(false); @@ -50,13 +63,14 @@ private enum Phase {before, after, rollback, afterAsync} public TriggerHandler(GraphDatabaseService db, DatabaseManagementService databaseManagementService, ApocConfig apocConfig, Log log, GlobalProcedures globalProceduresRegistry, - Pools pools) { + Pools pools, JobScheduler jobScheduler) { this.db = db; this.databaseManagementService = databaseManagementService; this.apocConfig = apocConfig; this.log = log; transactionComponentFunction = globalProceduresRegistry.lookupComponentProvider(Transaction.class, true); this.pools = pools; + this.jobScheduler = jobScheduler; } private boolean isEnabled() { @@ -71,21 +85,24 @@ public void checkEnabled() { private void updateCache() { activeTriggers.clear(); - try (Transaction tx = apocConfig.getSystemDb().beginTx()) { + + lastUpdate = System.currentTimeMillis(); + + withSystemDb(tx -> { tx.findNodes(SystemLabels.ApocTrigger, SystemPropertyKeys.database.name(), db.databaseName()).forEachRemaining( - node -> activeTriggers.put( - (String) node.getProperty(SystemPropertyKeys.name.name()), - MapUtil.map( - "statement", node.getProperty(SystemPropertyKeys.statement.name()), - "selector", Util.fromJson((String) node.getProperty(SystemPropertyKeys.selector.name()), Map.class), - "params", Util.fromJson((String) node.getProperty(SystemPropertyKeys.params.name()), Map.class), - "paused", node.getProperty(SystemPropertyKeys.paused.name()) - ) - ) + node -> activeTriggers.put( + (String) node.getProperty(SystemPropertyKeys.name.name()), + MapUtil.map( + "statement", node.getProperty(SystemPropertyKeys.statement.name()), + "selector", Util.fromJson((String) node.getProperty(SystemPropertyKeys.selector.name()), Map.class), + "params", Util.fromJson((String) node.getProperty(SystemPropertyKeys.params.name()), Map.class), + "paused", node.getProperty(SystemPropertyKeys.paused.name()) + ) + ) ); - tx.commit(); - } + return null; + }); reconcileKernelRegistration(); } @@ -120,7 +137,7 @@ public Map add(String name, String statement, Map checkEnabled(); Map previous = activeTriggers.get(name); - try (Transaction tx = apocConfig.getSystemDb().beginTx()) { + withSystemDb(tx -> { Node node = Util.mergeNode(tx, SystemLabels.ApocTrigger, null, Pair.of(SystemPropertyKeys.database.name(), db.databaseName()), Pair.of(SystemPropertyKeys.name.name(), name)); @@ -128,8 +145,10 @@ public Map add(String name, String statement, Map node.setProperty(SystemPropertyKeys.selector.name(), Util.toJson(selector)); node.setProperty(SystemPropertyKeys.params.name(), Util.toJson(params)); node.setProperty(SystemPropertyKeys.paused.name(), false); - tx.commit(); - } + setLastUpdate(tx); + return null; + }); + updateCache(); return previous; } @@ -138,26 +157,28 @@ public Map remove(String name) { checkEnabled(); Map previous = activeTriggers.remove(name); - try (Transaction tx = apocConfig.getSystemDb().beginTx()) { + withSystemDb(tx -> { tx.findNodes(SystemLabels.ApocTrigger, - SystemPropertyKeys.database.name(), db.databaseName(), - SystemPropertyKeys.name.name(), name) + SystemPropertyKeys.database.name(), db.databaseName(), + SystemPropertyKeys.name.name(), name) .forEachRemaining(node -> node.delete()); - tx.commit(); - } + setLastUpdate(tx); + return null; + }); updateCache(); return previous; } public Map updatePaused(String name, boolean paused) { checkEnabled(); - try (Transaction tx = apocConfig.getSystemDb().beginTx()) { + withSystemDb(tx -> { tx.findNodes(SystemLabels.ApocTrigger, - SystemPropertyKeys.database.name(), db.databaseName(), - SystemPropertyKeys.name.name(), name) + SystemPropertyKeys.database.name(), db.databaseName(), + SystemPropertyKeys.name.name(), name) .forEachRemaining(node -> node.setProperty(SystemPropertyKeys.paused.name(), paused)); - tx.commit(); - } + setLastUpdate(tx); + return null; + }); updateCache(); return activeTriggers.get(name); } @@ -166,19 +187,20 @@ public Map removeAll() { checkEnabled(); Map previous = activeTriggers .entrySet().stream().collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue())); - try (Transaction tx = apocConfig.getSystemDb().beginTx()) { + withSystemDb(tx -> { tx.findNodes(SystemLabels.ApocTrigger, - SystemPropertyKeys.database.name(), db.databaseName() ) + SystemPropertyKeys.database.name(), db.databaseName() ) .forEachRemaining(node -> node.delete()); - tx.commit(); - } + setLastUpdate(tx); + return null; + }); updateCache(); return previous; } public Map> list() { checkEnabled(); - return activeTriggers; + return Map.copyOf(activeTriggers); } @Override @@ -263,6 +285,12 @@ private boolean when(Map selector, Phase phase) { @Override public void start() throws Exception { updateCache(); + long refreshInterval = apocConfig().getInt(TRIGGER_REFRESH, 60000); + restoreTriggerHandler = jobScheduler.scheduleRecurring(Group.STORAGE_MAINTENANCE, () -> { + if (getLastUpdate() > lastUpdate) { + updateCache(); + } + }, refreshInterval, refreshInterval, TimeUnit.MILLISECONDS); } @Override @@ -270,6 +298,33 @@ public void stop() { if(registeredWithKernel.compareAndSet(true, false)) { databaseManagementService.unregisterTransactionEventListener(db.databaseName(), this); } + if (restoreTriggerHandler != null) { + restoreTriggerHandler.cancel(); + } + } + + private T withSystemDb(Function action) { + try (Transaction tx = apocConfig.getSystemDb().beginTx()) { + T result = action.apply(tx); + tx.commit(); + return result; + } + } + + private long getLastUpdate() { + return withSystemDb( tx -> { + Node node = tx.findNode(SystemLabels.ApocTriggerMeta, SystemPropertyKeys.database.name(), db.databaseName()); + return node == null ? 0L : (long) node.getProperty(SystemPropertyKeys.lastUpdated.name()); + }); + } + + private void setLastUpdate(Transaction tx) { + Node node = tx.findNode(SystemLabels.ApocTriggerMeta, SystemPropertyKeys.database.name(), db.databaseName()); + if (node == null) { + node = tx.createNode(SystemLabels.ApocTriggerMeta); + node.setProperty(SystemPropertyKeys.database.name(), db.databaseName()); + } + node.setProperty(SystemPropertyKeys.lastUpdated.name(), System.currentTimeMillis()); } } diff --git a/core/src/main/java/apoc/util/FileUtils.java b/core/src/main/java/apoc/util/FileUtils.java index 9fd2b6016e..a714d79316 100644 --- a/core/src/main/java/apoc/util/FileUtils.java +++ b/core/src/main/java/apoc/util/FileUtils.java @@ -7,7 +7,7 @@ import apoc.util.s3.S3URLConnection; import apoc.util.s3.S3UploadUtils; import org.apache.commons.io.output.WriterOutputStream; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.neo4j.configuration.GraphDatabaseSettings; import java.io.*; diff --git a/core/src/main/java/apoc/util/JsonUtil.java b/core/src/main/java/apoc/util/JsonUtil.java index ab1da207f0..62ec081369 100755 --- a/core/src/main/java/apoc/util/JsonUtil.java +++ b/core/src/main/java/apoc/util/JsonUtil.java @@ -14,14 +14,17 @@ import com.jayway.jsonpath.Option; import com.jayway.jsonpath.spi.json.JacksonJsonProvider; import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.neo4j.graphdb.spatial.Point; -import org.neo4j.procedure.Name; import org.neo4j.values.storable.DurationValue; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; import java.time.temporal.Temporal; +import java.util.EnumSet; +import java.util.List; import java.util.Map; import java.util.Spliterators; import java.util.stream.Stream; @@ -34,9 +37,10 @@ * @since 04.05.16 */ public class JsonUtil { + private final static Option[] defaultJsonPathOptions = { Option.DEFAULT_PATH_LEAF_TO_NULL, Option.SUPPRESS_EXCEPTIONS }; + public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); - public static final Object TOMB = new Object(); - private static final Configuration JSON_PATH_CONFIG; + public static final String PATH_OPTIONS_ERROR_MESSAGE = "Invalid pathOptions. The allowed values are: " + EnumSet.allOf(Option.class); static { OBJECT_MAPPER.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true); OBJECT_MAPPER.configure(JsonParser.Feature.AUTO_CLOSE_SOURCE, false); @@ -51,11 +55,6 @@ public class JsonUtil { module.addSerializer(Temporal.class, new TemporalSerializer()); module.addSerializer(DurationValue.class, new DurationValueSerializer()); OBJECT_MAPPER.registerModule(module); - JSON_PATH_CONFIG = Configuration.builder() - .options(Option.DEFAULT_PATH_LEAF_TO_NULL, Option.SUPPRESS_EXCEPTIONS) - .jsonProvider(new JacksonJsonProvider(OBJECT_MAPPER)) - .mappingProvider(new JacksonMappingProvider(OBJECT_MAPPER)) - .build(); } static class NonClosingStream extends FilterInputStream { @@ -69,10 +68,28 @@ public void close() throws IOException { } } + private static Configuration getJsonPathConfig(List options) { + try { + Option[] opts = options == null ? defaultJsonPathOptions : options.stream().map(Option::valueOf).toArray(Option[]::new); + return Configuration.builder() + .options(opts) + .jsonProvider(new JacksonJsonProvider(OBJECT_MAPPER)) + .mappingProvider(new JacksonMappingProvider(OBJECT_MAPPER)) + .build(); + } catch (Exception e) { + throw new RuntimeException(PATH_OPTIONS_ERROR_MESSAGE, e); + } + } + public static Stream loadJson(String url, Map headers, String payload) { return loadJson(url,headers,payload,"", true); } - public static Stream loadJson(String url, Map headers, String payload, String path, boolean failOnError) { + + private static Stream loadJson(String url, Map headers, String payload, String path, boolean failOnError) { + return loadJson(url, headers, payload, path, failOnError, null); + } + + public static Stream loadJson(String url, Map headers, String payload, String path, boolean failOnError, List options) { try { url = Util.getLoadUrlByConfigFile("json",url, "url").orElse(url); apocConfig().checkReadAllowed(url); @@ -81,7 +98,7 @@ public static Stream loadJson(String url, Map headers, St JsonParser parser = OBJECT_MAPPER.getFactory().createParser(input); MappingIterator it = OBJECT_MAPPER.readValues(parser, Object.class); Stream stream = StreamSupport.stream(Spliterators.spliteratorUnknownSize(it, 0), false); - return (path==null||path.isEmpty()) ? stream : stream.map((value) -> JsonPath.parse(value,JSON_PATH_CONFIG).read(path)); + return StringUtils.isBlank(path) ? stream : stream.map((value) -> JsonPath.parse(value, getJsonPathConfig(options)).read(path)); } catch (IOException e) { String u = Util.cleanUrl(url); if(!failOnError) @@ -96,12 +113,20 @@ public static Stream loadJson(String url) { } public static T parse(String json, String path, Class type) { + return parse(json, path, type, null); + } + + public static T parse(String json, String path, Class type, List options) { if (json==null || json.isEmpty()) return null; try { + final String listOpt = Option.ALWAYS_RETURN_LIST.name(); + if (type == Map.class && options != null && options.contains(listOpt)) { + throw new RuntimeException("It's not possible to use " + listOpt + " option because the conversion should return a Map"); + } if (path == null || path.isEmpty()) { return OBJECT_MAPPER.readValue(json, type); } - return JsonPath.parse(json,JSON_PATH_CONFIG).read(path, type); + return JsonPath.parse(json, getJsonPathConfig(options)).read(path, type); } catch (IOException e) { throw new RuntimeException("Can't convert " + json + " to "+type.getSimpleName()+" with path "+path, e); } diff --git a/core/src/main/java/apoc/util/Util.java b/core/src/main/java/apoc/util/Util.java index 1499197237..d81f847bd4 100644 --- a/core/src/main/java/apoc/util/Util.java +++ b/core/src/main/java/apoc/util/Util.java @@ -6,7 +6,7 @@ import apoc.result.VirtualNode; import apoc.result.VirtualRelationship; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.eclipse.collections.api.iterator.LongIterator; import org.neo4j.graphdb.Direction; import org.neo4j.graphdb.Entity; diff --git a/core/src/main/java/apoc/util/google/cloud/GCStorageURLConnection.java b/core/src/main/java/apoc/util/google/cloud/GCStorageURLConnection.java index d1cae5306a..98e1a46410 100644 --- a/core/src/main/java/apoc/util/google/cloud/GCStorageURLConnection.java +++ b/core/src/main/java/apoc/util/google/cloud/GCStorageURLConnection.java @@ -4,7 +4,7 @@ import com.google.cloud.storage.BlobId; import com.google.cloud.storage.Storage; import com.google.cloud.storage.StorageOptions; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.neo4j.util.VisibleForTesting; import java.io.ByteArrayInputStream; diff --git a/core/src/test/java/apoc/StartupTest.java b/core/src/test/java/apoc/StartupTest.java deleted file mode 100644 index 3d271e3ff1..0000000000 --- a/core/src/test/java/apoc/StartupTest.java +++ /dev/null @@ -1,44 +0,0 @@ -package apoc; - -import apoc.util.Neo4jContainerExtension; -import apoc.util.TestUtil; -import org.junit.Test; -import org.neo4j.driver.Session; - -import static apoc.util.TestContainerUtil.createEnterpriseDB; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -/* - This test is just to verify if the APOC are correctly deployed - into a Neo4j instance without any startup issue. - If you don't have docker installed it will fail, and you can simply ignore it. - */ -public class StartupTest { - @Test - public void test() { - try { - Neo4jContainerExtension neo4jContainer = createEnterpriseDB(!TestUtil.isRunningInCI()) - .withNeo4jConfig("dbms.transaction.timeout", "5s"); - - - neo4jContainer.start(); - - assertTrue("Neo4j Instance should be up-and-running", neo4jContainer.isRunning()); - - Session session = neo4jContainer.getSession(); - int procedureCount = session.run("CALL dbms.procedures() YIELD name WHERE name STARTS WITH 'apoc' RETURN count(*) AS count").peek().get("count").asInt(); - int functionCount = session.run("CALL dbms.functions() YIELD name WHERE name STARTS WITH 'apoc' RETURN count(*) AS count").peek().get("count").asInt(); - int coreCount = session.run("CALL apoc.help('') YIELD core WHERE core = true RETURN count(*) AS count").peek().get("count").asInt(); - - assertTrue(procedureCount > 0); - assertTrue(functionCount > 0); - assertTrue(coreCount > 0); - - neo4jContainer.close(); - } catch (Exception ex) { - ex.printStackTrace(); - fail("Should not have thrown exception when trying to start Neo4j: " + ex); - } - } -} diff --git a/core/src/test/java/apoc/algo/PathFindingTest.java b/core/src/test/java/apoc/algo/PathFindingTest.java deleted file mode 100644 index 91c23aaa11..0000000000 --- a/core/src/test/java/apoc/algo/PathFindingTest.java +++ /dev/null @@ -1,200 +0,0 @@ -package apoc.algo; - -import apoc.util.TestUtil; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.neo4j.graphdb.Node; -import org.neo4j.graphdb.Path; -import org.neo4j.graphdb.Result; -import org.neo4j.internal.helpers.collection.Iterables; -import org.neo4j.internal.helpers.collection.Iterators; -import org.neo4j.test.rule.DbmsRule; -import org.neo4j.test.rule.ImpermanentDbmsRule; - -import java.util.List; -import java.util.Map; - -import static apoc.util.TestUtil.testCall; -import static apoc.util.TestUtil.testResult; -import static apoc.util.Util.map; -import static org.hamcrest.Matchers.contains; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; - -public class PathFindingTest { - - private static final String SETUP_MISSING_PROPERTY = "CREATE " + - "(a:Loc{name:'A'}), " + - "(b:Loc{name:'B'}), " + - "(c:Loc{name:'C'}), " + - "(d:Loc{name:'D'}), " + - "(a)-[:ROAD {d:100}]->(d), " + - "(a)-[:RAIL {d:5}]->(d), " + - "(a)-[:ROAD {d:'10'}]->(b), " + - "(b)-[:ROAD {d:20}]->(c), " + - "(c)-[:ROAD]->(d), " + - "(a)-[:ROAD {d:20}]->(c) "; - private static final String SETUP_SIMPLE = "CREATE " + - "(a:Loc{name:'A'}), " + - "(b:Loc{name:'B'}), " + - "(c:Loc{name:'C'}), " + - "(d:Loc{name:'D'}), " + - "(a)-[:ROAD {d:100}]->(d), " + - "(a)-[:RAIL {d:5}]->(d), " + - "(a)-[:ROAD {d:10}]->(b), " + - "(b)-[:ROAD {d:20}]->(c), " + - "(c)-[:ROAD {d:30}]->(d), " + - "(a)-[:ROAD {d:20}]->(c) "; - private static final String SETUP_GEO = "CREATE (b:City {name:'Berlin',lat:52.52464,lon:13.40514})\n" + - "CREATE (m:City {name:'München',lat:48.1374,lon:11.5755})\n" + - "CREATE (f:City {name:'Frankfurt',lat:50.1167,lon:8.68333})\n" + - "CREATE (h:City {name:'Hamburg',lat:53.554423,lon:9.994583})\n" + - "CREATE (b)-[:DIRECT {dist:255.64*1000}]->(h)\n" + - "CREATE (b)-[:DIRECT {dist:504.47*1000}]->(m)\n" + - "CREATE (b)-[:DIRECT {dist:424.12*1000}]->(f)\n" + - "CREATE (f)-[:DIRECT {dist:304.28*1000}]->(m)\n" + - "CREATE (f)-[:DIRECT {dist:393.15*1000}]->(h)"; - - @Rule - public DbmsRule db = new ImpermanentDbmsRule(); - - - @Before - public void setUp() throws Exception { - TestUtil.registerProcedure(db, PathFinding.class); - } - - @Test - public void testAStar() { - db.executeTransactionally(SETUP_GEO); - testResult(db, - "MATCH (from:City {name:'München'}), (to:City {name:'Hamburg'}) " + - "CALL apoc.algo.aStar(from, to, 'DIRECT', 'dist', 'lat', 'lon') yield path, weight " + - "RETURN path, weight" , - r -> assertAStarResult(r) - ); - } - - @Test - public void testAStarConfig() { - db.executeTransactionally(SETUP_GEO); - testResult(db, - "MATCH (from:City {name:'München'}), (to:City {name:'Hamburg'}) " + - "CALL apoc.algo.aStarConfig(from, to, 'DIRECT', {weight:'dist',y:'lat', x:'lon',default:100}) yield path, weight " + - "RETURN path, weight" , - r -> assertAStarResult(r) - ); - } - - private void assertAStarResult(Result r) { - assertEquals(true, r.hasNext()); - Map row = r.next(); - assertEquals(697, ((Number)row.get("weight")).intValue()/1000) ; - Path path = (Path) row.get("path"); - assertEquals(2, path.length()) ; // 3nodes, 2 rels - List nodes = Iterables.asList(path.nodes()); - assertEquals("München", nodes.get(0).getProperty("name")) ; - assertEquals("Frankfurt", nodes.get(1).getProperty("name")) ; - assertEquals("Hamburg", nodes.get(2).getProperty("name")) ; - assertEquals(false,r.hasNext()); - } - - @Test - public void testDijkstra() { - db.executeTransactionally(SETUP_SIMPLE); - testCall(db, - "MATCH (from:Loc{name:'A'}), (to:Loc{name:'D'}) " + - "CALL apoc.algo.dijkstra(from, to, 'ROAD>', 'd') yield path, weight " + - "RETURN path, weight" , - row -> { - assertEquals(50.0, row.get("weight")) ; - assertEquals(2, ((Path)(row.get("path"))).length()) ; // 3nodes, 2 rels - } - ); - testCall(db, - "MATCH (from:Loc{name:'A'}), (to:Loc{name:'D'}) " + - "CALL apoc.algo.dijkstra(from, to, '', 'd') yield path, weight " + - "RETURN path, weight" , - row -> { - assertEquals(5.0, row.get("weight")) ; - assertEquals(1, ((Path)(row.get("path"))).length()) ; // 2nodes, 1 rels - } - ); - } - - @Test - public void testDijkstraWithDefaultWeight() { - db.executeTransactionally(SETUP_MISSING_PROPERTY); - testCall(db, - "MATCH (from:Loc{name:'A'}), (to:Loc{name:'D'}) " + - "CALL apoc.algo.dijkstraWithDefaultWeight(from, to, 'ROAD>', 'd', 10.5) yield path, weight " + - "RETURN path, weight", - row -> { - assertEquals(30.5, row.get("weight")); - assertEquals(2, ((Path) (row.get("path"))).length()); // 3nodes, 2 rels - } - ); - } - - @Test - public void testDijkstraMultipleShortest() { - db.executeTransactionally(SETUP_SIMPLE); - testResult(db, - "MATCH (from:Loc{name:'A'}), (to:Loc{name:'D'}) " + - "CALL apoc.algo.dijkstra(from, to, 'ROAD>', 'd', 99999, 3) yield path, weight " + - "RETURN path, weight", - result -> { - List> records = Iterators.asList(result); - assertThat( - map(records, map -> map.get("weight")), - contains(50.0, 60.0, 100.0) - ); - - assertThat( - map(records, map -> ((Path) map.get("path")).length()), - contains(2, 3, 1) - ); - } - ); - } - - @Test - public void testAllSimplePaths() { - db.executeTransactionally(SETUP_MISSING_PROPERTY); - testResult(db, - "MATCH (from:Loc{name:'A'}), (to:Loc{name:'D'}) " + - "CALL apoc.algo.allSimplePaths(from, to, 'ROAD>', 3) yield path " + - "RETURN path ORDER BY length(path)", - res -> { - Path path; - path = (Path) res.next().get("path"); - assertEquals(1, path.length()); - path = (Path) res.next().get("path"); - assertEquals(2, path.length()); - path = (Path) res.next().get("path"); - assertEquals(3, path.length()); - assertEquals(false, res.hasNext()); - } - ); - } - @Test - public void testAllSimplePathResults() { - db.executeTransactionally(SETUP_MISSING_PROPERTY); - testResult(db, - "MATCH (from:Loc{name:'A'}), (to:Loc{name:'D'}) " + - "CALL apoc.algo.allSimplePaths(from, to, 'ROAD>', 3) yield path " + - "RETURN nodes(path) as nodes ORDER BY length(path)", - res -> { - List nodes; - nodes = (List) res.next().get("nodes"); - assertEquals(2, nodes.size()); - nodes = (List) res.next().get("nodes"); - assertEquals(3, nodes.size()); - nodes = (List) res.next().get("nodes"); - assertEquals(4, nodes.size()); - assertEquals(false, res.hasNext()); - } - ); - } -} diff --git a/core/src/test/java/apoc/atomic/AtomicTest.java b/core/src/test/java/apoc/atomic/AtomicTest.java index 2911c9a132..19ee51e74d 100644 --- a/core/src/test/java/apoc/atomic/AtomicTest.java +++ b/core/src/test/java/apoc/atomic/AtomicTest.java @@ -34,6 +34,44 @@ public class AtomicTest { TestUtil.registerProcedure(db, Atomic.class); } + @Test + public void testAddAndSubInteger(){ + db.executeTransactionally("CREATE (p:Person {name:'Tom'})"); + try(Transaction tx = db.beginTx()) { + final Node node = tx.getAllNodes().stream().findFirst().orElse(null); + node.setProperty("age", 1); + tx.commit(); + } + db.executeTransactionally("MATCH (n:Person {name:'Tom'}) CALL apoc.atomic.add(n,$property,$value) YIELD container RETURN count(*)", + map("property","age","value",10)); + int age = TestUtil.singleResultFirstColumn(db, "MATCH (n:Person {name:'Tom'}) RETURN n.age as age"); + assertEquals(11, age); + db.executeTransactionally("MATCH (n:Person {name:'Tom'}) CALL apoc.atomic.subtract(n,$property,$value) YIELD container RETURN count(*)", + map("property","age","value",5)); + int ageSub = TestUtil.singleResultFirstColumn(db, "MATCH (n:Person {name:'Tom'}) RETURN n.age as age"); + assertEquals(6, ageSub); + } + + @Test + public void testAddAndSubFloat() { + db.executeTransactionally("CREATE (p:Person {name:'Tom'})"); + try(Transaction tx = db.beginTx()) { + final Node node = tx.getAllNodes().stream().findFirst().orElse(null); + node.setProperty("age", 2.4F); + tx.commit(); + } + + db.executeTransactionally("MATCH (n:Person {name:'Tom'}) CALL apoc.atomic.add(n,$property,$value) YIELD container RETURN count(*)", + map("property","age","value",1.5F)); + float age = TestUtil.singleResultFirstColumn(db, "MATCH (n:Person {name:'Tom'}) RETURN n.age as age"); + assertEquals(3.9F, age, 0); + + db.executeTransactionally("MATCH (n:Person {name:'Tom'}) CALL apoc.atomic.subtract(n,$property,$value) YIELD container RETURN count(*)", + map("property","age","value",0.5F)); + float ageSub = TestUtil.singleResultFirstColumn(db, "MATCH (n:Person {name:'Tom'}) RETURN n.age as age"); + assertEquals(3.4F, ageSub, 0); + } + @Test public void testAddLong(){ db.executeTransactionally("CREATE (p:Person {name:'Tom',age: 40}) CREATE (c:Person {name:'John',age: 40}) CREATE (a:Person {name:'Anne',age: 22})"); diff --git a/core/src/test/java/apoc/coll/CollTest.java b/core/src/test/java/apoc/coll/CollTest.java index 7577469537..9093fe0195 100644 --- a/core/src/test/java/apoc/coll/CollTest.java +++ b/core/src/test/java/apoc/coll/CollTest.java @@ -36,6 +36,19 @@ public void testRunningTotal() throws Exception { (row) -> assertEquals(asList(1L, 3L, 6L, 10L, 15.5D, 16.5D), row.get("value"))); } + @Test + public void testStandardDeviation() throws Exception { + testCall(db, "RETURN apoc.coll.stdev([10, 12, 23, 23, 16, 23, 21, 16]) as value", + (row) -> assertEquals(5.237229365663817D, row.get("value"))); + + testCall(db, "RETURN apoc.coll.stdev([10, 12, 23, 23, 16, 23, 21, 16], false) as value", + (row) -> assertEquals(4.898979485566356D, row.get("value"))); + + // conversion from double to long + testCall(db, "RETURN apoc.coll.stdev([10, 12, 23]) as value", + (row) -> assertEquals(7L, row.get("value"))); + } + @Test public void testZip() throws Exception { testCall(db, "RETURN apoc.coll.zip([1,2,3],[4,5]) as value", diff --git a/core/src/test/java/apoc/convert/ConvertJsonTest.java b/core/src/test/java/apoc/convert/ConvertJsonTest.java index 6aed520a7c..3fdb0dc483 100644 --- a/core/src/test/java/apoc/convert/ConvertJsonTest.java +++ b/core/src/test/java/apoc/convert/ConvertJsonTest.java @@ -4,8 +4,10 @@ import apoc.util.Util; import junit.framework.TestCase; import org.apache.commons.lang.exception.ExceptionUtils; +import org.assertj.core.util.Arrays; import org.hamcrest.MatcherAssert; import org.hamcrest.Matchers; +import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -21,6 +23,7 @@ import static apoc.convert.Json.NODE; import static apoc.convert.Json.RELATIONSHIP; +import static apoc.util.JsonUtil.PATH_OPTIONS_ERROR_MESSAGE; import static apoc.util.MapUtil.map; import static apoc.util.TestUtil.testCall; import static apoc.util.TestUtil.testResult; @@ -28,13 +31,96 @@ import static org.junit.Assert.*; public class ConvertJsonTest { - + private static final Map EXPECTED_COLUMNS_MAP = Map.of("row", Map.of("poiType", "Governorate", "poi", 772L), "col2", Map.of("_id", "772col2")); + // json extracted from issue #1445 + private static final String JSON = "{\"columns\":{\"row\":{\"poiType\":\"Governorate\",\"poi\":772},\"col2\":{\"_id\":\"772col2\"}}}"; + + public static final List> EXPECTED_PATH = List.of(EXPECTED_COLUMNS_MAP); + public static final List EXPECTED_PATH_WITH_NULLS = Arrays.asList(new Object[]{ EXPECTED_COLUMNS_MAP, null, null, null }); + public static final List EXPECTED_AS_PATH_LIST = List.of("$['columns']"); + + @Rule public DbmsRule db = new ImpermanentDbmsRule(); @Before public void setUp() throws Exception { TestUtil.registerProcedure(db, Json.class); } + + @After + public void clear() { + db.executeTransactionally("MATCH (n) DETACH DELETE n;"); + } + + @Test + public void testJsonPath() { + // -- json.path + testCall(db, "RETURN apoc.json.path($json, '$..columns') AS path", Map.of("json", JSON), + (row) -> assertEquals(EXPECTED_PATH_WITH_NULLS, row.get("path"))); + + testCall(db, "RETURN apoc.json.path($json, '$..columns', ['AS_PATH_LIST']) AS path", Map.of("json", JSON), + (row) -> assertEquals(EXPECTED_AS_PATH_LIST, row.get("path"))); + + testCall(db, "RETURN apoc.json.path($json, '$..columns', []) AS path", Map.of("json", JSON), + (row) -> assertEquals(EXPECTED_PATH, row.get("path"))); + + // -- convert.fromJsonList + testCall(db, "RETURN apoc.convert.fromJsonList($json, '$..columns') AS path", Map.of("json", JSON), + (row) -> assertEquals(EXPECTED_PATH_WITH_NULLS, row.get("path"))); + + testCall(db, "RETURN apoc.convert.fromJsonList($json, '$..columns', ['AS_PATH_LIST']) AS path", Map.of("json", JSON), + (row) -> assertEquals(EXPECTED_AS_PATH_LIST, row.get("path"))); + + testCall(db, "RETURN apoc.convert.fromJsonList($json, '$..columns', []) AS path", Map.of("json", JSON), + (row) -> assertEquals(List.of(EXPECTED_COLUMNS_MAP), row.get("path"))); + + + db.executeTransactionally("CREATE (n:JsonPathNode {prop: $prop})", Map.of("prop", JSON)); + + // -- convert.getJsonProperty + testCall(db, "MATCH (n:JsonPathNode) RETURN apoc.convert.getJsonProperty(n, 'prop', '$..columns') AS path", Map.of("json", JSON), + (row) -> assertEquals(EXPECTED_PATH_WITH_NULLS, row.get("path"))); + + testCall(db, "MATCH (n:JsonPathNode) RETURN apoc.convert.getJsonProperty(n, 'prop', '$..columns', ['AS_PATH_LIST']) AS path", Map.of("json", JSON), + (row) -> assertEquals(EXPECTED_AS_PATH_LIST, row.get("path"))); + + testCall(db, "MATCH (n:JsonPathNode) RETURN apoc.convert.getJsonProperty(n, 'prop', '$..columns', []) AS path", Map.of("json", JSON), + (row) -> assertEquals(List.of(EXPECTED_COLUMNS_MAP), row.get("path"))); + + // -- invalid option + try { + testCall(db, "RETURN apoc.json.path($json, '$..columns', ['INVALID']) AS path", Map.of("json", JSON), + (row) -> fail("Should fail because of invalid pathOptions")); + } catch (RuntimeException e) { + assertTrue(ExceptionUtils.getStackTrace(e).contains(PATH_OPTIONS_ERROR_MESSAGE)); + } + } + + @Test + public void testJsonPathWithMapFunctions() { + // apoc.convert.getJsonPropertyMap and apoc.convert.fromJsonMap must fail with "ALWAYS_RETURN_LIST" because should return a Map. + final Map expectedMap = Map.of("_id", "772col2"); + final String expectedError = "It's not possible to use ALWAYS_RETURN_LIST option because the conversion should return a Map"; + + testCall(db, "RETURN apoc.convert.fromJsonMap($json, '$.columns.col2') AS path", Map.of("json", JSON), + (row) -> assertEquals(expectedMap, row.get("path"))); + try { + testCall(db, "RETURN apoc.convert.fromJsonMap($json, '$.columns.col2', ['ALWAYS_RETURN_LIST']) AS path", Map.of("json", JSON), + (row) -> fail("Should fail because of MismatchedInputException")); + } catch (QueryExecutionException e) { + assertTrue(e.getMessage().contains(expectedError)); + } + + db.executeTransactionally("CREATE (n:JsonPathNode {prop: $prop})", Map.of("prop", JSON)); + testCall(db, "MATCH (n:JsonPathNode) RETURN apoc.convert.getJsonPropertyMap(n, 'prop', '$.columns.col2') AS path", Map.of("json", JSON), + (row) -> assertEquals(expectedMap, row.get("path"))); + try { + testCall(db, "MATCH (n:JsonPathNode) RETURN apoc.convert.getJsonPropertyMap(n, 'prop', '$.columns.col2', ['ALWAYS_RETURN_LIST']) AS path", Map.of("json", JSON), + (row) -> fail("Should fail because of MismatchedInputException")); + } catch (QueryExecutionException e) { + assertTrue(e.getMessage().contains(expectedError)); + } + } @Test public void testToJsonList() throws Exception { testCall(db, "RETURN apoc.convert.toJson([1,2,3]) as value", @@ -91,7 +177,7 @@ public void testToJsonCollectNodes() throws Exception { "kids", List.of("Sam", "Anna", "Grace"), "born", "2015-07-04T19:32:24", "place", Map.of( - "latitude", 56.7, "longitude", 12.78, "crs", "wgs-84-3d", "height", 1.1 + "latitude", 12.78, "longitude", 56.7, "crs", "wgs-84-3d", "height", 1.1 )); assertJsonNode(nodeOne, "0", users, expectedMap); diff --git a/core/src/test/java/apoc/create/CreateTest.java b/core/src/test/java/apoc/create/CreateTest.java index 827aa6703b..40589dd53a 100644 --- a/core/src/test/java/apoc/create/CreateTest.java +++ b/core/src/test/java/apoc/create/CreateTest.java @@ -6,16 +6,23 @@ import org.junit.Test; import org.neo4j.graphdb.Label; import org.neo4j.graphdb.Node; +import org.neo4j.graphdb.Path; import org.neo4j.graphdb.Relationship; import org.neo4j.graphdb.RelationshipType; +import org.neo4j.graphdb.ResourceIterator; +import org.neo4j.internal.helpers.collection.Iterables; import org.neo4j.test.rule.DbmsRule; import org.neo4j.test.rule.ImpermanentDbmsRule; +import java.util.Iterator; +import java.util.List; import java.util.Map; +import java.util.Set; import static apoc.util.TestUtil.testCall; import static apoc.util.TestUtil.testResult; import static org.junit.Assert.*; +import static org.neo4j.graphdb.Label.label; public class CreateTest { @@ -228,5 +235,66 @@ public void testVirtualFromNodeFunction() throws Exception { assertNull(node.getProperty("born")); }); } + + @Test + public void testVirtualPath() { + db.executeTransactionally("CREATE p=(a:Test {foo: 7})-[:TEST]->(b:Baa:Baz {a:'b'})<-[:TEST_2 {aa:'bb'}]-(:Bar {one:'www'}), \n" + + "q=(:Omega {alpha: 'beta'})<-[:TEST_3 {aa:'ccc'}]-(:Bar {one:'jjj'})"); + testCall(db, "MATCH p=(a:Test {foo: 7})-[:TEST]->(b:Baa:Baz {a:'b'})<-[:TEST_2 {aa:'bb'}]-(:Bar {one:'www'}) WITH p \n" + + "CALL apoc.create.clonePathToVirtual(p) YIELD path RETURN path", + (row) -> assertionsFirstVirtualPath((Path) row.get("path"))); + + testResult(db, "MATCH p=(a:Test {foo: 7})-[:TEST]->(b:Baa:Baz {a:'b'})<-[:TEST_2 {aa:'bb'}]-(:Bar {one:'www'}), \n" + + "q=(:Omega {alpha: 'beta'})<-[:TEST_3 {aa:'ccc'}]-(:Bar {one:'jjj'}) WITH [p, q] as paths \n" + + "CALL apoc.create.clonePathsToVirtual(paths) YIELD path RETURN path", + (res) -> { + ResourceIterator paths = res.columnAs("path"); + Path firstPath = paths.next(); + assertionsFirstVirtualPath(firstPath); + Path secondPath = paths.next(); + Iterator nodes = secondPath.nodes().iterator(); + Node firstNode = nodes.next(); + assertEquals(List.of(label("Omega")), firstNode.getLabels()); + assertEquals(Map.of("alpha", "beta"), firstNode.getAllProperties()); + + Node secondNode = nodes.next(); + assertEquals(List.of(label("Bar")), secondNode.getLabels()); + assertEquals(Map.of("one", "jjj"), secondNode.getAllProperties()); + assertFalse(nodes.hasNext()); + + Iterator rels = secondPath.relationships().iterator(); + Relationship relationship = rels.next(); + assertEquals("TEST_3", relationship.getType().name()); + assertEquals(Map.of("aa", "ccc"), relationship.getAllProperties()); + assertFalse(rels.hasNext()); + assertFalse(paths.hasNext()); + }); + } + + private void assertionsFirstVirtualPath(Path path) { + Iterator nodes = path.nodes().iterator(); + Node firstNode = nodes.next(); + assertEquals(List.of(label("Test")), firstNode.getLabels()); + assertEquals(Map.of("foo", 7L), firstNode.getAllProperties()); + + Node secondNode = nodes.next(); + assertEquals(Set.of(label("Baa"), label("Baz")), Iterables.asSet(secondNode.getLabels())); + assertEquals(Map.of("a", "b"), secondNode.getAllProperties()); + + Node thirdNode = nodes.next(); + assertEquals(List.of(label("Bar")), thirdNode.getLabels()); + assertEquals(Map.of("one", "www"), thirdNode.getAllProperties()); + assertFalse(nodes.hasNext()); + + Iterator rels = path.relationships().iterator(); + Relationship firstRel = rels.next(); + assertEquals("TEST", firstRel.getType().name()); + assertTrue(firstRel.getAllProperties().isEmpty()); + + Relationship secondRel = rels.next(); + assertEquals("TEST_2", secondRel.getType().name()); + assertEquals(Map.of("aa", "bb"), secondRel.getAllProperties()); + assertFalse(rels.hasNext()); + } } diff --git a/core/src/test/java/apoc/date/DateTest.java b/core/src/test/java/apoc/date/DateTest.java index 47e36436fa..acb80aebda 100644 --- a/core/src/test/java/apoc/date/DateTest.java +++ b/core/src/test/java/apoc/date/DateTest.java @@ -112,6 +112,11 @@ public static void sUp() throws Exception { row -> assertNull(row.get("value"))); } + @Test + public void testToUnixtimeWithEmptyInput() throws Exception { + testCall(db, "RETURN apoc.date.parse(' ','s') AS value", row -> assertNull(row.get("value"))); + } + @Test public void testFromUnixtime() throws Exception { testCall(db, "RETURN apoc.date.format(0,'s') AS value", diff --git a/core/src/test/java/apoc/export/csv/ExportCsvNeo4jAdminTest.java b/core/src/test/java/apoc/export/csv/ExportCsvNeo4jAdminTest.java index 9c1f0025bd..7a60b989d9 100644 --- a/core/src/test/java/apoc/export/csv/ExportCsvNeo4jAdminTest.java +++ b/core/src/test/java/apoc/export/csv/ExportCsvNeo4jAdminTest.java @@ -30,7 +30,7 @@ public class ExportCsvNeo4jAdminTest { .format(":ID;born_3D:point;localtime:localtime;time:time;localDateTime:localdatetime;duration:duration;dateTime:datetime;born_2D:point;date:date;:LABEL%n"); private static final String EXPECTED_NEO4J_ADMIN_IMPORT_TYPES_NODE = String - .format("6;{crs:wgs-84-3d,latitude:56.7,longitude:12.78,height:100.0};12:50:35.556;12:50:35.556+01:00;2018-10-30T19:32:24;P5M1DT12H;2018-10-30T12:50:35.556+01:00;{crs:cartesian,x:2.3,y:4.5};2018-10-30;Types%n"); + .format("6;{crs:wgs-84-3d,latitude:12.78,longitude:56.7,height:100.0};12:50:35.556;12:50:35.556+01:00;2018-10-30T19:32:24;P5M1DT12H;2018-10-30T12:50:35.556+01:00;{crs:cartesian,x:2.3,y:4.5};2018-10-30;Types%n"); private static final String EXPECTED_NEO4J_ADMIN_IMPORT_HEADER_NODE_ADDRESS = String .format(":ID;name;street;:LABEL%n"); diff --git a/core/src/test/java/apoc/export/csv/ExportCsvTest.java b/core/src/test/java/apoc/export/csv/ExportCsvTest.java index 6b87376dc3..9f01dd1e42 100644 --- a/core/src/test/java/apoc/export/csv/ExportCsvTest.java +++ b/core/src/test/java/apoc/export/csv/ExportCsvTest.java @@ -2,7 +2,9 @@ import apoc.ApocSettings; import apoc.graph.Graphs; +import apoc.meta.Meta; import apoc.util.TestUtil; +import apoc.util.Util; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Test; @@ -12,8 +14,11 @@ import org.neo4j.test.rule.ImpermanentDbmsRule; import java.io.File; +import java.io.IOException; +import java.nio.file.Files; import java.util.List; import java.util.Map; +import java.util.Arrays; import java.util.function.Consumer; import static apoc.util.MapUtil.map; @@ -61,6 +66,21 @@ public class ExportCsvTest { ",,,,,,,,\"0\",\"1\",\"KNOWS\"%n" + ",,,,,,,,\"3\",\"4\",\"NEXT_DELIVERY\"%n"); + private static final String EXP_SAMPLE = "\"_id\",\"_labels\",\"address\",\"age\",\"baz\",\"city\",\"foo\",\"kids\",\"last:Name\",\"male\",\"name\",\"street\",\"_start\",\"_end\",\"_type\",\"one\",\"three\"\n" + + "\"0\",\":User:User1\",\"\",\"42\",\"\",\"\",\"\",\"[\"\"a\"\",\"\"b\"\",\"\"c\"\"]\",\"\",\"true\",\"foo\",\"\",,,,,\n" + + "\"1\",\":User\",\"\",\"42\",\"\",\"\",\"\",\"\",\"\",\"\",\"bar\",\"\",,,,,\n" + + "\"2\",\":User\",\"\",\"12\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",,,,,\n" + + "\"3\",\":Address:Address1\",\"\",\"\",\"\",\"Milano\",\"\",\"\",\"\",\"\",\"Andrea\",\"Via Garibaldi, 7\",,,,,\n" + + "\"4\",\":Address\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"Bar Sport\",\"\",,,,,\n" + + "\"5\",\":Address\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"via Benni\",,,,,\n" + + "\"6\",\":Sample:User\",\"\",\"\",\"\",\"\",\"\",\"\",\"Galilei\",\"\",\"\",\"\",,,,,\n" + + "\"7\",\":Sample:User\",\"Universe\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",,,,,\n" + + "\"8\",\":Sample:User\",\"\",\"\",\"\",\"\",\"bar\",\"\",\"\",\"\",\"\",\"\",,,,,\n" + + "\"9\",\":Sample:User\",\"\",\"\",\"baa\",\"\",\"true\",\"\",\"\",\"\",\"\",\"\",,,,,\n" + + ",,,,,,,,,,,,\"0\",\"1\",\"KNOWS\",\"\",\"\"\n" + + ",,,,,,,,,,,,\"3\",\"4\",\"NEXT_DELIVERY\",\"\",\"\"\n" + + ",,,,,,,,,,,,\"8\",\"9\",\"KNOWS\",\"two\",\"four\"\n"; + private static final String EXPECTED_NONE_QUOTES = String.format("_id,_labels,age,city,kids,male,name,street,_start,_end,_type%n" + "0,:User:User1,42,,[\"a\",\"b\",\"c\"],true,foo,,,,%n" + "1,:User,42,,,,bar,,,,%n" + @@ -92,7 +112,7 @@ public class ExportCsvTest { @BeforeClass public static void setUp() throws Exception { - TestUtil.registerProcedure(db, ExportCSV.class, Graphs.class); + TestUtil.registerProcedure(db, ExportCSV.class, Graphs.class, Meta.class); db.executeTransactionally("CREATE (f:User1:User {name:'foo',age:42,male:true,kids:['a','b','c']})-[:KNOWS]->(b:User {name:'bar',age:42}),(c:User {age:12})"); db.executeTransactionally("CREATE (f:Address1:Address {name:'Andrea', city: 'Milano', street:'Via Garibaldi, 7'})-[:NEXT_DELIVERY]->(a:Address {name: 'Bar Sport'}), (b:Address {street: 'via Benni'})"); } @@ -105,12 +125,13 @@ private String readFile(String fileName) { public void testExportInvalidQuoteValue() throws Exception { try { String fileName = "all.csv"; - TestUtil.testCall(db, "CALL apoc.export.csv.all($file,{quote: 'Invalid'}, null)", + TestUtil.testCall(db, "CALL apoc.export.csv.all($file,{quotes: 'Invalid'})", map("file", fileName), (r) -> assertResults(fileName, r, "database")); fail(); } catch (RuntimeException e) { - assertTrue(true); + final String expectedMessage = "Failed to invoke procedure `apoc.export.csv.all`: Caused by: java.lang.RuntimeException: The string value of the field quote is not valid"; + assertEquals(expectedMessage, e.getMessage()); } } @@ -122,6 +143,29 @@ public void testExportAllCsv() throws Exception { assertEquals(EXPECTED, readFile(fileName)); } + @Test + public void testExportAllCsvWithSample() throws IOException { + db.executeTransactionally("CREATE (:User:Sample {`last:Name`:'Galilei'}), (:User:Sample {address:'Universe'}),\n" + + "(:User:Sample {foo:'bar'})-[:KNOWS {one: 'two', three: 'four'}]->(:User:Sample {baz:'baa', foo: true})"); + String fileName = "all.csv"; + final long totalNodes = 10L; + final long totalRels = 3L; + final long totalProps = 19L; + TestUtil.testCall(db, "CALL apoc.export.csv.all($file, null)", map("file", fileName), + (r) -> assertResults(fileName, r, "database", totalNodes, totalRels, totalProps, true)); + assertEquals(EXP_SAMPLE, readFile(fileName)); + + // quotes: 'none' to simplify header testing + TestUtil.testCall(db, "CALL apoc.export.csv.all($file, {sampling: true, samplingConfig: {sample: 1}, quotes: 'none'})", map("file", fileName), + (r) -> assertResults(fileName, r, "database", totalNodes, totalRels, totalProps, false)); + + final String[] s = Files.lines(new File(directory, fileName).toPath()).findFirst().get().split(","); + assertTrue(s.length < 17); + assertTrue(Arrays.asList(s).containsAll(List.of("_id", "_labels", "_start", "_end", "_type"))); + + db.executeTransactionally("MATCH (n:Sample) DETACH DELETE n"); + } + @Test public void testExportAllCsvWithQuotes() throws Exception { String fileName = "all.csv"; @@ -231,10 +275,24 @@ public void testExportQueryNodesCsvParams() throws Exception { } private void assertResults(String fileName, Map r, final String source) { - assertEquals(6L, r.get("nodes")); - assertEquals(2L, r.get("relationships")); - assertEquals(12L, r.get("properties")); - assertEquals(source + ": nodes(6), rels(2)", r.get("source")); + assertResults(fileName, r, source, 6L, 2L, 12L, true); + } + + private void assertResults(String fileName, Map r, final String source, + Long expectedNodes, Long expectedRelationships, Long expectedProperties, boolean assertPropEquality) { + assertEquals(expectedNodes, r.get("nodes")); + assertEquals(expectedRelationships, r.get("relationships")); + if (assertPropEquality) { + assertEquals(expectedProperties, r.get("properties")); + } else { + assertTrue((Long) r.get("properties") < expectedProperties); + } + final String expectedSource = source + ": nodes(" + expectedNodes + "), rels(" + expectedRelationships + ")"; + assertEquals(expectedSource, r.get("source")); + assertCsvCommon(fileName, r); + } + + private void assertCsvCommon(String fileName, Map r) { assertEquals(fileName, r.get("file")); assertEquals("csv", r.get("format")); assertTrue("Should get time greater than 0",((long) r.get("time")) >= 0); @@ -380,6 +438,22 @@ public void testExportQueryCsvIssue1188() throws Exception { } + @Test + public void testExportWgsPoint() { + db.executeTransactionally("CREATE (p:Position {place: point({latitude: 12.78, longitude: 56.7, height: 1.1})})"); + + TestUtil.testCall(db, "CALL apoc.export.csv.query($query, null, {quotes: 'none', stream: true}) YIELD data RETURN data", + map("query", "MATCH (p:Position) RETURN p.place as place"), + (r) -> { + String data = (String) r.get("data"); + Map place = Util.fromJson(data.split(System.lineSeparator())[1], Map.class); + assertEquals(12.78D, (double) place.get("latitude"), 0); + assertEquals(56.7D, (double) place.get("longitude"), 0); + assertEquals(1.1D, (double) place.get("height"), 0); + }); + db.executeTransactionally("MATCH (n:Position) DETACH DELETE n"); + } + private Consumer getAndCheckStreamingMetadataQueryMatchAddress(StringBuilder sb) { return (res) -> { diff --git a/core/src/test/java/apoc/export/csv/ImportCsvTest.java b/core/src/test/java/apoc/export/csv/ImportCsvTest.java index e0bf0f88f8..af232bf017 100644 --- a/core/src/test/java/apoc/export/csv/ImportCsvTest.java +++ b/core/src/test/java/apoc/export/csv/ImportCsvTest.java @@ -8,13 +8,16 @@ import org.junit.Rule; import org.junit.Test; import org.neo4j.configuration.GraphDatabaseSettings; +import org.neo4j.graphdb.Node; import org.neo4j.graphdb.QueryExecutionException; +import org.neo4j.internal.helpers.collection.Iterators; import org.neo4j.test.rule.DbmsRule; import org.neo4j.test.rule.ImpermanentDbmsRule; import java.io.File; import java.io.IOException; import java.util.AbstractMap; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; @@ -22,7 +25,10 @@ import java.util.stream.Stream; import static apoc.util.MapUtil.map; +import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThat; public class ImportCsvTest { @@ -99,7 +105,13 @@ public class ImportCsvTest { "2|Jane\n"), new AbstractMap.SimpleEntry<>("personsWithoutIdField", "name:STRING\n" + "John\n" + - "Jane\n") + "Jane\n"), + new AbstractMap.SimpleEntry<>("emptyInteger", + ":ID(node_space_1),:LABEL,str_attribute:STRING,int_attribute:INT,int_attribute_array:INT[],double_attribute_array:FLOAT[]\n" + + "n1,Thing,once upon a time,1,\"2;3\",\"2.3;3.5\"\n" + + "n2,Thing,,2,\"4;5\",\"2.6;3.6\"\n" + + "n3,Thing,,,,\n" + ) ).collect(Collectors.toMap(AbstractMap.SimpleEntry::getKey, AbstractMap.SimpleEntry::getValue))); @Before @@ -286,6 +298,32 @@ public void testCustomRelationshipTypes() { Assert.assertEquals("John Jane", TestUtil.singleResultFirstColumn(db, "MATCH (p1:Person)-[:FRIENDS_WITH]->(p2:Person) RETURN p1.name + ' ' + p2.name AS pair ORDER BY pair")); Assert.assertEquals("Jane John", TestUtil.singleResultFirstColumn(db, "MATCH (p1:Person)-[:KNOWS]->(p2:Person) RETURN p1.name + ' ' + p2.name AS pair ORDER BY pair")); } + + @Test + public void testEmptyInteger() { + TestUtil.testCall(db, "CALL apoc.import.csv([{fileName: 'file:/emptyInteger.csv', labels: ['entity']}], [], {ignoreBlankString: true})", + r -> assertEquals(3L, r.get("nodes"))); + + TestUtil.testResult(db, "MATCH (node:Thing) RETURN node ORDER BY node.int_attribute", r -> { + final Node firstNode = (Node) r.next().get("node"); + final Map firstProps = firstNode.getAllProperties(); + assertEquals(1L, firstProps.get("int_attribute")); + assertArrayEquals(new long[] { 2L, 3L }, (long[]) firstProps.get("int_attribute_array")); + assertArrayEquals(new double[] { 2.3D, 3.5D }, (double[]) firstProps.get("double_attribute_array"), 0); + final Node secondNode = (Node) r.next().get("node"); + final Map secondProps = secondNode.getAllProperties(); + assertEquals(2L, secondProps.get("int_attribute")); + assertArrayEquals(new long[] { 4L, 5L }, (long[]) secondProps.get("int_attribute_array")); + assertArrayEquals(new double[] { 2.6D, 3.6D }, (double[]) secondProps.get("double_attribute_array"), 0); + final Node thirdNode = (Node) r.next().get("node"); + final Map thirdProps = thirdNode.getAllProperties(); + assertNull(thirdProps.get("int_attribute")); + assertNull(thirdProps.get("int_attribute_array")); + assertNull(thirdProps.get("double_attribute_array")); + assertNull(thirdProps.get("str_attribute")); + assertFalse(r.hasNext()); + }); + } @Test public void testRelationshipWithoutIdSpaces() { diff --git a/core/src/test/java/apoc/export/graphml/ExportGraphMLTest.java b/core/src/test/java/apoc/export/graphml/ExportGraphMLTest.java index 8d2c1e99cb..a3445067c4 100644 --- a/core/src/test/java/apoc/export/graphml/ExportGraphMLTest.java +++ b/core/src/test/java/apoc/export/graphml/ExportGraphMLTest.java @@ -94,8 +94,8 @@ public class ExportGraphMLTest { "%n"; public static final String KEY_TYPES_NO_DATA_KEY = "\n" + ""; - public static final String DATA = ":Foo:Foo0:Foo2{\"crs\":\"wgs-84-3d\",\"latitude\":56.7,\"longitude\":12.78,\"height\":100.0}foo2018-10-10%n" + - ":Bar42bar{\"crs\":\"wgs-84\",\"latitude\":56.7,\"longitude\":12.78,\"height\":null}%n" + + public static final String DATA = ":Foo:Foo0:Foo2{\"crs\":\"wgs-84-3d\",\"latitude\":12.78,\"longitude\":56.7,\"height\":100.0}foo2018-10-10%n" + + ":Bar42bar{\"crs\":\"wgs-84\",\"latitude\":12.78,\"longitude\":56.7,\"height\":null}%n" + ":Bar12[1,2,3]%n" + "KNOWS%n"; public static final String DATA_CAMEL_CASE = @@ -110,8 +110,8 @@ public class ExportGraphMLTest { " :QWERTYqwerty %n" + " KNOWS %n"; - private static final String DATA_WITHOUT_CHAR_DATA_KEYS = ":Foo:Foo0:Foo2{\"crs\":\"wgs-84-3d\",\"latitude\":56.7,\"longitude\":12.78,\"height\":100.0}foo2018-10-10%n" + - ":Bar42bar{\"crs\":\"wgs-84\",\"latitude\":56.7,\"longitude\":12.78,\"height\":null}%n" + + private static final String DATA_WITHOUT_CHAR_DATA_KEYS = ":Foo:Foo0:Foo2{\"crs\":\"wgs-84-3d\",\"latitude\":12.78,\"longitude\":56.7,\"height\":100.0}foo2018-10-10%n" + + ":Bar42bar{\"crs\":\"wgs-84\",\"latitude\":12.78,\"longitude\":56.7,\"height\":null}%n" + ":Bar12[1,2,3]%n" + "\n"; @@ -122,16 +122,16 @@ public class ExportGraphMLTest { public static final String FOOTER = "%n" + ""; - public static final String DATA_PATH = ":Foo:Foo0:Foo2foo{\"crs\":\"wgs-84-3d\",\"latitude\":56.7,\"longitude\":12.78,\"height\":100.0}foo2018-10-10%n" + - ":Barbar42bar{\"crs\":\"wgs-84\",\"latitude\":56.7,\"longitude\":12.78,\"height\":null}%n" + + public static final String DATA_PATH = ":Foo:Foo0:Foo2foo{\"crs\":\"wgs-84-3d\",\"latitude\":12.78,\"longitude\":56.7,\"height\":100.0}foo2018-10-10%n" + + ":Barbar42bar{\"crs\":\"wgs-84\",\"latitude\":12.78,\"longitude\":56.7,\"height\":null}%n" + "KNOWSKNOWS%n"; - public static final String DATA_PATH_CAPTION = ":Foo:Foo0:Foo2foo{\"crs\":\"wgs-84-3d\",\"latitude\":56.7,\"longitude\":12.78,\"height\":100.0}foo2018-10-10%n" + - ":Barbar42bar{\"crs\":\"wgs-84\",\"latitude\":56.7,\"longitude\":12.78,\"height\":null}%n" + + public static final String DATA_PATH_CAPTION = ":Foo:Foo0:Foo2foo{\"crs\":\"wgs-84-3d\",\"latitude\":12.78,\"longitude\":56.7,\"height\":100.0}foo2018-10-10%n" + + ":Barbar42bar{\"crs\":\"wgs-84\",\"latitude\":12.78,\"longitude\":56.7,\"height\":null}%n" + "KNOWSKNOWS%n"; - public static final String DATA_PATH_CAPTION_DEFAULT = ":Foo:Foo0:Foo2point({x: 56.7, y: 12.78, z: 100.0, crs: 'wgs-84-3d'}){\"crs\":\"wgs-84-3d\",\"latitude\":56.7,\"longitude\":12.78,\"height\":100.0}foo2018-10-10%n" + - ":Bar4242bar{\"crs\":\"wgs-84\",\"latitude\":56.7,\"longitude\":12.78,\"height\":null}%n" + + public static final String DATA_PATH_CAPTION_DEFAULT = ":Foo:Foo0:Foo2point({x: 56.7, y: 12.78, z: 100.0, crs: 'wgs-84-3d'}){\"crs\":\"wgs-84-3d\",\"latitude\":12.78,\"longitude\":56.7,\"height\":100.0}foo2018-10-10%n" + + ":Bar4242bar{\"crs\":\"wgs-84\",\"latitude\":12.78,\"longitude\":56.7,\"height\":null}%n" + "KNOWSKNOWS%n"; public static final String DATA_DATA = ":PersonFoo\n" + diff --git a/core/src/test/java/apoc/export/json/ExportJsonTest.java b/core/src/test/java/apoc/export/json/ExportJsonTest.java index 54dc57136e..d5551ab7fd 100644 --- a/core/src/test/java/apoc/export/json/ExportJsonTest.java +++ b/core/src/test/java/apoc/export/json/ExportJsonTest.java @@ -4,6 +4,7 @@ import apoc.graph.Graphs; import apoc.util.JsonUtil; import apoc.util.TestUtil; +import apoc.util.Util; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -378,6 +379,25 @@ public void testExportQueryOrderJson() throws Exception { }); assertFileEquals(filename); } + + @Test + public void testExportWgsPoint() { + db.executeTransactionally("CREATE (p:Position {place: point({latitude: 12.78, longitude: 56.7, height: 1.1})})"); + + TestUtil.testCall(db, "CALL apoc.export.json.query($query, null, {stream: true}) YIELD data RETURN data", + map("query", "MATCH (p:Position) RETURN p.place as place"), + (r) -> { + String data = (String) r.get("data"); + Map map = Util.fromJson(data, Map.class); + Map place = (Map) map.get("place"); + assertEquals(12.78D, (double) place.get("latitude"), 0); + assertEquals(56.7D, (double) place.get("longitude"), 0); + assertEquals(1.1D, (double) place.get("height"), 0); + }); + + db.executeTransactionally("MATCH (n:Position) DETACH DELETE n"); + + } private void assertResults(String filename, Map r, final String source) { assertEquals(3L, r.get("nodes")); diff --git a/core/src/test/java/apoc/export/json/ImportJsonTest.java b/core/src/test/java/apoc/export/json/ImportJsonTest.java index 90012dd889..8aa33cd86e 100644 --- a/core/src/test/java/apoc/export/json/ImportJsonTest.java +++ b/core/src/test/java/apoc/export/json/ImportJsonTest.java @@ -1,15 +1,22 @@ package apoc.export.json; import apoc.ApocSettings; +import apoc.schema.Schemas; import apoc.util.JsonUtil; import apoc.util.TestUtil; +import apoc.util.Util; +import com.google.common.collect.Iterables; +import junit.framework.TestCase; +import org.apache.commons.lang.exception.ExceptionUtils; import org.junit.Assert; import org.junit.Before; +import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.neo4j.configuration.GraphDatabaseSettings; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Relationship; +import org.neo4j.graphdb.ResourceIterator; import org.neo4j.graphdb.Transaction; import org.neo4j.graphdb.spatial.Point; import org.neo4j.test.rule.DbmsRule; @@ -24,16 +31,26 @@ import java.time.LocalDateTime; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; +import static apoc.export.json.JsonImporter.MISSING_CONSTRAINT_ERROR_MSG; import static apoc.util.MapUtil.map; +import static java.lang.String.format; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; +import static org.neo4j.test.assertion.Assert.assertEventually; + public class ImportJsonTest { + private static final long NODES_BIG_JSON = 16L; + private static final long RELS_BIG_JSON = 4L; private static File directory = new File("../docs/asciidoc/modules/ROOT/examples/data/exportJSON"); @Rule public DbmsRule db = new ImpermanentDbmsRule() .withSetting(GraphDatabaseSettings.load_csv_file_url_root, directory.getCanonicalFile().toPath()) + .withSetting(GraphDatabaseSettings.procedure_unrestricted, List.of("apoc.*")) .withSetting(ApocSettings.apoc_import_file_enabled, true); public ImportJsonTest() throws IOException { @@ -41,11 +58,13 @@ public ImportJsonTest() throws IOException { @Before public void setUp() throws Exception { - TestUtil.registerProcedure(db, ImportJson.class); + TestUtil.registerProcedure(db, ImportJson.class, Schemas.class); } @Test public void shouldImportAllJson() throws Exception { + db.executeTransactionally("CREATE CONSTRAINT ON (n:User) assert n.neo4jImportId IS UNIQUE"); + // given String filename = "all.json"; @@ -62,35 +81,36 @@ public void shouldImportAllJson() throws Exception { Assert.assertEquals(15L, r.get("properties")); Assert.assertEquals(4L, r.get("rows")); Assert.assertEquals(true, r.get("done")); - - try(Transaction tx = db.beginTx()) { - final long countNodes = tx.execute("MATCH (n:User) RETURN count(n) AS count") - .columnAs("count") - .next(); - Assert.assertEquals(3L, countNodes); - - final long countRels = tx.execute("MATCH ()-[r:KNOWS]->() RETURN count(r) AS count") - .columnAs("count") - .next(); - Assert.assertEquals(1L, countRels); - - final Map props = tx.execute("MATCH (n:User {name: 'Adam'}) RETURN n") - .columnAs("n") - .next() - .getAllProperties(); - - Assert.assertEquals(9, props.size()); - Assert.assertEquals("wgs-84", props.get("place.crs")); - Assert.assertEquals(33.46789D, props.get("place.latitude")); - Assert.assertEquals(13.1D, props.get("place.longitude")); - Assert.assertFalse(props.containsKey("place")); - } } ); + + try(Transaction tx = db.beginTx()) { + final long countNodes = tx.execute("MATCH (n:User) RETURN count(n) AS count") + .columnAs("count") + .next(); + Assert.assertEquals(3L, countNodes); + + final long countRels = tx.execute("MATCH ()-[r:KNOWS]->() RETURN count(r) AS count") + .columnAs("count") + .next(); + Assert.assertEquals(1L, countRels); + + final Map props = tx.execute("MATCH (n:User {name: 'Adam'}) RETURN n") + .columnAs("n") + .next() + .getAllProperties(); + + Assert.assertEquals(9, props.size()); + Assert.assertEquals("wgs-84", props.get("place.crs")); + Assert.assertEquals(13.1D, (double) props.get("place.latitude"), 0); + Assert.assertEquals(33.46789D, (double) props.get("place.longitude"), 0); + Assert.assertFalse(props.containsKey("place")); + } } @Test public void shouldImportAllJsonWithPropertyMappings() throws Exception { + db.executeTransactionally("CREATE CONSTRAINT ON (n:User) assert n.neo4jImportId IS UNIQUE"); // given String filename = "all.json"; @@ -98,7 +118,7 @@ public void shouldImportAllJsonWithPropertyMappings() throws Exception { TestUtil.testCall(db, "CALL apoc.import.json($file, $config)", map("file", filename, "config", map("nodePropertyMappings", map("User", map("place", "Point", "born", "LocalDateTime")), - "relPropertyMappings", map("KNOWS", map("bffSince", "Duration"))), "unwindBatchSize", 1, "txBatchSize", 1), + "relPropertyMappings", map("KNOWS", map("bffSince", "Duration")), "unwindBatchSize", 1, "txBatchSize", 1)), (r) -> { // then Assert.assertEquals("all.json", r.get("file")); @@ -110,36 +130,37 @@ public void shouldImportAllJsonWithPropertyMappings() throws Exception { Assert.assertEquals(4L, r.get("rows")); Assert.assertEquals(true, r.get("done")); - try(Transaction tx = db.beginTx()) { - final long countNodes = tx.execute("MATCH (n:User) RETURN count(n) AS count") - .columnAs("count") - .next(); - Assert.assertEquals(3L, countNodes); - - final long countRels = tx.execute("MATCH ()-[r:KNOWS]->() RETURN count(r) AS count") - .columnAs("count") - .next(); - Assert.assertEquals(1L, countRels); - - final Map props = tx.execute("MATCH (n:User {name: 'Adam'}) RETURN n") - .columnAs("n") - .next() - .getAllProperties(); - Assert.assertEquals(7, props.size()); - Assert.assertTrue(props.get("place") instanceof PointValue); - PointValue point = (PointValue) props.get("place"); - final PointValue pointValue = Values.pointValue(CoordinateReferenceSystem.WGS84, 33.46789D, 13.1D); - Assert.assertTrue(point.equals((Point) pointValue)); - Assert.assertTrue(props.get("born") instanceof LocalDateTime); - - Relationship rel = tx.execute("MATCH ()-[r:KNOWS]->() RETURN r") - .columnAs("r") - .next(); - Assert.assertTrue(rel.getProperty("bffSince") instanceof DurationValue); - Assert.assertEquals("P5M1DT12H", rel.getProperty("bffSince").toString()); - } } ); + + try(Transaction tx = db.beginTx()) { + final long countNodes = tx.execute("MATCH (n:User) RETURN count(n) AS count") + .columnAs("count") + .next(); + Assert.assertEquals(3L, countNodes); + + final long countRels = tx.execute("MATCH ()-[r:KNOWS]->() RETURN count(r) AS count") + .columnAs("count") + .next(); + Assert.assertEquals(1L, countRels); + + final Map props = tx.execute("MATCH (n:User {name: 'Adam'}) RETURN n") + .columnAs("n") + .next() + .getAllProperties(); + Assert.assertEquals(7, props.size()); + Assert.assertTrue(props.get("place") instanceof PointValue); + PointValue point = (PointValue) props.get("place"); + final PointValue pointValue = Values.pointValue(CoordinateReferenceSystem.WGS84, 13.1D, 33.46789D); + Assert.assertTrue(point.equals((Point) pointValue)); + Assert.assertTrue(props.get("born") instanceof LocalDateTime); + + Relationship rel = tx.execute("MATCH ()-[r:KNOWS]->() RETURN r") + .columnAs("r") + .next(); + Assert.assertTrue(rel.getProperty("bffSince") instanceof DurationValue); + Assert.assertEquals("P5M1DT12H", rel.getProperty("bffSince").toString()); + } } @Test @@ -165,15 +186,105 @@ public void shouldImportNodesWithoutLabels() throws Exception { Assert.assertEquals(2L, r.get("properties")); Assert.assertEquals(1L, r.get("rows")); Assert.assertEquals(true, r.get("done")); - try (Transaction tx = db.beginTx()) { - Node node = tx.execute("MATCH (n) WHERE n.neo4jImportId = '5016999' RETURN n") - .columnAs("n") - .next(); - Assert.assertNotNull("node should be not null", node); - final double[] actual = (double[]) node.getProperty("bbox"); - Assert.assertArrayEquals(expected, actual, 0.05D); - } } ); + + try (Transaction tx = db.beginTx()) { + Node node = tx.execute("MATCH (n) WHERE n.neo4jImportId = '5016999' RETURN n") + .columnAs("n") + .next(); + Assert.assertNotNull("node should be not null", node); + final double[] actual = (double[]) node.getProperty("bbox"); + Assert.assertArrayEquals(expected, actual, 0.05D); + } + } + + @Test + @Ignore("we cannot test it in 4.1 because dbms.listQueries() is not registered") + public void shouldTerminateImportWhenTransactionIsTimedOut() { + + createConstraints(List.of("Stream", "User", "Game", "Team", "Language")); + + String filename = "https://devrel-data-science.s3.us-east-2.amazonaws.com/twitch_all.json"; + + final String query = "CALL apoc.import.json($file)"; + new Thread(() -> db.executeTransactionally(query, map("file", filename))).start(); + + // waiting for 'apoc.import.json() query to cancel when it is found + assertEventually(() -> db.executeTransactionally("call dbms.listQueries() YIELD query, queryId " + + "WHERE query = $query WITH queryId as id CALL dbms.killQuery(id) YIELD queryId RETURN true", + map("query", query), + result -> { + final ResourceIterator booleanIterator = result.columnAs("true"); + return booleanIterator.hasNext() && booleanIterator.next(); + }), (value) -> value, 10L, TimeUnit.SECONDS); + + // checking for query cancellation + assertEventually(() -> db.executeTransactionally("call dbms.listQueries", + map("query", query), + result -> { + final ResourceIterator queryIterator = result.columnAs("query"); + final String first = queryIterator.next(); + return first.equals("call dbms.listQueries") && !queryIterator.hasNext(); + } ), (value) -> value, 10L, TimeUnit.SECONDS); + } + + @Test + public void shouldImportAllNodesAndRels() { + createConstraints(List.of("FirstLabel", "Stream", "User", "Game", "Team", "Language", "$User", "$Stream")); + assertEntities(0L, 0L); + + String filename = "multiLabels.json"; + + TestUtil.testCall(db, "CALL apoc.import.json($file)", + map("file", filename), (r) -> { + assertEquals(NODES_BIG_JSON, r.get("nodes")); + assertEquals(RELS_BIG_JSON, r.get("relationships")); + }); + + assertEntities(NODES_BIG_JSON, RELS_BIG_JSON); + } + + @Test + public void shouldFailBecauseOfMissingSecondConstraintException() { + String customId = "customId"; + createConstraints(List.of("FirstLabel", "Stream", "Game", "$User"), customId); + assertEntities(0L, 0L); + + String filename = "multiLabels.json"; + try { + TestUtil.testCall(db, "CALL apoc.import.json($file, {importIdName: $importIdName})", + map("file", filename, "importIdName", customId), + (r) -> fail("Should fail due to missing constraint") + ); + } catch (Exception e) { + String expectedMsg = format(MISSING_CONSTRAINT_ERROR_MSG, "User", customId); + assertRootMessage(expectedMsg, e); + } + + // check that only 1st node created after constraint exception + assertEntities(1L, 0L); + } + + private void assertRootMessage(String expectedMsg, Exception e) { + Throwable except = ExceptionUtils.getRootCause(e); + TestCase.assertTrue(except instanceof RuntimeException); + assertEquals(expectedMsg, except.getMessage()); + } + + private void createConstraints(List labels, String customId) { + labels.forEach( + label -> db.executeTransactionally(format("CREATE CONSTRAINT ON (n:%s) assert n.%s IS UNIQUE;", Util.quote(label), customId))); + } + + private void createConstraints(List labels) { + createConstraints(labels, "neo4jImportId"); + } + + private void assertEntities(long expectedNodes, long expectedRels) { + try (Transaction tx = db.beginTx()) { + assertEquals(expectedNodes, Iterables.size(tx.getAllNodes())); + assertEquals(expectedRels, Iterables.size(tx.getAllRelationships())); + } } } diff --git a/core/src/test/java/apoc/graph/GraphsTest.java b/core/src/test/java/apoc/graph/GraphsTest.java index d75b15cc83..6926ec81bf 100644 --- a/core/src/test/java/apoc/graph/GraphsTest.java +++ b/core/src/test/java/apoc/graph/GraphsTest.java @@ -9,6 +9,7 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.neo4j.graphdb.Label; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.QueryExecutionException; import org.neo4j.graphdb.Relationship; @@ -23,6 +24,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -146,6 +148,38 @@ public void testFromDocument() throws Exception { db.executeTransactionally("MATCH p = (a:Artist)-[r:ALBUMS]->(b:Album) detach delete p"); } + @Test + public void testFromDocumentWithCustomRelName() throws Exception { + Map artistGenesisMap = map("type", "artist", "name", "Genesis", "id", 1L); + Map albumGenesisMap = Util.map("type", "album", "producer", "Jonathan King", "id", 2L, "title", "From Genesis to Revelation"); + Map firstMemberMap = Util.map("type", "member", "name", "Steve Hackett", "id", 3L); + Map secondMemberMap = Util.map("type", "member", "name", "Phil Collins", "id", 4L); + Map genreMap = Util.map("type", "genre", "name", "Progressive rock", "id", 5L); + + Map artistGenesisMapExt = new HashMap<>(artistGenesisMap) {{ + put("toChange", List.of(genreMap)); + put("albums", List.of(albumGenesisMap)); + put("members", List.of(firstMemberMap, secondMemberMap)); + }}; + + TestUtil.testResult(db, "CALL apoc.graph.fromDocument($json, $config) yield graph", + map("json", JsonUtil.OBJECT_MAPPER.writeValueAsString(artistGenesisMapExt), + "config", map("relMapping", map("toChange", "GENRES"))), + stringObjectMap -> { + Map map = stringObjectMap.next(); + final Map graphMap = (Map) map.get("graph"); + assertEquals("Graph", graphMap.get("name")); + List nodes = ((List) graphMap.get("nodes")); + assertEquals(5, nodes.size()); + + Set relSet = ((List) graphMap.get("relationships")).stream() + .map(Relationship::getType) + .map(RelationshipType::name) + .collect(Collectors.toSet()); + assertEquals(Set.of("ALBUMS", "MEMBERS", "GENRES"), relSet); + }); + } + @Test public void testFromDocumentVirtual() throws Exception { Map artistGenesisMap = Util.map("type", "artist", "name", "Genesis", "id", 1L); diff --git a/core/src/test/java/apoc/load/LoadJsonTest.java b/core/src/test/java/apoc/load/LoadJsonTest.java index 49bfae793e..a42bac0f11 100644 --- a/core/src/test/java/apoc/load/LoadJsonTest.java +++ b/core/src/test/java/apoc/load/LoadJsonTest.java @@ -9,15 +9,20 @@ import org.mockserver.integration.ClientAndServer; import org.mockserver.model.Header; import org.neo4j.graphdb.QueryExecutionException; +import org.neo4j.internal.helpers.collection.Iterators; import org.neo4j.test.rule.DbmsRule; import org.neo4j.test.rule.ImpermanentDbmsRule; import java.net.URL; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import static apoc.ApocConfig.*; +import static apoc.convert.ConvertJsonTest.EXPECTED_AS_PATH_LIST; +import static apoc.convert.ConvertJsonTest.EXPECTED_PATH; +import static apoc.convert.ConvertJsonTest.EXPECTED_PATH_WITH_NULLS; import static apoc.util.MapUtil.map; import static apoc.util.TestUtil.testCall; import static apoc.util.TestUtil.testResult; @@ -101,6 +106,36 @@ public static void stopServer() { assertEquals(map("foo",asList(1L,2L,3L)), row.get("value")); }); } + + @Test + public void testLoadJsonWithPathOptions() throws Exception { + URL url = ClassLoader.getSystemResource("columns.json"); + + // -- load.json + testResult(db, "CALL apoc.load.json($url, '$..columns')", map("url", url.toString()), + (res) -> assertEquals(EXPECTED_PATH_WITH_NULLS, Iterators.asList(res.columnAs("value")))); + + testResult(db, "CALL apoc.load.json($url, '$..columns', $config)", + map("url", url.toString(), "config", map("pathOptions", Collections.emptyList())), + (res) -> assertEquals(EXPECTED_PATH, Iterators.asList(res.columnAs("value")))); + + testResult(db, "CALL apoc.load.json($url, '$..columns', $config)", + map("url", url.toString(), "config", map("pathOptions", List.of("AS_PATH_LIST"))), + (res) -> assertEquals(List.of(Map.of("result", EXPECTED_AS_PATH_LIST)), Iterators.asList(res.columnAs("value")))); + + // -- load.jsonArray + testResult(db, "CALL apoc.load.jsonArray($url, '$..columns')", map("url", url.toString()), + (res) -> assertEquals(EXPECTED_PATH_WITH_NULLS, Iterators.asList(res.columnAs("value")))); + + testResult(db, "CALL apoc.load.jsonArray($url, '$..columns', $config)", + map("url", url.toString(), "config", map("pathOptions", Collections.emptyList())), + (res) -> assertEquals(EXPECTED_PATH, Iterators.asList(res.columnAs("value")))); + + testResult(db, "CALL apoc.load.jsonArray($url, '$..columns', $config)", + map("url", url.toString(), "config", map("pathOptions", List.of("AS_PATH_LIST"))), + (res) -> assertEquals(List.of(EXPECTED_AS_PATH_LIST), Iterators.asList(res.columnAs("value")))); + } + @Test public void testLoadJsonArrayPath() throws Exception { URL url = ClassLoader.getSystemResource("map.json"); testCall(db, "CALL apoc.load.jsonArray($url,'$.foo')",map("url",url.toString()), // 'file:map.json' YIELD value RETURN value diff --git a/core/src/test/java/apoc/meta/MetaTest.java b/core/src/test/java/apoc/meta/MetaTest.java index 270787f7b5..b923335211 100644 --- a/core/src/test/java/apoc/meta/MetaTest.java +++ b/core/src/test/java/apoc/meta/MetaTest.java @@ -437,7 +437,44 @@ public void testMetaSchemaWithNodesAndRelsWithoutProps() { assertEquals(1L, rel2.get("count")); }); } + + @Test + public void testMetaSchemaWithSmallSampleAndRelationships() { + final List labels = List.of("Other", "Foo"); + db.executeTransactionally("CREATE (:Foo), (:Other)-[:REL_0]->(:Other), (:Other)-[:REL_1]->(:Other)<-[:REL_2 {baz: 'baa'}]-(:Other), (:Other {alpha: 'beta'}), (:Other {foo:'bar'})-[:REL_3]->(:Other)"); + testCall(db, "CALL apoc.meta.schema({sample: 2})", + (row) -> ((Map>) row.get("value")).forEach((key, value) -> { + if (labels.contains(key)) { + assertEquals("node", value.get("type")); + } else { + assertEquals("relationship", value.get("type")); + } + })); + } + @Test + public void testIssue1861LabelAndTypeWithSameName() { + db.executeTransactionally("CREATE (s0 :person{id:1} ) SET s0.name = 'rose'\n" + + "CREATE (t0 :person{id:2}) SET t0.name = 'jack'\n" + + "MERGE (s0) -[r0:person {alfa: 'beta'}] -> (t0)"); + testCall(db,"CALL apoc.meta.schema()", (row) -> { + Map value = (Map) row.get("value"); + assertEquals(2, value.size()); + + Map personRelationship = (Map) value.get("person (RELATIONSHIP)"); + assertEquals(1L, personRelationship.get("count")); + assertEquals("relationship", personRelationship.get("type")); + Map relationshipProps = (Map) personRelationship.get("properties"); + assertEquals(Set.of("alfa"), relationshipProps.keySet()); + + Map personNode = (Map) value.get("person"); + assertEquals(2L, personNode.get("count")); + assertEquals("node", personNode.get("type")); + Map nodeProps = (Map) personNode.get("properties"); + assertEquals(Set.of("name", "id"), nodeProps.keySet()); + }); + } + @Test public void testSubGraphNoLimits() throws Exception { db.executeTransactionally("CREATE (:A)-[:X]->(b:B),(b)-[:Y]->(:C)"); @@ -1089,4 +1126,45 @@ public void testMetaStatsWithTwoDots() { }); } + + @Test + public void testMetaStatsWithLabelAndRelTypeCountInUse() { + db.executeTransactionally("CREATE (:Node:Test)-[:REL {a: 'b'}]->(:Node {c: 'd'})<-[:REL]-(:Node:Test)"); + db.executeTransactionally("CREATE (:A {e: 'f'})-[:ANOTHER {g: 'h'}]->(:C)"); + + TestUtil.testCall(db, "CALL apoc.meta.stats()", row -> { + assertEquals(map("A", 1L, "C", 1L, "Test", 2L, "Node", 3L), row.get("labels")); + assertEquals(5L, row.get("nodeCount")); + assertEquals(4L, row.get("labelCount")); + + assertEquals(map("REL", 4L, "ANOTHER", 1L), row.get("relTypesCount")); + assertEquals(2L, row.get("relTypeCount")); + assertEquals(3L, row.get("relCount")); + Map expectedRelTypes = map("(:A)-[:ANOTHER]->()", 1L, + "()-[:REL]->(:Node)", 2L, + "(:Test)-[:REL]->()", 2L, + "(:Node)-[:REL]->()", 2L, + "()-[:ANOTHER]->(:C)", 1L, + "()-[:ANOTHER]->()", 1L, + "()-[:REL]->()", 2L); + assertEquals(expectedRelTypes, row.get("relTypes")); + }); + + db.executeTransactionally("match p=(:A)-[:ANOTHER]->(:C) delete p"); + TestUtil.testCall(db, "CALL apoc.meta.stats()", row -> { + assertEquals(map("Test", 2L, "Node", 3L), row.get("labels")); + assertEquals(3L, row.get("nodeCount")); + assertEquals(2L, row.get("labelCount")); + + assertEquals(map("REL", 4L), row.get("relTypesCount")); + assertEquals(1L, row.get("relTypeCount")); + assertEquals(2L, row.get("relCount")); + Map expectedRelTypes = map("()-[:REL]->(:Node)", 2L, + "(:Test)-[:REL]->()", 2L, + "(:Node)-[:REL]->()", 2L, + "()-[:REL]->()", 2L); + assertEquals(expectedRelTypes, row.get("relTypes")); + }); + } + } diff --git a/core/src/test/java/apoc/number/NumbersTest.java b/core/src/test/java/apoc/number/NumbersTest.java index 1d61846c81..3003f70d4e 100644 --- a/core/src/test/java/apoc/number/NumbersTest.java +++ b/core/src/test/java/apoc/number/NumbersTest.java @@ -11,6 +11,7 @@ import static apoc.util.TestUtil.testCall; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; /** * @author inserpio @@ -50,6 +51,7 @@ public void testParseInt() throws Exception { testCall(db, "RETURN apoc.number.parseInt('12,345', '#,##0.00;(#,##0.00)') AS value", row -> assertEquals(new Long(12345), row.get("value"))); testCall(db, "RETURN apoc.number.parseInt('12.345', '#,##0.00;(#,##0.00)', 'it') AS value", row -> assertEquals(new Long(12345), row.get("value"))); testCall(db, "RETURN apoc.number.parseInt('aaa') AS value", row -> assertEquals(null, row.get("value"))); + testCall(db, "RETURN apoc.number.parseInt(null) AS value", row -> assertNull(row.get("value"))); } // Parse Double @@ -61,5 +63,6 @@ public void testParseFloat() throws Exception { testCall(db, "RETURN apoc.number.parseFloat('12,345.67', '#,##0.00;(#,##0.00)') AS value", row -> assertEquals(new Double(12345.67), row.get("value"))); testCall(db, "RETURN apoc.number.parseFloat('12.345,67', '#,##0.00;(#,##0.00)', 'it') AS value", row -> assertEquals(new Double(12345.67), row.get("value"))); testCall(db, "RETURN apoc.number.parseFloat('aaa') AS value", row -> assertEquals(null, row.get("value"))); + testCall(db, "RETURN apoc.number.parseFloat(null) AS value", row -> assertNull(row.get("value"))); } } diff --git a/core/src/test/java/apoc/path/SubgraphTest.java b/core/src/test/java/apoc/path/SubgraphTest.java index f3ea85db16..176eb594ba 100644 --- a/core/src/test/java/apoc/path/SubgraphTest.java +++ b/core/src/test/java/apoc/path/SubgraphTest.java @@ -5,7 +5,7 @@ import apoc.result.RelationshipResult; import apoc.util.TestUtil; import apoc.util.Util; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.hamcrest.Description; import org.hamcrest.TypeSafeMatcher; import org.junit.BeforeClass; diff --git a/core/src/test/java/apoc/periodic/PeriodicTest.java b/core/src/test/java/apoc/periodic/PeriodicTest.java index bc860430d5..8e0d3a785c 100644 --- a/core/src/test/java/apoc/periodic/PeriodicTest.java +++ b/core/src/test/java/apoc/periodic/PeriodicTest.java @@ -28,6 +28,7 @@ import java.util.stream.LongStream; import java.util.stream.Stream; +import static apoc.periodic.Periodic.applyPlanner; import static apoc.util.TestUtil.testCall; import static apoc.util.TestUtil.testResult; import static apoc.util.Util.map; @@ -78,12 +79,54 @@ public void testSubmitStatement() throws Exception { testCall(db, callList, (r) -> assertEquals(true, r.get("done"))); } + @Test + public void testSubmitStatementWithParams() throws Exception { + String callList = "CALL apoc.periodic.list()"; + // force pre-caching the queryplan + assertFalse(db.executeTransactionally(callList, Collections.emptyMap(), Result::hasNext)); + + testCall(db, "CALL apoc.periodic.submit('foo','create (:Foo { id: $id })', {params: {id: '(╯°□°)╯︵ ┻━┻' }})", + (row) -> { + assertEquals("foo", row.get("name")); + assertEquals(false, row.get("done")); + assertEquals(false, row.get("cancelled")); + assertEquals(0L, row.get("delay")); + assertEquals(0L, row.get("rate")); + }); + + long count = tryReadCount(50, "MATCH (:Foo { id: '(╯°□°)╯︵ ┻━┻' }) RETURN COUNT(*) AS count", 1L); + + assertThat(count, equalTo(1L)); + + testCall(db, callList, (r) -> assertEquals(true, r.get("done"))); + } + + @Test + public void testApplyPlanner() { + assertEquals("RETURN 1", applyPlanner("RETURN 1", Periodic.Planner.DEFAULT)); + assertEquals("cypher planner=cost MATCH (n:cypher) RETURN n", + applyPlanner("MATCH (n:cypher) RETURN n", Periodic.Planner.COST)); + assertEquals("cypher planner=idp MATCH (n:cypher) RETURN n", + applyPlanner("MATCH (n:cypher) RETURN n", Periodic.Planner.IDP)); + assertEquals("cypher planner=dp runtime=compiled MATCH (n) RETURN n", + applyPlanner("cypher runtime=compiled MATCH (n) RETURN n", Periodic.Planner.DP)); + assertEquals("cypher planner=dp 3.1 MATCH (n) RETURN n", + applyPlanner("cypher 3.1 MATCH (n) RETURN n", Periodic.Planner.DP)); + assertEquals("cypher planner=idp expressionEngine=compiled MATCH (n) RETURN n", + applyPlanner("cypher expressionEngine=compiled MATCH (n) RETURN n", Periodic.Planner.IDP)); + assertEquals("cypher expressionEngine=compiled planner=cost MATCH (n) RETURN n", + applyPlanner("cypher expressionEngine=compiled planner=idp MATCH (n) RETURN n", Periodic.Planner.COST)); + assertEquals("cypher planner=cost MATCH (n) RETURN n", + applyPlanner("cypher planner=cost MATCH (n) RETURN n", Periodic.Planner.COST)); + } + @Test public void testSlottedRuntime() throws Exception { + assertEquals("cypher runtime=slotted MATCH (n:cypher) RETURN n", Periodic.slottedRuntime("MATCH (n:cypher) RETURN n")); assertTrue(Periodic.slottedRuntime("MATCH (n) RETURN n").contains("cypher runtime=slotted ")); - assertFalse(Periodic.slottedRuntime("cypher runtime=compiled MATCH (n) RETURN n").contains("cypher runtime=slotted ")); + assertFalse(Periodic.slottedRuntime(" cypher runtime=compiled MATCH (n) RETURN n").contains("cypher runtime=slotted ")); assertFalse(Periodic.slottedRuntime("cypher runtime=compiled MATCH (n) RETURN n").contains("cypher runtime=slotted cypher")); - assertTrue(Periodic.slottedRuntime("cypher 3.1 MATCH (n) RETURN n").contains(" runtime=slotted ")); + assertTrue(Periodic.slottedRuntime(" cypher 3.1 MATCH (n) RETURN n").contains(" runtime=slotted ")); assertFalse(Periodic.slottedRuntime("cypher 3.1 MATCH (n) RETURN n").contains(" runtime=slotted cypher ")); assertTrue(Periodic.slottedRuntime("cypher expressionEngine=compiled MATCH (n) RETURN n").contains(" runtime=slotted ")); assertFalse(Periodic.slottedRuntime("cypher expressionEngine=compiled MATCH (n) RETURN n").contains(" runtime=slotted cypher")); @@ -236,6 +279,25 @@ public void testIterate() throws Exception { ); } + @Test + public void testIterateWithQueryPlanner() throws Exception { + db.executeTransactionally("UNWIND range(1,100) AS x CREATE (:Person{name:'Person_'+x})"); + + String cypherIterate = "match (p:Person) return p"; + String cypherAction = "SET p.lastname =p.name REMOVE p.name"; + testResult(db, "CALL apoc.periodic.iterate($cypherIterate, $cypherAction, $config)", + map("cypherIterate", cypherIterate, "cypherAction", cypherAction, + "config", map("batchSize", 10, "planner", "DP")), + result -> assertEquals(10L, Iterators.single(result).get("batches"))); + + String cypherActionUnwind = "cypher runtime=slotted UNWIND $_batch AS batch WITH batch.p AS p SET p.lastname =p.name"; + + testResult(db, "CALL apoc.periodic.iterate($cypherIterate, $cypherActionUnwind, $config)", + map("cypherIterate", cypherIterate, "cypherActionUnwind", cypherActionUnwind, + "config", map("batchSize", 10, "batchMode", "BATCH_SINGLE", "planner", "DP")), + result -> assertEquals(10L, Iterators.single(result).get("batches"))); + } + @Test public void testIterateUpdateStats() { testResult(db, "CALL apoc.periodic.iterate(" + diff --git a/core/src/test/java/apoc/schema/SchemasEnterpriseFeaturesTest.java b/core/src/test/java/apoc/schema/SchemasEnterpriseFeaturesTest.java index d8f2fff6af..7256754665 100644 --- a/core/src/test/java/apoc/schema/SchemasEnterpriseFeaturesTest.java +++ b/core/src/test/java/apoc/schema/SchemasEnterpriseFeaturesTest.java @@ -373,6 +373,39 @@ public void testSchemaRelationships() { return null; }); } + + @Test + public void testSchemaNodeWithRelationshipsConstraintsAndViceVersa() { + session.writeTransaction(tx -> { + tx.run("CREATE CONSTRAINT ON ()-[like:LIKED]-() ASSERT exists(like.day)"); + tx.run("CREATE CONSTRAINT ON (bar:Bar) ASSERT exists(bar.foobar)"); + tx.commit(); + return null; + }); + + testResult(session, "CALL apoc.schema.relationships()", (result) -> { + Map r = result.next(); + assertEquals("CONSTRAINT ON ()-[liked:LIKED]-() ASSERT exists(liked.day)", r.get("name")); + assertEquals("RELATIONSHIP_PROPERTY_EXISTENCE", r.get("type")); + assertEquals(asList("day"), r.get("properties")); + assertEquals(StringUtils.EMPTY, r.get("status")); + assertFalse(result.hasNext()); + }); + testResult(session, "CALL apoc.schema.nodes()", (result) -> { + Map r = result.next(); + assertEquals("Bar", r.get("label")); + assertEquals("NODE_PROPERTY_EXISTENCE", r.get("type")); + assertEquals(asList("foobar"), r.get("properties")); + assertFalse(result.hasNext()); + }); + + session.writeTransaction(tx -> { + tx.run("DROP CONSTRAINT ON ()-[like:LIKED]-() ASSERT exists(like.day)"); + tx.run("DROP CONSTRAINT ON (bar:Bar) ASSERT exists(bar.foobar)"); + tx.commit(); + return null; + }); + } private List expectedKeys(String... keys){ return asList(keys); diff --git a/core/src/test/java/apoc/schema/SchemasTest.java b/core/src/test/java/apoc/schema/SchemasTest.java index 198f04cd6f..c530a1a417 100644 --- a/core/src/test/java/apoc/schema/SchemasTest.java +++ b/core/src/test/java/apoc/schema/SchemasTest.java @@ -474,6 +474,55 @@ public void testDropIndexAndCreateCompoundIndexWhenUsingDropExisting() throws Ex } } + @Test + public void testAssertWithFullTextIndexes() { + db.executeTransactionally("CALL db.index.fulltext.createNodeIndex('fullIdxNode', ['Moon', 'Blah'], ['weightProp', 'anotherProp'])"); + db.executeTransactionally("CALL db.index.fulltext.createRelationshipIndex('fullIdxRel', ['TYPE_1', 'TYPE_2'], ['alpha', 'beta'])"); + // fulltext with single label, should return label field as string + db.executeTransactionally("CALL db.index.fulltext.createNodeIndex('fullIdxNodeSingle', ['Asd'], ['uno', 'due'])"); + awaitIndexesOnline(); + testResult(db, "CALL apoc.schema.assert({Bar:[['foo','bar']]}, {One:['two']}) " + + "YIELD label, key, keys, unique, action RETURN * ORDER BY label", (result) -> { + Map r = result.next(); + assertEquals(expectedKeys("Moon", "Blah"), r.get("label")); + assertEquals(expectedKeys("weightProp", "anotherProp"), r.get("keys")); + assertEquals(false, r.get("unique")); + assertEquals("DROPPED", r.get("action")); + + r = result.next(); + assertEquals(expectedKeys("TYPE_1", "TYPE_2"), r.get("label")); + assertEquals(expectedKeys("alpha", "beta"), r.get("keys")); + assertEquals(false, r.get("unique")); + assertEquals("DROPPED", r.get("action")); + + r = result.next(); + assertEquals("Asd", r.get("label")); + assertEquals(expectedKeys("uno", "due"), r.get("keys")); + assertEquals(false, r.get("unique")); + assertEquals("DROPPED", r.get("action")); + + r = result.next(); + assertEquals("Bar", r.get("label")); + assertEquals(expectedKeys("foo", "bar"), r.get("keys")); + assertEquals(false, r.get("unique")); + assertEquals("CREATED", r.get("action")); + + r = result.next(); + assertEquals("One", r.get("label")); + assertEquals("two", r.get("key")); + assertEquals(true, r.get("unique")); + assertEquals("CREATED", r.get("action")); + assertFalse(result.hasNext()); + }); + try (Transaction tx = db.beginTx()) { + List indexes = Iterables.asList(tx.schema().getIndexes()); + assertEquals(2, indexes.size()); + List constraints = Iterables.asList(tx.schema().getConstraints()); + assertEquals(1, constraints.size()); + } + + } + @Test public void testDropCompoundIndexAndCreateCompoundIndexWhenUsingDropExisting() throws Exception { db.executeTransactionally("CREATE INDEX ON :Foo(bar,baa)"); @@ -585,4 +634,27 @@ public void testConstraintsRelationshipsAndExcludeRelationshipsValuatedShouldFai } } + + @Test + public void testIndexesWithMultipleLabelsAndRelTypes() { + db.executeTransactionally("CALL db.index.fulltext.createNodeIndex('fullIdxNode', ['Blah', 'Moon'], ['weightProp', 'anotherProp'])"); + db.executeTransactionally("CALL db.index.fulltext.createRelationshipIndex('fullIdxRel', ['TYPE_1', 'TYPE_2'], ['alpha', 'beta'])"); + awaitIndexesOnline(); + + testResult(db, "CALL apoc.schema.nodes()", (result) -> { + Map r = result.next(); + assertEquals(":[Blah, Moon],(weightProp,anotherProp)", r.get("name")); + assertEquals("ONLINE", r.get("status")); + assertEquals(List.of("Blah", "Moon"), r.get("label")); + assertEquals("INDEX", r.get("type")); + assertEquals(List.of("weightProp", "anotherProp"), r.get("properties")); + assertEquals("NO FAILURE", r.get("failure")); + assertEquals(100d, r.get("populationProgress")); + assertEquals(1d, r.get("valuesSelectivity")); + assertEquals("Index( id=1, name='fullIdxNode', type='GENERAL FULLTEXT', schema=(:Blah:Moon {weightProp, anotherProp}), indexProvider='fulltext-1.0' )", r.get("userDescription")); + assertFalse(result.hasNext()); + }); + + testCallEmpty(db, "CALL apoc.schema.relationships()", Collections.emptyMap()); + } } diff --git a/core/src/test/java/apoc/trigger/TriggerDisabledTest.java b/core/src/test/java/apoc/trigger/TriggerDisabledTest.java index f1d3fbe276..b051193a8f 100644 --- a/core/src/test/java/apoc/trigger/TriggerDisabledTest.java +++ b/core/src/test/java/apoc/trigger/TriggerDisabledTest.java @@ -5,9 +5,12 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; +import org.neo4j.graphdb.Result; import org.neo4j.test.rule.DbmsRule; import org.neo4j.test.rule.ImpermanentDbmsRule; +import java.util.Map; + import static apoc.ApocConfig.APOC_TRIGGER_ENABLED; import static apoc.ApocConfig.apocConfig; @@ -40,7 +43,7 @@ public void setUp() throws Exception { @Test public void testTriggerDisabledList() { - db.executeTransactionally("CALL apoc.trigger.list() YIELD name RETURN name"); + db.executeTransactionally("CALL apoc.trigger.list() YIELD name RETURN name", Map.of(), Result::resultAsString); } @Test diff --git a/core/src/test/java/apoc/util/UtilIT.java b/core/src/test/java/apoc/util/UtilIT.java index 378a7cd68f..6fa2a374dc 100644 --- a/core/src/test/java/apoc/util/UtilIT.java +++ b/core/src/test/java/apoc/util/UtilIT.java @@ -2,10 +2,16 @@ import apoc.ApocConfig; import org.apache.commons.io.IOUtils; -import org.jetbrains.annotations.NotNull; -import org.junit.*; +import org.junit.After; +import org.junit.Assume; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Rule; +import org.junit.Test; import org.junit.rules.TestName; import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.nio.charset.Charset; @@ -13,6 +19,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +@Ignore public class UtilIT { @Rule @@ -31,9 +38,12 @@ public void setUp() throws Exception { .withCommand("/bin/sh", "-c", String.format("while true; do { echo -e 'HTTP/1.1 301 Moved Permanently\\r\\nLocation: %s'; echo ; } | nc -l -p 8000; done", testName.getMethodName().endsWith(WITH_URL_LOCATION) ? "http://www.google.com" : "file:/etc/passwd")) .withExposedPorts(8000); + httpServer.waitingFor(Wait.forHttp("/") + .forStatusCode(301)); httpServer.start(); }, Exception.class); Assume.assumeNotNull(httpServer); + Assume.assumeTrue(httpServer.isRunning()); } @After diff --git a/core/src/test/resources/columns.json b/core/src/test/resources/columns.json new file mode 100644 index 0000000000..8d4588b415 --- /dev/null +++ b/core/src/test/resources/columns.json @@ -0,0 +1,11 @@ +{ + "columns": { + "row": { + "poiType": "Governorate", + "poi": 772 + }, + "col2": { + "_id": "772col2" + } + } +} \ No newline at end of file diff --git a/docs/antora/package-lock.json b/docs/antora/package-lock.json index 0d0e8d5eee..9bac6c3c81 100644 --- a/docs/antora/package-lock.json +++ b/docs/antora/package-lock.json @@ -759,7 +759,6 @@ "anymatch": "^2.0.0", "async-each": "^1.0.1", "braces": "^2.3.2", - "fsevents": "^1.2.7", "glob-parent": "^3.1.0", "inherits": "^2.0.3", "is-binary-path": "^1.0.0", @@ -1801,6 +1800,7 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -2076,7 +2076,6 @@ "minimist": "^1.2.5", "neo-async": "^2.6.0", "source-map": "^0.6.1", - "uglify-js": "^3.1.4", "wordwrap": "^1.0.0" }, "bin": { diff --git a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/MapComplex.json b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/MapComplex.json index 23abc4e3e2..dc9cbb0feb 100644 --- a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/MapComplex.json +++ b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/MapComplex.json @@ -1 +1 @@ -{"key":{"data":[10,"car",null,{"crs":"wgs-84","latitude":56.7,"longitude":12.78,"height":null},{"crs":"wgs-84-3d","latitude":56.7,"longitude":12.78,"height":8.0},{"crs":"cartesian","x":2.3,"y":4.5,"z":null},{"crs":"cartesian-3d","x":2.3,"y":4.5,"z":2.0},"2018-10-10","2018-10-18T14:21:40.004Z","1984-03-07T12:31:14.645",{"x":1,"y":[1,2,3,{"age":10}]}],"value":1}} \ No newline at end of file +{"key":{"data":[10,"car",null,{"crs":"wgs-84","latitude":12.78,"longitude":56.7,"height":null},{"crs":"wgs-84-3d","latitude":12.78,"longitude":56.7,"height":8.0},{"crs":"cartesian","x":2.3,"y":4.5,"z":null},{"crs":"cartesian-3d","x":2.3,"y":4.5,"z":2.0},"2018-10-10","2018-10-18T14:21:40.004Z","1984-03-07T12:31:14.645",{"x":1,"y":[1,2,3,{"age":10}]}],"value":1}} \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/MapNode.json b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/MapNode.json index 2c7294d214..79fb659f7a 100644 --- a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/MapNode.json +++ b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/MapNode.json @@ -1 +1 @@ -{"u":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":33.46789,"longitude":13.1,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]},"d":{"name":"Jim","age":42},"r":{"bffSince":"P5M1DT12H","since":1993}} \ No newline at end of file +{"u":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":13.1,"longitude":33.46789,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]},"d":{"name":"Jim","age":42},"r":{"bffSince":"P5M1DT12H","since":1993}} \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/MapPath.json b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/MapPath.json index cdffd54aa2..3127d11c4b 100644 --- a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/MapPath.json +++ b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/MapPath.json @@ -1,2 +1,2 @@ -{"map":{"key":{"length":1,"rels":[{"id":"0","type":"relationship","label":"KNOWS","properties":{"bffSince":"P5M1DT12H","since":1993},"start":{"id":"0","labels":["User"]},"end":{"id":"1","labels":["User"]}}],"nodes":[{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":33.46789,"longitude":13.1,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}},{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}}]}},"name":"Kate"} +{"map":{"key":{"length":1,"rels":[{"id":"0","type":"relationship","label":"KNOWS","properties":{"bffSince":"P5M1DT12H","since":1993},"start":{"id":"0","labels":["User"]},"end":{"id":"1","labels":["User"]}}],"nodes":[{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":13.1,"longitude":33.46789,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}},{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}}]}},"name":"Kate"} {"map":{"key":{"length":1,"rels":[{"id":"1","type":"relationship","label":"KNOWS","properties":{"since":1850},"start":{"id":"3","labels":["User"]},"end":{"id":"4","labels":["User"]}}],"nodes":[{"type":"node","id":"3","labels":["User"],"properties":{"name":"Mike","age":78,"male":true}},{"type":"node","id":"4","labels":["User"],"properties":{"name":"John","age":18}}]}},"name":"Kate"} \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/all.json b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/all.json index 276924ae70..7539ddcc75 100644 --- a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/all.json +++ b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/all.json @@ -1,4 +1,4 @@ -{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":33.46789,"longitude":13.1,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}} +{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":13.1,"longitude":33.46789,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}} {"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}} {"type":"node","id":"2","labels":["User"],"properties":{"age":12}} {"id":"0","type":"relationship","label":"KNOWS","properties":{"since":1993,"bffSince":"P5M1DT12H"},"start":{"id":"0","labels":["User"]},"end":{"id":"1","labels":["User"]}} \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/all_array.json b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/all_array.json index cd86357ca3..5d327f9244 100644 --- a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/all_array.json +++ b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/all_array.json @@ -1 +1 @@ -[{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":33.46789,"longitude":13.1,"height":null},"male":true,"age":42,"kids":["Sam","Anna","Grace"]}},{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}},{"type":"node","id":"2","labels":["User"],"properties":{"age":12}},{"id":"0","type":"relationship","label":"KNOWS","properties":{"bffSince":"P5M1DT12H","since":1993},"start":{"id":"0","labels":["User"]},"end":{"id":"1","labels":["User"]}}] \ No newline at end of file +[{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":13.1,"longitude":33.46789,"height":null},"male":true,"age":42,"kids":["Sam","Anna","Grace"]}},{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}},{"type":"node","id":"2","labels":["User"],"properties":{"age":12}},{"id":"0","type":"relationship","label":"KNOWS","properties":{"bffSince":"P5M1DT12H","since":1993},"start":{"id":"0","labels":["User"]},"end":{"id":"1","labels":["User"]}}] \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/all_fields.json b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/all_fields.json index 9a7318953b..71490947a3 100644 --- a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/all_fields.json +++ b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/all_fields.json @@ -1 +1 @@ -{"nodes":[{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":33.46789,"longitude":13.1,"height":null},"male":true,"age":42,"kids":["Sam","Anna","Grace"]}},{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}},{"type":"node","id":"2","labels":["User"],"properties":{"age":12}}],"rels":[{"id":"0","type":"relationship","label":"KNOWS","properties":{"bffSince":"P5M1DT12H","since":1993},"start":{"id":"0","labels":["User"]},"end":{"id":"1","labels":["User"]}}]} \ No newline at end of file +{"nodes":[{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":13.1,"longitude":33.46789,"height":null},"male":true,"age":42,"kids":["Sam","Anna","Grace"]}},{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}},{"type":"node","id":"2","labels":["User"],"properties":{"age":12}}],"rels":[{"id":"0","type":"relationship","label":"KNOWS","properties":{"bffSince":"P5M1DT12H","since":1993},"start":{"id":"0","labels":["User"]},"end":{"id":"1","labels":["User"]}}]} \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/all_id_as_keys.json b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/all_id_as_keys.json index 3f33f964bb..508bb958c8 100644 --- a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/all_id_as_keys.json +++ b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/all_id_as_keys.json @@ -1 +1 @@ -{"nodes":{"0":{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":33.46789,"longitude":13.1,"height":null},"male":true,"age":42,"kids":["Sam","Anna","Grace"]}},"1":{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}},"2":{"type":"node","id":"2","labels":["User"],"properties":{"age":12}}},"rels":{"0":{"id":"0","type":"relationship","label":"KNOWS","properties":{"bffSince":"P5M1DT12H","since":1993},"start":{"id":"0","labels":["User"]},"end":{"id":"1","labels":["User"]}}}} \ No newline at end of file +{"nodes":{"0":{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":13.1,"longitude":33.46789,"height":null},"male":true,"age":42,"kids":["Sam","Anna","Grace"]}},"1":{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}},"2":{"type":"node","id":"2","labels":["User"],"properties":{"age":12}}},"rels":{"0":{"id":"0","type":"relationship","label":"KNOWS","properties":{"bffSince":"P5M1DT12H","since":1993},"start":{"id":"0","labels":["User"]},"end":{"id":"1","labels":["User"]}}}} \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/data.json b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/data.json index 23dd824857..6b373af3f3 100644 --- a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/data.json +++ b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/data.json @@ -1,4 +1,4 @@ -{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":33.46789,"longitude":13.1,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}} +{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":13.1,"longitude":33.46789,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}} {"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}} {"type":"node","id":"2","labels":["User"],"properties":{"age":12}} {"id":"0","type":"relationship","label":"KNOWS","properties":{"bffSince":"P5M1DT12H","since":1993},"start":{"id":"0","labels":["User"]},"end":{"id":"1","labels":["User"]}} \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/graph.json b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/graph.json index 23dd824857..6b373af3f3 100644 --- a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/graph.json +++ b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/graph.json @@ -1,4 +1,4 @@ -{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":33.46789,"longitude":13.1,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}} +{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":13.1,"longitude":33.46789,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}} {"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}} {"type":"node","id":"2","labels":["User"],"properties":{"age":12}} {"id":"0","type":"relationship","label":"KNOWS","properties":{"bffSince":"P5M1DT12H","since":1993},"start":{"id":"0","labels":["User"]},"end":{"id":"1","labels":["User"]}} \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/listNode.json b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/listNode.json index 454ad4d175..6e7239356d 100644 --- a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/listNode.json +++ b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/listNode.json @@ -1 +1 @@ -{"list":[{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":33.46789,"longitude":13.1,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}},{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}},{"type":"node","id":"2","labels":["User"],"properties":{"age":12}}]} \ No newline at end of file +{"list":[{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":13.1,"longitude":33.46789,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}},{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}},{"type":"node","id":"2","labels":["User"],"properties":{"age":12}}]} \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/listPath.json b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/listPath.json index 28c30e1eac..a6e582226e 100644 --- a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/listPath.json +++ b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/listPath.json @@ -1 +1 @@ -{"list":[{"length":1,"rels":[{"id":"0","type":"relationship","label":"KNOWS","properties":{"bffSince":"P5M1DT12H","since":1993},"start":{"id":"0","labels":["User"]},"end":{"id":"1","labels":["User"]}}],"nodes":[{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":33.46789,"longitude":13.1,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}},{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}}]}]} \ No newline at end of file +{"list":[{"length":1,"rels":[{"id":"0","type":"relationship","label":"KNOWS","properties":{"bffSince":"P5M1DT12H","since":1993},"start":{"id":"0","labels":["User"]},"end":{"id":"1","labels":["User"]}}],"nodes":[{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":13.1,"longitude":33.46789,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}},{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}}]}]} \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/mapPointDatetime.json b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/mapPointDatetime.json index 80dfc754c6..f01a5c6c6f 100644 --- a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/mapPointDatetime.json +++ b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/mapPointDatetime.json @@ -1 +1 @@ -{"map":{"data":1,"value":{"data":{"number":[1,3,5],"born":"2018-10-29","place":{"crs":"wgs-84","latitude":33.46789,"longitude":13.1,"height":null}},"name":"Mike","age":12}},"theDateTime":"2015-06-24T12:50:35.556+01:00","theLocalDateTime":"2015-07-04T19:32:24","point":{"crs":"wgs-84","latitude":33.46789,"longitude":13.1,"height":null},"date":"2015-03-26","time":"12:50:35.556+01:00","localTime":"12:50:35.556"} \ No newline at end of file +{"map":{"data":1,"value":{"data":{"number":[1,3,5],"born":"2018-10-29","place":{"crs":"wgs-84","latitude":13.1,"longitude":33.46789,"height":null}},"name":"Mike","age":12}},"theDateTime":"2015-06-24T12:50:35.556+01:00","theLocalDateTime":"2015-07-04T19:32:24","point":{"crs":"wgs-84","latitude":13.1,"longitude":33.46789,"height":null},"date":"2015-03-26","time":"12:50:35.556+01:00","localTime":"12:50:35.556"} \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/multiLabels.json b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/multiLabels.json new file mode 100644 index 0000000000..50f8154aea --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/multiLabels.json @@ -0,0 +1,20 @@ +{"type":"node","id":"999","labels":["FirstLabel"],"properties":{"name":"firstProp"}} +{"type":"node","id":"0","labels":["Stream","User"],"properties":{"createdAt":"2016-07-08T21:50:35.504924Z","followers":33366,"name":"itsbigchase","description":"Welcome to my Channel, I'm Big Chase, 31 living in England UK. Mediocre game play, 2 bald cats, hilarious moments. Business enquiries: itsbigchase@gmail.com","id":"129004176","total_view_count":569603,"url":"https://www.twitch.tv/itsbigchase"}} +{"type":"node","id":"1","labels":["Game"],"properties":{"name":"Rust"}} +{"type":"node","id":"2","labels":["Language"],"properties":{"name":"en"}} +{"type":"node","id":"3","labels":["Stream","User"],"properties":{"createdAt":"2011-12-01T06:33:31.487567Z","followers":5898590,"name":"summit1g","description":"I'm a variety streamer(kind of). Been streaming 8 years(another number to change every year).I'm 100% better than you at shooting and puzzle games.@summit1g via Twitter.","id":"26490481","total_view_count":449304545,"url":"https://www.twitch.tv/summit1g"}} +{"type":"node","id":"4","labels":["Game"],"properties":{"name":"DayZ"}} +{"type":"node","id":"5","labels":["Stream","User"],"properties":{"createdAt":"2013-11-02T14:39:22.483111Z","followers":543783,"name":"stylishnoob4","description":"感謝します。","id":"50988750","total_view_count":81285942,"url":"https://www.twitch.tv/stylishnoob4"}} +{"type":"node","id":"6","labels":["Game"],"properties":{"name":"VALORANT"}} +{"type":"node","id":"7","labels":["Language"],"properties":{"name":"ja"}} +{"type":"node","id":"8","labels":["Stream","User"],"properties":{"createdAt":"2018-04-12T14:50:12.428980Z","followers":584530,"name":"dota2mc_ru","description":"Топовая студия в мире профессионального киберспорта.Охотимся за красочными рэмпейджами и транслируем главные турниры с лучшими командами мира. ","id":"213749122","total_view_count":135221985,"url":"https://www.twitch.tv/dota2mc_ru"}} +{"type":"node","id":"9","labels":["Game"],"properties":{"name":"Dota 2"}} +{"type":"node","id":"10","labels":["Language"],"properties":{"name":"en-gb"}} +{"type":"node","id":"11","labels":["Stream","User"],"properties":{"createdAt":"2012-04-28T03:03:56.967712Z","followers":923985,"name":"maximilian_dood","description":"Maximilian's Livestream Of Hype! Modern fighting games, classic fighting games, playthrus and YoVideogames on the weekend. MY DOODS!","id":"30104304","total_view_count":72083556,"url":"https://www.twitch.tv/maximilian_dood"}} +{"type":"node","id":"1034","labels":["Game"],"properties":{"name":"A Street Cat's Tale"}} +{"type":"node","id":"1035","labels":["Stream","User"],"properties":{"createdAt":"2013-06-04T00:57:04.261134Z","followers":234646,"name":"immortoru","description":"Pro mid lane player and streamer","id":"44331558","total_view_count":11855227,"url":"https://www.twitch.tv/immortoru"}} +{"type":"node","id":"1041","labels":["$Stream","$User"],"properties":{"createdAt":"2017-11-05T08:47:24.210613Z","followers":70253,"name":"rel_fn","description":"","id":"180550276","total_view_count":940424,"url":"https://www.twitch.tv/rel_fn"}} +{"id":"0","type":"relationship","label":"REL_STREAM_TO_GAME","properties":{"since":1993,"bffSince":"P5M1DT12H"},"start":{"id":"0","labels":["Stream","User"]},"end":{"id":"1","labels":["Game"]}} +{"id":"1","type":"relationship","label":"REL_LANG_TO_STREAM","properties":{"since":1993,"bffSince":"P5M1DT12H"},"start":{"id":"2","labels":["Language"]},"end":{"id":"3","labels":["Stream","User"]}} +{"id":"2","type":"relationship","label":"REL_GAME_TO_STREAM","properties":{"since":1993,"bffSince":"P5M1DT12H"},"start":{"id":"4","labels":["Game"]},"end":{"id":"5","labels":["Stream","User"]}} +{"id":"3","type":"relationship","label":"REL_GAME_TO_LANG","properties":{"since":1993,"bffSince":"P5M1DT12H"},"start":{"id":"6","labels":["Game"]},"end":{"id":"7","labels":["Language"]}} \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/query_nodes.json b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/query_nodes.json index 340d565ddb..5cc8f8f045 100644 --- a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/query_nodes.json +++ b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/query_nodes.json @@ -1,3 +1,3 @@ -{"u":{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":33.46789,"longitude":13.1,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}}} +{"u":{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":13.1,"longitude":33.46789,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}}} {"u":{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}}} {"u":{"type":"node","id":"2","labels":["User"],"properties":{"age":12}}} \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/query_nodes_param.json b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/query_nodes_param.json index 340d565ddb..5cc8f8f045 100644 --- a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/query_nodes_param.json +++ b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/query_nodes_param.json @@ -1,3 +1,3 @@ -{"u":{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":33.46789,"longitude":13.1,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}}} +{"u":{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":13.1,"longitude":33.46789,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}}} {"u":{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}}} {"u":{"type":"node","id":"2","labels":["User"],"properties":{"age":12}}} \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/query_nodes_path.json b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/query_nodes_path.json index ff1f160d1f..b62cc31ac7 100644 --- a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/query_nodes_path.json +++ b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/query_nodes_path.json @@ -1 +1 @@ -{"u":{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":33.46789,"longitude":13.1,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}},"rel":{"id":"0","type":"relationship","label":"KNOWS","properties":{"bffSince":"P5M1DT12H","since":1993},"start":{"id":"0","labels":["User"]},"end":{"id":"1","labels":["User"]}},"u2":{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}},"p":{"length":1,"rels":[{"id":"0","type":"relationship","label":"KNOWS","properties":{"bffSince":"P5M1DT12H","since":1993},"start":{"id":"0","labels":["User"]},"end":{"id":"1","labels":["User"]}}],"nodes":[{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":33.46789,"longitude":13.1,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}},{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}}]},"u.name":"Adam"} \ No newline at end of file +{"u":{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":13.1,"longitude":33.46789,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}},"rel":{"id":"0","type":"relationship","label":"KNOWS","properties":{"bffSince":"P5M1DT12H","since":1993},"start":{"id":"0","labels":["User"]},"end":{"id":"1","labels":["User"]}},"u2":{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}},"p":{"length":1,"rels":[{"id":"0","type":"relationship","label":"KNOWS","properties":{"bffSince":"P5M1DT12H","since":1993},"start":{"id":"0","labels":["User"]},"end":{"id":"1","labels":["User"]}}],"nodes":[{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":13.1,"longitude":33.46789,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}},{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}}]},"u.name":"Adam"} \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/query_two_nodes.json b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/query_two_nodes.json index 0c8bd84791..6b4348c293 100644 --- a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/query_two_nodes.json +++ b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/query_two_nodes.json @@ -1 +1 @@ -{"u":{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":33.46789,"longitude":13.1,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}},"l":{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}}} \ No newline at end of file +{"u":{"type":"node","id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":13.1,"longitude":33.46789,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}},"l":{"type":"node","id":"1","labels":["User"],"properties":{"name":"Jim","age":42}}} \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/writeNodeProperties.json b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/writeNodeProperties.json index 6f55bf211b..b4e5d406c3 100644 --- a/docs/asciidoc/modules/ROOT/examples/data/exportJSON/writeNodeProperties.json +++ b/docs/asciidoc/modules/ROOT/examples/data/exportJSON/writeNodeProperties.json @@ -1 +1 @@ -{"rel":{"id":"0","type":"relationship","label":"KNOWS","properties":{"bffSince":"P5M1DT12H","since":1993},"start":{"id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":33.46789,"longitude":13.1,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}},"end":{"id":"1","labels":["User"],"properties":{"name":"Jim","age":42}}}} \ No newline at end of file +{"rel":{"id":"0","type":"relationship","label":"KNOWS","properties":{"bffSince":"P5M1DT12H","since":1993},"start":{"id":"0","labels":["User"],"properties":{"born":"2015-07-04T19:32:24","name":"Adam","place":{"crs":"wgs-84","latitude":13.1,"longitude":33.46789,"height":null},"age":42,"male":true,"kids":["Sam","Anna","Grace"]}},"end":{"id":"1","labels":["User"],"properties":{"name":"Jim","age":42}}}} \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.agg.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.agg.csv index 99b5065860..698dc93742 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.agg.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.agg.csv @@ -1,12 +1,56 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.agg.first¦apoc.agg.first(value :: ANY?) :: (ANY?)¦apoc.agg.first(value) - returns first value -¦function¦apoc.agg.graph¦apoc.agg.graph(element :: ANY?) :: (MAP?)¦apoc.agg.graph(path) - returns map of graph {nodes, relationships} of all distinct nodes and relationships -¦function¦apoc.agg.last¦apoc.agg.last(value :: ANY?) :: (ANY?)¦apoc.agg.last(value) - returns last value -¦function¦apoc.agg.maxItems¦apoc.agg.maxItems(item :: ANY?, value :: ANY?, groupLimit = -1 :: INTEGER?) :: (ANY?)¦apoc.agg.maxItems(item, value, groupLimit: -1) - returns a map {items:[], value:n} where `value` is the maximum value present, and `items` are all items with the same value. The number of items can be optionally limited. -¦function¦apoc.agg.median¦apoc.agg.median(value :: ANY?) :: (ANY?)¦apoc.agg.median(number) - returns median for non-null numeric values -¦function¦apoc.agg.minItems¦apoc.agg.minItems(item :: ANY?, value :: ANY?, groupLimit = -1 :: INTEGER?) :: (ANY?)¦apoc.agg.minItems(item, value, groupLimit: -1) - returns a map {items:[], value:n} where `value` is the minimum value present, and `items` are all items with the same value. The number of items can be optionally limited. -¦function¦apoc.agg.nth¦apoc.agg.nth(value :: ANY?, value :: INTEGER?) :: (ANY?)¦apoc.agg.nth(value,offset) - returns value of nth row (or -1 for last) -¦function¦apoc.agg.percentiles¦apoc.agg.percentiles(value :: NUMBER?, percentiles = [0.5, 0.75, 0.9, 0.95, 0.99] :: LIST? OF FLOAT?) :: (LIST? OF ANY?)¦apoc.agg.percentiles(value,[percentiles = 0.5,0.75,0.9,0.95,0.99]) - returns given percentiles for values -¦function¦apoc.agg.product¦apoc.agg.product(number :: NUMBER?) :: (NUMBER?)¦apoc.agg.product(number) - returns given product for non-null values -¦function¦apoc.agg.slice¦apoc.agg.slice(value :: ANY?, from = 0 :: INTEGER?, to = -1 :: INTEGER?) :: (LIST? OF ANY?)¦apoc.agg.slice(value, start, length) - returns subset of non-null values, start is 0 based and length can be -1 -¦function¦apoc.agg.statistics¦apoc.agg.statistics(value :: NUMBER?, percentiles = [0.5, 0.75, 0.9, 0.95, 0.99] :: LIST? OF FLOAT?) :: (MAP?)¦apoc.agg.statistics(value,[percentiles = 0.5,0.75,0.9,0.95,0.99]) - returns numeric statistics (percentiles, min,minNonZero,max,total,mean,stdev) for values +¦Qualified Name¦Type¦Release +|xref::overview/apoc.agg/apoc.agg.adoc[apoc.agg.first icon:book[]] + +apoc.agg.first(value) - returns first value +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.agg/apoc.agg.adoc[apoc.agg.graph icon:book[]] + +apoc.agg.graph(path) - returns map of graph {nodes, relationships} of all distinct nodes and relationships +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.agg/apoc.agg.adoc[apoc.agg.last icon:book[]] + +apoc.agg.last(value) - returns last value +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.agg/apoc.agg.adoc[apoc.agg.maxItems icon:book[]] + +apoc.agg.maxItems(item, value, groupLimit: -1) - returns a map {items:[], value:n} where `value` is the maximum value present, and `items` are all items with the same value. The number of items can be optionally limited. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.agg/apoc.agg.adoc[apoc.agg.median icon:book[]] + +apoc.agg.median(number) - returns median for non-null numeric values +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.agg/apoc.agg.adoc[apoc.agg.minItems icon:book[]] + +apoc.agg.minItems(item, value, groupLimit: -1) - returns a map {items:[], value:n} where `value` is the minimum value present, and `items` are all items with the same value. The number of items can be optionally limited. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.agg/apoc.agg.adoc[apoc.agg.nth icon:book[]] + +apoc.agg.nth(value,offset) - returns value of nth row (or -1 for last) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.agg/apoc.agg.adoc[apoc.agg.percentiles icon:book[]] + +apoc.agg.percentiles(value,[percentiles = 0.5,0.75,0.9,0.95,0.99]) - returns given percentiles for values +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.agg/apoc.agg.adoc[apoc.agg.product icon:book[]] + +apoc.agg.product(number) - returns given product for non-null values +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.agg/apoc.agg.adoc[apoc.agg.slice icon:book[]] + +apoc.agg.slice(value, start, length) - returns subset of non-null values, start is 0 based and length can be -1 +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.agg/apoc.agg.adoc[apoc.agg.statistics icon:book[]] + +apoc.agg.statistics(value,[percentiles = 0.5,0.75,0.9,0.95,0.99]) - returns numeric statistics (percentiles, min,minNonZero,max,total,mean,stdev) for values +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo-lite.csv index e4599b2187..1bf2231a0c 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo-lite.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo-lite.csv @@ -1,7 +1,2 @@ ¦signature -¦apoc.algo.aStar(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, weightPropertyName :: STRING?, latPropertyName :: STRING?, lonPropertyName :: STRING?) :: (path :: PATH?, weight :: FLOAT?) -¦apoc.algo.aStarConfig(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, config :: MAP?) :: (path :: PATH?, weight :: FLOAT?) -¦apoc.algo.allSimplePaths(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, maxNodes :: INTEGER?) :: (path :: PATH?) ¦apoc.algo.cover(nodes :: ANY?) :: (rel :: RELATIONSHIP?) -¦apoc.algo.dijkstra(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, weightPropertyName :: STRING?, defaultWeight = NaN :: FLOAT?, numberOfWantedPaths = 1 :: INTEGER?) :: (path :: PATH?, weight :: FLOAT?) -¦apoc.algo.dijkstraWithDefaultWeight(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, weightPropertyName :: STRING?, defaultWeight :: FLOAT?) :: (path :: PATH?, weight :: FLOAT?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.aStar-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.aStar-lite.csv deleted file mode 100644 index 5249781c88..0000000000 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.aStar-lite.csv +++ /dev/null @@ -1,2 +0,0 @@ -¦signature -¦apoc.algo.aStar(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, weightPropertyName :: STRING?, latPropertyName :: STRING?, lonPropertyName :: STRING?) :: (path :: PATH?, weight :: FLOAT?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.aStar.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.aStar.adoc deleted file mode 100644 index 36c28ca4c6..0000000000 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.aStar.adoc +++ /dev/null @@ -1,5 +0,0 @@ -¦xref::overview/apoc.algo/apoc.algo.aStar.adoc[apoc.algo.aStar icon:book[]] + - -`apoc.algo.aStar(startNode, endNode, 'KNOWS|', 'distance','lat','lon') YIELD path, weight` - run A* with relationship property name as cost function -¦label:procedure[] -¦label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.aStar.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.aStar.csv deleted file mode 100644 index c345464f94..0000000000 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.aStar.csv +++ /dev/null @@ -1,2 +0,0 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.algo.aStar¦apoc.algo.aStar(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, weightPropertyName :: STRING?, latPropertyName :: STRING?, lonPropertyName :: STRING?) :: (path :: PATH?, weight :: FLOAT?)¦apoc.algo.aStar(startNode, endNode, 'KNOWS|', 'distance','lat','lon') YIELD path, weight - run A* with relationship property name as cost function diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.aStarConfig-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.aStarConfig-lite.csv deleted file mode 100644 index 703acc981e..0000000000 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.aStarConfig-lite.csv +++ /dev/null @@ -1,2 +0,0 @@ -¦signature -¦apoc.algo.aStarConfig(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, config :: MAP?) :: (path :: PATH?, weight :: FLOAT?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.aStarConfig.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.aStarConfig.adoc deleted file mode 100644 index a624b447fc..0000000000 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.aStarConfig.adoc +++ /dev/null @@ -1,5 +0,0 @@ -¦xref::overview/apoc.algo/apoc.algo.aStarConfig.adoc[apoc.algo.aStarConfig icon:book[]] + - -`apoc.algo.aStar(startNode, endNode, 'KNOWS|', {weight:'dist',default:10,x:'lon',y:'lat'}) YIELD path, weight` - run A* with relationship property name as cost function -¦label:procedure[] -¦label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.aStarConfig.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.aStarConfig.csv deleted file mode 100644 index e4db641cdd..0000000000 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.aStarConfig.csv +++ /dev/null @@ -1,2 +0,0 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.algo.aStarConfig¦apoc.algo.aStarConfig(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, config :: MAP?) :: (path :: PATH?, weight :: FLOAT?)¦apoc.algo.aStar(startNode, endNode, 'KNOWS|', {weight:'dist',default:10,x:'lon',y:'lat'}) YIELD path, weight - run A* with relationship property name as cost function diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.allSimplePaths-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.allSimplePaths-lite.csv deleted file mode 100644 index 67b6767fc2..0000000000 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.allSimplePaths-lite.csv +++ /dev/null @@ -1,2 +0,0 @@ -¦signature -¦apoc.algo.allSimplePaths(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, maxNodes :: INTEGER?) :: (path :: PATH?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.allSimplePaths.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.allSimplePaths.adoc deleted file mode 100644 index 2fef1037d1..0000000000 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.allSimplePaths.adoc +++ /dev/null @@ -1,5 +0,0 @@ -¦xref::overview/apoc.algo/apoc.algo.allSimplePaths.adoc[apoc.algo.allSimplePaths icon:book[]] + - -`apoc.algo.allSimplePaths(startNode, endNode, 'KNOWS|', 5) YIELD path, weight` - run allSimplePaths with relationships given and maxNodes -¦label:procedure[] -¦label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.allSimplePaths.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.allSimplePaths.csv deleted file mode 100644 index 96022b9bc7..0000000000 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.allSimplePaths.csv +++ /dev/null @@ -1,2 +0,0 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.algo.allSimplePaths¦apoc.algo.allSimplePaths(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, maxNodes :: INTEGER?) :: (path :: PATH?)¦apoc.algo.allSimplePaths(startNode, endNode, 'KNOWS|', 5) YIELD path, weight - run allSimplePaths with relationships given and maxNodes diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.cover.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.cover.csv deleted file mode 100644 index f961126420..0000000000 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.cover.csv +++ /dev/null @@ -1,2 +0,0 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.algo.cover¦apoc.algo.cover(nodes :: ANY?) :: (rel :: RELATIONSHIP?)¦apoc.algo.cover(nodes) yield rel - returns all relationships between this set of nodes diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.csv index 824154d0fb..9f281d1eda 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.csv @@ -1,7 +1,6 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.algo.aStar¦apoc.algo.aStar(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, weightPropertyName :: STRING?, latPropertyName :: STRING?, lonPropertyName :: STRING?) :: (path :: PATH?, weight :: FLOAT?)¦apoc.algo.aStar(startNode, endNode, 'KNOWS|', 'distance','lat','lon') YIELD path, weight - run A* with relationship property name as cost function -¦procedure¦apoc.algo.aStarConfig¦apoc.algo.aStarConfig(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, config :: MAP?) :: (path :: PATH?, weight :: FLOAT?)¦apoc.algo.aStar(startNode, endNode, 'KNOWS|', {weight:'dist',default:10,x:'lon',y:'lat'}) YIELD path, weight - run A* with relationship property name as cost function -¦procedure¦apoc.algo.allSimplePaths¦apoc.algo.allSimplePaths(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, maxNodes :: INTEGER?) :: (path :: PATH?)¦apoc.algo.allSimplePaths(startNode, endNode, 'KNOWS|', 5) YIELD path, weight - run allSimplePaths with relationships given and maxNodes -¦procedure¦apoc.algo.cover¦apoc.algo.cover(nodes :: ANY?) :: (rel :: RELATIONSHIP?)¦apoc.algo.cover(nodes) yield rel - returns all relationships between this set of nodes -¦procedure¦apoc.algo.dijkstra¦apoc.algo.dijkstra(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, weightPropertyName :: STRING?, defaultWeight = NaN :: FLOAT?, numberOfWantedPaths = 1 :: INTEGER?) :: (path :: PATH?, weight :: FLOAT?)¦apoc.algo.dijkstra(startNode, endNode, 'KNOWS|', 'distance', defaultValue, numberOfWantedResults) YIELD path, weight - run dijkstra with relationship property name as cost function -¦procedure¦apoc.algo.dijkstraWithDefaultWeight¦apoc.algo.dijkstraWithDefaultWeight(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, weightPropertyName :: STRING?, defaultWeight :: FLOAT?) :: (path :: PATH?, weight :: FLOAT?)¦apoc.algo.dijkstraWithDefaultWeight(startNode, endNode, 'KNOWS|', 'distance', 10) YIELD path, weight - run dijkstra with relationship property name as cost function and a default weight if the property does not exist +¦Qualified Name¦Type¦Release +|xref::overview/apoc.algo/apoc.algo.adoc[apoc.algo.cover icon:book[]] + +apoc.algo.cover(nodes) yield rel - returns all relationships between this set of nodes +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.dijkstra-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.dijkstra-lite.csv deleted file mode 100644 index 9df49db45d..0000000000 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.dijkstra-lite.csv +++ /dev/null @@ -1,2 +0,0 @@ -¦signature -¦apoc.algo.dijkstra(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, weightPropertyName :: STRING?, defaultWeight = NaN :: FLOAT?, numberOfWantedPaths = 1 :: INTEGER?) :: (path :: PATH?, weight :: FLOAT?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.dijkstra.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.dijkstra.adoc deleted file mode 100644 index 950feab240..0000000000 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.dijkstra.adoc +++ /dev/null @@ -1,5 +0,0 @@ -¦xref::overview/apoc.algo/apoc.algo.dijkstra.adoc[apoc.algo.dijkstra icon:book[]] + - -`apoc.algo.dijkstra(startNode, endNode, 'KNOWS|', 'distance', defaultValue, numberOfWantedResults) YIELD path, weight` - run dijkstra with relationship property name as cost function -¦label:procedure[] -¦label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.dijkstra.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.dijkstra.csv deleted file mode 100644 index 70c321416a..0000000000 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.dijkstra.csv +++ /dev/null @@ -1,2 +0,0 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.algo.dijkstra¦apoc.algo.dijkstra(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, weightPropertyName :: STRING?, defaultWeight = NaN :: FLOAT?, numberOfWantedPaths = 1 :: INTEGER?) :: (path :: PATH?, weight :: FLOAT?)¦apoc.algo.dijkstra(startNode, endNode, 'KNOWS|', 'distance', defaultValue, numberOfWantedResults) YIELD path, weight - run dijkstra with relationship property name as cost function diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.dijkstraWithDefaultWeight-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.dijkstraWithDefaultWeight-lite.csv deleted file mode 100644 index 04949f5b0b..0000000000 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.dijkstraWithDefaultWeight-lite.csv +++ /dev/null @@ -1,2 +0,0 @@ -¦signature -¦apoc.algo.dijkstraWithDefaultWeight(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, weightPropertyName :: STRING?, defaultWeight :: FLOAT?) :: (path :: PATH?, weight :: FLOAT?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.dijkstraWithDefaultWeight.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.dijkstraWithDefaultWeight.adoc deleted file mode 100644 index 5ed2a0c5be..0000000000 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.dijkstraWithDefaultWeight.adoc +++ /dev/null @@ -1,5 +0,0 @@ -¦xref::overview/apoc.algo/apoc.algo.dijkstraWithDefaultWeight.adoc[apoc.algo.dijkstraWithDefaultWeight icon:book[]] + - -`apoc.algo.dijkstraWithDefaultWeight(startNode, endNode, 'KNOWS|', 'distance', 10) YIELD path, weight` - run dijkstra with relationship property name as cost function and a default weight if the property does not exist -¦label:procedure[] -¦label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.dijkstraWithDefaultWeight.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.dijkstraWithDefaultWeight.csv deleted file mode 100644 index dfc9878b31..0000000000 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.algo.dijkstraWithDefaultWeight.csv +++ /dev/null @@ -1,2 +0,0 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.algo.dijkstraWithDefaultWeight¦apoc.algo.dijkstraWithDefaultWeight(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, weightPropertyName :: STRING?, defaultWeight :: FLOAT?) :: (path :: PATH?, weight :: FLOAT?)¦apoc.algo.dijkstraWithDefaultWeight(startNode, endNode, 'KNOWS|', 'distance', 10) YIELD path, weight - run dijkstra with relationship property name as cost function and a default weight if the property does not exist diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.any.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.any.csv index 5bfb93df75..7c0a3cc23f 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.any.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.any.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.any.properties¦apoc.any.properties(thing :: ANY?, keys = null :: LIST? OF STRING?) :: (MAP?)¦returns properties for virtual and real, nodes, rels and maps -¦function¦apoc.any.property¦apoc.any.property(thing :: ANY?, key :: STRING?) :: (ANY?)¦returns property for virtual and real, nodes, rels and maps +¦Qualified Name¦Type¦Release +|xref::overview/apoc.any/apoc.any.adoc[apoc.any.properties icon:book[]] + +returns properties for virtual and real, nodes, rels and maps +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.any/apoc.any.adoc[apoc.any.property icon:book[]] + +returns property for virtual and real, nodes, rels and maps +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.atomic.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.atomic.csv index 3fc2e0cc5b..0aebc88933 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.atomic.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.atomic.csv @@ -1,7 +1,31 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.atomic.add¦apoc.atomic.add(container :: ANY?, propertyName :: STRING?, number :: NUMBER?, times = 5 :: INTEGER?) :: (container :: ANY?, property :: STRING?, oldValue :: ANY?, newValue :: ANY?)¦apoc.atomic.add(node/relatonship,propertyName,number) Sums the property's value with the 'number' value -¦procedure¦apoc.atomic.concat¦apoc.atomic.concat(container :: ANY?, propertyName :: STRING?, string :: STRING?, times = 5 :: INTEGER?) :: (container :: ANY?, property :: STRING?, oldValue :: ANY?, newValue :: ANY?)¦apoc.atomic.concat(node/relatonship,propertyName,string) Concats the property's value with the 'string' value -¦procedure¦apoc.atomic.insert¦apoc.atomic.insert(container :: ANY?, propertyName :: STRING?, position :: INTEGER?, value :: ANY?, times = 5 :: INTEGER?) :: (container :: ANY?, property :: STRING?, oldValue :: ANY?, newValue :: ANY?)¦apoc.atomic.insert(node/relatonship,propertyName,position,value) insert a value into the property's array value at 'position' -¦procedure¦apoc.atomic.remove¦apoc.atomic.remove(container :: ANY?, propertyName :: STRING?, position :: INTEGER?, times = 5 :: INTEGER?) :: (container :: ANY?, property :: STRING?, oldValue :: ANY?, newValue :: ANY?)¦apoc.atomic.remove(node/relatonship,propertyName,position) remove the element at position 'position' -¦procedure¦apoc.atomic.subtract¦apoc.atomic.subtract(container :: ANY?, propertyName :: STRING?, number :: NUMBER?, times = 5 :: INTEGER?) :: (container :: ANY?, property :: STRING?, oldValue :: ANY?, newValue :: ANY?)¦apoc.atomic.subtract(node/relatonship,propertyName,number) Subtracts the 'number' value to the property's value -¦procedure¦apoc.atomic.update¦apoc.atomic.update(container :: ANY?, propertyName :: STRING?, operation :: STRING?, times = 5 :: INTEGER?) :: (container :: ANY?, property :: STRING?, oldValue :: ANY?, newValue :: ANY?)¦apoc.atomic.update(node/relatonship,propertyName,updateOperation) update a property's value with a cypher operation (ex. "n.prop1+n.prop2") +¦Qualified Name¦Type¦Release +|xref::overview/apoc.atomic/apoc.atomic.adoc[apoc.atomic.add icon:book[]] + +apoc.atomic.add(node/relatonship,propertyName,number) Sums the property's value with the 'number' value +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.atomic/apoc.atomic.adoc[apoc.atomic.concat icon:book[]] + +apoc.atomic.concat(node/relatonship,propertyName,string) Concats the property's value with the 'string' value +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.atomic/apoc.atomic.adoc[apoc.atomic.insert icon:book[]] + +apoc.atomic.insert(node/relatonship,propertyName,position,value) insert a value into the property's array value at 'position' +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.atomic/apoc.atomic.adoc[apoc.atomic.remove icon:book[]] + +apoc.atomic.remove(node/relatonship,propertyName,position) remove the element at position 'position' +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.atomic/apoc.atomic.adoc[apoc.atomic.subtract icon:book[]] + +apoc.atomic.subtract(node/relatonship,propertyName,number) Subtracts the 'number' value to the property's value +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.atomic/apoc.atomic.adoc[apoc.atomic.update icon:book[]] + +apoc.atomic.update(node/relatonship,propertyName,updateOperation) update a property's value with a cypher operation (ex. "n.prop1+n.prop2") +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bitwise.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bitwise.csv index b9014e561a..af7c0b1cfc 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bitwise.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bitwise.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.bitwise.op¦apoc.bitwise.op(a :: INTEGER?, operator :: STRING?, b :: INTEGER?) :: (INTEGER?)¦apoc.bitwise.op(60,'|',13) bitwise operations a & b, a | b, a ^ b, ~a, a >> b, a >>> b, a << b. returns the result of the bitwise operation +¦Qualified Name¦Type¦Release +|xref::overview/apoc.bitwise/apoc.bitwise.adoc[apoc.bitwise.op icon:book[]] + +apoc.bitwise.op(60,'\|',13) bitwise operations a & b, a \| b, a ^ b, ~a, a >> b, a >>> b, a << b. returns the result of the bitwise operation +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.csv index 2991c19069..078f693d95 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.bolt.execute¦apoc.bolt.execute(url :: STRING?, kernelTransaction :: STRING?, params = {} :: MAP?, config = {} :: MAP?) :: (row :: MAP?)¦apoc.bolt.execute(url-or-key, kernelTransaction, params, config) - access to other databases via bolt for read -¦procedure¦apoc.bolt.load¦apoc.bolt.load(url :: STRING?, kernelTransaction :: STRING?, params = {} :: MAP?, config = {} :: MAP?) :: (row :: MAP?)¦apoc.bolt.load(url-or-key, kernelTransaction, params, config) - access to other databases via bolt for read +¦Qualified Name¦Type¦Release +|xref::overview/apoc.bolt/apoc.bolt.adoc[apoc.bolt.execute icon:book[]] + +apoc.bolt.execute(url-or-key, kernelTransaction, params, config) - access to other databases via bolt for reads and writes +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.bolt/apoc.bolt.adoc[apoc.bolt.load icon:book[]] + +apoc.bolt.load(url-or-key, kernelTransaction, params, config) - access to other databases via bolt for read +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.execute.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.execute.adoc index 45bf595b90..1175be0689 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.execute.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.execute.adoc @@ -1,5 +1,5 @@ ¦xref::overview/apoc.bolt/apoc.bolt.execute.adoc[apoc.bolt.execute icon:book[]] + -`apoc.bolt.execute(url-or-key, kernelTransaction, params, config)` - access to other databases via bolt for read +`apoc.bolt.execute(url-or-key, kernelTransaction, params, config)` - access to other databases via bolt for reads and writes ¦label:procedure[] ¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.execute.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.execute.csv index 04b37404d0..262ab530a3 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.execute.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.execute.csv @@ -1,2 +1,2 @@ ¦type¦qualified name¦signature¦description -¦procedure¦apoc.bolt.execute¦apoc.bolt.execute(url :: STRING?, kernelTransaction :: STRING?, params = {} :: MAP?, config = {} :: MAP?) :: (row :: MAP?)¦apoc.bolt.execute(url-or-key, kernelTransaction, params, config) - access to other databases via bolt for read +¦procedure¦apoc.bolt.execute¦apoc.bolt.execute(url :: STRING?, kernelTransaction :: STRING?, params = {} :: MAP?, config = {} :: MAP?) :: (row :: MAP?)¦apoc.bolt.execute(url-or-key, kernelTransaction, params, config) - access to other databases via bolt for reads and writes diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.load.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.load.csv index 6106cf4433..7dfd6141f9 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.load.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.load.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.bolt.load¦apoc.bolt.load(url :: STRING?, kernelTransaction :: STRING?, params = {} :: MAP?, config = {} :: MAP?) :: (row :: MAP?)¦apoc.bolt.load(url-or-key, kernelTransaction, params, config) - access to other databases via bolt for read +¦Qualified Name¦Type¦Release +|xref::overview/apoc.bolt.load/apoc.bolt.adoc[apoc.bolt.load.fromLocal icon:book[]] + + +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.load.fromLocal-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.load.fromLocal-lite.csv new file mode 100644 index 0000000000..d5da7949ec --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.load.fromLocal-lite.csv @@ -0,0 +1,2 @@ +¦signature +¦apoc.bolt.load.fromLocal(url :: STRING?, localStatement :: STRING?, remoteStatement :: STRING?, config = {} :: MAP?) :: (row :: MAP?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.load.fromLocal.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.load.fromLocal.adoc new file mode 100644 index 0000000000..bb3e9675b1 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.bolt.load.fromLocal.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.bolt/apoc.bolt.load.fromLocal.adoc[apoc.bolt.load.fromLocal icon:book[]] + + +`` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.cluster.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.cluster.csv index d4cb8fca83..475f947220 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.cluster.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.cluster.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.cluster.graph¦apoc.cluster.graph() :: (nodes :: LIST? OF NODE?, relationships :: LIST? OF RELATIONSHIP?)¦ +¦Qualified Name¦Type¦Release +|xref::overview/apoc.cluster/apoc.cluster.adoc[apoc.cluster.graph icon:book[]] + + +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.coll-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.coll-lite.csv index cbb47f1309..2c1370533e 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.coll-lite.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.coll-lite.csv @@ -45,6 +45,7 @@ ¦apoc.coll.sortMulti(coll :: LIST? OF MAP?, orderFields = [] :: LIST? OF STRING?, limit = -1 :: INTEGER?, skip = 0 :: INTEGER?) :: (LIST? OF ANY?) ¦apoc.coll.sortNodes(coll :: LIST? OF NODE?, prop :: STRING?) :: (LIST? OF ANY?) ¦apoc.coll.sortText(coll :: LIST? OF STRING?, conf = {} :: MAP?) :: (LIST? OF ANY?) +¦apoc.coll.stdev(list :: LIST? OF NUMBER?, isBiasCorrected = true :: BOOLEAN?) :: (NUMBER?) ¦apoc.coll.subtract(first :: LIST? OF ANY?, second :: LIST? OF ANY?) :: (LIST? OF ANY?) ¦apoc.coll.sum(numbers :: LIST? OF NUMBER?) :: (FLOAT?) ¦apoc.coll.sumLongs(numbers :: LIST? OF NUMBER?) :: (INTEGER?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.coll.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.coll.csv index 8d70d50569..b38e1681c4 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.coll.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.coll.csv @@ -1,54 +1,271 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.coll.elements¦apoc.coll.elements(values :: LIST? OF ANY?, limit = -1 :: INTEGER?, offset = 0 :: INTEGER?) :: (_1 :: ANY?, _2 :: ANY?, _3 :: ANY?, _4 :: ANY?, _5 :: ANY?, _6 :: ANY?, _7 :: ANY?, _8 :: ANY?, _9 :: ANY?, _10 :: ANY?, _1s :: STRING?, _2s :: STRING?, _3s :: STRING?, _4s :: STRING?, _5s :: STRING?, _6s :: STRING?, _7s :: STRING?, _8s :: STRING?, _9s :: STRING?, _10s :: STRING?, _1i :: INTEGER?, _2i :: INTEGER?, _3i :: INTEGER?, _4i :: INTEGER?, _5i :: INTEGER?, _6i :: INTEGER?, _7i :: INTEGER?, _8i :: INTEGER?, _9i :: INTEGER?, _10i :: INTEGER?, _1f :: FLOAT?, _2f :: FLOAT?, _3f :: FLOAT?, _4f :: FLOAT?, _5f :: FLOAT?, _6f :: FLOAT?, _7f :: FLOAT?, _8f :: FLOAT?, _9f :: FLOAT?, _10f :: FLOAT?, _1b :: BOOLEAN?, _2b :: BOOLEAN?, _3b :: BOOLEAN?, _4b :: BOOLEAN?, _5b :: BOOLEAN?, _6b :: BOOLEAN?, _7b :: BOOLEAN?, _8b :: BOOLEAN?, _9b :: BOOLEAN?, _10b :: BOOLEAN?, _1l :: LIST? OF ANY?, _2l :: LIST? OF ANY?, _3l :: LIST? OF ANY?, _4l :: LIST? OF ANY?, _5l :: LIST? OF ANY?, _6l :: LIST? OF ANY?, _7l :: LIST? OF ANY?, _8l :: LIST? OF ANY?, _9l :: LIST? OF ANY?, _10l :: LIST? OF ANY?, _1m :: MAP?, _2m :: MAP?, _3m :: MAP?, _4m :: MAP?, _5m :: MAP?, _6m :: MAP?, _7m :: MAP?, _8m :: MAP?, _9m :: MAP?, _10m :: MAP?, _1n :: NODE?, _2n :: NODE?, _3n :: NODE?, _4n :: NODE?, _5n :: NODE?, _6n :: NODE?, _7n :: NODE?, _8n :: NODE?, _9n :: NODE?, _10n :: NODE?, _1r :: RELATIONSHIP?, _2r :: RELATIONSHIP?, _3r :: RELATIONSHIP?, _4r :: RELATIONSHIP?, _5r :: RELATIONSHIP?, _6r :: RELATIONSHIP?, _7r :: RELATIONSHIP?, _8r :: RELATIONSHIP?, _9r :: RELATIONSHIP?, _10r :: RELATIONSHIP?, _1p :: PATH?, _2p :: PATH?, _3p :: PATH?, _4p :: PATH?, _5p :: PATH?, _6p :: PATH?, _7p :: PATH?, _8p :: PATH?, _9p :: PATH?, _10p :: PATH?, elements :: INTEGER?)¦apoc.coll.elements(list,limit,offset) yield _1,_2,..,_10,_1s,_2i,_3f,_4m,_5l,_6n,_7r,_8p - deconstruct subset of mixed list into identifiers of the correct type -¦procedure¦apoc.coll.pairWithOffset¦apoc.coll.pairWithOffset(values :: LIST? OF ANY?, offset :: INTEGER?) :: (value :: LIST? OF ANY?)¦apoc.coll.pairWithOffset(values, offset) - returns a list of pairs defined by the offset -¦procedure¦apoc.coll.partition¦apoc.coll.partition(values :: LIST? OF ANY?, batchSize :: INTEGER?) :: (value :: LIST? OF ANY?)¦apoc.coll.partition(list,batchSize) -¦procedure¦apoc.coll.split¦apoc.coll.split(values :: LIST? OF ANY?, value :: ANY?) :: (value :: LIST? OF ANY?)¦apoc.coll.split(list,value) | splits collection on given values rows of lists, value itself will not be part of resulting lists -¦procedure¦apoc.coll.zipToRows¦apoc.coll.zipToRows(list1 :: LIST? OF ANY?, list2 :: LIST? OF ANY?) :: (value :: LIST? OF ANY?)¦apoc.coll.zipToRows(list1,list2) - creates pairs like zip but emits one row per pair -¦function¦apoc.coll.avg¦apoc.coll.avg(numbers :: LIST? OF NUMBER?) :: (FLOAT?)¦apoc.coll.avg([0.5,1,2.3]) -¦function¦apoc.coll.combinations¦apoc.coll.combinations(coll :: LIST? OF ANY?, minSelect :: INTEGER?, maxSelect = -1 :: INTEGER?) :: (LIST? OF ANY?)¦apoc.coll.combinations(coll, minSelect, maxSelect:minSelect) - Returns collection of all combinations of list elements of selection size between minSelect and maxSelect (default:minSelect), inclusive -¦function¦apoc.coll.contains¦apoc.coll.contains(coll :: LIST? OF ANY?, value :: ANY?) :: (BOOLEAN?)¦apoc.coll.contains(coll, value) optimized contains operation (using a HashSet) (returns single row or not) -¦function¦apoc.coll.containsAll¦apoc.coll.containsAll(coll :: LIST? OF ANY?, values :: LIST? OF ANY?) :: (BOOLEAN?)¦apoc.coll.containsAll(coll, values) optimized contains-all operation (using a HashSet) (returns single row or not) -¦function¦apoc.coll.containsAllSorted¦apoc.coll.containsAllSorted(coll :: LIST? OF ANY?, values :: LIST? OF ANY?) :: (BOOLEAN?)¦apoc.coll.containsAllSorted(coll, value) optimized contains-all on a sorted list operation (Collections.binarySearch) (returns single row or not) -¦function¦apoc.coll.containsDuplicates¦apoc.coll.containsDuplicates(coll :: LIST? OF ANY?) :: (BOOLEAN?)¦apoc.coll.containsDuplicates(coll) - returns true if a collection contains duplicate elements -¦function¦apoc.coll.containsSorted¦apoc.coll.containsSorted(coll :: LIST? OF ANY?, value :: ANY?) :: (BOOLEAN?)¦apoc.coll.containsSorted(coll, value) optimized contains on a sorted list operation (Collections.binarySearch) (returns single row or not) -¦function¦apoc.coll.different¦apoc.coll.different(values :: LIST? OF ANY?) :: (BOOLEAN?)¦apoc.coll.different(values) - returns true if values are different -¦function¦apoc.coll.disjunction¦apoc.coll.disjunction(first :: LIST? OF ANY?, second :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.disjunction(first, second) - returns the disjunct set of the two lists -¦function¦apoc.coll.dropDuplicateNeighbors¦apoc.coll.dropDuplicateNeighbors(list :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.dropDuplicateNeighbors(list) - remove duplicate consecutive objects in a list -¦function¦apoc.coll.duplicates¦apoc.coll.duplicates(coll :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.duplicates(coll) - returns a list of duplicate items in the collection -¦function¦apoc.coll.duplicatesWithCount¦apoc.coll.duplicatesWithCount(coll :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.duplicatesWithCount(coll) - returns a list of duplicate items in the collection and their count, keyed by `item` and `count` (e.g., `[{item: xyz, count:2}, {item:zyx, count:5}]`) -¦function¦apoc.coll.fill¦apoc.coll.fill(item :: STRING?, count :: INTEGER?) :: (LIST? OF ANY?)¦apoc.coll.fill(item, count) - returns a list with the given count of items -¦function¦apoc.coll.flatten¦apoc.coll.flatten(coll :: LIST? OF ANY?, recursive = false :: BOOLEAN?) :: (LIST? OF ANY?)¦apoc.coll.flatten(coll, [recursive]) - flattens list (nested if recursive is true) -¦function¦apoc.coll.frequencies¦apoc.coll.frequencies(coll :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.frequencies(coll) - returns a list of frequencies of the items in the collection, keyed by `item` and `count` (e.g., `[{item: xyz, count:2}, {item:zyx, count:5}, {item:abc, count:1}]`) -¦function¦apoc.coll.frequenciesAsMap¦apoc.coll.frequenciesAsMap(coll :: LIST? OF ANY?) :: (MAP?)¦apoc.coll.frequenciesAsMap(coll) - return a map of frequencies of the items in the collection, key `item`, value `count` (e.g., `{1:2, 2:1}`) -¦function¦apoc.coll.indexOf¦apoc.coll.indexOf(coll :: LIST? OF ANY?, value :: ANY?) :: (INTEGER?)¦apoc.coll.indexOf(coll, value) | position of value in the list -¦function¦apoc.coll.insert¦apoc.coll.insert(coll :: LIST? OF ANY?, index :: INTEGER?, value :: ANY?) :: (LIST? OF ANY?)¦apoc.coll.insert(coll, index, value) | insert value at index -¦function¦apoc.coll.insertAll¦apoc.coll.insertAll(coll :: LIST? OF ANY?, index :: INTEGER?, values :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.insertAll(coll, index, values) | insert values at index -¦function¦apoc.coll.intersection¦apoc.coll.intersection(first :: LIST? OF ANY?, second :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.intersection(first, second) - returns the unique intersection of the two lists -¦function¦apoc.coll.isEqualCollection¦apoc.coll.isEqualCollection(coll :: LIST? OF ANY?, values :: LIST? OF ANY?) :: (BOOLEAN?)¦apoc.coll.isEqualCollection(coll, values) return true if two collections contain the same elements with the same cardinality in any order (using a HashMap) -¦function¦apoc.coll.max¦apoc.coll.max(values :: LIST? OF ANY?) :: (ANY?)¦apoc.coll.max([0.5,1,2.3]) -¦function¦apoc.coll.min¦apoc.coll.min(values :: LIST? OF ANY?) :: (ANY?)¦apoc.coll.min([0.5,1,2.3]) -¦function¦apoc.coll.occurrences¦apoc.coll.occurrences(coll :: LIST? OF ANY?, item :: ANY?) :: (INTEGER?)¦apoc.coll.occurrences(coll, item) - returns the count of the given item in the collection -¦function¦apoc.coll.pairWithOffset¦apoc.coll.pairWithOffset(values :: LIST? OF ANY?, offset :: INTEGER?) :: (LIST? OF ANY?)¦apoc.coll.pairWithOffset(values, offset) - returns a list of pairs defined by the offset -¦function¦apoc.coll.pairs¦apoc.coll.pairs(list :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.pairs([1,2,3]) returns [1,2],[2,3],[3,null] -¦function¦apoc.coll.pairsMin¦apoc.coll.pairsMin(list :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.pairsMin([1,2,3]) returns [1,2],[2,3] -¦function¦apoc.coll.partition¦apoc.coll.partition(values :: LIST? OF ANY?, batchSize :: INTEGER?) :: (LIST? OF ANY?)¦apoc.coll.partition(list,batchSize) -¦function¦apoc.coll.randomItem¦apoc.coll.randomItem(coll :: LIST? OF ANY?) :: (ANY?)¦apoc.coll.randomItem(coll)- returns a random item from the list, or null on an empty or null list -¦function¦apoc.coll.randomItems¦apoc.coll.randomItems(coll :: LIST? OF ANY?, itemCount :: INTEGER?, allowRepick = false :: BOOLEAN?) :: (LIST? OF ANY?)¦apoc.coll.randomItems(coll, itemCount, allowRepick: false) - returns a list of itemCount random items from the original list, optionally allowing picked elements to be picked again -¦function¦apoc.coll.remove¦apoc.coll.remove(coll :: LIST? OF ANY?, index :: INTEGER?, length = 1 :: INTEGER?) :: (LIST? OF ANY?)¦apoc.coll.remove(coll, index, [length=1]) | remove range of values from index to length -¦function¦apoc.coll.removeAll¦apoc.coll.removeAll(first :: LIST? OF ANY?, second :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.removeAll(first, second) - returns first list with all elements of second list removed -¦function¦apoc.coll.reverse¦apoc.coll.reverse(coll :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.reverse(coll) - returns reversed list -¦function¦apoc.coll.runningTotal¦apoc.coll.runningTotal(list :: LIST? OF NUMBER?) :: (LIST? OF ANY?)¦apoc.coll.runningTotal(list1) - returns an accumulative array. For example apoc.coll.runningTotal([1,2,3.5]) return [1,3,6.5] -¦function¦apoc.coll.set¦apoc.coll.set(coll :: LIST? OF ANY?, index :: INTEGER?, value :: ANY?) :: (LIST? OF ANY?)¦apoc.coll.set(coll, index, value) | set index to value -¦function¦apoc.coll.shuffle¦apoc.coll.shuffle(coll :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.shuffle(coll) - returns the shuffled list -¦function¦apoc.coll.sort¦apoc.coll.sort(coll :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.sort(coll) sort on Collections -¦function¦apoc.coll.sortMaps¦apoc.coll.sortMaps(coll :: LIST? OF MAP?, prop :: STRING?) :: (LIST? OF ANY?)¦apoc.coll.sortMaps([maps], 'name') - sort maps by property -¦function¦apoc.coll.sortMulti¦apoc.coll.sortMulti(coll :: LIST? OF MAP?, orderFields = [] :: LIST? OF STRING?, limit = -1 :: INTEGER?, skip = 0 :: INTEGER?) :: (LIST? OF ANY?)¦apoc.coll.sortMulti(coll, ['^name','age'],[limit],[skip]) - sort list of maps by several sort fields (ascending with ^ prefix) and optionally applies limit and skip -¦function¦apoc.coll.sortNodes¦apoc.coll.sortNodes(coll :: LIST? OF NODE?, prop :: STRING?) :: (LIST? OF ANY?)¦apoc.coll.sortNodes([nodes], 'name') sort nodes by property -¦function¦apoc.coll.sortText¦apoc.coll.sortText(coll :: LIST? OF STRING?, conf = {} :: MAP?) :: (LIST? OF ANY?)¦apoc.coll.sortText(coll) sort on string based collections -¦function¦apoc.coll.subtract¦apoc.coll.subtract(first :: LIST? OF ANY?, second :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.subtract(first, second) - returns unique set of first list with all elements of second list removed -¦function¦apoc.coll.sum¦apoc.coll.sum(numbers :: LIST? OF NUMBER?) :: (FLOAT?)¦apoc.coll.sum([0.5,1,2.3]) -¦function¦apoc.coll.sumLongs¦apoc.coll.sumLongs(numbers :: LIST? OF NUMBER?) :: (INTEGER?)¦apoc.coll.sumLongs([1,3,3]) -¦function¦apoc.coll.toSet¦apoc.coll.toSet(values :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.toSet([list]) returns a unique list backed by a set -¦function¦apoc.coll.union¦apoc.coll.union(first :: LIST? OF ANY?, second :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.union(first, second) - creates the distinct union of the 2 lists -¦function¦apoc.coll.unionAll¦apoc.coll.unionAll(first :: LIST? OF ANY?, second :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.unionAll(first, second) - creates the full union with duplicates of the two lists -¦function¦apoc.coll.zip¦apoc.coll.zip(list1 :: LIST? OF ANY?, list2 :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.zip([list1],[list2]) +¦Qualified Name¦Type¦Release +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.elements icon:book[]] + +apoc.coll.elements(list,limit,offset) yield _1,_2,..,_10,_1s,_2i,_3f,_4m,_5l,_6n,_7r,_8p - deconstruct subset of mixed list into identifiers of the correct type +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.pairWithOffset icon:book[]] + +apoc.coll.pairWithOffset(values, offset) - returns a list of pairs defined by the offset +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.partition icon:book[]] + +apoc.coll.partition(list,batchSize) +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.split icon:book[]] + +apoc.coll.split(list,value) \| splits collection on given values rows of lists, value itself will not be part of resulting lists +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.zipToRows icon:book[]] + +apoc.coll.zipToRows(list1,list2) - creates pairs like zip but emits one row per pair +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.avg icon:book[]] + +apoc.coll.avg([0.5,1,2.3]) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.combinations icon:book[]] + +apoc.coll.combinations(coll, minSelect, maxSelect:minSelect) - Returns collection of all combinations of list elements of selection size between minSelect and maxSelect (default:minSelect), inclusive +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.contains icon:book[]] + +apoc.coll.contains(coll, value) optimized contains operation (using a HashSet) (returns single row or not) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.containsAll icon:book[]] + +apoc.coll.containsAll(coll, values) optimized contains-all operation (using a HashSet) (returns single row or not) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.containsAllSorted icon:book[]] + +apoc.coll.containsAllSorted(coll, value) optimized contains-all on a sorted list operation (Collections.binarySearch) (returns single row or not) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.containsDuplicates icon:book[]] + +apoc.coll.containsDuplicates(coll) - returns true if a collection contains duplicate elements +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.containsSorted icon:book[]] + +apoc.coll.containsSorted(coll, value) optimized contains on a sorted list operation (Collections.binarySearch) (returns single row or not) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.different icon:book[]] + +apoc.coll.different(values) - returns true if values are different +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.disjunction icon:book[]] + +apoc.coll.disjunction(first, second) - returns the disjunct set of the two lists +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.dropDuplicateNeighbors icon:book[]] + +apoc.coll.dropDuplicateNeighbors(list) - remove duplicate consecutive objects in a list +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.duplicates icon:book[]] + +apoc.coll.duplicates(coll) - returns a list of duplicate items in the collection +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.duplicatesWithCount icon:book[]] + +apoc.coll.duplicatesWithCount(coll) - returns a list of duplicate items in the collection and their count, keyed by `item` and `count` (e.g., `[{item: xyz, count:2}, {item:zyx, count:5}]`) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.fill icon:book[]] + +apoc.coll.fill(item, count) - returns a list with the given count of items +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.flatten icon:book[]] + +apoc.coll.flatten(coll, [recursive]) - flattens list (nested if recursive is true) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.frequencies icon:book[]] + +apoc.coll.frequencies(coll) - returns a list of frequencies of the items in the collection, keyed by `item` and `count` (e.g., `[{item: xyz, count:2}, {item:zyx, count:5}, {item:abc, count:1}]`) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.frequenciesAsMap icon:book[]] + +apoc.coll.frequenciesAsMap(coll) - return a map of frequencies of the items in the collection, key `item`, value `count` (e.g., `{1:2, 2:1}`) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.indexOf icon:book[]] + +apoc.coll.indexOf(coll, value) \| position of value in the list +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.insert icon:book[]] + +apoc.coll.insert(coll, index, value) \| insert value at index +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.insertAll icon:book[]] + +apoc.coll.insertAll(coll, index, values) \| insert values at index +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.intersection icon:book[]] + +apoc.coll.intersection(first, second) - returns the unique intersection of the two lists +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.isEqualCollection icon:book[]] + +apoc.coll.isEqualCollection(coll, values) return true if two collections contain the same elements with the same cardinality in any order (using a HashMap) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.max icon:book[]] + +apoc.coll.max([0.5,1,2.3]) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.min icon:book[]] + +apoc.coll.min([0.5,1,2.3]) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.occurrences icon:book[]] + +apoc.coll.occurrences(coll, item) - returns the count of the given item in the collection +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.pairWithOffset icon:book[]] + +apoc.coll.pairWithOffset(values, offset) - returns a list of pairs defined by the offset +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.pairs icon:book[]] + +apoc.coll.pairs([1,2,3]) returns [1,2],[2,3],[3,null] +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.pairsMin icon:book[]] + +apoc.coll.pairsMin([1,2,3]) returns [1,2],[2,3] +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.partition icon:book[]] + +apoc.coll.partition(list,batchSize) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.randomItem icon:book[]] + +apoc.coll.randomItem(coll)- returns a random item from the list, or null on an empty or null list +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.randomItems icon:book[]] + +apoc.coll.randomItems(coll, itemCount, allowRepick: false) - returns a list of itemCount random items from the original list, optionally allowing picked elements to be picked again +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.remove icon:book[]] + +apoc.coll.remove(coll, index, [length=1]) \| remove range of values from index to length +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.removeAll icon:book[]] + +apoc.coll.removeAll(first, second) - returns first list with all elements of second list removed +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.reverse icon:book[]] + +apoc.coll.reverse(coll) - returns reversed list +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.runningTotal icon:book[]] + +apoc.coll.runningTotal(list1) - returns an accumulative array. For example apoc.coll.runningTotal([1,2,3.5]) return [1,3,6.5] +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.set icon:book[]] + +apoc.coll.set(coll, index, value) \| set index to value +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.shuffle icon:book[]] + +apoc.coll.shuffle(coll) - returns the shuffled list +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.sort icon:book[]] + +apoc.coll.sort(coll) sort on Collections +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.sortMaps icon:book[]] + +apoc.coll.sortMaps([maps], 'name') - sort maps by property +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.sortMulti icon:book[]] + +apoc.coll.sortMulti(coll, ['^name','age'],[limit],[skip]) - sort list of maps by several sort fields (ascending with ^ prefix) and optionally applies limit and skip +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.sortNodes icon:book[]] + +apoc.coll.sortNodes([nodes], 'name') sort nodes by property +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.sortText icon:book[]] + +apoc.coll.sortText(coll) sort on string based collections +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.stdev icon:book[]] + +apoc.coll.stdev(list, isBiasCorrected) - returns the sample or population standard deviation with isBiasCorrected true or false respectively. For example apoc.coll.stdev([10, 12, 23]) return 7 +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.subtract icon:book[]] + +apoc.coll.subtract(first, second) - returns unique set of first list with all elements of second list removed +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.sum icon:book[]] + +apoc.coll.sum([0.5,1,2.3]) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.sumLongs icon:book[]] + +apoc.coll.sumLongs([1,3,3]) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.toSet icon:book[]] + +apoc.coll.toSet([list]) returns a unique list backed by a set +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.union icon:book[]] + +apoc.coll.union(first, second) - creates the distinct union of the 2 lists +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.unionAll icon:book[]] + +apoc.coll.unionAll(first, second) - creates the full union with duplicates of the two lists +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.coll/apoc.coll.adoc[apoc.coll.zip icon:book[]] + +apoc.coll.zip([list1],[list2]) +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.coll.runningTotal.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.coll.runningTotal.adoc new file mode 100644 index 0000000000..a4266cd331 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.coll.runningTotal.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.coll/apoc.coll.runningTotal.adoc[apoc.coll.runningTotal icon:book[]] + + +`apoc.coll.runningTotal(list1)` - returns an accumulative array. For example apoc.coll.runningTotal([1,2,3.5]) return [1,3,6.5] +¦label:function[] +¦label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.coll.stdev-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.coll.stdev-lite.csv new file mode 100644 index 0000000000..db1057ae74 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.coll.stdev-lite.csv @@ -0,0 +1,2 @@ +¦signature +¦apoc.coll.stdev(list :: LIST? OF NUMBER?, isBiasCorrected = true :: BOOLEAN?) :: (NUMBER?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.coll.stdev.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.coll.stdev.adoc new file mode 100644 index 0000000000..042f7f8b1b --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.coll.stdev.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.coll/apoc.coll.stdev.adoc[apoc.coll.stdev icon:book[]] + + +`apoc.coll.stdev(list, isBiasCorrected)` - returns the sample or population standard deviation with isBiasCorrected true or false respectively. For example apoc.coll.stdev([10, 12, 23]) return 7 +¦label:function[] +¦label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.config.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.config.csv index 1f7a6dd49a..432bcb1705 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.config.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.config.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.config.list¦apoc.config.list() :: (key :: STRING?, value :: ANY?)¦apoc.config.list | Lists the Neo4j configuration as key,value table -¦procedure¦apoc.config.map¦apoc.config.map() :: (value :: MAP?)¦apoc.config.map | Lists the Neo4j configuration as map +¦Qualified Name¦Type¦Release +|xref::overview/apoc.config/apoc.config.adoc[apoc.config.list icon:book[]] + +apoc.config.list \| Lists the Neo4j configuration as key,value table +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.config/apoc.config.adoc[apoc.config.map icon:book[]] + +apoc.config.map \| Lists the Neo4j configuration as map +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert-lite.csv index 7d92e73c90..f2c1e3e73b 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert-lite.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert-lite.csv @@ -1,10 +1,10 @@ ¦signature ¦apoc.convert.setJsonProperty(node :: NODE?, key :: STRING?, value :: ANY?) :: VOID ¦apoc.convert.toTree(paths :: LIST? OF PATH?, lowerCaseRels = true :: BOOLEAN?, config = {} :: MAP?) :: (value :: MAP?) -¦apoc.convert.fromJsonList(list :: STRING?, path = :: STRING?) :: (LIST? OF ANY?) -¦apoc.convert.fromJsonMap(map :: STRING?, path = :: STRING?) :: (MAP?) -¦apoc.convert.getJsonProperty(node :: NODE?, key :: STRING?, path = :: STRING?) :: (ANY?) -¦apoc.convert.getJsonPropertyMap(node :: NODE?, key :: STRING?, path = :: STRING?) :: (MAP?) +¦apoc.convert.fromJsonList(list :: STRING?, path = :: STRING?, pathOptions = null :: LIST? OF STRING?) :: (LIST? OF ANY?) +¦apoc.convert.fromJsonMap(map :: STRING?, path = :: STRING?, pathOptions = null :: LIST? OF STRING?) :: (MAP?) +¦apoc.convert.getJsonProperty(node :: NODE?, key :: STRING?, path = :: STRING?, pathOptions = null :: LIST? OF STRING?) :: (ANY?) +¦apoc.convert.getJsonPropertyMap(node :: NODE?, key :: STRING?, path = :: STRING?, pathOptions = null :: LIST? OF STRING?) :: (MAP?) ¦apoc.convert.toBoolean(bool :: ANY?) :: (BOOLEAN?) ¦apoc.convert.toBooleanList(list :: ANY?) :: (LIST? OF ANY?) ¦apoc.convert.toFloat(object :: ANY?) :: (FLOAT?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.csv index b26d12a23a..c03f37564d 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.csv @@ -1,23 +1,111 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.convert.setJsonProperty¦apoc.convert.setJsonProperty(node :: NODE?, key :: STRING?, value :: ANY?) :: VOID¦apoc.convert.setJsonProperty(node,key,complexValue) - sets value serialized to JSON as property with the given name on the node -¦procedure¦apoc.convert.toTree¦apoc.convert.toTree(paths :: LIST? OF PATH?, lowerCaseRels = true :: BOOLEAN?, config = {} :: MAP?) :: (value :: MAP?)¦apoc.convert.toTree([paths],[lowerCaseRels=true], [config]) creates a stream of nested documents representing the at least one root of these paths -¦function¦apoc.convert.fromJsonList¦apoc.convert.fromJsonList(list :: STRING?, path = :: STRING?) :: (LIST? OF ANY?)¦apoc.convert.fromJsonList('[1,2,3]'[,'json-path']) -¦function¦apoc.convert.fromJsonMap¦apoc.convert.fromJsonMap(map :: STRING?, path = :: STRING?) :: (MAP?)¦apoc.convert.fromJsonMap('{"a":42,"b":"foo","c":[1,2,3]}'[,'json-path']) -¦function¦apoc.convert.getJsonProperty¦apoc.convert.getJsonProperty(node :: NODE?, key :: STRING?, path = :: STRING?) :: (ANY?)¦apoc.convert.getJsonProperty(node,key[,'json-path']) - converts serialized JSON in property back to original object -¦function¦apoc.convert.getJsonPropertyMap¦apoc.convert.getJsonPropertyMap(node :: NODE?, key :: STRING?, path = :: STRING?) :: (MAP?)¦apoc.convert.getJsonPropertyMap(node,key[,'json-path']) - converts serialized JSON in property back to map -¦function¦apoc.convert.toBoolean¦apoc.convert.toBoolean(bool :: ANY?) :: (BOOLEAN?)¦apoc.convert.toBoolean(value) | tries it's best to convert the value to a boolean -¦function¦apoc.convert.toBooleanList¦apoc.convert.toBooleanList(list :: ANY?) :: (LIST? OF ANY?)¦apoc.convert.toBooleanList(value) | tries it's best to convert the value to a list of booleans -¦function¦apoc.convert.toFloat¦apoc.convert.toFloat(object :: ANY?) :: (FLOAT?)¦apoc.convert.toFloat(value) | tries it's best to convert the value to a float -¦function¦apoc.convert.toIntList¦apoc.convert.toIntList(list :: ANY?) :: (LIST? OF ANY?)¦apoc.convert.toIntList(value) | tries it's best to convert the value to a list of integers -¦function¦apoc.convert.toInteger¦apoc.convert.toInteger(object :: ANY?) :: (INTEGER?)¦apoc.convert.toInteger(value) | tries it's best to convert the value to an integer -¦function¦apoc.convert.toJson¦apoc.convert.toJson(value :: ANY?) :: (STRING?)¦apoc.convert.toJson([1,2,3]) or toJson({a:42,b:"foo",c:[1,2,3]}) or toJson(NODE/REL/PATH) -¦function¦apoc.convert.toList¦apoc.convert.toList(list :: ANY?) :: (LIST? OF ANY?)¦apoc.convert.toList(value) | tries it's best to convert the value to a list -¦function¦apoc.convert.toMap¦apoc.convert.toMap(map :: ANY?) :: (MAP?)¦apoc.convert.toMap(value) | tries it's best to convert the value to a map -¦function¦apoc.convert.toNode¦apoc.convert.toNode(node :: ANY?) :: (NODE?)¦apoc.convert.toNode(value) | tries it's best to convert the value to a node -¦function¦apoc.convert.toNodeList¦apoc.convert.toNodeList(list :: ANY?) :: (LIST? OF ANY?)¦apoc.convert.toNodeList(value) | tries it's best to convert the value to a list of nodes -¦function¦apoc.convert.toRelationship¦apoc.convert.toRelationship(relationship :: ANY?) :: (RELATIONSHIP?)¦apoc.convert.toRelationship(value) | tries it's best to convert the value to a relationship -¦function¦apoc.convert.toRelationshipList¦apoc.convert.toRelationshipList(list :: ANY?) :: (LIST? OF ANY?)¦apoc.convert.toRelationshipList(value) | tries it's best to convert the value to a list of relationships -¦function¦apoc.convert.toSet¦apoc.convert.toSet(list :: ANY?) :: (LIST? OF ANY?)¦apoc.convert.toSet(value) | tries it's best to convert the value to a set -¦function¦apoc.convert.toSortedJsonMap¦apoc.convert.toSortedJsonMap(value :: ANY?, ignoreCase = true :: BOOLEAN?) :: (STRING?)¦apoc.convert.toSortedJsonMap(node|map, ignoreCase:true) - returns a JSON map with keys sorted alphabetically, with optional case sensitivity -¦function¦apoc.convert.toString¦apoc.convert.toString(string :: ANY?) :: (STRING?)¦apoc.convert.toString(value) | tries it's best to convert the value to a string -¦function¦apoc.convert.toStringList¦apoc.convert.toStringList(list :: ANY?) :: (LIST? OF ANY?)¦apoc.convert.toStringList(value) | tries it's best to convert the value to a list of strings +¦Qualified Name¦Type¦Release +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.setJsonProperty icon:book[]] + +apoc.convert.setJsonProperty(node,key,complexValue) - sets value serialized to JSON as property with the given name on the node +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.toTree icon:book[]] + +apoc.convert.toTree([paths],[lowerCaseRels=true], [config]) creates a stream of nested documents representing the at least one root of these paths +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.fromJsonList icon:book[]] + +apoc.convert.fromJsonList('[1,2,3]'[,'json-path', 'path-options']) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.fromJsonMap icon:book[]] + +apoc.convert.fromJsonMap('{"a":42,"b":"foo","c":[1,2,3]}'[,'json-path', 'path-options']) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.getJsonProperty icon:book[]] + +apoc.convert.getJsonProperty(node,key[,'json-path', 'path-options']) - converts serialized JSON in property back to original object +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.getJsonPropertyMap icon:book[]] + +apoc.convert.getJsonPropertyMap(node,key[,'json-path', 'path-options']) - converts serialized JSON in property back to map +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.toBoolean icon:book[]] + +apoc.convert.toBoolean(value) \| tries it's best to convert the value to a boolean +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.toBooleanList icon:book[]] + +apoc.convert.toBooleanList(value) \| tries it's best to convert the value to a list of booleans +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.toFloat icon:book[]] + +apoc.convert.toFloat(value) \| tries it's best to convert the value to a float +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.toIntList icon:book[]] + +apoc.convert.toIntList(value) \| tries it's best to convert the value to a list of integers +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.toInteger icon:book[]] + +apoc.convert.toInteger(value) \| tries it's best to convert the value to an integer +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.toJson icon:book[]] + +apoc.convert.toJson([1,2,3]) or toJson({a:42,b:"foo",c:[1,2,3]}) or toJson(NODE/REL/PATH) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.toList icon:book[]] + +apoc.convert.toList(value) \| tries it's best to convert the value to a list +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.toMap icon:book[]] + +apoc.convert.toMap(value) \| tries it's best to convert the value to a map +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.toNode icon:book[]] + +apoc.convert.toNode(value) \| tries it's best to convert the value to a node +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.toNodeList icon:book[]] + +apoc.convert.toNodeList(value) \| tries it's best to convert the value to a list of nodes +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.toRelationship icon:book[]] + +apoc.convert.toRelationship(value) \| tries it's best to convert the value to a relationship +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.toRelationshipList icon:book[]] + +apoc.convert.toRelationshipList(value) \| tries it's best to convert the value to a list of relationships +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.toSet icon:book[]] + +apoc.convert.toSet(value) \| tries it's best to convert the value to a set +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.toSortedJsonMap icon:book[]] + +apoc.convert.toSortedJsonMap(node\|map, ignoreCase:true) - returns a JSON map with keys sorted alphabetically, with optional case sensitivity +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.toString icon:book[]] + +apoc.convert.toString(value) \| tries it's best to convert the value to a string +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.convert/apoc.convert.adoc[apoc.convert.toStringList icon:book[]] + +apoc.convert.toStringList(value) \| tries it's best to convert the value to a list of strings +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.fromJsonList-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.fromJsonList-lite.csv index f1f49069d1..c66cfc4f1e 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.fromJsonList-lite.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.fromJsonList-lite.csv @@ -1,2 +1,2 @@ ¦signature -¦apoc.convert.fromJsonList(list :: STRING?, path = :: STRING?) :: (LIST? OF ANY?) +¦apoc.convert.fromJsonList(list :: STRING?, path = :: STRING?, pathOptions = null :: LIST? OF STRING?) :: (LIST? OF ANY?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.fromJsonList.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.fromJsonList.csv index 749f7b60a2..50b4368239 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.fromJsonList.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.fromJsonList.csv @@ -1,2 +1,2 @@ ¦type¦qualified name¦signature¦description -¦function¦apoc.convert.fromJsonList¦apoc.convert.fromJsonList(list :: STRING?, path = :: STRING?) :: (LIST? OF ANY?)¦apoc.convert.fromJsonList('[1,2,3]'[,'json-path']) +¦function¦apoc.convert.fromJsonList¦apoc.convert.fromJsonList(list :: STRING?, path = :: STRING?) :: (LIST? OF ANY?)¦apoc.convert.fromJsonList('[1,2,3]'[,'json-path', 'path-options']) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.fromJsonMap-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.fromJsonMap-lite.csv index 37bc1faf35..fdde33b6b6 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.fromJsonMap-lite.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.fromJsonMap-lite.csv @@ -1,2 +1,2 @@ ¦signature -¦apoc.convert.fromJsonMap(map :: STRING?, path = :: STRING?) :: (MAP?) +¦apoc.convert.fromJsonMap(map :: STRING?, path = :: STRING?, pathOptions = null :: LIST? OF STRING?) :: (MAP?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.fromJsonMap.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.fromJsonMap.csv index f399ed05ca..c61f700962 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.fromJsonMap.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.fromJsonMap.csv @@ -1,2 +1,2 @@ ¦type¦qualified name¦signature¦description -¦function¦apoc.convert.fromJsonMap¦apoc.convert.fromJsonMap(map :: STRING?, path = :: STRING?) :: (MAP?)¦apoc.convert.fromJsonMap('{"a":42,"b":"foo","c":[1,2,3]}'[,'json-path']) +¦function¦apoc.convert.fromJsonMap¦apoc.convert.fromJsonMap(map :: STRING?, path = :: STRING?) :: (MAP?)¦apoc.convert.fromJsonMap('{"a":42,"b":"foo","c":[1,2,3]}'[,'json-path', 'path-options']) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.getJsonProperty-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.getJsonProperty-lite.csv index 5adf87b7b1..4688389b98 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.getJsonProperty-lite.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.getJsonProperty-lite.csv @@ -1,2 +1,2 @@ ¦signature -¦apoc.convert.getJsonProperty(node :: NODE?, key :: STRING?, path = :: STRING?) :: (ANY?) +¦apoc.convert.getJsonProperty(node :: NODE?, key :: STRING?, path = :: STRING?, pathOptions = null :: LIST? OF STRING?) :: (ANY?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.getJsonProperty.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.getJsonProperty.csv index b1161f48ee..3555a2c78b 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.getJsonProperty.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.getJsonProperty.csv @@ -1,2 +1,2 @@ ¦type¦qualified name¦signature¦description -¦function¦apoc.convert.getJsonProperty¦apoc.convert.getJsonProperty(node :: NODE?, key :: STRING?, path = :: STRING?) :: (ANY?)¦apoc.convert.getJsonProperty(node,key[,'json-path']) - converts serialized JSON in property back to original object +¦function¦apoc.convert.getJsonProperty¦apoc.convert.getJsonProperty(node :: NODE?, key :: STRING?, path = :: STRING?) :: (ANY?)¦apoc.convert.getJsonProperty(node,key[,'json-path', 'path-options']) - converts serialized JSON in property back to original object diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.getJsonPropertyMap-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.getJsonPropertyMap-lite.csv index 8ddd72b44c..957e5cbe1c 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.getJsonPropertyMap-lite.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.getJsonPropertyMap-lite.csv @@ -1,2 +1,2 @@ ¦signature -¦apoc.convert.getJsonPropertyMap(node :: NODE?, key :: STRING?, path = :: STRING?) :: (MAP?) +¦apoc.convert.getJsonPropertyMap(node :: NODE?, key :: STRING?, path = :: STRING?, pathOptions = null :: LIST? OF STRING?) :: (MAP?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.getJsonPropertyMap.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.getJsonPropertyMap.csv index 37f50f7087..1e1d89ba79 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.getJsonPropertyMap.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.getJsonPropertyMap.csv @@ -1,2 +1,2 @@ ¦type¦qualified name¦signature¦description -¦function¦apoc.convert.getJsonPropertyMap¦apoc.convert.getJsonPropertyMap(node :: NODE?, key :: STRING?, path = :: STRING?) :: (MAP?)¦apoc.convert.getJsonPropertyMap(node,key[,'json-path']) - converts serialized JSON in property back to map +¦function¦apoc.convert.getJsonPropertyMap¦apoc.convert.getJsonPropertyMap(node :: NODE?, key :: STRING?, path = :: STRING?) :: (MAP?)¦apoc.convert.getJsonPropertyMap(node,key[,'json-path', 'path-options']) - converts serialized JSON in property back to map diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.toJson.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.toJson.adoc index 1d18409b50..d816a90953 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.toJson.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.convert.toJson.adoc @@ -1,5 +1,5 @@ ¦xref::overview/apoc.convert/apoc.convert.toJson.adoc[apoc.convert.toJson icon:book[]] + -`apoc.convert.toJson([1,2,3]) or toJson({a:42,b:"foo",c:[1,2,3]})` +`apoc.convert.toJson([1,2,3]) or toJson({a:42,b:"foo",c:[1,2,3]}) or toJson(NODE/REL/PATH)` ¦label:function[] ¦label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.couchbase.append.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.couchbase.append.adoc index cd8eeebcc9..88a66fb444 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.couchbase.append.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.couchbase.append.adoc @@ -1,5 +1,5 @@ ¦xref::overview/apoc.couchbase/apoc.couchbase.append.adoc[apoc.couchbase.append icon:book[]] + -`apoc.couchbase.append(hostOrKey, bucket, documentId, jsonDocument) yield id, expiry, cas, mutationToken, content` - append a couchbase json document to an existing one. +`apoc.couchbase.append(hostOrKey, bucket, documentId, content) yield id, expiry, cas, mutationToken, content` - append a couchbase json document to an existing one. ¦label:procedure[] ¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.couchbase.prepend.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.couchbase.prepend.adoc index 372a66a682..2851f9d874 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.couchbase.prepend.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.couchbase.prepend.adoc @@ -1,5 +1,5 @@ ¦xref::overview/apoc.couchbase/apoc.couchbase.prepend.adoc[apoc.couchbase.prepend icon:book[]] + -`apoc.couchbase.prepend(hostOrKey, bucket, documentId, jsonDocument) yield id, expiry, cas, mutationToken, content` - prepend a couchbase json document to an existing one. +`apoc.couchbase.prepend(hostOrKey, bucket, documentId, content) yield id, expiry, cas, mutationToken, content` - prepend a couchbase json document to an existing one. ¦label:procedure[] ¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create-lite.csv index 0d64aaa218..eed1b064b2 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create-lite.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create-lite.csv @@ -14,6 +14,8 @@ ¦apoc.create.uuids(count :: INTEGER?) :: (row :: INTEGER?, uuid :: STRING?) ¦apoc.create.vNode(label :: LIST? OF STRING?, props :: MAP?) :: (node :: NODE?) ¦apoc.create.vNodes(label :: LIST? OF STRING?, props :: LIST? OF MAP?) :: (node :: NODE?) +¦apoc.create.clonePathToVirtual(path :: PATH?) :: (path :: PATH?) +¦apoc.create.clonePathsToVirtual(paths :: LIST? OF PATH?) :: (path :: PATH?) ¦apoc.create.vPattern(from :: MAP?, relType :: STRING?, props :: MAP?, to :: MAP?) :: (from :: NODE?, rel :: RELATIONSHIP?, to :: NODE?) ¦apoc.create.vPatternFull(labelsN :: LIST? OF STRING?, n :: MAP?, relType :: STRING?, props :: MAP?, labelsM :: LIST? OF STRING?, m :: MAP?) :: (from :: NODE?, rel :: RELATIONSHIP?, to :: NODE?) ¦apoc.create.vRelationship(from :: NODE?, relType :: STRING?, props :: MAP?, to :: NODE?) :: (rel :: RELATIONSHIP?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.clonePathToVirtual-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.clonePathToVirtual-lite.csv new file mode 100644 index 0000000000..fbcece4741 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.clonePathToVirtual-lite.csv @@ -0,0 +1,2 @@ +¦signature +¦apoc.create.clonePathToVirtual(path :: PATH?) :: (path :: PATH?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.clonePathToVirtual.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.clonePathToVirtual.adoc new file mode 100644 index 0000000000..e810180f0f --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.clonePathToVirtual.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.create/apoc.create.clonePathToVirtual.adoc[apoc.create.clonePathToVirtual icon:book[]] + + + +¦label:procedure[] +¦label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.clonePathsToVirtual-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.clonePathsToVirtual-lite.csv new file mode 100644 index 0000000000..b8f301ec08 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.clonePathsToVirtual-lite.csv @@ -0,0 +1,2 @@ +¦signature +¦apoc.create.clonePathsToVirtual(paths :: LIST? OF PATH?) :: (path :: PATH?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.clonePathsToVirtual.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.clonePathsToVirtual.adoc new file mode 100644 index 0000000000..ebad7f144b --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.clonePathsToVirtual.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.create/apoc.create.clonePathsToVirtual.adoc[apoc.create.clonePathsToVirtual icon:book[]] + + + +¦label:procedure[] +¦label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.csv index 2ed44afce9..64794b9d01 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.csv @@ -1,23 +1,121 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.create.addLabels¦apoc.create.addLabels(nodes :: ANY?, label :: LIST? OF STRING?) :: (node :: NODE?)¦apoc.create.addLabels( [node,id,ids,nodes], ['Label',...]) - adds the given labels to the node or nodes -¦procedure¦apoc.create.node¦apoc.create.node(label :: LIST? OF STRING?, props :: MAP?) :: (node :: NODE?)¦apoc.create.node(['Label'], {key:value,...}) - create node with dynamic labels -¦procedure¦apoc.create.nodes¦apoc.create.nodes(label :: LIST? OF STRING?, props :: LIST? OF MAP?) :: (node :: NODE?)¦apoc.create.nodes(['Label'], [{key:value,...}]) create multiple nodes with dynamic labels -¦procedure¦apoc.create.relationship¦apoc.create.relationship(from :: NODE?, relType :: STRING?, props :: MAP?, to :: NODE?) :: (rel :: RELATIONSHIP?)¦apoc.create.relationship(person1,'KNOWS',{key:value,...}, person2) create relationship with dynamic rel-type -¦procedure¦apoc.create.removeLabels¦apoc.create.removeLabels(nodes :: ANY?, label :: LIST? OF STRING?) :: (node :: NODE?)¦apoc.create.removeLabels( [node,id,ids,nodes], ['Label',...]) - removes the given labels from the node or nodes -¦procedure¦apoc.create.removeProperties¦apoc.create.removeProperties(nodes :: ANY?, keys :: LIST? OF STRING?) :: (node :: NODE?)¦apoc.create.removeProperties( [node,id,ids,nodes], [keys]) - removes the given properties from the nodes(s) -¦procedure¦apoc.create.removeRelProperties¦apoc.create.removeRelProperties(rels :: ANY?, keys :: LIST? OF STRING?) :: (rel :: RELATIONSHIP?)¦apoc.create.removeRelProperties( [rel,id,ids,rels], [keys]) - removes the given properties from the relationship(s) -¦procedure¦apoc.create.setLabels¦apoc.create.setLabels(nodes :: ANY?, label :: LIST? OF STRING?) :: (node :: NODE?)¦apoc.create.setLabels( [node,id,ids,nodes], ['Label',...]) - sets the given labels, non matching labels are removed on the node or nodes -¦procedure¦apoc.create.setProperties¦apoc.create.setProperties(nodes :: ANY?, keys :: LIST? OF STRING?, values :: LIST? OF ANY?) :: (node :: NODE?)¦apoc.create.setProperties( [node,id,ids,nodes], [keys], [values]) - sets the given properties on the nodes(s) -¦procedure¦apoc.create.setProperty¦apoc.create.setProperty(nodes :: ANY?, key :: STRING?, value :: ANY?) :: (node :: NODE?)¦apoc.create.setProperty( [node,id,ids,nodes], key, value) - sets the given property on the node(s) -¦procedure¦apoc.create.setRelProperties¦apoc.create.setRelProperties(rels :: ANY?, keys :: LIST? OF STRING?, values :: LIST? OF ANY?) :: (rel :: RELATIONSHIP?)¦apoc.create.setRelProperties( [rel,id,ids,rels], [keys], [values]) - sets the given properties on the relationship(s) -¦procedure¦apoc.create.setRelProperty¦apoc.create.setRelProperty(relationships :: ANY?, key :: STRING?, value :: ANY?) :: (rel :: RELATIONSHIP?)¦apoc.create.setRelProperty( [rel,id,ids,rels], key, value) - sets the given property on the relationship(s) -¦procedure¦apoc.create.uuids¦apoc.create.uuids(count :: INTEGER?) :: (row :: INTEGER?, uuid :: STRING?)¦apoc.create.uuids(count) yield uuid - creates 'count' UUIDs -¦procedure¦apoc.create.vNode¦apoc.create.vNode(label :: LIST? OF STRING?, props :: MAP?) :: (node :: NODE?)¦apoc.create.vNode(['Label'], {key:value,...}) returns a virtual node -¦procedure¦apoc.create.vNodes¦apoc.create.vNodes(label :: LIST? OF STRING?, props :: LIST? OF MAP?) :: (node :: NODE?)¦apoc.create.vNodes(['Label'], [{key:value,...}]) returns virtual nodes -¦procedure¦apoc.create.vPattern¦apoc.create.vPattern(from :: MAP?, relType :: STRING?, props :: MAP?, to :: MAP?) :: (from :: NODE?, rel :: RELATIONSHIP?, to :: NODE?)¦apoc.create.vPattern({_labels:['LabelA'],key:value},'KNOWS',{key:value,...}, {_labels:['LabelB'],key:value}) returns a virtual pattern -¦procedure¦apoc.create.vPatternFull¦apoc.create.vPatternFull(labelsN :: LIST? OF STRING?, n :: MAP?, relType :: STRING?, props :: MAP?, labelsM :: LIST? OF STRING?, m :: MAP?) :: (from :: NODE?, rel :: RELATIONSHIP?, to :: NODE?)¦apoc.create.vPatternFull(['LabelA'],{key:value},'KNOWS',{key:value,...},['LabelB'],{key:value}) returns a virtual pattern -¦procedure¦apoc.create.vRelationship¦apoc.create.vRelationship(from :: NODE?, relType :: STRING?, props :: MAP?, to :: NODE?) :: (rel :: RELATIONSHIP?)¦apoc.create.vRelationship(nodeFrom,'KNOWS',{key:value,...}, nodeTo) returns a virtual relationship -¦procedure¦apoc.create.virtualPath¦apoc.create.virtualPath(labelsN :: LIST? OF STRING?, n :: MAP?, relType :: STRING?, props :: MAP?, labelsM :: LIST? OF STRING?, m :: MAP?) :: (from :: NODE?, rel :: RELATIONSHIP?, to :: NODE?)¦apoc.create.virtualPath(['LabelA'],{key:value},'KNOWS',{key:value,...},['LabelB'],{key:value}) returns a virtual path of nodes joined by a relationship and the associated properties -¦function¦apoc.create.uuid¦apoc.create.uuid() :: (STRING?)¦apoc.create.uuid() - creates an UUID -¦function¦apoc.create.vNode¦apoc.create.vNode(label :: LIST? OF STRING?, props = {} :: MAP?) :: (NODE?)¦apoc.create.vNode(['Label'], {key:value,...}) returns a virtual node -¦function¦apoc.create.vRelationship¦apoc.create.vRelationship(from :: NODE?, relType :: STRING?, props :: MAP?, to :: NODE?) :: (RELATIONSHIP?)¦apoc.create.vRelationship(nodeFrom,'KNOWS',{key:value,...}, nodeTo) returns a virtual relationship +¦Qualified Name¦Type¦Release +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.addLabels icon:book[]] + +apoc.create.addLabels( [node,id,ids,nodes], ['Label',...]) - adds the given labels to the node or nodes +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.node icon:book[]] + +apoc.create.node(['Label'], {key:value,...}) - create node with dynamic labels +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.nodes icon:book[]] + +apoc.create.nodes(['Label'], [{key:value,...}]) create multiple nodes with dynamic labels +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.relationship icon:book[]] + +apoc.create.relationship(person1,'KNOWS',{key:value,...}, person2) create relationship with dynamic rel-type +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.removeLabels icon:book[]] + +apoc.create.removeLabels( [node,id,ids,nodes], ['Label',...]) - removes the given labels from the node or nodes +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.removeProperties icon:book[]] + +apoc.create.removeProperties( [node,id,ids,nodes], [keys]) - removes the given properties from the nodes(s) +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.removeRelProperties icon:book[]] + +apoc.create.removeRelProperties( [rel,id,ids,rels], [keys]) - removes the given properties from the relationship(s) +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.setLabels icon:book[]] + +apoc.create.setLabels( [node,id,ids,nodes], ['Label',...]) - sets the given labels, non matching labels are removed on the node or nodes +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.setProperties icon:book[]] + +apoc.create.setProperties( [node,id,ids,nodes], [keys], [values]) - sets the given properties on the nodes(s) +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.setProperty icon:book[]] + +apoc.create.setProperty( [node,id,ids,nodes], key, value) - sets the given property on the node(s) +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.setRelProperties icon:book[]] + +apoc.create.setRelProperties( [rel,id,ids,rels], [keys], [values]) - sets the given properties on the relationship(s) +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.setRelProperty icon:book[]] + +apoc.create.setRelProperty( [rel,id,ids,rels], key, value) - sets the given property on the relationship(s) +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.uuids icon:book[]] + +apoc.create.uuids(count) yield uuid - creates 'count' UUIDs +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.vNode icon:book[]] + +apoc.create.vNode(['Label'], {key:value,...}) returns a virtual node +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.vNodes icon:book[]] + +apoc.create.vNodes(['Label'], [{key:value,...}]) returns virtual nodes +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.clonePathToVirtual icon:book[]] + +apoc.create.clonePathToVirtual +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.clonePathsToVirtual icon:book[]] + +apoc.create.clonePathsToVirtual +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.vPattern icon:book[]] + +apoc.create.vPattern({_labels:['LabelA'],key:value},'KNOWS',{key:value,...}, {_labels:['LabelB'],key:value}) returns a virtual pattern +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.vPatternFull icon:book[]] + +apoc.create.vPatternFull(['LabelA'],{key:value},'KNOWS',{key:value,...},['LabelB'],{key:value}) returns a virtual pattern +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.vRelationship icon:book[]] + +apoc.create.vRelationship(nodeFrom,'KNOWS',{key:value,...}, nodeTo) returns a virtual relationship +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.virtualPath icon:book[]] + +apoc.create.virtualPath(['LabelA'],{key:value},'KNOWS',{key:value,...},['LabelB'],{key:value}) returns a virtual path of nodes joined by a relationship and the associated properties +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.uuid icon:book[]] + +apoc.create.uuid() - creates an UUID +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.vNode icon:book[]] + +apoc.create.vNode(['Label'], {key:value,...}) returns a virtual node +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.create/apoc.create.adoc[apoc.create.vRelationship icon:book[]] + +apoc.create.vRelationship(nodeFrom,'KNOWS',{key:value,...}, nodeTo) returns a virtual relationship +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.virtual.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.virtual.csv index 7d72367e55..47569649c7 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.virtual.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.virtual.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.create.virtual.fromNode¦apoc.create.virtual.fromNode(node :: NODE?, propertyNames :: LIST? OF STRING?) :: (NODE?)¦apoc.create.virtual.fromNode(node, [propertyNames]) returns a virtual node built from an existing node with only the requested properties +¦Qualified Name¦Type¦Release +|xref::overview/apoc.create.virtual/apoc.create.adoc[apoc.create.virtual.fromNode icon:book[]] + +apoc.create.virtual.fromNode(node, [propertyNames]) returns a virtual node built from an existing node with only the requested properties +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.virtual.fromNode.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.virtual.fromNode.adoc index c430256491..a65ce2fcb2 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.virtual.fromNode.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.create.virtual.fromNode.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.create.virtual/apoc.create.virtual.fromNode.adoc[apoc.create.virtual.fromNode icon:book[]] + +¦xref::overview/apoc.create/apoc.create.virtual.fromNode.adoc[apoc.create.virtual.fromNode icon:book[]] + `apoc.create.virtual.fromNode(node, [propertyNames]) returns a virtual node built from an existing node with only the requested properties` ¦label:function[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.csv index 0d7ae2b1ff..d1dea12850 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.csv @@ -1,5 +1,21 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.case¦apoc.case(conditionals :: LIST? OF ANY?, elseQuery = :: STRING?, params = {} :: MAP?) :: (value :: MAP?)¦apoc.case([condition, query, condition, query, ...], elseQuery:'', params:{}) yield value - given a list of conditional / read-only query pairs, executes the query associated with the first conditional evaluating to true (or the else query if none are true) with the given parameters -¦procedure¦apoc.help¦apoc.help(proc :: STRING?) :: (type :: STRING?, name :: STRING?, text :: STRING?, signature :: STRING?, roles :: LIST? OF STRING?, writes :: BOOLEAN?, core :: BOOLEAN?)¦Provides descriptions of available procedures. To narrow the results, supply a search string. To also search in the description text, append + to the end of the search string. -¦procedure¦apoc.when¦apoc.when(condition :: BOOLEAN?, ifQuery :: STRING?, elseQuery = :: STRING?, params = {} :: MAP?) :: (value :: MAP?)¦apoc.when(condition, ifQuery, elseQuery:'', params:{}) yield value - based on the conditional, executes read-only ifQuery or elseQuery with the given parameters -¦function¦apoc.version¦apoc.version() :: (STRING?)¦RETURN apoc.version() | return the current APOC installed version +¦Qualified Name¦Type¦Release +|xref::overview/apoc/apoc.adoc[apoc.case icon:book[]] + +apoc.case([condition, query, condition, query, ...], elseQuery:'', params:{}) yield value - given a list of conditional / read-only query pairs, executes the query associated with the first conditional evaluating to true (or the else query if none are true) with the given parameters +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc/apoc.adoc[apoc.help icon:book[]] + +Provides descriptions of available procedures. To narrow the results, supply a search string. To also search in the description text, append + to the end of the search string. +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc/apoc.adoc[apoc.when icon:book[]] + +apoc.when(condition, ifQuery, elseQuery:'', params:{}) yield value - based on the conditional, executes read-only ifQuery or elseQuery with the given parameters +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc/apoc.adoc[apoc.version icon:book[]] + +RETURN apoc.version() \| return the current APOC installed version +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.csv index 20233f8352..7d34f76d36 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.csv @@ -1,8 +1,36 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.custom.asFunction¦apoc.custom.asFunction(name :: STRING?, statement :: STRING?, outputs = :: STRING?, inputs = null :: LIST? OF LIST? OF STRING?, forceSingle = false :: BOOLEAN?, description = :: STRING?) :: VOID¦apoc.custom.asFunction(name, statement, outputs, inputs, forceSingle, description) - register a custom cypher function -¦procedure¦apoc.custom.asProcedure¦apoc.custom.asProcedure(name :: STRING?, statement :: STRING?, mode = read :: STRING?, outputs = null :: LIST? OF LIST? OF STRING?, inputs = null :: LIST? OF LIST? OF STRING?, description = :: STRING?) :: VOID¦apoc.custom.asProcedure(name, statement, mode, outputs, inputs, description) - register a custom cypher procedure -¦procedure¦apoc.custom.declareFunction¦apoc.custom.declareFunction(signature :: STRING?, statement :: STRING?, forceSingle = false :: BOOLEAN?, description = :: STRING?) :: VOID¦apoc.custom.declareFunction(signature, statement, forceSingle, description) - register a custom cypher function -¦procedure¦apoc.custom.declareProcedure¦apoc.custom.declareProcedure(signature :: STRING?, statement :: STRING?, mode = read :: STRING?, description = :: STRING?) :: VOID¦apoc.custom.declareProcedure(signature, statement, mode, description) - register a custom cypher procedure -¦procedure¦apoc.custom.list¦apoc.custom.list() :: (type :: STRING?, name :: STRING?, description :: STRING?, mode :: STRING?, statement :: STRING?, inputs :: LIST? OF LIST? OF STRING?, outputs :: ANY?, forceSingle :: BOOLEAN?)¦apoc.custom.list() - provide a list of custom procedures/function registered -¦procedure¦apoc.custom.removeFunction¦apoc.custom.removeFunction(name :: STRING?) :: VOID¦apoc.custom.removeFunction(name, type) - remove the targeted custom function -¦procedure¦apoc.custom.removeProcedure¦apoc.custom.removeProcedure(name :: STRING?) :: VOID¦apoc.custom.removeProcedure(name) - remove the targeted custom procedure +¦Qualified Name¦Type¦Release +|xref::overview/apoc.custom/apoc.custom.adoc[apoc.custom.asFunction icon:book[]] + +apoc.custom.asFunction(name, statement, outputs, inputs, forceSingle, description) - register a custom cypher function +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.custom/apoc.custom.adoc[apoc.custom.asProcedure icon:book[]] + +apoc.custom.asProcedure(name, statement, mode, outputs, inputs, description) - register a custom cypher procedure +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.custom/apoc.custom.adoc[apoc.custom.declareFunction icon:book[]] + +apoc.custom.declareFunction(signature, statement, forceSingle, description) - register a custom cypher function +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.custom/apoc.custom.adoc[apoc.custom.declareProcedure icon:book[]] + +apoc.custom.declareProcedure(signature, statement, mode, description) - register a custom cypher procedure +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.custom/apoc.custom.adoc[apoc.custom.list icon:book[]] + +apoc.custom.list() - provide a list of custom procedures/function registered +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.custom/apoc.custom.adoc[apoc.custom.removeFunction icon:book[]] + +apoc.custom.removeFunction(name, type) - remove the targeted custom function +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.custom/apoc.custom.adoc[apoc.custom.removeProcedure icon:book[]] + +apoc.custom.removeProcedure(name) - remove the targeted custom procedure +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.cypher.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.cypher.csv index 5ee7a0d136..d77fdefaf3 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.cypher.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.cypher.csv @@ -1,18 +1,86 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.cypher.doIt¦apoc.cypher.doIt(cypher :: STRING?, params :: MAP?) :: (value :: MAP?)¦apoc.cypher.doIt(fragment, params) yield value - executes writing fragment with the given parameters -¦procedure¦apoc.cypher.mapParallel¦apoc.cypher.mapParallel(fragment :: STRING?, params :: MAP?, list :: LIST? OF ANY?) :: (value :: MAP?)¦apoc.cypher.mapParallel(fragment, params, list-to-parallelize) yield value - executes fragment in parallel batches with the list segments being assigned to _ -¦procedure¦apoc.cypher.mapParallel2¦apoc.cypher.mapParallel2(fragment :: STRING?, params :: MAP?, list :: LIST? OF ANY?, partitions :: INTEGER?, timeout = 10 :: INTEGER?) :: (value :: MAP?)¦apoc.cypher.mapParallel2(fragment, params, list-to-parallelize) yield value - executes fragment in parallel batches with the list segments being assigned to _ -¦procedure¦apoc.cypher.parallel¦apoc.cypher.parallel(fragment :: STRING?, params :: MAP?, parallelizeOn :: STRING?) :: (value :: MAP?)¦ -¦procedure¦apoc.cypher.parallel2¦apoc.cypher.parallel2(fragment :: STRING?, params :: MAP?, parallelizeOn :: STRING?) :: (value :: MAP?)¦ -¦procedure¦apoc.cypher.run¦apoc.cypher.run(cypher :: STRING?, params :: MAP?) :: (value :: MAP?)¦apoc.cypher.run(fragment, params) yield value - executes reading fragment with the given parameters - currently no schema operations -¦procedure¦apoc.cypher.runFile¦apoc.cypher.runFile(file :: STRING?, config = {} :: MAP?) :: (row :: INTEGER?, result :: MAP?)¦apoc.cypher.runFile(file or url,[{statistics:true,timeout:10,parameters:{}}]) - runs each statement in the file, all semicolon separated - currently no schema operations -¦procedure¦apoc.cypher.runFiles¦apoc.cypher.runFiles(file :: LIST? OF STRING?, config = {} :: MAP?) :: (row :: INTEGER?, result :: MAP?)¦apoc.cypher.runFiles([files or urls],[{statistics:true,timeout:10,parameters:{}}])) - runs each statement in the files, all semicolon separated -¦procedure¦apoc.cypher.runMany¦apoc.cypher.runMany(cypher :: STRING?, params :: MAP?, config = {} :: MAP?) :: (row :: INTEGER?, result :: MAP?)¦apoc.cypher.runMany('cypher;\nstatements;',\{params},[{statistics:true,timeout:10}]) - runs each semicolon separated statement and returns summary - currently no schema operations -¦procedure¦apoc.cypher.runSchema¦apoc.cypher.runSchema(cypher :: STRING?, params :: MAP?) :: (value :: MAP?)¦apoc.cypher.runSchema(statement, params) yield value - executes query schema statement with the given parameters -¦procedure¦apoc.cypher.runSchemaFile¦apoc.cypher.runSchemaFile(file :: STRING?, config = {} :: MAP?) :: (row :: INTEGER?, result :: MAP?)¦apoc.cypher.runSchemaFile(file or url,[{statistics:true,timeout:10}]) - allows only schema operations, runs each schema statement in the file, all semicolon separated -¦procedure¦apoc.cypher.runSchemaFiles¦apoc.cypher.runSchemaFiles(file :: LIST? OF STRING?, config = {} :: MAP?) :: (row :: INTEGER?, result :: MAP?)¦apoc.cypher.runSchemaFiles([files or urls],{statistics:true,timeout:10}) - allows only schema operations, runs each schema statement in the files, all semicolon separated -¦procedure¦apoc.cypher.runTimeboxed¦apoc.cypher.runTimeboxed(cypher :: STRING?, params :: MAP?, timeout :: INTEGER?) :: (value :: MAP?)¦apoc.cypher.runTimeboxed('cypherStatement',\{params}, timeout) - abort kernelTransaction after timeout ms if not finished -¦procedure¦apoc.cypher.runWrite¦apoc.cypher.runWrite(cypher :: STRING?, params :: MAP?) :: (value :: MAP?)¦apoc.cypher.runWrite(statement, params) yield value - alias for apoc.cypher.doIt -¦function¦apoc.cypher.runFirstColumn¦apoc.cypher.runFirstColumn(cypher :: STRING?, params :: MAP?, expectMultipleValues = true :: BOOLEAN?) :: (ANY?)¦use either apoc.cypher.runFirstColumnMany for a list return or apoc.cypher.runFirstColumnSingle for returning the first row of the first column -¦function¦apoc.cypher.runFirstColumnMany¦apoc.cypher.runFirstColumnMany(cypher :: STRING?, params :: MAP?) :: (LIST? OF ANY?)¦apoc.cypher.runFirstColumnMany(statement, params) - executes statement with given parameters, returns first column only collected into a list, params are available as identifiers -¦function¦apoc.cypher.runFirstColumnSingle¦apoc.cypher.runFirstColumnSingle(cypher :: STRING?, params :: MAP?) :: (ANY?)¦apoc.cypher.runFirstColumnSingle(statement, params) - executes statement with given parameters, returns first element of the first column only, params are available as identifiers +¦Qualified Name¦Type¦Release +|xref::overview/apoc.cypher/apoc.cypher.adoc[apoc.cypher.doIt icon:book[]] + +apoc.cypher.doIt(fragment, params) yield value - executes writing fragment with the given parameters +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.cypher/apoc.cypher.adoc[apoc.cypher.mapParallel icon:book[]] + +apoc.cypher.mapParallel(fragment, params, list-to-parallelize) yield value - executes fragment in parallel batches with the list segments being assigned to _ +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.cypher/apoc.cypher.adoc[apoc.cypher.mapParallel2 icon:book[]] + +apoc.cypher.mapParallel2(fragment, params, list-to-parallelize) yield value - executes fragment in parallel batches with the list segments being assigned to _ +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.cypher/apoc.cypher.adoc[apoc.cypher.parallel icon:book[]] + + +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.cypher/apoc.cypher.adoc[apoc.cypher.parallel2 icon:book[]] + + +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.cypher/apoc.cypher.adoc[apoc.cypher.run icon:book[]] + +apoc.cypher.run(fragment, params) yield value - executes reading fragment with the given parameters - currently no schema operations +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.cypher/apoc.cypher.adoc[apoc.cypher.runFile icon:book[]] + +apoc.cypher.runFile(file or url,[{statistics:true,timeout:10,parameters:{}}]) - runs each statement in the file, all semicolon separated - currently no schema operations +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.cypher/apoc.cypher.adoc[apoc.cypher.runFiles icon:book[]] + +apoc.cypher.runFiles([files or urls],[{statistics:true,timeout:10,parameters:{}}])) - runs each statement in the files, all semicolon separated +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.cypher/apoc.cypher.adoc[apoc.cypher.runMany icon:book[]] + +apoc.cypher.runMany('cypher;\nstatements;',\{params},[{statistics:true,timeout:10}]) - runs each semicolon separated statement and returns summary - currently no schema operations +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.cypher/apoc.cypher.adoc[apoc.cypher.runSchema icon:book[]] + +apoc.cypher.runSchema(statement, params) yield value - executes query schema statement with the given parameters +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.cypher/apoc.cypher.adoc[apoc.cypher.runSchemaFile icon:book[]] + +apoc.cypher.runSchemaFile(file or url,[{statistics:true,timeout:10}]) - allows only schema operations, runs each schema statement in the file, all semicolon separated +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.cypher/apoc.cypher.adoc[apoc.cypher.runSchemaFiles icon:book[]] + +apoc.cypher.runSchemaFiles([files or urls],{statistics:true,timeout:10}) - allows only schema operations, runs each schema statement in the files, all semicolon separated +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.cypher/apoc.cypher.adoc[apoc.cypher.runTimeboxed icon:book[]] + +apoc.cypher.runTimeboxed('cypherStatement',\{params}, timeout) - abort kernelTransaction after timeout ms if not finished +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.cypher/apoc.cypher.adoc[apoc.cypher.runWrite icon:book[]] + +apoc.cypher.runWrite(statement, params) yield value - alias for apoc.cypher.doIt +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.cypher/apoc.cypher.adoc[apoc.cypher.runFirstColumn icon:book[]] + +use either apoc.cypher.runFirstColumnMany for a list return or apoc.cypher.runFirstColumnSingle for returning the first row of the first column +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.cypher/apoc.cypher.adoc[apoc.cypher.runFirstColumnMany icon:book[]] + +apoc.cypher.runFirstColumnMany(statement, params) - executes statement with given parameters, returns first column only collected into a list, params are available as identifiers +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.cypher/apoc.cypher.adoc[apoc.cypher.runFirstColumnSingle icon:book[]] + +apoc.cypher.runFirstColumnSingle(statement, params) - executes statement with given parameters, returns first element of the first column only, params are available as identifiers +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.cypher.runSchema.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.cypher.runSchema.adoc index 1d11d46e6b..2b9a01bb28 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.cypher.runSchema.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.cypher.runSchema.adoc @@ -1,5 +1,5 @@ ¦xref::overview/apoc.cypher/apoc.cypher.runSchema.adoc[apoc.cypher.runSchema icon:book[]] + -`apoc.cypher.runSchema(fragment, params) yield value` - executes query schema fragment with the given parameters +`apoc.cypher.runSchema(statement, params) yield value` - executes query schema statement with the given parameters ¦label:procedure[] ¦label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.data.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.data.csv index 45ac157793..e5b85f22f7 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.data.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.data.csv @@ -1,4 +1,16 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.data.domain¦apoc.data.domain(url_or_email_address :: STRING?) :: (STRING?)¦apoc.data.domain('url_or_email_address') YIELD domain - extract the domain name from a url or an email address. If nothing was found, yield null. -¦function¦apoc.data.email¦apoc.data.email(email_address :: STRING?) :: (MAP?)¦apoc.data.email('email_address') as {personal,user,domain} - extract the personal name, user and domain as a map -¦function¦apoc.data.url¦apoc.data.url(url :: STRING?) :: (MAP?)¦apoc.data.url('url') as {protocol,host,port,path,query,file,anchor,user} | turn URL into map structure +¦Qualified Name¦Type¦Release +|xref::overview/apoc.data/apoc.data.adoc[apoc.data.domain icon:book[]] + +apoc.data.domain('url_or_email_address') YIELD domain - extract the domain name from a url or an email address. If nothing was found, yield null. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.data/apoc.data.adoc[apoc.data.email icon:book[]] + +apoc.data.email('email_address') as {personal,user,domain} - extract the personal name, user and domain as a map +|label:function[] +|label:apoc-full[] +|xref::overview/apoc.data/apoc.data.adoc[apoc.data.url icon:book[]] + +apoc.data.url('url') as {protocol,host,port,path,query,file,anchor,user} \| turn URL into map structure +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.data.email.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.data.email.adoc index ad0a404463..a42e4d76df 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.data.email.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.data.email.adoc @@ -2,4 +2,4 @@ `apoc.data.email('email_address') as {personal,user,domain}` - extract the personal name, user and domain as a map ¦label:function[] -¦label:apoc-core[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.date.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.date.csv index 5525958e54..882e87df5d 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.date.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.date.csv @@ -1,16 +1,76 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.date.expire¦apoc.date.expire(node :: NODE?, time :: INTEGER?, timeUnit :: STRING?) :: VOID¦CALL apoc.date.expire(node,time,'time-unit') - expire node at specified time by setting :TTL label and `ttl` property -¦procedure¦apoc.date.expireIn¦apoc.date.expireIn(node :: NODE?, timeDelta :: INTEGER?, timeUnit :: STRING?) :: VOID¦CALL apoc.date.expireIn(node,time,'time-unit') - expire node after specified length of time time by setting :TTL label and `ttl` property -¦function¦apoc.date.add¦apoc.date.add(time :: INTEGER?, unit :: STRING?, addValue :: INTEGER?, addUnit :: STRING?) :: (INTEGER?)¦apoc.date.add(12345, 'ms', -365, 'd') given a timestamp in one time unit, adds a value of the specified time unit -¦function¦apoc.date.convert¦apoc.date.convert(time :: INTEGER?, unit :: STRING?, toUnit :: STRING?) :: (INTEGER?)¦apoc.date.convert(12345, 'ms', 'd') convert a timestamp in one time unit into one of a different time unit -¦function¦apoc.date.convertFormat¦apoc.date.convertFormat(temporal :: STRING?, currentFormat :: STRING?, convertTo = yyyy-MM-dd :: STRING?) :: (STRING?)¦apoc.date.convertFormat('Tue, 14 May 2019 14:52:06 -0400', 'rfc_1123_date_time', 'iso_date_time') convert a String of one date format into a String of another date format. -¦function¦apoc.date.currentTimestamp¦apoc.date.currentTimestamp() :: (INTEGER?)¦apoc.date.currentTimestamp() - returns System.currentTimeMillis() at the time it was called. The value is current throughout transaction execution, and is different from Cypher’s timestamp() function, which does not update within a transaction. -¦function¦apoc.date.field¦apoc.date.field(time :: INTEGER?, unit = d :: STRING?, timezone = UTC :: STRING?) :: (INTEGER?)¦apoc.date.field(12345,('ms|s|m|h|d|month|year'),('TZ') -¦function¦apoc.date.fields¦apoc.date.fields(date :: STRING?, pattern = yyyy-MM-dd HH:mm:ss :: STRING?) :: (MAP?)¦apoc.date.fields('2012-12-23',('yyyy-MM-dd')) - return columns and a map representation of date parsed with the given format with entries for years,months,weekdays,days,hours,minutes,seconds,zoneid -¦function¦apoc.date.format¦apoc.date.format(time :: INTEGER?, unit = ms :: STRING?, format = yyyy-MM-dd HH:mm:ss :: STRING?, timezone = :: STRING?) :: (STRING?)¦apoc.date.format(12345,('ms|s|m|h|d'),('yyyy-MM-dd HH:mm:ss zzz'),('TZ')) get string representation of time value optionally using the specified unit (default ms) using specified format (default ISO) and specified time zone (default current TZ) -¦function¦apoc.date.fromISO8601¦apoc.date.fromISO8601(time :: STRING?) :: (INTEGER?)¦apoc.date.fromISO8601('yyyy-MM-ddTHH:mm:ss.SSSZ') return number representation of time in EPOCH format -¦function¦apoc.date.parse¦apoc.date.parse(time :: STRING?, unit = ms :: STRING?, format = yyyy-MM-dd HH:mm:ss :: STRING?, timezone = :: STRING?) :: (INTEGER?)¦apoc.date.parse('2012-12-23','ms|s|m|h|d','yyyy-MM-dd') parse date string using the specified format into the specified time unit -¦function¦apoc.date.parseAsZonedDateTime¦apoc.date.parseAsZonedDateTime(time :: STRING?, format = yyyy-MM-dd HH:mm:ss :: STRING?, timezone = UTC :: STRING?) :: (DATETIME?)¦apoc.date.parseAsZonedDateTime('2012-12-23 23:59:59','yyyy-MM-dd HH:mm:ss', 'UTC-hour-offset') parse date string using the specified format to specified timezone -¦function¦apoc.date.systemTimezone¦apoc.date.systemTimezone() :: (STRING?)¦apoc.date.systemTimezone() returns the system timezone display name -¦function¦apoc.date.toISO8601¦apoc.date.toISO8601(time :: INTEGER?, unit = ms :: STRING?) :: (STRING?)¦apoc.date.toISO8601(12345,('ms|s|m|h|d') return string representation of time in ISO8601 format -¦function¦apoc.date.toYears¦apoc.date.toYears(value :: ANY?, format = yyyy-MM-dd HH:mm:ss :: STRING?) :: (FLOAT?)¦toYears(timestamp) or toYears(date[,format]) converts timestamp into floating point years +¦Qualified Name¦Type¦Release +|xref::overview/apoc.date/apoc.date.adoc[apoc.date.expire icon:book[]] + +CALL apoc.date.expire(node,time,'time-unit') - expire node at specified time by setting :TTL label and `ttl` property +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.date/apoc.date.adoc[apoc.date.expireIn icon:book[]] + +CALL apoc.date.expireIn(node,time,'time-unit') - expire node after specified length of time time by setting :TTL label and `ttl` property +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.date/apoc.date.adoc[apoc.date.add icon:book[]] + +apoc.date.add(12345, 'ms', -365, 'd') - given a timestamp in one time unit, adds a value of the specified time unit +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.date/apoc.date.adoc[apoc.date.convert icon:book[]] + +apoc.date.convert(12345, 'ms', 'd') - convert a timestamp in one time unit into one of a different time unit +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.date/apoc.date.adoc[apoc.date.convertFormat icon:book[]] + +apoc.date.convertFormat('Tue, 14 May 2019 14:52:06 -0400', 'rfc_1123_date_time', 'iso_date_time') - convert a String of one date format into a String of another date format. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.date/apoc.date.adoc[apoc.date.currentTimestamp icon:book[]] + +apoc.date.currentTimestamp() - returns System.currentTimeMillis() at the time it was called. The value is current throughout transaction execution, and is different from Cypher’s timestamp() function, which does not update within a transaction. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.date/apoc.date.adoc[apoc.date.field icon:book[]] + +apoc.date.field(12345,('ms\|s\|m\|h\|d\|month\|year'),('TZ') +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.date/apoc.date.adoc[apoc.date.fields icon:book[]] + +apoc.date.fields('2012-12-23',('yyyy-MM-dd')) - return columns and a map representation of date parsed with the given format with entries for years,months,weekdays,days,hours,minutes,seconds,zoneid +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.date/apoc.date.adoc[apoc.date.format icon:book[]] + +apoc.date.format(12345,('ms\|s\|m\|h\|d'),('yyyy-MM-dd HH:mm:ss zzz'),('TZ')) - get string representation of time value optionally using the specified unit (default ms) using specified format (default ISO) and specified time zone (default current TZ) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.date/apoc.date.adoc[apoc.date.fromISO8601 icon:book[]] + +apoc.date.fromISO8601('yyyy-MM-ddTHH:mm:ss.SSSZ') - return number representation of time in EPOCH format +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.date/apoc.date.adoc[apoc.date.parse icon:book[]] + +apoc.date.parse('2012-12-23','ms\|s\|m\|h\|d','yyyy-MM-dd') - parse date string using the specified format into the specified time unit +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.date/apoc.date.adoc[apoc.date.parseAsZonedDateTime icon:book[]] + +apoc.date.parseAsZonedDateTime('2012-12-23 23:59:59','yyyy-MM-dd HH:mm:ss', 'UTC-hour-offset') - parse date string using the specified format to specified timezone +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.date/apoc.date.adoc[apoc.date.systemTimezone icon:book[]] + +apoc.date.systemTimezone() - returns the system timezone display name +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.date/apoc.date.adoc[apoc.date.toISO8601 icon:book[]] + +apoc.date.toISO8601(12345,('ms\|s\|m\|h\|d') - return string representation of time in ISO8601 format +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.date/apoc.date.adoc[apoc.date.toYears icon:book[]] + +toYears(timestamp) or toYears(date[,format]) - converts timestamp into floating point years +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.diff.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.diff.csv index 7cea49c79d..84f35b83df 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.diff.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.diff.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.diff.nodes¦apoc.diff.nodes(leftNode :: NODE?, rightNode :: NODE?) :: (MAP?)¦ +¦Qualified Name¦Type¦Release +|xref::overview/apoc.diff/apoc.diff.adoc[apoc.diff.nodes icon:book[]] + + +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.do.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.do.csv index 97f79667da..6dd4d170bd 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.do.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.do.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.do.case¦apoc.do.case(conditionals :: LIST? OF ANY?, elseQuery = :: STRING?, params = {} :: MAP?) :: (value :: MAP?)¦apoc.do.case([condition, query, condition, query, ...], elseQuery:'', params:{}) yield value - given a list of conditional / writing query pairs, executes the query associated with the first conditional evaluating to true (or the else query if none are true) with the given parameters -¦procedure¦apoc.do.when¦apoc.do.when(condition :: BOOLEAN?, ifQuery :: STRING?, elseQuery = :: STRING?, params = {} :: MAP?) :: (value :: MAP?)¦apoc.do.when(condition, ifQuery, elseQuery:'', params:{}) yield value - based on the conditional, executes writing ifQuery or elseQuery with the given parameters +¦Qualified Name¦Type¦Release +|xref::overview/apoc.do/apoc.do.adoc[apoc.do.case icon:book[]] + +apoc.do.case([condition, query, condition, query, ...], elseQuery:'', params:{}) yield value - given a list of conditional / writing query pairs, executes the query associated with the first conditional evaluating to true (or the else query if none are true) with the given parameters +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.do/apoc.do.adoc[apoc.do.when icon:book[]] + +apoc.do.when(condition, ifQuery, elseQuery:'', params:{}) yield value - based on the conditional, executes writing ifQuery or elseQuery with the given parameters +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.es.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.es.csv index f622be2a98..c86faa6c74 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.es.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.es.csv @@ -1,8 +1,36 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.es.get¦apoc.es.get(host :: STRING?, index :: STRING?, type :: STRING?, id :: STRING?, query :: ANY?, payload :: ANY?) :: (value :: MAP?)¦apoc.es.get(host-or-port,index-or-null,type-or-null,id-or-null,query-or-null,payload-or-null) yield value - perform a GET operation on elastic search -¦procedure¦apoc.es.getRaw¦apoc.es.getRaw(host :: STRING?, path :: STRING?, payload :: ANY?) :: (value :: MAP?)¦apoc.es.getRaw(host-or-port,path,payload-or-null) yield value - perform a raw GET operation on elastic search -¦procedure¦apoc.es.post¦apoc.es.post(host :: STRING?, index :: STRING?, type :: STRING?, query :: ANY?, payload = {} :: MAP?) :: (value :: MAP?)¦apoc.es.post(host-or-port,index-or-null,type-or-null,query-or-null,payload-or-null) yield value - perform a POST operation on elastic search -¦procedure¦apoc.es.postRaw¦apoc.es.postRaw(host :: STRING?, path :: STRING?, payload :: ANY?) :: (value :: MAP?)¦apoc.es.postRaw(host-or-port,path,payload-or-null) yield value - perform a raw POST operation on elastic search -¦procedure¦apoc.es.put¦apoc.es.put(host :: STRING?, index :: STRING?, type :: STRING?, id :: STRING?, query :: ANY?, payload = {} :: MAP?) :: (value :: MAP?)¦apoc.es.put(host-or-port,index-or-null,type-or-null,id-or-null,query-or-null,payload-or-null) yield value - perform a PUT operation on elastic search -¦procedure¦apoc.es.query¦apoc.es.query(host :: STRING?, index :: STRING?, type :: STRING?, query :: ANY?, payload :: ANY?) :: (value :: MAP?)¦apoc.es.query(host-or-port,index-or-null,type-or-null,query-or-null,payload-or-null) yield value - perform a SEARCH operation on elastic search -¦procedure¦apoc.es.stats¦apoc.es.stats(host :: STRING?) :: (value :: MAP?)¦apoc.es.stats(host-url-Key) - elastic search statistics +¦Qualified Name¦Type¦Release +|xref::overview/apoc.es/apoc.es.adoc[apoc.es.get icon:book[]] + +apoc.es.get(host-or-port,index-or-null,type-or-null,id-or-null,query-or-null,payload-or-null) yield value - perform a GET operation on elastic search +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.es/apoc.es.adoc[apoc.es.getRaw icon:book[]] + +apoc.es.getRaw(host-or-port,path,payload-or-null) yield value - perform a raw GET operation on elastic search +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.es/apoc.es.adoc[apoc.es.post icon:book[]] + +apoc.es.post(host-or-port,index-or-null,type-or-null,query-or-null,payload-or-null) yield value - perform a POST operation on elastic search +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.es/apoc.es.adoc[apoc.es.postRaw icon:book[]] + +apoc.es.postRaw(host-or-port,path,payload-or-null) yield value - perform a raw POST operation on elastic search +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.es/apoc.es.adoc[apoc.es.put icon:book[]] + +apoc.es.put(host-or-port,index-or-null,type-or-null,id-or-null,query-or-null,payload-or-null) yield value - perform a PUT operation on elastic search +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.es/apoc.es.adoc[apoc.es.query icon:book[]] + +apoc.es.query(host-or-port,index-or-null,type-or-null,query-or-null,payload-or-null) yield value - perform a SEARCH operation on elastic search +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.es/apoc.es.adoc[apoc.es.stats icon:book[]] + +apoc.es.stats(host-url-Key) - elastic search statistics +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.example.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.example.csv index daab69835f..d7229e3d78 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.example.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.example.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.example.movies¦apoc.example.movies() :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.example.movies() | Creates the sample movies graph +¦Qualified Name¦Type¦Release +|xref::overview/apoc.example/apoc.example.adoc[apoc.example.movies icon:book[]] + +apoc.example.movies() \| Creates the sample movies graph +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv index 40b42d82ac..123ef90dba 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv @@ -1,5 +1,21 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.export.cypherAll¦apoc.export.cypherAll(file :: STRING?, config :: MAP?) :: (file :: STRING?, batches :: INTEGER?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, cypherStatements :: STRING?, nodeStatements :: STRING?, relationshipStatements :: STRING?, schemaStatements :: STRING?, cleanupStatements :: STRING?)¦apoc.export.cypherAll(file,config) - exports whole database incl. indexes as cypher statements to the provided file -¦procedure¦apoc.export.cypherData¦apoc.export.cypherData(nodes :: LIST? OF NODE?, rels :: LIST? OF RELATIONSHIP?, file :: STRING?, config :: MAP?) :: (file :: STRING?, batches :: INTEGER?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, cypherStatements :: STRING?, nodeStatements :: STRING?, relationshipStatements :: STRING?, schemaStatements :: STRING?, cleanupStatements :: STRING?)¦apoc.export.cypherData(nodes,rels,file,config) - exports given nodes and relationships incl. indexes as cypher statements to the provided file -¦procedure¦apoc.export.cypherGraph¦apoc.export.cypherGraph(graph :: MAP?, file :: STRING?, config :: MAP?) :: (file :: STRING?, batches :: INTEGER?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, cypherStatements :: STRING?, nodeStatements :: STRING?, relationshipStatements :: STRING?, schemaStatements :: STRING?, cleanupStatements :: STRING?)¦apoc.export.cypherGraph(graph,file,config) - exports given graph object incl. indexes as cypher statements to the provided file -¦procedure¦apoc.export.cypherQuery¦apoc.export.cypherQuery(query :: STRING?, file :: STRING?, config :: MAP?) :: (file :: STRING?, batches :: INTEGER?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, cypherStatements :: STRING?, nodeStatements :: STRING?, relationshipStatements :: STRING?, schemaStatements :: STRING?, cleanupStatements :: STRING?)¦apoc.export.cypherQuery(query,file,config) - exports nodes and relationships from the cypher kernelTransaction incl. indexes as cypher statements to the provided file +¦Qualified Name¦Type¦Release +|xref::overview/apoc.export/apoc.export.adoc[apoc.export.cypherAll icon:book[]] + +apoc.export.cypherAll(file,config) - exports whole database incl. indexes as cypher statements to the provided file +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.export/apoc.export.adoc[apoc.export.cypherData icon:book[]] + +apoc.export.cypherData(nodes,rels,file,config) - exports given nodes and relationships incl. indexes as cypher statements to the provided file +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.export/apoc.export.adoc[apoc.export.cypherGraph icon:book[]] + +apoc.export.cypherGraph(graph,file,config) - exports given graph object incl. indexes as cypher statements to the provided file +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.export/apoc.export.adoc[apoc.export.cypherQuery icon:book[]] + +apoc.export.cypherQuery(query,file,config) - exports nodes and relationships from the cypher kernelTransaction incl. indexes as cypher statements to the provided file +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv.all.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv.all.adoc index 4254782ec6..23db92925a 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv.all.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv.all.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.csv/apoc.export.csv.all.adoc[apoc.export.csv.all icon:book[]] + +¦xref::overview/apoc.export/apoc.export.csv.all.adoc[apoc.export.csv.all icon:book[]] + `apoc.export.csv.all(file,config)` - exports whole database as csv to the provided file ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv.csv index 5b13a0531f..a0e2c1447e 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv.csv @@ -1,5 +1,21 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.export.csv.all¦apoc.export.csv.all(file :: STRING?, config :: MAP?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.export.csv.all(file,config) - exports whole database as csv to the provided file -¦procedure¦apoc.export.csv.data¦apoc.export.csv.data(nodes :: LIST? OF NODE?, rels :: LIST? OF RELATIONSHIP?, file :: STRING?, config :: MAP?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.export.csv.data(nodes,rels,file,config) - exports given nodes and relationships as csv to the provided file -¦procedure¦apoc.export.csv.graph¦apoc.export.csv.graph(graph :: MAP?, file :: STRING?, config :: MAP?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.export.csv.graph(graph,file,config) - exports given graph object as csv to the provided file -¦procedure¦apoc.export.csv.query¦apoc.export.csv.query(query :: STRING?, file :: STRING?, config :: MAP?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.export.csv.query(query,file,{config,...,params:\{params}}) - exports results from the cypher statement as csv to the provided file +¦Qualified Name¦Type¦Release +|xref::overview/apoc.export.csv/apoc.export.adoc[apoc.export.csv.all icon:book[]] + +apoc.export.csv.all(file,config) - exports whole database as csv to the provided file +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.export.csv/apoc.export.adoc[apoc.export.csv.data icon:book[]] + +apoc.export.csv.data(nodes,rels,file,config) - exports given nodes and relationships as csv to the provided file +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.export.csv/apoc.export.adoc[apoc.export.csv.graph icon:book[]] + +apoc.export.csv.graph(graph,file,config) - exports given graph object as csv to the provided file +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.export.csv/apoc.export.adoc[apoc.export.csv.query icon:book[]] + +apoc.export.csv.query(query,file,{config,...,params:\{params}}) - exports results from the cypher statement as csv to the provided file +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv.data.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv.data.adoc index e1a8d819b3..f91b468b1c 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv.data.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv.data.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.csv/apoc.export.csv.data.adoc[apoc.export.csv.data icon:book[]] + +¦xref::overview/apoc.export/apoc.export.csv.data.adoc[apoc.export.csv.data icon:book[]] + `apoc.export.csv.data(nodes,rels,file,config)` - exports given nodes and relationships as csv to the provided file ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv.graph.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv.graph.adoc index 3ca7f57df7..368f80e9a6 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv.graph.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv.graph.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.csv/apoc.export.csv.graph.adoc[apoc.export.csv.graph icon:book[]] + +¦xref::overview/apoc.export/apoc.export.csv.graph.adoc[apoc.export.csv.graph icon:book[]] + `apoc.export.csv.graph(graph,file,config)` - exports given graph object as csv to the provided file ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv.query.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv.query.adoc index 7e8d0b5e46..9848740aa1 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv.query.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.csv.query.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.csv/apoc.export.csv.query.adoc[apoc.export.csv.query icon:book[]] + +¦xref::overview/apoc.export/apoc.export.csv.query.adoc[apoc.export.csv.query icon:book[]] + `apoc.export.csv.query(query,file,{config,...,params:\{params}})` - exports results from the cypher statement as csv to the provided file ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.all.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.all.adoc index 00e62ec809..464e3f3484 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.all.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.all.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.cypher/apoc.export.cypher.all.adoc[apoc.export.cypher.all icon:book[]] + +¦xref::overview/apoc.export/apoc.export.cypher.all.adoc[apoc.export.cypher.all icon:book[]] + `apoc.export.cypher.all(file,config)` - exports whole database incl. indexes as cypher statements to the provided file ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.csv index e8e839f4e7..5d4893a462 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.csv @@ -1,6 +1,26 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.export.cypher.all¦apoc.export.cypher.all(file = :: STRING?, config = {} :: MAP?) :: (file :: STRING?, batches :: INTEGER?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, cypherStatements :: STRING?, nodeStatements :: STRING?, relationshipStatements :: STRING?, schemaStatements :: STRING?, cleanupStatements :: STRING?)¦apoc.export.cypher.all(file,config) - exports whole database incl. indexes as cypher statements to the provided file -¦procedure¦apoc.export.cypher.data¦apoc.export.cypher.data(nodes :: LIST? OF NODE?, rels :: LIST? OF RELATIONSHIP?, file = :: STRING?, config = {} :: MAP?) :: (file :: STRING?, batches :: INTEGER?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, cypherStatements :: STRING?, nodeStatements :: STRING?, relationshipStatements :: STRING?, schemaStatements :: STRING?, cleanupStatements :: STRING?)¦apoc.export.cypher.data(nodes,rels,file,config) - exports given nodes and relationships incl. indexes as cypher statements to the provided file -¦procedure¦apoc.export.cypher.graph¦apoc.export.cypher.graph(graph :: MAP?, file = :: STRING?, config = {} :: MAP?) :: (file :: STRING?, batches :: INTEGER?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, cypherStatements :: STRING?, nodeStatements :: STRING?, relationshipStatements :: STRING?, schemaStatements :: STRING?, cleanupStatements :: STRING?)¦apoc.export.cypher.graph(graph,file,config) - exports given graph object incl. indexes as cypher statements to the provided file -¦procedure¦apoc.export.cypher.query¦apoc.export.cypher.query(query :: STRING?, file = :: STRING?, config = {} :: MAP?) :: (file :: STRING?, batches :: INTEGER?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, cypherStatements :: STRING?, nodeStatements :: STRING?, relationshipStatements :: STRING?, schemaStatements :: STRING?, cleanupStatements :: STRING?)¦apoc.export.cypher.query(query,file,config) - exports nodes and relationships from the cypher statement incl. indexes as cypher statements to the provided file -¦procedure¦apoc.export.cypher.schema¦apoc.export.cypher.schema(file = :: STRING?, config = {} :: MAP?) :: (file :: STRING?, batches :: INTEGER?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, cypherStatements :: STRING?, nodeStatements :: STRING?, relationshipStatements :: STRING?, schemaStatements :: STRING?, cleanupStatements :: STRING?)¦apoc.export.cypher.schema(file,config) - exports all schema indexes and constraints to cypher +¦Qualified Name¦Type¦Release +|xref::overview/apoc.export.cypher/apoc.export.adoc[apoc.export.cypher.all icon:book[]] + +apoc.export.cypher.all(file,config) - exports whole database incl. indexes as cypher statements to the provided file +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.export.cypher/apoc.export.adoc[apoc.export.cypher.data icon:book[]] + +apoc.export.cypher.data(nodes,rels,file,config) - exports given nodes and relationships incl. indexes as cypher statements to the provided file +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.export.cypher/apoc.export.adoc[apoc.export.cypher.graph icon:book[]] + +apoc.export.cypher.graph(graph,file,config) - exports given graph object incl. indexes as cypher statements to the provided file +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.export.cypher/apoc.export.adoc[apoc.export.cypher.query icon:book[]] + +apoc.export.cypher.query(query,file,config) - exports nodes and relationships from the cypher statement incl. indexes as cypher statements to the provided file +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.export.cypher/apoc.export.adoc[apoc.export.cypher.schema icon:book[]] + +apoc.export.cypher.schema(file,config) - exports all schema indexes and constraints to cypher +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.data.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.data.adoc index f8b0aca91d..62e68b0419 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.data.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.data.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.cypher/apoc.export.cypher.data.adoc[apoc.export.cypher.data icon:book[]] + +¦xref::overview/apoc.export/apoc.export.cypher.data.adoc[apoc.export.cypher.data icon:book[]] + `apoc.export.cypher.data(nodes,rels,file,config)` - exports given nodes and relationships incl. indexes as cypher statements to the provided file ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.graph.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.graph.adoc index 7cd2e68490..899d931051 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.graph.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.graph.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.cypher/apoc.export.cypher.graph.adoc[apoc.export.cypher.graph icon:book[]] + +¦xref::overview/apoc.export/apoc.export.cypher.graph.adoc[apoc.export.cypher.graph icon:book[]] + `apoc.export.cypher.graph(graph,file,config)` - exports given graph object incl. indexes as cypher statements to the provided file ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.query.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.query.adoc index 8a2b7165f5..d7ae412b2d 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.query.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.query.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.cypher/apoc.export.cypher.query.adoc[apoc.export.cypher.query icon:book[]] + +¦xref::overview/apoc.export/apoc.export.cypher.query.adoc[apoc.export.cypher.query icon:book[]] + `apoc.export.cypher.query(query,file,config)` - exports nodes and relationships from the cypher statement incl. indexes as cypher statements to the provided file ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.schema.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.schema.adoc index 8cf83999e8..6f81c79deb 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.schema.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.cypher.schema.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.cypher/apoc.export.cypher.schema.adoc[apoc.export.cypher.schema icon:book[]] + +¦xref::overview/apoc.export/apoc.export.cypher.schema.adoc[apoc.export.cypher.schema icon:book[]] + `apoc.export.cypher.schema(file,config)` - exports all schema indexes and constraints to cypher ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.graphml.all.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.graphml.all.adoc index 7083fb581d..790a59746e 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.graphml.all.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.graphml.all.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.graphml/apoc.export.graphml.all.adoc[apoc.export.graphml.all icon:book[]] + +¦xref::overview/apoc.export/apoc.export.graphml.all.adoc[apoc.export.graphml.all icon:book[]] + `apoc.export.graphml.all(file,config)` - exports whole database as graphml to the provided file ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.graphml.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.graphml.csv index c3f2ff3596..0623efb69c 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.graphml.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.graphml.csv @@ -1,5 +1,21 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.export.graphml.all¦apoc.export.graphml.all(file :: STRING?, config :: MAP?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.export.graphml.all(file,config) - exports whole database as graphml to the provided file -¦procedure¦apoc.export.graphml.data¦apoc.export.graphml.data(nodes :: LIST? OF NODE?, rels :: LIST? OF RELATIONSHIP?, file :: STRING?, config :: MAP?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.export.graphml.data(nodes,rels,file,config) - exports given nodes and relationships as graphml to the provided file -¦procedure¦apoc.export.graphml.graph¦apoc.export.graphml.graph(graph :: MAP?, file :: STRING?, config :: MAP?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.export.graphml.graph(graph,file,config) - exports given graph object as graphml to the provided file -¦procedure¦apoc.export.graphml.query¦apoc.export.graphml.query(query :: STRING?, file :: STRING?, config :: MAP?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.export.graphml.query(query,file,config) - exports nodes and relationships from the cypher statement as graphml to the provided file +¦Qualified Name¦Type¦Release +|xref::overview/apoc.export.graphml/apoc.export.adoc[apoc.export.graphml.all icon:book[]] + +apoc.export.graphml.all(file,config) - exports whole database as graphml to the provided file +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.export.graphml/apoc.export.adoc[apoc.export.graphml.data icon:book[]] + +apoc.export.graphml.data(nodes,rels,file,config) - exports given nodes and relationships as graphml to the provided file +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.export.graphml/apoc.export.adoc[apoc.export.graphml.graph icon:book[]] + +apoc.export.graphml.graph(graph,file,config) - exports given graph object as graphml to the provided file +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.export.graphml/apoc.export.adoc[apoc.export.graphml.query icon:book[]] + +apoc.export.graphml.query(query,file,config) - exports nodes and relationships from the cypher statement as graphml to the provided file +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.graphml.data.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.graphml.data.adoc index 3096168fab..1519d2b61b 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.graphml.data.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.graphml.data.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.graphml/apoc.export.graphml.data.adoc[apoc.export.graphml.data icon:book[]] + +¦xref::overview/apoc.export/apoc.export.graphml.data.adoc[apoc.export.graphml.data icon:book[]] + `apoc.export.graphml.data(nodes,rels,file,config)` - exports given nodes and relationships as graphml to the provided file ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.graphml.graph.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.graphml.graph.adoc index e48572105b..6e2bc6395b 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.graphml.graph.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.graphml.graph.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.graphml/apoc.export.graphml.graph.adoc[apoc.export.graphml.graph icon:book[]] + +¦xref::overview/apoc.export/apoc.export.graphml.graph.adoc[apoc.export.graphml.graph icon:book[]] + `apoc.export.graphml.graph(graph,file,config)` - exports given graph object as graphml to the provided file ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.graphml.query.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.graphml.query.adoc index 2eda146560..94aa531eef 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.graphml.query.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.graphml.query.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.graphml/apoc.export.graphml.query.adoc[apoc.export.graphml.query icon:book[]] + +¦xref::overview/apoc.export/apoc.export.graphml.query.adoc[apoc.export.graphml.query icon:book[]] + `apoc.export.graphml.query(query,file,config)` - exports nodes and relationships from the cypher statement as graphml to the provided file ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.json.all.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.json.all.adoc index 38b9f8be23..a20c7d75c0 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.json.all.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.json.all.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.json/apoc.export.json.all.adoc[apoc.export.json.all icon:book[]] + +¦xref::overview/apoc.export/apoc.export.json.all.adoc[apoc.export.json.all icon:book[]] + `apoc.export.json.all(file,config)` - exports whole database as json to the provided file ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.json.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.json.csv index 49f0e7eb9f..401288c39e 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.json.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.json.csv @@ -1,5 +1,21 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.export.json.all¦apoc.export.json.all(file :: STRING?, config = {} :: MAP?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.export.json.all(file,config) - exports whole database as json to the provided file -¦procedure¦apoc.export.json.data¦apoc.export.json.data(nodes :: LIST? OF NODE?, rels :: LIST? OF RELATIONSHIP?, file :: STRING?, config = {} :: MAP?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.export.json.data(nodes,rels,file,config) - exports given nodes and relationships as json to the provided file -¦procedure¦apoc.export.json.graph¦apoc.export.json.graph(graph :: MAP?, file :: STRING?, config = {} :: MAP?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.export.json.graph(graph,file,config) - exports given graph object as json to the provided file -¦procedure¦apoc.export.json.query¦apoc.export.json.query(query :: STRING?, file :: STRING?, config = {} :: MAP?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.export.json.query(query,file,{config,...,params:\{params}}) - exports results from the cypher statement as json to the provided file +¦Qualified Name¦Type¦Release +|xref::overview/apoc.export.json/apoc.export.adoc[apoc.export.json.all icon:book[]] + +apoc.export.json.all(file,config) - exports whole database as json to the provided file +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.export.json/apoc.export.adoc[apoc.export.json.data icon:book[]] + +apoc.export.json.data(nodes,rels,file,config) - exports given nodes and relationships as json to the provided file +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.export.json/apoc.export.adoc[apoc.export.json.graph icon:book[]] + +apoc.export.json.graph(graph,file,config) - exports given graph object as json to the provided file +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.export.json/apoc.export.adoc[apoc.export.json.query icon:book[]] + +apoc.export.json.query(query,file,{config,...,params:\{params}}) - exports results from the cypher statement as json to the provided file +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.json.data.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.json.data.adoc index 47a1327389..aa7919de14 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.json.data.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.json.data.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.json/apoc.export.json.data.adoc[apoc.export.json.data icon:book[]] + +¦xref::overview/apoc.export/apoc.export.json.data.adoc[apoc.export.json.data icon:book[]] + `apoc.export.json.data(nodes,rels,file,config)` - exports given nodes and relationships as json to the provided file ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.json.graph.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.json.graph.adoc index 569c2417fe..d4b8bebe9e 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.json.graph.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.json.graph.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.json/apoc.export.json.graph.adoc[apoc.export.json.graph icon:book[]] + +¦xref::overview/apoc.export/apoc.export.json.graph.adoc[apoc.export.json.graph icon:book[]] + `apoc.export.json.graph(graph,file,config)` - exports given graph object as json to the provided file ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.json.query.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.json.query.adoc index 815738fddb..b12bb8f5a5 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.json.query.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.json.query.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.json/apoc.export.json.query.adoc[apoc.export.json.query icon:book[]] + +¦xref::overview/apoc.export/apoc.export.json.query.adoc[apoc.export.json.query icon:book[]] + `apoc.export.json.query(query,file,{config,...,params:\{params}})` - exports results from the cypher statement as json to the provided file ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.xls.all.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.xls.all.adoc index 622c28c764..2430320219 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.xls.all.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.xls.all.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.xls/apoc.export.xls.all.adoc[apoc.export.xls.all icon:book[]] + +¦xref::overview/apoc.export/apoc.export.xls.all.adoc[apoc.export.xls.all icon:book[]] + `apoc.export.xls.all(file,config)` - exports whole database as xls to the provided file ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.xls.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.xls.csv index 37889b2025..4f2be3a687 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.xls.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.xls.csv @@ -1,5 +1,21 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.export.xls.all¦apoc.export.xls.all(file :: STRING?, config :: MAP?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.export.xls.all(file,config) - exports whole database as xls to the provided file -¦procedure¦apoc.export.xls.data¦apoc.export.xls.data(nodes :: LIST? OF NODE?, rels :: LIST? OF RELATIONSHIP?, file :: STRING?, config :: MAP?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.export.xls.data(nodes,rels,file,config) - exports given nodes and relationships as xls to the provided file -¦procedure¦apoc.export.xls.graph¦apoc.export.xls.graph(graph :: MAP?, file :: STRING?, config :: MAP?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.export.xls.graph(graph,file,config) - exports given graph object as xls to the provided file -¦procedure¦apoc.export.xls.query¦apoc.export.xls.query(query :: STRING?, file :: STRING?, config :: MAP?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.export.xls.query(query,file,{config,...,params:\{params}}) - exports results from the cypher statement as xls to the provided file +¦Qualified Name¦Type¦Release +|xref::overview/apoc.export.xls/apoc.export.adoc[apoc.export.xls.all icon:book[]] + +apoc.export.xls.all(file,config) - exports whole database as xls to the provided file +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.export.xls/apoc.export.adoc[apoc.export.xls.data icon:book[]] + +apoc.export.xls.data(nodes,rels,file,config) - exports given nodes and relationships as xls to the provided file +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.export.xls/apoc.export.adoc[apoc.export.xls.graph icon:book[]] + +apoc.export.xls.graph(graph,file,config) - exports given graph object as xls to the provided file +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.export.xls/apoc.export.adoc[apoc.export.xls.query icon:book[]] + +apoc.export.xls.query(query,file,{config,...,params:\{params}}) - exports results from the cypher statement as xls to the provided file +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.xls.data.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.xls.data.adoc index cc94391b7d..8591b3cb59 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.xls.data.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.xls.data.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.xls/apoc.export.xls.data.adoc[apoc.export.xls.data icon:book[]] + +¦xref::overview/apoc.export/apoc.export.xls.data.adoc[apoc.export.xls.data icon:book[]] + `apoc.export.xls.data(nodes,rels,file,config)` - exports given nodes and relationships as xls to the provided file ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.xls.graph.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.xls.graph.adoc index 8dea823eb0..19cfbb1df9 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.xls.graph.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.xls.graph.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.xls/apoc.export.xls.graph.adoc[apoc.export.xls.graph icon:book[]] + +¦xref::overview/apoc.export/apoc.export.xls.graph.adoc[apoc.export.xls.graph icon:book[]] + `apoc.export.xls.graph(graph,file,config)` - exports given graph object as xls to the provided file ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.xls.query.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.xls.query.adoc index 2b9c1cfb8a..3e6aed9949 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.xls.query.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.export.xls.query.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.export.xls/apoc.export.xls.query.adoc[apoc.export.xls.query icon:book[]] + +¦xref::overview/apoc.export/apoc.export.xls.query.adoc[apoc.export.xls.query icon:book[]] + `apoc.export.xls.query(query,file,{config,...,params:\{params}})` - exports results from the cypher statement as xls to the provided file ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.generate.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.generate.csv index 3b8fd18aae..d57027c50e 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.generate.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.generate.csv @@ -1,6 +1,26 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.generate.ba¦apoc.generate.ba(noNodes :: INTEGER?, edgesPerNode :: INTEGER?, label :: STRING?, type :: STRING?) :: VOID¦apoc.generate.ba(noNodes, edgesPerNode, label, type) - generates a random graph according to the Barabasi-Albert model -¦procedure¦apoc.generate.complete¦apoc.generate.complete(noNodes :: INTEGER?, label :: STRING?, type :: STRING?) :: VOID¦apoc.generate.complete(noNodes, label, type) - generates a random complete graph -¦procedure¦apoc.generate.er¦apoc.generate.er(noNodes :: INTEGER?, noEdges :: INTEGER?, label :: STRING?, type :: STRING?) :: VOID¦apoc.generate.er(noNodes, noEdges, label, type) - generates a random graph according to the Erdos-Renyi model -¦procedure¦apoc.generate.simple¦apoc.generate.simple(degrees :: LIST? OF INTEGER?, label :: STRING?, type :: STRING?) :: VOID¦apoc.generate.simple(degrees, label, type) - generates a simple random graph according to the given degree distribution -¦procedure¦apoc.generate.ws¦apoc.generate.ws(noNodes :: INTEGER?, degree :: INTEGER?, beta :: FLOAT?, label :: STRING?, type :: STRING?) :: VOID¦apoc.generate.ws(noNodes, degree, beta, label, type) - generates a random graph according to the Watts-Strogatz model +¦Qualified Name¦Type¦Release +|xref::overview/apoc.generate/apoc.generate.adoc[apoc.generate.ba icon:book[]] + +apoc.generate.ba(noNodes, edgesPerNode, label, type) - generates a random graph according to the Barabasi-Albert model +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.generate/apoc.generate.adoc[apoc.generate.complete icon:book[]] + +apoc.generate.complete(noNodes, label, type) - generates a random complete graph +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.generate/apoc.generate.adoc[apoc.generate.er icon:book[]] + +apoc.generate.er(noNodes, noEdges, label, type) - generates a random graph according to the Erdos-Renyi model +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.generate/apoc.generate.adoc[apoc.generate.simple icon:book[]] + +apoc.generate.simple(degrees, label, type) - generates a simple random graph according to the given degree distribution +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.generate/apoc.generate.adoc[apoc.generate.ws icon:book[]] + +apoc.generate.ws(noNodes, degree, beta, label, type) - generates a random graph according to the Watts-Strogatz model +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.gephi.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.gephi.csv index 5cef652873..5e12311d2f 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.gephi.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.gephi.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.gephi.add¦apoc.gephi.add(urlOrKey :: STRING?, workspace :: STRING?, data :: ANY?, weightproperty = null :: STRING?, exportproperties = [] :: LIST? OF STRING?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.gephi.add(url-or-key, workspace, data, weightproperty, ['exportproperty']) | streams passed in data to Gephi +¦Qualified Name¦Type¦Release +|xref::overview/apoc.gephi/apoc.gephi.adoc[apoc.gephi.add icon:book[]] + +apoc.gephi.add(url-or-key, workspace, data, weightproperty, ['exportproperty']) \| streams passed in data to Gephi +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.get.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.get.csv index 36252ee656..f27ed44a40 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.get.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.get.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.get.nodes¦apoc.get.nodes(nodes :: ANY?) :: (node :: NODE?)¦apoc.get.nodes(node|id|[ids]) - quickly returns all nodes with these id's -¦procedure¦apoc.get.rels¦apoc.get.rels(relationships :: ANY?) :: (rel :: RELATIONSHIP?)¦apoc.get.rels(rel|id|[ids]) - quickly returns all relationships with these id's +¦Qualified Name¦Type¦Release +|xref::overview/apoc.get/apoc.get.adoc[apoc.get.nodes icon:book[]] + +apoc.get.nodes(node\|id\|[ids]) - quickly returns all nodes with these id's +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.get/apoc.get.adoc[apoc.get.rels icon:book[]] + +apoc.get.rels(rel\|id\|[ids]) - quickly returns all relationships with these id's +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.graph.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.graph.csv index e6662d4683..da3ea96bc8 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.graph.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.graph.csv @@ -1,9 +1,41 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.graph.from¦apoc.graph.from(data :: ANY?, name :: STRING?, properties :: MAP?) :: (graph :: MAP?)¦apoc.graph.from(data,'name',\{properties}) | creates a virtual graph object for later processing it tries its best to extract the graph information from the data you pass in -¦procedure¦apoc.graph.fromCypher¦apoc.graph.fromCypher(kernelTransaction :: STRING?, params :: MAP?, name :: STRING?, properties :: MAP?) :: (graph :: MAP?)¦apoc.graph.fromCypher('kernelTransaction',\{params},'name',\{properties}) - creates a virtual graph object for later processing -¦procedure¦apoc.graph.fromDB¦apoc.graph.fromDB(name :: STRING?, properties :: MAP?) :: (graph :: MAP?)¦apoc.graph.fromDB('name',\{properties}) - creates a virtual graph object for later processing -¦procedure¦apoc.graph.fromData¦apoc.graph.fromData(nodes :: LIST? OF NODE?, relationships :: LIST? OF RELATIONSHIP?, name :: STRING?, properties :: MAP?) :: (graph :: MAP?)¦apoc.graph.fromData([nodes],[relationships],'name',\{properties}) | creates a virtual graph object for later processing -¦procedure¦apoc.graph.fromDocument¦apoc.graph.fromDocument(json :: ANY?, config = {} :: MAP?) :: (graph :: MAP?)¦apoc.graph.fromDocument(\{json}, \{config}) yield graph - transform JSON documents into graph structures -¦procedure¦apoc.graph.fromPath¦apoc.graph.fromPath(path :: PATH?, name :: STRING?, properties :: MAP?) :: (graph :: MAP?)¦apoc.graph.fromPaths(path,'name',\{properties}) - creates a virtual graph object for later processing -¦procedure¦apoc.graph.fromPaths¦apoc.graph.fromPaths(paths :: LIST? OF PATH?, name :: STRING?, properties :: MAP?) :: (graph :: MAP?)¦apoc.graph.fromPaths([paths],'name',\{properties}) - creates a virtual graph object for later processing -¦procedure¦apoc.graph.validateDocument¦apoc.graph.validateDocument(json :: ANY?, config = {} :: MAP?) :: (row :: MAP?)¦apoc.graph.validateDocument(\{json}, \{config}) yield row - validates the json, return the result of the validation +¦Qualified Name¦Type¦Release +|xref::overview/apoc.graph/apoc.graph.adoc[apoc.graph.from icon:book[]] + +apoc.graph.from(data,'name',\{properties}) \| creates a virtual graph object for later processing it tries its best to extract the graph information from the data you pass in +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.graph/apoc.graph.adoc[apoc.graph.fromCypher icon:book[]] + +apoc.graph.fromCypher('kernelTransaction',\{params},'name',\{properties}) - creates a virtual graph object for later processing +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.graph/apoc.graph.adoc[apoc.graph.fromDB icon:book[]] + +apoc.graph.fromDB('name',\{properties}) - creates a virtual graph object for later processing +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.graph/apoc.graph.adoc[apoc.graph.fromData icon:book[]] + +apoc.graph.fromData([nodes],[relationships],'name',\{properties}) \| creates a virtual graph object for later processing +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.graph/apoc.graph.adoc[apoc.graph.fromDocument icon:book[]] + +apoc.graph.fromDocument(\{json}, \{config}) yield graph - transform JSON documents into graph structures +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.graph/apoc.graph.adoc[apoc.graph.fromPath icon:book[]] + +apoc.graph.fromPaths(path,'name',\{properties}) - creates a virtual graph object for later processing +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.graph/apoc.graph.adoc[apoc.graph.fromPaths icon:book[]] + +apoc.graph.fromPaths([paths],'name',\{properties}) - creates a virtual graph object for later processing +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.graph/apoc.graph.adoc[apoc.graph.validateDocument icon:book[]] + +apoc.graph.validateDocument(\{json}, \{config}) yield row - validates the json, return the result of the validation +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.hashing.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.hashing.csv index a78e501c5b..32c4884d20 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.hashing.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.hashing.csv @@ -1,4 +1,16 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.hashing.fingerprint¦apoc.hashing.fingerprint(some object :: ANY?, propertyExcludes = [] :: LIST? OF STRING?) :: (STRING?)¦calculate a checksum (md5) over a node or a relationship. This deals gracefully with array properties. Two identical entities do share the same hash. -¦function¦apoc.hashing.fingerprintGraph¦apoc.hashing.fingerprintGraph(propertyExcludes = [] :: LIST? OF STRING?) :: (STRING?)¦calculate a checksum (md5) over a the full graph. Be aware that this function does use in-memomry datastructures depending on the size of your graph. -¦function¦apoc.hashing.fingerprinting¦apoc.hashing.fingerprinting(some object :: ANY?, conf = {} :: MAP?) :: (STRING?)¦calculate a checksum (md5) over a node or a relationship. This deals gracefully with array properties. Two identical entities do share the same hash. +¦Qualified Name¦Type¦Release +|xref::overview/apoc.hashing/apoc.hashing.adoc[apoc.hashing.fingerprint icon:book[]] + +calculate a checksum (md5) over a node or a relationship. This deals gracefully with array properties. Two identical entities do share the same hash. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.hashing/apoc.hashing.adoc[apoc.hashing.fingerprintGraph icon:book[]] + +calculate a checksum (md5) over a the full graph. Be aware that this function does use in-memomry datastructures depending on the size of your graph. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.hashing/apoc.hashing.adoc[apoc.hashing.fingerprinting icon:book[]] + +calculate a checksum (md5) over a node or a relationship. This deals gracefully with array properties. Two identical entities do share the same hash. +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.import.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.import.csv index 10d67fa227..7f54fda5cb 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.import.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.import.csv @@ -1,5 +1,21 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.import.csv¦apoc.import.csv(nodes :: LIST? OF MAP?, relationships :: LIST? OF MAP?, config :: MAP?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.import.csv(nodes, relationships, config) - imports nodes and relationships from the provided CSV files with given labels and types -¦procedure¦apoc.import.graphml¦apoc.import.graphml(file :: STRING?, config :: MAP?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.import.graphml(file,config) - imports graphml file -¦procedure¦apoc.import.json¦apoc.import.json(file :: STRING?, config = {} :: MAP?) :: (file :: STRING?, source :: STRING?, format :: STRING?, nodes :: INTEGER?, relationships :: INTEGER?, properties :: INTEGER?, time :: INTEGER?, rows :: INTEGER?, batchSize :: INTEGER?, batches :: INTEGER?, done :: BOOLEAN?, data :: STRING?)¦apoc.import.json(file,config) - imports the json list to the provided file -¦procedure¦apoc.import.xml¦apoc.import.xml(url :: STRING?, config = {} :: MAP?) :: (node :: NODE?)¦apoc.import.xml(file,config) - imports graph from provided file +¦Qualified Name¦Type¦Release +|xref::overview/apoc.import/apoc.import.adoc[apoc.import.csv icon:book[]] + +apoc.import.csv(nodes, relationships, config) - imports nodes and relationships from the provided CSV files with given labels and types +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.import/apoc.import.adoc[apoc.import.graphml icon:book[]] + +apoc.import.graphml(file,config) - imports graphml file +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.import/apoc.import.adoc[apoc.import.json icon:book[]] + +apoc.import.json(file,config) - imports the json list to the provided file +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.import/apoc.import.adoc[apoc.import.xml icon:book[]] + +apoc.import.xml(file,config) - imports graph from provided file +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.json-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.json-lite.csv index 33bd088db6..29d324ec38 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.json-lite.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.json-lite.csv @@ -1,2 +1,2 @@ ¦signature -¦apoc.json.path(json :: STRING?, path = $ :: STRING?) :: (ANY?) +¦apoc.json.path(json :: STRING?, path = $ :: STRING?, pathOptions = null :: LIST? OF STRING?) :: (ANY?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.json.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.json.csv index 51ba11902e..c2d0c37203 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.json.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.json.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.json.path¦apoc.json.path(json :: STRING?, path = $ :: STRING?) :: (ANY?)¦apoc.json.path('\{json}','json-path') +¦Qualified Name¦Type¦Release +|xref::overview/apoc.json/apoc.json.adoc[apoc.json.path icon:book[]] + +apoc.json.path('\{json}' [,'json-path' , 'path-options']) +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.json.path-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.json.path-lite.csv index 33bd088db6..29d324ec38 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.json.path-lite.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.json.path-lite.csv @@ -1,2 +1,2 @@ ¦signature -¦apoc.json.path(json :: STRING?, path = $ :: STRING?) :: (ANY?) +¦apoc.json.path(json :: STRING?, path = $ :: STRING?, pathOptions = null :: LIST? OF STRING?) :: (ANY?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.json.path.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.json.path.csv index 51ba11902e..ba15ef9715 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.json.path.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.json.path.csv @@ -1,2 +1,2 @@ ¦type¦qualified name¦signature¦description -¦function¦apoc.json.path¦apoc.json.path(json :: STRING?, path = $ :: STRING?) :: (ANY?)¦apoc.json.path('\{json}','json-path') +¦function¦apoc.json.path¦apoc.json.path(json :: STRING?, path = $ :: STRING?) :: (ANY?)¦apoc.json.path('\{json}' [,'json-path' , 'path-options']) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.label.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.label.csv index ec3bdcd844..3cd5d78911 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.label.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.label.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.label.exists¦apoc.label.exists(node :: ANY?, label :: STRING?) :: (BOOLEAN?)¦apoc.label.exists(element, label) - returns true or false related to label existance +¦Qualified Name¦Type¦Release +|xref::overview/apoc.label/apoc.label.adoc[apoc.label.exists icon:book[]] + +apoc.label.exists(element, label) - returns true or false related to label existance +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load-lite.csv index 1a62defa8e..fbc549c5c8 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load-lite.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load-lite.csv @@ -8,7 +8,7 @@ ¦apoc.load.jdbcParams(jdbc :: STRING?, sql :: STRING?, params :: LIST? OF ANY?, config = {} :: MAP?) :: (row :: MAP?) ¦apoc.load.jdbcUpdate(jdbc :: STRING?, query :: STRING?, params = [] :: LIST? OF ANY?, config = {} :: MAP?) :: (row :: MAP?) ¦apoc.load.json(url :: STRING?, path = :: STRING?, config = {} :: MAP?) :: (value :: MAP?) -¦apoc.load.jsonArray(url :: STRING?, path = :: STRING?) :: (value :: ANY?) +¦apoc.load.jsonArray(url :: STRING?, path = :: STRING?, config = {} :: MAP?) :: (value :: ANY?) ¦apoc.load.jsonParams(urlOrKey :: STRING?, headers :: MAP?, payload :: STRING?, path = :: STRING?, config = {} :: MAP?) :: (value :: MAP?) ¦apoc.load.ldap(connection :: ANY?, search :: MAP?) :: (entry :: MAP?) ¦apoc.load.xls(url :: STRING?, selector :: STRING?, config = {} :: MAP?) :: (lineNo :: INTEGER?, list :: LIST? OF ANY?, map :: MAP?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.csv index 5bdce9832f..fd79fed8cd 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.csv @@ -1,19 +1,79 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.load.csv¦apoc.load.csv(url :: STRING?, config = {} :: MAP?) :: (lineNo :: INTEGER?, list :: LIST? OF ANY?, strings :: LIST? OF STRING?, map :: MAP?, stringMap :: MAP?)¦apoc.load.csv('url',\{config}) YIELD lineNo, list, map - load CSV from URL as stream of values, +¦Qualified Name¦Type¦Release +|xref::overview/apoc.load/apoc.load.adoc[apoc.load.csv icon:book[]] + +apoc.load.csv('url',\{config}) YIELD lineNo, list, map - load CSV from URL as stream of values, config contains any of: {skip:1,limit:5,header:false,sep:'TAB',ignore:['tmp'],nullValues:['na'],arraySep:';',mapping:{years:{type:'int',arraySep:'-',array:false,name:'age',ignore:false}} -¦procedure¦apoc.load.csvParams¦apoc.load.csvParams(url :: STRING?, httpHeaders :: MAP?, payload :: STRING?, config = {} :: MAP?) :: (lineNo :: INTEGER?, list :: LIST? OF ANY?, strings :: LIST? OF STRING?, map :: MAP?, stringMap :: MAP?)¦apoc.load.csvParams('url', {httpHeader: value}, payload, \{config}) YIELD lineNo, list, map - load from CSV URL (e.g. web-api) while sending headers / payload to load CSV from URL as stream of values, +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.load/apoc.load.adoc[apoc.load.csvParams icon:book[]] + +apoc.load.csvParams('url', {httpHeader: value}, payload, \{config}) YIELD lineNo, list, map - load from CSV URL (e.g. web-api) while sending headers / payload to load CSV from URL as stream of values, config contains any of: {skip:1,limit:5,header:false,sep:'TAB',ignore:['tmp'],nullValues:['na'],arraySep:';',mapping:{years:{type:'int',arraySep:'-',array:false,name:'age',ignore:false}} -¦procedure¦apoc.load.directory¦apoc.load.directory(pattern = * :: STRING?, urlDir = :: STRING?, config = {} :: MAP?) :: (value :: STRING?)¦apoc.load.directory('pattern', 'urlDir', \{config}) YIELD value - Loads list of all files in folder specified by urlDir or in import folder if urlDir string is empty or not specified -¦procedure¦apoc.load.driver¦apoc.load.driver(driverClass :: STRING?) :: VOID¦apoc.load.driver('org.apache.derby.jdbc.EmbeddedDriver') register JDBC driver of source database -¦procedure¦apoc.load.html¦apoc.load.html(url :: STRING?, query = {} :: MAP?, config = {} :: MAP?) :: (value :: MAP?)¦apoc.load.html('url',{name: jquery, name2: jquery}, config) YIELD value - Load Html page and return the result as a Map -¦procedure¦apoc.load.jdbc¦apoc.load.jdbc(jdbc :: STRING?, tableOrSql :: STRING?, params = [] :: LIST? OF ANY?, config = {} :: MAP?) :: (row :: MAP?)¦apoc.load.jdbc('key or url','table or statement', params, config) YIELD row - load from relational database, from a full table or a sql statement -¦procedure¦apoc.load.jdbcParams¦apoc.load.jdbcParams(jdbc :: STRING?, sql :: STRING?, params :: LIST? OF ANY?, config = {} :: MAP?) :: (row :: MAP?)¦deprecated - please use: apoc.load.jdbc('key or url','',[params]) YIELD row - load from relational database, from a sql statement with parameters -¦procedure¦apoc.load.jdbcUpdate¦apoc.load.jdbcUpdate(jdbc :: STRING?, query :: STRING?, params = [] :: LIST? OF ANY?, config = {} :: MAP?) :: (row :: MAP?)¦apoc.load.jdbcUpdate('key or url','statement',[params],config) YIELD row - update relational database, from a SQL statement with optional parameters -¦procedure¦apoc.load.json¦apoc.load.json(url :: STRING?, path = :: STRING?, config = {} :: MAP?) :: (value :: MAP?)¦apoc.load.json('url',path, config) YIELD value - import JSON as stream of values if the JSON was an array or a single value if it was a map -¦procedure¦apoc.load.jsonArray¦apoc.load.jsonArray(url :: STRING?, path = :: STRING?) :: (value :: ANY?)¦apoc.load.jsonArray('url') YIELD value - load array from JSON URL (e.g. web-api) to import JSON as stream of values -¦procedure¦apoc.load.jsonParams¦apoc.load.jsonParams(urlOrKey :: STRING?, headers :: MAP?, payload :: STRING?, path = :: STRING?, config = {} :: MAP?) :: (value :: MAP?)¦apoc.load.jsonParams('url',{header:value},payload, config) YIELD value - load from JSON URL (e.g. web-api) while sending headers / payload to import JSON as stream of values if the JSON was an array or a single value if it was a map -¦procedure¦apoc.load.ldap¦apoc.load.ldap(connection :: ANY?, search :: MAP?) :: (entry :: MAP?)¦apoc.load.ldap("key" or \{connectionMap},\{searchMap}) Load entries from an ldap source (yield entry) -¦procedure¦apoc.load.xls¦apoc.load.xls(url :: STRING?, selector :: STRING?, config = {} :: MAP?) :: (lineNo :: INTEGER?, list :: LIST? OF ANY?, map :: MAP?)¦apoc.load.xls('url','selector',\{config}) YIELD lineNo, list, map - load XLS fom URL as stream of row values, +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.load/apoc.load.adoc[apoc.load.directory icon:book[]] + +apoc.load.directory('pattern', 'urlDir', \{config}) YIELD value - Loads list of all files in folder specified by urlDir or in import folder if urlDir string is empty or not specified +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.load/apoc.load.adoc[apoc.load.driver icon:book[]] + +apoc.load.driver('org.apache.derby.jdbc.EmbeddedDriver') register JDBC driver of source database +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.load/apoc.load.adoc[apoc.load.html icon:book[]] + +apoc.load.html('url',{name: jquery, name2: jquery}, config) YIELD value - Load Html page and return the result as a Map +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.load/apoc.load.adoc[apoc.load.jdbc icon:book[]] + +apoc.load.jdbc('key or url','table or statement', params, config) YIELD row - load from relational database, from a full table or a sql statement +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.load/apoc.load.adoc[apoc.load.jdbcParams icon:book[]] + +deprecated - please use: apoc.load.jdbc('key or url','',[params]) YIELD row - load from relational database, from a sql statement with parameters +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.load/apoc.load.adoc[apoc.load.jdbcUpdate icon:book[]] + +apoc.load.jdbcUpdate('key or url','statement',[params],config) YIELD row - update relational database, from a SQL statement with optional parameters +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.load/apoc.load.adoc[apoc.load.json icon:book[]] + +apoc.load.json('url',path, config) YIELD value - import JSON as stream of values if the JSON was an array or a single value if it was a map +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.load/apoc.load.adoc[apoc.load.jsonArray icon:book[]] + +apoc.load.jsonArray('url') YIELD value - load array from JSON URL (e.g. web-api) to import JSON as stream of values +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.load/apoc.load.adoc[apoc.load.jsonParams icon:book[]] + +apoc.load.jsonParams('url',{header:value},payload, config) YIELD value - load from JSON URL (e.g. web-api) while sending headers / payload to import JSON as stream of values if the JSON was an array or a single value if it was a map +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.load/apoc.load.adoc[apoc.load.ldap icon:book[]] + +apoc.load.ldap("key" or \{connectionMap},\{searchMap}) Load entries from an ldap source (yield entry) +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.load/apoc.load.adoc[apoc.load.xls icon:book[]] + +apoc.load.xls('url','selector',\{config}) YIELD lineNo, list, map - load XLS fom URL as stream of row values, config contains any of: {skip:1,limit:5,header:false,ignore:['tmp'],arraySep:';',mapping:{years:{type:'int',arraySep:'-',array:false,name:'age',ignore:false, dateFormat:'iso_date', dateParse:['dd-MM-yyyy']}} -¦procedure¦apoc.load.xml¦apoc.load.xml(url :: STRING?, path = / :: STRING?, config = {} :: MAP?, simple = false :: BOOLEAN?) :: (value :: MAP?)¦apoc.load.xml('http://example.com/test.xml', 'xPath',config, false) YIELD value as doc CREATE (p:Person) SET p.name = doc.name load from XML URL (e.g. web-api) to import XML as single nested map with attributes and _type, _text and _childrenx fields. -¦procedure¦apoc.load.xmlSimple¦apoc.load.xmlSimple(url :: STRING?) :: (value :: MAP?)¦apoc.load.xmlSimple('http://example.com/test.xml') YIELD value as doc CREATE (p:Person) SET p.name = doc.name load from XML URL (e.g. web-api) to import XML as single nested map with attributes and _type, _text and _children fields. This method does intentionally not work with XML mixed content. +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.load/apoc.load.adoc[apoc.load.xml icon:book[]] + +apoc.load.xml('http://example.com/test.xml', 'xPath',config, false) YIELD value as doc CREATE (p:Person) SET p.name = doc.name - load from XML URL (e.g. web-api) to import XML as single nested map with attributes and _type, _text and _childrenx fields. +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.load/apoc.load.adoc[apoc.load.xmlSimple icon:book[]] + +apoc.load.xmlSimple('http://example.com/test.xml') YIELD value as doc CREATE (p:Person) SET p.name = doc.name - load from XML URL (e.g. web-api) to import XML as single nested map with attributes and _type, _text and _children fields. This method does intentionally not work with XML mixed content. +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.csvParams.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.csvParams.adoc index c756cc3d76..092e5cf262 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.csvParams.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.csvParams.adoc @@ -3,4 +3,4 @@ `apoc.load.csvParams('url', {httpHeader: value}, payload, \{config}) YIELD lineNo, list, map` - load from CSV URL (e.g. web-api) while sending headers / payload to load CSV from URL as stream of values, config contains any of: {skip:1,limit:5,header:false,sep:'TAB',ignore:['tmp'],nullValues:['na'],arraySep:';',mapping:{years:{type:'int',arraySep:'-',array:false,name:'age',ignore:false}} ¦label:procedure[] -¦label:apoc-core[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.adoc index 9389a0e63b..c3e03c4cd1 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.adoc @@ -2,4 +2,4 @@ `apoc.load.directory('pattern', 'urlDir', \{config}) YIELD value` - Loads list of all files in folder specified by urlDir or in import folder if urlDir string is empty or not specified ¦label:procedure[] -¦label:apoc-core[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.async.add.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.async.add.adoc index 11b1898f64..2e07987036 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.async.add.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.async.add.adoc @@ -1,5 +1,5 @@ -¦xref::overview/apoc.load.directory.async/apoc.load.directory.async.add.adoc[apoc.load.directory.async.add icon:book[]] + +¦xref::overview/apoc.load/apoc.load.directory.async.add.adoc[apoc.load.directory.async.add icon:book[]] + `apoc.load.directory.async.add(name, cypher, pattern, urlDir, {}) YIELD name, status, pattern, cypher, urlDir, config, error` - Add or replace a folder listener with a specific name, pattern and url directory that execute the specified cypher query when an event is triggered and return listener list ¦label:procedure[] -¦label:apoc-core[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.async.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.async.csv index 0890ec6dac..92b1c58607 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.async.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.async.csv @@ -1,21 +1,21 @@ ¦Qualified Name¦Type¦Release -|xref::overview/apoc.load.directory.async/apoc.load.directory.async.adoc[apoc.load.directory.async.add icon:book[]] +|xref::overview/apoc.load.directory.async/apoc.load.adoc[apoc.load.directory.async.add icon:book[]] apoc.load.directory.async.add(name, cypher, pattern, urlDir, {}) YIELD name, status, pattern, cypher, urlDir, config, error - Add or replace a folder listener with a specific name, pattern and url directory that execute the specified cypher query when an event is triggered and return listener list |label:procedure[] -|label:apoc-core[] -|xref::overview/apoc.load.directory.async/apoc.load.directory.async.adoc[apoc.load.directory.async.list icon:book[]] +|label:apoc-full[] +|xref::overview/apoc.load.directory.async/apoc.load.adoc[apoc.load.directory.async.list icon:book[]] apoc.load.directory.async.list() YIELD name, status, pattern, cypher, urlDir, config, error - List of all folder listeners |label:procedure[] -|label:apoc-core[] -|xref::overview/apoc.load.directory.async/apoc.load.directory.async.adoc[apoc.load.directory.async.remove icon:book[]] +|label:apoc-full[] +|xref::overview/apoc.load.directory.async/apoc.load.adoc[apoc.load.directory.async.remove icon:book[]] apoc.load.directory.async.remove(name) YIELD name, status, pattern, cypher, urlDir, config, error - Remove a folder listener by name and return remaining listeners, if any |label:procedure[] -|label:apoc-core[] -|xref::overview/apoc.load.directory.async/apoc.load.directory.async.adoc[apoc.load.directory.async.removeAll icon:book[]] +|label:apoc-full[] +|xref::overview/apoc.load.directory.async/apoc.load.adoc[apoc.load.directory.async.removeAll icon:book[]] apoc.load.directory.async.removeAll() - Remove all folder listeners |label:procedure[] -|label:apoc-core[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.async.list.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.async.list.adoc index c23fa322a5..f697ea2627 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.async.list.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.async.list.adoc @@ -1,5 +1,5 @@ -¦xref::overview/apoc.load.directory.async/apoc.load.directory.async.list.adoc[apoc.load.directory.async.list icon:book[]] + +¦xref::overview/apoc.load/apoc.load.directory.async.list.adoc[apoc.load.directory.async.list icon:book[]] + `apoc.load.directory.async.list() YIELD name, status, pattern, cypher, urlDir, config, error` - List of all folder listeners ¦label:procedure[] -¦label:apoc-core[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.async.remove.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.async.remove.adoc index 7fc3b8f725..0f5882adca 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.async.remove.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.async.remove.adoc @@ -1,5 +1,5 @@ -¦xref::overview/apoc.load.directory.async/apoc.load.directory.async.remove.adoc[apoc.load.directory.async.remove icon:book[]] + +¦xref::overview/apoc.load/apoc.load.directory.async.remove.adoc[apoc.load.directory.async.remove icon:book[]] + `apoc.load.directory.async.remove(name) YIELD name, status, pattern, cypher, urlDir, config, error` - Remove a folder listener by name and return remaining listeners, if any ¦label:procedure[] -¦label:apoc-core[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.async.removeAll.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.async.removeAll.adoc index 2714eadd41..9c1232dd33 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.async.removeAll.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.directory.async.removeAll.adoc @@ -1,5 +1,5 @@ -¦xref::overview/apoc.load.directory.async/apoc.load.directory.async.removeAll.adoc[apoc.load.directory.async.removeAll icon:book[]] + +¦xref::overview/apoc.load/apoc.load.directory.async.removeAll.adoc[apoc.load.directory.async.removeAll icon:book[]] + `apoc.load.directory.async.removeAll()` - Remove all folder listeners ¦label:procedure[] -¦label:apoc-core[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.jsonArray-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.jsonArray-lite.csv index 6f2ac75276..deb151f440 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.jsonArray-lite.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.load.jsonArray-lite.csv @@ -1,2 +1,2 @@ ¦signature -¦apoc.load.jsonArray(url :: STRING?, path = :: STRING?) :: (value :: ANY?) +¦apoc.load.jsonArray(url :: STRING?, path = :: STRING?, config = {} :: MAP?) :: (value :: ANY?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.lock.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.lock.csv index 6a2a577f29..988e97ac39 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.lock.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.lock.csv @@ -1,4 +1,16 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.lock.all¦apoc.lock.all(nodes :: LIST? OF NODE?, rels :: LIST? OF RELATIONSHIP?) :: VOID¦apoc.lock.all([nodes],[relationships]) acquires a write lock on the given nodes and relationships -¦procedure¦apoc.lock.nodes¦apoc.lock.nodes(nodes :: LIST? OF NODE?) :: VOID¦apoc.lock.nodes([nodes]) acquires a write lock on the given nodes -¦procedure¦apoc.lock.rels¦apoc.lock.rels(rels :: LIST? OF RELATIONSHIP?) :: VOID¦apoc.lock.rels([relationships]) acquires a write lock on the given relationship +¦Qualified Name¦Type¦Release +|xref::overview/apoc.lock/apoc.lock.adoc[apoc.lock.all icon:book[]] + +apoc.lock.all([nodes],[relationships]) acquires a write lock on the given nodes and relationships +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.lock/apoc.lock.adoc[apoc.lock.nodes icon:book[]] + +apoc.lock.nodes([nodes]) acquires a write lock on the given nodes +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.lock/apoc.lock.adoc[apoc.lock.rels icon:book[]] + +apoc.lock.rels([relationships]) acquires a write lock on the given relationship +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.lock.read.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.lock.read.csv index 96d6069d80..010689f226 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.lock.read.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.lock.read.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.lock.read.nodes¦apoc.lock.read.nodes(nodes :: LIST? OF NODE?) :: VOID¦apoc.lock.read.nodes([nodes]) acquires a read lock on the given nodes -¦procedure¦apoc.lock.read.rels¦apoc.lock.read.rels(rels :: LIST? OF RELATIONSHIP?) :: VOID¦apoc.lock.read.rels([relationships]) acquires a read lock on the given relationship +¦Qualified Name¦Type¦Release +|xref::overview/apoc.lock.read/apoc.lock.adoc[apoc.lock.read.nodes icon:book[]] + +apoc.lock.read.nodes([nodes]) acquires a read lock on the given nodes +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.lock.read/apoc.lock.adoc[apoc.lock.read.rels icon:book[]] + +apoc.lock.read.rels([relationships]) acquires a read lock on the given relationship +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.lock.read.nodes.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.lock.read.nodes.adoc index 407f1d68e2..4a0d761d79 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.lock.read.nodes.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.lock.read.nodes.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.lock.read/apoc.lock.read.nodes.adoc[apoc.lock.read.nodes icon:book[]] + +¦xref::overview/apoc.lock/apoc.lock.read.nodes.adoc[apoc.lock.read.nodes icon:book[]] + `apoc.lock.read.nodes([nodes]) acquires a read lock on the given nodes` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.lock.read.rels.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.lock.read.rels.adoc index c026a26d75..3cc3e3766a 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.lock.read.rels.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.lock.read.rels.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.lock.read/apoc.lock.read.rels.adoc[apoc.lock.read.rels icon:book[]] + +¦xref::overview/apoc.lock/apoc.lock.read.rels.adoc[apoc.lock.read.rels icon:book[]] + `apoc.lock.read.rels([relationships]) acquires a read lock on the given relationship` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.log.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.log.csv index fb76d32493..e937c12413 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.log.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.log.csv @@ -1,6 +1,26 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.log.debug¦apoc.log.debug(message :: STRING?, params = [] :: LIST? OF ANY?) :: VOID¦apoc.log.debug(message, params) - logs debug message -¦procedure¦apoc.log.error¦apoc.log.error(message :: STRING?, params = [] :: LIST? OF ANY?) :: VOID¦apoc.log.error(message, params) - logs error message -¦procedure¦apoc.log.info¦apoc.log.info(message :: STRING?, params = [] :: LIST? OF ANY?) :: VOID¦apoc.log.info(message, params) - logs info message -¦procedure¦apoc.log.stream¦apoc.log.stream(path :: STRING?, config = {} :: MAP?) :: (lineNo :: INTEGER?, line :: STRING?, path :: STRING?)¦apoc.log.stream('neo4j.log', { last: n }) - retrieve log file contents, optionally return only the last n lines -¦procedure¦apoc.log.warn¦apoc.log.warn(message :: STRING?, params = [] :: LIST? OF ANY?) :: VOID¦apoc.log.warn(message, params) - logs warn message +¦Qualified Name¦Type¦Release +|xref::overview/apoc.log/apoc.log.adoc[apoc.log.debug icon:book[]] + +apoc.log.debug(message, params) - logs debug message +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.log/apoc.log.adoc[apoc.log.error icon:book[]] + +apoc.log.error(message, params) - logs error message +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.log/apoc.log.adoc[apoc.log.info icon:book[]] + +apoc.log.info(message, params) - logs info message +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.log/apoc.log.adoc[apoc.log.stream icon:book[]] + +apoc.log.stream('neo4j.log', { last: n }) - retrieve log file contents, optionally return only the last n lines +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.log/apoc.log.adoc[apoc.log.warn icon:book[]] + +apoc.log.warn(message, params) - logs warn message +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.math.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.math.csv index 3e12281d61..c14d31fcec 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.math.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.math.csv @@ -1,11 +1,51 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.math.regr¦apoc.math.regr(label :: STRING?, propertyY :: STRING?, propertyX :: STRING?) :: (r2 :: FLOAT?, avgX :: FLOAT?, avgY :: FLOAT?, slope :: FLOAT?)¦apoc.math.regr(label, propertyY, propertyX) - It calculates the coefficient of determination (R-squared) for the values of propertyY and propertyX in the provided label -¦function¦apoc.math.maxByte¦apoc.math.maxByte() :: (INTEGER?)¦apoc.math.maxByte() | return the maximum value an byte can have -¦function¦apoc.math.maxDouble¦apoc.math.maxDouble() :: (FLOAT?)¦apoc.math.maxDouble() | return the largest positive finite value of type double -¦function¦apoc.math.maxInt¦apoc.math.maxInt() :: (INTEGER?)¦apoc.math.maxInt() | return the maximum value an int can have -¦function¦apoc.math.maxLong¦apoc.math.maxLong() :: (INTEGER?)¦apoc.math.maxLong() | return the maximum value a long can have -¦function¦apoc.math.minByte¦apoc.math.minByte() :: (INTEGER?)¦apoc.math.minByte() | return the minimum value an byte can have -¦function¦apoc.math.minDouble¦apoc.math.minDouble() :: (FLOAT?)¦apoc.math.minDouble() | return the smallest positive nonzero value of type double -¦function¦apoc.math.minInt¦apoc.math.minInt() :: (INTEGER?)¦apoc.math.minInt() | return the minimum value an int can have -¦function¦apoc.math.minLong¦apoc.math.minLong() :: (INTEGER?)¦apoc.math.minLong() | return the minimum value a long can have -¦function¦apoc.math.round¦apoc.math.round(value :: FLOAT?, precision = 0 :: INTEGER?, mode = HALF_UP :: STRING?) :: (FLOAT?)¦apoc.math.round(value,[prec],mode=[CEILING,FLOOR,UP,DOWN,HALF_EVEN,HALF_DOWN,HALF_UP,DOWN,UNNECESSARY]) +¦Qualified Name¦Type¦Release +|xref::overview/apoc.math/apoc.math.adoc[apoc.math.regr icon:book[]] + +apoc.math.regr(label, propertyY, propertyX) - It calculates the coefficient of determination (R-squared) for the values of propertyY and propertyX in the provided label +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.math/apoc.math.adoc[apoc.math.maxByte icon:book[]] + +apoc.math.maxByte() \| return the maximum value an byte can have +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.math/apoc.math.adoc[apoc.math.maxDouble icon:book[]] + +apoc.math.maxDouble() \| return the largest positive finite value of type double +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.math/apoc.math.adoc[apoc.math.maxInt icon:book[]] + +apoc.math.maxInt() \| return the maximum value an int can have +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.math/apoc.math.adoc[apoc.math.maxLong icon:book[]] + +apoc.math.maxLong() \| return the maximum value a long can have +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.math/apoc.math.adoc[apoc.math.minByte icon:book[]] + +apoc.math.minByte() \| return the minimum value an byte can have +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.math/apoc.math.adoc[apoc.math.minDouble icon:book[]] + +apoc.math.minDouble() \| return the smallest positive nonzero value of type double +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.math/apoc.math.adoc[apoc.math.minInt icon:book[]] + +apoc.math.minInt() \| return the minimum value an int can have +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.math/apoc.math.adoc[apoc.math.minLong icon:book[]] + +apoc.math.minLong() \| return the minimum value a long can have +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.math/apoc.math.adoc[apoc.math.round icon:book[]] + +apoc.math.round(value,[prec],mode=[CEILING,FLOOR,UP,DOWN,HALF_EVEN,HALF_DOWN,HALF_UP,DOWN,UNNECESSARY]) +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.merge.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.merge.csv index a65e8be361..80944f30d9 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.merge.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.merge.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.merge.node¦apoc.merge.node(label :: LIST? OF STRING?, identProps :: MAP?, props = {} :: MAP?, onMatchProps = {} :: MAP?) :: (node :: NODE?)¦"apoc.merge.node.eager(['Label'], identProps:{key:value, ...}, onCreateProps:{key:value,...}, onMatchProps:{key:value,...}}) - merge nodes with dynamic labels, with support for setting properties ON CREATE or ON MATCH -¦procedure¦apoc.merge.relationship¦apoc.merge.relationship(startNode :: NODE?, relationshipType :: STRING?, identProps :: MAP?, props :: MAP?, endNode :: NODE?, onMatchProps = {} :: MAP?) :: (rel :: RELATIONSHIP?)¦apoc.merge.relationship(startNode, relType, identProps:{key:value, ...}, onCreateProps:{key:value, ...}, endNode, onMatchProps:{key:value, ...}) - merge relationship with dynamic type, with support for setting properties ON CREATE or ON MATCH +¦Qualified Name¦Type¦Release +|xref::overview/apoc.merge/apoc.merge.adoc[apoc.merge.node icon:book[]] + +"apoc.merge.node.eager(['Label'], identProps:{key:value, ...}, onCreateProps:{key:value,...}, onMatchProps:{key:value,...}}) - merge nodes with dynamic labels, with support for setting properties ON CREATE or ON MATCH +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.merge/apoc.merge.adoc[apoc.merge.relationship icon:book[]] + +apoc.merge.relationship(startNode, relType, identProps:{key:value, ...}, onCreateProps:{key:value, ...}, endNode, onMatchProps:{key:value, ...}) - merge relationship with dynamic type, with support for setting properties ON CREATE or ON MATCH +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.merge.node.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.merge.node.csv index 197cfd3146..b70cbb3ce2 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.merge.node.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.merge.node.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.merge.node¦apoc.merge.node(label :: LIST? OF STRING?, identProps :: MAP?, props = {} :: MAP?, onMatchProps = {} :: MAP?) :: (node :: NODE?)¦"apoc.merge.node.eager(['Label'], identProps:{key:value, ...}, onCreateProps:{key:value,...}, onMatchProps:{key:value,...}}) - merge nodes with dynamic labels, with support for setting properties ON CREATE or ON MATCH +¦Qualified Name¦Type¦Release +|xref::overview/apoc.merge.node/apoc.merge.adoc[apoc.merge.node.eager icon:book[]] + +apoc.merge.node.eager(['Label'], identProps:{key:value, ...}, onCreateProps:{key:value,...}, onMatchProps:{key:value,...}}) - merge nodes eagerly, with dynamic labels, with support for setting properties ON CREATE or ON MATCH +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.merge.node.eager.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.merge.node.eager.adoc index b3ece15fe0..73bf98c375 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.merge.node.eager.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.merge.node.eager.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.merge.node/apoc.merge.node.eager.adoc[apoc.merge.node.eager icon:book[]] + +¦xref::overview/apoc.merge/apoc.merge.node.eager.adoc[apoc.merge.node.eager icon:book[]] + `apoc.merge.node.eager(['Label'], identProps:{key:value, ...}, onCreateProps:{key:value,...}, onMatchProps:{key:value,...}})` - merge nodes eagerly, with dynamic labels, with support for setting properties ON CREATE or ON MATCH ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.merge.relationship.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.merge.relationship.csv index 0bcc02c7ad..fee0c2152b 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.merge.relationship.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.merge.relationship.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.merge.relationship¦apoc.merge.relationship(startNode :: NODE?, relationshipType :: STRING?, identProps :: MAP?, props :: MAP?, endNode :: NODE?, onMatchProps = {} :: MAP?) :: (rel :: RELATIONSHIP?)¦apoc.merge.relationship(startNode, relType, identProps:{key:value, ...}, onCreateProps:{key:value, ...}, endNode, onMatchProps:{key:value, ...}) - merge relationship with dynamic type, with support for setting properties ON CREATE or ON MATCH +¦Qualified Name¦Type¦Release +|xref::overview/apoc.merge.relationship/apoc.merge.adoc[apoc.merge.relationship.eager icon:book[]] + +apoc.merge.relationship(startNode, relType, identProps:{key:value, ...}, onCreateProps:{key:value, ...}, endNode, onMatchProps:{key:value, ...}) - merge relationship with dynamic type, with support for setting properties ON CREATE or ON MATCH +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.merge.relationship.eager.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.merge.relationship.eager.adoc index 767e0c22ad..cd4751ab05 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.merge.relationship.eager.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.merge.relationship.eager.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.merge.relationship/apoc.merge.relationship.eager.adoc[apoc.merge.relationship.eager icon:book[]] + +¦xref::overview/apoc.merge/apoc.merge.relationship.eager.adoc[apoc.merge.relationship.eager icon:book[]] + `apoc.merge.relationship(startNode, relType, identProps:{key:value, ...}, onCreateProps:{key:value, ...}, endNode, onMatchProps:{key:value, ...})` - merge relationship with dynamic type, with support for setting properties ON CREATE or ON MATCH ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.csv index 79da0fdb4d..e24673acc3 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.csv @@ -1,13 +1,61 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.meta.data¦apoc.meta.data(config = {} :: MAP?) :: (label :: STRING?, property :: STRING?, count :: INTEGER?, unique :: BOOLEAN?, index :: BOOLEAN?, existence :: BOOLEAN?, type :: STRING?, array :: BOOLEAN?, sample :: LIST? OF ANY?, leftCount :: INTEGER?, rightCount :: INTEGER?, left :: INTEGER?, right :: INTEGER?, other :: LIST? OF STRING?, otherLabels :: LIST? OF STRING?, elementType :: STRING?)¦apoc.meta.data(\{config}) - examines a subset of the graph to provide a tabular meta information -¦procedure¦apoc.meta.graph¦apoc.meta.graph(config = {} :: MAP?) :: (nodes :: LIST? OF NODE?, relationships :: LIST? OF RELATIONSHIP?)¦apoc.meta.graph - examines the full graph to create the meta-graph -¦procedure¦apoc.meta.graphSample¦apoc.meta.graphSample(config = {} :: MAP?) :: (nodes :: LIST? OF NODE?, relationships :: LIST? OF RELATIONSHIP?)¦apoc.meta.graphSample() - examines the database statistics to build the meta graph, very fast, might report extra relationships -¦procedure¦apoc.meta.nodeTypeProperties¦apoc.meta.nodeTypeProperties(config = {} :: MAP?) :: (nodeType :: STRING?, nodeLabels :: LIST? OF STRING?, propertyName :: STRING?, propertyTypes :: LIST? OF STRING?, mandatory :: BOOLEAN?, propertyObservations :: INTEGER?, totalObservations :: INTEGER?)¦apoc.meta.nodeTypeProperties() -¦procedure¦apoc.meta.relTypeProperties¦apoc.meta.relTypeProperties(config = {} :: MAP?) :: (relType :: STRING?, sourceNodeLabels :: LIST? OF STRING?, targetNodeLabels :: LIST? OF STRING?, propertyName :: STRING?, propertyTypes :: LIST? OF STRING?, mandatory :: BOOLEAN?, propertyObservations :: INTEGER?, totalObservations :: INTEGER?)¦apoc.meta.relTypeProperties() -¦procedure¦apoc.meta.schema¦apoc.meta.schema(config = {} :: MAP?) :: (value :: MAP?)¦apoc.meta.schema(\{config}) - examines a subset of the graph to provide a map-like meta information -¦procedure¦apoc.meta.stats¦apoc.meta.stats() :: (labelCount :: INTEGER?, relTypeCount :: INTEGER?, propertyKeyCount :: INTEGER?, nodeCount :: INTEGER?, relCount :: INTEGER?, labels :: MAP?, relTypes :: MAP?, relTypesCount :: MAP?, stats :: MAP?)¦apoc.meta.stats yield labelCount, relTypeCount, propertyKeyCount, nodeCount, relCount, labels, relTypes, stats | returns the information stored in the transactional database statistics -¦procedure¦apoc.meta.subGraph¦apoc.meta.subGraph(config :: MAP?) :: (nodes :: LIST? OF NODE?, relationships :: LIST? OF RELATIONSHIP?)¦apoc.meta.subGraph({labels:[labels],rels:[rel-types], excludes:[labels,rel-types]}) - examines a sample sub graph to create the meta-graph -¦function¦apoc.meta.isType¦apoc.meta.isType(value :: ANY?, type :: STRING?) :: (BOOLEAN?)¦apoc.meta.isType(value,type) - returns a row if type name matches none if not (INTEGER,FLOAT,STRING,BOOLEAN,RELATIONSHIP,NODE,PATH,NULL,UNKNOWN,MAP,LIST) -¦function¦apoc.meta.type¦apoc.meta.type(value :: ANY?) :: (STRING?)¦apoc.meta.type(value) - type name of a value (INTEGER,FLOAT,STRING,BOOLEAN,RELATIONSHIP,NODE,PATH,NULL,UNKNOWN,MAP,LIST) -¦function¦apoc.meta.typeName¦apoc.meta.typeName(value :: ANY?) :: (STRING?)¦apoc.meta.typeName(value) - type name of a value (INTEGER,FLOAT,STRING,BOOLEAN,RELATIONSHIP,NODE,PATH,NULL,UNKNOWN,MAP,LIST) -¦function¦apoc.meta.types¦apoc.meta.types(properties :: ANY?) :: (MAP?)¦apoc.meta.types(node-relationship-map) - returns a map of keys to types +¦Qualified Name¦Type¦Release +|xref::overview/apoc.meta/apoc.meta.adoc[apoc.meta.data icon:book[]] + +apoc.meta.data(\{config}) - examines a subset of the graph to provide a tabular meta information +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.meta/apoc.meta.adoc[apoc.meta.graph icon:book[]] + +apoc.meta.graph - examines the full graph to create the meta-graph +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.meta/apoc.meta.adoc[apoc.meta.graphSample icon:book[]] + +apoc.meta.graphSample() - examines the database statistics to build the meta graph, very fast, might report extra relationships +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.meta/apoc.meta.adoc[apoc.meta.nodeTypeProperties icon:book[]] + +apoc.meta.nodeTypeProperties() +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.meta/apoc.meta.adoc[apoc.meta.relTypeProperties icon:book[]] + +apoc.meta.relTypeProperties() +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.meta/apoc.meta.adoc[apoc.meta.schema icon:book[]] + +apoc.meta.schema(\{config}) - examines a subset of the graph to provide a map-like meta information +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.meta/apoc.meta.adoc[apoc.meta.stats icon:book[]] + +apoc.meta.stats yield labelCount, relTypeCount, propertyKeyCount, nodeCount, relCount, labels, relTypes, stats \| returns the information stored in the transactional database statistics +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.meta/apoc.meta.adoc[apoc.meta.subGraph icon:book[]] + +apoc.meta.subGraph({labels:[labels],rels:[rel-types], excludes:[labels,rel-types]}) - examines a sample sub graph to create the meta-graph +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.meta/apoc.meta.adoc[apoc.meta.isType icon:book[]] + +apoc.meta.isType(value,type) - returns a row if type name matches none if not (INTEGER,FLOAT,STRING,BOOLEAN,RELATIONSHIP,NODE,PATH,NULL,UNKNOWN,MAP,LIST) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.meta/apoc.meta.adoc[apoc.meta.type icon:book[]] + +apoc.meta.type(value) - type name of a value (INTEGER,FLOAT,STRING,BOOLEAN,RELATIONSHIP,NODE,PATH,NULL,UNKNOWN,MAP,LIST) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.meta/apoc.meta.adoc[apoc.meta.typeName icon:book[]] + +apoc.meta.typeName(value) - type name of a value (INTEGER,FLOAT,STRING,BOOLEAN,RELATIONSHIP,NODE,PATH,NULL,UNKNOWN,MAP,LIST) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.meta/apoc.meta.adoc[apoc.meta.types icon:book[]] + +apoc.meta.types(node-relationship-map) - returns a map of keys to types +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.cypher.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.cypher.csv index 2683809003..46832a7d33 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.cypher.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.cypher.csv @@ -1,4 +1,16 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.meta.cypher.isType¦apoc.meta.cypher.isType(value :: ANY?, type :: STRING?) :: (BOOLEAN?)¦apoc.meta.cypher.isType(value,type) - returns a row if type name matches none if not (INTEGER,FLOAT,STRING,BOOLEAN,RELATIONSHIP,NODE,PATH,NULL,MAP,LIST OF ,POINT,DATE,DATE_TIME,LOCAL_TIME,LOCAL_DATE_TIME,TIME,DURATION) -¦function¦apoc.meta.cypher.type¦apoc.meta.cypher.type(value :: ANY?) :: (STRING?)¦apoc.meta.cypher.type(value) - type name of a value (INTEGER,FLOAT,STRING,BOOLEAN,RELATIONSHIP,NODE,PATH,NULL,MAP,LIST OF ,POINT,DATE,DATE_TIME,LOCAL_TIME,LOCAL_DATE_TIME,TIME,DURATION) -¦function¦apoc.meta.cypher.types¦apoc.meta.cypher.types(properties :: ANY?) :: (MAP?)¦apoc.meta.cypher.types(node-relationship-map) - returns a map of keys to types +¦Qualified Name¦Type¦Release +|xref::overview/apoc.meta.cypher/apoc.meta.adoc[apoc.meta.cypher.isType icon:book[]] + +apoc.meta.cypher.isType(value,type) - returns a row if type name matches none if not (INTEGER,FLOAT,STRING,BOOLEAN,RELATIONSHIP,NODE,PATH,NULL,MAP,LIST OF ,POINT,DATE,DATE_TIME,LOCAL_TIME,LOCAL_DATE_TIME,TIME,DURATION) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.meta.cypher/apoc.meta.adoc[apoc.meta.cypher.type icon:book[]] + +apoc.meta.cypher.type(value) - type name of a value (INTEGER,FLOAT,STRING,BOOLEAN,RELATIONSHIP,NODE,PATH,NULL,MAP,LIST OF ,POINT,DATE,DATE_TIME,LOCAL_TIME,LOCAL_DATE_TIME,TIME,DURATION) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.meta.cypher/apoc.meta.adoc[apoc.meta.cypher.types icon:book[]] + +apoc.meta.cypher.types(node-relationship-map) - returns a map of keys to types +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.cypher.isType.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.cypher.isType.adoc index 5907371c90..e5a4ee9c25 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.cypher.isType.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.cypher.isType.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.meta.cypher/apoc.meta.cypher.isType.adoc[apoc.meta.cypher.isType icon:book[]] + +¦xref::overview/apoc.meta/apoc.meta.cypher.isType.adoc[apoc.meta.cypher.isType icon:book[]] + `apoc.meta.cypher.isType(value,type)` - returns a row if type name matches none if not (INTEGER,FLOAT,STRING,BOOLEAN,RELATIONSHIP,NODE,PATH,NULL,MAP,LIST OF ,POINT,DATE,DATE_TIME,LOCAL_TIME,LOCAL_DATE_TIME,TIME,DURATION) ¦label:function[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.cypher.type.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.cypher.type.adoc index ba3fae6d8a..8c9433d9c4 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.cypher.type.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.cypher.type.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.meta.cypher/apoc.meta.cypher.type.adoc[apoc.meta.cypher.type icon:book[]] + +¦xref::overview/apoc.meta/apoc.meta.cypher.type.adoc[apoc.meta.cypher.type icon:book[]] + `apoc.meta.cypher.type(value)` - type name of a value (INTEGER,FLOAT,STRING,BOOLEAN,RELATIONSHIP,NODE,PATH,NULL,MAP,LIST OF ,POINT,DATE,DATE_TIME,LOCAL_TIME,LOCAL_DATE_TIME,TIME,DURATION) ¦label:function[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.cypher.types.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.cypher.types.adoc index a2c6354fa8..aae54c1de1 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.cypher.types.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.cypher.types.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.meta.cypher/apoc.meta.cypher.types.adoc[apoc.meta.cypher.types icon:book[]] + +¦xref::overview/apoc.meta/apoc.meta.cypher.types.adoc[apoc.meta.cypher.types icon:book[]] + `apoc.meta.cypher.types(node-relationship-map) ` - returns a map of keys to types ¦label:function[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.data.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.data.csv index 9fea12c361..bbcf85a09e 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.data.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.data.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.meta.data¦apoc.meta.data(config = {} :: MAP?) :: (label :: STRING?, property :: STRING?, count :: INTEGER?, unique :: BOOLEAN?, index :: BOOLEAN?, existence :: BOOLEAN?, type :: STRING?, array :: BOOLEAN?, sample :: LIST? OF ANY?, leftCount :: INTEGER?, rightCount :: INTEGER?, left :: INTEGER?, right :: INTEGER?, other :: LIST? OF STRING?, otherLabels :: LIST? OF STRING?, elementType :: STRING?)¦apoc.meta.data(\{config}) - examines a subset of the graph to provide a tabular meta information +¦Qualified Name¦Type¦Release +|xref::overview/apoc.meta.data/apoc.meta.adoc[apoc.meta.data.of icon:book[]] + +apoc.meta.data.of(\{graph}, \{config}) - examines a subset of the graph to provide a tabular meta information +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.data.of-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.data.of-lite.csv index b248820c9a..f3c7c4b75c 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.data.of-lite.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.data.of-lite.csv @@ -1,2 +1,2 @@ ¦signature -¦apoc.meta.data.of(graph = {} :: ANY?, config = {} :: MAP?) :: (label :: STRING?, property :: STRING?, count :: INTEGER?, unique :: BOOLEAN?, index :: BOOLEAN?, existence :: BOOLEAN?, type :: STRING?, array :: BOOLEAN?, sample :: LIST? OF ANY?, leftCount :: INTEGER?, rightCount :: INTEGER?, left :: INTEGER?, right :: INTEGER?, other :: LIST? OF STRING?, otherLabels :: LIST? OF STRING?, elementType :: STRING?) +¦apoc.meta.data.of(graph :: ANY?, config = {} :: MAP?) :: (label :: STRING?, property :: STRING?, count :: INTEGER?, unique :: BOOLEAN?, index :: BOOLEAN?, existence :: BOOLEAN?, type :: STRING?, array :: BOOLEAN?, sample :: LIST? OF ANY?, leftCount :: INTEGER?, rightCount :: INTEGER?, left :: INTEGER?, right :: INTEGER?, other :: LIST? OF STRING?, otherLabels :: LIST? OF STRING?, elementType :: STRING?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.data.of.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.data.of.adoc new file mode 100644 index 0000000000..98c181b12f --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.data.of.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.meta/apoc.meta.data.of.adoc[apoc.meta.data.of icon:book[]] + + +`apoc.meta.data.of(\{graph}, \{config}) ` - examines a subset of the graph to provide a tabular meta information +¦label:procedure[] +¦label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.graph.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.graph.csv index ecdecb4f72..cd7978baad 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.graph.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.graph.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.meta.graph¦apoc.meta.graph(config = {} :: MAP?) :: (nodes :: LIST? OF NODE?, relationships :: LIST? OF RELATIONSHIP?)¦apoc.meta.graph - examines the full graph to create the meta-graph +¦Qualified Name¦Type¦Release +|xref::overview/apoc.meta.graph/apoc.meta.adoc[apoc.meta.graph.of icon:book[]] + +apoc.meta.graph.of(\{graph}, \{config}) - examines a subset of the graph to provide a graph meta information +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.graph.of.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.graph.of.adoc new file mode 100644 index 0000000000..3c89afc5c5 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.graph.of.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.meta/apoc.meta.graph.of.adoc[apoc.meta.graph.of icon:book[]] + + +`apoc.meta.graph.of(\{graph}, \{config}) ` - examines a subset of the graph to provide a graph meta information +¦label:procedure[] +¦label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.stats.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.stats.adoc index e6dead2a16..1a510870bc 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.stats.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.meta.stats.adoc @@ -1,5 +1,5 @@ ¦xref::overview/apoc.meta/apoc.meta.stats.adoc[apoc.meta.stats icon:book[]] + -`apoc.meta.stats yield labelCount, relTypeCount, propertyKeyCount, nodeCount, relCount, labels, relTypes, stats | returns the information stored in the transactional database statistics` +`apoc.meta.stats yield labelCount, relTypeCount, propertyKeyCount, nodeCount, relCount, labels, relTypes, stats | returns the information stored in the transactional database statistics` ¦label:procedure[] ¦label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.metrics.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.metrics.csv index 8d67411b0e..18b50f48a4 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.metrics.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.metrics.csv @@ -1,4 +1,16 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.metrics.get¦apoc.metrics.get(metricName :: STRING?, config = {} :: MAP?) :: (timestamp :: INTEGER?, metric :: STRING?, map :: MAP?)¦apoc.metrics.get(metricName, {}) - retrieve a system metric by its metric name. Additional configuration options may be passed matching the options available for apoc.load.csv. -¦procedure¦apoc.metrics.list¦apoc.metrics.list() :: (name :: STRING?, lastUpdated :: INTEGER?)¦apoc.metrics.list() - get a list of available metrics -¦procedure¦apoc.metrics.storage¦apoc.metrics.storage(directorySetting :: STRING?) :: (setting :: STRING?, freeSpaceBytes :: INTEGER?, totalSpaceBytes :: INTEGER?, usableSpaceBytes :: INTEGER?, percentFree :: FLOAT?)¦apoc.metrics.storage(directorySetting) - retrieve storage metrics about the devices Neo4j uses for data storage. directorySetting may be any valid neo4j directory setting name, such as 'dbms.directories.data'. If null is provided as a directorySetting, you will get back all available directory settings. For a list of available directory settings, see the Neo4j operations manual reference on configuration settings. Directory settings are **not** paths, they are a neo4j.conf setting key name +¦Qualified Name¦Type¦Release +|xref::overview/apoc.metrics/apoc.metrics.adoc[apoc.metrics.get icon:book[]] + +apoc.metrics.get(metricName, {}) - retrieve a system metric by its metric name. Additional configuration options may be passed matching the options available for apoc.load.csv. +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.metrics/apoc.metrics.adoc[apoc.metrics.list icon:book[]] + +apoc.metrics.list() - get a list of available metrics +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.metrics/apoc.metrics.adoc[apoc.metrics.storage icon:book[]] + +apoc.metrics.storage(directorySetting) - retrieve storage metrics about the devices Neo4j uses for data storage. directorySetting may be any valid neo4j directory setting name, such as 'dbms.directories.data'. If null is provided as a directorySetting, you will get back all available directory settings. For a list of available directory settings, see the Neo4j operations manual reference on configuration settings. Directory settings are **not** paths, they are a neo4j.conf setting key name +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.model.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.model.csv index 258d2e6548..ec8842c817 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.model.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.model.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.model.jdbc¦apoc.model.jdbc(jdbc :: STRING?, config = {} :: MAP?) :: (nodes :: LIST? OF NODE?, relationships :: LIST? OF RELATIONSHIP?)¦apoc.model.jdbc('key or url', {schema:'', write: , filters: { tables:[], views: [], columns: []}) YIELD nodes, relationships - load schema from relational database +¦Qualified Name¦Type¦Release +|xref::overview/apoc.model/apoc.model.adoc[apoc.model.jdbc icon:book[]] + +apoc.model.jdbc('key or url', {schema:'', write: , filters: { tables:[], views: [], columns: []}) YIELD nodes, relationships - load schema from relational database +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo-lite.csv new file mode 100644 index 0000000000..50114e7fdc --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo-lite.csv @@ -0,0 +1,7 @@ +¦signature +¦apoc.mongo.aggregate(uri :: STRING?, pipeline :: LIST? OF MAP?, config = {} :: MAP?) :: (value :: MAP?) +¦apoc.mongo.count(uri :: STRING?, query :: ANY?, config = {} :: MAP?) :: (value :: INTEGER?) +¦apoc.mongo.delete(uri :: STRING?, query :: ANY?, config = {} :: MAP?) :: (value :: INTEGER?) +¦apoc.mongo.find(uri :: STRING?, query = null :: ANY?, config = {} :: MAP?) :: (value :: MAP?) +¦apoc.mongo.insert(uri :: STRING?, documents :: LIST? OF ANY?, config = {} :: MAP?) :: VOID +¦apoc.mongo.update(uri :: STRING?, query :: ANY?, update :: ANY?, config = {} :: MAP?) :: (value :: INTEGER?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.aggregate-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.aggregate-lite.csv new file mode 100644 index 0000000000..8660f0cabf --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.aggregate-lite.csv @@ -0,0 +1,2 @@ +¦signature +¦apoc.mongo.aggregate(uri :: STRING?, pipeline :: LIST? OF MAP?, config = {} :: MAP?) :: (value :: MAP?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.aggregate.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.aggregate.adoc new file mode 100644 index 0000000000..86d2368432 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.aggregate.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.mongo/apoc.mongo.aggregate.adoc[apoc.mongo.aggregate icon:book[]] + + +`apoc.mongo.aggregate(uri, pipeline, $config) yield value` - perform an aggregate operation on mongodb collection +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.count-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.count-lite.csv new file mode 100644 index 0000000000..d857916caf --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.count-lite.csv @@ -0,0 +1,2 @@ +¦signature +¦apoc.mongo.count(uri :: STRING?, query :: ANY?, config = {} :: MAP?) :: (value :: INTEGER?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.count.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.count.adoc new file mode 100644 index 0000000000..0fed57126b --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.count.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.mongo/apoc.mongo.count.adoc[apoc.mongo.count icon:book[]] + + +`apoc.mongo.count(uri, query, $config) yield value` - perform a count operation on mongodb collection +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.csv new file mode 100644 index 0000000000..42af809a7f --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.csv @@ -0,0 +1,31 @@ +¦Qualified Name¦Type¦Release +|xref::overview/apoc.mongo/apoc.mongo.adoc[apoc.mongo.aggregate icon:book[]] + +apoc.mongo.aggregate(uri, pipeline, $config) yield value - perform an aggregate operation on mongodb collection +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.mongo/apoc.mongo.adoc[apoc.mongo.count icon:book[]] + +apoc.mongo.count(uri, query, $config) yield value - perform a count operation on mongodb collection +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.mongo/apoc.mongo.adoc[apoc.mongo.delete icon:book[]] + +apoc.mongo.delete(uri, query, $config) - delete the given documents from the mongodb collection and returns the number of affected documents +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.mongo/apoc.mongo.adoc[apoc.mongo.find icon:book[]] + +apoc.mongo.find(uri, query, $config) yield value - perform a find operation on mongodb collection +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.mongo/apoc.mongo.adoc[apoc.mongo.insert icon:book[]] + +apoc.mongo.insert(uri, documents, $config) yield value - inserts the given documents into the mongodb collection +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.mongo/apoc.mongo.adoc[apoc.mongo.update icon:book[]] + +apoc.mongo.update(uri, query, update, $config) - updates the given documents from the mongodb collection and returns the number of affected documents +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.delete-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.delete-lite.csv new file mode 100644 index 0000000000..aa9c5d2cb9 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.delete-lite.csv @@ -0,0 +1,2 @@ +¦signature +¦apoc.mongo.delete(uri :: STRING?, query :: ANY?, config = {} :: MAP?) :: (value :: INTEGER?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.delete.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.delete.adoc new file mode 100644 index 0000000000..73908a17fa --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.delete.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.mongo/apoc.mongo.delete.adoc[apoc.mongo.delete icon:book[]] + + +`apoc.mongo.delete(uri, query, $config)` - delete the given documents from the mongodb collection and returns the number of affected documents +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.find-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.find-lite.csv new file mode 100644 index 0000000000..209bf65b50 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.find-lite.csv @@ -0,0 +1,2 @@ +¦signature +¦apoc.mongo.find(uri :: STRING?, query = null :: ANY?, config = {} :: MAP?) :: (value :: MAP?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.find.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.find.adoc new file mode 100644 index 0000000000..3ced6be5f9 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.find.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.mongo/apoc.mongo.find.adoc[apoc.mongo.find icon:book[]] + + +`apoc.mongo.find(uri, query, $config) yield value` - perform a find operation on mongodb collection +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.insert-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.insert-lite.csv new file mode 100644 index 0000000000..68aa1d513d --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.insert-lite.csv @@ -0,0 +1,2 @@ +¦signature +¦apoc.mongo.insert(uri :: STRING?, documents :: LIST? OF ANY?, config = {} :: MAP?) :: VOID diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.insert.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.insert.adoc new file mode 100644 index 0000000000..12b9daa9b9 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.insert.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.mongo/apoc.mongo.insert.adoc[apoc.mongo.insert icon:book[]] + + +`apoc.mongo.insert(uri, documents, $config) yield value` - inserts the given documents into the mongodb collection +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.update-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.update-lite.csv new file mode 100644 index 0000000000..d6b138e2d5 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.update-lite.csv @@ -0,0 +1,2 @@ +¦signature +¦apoc.mongo.update(uri :: STRING?, query :: ANY?, update :: ANY?, config = {} :: MAP?) :: (value :: INTEGER?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.update.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.update.adoc new file mode 100644 index 0000000000..8d2d9d6211 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongo.update.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.mongo/apoc.mongo.update.adoc[apoc.mongo.update icon:book[]] + + +`apoc.mongo.update(uri, query, update, $config)` - updates the given documents from the mongodb collection and returns the number of affected documents +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongodb.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongodb.csv index 06ac631e86..8a471cb2a2 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongodb.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongodb.csv @@ -1,8 +1,36 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.mongodb.count¦apoc.mongodb.count(host :: STRING?, db :: STRING?, collection :: STRING?, query :: MAP?) :: (value :: INTEGER?)¦apoc.mongodb.count(host-or-key,db,collection,query) yield value - perform a find operation on mongodb collection -¦procedure¦apoc.mongodb.delete¦apoc.mongodb.delete(host :: STRING?, db :: STRING?, collection :: STRING?, query :: MAP?) :: (value :: INTEGER?)¦apoc.mongodb.delete(host-or-key,db,collection,query) - delete the given documents from the mongodb collection and returns the number of affected documents -¦procedure¦apoc.mongodb.find¦apoc.mongodb.find(host :: STRING?, db :: STRING?, collection :: STRING?, query :: MAP?, project :: MAP?, sort :: MAP?, compatibleValues = false :: BOOLEAN?, skip = 0 :: INTEGER?, limit = 0 :: INTEGER?, extractReferences = false :: BOOLEAN?, objectIdAsMap = true :: BOOLEAN?) :: (value :: MAP?)¦apoc.mongodb.find(host-or-key,db,collection,query,projection,sort,[compatibleValues=false|true],skip-or-null,limit-or-null,[extractReferences=false|true],[objectIdAsMap=true|false]) yield value - perform a find,project,sort operation on mongodb collection -¦procedure¦apoc.mongodb.first¦apoc.mongodb.first(host :: STRING?, db :: STRING?, collection :: STRING?, query :: MAP?, compatibleValues = true :: BOOLEAN?, extractReferences = false :: BOOLEAN?, objectIdAsMap = true :: BOOLEAN?) :: (value :: MAP?)¦apoc.mongodb.first(host-or-key,db,collection,query,[compatibleValues=false|true],[extractReferences=false|true],[objectIdAsMap=true|false]) yield value - perform a first operation on mongodb collection -¦procedure¦apoc.mongodb.get¦apoc.mongodb.get(host :: STRING?, db :: STRING?, collection :: STRING?, query :: MAP?, compatibleValues = false :: BOOLEAN?, skip = 0 :: INTEGER?, limit = 0 :: INTEGER?, extractReferences = false :: BOOLEAN?, objectIdAsMap = true :: BOOLEAN?) :: (value :: MAP?)¦apoc.mongodb.get(host-or-key,db,collection,query,[compatibleValues=false|true],skip-or-null,limit-or-null,[extractReferences=false|true],[objectIdAsMap=true|false]) yield value - perform a find operation on mongodb collection -¦procedure¦apoc.mongodb.insert¦apoc.mongodb.insert(host :: STRING?, db :: STRING?, collection :: STRING?, documents :: LIST? OF MAP?) :: VOID¦apoc.mongodb.insert(host-or-key,db,collection,documents) - inserts the given documents into the mongodb collection -¦procedure¦apoc.mongodb.update¦apoc.mongodb.update(host :: STRING?, db :: STRING?, collection :: STRING?, query :: MAP?, update :: MAP?) :: (value :: INTEGER?)¦apoc.mongodb.update(host-or-key,db,collection,query,update) - updates the given documents from the mongodb collection and returns the number of affected documents +¦Qualified Name¦Type¦Release +|xref::overview/apoc.mongodb/apoc.mongodb.adoc[apoc.mongodb.count icon:book[]] + +apoc.mongodb.count(host-or-key,db,collection,query) yield value - perform a find operation on mongodb collection +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.mongodb/apoc.mongodb.adoc[apoc.mongodb.delete icon:book[]] + +apoc.mongodb.delete(host-or-key,db,collection,query) - delete the given documents from the mongodb collection and returns the number of affected documents +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.mongodb/apoc.mongodb.adoc[apoc.mongodb.find icon:book[]] + +apoc.mongodb.find(host-or-key,db,collection,query,projection,sort,[compatibleValues=false\|true],skip-or-null,limit-or-null,[extractReferences=false\|true],[objectIdAsMap=true\|false]) yield value - perform a find,project,sort operation on mongodb collection +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.mongodb/apoc.mongodb.adoc[apoc.mongodb.first icon:book[]] + +apoc.mongodb.first(host-or-key,db,collection,query,[compatibleValues=false\|true],[extractReferences=false\|true],[objectIdAsMap=true\|false]) yield value - perform a first operation on mongodb collection +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.mongodb/apoc.mongodb.adoc[apoc.mongodb.get icon:book[]] + +apoc.mongodb.get(host-or-key,db,collection,query,[compatibleValues=false\|true],skip-or-null,limit-or-null,[extractReferences=false\|true],[objectIdAsMap=true\|false]) yield value - perform a find operation on mongodb collection +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.mongodb/apoc.mongodb.adoc[apoc.mongodb.insert icon:book[]] + +apoc.mongodb.insert(host-or-key,db,collection,documents) - inserts the given documents into the mongodb collection +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.mongodb/apoc.mongodb.adoc[apoc.mongodb.update icon:book[]] + +apoc.mongodb.update(host-or-key,db,collection,query,update) - updates the given documents from the mongodb collection and returns the number of affected documents +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongodb.get.byObjectId.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongodb.get.byObjectId.adoc new file mode 100644 index 0000000000..c084318d63 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongodb.get.byObjectId.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.mongodb/apoc.mongodb.get.byObjectId.adoc[apoc.mongodb.get.byObjectId icon:book[]] + + +`apoc.mongodb.get.byObjectId(hostOrKey, db, collection, objectIdValue, config(default:{}))` - get the document by Object id value +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongodb.get.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongodb.get.csv index 4b9be2ae33..29e698013a 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongodb.get.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.mongodb.get.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.mongodb.get¦apoc.mongodb.get(host :: STRING?, db :: STRING?, collection :: STRING?, query :: MAP?, compatibleValues = false :: BOOLEAN?, skip = 0 :: INTEGER?, limit = 0 :: INTEGER?, extractReferences = false :: BOOLEAN?, objectIdAsMap = true :: BOOLEAN?) :: (value :: MAP?)¦apoc.mongodb.get(host-or-key,db,collection,query,[compatibleValues=false|true],skip-or-null,limit-or-null,[extractReferences=false|true],[objectIdAsMap=true|false]) yield value - perform a find operation on mongodb collection +¦Qualified Name¦Type¦Release +|xref::overview/apoc.mongodb.get/apoc.mongodb.adoc[apoc.mongodb.get.byObjectId icon:book[]] + +apoc.mongodb.get.byObjectId(hostOrKey, db, collection, objectIdValue, config(default:{})) - get the document by Object id value +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.monitor.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.monitor.csv index 41d795f00e..fc83b14a35 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.monitor.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.monitor.csv @@ -1,5 +1,21 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.monitor.ids¦apoc.monitor.ids() :: (nodeIds :: INTEGER?, relIds :: INTEGER?, propIds :: INTEGER?, relTypeIds :: INTEGER?)¦apoc.monitor.ids() returns the object ids in use for this neo4j instance -¦procedure¦apoc.monitor.kernel¦apoc.monitor.kernel() :: (readOnly :: BOOLEAN?, kernelVersion :: STRING?, storeId :: STRING?, kernelStartTime :: STRING?, databaseName :: STRING?, storeLogVersion :: INTEGER?, storeCreationDate :: STRING?)¦apoc.monitor.kernel() returns informations about the neo4j kernel -¦procedure¦apoc.monitor.store¦apoc.monitor.store() :: (logSize :: INTEGER?, stringStoreSize :: INTEGER?, arrayStoreSize :: INTEGER?, relStoreSize :: INTEGER?, propStoreSize :: INTEGER?, totalStoreSize :: INTEGER?, nodeStoreSize :: INTEGER?)¦apoc.monitor.store() returns informations about the sizes of the different parts of the neo4j graph store -¦procedure¦apoc.monitor.tx¦apoc.monitor.tx() :: (rolledBackTx :: INTEGER?, peakTx :: INTEGER?, lastTxId :: INTEGER?, currentOpenedTx :: INTEGER?, totalOpenedTx :: INTEGER?, totalTx :: INTEGER?)¦apoc.monitor.tx() returns informations about the neo4j transaction manager +¦Qualified Name¦Type¦Release +|xref::overview/apoc.monitor/apoc.monitor.adoc[apoc.monitor.ids icon:book[]] + +apoc.monitor.ids() returns the object ids in use for this neo4j instance +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.monitor/apoc.monitor.adoc[apoc.monitor.kernel icon:book[]] + +apoc.monitor.kernel() returns informations about the neo4j kernel +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.monitor/apoc.monitor.adoc[apoc.monitor.store icon:book[]] + +apoc.monitor.store() returns informations about the sizes of the different parts of the neo4j graph store +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.monitor/apoc.monitor.adoc[apoc.monitor.tx icon:book[]] + +apoc.monitor.tx() returns informations about the neo4j transaction manager +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.monitor.ids.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.monitor.ids.adoc index cb28e2d95f..df85362347 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.monitor.ids.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.monitor.ids.adoc @@ -2,4 +2,4 @@ `apoc.monitor.ids() returns the object ids in use for this neo4j instance` ¦label:procedure[] -¦label:apoc-core[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.monitor.kernel.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.monitor.kernel.adoc index b5ecd5f826..6f91bf280f 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.monitor.kernel.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.monitor.kernel.adoc @@ -2,4 +2,4 @@ `apoc.monitor.kernel() returns informations about the neo4j kernel` ¦label:procedure[] -¦label:apoc-core[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.monitor.store.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.monitor.store.adoc index 37e421c115..6c0fd4e835 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.monitor.store.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.monitor.store.adoc @@ -2,4 +2,4 @@ `apoc.monitor.store() returns informations about the sizes of the different parts of the neo4j graph store` ¦label:procedure[] -¦label:apoc-core[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.monitor.tx.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.monitor.tx.adoc index 4c0c39707e..872667796b 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.monitor.tx.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.monitor.tx.adoc @@ -2,4 +2,4 @@ `apoc.monitor.tx() returns informations about the neo4j transaction manager` ¦label:procedure[] -¦label:apoc-core[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.athop.count.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.athop.count.adoc index 1653021e0b..dcc9480b27 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.athop.count.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.athop.count.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.neighbors.athop/apoc.neighbors.athop.count.adoc[apoc.neighbors.athop.count icon:book[]] + +¦xref::overview/apoc.neighbors/apoc.neighbors.athop.count.adoc[apoc.neighbors.athop.count icon:book[]] + `apoc.neighbors.athop.count(node, rel-direction-pattern, distance)` - returns distinct nodes of the given relationships in the pattern at a distance, can use '>' or '<' for all outgoing or incoming relationships ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.athop.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.athop.csv index 3881c15f24..971baa48a5 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.athop.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.athop.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.neighbors.athop¦apoc.neighbors.athop(node :: NODE?, types = :: STRING?, distance = 1 :: INTEGER?) :: (node :: NODE?)¦apoc.neighbors.athop(node, rel-direction-pattern, distance) - returns distinct nodes of the given relationships in the pattern at a distance, can use '>' or '<' for all outgoing or incoming relationships +¦Qualified Name¦Type¦Release +|xref::overview/apoc.neighbors.athop/apoc.neighbors.adoc[apoc.neighbors.athop.count icon:book[]] + +apoc.neighbors.athop.count(node, rel-direction-pattern, distance) - returns distinct nodes of the given relationships in the pattern at a distance, can use '>' or '<' for all outgoing or incoming relationships +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.byhop.count.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.byhop.count.adoc index e3abe4f249..10fa91cc85 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.byhop.count.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.byhop.count.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.neighbors.byhop/apoc.neighbors.byhop.count.adoc[apoc.neighbors.byhop.count icon:book[]] + +¦xref::overview/apoc.neighbors/apoc.neighbors.byhop.count.adoc[apoc.neighbors.byhop.count icon:book[]] + `apoc.neighbors.byhop.count(node, rel-direction-pattern, distance)` - returns distinct nodes of the given relationships in the pattern at each distance, can use '>' or '<' for all outgoing or incoming relationships ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.byhop.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.byhop.csv index 4113af1091..d0f0ad378d 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.byhop.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.byhop.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.neighbors.byhop¦apoc.neighbors.byhop(node :: NODE?, types = :: STRING?, distance = 1 :: INTEGER?) :: (nodes :: LIST? OF NODE?)¦apoc.neighbors.byhop(node, rel-direction-pattern, distance) - returns distinct nodes of the given relationships in the pattern at each distance, can use '>' or '<' for all outgoing or incoming relationships +¦Qualified Name¦Type¦Release +|xref::overview/apoc.neighbors.byhop/apoc.neighbors.adoc[apoc.neighbors.byhop.count icon:book[]] + +apoc.neighbors.byhop.count(node, rel-direction-pattern, distance) - returns distinct nodes of the given relationships in the pattern at each distance, can use '>' or '<' for all outgoing or incoming relationships +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.csv index 99fdd0f81a..b670fa0bc8 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.csv @@ -1,4 +1,16 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.neighbors.athop¦apoc.neighbors.athop(node :: NODE?, types = :: STRING?, distance = 1 :: INTEGER?) :: (node :: NODE?)¦apoc.neighbors.athop(node, rel-direction-pattern, distance) - returns distinct nodes of the given relationships in the pattern at a distance, can use '>' or '<' for all outgoing or incoming relationships -¦procedure¦apoc.neighbors.byhop¦apoc.neighbors.byhop(node :: NODE?, types = :: STRING?, distance = 1 :: INTEGER?) :: (nodes :: LIST? OF NODE?)¦apoc.neighbors.byhop(node, rel-direction-pattern, distance) - returns distinct nodes of the given relationships in the pattern at each distance, can use '>' or '<' for all outgoing or incoming relationships -¦procedure¦apoc.neighbors.tohop¦apoc.neighbors.tohop(node :: NODE?, types = :: STRING?, distance = 1 :: INTEGER?) :: (node :: NODE?)¦apoc.neighbors.tohop(node, rel-direction-pattern, distance) - returns distinct nodes of the given relationships in the pattern up to a certain distance, can use '>' or '<' for all outgoing or incoming relationships +¦Qualified Name¦Type¦Release +|xref::overview/apoc.neighbors/apoc.neighbors.adoc[apoc.neighbors.athop icon:book[]] + +apoc.neighbors.athop(node, rel-direction-pattern, distance) - returns distinct nodes of the given relationships in the pattern at a distance, can use '>' or '<' for all outgoing or incoming relationships +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.neighbors/apoc.neighbors.adoc[apoc.neighbors.byhop icon:book[]] + +apoc.neighbors.byhop(node, rel-direction-pattern, distance) - returns distinct nodes of the given relationships in the pattern at each distance, can use '>' or '<' for all outgoing or incoming relationships +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.neighbors/apoc.neighbors.adoc[apoc.neighbors.tohop icon:book[]] + +apoc.neighbors.tohop(node, rel-direction-pattern, distance) - returns distinct nodes of the given relationships in the pattern up to a certain distance, can use '>' or '<' for all outgoing or incoming relationships +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.tohop.count.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.tohop.count.adoc index e39dc2568e..e102ab5237 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.tohop.count.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.tohop.count.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.neighbors.tohop/apoc.neighbors.tohop.count.adoc[apoc.neighbors.tohop.count icon:book[]] + +¦xref::overview/apoc.neighbors/apoc.neighbors.tohop.count.adoc[apoc.neighbors.tohop.count icon:book[]] + `apoc.neighbors.tohop.count(node, rel-direction-pattern, distance)` - returns distinct count of nodes of the given relationships in the pattern up to a certain distance, can use '>' or '<' for all outgoing or incoming relationships ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.tohop.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.tohop.csv index 8616cbe2d2..c8b8d4eb78 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.tohop.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.neighbors.tohop.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.neighbors.tohop¦apoc.neighbors.tohop(node :: NODE?, types = :: STRING?, distance = 1 :: INTEGER?) :: (node :: NODE?)¦apoc.neighbors.tohop(node, rel-direction-pattern, distance) - returns distinct nodes of the given relationships in the pattern up to a certain distance, can use '>' or '<' for all outgoing or incoming relationships +¦Qualified Name¦Type¦Release +|xref::overview/apoc.neighbors.tohop/apoc.neighbors.adoc[apoc.neighbors.tohop.count icon:book[]] + +apoc.neighbors.tohop.count(node, rel-direction-pattern, distance) - returns distinct count of nodes of the given relationships in the pattern up to a certain distance, can use '>' or '<' for all outgoing or incoming relationships +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.entities.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.entities.csv index b6e255f7b2..302d135abf 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.entities.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.entities.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.nlp.aws.entities.graph¦apoc.nlp.aws.entities.graph(source :: ANY?, config = {} :: MAP?) :: (graph :: MAP?)¦Creates a (virtual) entity graph for provided text -¦procedure¦apoc.nlp.aws.entities.stream¦apoc.nlp.aws.entities.stream(source :: ANY?, config = {} :: MAP?) :: (node :: NODE?, value :: MAP?, error :: MAP?)¦Returns a stream of entities for provided text +¦Qualified Name¦Type¦Release +|xref::overview/apoc.nlp.aws.entities/apoc.nlp.adoc[apoc.nlp.aws.entities.graph icon:book[]] + +Creates a (virtual) entity graph for provided text +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.nlp.aws.entities/apoc.nlp.adoc[apoc.nlp.aws.entities.stream icon:book[]] + +Returns a stream of entities for provided text +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.entities.graph.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.entities.graph.adoc index 420908e6c2..8bb4c94094 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.entities.graph.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.entities.graph.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.nlp.aws.entities/apoc.nlp.aws.entities.graph.adoc[apoc.nlp.aws.entities.graph icon:book[]] + +¦xref::overview/apoc.nlp/apoc.nlp.aws.entities.graph.adoc[apoc.nlp.aws.entities.graph icon:book[]] + `Creates a (virtual) entity graph for provided text` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.entities.stream.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.entities.stream.adoc index 620a2d3142..d3d359600c 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.entities.stream.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.entities.stream.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.nlp.aws.entities/apoc.nlp.aws.entities.stream.adoc[apoc.nlp.aws.entities.stream icon:book[]] + +¦xref::overview/apoc.nlp/apoc.nlp.aws.entities.stream.adoc[apoc.nlp.aws.entities.stream icon:book[]] + `Returns a stream of entities for provided text` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.keyPhrases.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.keyPhrases.csv index 71161e9e0e..ca8e1c3452 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.keyPhrases.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.keyPhrases.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.nlp.aws.keyPhrases.graph¦apoc.nlp.aws.keyPhrases.graph(source :: ANY?, config = {} :: MAP?) :: (graph :: MAP?)¦Creates a (virtual) key phrases graph for provided text -¦procedure¦apoc.nlp.aws.keyPhrases.stream¦apoc.nlp.aws.keyPhrases.stream(source :: ANY?, config = {} :: MAP?) :: (node :: NODE?, value :: MAP?, error :: MAP?)¦Returns a stream of key phrases for provided text +¦Qualified Name¦Type¦Release +|xref::overview/apoc.nlp.aws.keyPhrases/apoc.nlp.adoc[apoc.nlp.aws.keyPhrases.graph icon:book[]] + +Creates a (virtual) key phrases graph for provided text +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.nlp.aws.keyPhrases/apoc.nlp.adoc[apoc.nlp.aws.keyPhrases.stream icon:book[]] + +Returns a stream of key phrases for provided text +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.keyPhrases.graph.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.keyPhrases.graph.adoc index aca5940f16..867901d1ff 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.keyPhrases.graph.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.keyPhrases.graph.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.nlp.aws.keyPhrases/apoc.nlp.aws.keyPhrases.graph.adoc[apoc.nlp.aws.keyPhrases.graph icon:book[]] + +¦xref::overview/apoc.nlp/apoc.nlp.aws.keyPhrases.graph.adoc[apoc.nlp.aws.keyPhrases.graph icon:book[]] + `Creates a (virtual) key phrases graph for provided text` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.keyPhrases.stream.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.keyPhrases.stream.adoc index 09843b7314..30aefc5cee 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.keyPhrases.stream.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.keyPhrases.stream.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.nlp.aws.keyPhrases/apoc.nlp.aws.keyPhrases.stream.adoc[apoc.nlp.aws.keyPhrases.stream icon:book[]] + +¦xref::overview/apoc.nlp/apoc.nlp.aws.keyPhrases.stream.adoc[apoc.nlp.aws.keyPhrases.stream icon:book[]] + `Returns a stream of key phrases for provided text` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.sentiment.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.sentiment.csv index 3ba843e0e9..b53c99fa92 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.sentiment.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.sentiment.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.nlp.aws.sentiment.graph¦apoc.nlp.aws.sentiment.graph(source :: ANY?, config = {} :: MAP?) :: (graph :: MAP?)¦Creates a (virtual) sentiment graph for provided text -¦procedure¦apoc.nlp.aws.sentiment.stream¦apoc.nlp.aws.sentiment.stream(source :: ANY?, config = {} :: MAP?) :: (node :: NODE?, value :: MAP?, error :: MAP?)¦Returns stream of sentiment for items in provided text +¦Qualified Name¦Type¦Release +|xref::overview/apoc.nlp.aws.sentiment/apoc.nlp.adoc[apoc.nlp.aws.sentiment.graph icon:book[]] + +Creates a (virtual) sentiment graph for provided text +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.nlp.aws.sentiment/apoc.nlp.adoc[apoc.nlp.aws.sentiment.stream icon:book[]] + +Returns stream of sentiment for items in provided text +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.sentiment.graph.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.sentiment.graph.adoc index 26fa267612..00ac7202c1 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.sentiment.graph.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.sentiment.graph.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.nlp.aws.sentiment/apoc.nlp.aws.sentiment.graph.adoc[apoc.nlp.aws.sentiment.graph icon:book[]] + +¦xref::overview/apoc.nlp/apoc.nlp.aws.sentiment.graph.adoc[apoc.nlp.aws.sentiment.graph icon:book[]] + `Creates a (virtual) sentiment graph for provided text` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.sentiment.stream.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.sentiment.stream.adoc index 98057aa327..303bd01671 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.sentiment.stream.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.aws.sentiment.stream.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.nlp.aws.sentiment/apoc.nlp.aws.sentiment.stream.adoc[apoc.nlp.aws.sentiment.stream icon:book[]] + +¦xref::overview/apoc.nlp/apoc.nlp.aws.sentiment.stream.adoc[apoc.nlp.aws.sentiment.stream icon:book[]] + `Returns stream of sentiment for items in provided text` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.entities.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.entities.csv index 7ce2438c5d..9d8da7c150 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.entities.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.entities.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.nlp.azure.entities.graph¦apoc.nlp.azure.entities.graph(source :: ANY?, config = {} :: MAP?) :: (graph :: MAP?)¦Creates a (virtual) entity graph for provided text -¦procedure¦apoc.nlp.azure.entities.stream¦apoc.nlp.azure.entities.stream(source :: ANY?, config = {} :: MAP?) :: (node :: NODE?, value :: MAP?, error :: MAP?)¦Provides a entity analysis for provided text +¦Qualified Name¦Type¦Release +|xref::overview/apoc.nlp.azure.entities/apoc.nlp.adoc[apoc.nlp.azure.entities.graph icon:book[]] + +Creates a (virtual) entity graph for provided text +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.nlp.azure.entities/apoc.nlp.adoc[apoc.nlp.azure.entities.stream icon:book[]] + +Provides a entity analysis for provided text +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.entities.graph.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.entities.graph.adoc index 27612ffcf3..94cd922732 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.entities.graph.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.entities.graph.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.nlp.azure.entities/apoc.nlp.azure.entities.graph.adoc[apoc.nlp.azure.entities.graph icon:book[]] + +¦xref::overview/apoc.nlp/apoc.nlp.azure.entities.graph.adoc[apoc.nlp.azure.entities.graph icon:book[]] + `Creates a (virtual) entity graph for provided text` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.entities.stream.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.entities.stream.adoc index 47c47eea14..22408fe6c2 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.entities.stream.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.entities.stream.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.nlp.azure.entities/apoc.nlp.azure.entities.stream.adoc[apoc.nlp.azure.entities.stream icon:book[]] + +¦xref::overview/apoc.nlp/apoc.nlp.azure.entities.stream.adoc[apoc.nlp.azure.entities.stream icon:book[]] + `Provides a entity analysis for provided text` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.keyPhrases.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.keyPhrases.csv index 8f7625874d..6685ba5b86 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.keyPhrases.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.keyPhrases.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.nlp.azure.keyPhrases.graph¦apoc.nlp.azure.keyPhrases.graph(source :: ANY?, config = {} :: MAP?) :: (graph :: MAP?)¦Creates a (virtual) key phrase graph for provided text -¦procedure¦apoc.nlp.azure.keyPhrases.stream¦apoc.nlp.azure.keyPhrases.stream(source :: ANY?, config = {} :: MAP?) :: (node :: NODE?, value :: MAP?, error :: MAP?)¦Provides a entity analysis for provided text +¦Qualified Name¦Type¦Release +|xref::overview/apoc.nlp.azure.keyPhrases/apoc.nlp.adoc[apoc.nlp.azure.keyPhrases.graph icon:book[]] + +Creates a (virtual) key phrase graph for provided text +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.nlp.azure.keyPhrases/apoc.nlp.adoc[apoc.nlp.azure.keyPhrases.stream icon:book[]] + +Provides a entity analysis for provided text +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.keyPhrases.graph.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.keyPhrases.graph.adoc index e829726e00..fb1f6126de 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.keyPhrases.graph.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.keyPhrases.graph.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.nlp.azure.keyPhrases/apoc.nlp.azure.keyPhrases.graph.adoc[apoc.nlp.azure.keyPhrases.graph icon:book[]] + +¦xref::overview/apoc.nlp/apoc.nlp.azure.keyPhrases.graph.adoc[apoc.nlp.azure.keyPhrases.graph icon:book[]] + `Creates a (virtual) key phrase graph for provided text` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.keyPhrases.stream.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.keyPhrases.stream.adoc index 60ae3e76d5..885496904a 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.keyPhrases.stream.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.keyPhrases.stream.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.nlp.azure.keyPhrases/apoc.nlp.azure.keyPhrases.stream.adoc[apoc.nlp.azure.keyPhrases.stream icon:book[]] + +¦xref::overview/apoc.nlp/apoc.nlp.azure.keyPhrases.stream.adoc[apoc.nlp.azure.keyPhrases.stream icon:book[]] + `Provides a entity analysis for provided text` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.sentiment.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.sentiment.csv index 5088bfc287..d31832adb1 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.sentiment.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.sentiment.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.nlp.azure.sentiment.graph¦apoc.nlp.azure.sentiment.graph(source :: ANY?, config = {} :: MAP?) :: (graph :: MAP?)¦Creates a (virtual) sentiment graph for provided text -¦procedure¦apoc.nlp.azure.sentiment.stream¦apoc.nlp.azure.sentiment.stream(source :: ANY?, config = {} :: MAP?) :: (node :: NODE?, value :: MAP?, error :: MAP?)¦Provides a sentiment analysis for provided text +¦Qualified Name¦Type¦Release +|xref::overview/apoc.nlp.azure.sentiment/apoc.nlp.adoc[apoc.nlp.azure.sentiment.graph icon:book[]] + +Creates a (virtual) sentiment graph for provided text +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.nlp.azure.sentiment/apoc.nlp.adoc[apoc.nlp.azure.sentiment.stream icon:book[]] + +Provides a sentiment analysis for provided text +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.sentiment.graph.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.sentiment.graph.adoc index 1af0e3523c..8809822f40 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.sentiment.graph.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.sentiment.graph.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.nlp.azure.sentiment/apoc.nlp.azure.sentiment.graph.adoc[apoc.nlp.azure.sentiment.graph icon:book[]] + +¦xref::overview/apoc.nlp/apoc.nlp.azure.sentiment.graph.adoc[apoc.nlp.azure.sentiment.graph icon:book[]] + `Creates a (virtual) sentiment graph for provided text` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.sentiment.stream.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.sentiment.stream.adoc index 6e97a43116..cc5a4fadfe 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.sentiment.stream.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.azure.sentiment.stream.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.nlp.azure.sentiment/apoc.nlp.azure.sentiment.stream.adoc[apoc.nlp.azure.sentiment.stream icon:book[]] + +¦xref::overview/apoc.nlp/apoc.nlp.azure.sentiment.stream.adoc[apoc.nlp.azure.sentiment.stream icon:book[]] + `Provides a sentiment analysis for provided text` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.classify.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.classify.csv index c1cc332e15..e828eac72b 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.classify.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.classify.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.nlp.gcp.classify.graph¦apoc.nlp.gcp.classify.graph(source :: ANY?, config = {} :: MAP?) :: (graph :: MAP?)¦Classifies a document into categories. -¦procedure¦apoc.nlp.gcp.classify.stream¦apoc.nlp.gcp.classify.stream(source :: ANY?, config = {} :: MAP?) :: (node :: NODE?, value :: MAP?, error :: MAP?)¦Classifies a document into categories. +¦Qualified Name¦Type¦Release +|xref::overview/apoc.nlp.gcp.classify/apoc.nlp.adoc[apoc.nlp.gcp.classify.graph icon:book[]] + +Classifies a document into categories. +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.nlp.gcp.classify/apoc.nlp.adoc[apoc.nlp.gcp.classify.stream icon:book[]] + +Classifies a document into categories. +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.classify.graph.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.classify.graph.adoc index 6ce999e113..0e7b1d0c84 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.classify.graph.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.classify.graph.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.nlp.gcp.classify/apoc.nlp.gcp.classify.graph.adoc[apoc.nlp.gcp.classify.graph icon:book[]] + +¦xref::overview/apoc.nlp/apoc.nlp.gcp.classify.graph.adoc[apoc.nlp.gcp.classify.graph icon:book[]] + `Classifies a document into categories.` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.classify.stream.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.classify.stream.adoc index 44f96227af..3f8c6a5ced 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.classify.stream.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.classify.stream.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.nlp.gcp.classify/apoc.nlp.gcp.classify.stream.adoc[apoc.nlp.gcp.classify.stream icon:book[]] + +¦xref::overview/apoc.nlp/apoc.nlp.gcp.classify.stream.adoc[apoc.nlp.gcp.classify.stream icon:book[]] + `Classifies a document into categories.` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.entities.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.entities.csv index b2b6aa0543..dcd522b1da 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.entities.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.entities.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.nlp.gcp.entities.graph¦apoc.nlp.gcp.entities.graph(source :: ANY?, config = {} :: MAP?) :: (graph :: MAP?)¦Creates a (virtual) entity graph for provided text -¦procedure¦apoc.nlp.gcp.entities.stream¦apoc.nlp.gcp.entities.stream(source :: ANY?, config = {} :: MAP?) :: (node :: NODE?, value :: MAP?, error :: MAP?)¦Returns a stream of entities for provided text +¦Qualified Name¦Type¦Release +|xref::overview/apoc.nlp.gcp.entities/apoc.nlp.adoc[apoc.nlp.gcp.entities.graph icon:book[]] + +Creates a (virtual) entity graph for provided text +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.nlp.gcp.entities/apoc.nlp.adoc[apoc.nlp.gcp.entities.stream icon:book[]] + +Returns a stream of entities for provided text +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.entities.graph.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.entities.graph.adoc index 66f2e4fe05..8620204fea 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.entities.graph.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.entities.graph.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.nlp.gcp.entities/apoc.nlp.gcp.entities.graph.adoc[apoc.nlp.gcp.entities.graph icon:book[]] + +¦xref::overview/apoc.nlp/apoc.nlp.gcp.entities.graph.adoc[apoc.nlp.gcp.entities.graph icon:book[]] + `Creates a (virtual) entity graph for provided text` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.entities.stream.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.entities.stream.adoc index fbbaee13fc..2acc0e0f5b 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.entities.stream.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nlp.gcp.entities.stream.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.nlp.gcp.entities/apoc.nlp.gcp.entities.stream.adoc[apoc.nlp.gcp.entities.stream icon:book[]] + +¦xref::overview/apoc.nlp/apoc.nlp.gcp.entities.stream.adoc[apoc.nlp.gcp.entities.stream icon:book[]] + `Returns a stream of entities for provided text` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.csv index c9c6e1971b..484b84640a 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.csv @@ -1,4 +1,16 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.node.degree¦apoc.node.degree(node :: NODE?, types = :: STRING?) :: (INTEGER?)¦apoc.node.degree(node, rel-direction-pattern) - returns total degrees of the given relationships in the pattern, can use '>' or '<' for all outgoing or incoming relationships -¦function¦apoc.node.id¦apoc.node.id(node :: NODE?) :: (INTEGER?)¦returns id for (virtual) nodes -¦function¦apoc.node.labels¦apoc.node.labels(node :: NODE?) :: (LIST? OF ANY?)¦returns labels for (virtual) nodes +¦Qualified Name¦Type¦Release +|xref::overview/apoc.node/apoc.node.adoc[apoc.node.degree icon:book[]] + +apoc.node.degree(node, rel-direction-pattern) - returns total degrees of the given relationships in the pattern, can use '>' or '<' for all outgoing or incoming relationships +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.node/apoc.node.adoc[apoc.node.id icon:book[]] + +returns id for (virtual) nodes +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.node/apoc.node.adoc[apoc.node.labels icon:book[]] + +returns labels for (virtual) nodes +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.degree.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.degree.csv index 5411521b22..0326ebfd1d 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.degree.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.degree.csv @@ -1,2 +1,11 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.node.degree¦apoc.node.degree(node :: NODE?, types = :: STRING?) :: (INTEGER?)¦apoc.node.degree(node, rel-direction-pattern) - returns total degrees of the given relationships in the pattern, can use '>' or '<' for all outgoing or incoming relationships +¦Qualified Name¦Type¦Release +|xref::overview/apoc.node.degree/apoc.node.adoc[apoc.node.degree.in icon:book[]] + +apoc.node.degree.in(node, relationshipName) - returns total number number of incoming relationships +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.node.degree/apoc.node.adoc[apoc.node.degree.out icon:book[]] + +apoc.node.degree.out(node, relationshipName) - returns total number number of outgoing relationships +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.degree.in.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.degree.in.adoc index c849407789..7b8f491230 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.degree.in.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.degree.in.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.node.degree/apoc.node.degree.in.adoc[apoc.node.degree.in icon:book[]] + +¦xref::overview/apoc.node/apoc.node.degree.in.adoc[apoc.node.degree.in icon:book[]] + `apoc.node.degree.in(node, relationshipName)` - returns total number number of incoming relationships ¦label:function[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.degree.out.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.degree.out.adoc index 50f29e596c..fe999ce000 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.degree.out.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.degree.out.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.node.degree/apoc.node.degree.out.adoc[apoc.node.degree.out icon:book[]] + +¦xref::overview/apoc.node/apoc.node.degree.out.adoc[apoc.node.degree.out icon:book[]] + `apoc.node.degree.out(node, relationshipName)` - returns total number number of outgoing relationships ¦label:function[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.relationship.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.relationship.csv index 0513783c45..4de2d67820 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.relationship.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.relationship.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.node.relationship.exists¦apoc.node.relationship.exists(node :: NODE?, types = :: STRING?) :: (BOOLEAN?)¦apoc.node.relationship.exists(node, rel-direction-pattern) - returns true when the node has the relationships of the pattern -¦function¦apoc.node.relationship.types¦apoc.node.relationship.types(node :: NODE?, types = :: STRING?) :: (LIST? OF ANY?)¦apoc.node.relationship.types(node, rel-direction-pattern) - returns a list of distinct relationship types +¦Qualified Name¦Type¦Release +|xref::overview/apoc.node.relationship/apoc.node.adoc[apoc.node.relationship.exists icon:book[]] + +apoc.node.relationship.exists(node, rel-direction-pattern) - returns true when the node has the relationships of the pattern +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.node.relationship/apoc.node.adoc[apoc.node.relationship.types icon:book[]] + +apoc.node.relationship.types(node, rel-direction-pattern) - returns a list of distinct relationship types +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.relationship.exists.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.relationship.exists.adoc index b8a170e0c3..a6d0677d69 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.relationship.exists.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.relationship.exists.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.node.relationship/apoc.node.relationship.exists.adoc[apoc.node.relationship.exists icon:book[]] + +¦xref::overview/apoc.node/apoc.node.relationship.exists.adoc[apoc.node.relationship.exists icon:book[]] + `apoc.node.relationship.exists(node, rel-direction-pattern)` - returns true when the node has the relationships of the pattern ¦label:function[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.relationship.types.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.relationship.types.adoc index f077aba6c0..4ca1e3301a 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.relationship.types.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.relationship.types.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.node.relationship/apoc.node.relationship.types.adoc[apoc.node.relationship.types icon:book[]] + +¦xref::overview/apoc.node/apoc.node.relationship.types.adoc[apoc.node.relationship.types icon:book[]] + `apoc.node.relationship.types(node, rel-direction-pattern)` - returns a list of distinct relationship types ¦label:function[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.relationships.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.relationships.csv index 23da5502b7..2705ae1e36 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.relationships.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.relationships.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.node.relationships.exist¦apoc.node.relationships.exist(node :: NODE?, types = :: STRING?) :: (MAP?)¦apoc.node.relationships.exist(node, rel-direction-pattern) - returns a map with rel-pattern, boolean for the given relationship patterns +¦Qualified Name¦Type¦Release +|xref::overview/apoc.node.relationships/apoc.node.adoc[apoc.node.relationships.exist icon:book[]] + +apoc.node.relationships.exist(node, rel-direction-pattern) - returns a map with rel-pattern, boolean for the given relationship patterns +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.relationships.exist.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.relationships.exist.adoc index 5a8d4620c5..b8123629cb 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.relationships.exist.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.node.relationships.exist.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.node.relationships/apoc.node.relationships.exist.adoc[apoc.node.relationships.exist icon:book[]] + +¦xref::overview/apoc.node/apoc.node.relationships.exist.adoc[apoc.node.relationships.exist icon:book[]] + `apoc.node.relationships.exist(node, rel-direction-pattern)` - returns a map with rel-pattern, boolean for the given relationship patterns ¦label:function[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nodes.relationship.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nodes.relationship.csv index 6547098e30..cf0b865074 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nodes.relationship.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nodes.relationship.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.nodes.relationship.types¦apoc.nodes.relationship.types(ids :: ANY?, types = :: STRING?) :: (LIST? OF ANY?)¦apoc.nodes.relationship.types(node|nodes|id|[ids], rel-direction-pattern) - returns a list of maps where each one has two fields: `node` which is the node subject of the analysis and `types` which is a list of distinct relationship types +¦Qualified Name¦Type¦Release +|xref::overview/apoc.nodes.relationship/apoc.nodes.adoc[apoc.nodes.relationship.types icon:book[]] + +apoc.nodes.relationship.types(node\|nodes\|id\|[ids], rel-direction-pattern) - returns a list of maps where each one has two fields: `node` which is the node subject of the analysis and `types` which is a list of distinct relationship types +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nodes.relationship.types.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nodes.relationship.types.adoc index 6c73447441..551e8c659b 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nodes.relationship.types.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nodes.relationship.types.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.nodes.relationship/apoc.nodes.relationship.types.adoc[apoc.nodes.relationship.types icon:book[]] + +¦xref::overview/apoc.nodes/apoc.nodes.relationship.types.adoc[apoc.nodes.relationship.types icon:book[]] + `apoc.nodes.relationship.types(node|nodes|id|[ids], rel-direction-pattern)` - returns a list of maps where each one has two fields: `node` which is the node subject of the analysis and `types` which is a list of distinct relationship types ¦label:function[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nodes.relationships.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nodes.relationships.csv index bec6acd118..53f13e7e7e 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nodes.relationships.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nodes.relationships.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.nodes.relationships.exist¦apoc.nodes.relationships.exist(ids :: ANY?, types = :: STRING?) :: (LIST? OF ANY?)¦apoc.nodes.relationships.exist(node|nodes|id|[ids], rel-direction-pattern) - returns a list of maps where each one has two fields: `node` which is the node subject of the analysis and `exists` which is a map with rel-pattern, boolean for the given relationship patterns +¦Qualified Name¦Type¦Release +|xref::overview/apoc.nodes.relationships/apoc.nodes.adoc[apoc.nodes.relationships.exist icon:book[]] + +apoc.nodes.relationships.exist(node\|nodes\|id\|[ids], rel-direction-pattern) - returns a list of maps where each one has two fields: `node` which is the node subject of the analysis and `exists` which is a map with rel-pattern, boolean for the given relationship patterns +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nodes.relationships.exist.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nodes.relationships.exist.adoc index 2a63fa1914..ee27bb8da8 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nodes.relationships.exist.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.nodes.relationships.exist.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.nodes.relationships/apoc.nodes.relationships.exist.adoc[apoc.nodes.relationships.exist icon:book[]] + +¦xref::overview/apoc.nodes/apoc.nodes.relationships.exist.adoc[apoc.nodes.relationships.exist icon:book[]] + `apoc.nodes.relationships.exist(node|nodes|id|[ids], rel-direction-pattern)` - returns a list of maps where each one has two fields: `node` which is the node subject of the analysis and `exists` which is a map with rel-pattern, boolean for the given relationship patterns ¦label:function[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.csv index 2632edb86e..1a0737166d 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.csv @@ -1,6 +1,26 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.number.arabicToRoman¦apoc.number.arabicToRoman(number :: ANY?) :: (STRING?)¦apoc.number.arabicToRoman(number) | convert arabic numbers to roman -¦function¦apoc.number.format¦apoc.number.format(number :: ANY?, pattern = :: STRING?, lang = :: STRING?) :: (STRING?)¦apoc.number.format(number) | format a long or double using the default system pattern and language to produce a string -¦function¦apoc.number.parseFloat¦apoc.number.parseFloat(text :: STRING?, pattern = :: STRING?, lang = :: STRING?) :: (FLOAT?)¦apoc.number.parseFloat(text) | parse a text using the default system pattern and language to produce a double -¦function¦apoc.number.parseInt¦apoc.number.parseInt(text :: STRING?, pattern = :: STRING?, lang = :: STRING?) :: (INTEGER?)¦apoc.number.parseInt(text) | parse a text using the default system pattern and language to produce a long -¦function¦apoc.number.romanToArabic¦apoc.number.romanToArabic(romanNumber :: STRING?) :: (NUMBER?)¦apoc.number.romanToArabic(romanNumber) | convert roman numbers to arabic +¦Qualified Name¦Type¦Release +|xref::overview/apoc.number/apoc.number.adoc[apoc.number.arabicToRoman icon:book[]] + +apoc.number.arabicToRoman(number) \| convert arabic numbers to roman +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.number/apoc.number.adoc[apoc.number.format icon:book[]] + +apoc.number.format(number) \| format a long or double using the default system pattern and language to produce a string +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.number/apoc.number.adoc[apoc.number.parseFloat icon:book[]] + +apoc.number.parseFloat(text) \| parse a text using the default system pattern and language to produce a double +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.number/apoc.number.adoc[apoc.number.parseInt icon:book[]] + +apoc.number.parseInt(text) \| parse a text using the default system pattern and language to produce a long +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.number/apoc.number.adoc[apoc.number.romanToArabic icon:book[]] + +apoc.number.romanToArabic(romanNumber) \| convert roman numbers to arabic +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.add.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.add.adoc index 5e825dd604..b854a63d26 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.add.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.add.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.number.exact/apoc.number.exact.add.adoc[apoc.number.exact.add icon:book[]] + +¦xref::overview/apoc.number/apoc.number.exact.add.adoc[apoc.number.exact.add icon:book[]] + `apoc.number.exact.add(stringA,stringB)` - return the sum's result of two large numbers ¦label:function[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.csv index 65956ada63..e6ecbf5925 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.csv @@ -1,8 +1,36 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.number.exact.add¦apoc.number.exact.add(stringA :: STRING?, stringB :: STRING?) :: (STRING?)¦apoc.number.exact.add(stringA,stringB) - return the sum's result of two large numbers -¦function¦apoc.number.exact.div¦apoc.number.exact.div(stringA :: STRING?, stringB :: STRING?, precision = 0 :: INTEGER?, roundingMode = HALF_UP :: STRING?) :: (STRING?)¦apoc.number.exact.div(stringA,stringB,[prec],[roundingModel]) - return the division's result of two large numbers -¦function¦apoc.number.exact.mul¦apoc.number.exact.mul(stringA :: STRING?, stringB :: STRING?, precision = 0 :: INTEGER?, roundingMode = HALF_UP :: STRING?) :: (STRING?)¦apoc.number.exact.mul(stringA,stringB,[prec],[roundingModel]) - return the multiplication's result of two large numbers -¦function¦apoc.number.exact.sub¦apoc.number.exact.sub(stringA :: STRING?, stringB :: STRING?) :: (STRING?)¦apoc.number.exact.sub(stringA,stringB) - return the substraction's of two large numbers -¦function¦apoc.number.exact.toExact¦apoc.number.exact.toExact(number :: INTEGER?) :: (INTEGER?)¦apoc.number.exact.toExact(number) - return the exact value -¦function¦apoc.number.exact.toFloat¦apoc.number.exact.toFloat(stringA :: STRING?, precision = 0 :: INTEGER?, roundingMode = HALF_UP :: STRING?) :: (FLOAT?)¦apoc.number.exact.toFloat(string,[prec],[roundingMode]) - return the Float value of a large number -¦function¦apoc.number.exact.toInteger¦apoc.number.exact.toInteger(stringA :: STRING?, precision = 0 :: INTEGER?, roundingMode = HALF_UP :: STRING?) :: (INTEGER?)¦apoc.number.exact.toInteger(string,[prec],[roundingMode]) - return the Integer value of a large number +¦Qualified Name¦Type¦Release +|xref::overview/apoc.number.exact/apoc.number.adoc[apoc.number.exact.add icon:book[]] + +apoc.number.exact.add(stringA,stringB) - return the sum's result of two large numbers +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.number.exact/apoc.number.adoc[apoc.number.exact.div icon:book[]] + +apoc.number.exact.div(stringA,stringB,[prec],[roundingModel]) - return the division's result of two large numbers +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.number.exact/apoc.number.adoc[apoc.number.exact.mul icon:book[]] + +apoc.number.exact.mul(stringA,stringB,[prec],[roundingModel]) - return the multiplication's result of two large numbers +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.number.exact/apoc.number.adoc[apoc.number.exact.sub icon:book[]] + +apoc.number.exact.sub(stringA,stringB) - return the substraction's of two large numbers +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.number.exact/apoc.number.adoc[apoc.number.exact.toExact icon:book[]] + +apoc.number.exact.toExact(number) - return the exact value +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.number.exact/apoc.number.adoc[apoc.number.exact.toFloat icon:book[]] + +apoc.number.exact.toFloat(string,[prec],[roundingMode]) - return the Float value of a large number +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.number.exact/apoc.number.adoc[apoc.number.exact.toInteger icon:book[]] + +apoc.number.exact.toInteger(string,[prec],[roundingMode]) - return the Integer value of a large number +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.div.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.div.adoc index c43c975c30..fce7f901ed 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.div.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.div.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.number.exact/apoc.number.exact.div.adoc[apoc.number.exact.div icon:book[]] + +¦xref::overview/apoc.number/apoc.number.exact.div.adoc[apoc.number.exact.div icon:book[]] + `apoc.number.exact.div(stringA,stringB,[prec],[roundingModel])` - return the division's result of two large numbers ¦label:function[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.mul.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.mul.adoc index aa7a94173d..c8c7da2ce8 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.mul.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.mul.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.number.exact/apoc.number.exact.mul.adoc[apoc.number.exact.mul icon:book[]] + +¦xref::overview/apoc.number/apoc.number.exact.mul.adoc[apoc.number.exact.mul icon:book[]] + `apoc.number.exact.mul(stringA,stringB,[prec],[roundingModel])` - return the multiplication's result of two large numbers ¦label:function[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.sub.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.sub.adoc index 24a4bcded5..4816dae749 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.sub.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.sub.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.number.exact/apoc.number.exact.sub.adoc[apoc.number.exact.sub icon:book[]] + +¦xref::overview/apoc.number/apoc.number.exact.sub.adoc[apoc.number.exact.sub icon:book[]] + `apoc.number.exact.sub(stringA,stringB)` - return the substraction's of two large numbers ¦label:function[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.toExact.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.toExact.adoc index 1646f5fba0..883c0979d6 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.toExact.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.toExact.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.number.exact/apoc.number.exact.toExact.adoc[apoc.number.exact.toExact icon:book[]] + +¦xref::overview/apoc.number/apoc.number.exact.toExact.adoc[apoc.number.exact.toExact icon:book[]] + `apoc.number.exact.toExact(number)` - return the exact value ¦label:function[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.toFloat.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.toFloat.adoc index b916a09670..9f9b20d46a 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.toFloat.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.toFloat.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.number.exact/apoc.number.exact.toFloat.adoc[apoc.number.exact.toFloat icon:book[]] + +¦xref::overview/apoc.number/apoc.number.exact.toFloat.adoc[apoc.number.exact.toFloat icon:book[]] + `apoc.number.exact.toFloat(string,[prec],[roundingMode])` - return the Float value of a large number ¦label:function[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.toInteger.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.toInteger.adoc index d6c1fa256f..3ebf4da08a 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.toInteger.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.number.exact.toInteger.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.number.exact/apoc.number.exact.toInteger.adoc[apoc.number.exact.toInteger icon:book[]] + +¦xref::overview/apoc.number/apoc.number.exact.toInteger.adoc[apoc.number.exact.toInteger icon:book[]] + `apoc.number.exact.toInteger(string,[prec],[roundingMode])` - return the Integer value of a large number ¦label:function[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.path.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.path.csv index d30d4999c3..f1d5af9241 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.path.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.path.csv @@ -1,10 +1,46 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.path.expand¦apoc.path.expand(start :: ANY?, relationshipFilter :: STRING?, labelFilter :: STRING?, minLevel :: INTEGER?, maxLevel :: INTEGER?) :: (path :: PATH?)¦apoc.path.expand(startNode |Node|list, 'TYPE|TYPE_OUT>||Node|list, {minLevel,maxLevel,uniqueness,relationshipFilter,labelFilter,uniqueness:'RELATIONSHIP_PATH',bfs:true, filterStartNode:false, limit:-1, optional:false, endNodes:[], terminatorNodes:[], sequence, beginSequenceAtStart:true}) yield path - expand from start node following the given relationships from min to max-level adhering to the label filters. -¦procedure¦apoc.path.spanningTree¦apoc.path.spanningTree(start :: ANY?, config :: MAP?) :: (path :: PATH?)¦apoc.path.spanningTree(startNode |Node|list, {maxLevel,relationshipFilter,labelFilter,bfs:true, filterStartNode:false, limit:-1, optional:false, endNodes:[], terminatorNodes:[], sequence, beginSequenceAtStart:true}) yield path - expand a spanning tree reachable from start node following relationships to max-level adhering to the label filters -¦procedure¦apoc.path.subgraphAll¦apoc.path.subgraphAll(start :: ANY?, config :: MAP?) :: (nodes :: LIST? OF NODE?, relationships :: LIST? OF RELATIONSHIP?)¦apoc.path.subgraphAll(startNode |Node|list, {maxLevel,relationshipFilter,labelFilter,bfs:true, filterStartNode:false, limit:-1, endNodes:[], terminatorNodes:[], sequence, beginSequenceAtStart:true}) yield nodes, relationships - expand the subgraph reachable from start node following relationships to max-level adhering to the label filters, and also return all relationships within the subgraph -¦procedure¦apoc.path.subgraphNodes¦apoc.path.subgraphNodes(start :: ANY?, config :: MAP?) :: (node :: NODE?)¦apoc.path.subgraphNodes(startNode |Node|list, {maxLevel,relationshipFilter,labelFilter,bfs:true, filterStartNode:false, limit:-1, optional:false, endNodes:[], terminatorNodes:[], sequence, beginSequenceAtStart:true}) yield node - expand the subgraph nodes reachable from start node following relationships to max-level adhering to the label filters -¦function¦apoc.path.combine¦apoc.path.combine(first :: PATH?, second :: PATH?) :: (PATH?)¦apoc.path.combine(path1, path2) - combines the paths into one if the connecting node matches -¦function¦apoc.path.create¦apoc.path.create(startNode :: NODE?, rels = [] :: LIST? OF RELATIONSHIP?) :: (PATH?)¦apoc.path.create(startNode,[rels]) - creates a path instance of the given elements -¦function¦apoc.path.elements¦apoc.path.elements(path :: PATH?) :: (LIST? OF ANY?)¦apoc.path.elements(path) - returns a list of node-relationship-node-... -¦function¦apoc.path.slice¦apoc.path.slice(path :: PATH?, offset = 0 :: INTEGER?, length = -1 :: INTEGER?) :: (PATH?)¦apoc.path.slice(path, [offset], [length]) - creates a sub-path with the given offset and length +¦Qualified Name¦Type¦Release +|xref::overview/apoc.path/apoc.path.adoc[apoc.path.expand icon:book[]] + +apoc.path.expand(startNode \|Node\|list, 'TYPE\|TYPE_OUT>\|\|Node\|list, {minLevel,maxLevel,uniqueness,relationshipFilter,labelFilter,uniqueness:'RELATIONSHIP_PATH',bfs:true, filterStartNode:false, limit:-1, optional:false, endNodes:[], terminatorNodes:[], sequence, beginSequenceAtStart:true}) yield path - expand from start node following the given relationships from min to max-level adhering to the label filters. +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.path/apoc.path.adoc[apoc.path.spanningTree icon:book[]] + +apoc.path.spanningTree(startNode \|Node\|list, {maxLevel,relationshipFilter,labelFilter,bfs:true, filterStartNode:false, limit:-1, optional:false, endNodes:[], terminatorNodes:[], sequence, beginSequenceAtStart:true}) yield path - expand a spanning tree reachable from start node following relationships to max-level adhering to the label filters +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.path/apoc.path.adoc[apoc.path.subgraphAll icon:book[]] + +apoc.path.subgraphAll(startNode \|Node\|list, {maxLevel,relationshipFilter,labelFilter,bfs:true, filterStartNode:false, limit:-1, endNodes:[], terminatorNodes:[], sequence, beginSequenceAtStart:true}) yield nodes, relationships - expand the subgraph reachable from start node following relationships to max-level adhering to the label filters, and also return all relationships within the subgraph +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.path/apoc.path.adoc[apoc.path.subgraphNodes icon:book[]] + +apoc.path.subgraphNodes(startNode \|Node\|list, {maxLevel,relationshipFilter,labelFilter,bfs:true, filterStartNode:false, limit:-1, optional:false, endNodes:[], terminatorNodes:[], sequence, beginSequenceAtStart:true}) yield node - expand the subgraph nodes reachable from start node following relationships to max-level adhering to the label filters +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.path/apoc.path.adoc[apoc.path.combine icon:book[]] + +apoc.path.combine(path1, path2) - combines the paths into one if the connecting node matches +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.path/apoc.path.adoc[apoc.path.create icon:book[]] + +apoc.path.create(startNode,[rels]) - creates a path instance of the given elements +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.path/apoc.path.adoc[apoc.path.elements icon:book[]] + +apoc.path.elements(path) - returns a list of node-relationship-node-... +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.path/apoc.path.adoc[apoc.path.slice icon:book[]] + +apoc.path.slice(path, [offset], [length]) - creates a sub-path with the given offset and length +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic-lite.csv index 968ac1136d..a731f424c4 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic-lite.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic-lite.csv @@ -2,10 +2,10 @@ ¦apoc.periodic.cancel(name :: STRING?) :: (name :: STRING?, delay :: INTEGER?, rate :: INTEGER?, done :: BOOLEAN?, cancelled :: BOOLEAN?) ¦apoc.periodic.commit(statement :: STRING?, params = {} :: MAP?) :: (updates :: INTEGER?, executions :: INTEGER?, runtime :: INTEGER?, batches :: INTEGER?, failedBatches :: INTEGER?, batchErrors :: MAP?, failedCommits :: INTEGER?, commitErrors :: MAP?, wasTerminated :: BOOLEAN?) ¦apoc.periodic.countdown(name :: STRING?, statement :: STRING?, rate :: INTEGER?) :: (name :: STRING?, delay :: INTEGER?, rate :: INTEGER?, done :: BOOLEAN?, cancelled :: BOOLEAN?) -¦apoc.periodic.iterate(cypherIterate :: STRING?, cypherAction :: STRING?, config :: MAP?) :: (batches :: INTEGER?, total :: INTEGER?, timeTaken :: INTEGER?, committedOperations :: INTEGER?, failedOperations :: INTEGER?, failedBatches :: INTEGER?, retries :: INTEGER?, errorMessages :: MAP?, batch :: MAP?, operations :: MAP?, wasTerminated :: BOOLEAN?, failedParams :: MAP?) +¦apoc.periodic.iterate(cypherIterate :: STRING?, cypherAction :: STRING?, config :: MAP?) :: (batches :: INTEGER?, total :: INTEGER?, timeTaken :: INTEGER?, committedOperations :: INTEGER?, failedOperations :: INTEGER?, failedBatches :: INTEGER?, retries :: INTEGER?, errorMessages :: MAP?, batch :: MAP?, operations :: MAP?, wasTerminated :: BOOLEAN?, failedParams :: MAP?, updateStatistics :: MAP?) ¦apoc.periodic.list() :: (name :: STRING?, delay :: INTEGER?, rate :: INTEGER?, done :: BOOLEAN?, cancelled :: BOOLEAN?) ¦apoc.periodic.repeat(name :: STRING?, statement :: STRING?, rate :: INTEGER?, config = {} :: MAP?) :: (name :: STRING?, delay :: INTEGER?, rate :: INTEGER?, done :: BOOLEAN?, cancelled :: BOOLEAN?) -¦apoc.periodic.rock_n_roll(cypherIterate :: STRING?, cypherAction :: STRING?, batchSize :: INTEGER?) :: (batches :: INTEGER?, total :: INTEGER?, timeTaken :: INTEGER?, committedOperations :: INTEGER?, failedOperations :: INTEGER?, failedBatches :: INTEGER?, retries :: INTEGER?, errorMessages :: MAP?, batch :: MAP?, operations :: MAP?, wasTerminated :: BOOLEAN?, failedParams :: MAP?) +¦apoc.periodic.rock_n_roll(cypherIterate :: STRING?, cypherAction :: STRING?, batchSize :: INTEGER?) :: (batches :: INTEGER?, total :: INTEGER?, timeTaken :: INTEGER?, committedOperations :: INTEGER?, failedOperations :: INTEGER?, failedBatches :: INTEGER?, retries :: INTEGER?, errorMessages :: MAP?, batch :: MAP?, operations :: MAP?, wasTerminated :: BOOLEAN?, failedParams :: MAP?, updateStatistics :: MAP?) ¦apoc.periodic.rock_n_roll_while(cypherLoop :: STRING?, cypherIterate :: STRING?, cypherAction :: STRING?, batchSize :: INTEGER?) :: (loop :: ANY?, batches :: INTEGER?, total :: INTEGER?) -¦apoc.periodic.submit(name :: STRING?, statement :: STRING?) :: (name :: STRING?, delay :: INTEGER?, rate :: INTEGER?, done :: BOOLEAN?, cancelled :: BOOLEAN?) +¦apoc.periodic.submit(name :: STRING?, statement :: STRING?, params = {} :: MAP?) :: (name :: STRING?, delay :: INTEGER?, rate :: INTEGER?, done :: BOOLEAN?, cancelled :: BOOLEAN?) ¦apoc.periodic.truncate(config = {} :: MAP?) :: VOID diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.csv index 73ddee727a..e6673aa30e 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.csv @@ -41,7 +41,7 @@ apoc.periodic.rock_n_roll_while('some cypher for knowing when to stop', 'some cy |label:apoc-full[] |xref::overview/apoc.periodic/apoc.periodic.adoc[apoc.periodic.submit icon:book[]] -apoc.periodic.submit('name',statement) - submit a one-off background statement +apoc.periodic.submit('name',statement,params) - submit a one-off background statement; parameter 'params' is optional and can contain query parameters for Cypher statement |label:procedure[] |label:apoc-core[] |xref::overview/apoc.periodic/apoc.periodic.adoc[apoc.periodic.truncate icon:book[]] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.iterate-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.iterate-lite.csv index 4595f4e9c6..acc5602073 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.iterate-lite.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.iterate-lite.csv @@ -1,2 +1,2 @@ ¦signature -¦apoc.periodic.iterate(cypherIterate :: STRING?, cypherAction :: STRING?, config :: MAP?) :: (batches :: INTEGER?, total :: INTEGER?, timeTaken :: INTEGER?, committedOperations :: INTEGER?, failedOperations :: INTEGER?, failedBatches :: INTEGER?, retries :: INTEGER?, errorMessages :: MAP?, batch :: MAP?, operations :: MAP?, wasTerminated :: BOOLEAN?, failedParams :: MAP?) +¦apoc.periodic.iterate(cypherIterate :: STRING?, cypherAction :: STRING?, config :: MAP?) :: (batches :: INTEGER?, total :: INTEGER?, timeTaken :: INTEGER?, committedOperations :: INTEGER?, failedOperations :: INTEGER?, failedBatches :: INTEGER?, retries :: INTEGER?, errorMessages :: MAP?, batch :: MAP?, operations :: MAP?, wasTerminated :: BOOLEAN?, failedParams :: MAP?, updateStatistics :: MAP?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.rock_n_roll-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.rock_n_roll-lite.csv index b60ea9eb7d..9030caa09d 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.rock_n_roll-lite.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.rock_n_roll-lite.csv @@ -1,2 +1,2 @@ ¦signature -¦apoc.periodic.rock_n_roll(cypherIterate :: STRING?, cypherAction :: STRING?, batchSize :: INTEGER?) :: (batches :: INTEGER?, total :: INTEGER?, timeTaken :: INTEGER?, committedOperations :: INTEGER?, failedOperations :: INTEGER?, failedBatches :: INTEGER?, retries :: INTEGER?, errorMessages :: MAP?, batch :: MAP?, operations :: MAP?, wasTerminated :: BOOLEAN?, failedParams :: MAP?) +¦apoc.periodic.rock_n_roll(cypherIterate :: STRING?, cypherAction :: STRING?, batchSize :: INTEGER?) :: (batches :: INTEGER?, total :: INTEGER?, timeTaken :: INTEGER?, committedOperations :: INTEGER?, failedOperations :: INTEGER?, failedBatches :: INTEGER?, retries :: INTEGER?, errorMessages :: MAP?, batch :: MAP?, operations :: MAP?, wasTerminated :: BOOLEAN?, failedParams :: MAP?, updateStatistics :: MAP?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.submit-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.submit-lite.csv index 7b211505a3..56711df99a 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.submit-lite.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.submit-lite.csv @@ -1,2 +1,2 @@ ¦signature -¦apoc.periodic.submit(name :: STRING?, statement :: STRING?) :: (name :: STRING?, delay :: INTEGER?, rate :: INTEGER?, done :: BOOLEAN?, cancelled :: BOOLEAN?) +¦apoc.periodic.submit(name :: STRING?, statement :: STRING?, params = {} :: MAP?) :: (name :: STRING?, delay :: INTEGER?, rate :: INTEGER?, done :: BOOLEAN?, cancelled :: BOOLEAN?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.submit.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.submit.adoc index 422bcd53cf..c377201052 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.submit.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.submit.adoc @@ -1,5 +1,5 @@ ¦xref::overview/apoc.periodic/apoc.periodic.submit.adoc[apoc.periodic.submit icon:book[]] + -`apoc.periodic.submit('name',statement)` - submit a one-off background statement +`apoc.periodic.submit('name',statement,params)` - submit a one-off background statement; parameter 'params' is optional and can contain query parameters for Cypher statement ¦label:procedure[] ¦label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.truncate.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.truncate.adoc index 89ee80ece6..ef583ff648 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.truncate.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.periodic.truncate.adoc @@ -1,5 +1,5 @@ ¦xref::overview/apoc.periodic/apoc.periodic.truncate.adoc[apoc.periodic.truncate icon:book[]] + - - removes all entities (and optionally indexes and constraints) from db using the apoc.periodic.iterate under the hood +`apoc.periodic.truncate(\{config})` - removes all entities (and optionally indexes and constraints) from db using the apoc.periodic.iterate under the hood ¦label:procedure[] ¦label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.append.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.append.adoc new file mode 100644 index 0000000000..3a48e8f036 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.append.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.append.adoc[apoc.redis.append icon:book[]] + + +`apoc.redis.append(uri, key, value, \{config}) | Execute the 'APPEND key value' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.configGet.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.configGet.adoc new file mode 100644 index 0000000000..7582f6f737 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.configGet.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.configGet.adoc[apoc.redis.configGet icon:book[]] + + +`apoc.redis.configGet(uri, parameter, \{config}) | Execute the 'CONFIG GET parameter' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.configSet.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.configSet.adoc new file mode 100644 index 0000000000..e15e18925f --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.configSet.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.configSet.adoc[apoc.redis.configSet icon:book[]] + + +`apoc.redis.configSet(uri, parameter, \{config}) | Execute the 'CONFIG SET parameter value' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.copy.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.copy.adoc new file mode 100644 index 0000000000..675f9d5bff --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.copy.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.copy.adoc[apoc.redis.copy icon:book[]] + + +`apoc.redis.copy(uri, source, destination, \{config}) | Execute the 'COPY source destination' command and returns true if source was copied and false otherwise` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.csv new file mode 100644 index 0000000000..f5d51baba0 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.csv @@ -0,0 +1,156 @@ +¦Qualified Name¦Type¦Release +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.append icon:book[]] + +apoc.redis.append(uri, key, value, \{config}) \| Execute the 'APPEND key value' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.configGet icon:book[]] + +apoc.redis.configGet(uri, parameter, \{config}) \| Execute the 'CONFIG GET parameter' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.configSet icon:book[]] + +apoc.redis.configSet(uri, parameter, \{config}) \| Execute the 'CONFIG SET parameter value' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.copy icon:book[]] + +apoc.redis.copy(uri, source, destination, \{config}) \| Execute the 'COPY source destination' command and returns true if source was copied and false otherwise +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.eval icon:book[]] + +apoc.redis.eval(uri, script, outputType, keys, values, \{config}) \| Execute the 'EVAL script' command. In the parameters provided to the procedure, keys are bound to the KEYS[n] like special array of the Lua script and values are bound to the ARGV[n] like special array of the Lua script. +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.exists icon:book[]] + +apoc.redis.exists(uri, keys, \{config}) \| Execute the 'EXISTS keys' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.get icon:book[]] + +apoc.redis.get(uri, key, \{config}) \| Execute the 'GET key' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.hdel icon:book[]] + +apoc.redis.hdel(uri, key, fields, \{config}) \| Execute the 'HDEL key fields' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.hexists icon:book[]] + +apoc.redis.hexists(uri, key, field, \{config}) \| Execute the 'HEXISTS key field' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.hget icon:book[]] + +apoc.redis.hget(uri, key, field, \{config}) \| Execute the 'HGET key field' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.hgetall icon:book[]] + +apoc.redis.hgetall(uri, key, \{config}) \| Execute the 'HGETALL key' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.hincrby icon:book[]] + +apoc.redis.hincrby(uri, key, field, amount, \{config}) \| Execute the 'HINCRBY key field amount' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.hset icon:book[]] + +apoc.redis.hset(uri, key, field, value, \{config}) \| Execute the 'HSET key field value' command and returns true if it is a new field in the hash or false if the field already exists +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.incrby icon:book[]] + +apoc.redis.incrby(uri, key, amount, \{config}) \| Execute the 'INCRBY key increment' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.info icon:book[]] + +apoc.redis.info(uri, \{config}) \| Execute the 'INFO' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.lrange icon:book[]] + +apoc.redis.lrange(uri, key, start, stop, \{config}) \| Execute the 'LRANGE key start stop' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.persist icon:book[]] + +apoc.redis.persist(uri, key, \{config}) \| Execute the 'PERSIST key' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.pexpire icon:book[]] + +apoc.redis.pexpire(uri, key, time, isExpireAt \{config}) \| Execute the 'PEXPIRE key time' command, or the 'PEPXPIREAT' if isExpireAt=true +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.pop icon:book[]] + +apoc.redis.pop(uri, key, \{config}) \| Execute the 'LPOP key' command, or the 'RPOP' if config right=true (default) +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.pttl icon:book[]] + +apoc.redis.pttl(uri, key, \{config}) \| Execute the 'PTTL key' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.push icon:book[]] + +apoc.redis.push(uri, key, values, \{config}) \| Execute the 'LPUSH key field values' command, or the 'RPUSH' if config right=true (default) +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.sadd icon:book[]] + +apoc.redis.sadd(uri, key, members, \{config}) \| Execute the 'SADD key members' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.scard icon:book[]] + +apoc.redis.scard(uri, key, \{config}) \| Execute the 'SCARD key' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.getSet icon:book[]] + +apoc.redis.getSet(uri, key, value, \{config}) \| Execute the 'SET key value' command and return old value stored (or null if did not exists) +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.smembers icon:book[]] + +apoc.redis.smembers(uri, key, \{config}) \| Execute the 'SMEMBERS key' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.spop icon:book[]] + +apoc.redis.spop(uri, key, \{config}) \| Execute the 'SPOP key' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.sunion icon:book[]] + +apoc.redis.sunion(uri, keys, \{config}) \| Execute the 'SUNION keys' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.zadd icon:book[]] + +apoc.redis.zadd(uri, keys, scoresAndMembers, \{config}) \| Execute the 'ZADD key scoresAndMembers' command, where scoresAndMembers is a list of score,member,score,member,... +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.zcard icon:book[]] + +apoc.redis.zcard(uri, key, \{config}) \| Execute the 'ZCARD key' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.zrangebyscore icon:book[]] + +apoc.redis.zrangebyscore(uri, key, min, max, \{config}) \| Execute the 'ZRANGEBYSCORE key min max' command +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.redis/apoc.redis.adoc[apoc.redis.zrem icon:book[]] + +apoc.redis.zrem(uri, key, members, \{config}) \| Execute the 'ZREM key members' command +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.eval.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.eval.adoc new file mode 100644 index 0000000000..fdc8412a51 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.eval.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.eval.adoc[apoc.redis.eval icon:book[]] + + +`apoc.redis.eval(uri, script, outputType, keys, values, \{config}) | Execute the 'EVAL script' command. In the parameters provided to the procedure, keys are bound to the KEYS[n] like special array of the Lua script and values are bound to the ARGV[n] like special array of the Lua script.` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.exists.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.exists.adoc new file mode 100644 index 0000000000..f0906409ec --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.exists.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.exists.adoc[apoc.redis.exists icon:book[]] + + +`apoc.redis.exists(uri, keys, \{config}) | Execute the 'EXISTS keys' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.get.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.get.adoc new file mode 100644 index 0000000000..16cead06d3 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.get.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.get.adoc[apoc.redis.get icon:book[]] + + +`apoc.redis.get(uri, key, \{config}) | Execute the 'GET key' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.getSet.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.getSet.adoc new file mode 100644 index 0000000000..afcf67a1e0 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.getSet.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.getSet.adoc[apoc.redis.getSet icon:book[]] + + +`apoc.redis.getSet(uri, key, value, \{config}) | Execute the 'SET key value' command and return old value stored (or null if did not exists)` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.hdel.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.hdel.adoc new file mode 100644 index 0000000000..fa6ca5b057 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.hdel.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.hdel.adoc[apoc.redis.hdel icon:book[]] + + +`apoc.redis.hdel(uri, key, fields, \{config}) | Execute the 'HDEL key fields' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.hexists.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.hexists.adoc new file mode 100644 index 0000000000..7c9ab2a2a4 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.hexists.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.hexists.adoc[apoc.redis.hexists icon:book[]] + + +`apoc.redis.hexists(uri, key, field, \{config}) | Execute the 'HEXISTS key field' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.hget.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.hget.adoc new file mode 100644 index 0000000000..9ac49f25a7 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.hget.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.hget.adoc[apoc.redis.hget icon:book[]] + + +`apoc.redis.hget(uri, key, field, \{config}) | Execute the 'HGET key field' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.hgetall.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.hgetall.adoc new file mode 100644 index 0000000000..0c06c9b75f --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.hgetall.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.hgetall.adoc[apoc.redis.hgetall icon:book[]] + + +`apoc.redis.hgetall(uri, key, \{config}) | Execute the 'HGETALL key' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.hincrby.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.hincrby.adoc new file mode 100644 index 0000000000..bb4789e479 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.hincrby.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.hincrby.adoc[apoc.redis.hincrby icon:book[]] + + +`apoc.redis.hincrby(uri, key, field, amount, \{config}) | Execute the 'HINCRBY key field amount' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.hset.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.hset.adoc new file mode 100644 index 0000000000..25394264ce --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.hset.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.hset.adoc[apoc.redis.hset icon:book[]] + + +`apoc.redis.hset(uri, key, field, value, \{config}) | Execute the 'HSET key field value' command and returns true if it is a new field in the hash or false if the field already exists` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.incrby.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.incrby.adoc new file mode 100644 index 0000000000..5982c978d2 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.incrby.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.incrby.adoc[apoc.redis.incrby icon:book[]] + + +`apoc.redis.incrby(uri, key, amount, \{config}) | Execute the 'INCRBY key increment' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.info.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.info.adoc new file mode 100644 index 0000000000..ca020d7be7 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.info.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.info.adoc[apoc.redis.info icon:book[]] + + +`apoc.redis.info(uri, \{config}) | Execute the 'INFO' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.lrange.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.lrange.adoc new file mode 100644 index 0000000000..eb4874b576 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.lrange.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.lrange.adoc[apoc.redis.lrange icon:book[]] + + +`apoc.redis.lrange(uri, key, start, stop, \{config}) | Execute the 'LRANGE key start stop' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.persist.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.persist.adoc new file mode 100644 index 0000000000..b126be8319 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.persist.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.persist.adoc[apoc.redis.persist icon:book[]] + + +`apoc.redis.persist(uri, key, \{config}) | Execute the 'PERSIST key' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.pexpire.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.pexpire.adoc new file mode 100644 index 0000000000..c842a514dd --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.pexpire.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.pexpire.adoc[apoc.redis.pexpire icon:book[]] + + +`apoc.redis.pexpire(uri, key, time, isExpireAt \{config}) | Execute the 'PEXPIRE key time' command, or the 'PEPXPIREAT' if isExpireAt=true` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.pop.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.pop.adoc new file mode 100644 index 0000000000..f641f1577c --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.pop.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.pop.adoc[apoc.redis.pop icon:book[]] + + +`apoc.redis.pop(uri, key, \{config}) | Execute the 'LPOP key' command, or the 'RPOP' if config right=true (default)` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.pttl.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.pttl.adoc new file mode 100644 index 0000000000..4c77511fc7 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.pttl.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.pttl.adoc[apoc.redis.pttl icon:book[]] + + +`apoc.redis.pttl(uri, key, \{config}) | Execute the 'PTTL key' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.push.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.push.adoc new file mode 100644 index 0000000000..3744d694e0 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.push.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.push.adoc[apoc.redis.push icon:book[]] + + +`apoc.redis.push(uri, key, values, \{config}) | Execute the 'LPUSH key field values' command, or the 'RPUSH' if config right=true (default)` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.sadd.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.sadd.adoc new file mode 100644 index 0000000000..ce5271094e --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.sadd.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.sadd.adoc[apoc.redis.sadd icon:book[]] + + +`apoc.redis.sadd(uri, key, members, \{config}) | Execute the 'SADD key members' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.scard.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.scard.adoc new file mode 100644 index 0000000000..02f9ffcb87 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.scard.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.scard.adoc[apoc.redis.scard icon:book[]] + + +`apoc.redis.scard(uri, key, \{config}) | Execute the 'SCARD key' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.smembers.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.smembers.adoc new file mode 100644 index 0000000000..5ef9ed4ebd --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.smembers.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.smembers.adoc[apoc.redis.smembers icon:book[]] + + +`apoc.redis.smembers(uri, key, \{config}) | Execute the 'SMEMBERS key' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.spop.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.spop.adoc new file mode 100644 index 0000000000..4eb54cd748 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.spop.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.spop.adoc[apoc.redis.spop icon:book[]] + + +`apoc.redis.spop(uri, key, \{config}) | Execute the 'SPOP key' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.sunion.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.sunion.adoc new file mode 100644 index 0000000000..987e060673 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.sunion.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.sunion.adoc[apoc.redis.sunion icon:book[]] + + +`apoc.redis.sunion(uri, keys, \{config}) | Execute the 'SUNION keys' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.zadd.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.zadd.adoc new file mode 100644 index 0000000000..fb9a29e106 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.zadd.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.zadd.adoc[apoc.redis.zadd icon:book[]] + + +`apoc.redis.zadd(uri, keys, scoresAndMembers, \{config}) | Execute the 'ZADD key scoresAndMembers' command, where scoresAndMembers is a list of score,member,score,member,...` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.zcard.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.zcard.adoc new file mode 100644 index 0000000000..6ae4514015 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.zcard.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.zcard.adoc[apoc.redis.zcard icon:book[]] + + +`apoc.redis.zcard(uri, key, \{config}) | Execute the 'ZCARD key' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.zrangebyscore.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.zrangebyscore.adoc new file mode 100644 index 0000000000..ae569c4347 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.zrangebyscore.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.zrangebyscore.adoc[apoc.redis.zrangebyscore icon:book[]] + + +`apoc.redis.zrangebyscore(uri, key, min, max, \{config}) | Execute the 'ZRANGEBYSCORE key min max' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.zrem.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.zrem.adoc new file mode 100644 index 0000000000..51280bc223 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.redis.zrem.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.redis/apoc.redis.zrem.adoc[apoc.redis.zrem icon:book[]] + + +`apoc.redis.zrem(uri, key, members, \{config}) | Execute the 'ZREM key members' command` +¦label:procedure[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.csv index 2b1a582df2..85dd758bbe 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.csv @@ -1,16 +1,76 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.refactor.categorize¦apoc.refactor.categorize(sourceKey :: STRING?, type :: STRING?, outgoing :: BOOLEAN?, label :: STRING?, targetKey :: STRING?, copiedKeys :: LIST? OF STRING?, batchSize :: INTEGER?) :: VOID¦apoc.refactor.categorize(sourceKey, type, outgoing, label, targetKey, copiedKeys, batchSize) turn each unique propertyKey into a category node and connect to it -¦procedure¦apoc.refactor.cloneNodes¦apoc.refactor.cloneNodes(nodes :: LIST? OF NODE?, withRelationships = false :: BOOLEAN?, skipProperties = [] :: LIST? OF STRING?) :: (input :: INTEGER?, output :: NODE?, error :: STRING?)¦apoc.refactor.cloneNodes([node1,node2,...]) clone nodes with their labels and properties -¦procedure¦apoc.refactor.cloneNodesWithRelationships¦apoc.refactor.cloneNodesWithRelationships(nodes :: LIST? OF NODE?) :: (input :: INTEGER?, output :: NODE?, error :: STRING?)¦apoc.refactor.cloneNodesWithRelationships([node1,node2,...]) clone nodes with their labels, properties and relationships -¦procedure¦apoc.refactor.cloneSubgraph¦apoc.refactor.cloneSubgraph(nodes :: LIST? OF NODE?, rels = [] :: LIST? OF RELATIONSHIP?, config = {} :: MAP?) :: (input :: INTEGER?, output :: NODE?, error :: STRING?)¦apoc.refactor.cloneSubgraph([node1,node2,...], [rel1,rel2,...]:[], {standinNodes:[], skipProperties:[]}) YIELD input, output, error | clone nodes with their labels and properties (optionally skipping any properties in the skipProperties list via the config map), and clone the given relationships (will exist between cloned nodes only). If no relationships are provided, all relationships between the given nodes will be cloned. Relationships can be optionally redirected according to standinNodes node pairings (this is a list of list-pairs of nodes), so given a node in the original subgraph (first of the pair), an existing node (second of the pair) can act as a standin for it within the cloned subgraph. Cloned relationships will be redirected to the standin. -¦procedure¦apoc.refactor.cloneSubgraphFromPaths¦apoc.refactor.cloneSubgraphFromPaths(paths :: LIST? OF PATH?, config = {} :: MAP?) :: (input :: INTEGER?, output :: NODE?, error :: STRING?)¦apoc.refactor.cloneSubgraphFromPaths([path1, path2, ...], {standinNodes:[], skipProperties:[]}) YIELD input, output, error | from the subgraph formed from the given paths, clone nodes with their labels and properties (optionally skipping any properties in the skipProperties list via the config map), and clone the relationships (will exist between cloned nodes only). Relationships can be optionally redirected according to standinNodes node pairings (this is a list of list-pairs of nodes), so given a node in the original subgraph (first of the pair), an existing node (second of the pair) can act as a standin for it within the cloned subgraph. Cloned relationships will be redirected to the standin. -¦procedure¦apoc.refactor.collapseNode¦apoc.refactor.collapseNode(nodes :: ANY?, type :: STRING?) :: (input :: INTEGER?, output :: RELATIONSHIP?, error :: STRING?)¦apoc.refactor.collapseNode([node1,node2],'TYPE') collapse node to relationship, node with one rel becomes self-relationship -¦procedure¦apoc.refactor.deleteAndReconnect¦apoc.refactor.deleteAndReconnect(path :: PATH?, nodes :: LIST? OF NODE?, config = {} :: MAP?) :: (nodes :: LIST? OF NODE?, relationships :: LIST? OF RELATIONSHIP?)¦apoc.refactor.deleteAndReconnect([pathLinkedList], [nodesToRemove], \{config}) - Removes some nodes from a linked list -¦procedure¦apoc.refactor.extractNode¦apoc.refactor.extractNode(relationships :: ANY?, labels :: LIST? OF STRING?, outType :: STRING?, inType :: STRING?) :: (input :: INTEGER?, output :: NODE?, error :: STRING?)¦apoc.refactor.extractNode([rel1,rel2,...], [labels],'OUT','IN') extract node from relationships -¦procedure¦apoc.refactor.from¦apoc.refactor.from(relationship :: RELATIONSHIP?, newNode :: NODE?) :: (input :: INTEGER?, output :: RELATIONSHIP?, error :: STRING?)¦apoc.refactor.from(rel, startNode) redirect relationship to use new start-node -¦procedure¦apoc.refactor.invert¦apoc.refactor.invert(relationship :: RELATIONSHIP?) :: (input :: INTEGER?, output :: RELATIONSHIP?, error :: STRING?)¦apoc.refactor.invert(rel) inverts relationship direction -¦procedure¦apoc.refactor.mergeNodes¦apoc.refactor.mergeNodes(nodes :: LIST? OF NODE?, config = {} :: MAP?) :: (node :: NODE?)¦apoc.refactor.mergeNodes([node1,node2],[{properties:'overwrite' or 'discard' or 'combine'}]) merge nodes onto first in list -¦procedure¦apoc.refactor.mergeRelationships¦apoc.refactor.mergeRelationships(rels :: LIST? OF RELATIONSHIP?, config = {} :: MAP?) :: (rel :: RELATIONSHIP?)¦apoc.refactor.mergeRelationships([rel1,rel2]) merge relationships onto first in list -¦procedure¦apoc.refactor.normalizeAsBoolean¦apoc.refactor.normalizeAsBoolean(entity :: ANY?, propertyKey :: STRING?, true_values :: LIST? OF ANY?, false_values :: LIST? OF ANY?) :: VOID¦apoc.refactor.normalizeAsBoolean(entity, propertyKey, true_values, false_values) normalize/convert a property to be boolean -¦procedure¦apoc.refactor.setType¦apoc.refactor.setType(relationship :: RELATIONSHIP?, newType :: STRING?) :: (input :: INTEGER?, output :: RELATIONSHIP?, error :: STRING?)¦apoc.refactor.setType(rel, 'NEW-TYPE') change relationship-type -¦procedure¦apoc.refactor.to¦apoc.refactor.to(relationship :: RELATIONSHIP?, newNode :: NODE?) :: (input :: INTEGER?, output :: RELATIONSHIP?, error :: STRING?)¦ apoc.refactor.to(rel, endNode) redirect relationship to use new end-node +¦Qualified Name¦Type¦Release +|xref::overview/apoc.refactor/apoc.refactor.adoc[apoc.refactor.categorize icon:book[]] + +apoc.refactor.categorize(sourceKey, type, outgoing, label, targetKey, copiedKeys, batchSize) turn each unique propertyKey into a category node and connect to it +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.refactor/apoc.refactor.adoc[apoc.refactor.cloneNodes icon:book[]] + +apoc.refactor.cloneNodes([node1,node2,...]) clone nodes with their labels and properties +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.refactor/apoc.refactor.adoc[apoc.refactor.cloneNodesWithRelationships icon:book[]] + +apoc.refactor.cloneNodesWithRelationships([node1,node2,...]) clone nodes with their labels, properties and relationships +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.refactor/apoc.refactor.adoc[apoc.refactor.cloneSubgraph icon:book[]] + +apoc.refactor.cloneSubgraph([node1,node2,...], [rel1,rel2,...]:[], {standinNodes:[], skipProperties:[]}) YIELD input, output, error \| clone nodes with their labels and properties (optionally skipping any properties in the skipProperties list via the config map), and clone the given relationships (will exist between cloned nodes only). If no relationships are provided, all relationships between the given nodes will be cloned. Relationships can be optionally redirected according to standinNodes node pairings (this is a list of list-pairs of nodes), so given a node in the original subgraph (first of the pair), an existing node (second of the pair) can act as a standin for it within the cloned subgraph. Cloned relationships will be redirected to the standin. +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.refactor/apoc.refactor.adoc[apoc.refactor.cloneSubgraphFromPaths icon:book[]] + +apoc.refactor.cloneSubgraphFromPaths([path1, path2, ...], {standinNodes:[], skipProperties:[]}) YIELD input, output, error \| from the subgraph formed from the given paths, clone nodes with their labels and properties (optionally skipping any properties in the skipProperties list via the config map), and clone the relationships (will exist between cloned nodes only). Relationships can be optionally redirected according to standinNodes node pairings (this is a list of list-pairs of nodes), so given a node in the original subgraph (first of the pair), an existing node (second of the pair) can act as a standin for it within the cloned subgraph. Cloned relationships will be redirected to the standin. +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.refactor/apoc.refactor.adoc[apoc.refactor.collapseNode icon:book[]] + +apoc.refactor.collapseNode([node1,node2],'TYPE') collapse node to relationship, node with one rel becomes self-relationship +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.refactor/apoc.refactor.adoc[apoc.refactor.deleteAndReconnect icon:book[]] + +apoc.refactor.deleteAndReconnect([pathLinkedList], [nodesToRemove], \{config}) - Removes some nodes from a linked list +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.refactor/apoc.refactor.adoc[apoc.refactor.extractNode icon:book[]] + +apoc.refactor.extractNode([rel1,rel2,...], [labels],'OUT','IN') extract node from relationships +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.refactor/apoc.refactor.adoc[apoc.refactor.from icon:book[]] + +apoc.refactor.from(rel, startNode) redirect relationship to use new start-node +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.refactor/apoc.refactor.adoc[apoc.refactor.invert icon:book[]] + +apoc.refactor.invert(rel) inverts relationship direction +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.refactor/apoc.refactor.adoc[apoc.refactor.mergeNodes icon:book[]] + +apoc.refactor.mergeNodes([node1,node2],[{properties:'overwrite' or 'discard' or 'combine'}]) merge nodes onto first in list +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.refactor/apoc.refactor.adoc[apoc.refactor.mergeRelationships icon:book[]] + +apoc.refactor.mergeRelationships([rel1,rel2]) merge relationships onto first in list +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.refactor/apoc.refactor.adoc[apoc.refactor.normalizeAsBoolean icon:book[]] + +apoc.refactor.normalizeAsBoolean(entity, propertyKey, true_values, false_values) normalize/convert a property to be boolean +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.refactor/apoc.refactor.adoc[apoc.refactor.setType icon:book[]] + +apoc.refactor.setType(rel, 'NEW-TYPE') change relationship-type +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.refactor/apoc.refactor.adoc[apoc.refactor.to icon:book[]] + + apoc.refactor.to(rel, endNode) redirect relationship to use new end-node +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.deleteAndReconnect.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.deleteAndReconnect.adoc new file mode 100644 index 0000000000..7d07b45af0 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.deleteAndReconnect.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.refactor/apoc.refactor.deleteAndReconnect.adoc[apoc.refactor.deleteAndReconnect icon:book[]] + + +`apoc.refactor.deleteAndReconnect([pathLinkedList], [nodesToRemove], \{config})` - Removes some nodes from a linked list +¦label:procedure[] +¦label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.rename.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.rename.csv index b7923004b7..4440ee2f95 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.rename.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.rename.csv @@ -1,5 +1,21 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.refactor.rename.label¦apoc.refactor.rename.label(oldLabel :: STRING?, newLabel :: STRING?, nodes = [] :: LIST? OF NODE?) :: (batches :: INTEGER?, total :: INTEGER?, timeTaken :: INTEGER?, committedOperations :: INTEGER?, failedOperations :: INTEGER?, failedBatches :: INTEGER?, retries :: INTEGER?, errorMessages :: MAP?, batch :: MAP?, operations :: MAP?, constraints :: LIST? OF STRING?, indexes :: LIST? OF STRING?)¦apoc.refactor.rename.label(oldLabel, newLabel, [nodes]) | rename a label from 'oldLabel' to 'newLabel' for all nodes. If 'nodes' is provided renaming is applied to this set only -¦procedure¦apoc.refactor.rename.nodeProperty¦apoc.refactor.rename.nodeProperty(oldName :: STRING?, newName :: STRING?, nodes = [] :: LIST? OF NODE?, config = {} :: MAP?) :: (batches :: INTEGER?, total :: INTEGER?, timeTaken :: INTEGER?, committedOperations :: INTEGER?, failedOperations :: INTEGER?, failedBatches :: INTEGER?, retries :: INTEGER?, errorMessages :: MAP?, batch :: MAP?, operations :: MAP?, constraints :: LIST? OF STRING?, indexes :: LIST? OF STRING?)¦apoc.refactor.rename.nodeProperty(oldName, newName, [nodes], \{config}) | rename all node's property from 'oldName' to 'newName'. If 'nodes' is provided renaming is applied to this set only -¦procedure¦apoc.refactor.rename.type¦apoc.refactor.rename.type(oldType :: STRING?, newType :: STRING?, rels = [] :: LIST? OF RELATIONSHIP?, config = {} :: MAP?) :: (batches :: INTEGER?, total :: INTEGER?, timeTaken :: INTEGER?, committedOperations :: INTEGER?, failedOperations :: INTEGER?, failedBatches :: INTEGER?, retries :: INTEGER?, errorMessages :: MAP?, batch :: MAP?, operations :: MAP?, constraints :: LIST? OF STRING?, indexes :: LIST? OF STRING?)¦apoc.refactor.rename.type(oldType, newType, [rels], \{config}) | rename all relationships with type 'oldType' to 'newType'. If 'rels' is provided renaming is applied to this set only -¦procedure¦apoc.refactor.rename.typeProperty¦apoc.refactor.rename.typeProperty(oldName :: STRING?, newName :: STRING?, rels = [] :: LIST? OF RELATIONSHIP?, config = {} :: MAP?) :: (batches :: INTEGER?, total :: INTEGER?, timeTaken :: INTEGER?, committedOperations :: INTEGER?, failedOperations :: INTEGER?, failedBatches :: INTEGER?, retries :: INTEGER?, errorMessages :: MAP?, batch :: MAP?, operations :: MAP?, constraints :: LIST? OF STRING?, indexes :: LIST? OF STRING?)¦apoc.refactor.rename.typeProperty(oldName, newName, [rels], \{config}) | rename all relationship's property from 'oldName' to 'newName'. If 'rels' is provided renaming is applied to this set only +¦Qualified Name¦Type¦Release +|xref::overview/apoc.refactor.rename/apoc.refactor.adoc[apoc.refactor.rename.label icon:book[]] + +apoc.refactor.rename.label(oldLabel, newLabel, [nodes]) \| rename a label from 'oldLabel' to 'newLabel' for all nodes. If 'nodes' is provided renaming is applied to this set only +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.refactor.rename/apoc.refactor.adoc[apoc.refactor.rename.nodeProperty icon:book[]] + +apoc.refactor.rename.nodeProperty(oldName, newName, [nodes], \{config}) \| rename all node's property from 'oldName' to 'newName'. If 'nodes' is provided renaming is applied to this set only +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.refactor.rename/apoc.refactor.adoc[apoc.refactor.rename.type icon:book[]] + +apoc.refactor.rename.type(oldType, newType, [rels], \{config}) \| rename all relationships with type 'oldType' to 'newType'. If 'rels' is provided renaming is applied to this set only +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.refactor.rename/apoc.refactor.adoc[apoc.refactor.rename.typeProperty icon:book[]] + +apoc.refactor.rename.typeProperty(oldName, newName, [rels], \{config}) \| rename all relationship's property from 'oldName' to 'newName'. If 'rels' is provided renaming is applied to this set only +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.rename.label.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.rename.label.adoc index 8bdcac73d2..f36410d4fe 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.rename.label.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.rename.label.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.refactor.rename/apoc.refactor.rename.label.adoc[apoc.refactor.rename.label icon:book[]] + +¦xref::overview/apoc.refactor/apoc.refactor.rename.label.adoc[apoc.refactor.rename.label icon:book[]] + `apoc.refactor.rename.label(oldLabel, newLabel, [nodes]) | rename a label from 'oldLabel' to 'newLabel' for all nodes. If 'nodes' is provided renaming is applied to this set only` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.rename.nodeProperty.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.rename.nodeProperty.adoc index b4b209852d..618d19f7af 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.rename.nodeProperty.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.rename.nodeProperty.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.refactor.rename/apoc.refactor.rename.nodeProperty.adoc[apoc.refactor.rename.nodeProperty icon:book[]] + +¦xref::overview/apoc.refactor/apoc.refactor.rename.nodeProperty.adoc[apoc.refactor.rename.nodeProperty icon:book[]] + `apoc.refactor.rename.nodeProperty(oldName, newName, [nodes], \{config}) | rename all node's property from 'oldName' to 'newName'. If 'nodes' is provided renaming is applied to this set only` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.rename.type.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.rename.type.adoc index f9b55eb738..cca92f2b4c 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.rename.type.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.rename.type.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.refactor.rename/apoc.refactor.rename.type.adoc[apoc.refactor.rename.type icon:book[]] + +¦xref::overview/apoc.refactor/apoc.refactor.rename.type.adoc[apoc.refactor.rename.type icon:book[]] + `apoc.refactor.rename.type(oldType, newType, [rels], \{config}) | rename all relationships with type 'oldType' to 'newType'. If 'rels' is provided renaming is applied to this set only` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.rename.typeProperty.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.rename.typeProperty.adoc index 703804599e..06bdf65a46 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.rename.typeProperty.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.refactor.rename.typeProperty.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.refactor.rename/apoc.refactor.rename.typeProperty.adoc[apoc.refactor.rename.typeProperty icon:book[]] + +¦xref::overview/apoc.refactor/apoc.refactor.rename.typeProperty.adoc[apoc.refactor.rename.typeProperty icon:book[]] + `apoc.refactor.rename.typeProperty(oldName, newName, [rels], \{config}) | rename all relationship's property from 'oldName' to 'newName'. If 'rels' is provided renaming is applied to this set only` ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.rel.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.rel.csv index 2d073856e7..a1d843b945 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.rel.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.rel.csv @@ -1,5 +1,21 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.rel.endNode¦apoc.rel.endNode(rel :: RELATIONSHIP?) :: (NODE?)¦returns endNode for (virtual) relationships -¦function¦apoc.rel.id¦apoc.rel.id(rel :: RELATIONSHIP?) :: (INTEGER?)¦returns id for (virtual) relationships -¦function¦apoc.rel.startNode¦apoc.rel.startNode(rel :: RELATIONSHIP?) :: (NODE?)¦returns startNode for (virtual) relationships -¦function¦apoc.rel.type¦apoc.rel.type(rel :: RELATIONSHIP?) :: (STRING?)¦returns type for (virtual) relationships +¦Qualified Name¦Type¦Release +|xref::overview/apoc.rel/apoc.rel.adoc[apoc.rel.endNode icon:book[]] + +returns endNode for (virtual) relationships +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.rel/apoc.rel.adoc[apoc.rel.id icon:book[]] + +returns id for (virtual) relationships +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.rel/apoc.rel.adoc[apoc.rel.startNode icon:book[]] + +returns startNode for (virtual) relationships +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.rel/apoc.rel.adoc[apoc.rel.type icon:book[]] + +returns type for (virtual) relationships +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.rel.endNode.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.rel.endNode.adoc new file mode 100644 index 0000000000..572ea7511a --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.rel.endNode.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.rel/apoc.rel.endNode.adoc[apoc.rel.endNode icon:book[]] + + +`returns endNode for (virtual) relationships` +¦label:function[] +¦label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.rel.startNode.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.rel.startNode.adoc new file mode 100644 index 0000000000..fbf75ad476 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.rel.startNode.adoc @@ -0,0 +1,5 @@ +¦xref::overview/apoc.rel/apoc.rel.startNode.adoc[apoc.rel.startNode icon:book[]] + + +`returns startNode for (virtual) relationships` +¦label:function[] +¦label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema-lite.csv index 7b86f31b57..3c480b20bd 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema-lite.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema-lite.csv @@ -1,4 +1,4 @@ ¦signature -¦apoc.schema.assert(indexes :: MAP?, constraints :: MAP?, dropExisting = true :: BOOLEAN?) :: (label :: STRING?, key :: STRING?, keys :: LIST? OF STRING?, unique :: BOOLEAN?, action :: STRING?) -¦apoc.schema.nodes(config = {} :: MAP?) :: (name :: STRING?, label :: STRING?, properties :: LIST? OF STRING?, status :: STRING?, type :: STRING?, failure :: STRING?, populationProgress :: FLOAT?, size :: INTEGER?, valuesSelectivity :: FLOAT?, userDescription :: STRING?) +¦apoc.schema.assert(indexes :: MAP?, constraints :: MAP?, dropExisting = true :: BOOLEAN?) :: (label :: ANY?, key :: STRING?, keys :: LIST? OF STRING?, unique :: BOOLEAN?, action :: STRING?) +¦apoc.schema.nodes(config = {} :: MAP?) :: (name :: STRING?, label :: ANY?, properties :: LIST? OF STRING?, status :: STRING?, type :: STRING?, failure :: STRING?, populationProgress :: FLOAT?, size :: INTEGER?, valuesSelectivity :: FLOAT?, userDescription :: STRING?) ¦apoc.schema.relationships(config = {} :: MAP?) :: (name :: STRING?, type :: STRING?, properties :: LIST? OF STRING?, status :: STRING?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.assert-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.assert-lite.csv index 935c608f5a..4a01698aed 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.assert-lite.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.assert-lite.csv @@ -1,2 +1,2 @@ ¦signature -¦apoc.schema.assert(indexes :: MAP?, constraints :: MAP?, dropExisting = true :: BOOLEAN?) :: (label :: STRING?, key :: STRING?, keys :: LIST? OF STRING?, unique :: BOOLEAN?, action :: STRING?) +¦apoc.schema.assert(indexes :: MAP?, constraints :: MAP?, dropExisting = true :: BOOLEAN?) :: (label :: ANY?, key :: STRING?, keys :: LIST? OF STRING?, unique :: BOOLEAN?, action :: STRING?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.csv index 8f8e7c03e8..40c20bb973 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.csv @@ -1,4 +1,4 @@ ¦type¦qualified name¦signature¦description -¦procedure¦apoc.schema.assert¦apoc.schema.assert(indexes :: MAP?, constraints :: MAP?, dropExisting = true :: BOOLEAN?) :: (label :: STRING?, key :: STRING?, keys :: LIST? OF STRING?, unique :: BOOLEAN?, action :: STRING?)¦apoc.schema.assert({indexLabel:[[indexKeys]], ...}, {constraintLabel:[constraintKeys], ...}, dropExisting : true) yield label, key, keys, unique, action - drops all other existing indexes and constraints when `dropExisting` is `true` (default is `true`), and asserts that at the end of the operation the given indexes and unique constraints are there, each label:key pair is considered one constraint/label. Non-constraint indexes can define compound indexes with label:[key1,key2...] pairings. -¦procedure¦apoc.schema.nodes¦apoc.schema.nodes(config = {} :: MAP?) :: (name :: STRING?, label :: STRING?, properties :: LIST? OF STRING?, status :: STRING?, type :: STRING?, failure :: STRING?, populationProgress :: FLOAT?, size :: INTEGER?, valuesSelectivity :: FLOAT?, userDescription :: STRING?)¦CALL apoc.schema.nodes([config]) yield name, label, properties, status, type -¦procedure¦apoc.schema.relationships¦apoc.schema.relationships(config = {} :: MAP?) :: (name :: STRING?, type :: STRING?, properties :: LIST? OF STRING?, status :: STRING?)¦CALL apoc.schema.relationships([config]) yield name, startLabel, type, endLabel, properties, status +¦procedure¦apoc.schema.assert¦apoc.schema.assert(indexes :: MAP?, constraints :: MAP?, dropExisting = true :: BOOLEAN?) :: (label :: ANY?, key :: STRING?, keys :: LIST? OF STRING?, unique :: BOOLEAN?, action :: STRING?)¦apoc.schema.assert({indexLabel:[[indexKeys]], ...}, {constraintLabel:[constraintKeys], ...}, dropExisting : true) yield label, key, keys, unique, action - drops all other existing indexes and constraints when `dropExisting` is `true` (default is `true`), and asserts that at the end of the operation the given indexes and unique constraints are there, each label:key pair is considered one constraint/label. Non-constraint indexes can define compound indexes with label:[key1,key2...] pairings. +¦procedure¦apoc.schema.nodes¦apoc.schema.nodes(config = {} :: MAP?) :: (name :: STRING?, label :: ANY?, properties :: LIST? OF STRING?, status :: STRING?, type :: STRING?, failure :: STRING?, populationProgress :: FLOAT?, size :: INTEGER?, valuesSelectivity :: FLOAT?, userDescription :: STRING?)¦CALL apoc.schema.nodes([config]) yield name, label, properties, status, type +¦procedure¦apoc.schema.relationships¦apoc.schema.relationships(config = {} :: MAP?) :: (name :: STRING?, type :: STRING?, properties :: LIST? OF STRING?, status :: STRING?)¦CALL apoc.schema.relationships([config]) yield name, startLabel, type, endLabel, properties, status \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.node.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.node.csv index 6ccf41ddaa..32fec3a1e8 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.node.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.node.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.schema.node.constraintExists¦apoc.schema.node.constraintExists(labelName :: STRING?, propertyName :: LIST? OF STRING?) :: (BOOLEAN?)¦RETURN apoc.schema.node.constraintExists(labelName, propertyNames) -¦function¦apoc.schema.node.indexExists¦apoc.schema.node.indexExists(labelName :: STRING?, propertyName :: LIST? OF STRING?) :: (BOOLEAN?)¦RETURN apoc.schema.node.indexExists(labelName, propertyNames) +¦Qualified Name¦Type¦Release +|xref::overview/apoc.schema.node/apoc.schema.adoc[apoc.schema.node.constraintExists icon:book[]] + +RETURN apoc.schema.node.constraintExists(labelName, propertyNames) +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.schema.node/apoc.schema.adoc[apoc.schema.node.indexExists icon:book[]] + +RETURN apoc.schema.node.indexExists(labelName, propertyNames) +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.nodes-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.nodes-lite.csv index 5022084425..5cfab1363c 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.nodes-lite.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.nodes-lite.csv @@ -1,2 +1,2 @@ ¦signature -¦apoc.schema.nodes(config = {} :: MAP?) :: (name :: STRING?, label :: STRING?, properties :: LIST? OF STRING?, status :: STRING?, type :: STRING?, failure :: STRING?, populationProgress :: FLOAT?, size :: INTEGER?, valuesSelectivity :: FLOAT?, userDescription :: STRING?) +¦apoc.schema.nodes(config = {} :: MAP?) :: (name :: STRING?, label :: ANY?, properties :: LIST? OF STRING?, status :: STRING?, type :: STRING?, failure :: STRING?, populationProgress :: FLOAT?, size :: INTEGER?, valuesSelectivity :: FLOAT?, userDescription :: STRING?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.properties.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.properties.csv index 42dae688e5..09cc1260d4 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.properties.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.properties.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.schema.properties.distinct¦apoc.schema.properties.distinct(label :: STRING?, key :: STRING?) :: (value :: LIST? OF ANY?)¦apoc.schema.properties.distinct(label, key) - quickly returns all distinct values for a given key -¦procedure¦apoc.schema.properties.distinctCount¦apoc.schema.properties.distinctCount(label = :: STRING?, key = :: STRING?) :: (label :: STRING?, key :: STRING?, value :: ANY?, count :: INTEGER?)¦apoc.schema.properties.distinctCount([label], [key]) YIELD label, key, value, count - quickly returns all distinct values and counts for a given key +¦Qualified Name¦Type¦Release +|xref::overview/apoc.schema.properties/apoc.schema.adoc[apoc.schema.properties.distinct icon:book[]] + +apoc.schema.properties.distinct(label, key) - quickly returns all distinct values for a given key +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.schema.properties/apoc.schema.adoc[apoc.schema.properties.distinctCount icon:book[]] + +apoc.schema.properties.distinctCount([label], [key]) YIELD label, key, value, count - quickly returns all distinct values and counts for a given key +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.properties.distinct.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.properties.distinct.adoc index cb3533079e..e26a273449 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.properties.distinct.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.properties.distinct.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.schema.properties/apoc.schema.properties.distinct.adoc[apoc.schema.properties.distinct icon:book[]] + +¦xref::overview/apoc.schema/apoc.schema.properties.distinct.adoc[apoc.schema.properties.distinct icon:book[]] + `apoc.schema.properties.distinct(label, key)` - quickly returns all distinct values for a given key ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.properties.distinctCount.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.properties.distinctCount.adoc index be5e34960f..ef5becf82d 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.properties.distinctCount.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.properties.distinctCount.adoc @@ -1,4 +1,4 @@ -¦xref::overview/apoc.schema.properties/apoc.schema.properties.distinctCount.adoc[apoc.schema.properties.distinctCount icon:book[]] + +¦xref::overview/apoc.schema/apoc.schema.properties.distinctCount.adoc[apoc.schema.properties.distinctCount icon:book[]] + `apoc.schema.properties.distinctCount([label], [key]) YIELD label, key, value, count` - quickly returns all distinct values and counts for a given key ¦label:procedure[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.relationship.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.relationship.csv index 208319919e..91c30b7cbd 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.relationship.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.schema.relationship.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.schema.relationship.constraintExists¦apoc.schema.relationship.constraintExists(type :: STRING?, propertyName :: LIST? OF STRING?) :: (BOOLEAN?)¦RETURN apoc.schema.relationship.constraintExists(type, propertyNames) +¦Qualified Name¦Type¦Release +|xref::overview/apoc.schema.relationship/apoc.schema.adoc[apoc.schema.relationship.constraintExists icon:book[]] + +RETURN apoc.schema.relationship.constraintExists(type, propertyNames) +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.scoring.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.scoring.csv index 9bd5f9ddf1..d4fec05ead 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.scoring.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.scoring.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.scoring.existence¦apoc.scoring.existence(score :: INTEGER?, exists :: BOOLEAN?) :: (FLOAT?)¦apoc.scoring.existence(5, true) returns the provided score if true, 0 if false -¦function¦apoc.scoring.pareto¦apoc.scoring.pareto(minimumThreshold :: INTEGER?, eightyPercentValue :: INTEGER?, maximumValue :: INTEGER?, score :: INTEGER?) :: (FLOAT?)¦apoc.scoring.pareto(10, 20, 100, 11) applies a Pareto scoring function over the inputs +¦Qualified Name¦Type¦Release +|xref::overview/apoc.scoring/apoc.scoring.adoc[apoc.scoring.existence icon:book[]] + +apoc.scoring.existence(5, true) returns the provided score if true, 0 if false +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.scoring/apoc.scoring.adoc[apoc.scoring.pareto icon:book[]] + +apoc.scoring.pareto(10, 20, 100, 11) applies a Pareto scoring function over the inputs +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.search.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.search.csv index b71ddc800f..5a42942bf9 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.search.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.search.csv @@ -1,6 +1,26 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.search.multiSearchReduced¦apoc.search.multiSearchReduced(LabelPropertyMap :: ANY?, operator :: STRING?, value :: STRING?) :: (id :: INTEGER?, labels :: LIST? OF STRING?, values :: MAP?)¦Do a parallel search over multiple indexes returning a reduced representation of the nodes found: node id, labels and the searched properties. apoc.search.multiSearchReduced( map of label and properties which will be searched upon, operator: EXACT | CONTAINS | STARTS WITH | ENDS WITH, searchValue ). Multiple search results for the same node are merged into one record. -¦procedure¦apoc.search.node¦apoc.search.node(LabelPropertyMap :: ANY?, operator :: STRING?, value :: STRING?) :: (node :: NODE?)¦Do a parallel search over multiple indexes returning nodes. usage apoc.search.node( map of label and properties which will be searched upon, operator: EXACT | CONTAINS | STARTS WITH | ENDS WITH, searchValue ) returns all the DISTINCT Nodes found in the different searches. -¦procedure¦apoc.search.nodeAll¦apoc.search.nodeAll(LabelPropertyMap :: ANY?, operator :: STRING?, value :: STRING?) :: (node :: NODE?)¦Do a parallel search over multiple indexes returning nodes. usage apoc.search.nodeAll( map of label and properties which will be searched upon, operator: EXACT | CONTAINS | STARTS WITH | ENDS WITH, searchValue ) returns all the Nodes found in the different searches. -¦procedure¦apoc.search.nodeAllReduced¦apoc.search.nodeAllReduced(LabelPropertyMap :: ANY?, operator :: STRING?, value :: ANY?) :: (id :: INTEGER?, labels :: LIST? OF STRING?, values :: MAP?)¦Do a parallel search over multiple indexes returning a reduced representation of the nodes found: node id, labels and the searched property. apoc.search.nodeShortAll( map of label and properties which will be searched upon, operator: EXACT / CONTAINS / STARTS WITH | ENDS WITH / = / <> / < / > ..., value ). All 'hits' are returned. -¦procedure¦apoc.search.nodeReduced¦apoc.search.nodeReduced(LabelPropertyMap :: ANY?, operator :: STRING?, value :: STRING?) :: (id :: INTEGER?, labels :: LIST? OF STRING?, values :: MAP?)¦Do a parallel search over multiple indexes returning a reduced representation of the nodes found: node id, labels and the searched properties. apoc.search.nodeReduced( map of label and properties which will be searched upon, operator: EXACT | CONTAINS | STARTS WITH | ENDS WITH, searchValue ). Multiple search results for the same node are merged into one record. +¦Qualified Name¦Type¦Release +|xref::overview/apoc.search/apoc.search.adoc[apoc.search.multiSearchReduced icon:book[]] + +Do a parallel search over multiple indexes returning a reduced representation of the nodes found: node id, labels and the searched properties. apoc.search.multiSearchReduced( map of label and properties which will be searched upon, operator: EXACT \| CONTAINS \| STARTS WITH \| ENDS WITH, searchValue ). Multiple search results for the same node are merged into one record. +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.search/apoc.search.adoc[apoc.search.node icon:book[]] + +Do a parallel search over multiple indexes returning nodes. usage apoc.search.node( map of label and properties which will be searched upon, operator: EXACT \| CONTAINS \| STARTS WITH \| ENDS WITH, searchValue ) returns all the DISTINCT Nodes found in the different searches. +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.search/apoc.search.adoc[apoc.search.nodeAll icon:book[]] + +Do a parallel search over multiple indexes returning nodes. usage apoc.search.nodeAll( map of label and properties which will be searched upon, operator: EXACT \| CONTAINS \| STARTS WITH \| ENDS WITH, searchValue ) returns all the Nodes found in the different searches. +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.search/apoc.search.adoc[apoc.search.nodeAllReduced icon:book[]] + +Do a parallel search over multiple indexes returning a reduced representation of the nodes found: node id, labels and the searched property. apoc.search.nodeShortAll( map of label and properties which will be searched upon, operator: EXACT / CONTAINS / STARTS WITH \| ENDS WITH / = / <> / < / > ..., value ). All 'hits' are returned. +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.search/apoc.search.adoc[apoc.search.nodeReduced icon:book[]] + +Do a parallel search over multiple indexes returning a reduced representation of the nodes found: node id, labels and the searched properties. apoc.search.nodeReduced( map of label and properties which will be searched upon, operator: EXACT \| CONTAINS \| STARTS WITH \| ENDS WITH, searchValue ). Multiple search results for the same node are merged into one record. +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.spatial.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.spatial.csv index df3d472111..97850a9cab 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.spatial.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.spatial.csv @@ -1,5 +1,21 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.spatial.geocode¦apoc.spatial.geocode(location :: STRING?, maxResults = 100 :: INTEGER?, quotaException = false :: BOOLEAN?) :: (location :: MAP?, data :: MAP?, latitude :: FLOAT?, longitude :: FLOAT?, description :: STRING?)¦apoc.spatial.geocode('address') YIELD location, latitude, longitude, description, osmData - look up geographic location of address from a geocoding service (the default one is OpenStreetMap) -¦procedure¦apoc.spatial.geocodeOnce¦apoc.spatial.geocodeOnce(location :: STRING?) :: (location :: MAP?, data :: MAP?, latitude :: FLOAT?, longitude :: FLOAT?, description :: STRING?)¦apoc.spatial.geocodeOnce('address') YIELD location, latitude, longitude, description, osmData - look up geographic location of address from a geocoding service (the default one is OpenStreetMap) -¦procedure¦apoc.spatial.reverseGeocode¦apoc.spatial.reverseGeocode(latitude :: FLOAT?, longitude :: FLOAT?, quotaException = false :: BOOLEAN?) :: (location :: MAP?, data :: MAP?, latitude :: FLOAT?, longitude :: FLOAT?, description :: STRING?)¦apoc.spatial.reverseGeocode(latitude,longitude) YIELD location, latitude, longitude, description - look up address from latitude and longitude from a geocoding service (the default one is OpenStreetMap) -¦procedure¦apoc.spatial.sortByDistance¦apoc.spatial.sortByDistance(paths :: LIST? OF PATH?) :: (path :: PATH?, distance :: FLOAT?)¦apoc.spatial.sortPathsByDistance(List) sort the given paths based on the geo informations (lat/long) in ascending order +¦Qualified Name¦Type¦Release +|xref::overview/apoc.spatial/apoc.spatial.adoc[apoc.spatial.geocode icon:book[]] + +apoc.spatial.geocode('address') YIELD location, latitude, longitude, description, osmData - look up geographic location of address from a geocoding service (the default one is OpenStreetMap) +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.spatial/apoc.spatial.adoc[apoc.spatial.geocodeOnce icon:book[]] + +apoc.spatial.geocodeOnce('address') YIELD location, latitude, longitude, description, osmData - look up geographic location of address from a geocoding service (the default one is OpenStreetMap) +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.spatial/apoc.spatial.adoc[apoc.spatial.reverseGeocode icon:book[]] + +apoc.spatial.reverseGeocode(latitude,longitude) YIELD location, latitude, longitude, description - look up address from latitude and longitude from a geocoding service (the default one is OpenStreetMap) +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.spatial/apoc.spatial.adoc[apoc.spatial.sortByDistance icon:book[]] + +apoc.spatial.sortByDistance(List) sort the given paths based on the geo informations (lat/long) in ascending order +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.spatial.sortByDistance.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.spatial.sortByDistance.adoc index 0f76f5a0f8..a1407f06c2 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.spatial.sortByDistance.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.spatial.sortByDistance.adoc @@ -1,5 +1,5 @@ ¦xref::overview/apoc.spatial/apoc.spatial.sortByDistance.adoc[apoc.spatial.sortByDistance icon:book[]] + -`apoc.spatial.sortPathsByDistance(List) sort the given paths based on the geo informations (lat/long) in ascending order` +`apoc.spatial.sortByDistance(List) sort the given paths based on the geo informations (lat/long) in ascending order` ¦label:procedure[] ¦label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.static.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.static.csv index 98ff5edf49..8e50cbd688 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.static.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.static.csv @@ -1,6 +1,26 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.static.get¦apoc.static.get(key :: STRING?) :: (value :: ANY?)¦apoc.static.get(name) - returns statically stored value from config (apoc.static.) or server lifetime storage -¦procedure¦apoc.static.list¦apoc.static.list(prefix :: STRING?) :: (key :: STRING?, value :: ANY?)¦apoc.static.list(prefix) - returns statically stored values from config (apoc.static..*) or server lifetime storage -¦procedure¦apoc.static.set¦apoc.static.set(key :: STRING?, value :: ANY?) :: (value :: ANY?)¦apoc.static.set(name, value) - stores value under key for server lifetime storage, returns previously stored or configured value -¦function¦apoc.static.get¦apoc.static.get(key :: STRING?) :: (ANY?)¦apoc.static.get(name) - returns statically stored value from config (apoc.static.) or server lifetime storage -¦function¦apoc.static.getAll¦apoc.static.getAll(prefix :: STRING?) :: (MAP?)¦apoc.static.getAll(prefix) - returns statically stored values from config (apoc.static..*) or server lifetime storage +¦Qualified Name¦Type¦Release +|xref::overview/apoc.static/apoc.static.adoc[apoc.static.get icon:book[]] + +apoc.static.get(name) - returns statically stored value from config (apoc.static.) or server lifetime storage +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.static/apoc.static.adoc[apoc.static.list icon:book[]] + +apoc.static.list(prefix) - returns statically stored values from config (apoc.static..*) or server lifetime storage +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.static/apoc.static.adoc[apoc.static.set icon:book[]] + +apoc.static.set(name, value) - stores value under key for server lifetime storage, returns previously stored or configured value +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.static/apoc.static.adoc[apoc.static.get icon:book[]] + +apoc.static.get(name) - returns statically stored value from config (apoc.static.) or server lifetime storage +|label:function[] +|label:apoc-full[] +|xref::overview/apoc.static/apoc.static.adoc[apoc.static.getAll icon:book[]] + +apoc.static.getAll(prefix) - returns statically stored values from config (apoc.static..*) or server lifetime storage +|label:function[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.stats.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.stats.csv index 700549a751..ad12c4f70f 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.stats.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.stats.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.stats.degrees¦apoc.stats.degrees(types = :: STRING?) :: (type :: STRING?, direction :: STRING?, total :: INTEGER?, p50 :: INTEGER?, p75 :: INTEGER?, p90 :: INTEGER?, p95 :: INTEGER?, p99 :: INTEGER?, p999 :: INTEGER?, max :: INTEGER?, min :: INTEGER?, mean :: FLOAT?)¦ +¦Qualified Name¦Type¦Release +|xref::overview/apoc.stats/apoc.stats.adoc[apoc.stats.degrees icon:book[]] + + +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.systemdb.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.systemdb.csv index 9ce8aab89e..e2db5d0daa 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.systemdb.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.systemdb.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.systemdb.execute¦apoc.systemdb.execute(DDL commands, either a string or a list of strings :: ANY?, params = {} :: MAP?) :: (row :: MAP?)¦ -¦procedure¦apoc.systemdb.graph¦apoc.systemdb.graph() :: (nodes :: LIST? OF NODE?, relationships :: LIST? OF RELATIONSHIP?)¦ +¦Qualified Name¦Type¦Release +|xref::overview/apoc.systemdb/apoc.systemdb.adoc[apoc.systemdb.execute icon:book[]] + + +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.systemdb/apoc.systemdb.adoc[apoc.systemdb.graph icon:book[]] + + +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.temporal.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.temporal.csv index c0b794ac76..4ab0e14c33 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.temporal.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.temporal.csv @@ -1,4 +1,16 @@ -¦type¦qualified name¦signature¦description -¦function¦apoc.temporal.format¦apoc.temporal.format(temporal :: ANY?, format = yyyy-MM-dd :: STRING?) :: (STRING?)¦apoc.temporal.format(input, format) | Format a temporal value -¦function¦apoc.temporal.formatDuration¦apoc.temporal.formatDuration(input :: ANY?, format :: STRING?) :: (STRING?)¦apoc.temporal.formatDuration(input, format) | Format a Duration -¦function¦apoc.temporal.toZonedTemporal¦apoc.temporal.toZonedTemporal(time :: STRING?, format = yyyy-MM-dd HH:mm:ss :: STRING?, timezone = UTC :: STRING?) :: (DATETIME?)¦apoc.temporal.toZonedTemporal('2012-12-23 23:59:59','yyyy-MM-dd HH:mm:ss', 'UTC-hour-offset') parse date string using the specified format to specified timezone +¦Qualified Name¦Type¦Release +|xref::overview/apoc.temporal/apoc.temporal.adoc[apoc.temporal.format icon:book[]] + +apoc.temporal.format(input, format) \| Format a temporal value +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.temporal/apoc.temporal.adoc[apoc.temporal.formatDuration icon:book[]] + +apoc.temporal.formatDuration(input, format) \| Format a Duration +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.temporal/apoc.temporal.adoc[apoc.temporal.toZonedTemporal icon:book[]] + +apoc.temporal.toZonedTemporal('2012-12-23 23:59:59','yyyy-MM-dd HH:mm:ss', 'UTC-hour-offset') parse date string using the specified format to specified timezone +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.text.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.text.csv index e9d0c9a9f3..0dd6cf1701 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.text.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.text.csv @@ -1,50 +1,246 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.text.doubleMetaphone¦apoc.text.doubleMetaphone(value :: ANY?) :: (value :: STRING?)¦apoc.text.doubleMetaphone(value) yield value - Compute the Double Metaphone phonetic encoding of all words of the text value which can be a single string or a list of strings -¦procedure¦apoc.text.phonetic¦apoc.text.phonetic(value :: ANY?) :: (value :: STRING?)¦apoc.text.phonetic(value) yield value - Compute the US_ENGLISH phonetic soundex encoding of all words of the text value which can be a single string or a list of strings -¦procedure¦apoc.text.phoneticDelta¦apoc.text.phoneticDelta(text1 :: STRING?, text2 :: STRING?) :: (phonetic1 :: STRING?, phonetic2 :: STRING?, delta :: INTEGER?)¦apoc.text.phoneticDelta(text1, text2) yield phonetic1, phonetic2, delta - Compute the US_ENGLISH soundex character difference between two given strings -¦function¦apoc.text.base64Decode¦apoc.text.base64Decode(text :: STRING?) :: (STRING?)¦apoc.text.base64Decode(text) YIELD value - Decode Base64 encoded string -¦function¦apoc.text.base64Encode¦apoc.text.base64Encode(text :: STRING?) :: (STRING?)¦apoc.text.base64Encode(text) YIELD value - Encode a string with Base64 -¦function¦apoc.text.base64UrlDecode¦apoc.text.base64UrlDecode(url :: STRING?) :: (STRING?)¦apoc.text.base64UrlDecode(url) YIELD value - Decode Base64 encoded url -¦function¦apoc.text.base64UrlEncode¦apoc.text.base64UrlEncode(url :: STRING?) :: (STRING?)¦apoc.text.base64UrlEncode(text) YIELD value - Encode a url with Base64 -¦function¦apoc.text.byteCount¦apoc.text.byteCount(text :: STRING?, charset = UTF-8 :: STRING?) :: (INTEGER?)¦apoc.text.byteCount(text,[charset]) - return size of text in bytes -¦function¦apoc.text.bytes¦apoc.text.bytes(text :: STRING?, charset = UTF-8 :: STRING?) :: (LIST? OF ANY?)¦apoc.text.bytes(text,[charset]) - return bytes of the text -¦function¦apoc.text.camelCase¦apoc.text.camelCase(text :: STRING?) :: (STRING?)¦apoc.text.camelCase(text) YIELD value - Convert a string to camelCase -¦function¦apoc.text.capitalize¦apoc.text.capitalize(text :: STRING?) :: (STRING?)¦apoc.text.capitalize(text) YIELD value - capitalise the first letter of the word -¦function¦apoc.text.capitalizeAll¦apoc.text.capitalizeAll(text :: STRING?) :: (STRING?)¦apoc.text.capitalizeAll(text) YIELD value - capitalise the first letter of every word in the text -¦function¦apoc.text.charAt¦apoc.text.charAt(text :: STRING?, index :: INTEGER?) :: (INTEGER?)¦apoc.text.charAt(text, index) - the decimal value of the character at the given index -¦function¦apoc.text.clean¦apoc.text.clean(text :: STRING?) :: (STRING?)¦apoc.text.clean(text) - strip the given string of everything except alpha numeric characters and convert it to lower case. -¦function¦apoc.text.code¦apoc.text.code(codepoint :: INTEGER?) :: (STRING?)¦apoc.text.code(codepoint) - Returns the unicode character of the given codepoint -¦function¦apoc.text.compareCleaned¦apoc.text.compareCleaned(text1 :: STRING?, text2 :: STRING?) :: (BOOLEAN?)¦apoc.text.compareCleaned(text1, text2) - compare the given strings stripped of everything except alpha numeric characters converted to lower case. -¦function¦apoc.text.decapitalize¦apoc.text.decapitalize(text :: STRING?) :: (STRING?)¦apoc.text.decapitalize(text) YIELD value - decapitalize the first letter of the word -¦function¦apoc.text.decapitalizeAll¦apoc.text.decapitalizeAll(text :: STRING?) :: (STRING?)¦apoc.text.decapitalizeAll(text) YIELD value - decapitalize the first letter of all words -¦function¦apoc.text.distance¦apoc.text.distance(text1 :: STRING?, text2 :: STRING?) :: (INTEGER?)¦apoc.text.distance(text1, text2) - compare the given strings with the Levenshtein distance algorithm. -¦function¦apoc.text.doubleMetaphone¦apoc.text.doubleMetaphone(value :: STRING?) :: (STRING?)¦apoc.text.doubleMetaphone(value) yield value - Compute the Double Metaphone phonetic encoding of all words of the text value -¦function¦apoc.text.format¦apoc.text.format(text :: STRING?, params :: LIST? OF ANY?, language = en :: STRING?) :: (STRING?)¦apoc.text.format(text,[params],language) - sprintf format the string with the params given -¦function¦apoc.text.fuzzyMatch¦apoc.text.fuzzyMatch(text1 :: STRING?, text2 :: STRING?) :: (BOOLEAN?)¦apoc.text.fuzzyMatch(text1, text2) - check if 2 words can be matched in a fuzzy way. Depending on the length of the String it will allow more characters that needs to be edited to match the second String. -¦function¦apoc.text.hammingDistance¦apoc.text.hammingDistance(text1 :: STRING?, text2 :: STRING?) :: (INTEGER?)¦apoc.text.hammingDistance(text1, text2) - compare the given strings with the Hamming distance algorithm. -¦function¦apoc.text.hexCharAt¦apoc.text.hexCharAt(text :: STRING?, index :: INTEGER?) :: (STRING?)¦apoc.text.hexCharAt(text, index) - the hex value string of the character at the given index -¦function¦apoc.text.hexValue¦apoc.text.hexValue(value :: INTEGER?) :: (STRING?)¦apoc.text.hexValue(value) - the hex value string of the given number -¦function¦apoc.text.indexOf¦apoc.text.indexOf(text :: STRING?, lookup :: STRING?, from = 0 :: INTEGER?, to = -1 :: INTEGER?) :: (INTEGER?)¦apoc.text.indexOf(text, lookup, from=0, to=-1==len) - find the first occurence of the lookup string in the text, from inclusive, to exclusive, -1 if not found, null if text is null. -¦function¦apoc.text.indexesOf¦apoc.text.indexesOf(text :: STRING?, lookup :: STRING?, from = 0 :: INTEGER?, to = -1 :: INTEGER?) :: (LIST? OF ANY?)¦apoc.text.indexesOf(text, lookup, from=0, to=-1==len) - finds all occurences of the lookup string in the text, return list, from inclusive, to exclusive, empty list if not found, null if text is null. -¦function¦apoc.text.jaroWinklerDistance¦apoc.text.jaroWinklerDistance(text1 :: STRING?, text2 :: STRING?) :: (FLOAT?)¦apoc.text.jaroWinklerDistance(text1, text2) - compare the given strings with the Jaro-Winkler distance algorithm. -¦function¦apoc.text.join¦apoc.text.join(texts :: LIST? OF STRING?, delimiter :: STRING?) :: (STRING?)¦apoc.text.join(['text1','text2',...], delimiter) - join the given strings with the given delimiter. -¦function¦apoc.text.levenshteinDistance¦apoc.text.levenshteinDistance(text1 :: STRING?, text2 :: STRING?) :: (INTEGER?)¦apoc.text.levenshteinDistance(text1, text2) - compare the given strings with the Levenshtein distance algorithm. -¦function¦apoc.text.levenshteinSimilarity¦apoc.text.levenshteinSimilarity(text1 :: STRING?, text2 :: STRING?) :: (FLOAT?)¦apoc.text.levenshteinSimilarity(text1, text2) - calculate the similarity (a value within 0 and 1) between two texts. -¦function¦apoc.text.lpad¦apoc.text.lpad(text :: STRING?, count :: INTEGER?, delim = :: STRING?) :: (STRING?)¦apoc.text.lpad(text,count,delim) YIELD value - left pad the string to the given width -¦function¦apoc.text.phonetic¦apoc.text.phonetic(value :: STRING?) :: (STRING?)¦apoc.text.phonetic(text) yield value - Compute the US_ENGLISH phonetic soundex encoding of all words of the text -¦function¦apoc.text.random¦apoc.text.random(length :: INTEGER?, valid = A-Za-z0-9 :: STRING?) :: (STRING?)¦apoc.text.random(length, valid) YIELD value - generate a random string -¦function¦apoc.text.regexGroups¦apoc.text.regexGroups(text :: STRING?, regex :: STRING?) :: (LIST? OF ANY?)¦apoc.text.regexGroups(text, regex) - return all matching groups of the regex on the given text. -¦function¦apoc.text.regreplace¦apoc.text.regreplace(text :: STRING?, regex :: STRING?, replacement :: STRING?) :: (STRING?)¦apoc.text.regreplace(text, regex, replacement) - replace each substring of the given string that matches the given regular expression with the given replacement. -¦function¦apoc.text.repeat¦apoc.text.repeat(item :: STRING?, count :: INTEGER?) :: (STRING?)¦apoc.text.repeat(item, count) - string multiplication -¦function¦apoc.text.replace¦apoc.text.replace(text :: STRING?, regex :: STRING?, replacement :: STRING?) :: (STRING?)¦apoc.text.replace(text, regex, replacement) - replace each substring of the given string that matches the given regular expression with the given replacement. -¦function¦apoc.text.rpad¦apoc.text.rpad(text :: STRING?, count :: INTEGER?, delim = :: STRING?) :: (STRING?)¦apoc.text.rpad(text,count,delim) YIELD value - right pad the string to the given width -¦function¦apoc.text.slug¦apoc.text.slug(text :: STRING?, delim = - :: STRING?) :: (STRING?)¦apoc.text.slug(text, delim) - slug the text with the given delimiter -¦function¦apoc.text.snakeCase¦apoc.text.snakeCase(text :: STRING?) :: (STRING?)¦apoc.text.snakeCase(text) YIELD value - Convert a string to snake-case -¦function¦apoc.text.sorensenDiceSimilarity¦apoc.text.sorensenDiceSimilarity(text1 :: STRING?, text2 :: STRING?, languageTag = en :: STRING?) :: (FLOAT?)¦apoc.text.sorensenDiceSimilarityWithLanguage(text1, text2, languageTag) - compare the given strings with the Sørensen–Dice coefficient formula, with the provided IETF language tag -¦function¦apoc.text.split¦apoc.text.split(text :: STRING?, regex :: STRING?, limit = 0 :: INTEGER?) :: (LIST? OF ANY?)¦apoc.text.split(text, regex, limit) - splits the given text around matches of the given regex. -¦function¦apoc.text.swapCase¦apoc.text.swapCase(text :: STRING?) :: (STRING?)¦apoc.text.swapCase(text) YIELD value - Swap the case of a string -¦function¦apoc.text.toCypher¦apoc.text.toCypher(value :: ANY?, config = {} :: MAP?) :: (STRING?)¦apoc.text.toCypher(value, {skipKeys,keepKeys,skipValues,keepValues,skipNull,node,relationship,start,end}) | tries it's best to convert the value to a cypher-property-string -¦function¦apoc.text.toUpperCase¦apoc.text.toUpperCase(text :: STRING?) :: (STRING?)¦apoc.text.toUpperCase(text) YIELD value - Convert a string to UPPER_CASE -¦function¦apoc.text.upperCamelCase¦apoc.text.upperCamelCase(text :: STRING?) :: (STRING?)¦apoc.text.upperCamelCase(text) YIELD value - Convert a string to camelCase -¦function¦apoc.text.urldecode¦apoc.text.urldecode(text :: STRING?) :: (STRING?)¦apoc.text.urldecode(text) - return the urldecoded text -¦function¦apoc.text.urlencode¦apoc.text.urlencode(text :: STRING?) :: (STRING?)¦apoc.text.urlencode(text) - return the urlencoded text +¦Qualified Name¦Type¦Release +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.doubleMetaphone icon:book[]] + +apoc.text.doubleMetaphone(value) yield value - Compute the Double Metaphone phonetic encoding of all words of the text value which can be a single string or a list of strings +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.phonetic icon:book[]] + +apoc.text.phonetic(value) yield value - Compute the US_ENGLISH phonetic soundex encoding of all words of the text value which can be a single string or a list of strings +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.phoneticDelta icon:book[]] + +apoc.text.phoneticDelta(text1, text2) yield phonetic1, phonetic2, delta - Compute the US_ENGLISH soundex character difference between two given strings +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.base64Decode icon:book[]] + +apoc.text.base64Decode(text) YIELD value - Decode Base64 encoded string +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.base64Encode icon:book[]] + +apoc.text.base64Encode(text) YIELD value - Encode a string with Base64 +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.base64UrlDecode icon:book[]] + +apoc.text.base64UrlDecode(url) YIELD value - Decode Base64 encoded url +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.base64UrlEncode icon:book[]] + +apoc.text.base64UrlEncode(text) YIELD value - Encode a url with Base64 +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.byteCount icon:book[]] + +apoc.text.byteCount(text,[charset]) - return size of text in bytes +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.bytes icon:book[]] + +apoc.text.bytes(text,[charset]) - return bytes of the text +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.camelCase icon:book[]] + +apoc.text.camelCase(text) YIELD value - Convert a string to camelCase +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.capitalize icon:book[]] + +apoc.text.capitalize(text) YIELD value - capitalise the first letter of the word +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.capitalizeAll icon:book[]] + +apoc.text.capitalizeAll(text) YIELD value - capitalise the first letter of every word in the text +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.charAt icon:book[]] + +apoc.text.charAt(text, index) - the decimal value of the character at the given index +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.clean icon:book[]] + +apoc.text.clean(text) - strip the given string of everything except alpha numeric characters and convert it to lower case. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.code icon:book[]] + +apoc.text.code(codepoint) - Returns the unicode character of the given codepoint +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.compareCleaned icon:book[]] + +apoc.text.compareCleaned(text1, text2) - compare the given strings stripped of everything except alpha numeric characters converted to lower case. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.decapitalize icon:book[]] + +apoc.text.decapitalize(text) YIELD value - decapitalize the first letter of the word +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.decapitalizeAll icon:book[]] + +apoc.text.decapitalizeAll(text) YIELD value - decapitalize the first letter of all words +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.distance icon:book[]] + +apoc.text.distance(text1, text2) - compare the given strings with the Levenshtein distance algorithm. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.doubleMetaphone icon:book[]] + +apoc.text.doubleMetaphone(value) yield value - Compute the Double Metaphone phonetic encoding of all words of the text value +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.format icon:book[]] + +apoc.text.format(text,[params],language) - sprintf format the string with the params given +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.fuzzyMatch icon:book[]] + +apoc.text.fuzzyMatch(text1, text2) - check if 2 words can be matched in a fuzzy way. Depending on the length of the String it will allow more characters that needs to be edited to match the second String. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.hammingDistance icon:book[]] + +apoc.text.hammingDistance(text1, text2) - compare the given strings with the Hamming distance algorithm. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.hexCharAt icon:book[]] + +apoc.text.hexCharAt(text, index) - the hex value string of the character at the given index +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.hexValue icon:book[]] + +apoc.text.hexValue(value) - the hex value string of the given number +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.indexOf icon:book[]] + +apoc.text.indexOf(text, lookup, from=0, to=-1==len) - find the first occurence of the lookup string in the text, from inclusive, to exclusive, -1 if not found, null if text is null. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.indexesOf icon:book[]] + +apoc.text.indexesOf(text, lookup, from=0, to=-1==len) - finds all occurences of the lookup string in the text, return list, from inclusive, to exclusive, empty list if not found, null if text is null. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.jaroWinklerDistance icon:book[]] + +apoc.text.jaroWinklerDistance(text1, text2) - compare the given strings with the Jaro-Winkler distance algorithm. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.join icon:book[]] + +apoc.text.join(['text1','text2',...], delimiter) - join the given strings with the given delimiter. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.levenshteinDistance icon:book[]] + +apoc.text.levenshteinDistance(text1, text2) - compare the given strings with the Levenshtein distance algorithm. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.levenshteinSimilarity icon:book[]] + +apoc.text.levenshteinSimilarity(text1, text2) - calculate the similarity (a value within 0 and 1) between two texts. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.lpad icon:book[]] + +apoc.text.lpad(text,count,delim) YIELD value - left pad the string to the given width +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.phonetic icon:book[]] + +apoc.text.phonetic(text) yield value - Compute the US_ENGLISH phonetic soundex encoding of all words of the text +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.random icon:book[]] + +apoc.text.random(length, valid) YIELD value - generate a random string +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.regexGroups icon:book[]] + +apoc.text.regexGroups(text, regex) - return all matching groups of the regex on the given text. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.regreplace icon:book[]] + +apoc.text.regreplace(text, regex, replacement) - replace each substring of the given string that matches the given regular expression with the given replacement. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.repeat icon:book[]] + +apoc.text.repeat(item, count) - string multiplication +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.replace icon:book[]] + +apoc.text.replace(text, regex, replacement) - replace each substring of the given string that matches the given regular expression with the given replacement. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.rpad icon:book[]] + +apoc.text.rpad(text,count,delim) YIELD value - right pad the string to the given width +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.slug icon:book[]] + +apoc.text.slug(text, delim) - slug the text with the given delimiter +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.snakeCase icon:book[]] + +apoc.text.snakeCase(text) YIELD value - Convert a string to snake-case +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.sorensenDiceSimilarity icon:book[]] + +apoc.text.sorensenDiceSimilarityWithLanguage(text1, text2, languageTag) - compare the given strings with the Sørensen–Dice coefficient formula, with the provided IETF language tag +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.split icon:book[]] + +apoc.text.split(text, regex, limit) - splits the given text around matches of the given regex. +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.swapCase icon:book[]] + +apoc.text.swapCase(text) YIELD value - Swap the case of a string +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.toCypher icon:book[]] + +apoc.text.toCypher(value, {skipKeys,keepKeys,skipValues,keepValues,skipNull,node,relationship,start,end}) \| tries it's best to convert the value to a cypher-property-string +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.toUpperCase icon:book[]] + +apoc.text.toUpperCase(text) YIELD value - Convert a string to UPPER_CASE +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.upperCamelCase icon:book[]] + +apoc.text.upperCamelCase(text) YIELD value - Convert a string to camelCase +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.urldecode icon:book[]] + +apoc.text.urldecode(text) - return the urldecoded text +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.text/apoc.text.adoc[apoc.text.urlencode icon:book[]] + +apoc.text.urlencode(text) - return the urlencoded text +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.csv index 6052680ff2..2d4631a450 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.csv @@ -1,9 +1,41 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.trigger.add¦apoc.trigger.add(name :: STRING?, kernelTransaction :: STRING?, selector :: MAP?, config = {} :: MAP?) :: (name :: STRING?, query :: STRING?, selector :: MAP?, params :: MAP?, installed :: BOOLEAN?, paused :: BOOLEAN?)¦add a trigger kernelTransaction under a name, in the kernelTransaction you can use \{createdNodes}, \{deletedNodes} etc., the selector is {phase:'before/after/rollback'} returns previous and new trigger information. Takes in an optional configuration. -¦procedure¦apoc.trigger.list¦apoc.trigger.list() :: (name :: STRING?, query :: STRING?, selector :: MAP?, params :: MAP?, installed :: BOOLEAN?, paused :: BOOLEAN?)¦list all installed triggers -¦procedure¦apoc.trigger.pause¦apoc.trigger.pause(name :: STRING?) :: (name :: STRING?, query :: STRING?, selector :: MAP?, params :: MAP?, installed :: BOOLEAN?, paused :: BOOLEAN?)¦CALL apoc.trigger.pause(name) | it pauses the trigger -¦procedure¦apoc.trigger.remove¦apoc.trigger.remove(name :: STRING?) :: (name :: STRING?, query :: STRING?, selector :: MAP?, params :: MAP?, installed :: BOOLEAN?, paused :: BOOLEAN?)¦remove previously added trigger, returns trigger information -¦procedure¦apoc.trigger.removeAll¦apoc.trigger.removeAll() :: (name :: STRING?, query :: STRING?, selector :: MAP?, params :: MAP?, installed :: BOOLEAN?, paused :: BOOLEAN?)¦removes all previously added trigger, returns trigger information -¦procedure¦apoc.trigger.resume¦apoc.trigger.resume(name :: STRING?) :: (name :: STRING?, query :: STRING?, selector :: MAP?, params :: MAP?, installed :: BOOLEAN?, paused :: BOOLEAN?)¦CALL apoc.trigger.resume(name) | it resumes the paused trigger -¦function¦apoc.trigger.nodesByLabel¦apoc.trigger.nodesByLabel(labelEntries :: ANY?, label :: STRING?) :: (LIST? OF ANY?)¦ -¦function¦apoc.trigger.propertiesByKey¦apoc.trigger.propertiesByKey(propertyEntries :: MAP?, key :: STRING?) :: (LIST? OF ANY?)¦ +¦Qualified Name¦Type¦Release +|xref::overview/apoc.trigger/apoc.trigger.adoc[apoc.trigger.add icon:book[]] + +add a trigger kernelTransaction under a name, in the kernelTransaction you can use \{createdNodes}, \{deletedNodes} etc., the selector is {phase:'before/after/rollback'} returns previous and new trigger information. Takes in an optional configuration. +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.trigger/apoc.trigger.adoc[apoc.trigger.list icon:book[]] + +list all installed triggers +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.trigger/apoc.trigger.adoc[apoc.trigger.pause icon:book[]] + +CALL apoc.trigger.pause(name) \| it pauses the trigger +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.trigger/apoc.trigger.adoc[apoc.trigger.remove icon:book[]] + +remove previously added trigger, returns trigger information +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.trigger/apoc.trigger.adoc[apoc.trigger.removeAll icon:book[]] + +removes all previously added trigger, returns trigger information +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.trigger/apoc.trigger.adoc[apoc.trigger.resume icon:book[]] + +CALL apoc.trigger.resume(name) \| it resumes the paused trigger +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.trigger/apoc.trigger.adoc[apoc.trigger.nodesByLabel icon:book[]] + + +|label:function[] +|label:apoc-full[] +|xref::overview/apoc.trigger/apoc.trigger.adoc[apoc.trigger.propertiesByKey icon:book[]] + + +|label:function[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.ttl.config.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.ttl.config.adoc index 9969655490..df36aa8876 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.ttl.config.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.ttl.config.adoc @@ -2,4 +2,4 @@ `` ¦label:function[] -¦label:apoc-core[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.ttl.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.ttl.csv index d086b6b742..9b5b2989ce 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.ttl.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.ttl.csv @@ -1,4 +1,16 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.ttl.expire¦apoc.ttl.expire(node :: NODE?, time :: INTEGER?, timeUnit :: STRING?) :: VOID¦CALL apoc.ttl.expire(node,time,'time-unit') - expire node at specified time by setting :TTL label and `ttl` property -¦procedure¦apoc.ttl.expireIn¦apoc.ttl.expireIn(node :: NODE?, timeDelta :: INTEGER?, timeUnit :: STRING?) :: VOID¦CALL apoc.ttl.expireIn(node,timeDelta,'time-unit') - expire node after specified length of time time by setting :TTL label and `ttl` property -¦function¦apoc.ttl.config¦apoc.ttl.config() :: (MAP?)¦ +¦Qualified Name¦Type¦Release +|xref::overview/apoc.ttl/apoc.ttl.adoc[apoc.ttl.expire icon:book[]] + +CALL apoc.ttl.expire(node,time,'time-unit') - expire node at specified time by setting :TTL label and `ttl` property +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.ttl/apoc.ttl.adoc[apoc.ttl.expireIn icon:book[]] + +CALL apoc.ttl.expireIn(node,timeDelta,'time-unit') - expire node after specified length of time time by setting :TTL label and `ttl` property +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.ttl/apoc.ttl.adoc[apoc.ttl.config icon:book[]] + + +|label:function[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.util.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.util.csv index 4b9fec641f..3ca97bc80f 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.util.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.util.csv @@ -1,11 +1,51 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.util.sleep¦apoc.util.sleep(duration :: INTEGER?) :: VOID¦apoc.util.sleep() | sleeps for millis, transaction termination is honored -¦procedure¦apoc.util.validate¦apoc.util.validate(predicate :: BOOLEAN?, message :: STRING?, params :: LIST? OF ANY?) :: VOID¦apoc.util.validate(predicate, message, params) | if the predicate yields to true raise an exception -¦function¦apoc.util.compress¦apoc.util.compress(data :: STRING?, config = {} :: MAP?) :: (BYTEARRAY?)¦apoc.util.compress(string, \{config}) | return a compressed byte[] in various format from a string -¦function¦apoc.util.decompress¦apoc.util.decompress(data :: BYTEARRAY?, config = {} :: MAP?) :: (STRING?)¦apoc.util.decompress(compressed, \{config}) | return a string from a compressed byte[] in various format -¦function¦apoc.util.md5¦apoc.util.md5(values :: LIST? OF ANY?) :: (STRING?)¦apoc.util.md5([values]) | computes the md5 of the concatenation of all string values of the list -¦function¦apoc.util.sha1¦apoc.util.sha1(values :: LIST? OF ANY?) :: (STRING?)¦apoc.util.sha1([values]) | computes the sha1 of the concatenation of all string values of the list -¦function¦apoc.util.sha256¦apoc.util.sha256(values :: LIST? OF ANY?) :: (STRING?)¦apoc.util.sha256([values]) | computes the sha256 of the concatenation of all string values of the list -¦function¦apoc.util.sha384¦apoc.util.sha384(values :: LIST? OF ANY?) :: (STRING?)¦apoc.util.sha384([values]) | computes the sha384 of the concatenation of all string values of the list -¦function¦apoc.util.sha512¦apoc.util.sha512(values :: LIST? OF ANY?) :: (STRING?)¦apoc.util.sha512([values]) | computes the sha512 of the concatenation of all string values of the list -¦function¦apoc.util.validatePredicate¦apoc.util.validatePredicate(predicate :: BOOLEAN?, message :: STRING?, params :: LIST? OF ANY?) :: (BOOLEAN?)¦apoc.util.validatePredicate(predicate, message, params) | if the predicate yields to true raise an exception else returns true, for use inside WHERE subclauses +¦Qualified Name¦Type¦Release +|xref::overview/apoc.util/apoc.util.adoc[apoc.util.sleep icon:book[]] + +apoc.util.sleep() \| sleeps for millis, transaction termination is honored +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.util/apoc.util.adoc[apoc.util.validate icon:book[]] + +apoc.util.validate(predicate, message, params) \| if the predicate yields to true raise an exception +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.util/apoc.util.adoc[apoc.util.compress icon:book[]] + +apoc.util.compress(string, \{config}) \| return a compressed byte[] in various format from a string +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.util/apoc.util.adoc[apoc.util.decompress icon:book[]] + +apoc.util.decompress(compressed, \{config}) \| return a string from a compressed byte[] in various format +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.util/apoc.util.adoc[apoc.util.md5 icon:book[]] + +apoc.util.md5([values]) \| computes the md5 of the concatenation of all string values of the list +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.util/apoc.util.adoc[apoc.util.sha1 icon:book[]] + +apoc.util.sha1([values]) \| computes the sha1 of the concatenation of all string values of the list +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.util/apoc.util.adoc[apoc.util.sha256 icon:book[]] + +apoc.util.sha256([values]) \| computes the sha256 of the concatenation of all string values of the list +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.util/apoc.util.adoc[apoc.util.sha384 icon:book[]] + +apoc.util.sha384([values]) \| computes the sha384 of the concatenation of all string values of the list +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.util/apoc.util.adoc[apoc.util.sha512 icon:book[]] + +apoc.util.sha512([values]) \| computes the sha512 of the concatenation of all string values of the list +|label:function[] +|label:apoc-core[] +|xref::overview/apoc.util/apoc.util.adoc[apoc.util.validatePredicate icon:book[]] + +apoc.util.validatePredicate(predicate, message, params) \| if the predicate yields to true raise an exception else returns true, for use inside WHERE subclauses +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.uuid.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.uuid.csv index 6658d13d8e..d75fc33e27 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.uuid.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.uuid.csv @@ -1,6 +1,22 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.uuid.install¦apoc.uuid.install(label :: STRING?, config = {} :: MAP?) :: (batchComputationResult :: MAP?, label :: STRING?, installed :: BOOLEAN?, properties :: MAP?)¦CALL apoc.uuid.install(label, {addToExistingNodes: true/false, uuidProperty: 'uuid'}) yield label, installed, properties, batchComputationResult | it will add the uuid transaction handler +¦Qualified Name¦Type¦Release +|xref::overview/apoc.uuid/apoc.uuid.adoc[apoc.uuid.install icon:book[]] + +CALL apoc.uuid.install(label, {addToExistingNodes: true/false, uuidProperty: 'uuid'}) yield label, installed, properties, batchComputationResult \| it will add the uuid transaction handler for the provided `label` and `uuidProperty`, in case the UUID handler is already present it will be replaced by the new one -¦procedure¦apoc.uuid.list¦apoc.uuid.list() :: (label :: STRING?, installed :: BOOLEAN?, properties :: MAP?)¦CALL apoc.uuid.list() yield label, installed, properties | provides a list of all the uuid handlers installed with the related configuration -¦procedure¦apoc.uuid.remove¦apoc.uuid.remove(label :: STRING?) :: (label :: STRING?, installed :: BOOLEAN?, properties :: MAP?)¦CALL apoc.uuid.remove(label) yield label, installed, properties | remove previously added uuid handler and returns uuid information. All the existing uuid properties are left as-is -¦procedure¦apoc.uuid.removeAll¦apoc.uuid.removeAll() :: (label :: STRING?, installed :: BOOLEAN?, properties :: MAP?)¦CALL apoc.uuid.removeAll() yield label, installed, properties | it removes all previously added uuid handlers and returns uuids information. All the existing uuid properties are left as-is +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.uuid/apoc.uuid.adoc[apoc.uuid.list icon:book[]] + +CALL apoc.uuid.list() yield label, installed, properties \| provides a list of all the uuid handlers installed with the related configuration +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.uuid/apoc.uuid.adoc[apoc.uuid.remove icon:book[]] + +CALL apoc.uuid.remove(label) yield label, installed, properties \| remove previously added uuid handler and returns uuid information. All the existing uuid properties are left as-is +|label:procedure[] +|label:apoc-full[] +|xref::overview/apoc.uuid/apoc.uuid.adoc[apoc.uuid.removeAll icon:book[]] + +CALL apoc.uuid.removeAll() yield label, installed, properties \| it removes all previously added uuid handlers and returns uuids information. All the existing uuid properties are left as-is +|label:procedure[] +|label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.warmup.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.warmup.csv index 342b56bb20..8e520abad7 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.warmup.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.warmup.csv @@ -1,2 +1,6 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.warmup.run¦apoc.warmup.run(loadProperties = false :: BOOLEAN?, loadDynamicProperties = false :: BOOLEAN?, loadIndexes = false :: BOOLEAN?) :: (pageSize :: INTEGER?, totalTime :: INTEGER?, transactionWasTerminated :: BOOLEAN?, nodesPerPage :: INTEGER?, nodesTotal :: INTEGER?, nodePages :: INTEGER?, nodesTime :: INTEGER?, relsPerPage :: INTEGER?, relsTotal :: INTEGER?, relPages :: INTEGER?, relsTime :: INTEGER?, relGroupsPerPage :: INTEGER?, relGroupsTotal :: INTEGER?, relGroupPages :: INTEGER?, relGroupsTime :: INTEGER?, propertiesLoaded :: BOOLEAN?, dynamicPropertiesLoaded :: BOOLEAN?, propsPerPage :: INTEGER?, propRecordsTotal :: INTEGER?, propPages :: INTEGER?, propsTime :: INTEGER?, stringPropsPerPage :: INTEGER?, stringPropRecordsTotal :: INTEGER?, stringPropPages :: INTEGER?, stringPropsTime :: INTEGER?, arrayPropsPerPage :: INTEGER?, arrayPropRecordsTotal :: INTEGER?, arrayPropPages :: INTEGER?, arrayPropsTime :: INTEGER?, indexesLoaded :: BOOLEAN?, indexPages :: INTEGER?, indexTime :: INTEGER?)¦apoc.warmup.run(loadProperties=false,loadDynamicProperties=false,loadIndexes=false) - quickly loads all nodes and rels into memory by skipping one page at a time +¦Qualified Name¦Type¦Release +|xref::overview/apoc.warmup/apoc.warmup.adoc[apoc.warmup.run icon:book[]] + +apoc.warmup.run(loadProperties=false,loadDynamicProperties=false,loadIndexes=false) - quickly loads all nodes and rels into memory by skipping one page at a time +|label:procedure[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.xml.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.xml.csv index b9f12513fe..103f4528d4 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.xml.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.xml.csv @@ -1,3 +1,11 @@ -¦type¦qualified name¦signature¦description -¦procedure¦apoc.xml.import¦apoc.xml.import(url :: STRING?, config = {} :: MAP?) :: (node :: NODE?)¦Deprecated by apoc.import.xml -¦function¦apoc.xml.parse¦apoc.xml.parse(data :: STRING?, path = / :: STRING?, config = {} :: MAP?, simple = false :: BOOLEAN?) :: (MAP?)¦RETURN apoc.xml.parse(, , config, false) AS value +¦Qualified Name¦Type¦Release +|xref::overview/apoc.xml/apoc.xml.adoc[apoc.xml.import icon:book[]] + +Deprecated by apoc.import.xml +|label:procedure[] +|label:apoc-core[] +|xref::overview/apoc.xml/apoc.xml.adoc[apoc.xml.parse icon:book[]] + +RETURN apoc.xml.parse(, , config, false) AS value +|label:function[] +|label:apoc-core[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/documentation.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/documentation.csv index a8bd23ce26..57b4add632 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/documentation.csv +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/documentation.csv @@ -1,18 +1,14 @@ ¦type¦qualified name¦signature¦description¦core¦documentation -¦procedure¦apoc.algo.aStar¦apoc.algo.aStar(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, weightPropertyName :: STRING?, latPropertyName :: STRING?, lonPropertyName :: STRING?) :: (path :: PATH?, weight :: FLOAT?)¦apoc.algo.aStar(startNode, endNode, 'KNOWS|', 'distance','lat','lon') YIELD path, weight - run A* with relationship property name as cost function¦true¦xref::algorithms/path-finding-procedures.adoc -¦procedure¦apoc.algo.aStarConfig¦apoc.algo.aStarConfig(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, config :: MAP?) :: (path :: PATH?, weight :: FLOAT?)¦apoc.algo.aStar(startNode, endNode, 'KNOWS|', {weight:'dist',default:10,x:'lon',y:'lat'}) YIELD path, weight - run A* with relationship property name as cost function¦true¦xref::algorithms/path-finding-procedures.adoc -¦procedure¦apoc.algo.allSimplePaths¦apoc.algo.allSimplePaths(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, maxNodes :: INTEGER?) :: (path :: PATH?)¦apoc.algo.allSimplePaths(startNode, endNode, 'KNOWS|', 5) YIELD path, weight - run allSimplePaths with relationships given and maxNodes¦true¦xref::algorithms/path-finding-procedures.adoc -¦procedure¦apoc.algo.cover¦apoc.algo.cover(nodes :: ANY?) :: (rel :: RELATIONSHIP?)¦apoc.algo.cover(nodes) yield rel - returns all relationships between this set of nodes¦true¦xref::algorithms/path-finding-procedures.adoc -¦procedure¦apoc.algo.dijkstra¦apoc.algo.dijkstra(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, weightPropertyName :: STRING?, defaultWeight = NaN :: FLOAT?, numberOfWantedPaths = 1 :: INTEGER?) :: (path :: PATH?, weight :: FLOAT?)¦apoc.algo.dijkstra(startNode, endNode, 'KNOWS|', 'distance', defaultValue, numberOfWantedResults) YIELD path, weight - run dijkstra with relationship property name as cost function¦true¦xref::algorithms/path-finding-procedures.adoc -¦procedure¦apoc.algo.dijkstraWithDefaultWeight¦apoc.algo.dijkstraWithDefaultWeight(startNode :: NODE?, endNode :: NODE?, relationshipTypesAndDirections :: STRING?, weightPropertyName :: STRING?, defaultWeight :: FLOAT?) :: (path :: PATH?, weight :: FLOAT?)¦apoc.algo.dijkstraWithDefaultWeight(startNode, endNode, 'KNOWS|', 'distance', 10) YIELD path, weight - run dijkstra with relationship property name as cost function and a default weight if the property does not exist¦true¦xref::algorithms/path-finding-procedures.adoc +¦procedure¦apoc.algo.cover¦apoc.algo.cover(nodes :: ANY?) :: (rel :: RELATIONSHIP?)¦apoc.algo.cover(nodes) yield rel - returns all relationships between this set of nodes¦true¦ ¦procedure¦apoc.atomic.add¦apoc.atomic.add(container :: ANY?, propertyName :: STRING?, number :: NUMBER?, times = 5 :: INTEGER?) :: (container :: ANY?, property :: STRING?, oldValue :: ANY?, newValue :: ANY?)¦apoc.atomic.add(node/relatonship,propertyName,number) Sums the property's value with the 'number' value ¦true¦xref::graph-updates/atomic-updates.adoc ¦procedure¦apoc.atomic.concat¦apoc.atomic.concat(container :: ANY?, propertyName :: STRING?, string :: STRING?, times = 5 :: INTEGER?) :: (container :: ANY?, property :: STRING?, oldValue :: ANY?, newValue :: ANY?)¦apoc.atomic.concat(node/relatonship,propertyName,string) Concats the property's value with the 'string' value¦true¦xref::graph-updates/atomic-updates.adoc ¦procedure¦apoc.atomic.insert¦apoc.atomic.insert(container :: ANY?, propertyName :: STRING?, position :: INTEGER?, value :: ANY?, times = 5 :: INTEGER?) :: (container :: ANY?, property :: STRING?, oldValue :: ANY?, newValue :: ANY?)¦apoc.atomic.insert(node/relatonship,propertyName,position,value) insert a value into the property's array value at 'position'¦true¦xref::graph-updates/atomic-updates.adoc ¦procedure¦apoc.atomic.remove¦apoc.atomic.remove(container :: ANY?, propertyName :: STRING?, position :: INTEGER?, times = 5 :: INTEGER?) :: (container :: ANY?, property :: STRING?, oldValue :: ANY?, newValue :: ANY?)¦apoc.atomic.remove(node/relatonship,propertyName,position) remove the element at position 'position'¦true¦xref::graph-updates/atomic-updates.adoc ¦procedure¦apoc.atomic.subtract¦apoc.atomic.subtract(container :: ANY?, propertyName :: STRING?, number :: NUMBER?, times = 5 :: INTEGER?) :: (container :: ANY?, property :: STRING?, oldValue :: ANY?, newValue :: ANY?)¦apoc.atomic.subtract(node/relatonship,propertyName,number) Subtracts the 'number' value to the property's value¦true¦xref::graph-updates/atomic-updates.adoc ¦procedure¦apoc.atomic.update¦apoc.atomic.update(container :: ANY?, propertyName :: STRING?, operation :: STRING?, times = 5 :: INTEGER?) :: (container :: ANY?, property :: STRING?, oldValue :: ANY?, newValue :: ANY?)¦apoc.atomic.update(node/relatonship,propertyName,updateOperation) update a property's value with a cypher operation (ex. "n.prop1+n.prop2")¦true¦xref::graph-updates/atomic-updates.adoc -¦procedure¦apoc.bolt.execute¦apoc.bolt.execute(url :: STRING?, kernelTransaction :: STRING?, params = {} :: MAP?, config = {} :: MAP?) :: (row :: MAP?)¦apoc.bolt.execute(url-or-key, kernelTransaction, params, config) - access to other databases via bolt for read¦false¦xref::database-integration/bolt-neo4j.adoc +¦procedure¦apoc.bolt.execute¦apoc.bolt.execute(url :: STRING?, kernelTransaction :: STRING?, params = {} :: MAP?, config = {} :: MAP?) :: (row :: MAP?)¦apoc.bolt.execute(url-or-key, kernelTransaction, params, config) - access to other databases via bolt for reads and writes¦false¦xref::database-integration/bolt-neo4j.adoc ¦procedure¦apoc.bolt.load¦apoc.bolt.load(url :: STRING?, kernelTransaction :: STRING?, params = {} :: MAP?, config = {} :: MAP?) :: (row :: MAP?)¦apoc.bolt.load(url-or-key, kernelTransaction, params, config) - access to other databases via bolt for read¦false¦xref::database-integration/bolt-neo4j.adoc +¦procedure¦apoc.bolt.load.fromLocal¦apoc.bolt.load.fromLocal(url :: STRING?, localStatement :: STRING?, remoteStatement :: STRING?, config = {} :: MAP?) :: (row :: MAP?)¦¦false¦xref::database-integration/bolt-neo4j.adoc ¦procedure¦apoc.case¦apoc.case(conditionals :: LIST? OF ANY?, elseQuery = :: STRING?, params = {} :: MAP?) :: (value :: MAP?)¦apoc.case([condition, query, condition, query, ...], elseQuery:'', params:{}) yield value - given a list of conditional / read-only query pairs, executes the query associated with the first conditional evaluating to true (or the else query if none are true) with the given parameters¦true¦xref::cypher-execution/conditionals.adoc ¦procedure¦apoc.cluster.graph¦apoc.cluster.graph() :: (nodes :: LIST? OF NODE?, relationships :: LIST? OF RELATIONSHIP?)¦¦false¦ ¦procedure¦apoc.coll.elements¦apoc.coll.elements(values :: LIST? OF ANY?, limit = -1 :: INTEGER?, offset = 0 :: INTEGER?) :: (_1 :: ANY?, _2 :: ANY?, _3 :: ANY?, _4 :: ANY?, _5 :: ANY?, _6 :: ANY?, _7 :: ANY?, _8 :: ANY?, _9 :: ANY?, _10 :: ANY?, _1s :: STRING?, _2s :: STRING?, _3s :: STRING?, _4s :: STRING?, _5s :: STRING?, _6s :: STRING?, _7s :: STRING?, _8s :: STRING?, _9s :: STRING?, _10s :: STRING?, _1i :: INTEGER?, _2i :: INTEGER?, _3i :: INTEGER?, _4i :: INTEGER?, _5i :: INTEGER?, _6i :: INTEGER?, _7i :: INTEGER?, _8i :: INTEGER?, _9i :: INTEGER?, _10i :: INTEGER?, _1f :: FLOAT?, _2f :: FLOAT?, _3f :: FLOAT?, _4f :: FLOAT?, _5f :: FLOAT?, _6f :: FLOAT?, _7f :: FLOAT?, _8f :: FLOAT?, _9f :: FLOAT?, _10f :: FLOAT?, _1b :: BOOLEAN?, _2b :: BOOLEAN?, _3b :: BOOLEAN?, _4b :: BOOLEAN?, _5b :: BOOLEAN?, _6b :: BOOLEAN?, _7b :: BOOLEAN?, _8b :: BOOLEAN?, _9b :: BOOLEAN?, _10b :: BOOLEAN?, _1l :: LIST? OF ANY?, _2l :: LIST? OF ANY?, _3l :: LIST? OF ANY?, _4l :: LIST? OF ANY?, _5l :: LIST? OF ANY?, _6l :: LIST? OF ANY?, _7l :: LIST? OF ANY?, _8l :: LIST? OF ANY?, _9l :: LIST? OF ANY?, _10l :: LIST? OF ANY?, _1m :: MAP?, _2m :: MAP?, _3m :: MAP?, _4m :: MAP?, _5m :: MAP?, _6m :: MAP?, _7m :: MAP?, _8m :: MAP?, _9m :: MAP?, _10m :: MAP?, _1n :: NODE?, _2n :: NODE?, _3n :: NODE?, _4n :: NODE?, _5n :: NODE?, _6n :: NODE?, _7n :: NODE?, _8n :: NODE?, _9n :: NODE?, _10n :: NODE?, _1r :: RELATIONSHIP?, _2r :: RELATIONSHIP?, _3r :: RELATIONSHIP?, _4r :: RELATIONSHIP?, _5r :: RELATIONSHIP?, _6r :: RELATIONSHIP?, _7r :: RELATIONSHIP?, _8r :: RELATIONSHIP?, _9r :: RELATIONSHIP?, _10r :: RELATIONSHIP?, _1p :: PATH?, _2p :: PATH?, _3p :: PATH?, _4p :: PATH?, _5p :: PATH?, _6p :: PATH?, _7p :: PATH?, _8p :: PATH?, _9p :: PATH?, _10p :: PATH?, elements :: INTEGER?)¦apoc.coll.elements(list,limit,offset) yield _1,_2,..,_10,_1s,_2i,_3f,_4m,_5l,_6n,_7r,_8p - deconstruct subset of mixed list into identifiers of the correct type¦true¦ @@ -50,6 +46,8 @@ ¦procedure¦apoc.create.uuids¦apoc.create.uuids(count :: INTEGER?) :: (row :: INTEGER?, uuid :: STRING?)¦apoc.create.uuids(count) yield uuid - creates 'count' UUIDs ¦true¦ ¦procedure¦apoc.create.vNode¦apoc.create.vNode(label :: LIST? OF STRING?, props :: MAP?) :: (node :: NODE?)¦apoc.create.vNode(['Label'], {key:value,...}) returns a virtual node¦true¦xref::virtual/virtual-nodes-rels.adoc ¦procedure¦apoc.create.vNodes¦apoc.create.vNodes(label :: LIST? OF STRING?, props :: LIST? OF MAP?) :: (node :: NODE?)¦apoc.create.vNodes(['Label'], [{key:value,...}]) returns virtual nodes¦true¦xref::virtual/virtual-nodes-rels.adoc +¦procedure¦apoc.create.clonePathToVirtual¦apoc.create.clonePathToVirtual(path :: PATH?) :: (path :: PATH?)¦apoc.create.clonePathToVirtual¦true¦xref::virtual/virtual-nodes-rels.adoc +¦procedure¦apoc.create.clonePathsToVirtual¦apoc.create.clonePathsToVirtual(paths :: LIST? OF PATH?) :: (path :: PATH?)¦apoc.create.clonePathsToVirtual¦true¦xref::virtual/virtual-nodes-rels.adoc ¦procedure¦apoc.create.vPattern¦apoc.create.vPattern(from :: MAP?, relType :: STRING?, props :: MAP?, to :: MAP?) :: (from :: NODE?, rel :: RELATIONSHIP?, to :: NODE?)¦apoc.create.vPattern({_labels:['LabelA'],key:value},'KNOWS',{key:value,...}, {_labels:['LabelB'],key:value}) returns a virtual pattern¦true¦xref::virtual/virtual-nodes-rels.adoc ¦procedure¦apoc.create.vPatternFull¦apoc.create.vPatternFull(labelsN :: LIST? OF STRING?, n :: MAP?, relType :: STRING?, props :: MAP?, labelsM :: LIST? OF STRING?, m :: MAP?) :: (from :: NODE?, rel :: RELATIONSHIP?, to :: NODE?)¦apoc.create.vPatternFull(['LabelA'],{key:value},'KNOWS',{key:value,...},['LabelB'],{key:value}) returns a virtual pattern¦true¦xref::virtual/virtual-nodes-rels.adoc ¦procedure¦apoc.create.vRelationship¦apoc.create.vRelationship(from :: NODE?, relType :: STRING?, props :: MAP?, to :: NODE?) :: (rel :: RELATIONSHIP?)¦apoc.create.vRelationship(nodeFrom,'KNOWS',{key:value,...}, nodeTo) returns a virtual relationship¦true¦xref::virtual/virtual-nodes-rels.adoc @@ -125,7 +123,7 @@ ¦procedure¦apoc.graph.fromDB¦apoc.graph.fromDB(name :: STRING?, properties :: MAP?) :: (graph :: MAP?)¦apoc.graph.fromDB('name',\{properties}) - creates a virtual graph object for later processing¦true¦xref::virtual/virtual-graph.adoc ¦procedure¦apoc.graph.fromData¦apoc.graph.fromData(nodes :: LIST? OF NODE?, relationships :: LIST? OF RELATIONSHIP?, name :: STRING?, properties :: MAP?) :: (graph :: MAP?)¦apoc.graph.fromData([nodes],[relationships],'name',\{properties}) | creates a virtual graph object for later processing¦true¦xref::virtual/virtual-graph.adoc ¦procedure¦apoc.graph.fromDocument¦apoc.graph.fromDocument(json :: ANY?, config = {} :: MAP?) :: (graph :: MAP?)¦apoc.graph.fromDocument(\{json}, \{config}) yield graph - transform JSON documents into graph structures¦true¦xref::virtual/virtual-graph.adoc -¦procedure¦apoc.graph.fromPath¦apoc.graph.fromPath(path :: PATH?, name :: STRING?, properties :: MAP?) :: (graph :: MAP?)¦apoc.graph.fromPaths(path,'name',\{properties}) - creates a virtual graph object for later processing¦true¦xref::virtual/virtual-graph.adoc +¦procedure¦apoc.graph.fromPath¦apoc.graph.fromPath(path :: PATH?, name :: STRING?, properties :: MAP?) :: (graph :: MAP?)¦apoc.graph.fromPath(path,'name',\{properties}) - creates a virtual graph object for later processing¦true¦xref::virtual/virtual-graph.adoc ¦procedure¦apoc.graph.fromPaths¦apoc.graph.fromPaths(paths :: LIST? OF PATH?, name :: STRING?, properties :: MAP?) :: (graph :: MAP?)¦apoc.graph.fromPaths([paths],'name',\{properties}) - creates a virtual graph object for later processing¦true¦xref::virtual/virtual-graph.adoc ¦procedure¦apoc.graph.validateDocument¦apoc.graph.validateDocument(json :: ANY?, config = {} :: MAP?) :: (row :: MAP?)¦apoc.graph.validateDocument(\{json}, \{config}) yield row - validates the json, return the result of the validation¦true¦xref::virtual/virtual-graph.adoc ¦procedure¦apoc.help¦apoc.help(proc :: STRING?) :: (type :: STRING?, name :: STRING?, text :: STRING?, signature :: STRING?, roles :: LIST? OF STRING?, writes :: BOOLEAN?, core :: BOOLEAN?)¦Provides descriptions of available procedures. To narrow the results, supply a search string. To also search in the description text, append + to the end of the search string.¦true¦ @@ -136,25 +134,25 @@ ¦procedure¦apoc.load.csv¦apoc.load.csv(url :: STRING?, config = {} :: MAP?) :: (lineNo :: INTEGER?, list :: LIST? OF ANY?, strings :: LIST? OF STRING?, map :: MAP?, stringMap :: MAP?)¦apoc.load.csv('url',\{config}) YIELD lineNo, list, map - load CSV from URL as stream of values, config contains any of: {skip:1,limit:5,header:false,sep:'TAB',ignore:['tmp'],nullValues:['na'],arraySep:';',mapping:{years:{type:'int',arraySep:'-',array:false,name:'age',ignore:false}}¦false¦xref::import/load-csv.adoc ¦procedure¦apoc.load.csvParams¦apoc.load.csvParams(url :: STRING?, httpHeaders :: MAP?, payload :: STRING?, config = {} :: MAP?) :: (lineNo :: INTEGER?, list :: LIST? OF ANY?, strings :: LIST? OF STRING?, map :: MAP?, stringMap :: MAP?)¦apoc.load.csvParams('url', {httpHeader: value}, payload, \{config}) YIELD lineNo, list, map - load from CSV URL (e.g. web-api) while sending headers / payload to load CSV from URL as stream of values, - config contains any of: {skip:1,limit:5,header:false,sep:'TAB',ignore:['tmp'],nullValues:['na'],arraySep:';',mapping:{years:{type:'int',arraySep:'-',array:false,name:'age',ignore:false}}¦true¦ -¦procedure¦apoc.load.directory¦apoc.load.directory(pattern = * :: STRING?, urlDir = :: STRING?, config = {} :: MAP?) :: (value :: STRING?)¦apoc.load.directory('pattern', 'urlDir', \{config}) YIELD value - Loads list of all files in folder specified by urlDir or in import folder if urlDir string is empty or not specified¦true¦ -¦procedure¦apoc.load.directory.async.add¦apoc.load.directory.async.add(name :: STRING?, cypher :: STRING?, pattern = * :: STRING?, urlDir = :: STRING?, config = {} :: MAP?) :: (name :: STRING?, status :: STRING?, pattern :: STRING?, cypher :: STRING?, urlDir :: STRING?, config :: MAP?, error :: STRING?)¦apoc.load.directory.async.add(name, cypher, pattern, urlDir, {}) YIELD name, status, pattern, cypher, urlDir, config, error - Add or replace a folder listener with a specific name, pattern and url directory that execute the specified cypher query when an event is triggered and return listener list¦true¦ -¦procedure¦apoc.load.directory.async.list¦apoc.load.directory.async.list() :: (name :: STRING?, status :: STRING?, pattern :: STRING?, cypher :: STRING?, urlDir :: STRING?, config :: MAP?, error :: STRING?)¦apoc.load.directory.async.list() YIELD name, status, pattern, cypher, urlDir, config, error - List of all folder listeners¦true¦ -¦procedure¦apoc.load.directory.async.remove¦apoc.load.directory.async.remove(name :: STRING?) :: (name :: STRING?, status :: STRING?, pattern :: STRING?, cypher :: STRING?, urlDir :: STRING?, config :: MAP?, error :: STRING?)¦apoc.load.directory.async.remove(name) YIELD name, status, pattern, cypher, urlDir, config, error - Remove a folder listener by name and return remaining listeners, if any¦true¦ -¦procedure¦apoc.load.directory.async.removeAll¦apoc.load.directory.async.removeAll() :: (name :: STRING?, status :: STRING?, pattern :: STRING?, cypher :: STRING?, urlDir :: STRING?, config :: MAP?, error :: STRING?)¦apoc.load.directory.async.removeAll() - Remove all folder listeners¦true¦ + config contains any of: {skip:1,limit:5,header:false,sep:'TAB',ignore:['tmp'],nullValues:['na'],arraySep:';',mapping:{years:{type:'int',arraySep:'-',array:false,name:'age',ignore:false}}¦false¦ +¦procedure¦apoc.load.directory¦apoc.load.directory(pattern = * :: STRING?, urlDir = :: STRING?, config = {} :: MAP?) :: (value :: STRING?)¦apoc.load.directory('pattern', 'urlDir', \{config}) YIELD value - Loads list of all files in folder specified by urlDir or in import folder if urlDir string is empty or not specified¦false¦ +¦procedure¦apoc.load.directory.async.add¦apoc.load.directory.async.add(name :: STRING?, cypher :: STRING?, pattern = * :: STRING?, urlDir = :: STRING?, config = {} :: MAP?) :: (name :: STRING?, status :: STRING?, pattern :: STRING?, cypher :: STRING?, urlDir :: STRING?, config :: MAP?, error :: STRING?)¦apoc.load.directory.async.add(name, cypher, pattern, urlDir, {}) YIELD name, status, pattern, cypher, urlDir, config, error - Add or replace a folder listener with a specific name, pattern and url directory that execute the specified cypher query when an event is triggered and return listener list¦false¦ +¦procedure¦apoc.load.directory.async.list¦apoc.load.directory.async.list() :: (name :: STRING?, status :: STRING?, pattern :: STRING?, cypher :: STRING?, urlDir :: STRING?, config :: MAP?, error :: STRING?)¦apoc.load.directory.async.list() YIELD name, status, pattern, cypher, urlDir, config, error - List of all folder listeners¦false¦ +¦procedure¦apoc.load.directory.async.remove¦apoc.load.directory.async.remove(name :: STRING?) :: (name :: STRING?, status :: STRING?, pattern :: STRING?, cypher :: STRING?, urlDir :: STRING?, config :: MAP?, error :: STRING?)¦apoc.load.directory.async.remove(name) YIELD name, status, pattern, cypher, urlDir, config, error - Remove a folder listener by name and return remaining listeners, if any¦false¦ +¦procedure¦apoc.load.directory.async.removeAll¦apoc.load.directory.async.removeAll() :: (name :: STRING?, status :: STRING?, pattern :: STRING?, cypher :: STRING?, urlDir :: STRING?, config :: MAP?, error :: STRING?)¦apoc.load.directory.async.removeAll() - Remove all folder listeners¦false¦ ¦procedure¦apoc.load.driver¦apoc.load.driver(driverClass :: STRING?) :: VOID¦apoc.load.driver('org.apache.derby.jdbc.EmbeddedDriver') register JDBC driver of source database¦false¦ ¦procedure¦apoc.load.html¦apoc.load.html(url :: STRING?, query = {} :: MAP?, config = {} :: MAP?) :: (value :: MAP?)¦apoc.load.html('url',{name: jquery, name2: jquery}, config) YIELD value - Load Html page and return the result as a Map¦false¦ ¦procedure¦apoc.load.jdbc¦apoc.load.jdbc(jdbc :: STRING?, tableOrSql :: STRING?, params = [] :: LIST? OF ANY?, config = {} :: MAP?) :: (row :: MAP?)¦apoc.load.jdbc('key or url','table or statement', params, config) YIELD row - load from relational database, from a full table or a sql statement¦false¦xref::database-integration/load-jdbc.adoc ¦procedure¦apoc.load.jdbcParams¦apoc.load.jdbcParams(jdbc :: STRING?, sql :: STRING?, params :: LIST? OF ANY?, config = {} :: MAP?) :: (row :: MAP?)¦deprecated - please use: apoc.load.jdbc('key or url','',[params]) YIELD row - load from relational database, from a sql statement with parameters¦false¦xref::database-integration/load-jdbc.adoc ¦procedure¦apoc.load.jdbcUpdate¦apoc.load.jdbcUpdate(jdbc :: STRING?, query :: STRING?, params = [] :: LIST? OF ANY?, config = {} :: MAP?) :: (row :: MAP?)¦apoc.load.jdbcUpdate('key or url','statement',[params],config) YIELD row - update relational database, from a SQL statement with optional parameters¦false¦xref::database-integration/load-jdbc.adoc ¦procedure¦apoc.load.json¦apoc.load.json(url :: STRING?, path = :: STRING?, config = {} :: MAP?) :: (value :: MAP?)¦apoc.load.json('url',path, config) YIELD value - import JSON as stream of values if the JSON was an array or a single value if it was a map¦true¦xref::import/load-json.adoc -¦procedure¦apoc.load.jsonArray¦apoc.load.jsonArray(url :: STRING?, path = :: STRING?) :: (value :: ANY?)¦apoc.load.jsonArray('url') YIELD value - load array from JSON URL (e.g. web-api) to import JSON as stream of values¦true¦xref::import/load-json.adoc +¦procedure¦apoc.load.jsonArray¦apoc.load.jsonArray(url :: STRING?, path = :: STRING?, config = {} :: MAP?) :: (value :: ANY?)¦apoc.load.jsonArray('url') YIELD value - load array from JSON URL (e.g. web-api) to import JSON as stream of values¦true¦xref::import/load-json.adoc ¦procedure¦apoc.load.jsonParams¦apoc.load.jsonParams(urlOrKey :: STRING?, headers :: MAP?, payload :: STRING?, path = :: STRING?, config = {} :: MAP?) :: (value :: MAP?)¦apoc.load.jsonParams('url',{header:value},payload, config) YIELD value - load from JSON URL (e.g. web-api) while sending headers / payload to import JSON as stream of values if the JSON was an array or a single value if it was a map¦true¦xref::import/load-json.adoc ¦procedure¦apoc.load.ldap¦apoc.load.ldap(connection :: ANY?, search :: MAP?) :: (entry :: MAP?)¦apoc.load.ldap("key" or \{connectionMap},\{searchMap}) Load entries from an ldap source (yield entry)¦false¦ ¦procedure¦apoc.load.xls¦apoc.load.xls(url :: STRING?, selector :: STRING?, config = {} :: MAP?) :: (lineNo :: INTEGER?, list :: LIST? OF ANY?, map :: MAP?)¦apoc.load.xls('url','selector',\{config}) YIELD lineNo, list, map - load XLS fom URL as stream of row values, config contains any of: {skip:1,limit:5,header:false,ignore:['tmp'],arraySep:';',mapping:{years:{type:'int',arraySep:'-',array:false,name:'age',ignore:false, dateFormat:'iso_date', dateParse:['dd-MM-yyyy']}}¦false¦ -¦procedure¦apoc.load.xml¦apoc.load.xml(url :: STRING?, path = / :: STRING?, config = {} :: MAP?, simple = false :: BOOLEAN?) :: (value :: MAP?)¦apoc.load.xml('http://example.com/test.xml', 'xPath',config, false) YIELD value as doc CREATE (p:Person) SET p.name = doc.name load from XML URL (e.g. web-api) to import XML as single nested map with attributes and _type, _text and _childrenx fields.¦true¦xref::import/xml.adoc -¦procedure¦apoc.load.xmlSimple¦apoc.load.xmlSimple(url :: STRING?) :: (value :: MAP?)¦apoc.load.xmlSimple('http://example.com/test.xml') YIELD value as doc CREATE (p:Person) SET p.name = doc.name load from XML URL (e.g. web-api) to import XML as single nested map with attributes and _type, _text and _children fields. This method does intentionally not work with XML mixed content.¦true¦xref::import/xml.adoc +¦procedure¦apoc.load.xml¦apoc.load.xml(url :: STRING?, path = / :: STRING?, config = {} :: MAP?, simple = false :: BOOLEAN?) :: (value :: MAP?)¦apoc.load.xml('http://example.com/test.xml', 'xPath',config, false) YIELD value as doc CREATE (p:Person) SET p.name = doc.name - load from XML URL (e.g. web-api) to import XML as single nested map with attributes and _type, _text and _childrenx fields.¦true¦xref::import/xml.adoc +¦procedure¦apoc.load.xmlSimple¦apoc.load.xmlSimple(url :: STRING?) :: (value :: MAP?)¦apoc.load.xmlSimple('http://example.com/test.xml') YIELD value as doc CREATE (p:Person) SET p.name = doc.name - load from XML URL (e.g. web-api) to import XML as single nested map with attributes and _type, _text and _children fields. This method does intentionally not work with XML mixed content.¦true¦xref::import/xml.adoc ¦procedure¦apoc.lock.all¦apoc.lock.all(nodes :: LIST? OF NODE?, rels :: LIST? OF RELATIONSHIP?) :: VOID¦apoc.lock.all([nodes],[relationships]) acquires a write lock on the given nodes and relationships¦true¦xref::graph-updates/locking.adoc ¦procedure¦apoc.lock.nodes¦apoc.lock.nodes(nodes :: LIST? OF NODE?) :: VOID¦apoc.lock.nodes([nodes]) acquires a write lock on the given nodes¦true¦xref::graph-updates/locking.adoc ¦procedure¦apoc.lock.read.nodes¦apoc.lock.read.nodes(nodes :: LIST? OF NODE?) :: VOID¦apoc.lock.read.nodes([nodes]) acquires a read lock on the given nodes¦true¦xref::graph-updates/locking.adoc @@ -171,7 +169,7 @@ ¦procedure¦apoc.merge.relationship¦apoc.merge.relationship(startNode :: NODE?, relationshipType :: STRING?, identProps :: MAP?, props :: MAP?, endNode :: NODE?, onMatchProps = {} :: MAP?) :: (rel :: RELATIONSHIP?)¦apoc.merge.relationship(startNode, relType, identProps:{key:value, ...}, onCreateProps:{key:value, ...}, endNode, onMatchProps:{key:value, ...}) - merge relationship with dynamic type, with support for setting properties ON CREATE or ON MATCH¦true¦xref::graph-updates/data-creation.adoc ¦procedure¦apoc.merge.relationship.eager¦apoc.merge.relationship.eager(startNode :: NODE?, relationshipType :: STRING?, identProps :: MAP?, props :: MAP?, endNode :: NODE?, onMatchProps = {} :: MAP?) :: (rel :: RELATIONSHIP?)¦apoc.merge.relationship(startNode, relType, identProps:{key:value, ...}, onCreateProps:{key:value, ...}, endNode, onMatchProps:{key:value, ...}) - merge relationship with dynamic type, with support for setting properties ON CREATE or ON MATCH¦true¦xref::graph-updates/data-creation.adoc ¦procedure¦apoc.meta.data¦apoc.meta.data(config = {} :: MAP?) :: (label :: STRING?, property :: STRING?, count :: INTEGER?, unique :: BOOLEAN?, index :: BOOLEAN?, existence :: BOOLEAN?, type :: STRING?, array :: BOOLEAN?, sample :: LIST? OF ANY?, leftCount :: INTEGER?, rightCount :: INTEGER?, left :: INTEGER?, right :: INTEGER?, other :: LIST? OF STRING?, otherLabels :: LIST? OF STRING?, elementType :: STRING?)¦apoc.meta.data(\{config}) - examines a subset of the graph to provide a tabular meta information¦true¦ -¦procedure¦apoc.meta.data.of¦apoc.meta.data.of(graph = {} :: ANY?, config = {} :: MAP?) :: (label :: STRING?, property :: STRING?, count :: INTEGER?, unique :: BOOLEAN?, index :: BOOLEAN?, existence :: BOOLEAN?, type :: STRING?, array :: BOOLEAN?, sample :: LIST? OF ANY?, leftCount :: INTEGER?, rightCount :: INTEGER?, left :: INTEGER?, right :: INTEGER?, other :: LIST? OF STRING?, otherLabels :: LIST? OF STRING?, elementType :: STRING?)¦apoc.meta.data.of(\{graph}, \{config}) - examines a subset of the graph to provide a tabular meta information¦true¦ +¦procedure¦apoc.meta.data.of¦apoc.meta.data.of(graph :: ANY?, config = {} :: MAP?) :: (label :: STRING?, property :: STRING?, count :: INTEGER?, unique :: BOOLEAN?, index :: BOOLEAN?, existence :: BOOLEAN?, type :: STRING?, array :: BOOLEAN?, sample :: LIST? OF ANY?, leftCount :: INTEGER?, rightCount :: INTEGER?, left :: INTEGER?, right :: INTEGER?, other :: LIST? OF STRING?, otherLabels :: LIST? OF STRING?, elementType :: STRING?)¦apoc.meta.data.of(\{graph}, \{config}) - examines a subset of the graph to provide a tabular meta information¦true¦ ¦procedure¦apoc.meta.graph¦apoc.meta.graph(config = {} :: MAP?) :: (nodes :: LIST? OF NODE?, relationships :: LIST? OF RELATIONSHIP?)¦apoc.meta.graph - examines the full graph to create the meta-graph¦true¦ ¦procedure¦apoc.meta.graph.of¦apoc.meta.graph.of(graph = {} :: ANY?, config = {} :: MAP?) :: (nodes :: LIST? OF NODE?, relationships :: LIST? OF RELATIONSHIP?)¦apoc.meta.graph.of(\{graph}, \{config}) - examines a subset of the graph to provide a graph meta information¦true¦ ¦procedure¦apoc.meta.graphSample¦apoc.meta.graphSample(config = {} :: MAP?) :: (nodes :: LIST? OF NODE?, relationships :: LIST? OF RELATIONSHIP?)¦apoc.meta.graphSample() - examines the database statistics to build the meta graph, very fast, might report extra relationships¦true¦ @@ -184,18 +182,24 @@ ¦procedure¦apoc.metrics.list¦apoc.metrics.list() :: (name :: STRING?, lastUpdated :: INTEGER?)¦apoc.metrics.list() - get a list of available metrics¦false¦ ¦procedure¦apoc.metrics.storage¦apoc.metrics.storage(directorySetting :: STRING?) :: (setting :: STRING?, freeSpaceBytes :: INTEGER?, totalSpaceBytes :: INTEGER?, usableSpaceBytes :: INTEGER?, percentFree :: FLOAT?)¦apoc.metrics.storage(directorySetting) - retrieve storage metrics about the devices Neo4j uses for data storage. directorySetting may be any valid neo4j directory setting name, such as 'dbms.directories.data'. If null is provided as a directorySetting, you will get back all available directory settings. For a list of available directory settings, see the Neo4j operations manual reference on configuration settings. Directory settings are **not** paths, they are a neo4j.conf setting key name¦false¦ ¦procedure¦apoc.model.jdbc¦apoc.model.jdbc(jdbc :: STRING?, config = {} :: MAP?) :: (nodes :: LIST? OF NODE?, relationships :: LIST? OF RELATIONSHIP?)¦apoc.model.jdbc('key or url', {schema:'', write: , filters: { tables:[], views: [], columns: []}) YIELD nodes, relationships - load schema from relational database¦false¦xref::database-integration/database-modeling.adoc +¦procedure¦apoc.mongo.aggregate¦apoc.mongo.aggregate(uri :: STRING?, pipeline :: LIST? OF MAP?, config = {} :: MAP?) :: (value :: MAP?)¦apoc.mongo.aggregate(uri, pipeline, $config) yield value - perform an aggregate operation on mongodb collection¦false¦xref::database-integration/mongo.adoc +¦procedure¦apoc.mongo.count¦apoc.mongo.count(uri :: STRING?, query :: ANY?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.mongo.count(uri, query, $config) yield value - perform a count operation on mongodb collection¦false¦xref::database-integration/mongo.adoc +¦procedure¦apoc.mongo.delete¦apoc.mongo.delete(uri :: STRING?, query :: ANY?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.mongo.delete(uri, query, $config) - delete the given documents from the mongodb collection and returns the number of affected documents¦false¦xref::database-integration/mongo.adoc +¦procedure¦apoc.mongo.find¦apoc.mongo.find(uri :: STRING?, query = null :: ANY?, config = {} :: MAP?) :: (value :: MAP?)¦apoc.mongo.find(uri, query, $config) yield value - perform a find operation on mongodb collection¦false¦xref::database-integration/mongo.adoc +¦procedure¦apoc.mongo.insert¦apoc.mongo.insert(uri :: STRING?, documents :: LIST? OF ANY?, config = {} :: MAP?) :: VOID¦apoc.mongo.insert(uri, documents, $config) yield value - inserts the given documents into the mongodb collection¦false¦xref::database-integration/mongo.adoc +¦procedure¦apoc.mongo.update¦apoc.mongo.update(uri :: STRING?, query :: ANY?, update :: ANY?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.mongo.update(uri, query, update, $config) - updates the given documents from the mongodb collection and returns the number of affected documents¦false¦xref::database-integration/mongo.adoc ¦procedure¦apoc.mongodb.count¦apoc.mongodb.count(host :: STRING?, db :: STRING?, collection :: STRING?, query :: MAP?) :: (value :: INTEGER?)¦apoc.mongodb.count(host-or-key,db,collection,query) yield value - perform a find operation on mongodb collection¦false¦xref::database-integration/mongodb.adoc ¦procedure¦apoc.mongodb.delete¦apoc.mongodb.delete(host :: STRING?, db :: STRING?, collection :: STRING?, query :: MAP?) :: (value :: INTEGER?)¦apoc.mongodb.delete(host-or-key,db,collection,query) - delete the given documents from the mongodb collection and returns the number of affected documents¦false¦xref::database-integration/mongodb.adoc ¦procedure¦apoc.mongodb.find¦apoc.mongodb.find(host :: STRING?, db :: STRING?, collection :: STRING?, query :: MAP?, project :: MAP?, sort :: MAP?, compatibleValues = false :: BOOLEAN?, skip = 0 :: INTEGER?, limit = 0 :: INTEGER?, extractReferences = false :: BOOLEAN?, objectIdAsMap = true :: BOOLEAN?) :: (value :: MAP?)¦apoc.mongodb.find(host-or-key,db,collection,query,projection,sort,[compatibleValues=false|true],skip-or-null,limit-or-null,[extractReferences=false|true],[objectIdAsMap=true|false]) yield value - perform a find,project,sort operation on mongodb collection¦false¦xref::database-integration/mongodb.adoc ¦procedure¦apoc.mongodb.first¦apoc.mongodb.first(host :: STRING?, db :: STRING?, collection :: STRING?, query :: MAP?, compatibleValues = true :: BOOLEAN?, extractReferences = false :: BOOLEAN?, objectIdAsMap = true :: BOOLEAN?) :: (value :: MAP?)¦apoc.mongodb.first(host-or-key,db,collection,query,[compatibleValues=false|true],[extractReferences=false|true],[objectIdAsMap=true|false]) yield value - perform a first operation on mongodb collection¦false¦xref::database-integration/mongodb.adoc ¦procedure¦apoc.mongodb.get¦apoc.mongodb.get(host :: STRING?, db :: STRING?, collection :: STRING?, query :: MAP?, compatibleValues = false :: BOOLEAN?, skip = 0 :: INTEGER?, limit = 0 :: INTEGER?, extractReferences = false :: BOOLEAN?, objectIdAsMap = true :: BOOLEAN?) :: (value :: MAP?)¦apoc.mongodb.get(host-or-key,db,collection,query,[compatibleValues=false|true],skip-or-null,limit-or-null,[extractReferences=false|true],[objectIdAsMap=true|false]) yield value - perform a find operation on mongodb collection¦false¦xref::database-integration/mongodb.adoc -¦procedure¦apoc.mongodb.get.byObjectId¦apoc.mongodb.get.byObjectId(host :: STRING?, db :: STRING?, collection :: STRING?, objectIdValue :: STRING?, config = {} :: MAP?) :: (value :: MAP?)¦apoc.mongodb.get.byObjectId(hostOrKey, db, collection, objectIdValue, config(default:{})) - get the document by Object id value ¦true¦xref::database-integration/mongodb.adoc +¦procedure¦apoc.mongodb.get.byObjectId¦apoc.mongodb.get.byObjectId(host :: STRING?, db :: STRING?, collection :: STRING?, objectIdValue :: STRING?, config = {} :: MAP?) :: (value :: MAP?)¦apoc.mongodb.get.byObjectId(hostOrKey, db, collection, objectIdValue, config(default:{})) - get the document by Object id value¦false¦xref::database-integration/mongodb.adoc ¦procedure¦apoc.mongodb.insert¦apoc.mongodb.insert(host :: STRING?, db :: STRING?, collection :: STRING?, documents :: LIST? OF MAP?) :: VOID¦apoc.mongodb.insert(host-or-key,db,collection,documents) - inserts the given documents into the mongodb collection¦false¦xref::database-integration/mongodb.adoc ¦procedure¦apoc.mongodb.update¦apoc.mongodb.update(host :: STRING?, db :: STRING?, collection :: STRING?, query :: MAP?, update :: MAP?) :: (value :: INTEGER?)¦apoc.mongodb.update(host-or-key,db,collection,query,update) - updates the given documents from the mongodb collection and returns the number of affected documents¦false¦xref::database-integration/mongodb.adoc -¦procedure¦apoc.monitor.ids¦apoc.monitor.ids() :: (nodeIds :: INTEGER?, relIds :: INTEGER?, propIds :: INTEGER?, relTypeIds :: INTEGER?)¦apoc.monitor.ids() returns the object ids in use for this neo4j instance¦true¦xref::database-introspection/monitoring.adoc -¦procedure¦apoc.monitor.kernel¦apoc.monitor.kernel() :: (readOnly :: BOOLEAN?, kernelVersion :: STRING?, storeId :: STRING?, kernelStartTime :: STRING?, databaseName :: STRING?, storeLogVersion :: INTEGER?, storeCreationDate :: STRING?)¦apoc.monitor.kernel() returns informations about the neo4j kernel¦true¦xref::database-introspection/monitoring.adoc -¦procedure¦apoc.monitor.store¦apoc.monitor.store() :: (logSize :: INTEGER?, stringStoreSize :: INTEGER?, arrayStoreSize :: INTEGER?, relStoreSize :: INTEGER?, propStoreSize :: INTEGER?, totalStoreSize :: INTEGER?, nodeStoreSize :: INTEGER?)¦apoc.monitor.store() returns informations about the sizes of the different parts of the neo4j graph store¦true¦xref::database-introspection/monitoring.adoc -¦procedure¦apoc.monitor.tx¦apoc.monitor.tx() :: (rolledBackTx :: INTEGER?, peakTx :: INTEGER?, lastTxId :: INTEGER?, currentOpenedTx :: INTEGER?, totalOpenedTx :: INTEGER?, totalTx :: INTEGER?)¦apoc.monitor.tx() returns informations about the neo4j transaction manager¦true¦xref::database-introspection/monitoring.adoc +¦procedure¦apoc.monitor.ids¦apoc.monitor.ids() :: (nodeIds :: INTEGER?, relIds :: INTEGER?, propIds :: INTEGER?, relTypeIds :: INTEGER?)¦apoc.monitor.ids() returns the object ids in use for this neo4j instance¦false¦xref::database-introspection/monitoring.adoc +¦procedure¦apoc.monitor.kernel¦apoc.monitor.kernel() :: (readOnly :: BOOLEAN?, kernelVersion :: STRING?, storeId :: STRING?, kernelStartTime :: STRING?, databaseName :: STRING?, storeLogVersion :: INTEGER?, storeCreationDate :: STRING?)¦apoc.monitor.kernel() returns informations about the neo4j kernel¦false¦xref::database-introspection/monitoring.adoc +¦procedure¦apoc.monitor.store¦apoc.monitor.store() :: (logSize :: INTEGER?, stringStoreSize :: INTEGER?, arrayStoreSize :: INTEGER?, relStoreSize :: INTEGER?, propStoreSize :: INTEGER?, totalStoreSize :: INTEGER?, nodeStoreSize :: INTEGER?)¦apoc.monitor.store() returns informations about the sizes of the different parts of the neo4j graph store¦false¦xref::database-introspection/monitoring.adoc +¦procedure¦apoc.monitor.tx¦apoc.monitor.tx() :: (rolledBackTx :: INTEGER?, peakTx :: INTEGER?, lastTxId :: INTEGER?, currentOpenedTx :: INTEGER?, totalOpenedTx :: INTEGER?, totalTx :: INTEGER?)¦apoc.monitor.tx() returns informations about the neo4j transaction manager¦false¦xref::database-introspection/monitoring.adoc ¦procedure¦apoc.neighbors.athop¦apoc.neighbors.athop(node :: NODE?, types = :: STRING?, distance = 1 :: INTEGER?) :: (node :: NODE?)¦apoc.neighbors.athop(node, rel-direction-pattern, distance) - returns distinct nodes of the given relationships in the pattern at a distance, can use '>' or '<' for all outgoing or incoming relationships¦true¦xref::graph-querying/neighborhood.adoc ¦procedure¦apoc.neighbors.athop.count¦apoc.neighbors.athop.count(node :: NODE?, types = :: STRING?, distance = 1 :: INTEGER?) :: (value :: INTEGER?)¦apoc.neighbors.athop.count(node, rel-direction-pattern, distance) - returns distinct nodes of the given relationships in the pattern at a distance, can use '>' or '<' for all outgoing or incoming relationships¦true¦xref::graph-querying/neighborhood.adoc ¦procedure¦apoc.neighbors.byhop¦apoc.neighbors.byhop(node :: NODE?, types = :: STRING?, distance = 1 :: INTEGER?) :: (nodes :: LIST? OF NODE?)¦apoc.neighbors.byhop(node, rel-direction-pattern, distance) - returns distinct nodes of the given relationships in the pattern at each distance, can use '>' or '<' for all outgoing or incoming relationships¦true¦xref::graph-querying/neighborhood.adoc @@ -232,13 +236,44 @@ ¦procedure¦apoc.periodic.cancel¦apoc.periodic.cancel(name :: STRING?) :: (name :: STRING?, delay :: INTEGER?, rate :: INTEGER?, done :: BOOLEAN?, cancelled :: BOOLEAN?)¦apoc.periodic.cancel(name) - cancel job with the given name¦true¦ ¦procedure¦apoc.periodic.commit¦apoc.periodic.commit(statement :: STRING?, params = {} :: MAP?) :: (updates :: INTEGER?, executions :: INTEGER?, runtime :: INTEGER?, batches :: INTEGER?, failedBatches :: INTEGER?, batchErrors :: MAP?, failedCommits :: INTEGER?, commitErrors :: MAP?, wasTerminated :: BOOLEAN?)¦apoc.periodic.commit(statement,params) - runs the given statement in separate transactions until it returns 0¦true¦ ¦procedure¦apoc.periodic.countdown¦apoc.periodic.countdown(name :: STRING?, statement :: STRING?, rate :: INTEGER?) :: (name :: STRING?, delay :: INTEGER?, rate :: INTEGER?, done :: BOOLEAN?, cancelled :: BOOLEAN?)¦apoc.periodic.countdown('name',statement,repeat-rate-in-seconds) submit a repeatedly-called background statement until it returns 0¦true¦ -¦procedure¦apoc.periodic.iterate¦apoc.periodic.iterate(cypherIterate :: STRING?, cypherAction :: STRING?, config :: MAP?) :: (batches :: INTEGER?, total :: INTEGER?, timeTaken :: INTEGER?, committedOperations :: INTEGER?, failedOperations :: INTEGER?, failedBatches :: INTEGER?, retries :: INTEGER?, errorMessages :: MAP?, batch :: MAP?, operations :: MAP?, wasTerminated :: BOOLEAN?, failedParams :: MAP?)¦apoc.periodic.iterate('statement returning items', 'statement per item', {batchSize:1000,iterateList:true,parallel:false,params:{},concurrency:50,retries:0}) YIELD batches, total - run the second statement for each item returned by the first statement. Returns number of batches and total processed rows¦true¦ +¦procedure¦apoc.periodic.iterate¦apoc.periodic.iterate(cypherIterate :: STRING?, cypherAction :: STRING?, config :: MAP?) :: (batches :: INTEGER?, total :: INTEGER?, timeTaken :: INTEGER?, committedOperations :: INTEGER?, failedOperations :: INTEGER?, failedBatches :: INTEGER?, retries :: INTEGER?, errorMessages :: MAP?, batch :: MAP?, operations :: MAP?, wasTerminated :: BOOLEAN?, failedParams :: MAP?, updateStatistics :: MAP?)¦apoc.periodic.iterate('statement returning items', 'statement per item', {batchSize:1000,iterateList:true,parallel:false,params:{},concurrency:50,retries:0}) YIELD batches, total - run the second statement for each item returned by the first statement. Returns number of batches and total processed rows¦true¦ ¦procedure¦apoc.periodic.list¦apoc.periodic.list() :: (name :: STRING?, delay :: INTEGER?, rate :: INTEGER?, done :: BOOLEAN?, cancelled :: BOOLEAN?)¦apoc.periodic.list - list all jobs¦true¦ ¦procedure¦apoc.periodic.repeat¦apoc.periodic.repeat(name :: STRING?, statement :: STRING?, rate :: INTEGER?, config = {} :: MAP?) :: (name :: STRING?, delay :: INTEGER?, rate :: INTEGER?, done :: BOOLEAN?, cancelled :: BOOLEAN?)¦apoc.periodic.repeat('name',statement,repeat-rate-in-seconds, config) submit a repeatedly-called background statement. Fourth parameter 'config' is optional and can contain 'params' entry for nested statement.¦true¦ -¦procedure¦apoc.periodic.rock_n_roll¦apoc.periodic.rock_n_roll(cypherIterate :: STRING?, cypherAction :: STRING?, batchSize :: INTEGER?) :: (batches :: INTEGER?, total :: INTEGER?, timeTaken :: INTEGER?, committedOperations :: INTEGER?, failedOperations :: INTEGER?, failedBatches :: INTEGER?, retries :: INTEGER?, errorMessages :: MAP?, batch :: MAP?, operations :: MAP?, wasTerminated :: BOOLEAN?, failedParams :: MAP?)¦apoc.periodic.rock_n_roll('some cypher for iteration', 'some cypher as action on each iteration', 10000) YIELD batches, total - run the action statement in batches over the iterator statement's results in a separate thread. Returns number of batches and total processed rows¦false¦xref::graph-updates/periodic-execution.adoc#periodic-rock-n-roll +¦procedure¦apoc.periodic.rock_n_roll¦apoc.periodic.rock_n_roll(cypherIterate :: STRING?, cypherAction :: STRING?, batchSize :: INTEGER?) :: (batches :: INTEGER?, total :: INTEGER?, timeTaken :: INTEGER?, committedOperations :: INTEGER?, failedOperations :: INTEGER?, failedBatches :: INTEGER?, retries :: INTEGER?, errorMessages :: MAP?, batch :: MAP?, operations :: MAP?, wasTerminated :: BOOLEAN?, failedParams :: MAP?, updateStatistics :: MAP?)¦apoc.periodic.rock_n_roll('some cypher for iteration', 'some cypher as action on each iteration', 10000) YIELD batches, total - run the action statement in batches over the iterator statement's results in a separate thread. Returns number of batches and total processed rows¦false¦xref::graph-updates/periodic-execution.adoc#periodic-rock-n-roll ¦procedure¦apoc.periodic.rock_n_roll_while¦apoc.periodic.rock_n_roll_while(cypherLoop :: STRING?, cypherIterate :: STRING?, cypherAction :: STRING?, batchSize :: INTEGER?) :: (loop :: ANY?, batches :: INTEGER?, total :: INTEGER?)¦apoc.periodic.rock_n_roll_while('some cypher for knowing when to stop', 'some cypher for iteration', 'some cypher as action on each iteration', 10000) YIELD batches, total - run the action statement in batches over the iterator statement's results in a separate thread. Returns number of batches and total processed rows¦false¦ -¦procedure¦apoc.periodic.submit¦apoc.periodic.submit(name :: STRING?, statement :: STRING?) :: (name :: STRING?, delay :: INTEGER?, rate :: INTEGER?, done :: BOOLEAN?, cancelled :: BOOLEAN?)¦apoc.periodic.submit('name',statement) - submit a one-off background statement¦true¦ +¦procedure¦apoc.periodic.submit¦apoc.periodic.submit(name :: STRING?, statement :: STRING?, params = {} :: MAP?) :: (name :: STRING?, delay :: INTEGER?, rate :: INTEGER?, done :: BOOLEAN?, cancelled :: BOOLEAN?)¦apoc.periodic.submit('name',statement,params) - submit a one-off background statement; parameter 'params' is optional and can contain query parameters for Cypher statement¦true¦ ¦procedure¦apoc.periodic.truncate¦apoc.periodic.truncate(config = {} :: MAP?) :: VOID¦apoc.periodic.truncate(\{config}) - removes all entities (and optionally indexes and constraints) from db using the apoc.periodic.iterate under the hood¦true¦ +¦procedure¦apoc.redis.append¦apoc.redis.append(uri :: STRING?, key :: ANY?, value :: ANY?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.append(uri, key, value, \{config}) | Execute the 'APPEND key value' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.configGet¦apoc.redis.configGet(uri :: STRING?, parameter :: STRING?, config = {} :: MAP?) :: (value :: MAP?)¦apoc.redis.configGet(uri, parameter, \{config}) | Execute the 'CONFIG GET parameter' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.configSet¦apoc.redis.configSet(uri :: STRING?, parameter :: STRING?, value :: STRING?, config = {} :: MAP?) :: (value :: ANY?)¦apoc.redis.configSet(uri, parameter, \{config}) | Execute the 'CONFIG SET parameter value' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.copy¦apoc.redis.copy(uri :: STRING?, source :: ANY?, destination :: ANY?, config = {} :: MAP?) :: (value :: BOOLEAN?)¦apoc.redis.copy(uri, source, destination, \{config}) | Execute the 'COPY source destination' command and returns true if source was copied and false otherwise¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.eval¦apoc.redis.eval(uri :: STRING?, script :: STRING?, outputType :: STRING?, keys :: LIST? OF ANY?, values :: LIST? OF ANY?, config = {} :: MAP?) :: (value :: ANY?)¦apoc.redis.eval(uri, script, outputType, keys, values, \{config}) | Execute the 'EVAL script' command. In the parameters provided to the procedure, keys are bound to the KEYS[n] like special array of the Lua script and values are bound to the ARGV[n] like special array of the Lua script.¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.exists¦apoc.redis.exists(uri :: STRING?, keys :: LIST? OF ANY?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.exists(uri, keys, \{config}) | Execute the 'EXISTS keys' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.get¦apoc.redis.get(uri :: STRING?, key :: ANY?, config = {} :: MAP?) :: (value :: ANY?)¦apoc.redis.get(uri, key, \{config}) | Execute the 'GET key' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.hdel¦apoc.redis.hdel(uri :: STRING?, key :: ANY?, fields :: LIST? OF ANY?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.hdel(uri, key, fields, \{config}) | Execute the 'HDEL key fields' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.hexists¦apoc.redis.hexists(uri :: STRING?, key :: ANY?, field :: ANY?, config = {} :: MAP?) :: (value :: BOOLEAN?)¦apoc.redis.hexists(uri, key, field, \{config}) | Execute the 'HEXISTS key field' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.hget¦apoc.redis.hget(uri :: STRING?, key :: ANY?, field :: ANY?, config = {} :: MAP?) :: (value :: ANY?)¦apoc.redis.hget(uri, key, field, \{config}) | Execute the 'HGET key field' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.hgetall¦apoc.redis.hgetall(uri :: STRING?, key :: ANY?, config = {} :: MAP?) :: (value :: MAP?)¦apoc.redis.hgetall(uri, key, \{config}) | Execute the 'HGETALL key' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.hincrby¦apoc.redis.hincrby(uri :: STRING?, key :: ANY?, field :: ANY?, amount :: INTEGER?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.hincrby(uri, key, field, amount, \{config}) | Execute the 'HINCRBY key field amount' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.hset¦apoc.redis.hset(uri :: STRING?, key :: ANY?, field :: ANY?, value :: ANY?, config = {} :: MAP?) :: (value :: BOOLEAN?)¦apoc.redis.hset(uri, key, field, value, \{config}) | Execute the 'HSET key field value' command and returns true if it is a new field in the hash or false if the field already exists¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.incrby¦apoc.redis.incrby(uri :: STRING?, key :: ANY?, amount :: INTEGER?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.incrby(uri, key, amount, \{config}) | Execute the 'INCRBY key increment' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.info¦apoc.redis.info(uri :: STRING?, config = {} :: MAP?) :: (value :: ANY?)¦apoc.redis.info(uri, \{config}) | Execute the 'INFO' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.lrange¦apoc.redis.lrange(uri :: STRING?, key :: ANY?, start :: INTEGER?, stop :: INTEGER?, config = {} :: MAP?) :: (value :: LIST? OF ANY?)¦apoc.redis.lrange(uri, key, start, stop, \{config}) | Execute the 'LRANGE key start stop' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.persist¦apoc.redis.persist(uri :: STRING?, key :: ANY?, config = {} :: MAP?) :: (value :: BOOLEAN?)¦apoc.redis.persist(uri, key, \{config}) | Execute the 'PERSIST key' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.pexpire¦apoc.redis.pexpire(uri :: STRING?, key :: ANY?, time :: INTEGER?, isExpireAt :: BOOLEAN?, config = {} :: MAP?) :: (value :: BOOLEAN?)¦apoc.redis.pexpire(uri, key, time, isExpireAt \{config}) | Execute the 'PEXPIRE key time' command, or the 'PEPXPIREAT' if isExpireAt=true¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.pop¦apoc.redis.pop(uri :: STRING?, key :: ANY?, config = {} :: MAP?) :: (value :: ANY?)¦apoc.redis.pop(uri, key, \{config}) | Execute the 'LPOP key' command, or the 'RPOP' if config right=true (default)¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.pttl¦apoc.redis.pttl(uri :: STRING?, key :: ANY?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.pttl(uri, key, \{config}) | Execute the 'PTTL key' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.push¦apoc.redis.push(uri :: STRING?, key :: ANY?, value :: LIST? OF ANY?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.push(uri, key, values, \{config}) | Execute the 'LPUSH key field values' command, or the 'RPUSH' if config right=true (default)¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.sadd¦apoc.redis.sadd(uri :: STRING?, key :: ANY?, members :: LIST? OF ANY?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.sadd(uri, key, members, \{config}) | Execute the 'SADD key members' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.scard¦apoc.redis.scard(uri :: STRING?, key :: ANY?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.scard(uri, key, \{config}) | Execute the 'SCARD key' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.getSet¦apoc.redis.getSet(uri :: STRING?, key :: ANY?, value :: ANY?, config = {} :: MAP?) :: (value :: ANY?)¦apoc.redis.getSet(uri, key, value, \{config}) | Execute the 'SET key value' command and return old value stored (or null if did not exists)¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.smembers¦apoc.redis.smembers(uri :: STRING?, key :: ANY?, config = {} :: MAP?) :: (value :: LIST? OF ANY?)¦apoc.redis.smembers(uri, key, \{config}) | Execute the 'SMEMBERS key' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.spop¦apoc.redis.spop(uri :: STRING?, key :: ANY?, config = {} :: MAP?) :: (value :: ANY?)¦apoc.redis.spop(uri, key, \{config}) | Execute the 'SPOP key' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.sunion¦apoc.redis.sunion(uri :: STRING?, keys :: LIST? OF ANY?, config = {} :: MAP?) :: (value :: LIST? OF ANY?)¦apoc.redis.sunion(uri, keys, \{config}) | Execute the 'SUNION keys' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.zadd¦apoc.redis.zadd(uri :: STRING?, key :: ANY?, value :: LIST? OF ANY?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.zadd(uri, keys, scoresAndMembers, \{config}) | Execute the 'ZADD key scoresAndMembers' command, where scoresAndMembers is a list of score,member,score,member,...¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.zcard¦apoc.redis.zcard(uri :: STRING?, key :: ANY?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.zcard(uri, key, \{config}) | Execute the 'ZCARD key' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.zrangebyscore¦apoc.redis.zrangebyscore(uri :: STRING?, key :: ANY?, min :: INTEGER?, max :: INTEGER?, config = {} :: MAP?) :: (value :: LIST? OF ANY?)¦apoc.redis.zrangebyscore(uri, key, min, max, \{config}) | Execute the 'ZRANGEBYSCORE key min max' command¦true¦xref::database-integration/redis.adoc +¦procedure¦apoc.redis.zrem¦apoc.redis.zrem(uri :: STRING?, key :: ANY?, members :: LIST? OF ANY?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.zrem(uri, key, members, \{config}) | Execute the 'ZREM key members' command¦true¦xref::database-integration/redis.adoc ¦procedure¦apoc.refactor.categorize¦apoc.refactor.categorize(sourceKey :: STRING?, type :: STRING?, outgoing :: BOOLEAN?, label :: STRING?, targetKey :: STRING?, copiedKeys :: LIST? OF STRING?, batchSize :: INTEGER?) :: VOID¦apoc.refactor.categorize(sourceKey, type, outgoing, label, targetKey, copiedKeys, batchSize) turn each unique propertyKey into a category node and connect to it¦true¦ ¦procedure¦apoc.refactor.cloneNodes¦apoc.refactor.cloneNodes(nodes :: LIST? OF NODE?, withRelationships = false :: BOOLEAN?, skipProperties = [] :: LIST? OF STRING?) :: (input :: INTEGER?, output :: NODE?, error :: STRING?)¦apoc.refactor.cloneNodes([node1,node2,...]) clone nodes with their labels and properties¦true¦ ¦procedure¦apoc.refactor.cloneNodesWithRelationships¦apoc.refactor.cloneNodesWithRelationships(nodes :: LIST? OF NODE?) :: (input :: INTEGER?, output :: NODE?, error :: STRING?)¦apoc.refactor.cloneNodesWithRelationships([node1,node2,...]) clone nodes with their labels, properties and relationships¦true¦xref::graph-updates/graph-refactoring/clone-nodes.adoc @@ -258,8 +293,8 @@ ¦procedure¦apoc.refactor.rename.typeProperty¦apoc.refactor.rename.typeProperty(oldName :: STRING?, newName :: STRING?, rels = [] :: LIST? OF RELATIONSHIP?, config = {} :: MAP?) :: (batches :: INTEGER?, total :: INTEGER?, timeTaken :: INTEGER?, committedOperations :: INTEGER?, failedOperations :: INTEGER?, failedBatches :: INTEGER?, retries :: INTEGER?, errorMessages :: MAP?, batch :: MAP?, operations :: MAP?, constraints :: LIST? OF STRING?, indexes :: LIST? OF STRING?)¦apoc.refactor.rename.typeProperty(oldName, newName, [rels], \{config}) | rename all relationship's property from 'oldName' to 'newName'. If 'rels' is provided renaming is applied to this set only¦true¦xref::graph-updates/graph-refactoring/rename-label-type-property.adoc ¦procedure¦apoc.refactor.setType¦apoc.refactor.setType(relationship :: RELATIONSHIP?, newType :: STRING?) :: (input :: INTEGER?, output :: RELATIONSHIP?, error :: STRING?)¦apoc.refactor.setType(rel, 'NEW-TYPE') change relationship-type¦true¦xref::graph-updates/graph-refactoring/set-relationship-type.adoc ¦procedure¦apoc.refactor.to¦apoc.refactor.to(relationship :: RELATIONSHIP?, newNode :: NODE?) :: (input :: INTEGER?, output :: RELATIONSHIP?, error :: STRING?)¦ apoc.refactor.to(rel, endNode) redirect relationship to use new end-node¦true¦xref::graph-updates/graph-refactoring/redirect-relationship.adoc -¦procedure¦apoc.schema.assert¦apoc.schema.assert(indexes :: MAP?, constraints :: MAP?, dropExisting = true :: BOOLEAN?) :: (label :: STRING?, key :: STRING?, keys :: LIST? OF STRING?, unique :: BOOLEAN?, action :: STRING?)¦apoc.schema.assert({indexLabel:[[indexKeys]], ...}, {constraintLabel:[constraintKeys], ...}, dropExisting : true) yield label, key, keys, unique, action - drops all other existing indexes and constraints when `dropExisting` is `true` (default is `true`), and asserts that at the end of the operation the given indexes and unique constraints are there, each label:key pair is considered one constraint/label. Non-constraint indexes can define compound indexes with label:[key1,key2...] pairings.¦true¦xref::indexes/schema-index-operations.adoc -¦procedure¦apoc.schema.nodes¦apoc.schema.nodes(config = {} :: MAP?) :: (name :: STRING?, label :: STRING?, properties :: LIST? OF STRING?, status :: STRING?, type :: STRING?, failure :: STRING?, populationProgress :: FLOAT?, size :: INTEGER?, valuesSelectivity :: FLOAT?, userDescription :: STRING?)¦CALL apoc.schema.nodes([config]) yield name, label, properties, status, type¦true¦xref::indexes/schema-index-operations.adoc +¦procedure¦apoc.schema.assert¦apoc.schema.assert(indexes :: MAP?, constraints :: MAP?, dropExisting = true :: BOOLEAN?) :: (label :: ANY?, key :: STRING?, keys :: LIST? OF STRING?, unique :: BOOLEAN?, action :: STRING?)¦apoc.schema.assert({indexLabel:[[indexKeys]], ...}, {constraintLabel:[constraintKeys], ...}, dropExisting : true) yield label, key, keys, unique, action - drops all other existing indexes and constraints when `dropExisting` is `true` (default is `true`), and asserts that at the end of the operation the given indexes and unique constraints are there, each label:key pair is considered one constraint/label. Non-constraint indexes can define compound indexes with label:[key1,key2...] pairings.¦true¦xref::indexes/schema-index-operations.adoc +¦procedure¦apoc.schema.nodes¦apoc.schema.nodes(config = {} :: MAP?) :: (name :: STRING?, label :: ANY?, properties :: LIST? OF STRING?, status :: STRING?, type :: STRING?, failure :: STRING?, populationProgress :: FLOAT?, size :: INTEGER?, valuesSelectivity :: FLOAT?, userDescription :: STRING?)¦CALL apoc.schema.nodes([config]) yield name, label, properties, status, type¦true¦xref::indexes/schema-index-operations.adoc ¦procedure¦apoc.schema.properties.distinct¦apoc.schema.properties.distinct(label :: STRING?, key :: STRING?) :: (value :: LIST? OF ANY?)¦apoc.schema.properties.distinct(label, key) - quickly returns all distinct values for a given key¦true¦xref::indexes/schema-index-operations.adoc ¦procedure¦apoc.schema.properties.distinctCount¦apoc.schema.properties.distinctCount(label = :: STRING?, key = :: STRING?) :: (label :: STRING?, key :: STRING?, value :: ANY?, count :: INTEGER?)¦apoc.schema.properties.distinctCount([label], [key]) YIELD label, key, value, count - quickly returns all distinct values and counts for a given key¦true¦xref::indexes/schema-index-operations.adoc ¦procedure¦apoc.schema.relationships¦apoc.schema.relationships(config = {} :: MAP?) :: (name :: STRING?, type :: STRING?, properties :: LIST? OF STRING?, status :: STRING?)¦CALL apoc.schema.relationships([config]) yield name, startLabel, type, endLabel, properties, status¦true¦xref::indexes/schema-index-operations.adoc @@ -271,7 +306,7 @@ ¦procedure¦apoc.spatial.geocode¦apoc.spatial.geocode(location :: STRING?, maxResults = 100 :: INTEGER?, quotaException = false :: BOOLEAN?) :: (location :: MAP?, data :: MAP?, latitude :: FLOAT?, longitude :: FLOAT?, description :: STRING?)¦apoc.spatial.geocode('address') YIELD location, latitude, longitude, description, osmData - look up geographic location of address from a geocoding service (the default one is OpenStreetMap)¦true¦xref::misc/spatial.adoc ¦procedure¦apoc.spatial.geocodeOnce¦apoc.spatial.geocodeOnce(location :: STRING?) :: (location :: MAP?, data :: MAP?, latitude :: FLOAT?, longitude :: FLOAT?, description :: STRING?)¦apoc.spatial.geocodeOnce('address') YIELD location, latitude, longitude, description, osmData - look up geographic location of address from a geocoding service (the default one is OpenStreetMap)¦true¦xref::misc/spatial.adoc ¦procedure¦apoc.spatial.reverseGeocode¦apoc.spatial.reverseGeocode(latitude :: FLOAT?, longitude :: FLOAT?, quotaException = false :: BOOLEAN?) :: (location :: MAP?, data :: MAP?, latitude :: FLOAT?, longitude :: FLOAT?, description :: STRING?)¦apoc.spatial.reverseGeocode(latitude,longitude) YIELD location, latitude, longitude, description - look up address from latitude and longitude from a geocoding service (the default one is OpenStreetMap)¦true¦xref::misc/spatial.adoc -¦procedure¦apoc.spatial.sortByDistance¦apoc.spatial.sortByDistance(paths :: LIST? OF PATH?) :: (path :: PATH?, distance :: FLOAT?)¦apoc.spatial.sortPathsByDistance(List) sort the given paths based on the geo informations (lat/long) in ascending order¦true¦xref::misc/spatial.adoc +¦procedure¦apoc.spatial.sortByDistance¦apoc.spatial.sortByDistance(paths :: LIST? OF PATH?) :: (path :: PATH?, distance :: FLOAT?)¦apoc.spatial.sortByDistance(List) sort the given paths based on the geo informations (lat/long) in ascending order¦true¦xref::misc/spatial.adoc ¦procedure¦apoc.static.get¦apoc.static.get(key :: STRING?) :: (value :: ANY?)¦apoc.static.get(name) - returns statically stored value from config (apoc.static.) or server lifetime storage¦false¦xref::misc/static-values.adoc ¦procedure¦apoc.static.list¦apoc.static.list(prefix :: STRING?) :: (key :: STRING?, value :: ANY?)¦apoc.static.list(prefix) - returns statically stored values from config (apoc.static..*) or server lifetime storage¦false¦xref::misc/static-values.adoc ¦procedure¦apoc.static.set¦apoc.static.set(key :: STRING?, value :: ANY?) :: (value :: ANY?)¦apoc.static.set(name, value) - stores value under key for server lifetime storage, returns previously stored or configured value¦false¦xref::misc/static-values.adoc @@ -354,6 +389,7 @@ for the provided `label` and `uuidProperty`, in case the UUID handler is already ¦function¦apoc.coll.sortMulti¦apoc.coll.sortMulti(coll :: LIST? OF MAP?, orderFields = [] :: LIST? OF STRING?, limit = -1 :: INTEGER?, skip = 0 :: INTEGER?) :: (LIST? OF ANY?)¦apoc.coll.sortMulti(coll, ['^name','age'],[limit],[skip]) - sort list of maps by several sort fields (ascending with ^ prefix) and optionally applies limit and skip¦true¦ ¦function¦apoc.coll.sortNodes¦apoc.coll.sortNodes(coll :: LIST? OF NODE?, prop :: STRING?) :: (LIST? OF ANY?)¦apoc.coll.sortNodes([nodes], 'name') sort nodes by property¦true¦ ¦function¦apoc.coll.sortText¦apoc.coll.sortText(coll :: LIST? OF STRING?, conf = {} :: MAP?) :: (LIST? OF ANY?)¦apoc.coll.sortText(coll) sort on string based collections¦true¦ +¦function¦apoc.coll.stdev¦apoc.coll.stdev(list :: LIST? OF NUMBER?, isBiasCorrected = true :: BOOLEAN?) :: (NUMBER?)¦apoc.coll.stdev(list, isBiasCorrected) - returns the sample or population standard deviation with isBiasCorrected true or false respectively. For example apoc.coll.stdev([10, 12, 23]) return 7¦true¦ ¦function¦apoc.coll.subtract¦apoc.coll.subtract(first :: LIST? OF ANY?, second :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.subtract(first, second) - returns unique set of first list with all elements of second list removed¦true¦ ¦function¦apoc.coll.sum¦apoc.coll.sum(numbers :: LIST? OF NUMBER?) :: (FLOAT?)¦apoc.coll.sum([0.5,1,2.3])¦true¦ ¦function¦apoc.coll.sumLongs¦apoc.coll.sumLongs(numbers :: LIST? OF NUMBER?) :: (INTEGER?)¦apoc.coll.sumLongs([1,3,3])¦true¦ @@ -361,10 +397,10 @@ for the provided `label` and `uuidProperty`, in case the UUID handler is already ¦function¦apoc.coll.union¦apoc.coll.union(first :: LIST? OF ANY?, second :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.union(first, second) - creates the distinct union of the 2 lists¦true¦ ¦function¦apoc.coll.unionAll¦apoc.coll.unionAll(first :: LIST? OF ANY?, second :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.unionAll(first, second) - creates the full union with duplicates of the two lists¦true¦ ¦function¦apoc.coll.zip¦apoc.coll.zip(list1 :: LIST? OF ANY?, list2 :: LIST? OF ANY?) :: (LIST? OF ANY?)¦apoc.coll.zip([list1],[list2])¦true¦ -¦function¦apoc.convert.fromJsonList¦apoc.convert.fromJsonList(list :: STRING?, path = :: STRING?) :: (LIST? OF ANY?)¦apoc.convert.fromJsonList('[1,2,3]'[,'json-path'])¦true¦ -¦function¦apoc.convert.fromJsonMap¦apoc.convert.fromJsonMap(map :: STRING?, path = :: STRING?) :: (MAP?)¦apoc.convert.fromJsonMap('{"a":42,"b":"foo","c":[1,2,3]}'[,'json-path'])¦true¦ -¦function¦apoc.convert.getJsonProperty¦apoc.convert.getJsonProperty(node :: NODE?, key :: STRING?, path = :: STRING?) :: (ANY?)¦apoc.convert.getJsonProperty(node,key[,'json-path']) - converts serialized JSON in property back to original object¦true¦ -¦function¦apoc.convert.getJsonPropertyMap¦apoc.convert.getJsonPropertyMap(node :: NODE?, key :: STRING?, path = :: STRING?) :: (MAP?)¦apoc.convert.getJsonPropertyMap(node,key[,'json-path']) - converts serialized JSON in property back to map¦true¦ +¦function¦apoc.convert.fromJsonList¦apoc.convert.fromJsonList(list :: STRING?, path = :: STRING?, pathOptions = null :: LIST? OF STRING?) :: (LIST? OF ANY?)¦apoc.convert.fromJsonList('[1,2,3]'[,'json-path', 'path-options'])¦true¦ +¦function¦apoc.convert.fromJsonMap¦apoc.convert.fromJsonMap(map :: STRING?, path = :: STRING?, pathOptions = null :: LIST? OF STRING?) :: (MAP?)¦apoc.convert.fromJsonMap('{"a":42,"b":"foo","c":[1,2,3]}'[,'json-path', 'path-options'])¦true¦ +¦function¦apoc.convert.getJsonProperty¦apoc.convert.getJsonProperty(node :: NODE?, key :: STRING?, path = :: STRING?, pathOptions = null :: LIST? OF STRING?) :: (ANY?)¦apoc.convert.getJsonProperty(node,key[,'json-path', 'path-options']) - converts serialized JSON in property back to original object¦true¦ +¦function¦apoc.convert.getJsonPropertyMap¦apoc.convert.getJsonPropertyMap(node :: NODE?, key :: STRING?, path = :: STRING?, pathOptions = null :: LIST? OF STRING?) :: (MAP?)¦apoc.convert.getJsonPropertyMap(node,key[,'json-path', 'path-options']) - converts serialized JSON in property back to map¦true¦ ¦function¦apoc.convert.toBoolean¦apoc.convert.toBoolean(bool :: ANY?) :: (BOOLEAN?)¦apoc.convert.toBoolean(value) | tries it's best to convert the value to a boolean¦true¦ ¦function¦apoc.convert.toBooleanList¦apoc.convert.toBooleanList(list :: ANY?) :: (LIST? OF ANY?)¦apoc.convert.toBooleanList(value) | tries it's best to convert the value to a list of booleans¦true¦ ¦function¦apoc.convert.toFloat¦apoc.convert.toFloat(object :: ANY?) :: (FLOAT?)¦apoc.convert.toFloat(value) | tries it's best to convert the value to a float¦true¦ @@ -389,26 +425,26 @@ for the provided `label` and `uuidProperty`, in case the UUID handler is already ¦function¦apoc.cypher.runFirstColumnMany¦apoc.cypher.runFirstColumnMany(cypher :: STRING?, params :: MAP?) :: (LIST? OF ANY?)¦apoc.cypher.runFirstColumnMany(statement, params) - executes statement with given parameters, returns first column only collected into a list, params are available as identifiers¦true¦xref::cypher-execution/index.adoc ¦function¦apoc.cypher.runFirstColumnSingle¦apoc.cypher.runFirstColumnSingle(cypher :: STRING?, params :: MAP?) :: (ANY?)¦apoc.cypher.runFirstColumnSingle(statement, params) - executes statement with given parameters, returns first element of the first column only, params are available as identifiers¦true¦xref::cypher-execution/index.adoc ¦function¦apoc.data.domain¦apoc.data.domain(url_or_email_address :: STRING?) :: (STRING?)¦apoc.data.domain('url_or_email_address') YIELD domain - extract the domain name from a url or an email address. If nothing was found, yield null.¦true¦ -¦function¦apoc.data.email¦apoc.data.email(email_address :: STRING?) :: (MAP?)¦apoc.data.email('email_address') as {personal,user,domain} - extract the personal name, user and domain as a map¦true¦ +¦function¦apoc.data.email¦apoc.data.email(email_address :: STRING?) :: (MAP?)¦apoc.data.email('email_address') as {personal,user,domain} - extract the personal name, user and domain as a map¦false¦ ¦function¦apoc.data.url¦apoc.data.url(url :: STRING?) :: (MAP?)¦apoc.data.url('url') as {protocol,host,port,path,query,file,anchor,user} | turn URL into map structure¦true¦ -¦function¦apoc.date.add¦apoc.date.add(time :: INTEGER?, unit :: STRING?, addValue :: INTEGER?, addUnit :: STRING?) :: (INTEGER?)¦apoc.date.add(12345, 'ms', -365, 'd') given a timestamp in one time unit, adds a value of the specified time unit¦true¦ -¦function¦apoc.date.convert¦apoc.date.convert(time :: INTEGER?, unit :: STRING?, toUnit :: STRING?) :: (INTEGER?)¦apoc.date.convert(12345, 'ms', 'd') convert a timestamp in one time unit into one of a different time unit¦true¦ -¦function¦apoc.date.convertFormat¦apoc.date.convertFormat(temporal :: STRING?, currentFormat :: STRING?, convertTo = yyyy-MM-dd :: STRING?) :: (STRING?)¦apoc.date.convertFormat('Tue, 14 May 2019 14:52:06 -0400', 'rfc_1123_date_time', 'iso_date_time') convert a String of one date format into a String of another date format.¦true¦ +¦function¦apoc.date.add¦apoc.date.add(time :: INTEGER?, unit :: STRING?, addValue :: INTEGER?, addUnit :: STRING?) :: (INTEGER?)¦apoc.date.add(12345, 'ms', -365, 'd') - given a timestamp in one time unit, adds a value of the specified time unit¦true¦ +¦function¦apoc.date.convert¦apoc.date.convert(time :: INTEGER?, unit :: STRING?, toUnit :: STRING?) :: (INTEGER?)¦apoc.date.convert(12345, 'ms', 'd') - convert a timestamp in one time unit into one of a different time unit¦true¦ +¦function¦apoc.date.convertFormat¦apoc.date.convertFormat(temporal :: STRING?, currentFormat :: STRING?, convertTo = yyyy-MM-dd :: STRING?) :: (STRING?)¦apoc.date.convertFormat('Tue, 14 May 2019 14:52:06 -0400', 'rfc_1123_date_time', 'iso_date_time') - convert a String of one date format into a String of another date format.¦true¦ ¦function¦apoc.date.currentTimestamp¦apoc.date.currentTimestamp() :: (INTEGER?)¦apoc.date.currentTimestamp() - returns System.currentTimeMillis() at the time it was called. The value is current throughout transaction execution, and is different from Cypher’s timestamp() function, which does not update within a transaction.¦true¦ ¦function¦apoc.date.field¦apoc.date.field(time :: INTEGER?, unit = d :: STRING?, timezone = UTC :: STRING?) :: (INTEGER?)¦apoc.date.field(12345,('ms|s|m|h|d|month|year'),('TZ')¦true¦ ¦function¦apoc.date.fields¦apoc.date.fields(date :: STRING?, pattern = yyyy-MM-dd HH:mm:ss :: STRING?) :: (MAP?)¦apoc.date.fields('2012-12-23',('yyyy-MM-dd')) - return columns and a map representation of date parsed with the given format with entries for years,months,weekdays,days,hours,minutes,seconds,zoneid¦true¦ -¦function¦apoc.date.format¦apoc.date.format(time :: INTEGER?, unit = ms :: STRING?, format = yyyy-MM-dd HH:mm:ss :: STRING?, timezone = :: STRING?) :: (STRING?)¦apoc.date.format(12345,('ms|s|m|h|d'),('yyyy-MM-dd HH:mm:ss zzz'),('TZ')) get string representation of time value optionally using the specified unit (default ms) using specified format (default ISO) and specified time zone (default current TZ)¦true¦ -¦function¦apoc.date.fromISO8601¦apoc.date.fromISO8601(time :: STRING?) :: (INTEGER?)¦apoc.date.fromISO8601('yyyy-MM-ddTHH:mm:ss.SSSZ') return number representation of time in EPOCH format¦true¦ -¦function¦apoc.date.parse¦apoc.date.parse(time :: STRING?, unit = ms :: STRING?, format = yyyy-MM-dd HH:mm:ss :: STRING?, timezone = :: STRING?) :: (INTEGER?)¦apoc.date.parse('2012-12-23','ms|s|m|h|d','yyyy-MM-dd') parse date string using the specified format into the specified time unit¦true¦ -¦function¦apoc.date.parseAsZonedDateTime¦apoc.date.parseAsZonedDateTime(time :: STRING?, format = yyyy-MM-dd HH:mm:ss :: STRING?, timezone = UTC :: STRING?) :: (DATETIME?)¦apoc.date.parseAsZonedDateTime('2012-12-23 23:59:59','yyyy-MM-dd HH:mm:ss', 'UTC-hour-offset') parse date string using the specified format to specified timezone¦true¦ -¦function¦apoc.date.systemTimezone¦apoc.date.systemTimezone() :: (STRING?)¦apoc.date.systemTimezone() returns the system timezone display name¦true¦ -¦function¦apoc.date.toISO8601¦apoc.date.toISO8601(time :: INTEGER?, unit = ms :: STRING?) :: (STRING?)¦apoc.date.toISO8601(12345,('ms|s|m|h|d') return string representation of time in ISO8601 format¦true¦ -¦function¦apoc.date.toYears¦apoc.date.toYears(value :: ANY?, format = yyyy-MM-dd HH:mm:ss :: STRING?) :: (FLOAT?)¦toYears(timestamp) or toYears(date[,format]) converts timestamp into floating point years¦true¦ +¦function¦apoc.date.format¦apoc.date.format(time :: INTEGER?, unit = ms :: STRING?, format = yyyy-MM-dd HH:mm:ss :: STRING?, timezone = :: STRING?) :: (STRING?)¦apoc.date.format(12345,('ms|s|m|h|d'),('yyyy-MM-dd HH:mm:ss zzz'),('TZ')) - get string representation of time value optionally using the specified unit (default ms) using specified format (default ISO) and specified time zone (default current TZ)¦true¦ +¦function¦apoc.date.fromISO8601¦apoc.date.fromISO8601(time :: STRING?) :: (INTEGER?)¦apoc.date.fromISO8601('yyyy-MM-ddTHH:mm:ss.SSSZ') - return number representation of time in EPOCH format¦true¦ +¦function¦apoc.date.parse¦apoc.date.parse(time :: STRING?, unit = ms :: STRING?, format = yyyy-MM-dd HH:mm:ss :: STRING?, timezone = :: STRING?) :: (INTEGER?)¦apoc.date.parse('2012-12-23','ms|s|m|h|d','yyyy-MM-dd') - parse date string using the specified format into the specified time unit¦true¦ +¦function¦apoc.date.parseAsZonedDateTime¦apoc.date.parseAsZonedDateTime(time :: STRING?, format = yyyy-MM-dd HH:mm:ss :: STRING?, timezone = UTC :: STRING?) :: (DATETIME?)¦apoc.date.parseAsZonedDateTime('2012-12-23 23:59:59','yyyy-MM-dd HH:mm:ss', 'UTC-hour-offset') - parse date string using the specified format to specified timezone¦true¦ +¦function¦apoc.date.systemTimezone¦apoc.date.systemTimezone() :: (STRING?)¦apoc.date.systemTimezone() - returns the system timezone display name¦true¦ +¦function¦apoc.date.toISO8601¦apoc.date.toISO8601(time :: INTEGER?, unit = ms :: STRING?) :: (STRING?)¦apoc.date.toISO8601(12345,('ms|s|m|h|d') - return string representation of time in ISO8601 format¦true¦ +¦function¦apoc.date.toYears¦apoc.date.toYears(value :: ANY?, format = yyyy-MM-dd HH:mm:ss :: STRING?) :: (FLOAT?)¦toYears(timestamp) or toYears(date[,format]) - converts timestamp into floating point years¦true¦ ¦function¦apoc.diff.nodes¦apoc.diff.nodes(leftNode :: NODE?, rightNode :: NODE?) :: (MAP?)¦¦true¦ ¦function¦apoc.hashing.fingerprint¦apoc.hashing.fingerprint(some object :: ANY?, propertyExcludes = [] :: LIST? OF STRING?) :: (STRING?)¦calculate a checksum (md5) over a node or a relationship. This deals gracefully with array properties. Two identical entities do share the same hash.¦true¦xref::comparing-graphs/fingerprinting.adoc ¦function¦apoc.hashing.fingerprintGraph¦apoc.hashing.fingerprintGraph(propertyExcludes = [] :: LIST? OF STRING?) :: (STRING?)¦calculate a checksum (md5) over a the full graph. Be aware that this function does use in-memomry datastructures depending on the size of your graph.¦true¦xref::comparing-graphs/fingerprinting.adoc ¦function¦apoc.hashing.fingerprinting¦apoc.hashing.fingerprinting(some object :: ANY?, conf = {} :: MAP?) :: (STRING?)¦calculate a checksum (md5) over a node or a relationship. This deals gracefully with array properties. Two identical entities do share the same hash.¦true¦xref::comparing-graphs/fingerprinting.adoc -¦function¦apoc.json.path¦apoc.json.path(json :: STRING?, path = $ :: STRING?) :: (ANY?)¦apoc.json.path('\{json}','json-path')¦true¦ +¦function¦apoc.json.path¦apoc.json.path(json :: STRING?, path = $ :: STRING?, pathOptions = null :: LIST? OF STRING?) :: (ANY?)¦apoc.json.path('\{json}' [,'json-path' , 'path-options'])¦true¦ ¦function¦apoc.label.exists¦apoc.label.exists(node :: ANY?, label :: STRING?) :: (BOOLEAN?)¦apoc.label.exists(element, label) - returns true or false related to label existance¦true¦xref::graph-querying/node-querying.adoc ¦function¦apoc.map.clean¦apoc.map.clean(map :: MAP?, keys :: LIST? OF STRING?, values :: LIST? OF ANY?) :: (MAP?)¦apoc.map.clean(map,[skip,keys],[skip,values]) yield map filters the keys and values contained in those lists, good for data cleaning from CSV/JSON¦true¦ ¦function¦apoc.map.flatten¦apoc.map.flatten(map :: MAP?, delimiter = . :: STRING?) :: (MAP?)¦apoc.map.flatten(map, delimiter:'.') yield map - flattens nested items in map using dot notation¦true¦ @@ -540,7 +576,7 @@ for the provided `label` and `uuidProperty`, in case the UUID handler is already ¦function¦apoc.text.urlencode¦apoc.text.urlencode(text :: STRING?) :: (STRING?)¦apoc.text.urlencode(text) - return the urlencoded text¦true¦ ¦function¦apoc.trigger.nodesByLabel¦apoc.trigger.nodesByLabel(labelEntries :: ANY?, label :: STRING?) :: (LIST? OF ANY?)¦¦false¦xref::background-operations/triggers.adoc ¦function¦apoc.trigger.propertiesByKey¦apoc.trigger.propertiesByKey(propertyEntries :: MAP?, key :: STRING?) :: (LIST? OF ANY?)¦¦false¦xref::background-operations/triggers.adoc -¦function¦apoc.ttl.config¦apoc.ttl.config() :: (MAP?)¦¦true¦xref::graph-updates/ttl.adoc +¦function¦apoc.ttl.config¦apoc.ttl.config() :: (MAP?)¦¦false¦xref::graph-updates/ttl.adoc ¦function¦apoc.util.compress¦apoc.util.compress(data :: STRING?, config = {} :: MAP?) :: (BYTEARRAY?)¦apoc.util.compress(string, \{config}) | return a compressed byte[] in various format from a string¦true¦ ¦function¦apoc.util.decompress¦apoc.util.decompress(data :: BYTEARRAY?, config = {} :: MAP?) :: (STRING?)¦apoc.util.decompress(compressed, \{config}) | return a string from a compressed byte[] in various format¦true¦ ¦function¦apoc.util.md5¦apoc.util.md5(values :: LIST? OF ANY?) :: (STRING?)¦apoc.util.md5([values]) | computes the md5 of the concatenation of all string values of the list¦true¦xref::misc/text-functions.adoc#text-functions-hashing diff --git a/docs/asciidoc/modules/ROOT/images/apoc.bolt.execute.createandstatistics.PNG b/docs/asciidoc/modules/ROOT/images/apoc.bolt.execute.createandstatistics.PNG index 4051191bee..f49eef713c 100644 Binary files a/docs/asciidoc/modules/ROOT/images/apoc.bolt.execute.createandstatistics.PNG and b/docs/asciidoc/modules/ROOT/images/apoc.bolt.execute.createandstatistics.PNG differ diff --git a/docs/asciidoc/modules/ROOT/images/apoc.bolt.execute.createwithparams.PNG b/docs/asciidoc/modules/ROOT/images/apoc.bolt.execute.createwithparams.PNG index 1e747e1c6e..22fb1fe389 100644 Binary files a/docs/asciidoc/modules/ROOT/images/apoc.bolt.execute.createwithparams.PNG and b/docs/asciidoc/modules/ROOT/images/apoc.bolt.execute.createwithparams.PNG differ diff --git a/docs/asciidoc/modules/ROOT/images/apoc.bolt.execute.nodemap.PNG b/docs/asciidoc/modules/ROOT/images/apoc.bolt.execute.nodemap.PNG index 0656b427ce..6af6c98ac2 100644 Binary files a/docs/asciidoc/modules/ROOT/images/apoc.bolt.execute.nodemap.PNG and b/docs/asciidoc/modules/ROOT/images/apoc.bolt.execute.nodemap.PNG differ diff --git a/docs/asciidoc/modules/ROOT/images/apoc.bolt.execute.scalarmulti.PNG b/docs/asciidoc/modules/ROOT/images/apoc.bolt.execute.scalarmulti.PNG new file mode 100644 index 0000000000..7359706fec Binary files /dev/null and b/docs/asciidoc/modules/ROOT/images/apoc.bolt.execute.scalarmulti.PNG differ diff --git a/docs/asciidoc/modules/ROOT/images/apoc.bolt.load.relmap.PNG b/docs/asciidoc/modules/ROOT/images/apoc.bolt.load.relmap.PNG index 9fa5181a02..6432128146 100644 Binary files a/docs/asciidoc/modules/ROOT/images/apoc.bolt.load.relmap.PNG and b/docs/asciidoc/modules/ROOT/images/apoc.bolt.load.relmap.PNG differ diff --git a/docs/asciidoc/modules/ROOT/images/apoc.bolt.load.returnvirtualpath.PNG b/docs/asciidoc/modules/ROOT/images/apoc.bolt.load.returnvirtualpath.PNG index 9771357d5c..d0694c79f4 100644 Binary files a/docs/asciidoc/modules/ROOT/images/apoc.bolt.load.returnvirtualpath.PNG and b/docs/asciidoc/modules/ROOT/images/apoc.bolt.load.returnvirtualpath.PNG differ diff --git a/docs/asciidoc/modules/ROOT/images/apoc.bolt.load.virtualnode.PNG b/docs/asciidoc/modules/ROOT/images/apoc.bolt.load.virtualnode.PNG index 449ff8a177..a226c9a3da 100644 Binary files a/docs/asciidoc/modules/ROOT/images/apoc.bolt.load.virtualnode.PNG and b/docs/asciidoc/modules/ROOT/images/apoc.bolt.load.virtualnode.PNG differ diff --git a/docs/asciidoc/modules/ROOT/images/apoc.graph.fromDocument_with_relMapping.png b/docs/asciidoc/modules/ROOT/images/apoc.graph.fromDocument_with_relMapping.png new file mode 100644 index 0000000000..31bf4a2819 Binary files /dev/null and b/docs/asciidoc/modules/ROOT/images/apoc.graph.fromDocument_with_relMapping.png differ diff --git a/docs/asciidoc/modules/ROOT/images/apoc.refactor.invert.dataset.png b/docs/asciidoc/modules/ROOT/images/apoc.refactor.invert.dataset.png index 3dd7831d82..1304f63f7e 100644 Binary files a/docs/asciidoc/modules/ROOT/images/apoc.refactor.invert.dataset.png and b/docs/asciidoc/modules/ROOT/images/apoc.refactor.invert.dataset.png differ diff --git a/docs/asciidoc/modules/ROOT/images/apoc.refactor.invert.png b/docs/asciidoc/modules/ROOT/images/apoc.refactor.invert.png index bbab27954c..4118e52be5 100644 Binary files a/docs/asciidoc/modules/ROOT/images/apoc.refactor.invert.png and b/docs/asciidoc/modules/ROOT/images/apoc.refactor.invert.png differ diff --git a/docs/asciidoc/modules/ROOT/nav.adoc b/docs/asciidoc/modules/ROOT/nav.adoc index a5a2e52810..e30f9c69a7 100644 --- a/docs/asciidoc/modules/ROOT/nav.adoc +++ b/docs/asciidoc/modules/ROOT/nav.adoc @@ -143,8 +143,4 @@ include::partial$generated-documentation/nav.adoc[] ** xref::misc/utility-functions.adoc[] * xref:indexes/index.adoc[] - ** xref::indexes/schema-index-operations.adoc[] - -* xref:algorithms/index.adoc[] - ** xref::algorithms/path-finding-procedures.adoc[] - ** xref::algorithms/similarity.adoc[] \ No newline at end of file + ** xref::indexes/schema-index-operations.adoc[] \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/pages/algorithms/centrality.adoc b/docs/asciidoc/modules/ROOT/pages/algorithms/centrality.adoc deleted file mode 100644 index 4107bf42d4..0000000000 --- a/docs/asciidoc/modules/ROOT/pages/algorithms/centrality.adoc +++ /dev/null @@ -1,10 +0,0 @@ -[[centrality]] -= Removed: Centrality Algorithms -:description: This section describes centrality algorithms in the APOC library. - - - -These algorithms have been deprecated by the https://neo4j.com/docs/graph-data-science/current/[Graph Data Science Library^], which has more performant and battle hardened versions of the algorithms. - -For documentation of the Centrality algorithms, see https://neo4j.com/docs/graph-data-science/current/algorithms/centrality/ - diff --git a/docs/asciidoc/modules/ROOT/pages/algorithms/community-detection.adoc b/docs/asciidoc/modules/ROOT/pages/algorithms/community-detection.adoc deleted file mode 100644 index fa3256431c..0000000000 --- a/docs/asciidoc/modules/ROOT/pages/algorithms/community-detection.adoc +++ /dev/null @@ -1,9 +0,0 @@ -[[community-detection]] -= Removed: Community Detection via Label Propagation -:description: This section describes the Label Propagation community detection algorithm. - - - -This algorithm has been deprecated by the https://neo4j.com/docs/graph-data-science/current/[Graph Data Science Library^], which has more performant and battle hardened versions of the algorithms. - -For documentation of the Label Propagation algorithm, see https://neo4j.com/docs/graph-data-science/current/algorithms/label-propagation/ diff --git a/docs/asciidoc/modules/ROOT/pages/algorithms/index.adoc b/docs/asciidoc/modules/ROOT/pages/algorithms/index.adoc deleted file mode 100644 index 7127ddafe4..0000000000 --- a/docs/asciidoc/modules/ROOT/pages/algorithms/index.adoc +++ /dev/null @@ -1,10 +0,0 @@ -[[algorithms]] -= Graph Algorithms -:description: This chapter describes graph algorithms in the APOC library. - - - -include::partial$deprecated.adoc[] - -* xref::algorithms/path-finding-procedures.adoc[] -* xref::algorithms/similarity.adoc[] diff --git a/docs/asciidoc/modules/ROOT/pages/algorithms/pagerank.adoc b/docs/asciidoc/modules/ROOT/pages/algorithms/pagerank.adoc deleted file mode 100644 index c9c681d41b..0000000000 --- a/docs/asciidoc/modules/ROOT/pages/algorithms/pagerank.adoc +++ /dev/null @@ -1,10 +0,0 @@ -[[pagerank]] -= Removed: PageRank Algorithm -:description: This section describes the PageRank centrality algorithm. - - - -This algorithm has been deprecated by the https://neo4j.com/docs/graph-data-science/current/[Graph Data Science Library^], which has more performant and battle hardened versions of the algorithms. - -For documentation of the Page Rank algorithm, see https://neo4j.com/docs/graph-data-science/current/algorithms/page-rank/ - diff --git a/docs/asciidoc/modules/ROOT/pages/algorithms/path-finding-procedures.adoc b/docs/asciidoc/modules/ROOT/pages/algorithms/path-finding-procedures.adoc deleted file mode 100644 index 9fe95a51c7..0000000000 --- a/docs/asciidoc/modules/ROOT/pages/algorithms/path-finding-procedures.adoc +++ /dev/null @@ -1,26 +0,0 @@ -[[path-finding-procedures]] -= Path Finding Procedures -:description: This section describes procedures that expose Neo4j's in-built path finding algorithms. - - - -APOC exposes some built in path-finding functions that Neo4j brings along. - -[cols="3m,3"] -|=== -| apoc.algo.dijkstra(startNode, endNode, 'KNOWS\|', 'distance') YIELD path, weight | run dijkstra with relationship property name as cost function -| apoc.algo.dijkstraWithDefaultWeight(startNode, endNode, 'KNOWS\|', 'distance', 10) YIELD path, weight | run dijkstra with relationship property name as cost function and a default weight if the property does not exist -| apoc.algo.aStar(startNode, endNode, 'KNOWS\|', 'distance','lat','lon') YIELD path, weight | run A* with relationship property name as cost function -| apoc.algo.aStar(startNode, endNode, 'KNOWS\|', {weight:'dist',default:10, x:'lon',y:'lat'}) YIELD path, weight | run A* with relationship property name as cost function -| apoc.algo.allSimplePaths(startNode, endNode, 'KNOWS\|', 5) YIELD path, weight | run allSimplePaths with relationships given and maxNodes -| apoc.stats.degrees(relTypesDirections) yield type, direction, total, min, max, mean, p50, p75, p90, p95, p99, p999 | compute degree distribution in parallel -|=== - -Example: find the weighted shortest path based on relationship property `d` from `A` to `B` following just `:ROAD` relationships - -[source,cypher] ----- -MATCH (from:Loc{name:'A'}), (to:Loc{name:'D'}) -CALL apoc.algo.dijkstra(from, to, 'ROAD', 'd') yield path as path, weight as weight -RETURN path, weight ----- \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/pages/algorithms/similarity.adoc b/docs/asciidoc/modules/ROOT/pages/algorithms/similarity.adoc deleted file mode 100644 index a8f71e798c..0000000000 --- a/docs/asciidoc/modules/ROOT/pages/algorithms/similarity.adoc +++ /dev/null @@ -1,11 +0,0 @@ -[[similarity]] -= Deprecated: Similarity -:description: This section describes similarity algorithms in the APOC library. - - - -[cols="3m,3"] -|=== -| apoc.algo.cover(nodeIds) YIELD rel | return relationships between this set of nodes -|=== - diff --git a/docs/asciidoc/modules/ROOT/pages/cypher-execution/cypher-based-procedures-functions.adoc b/docs/asciidoc/modules/ROOT/pages/cypher-execution/cypher-based-procedures-functions.adoc index b273a28e30..25459e1915 100644 --- a/docs/asciidoc/modules/ROOT/pages/cypher-execution/cypher-based-procedures-functions.adoc +++ b/docs/asciidoc/modules/ROOT/pages/cypher-execution/cypher-based-procedures-functions.adoc @@ -61,11 +61,11 @@ The default values are parsed as JSON. * FLOAT, DOUBLE, INT, INTEGER, NUMBER, LONG * TEXT, STRING * BOOL, BOOLEAN -* POINT, GEO, GEOCORDINATE +* POINT, GEO, GEOMETRY * DATE, DATETIME, LOCALDATETIME, TIME, LOCALTIME, DURATION -* NODE, REL, RELATIONSHIP, PATH +* NODE, REL, RELATIONSHIP, EDGE, PATH * MAP -* LIST TYPE, LIST OF TYPE +* LIST TYPE, LIST OF TYPE (where `TYPE` can be one of the previous values) * ANY .Find neighbours of a node by name diff --git a/docs/asciidoc/modules/ROOT/pages/database-integration/bolt-neo4j.adoc b/docs/asciidoc/modules/ROOT/pages/database-integration/bolt-neo4j.adoc index 6f6fdb09c3..9d0f40820b 100644 --- a/docs/asciidoc/modules/ROOT/pages/database-integration/bolt-neo4j.adoc +++ b/docs/asciidoc/modules/ROOT/pages/database-integration/bolt-neo4j.adoc @@ -19,7 +19,7 @@ Bolt procedures allows to accessing other databases via bolt protocol. [source,cypher] ---- -call apoc.bolt.load("bolt://user:password@localhost:7687","match(p:Person {name:{name}}) return p", {name:'Michael'}) +call apoc.bolt.load("bolt://user:password@localhost:7687","match(p:Person {name: $name}) return p", {name:'Michael'}) ---- * **apoc.conf** : here the are two choices: @@ -30,7 +30,7 @@ call apoc.bolt.load("bolt://user:password@localhost:7687","match(p:Person {name: [source,cypher] ---- -call apoc.bolt.load("","match(p:Person {name:{name}}) return p", {name:'Michael'}) +call apoc.bolt.load("","match(p:Person {name: $name}) return p", {name:'Michael'}) ---- .neo4jConf @@ -48,7 +48,7 @@ apoc.bolt.url=bolt://user:password@localhost:7687 [source,cypher] ---- -call apoc.bolt.load("test","match(p:Person {name:{name}}) return p", {name:'Michael'}) +call apoc.bolt.load("test","match(p:Person {name: $name}) return p", {name:'Michael'}) ---- .neo4jConf @@ -102,7 +102,8 @@ You can find all the values in the documentation http://neo4j.com/docs/api/java- [source,cypher] ---- call apoc.bolt.execute("bolt://user:password@localhost:7687", -"match(p:Person {name:{name}}) return p", {name:'Michael'}) +"match(p:Person {name: $name}) set p.surname = $surname return p", +{name:'Michael', surname: 'Jordan'}) ---- image::apoc.bolt.execute.nodemap.PNG[scaledwidth="100%"] @@ -113,7 +114,7 @@ image::apoc.bolt.execute.nodemap.PNG[scaledwidth="100%"] [source,cypher] ---- call apoc.bolt.load("bolt://user:password@localhost:7687", -"match(p:Person {name:{name}}) return p", {name:'Michael'}, {virtual:true}) +"match(p:Person {name: $name}) return p", {name:'Michael'}, {virtual:true}) ---- image::apoc.bolt.load.virtualnode.PNG[scaledwidth="100%"] @@ -124,7 +125,7 @@ image::apoc.bolt.load.virtualnode.PNG[scaledwidth="100%"] [source,cypher] ---- call apoc.bolt.execute("bolt://user:password@localhost:7687", -"create(n:Node {name:{name}})", {name:'Node1'}, {statistics:true}) +"create(n:Node {name: $name})", {name:'Node1'}, {statistics:true}) ---- image::apoc.bolt.execute.createandstatistics.PNG[scaledwidth="100%"] @@ -135,7 +136,7 @@ image::apoc.bolt.execute.createandstatistics.PNG[scaledwidth="100%"] [source,cypher] ---- call apoc.bolt.execute("bolt://user:password@localhost:7687", -"match (n:Person {name:{name}}) return n.age as age, n.name as name, n.surname as surname", {name:'Michael'}) +"match (n:Person {name: $name}) set n.foo = 'bar' return n.age as age, n.name as name, n.surname as surname, n.foo as foo", {name:'Michael'}) ---- image::apoc.bolt.execute.scalarmulti.PNG[scaledwidth="100%"] @@ -146,7 +147,7 @@ image::apoc.bolt.execute.scalarmulti.PNG[scaledwidth="100%"] [source,cypher] ---- call apoc.bolt.load("bolt://user:password@localhost:7687", -"MATCH (n:Person{name:{name}})-[r:KNOWS]->(p) return r as rel", {name:'Anne'}) +"MATCH (n:Person{name: $name})-[r:KNOWS]->(p) return r as rel", {name:'Anne'}) ---- image::apoc.bolt.load.relmap.PNG[scaledwidth="100%"] @@ -157,7 +158,7 @@ image::apoc.bolt.load.relmap.PNG[scaledwidth="100%"] [source,cypher] ---- call apoc.bolt.load("bolt://user:password@localhost:7687", -"START n=node({idNode}) MATCH path= (n)-[r:REL_TYPE*..3]->(o) return path", {idNode:200}, {virtual:true}) +"MATCH (n) WHERE id(n) = $idNode MATCH path= (n)-[r:REL_TYPE*..3]->(o) return path", {idNode:200}, {virtual:true}) ---- image::apoc.bolt.load.returnvirtualpath.PNG[scaledwidth="100%"] @@ -168,7 +169,7 @@ image::apoc.bolt.load.returnvirtualpath.PNG[scaledwidth="100%"] [source,cypher] ---- call apoc.bolt.execute("bolt://user:password@localhost:7687", -"CREATE (n:Car{brand:{brand},model:{model},year:{year}}) return n", {brand:'Ferrari',model:'California',year:2016}) +"CREATE (n:Car{brand: $brand, model: $model, year: $year}) return n", {brand:'Ferrari',model:'California',year:2016}) ---- image::apoc.bolt.execute.createwithparams.PNG[scaledwidth="100%"] diff --git a/docs/asciidoc/modules/ROOT/pages/database-integration/index.adoc b/docs/asciidoc/modules/ROOT/pages/database-integration/index.adoc index 71c0e4ce20..1d8b3e8454 100644 --- a/docs/asciidoc/modules/ROOT/pages/database-integration/index.adoc +++ b/docs/asciidoc/modules/ROOT/pages/database-integration/index.adoc @@ -12,6 +12,7 @@ For more information on how to use these procedures, see: * xref::database-integration/load-jdbc.adoc[] * xref::database-integration/database-modeling.adoc[] * xref::database-integration/elasticsearch.adoc[] +* xref::database-integration/mongo.adoc[] * xref::database-integration/mongodb.adoc[] * xref::database-integration/couchbase.adoc[] * xref::database-integration/bolt-neo4j.adoc[] diff --git a/docs/asciidoc/modules/ROOT/pages/database-integration/mongo.adoc b/docs/asciidoc/modules/ROOT/pages/database-integration/mongo.adoc new file mode 100644 index 0000000000..177c4ea1bc --- /dev/null +++ b/docs/asciidoc/modules/ROOT/pages/database-integration/mongo.adoc @@ -0,0 +1,502 @@ +[[mongodb]] += MongoDB +:description: This section describes procedures that can be used to interact with MongoDB. + + +[[mongodb-procedures]] +== Available Procedures + + +[separator=¦,opts=header] +|=== +¦signature +¦apoc.mongo.aggregate(uri, pipeline, $config) yield value - perform an aggregate operation on mongodb collection +¦apoc.mongo.count(uri, query, $config) yield value - perform a count operation on mongodb collection +¦apoc.mongo.find(uri, query, $config) yield value - perform a find operation on mongodb collection +¦apoc.mongo.delete(uri, query, $config) - delete the given documents from the mongodb collection and returns the number of affected documents +¦apoc.mongo.insert(uri, documents, $config) yield value - inserts the given documents into the mongodb collection +¦apoc.mongo.update(uri, query, update, $config) - updates the given documents from the mongodb collection and returns the number of affected documents +|=== + + + +[[mongodb-dependencies]] +== Install Dependencies + +The `apoc.mongo.*` procedures have dependencies on a client library that is not included in the APOC Library. + +To use them, copy these jars into the plugins directory: + +* bson-3.4.2.jar +* mongo-java-driver-3.4.2.jar +* mongodb-driver-3.4.2.jar +* mongodb-driver-core-3.4.2.jar + +You should be able to get them from https://mongodb.github.io/mongo-java-driver/[here], and https://mvnrepository.com/artifact/org.mongodb/bson/3.4.2[here (BSON)] (via Download) + +Or you can get them locally from your gradle build of apoc. + +---- +gradle copyRuntimeLibs +cp lib/mongodb*.jar lib/bson*.jar $NEO4J_HOME/plugins/ +---- + + +[[mongodb-fields]] +== Field description + + - `uri`: The https://docs.mongodb.com/v3.2/reference/connection-string/[connection String URI], + with scheme `mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]]/databaseName.collectionName[?options]`. + Note that this uri must necessarily have the database name and (if the `collection` config parameter is not explicit) the collection name (for example `mongodb://user:pass@localhost:27017/myDb.myCollection?authSource=admin`) + - `query`: query parameter map (can be a map or a json string) + - `update`: update parameter map (only for `apoc.mongo.update`) + - `documents`: the documents to insert (only for `apoc.mongo.insert`) + - `config`: see below + +[[mongodb-config]] +== Configuration parameters +The procedures support the following config parameters: + +.Config parameters +[opts=header, cols="1,1,1,4"] +|=== +| name | type | default | description +| extractReferences | `Boolean` | false | If true and a field contains an `ObjectId` it will include the related document instead of the `ObjectId` +| objectIdAsMap | `Boolean` | true | If true extract the `ObjectId` as map +| project | `Map` OR `String` | empty | The projection parameters (can be a map or a json string) +| sort | `Map` OR `String` | empty | The sort parameters (can be a map or a json string) +| skip | `Long` | 0 | The number of documents to skip +| limit | `Long` | 0 | The max number of documents to show +| collection | `String` | empty | The collection name (takes precedence over the collection passed with `uri` parameter +|=== + + +[[mongodb-examples]] +== Examples + +Given the following collections: + +``` +// Product +... +{"_id": ObjectId("product1"), "name": "Product 1", "price": 100} +{"_id": ObjectId("product3"), "name": "Product 2", "price": 200} +{"_id": ObjectId("product3"), "name": "Product 3", "price": 300} +... +``` + +``` +// Person +... +{"_id": ObjectId("personAl"), "name": "Al", expr: BsonRegularExpression("foo*"), "bought": [ObjectId("product1"), ObjectId("product3")]} +{"_id": ObjectId("personJohn"), "name": "John", "age": 40, "foo", "bar"} +{"_id": ObjectId("personJack"), "name": "Jack", "age": 50, "foo", "bar", expr: BsonRegularExpression("bar*"), "bought": [ObjectId("product1"), ObjectId("product2")]} +... +``` + +we can run the following procedures. + +=== `apoc.mongo.aggregate` + +[source,cypher] +---- +CALL apoc.mongodb.aggregate('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', [{`$match`: {foo: 'bar'}}, {`$set`: {aggrField: 'Y'} }]) +---- + +.Results +[opts="header"] +|=== +| value +| `` +{ + "_id": { + "timestamp": <...>, + "machineIdentifier": <...>, + "processIdentifier": <...>, + "counter": <...>, + }, + "name": "John", + "foo": "bar", + "age": 40L, + "aggrField": "Y", +} +`` +| `` +{ + "_id": { + "timestamp": <...>, + "machineIdentifier": <...>, + "processIdentifier": <...>, + "counter": <...>, + }, + "name": "Jack", + "age": 50L, + "foo": "bar", + "expr": "bar*", + "bought": ["product1", "product2"], + "aggrField": "Y", +} +`` +|=== + + +=== `apoc.mongo.count` + +[source,cypher] +---- +CALL apoc.mongodb.count('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin') +---- + +.Results +[opts="header"] +|=== +| value +| 3 +|=== + +We can also pass the collection name through the config parameter: + +[source,cypher] +---- +CALL apoc.mongodb.count('mongodb://user:pass@localhost:27017/myDb?authSource=admin', {collection: 'Person'}) +---- + +.Results +[opts="header"] +|=== +| value +| 3 +|=== + + + +=== `apoc.mongo.find` + +If we want to extract the all `Person`s with default parameter: + +[source,cypher] +---- +CALL apoc.mongodb.find('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin') +---- + +.Results +[opts="header"] +|=== +| value +| `` +{ + "_id": { + "timestamp": <...>, + "machineIdentifier": <...>, + "processIdentifier": <...>, + "counter": <...>, + }, + "name": "Al", + "expr": "foo*", + "bought": ["product1", "product3"] +} +`` +| `` +{ + "_id": { + "timestamp": <...>, + "machineIdentifier": <...>, + "processIdentifier": <...>, + "counter": <...>, + }, + "name": "John", + "foo": "bar", + "age": 40L +} +`` +| `` +{ + "_id": { + "timestamp": <...>, + "machineIdentifier": <...>, + "processIdentifier": <...>, + "counter": <...>, + }, + "name": "Jack", + "age": 50L, + "foo": "bar", + "expr": "bar*", + "bought": ["product1", "product2"] +} +`` +|=== + + +In addition, we can pass the query param like: + +[source,cypher] +---- +CALL apoc.mongodb.first('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', {expr: {`$regex`: 'bar*', `$options`: ''}}) +---- + +.Results +[opts="header"] +|=== +| value +| +`` +{ + "_id": { + "timestamp": <...>, + "machineIdentifier": <...>, + "processIdentifier": <...>, + "counter": <...>, + }, + "name": "Jack", + "foo": "bar", + "expr": "bar*", + "bought": ["product1", "product2"] +} +`` +|=== + + + +If we want to extract `bought` references, through config parameter: + +[source,cypher] +---- +CALL apoc.mongodb.first('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', {expr: {`$regex`: 'foo*', `$options`: ''}}, {extractReferences: true}) +---- + +.Results +[opts="header"] +|=== +| value +| +`` +{ + "_id": { + "timestamp": <...>, + "machineIdentifier": <...>, + "processIdentifier": <...>, + "counter": <...>, + }, + "name": "Al", + "expr": "foo*", + "bought": [ + { + "_id": { + "timestamp": <...>, + "machineIdentifier": <...>, + "processIdentifier": <...>, + "counter": <...>, + }, + "name": "Product 1", + "price": 100 + }, + { + "_id": { + "timestamp": <...>, + "machineIdentifier": <...>, + "processIdentifier": <...>, + "counter": <...>, + }, + "name": "Product 3", + "price": 300 + }, + ] +} +`` +|=== + +Moreover, we can retrieve the `ObjectId` s with theirs `HexString` representation through `objectIdAsMap` config: + +[source,cypher] +---- +CALL apoc.mongodb.first('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', {expr: {`$regex`: 'foo*', `$options`: ''}}, {objectIdAsMap: false, extractReferences: true}) +---- + +.Results +[opts="header"] +|=== +| value +| +`` +{ + "_id": "personAl", + "name": "Al", + "expr": "foo*", + "bought": [ + {"_id": "product1", "name": "Product 1", "price": 100}, + {"_id": "product3", "name": "Product 3", "price": 300} + ] +} +`` +|=== + + +Furthermore, we can skip `n` values and pass a project parameter: + +[source,cypher] +---- +CALL apoc.mongo.first('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', null, {skip: 2, project: {age: 1}}) +---- + +.Results +[opts="header"] +|=== +| value +| +`` +{ + "_id": { + "timestamp": <...>, + "machineIdentifier": <...>, + "processIdentifier": <...>, + "counter": <...>, + }, + "age": 50L, +} +`` +|=== + +We can pass `query`, `skip` and `sort` parameter as stringified values, for example: + +[source,cypher] +---- +CALL apoc.mongo.first('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', '{foo: "bar"}', {sort: '{name: -1}', project: '{age: 1}'}) +---- + +.Results +[opts="header"] +|=== +| value +| +`` +{ + "_id": { + "timestamp": <...>, + "machineIdentifier": <...>, + "processIdentifier": <...>, + "counter": <...>, + }, + "age": 40L, +} +`` +| +`` +{ + "_id": { + "timestamp": <...>, + "machineIdentifier": <...>, + "processIdentifier": <...>, + "counter": <...>, + }, + "age": 50L, +} +`` +|=== + + +Furthermore, we can use the `limit` parameter, for example: + +---- +CALL apoc.mongodb.find('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', null, {skip: 1, limit: 1, project: {age: 1}}) +---- + +.Results +[opts="header"] +|=== +| value +| `` +{ + "_id": { + "timestamp": <...>, + "machineIdentifier": <...>, + "processIdentifier": <...>, + "counter": <...>, + }, + "age": 40, +} +`` +|=== + + +Furthermore, we can pass a `sort` parameter, for example: + +[source,cypher] +---- +CALL apoc.mongodb.find('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', null, {sort: {name: -1}, objectIdAsMap: false, project: {name: 1}}) +---- + +.Results +[opts="header"] +|=== +| value +| +`` +{ + "_id": "personJohn", + "name": "John", +} +| +`` +{ + "_id": "personJack", + "name": "Jack", +} +| +`` +{ + "_id": "personAl", + "name": "Al", +} +`` +|=== + + +=== `apoc.mongo.update` + +To update the `age` property of the `John` document: + +[source,cypher] +---- +CALL apoc.mongodb.update('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', {name: "John"}, {`$set`: {age:99}}) +---- + +with the number of row affected as result: + +.Results +[opts="header"] +|=== +| value +| 1 +|=== + + + +=== `apoc.mongo.delete` + +To delete the `John` document: + +[source,cypher] +---- +CALL apoc.mongodb.update('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', {name: "John"}) +---- + +with the number of row affected as result: + +.Results +[opts="header"] +|=== +| value +| 1 +|=== + + +=== `apoc.mongo.insert` + +To insert 2 document `{"secondId": ObjectId("507f191e811c19729de860ea"), "baz": 1}` and `{"secondId": ObjectId("507f191e821c19729de860ef"), "baz": 1}` +in a `Person` collection (in this case the procedure return `void`): + +[source,cypher] +---- +CALL apoc.mongo.insert('mongodb://user:pass@localhost:27017/myDb.Person?authSource=admin', [{secondId: {`$oid`: '507f191e811c19729de860ea'}, baz: 1}, {secondId: {`$oid`: '507f191e821c19729de860ef'}, baz: 1}]) +---- + diff --git a/docs/asciidoc/modules/ROOT/pages/database-integration/mongodb.adoc b/docs/asciidoc/modules/ROOT/pages/database-integration/mongodb.adoc index f36ba26fb0..2f3dd91a11 100644 --- a/docs/asciidoc/modules/ROOT/pages/database-integration/mongodb.adoc +++ b/docs/asciidoc/modules/ROOT/pages/database-integration/mongodb.adoc @@ -1,7 +1,11 @@ [[mongodb]] -= MongoDB += MongoDB (Deprecated) :description: This section describes procedures that can be used to interact with MongoDB. +[NOTE] +==== +These procedures are deprecated in favor of xref::database-integration/mongo.adoc[apoc.mongo.* procedures] . +==== [[mongodb-procedures]] diff --git a/docs/asciidoc/modules/ROOT/pages/database-integration/redis.adoc b/docs/asciidoc/modules/ROOT/pages/database-integration/redis.adoc new file mode 100644 index 0000000000..9d27437426 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/pages/database-integration/redis.adoc @@ -0,0 +1,570 @@ +[[redis]] += MongoDB +:description: This section describes procedures that can be used to interact with MongoDB. + +Here is a list of all available Redis procedures: + +[opts=header, cols="1, 4, 4", separator="¦"] +|=== +¦name¦signature¦description +¦apoc.redis.append¦apoc.redis.append(uri :: STRING?, key :: STRING?, value :: STRING?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.append(uri, key, value, \{config}) | Execute the 'APPEND key value' command +¦apoc.redis.configGet¦apoc.redis.configGet(uri :: STRING?, parameter :: STRING?, config = {} :: MAP?) :: (value :: MAP?)¦apoc.redis.configGet(uri, parameter, \{config}) | Execute the 'CONFIG GET parameter' command +¦apoc.redis.configSet¦apoc.redis.configSet(uri :: STRING?, parameter :: STRING?, value :: STRING?, config = {} :: MAP?) :: (value :: STRING?)¦apoc.redis.configSet(uri, parameter, \{config}) | Execute the 'CONFIG SET parameter value' command +¦apoc.redis.copy¦apoc.redis.copy(uri :: STRING?, source :: STRING?, destination :: STRING?, config = {} :: MAP?) :: (value :: BOOLEAN?)¦apoc.redis.copy(uri, source, destination, \{config}) | Execute the 'COPY source destination' command and returns true if source was copied and false otherwise +¦apoc.redis.eval¦apoc.redis.eval(uri :: STRING?, script :: STRING?, outputType :: STRING?, keys :: LIST? OF STRING?, values :: LIST? OF STRING?, config = {} :: MAP?) :: (value :: ANY?)¦apoc.redis.eval(uri, script, outputType, keys, values, \{config}) | Execute the 'EVAL script' command. In the parameters provided to the procedure, keys are bound to the KEYS[n] like special array of the Lua script and values are bound to the ARGV[n] like special array of the Lua script. +¦apoc.redis.exists¦apoc.redis.exists(uri :: STRING?, keys :: LIST? OF STRING?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.exists(uri, keys, \{config}) | Execute the 'EXISTS keys' command +¦apoc.redis.get¦apoc.redis.get(uri :: STRING?, key :: STRING?, config = {} :: MAP?) :: (value :: STRING?)¦apoc.redis.get(uri, key, \{config}) | Execute the 'GET key' command +¦apoc.redis.hdel¦apoc.redis.hdel(uri :: STRING?, key :: STRING?, fields :: LIST? OF STRING?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.hdel(uri, key, fields, \{config}) | Execute the 'HDEL key fields' command +¦apoc.redis.hexists¦apoc.redis.hexists(uri :: STRING?, key :: STRING?, field :: STRING?, config = {} :: MAP?) :: (value :: BOOLEAN?)¦apoc.redis.hexists(uri, key, field, \{config}) | Execute the 'HEXISTS key field' command +¦apoc.redis.hget¦apoc.redis.hget(uri :: STRING?, key :: STRING?, field :: STRING?, config = {} :: MAP?) :: (value :: STRING?)¦apoc.redis.hget(uri, key, field, \{config}) | Execute the 'HGET key field' command +¦apoc.redis.hgetall¦apoc.redis.hgetall(uri :: STRING?, key :: STRING?, config = {} :: MAP?) :: (value :: MAP?)¦apoc.redis.hgetall(uri, key, \{config}) | Execute the 'HGETALL key' command +¦apoc.redis.hincrby¦apoc.redis.hincrby(uri :: STRING?, key :: STRING?, field :: STRING?, amount :: INTEGER?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.hincrby(uri, key, field, amount, \{config}) | Execute the 'HINCRBY key field amount' command +¦apoc.redis.hset¦apoc.redis.hset(uri :: STRING?, key :: STRING?, field :: MAP?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.hset(uri, key, value, \{config}) | Execute the 'HSET key mapFields' command, where mapFields is a map of field1, value1, field2, value2,... +¦apoc.redis.incrby¦apoc.redis.incrby(uri :: STRING?, key :: STRING?, amount :: INTEGER?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.incrby(uri, key, amount, \{config}) | Execute the 'INCRBY key increment' command +¦apoc.redis.info¦apoc.redis.info(uri :: STRING?, config = {} :: MAP?) :: (value :: STRING?)¦apoc.redis.info(uri, \{config}) | Execute the 'INFO' command +¦apoc.redis.lrange¦apoc.redis.lrange(uri :: STRING?, key :: STRING?, start :: INTEGER?, stop :: INTEGER?, config = {} :: MAP?) :: (value :: LIST? OF ANY?)¦apoc.redis.lrange(uri, key, start, stop, \{config}) | Execute the 'LRANGE key start stop' command +¦apoc.redis.persist¦apoc.redis.persist(uri :: STRING?, key :: STRING?, config = {} :: MAP?) :: (value :: BOOLEAN?)¦apoc.redis.persist(uri, key, \{config}) | Execute the 'PERSIST key' command +¦apoc.redis.pexpire¦apoc.redis.pexpire(uri :: STRING?, key :: STRING?, time :: INTEGER?, config = {} :: MAP?) :: (value :: BOOLEAN?)¦apoc.redis.pexpire(uri, key, time, isExpireAt \{config}) | Execute the 'PEXPIRE key time' command, or the 'PEPXPIREAT' if isExpireAt=true +¦apoc.redis.pop¦apoc.redis.pop(uri :: STRING?, key :: STRING?, config = {} :: MAP?) :: (value :: STRING?)¦apoc.redis.pop(uri, key, \{config}) | Execute the 'LPOP key' command, or the 'RPOP' if config right=true (default) +¦apoc.redis.pttl¦apoc.redis.pttl(uri :: STRING?, key :: STRING?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.pttl(uri, key, \{config}) | Execute the 'PTTL key' command +¦apoc.redis.push¦apoc.redis.push(uri :: STRING?, key :: STRING?, value :: LIST? OF STRING?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.push(uri, key, values, \{config}) | Execute the 'LPUSH key field values' command, or the 'RPUSH' if config right=true (default) +¦apoc.redis.sadd¦apoc.redis.sadd(uri :: STRING?, key :: STRING?, members :: LIST? OF STRING?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.sadd(uri, key, members, \{config}) | Execute the 'SADD key members' command +¦apoc.redis.scard¦apoc.redis.scard(uri :: STRING?, key :: STRING?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.scard(uri, key, \{config}) | Execute the 'SCARD key' command +¦apoc.redis.getSet¦apoc.redis.getSet(uri :: STRING?, key :: STRING?, value :: STRING?, config = {} :: MAP?) :: (value :: STRING?)¦apoc.redis.getSet(uri, key, value, \{config}) | Execute the 'SET key value' command and return old value stored (or null if did not exists) +¦apoc.redis.smembers¦apoc.redis.smembers(uri :: STRING?, key :: STRING?, config = {} :: MAP?) :: (value :: LIST? OF ANY?)¦apoc.redis.smembers(uri, key, \{config}) | Execute the 'SMEMBERS key' command +¦apoc.redis.spop¦apoc.redis.spop(uri :: STRING?, key :: STRING?, config = {} :: MAP?) :: (value :: STRING?)¦apoc.redis.spop(uri, key, \{config}) | Execute the 'SPOP key' command +¦apoc.redis.sunion¦apoc.redis.sunion(uri :: STRING?, keys :: LIST? OF STRING?, config = {} :: MAP?) :: (value :: LIST? OF ANY?)¦apoc.redis.sunion(uri, keys, \{config}) | Execute the 'SUNION keys' command +¦apoc.redis.zadd¦apoc.redis.zadd(uri :: STRING?, key :: STRING?, value :: LIST? OF ANY?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.zadd(uri, keys, scoresAndMembers, \{config}) | Execute the 'ZADD key scoresAndMembers' command, where scoresAndMembers is a list of score,member,score,member,... +¦apoc.redis.zcard¦apoc.redis.zcard(uri :: STRING?, key :: STRING?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.zcard(uri, key, \{config}) | Execute the 'ZCARD key' command +¦apoc.redis.zrangebyscore¦apoc.redis.zrangebyscore(uri :: STRING?, key :: STRING?, min :: INTEGER?, max :: INTEGER?, config = {} :: MAP?) :: (value :: LIST? OF ANY?)¦apoc.redis.zrangebyscore(uri, key, min, max, \{config}) | Execute the 'ZRANGEBYSCORE key min max' command +¦apoc.redis.zrem¦apoc.redis.zrem(uri :: STRING?, key :: STRING?, members :: LIST? OF STRING?, config = {} :: MAP?) :: (value :: INTEGER?)¦apoc.redis.zrem(uri, key, members, \{config}) | Execute the 'ZREM key members' command +|=== + +[[redis-dependencies]] +== Install Dependencies + +The Redis procedures have dependencies on a client library that is not included in the APOC Library. +You can download it from https://github.com/lettuce-io/lettuce-core/releases/tag/6.1.1.RELEASE[the lettuce-core repository] +or https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/download/{apoc-release}/apoc-redis-dependencies-{apoc-release}.jar[apoc repository] +Once that file is downloaded, it should be placed in the `plugins` directory and the Neo4j Server restarted. + +[[redis-uri]] +== URI description + +The first parameter of Redis procedure is always the URI. +This URI follows https://lettuce.io/core/release/reference/#redisuri.uri-syntax[this sintax]. +One example of valid uri is `redis://myPassword@localhost:6379` + + +[[redis--config]] +== Configuration parameters +The procedures support the following config parameters: + +.Config parameters +[opts=header, cols="1,1,1,4"] +|=== +| name | type | default | description +| charset | String | "UTF-8" | The charset to encode keys and values +| timeout | Long | 60 | The connection timeout (in seconds) +| scriptCharset | String | "UTF-8" | The Lua script charset to encode scripts +| autoReconnect | `Boolean` | true | Enables or disables auto reconnection on connection loss +| right | `Boolean` | true | To choose the direction case of procedure with "two sides", + for example in `apoc.redis.push` to choose between RPUSH and LPUSH (right/left push) +| expireAt | `Boolean` | true | Converts MongoDB data types into Neo4j data types +| codec | Enum[STRING, BYTE_ARRAY] | String | The https://lettuce.io/core/release/reference/#codecs[Redis Codec] used for encode key and values (see the `Strings commands` example) +|=== + +[[redis-examples]] +== Examples + +Let's see some examples divided by command category. + +=== `Strings commands` + +`SET` command (return the old value stored): + +[source,cypher] +---- +CALL apoc.redis.getSet($uri, 'myKey', 'myValue') +---- + +.Results +[opts="header"] +|=== +| value +| null +|=== + +Or with codec: `BYTE_ARRAY`: + +[source,cypher] +---- +CALL apoc.redis.getSet($uri, `BYTES_KEY`, `BYTES_VALUE`, {codec: "BYTE_ARRAY"}) +---- + +.Results +[opts="header"] +|=== +| value +| {"0":31.0,"1":-117.0,"2":8.0,"3":0.0,"4":0.0,"5":0.0,"6":0.0,"7":0.0,"8":0.0,"9":-1.0,"10":75.0,"11":4.0,"12":0.0,"13":67.0,"14":-66.0,"15":-73.0,"16":-24.0,"17":1.0,"18":0.0,"19":0.0,"20":0.0} +|=== + + +`GET` command: + +[source,cypher] +---- +CALL apoc.redis.get($uri, 'myKey') +---- + +.Results +[opts="header"] +|=== +| value +| myValue +|=== + +`APPEND` command: + +[source,cypher] +---- +CALL apoc.redis.append($uri, 'myKey', '2') +---- + +.Results +[opts="header"] +|=== +| value +| myValue2 +|=== + +`INCRBY` command, with a initial value '1'': + +[source,cypher] +---- +CALL apoc.redis.incrby($uri, 'myKey', 2) +---- + +.Results +[opts="header"] +|=== +| value +| 3 +|=== + + +=== `List commands` + +`RPUSH` command: + +[source,cypher] +---- +CALL apoc.mongodb.push($uri, 'myListKey', ['foo','bar','baz']) +---- + +.Results +[opts="header"] +|=== +| value +| 3 +|=== + +`LPUSH` command: + +[source,cypher] +---- +CALL apoc.redis.push($uri, 'myListKey', ['prefix1'], {right: false}) +---- + +.Results +[opts="header"] +|=== +| value +| 4 +|=== + +`LRANGE` command: + +[source,cypher] +---- +CALL apoc.redis.lrange($uri, 'myListKey', 0 , 10) +---- + +.Results +[opts="header"] +|=== +| value +| ["prefix1", "foo", "bar", "baz"] +|=== + +`RPOP` command, with the previous value: + +[source,cypher] +---- +CALL apoc.redis.pop($uri, 'myListKey') +---- + +.Results +[opts="header"] +|=== +| value +| "baz" +|=== + + +`LPOP` command, with the previous value: + +[source,cypher] +---- +CALL apoc.redis.pop($uri, 'myListKey', {right: false}) +---- + +.Results +[opts="header"] +|=== +| value +| "prefix1" +|=== + + + + + +=== `Sets commands` + +`SADD` command: + +[source,cypher] +---- +CALL apoc.redis.sadd($uri, 'mySetKey', ['foo','bar','baz']) +---- + +.Results +[opts="header"] +|=== +| value +| 3 +|=== + +`SUNION` command, with the previous one and a second key with ['alpha', 'beta'] values: + +[source,cypher] +---- +CALL apoc.redis.sunion($uri, ['mySetKey', 'mySetKeyTwo']) +---- + +.Results +[opts="header"] +|=== +| value +| ["foo", "bar", "baz", "alpha", "beta"] +|=== + +`SCARD` command, with the previous key: + +[source,cypher] +---- +CALL apoc.redis.scard($uri, 'mySetKey') +---- + +.Results +[opts="header"] +|=== +| value +| 3 +|=== + +`SMEMBERS` command, with the previous key: + +[source,cypher] +---- +CALL apoc.redis.smembers($uri, 'mySetKey') +---- + +.Results +[opts="header"] +|=== +| value +| ["foo", "bar", "baz"] +|=== + +`SPOP` command, with the previous key: + +[source,cypher] +---- +CALL apoc.redis.smembers($uri, 'mySetKey') +---- + +.Results +[opts="header"] +|=== +| value +| "baz" +|=== + + +=== `Sorted sets commands` + +`ZADD` command: + +[source,cypher] +---- +CALL apoc.redis.zadd($uri, 'mySortedSetKey', [0, 'first', 100, 'third', 1, 'second']) +---- + +.Results +[opts="header"] +|=== +| value +| 3 +|=== + +`ZCARD` command, with the previous key: + +[source,cypher] +---- +CALL apoc.redis.zcard($uri, 'mySortedSetKey') +---- + +.Results +[opts="header"] +|=== +| value +| 3 +|=== + +`ZRANGEBYSCORE` command, with the previous key: + +[source,cypher] +---- +CALL apoc.redis.zrangebyscore($uri, 'mySortedSetKey', 0, 100) +---- + +.Results +[opts="header"] +|=== +| value +| ["first", "second", "third"] +|=== + +`ZREM` command, with the previous key: + +[source,cypher] +---- +CALL apoc.redis.zrem($uri, 'mySortedSetKey', ['first', 'second']) +---- + +.Results +[opts="header"] +|=== +| value +| 2 +|=== + +=== `Hashes commands` + +`HSET` command: + +[source,cypher] +---- +CALL apoc.redis.hset($uri, 'mapKey', {alpha: 'beta', gamma: 'delta', epsilon: 'zeta', number: '1'}) +---- + +.Results +[opts="header"] +|=== +| value +| 4 +|=== + +`HDEL` command, with the previous key: + +[source,cypher] +---- +CALL apoc.redis.hdel($uri, 'mapKey', ['alpha', 'gamma']) +---- + +.Results +[opts="header"] +|=== +| value +| 2 +|=== + +`HEXISTS` command, with the previous key: + +[source,cypher] +---- +CALL apoc.redis.hexists($uri, 'mapKey', 'epsilon') +---- + +.Results +[opts="header"] +|=== +| value +| true +|=== + +`HGET` command, with the previous key: + +[source,cypher] +---- +CALL apoc.redis.hget($uri, 'mapKey', 'epsilon') +---- + +.Results +[opts="header"] +|=== +| value +| "zeta" +|=== + +`HINCRBY` command, with the previous key: + +[source,cypher] +---- +CALL apoc.redis.hincrby($uri, 'mapKey', 'number', 3) +---- + +.Results +[opts="header"] +|=== +| value +| 4 +|=== + +=== `Keys commands` + +`COPY` command: + +[source,cypher] +---- +CALL apoc.redis.copy($uri, 'from', 'to') +---- + +.Results +[opts="header"] +|=== +| value +| true +|=== + +`EXISTS` command: + +[source,cypher] +---- +CALL apoc.redis.exists($uri, ['to']) +---- + +.Results +[opts="header"] +|=== +| value +| true +|=== + +`PEXPIRE` command: + +[source,cypher] +---- +CALL apoc.redis.pexpire($uri, 'to', 100, false) +---- + +.Results +[opts="header"] +|=== +| value +| true +|=== + +`PTTL` command: + +[source,cypher] +---- +CALL apoc.redis.pexpire($uri, 'to') +---- + +.Results +[opts="header"] +|=== +| value +| 95 +|=== + +`PERSIST` command: + +[source,cypher] +---- +CALL apoc.redis.persist($uri, 'to') +---- + +.Results +[opts="header"] +|=== +| value +| true +|=== + + + +=== `Eval command` + +We can execute an eval command with a return value `BOOLEAN`, `INTEGER`, `STATUS`, `VALUE` or `MULTI` (of these types). +With a `keyEval` with a value `valueEval`, +we can execute an `EVAL return redis.call("get", KEYS[1]) testEval 'key:name'` command, with a return value 'VALUE': + +[source,cypher] +---- +CALL apoc.redis.eval($uri, 'return redis.call("get", KEYS[1])', 'VALUE', ['testEval'], ['key:name']) +---- + +.Results +[opts="header"] +|=== +| value +| valueEval +|=== + +=== `Server command` + +`INFO` command: + +[source,cypher] +---- +CALL apoc.redis.info($uri) +---- + +.Results +[opts="header"] +|=== +| value +| ...INFO SERVER... +|=== + +`CONFIG GET` command: + +[source,cypher] +---- +CALL apoc.redis.configGet($uri, "slowlog-max-len") +---- + +.Results +[opts="header"] +|=== +| value +| 128 +|=== + +`CONFIG SET` command: + +[source,cypher] +---- +CALL apoc.redis.configSet($uri, $keyConfig, '64') +---- + +.Results +[opts="header"] +|=== +| value +| "OK" +|=== diff --git a/docs/asciidoc/modules/ROOT/pages/export/csv.adoc b/docs/asciidoc/modules/ROOT/pages/export/csv.adoc index ee3486d6d5..11f7013e03 100644 --- a/docs/asciidoc/modules/ROOT/pages/export/csv.adoc +++ b/docs/asciidoc/modules/ROOT/pages/export/csv.adoc @@ -19,6 +19,10 @@ For a graph containing node properties `age`, `city`, `kids`, `male`, `name`, an Labels exported are ordered alphabetically. The output of `labels()` function is not sorted, use it in combination with `apoc.coll.sort()`. +Note that, to perform a correct Point serialization, it is not recommended to export a point with coordinates x,y and crs: 'wgs-84', +for example `point({x: 56.7, y: 12.78, crs: 'wgs-84'})`. Otherwise, the point will be exported with longitude and latitude (and heigth) instead of x and y (and z) + + // tag::export.csv[] [[export-csv-available-procedures]] == Available Procedures diff --git a/docs/asciidoc/modules/ROOT/pages/export/graphml.adoc b/docs/asciidoc/modules/ROOT/pages/export/graphml.adoc index a783a9e447..e00c483742 100644 --- a/docs/asciidoc/modules/ROOT/pages/export/graphml.adoc +++ b/docs/asciidoc/modules/ROOT/pages/export/graphml.adoc @@ -17,6 +17,10 @@ e.g: |LocalDateTime | 2018-10-10T00:00 |=== +Note that, to perform a correct Point serialization, it is not recommended to export a point with coordinates x,y and crs: 'wgs-84', +for example `point({x: 56.7, y: 12.78, crs: 'wgs-84'})`. Otherwise, the point will be exported with longitude and latitude (and heigth) instead of x and y (and z) + + [[export-graphml-available-procedures]] == Available Procedures diff --git a/docs/asciidoc/modules/ROOT/pages/export/json.adoc b/docs/asciidoc/modules/ROOT/pages/export/json.adoc index 5c1c00a5c8..17875128dc 100755 --- a/docs/asciidoc/modules/ROOT/pages/export/json.adoc +++ b/docs/asciidoc/modules/ROOT/pages/export/json.adoc @@ -89,6 +89,10 @@ CREATE (a)-[:KNOWS {since: 1993}]->(b) The Neo4j Browser visualization below shows the imported graph: +Note that, to perform a correct Point serialization, it is not recommended to export a point with coordinates x,y and crs: 'wgs-84', +for example `point({x: 56.7, y: 12.78, crs: 'wgs-84'})`. Otherwise, the point will be exported with longitude and latitude (and heigth) instead of x and y (and z) + + image::export-json.png[] [[export-database-json]] @@ -130,13 +134,12 @@ RETURN file, nodes, relationships, properties, data [opts="header",cols="1m,1m,1m,1m,5"] |=== | file | nodes | relationships | properties | data -| NULL | 3 | 1 | 10 | "{\"type\":\"node\",\"id\":\"0\",\"labels\":[\"User\"],\"properties\":{\"born\":\"2015-07-04T19:32:24\",\"name\":\"Adam\",\"place\":{\"crs\":\"wgs-84\",\"latitude\":33.46789,\"longitude\":13.1,\"height\":null},\"age\":42,\"male\":true,\"kids\":[\"Sam\",\"Anna\",\"Grace\"]}} +| NULL | 3 | 1 | 10 | "{\"type\":\"node\",\"id\":\"0\",\"labels\":[\"User\"],\"properties\":{\"born\":\"2015-07-04T19:32:24\",\"name\":\"Adam\",\"place\":{\"crs\":\"wgs-84\",\"latitude\":13.1,\"longitude\":33.46789,\"height\":null},\"age\":42,\"male\":true,\"kids\":[\"Sam\",\"Anna\",\"Grace\"]}} {\"type\":\"node\",\"id\":\"1\",\"labels\":[\"User\"],\"properties\":{\"name\":\"Jim\",\"age\":42}} {\"type\":\"node\",\"id\":\"2\",\"labels\":[\"User\"],\"properties\":{\"age\":12}} {\"id\":\"50000\",\"type\":\"relationship\",\"label\":\"KNOWS\",\"properties\":{\"since\":1993},\"start\":{\"id\":\"0\",\"labels\":[\"User\"]},\"end\":{\"id\":\"1\",\"labels\":[\"User\"]}}" |=== - [[export-nodes-relationships-json]] === Export specified nodes and relationships to JSON @@ -185,7 +188,7 @@ RETURN file, nodes, relationships, properties, data |=== | file | nodes | relationships | properties | data -| NULL | 3 | 1 | 10 | "{\"type\":\"node\",\"id\":\"0\",\"labels\":[\"User\"],\"properties\":{\"born\":\"2015-07-04T19:32:24\",\"name\":\"Adam\",\"place\":{\"crs\":\"wgs-84\",\"latitude\":33.46789,\"longitude\":13.1,\"height\":null},\"age\":42,\"male\":true,\"kids\":[\"Sam\",\"Anna\",\"Grace\"]}} +| NULL | 3 | 1 | 10 | "{\"type\":\"node\",\"id\":\"0\",\"labels\":[\"User\"],\"properties\":{\"born\":\"2015-07-04T19:32:24\",\"name\":\"Adam\",\"place\":{\"crs\":\"wgs-84\",\"latitude\":13.1,\"longitude\":33.46789 ,\"height\":null},\"age\":42,\"male\":true,\"kids\":[\"Sam\",\"Anna\",\"Grace\"]}} {\"type\":\"node\",\"id\":\"1\",\"labels\":[\"User\"],\"properties\":{\"name\":\"Jim\",\"age\":42}} {\"type\":\"node\",\"id\":\"2\",\"labels\":[\"User\"],\"properties\":{\"age\":12}} {\"id\":\"50000\",\"type\":\"rel @@ -254,7 +257,7 @@ RETURN file, nodes, relationships, properties, data [opts="header",cols="1m,1m,1m,1m,5"] |=== | file | nodes | relationships | properties | data -| NULL | 2 | 1 | 9 | "{\"type\":\"node\",\"id\":\"0\",\"labels\":[\"User\"],\"properties\":{\"born\":\"2015-07-04T19:32:24\",\"name\":\"Adam\",\"place\":{\"crs\":\"wgs-84\",\"latitude\":33.46789,\"longitude\":13.1,\"height\":null},\"age\":42,\"male\":true,\"kids\":[\"Sam\",\"Anna\",\"Grace\"]}} +| NULL | 2 | 1 | 9 | "{\"type\":\"node\",\"id\":\"0\",\"labels\":[\"User\"],\"properties\":{\"born\":\"2015-07-04T19:32:24\",\"name\":\"Adam\",\"place\":{\"crs\":\"wgs-84\",\"latitude\":13.1,\"longitude\":33.46789,\"height\":null},\"age\":42,\"male\":true,\"kids\":[\"Sam\",\"Anna\",\"Grace\"]}} {\"type\":\"node\",\"id\":\"1\",\"labels\":[\"User\"],\"properties\":{\"name\":\"Jim\",\"age\":42}} {\"id\":\"50000\",\"type\":\"relationship\",\"label\":\"KNOWS\",\"properties\":{\"since\":1993},\"start\":{\"id\":\"0\",\"labels\":[\"User\"]},\"end\":{\"id\":\"1\",\"labels\":[\"User\"]}}" " @@ -307,7 +310,7 @@ RETURN file, nodes, relationships, properties, data [opts="header",cols="1m,1m,1m,1m,5"] |=== | file | nodes | relationships | properties | data -| NULL | 2 | 0 | 8 | "{\"u\":{\"type\":\"node\",\"id\":\"0\",\"labels\":[\"User\"],\"properties\":{\"born\":\"2015-07-04T19:32:24\",\"name\":\"Adam\",\"place\":{\"crs\":\"wgs-84\",\"latitude\":33.46789,\"longitude\":13.1,\"height\":null},\"age\":42,\"male\":true,\"kids\":[\"Sam\",\"Anna\",\"Grace\"]}}} +| NULL | 2 | 0 | 8 | "{\"u\":{\"type\":\"node\",\"id\":\"0\",\"labels\":[\"User\"],\"properties\":{\"born\":\"2015-07-04T19:32:24\",\"name\":\"Adam\",\"place\":{\"crs\":\"wgs-84\",\"latitude\":13.1,\"longitude\":33.46789,\"height\":null},\"age\":42,\"male\":true,\"kids\":[\"Sam\",\"Anna\",\"Grace\"]}}} {\"u\":{\"type\":\"node\",\"id\":\"1\",\"labels\":[\"User\"],\"properties\":{\"name\":\"Jim\",\"age\":42}}}" |=== diff --git a/docs/asciidoc/modules/ROOT/pages/graph-updates/graph-refactoring/invert-relationship.adoc b/docs/asciidoc/modules/ROOT/pages/graph-updates/graph-refactoring/invert-relationship.adoc index 3db30804c9..59bc55d3ff 100644 --- a/docs/asciidoc/modules/ROOT/pages/graph-updates/graph-refactoring/invert-relationship.adoc +++ b/docs/asciidoc/modules/ROOT/pages/graph-updates/graph-refactoring/invert-relationship.adoc @@ -20,7 +20,7 @@ The example below will help us learn how to use this procedure. [source,cypher] ---- -CREATE (c:Car {make:"Volvo")-[rel:DRIVES {year:2001}]->(p:Person {name:"Dan"}) +CREATE path=(c:Car {make:"Volvo"})-[rel:DRIVES {year:2001}]->(p:Person {name:"Dan"}) RETURN path ---- image::apoc.refactor.invert.dataset.png[scaledwidth="100%"] @@ -34,6 +34,15 @@ yield input, output RETURN input, output ---- -If we execute this query, it will result in the following graph: +.Results +[opts="header",cols="2"] +|=== +| input | output +| 2 | {"identity":3,"start":9,"end":8,"type":"DRIVES","properties":{"year":2001}} +|=== + + +If we execute `MATCH path=(c:Car {make:"Volvo"})-[rel:DRIVES {year:2001}]-(p:Person {name:"Dan"}) RETURN path`, +it will result in the following graph: image::apoc.refactor.invert.png[scaledwidth="100%"] diff --git a/docs/asciidoc/modules/ROOT/pages/help/index.adoc b/docs/asciidoc/modules/ROOT/pages/help/index.adoc index 08227d43ca..5d68f19ec2 100644 --- a/docs/asciidoc/modules/ROOT/pages/help/index.adoc +++ b/docs/asciidoc/modules/ROOT/pages/help/index.adoc @@ -38,30 +38,26 @@ You can see the procedures signature in the output of `CALL apoc.help("name")` [source,cypher] ---- -CALL apoc.help("dijkstra") +CALL apoc.help("levenshteinDistance") ---- The signature is always `name : : TYPE`, so in this case: ---- -apoc.algo.dijkstra - (startNode :: NODE?, endNode :: NODE?, - relationshipTypesAndDirections :: STRING?, weightPropertyName :: STRING?) -:: (path :: PATH?, weight :: FLOAT?) +apoc.text.levenshteinDistance +(text1 :: STRING?, text2 :: STRING?) +:: (INTEGER?) ---- .Parameter Explanation [opts=header,cols="m,m"] |=== | Name | Type -h| Procedure Parameters | -| startNode | Node -| endNode | Node -| relationshipTypesAndDirections | String -| weightPropertyName | String -h| Output Return Columns | -| path | Path -| weight | Float +2.+h| Procedure Parameters +| text1 | String +| text2 | String +2.+h| Output Return Columns +| result | Integer |=== // end::signature[] \ No newline at end of file diff --git a/docs/asciidoc/modules/ROOT/pages/import/includes/jsonpath.adoc b/docs/asciidoc/modules/ROOT/pages/import/includes/jsonpath.adoc index 41dd18b597..c8760ba8ef 100644 --- a/docs/asciidoc/modules/ROOT/pages/import/includes/jsonpath.adoc +++ b/docs/asciidoc/modules/ROOT/pages/import/includes/jsonpath.adoc @@ -31,3 +31,47 @@ All of the operators and options for specifying JSON paths are included in the n | [start:end] | Array slice operator | `$.items[0:5]` - retrieve the first through fifth items in the array | [?()] | Filter expression. Expression must evaluate to a boolean value. | `$.items[?(@.is_answered == true)]` - retrieve items where the is_answered field is true |=== + + +Moreover, we can customize the Json path options, adding the config {pathOptions: `LIST OF STRINGS`}, +where the strings are based on https://javadoc.io/doc/com.jayway.jsonpath/json-path/2.4.0/com/jayway/jsonpath/Option.html[Enum