From 38fdaf92621d480fbc54bc935bba15889b78d321 Mon Sep 17 00:00:00 2001 From: 1fanwang <1fannnw@gmail.com> Date: Sat, 29 Aug 2026 00:38:30 -0400 Subject: [PATCH] Fix sublinks in LIMIT and SKIP Signed-off-by: 1fanwang <1fannnw@gmail.com> --- regress/expected/age_reduce.out | 16 ++++++++++++++++ regress/expected/list_comprehension.out | 12 ++++++++++++ regress/sql/age_reduce.sql | 8 ++++++++ regress/sql/list_comprehension.sql | 3 +++ src/backend/parser/cypher_expr.c | 2 ++ 5 files changed, 41 insertions(+) diff --git a/regress/expected/age_reduce.out b/regress/expected/age_reduce.out index 5f3bf29f8..e968cc8d5 100644 --- a/regress/expected/age_reduce.out +++ b/regress/expected/age_reduce.out @@ -833,6 +833,22 @@ $$) AS (result agtype); {"any": 2, "none": 3, "reduce": 1} (1 row) +SELECT * FROM cypher('reduce', $$ + RETURN 1 LIMIT reduce(a = 1, b IN [0] | a + b) +$$) AS (result agtype); + result +-------- + 1 +(1 row) + +SELECT * FROM cypher('reduce', $$ + RETURN 1 SKIP reduce(a = 0, b IN [0] | a + b) +$$) AS (result agtype); + result +-------- + 1 +(1 row) + -- -- Cleanup -- diff --git a/regress/expected/list_comprehension.out b/regress/expected/list_comprehension.out index 63b246479..0051160ea 100644 --- a/regress/expected/list_comprehension.out +++ b/regress/expected/list_comprehension.out @@ -842,6 +842,18 @@ SELECT * FROM cypher('list_comprehension', $$ UNWIND [null, 1] AS x RETURN x, x 1 | false | true (2 rows) +SELECT * FROM cypher('list_comprehension', $$ RETURN 1 LIMIT [x IN [1] | x][0] $$) AS (result agtype); + result +-------- + 1 +(1 row) + +SELECT * FROM cypher('list_comprehension', $$ RETURN 1 SKIP [x IN [0] | x][0] $$) AS (result agtype); + result +-------- + 1 +(1 row) + -- Clean up SELECT * FROM drop_graph('list_comprehension', true); NOTICE: drop cascades to 4 other objects diff --git a/regress/sql/age_reduce.sql b/regress/sql/age_reduce.sql index fbe324cd1..880805753 100644 --- a/regress/sql/age_reduce.sql +++ b/regress/sql/age_reduce.sql @@ -542,6 +542,14 @@ SELECT * FROM cypher('reduce', $$ RETURN {reduce: 1, any: 2, none: 3} $$) AS (result agtype); +SELECT * FROM cypher('reduce', $$ + RETURN 1 LIMIT reduce(a = 1, b IN [0] | a + b) +$$) AS (result agtype); + +SELECT * FROM cypher('reduce', $$ + RETURN 1 SKIP reduce(a = 0, b IN [0] | a + b) +$$) AS (result agtype); + -- -- Cleanup -- diff --git a/regress/sql/list_comprehension.sql b/regress/sql/list_comprehension.sql index e493da6df..b427a3546 100644 --- a/regress/sql/list_comprehension.sql +++ b/regress/sql/list_comprehension.sql @@ -202,5 +202,8 @@ SELECT * FROM cypher('list_comprehension', $$ RETURN [x IN [null, 1] WHERE x IS SELECT * FROM cypher('list_comprehension', $$ RETURN [x IN [1, 2, 3] WHERE x IS NULL] $$) AS (result agtype); SELECT * FROM cypher('list_comprehension', $$ UNWIND [null, 1] AS x RETURN x, x IS NULL, x IS NOT NULL $$) AS (x agtype, a agtype, b agtype); +SELECT * FROM cypher('list_comprehension', $$ RETURN 1 LIMIT [x IN [1] | x][0] $$) AS (result agtype); +SELECT * FROM cypher('list_comprehension', $$ RETURN 1 SKIP [x IN [0] | x][0] $$) AS (result agtype); + -- Clean up SELECT * FROM drop_graph('list_comprehension', true); \ No newline at end of file diff --git a/src/backend/parser/cypher_expr.c b/src/backend/parser/cypher_expr.c index 7e4f44600..dc96b6c8e 100644 --- a/src/backend/parser/cypher_expr.c +++ b/src/backend/parser/cypher_expr.c @@ -2621,6 +2621,8 @@ static Node *transform_SubLink(cypher_parsestate *cpstate, SubLink *sublink) case EXPR_KIND_FROM_SUBSELECT: case EXPR_KIND_WHERE: case EXPR_KIND_INSERT_TARGET: + case EXPR_KIND_LIMIT: + case EXPR_KIND_OFFSET: /* okay */ break; default: