Skip to content

Commit

Permalink
Update cypher compatibility compiler to 2.3.10
Browse files Browse the repository at this point in the history
  • Loading branch information
fickludd committed Apr 4, 2017
1 parent 4dd0911 commit a6030de
Show file tree
Hide file tree
Showing 7 changed files with 73 additions and 72 deletions.
2 changes: 1 addition & 1 deletion community/cypher/cypher/pom.xml
Expand Up @@ -180,7 +180,7 @@
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-cypher-compiler-2.3</artifactId>
<version>2.3.9</version>
<version>2.3.10</version>
<exclusions>
<exclusion>
<groupId>org.neo4j</groupId>
Expand Down
Expand Up @@ -68,11 +68,6 @@ object exceptionHandlerFor2_3 extends MapToPublicExceptions[CypherException] {
throw new ProfilerStatisticsNotReadyException(cause)
}

override def incomparableValuesException(lhs: String, rhs: String,
cause: Throwable): CypherException = {
incomparableValuesException(None, lhs, rhs, cause)
}

def incomparableValuesException(details: Option[String], lhs: String, rhs: String, cause: Throwable): CypherException = new IncomparableValuesException(details, lhs, rhs, cause)

def unknownLabelException(s: String, cause: Throwable) = new UnknownLabelException(s, cause)
Expand Down
Expand Up @@ -21,14 +21,12 @@ package org.neo4j.cypher.internal.compatibility

import java.net.URL

import org.neo4j.cypher.internal.compiler.v2_3.spi
import org.neo4j.cypher.internal.compiler.v2_3.spi._
import org.neo4j.cypher.internal.frontend.v2_3.SemanticDirection
import org.neo4j.cypher.{ConstraintValidationException, CypherExecutionException}
import org.neo4j.graphdb.{ConstraintViolationException => KernelConstraintViolationException, Node, PropertyContainer, Relationship}
import org.neo4j.kernel.api.TokenNameLookup
import org.neo4j.kernel.api.exceptions.KernelException
import org.neo4j.cypher.internal.compiler.v2_3.IndexDescriptor

class ExceptionTranslatingQueryContextFor2_3(inner: QueryContext) extends DelegatingQueryContext(inner) {
override def setLabelsOnNode(node: Long, labelIds: Iterator[Int]): Int =
Expand Down Expand Up @@ -91,7 +89,7 @@ class ExceptionTranslatingQueryContextFor2_3(inner: QueryContext) extends Delega
override def dropIndexRule(labelId: Int, propertyKeyId: Int) =
translateException(super.dropIndexRule(labelId, propertyKeyId))

override def indexSeek(index: IndexDescriptor, value: Any): Iterator[Node] =
override def indexSeek(index: SchemaTypes.IndexDescriptor, value: Any): Iterator[Node] =
translateException(super.indexSeek(index, value))

override def getNodesByLabel(id: Int): Iterator[Node] =
Expand All @@ -106,7 +104,7 @@ class ExceptionTranslatingQueryContextFor2_3(inner: QueryContext) extends Delega
override def getOrCreateFromSchemaState[K, V](key: K, creator: => V): V =
translateException(super.getOrCreateFromSchemaState(key, creator))

override def upgrade(context: spi.QueryContext): LockingQueryContext =
override def upgrade(context: QueryContext): LockingQueryContext =
translateException(super.upgrade(context))

override def createUniqueConstraint(labelId: Int, propertyKeyId: Int) =
Expand Down Expand Up @@ -142,7 +140,7 @@ class ExceptionTranslatingQueryContextFor2_3(inner: QueryContext) extends Delega
override def getRelTypeName(id: Int) =
translateException(super.getRelTypeName(id))

override def lockingExactUniqueIndexSearch(index: IndexDescriptor, value: Any) =
override def lockingExactUniqueIndexSearch(index: SchemaTypes.IndexDescriptor, value: Any) =
translateException(super.lockingExactUniqueIndexSearch(index, value))

override def commitAndRestartTx() =
Expand Down

This file was deleted.

@@ -0,0 +1,41 @@
/*
* Copyright (c) 2002-2017 "Neo Technology,"
* Network Engine for Objects in Lund AB [http://neotechnology.com]
*
* This file is part of Neo4j.
*
* Neo4j is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.neo4j.cypher.internal.spi.v2_3

import org.neo4j.kernel.api.index.{IndexDescriptor => KernelIndexDescriptor}
import org.neo4j.cypher.internal.compiler.v2_3.spi.SchemaTypes
import org.neo4j.kernel.api.constraints.{NodePropertyExistenceConstraint, RelationshipPropertyConstraint, UniquenessConstraint}

trait SchemaDescriptorTranslation {
implicit def cypherToKernel(index:SchemaTypes.IndexDescriptor):KernelIndexDescriptor =
new KernelIndexDescriptor( index.labelId, index.propertyId )

implicit def kernelToCypher(index:KernelIndexDescriptor):SchemaTypes.IndexDescriptor =
SchemaTypes.IndexDescriptor( index.getLabelId, index.getPropertyKeyId )

implicit def kernelToCypher(constraint:UniquenessConstraint):SchemaTypes.UniquenessConstraint =
SchemaTypes.UniquenessConstraint( constraint.label(), constraint.propertyKey() )

implicit def kernelToCypher(constraint:NodePropertyExistenceConstraint):SchemaTypes.NodePropertyExistenceConstraint =
SchemaTypes.NodePropertyExistenceConstraint( constraint.label(), constraint.propertyKey() )

implicit def kernelToCypher(constraint:RelationshipPropertyConstraint):SchemaTypes.RelationshipPropertyExistenceConstraint =
SchemaTypes.RelationshipPropertyExistenceConstraint( constraint.relationshipType(), constraint.propertyKey() )
}
Expand Up @@ -20,13 +20,12 @@
package org.neo4j.cypher.internal.spi.v2_3

import org.neo4j.cypher.MissingIndexException
import org.neo4j.cypher.internal.compiler.v2_3.{IndexDescriptor => CypherIndexDescriptor}
import org.neo4j.cypher.internal.compiler.v2_3.pipes.EntityProducer
import org.neo4j.cypher.internal.compiler.v2_3.pipes.matching.ExpanderStep
import org.neo4j.cypher.internal.compiler.v2_3.spi._
import org.neo4j.cypher.internal.spi.TransactionalContextWrapperv3_1
import org.neo4j.graphdb.Node
import org.neo4j.kernel.api.constraints.UniquenessConstraint
import org.neo4j.kernel.api.constraints.{UniquenessConstraint => KernelUniquenessConstraint}
import org.neo4j.kernel.api.exceptions.KernelException
import org.neo4j.kernel.api.exceptions.schema.SchemaKernelException
import org.neo4j.kernel.api.index.{IndexDescriptor => KernelIndexDescriptor, InternalIndexState}
Expand All @@ -35,10 +34,10 @@ import org.neo4j.kernel.impl.transaction.log.TransactionIdStore
import scala.collection.JavaConverters._

class TransactionBoundPlanContext(tc: TransactionalContextWrapperv3_1)
extends TransactionBoundTokenContext(tc.statement) with PlanContext with IndexDescriptorCompatibility {
extends TransactionBoundTokenContext(tc.statement) with PlanContext with SchemaDescriptorTranslation {

@Deprecated
def getIndexRule(labelName: String, propertyKey: String): Option[CypherIndexDescriptor] = evalOrNone {
def getIndexRule(labelName: String, propertyKey: String): Option[SchemaTypes.IndexDescriptor] = evalOrNone {
val labelId = tc.statement.readOperations().labelGetForName(labelName)
val propertyKeyId = tc.statement.readOperations().propertyKeyGetForName(propertyKey)

Expand All @@ -54,7 +53,7 @@ class TransactionBoundPlanContext(tc: TransactionalContextWrapperv3_1)
onlineIndexDescriptors.nonEmpty
}

def getUniqueIndexRule(labelName: String, propertyKey: String): Option[CypherIndexDescriptor] = evalOrNone {
def getUniqueIndexRule(labelName: String, propertyKey: String): Option[SchemaTypes.IndexDescriptor] = evalOrNone {
val labelId = tc.statement.readOperations().labelGetForName(labelName)
val propertyKeyId = tc.statement.readOperations().propertyKeyGetForName(propertyKey)

Expand All @@ -65,19 +64,19 @@ class TransactionBoundPlanContext(tc: TransactionalContextWrapperv3_1)
private def evalOrNone[T](f: => Option[T]): Option[T] =
try { f } catch { case _: SchemaKernelException => None }

private def getOnlineIndex(descriptor: KernelIndexDescriptor): Option[CypherIndexDescriptor] =
private def getOnlineIndex(descriptor: KernelIndexDescriptor): Option[SchemaTypes.IndexDescriptor] =
tc.statement.readOperations().indexGetState(descriptor) match {
case InternalIndexState.ONLINE => Some(descriptor)
case _ => None
}

def getUniquenessConstraint(labelName: String, propertyKey: String): Option[UniquenessConstraint] = try {
def getUniquenessConstraint(labelName: String, propertyKey: String): Option[SchemaTypes.UniquenessConstraint] = try {
val labelId = tc.statement.readOperations().labelGetForName(labelName)
val propertyKeyId = tc.statement.readOperations().propertyKeyGetForName(propertyKey)

import scala.collection.JavaConverters._
tc.statement.readOperations().constraintsGetForLabelAndPropertyKey(labelId, propertyKeyId).asScala.collectFirst {
case unique: UniquenessConstraint => unique
case unique: KernelUniquenessConstraint => unique
}
} catch {
case _: KernelException => None
Expand Down
Expand Up @@ -44,7 +44,7 @@ import org.neo4j.graphdb._
import org.neo4j.graphdb.security.URLAccessValidationError
import org.neo4j.graphdb.traversal.{Evaluators, TraversalDescription, Uniqueness}
import org.neo4j.kernel.GraphDatabaseQueryService
import org.neo4j.kernel.api.constraints.{NodePropertyExistenceConstraint, RelationshipPropertyExistenceConstraint, UniquenessConstraint}
import org.neo4j.kernel.api.constraints.{NodePropertyExistenceConstraint => KernelNPEConstraint, RelationshipPropertyExistenceConstraint => KernelRPEConstraint, UniquenessConstraint => KernelUniquenessConstraint}
import org.neo4j.kernel.api.exceptions.schema.{AlreadyConstrainedException, AlreadyIndexedException}
import org.neo4j.kernel.api.index.InternalIndexState
import org.neo4j.kernel.api.{exceptions, _}
Expand All @@ -54,7 +54,7 @@ import scala.collection.JavaConverters._
import scala.collection.{Iterator, mutable}

final class TransactionBoundQueryContext(tc: TransactionalContextWrapperv3_1)
extends TransactionBoundTokenContext(tc.statement) with QueryContext with IndexDescriptorCompatibility {
extends TransactionBoundTokenContext(tc.statement) with QueryContext with SchemaDescriptorTranslation {

override val nodeOps = new NodeOperations
override val relationshipOps = new RelationshipOperations
Expand Down Expand Up @@ -125,10 +125,10 @@ final class TransactionBoundQueryContext(tc: TransactionalContextWrapperv3_1)
new BeansAPIRelationshipIterator(relationships, nodeManager)
}

def indexSeek(index: IndexDescriptor, value: Any) =
def indexSeek(index: SchemaTypes.IndexDescriptor, value: Any) =
JavaConversionSupport.mapToScalaENFXSafe(tc.statement.readOperations().nodesGetFromIndexSeek(index, value))(nodeOps.getById)

def indexSeekByRange(index: IndexDescriptor, value: Any) = value match {
def indexSeekByRange(index: SchemaTypes.IndexDescriptor, value: Any) = value match {

case PrefixRange(prefix: String) =>
indexSeekByPrefixRange(index, prefix)
Expand All @@ -140,7 +140,7 @@ final class TransactionBoundQueryContext(tc: TransactionalContextWrapperv3_1)
throw new InternalException(s"Unsupported index seek by range: $range")
}

private def indexSeekByPrefixRange(index: IndexDescriptor, range: InequalitySeekRange[Any]): scala.Iterator[Node] = {
private def indexSeekByPrefixRange(index: SchemaTypes.IndexDescriptor, range: InequalitySeekRange[Any]): scala.Iterator[Node] = {
val groupedRanges = range.groupBy { (bound: Bound[Any]) =>
bound.endPoint match {
case n: Number => classOf[Number]
Expand Down Expand Up @@ -188,12 +188,12 @@ final class TransactionBoundQueryContext(tc: TransactionalContextWrapperv3_1)
}
}

private def indexSeekByPrefixRange(index: IndexDescriptor, prefix: String): scala.Iterator[Node] = {
private def indexSeekByPrefixRange(index: SchemaTypes.IndexDescriptor, prefix: String): scala.Iterator[Node] = {
val indexedNodes = tc.statement.readOperations().nodesGetFromIndexRangeSeekByPrefix(index, prefix)
JavaConversionSupport.mapToScalaENFXSafe(indexedNodes)(nodeOps.getById)
}

private def indexSeekByNumericalRange(index: IndexDescriptor, range: InequalitySeekRange[Number]): scala.Iterator[Node] = {
private def indexSeekByNumericalRange(index: SchemaTypes.IndexDescriptor, range: InequalitySeekRange[Number]): scala.Iterator[Node] = {
val readOps = tc.statement.readOperations()
val matchingNodes: PrimitiveLongIterator = (range match {

Expand All @@ -220,9 +220,8 @@ final class TransactionBoundQueryContext(tc: TransactionalContextWrapperv3_1)
JavaConversionSupport.mapToScalaENFXSafe(matchingNodes)(nodeOps.getById)
}

private def indexSeekByStringRange(index: IndexDescriptor, range: InequalitySeekRange[String]): scala.Iterator[Node] = {
private def indexSeekByStringRange(index: SchemaTypes.IndexDescriptor, range: InequalitySeekRange[String]): scala.Iterator[Node] = {
val readOps = tc.statement.readOperations()
val propertyKeyId = index.getPropertyKeyId
val matchingNodes: PrimitiveLongIterator = range match {

case rangeLessThan: RangeLessThan[String] =>
Expand All @@ -249,10 +248,10 @@ final class TransactionBoundQueryContext(tc: TransactionalContextWrapperv3_1)
JavaConversionSupport.mapToScalaENFXSafe(matchingNodes)(nodeOps.getById)
}

def indexScan(index: IndexDescriptor) =
def indexScan(index: SchemaTypes.IndexDescriptor) =
mapToScalaENFXSafe(tc.statement.readOperations().nodesGetFromIndexScan(index))(nodeOps.getById)

override def lockingExactUniqueIndexSearch(index: IndexDescriptor, value: Any): Option[Node] = {
override def lockingExactUniqueIndexSearch(index: SchemaTypes.IndexDescriptor, value: Any): Option[Node] = {
val nodeId: Long = tc.statement.readOperations().nodeGetFromUniqueIndexSeek(index, value)
if (StatementConstants.NO_SUCH_NODE == nodeId) None else Some(nodeOps.getById(nodeId))
}
Expand Down Expand Up @@ -454,7 +453,7 @@ final class TransactionBoundQueryContext(tc: TransactionalContextWrapperv3_1)
tc.statement.readOperations().schemaStateGetOrCreate(key, javaCreator)
}

def addIndexRule(labelId: Int, propertyKeyId: Int): IdempotentResult[IndexDescriptor] = try {
def addIndexRule(labelId: Int, propertyKeyId: Int): IdempotentResult[SchemaTypes.IndexDescriptor] = try {
IdempotentResult(tc.statement.schemaWriteOperations().indexCreate(labelId, propertyKeyId))
} catch {
case _: AlreadyIndexedException =>
Expand All @@ -465,39 +464,39 @@ final class TransactionBoundQueryContext(tc: TransactionalContextWrapperv3_1)
}

def dropIndexRule(labelId: Int, propertyKeyId: Int) =
tc.statement.schemaWriteOperations().indexDrop(new IndexDescriptor(labelId, propertyKeyId))
tc.statement.schemaWriteOperations().indexDrop(SchemaTypes.IndexDescriptor(labelId, propertyKeyId))

def createUniqueConstraint(labelId: Int, propertyKeyId: Int): IdempotentResult[UniquenessConstraint] = try {
def createUniqueConstraint(labelId: Int, propertyKeyId: Int): IdempotentResult[SchemaTypes.UniquenessConstraint] = try {
IdempotentResult(tc.statement.schemaWriteOperations().uniquePropertyConstraintCreate(labelId, propertyKeyId))
} catch {
case existing: AlreadyConstrainedException =>
IdempotentResult(existing.constraint().asInstanceOf[UniquenessConstraint], wasCreated = false)
IdempotentResult(existing.constraint().asInstanceOf[KernelUniquenessConstraint], wasCreated = false)
}

def dropUniqueConstraint(labelId: Int, propertyKeyId: Int) =
tc.statement.schemaWriteOperations().constraintDrop(new UniquenessConstraint(labelId, propertyKeyId))
tc.statement.schemaWriteOperations().constraintDrop(new KernelUniquenessConstraint(labelId, propertyKeyId))

def createNodePropertyExistenceConstraint(labelId: Int, propertyKeyId: Int): IdempotentResult[NodePropertyExistenceConstraint] =
def createNodePropertyExistenceConstraint(labelId: Int, propertyKeyId: Int): IdempotentResult[SchemaTypes.NodePropertyExistenceConstraint] =
try {
IdempotentResult(tc.statement.schemaWriteOperations().nodePropertyExistenceConstraintCreate(labelId, propertyKeyId))
} catch {
case existing: AlreadyConstrainedException =>
IdempotentResult(existing.constraint().asInstanceOf[NodePropertyExistenceConstraint], wasCreated = false)
IdempotentResult(existing.constraint().asInstanceOf[KernelNPEConstraint], wasCreated = false)
}

def dropNodePropertyExistenceConstraint(labelId: Int, propertyKeyId: Int) =
tc.statement.schemaWriteOperations().constraintDrop(new NodePropertyExistenceConstraint(labelId, propertyKeyId))
tc.statement.schemaWriteOperations().constraintDrop(new KernelNPEConstraint(labelId, propertyKeyId))

def createRelationshipPropertyExistenceConstraint(relTypeId: Int, propertyKeyId: Int): IdempotentResult[RelationshipPropertyExistenceConstraint] =
def createRelationshipPropertyExistenceConstraint(relTypeId: Int, propertyKeyId: Int): IdempotentResult[SchemaTypes.RelationshipPropertyExistenceConstraint] =
try {
IdempotentResult(tc.statement.schemaWriteOperations().relationshipPropertyExistenceConstraintCreate(relTypeId, propertyKeyId))
} catch {
case existing: AlreadyConstrainedException =>
IdempotentResult(existing.constraint().asInstanceOf[RelationshipPropertyExistenceConstraint], wasCreated = false)
IdempotentResult(existing.constraint().asInstanceOf[KernelRPEConstraint], wasCreated = false)
}

def dropRelationshipPropertyExistenceConstraint(relTypeId: Int, propertyKeyId: Int) =
tc.statement.schemaWriteOperations().constraintDrop(new RelationshipPropertyExistenceConstraint(relTypeId, propertyKeyId))
tc.statement.schemaWriteOperations().constraintDrop(new KernelRPEConstraint(relTypeId, propertyKeyId))

override def getImportURL(url: URL): Either[String,URL] = tc.graph match {
case db: GraphDatabaseQueryService =>
Expand Down

0 comments on commit a6030de

Please sign in to comment.