This is an automated email from the ASF dual-hosted git repository.
jgemignani pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/age.git
The following commit(s) were added to refs/heads/master by this push:
new a4858440 Fix issue #878 - unrecognized node type error (#889)
a4858440 is described below
commit a4858440c2f9768026d6d042cedd6b2f1d07cd7e
Author: Muhammad Taha Naveed <[email protected]>
AuthorDate: Wed May 3 22:40:20 2023 +0500
Fix issue #878 - unrecognized node type error (#889)
- The error was in the way expr was getting transformed in case of
T_NullTest.
- The original expr was also getting tranformed, causing the nodeType
of that expr unrecognizable next time the expr is used.
- Fixed by creating a new NullTest expr.
- Added regression tests as well.
---
regress/expected/cypher_merge.out | 21 +++++++++++++--------
regress/sql/cypher_merge.sql | 5 +++--
src/backend/parser/cypher_expr.c | 11 +++++++----
3 files changed, 23 insertions(+), 14 deletions(-)
diff --git a/regress/expected/cypher_merge.out
b/regress/expected/cypher_merge.out
index 988dff3c..f2bc0696 100644
--- a/regress/expected/cypher_merge.out
+++ b/regress/expected/cypher_merge.out
@@ -32,16 +32,16 @@ NOTICE: graph "cypher_merge" has been created
* test 1: Single MERGE Clause, path doesn't exist
*/
--test query
-SELECT * FROM cypher('cypher_merge', $$MERGE (n {i: "Hello Merge"})$$) AS (a
agtype);
+SELECT * FROM cypher('cypher_merge', $$MERGE (n {i: "Hello Merge", j: (null IS
NULL), k: (null IS NOT NULL)})$$) AS (a agtype);
a
---
(0 rows)
--validate
SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype);
- n
-----------------------------------------------------------------------------------
- {"id": 281474976710657, "label": "", "properties": {"i": "Hello
Merge"}}::vertex
+ n
+---------------------------------------------------------------------------------------------------------
+ {"id": 281474976710657, "label": "", "properties": {"i": "Hello Merge", "j":
true, "k": false}}::vertex
(1 row)
--clean up
@@ -54,7 +54,7 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH
DELETE n $$) AS (a agtyp
* test 2: Single MERGE Clause, path exists
*/
--data setup
-SELECT * FROM cypher('cypher_merge', $$CREATE ({i: "Hello Merge"}) $$) AS (a
agtype);
+SELECT * FROM cypher('cypher_merge', $$CREATE ({i: "Hello Merge", j: (null IS
NULL)}) $$) AS (a agtype);
a
---
(0 rows)
@@ -65,11 +65,16 @@ SELECT * FROM cypher('cypher_merge', $$MERGE ({i: "Hello
Merge"})$$) AS (a agtyp
---
(0 rows)
+SELECT * FROM cypher('cypher_merge', $$MERGE ({j: (null IS NULL)})$$) AS (a
agtype);
+ a
+---
+(0 rows)
+
--validate
SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype);
- n
-----------------------------------------------------------------------------------
- {"id": 281474976710658, "label": "", "properties": {"i": "Hello
Merge"}}::vertex
+ n
+---------------------------------------------------------------------------------------------
+ {"id": 281474976710658, "label": "", "properties": {"i": "Hello Merge", "j":
true}}::vertex
(1 row)
--clean up
diff --git a/regress/sql/cypher_merge.sql b/regress/sql/cypher_merge.sql
index 6cd4207e..df0666ff 100644
--- a/regress/sql/cypher_merge.sql
+++ b/regress/sql/cypher_merge.sql
@@ -30,7 +30,7 @@ SELECT create_graph('cypher_merge');
* test 1: Single MERGE Clause, path doesn't exist
*/
--test query
-SELECT * FROM cypher('cypher_merge', $$MERGE (n {i: "Hello Merge"})$$) AS (a
agtype);
+SELECT * FROM cypher('cypher_merge', $$MERGE (n {i: "Hello Merge", j: (null IS
NULL), k: (null IS NOT NULL)})$$) AS (a agtype);
--validate
SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype);
@@ -42,10 +42,11 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH
DELETE n $$) AS (a agtyp
* test 2: Single MERGE Clause, path exists
*/
--data setup
-SELECT * FROM cypher('cypher_merge', $$CREATE ({i: "Hello Merge"}) $$) AS (a
agtype);
+SELECT * FROM cypher('cypher_merge', $$CREATE ({i: "Hello Merge", j: (null IS
NULL)}) $$) AS (a agtype);
--test_query
SELECT * FROM cypher('cypher_merge', $$MERGE ({i: "Hello Merge"})$$) AS (a
agtype);
+SELECT * FROM cypher('cypher_merge', $$MERGE ({j: (null IS NULL)})$$) AS (a
agtype);
--validate
SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype);
diff --git a/src/backend/parser/cypher_expr.c b/src/backend/parser/cypher_expr.c
index f0bc9c8c..50436d75 100644
--- a/src/backend/parser/cypher_expr.c
+++ b/src/backend/parser/cypher_expr.c
@@ -152,12 +152,15 @@ static Node
*transform_cypher_expr_recurse(cypher_parsestate *cpstate,
case T_NullTest:
{
NullTest *n = (NullTest *)expr;
+ NullTest *tranformed_expr = makeNode(NullTest);
- n->arg = (Expr *)transform_cypher_expr_recurse(cpstate,
- (Node *)n->arg);
- n->argisrow = type_is_rowtype(exprType((Node *)n->arg));
+ tranformed_expr->arg = (Expr *)transform_cypher_expr_recurse(cpstate,
+ (Node *)n->arg);
+ tranformed_expr->nulltesttype = n->nulltesttype;
+ tranformed_expr->argisrow = type_is_rowtype(exprType((Node
*)tranformed_expr->arg));
+ tranformed_expr->location = n->location;
- return expr;
+ return (Node *) tranformed_expr;
}
case T_CaseExpr:
return transform_CaseExpr(cpstate, (CaseExpr *) expr);