Skip to content

Commit

Permalink
Change CypherComparisonSupport
Browse files Browse the repository at this point in the history
Change Acceptance tests accordingly.
  • Loading branch information
sherfert committed Jun 28, 2018
1 parent 1b6d4f0 commit 6685e52
Show file tree
Hide file tree
Showing 24 changed files with 115 additions and 141 deletions.
Expand Up @@ -26,19 +26,8 @@
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.rules.ExpectedException; import org.junit.rules.ExpectedException;

import org.neo4j.graphdb.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;

import org.neo4j.graphdb.InputPosition;
import org.neo4j.graphdb.Notification; import org.neo4j.graphdb.Notification;
import org.neo4j.graphdb.QueryExecutionException;
import org.neo4j.graphdb.Result;
import org.neo4j.graphdb.SeverityLevel;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.impl.notification.NotificationCode; import org.neo4j.graphdb.impl.notification.NotificationCode;
import org.neo4j.graphdb.impl.notification.NotificationDetail; import org.neo4j.graphdb.impl.notification.NotificationDetail;
import org.neo4j.helpers.collection.Iterables; import org.neo4j.helpers.collection.Iterables;
Expand All @@ -47,22 +36,19 @@
import org.neo4j.procedure.Procedure; import org.neo4j.procedure.Procedure;
import org.neo4j.test.rule.ImpermanentDatabaseRule; import org.neo4j.test.rule.ImpermanentDatabaseRule;


import static org.hamcrest.Matchers.any; import java.util.ArrayList;
import static org.hamcrest.Matchers.contains; import java.util.Arrays;
import static org.hamcrest.Matchers.containsString; import java.util.List;
import static org.hamcrest.Matchers.empty; import java.util.Map;
import static org.hamcrest.Matchers.equalTo; import java.util.stream.Stream;

import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat;
import static org.neo4j.graphdb.Label.label; import static org.neo4j.graphdb.Label.label;
import static org.neo4j.graphdb.impl.notification.NotificationCode.CREATE_UNIQUE_UNAVAILABLE_FALLBACK; import static org.neo4j.graphdb.impl.notification.NotificationCode.*;
import static org.neo4j.graphdb.impl.notification.NotificationCode.EAGER_LOAD_CSV;
import static org.neo4j.graphdb.impl.notification.NotificationCode.INDEX_HINT_UNFULFILLABLE;
import static org.neo4j.graphdb.impl.notification.NotificationCode.LENGTH_ON_NON_PATH;
import static org.neo4j.graphdb.impl.notification.NotificationCode.RULE_PLANNER_UNAVAILABLE_FALLBACK;
import static org.neo4j.graphdb.impl.notification.NotificationCode.RUNTIME_UNSUPPORTED;
import static org.neo4j.graphdb.impl.notification.NotificationCode.UNBOUNDED_SHORTEST_PATH;
import static org.neo4j.graphdb.impl.notification.NotificationDetail.Factory.index; import static org.neo4j.graphdb.impl.notification.NotificationDetail.Factory.index;



public class NotificationAcceptanceTest public class NotificationAcceptanceTest
{ {


Expand Down Expand Up @@ -132,14 +118,14 @@ public void shouldNotifyWhenUsingCreateUniqueWhenCypherVersionIs3_5()
} }


@Test @Test
public void shouldGetErrorWhenUsingCreateUniqueWhenCypherVersionIs3_3() public void shouldGetErrorWhenUsingCreateUniqueWhenCypherVersionIs3_4()
{ {
// expect exception // expect exception
thrown.expect( QueryExecutionException.class ); thrown.expect( QueryExecutionException.class );
thrown.expectMessage( "CREATE UNIQUE is no longer supported. You can achieve the same result using MERGE"); thrown.expectMessage( "CREATE UNIQUE is no longer supported. You can achieve the same result using MERGE");


// when // when
db().execute( "CYPHER 3.3 MATCH (b) WITH b LIMIT 1 CREATE UNIQUE (b)-[:REL]->()" ); db().execute( "CYPHER 3.4 MATCH (b) WITH b LIMIT 1 CREATE UNIQUE (b)-[:REL]->()" );
} }


@Test @Test
Expand Down
Expand Up @@ -286,7 +286,7 @@ class BuiltInProcedureAcceptanceTest extends ProcedureCallAcceptanceTest with Cy
} }


test("yield from void procedure should return correct error msg") { test("yield from void procedure should return correct error msg") {
failWithError(Configs.Procs + Configs.Version3_5 + Configs.Version3_3 - Configs.AllRulePlanners, failWithError(Configs.Procs + Configs.Version3_5 + Configs.Version3_4 - Configs.AllRulePlanners,
"CALL db.createLabel('Label') yield node", "CALL db.createLabel('Label') yield node",
List("Cannot yield value from void procedure.")) List("Cannot yield value from void procedure."))
} }
Expand Down
Expand Up @@ -23,7 +23,7 @@
package org.neo4j.internal.cypher.acceptance package org.neo4j.internal.cypher.acceptance


import org.neo4j.cypher._ import org.neo4j.cypher._
import org.neo4j.internal.cypher.acceptance.CypherComparisonSupport.Versions.{Default, V3_3, v3_5} import org.neo4j.internal.cypher.acceptance.CypherComparisonSupport.Versions.{Default, V3_4, v3_5}
import org.neo4j.internal.cypher.acceptance.CypherComparisonSupport._ import org.neo4j.internal.cypher.acceptance.CypherComparisonSupport._


class CompositeUniquenessConstraintAcceptanceTest extends ExecutionEngineFunSuite with CypherComparisonSupport { class CompositeUniquenessConstraintAcceptanceTest extends ExecutionEngineFunSuite with CypherComparisonSupport {
Expand All @@ -45,7 +45,7 @@ class CompositeUniquenessConstraintAcceptanceTest extends ExecutionEngineFunSuit
} }


val singlePropertyUniquenessFailConf = val singlePropertyUniquenessFailConf =
TestConfiguration(Versions(v3_5, V3_3, Default), Planners(Planners.Default, Planners.Cost), Runtimes.all) TestConfiguration(Versions(v3_5, V3_4, Default), Planners(Planners.Default, Planners.Cost), Runtimes.all)


test("should fail to to create composite uniqueness constraints") { test("should fail to to create composite uniqueness constraints") {
// When // When
Expand Down
Expand Up @@ -37,7 +37,7 @@ class CreateAcceptanceTest extends ExecutionEngineFunSuite with QueryStatisticsT
private val BIG_N = 1000 private val BIG_N = 1000
private val BIG_CREATE_CONFIGS = private val BIG_CREATE_CONFIGS =
TestConfiguration(Versions.Default, Planners.Default, Runtimes(Runtimes.Interpreted, Runtimes.Slotted)) + TestConfiguration(Versions.Default, Planners.Default, Runtimes(Runtimes.Interpreted, Runtimes.Slotted)) +
TestConfiguration(Versions.V3_3, Planners.Default, Runtimes(Runtimes.Interpreted)) TestConfiguration(Versions.V3_4, Planners.Default, Runtimes(Runtimes.Interpreted))


test("handle big CREATE clause") { test("handle big CREATE clause") {
var query = "CREATE (x)" var query = "CREATE (x)"
Expand Down
Expand Up @@ -352,7 +352,7 @@ object CypherComparisonSupport {
} }


object Versions { object Versions {
val orderedVersions: Seq[Version] = Seq(V2_3, V3_1, V3_3, v3_5) val orderedVersions: Seq[Version] = Seq(V2_3, V3_1, V3_4, v3_5)


implicit def versionToVersions(version: Version): Versions = Versions(version) implicit def versionToVersions(version: Version): Versions = Versions(version)


Expand All @@ -364,16 +364,16 @@ object CypherComparisonSupport {


object V3_1 extends Version("3.1") object V3_1 extends Version("3.1")


object V3_3 extends Version("3.3") { object V3_4 extends Version("3.4") {
// 3.3 has 3.5 runtime // 3.4 has 3.5 runtime
override val acceptedRuntimeVersionNames = Set("3.5") override val acceptedRuntimeVersionNames = Set("3.5")
} }


object v3_5 extends Version("3.5") object v3_5 extends Version("3.5")


object Default extends Version("") { object Default extends Version("") {
override val acceptedRuntimeVersionNames = Set("2.3", "3.1", "3.3", "3.5") override val acceptedRuntimeVersionNames = Set("2.3", "3.1", "3.4", "3.5")
override val acceptedPlannerVersionNames = Set("2.3", "3.1", "3.3", "3.5") override val acceptedPlannerVersionNames = Set("2.3", "3.1", "3.4", "3.5")
} }


} }
Expand Down Expand Up @@ -599,13 +599,13 @@ object CypherComparisonSupport {
TestConfiguration(Versions.Default, Planners.Default, Runtimes(Runtimes.Interpreted, Runtimes.Slotted)) + TestConfiguration(Versions.Default, Planners.Default, Runtimes(Runtimes.Interpreted, Runtimes.Slotted)) +
TestConfiguration(Versions.V2_3 -> Versions.V3_1, Planners.all, Runtimes.Default) + TestConfiguration(Versions.V2_3 -> Versions.V3_1, Planners.all, Runtimes.Default) +
TestScenario(Versions.Default, Planners.Rule, Runtimes.Default) + TestScenario(Versions.Default, Planners.Rule, Runtimes.Default) +
TestScenario(Versions.V3_3, Planners.Cost, Runtimes.Default) TestScenario(Versions.V3_4, Planners.Cost, Runtimes.Default)


def CommunityInterpreted: TestConfiguration = def CommunityInterpreted: TestConfiguration =
TestScenario(Versions.Default, Planners.Default, Runtimes.Interpreted) + TestScenario(Versions.Default, Planners.Default, Runtimes.Interpreted) +
TestConfiguration(Versions.V2_3 -> Versions.V3_1, Planners.all, Runtimes.Default) + TestConfiguration(Versions.V2_3 -> Versions.V3_1, Planners.all, Runtimes.Default) +
TestScenario(Versions.Default, Planners.Rule, Runtimes.Default) + TestScenario(Versions.Default, Planners.Rule, Runtimes.Default) +
TestScenario(Versions.V3_3, Planners.Cost, Runtimes.Default) TestScenario(Versions.V3_4, Planners.Cost, Runtimes.Default)


def SlottedInterpreted: TestConfiguration = TestScenario(Versions.Default, Planners.Default, Runtimes.Slotted) def SlottedInterpreted: TestConfiguration = TestScenario(Versions.Default, Planners.Default, Runtimes.Slotted)


Expand All @@ -615,9 +615,10 @@ object CypherComparisonSupport {


def Cost3_1: TestConfiguration = TestScenario(Versions.V3_1, Planners.Cost, Runtimes.Default) def Cost3_1: TestConfiguration = TestScenario(Versions.V3_1, Planners.Cost, Runtimes.Default)


def Cost3_3: TestConfiguration = TestScenario(Versions.V3_3, Planners.Cost, Runtimes.Default) def Cost3_4: TestConfiguration = TestScenario(Versions.V3_4, Planners.Cost, Runtimes.Default)


def Cost3_4: TestConfiguration = TestScenario(Versions.v3_5, Planners.Cost, Runtimes.Default) // FIXME that guy no works. Not part of AbsolutelyAll
def Cost3_5: TestConfiguration = TestScenario(Versions.v3_5, Planners.Cost, Runtimes.Default)


def Rule2_3: TestConfiguration = TestScenario(Versions.V2_3, Planners.Rule, Runtimes.Default) def Rule2_3: TestConfiguration = TestScenario(Versions.V2_3, Planners.Rule, Runtimes.Default)


Expand All @@ -629,7 +630,7 @@ object CypherComparisonSupport {


def Version3_1: TestConfiguration = TestConfiguration(Versions.V3_1, Planners.all, Runtimes.Default) def Version3_1: TestConfiguration = TestConfiguration(Versions.V3_1, Planners.all, Runtimes.Default)


def Version3_3: TestConfiguration = TestConfiguration(Versions.V3_3, Planners.Cost, Runtimes.Default) def Version3_4: TestConfiguration = TestConfiguration(Versions.V3_4, Planners.Cost, Runtimes.Default)


def Version3_5: TestConfiguration = def Version3_5: TestConfiguration =
TestConfiguration(Versions.v3_5, Planners.Cost, Runtimes(Runtimes.CompiledSource, Runtimes.CompiledBytecode)) + TestConfiguration(Versions.v3_5, Planners.Cost, Runtimes(Runtimes.CompiledSource, Runtimes.CompiledBytecode)) +
Expand All @@ -639,7 +640,7 @@ object CypherComparisonSupport {
def AllRulePlanners: TestConfiguration = TestConfiguration(Versions(Versions.V2_3, Versions.V3_1, Versions.Default), Planners.Rule, Runtimes.Default) def AllRulePlanners: TestConfiguration = TestConfiguration(Versions(Versions.V2_3, Versions.V3_1, Versions.Default), Planners.Rule, Runtimes.Default)


def BackwardsCompatibility: TestConfiguration = TestConfiguration(Versions.V2_3 -> Versions.V3_1, Planners.all, Runtimes.Default) + def BackwardsCompatibility: TestConfiguration = TestConfiguration(Versions.V2_3 -> Versions.V3_1, Planners.all, Runtimes.Default) +
TestScenario(Versions.V3_3, Planners.Cost, Runtimes.Default) TestScenario(Versions.V3_4, Planners.Cost, Runtimes.Default)


def Procs: TestConfiguration = TestScenario(Versions.Default, Planners.Default, Runtimes.ProcedureOrSchema) def Procs: TestConfiguration = TestScenario(Versions.Default, Planners.Default, Runtimes.ProcedureOrSchema)


Expand All @@ -661,8 +662,6 @@ object CypherComparisonSupport {
*/ */
def All: TestConfiguration = AbsolutelyAll - Procs def All: TestConfiguration = AbsolutelyAll - Procs


def AllExceptSlotted: TestConfiguration = All - SlottedInterpreted

/** /**
* These are all configurations that will be executed even if not explicitly expected to succeed or fail. * These are all configurations that will be executed even if not explicitly expected to succeed or fail.
* Even if not explicitly requested, they are executed to check if they unexpectedly succeed to make sure that * Even if not explicitly requested, they are executed to check if they unexpectedly succeed to make sure that
Expand All @@ -674,7 +673,7 @@ object CypherComparisonSupport {
Runtimes.ProcedureOrSchema)) + Runtimes.ProcedureOrSchema)) +
TestConfiguration(Versions.V2_3 -> Versions.V3_1, Planners.all, Runtimes.Default) + TestConfiguration(Versions.V2_3 -> Versions.V3_1, Planners.all, Runtimes.Default) +
TestScenario(Versions.Default, Planners.Rule, Runtimes.Default) + TestScenario(Versions.Default, Planners.Rule, Runtimes.Default) +
TestScenario(Versions.V3_3, Planners.Cost, Runtimes.Default) TestScenario(Versions.V3_4, Planners.Cost, Runtimes.Default)


/** /**
* These experimental configurations will only be executed if you explicitly specify them in the test expectation. * These experimental configurations will only be executed if you explicitly specify them in the test expectation.
Expand Down
Expand Up @@ -27,30 +27,29 @@ import java.io.{File, PrintWriter}
import org.neo4j.cypher.ExecutionEngineHelper.createEngine import org.neo4j.cypher.ExecutionEngineHelper.createEngine
import org.neo4j.cypher._ import org.neo4j.cypher._
import org.neo4j.cypher.internal.ExecutionEngine import org.neo4j.cypher.internal.ExecutionEngine
import org.opencypher.v9_0.frontend.phases.CompilationPhaseTracer.CompilationPhase
import org.neo4j.cypher.internal.javacompat.GraphDatabaseCypherService
import org.neo4j.cypher.internal.runtime.CreateTempFileTestSupport import org.neo4j.cypher.internal.runtime.CreateTempFileTestSupport
import org.neo4j.cypher.internal.tracing.TimingCompilationTracer import org.neo4j.cypher.internal.tracing.TimingCompilationTracer
import org.neo4j.cypher.internal.tracing.TimingCompilationTracer.QueryEvent import org.neo4j.cypher.internal.tracing.TimingCompilationTracer.QueryEvent
import org.neo4j.graphdb._ import org.neo4j.graphdb._
import org.neo4j.graphdb.config.Setting import org.neo4j.graphdb.config.Setting
import org.neo4j.graphdb.factory.GraphDatabaseSettings import org.neo4j.graphdb.factory.GraphDatabaseSettings
import org.neo4j.internal.cypher.acceptance.CypherComparisonSupport.Runtimes.ProcedureOrSchema import org.neo4j.internal.cypher.acceptance.CypherComparisonSupport.Runtimes.ProcedureOrSchema
import org.neo4j.internal.cypher.acceptance.CypherComparisonSupport.Versions.{V2_3, V3_1, v3_5} import org.neo4j.internal.cypher.acceptance.CypherComparisonSupport.Versions.{V3_1, v3_5}
import org.neo4j.internal.cypher.acceptance.CypherComparisonSupport._ import org.neo4j.internal.cypher.acceptance.CypherComparisonSupport._
import org.neo4j.internal.kernel.api.Transaction.Type
import org.neo4j.io.fs.FileUtils import org.neo4j.io.fs.FileUtils
import org.neo4j.kernel.NeoStoreDataSource import org.neo4j.kernel.NeoStoreDataSource
import org.neo4j.internal.kernel.api.Transaction.Type
import org.neo4j.kernel.api.security.AnonymousContext import org.neo4j.kernel.api.security.AnonymousContext
import org.neo4j.kernel.impl.coreapi.TopLevelTransaction import org.neo4j.kernel.impl.coreapi.TopLevelTransaction
import org.neo4j.test.{TestEnterpriseGraphDatabaseFactory, TestGraphDatabaseFactory} import org.neo4j.test.{TestEnterpriseGraphDatabaseFactory, TestGraphDatabaseFactory}
import org.opencypher.v9_0.frontend.phases.CompilationPhaseTracer.CompilationPhase


import scala.collection.JavaConverters._ import scala.collection.JavaConverters._
import scala.collection.mutable import scala.collection.mutable


class ExecutionEngineTest extends ExecutionEngineFunSuite with QueryStatisticsTestSupport with CreateTempFileTestSupport with CypherComparisonSupport { class ExecutionEngineTest extends ExecutionEngineFunSuite with QueryStatisticsTestSupport with CreateTempFileTestSupport with CypherComparisonSupport {


private val startConf = Configs.CommunityInterpreted - Configs.Version3_3 private val startConf = Configs.CommunityInterpreted - Configs.Version3_4


test("shouldGetRelationshipById") { test("shouldGetRelationshipById") {
val n = createNode() val n = createNode()
Expand Down
Expand Up @@ -198,7 +198,7 @@ class ForeachAcceptanceTest extends ExecutionEngineFunSuite with CypherCompariso


// when // when
val config = TestConfiguration(Versions.Default, Planners.Default, Runtimes(Runtimes.Interpreted, Runtimes.Slotted, Runtimes.ProcedureOrSchema)) + val config = TestConfiguration(Versions.Default, Planners.Default, Runtimes(Runtimes.Interpreted, Runtimes.Slotted, Runtimes.ProcedureOrSchema)) +
TestConfiguration(Versions(Versions.V3_1, Versions.V3_3), Planners.Cost, Runtimes.Default) TestConfiguration(Versions(Versions.V3_1, Versions.V3_4), Planners.Cost, Runtimes.Default)
failWithError(config, query, List("Expected to find a node at")) failWithError(config, query, List("Expected to find a node at"))
} }


Expand Down
Expand Up @@ -50,7 +50,7 @@ class HintAcceptanceTest
|USING JOIN ON a |USING JOIN ON a
|RETURN a.name, b.name""".stripMargin |RETURN a.name, b.name""".stripMargin


executeWith(Configs.Interpreted + Configs.Version3_3 - Configs.Cost2_3 - Configs.Cost3_1, query, executeWith(Configs.Interpreted + Configs.Version3_4 - Configs.Cost2_3 - Configs.Cost3_1, query,
planComparisonStrategy = ComparePlansWithAssertion((p) => { planComparisonStrategy = ComparePlansWithAssertion((p) => {
p should useOperators("NodeLeftOuterHashJoin") p should useOperators("NodeLeftOuterHashJoin")
p should not(useOperators("NodeHashJoin")) p should not(useOperators("NodeHashJoin"))
Expand All @@ -72,7 +72,7 @@ class HintAcceptanceTest
executeWith(Configs.Interpreted - Configs.Cost2_3 - Configs.Cost3_1, query, planComparisonStrategy = ComparePlansWithAssertion((p) => { executeWith(Configs.Interpreted - Configs.Cost2_3 - Configs.Cost3_1, query, planComparisonStrategy = ComparePlansWithAssertion((p) => {
p should useOperators("NodeRightOuterHashJoin") p should useOperators("NodeRightOuterHashJoin")
p should not(useOperators("NodeHashJoin")) p should not(useOperators("NodeHashJoin"))
}, expectPlansToFail = Configs.AllRulePlanners + Configs.BackwardsCompatibility)) }, expectPlansToFail = Configs.AllRulePlanners + Configs.Cost2_3 + Configs.Cost3_1))
} }


test("should solve join hint on 1 variable with join on more, if possible") { test("should solve join hint on 1 variable with join on more, if possible") {
Expand All @@ -84,12 +84,10 @@ class HintAcceptanceTest
|USING JOIN ON pB |USING JOIN ON pB
|RETURN *""".stripMargin |RETURN *""".stripMargin


// TODO: Once 3.3 comes out with the same bugfix, we should change the following lines to not exclude 3.3
val cost3_3 = TestScenario(Versions.V3_3, Planners.Cost, Runtimes.Default)
executeWith(Configs.Interpreted - Configs.Cost2_3 - Configs.Cost3_1, query, executeWith(Configs.Interpreted - Configs.Cost2_3 - Configs.Cost3_1, query,
planComparisonStrategy = ComparePlansWithAssertion((p) => { planComparisonStrategy = ComparePlansWithAssertion((p) => {
p should useOperators("NodeRightOuterHashJoin") p should useOperators("NodeRightOuterHashJoin")
}, expectPlansToFail = Configs.AllRulePlanners + Configs.Cost2_3 + Configs.Cost3_1 + cost3_3)) }, expectPlansToFail = Configs.AllRulePlanners + Configs.Cost2_3 + Configs.Cost3_1))
} }


test("should do index seek instead of index scan with explicit index seek hint") { test("should do index seek instead of index scan with explicit index seek hint") {
Expand All @@ -113,7 +111,7 @@ class HintAcceptanceTest
|RETURN a.prop, b.prop |RETURN a.prop, b.prop
""".stripMargin """.stripMargin


executeWith(Configs.Interpreted - Configs.OldAndRule + Configs.Cost3_3, query, executeWith(Configs.Interpreted - Configs.AllRulePlanners - Configs.Cost2_3 - Configs.Cost3_1, query,
planComparisonStrategy = ComparePlansWithAssertion((p) => { planComparisonStrategy = ComparePlansWithAssertion((p) => {
p should useOperatorTimes("NodeIndexSeek", 2) p should useOperatorTimes("NodeIndexSeek", 2)
}, expectPlansToFail = Configs.AllRulePlanners + Configs.Cost2_3 + Configs.Cost3_1)) }, expectPlansToFail = Configs.AllRulePlanners + Configs.Cost2_3 + Configs.Cost3_1))
Expand All @@ -136,7 +134,7 @@ class HintAcceptanceTest
|AND date("2017-01-01") <= r.date <= date("2018-01-01") |AND date("2017-01-01") <= r.date <= date("2018-01-01")
|RETURN COUNT(*)""".stripMargin |RETURN COUNT(*)""".stripMargin


val result = executeWith(Configs.Version3_5 - Configs.Compiled - Configs.AllRulePlanners, query) val result = executeWith(Configs.Version3_5 + Configs.Version3_4 - Configs.Compiled - Configs.AllRulePlanners, query)


// Then // Then
result.toList should be(List(Map("COUNT(*)" -> 1))) result.toList should be(List(Map("COUNT(*)" -> 1)))
Expand Down
Expand Up @@ -89,7 +89,7 @@ class JoinAcceptanceTest extends ExecutionEngineFunSuite with CypherComparisonSu


val expectSucceed = Configs.Interpreted - Configs.Cost2_3 - Configs.Cost3_1 val expectSucceed = Configs.Interpreted - Configs.Cost2_3 - Configs.Cost3_1
executeWith(expectSucceed, query, executeWith(expectSucceed, query,
planComparisonStrategy = ComparePlansWithAssertion(_ should useOperators("NodeRightOuterHashJoin"), Configs.AllRulePlanners + Configs.BackwardsCompatibility)) planComparisonStrategy = ComparePlansWithAssertion(_ should useOperators("NodeRightOuterHashJoin"), Configs.AllRulePlanners + Configs.Cost2_3 + Configs.Cost3_1))
} }


test("should handle node left outer hash join with different types for the node variable") { test("should handle node left outer hash join with different types for the node variable") {
Expand Down Expand Up @@ -127,7 +127,7 @@ class JoinAcceptanceTest extends ExecutionEngineFunSuite with CypherComparisonSu


val expectSucceed = Configs.Interpreted - Configs.Cost2_3 - Configs.Cost3_1 val expectSucceed = Configs.Interpreted - Configs.Cost2_3 - Configs.Cost3_1
val result = executeWith(expectSucceed, query, val result = executeWith(expectSucceed, query,
planComparisonStrategy = ComparePlansWithAssertion(_ should useOperators("NodeRightOuterHashJoin"), Configs.AllRulePlanners + Configs.BackwardsCompatibility)) planComparisonStrategy = ComparePlansWithAssertion(_ should useOperators("NodeRightOuterHashJoin"), Configs.AllRulePlanners + Configs.Cost2_3 + Configs.Cost3_1))
} }


test("optional match join should not crash") { test("optional match join should not crash") {
Expand Down

0 comments on commit 6685e52

Please sign in to comment.