Skip to content

Commit

Permalink
add with[1-7].test (#2411)
Browse files Browse the repository at this point in the history
  • Loading branch information
russell-liu committed Dec 18, 2023
1 parent 7b572bf commit f58e56e
Show file tree
Hide file tree
Showing 7 changed files with 535 additions and 0 deletions.
123 changes: 123 additions & 0 deletions test/test_files/tck/with/with1.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
-GROUP TCKWith1
-DATASET CSV tck

--

# Forwarding a node variable 1
-CASE Scenario1
-SKIP
-STATEMENT CREATE NODE TABLE A(ID SERIAL, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE NODE TABLE B(ID SERIAL, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE REL TABLE REL(FROM A TO B);
---- ok
-STATEMENT CREATE (:A)-[:REL]->(:B);
---- ok
-STATEMENT MATCH (a:A)
WITH a
MATCH (a)-->(b)
RETURN *;
---- 1
{_ID: 0:0, _LABEL: A, ID: 0}|{_ID: 1:0, _LABEL: B, ID: 0}

# Forwarding a node variable 2
-CASE Scenario2
-SKIP
-STATEMENT CREATE NODE TABLE A(ID SERIAL, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE NODE TABLE B(ID SERIAL, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE REL TABLE REL(FROM A TO B);
---- ok
-STATEMENT CREATE NODE TABLE X(ID SERIAL, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE (:A)-[:REL]->(:B);
---- ok
-STATEMENT CREATE (:X);
---- ok
-STATEMENT MATCH (a:A)
WITH a
MATCH (x:X), (a)-->(b)
RETURN *;
---- 1
{_ID: 0:0, _LABEL: A, ID: 0}|{_ID: 3:0, _LABEL: X, ID: 0}|{_ID: 1:0, _LABEL: B, ID: 0}

# Forwarding a relationship variable
-CASE Scenario3
-SKIP
-STATEMENT CREATE NODE TABLE A(ID SERIAL, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE NODE TABLE X(ID SERIAL, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE REL TABLE T1(FROM A TO X);
---- ok
-STATEMENT CREATE REL TABLE T2(FROM A TO X);
---- ok
-STATEMENT CREATE REL TABLE T3(FROM A TO A);
---- ok
-STATEMENT CREATE (:A)-[:T1]->(:X),
(:A)-[:T2]->(:X),
(:A)-[:T3]->(:A);
---- ok
-STATEMENT MATCH ()-[r1]->(:X)
WITH r1 AS r2
MATCH ()-[r2]->()
RETURN r2 AS rel;
---- 2
...
...

# Forwarding a path variable
-CASE Scenario4
-SKIP
-STATEMENT CREATE NODE TABLE A(ID SERIAL, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE (:A);
---- ok
-STATEMENT MATCH p = (a)
WITH p
RETURN p;
---- 1
...

# Forwarding null
-CASE Scenario5
-STATEMENT CREATE NODE TABLE Start(ID SERIAL, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE REL TABLE T(FROM Start TO Start);
---- ok
-STATEMENT OPTIONAL MATCH (a:Start)
WITH a
MATCH (a)-->(b)
RETURN *;
---- 0

# Forwarding a node variable possibly null
-CASE Scenario6
-SKIP
-STATEMENT CREATE NODE TABLE Single(ID SERIAL, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE NODE TABLE A(ID SERIAL, num INT64, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE NODE TABLE B(ID SERIAL, num INT64, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE NODE TABLE C(ID SERIAL, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE REL TABLE GROUP REL(FROM Single TO A, FROM Single TO B, FROM A TO C);
---- ok
-STATEMENT CREATE REL TABLE LOOP(FROM B TO B);
---- ok
-STATEMENT CREATE (s:Single), (a:A {num: 42}),
(b:B {num: 46}), (c:C)
CREATE (s)-[:REL_Single_A]->(a),
(s)-[:REL_Single_B]->(b),
(a)-[:REL_A_C]->(c),
(b)-[:LOOP]->(b);
---- ok
-STATEMENT OPTIONAL MATCH (a:A)
WITH a AS a
MATCH (b:B)
RETURN a, b;
---- 1
{_ID: 1:0, _LABEL: A, ID: 0, num: 42}|{_ID: 2:0, _LABEL: B, ID: 0, num: 46}
30 changes: 30 additions & 0 deletions test/test_files/tck/with/with2.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
-GROUP TCKWith2
-DATASET CSV tck

--

# Forwarding a property to express a join
-CASE Scenario1
-SKIP
-STATEMENT CREATE NODE TABLE End(ID SERIAL, num INT64, id INT64, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE NODE TABLE Begin(ID SERIAL, num INT64, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE (a:End {num: 42, id: 0}),
(:End {num: 3}),
(:Begin {num: a.id});
---- ok
-STATEMENT MATCH (a:Begin)
WITH a.num AS property
MATCH (b)
WHERE b.id = property
RETURN b;
---- 1
{_ID: 0:0, _LABEL: End, ID: 0, num: 42, id: 0}

# Forwarding a node variable 2
-CASE Scenario2
-STATEMENT WITH {name: {name2: 'baz'}} AS nestedMap
RETURN nestedMap.name.name2;
---- 1
baz
29 changes: 29 additions & 0 deletions test/test_files/tck/with/with3.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
-GROUP TCKWith3
-DATASET CSV tck

--

# Forwarding multiple node and relationship variables
-CASE Scenario1
-SKIP
-STATEMENT CREATE NODE TABLE A(ID SERIAL, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE NODE TABLE X(ID SERIAL, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE REL TABLE T1(FROM A TO X, id INT64);
---- ok
-STATEMENT CREATE REL TABLE GROUP T2(FROM A TO X, FROM A TO A, id INT64);
---- ok
-STATEMENT CREATE (:A)-[:T1 {id: 0}]->(:X),
(:A)-[:T2_A_X {id: 1}]->(:X),
(:A)-[:T2_A_A {id: 2}]->(:A);
---- ok
-STATEMENT MATCH (a)-[r]->(b:X)
WITH a, r, b
MATCH (a)-[r]->(b)
RETURN r AS rel
ORDER BY rel.id;
-CHECK_ORDER
---- 2
...
...
115 changes: 115 additions & 0 deletions test/test_files/tck/with/with4.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
-GROUP TCKWith4
-DATASET CSV tck

--

# Aliasing relationship variable
-CASE Scenario1
-SKIP
-STATEMENT CREATE NODE TABLE A(ID SERIAL, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE REL TABLE T1(FROM A TO A);
---- ok
-STATEMENT CREATE REL TABLE T2(FROM A TO A);
---- ok
-STATEMENT CREATE (:A)-[:T1]->(:A),
(:A)-[:T2]->(:A);
---- ok
-STATEMENT MATCH ()-[r1]->()
WITH r1 AS r2
RETURN r2 AS rel;
---- 2
(0:0)-{_LABEL: T1, _ID: 1:0}->(0:1)
(0:2)-{_LABEL: T2, _ID: 2:0}->(0:3)

# Aliasing expression to new variable name
-CASE Scenario2
-STATEMENT CREATE NODE TABLE Beginn(ID SERIAL, num INT64, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE NODE TABLE Endd(ID SERIAL, num INT64, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE (:Beginn {num: 42}),
(:Endd {num: 42}),
(:Endd {num: 3});
---- ok
-STATEMENT MATCH (a:Beginn)
WITH a.num AS property
MATCH (b:Endd)
WHERE property = b.num
RETURN b;
---- 1
{_ID: 1:0, _LABEL: Endd, ID: 0, num: 42}

# Aliasing expression to existing variable name
-CASE Scenario3
-STATEMENT CREATE NODE TABLE A(ID SERIAL, num INT64, name STRING, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE (:A {num: 1, name: 'King Kong'}),
(:A {num: 2, name: 'Ann Darrow'});
---- ok
-STATEMENT MATCH (n)
WITH n.name AS n
RETURN n;
---- 2
Ann Darrow
King Kong

# Fail when forwarding multiple aliases with the same name
-CASE Scenario4
-STATEMENT CREATE NODE TABLE A(ID SERIAL, PRIMARY KEY(ID));
---- ok
-STATEMENT WITH 1 AS a, 2 AS a
RETURN a;
---- error
Binder exception: Multiple result column with the same name a are not supported.

# Fail when not aliasing expressions in WITH
-CASE Scenario5
-STATEMENT CREATE NODE TABLE A(ID SERIAL, PRIMARY KEY(ID));
---- ok
-STATEMENT MATCH (a)
WITH a, count(*)
RETURN a;
---- error
Binder exception: Expression in WITH must be aliased (use AS).

# Reusing variable names in WITH
-CASE Scenario6
-SKIP
-STATEMENT CREATE NODE TABLE Person(ID SERIAL, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE NODE TABLE Message(id INT64, PRIMARY KEY(id));
---- ok
-STATEMENT CREATE REL TABLE LIKE(FROM Person TO Message, creationDate INT64);
---- ok
-STATEMENT CREATE REL TABLE POSTED_BY(FROM Message TO Person);
---- ok
-STATEMENT CREATE (a:Person), (b:Person), (m:Message {id: 10})
CREATE (a)-[:LIKE {creationDate: 20160614}]->(m)-[:POSTED_BY]->(b);
---- ok
-STATEMENT MATCH (person:Person)<--(message)<-[like]-(:Person)
WITH like.creationDate AS likeTime, person AS person
ORDER BY likeTime, message.id
WITH head(collect({likeTime: likeTime})) AS latestLike, person AS person
WITH latestLike.likeTime AS likeTime
ORDER BY likeTime
RETURN likeTime;
-CHECK_ORDER
---- 1
20160614

# Multiple aliasing and backreferencing
-CASE Scenario7
-STATEMENT CREATE NODE TABLE A(id INT64, PRIMARY KEY(id));
---- ok
-STATEMENT CREATE (m:A {id: 0})
WITH {first: m.id} AS m
WITH {second: m.first} AS m
RETURN m.second;
---- 1
0
# Test side effects
-STATEMENT MATCH (n)
RETURN n;
---- 1
{_ID: 0:0, _LABEL: A, id: 0}
33 changes: 33 additions & 0 deletions test/test_files/tck/with/with5.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
-GROUP TCKWith5
-DATASET CSV tck

--

# DISTINCT on an expression
-CASE Scenario1
-STATEMENT CREATE NODE TABLE A(ID SERIAL, name STRING, PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE (:A {name: 'A'}),
(:A {name: 'A'}),
(:A {name: 'B'});
---- ok
-STATEMENT MATCH (a)
WITH DISTINCT a.name AS name
RETURN name;
---- 2
A
B

# Handling DISTINCT with lists in maps
-CASE Scenario2
-SKIP
-STATEMENT CREATE NODE TABLE A(ID SERIAL, list STRING[], PRIMARY KEY(ID));
---- ok
-STATEMENT CREATE (:A {list: ['A', 'B']}),
(:A {list: ['A', 'B']});
---- ok
-STATEMENT MATCH (n)
WITH DISTINCT {name: n.list} AS map
RETURN count(*);
---- 1
1
Loading

0 comments on commit f58e56e

Please sign in to comment.