diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 5f5c474ce8663614a434bfc4c9791444041cafe1..9beb8c1dde501860137abe70a6f7646cc0a6fbcb 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -127,7 +127,7 @@ jobs: - name: Pytest env: NEBULA_TEST_LOGS_DIR: ${{ github.workspace }}/build - run: python3 -m pytest --dist=loadfile -n8 --rm_dir=false -m "not skip" --build_dir="$PWD/../build" + run: python3 -m pytest --dist=loadfile -n8 --rm_dir=false -m "not skip" timeout-minutes: 25 working-directory: tests - name: Upload logs diff --git a/ci/test.sh b/ci/test.sh index 88b9003e4b084869f9ccc7f9820bce3c0b1dd277..ee341929078523c15994e28211ea3bb70212a0ec 100755 --- a/ci/test.sh +++ b/ci/test.sh @@ -89,18 +89,6 @@ function run_ctest() { --output-on-failure } -function run_test() { - export PYTHONPATH=$PROJ_DIR:$PYTHONPATH - pushd $PROJ_DIR/tests - pytest -n 8 --build_dir=$BUILD_DIR \ - --dist=loadfile \ - --debug_log=false \ - ${@:1} - - # $BUILD_DIR/tests/ntr --debug_log=false ${@:1} $PROJ_DIR/tests/job/* - popd -} - function test_in_cluster() { cd $BUILD_DIR/tests export PYTHONPATH=$PROJ_DIR:$PYTHONPATH @@ -130,9 +118,6 @@ case "$1" in ctest) run_ctest ;; - test) - run_test "${@:2}" - ;; k8s) prepare configure_clang diff --git a/tests/Makefile b/tests/Makefile index 8e8843d42c71e6a11308a60a1e3f70f3844748be..1eadf3b732fca79f27501b0a85a3921a89f8c043 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -36,7 +36,10 @@ check: @find $(CURR_DIR)/tck/features -type f -iname "*.feature" -print | xargs $(gherkin_fmt) --check test: fmt - cd $(CURR_DIR) && pytest -n8 --dist=loadfile -m "not skip" --build_dir=$(CURR_DIR)/../build + cd $(CURR_DIR) && pytest -n8 --dist=loadfile -m "not skip" + +tck: fmt + cd $(CURR_DIR) && pytest -n8 --dist=loadfile -m "not skip" $(CURR_DIR)/tck/ clean: @rm -rf $(CURR_DIR)/nebula-python $(CURR_DIR)/reformat-gherkin $(CURR_DIR)/.pytest $(CURR_DIR)/.pytest_cache diff --git a/tests/conftest.py b/tests/conftest.py index cdd17ed61d7d209d38deb8fc5b2c605f1be73e04..18795fddf8717bd0e6049dccdba065ac4728a035 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -56,7 +56,7 @@ def pytest_addoption(parser): parser.addoption("--build_dir", dest="build_dir", - default="", + default=f"{CURR_PATH}/../build", help="Nebula Graph CMake build directory") diff --git a/tests/query/v2/match/test_variable_length_relationships.py b/tests/query/v2/match/test_variable_length_relationships.py index d25e1f8c9c836092042257acfa6266132e8260e9..85bbee7a72432baab70dcf67b4519676dc5248b6 100644 --- a/tests/query/v2/match/test_variable_length_relationships.py +++ b/tests/query/v2/match/test_variable_length_relationships.py @@ -260,343 +260,6 @@ class TestVariableLengthRelationshipMatch(NebulaTestSuite): } self.check_rows_with_header(stmt, expected) - def test_hops_m_to_n(self, - like, - serve, - serve_2hop, - serve_3hop, - like_2hop, - like_3hop): - VERTICES = self.VERTEXS - - def like_row_2hop(dst1: str, dst2: str): - return [like_2hop('Tim Duncan', dst1, dst2), VERTICES[dst2]] - - def like_row_3hop(dst1: str, dst2: str, dst3: str): - return [like_3hop('Tim Duncan', dst1, dst2, dst3), VERTICES[dst3]] - - def serve_row_2hop(team, player, r1=0, r2=0): - return [[serve('Tim Duncan', team, r1), serve(player, team, r2)], VERTICES[player]] - - def serve_row_3hop(team1, player, team2, r1=0, r2=0, r3=0): - return [ - [serve('Tim Duncan', team1, r1), serve(player, team1, r2), serve(player, team2, r3)], - VERTICES[team2] - ] - - # single both direction edge with properties - stmt = ''' - MATCH (:player{name:"Tim Duncan"})-[e:serve*2..3{start_year: 2000}]-(v) - RETURN e, v - ''' - expected = { - "column_names": ['e', 'v'], - "rows": [], - } - self.check_rows_with_header(stmt, expected) - - stmt = ''' - MATCH (:player{name:"Tim Duncan"})-[e:like*2..3{likeness: 90}]-(v) - RETURN e, v - ''' - expected = { - "column_names": ['e', 'v'], - "rows": [ - [like_2hop("Tiago Splitter", "Manu Ginobili", "Tim Duncan"), VERTICES["Tiago Splitter"]], - ], - } - self.check_rows_with_header(stmt, expected) - - # single direction edge with properties - stmt = ''' - MATCH (:player{name:"Tim Duncan"})-[e:serve*2..3{start_year: 2000}]->(v) - RETURN e, v - ''' - expected = { - "column_names": ['e', 'v'], - "rows": [], - } - self.check_rows_with_header(stmt, expected) - - stmt = ''' - MATCH (:player{name:"Tim Duncan"})-[e:like*2..3{likeness: 90}]->(v) - RETURN e, v - ''' - expected = { - "column_names": ['e', 'v'], - "rows": [], - } - self.check_rows_with_header(stmt, expected) - - stmt = ''' - MATCH (:player{name:"Tim Duncan"})<-[e:like*2..3{likeness: 90}]-(v) - RETURN e, v - ''' - expected = { - "column_names": ['e', 'v'], - "rows": [ - [like_2hop("Tiago Splitter", "Manu Ginobili", "Tim Duncan"), VERTICES["Tiago Splitter"]], - ], - } - self.check_rows_with_header(stmt, expected) - - # single both direction edge without properties - stmt = ''' - MATCH (:player{name:"Tim Duncan"})-[e:serve*2..3]-(v) - RETURN e, v - ''' - expected = { - "column_names": ['e', 'v'], - "rows": [ - serve_row_2hop("Spurs", "Dejounte Murray"), - serve_row_2hop("Spurs", "Marco Belinelli"), - serve_row_3hop("Spurs", "Marco Belinelli", "Bulls"), - serve_row_3hop("Spurs", "Marco Belinelli", "Hornets"), - serve_row_3hop("Spurs", "Marco Belinelli", "Hawks"), - serve_row_3hop("Spurs", "Marco Belinelli", "76ers"), - serve_row_3hop("Spurs", "Marco Belinelli", "Spurs", 0, 0, 1), - serve_row_3hop("Spurs", "Marco Belinelli", "Hornets", 0, 0, 1), - serve_row_3hop("Spurs", "Marco Belinelli", "Raptors"), - serve_row_3hop("Spurs", "Marco Belinelli", "Warriors"), - serve_row_3hop("Spurs", "Marco Belinelli", "Kings"), - serve_row_2hop("Spurs", "Danny Green"), - serve_row_3hop("Spurs", "Danny Green", "Cavaliers"), - serve_row_3hop("Spurs", "Danny Green", "Raptors"), - serve_row_2hop("Spurs", "Aron Baynes"), - serve_row_3hop("Spurs", "Aron Baynes", "Pistons"), - serve_row_3hop("Spurs", "Aron Baynes", "Celtics"), - serve_row_2hop("Spurs", "Jonathon Simmons"), - serve_row_3hop("Spurs", "Jonathon Simmons", "76ers"), - serve_row_3hop("Spurs", "Jonathon Simmons", "Magic"), - serve_row_2hop("Spurs", "Rudy Gay"), - serve_row_3hop("Spurs", "Rudy Gay", "Raptors"), - serve_row_3hop("Spurs", "Rudy Gay", "Kings"), - serve_row_3hop("Spurs", "Rudy Gay", "Grizzlies"), - serve_row_2hop("Spurs", "Tony Parker"), - serve_row_3hop("Spurs", "Tony Parker", "Hornets"), - serve_row_2hop("Spurs", "Manu Ginobili"), - serve_row_2hop("Spurs", "David West"), - serve_row_3hop("Spurs", "David West", "Pacers"), - serve_row_3hop("Spurs", "David West", "Warriors"), - serve_row_3hop("Spurs", "David West", "Hornets"), - serve_row_2hop("Spurs", "Tracy McGrady"), - serve_row_3hop("Spurs", "Tracy McGrady", "Raptors"), - serve_row_3hop("Spurs", "Tracy McGrady", "Magic"), - serve_row_3hop("Spurs", "Tracy McGrady", "Rockets"), - serve_row_2hop("Spurs", "Marco Belinelli", 0, 1), - serve_row_3hop("Spurs", "Marco Belinelli", "Bulls", 0, 1, 0), - serve_row_3hop("Spurs", "Marco Belinelli", "Spurs", 0, 1, 0), - serve_row_3hop("Spurs", "Marco Belinelli", "Hornets", 0, 1, 0), - serve_row_3hop("Spurs", "Marco Belinelli", "Hawks", 0, 1, 0), - serve_row_3hop("Spurs", "Marco Belinelli", "76ers", 0, 1, 0), - serve_row_3hop("Spurs", "Marco Belinelli", "Hornets", 0, 1, 1), - serve_row_3hop("Spurs", "Marco Belinelli", "Raptors", 0, 1, 0), - serve_row_3hop("Spurs", "Marco Belinelli", "Warriors", 0, 1, 0), - serve_row_3hop("Spurs", "Marco Belinelli", "Kings", 0, 1, 0), - serve_row_2hop("Spurs", "Paul Gasol"), - serve_row_3hop("Spurs", "Paul Gasol", "Lakers"), - serve_row_3hop("Spurs", "Paul Gasol", "Bulls"), - serve_row_3hop("Spurs", "Paul Gasol", "Grizzlies"), - serve_row_3hop("Spurs", "Paul Gasol", "Bucks"), - serve_row_2hop("Spurs", "LaMarcus Aldridge"), - serve_row_3hop("Spurs", "LaMarcus Aldridge", "Trail Blazers"), - serve_row_2hop("Spurs", "Tiago Splitter"), - serve_row_3hop("Spurs", "Tiago Splitter", "Hawks"), - serve_row_3hop("Spurs", "Tiago Splitter", "76ers"), - serve_row_2hop("Spurs", "Cory Joseph"), - serve_row_3hop("Spurs", "Cory Joseph", "Pacers"), - serve_row_3hop("Spurs", "Cory Joseph", "Raptors"), - serve_row_2hop("Spurs", "Kyle Anderson"), - serve_row_3hop("Spurs", "Kyle Anderson", "Grizzlies"), - serve_row_2hop("Spurs", "Boris Diaw"), - serve_row_3hop("Spurs", "Boris Diaw", "Suns"), - serve_row_3hop("Spurs", "Boris Diaw", "Jazz"), - serve_row_3hop("Spurs", "Boris Diaw", "Hawks"), - serve_row_3hop("Spurs", "Boris Diaw", "Hornets"), - ], - } - self.check_rows_with_header(stmt, expected) - - # stmt = ''' - # MATCH (:player{name: "Tim Duncan"})-[e:like*2..3]-(v) - # RETURN count(*) - # ''' - # expected = { - # "column_names": ['count(*)'], - # "rows": [292], - # } - # self.check_rows_with_header(stmt, expected) - - # single direction edge without properties - stmt = ''' - MATCH (:player{name:"Tim Duncan"})-[e:serve*2..3]->(v) - RETURN e, v - ''' - expected = { - "column_names": ['e', 'v'], - "rows": [], - } - self.check_rows_with_header(stmt, expected) - - stmt = ''' - MATCH (:player{name: "Tim Duncan"})-[e:like*2..3]->(v) - RETURN e, v - ''' - expected = { - "column_names": ['e', 'v'], - "rows": [ - like_row_2hop("Tony Parker", "Tim Duncan"), - like_row_3hop("Tony Parker", "Tim Duncan", "Manu Ginobili"), - like_row_2hop("Tony Parker", "Manu Ginobili"), - like_row_3hop("Tony Parker", "Manu Ginobili", "Tim Duncan"), - like_row_2hop("Tony Parker", "LaMarcus Aldridge"), - like_row_3hop("Tony Parker", "LaMarcus Aldridge", "Tony Parker"), - like_row_3hop("Tony Parker", "LaMarcus Aldridge", "Tim Duncan"), - like_row_2hop("Manu Ginobili", "Tim Duncan"), - like_row_3hop("Manu Ginobili", "Tim Duncan", "Tony Parker"), - ], - } - self.check_rows_with_header(stmt, expected) - - # multiple both direction edge with properties - stmt = ''' - MATCH (:player{name: "Tim Duncan"})-[e:serve|like*2..3{likeness: 90}]-(v) - RETURN e, v - ''' - expected = { - "column_names": ['e', 'v'], - "rows": [ - [like_2hop("Tiago Splitter", "Manu Ginobili", "Tim Duncan"), VERTICES["Tiago Splitter"]] - ], - } - self.check_rows_with_header(stmt, expected) - - stmt = ''' - MATCH (:player{name:"Tim Duncan"})-[e:serve|like*2..3{start_year: 2000}]-(v) - RETURN e, v - ''' - expected = { - "column_names": ['e', 'v'], - "rows": [], - } - self.check_rows_with_header(stmt, expected) - - # multiple direction edge with properties - stmt = ''' - MATCH (:player{name:"Tim Duncan"})-[e:serve|like*2..3{likeness: 90}]->(v) - RETURN e, v - ''' - expected = { - "column_names": ['e', 'v'], - "rows": [], - } - self.check_rows_with_header(stmt, expected) - - stmt = ''' - MATCH (:player{name:"Tim Duncan"})<-[e:serve|like*2..3{likeness: 90}]-(v) - RETURN e, v - ''' - expected = { - "column_names": ['e', 'v'], - "rows": [ - [like_2hop("Tiago Splitter", "Manu Ginobili", "Tim Duncan"), VERTICES['Tiago Splitter']] - ], - } - self.check_rows_with_header(stmt, expected) - - # multiple both direction edge without properties - # stmt = ''' - # MATCH (:player{name:"Tim Duncan"})-[e:serve|like*2..3]-(v) - # RETURN count(*) - # ''' - # expected = { - # "column_names": ['COUNT(*)'], - # "rows": [927], - # } - # self.check_rows_with_header(stmt, expected) - - # multiple direction edge without properties - stmt = ''' - MATCH (:player{name: "Tim Duncan"})-[e:serve|like*2..3]->(v) - RETURN e, v - ''' - expected = { - "column_names": ['e', 'v'], - "rows": [ - like_row_2hop("Tony Parker", "Tim Duncan"), - like_row_3hop("Tony Parker", "Tim Duncan", "Manu Ginobili"), - [ - [ - like("Tim Duncan", "Tony Parker"), - like("Tony Parker", "Tim Duncan"), - serve("Tim Duncan", "Spurs"), - ], - VERTICES['Spurs'], - ], - like_row_2hop("Tony Parker", "Manu Ginobili"), - like_row_3hop("Tony Parker", "Manu Ginobili", "Tim Duncan"), - [ - [ - like("Tim Duncan", "Tony Parker"), - like("Tony Parker", "Manu Ginobili"), - serve("Manu Ginobili", "Spurs"), - ], - VERTICES['Spurs'], - ], - like_row_2hop("Tony Parker", "LaMarcus Aldridge"), - like_row_3hop("Tony Parker", "LaMarcus Aldridge", "Tony Parker"), - like_row_3hop("Tony Parker", "LaMarcus Aldridge", "Tim Duncan"), - [ - [ - like("Tim Duncan", "Tony Parker"), - like("Tony Parker", "LaMarcus Aldridge"), - serve("LaMarcus Aldridge", "Trail Blazers"), - ], - VERTICES['Trail Blazers'], - ], - [ - [ - like("Tim Duncan", "Tony Parker"), - like("Tony Parker", "LaMarcus Aldridge"), - serve("LaMarcus Aldridge", "Spurs"), - ], - VERTICES['Spurs'], - ], - [ - [ - like("Tim Duncan", "Tony Parker"), - serve("Tony Parker", "Hornets"), - ], - VERTICES['Hornets'], - ], - [ - [ - like("Tim Duncan", "Tony Parker"), - serve("Tony Parker", "Spurs"), - ], - VERTICES['Spurs'], - ], - like_row_2hop("Manu Ginobili", "Tim Duncan"), - like_row_3hop("Manu Ginobili", "Tim Duncan", "Tony Parker"), - [ - [ - like("Tim Duncan", "Manu Ginobili"), - like("Manu Ginobili", "Tim Duncan"), - serve("Tim Duncan", "Spurs"), - ], - VERTICES['Spurs'], - ], - [ - [ - like("Tim Duncan", "Manu Ginobili"), - serve("Manu Ginobili", "Spurs"), - ], - VERTICES['Spurs'], - ], - ], - } - self.check_rows_with_header(stmt, expected) - @pytest.mark.skip def test_mix_hops(self): stmt = ''' @@ -609,86 +272,17 @@ class TestVariableLengthRelationshipMatch(NebulaTestSuite): } self.check_rows_with_header(stmt, expected) - def test_return_all(self, like_2hop_start_with, like_3hop_start_with): - like_row_2hop = like_2hop_start_with('Tim Duncan') - like_row_3hop = like_3hop_start_with('Tim Duncan') - stmt = ''' - MATCH (:player{name:"Tim Duncan"})-[e:like*2..3]->() - RETURN * - ''' - expected = { - "column_names": ['e'], - "rows": [ - [like_row_2hop("Tony Parker", "Tim Duncan")], - [like_row_3hop("Tony Parker", "Tim Duncan", "Manu Ginobili")], - [like_row_2hop("Tony Parker", "Manu Ginobili")], - [like_row_3hop("Tony Parker", "Manu Ginobili", "Tim Duncan")], - [like_row_2hop("Tony Parker", "LaMarcus Aldridge")], - [like_row_3hop("Tony Parker", "LaMarcus Aldridge", "Tony Parker")], - [like_row_3hop("Tony Parker", "LaMarcus Aldridge", "Tim Duncan")], - [like_row_2hop("Manu Ginobili", "Tim Duncan")], - [like_row_3hop("Manu Ginobili", "Tim Duncan", "Tony Parker")], - ], - } - self.check_rows_with_header(stmt, expected) - def test_more_cases(self, like, serve, like_2hop): # stmt = ''' # MATCH (v:player{name: 'Tim Duncan'})-[e:like*0]-() # RETURN e # ''' - stmt = ''' - MATCH (v:player{name: 'Tim Duncan'})-[e:like*1]-() - RETURN e - ''' - expected = { - "column_names": ['e'], - "rows": [ - [[like('Tim Duncan', 'Manu Ginobili')]], - [[like('Tim Duncan', 'Tony Parker')]], - [[like('Dejounte Murray', 'Tim Duncan')]], - [[like('Shaquile O\'Neal', 'Tim Duncan')]], - [[like('Marco Belinelli', 'Tim Duncan')]], - [[like('Boris Diaw', 'Tim Duncan')]], - [[like('Manu Ginobili', 'Tim Duncan')]], - [[like('Danny Green', 'Tim Duncan')]], - [[like('Tiago Splitter', 'Tim Duncan')]], - [[like('Aron Baynes', 'Tim Duncan')]], - [[like('Tony Parker', 'Tim Duncan')]], - [[like('LaMarcus Aldridge', 'Tim Duncan')]], - ], - } - self.check_rows_with_header(stmt, expected) - # stmt = ''' # MATCH (v:player{name: 'Tim Duncan'})-[e:like*0..0]-() # RETURN e # ''' - stmt = ''' - MATCH (v:player{name: 'Tim Duncan'})-[e:like*1..1]-() - RETURN e - ''' - expected = { - "column_names": ['e'], - "rows": [ - [[like('Tim Duncan', 'Manu Ginobili')]], - [[like('Tim Duncan', 'Tony Parker')]], - [[like('Dejounte Murray', 'Tim Duncan')]], - [[like('Shaquile O\'Neal', 'Tim Duncan')]], - [[like('Marco Belinelli', 'Tim Duncan')]], - [[like('Boris Diaw', 'Tim Duncan')]], - [[like('Manu Ginobili', 'Tim Duncan')]], - [[like('Danny Green', 'Tim Duncan')]], - [[like('Tiago Splitter', 'Tim Duncan')]], - [[like('Aron Baynes', 'Tim Duncan')]], - [[like('Tony Parker', 'Tim Duncan')]], - [[like('LaMarcus Aldridge', 'Tim Duncan')]], - ], - } - self.check_rows_with_header(stmt, expected) - # stmt = ''' # MATCH (v:player{name: 'Tim Duncan'})-[e:like*]-() # RETURN e @@ -699,41 +293,6 @@ class TestVariableLengthRelationshipMatch(NebulaTestSuite): # RETURN e, e2 # ''' - stmt = ''' - MATCH (v:player{name: 'Tim Duncan'})-[e:like*2..3]-() - WHERE e[1].likeness>95 AND e[2].likeness==100 - RETURN e - ''' - expected = { - "column_names": ['e'], - "rows": [[[ - like('Dejounte Murray', 'Tim Duncan'), - like('Dejounte Murray', 'LeBron James'), - like('LeBron James', 'Ray Allen'), - ]]], - } - self.check_rows_with_header(stmt, expected) - - stmt = ''' - MATCH (v:player{name: 'Tim Duncan'})-[e1:like*1..2]-(v2{name: 'Tony Parker'})-[e2:serve]-(v3{name: 'Spurs'}) - RETURN e1, e2 - ''' - expected = { - "column_names": ['e1', 'e2'], - "rows": [ - [[like('Dejounte Murray', 'Tim Duncan'), like('Dejounte Murray', 'Tony Parker')], serve('Tony Parker', 'Spurs')], - [[like('Tony Parker', 'Manu Ginobili'), like('Tim Duncan', 'Manu Ginobili')], serve('Tony Parker', 'Spurs')], - [[like('Marco Belinelli', 'Tim Duncan'), like('Marco Belinelli', 'Tony Parker')], serve('Tony Parker', 'Spurs')], - [[like('Boris Diaw', 'Tim Duncan'), like('Boris Diaw', 'Tony Parker')], serve('Tony Parker', 'Spurs')], - [like_2hop('Tony Parker', 'Manu Ginobili', 'Tim Duncan'), serve('Tony Parker', 'Spurs')], - [[like('LaMarcus Aldridge', 'Tim Duncan'), like('LaMarcus Aldridge', 'Tony Parker')], serve('Tony Parker', 'Spurs')], - [[like('LaMarcus Aldridge', 'Tim Duncan'), like('Tony Parker', 'LaMarcus Aldridge')], serve('Tony Parker', 'Spurs')], - [[like('Tim Duncan', 'Tony Parker')], serve('Tony Parker', 'Spurs')], - [[like('Tony Parker', 'Tim Duncan')], serve('Tony Parker', 'Spurs')], - ], - } - self.check_rows_with_header(stmt, expected) - stmt=''' MATCH p=(v:player{name: 'Tim Duncan'})-[:like|:serve*1..3]->(v1) WHERE e[0].likeness>90 diff --git a/tests/tck/conftest.py b/tests/tck/conftest.py index 6203354d25a94c28751a176d1fe0411463fea036..2bee9e09030bc5432abd160a73074469711f4b7d 100644 --- a/tests/tck/conftest.py +++ b/tests/tck/conftest.py @@ -48,7 +48,8 @@ def result_should_be_relax_cmp(result, nba_space): ds = dataset(table(result)) dsw = DataSetWrapper(ds) dscmp = DataSetWrapperComparator(strict=False, order=False) - assert dscmp(rs._data_set_wrapper, dsw) + assert dscmp(rs._data_set_wrapper, dsw), \ + f"Response: {str(rs)} vs. Expected: {str(dsw)}" @then("no side effects") diff --git a/tests/tck/features/match/VariableLengthRelationship.feature b/tests/tck/features/match/VariableLengthRelationship.feature index f0e327449ff740682bfe5430c3e372ac2f90fa0f..4e6d3b9146a950c52a9a72c8d9c28af773362a49 100644 --- a/tests/tck/features/match/VariableLengthRelationship.feature +++ b/tests/tck/features/match/VariableLengthRelationship.feature @@ -1,21 +1,315 @@ -Feature: Variable length relationship match +Feature: Variable length relationship match (m to n) - Scenario: m to n + Background: Given a graph with space named "nba" + + Scenario: single both direction edge with properties + When executing query: + """ + MATCH (:player{name:"Tim Duncan"})-[e:serve*2..3{start_year: 2000}]-(v) + RETURN e, v + """ + Then the result should be, in any order: + | e | v | + When executing query: + """ + MATCH (:player{name:"Tim Duncan"})-[e:like*2..3{likeness: 90}]-(v) + RETURN e, v + """ + Then the result should be, in any order, with relax comparision: + | e | v | + | [[:like "Tim Duncan"<-"Manu Ginobili"], [:like "Manu Ginobili"<-"Tiago Splitter"]] | ("Tiago Splitter") | + + Scenario: single direction edge with properties + When executing query: + """ + MATCH (:player{name:"Tim Duncan"})-[e:serve*2..3{start_year: 2000}]->(v) + RETURN e, v + """ + Then the result should be, in any order: + | e | v | + When executing query: + """ + MATCH (:player{name:"Tim Duncan"})-[e:like*2..3{likeness: 90}]->(v) + RETURN e, v + """ + Then the result should be, in any order: + | e | v | + When executing query: + """ + MATCH (:player{name:"Tim Duncan"})<-[e:like*2..3{likeness: 90}]-(v) + RETURN e, v + """ + Then the result should be, in any order, with relax comparision: + | e | v | + | [[:like "Tim Duncan"<-"Manu Ginobili"], [:like "Manu Ginobili"<-"Tiago Splitter"]] | ("Tiago Splitter") | + + Scenario: single both direction edge without properties + When executing query: + """ + MATCH (:player{name:"Tim Duncan"})-[e:serve*2..3]-(v) + RETURN e, v + """ + Then the result should be, in any order, with relax comparision: + | e | v | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Dejounte Murray"]] | ("Dejounte Murray") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"]] | ("Marco Belinelli") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"], [:serve "Marco Belinelli"->"Bulls"]] | ("Bulls") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"], [:serve "Marco Belinelli"->"Hornets"]] | ("Hornets") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"], [:serve "Marco Belinelli"->"Hawks"]] | ("Hawks") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"], [:serve "Marco Belinelli"->"76ers"]] | ("76ers") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"], [:serve "Marco Belinelli"->"Spurs"@1]] | ("Spurs") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"], [:serve "Marco Belinelli"->"Hornets"@1]] | ("Hornets") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"], [:serve "Marco Belinelli"->"Raptors"]] | ("Raptors") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"], [:serve "Marco Belinelli"->"Warriors"]] | ("Warriors") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"], [:serve "Marco Belinelli"->"Kings"]] | ("Kings") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Danny Green"]] | ("Danny Green") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Danny Green"], [:serve "Danny Green"->"Cavaliers"]] | ("Cavaliers") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Danny Green"], [:serve "Danny Green"->"Raptors"]] | ("Raptors") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Aron Baynes"]] | ("Aron Baynes") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Aron Baynes"], [:serve "Aron Baynes"->"Pistons"]] | ("Pistons") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Aron Baynes"], [:serve "Aron Baynes"->"Celtics"]] | ("Celtics") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Jonathon Simmons"]] | ("Jonathon Simmons") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Jonathon Simmons"], [:serve "Jonathon Simmons"->"76ers"]] | ("76ers") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Jonathon Simmons"], [:serve "Jonathon Simmons"->"Magic"]] | ("Magic") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Rudy Gay"]] | ("Rudy Gay") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Rudy Gay"], [:serve "Rudy Gay"->"Raptors"]] | ("Raptors") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Rudy Gay"], [:serve "Rudy Gay"->"Kings"]] | ("Kings") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Rudy Gay"], [:serve "Rudy Gay"->"Grizzlies"]] | ("Grizzlies") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Tony Parker"]] | ("Tony Parker") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Tony Parker"], [:serve "Tony Parker"->"Hornets"]] | ("Hornets") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Manu Ginobili"]] | ("Manu Ginobili") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"David West"]] | ("David West") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"David West"], [:serve "David West"->"Pacers"]] | ("Pacers") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"David West"], [:serve "David West"->"Warriors"]] | ("Warriors") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"David West"], [:serve "David West"->"Hornets"]] | ("Hornets") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Tracy McGrady"]] | ("Tracy McGrady") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Tracy McGrady"], [:serve "Tracy McGrady"->"Raptors"]] | ("Raptors") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Tracy McGrady"], [:serve "Tracy McGrady"->"Magic"]] | ("Magic") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Tracy McGrady"], [:serve "Tracy McGrady"->"Rockets"]] | ("Rockets") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"@1]] | ("Marco Belinelli") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"@1], [:serve "Marco Belinelli"->"Bulls"]] | ("Bulls") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"@1], [:serve "Marco Belinelli"->"Spurs"]] | ("Spurs") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"@1], [:serve "Marco Belinelli"->"Hornets"]] | ("Hornets") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"@1], [:serve "Marco Belinelli"->"Hawks"]] | ("Hawks") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"@1], [:serve "Marco Belinelli"->"76ers"]] | ("76ers") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"@1], [:serve "Marco Belinelli"->"Hornets"]] | ("Hornets") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"@1], [:serve "Marco Belinelli"->"Raptors"]] | ("Raptors") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"@1], [:serve "Marco Belinelli"->"Warriors"]] | ("Warriors") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Marco Belinelli"@1], [:serve "Marco Belinelli"->"Kings"]] | ("Kings") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Paul Gasol"]] | ("Paul Gasol") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Paul Gasol"], [:serve "Paul Gasol"->"Lakers"]] | ("Lakers") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Paul Gasol"], [:serve "Paul Gasol"->"Bulls"]] | ("Bulls") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Paul Gasol"], [:serve "Paul Gasol"->"Grizzlies"]] | ("Grizzlies") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Paul Gasol"], [:serve "Paul Gasol"->"Bucks"]] | ("Bucks") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"LaMarcus Aldridge"]] | ("LaMarcus Aldridge") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"LaMarcus Aldridge"], [:serve "LaMarcus Aldridge"->"Trail Blazers"]] | ("Trail Blazers") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Tiago Splitter"]] | ("Tiago Splitter") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Tiago Splitter"], [:serve "Tiago Splitter"->"Hawks"]] | ("Hawks") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Tiago Splitter"], [:serve "Tiago Splitter"->"76ers"]] | ("76ers") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Cory Joseph"]] | ("Cory Joseph") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Cory Joseph"], [:serve "Cory Joseph"->"Pacers"]] | ("Pacers") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Cory Joseph"], [:serve "Cory Joseph"->"Raptors"]] | ("Raptors") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Kyle Anderson"]] | ("Kyle Anderson") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Kyle Anderson"], [:serve "Kyle Anderson"->"Grizzlies"]] | ("Grizzlies") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Boris Diaw"]] | ("Boris Diaw") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Boris Diaw"], [:serve "Boris Diaw"->"Suns"]] | ("Suns") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Boris Diaw"], [:serve "Boris Diaw"->"Jazz"]] | ("Jazz") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Boris Diaw"], [:serve "Boris Diaw"->"Hawks"]] | ("Hawks") | + | [[:serve "Tim Duncan"->"Spurs"], [:serve "Spurs"<-"Boris Diaw"], [:serve "Boris Diaw"->"Hornets"]] | ("Hornets") | + + Scenario: single both direction edge without properties + When executing query: + """ + MATCH (:player{name: "Tim Duncan"})-[e:like*2..3]-(v) + RETURN e | + YIELD COUNT(*) + """ + Then the result should be, in any order: + | COUNT(*) | + | 292 | + + Scenario: single direction edge without properties + When executing query: + """ + MATCH (:player{name:"Tim Duncan"})-[e:serve*2..3]->(v) + RETURN e, v + """ + Then the result should be, in any order: + | e | v | + When executing query: + """ + MATCH (:player{name: "Tim Duncan"})-[e:like*2..3]->(v) + RETURN e, v + """ + Then the result should be, in any order, with relax comparision: + | e | v | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Tim Duncan"]] | ("Tim Duncan") | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Tim Duncan"], [:like "Tim Duncan"->"Manu Ginobili"]] | ("Manu Ginobili") | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Manu Ginobili"]] | ("Manu Ginobili") | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Manu Ginobili"], [:like "Manu Ginobili"->"Tim Duncan"]] | ("Tim Duncan") | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"]] | ("LaMarcus Aldridge") | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"], [:like "LaMarcus Aldridge"->"Tony Parker"]] | ("Tony Parker") | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"], [:like "LaMarcus Aldridge"->"Tim Duncan"]] | ("Tim Duncan") | + | [[:like "Tim Duncan"->"Manu Ginobili"], [:like "Manu Ginobili"->"Tim Duncan"]] | ("Tim Duncan") | + | [[:like "Tim Duncan"->"Manu Ginobili"], [:like "Manu Ginobili"->"Tim Duncan"], [:like "Tim Duncan"->"Tony Parker"]] | ("Tony Parker") | + + Scenario: multiple both direction edge with properties + When executing query: + """ + MATCH (:player{name: "Tim Duncan"})-[e:serve|like*2..3{likeness: 90}]-(v) + RETURN e, v + """ + Then the result should be, in any order, with relax comparision: + | e | v | + | [[:like "Tim Duncan"<-"Manu Ginobili"], [:like "Manu Ginobili"<-"Tiago Splitter"]] | ("Tiago Splitter") | + When executing query: + """ + MATCH (:player{name:"Tim Duncan"})-[e:serve|like*2..3{start_year: 2000}]-(v) + RETURN e, v + """ + Then the result should be, in any order: + | e | v | + + Scenario: multiple direction edge with properties When executing query: """ - MATCH (:player{name:'Tim Duncan'})-[e:serve*2..3{start_year: 2000}]-(v) + MATCH (:player{name:"Tim Duncan"})-[e:serve|like*2..3{likeness: 90}]->(v) RETURN e, v """ Then the result should be, in any order: | e | v | - And no side effects When executing query: """ - MATCH (:player{name:'Tim Duncan'})<-[e:like*2..3{likeness: 90}]-(v) + MATCH (:player{name:"Tim Duncan"})<-[e:serve|like*2..3{likeness: 90}]-(v) + RETURN e, v + """ + Then the result should be, in any order, with relax comparision: + | e | v | + | [[:like "Tim Duncan"<-"Manu Ginobili"], [:like "Manu Ginobili"<-"Tiago Splitter"]] | ("Tiago Splitter") | + + Scenario: multiple both direction edge without properties + When executing query: + """ + MATCH (:player{name:"Tim Duncan"})-[e:serve|like*2..3]-(v) + RETURN e | + YIELD COUNT(*) + """ + Then the result should be, in any order: + | COUNT(*) | + | 927 | + + Scenario: multiple direction edge without properties + When executing query: + """ + MATCH (:player{name: "Tim Duncan"})-[e:serve|like*2..3]->(v) RETURN e, v """ Then the result should be, in any order, with relax comparision: - | e | v | - | [[:like "Tim Duncan"<-"Manu Ginobili"@0], [:like "Manu Ginobili"<-"Tiago Splitter"@0]] | ("Tiago Splitter") | - And no side effects + | e | v | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Tim Duncan"]] | ("Tim Duncan") | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Tim Duncan"], [:like "Tim Duncan"->"Manu Ginobili"]] | ("Manu Ginobili") | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Tim Duncan"], [:serve "Tim Duncan"->"Spurs"]] | ("Spurs") | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Manu Ginobili"]] | ("Manu Ginobili") | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Manu Ginobili"], [:like "Manu Ginobili"->"Tim Duncan"]] | ("Tim Duncan") | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Manu Ginobili"], [:serve "Manu Ginobili"->"Spurs"]] | ("Spurs") | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"]] | ("LaMarcus Aldridge") | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"], [:like "LaMarcus Aldridge"->"Tony Parker"]] | ("Tony Parker") | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"], [:like "LaMarcus Aldridge"->"Tim Duncan"]] | ("Tim Duncan") | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"], [:serve "LaMarcus Aldridge"->"Trail Blazers"]] | ("Trail Blazers") | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"], [:serve "LaMarcus Aldridge"->"Spurs"]] | ("Spurs") | + | [[:like "Tim Duncan"->"Tony Parker"], [:serve "Tony Parker"->"Hornets"]] | ("Hornets") | + | [[:like "Tim Duncan"->"Tony Parker"], [:serve "Tony Parker"->"Spurs"]] | ("Spurs") | + | [[:like "Tim Duncan"->"Manu Ginobili"], [:like "Manu Ginobili"->"Tim Duncan"]] | ("Tim Duncan") | + | [[:like "Tim Duncan"->"Manu Ginobili"], [:like "Manu Ginobili"->"Tim Duncan"], [:like "Tim Duncan"->"Tony Parker"]] | ("Tony Parker") | + | [[:like "Tim Duncan"->"Manu Ginobili"], [:like "Manu Ginobili"->"Tim Duncan"], [:serve "Tim Duncan"->"Spurs"]] | ("Spurs") | + | [[:like "Tim Duncan"->"Manu Ginobili"], [:serve "Manu Ginobili"->"Spurs"]] | ("Spurs") | + + Scenario: return all + When executing query: + """ + MATCH (:player{name:"Tim Duncan"})-[e:like*2..3]->() + RETURN * + """ + Then the result should be, in any order, with relax comparision: + | e | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Tim Duncan"]] | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Tim Duncan"], [:like "Tim Duncan"->"Manu Ginobili"]] | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Manu Ginobili"]] | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Manu Ginobili"], [:like "Manu Ginobili"->"Tim Duncan"]] | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"]] | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"], [:like "LaMarcus Aldridge"->"Tony Parker"]] | + | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"LaMarcus Aldridge"], [:like "LaMarcus Aldridge"->"Tim Duncan"]] | + | [[:like "Tim Duncan"->"Manu Ginobili"], [:like "Manu Ginobili"->"Tim Duncan"]] | + | [[:like "Tim Duncan"->"Manu Ginobili"], [:like "Manu Ginobili"->"Tim Duncan"], [:like "Tim Duncan"->"Tony Parker"]] | + + Scenario: from one step + When executing query: + """ + MATCH (v:player{name: 'Tim Duncan'})-[e:like*1]-() + RETURN e + """ + Then the result should be, in any order, with relax comparision: + | e | + | [[:like "Tim Duncan"->"Manu Ginobili"]] | + | [[:like "Tim Duncan"->"Tony Parker"]] | + | [[:like "Tim Duncan"<-"Dejounte Murray"]] | + | [[:like "Tim Duncan"<-"Shaquile O'Neal"]] | + | [[:like "Tim Duncan"<-"Marco Belinelli"]] | + | [[:like "Tim Duncan"<-"Boris Diaw"]] | + | [[:like "Tim Duncan"<-"Manu Ginobili"]] | + | [[:like "Tim Duncan"<-"Danny Green"]] | + | [[:like "Tim Duncan"<-"Tiago Splitter"]] | + | [[:like "Tim Duncan"<-"Aron Baynes"]] | + | [[:like "Tim Duncan"<-"Tony Parker"]] | + | [[:like "Tim Duncan"<-"LaMarcus Aldridge"]] | + + Scenario: from one step to one step + When executing query: + """ + MATCH (v:player{name: 'Tim Duncan'})-[e:like*1..1]-() + RETURN e + """ + Then the result should be, in any order, with relax comparision: + | e | + | [[:like "Tim Duncan"->"Manu Ginobili"]] | + | [[:like "Tim Duncan"->"Tony Parker"]] | + | [[:like "Tim Duncan"<-"Dejounte Murray"]] | + | [[:like "Tim Duncan"<-"Shaquile O'Neal"]] | + | [[:like "Tim Duncan"<-"Marco Belinelli"]] | + | [[:like "Tim Duncan"<-"Boris Diaw"]] | + | [[:like "Tim Duncan"<-"Manu Ginobili"]] | + | [[:like "Tim Duncan"<-"Danny Green"]] | + | [[:like "Tim Duncan"<-"Tiago Splitter"]] | + | [[:like "Tim Duncan"<-"Aron Baynes"]] | + | [[:like "Tim Duncan"<-"Tony Parker"]] | + | [[:like "Tim Duncan"<-"LaMarcus Aldridge"]] | + + Scenario: filter by edges + When executing query: + """ + MATCH (v:player{name: 'Tim Duncan'})-[e:like*2..3]-() + WHERE e[1].likeness>95 AND e[2].likeness==100 + RETURN e + """ + Then the result should be, in any order, with relax comparision: + | e | + | [[:like "Tim Duncan"<-"Dejounte Murray"], [:like "Dejounte Murray"->"LeBron James"], [:like "LeBron James"->"Ray Allen"]] | + + Scenario: multi-steps and filter by node properties + When executing query: + """ + MATCH (v:player{name: 'Tim Duncan'})-[e1:like*1..2]-(v2{name: 'Tony Parker'})-[e2:serve]-(v3{name: 'Spurs'}) + RETURN e1, e2 + """ + Then the result should be, in any order, with relax comparision: + | e1 | e2 | + | [[:like "Tim Duncan"<-"Dejounte Murray"], [:like "Dejounte Murray"->"Tony Parker"]] | [:serve "Tony Parker"->"Spurs"] | + | [[:like "Tim Duncan"->"Manu Ginobili"], [:like "Manu Ginobili"<-"Tony Parker"]] | [:serve "Tony Parker"->"Spurs"] | + | [[:like "Tim Duncan"<-"Marco Belinelli"], [:like "Marco Belinelli"->"Tony Parker"]] | [:serve "Tony Parker"->"Spurs"] | + | [[:like "Tim Duncan"<-"Boris Diaw"], [:like "Boris Diaw"->"Tony Parker"]] | [:serve "Tony Parker"->"Spurs"] | + | [[:like "Tim Duncan"<-"Manu Ginobili"], [:like "Manu Ginobili"<-"Tony Parker"]] | [:serve "Tony Parker"->"Spurs"] | + | [[:like "Tim Duncan"<-"LaMarcus Aldridge"], [:like "LaMarcus Aldridge"->"Tony Parker"]] | [:serve "Tony Parker"->"Spurs"] | + | [[:like "Tim Duncan"<-"LaMarcus Aldridge"], [:like "LaMarcus Aldridge"<-"Tony Parker"]] | [:serve "Tony Parker"->"Spurs"] | + | [[:like "Tim Duncan"->"Tony Parker"]] | [:serve "Tony Parker"->"Spurs"] | + | [[:like "Tim Duncan"<-"Tony Parker"]] | [:serve "Tony Parker"->"Spurs"] | diff --git a/tests/tck/utils/nbv.py b/tests/tck/utils/nbv.py index bd3952c735412e3758ee37c22d8600301183f751..92df4433e10e28f71091ca0adf7208057668197b 100644 --- a/tests/tck/utils/nbv.py +++ b/tests/tck/utils/nbv.py @@ -346,7 +346,7 @@ def p_edge_spec(p): src = None dst = None props = None - type = 1 + etype = 1 if len(p) == 5: rank = p[2] @@ -362,13 +362,13 @@ def p_edge_spec(p): src = p[2].get_sVal() dst = p[5].get_sVal() if p[3] == '<' and p[4] == '-': - type = -1 + etype = -1 props = p[6] elif len(p) == 9: src = p[2].get_sVal() dst = p[5].get_sVal() if p[3] == '<' and p[4] == '-': - type = -1 + etype = -1 rank = p[6] props = p[7] elif len(p) == 10: @@ -376,14 +376,14 @@ def p_edge_spec(p): src = p[4].get_sVal() dst = p[7].get_sVal() if p[5] == '<' and p[6] == '-': - type = -1 + etype = -1 props = p[8] elif len(p) == 11: name = p[3] src = p[4].get_sVal() dst = p[7].get_sVal() if p[5] == '<' and p[6] == '-': - type = -1 + etype = -1 rank = p[8] props = p[9] @@ -392,7 +392,7 @@ def p_edge_spec(p): e.src = src e.dst = dst e.props = props - e.type = type + e.type = etype p[0] = Value(eVal=e)