diff --git a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/compatibility/LatestRuntimeVariablePlannerCompatibility.scala b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/compatibility/LatestRuntimeVariablePlannerCompatibility.scala index 6b3a61e5278f1..c5d2d17801bef 100644 --- a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/compatibility/LatestRuntimeVariablePlannerCompatibility.scala +++ b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/compatibility/LatestRuntimeVariablePlannerCompatibility.scala @@ -137,7 +137,7 @@ STATEMENT <: AnyRef](configV3_4: CypherCompilerConfiguration, def isPeriodicCommit: Boolean = inner.isPeriodicCommit def isStale(lastCommittedTxId: LastCommittedTxIdProvider, ctx: TransactionalContextWrapper): CacheCheckResult = - inner.checkPlanResusability(lastCommittedTxId, TransactionBoundGraphStatistics(ctx.readOperations)) + inner.checkPlanResusability(lastCommittedTxId, TransactionBoundGraphStatistics(ctx.dataRead, ctx.readOperations)) override val plannerInfo: PlannerInfo = { new PlannerInfo(inner.plannerUsed.name, inner.runtimeUsed.name, inner.plannedIndexUsage.map { diff --git a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/compatibility/v3_3/Compatibility.scala b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/compatibility/v3_3/Compatibility.scala index ff189f2edde93..2764515592a81 100644 --- a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/compatibility/v3_3/Compatibility.scala +++ b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/compatibility/v3_3/Compatibility.scala @@ -130,7 +130,7 @@ extends LatestRuntimeVariablePlannerCompatibility[CONTEXT3_4, T, StatementV3_3]( notificationLoggerV3_3, graphStatisticsV3_3)) val graphStatisticsV3_4 = InstrumentedGraphStatisticsV3_4( - TransactionBoundGraphStatistics(transactionalContext.tc.readOperations()), + TransactionBoundGraphStatistics(transactionalContext.dataRead, transactionalContext.tc.readOperations()), graphStatisticsSnapshotV3_4) val planContextV3_4 = new ExceptionTranslatingPlanContextV3_4( new TransactionBoundPlanContext(tcV3_4, notificationLoggerV3_4, graphStatisticsV3_4)) diff --git a/community/cypher/interpreted-runtime/src/main/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundGraphStatistics.scala b/community/cypher/interpreted-runtime/src/main/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundGraphStatistics.scala index 0bc8d52056283..7a90ba203d167 100644 --- a/community/cypher/interpreted-runtime/src/main/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundGraphStatistics.scala +++ b/community/cypher/interpreted-runtime/src/main/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundGraphStatistics.scala @@ -21,17 +21,19 @@ package org.neo4j.cypher.internal.runtime.interpreted import org.neo4j.cypher.internal.planner.v3_4.spi.{GraphStatistics, IndexDescriptor, StatisticsCompletingGraphStatistics} import org.neo4j.cypher.internal.util.v3_4.{Cardinality, LabelId, RelTypeId, Selectivity} +import org.neo4j.internal.kernel.api.Read import org.neo4j.kernel.api.ReadOperations import org.neo4j.kernel.api.exceptions.index.IndexNotFoundKernelException object TransactionBoundGraphStatistics { - def apply(ops: ReadOperations) = new StatisticsCompletingGraphStatistics(new BaseTransactionBoundGraphStatistics(ops)) + def apply(read: Read, ops: ReadOperations) = new StatisticsCompletingGraphStatistics(new BaseTransactionBoundGraphStatistics(read, ops)) - private class BaseTransactionBoundGraphStatistics(operations: ReadOperations) extends GraphStatistics with IndexDescriptorCompatibility { + //TODD remove ReadOperations when schema ops are ported + private class BaseTransactionBoundGraphStatistics(read: Read, operations: ReadOperations) extends GraphStatistics with IndexDescriptorCompatibility { def indexSelectivity(index: IndexDescriptor): Option[Selectivity] = try { - val labeledNodes = operations.countsForNodeWithoutTxState( index.label ).toDouble + val labeledNodes = read.countsForNodeWithoutTxState( index.label ).toDouble // Probability of any node with the given label, to have a property with a given value val indexEntrySelectivity = operations.indexUniqueValuesSelectivity(cypherToKernel(index)) @@ -46,7 +48,7 @@ object TransactionBoundGraphStatistics { def indexPropertyExistsSelectivity(index: IndexDescriptor): Option[Selectivity] = try { - val labeledNodes = operations.countsForNodeWithoutTxState( index.label ).toDouble + val labeledNodes = read.countsForNodeWithoutTxState( index.label ).toDouble // Probability of any node with the given label, to have a given property val indexSize = operations.indexSize(cypherToKernel(index)) @@ -59,10 +61,10 @@ object TransactionBoundGraphStatistics { } def nodesWithLabelCardinality(labelId: Option[LabelId]): Cardinality = - atLeastOne(operations.countsForNodeWithoutTxState(labelId)) + atLeastOne(read.countsForNodeWithoutTxState(labelId)) def cardinalityByLabelsAndRelationshipType(fromLabel: Option[LabelId], relTypeId: Option[RelTypeId], toLabel: Option[LabelId]): Cardinality = - atLeastOne(operations.countsForRelationshipWithoutTxState(fromLabel, relTypeId, toLabel)) + atLeastOne(read.countsForRelationshipWithoutTxState(fromLabel, relTypeId, toLabel)) /** * Due to the way cardinality calculations work, zero is a bit dangerous, as it cancels out @@ -76,7 +78,7 @@ object TransactionBoundGraphStatistics { Cardinality(count) } - override def nodesAllCardinality(): Cardinality = atLeastOne(operations.countsForNodeWithoutTxState(-1)) + override def nodesAllCardinality(): Cardinality = atLeastOne(read.countsForNodeWithoutTxState(-1)) } } diff --git a/community/cypher/interpreted-runtime/src/main/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundPlanContext.scala b/community/cypher/interpreted-runtime/src/main/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundPlanContext.scala index 1ea1fcf73d572..066c746c144d1 100644 --- a/community/cypher/interpreted-runtime/src/main/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundPlanContext.scala +++ b/community/cypher/interpreted-runtime/src/main/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundPlanContext.scala @@ -40,7 +40,8 @@ import scala.collection.JavaConverters._ object TransactionBoundPlanContext { def apply(tc: TransactionalContextWrapper, logger: InternalNotificationLogger) = - new TransactionBoundPlanContext(tc, logger, InstrumentedGraphStatistics(TransactionBoundGraphStatistics(tc.readOperations), + new TransactionBoundPlanContext(tc, logger, InstrumentedGraphStatistics(TransactionBoundGraphStatistics(tc.dataRead, + tc.readOperations), new MutableGraphStatisticsSnapshot())) } diff --git a/community/cypher/interpreted-runtime/src/main/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundQueryContext.scala b/community/cypher/interpreted-runtime/src/main/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundQueryContext.scala index b829c8eeaf562..7df400dd5ee7a 100644 --- a/community/cypher/interpreted-runtime/src/main/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundQueryContext.scala +++ b/community/cypher/interpreted-runtime/src/main/scala/org/neo4j/cypher/internal/runtime/interpreted/TransactionBoundQueryContext.scala @@ -65,9 +65,7 @@ import org.neo4j.kernel.impl.query.Neo4jTransactionalContext import org.neo4j.kernel.impl.util.ValueUtils.{fromNodeProxy, fromRelationshipProxy} import org.neo4j.kernel.impl.util.{DefaultValueMapper, NodeProxyWrappingNodeValue, RelationshipProxyWrappingValue} import org.neo4j.values.storable.CoordinateReferenceSystem.{Cartesian, WGS84} -import org.neo4j.values.storable._ -import org.neo4j.values.storable.{PointValue, TextValue, Value, Values} -import org.neo4j.values.storable.{TextValue, Value, Values} +import org.neo4j.values.storable.{PointValue, TextValue, Value, Values, _} import org.neo4j.values.virtual.{ListValue, NodeValue, RelationshipValue, VirtualValues} import org.neo4j.values.{AnyValue, ValueMapper} @@ -944,11 +942,11 @@ sealed class TransactionBoundQueryContext(val transactionalContext: Transactiona } override def nodeCountByCountStore(labelId: Int): Long = { - transactionalContext.statement.readOperations().countsForNode(labelId) + reads().countsForNode(labelId) } override def relationshipCountByCountStore(startLabelId: Int, typeId: Int, endLabelId: Int): Long = { - transactionalContext.statement.readOperations().countsForRelationship(startLabelId, typeId, endLabelId) + reads().countsForRelationship(startLabelId, typeId, endLabelId) } override def lockNodes(nodeIds: Long*) = diff --git a/community/kernel/src/main/java/org/neo4j/kernel/api/exceptions/index/IndexNotFoundKernelException.java b/community/kernel-api/src/main/java/org/neo4j/kernel/api/exceptions/index/IndexNotFoundKernelException.java similarity index 100% rename from community/kernel/src/main/java/org/neo4j/kernel/api/exceptions/index/IndexNotFoundKernelException.java rename to community/kernel-api/src/main/java/org/neo4j/kernel/api/exceptions/index/IndexNotFoundKernelException.java