diff --git a/core/src/main/java/apoc/meta/Meta.java b/core/src/main/java/apoc/meta/Meta.java index 3577a3602b..4f941abfeb 100644 --- a/core/src/main/java/apoc/meta/Meta.java +++ b/core/src/main/java/apoc/meta/Meta.java @@ -416,10 +416,10 @@ public long count(@Name(value = "nodes", defaultValue = "[]") List nodes ? StreamSupport.stream(subGraph.getAllLabelsInUse().spliterator(), false) : nodes.stream().filter(Objects::nonNull).map(String::trim).map(Label::label); - final boolean isIncludeRels = CollectionUtils.isEmpty(conf.getIncludesRels()); + final boolean isIncludeRels = CollectionUtils.isEmpty(conf.getIncludeRels()); Set visitedNodes = new HashSet<>(); return labels - .flatMap(label -> isIncludeRels ? Stream.of(subGraph.countsForNode(label)) : conf.getIncludesRels() + .flatMap(label -> isIncludeRels ? Stream.of(subGraph.countsForNode(label)) : conf.getIncludeRels() .stream() .filter(Objects::nonNull) .map(String::trim) @@ -544,7 +544,7 @@ public Stream dataOf(@Name(value = "graph") Object graph, @Name(valu } else { throw new IllegalArgumentException("Supported inputs are String, VirtualGraph, Map"); } - return collectMetaData(subGraph, metaConfig).values().stream().flatMap(x -> x.values().stream()); + return collectMetaData(subGraph, metaConfig.getSampleMetaConfig()).values().stream().flatMap(x -> x.values().stream()); } // todo ask index for distinct values if index size < 10 or so @@ -552,7 +552,7 @@ public Stream dataOf(@Name(value = "graph") Object graph, @Name(valu @Procedure @Description("apoc.meta.data({config}) - examines a subset of the graph to provide a tabular meta information") public Stream data(@Name(value = "config",defaultValue = "{}") Map config) { - MetaConfig metaConfig = new MetaConfig(config); + SampleMetaConfig metaConfig = new SampleMetaConfig(config); return collectMetaData(new DatabaseSubGraph(transaction), metaConfig).values().stream().flatMap(x -> x.values().stream()); } @@ -560,7 +560,7 @@ public Stream data(@Name(value = "config",defaultValue = "{}") Map schema(@Name(value = "config",defaultValue = "{}") Map config) { MetaStats metaStats = collectStats(); - MetaConfig metaConfig = new MetaConfig(config); + SampleMetaConfig metaConfig = new SampleMetaConfig(config); Map, Map> metaData = collectMetaData(new DatabaseSubGraph(transaction), metaConfig); Map relationships = collectRelationshipsMetaData(metaStats, metaData); @@ -646,12 +646,12 @@ private Tables4LabelsProfile collectTables4LabelsProfile (MetaConfig config) { } } - Map countStore = getLabelCountStore(); + Map countStore = getLabelCountStore(transaction, kernelTx); - Set includeLabels = config.getIncludesLabels(); - Set excludes = config.getExcludes(); + Set includeLabels = config.getIncludeLabels(); + Set excludes = config.getExcludeLabels(); - Set includeRels = config.getIncludesRels(); + Set includeRels = config.getIncludeRels(); Set excludeRels = config.getExcludeRels(); for (Label label : tx.getAllLabelsInUse()) { @@ -695,7 +695,7 @@ private Tables4LabelsProfile collectTables4LabelsProfile (MetaConfig config) { // End new code - private Map, Map> collectMetaData(SubGraph graph, MetaConfig config) { + private Map, Map> collectMetaData(SubGraph graph, SampleMetaConfig config) { Map, Map> metaData = new LinkedHashMap<>(100); Set types = Iterables.asSet(graph.getAllRelationshipTypesInUse()); @@ -735,7 +735,7 @@ private Set getIndexedProperties(Iterable indexes) { .collect(Collectors.toSet()); } - private Map getLabelCountStore() { + private static Map getLabelCountStore(Transaction tx, KernelTransaction kernelTx) { List labels = Iterables.stream(tx.getAllLabelsInUse()).map( Label::name ).collect( Collectors.toList()); TokenRead tokenRead = kernelTx.tokenRead(); return labels @@ -743,7 +743,7 @@ private Map getLabelCountStore() { .collect(Collectors.toMap(e -> e, e -> kernelTx.dataRead().countsForNodeWithoutTxState(tokenRead.nodeLabel(e)))); } - public long getSampleForLabelCount(long labelCount, long sample) { + public static long getSampleForLabelCount(long labelCount, long sample) { if(sample != -1L) { long skipCount = labelCount / sample; long min = (long) Math.floor(skipCount - (skipCount * 0.1D)); @@ -1041,14 +1041,14 @@ public RelationshipType relationshipType() { @Procedure @Description("apoc.meta.graph - examines the full graph to create the meta-graph") public Stream graph(@Name(value = "config",defaultValue = "{}") Map config) { - MetaConfig metaConfig = new MetaConfig(config); + SampleMetaConfig metaConfig = new SampleMetaConfig(config, false); return metaGraph(new DatabaseSubGraph(transaction), null, null, true, metaConfig); } @Procedure("apoc.meta.graph.of") @Description("apoc.meta.graph.of({graph}, {config}) - examines a subset of the graph to provide a graph meta information") public Stream graphOf(@Name(value = "graph",defaultValue = "{}") Object graph, @Name(value = "config",defaultValue = "{}") Map config) { - MetaConfig metaConfig = new MetaConfig(config); + MetaConfig metaConfig = new MetaConfig(config, false); final SubGraph subGraph; if (graph instanceof String) { Result result = tx.execute((String) graph); @@ -1066,12 +1066,10 @@ public Stream graphOf(@Name(value = "graph",defaultValue = "{}") Ob } else { throw new IllegalArgumentException("Supported inputs are String, VirtualGraph, Map"); } - return metaGraph(subGraph,null, null, true, metaConfig); + return metaGraph(subGraph,null, null, true, metaConfig.getSampleMetaConfig()); } - private Stream metaGraph(SubGraph subGraph, Collection labelNames, Collection relTypeNames, boolean removeMissing, MetaConfig metaConfig) { - TokenRead tokenRead = kernelTx.tokenRead(); - + private Stream metaGraph(SubGraph subGraph, Collection labelNames, Collection relTypeNames, boolean removeMissing, SampleMetaConfig metaConfig) { Iterable types = subGraph.relTypesInUse(relTypeNames); Iterable