Skip to content

Commit

Permalink
Updated cypher compiler dependencies to 2.3.9 and 3.1.1
Browse files Browse the repository at this point in the history
  • Loading branch information
fickludd committed Jan 25, 2017
1 parent fb5b3dc commit ad5cf72
Show file tree
Hide file tree
Showing 11 changed files with 85 additions and 146 deletions.
4 changes: 2 additions & 2 deletions community/cypher/cypher/pom.xml
Expand Up @@ -190,7 +190,7 @@
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-cypher-compiler-2.3</artifactId>
<version>2.3.8</version>
<version>2.3.9</version>
<exclusions>
<exclusion>
<groupId>org.neo4j</groupId>
Expand All @@ -217,7 +217,7 @@
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-cypher-compiler-3.1</artifactId>
<version>3.1.0</version>
<version>3.1.1</version>
<exclusions>
<exclusion>
<groupId>org.neo4j</groupId>
Expand Down
Expand Up @@ -21,14 +21,13 @@ package org.neo4j.cypher.internal.compatibility.v2_3

import java.net.URL

import org.neo4j.cypher.internal.compiler.v2_3.spi
import org.neo4j.cypher.internal.compiler.v2_3.{IndexDescriptor, 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.{Node, PropertyContainer, Relationship, ConstraintViolationException => KernelConstraintViolationException}
import org.neo4j.kernel.api.TokenNameLookup
import org.neo4j.kernel.api.exceptions.KernelException
import org.neo4j.kernel.api.index.IndexDescriptor

class ExceptionTranslatingQueryContext(inner: QueryContext) extends DelegatingQueryContext(inner) {
override def setLabelsOnNode(node: Long, labelIds: Iterator[Int]): Int =
Expand Down
Expand Up @@ -21,13 +21,13 @@ package org.neo4j.cypher.internal.compatibility.v3_1

import java.net.URL

import org.neo4j.cypher.internal.compiler.v3_1.IndexDescriptor
import org.neo4j.cypher.internal.compiler.v3_1.commands.expressions.{Expander, KernelPredicate}
import org.neo4j.cypher.internal.compiler.v3_1.pipes.matching.PatternNode
import org.neo4j.cypher.internal.compiler.v3_1.spi._
import org.neo4j.cypher.internal.frontend.v3_1.SemanticDirection
import org.neo4j.cypher.internal.spi.v3_1.ExceptionTranslationSupport
import org.neo4j.graphdb.{Node, Path, PropertyContainer, Relationship}
import org.neo4j.kernel.api.index.IndexDescriptor

import scala.collection.Iterator

Expand Down
@@ -0,0 +1,33 @@
/*
* 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.cypher.internal.compiler.v2_3.{IndexDescriptor => CypherIndexDescriptor}
import org.neo4j.kernel.api.schema.{
IndexDescriptor => KernelIndexDescriptor,
IndexDescriptorFactory => KernelIndexDescriptorFactory}

trait IndexDescriptorCompatibility {
implicit def cypherToKernel(index:CypherIndexDescriptor) =
KernelIndexDescriptorFactory.of( index.label, index.property )

implicit def kernelToCypher(index:KernelIndexDescriptor) =
CypherIndexDescriptor( index.getLabelId, index.getPropertyKeyId )
}
Expand Up @@ -20,18 +20,17 @@
package org.neo4j.cypher.internal.spi.v2_3

import org.neo4j.cypher.MissingIndexException
import org.neo4j.cypher.internal.compiler.v2_3
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.IndexDescriptorCompatibility
import org.neo4j.cypher.internal.spi.v3_2.TransactionalContextWrapper
import org.neo4j.graphdb.Node
import org.neo4j.kernel.api.constraints.UniquenessConstraint
import org.neo4j.kernel.api.exceptions.KernelException
import org.neo4j.kernel.api.exceptions.schema.SchemaKernelException
import org.neo4j.kernel.api.index.{IndexDescriptor, InternalIndexState}
import org.neo4j.kernel.api.schema.NodePropertyDescriptor
import org.neo4j.kernel.api.schema.{IndexDescriptor => NewIndexDescriptor}
import org.neo4j.kernel.api.index.InternalIndexState
import org.neo4j.kernel.api.schema.{NodePropertyDescriptor, IndexDescriptor => NewIndexDescriptor}
import org.neo4j.kernel.impl.transaction.log.TransactionIdStore

import scala.collection.JavaConverters._
Expand All @@ -40,7 +39,7 @@ class TransactionBoundPlanContext(tc: TransactionalContextWrapper)
extends TransactionBoundTokenContext(tc.statement) with PlanContext with IndexDescriptorCompatibility {

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

Expand All @@ -56,7 +55,7 @@ class TransactionBoundPlanContext(tc: TransactionalContextWrapper)
onlineIndexDescriptors.nonEmpty
}

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

Expand All @@ -67,7 +66,7 @@ class TransactionBoundPlanContext(tc: TransactionalContextWrapper)
private def evalOrNone[T](f: => Option[T]): Option[T] =
try { f } catch { case _: SchemaKernelException => None }

private def getOnlineIndex(descriptor: NewIndexDescriptor): Option[IndexDescriptor] =
private def getOnlineIndex(descriptor: NewIndexDescriptor): Option[v2_3.IndexDescriptor] =
tc.statement.readOperations().indexGetState(descriptor) match {
case InternalIndexState.ONLINE => Some(descriptor)
case _ => None
Expand Down
Expand Up @@ -26,7 +26,7 @@ import org.neo4j.collection.primitive.PrimitiveLongIterator
import org.neo4j.collection.primitive.base.Empty.EMPTY_PRIMITIVE_LONG_COLLECTION
import org.neo4j.cypher.InternalException
import org.neo4j.cypher.internal.compiler.v2_3.MinMaxOrdering.{BY_NUMBER, BY_STRING, BY_VALUE}
import org.neo4j.cypher.internal.compiler.v2_3._
import org.neo4j.cypher.internal.compiler.v2_3.{IndexDescriptor => CypherIndexDescriptor,_}
import org.neo4j.cypher.internal.compiler.v2_3.ast.convert.commands.DirectionConverter.toGraphDb
import org.neo4j.cypher.internal.compiler.v2_3.commands.expressions
import org.neo4j.cypher.internal.compiler.v2_3.commands.expressions.{KernelPredicate, OnlyDirectionExpander, TypeAndDirectionExpander}
Expand All @@ -35,7 +35,7 @@ import org.neo4j.cypher.internal.compiler.v2_3.helpers.JavaConversionSupport._
import org.neo4j.cypher.internal.compiler.v2_3.pipes.matching.PatternNode
import org.neo4j.cypher.internal.compiler.v2_3.spi._
import org.neo4j.cypher.internal.frontend.v2_3.{Bound, EntityNotFoundException, FailedIndexException, SemanticDirection}
import org.neo4j.cypher.internal.spi.{BeansAPIRelationshipIterator, IndexDescriptorCompatibility}
import org.neo4j.cypher.internal.spi.BeansAPIRelationshipIterator
import org.neo4j.cypher.internal.spi.v3_2.TransactionalContextWrapper
import org.neo4j.cypher.javacompat.internal.GraphDatabaseCypherService
import org.neo4j.graphalgo.impl.path.ShortestPath
Expand All @@ -47,7 +47,7 @@ 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.exceptions.schema.{AlreadyConstrainedException, AlreadyIndexedException}
import org.neo4j.kernel.api.index.{IndexDescriptor, InternalIndexState}
import org.neo4j.kernel.api.index.InternalIndexState
import org.neo4j.kernel.api.schema.{IndexDescriptorFactory, NodePropertyDescriptor, RelationshipPropertyDescriptor}
import org.neo4j.kernel.api.{exceptions, _}
import org.neo4j.kernel.impl.core.NodeManager
Expand Down Expand Up @@ -127,10 +127,10 @@ final class TransactionBoundQueryContext(tc: TransactionalContextWrapper)
new BeansAPIRelationshipIterator(relationships, nodeManager)
}

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

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

case PrefixRange(prefix: String) =>
indexSeekByPrefixRange(index, prefix)
Expand All @@ -142,7 +142,7 @@ final class TransactionBoundQueryContext(tc: TransactionalContextWrapper)
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: CypherIndexDescriptor, 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 @@ -190,12 +190,12 @@ final class TransactionBoundQueryContext(tc: TransactionalContextWrapper)
}
}

private def indexSeekByPrefixRange(index: IndexDescriptor, prefix: String): scala.Iterator[Node] = {
private def indexSeekByPrefixRange(index: CypherIndexDescriptor, 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: CypherIndexDescriptor, range: InequalitySeekRange[Number]): scala.Iterator[Node] = {
val readOps = tc.statement.readOperations()
val matchingNodes: PrimitiveLongIterator = (range match {

Expand All @@ -222,7 +222,7 @@ final class TransactionBoundQueryContext(tc: TransactionalContextWrapper)
JavaConversionSupport.mapToScalaENFXSafe(matchingNodes)(nodeOps.getById)
}

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

Expand Down Expand Up @@ -250,10 +250,10 @@ final class TransactionBoundQueryContext(tc: TransactionalContextWrapper)
JavaConversionSupport.mapToScalaENFXSafe(matchingNodes)(nodeOps.getById)
}

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

override def lockingExactUniqueIndexSearch(index: IndexDescriptor, value: Any): Option[Node] = {
override def lockingExactUniqueIndexSearch(index: CypherIndexDescriptor, 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 @@ -455,7 +455,7 @@ final class TransactionBoundQueryContext(tc: TransactionalContextWrapper)
tc.statement.readOperations().schemaStateGetOrCreate(key, javaCreator)
}

def addIndexRule(labelId: Int, propertyKeyId: Int): IdempotentResult[IndexDescriptor] = try {
def addIndexRule(labelId: Int, propertyKeyId: Int): IdempotentResult[CypherIndexDescriptor] = try {
IdempotentResult(tc.statement.schemaWriteOperations().indexCreate(new NodePropertyDescriptor(labelId, propertyKeyId)))
} catch {
case _: AlreadyIndexedException =>
Expand Down
Expand Up @@ -19,13 +19,12 @@
*/
package org.neo4j.cypher.internal.spi.v3_1

import org.neo4j.cypher.internal.compiler.v3_1.InternalNotificationLogger
import org.neo4j.cypher.internal.compiler.v3_1.{IndexDescriptor, InternalNotificationLogger}
import org.neo4j.cypher.internal.compiler.v3_1.pipes.EntityProducer
import org.neo4j.cypher.internal.compiler.v3_1.pipes.matching.{ExpanderStep, TraversalMatcher}
import org.neo4j.cypher.internal.compiler.v3_1.spi._
import org.neo4j.graphdb.Node
import org.neo4j.kernel.api.constraints.UniquenessConstraint
import org.neo4j.kernel.api.index.IndexDescriptor

class ExceptionTranslatingPlanContext(inner: PlanContext) extends PlanContext with ExceptionTranslationSupport {

Expand Down
Expand Up @@ -17,15 +17,15 @@
* 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
package org.neo4j.cypher.internal.spi.v3_1

import org.neo4j.kernel.api.index.IndexDescriptor
import org.neo4j.kernel.api.schema.IndexDescriptorFactory
import org.neo4j.cypher.internal.compiler.v3_1.{IndexDescriptor => CypherIndexDescriptor}
import org.neo4j.kernel.api.schema.{IndexDescriptor => KernelIndexDescriptor, IndexDescriptorFactory => KernelIndexDescriptorFactory}

trait IndexDescriptorCompatibility {
implicit def toOldIndexDescriptor(index: org.neo4j.kernel.api.schema.IndexDescriptor): IndexDescriptor =
new IndexDescriptor(index.getLabelId(), index.getPropertyKeyId);
implicit def cypherToKernel(index:CypherIndexDescriptor) =
KernelIndexDescriptorFactory.of( index.label, index.property )

implicit def toNewIndexDescriptor(index: IndexDescriptor): org.neo4j.kernel.api.schema.IndexDescriptor =
IndexDescriptorFactory.of(index.getLabelId(), index.getPropertyKeyId);
implicit def kernelToCypher(index:KernelIndexDescriptor) =
CypherIndexDescriptor( index.getLabelId, index.getPropertyKeyId )
}
Expand Up @@ -23,22 +23,20 @@ import java.util.Optional

import org.neo4j.cypher.MissingIndexException
import org.neo4j.cypher.internal.LastCommittedTxIdProvider
import org.neo4j.cypher.internal.compiler.v3_1.InternalNotificationLogger
import org.neo4j.cypher.internal.compiler.v3_1.pipes.EntityProducer
import org.neo4j.cypher.internal.compiler.v3_1.pipes.matching.ExpanderStep
import org.neo4j.cypher.internal.compiler.v3_1.spi._
import org.neo4j.cypher.internal.compiler.v3_1.{InternalNotificationLogger, IndexDescriptor => CypherIndexDescriptor}
import org.neo4j.cypher.internal.frontend.v3_1.symbols.CypherType
import org.neo4j.cypher.internal.frontend.v3_1.{CypherExecutionException, symbols}
import org.neo4j.cypher.internal.spi.IndexDescriptorCompatibility
import org.neo4j.graphdb.Node
import org.neo4j.kernel.api.constraints.UniquenessConstraint
import org.neo4j.kernel.api.exceptions.KernelException
import org.neo4j.kernel.api.exceptions.schema.SchemaKernelException
import org.neo4j.kernel.api.index.{IndexDescriptor, InternalIndexState}
import org.neo4j.kernel.api.index.InternalIndexState
import org.neo4j.kernel.api.proc.Neo4jTypes.AnyType
import org.neo4j.kernel.api.proc.{Neo4jTypes, QualifiedName => KernelQualifiedName}
import org.neo4j.kernel.api.schema.NodePropertyDescriptor
import org.neo4j.kernel.api.schema.{IndexDescriptor => NewIndexDescriptor}
import org.neo4j.kernel.api.schema.{NodePropertyDescriptor, IndexDescriptor => NewIndexDescriptor}
import org.neo4j.kernel.impl.proc.Neo4jValue
import org.neo4j.procedure.Mode

Expand All @@ -48,7 +46,7 @@ class TransactionBoundPlanContext(tc: TransactionalContextWrapper, logger: Inter
extends TransactionBoundTokenContext(tc.statement) with PlanContext with IndexDescriptorCompatibility {

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

Expand All @@ -64,7 +62,7 @@ class TransactionBoundPlanContext(tc: TransactionalContextWrapper, logger: Inter
onlineIndexDescriptors.nonEmpty
}

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

Expand All @@ -75,7 +73,7 @@ class TransactionBoundPlanContext(tc: TransactionalContextWrapper, logger: Inter
private def evalOrNone[T](f: => Option[T]): Option[T] =
try { f } catch { case _: SchemaKernelException => None }

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

0 comments on commit ad5cf72

Please sign in to comment.