Skip to content
Snippets Groups Projects
Unverified Commit ffe407e9 authored by Yee's avatar Yee Committed by GitHub
Browse files

Migrate variable length match test cases (#478)

* Migrate variable length match test cases

* Relax comparision

* Fix test cases

* Correct test cases
parent 05082c34
No related branches found
No related tags found
No related merge requests found
...@@ -127,7 +127,7 @@ jobs: ...@@ -127,7 +127,7 @@ jobs:
- name: Pytest - name: Pytest
env: env:
NEBULA_TEST_LOGS_DIR: ${{ github.workspace }}/build 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 timeout-minutes: 25
working-directory: tests working-directory: tests
- name: Upload logs - name: Upload logs
......
...@@ -89,18 +89,6 @@ function run_ctest() { ...@@ -89,18 +89,6 @@ function run_ctest() {
--output-on-failure --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() { function test_in_cluster() {
cd $BUILD_DIR/tests cd $BUILD_DIR/tests
export PYTHONPATH=$PROJ_DIR:$PYTHONPATH export PYTHONPATH=$PROJ_DIR:$PYTHONPATH
...@@ -130,9 +118,6 @@ case "$1" in ...@@ -130,9 +118,6 @@ case "$1" in
ctest) ctest)
run_ctest run_ctest
;; ;;
test)
run_test "${@:2}"
;;
k8s) k8s)
prepare prepare
configure_clang configure_clang
......
...@@ -36,7 +36,10 @@ check: ...@@ -36,7 +36,10 @@ check:
@find $(CURR_DIR)/tck/features -type f -iname "*.feature" -print | xargs $(gherkin_fmt) --check @find $(CURR_DIR)/tck/features -type f -iname "*.feature" -print | xargs $(gherkin_fmt) --check
test: fmt 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: clean:
@rm -rf $(CURR_DIR)/nebula-python $(CURR_DIR)/reformat-gherkin $(CURR_DIR)/.pytest $(CURR_DIR)/.pytest_cache @rm -rf $(CURR_DIR)/nebula-python $(CURR_DIR)/reformat-gherkin $(CURR_DIR)/.pytest $(CURR_DIR)/.pytest_cache
...@@ -56,7 +56,7 @@ def pytest_addoption(parser): ...@@ -56,7 +56,7 @@ def pytest_addoption(parser):
parser.addoption("--build_dir", parser.addoption("--build_dir",
dest="build_dir", dest="build_dir",
default="", default=f"{CURR_PATH}/../build",
help="Nebula Graph CMake build directory") help="Nebula Graph CMake build directory")
......
...@@ -260,343 +260,6 @@ class TestVariableLengthRelationshipMatch(NebulaTestSuite): ...@@ -260,343 +260,6 @@ class TestVariableLengthRelationshipMatch(NebulaTestSuite):
} }
self.check_rows_with_header(stmt, expected) 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 @pytest.mark.skip
def test_mix_hops(self): def test_mix_hops(self):
stmt = ''' stmt = '''
...@@ -609,86 +272,17 @@ class TestVariableLengthRelationshipMatch(NebulaTestSuite): ...@@ -609,86 +272,17 @@ class TestVariableLengthRelationshipMatch(NebulaTestSuite):
} }
self.check_rows_with_header(stmt, expected) 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): def test_more_cases(self, like, serve, like_2hop):
# stmt = ''' # stmt = '''
# MATCH (v:player{name: 'Tim Duncan'})-[e:like*0]-() # MATCH (v:player{name: 'Tim Duncan'})-[e:like*0]-()
# RETURN e # 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 = ''' # stmt = '''
# MATCH (v:player{name: 'Tim Duncan'})-[e:like*0..0]-() # MATCH (v:player{name: 'Tim Duncan'})-[e:like*0..0]-()
# RETURN e # 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 = ''' # stmt = '''
# MATCH (v:player{name: 'Tim Duncan'})-[e:like*]-() # MATCH (v:player{name: 'Tim Duncan'})-[e:like*]-()
# RETURN e # RETURN e
...@@ -699,41 +293,6 @@ class TestVariableLengthRelationshipMatch(NebulaTestSuite): ...@@ -699,41 +293,6 @@ class TestVariableLengthRelationshipMatch(NebulaTestSuite):
# RETURN e, e2 # 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=''' stmt='''
MATCH p=(v:player{name: 'Tim Duncan'})-[:like|:serve*1..3]->(v1) MATCH p=(v:player{name: 'Tim Duncan'})-[:like|:serve*1..3]->(v1)
WHERE e[0].likeness>90 WHERE e[0].likeness>90
......
...@@ -48,7 +48,8 @@ def result_should_be_relax_cmp(result, nba_space): ...@@ -48,7 +48,8 @@ def result_should_be_relax_cmp(result, nba_space):
ds = dataset(table(result)) ds = dataset(table(result))
dsw = DataSetWrapper(ds) dsw = DataSetWrapper(ds)
dscmp = DataSetWrapperComparator(strict=False, order=False) 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") @then("no side effects")
......
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" 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: 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{start_year: 2000}]-(v)
RETURN e, v RETURN e, v
""" """
Then the result should be, in any order: Then the result should be, in any order:
| e | v | | e | v |
And no side effects
Scenario: multiple 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:
| e | v |
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") |
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: 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]->(v)
RETURN e, v RETURN e, v
""" """
Then the result should be, in any order, with relax comparision: Then the result should be, in any order, with relax comparision:
| e | v | | e | v |
| [[:like "Tim Duncan"<-"Manu Ginobili"@0], [:like "Manu Ginobili"<-"Tiago Splitter"@0]] | ("Tiago Splitter") | | [[:like "Tim Duncan"->"Tony Parker"], [:like "Tony Parker"->"Tim Duncan"]] | ("Tim Duncan") |
And no side effects | [[: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"] |
...@@ -346,7 +346,7 @@ def p_edge_spec(p): ...@@ -346,7 +346,7 @@ def p_edge_spec(p):
src = None src = None
dst = None dst = None
props = None props = None
type = 1 etype = 1
if len(p) == 5: if len(p) == 5:
rank = p[2] rank = p[2]
...@@ -362,13 +362,13 @@ def p_edge_spec(p): ...@@ -362,13 +362,13 @@ def p_edge_spec(p):
src = p[2].get_sVal() src = p[2].get_sVal()
dst = p[5].get_sVal() dst = p[5].get_sVal()
if p[3] == '<' and p[4] == '-': if p[3] == '<' and p[4] == '-':
type = -1 etype = -1
props = p[6] props = p[6]
elif len(p) == 9: elif len(p) == 9:
src = p[2].get_sVal() src = p[2].get_sVal()
dst = p[5].get_sVal() dst = p[5].get_sVal()
if p[3] == '<' and p[4] == '-': if p[3] == '<' and p[4] == '-':
type = -1 etype = -1
rank = p[6] rank = p[6]
props = p[7] props = p[7]
elif len(p) == 10: elif len(p) == 10:
...@@ -376,14 +376,14 @@ def p_edge_spec(p): ...@@ -376,14 +376,14 @@ def p_edge_spec(p):
src = p[4].get_sVal() src = p[4].get_sVal()
dst = p[7].get_sVal() dst = p[7].get_sVal()
if p[5] == '<' and p[6] == '-': if p[5] == '<' and p[6] == '-':
type = -1 etype = -1
props = p[8] props = p[8]
elif len(p) == 11: elif len(p) == 11:
name = p[3] name = p[3]
src = p[4].get_sVal() src = p[4].get_sVal()
dst = p[7].get_sVal() dst = p[7].get_sVal()
if p[5] == '<' and p[6] == '-': if p[5] == '<' and p[6] == '-':
type = -1 etype = -1
rank = p[8] rank = p[8]
props = p[9] props = p[9]
...@@ -392,7 +392,7 @@ def p_edge_spec(p): ...@@ -392,7 +392,7 @@ def p_edge_spec(p):
e.src = src e.src = src
e.dst = dst e.dst = dst
e.props = props e.props = props
e.type = type e.type = etype
p[0] = Value(eVal=e) p[0] = Value(eVal=e)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment