Skip to content

Commit

Permalink
Use NodeValueIndexCursor.EMPTY
Browse files Browse the repository at this point in the history
  • Loading branch information
fickludd committed Oct 12, 2018
1 parent 53c0ea0 commit bba3cce
Show file tree
Hide file tree
Showing 20 changed files with 331 additions and 260 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import org.neo4j.cypher.internal.runtime.interpreted.{DelegatingOperations, Dele
import org.neo4j.cypher.internal.v3_5.logical.plans.{IndexOrder, QualifiedName}
import org.neo4j.graphdb.{Path, PropertyContainer}
import org.neo4j.internal.kernel.api.helpers.RelationshipSelectionCursor
import org.neo4j.internal.kernel.api.{IndexQuery, IndexReference}
import org.neo4j.internal.kernel.api.{IndexQuery, IndexReference, NodeValueIndexCursor}
import org.neo4j.kernel.impl.api.store.RelationshipIterator
import org.neo4j.kernel.impl.core.EmbeddedProxySPI
import org.neo4j.values.AnyValue
Expand Down Expand Up @@ -106,9 +106,8 @@ class ExceptionTranslatingQueryContext(val inner: QueryContext) extends QueryCon
override def indexSeek[RESULT <: AnyRef](index: IndexReference,
needsValues: Boolean,
indexOrder: IndexOrder,
resultCreator: ResultCreator[RESULT],
values: Seq[IndexQuery]): Iterator[RESULT] =
translateException(inner.indexSeek(index, needsValues, indexOrder, resultCreator, values))
values: Seq[IndexQuery]): NodeValueIndexCursor =
translateException(inner.indexSeek(index, needsValues, indexOrder, values))

override def getNodesByLabel(id: Int): Iterator[NodeValue] =
translateException(inner.getNodesByLabel(id))
Expand Down Expand Up @@ -219,9 +218,8 @@ class ExceptionTranslatingQueryContext(val inner: QueryContext) extends QueryCon
translateException(inner.getRelTypeName(id))

override def lockingUniqueIndexSeek[RESULT](index: IndexReference,
resultCreator: ResultCreator[RESULT],
values: Seq[IndexQuery.ExactPredicate]): Option[RESULT] =
translateException(inner.lockingUniqueIndexSeek(index, resultCreator, values))
values: Seq[IndexQuery.ExactPredicate]): NodeValueIndexCursor =
translateException(inner.lockingUniqueIndexSeek(index, values))

override def getImportURL(url: URL) =
translateException(inner.getImportURL(url))
Expand Down Expand Up @@ -253,22 +251,19 @@ class ExceptionTranslatingQueryContext(val inner: QueryContext) extends QueryCon
override def indexSeekByContains[RESULT <: AnyRef](index: IndexReference,
needsValues: Boolean,
indexOrder: IndexOrder,
resultCreator: ResultCreator[RESULT],
value: String): Iterator[RESULT] =
translateException(inner.indexSeekByContains(index, needsValues, indexOrder, resultCreator, value))
value: String): NodeValueIndexCursor =
translateException(inner.indexSeekByContains(index, needsValues, indexOrder, value))

override def indexSeekByEndsWith[RESULT <: AnyRef](index: IndexReference,
needsValues: Boolean,
indexOrder: IndexOrder,
resultCreator: ResultCreator[RESULT],
value: String): Iterator[RESULT] =
translateException(inner.indexSeekByEndsWith(index, needsValues, indexOrder, resultCreator, value))
value: String): NodeValueIndexCursor =
translateException(inner.indexSeekByEndsWith(index, needsValues, indexOrder, value))

override def indexScan[RESULT <: AnyRef](index: IndexReference,
needsValues: Boolean,
indexOrder: IndexOrder,
resultCreator: ResultCreator[RESULT]): Iterator[RESULT] =
translateException(inner.indexScan(index, needsValues, indexOrder, resultCreator))
indexOrder: IndexOrder): NodeValueIndexCursor =
translateException(inner.indexScan(index, needsValues, indexOrder))

override def nodeIsDense(node: Long) =
translateException(inner.nodeIsDense(node))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,12 @@ import org.neo4j.cypher.internal.compatibility.v3_5.runtime.helpers.PrimitiveLon
import org.neo4j.cypher.internal.runtime.interpreted.pipes.{Pipe, PipeDecorator, QueryState}
import org.neo4j.cypher.internal.runtime.interpreted.{DelegatingOperations, DelegatingQueryContext, ExecutionContext}
import org.neo4j.cypher.internal.runtime.{Operations, QueryContext}
import org.neo4j.internal.kernel.api.{NodeCursor, NodeValueIndexCursor}
import org.neo4j.internal.kernel.api.helpers.RelationshipSelectionCursor
import org.neo4j.kernel.impl.api.store.RelationshipIterator
import org.neo4j.kernel.impl.factory.{DatabaseInfo, Edition}
import org.neo4j.storageengine.api.RelationshipVisitor
import org.neo4j.values.storable.Value
import org.neo4j.values.virtual.{NodeValue, RelationshipValue}
import org.opencypher.v9_0.util.attribution.Id

Expand Down Expand Up @@ -163,6 +165,30 @@ final class ProfilingPipeQueryContext(inner: QueryContext, val p: Pipe)
override def propertiesReference(): Long = inner.propertiesReference()
}

override protected def manyDbHits[A](inner: NodeValueIndexCursor): NodeValueIndexCursor = new NodeValueIndexCursor {

override def numberOfProperties(): Int = inner.numberOfProperties()

override def propertyKey(offset: Int): Int = inner.propertyKey(offset)

override def hasValue: Boolean = inner.hasValue

override def propertyValue(offset: Int): Value = inner.propertyValue(offset)

override def node(cursor: NodeCursor): Unit = inner.node(cursor)

override def nodeReference(): Long = inner.nodeReference()

override def next(): Boolean = {
increment()
inner.next()
}

override def close(): Unit = inner.close()

override def isClosed: Boolean = inner.isClosed
}

class ProfilerOperations[T](inner: Operations[T]) extends DelegatingOperations[T](inner) {
override protected def singleDbHit[A](value: A): A = self.singleDbHit(value)
override protected def manyDbHits[A](value: Iterator[A]): Iterator[A] = self.manyDbHits(value)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import org.neo4j.cypher.internal.v3_5.logical.plans.IndexOrder
import org.neo4j.cypher.internal.v3_5.logical.plans.QualifiedName
import org.neo4j.graphdb.{Path, PropertyContainer}
import org.neo4j.internal.kernel.api.helpers.RelationshipSelectionCursor
import org.neo4j.internal.kernel.api.{IndexQuery, IndexReference}
import org.neo4j.internal.kernel.api.{IndexQuery, IndexReference, NodeValueIndexCursor}
import org.neo4j.kernel.impl.api.store.RelationshipIterator
import org.neo4j.kernel.impl.core.EmbeddedProxySPI
import org.neo4j.values.AnyValue
Expand Down Expand Up @@ -240,26 +240,22 @@ abstract class BaseQueryContext extends QueryContext {
override def indexSeek[RESULT <: AnyRef](index: IndexReference,
needsValues: Boolean,
indexOrder: IndexOrder,
resultCreator: ResultCreator[RESULT],
queries: Seq[IndexQuery]): Iterator[RESULT] = notSupported()
queries: Seq[IndexQuery]): NodeValueIndexCursor = notSupported()

override def indexSeekByContains[RESULT <: AnyRef](index: IndexReference,
needsValues: Boolean,
indexOrder: IndexOrder,
resultCreator: ResultCreator[RESULT],
value: String): Iterator[RESULT] = notSupported()
value: String): NodeValueIndexCursor = notSupported()

override def indexSeekByEndsWith[RESULT <: AnyRef](index: IndexReference,
needsValues: Boolean,
indexOrder: IndexOrder,
resultCreator: ResultCreator[RESULT],
value: String): Iterator[RESULT] = notSupported()
value: String): NodeValueIndexCursor = notSupported()

override def indexScan[RESULT <: AnyRef](index: IndexReference,
needsValues: Boolean,
indexOrder: IndexOrder,
resultCreator: ResultCreator[RESULT]): Iterator[RESULT] = notSupported()
indexOrder: IndexOrder): NodeValueIndexCursor = notSupported()

override def lockingUniqueIndexSeek[RESULT](index: IndexReference, resultCreator: ResultCreator[RESULT],
queries: Seq[IndexQuery.ExactPredicate]): Option[RESULT] = notSupported()
override def lockingUniqueIndexSeek[RESULT](index: IndexReference,
queries: Seq[IndexQuery.ExactPredicate]): NodeValueIndexCursor = notSupported()
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ abstract class DelegatingQueryContext(val inner: QueryContext) extends QueryCont
protected def manyDbHits[A](value: LongIterator): LongIterator = value
protected def manyDbHits[A](value: RelationshipIterator): RelationshipIterator = value
protected def manyDbHits[A](value: RelationshipSelectionCursor): RelationshipSelectionCursor = value
protected def manyDbHits[A](value: NodeValueIndexCursor): NodeValueIndexCursor = value
protected def manyDbHits(count: Int): Int = count

override def resources: ResourceManager = inner.resources
Expand Down Expand Up @@ -122,29 +123,25 @@ abstract class DelegatingQueryContext(val inner: QueryContext) extends QueryCont
override def indexSeek[RESULT <: AnyRef](index: IndexReference,
needsValues: Boolean,
indexOrder: IndexOrder,
resultCreator: ResultCreator[RESULT],
queries: Seq[IndexQuery]): Iterator[RESULT] =
manyDbHits(inner.indexSeek(index, needsValues, indexOrder, resultCreator, queries))
queries: Seq[IndexQuery]): NodeValueIndexCursor =
manyDbHits(inner.indexSeek(index, needsValues, indexOrder, queries))

override def indexScan[RESULT <: AnyRef](index: IndexReference,
needsValues: Boolean,
indexOrder: IndexOrder,
resultCreator: ResultCreator[RESULT]): Iterator[RESULT] =
manyDbHits(inner.indexScan(index, needsValues, indexOrder, resultCreator))
indexOrder: IndexOrder): NodeValueIndexCursor =
manyDbHits(inner.indexScan(index, needsValues, indexOrder))

override def indexSeekByContains[RESULT <: AnyRef](index: IndexReference,
needsValues: Boolean,
indexOrder: IndexOrder,
resultCreator: ResultCreator[RESULT],
value: String): Iterator[RESULT] =
manyDbHits(inner.indexSeekByContains(index, needsValues, indexOrder, resultCreator, value))
value: String): NodeValueIndexCursor =
manyDbHits(inner.indexSeekByContains(index, needsValues, indexOrder, value))

override def indexSeekByEndsWith[RESULT <: AnyRef](index: IndexReference,
needsValues: Boolean,
indexOrder: IndexOrder,
resultCreator: ResultCreator[RESULT],
value: String): Iterator[RESULT] =
manyDbHits(inner.indexSeekByEndsWith(index, needsValues, indexOrder, resultCreator, value))
value: String): NodeValueIndexCursor =
manyDbHits(inner.indexSeekByEndsWith(index, needsValues, indexOrder, value))

override def getNodesByLabel(id: Int): Iterator[NodeValue] = manyDbHits(inner.getNodesByLabel(id))

Expand Down Expand Up @@ -193,9 +190,8 @@ abstract class DelegatingQueryContext(val inner: QueryContext) extends QueryCont
override def withAnyOpenQueryContext[T](work: (QueryContext) => T): T = inner.withAnyOpenQueryContext(work)

override def lockingUniqueIndexSeek[RESULT](index: IndexReference,
resultCreator: ResultCreator[RESULT],
queries: Seq[IndexQuery.ExactPredicate]): Option[RESULT] =
singleDbHit(inner.lockingUniqueIndexSeek(index, resultCreator, queries))
queries: Seq[IndexQuery.ExactPredicate]): NodeValueIndexCursor =
singleDbHit(inner.lockingUniqueIndexSeek(index, queries))

override def getRelTypeId(relType: String): Int = singleDbHit(inner.getRelTypeId(relType))

Expand Down

0 comments on commit bba3cce

Please sign in to comment.