diff --git a/community/cypher/acceptance/src/test/scala/org/neo4j/internal/cypher/acceptance/PreParsingAcceptanceTest.scala b/community/cypher/acceptance/src/test/scala/org/neo4j/internal/cypher/acceptance/PreParsingAcceptanceTest.scala index e3609bca1963d..6a5fe43c18e52 100644 --- a/community/cypher/acceptance/src/test/scala/org/neo4j/internal/cypher/acceptance/PreParsingAcceptanceTest.scala +++ b/community/cypher/acceptance/src/test/scala/org/neo4j/internal/cypher/acceptance/PreParsingAcceptanceTest.scala @@ -19,10 +19,10 @@ */ package org.neo4j.internal.cypher.acceptance -import org.neo4j.cypher.internal.ExtendedExecutionResult +import org.neo4j.cypher.ExecutionEngineFunSuite +import org.neo4j.cypher.internal.ExecutionResult import org.neo4j.cypher.internal.compatibility.CompatibilityPlanDescriptionFor3_1 import org.neo4j.cypher.internal.compiler.v3_1._ -import org.neo4j.cypher.ExecutionEngineFunSuite import org.scalatest.matchers.{MatchResult, Matcher} class PreParsingAcceptanceTest extends ExecutionEngineFunSuite { @@ -81,8 +81,8 @@ class PreParsingAcceptanceTest extends ExecutionEngineFunSuite { eengine.execute(query, Map.empty[String,Any], graph.session()) should havePlanner(RulePlannerName) } - private def havePlanner(expected: PlannerName): Matcher[ExtendedExecutionResult] = new Matcher[ExtendedExecutionResult] { - override def apply(result: ExtendedExecutionResult): MatchResult = { + private def havePlanner(expected: PlannerName): Matcher[ExecutionResult] = new Matcher[ExecutionResult] { + override def apply(result: ExecutionResult): MatchResult = { // exhaust the iterator so we can collect the plan description result.length result.executionPlanDescription() match { diff --git a/community/cypher/cypher/src/main/java/org/neo4j/cypher/internal/javacompat/ExecutionResult.java b/community/cypher/cypher/src/main/java/org/neo4j/cypher/internal/javacompat/ExecutionResult.java index a1e39034ec393..c9451ce4cfb83 100644 --- a/community/cypher/cypher/src/main/java/org/neo4j/cypher/internal/javacompat/ExecutionResult.java +++ b/community/cypher/cypher/src/main/java/org/neo4j/cypher/internal/javacompat/ExecutionResult.java @@ -28,7 +28,6 @@ import java.util.stream.Stream; import org.neo4j.cypher.CypherException; -import org.neo4j.cypher.internal.ExtendedExecutionResult; import org.neo4j.graphdb.ExecutionPlanDescription; import org.neo4j.graphdb.Notification; import org.neo4j.graphdb.QueryExecutionException; @@ -38,6 +37,7 @@ import org.neo4j.graphdb.ResourceIterator; import org.neo4j.graphdb.Result; import org.neo4j.kernel.impl.query.QueryExecutionKernelException; +import org.neo4j.kernel.impl.query.QuerySession; /** * Holds Cypher query result sets, in tabular form. Each row of the result is a map @@ -53,7 +53,7 @@ */ public class ExecutionResult implements ResourceIterable>, Result { - private final ExtendedExecutionResult inner; + private final org.neo4j.cypher.internal.ExecutionResult inner; /** * Initialized lazily and should be accessed with {@link #innerIterator()} method @@ -64,11 +64,11 @@ public class ExecutionResult implements ResourceIterable>, Re /** * Constructor used by the Cypher framework. End-users should not * create an ExecutionResult directly, but instead use the result - * returned from calling {@link ExecutionEngine#execute(String)}. + * returned from calling {@link ExecutionEngine#executeQuery(String, Map, QuerySession)}. * * @param projection Execution result projection to use. */ - public ExecutionResult( ExtendedExecutionResult projection ) + public ExecutionResult( org.neo4j.cypher.internal.ExecutionResult projection ) { inner = Objects.requireNonNull( projection ); //if updating query we must fetch the iterator right away in order to eagerly perform updates diff --git a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/ExecutionEngine.scala b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/ExecutionEngine.scala index dfddc0a36c4fe..9b7693d76e353 100644 --- a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/ExecutionEngine.scala +++ b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/ExecutionEngine.scala @@ -79,14 +79,14 @@ class ExecutionEngine(val queryService: GraphDatabaseQueryService, logProvider: private val scalaValues = new RuntimeScalaValueConverter(isGraphKernelResultValue) @throws(classOf[SyntaxException]) - def profile(query: String, scalaParams: Map[String, Any], session: QuerySession): ExtendedExecutionResult = { + def profile(query: String, scalaParams: Map[String, Any], session: QuerySession): ExecutionResult = { // we got deep scala parameters => convert to deep java parameters val javaParams = javaValues.asDeepJavaMap(scalaParams).asInstanceOf[JavaMap[String, AnyRef]] profile(query, javaParams, session) } @throws(classOf[SyntaxException]) - def profile(query: String, javaParams: JavaMap[String, AnyRef], session: QuerySession): ExtendedExecutionResult = { + def profile(query: String, javaParams: JavaMap[String, AnyRef], session: QuerySession): ExecutionResult = { // we got deep java parameters => convert to shallow scala parameters for passing into the engine val scalaParams = scalaValues.asShallowScalaMap(javaParams) executionMonitor.startQueryExecution(session, query, javaParams) @@ -95,14 +95,14 @@ class ExecutionEngine(val queryService: GraphDatabaseQueryService, logProvider: } @throws(classOf[SyntaxException]) - def execute(query: String, scalaParams: Map[String, Any], session: QuerySession): ExtendedExecutionResult = { + def execute(query: String, scalaParams: Map[String, Any], session: QuerySession): ExecutionResult = { // we got deep scala parameters => convert to deep java parameters val javaParams = javaValues.asDeepJavaMap(scalaParams).asInstanceOf[JavaMap[String, AnyRef]] execute(query, javaParams, session) } @throws(classOf[SyntaxException]) - def execute(query: String, javaParams: JavaMap[String, AnyRef], session: QuerySession): ExtendedExecutionResult = { + def execute(query: String, javaParams: JavaMap[String, AnyRef], session: QuerySession): ExecutionResult = { // we got deep java parameters => convert to shallow scala parameters for passing into the engine val scalaParams = scalaValues.asShallowScalaMap(javaParams) executionMonitor.startQueryExecution(session, query, javaParams) diff --git a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/ExecutionPlan.scala b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/ExecutionPlan.scala index cfb6cf765612e..cdbcac2bd4ee3 100644 --- a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/ExecutionPlan.scala +++ b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/ExecutionPlan.scala @@ -28,7 +28,7 @@ final case class TransactionInfo(tx: Transaction, isTopLevelTx: Boolean, stateme trait ExecutionPlan { - def run(transactionalContext: TransactionalContextWrapperv3_1, executionMode: CypherExecutionMode, params: Map[String, Any], session: QuerySession): ExtendedExecutionResult + def run(transactionalContext: TransactionalContextWrapperv3_1, executionMode: CypherExecutionMode, params: Map[String, Any], session: QuerySession): ExecutionResult def isPeriodicCommit: Boolean diff --git a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/ExecutionResult.scala b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/ExecutionResult.scala index 2d661d9424cb5..50694af899675 100644 --- a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/ExecutionResult.scala +++ b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/ExecutionResult.scala @@ -21,7 +21,8 @@ package org.neo4j.cypher.internal import java.io.PrintWriter -import org.neo4j.graphdb.ResourceIterator +import org.neo4j.graphdb.Result.ResultVisitor +import org.neo4j.graphdb.{Notification, QueryExecutionType, ResourceIterator} trait ExecutionResult extends Iterator[Map[String, Any]] { def columns: List[String] @@ -34,4 +35,8 @@ trait ExecutionResult extends Iterator[Map[String, Any]] { def queryStatistics(): QueryStatistics def executionPlanDescription(): PlanDescription def close() + def planDescriptionRequested: Boolean + def executionType: QueryExecutionType + def notifications: Iterable[Notification] + def accept[EX <: Exception](visitor: ResultVisitor[EX]) } diff --git a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/ExtendedExecutionResult.scala b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/ExtendedExecutionResult.scala deleted file mode 100644 index c4c899d12a98e..0000000000000 --- a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/ExtendedExecutionResult.scala +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2002-2016 "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 . - */ -package org.neo4j.cypher.internal - -import org.neo4j.graphdb.Result.ResultVisitor -import org.neo4j.graphdb.{Notification, QueryExecutionType} - -trait ExtendedExecutionResult extends ExecutionResult { - def planDescriptionRequested: Boolean - def executionType: QueryExecutionType - def notifications: Iterable[Notification] - def accept[EX <: Exception](visitor: ResultVisitor[EX]) -} diff --git a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/compatibility/CompatibilityFor2_3.scala b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/compatibility/CompatibilityFor2_3.scala index 4d42804433ae0..a0ea0f9c5e536 100644 --- a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/compatibility/CompatibilityFor2_3.scala +++ b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/compatibility/CompatibilityFor2_3.scala @@ -36,7 +36,7 @@ import org.neo4j.cypher.internal.frontend.v2_3.{CypherException => InternalCyphe import org.neo4j.cypher.internal.javacompat.{PlanDescription, ProfilerStatistics} import org.neo4j.cypher.internal.spi.TransactionalContextWrapperv3_1 import org.neo4j.cypher.internal.spi.v2_3.{TransactionBoundGraphStatistics, TransactionBoundPlanContext, TransactionBoundQueryContext} -import org.neo4j.cypher.internal.{CypherExecutionMode, ExtendedExecutionResult, ExtendedPlanDescription, LastCommittedTxIdProvider, ParsedQuery, PreParsedQuery, QueryStatistics} +import org.neo4j.cypher.internal.{CypherExecutionMode, ExecutionResult, ExtendedPlanDescription, LastCommittedTxIdProvider, ParsedQuery, PreParsedQuery, QueryStatistics} import org.neo4j.cypher.javacompat.internal.GraphDatabaseCypherService import org.neo4j.graphdb.Result.ResultVisitor import org.neo4j.graphdb._ @@ -189,7 +189,7 @@ trait CompatibilityFor2_3 { private def queryContext(transactionalContext: TransactionalContextWrapperv3_1): QueryContext = new ExceptionTranslatingQueryContextFor2_3(new TransactionBoundQueryContext(transactionalContext)) - def run(transactionalContext: TransactionalContextWrapperv3_1, executionMode: CypherExecutionMode, params: Map[String, Any], session: QuerySession): ExtendedExecutionResult = { + def run(transactionalContext: TransactionalContextWrapperv3_1, executionMode: CypherExecutionMode, params: Map[String, Any], session: QuerySession): ExecutionResult = { implicit val s = session val innerExecutionMode = executionMode match { case CypherExecutionMode.explain => ExplainModev2_3 @@ -211,7 +211,7 @@ trait CompatibilityFor2_3 { case class ExecutionResultWrapperFor2_3(inner: InternalExecutionResult, planner: PlannerName, runtime: RuntimeName) (implicit monitor: QueryExecutionMonitor, session: QuerySession) - extends ExtendedExecutionResult { + extends ExecutionResult { import org.neo4j.cypher.internal.compatibility.helpersv2_3._ diff --git a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/compatibility/CompatibilityFor3_0.scala b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/compatibility/CompatibilityFor3_0.scala index 6ed433fa31366..5bad8c0c70e3b 100644 --- a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/compatibility/CompatibilityFor3_0.scala +++ b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/compatibility/CompatibilityFor3_0.scala @@ -25,23 +25,23 @@ import java.{lang, util} import org.neo4j.cypher._ import org.neo4j.cypher.internal._ -import org.neo4j.cypher.internal.compiler.v3_0 import org.neo4j.cypher.internal.compiler.v3_0.commands.expressions.{CRS, Point} import org.neo4j.cypher.internal.compiler.v3_0.executionplan.{ExecutionPlan => ExecutionPlan_v3_0, _} import org.neo4j.cypher.internal.compiler.v3_0.planDescription.InternalPlanDescription.Arguments._ import org.neo4j.cypher.internal.compiler.v3_0.planDescription.{Argument, InternalPlanDescription, PlanDescriptionArgumentSerializer} -import org.neo4j.cypher.internal.compiler.v3_0.spi.{InternalResultRow, InternalResultVisitor, QueryContext} +import org.neo4j.cypher.internal.compiler.v3_0.spi.{InternalResultRow, InternalResultVisitor} import org.neo4j.cypher.internal.compiler.v3_0.tracing.rewriters.RewriterStepSequencer -import org.neo4j.cypher.internal.compiler.v3_0.{CypherCompilerFactory, DPPlannerName, IDPPlannerName, InfoLogger, Monitors, PlannerName, ExplainMode => ExplainModev3_0, NormalMode => NormalModev3_0, ProfileMode => ProfileModev3_0, _} +import org.neo4j.cypher.internal.compiler.v3_0.{CypherCompilerFactory, DPPlannerName, ExplainMode => ExplainModev3_0, IDPPlannerName, InfoLogger, Monitors, NormalMode => NormalModev3_0, PlannerName, ProfileMode => ProfileModev3_0, _} +import org.neo4j.cypher.internal.compiler.{v3_0, v3_1} import org.neo4j.cypher.internal.frontend.v3_0.notification.{InternalNotification, PlannerUnsupportedNotification, RuntimeUnsupportedNotification, _} import org.neo4j.cypher.internal.frontend.v3_0.spi.MapToPublicExceptions import org.neo4j.cypher.internal.frontend.v3_0.{CypherException => InternalCypherException} -import org.neo4j.cypher.internal.compiler.v3_1 import org.neo4j.cypher.internal.helpers.wrappersFor3_0.as3_0 import org.neo4j.cypher.internal.javacompat.{PlanDescription, ProfilerStatistics} -import org.neo4j.cypher.internal.spi.{TransactionalContextWrapperv3_0, TransactionalContextWrapperv3_1} import org.neo4j.cypher.internal.spi.v3_0.TransactionBoundQueryContext.IndexSearchMonitor import org.neo4j.cypher.internal.spi.v3_0._ +import org.neo4j.cypher.internal.spi.{TransactionalContextWrapperv3_0, TransactionalContextWrapperv3_1} +import org.neo4j.graphdb import org.neo4j.graphdb.Result.{ResultRow, ResultVisitor} import org.neo4j.graphdb.impl.notification.{NotificationCode, NotificationDetail} import org.neo4j.graphdb.{InputPosition, Node, Path, QueryExecutionType, Relationship, ResourceIterator} @@ -51,7 +51,6 @@ import org.neo4j.kernel.api.KernelAPI import org.neo4j.kernel.impl.query.{QueryExecutionMonitor, QuerySession} import org.neo4j.kernel.monitoring.{Monitors => KernelMonitors} import org.neo4j.logging.Log -import org.neo4j.graphdb import scala.collection.JavaConverters._ import scala.reflect.ClassTag @@ -224,7 +223,7 @@ trait CompatibilityFor3_0 { new ExceptionTranslatingQueryContextFor3_0(ctx) } - def run(transactionalContext: TransactionalContextWrapperv3_1, executionMode: CypherExecutionMode, params: Map[String, Any], session: QuerySession): ExtendedExecutionResult = { + def run(transactionalContext: TransactionalContextWrapperv3_1, executionMode: CypherExecutionMode, params: Map[String, Any], session: QuerySession): ExecutionResult = { implicit val s = session val innerExecutionMode = executionMode match { case CypherExecutionMode.explain => ExplainModev3_0 @@ -246,7 +245,7 @@ trait CompatibilityFor3_0 { case class ExecutionResultWrapperFor3_0(inner: InternalExecutionResult, planner: PlannerName, runtime: RuntimeName) (implicit monitor: QueryExecutionMonitor, session: QuerySession) - extends ExtendedExecutionResult { + extends ExecutionResult { import org.neo4j.cypher.internal.compatibility.helpersv3_0._ diff --git a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/compatibility/CompatibilityFor3_1.scala b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/compatibility/CompatibilityFor3_1.scala index bdf7e83c5377e..cf9c340ade583 100644 --- a/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/compatibility/CompatibilityFor3_1.scala +++ b/community/cypher/cypher/src/main/scala/org/neo4j/cypher/internal/compatibility/CompatibilityFor3_1.scala @@ -31,7 +31,7 @@ import org.neo4j.cypher.internal.compiler.v3_1.planDescription.InternalPlanDescr import org.neo4j.cypher.internal.compiler.v3_1.planDescription.{Argument, InternalPlanDescription, PlanDescriptionArgumentSerializer} import org.neo4j.cypher.internal.compiler.v3_1.spi.{InternalResultRow, InternalResultVisitor} import org.neo4j.cypher.internal.compiler.v3_1.tracing.rewriters.RewriterStepSequencer -import org.neo4j.cypher.internal.compiler.v3_1.{CypherCompilerFactory, DPPlannerName, IDPPlannerName, InfoLogger, Monitors, PlannerName, ExplainMode => ExplainModev3_1, NormalMode => NormalModev3_1, ProfileMode => ProfileModev3_1, _} +import org.neo4j.cypher.internal.compiler.v3_1.{CypherCompilerFactory, DPPlannerName, ExplainMode => ExplainModev3_1, IDPPlannerName, InfoLogger, Monitors, NormalMode => NormalModev3_1, PlannerName, ProfileMode => ProfileModev3_1, _} import org.neo4j.cypher.internal.frontend.v3_1.notification.{InternalNotification, PlannerUnsupportedNotification, RuntimeUnsupportedNotification, _} import org.neo4j.cypher.internal.frontend.v3_1.spi.MapToPublicExceptions import org.neo4j.cypher.internal.frontend.v3_1.{CypherException => InternalCypherException} @@ -40,6 +40,7 @@ import org.neo4j.cypher.internal.spi.TransactionalContextWrapperv3_1 import org.neo4j.cypher.internal.spi.v3_1.TransactionBoundQueryContext.IndexSearchMonitor import org.neo4j.cypher.internal.spi.v3_1._ import org.neo4j.cypher.internal.spi.v3_1.codegen.GeneratedQueryStructure +import org.neo4j.graphdb import org.neo4j.graphdb.Result.{ResultRow, ResultVisitor} import org.neo4j.graphdb.impl.notification.{NotificationCode, NotificationDetail} import org.neo4j.kernel.GraphDatabaseQueryService @@ -47,8 +48,6 @@ import org.neo4j.kernel.api.KernelAPI import org.neo4j.kernel.impl.query.{QueryExecutionMonitor, QuerySession} import org.neo4j.kernel.monitoring.{Monitors => KernelMonitors} import org.neo4j.logging.Log -import org.neo4j.graphdb - import scala.collection.JavaConverters._ import scala.reflect.ClassTag @@ -215,7 +214,7 @@ trait CompatibilityFor3_1 { new ExceptionTranslatingQueryContextFor3_1(ctx) } - def run(transactionalContext: TransactionalContextWrapperv3_1, executionMode: CypherExecutionMode, params: Map[String, Any], session: QuerySession): ExtendedExecutionResult = { + def run(transactionalContext: TransactionalContextWrapperv3_1, executionMode: CypherExecutionMode, params: Map[String, Any], session: QuerySession): ExecutionResult = { implicit val s = session val innerExecutionMode = executionMode match { case CypherExecutionMode.explain => ExplainModev3_1 @@ -237,7 +236,7 @@ trait CompatibilityFor3_1 { case class ExecutionResultWrapperFor3_1(inner: InternalExecutionResult, planner: PlannerName, runtime: RuntimeName) (implicit monitor: QueryExecutionMonitor, session: QuerySession) - extends ExtendedExecutionResult { + extends ExecutionResult { import org.neo4j.cypher.internal.compatibility.helpersv3_1._ diff --git a/community/cypher/cypher/src/test/scala/org/neo4j/cypher/TestSuites.scala b/community/cypher/cypher/src/test/scala/org/neo4j/cypher/TestSuites.scala index f9b0482ccf291..5a3002d392b43 100644 --- a/community/cypher/cypher/src/test/scala/org/neo4j/cypher/TestSuites.scala +++ b/community/cypher/cypher/src/test/scala/org/neo4j/cypher/TestSuites.scala @@ -19,11 +19,10 @@ */ package org.neo4j.cypher -import org.neo4j.cypher.internal.ExtendedExecutionResult import org.neo4j.cypher.internal.compiler.v3_1.executionplan.InternalExecutionResult import org.neo4j.cypher.internal.compiler.v3_1.planDescription.InternalPlanDescription import org.neo4j.cypher.internal.frontend.v3_1.test_helpers.CypherFunSuite -import org.neo4j.graphdb.{Result, Node, PropertyContainer} +import org.neo4j.graphdb.{Node, PropertyContainer, Result} import org.neo4j.kernel.api.exceptions.Status import org.scalatest.matchers.{MatchResult, Matcher}