Skip to content

Commit 4337463

Browse files
committed
Update
1 parent cc5f378 commit 4337463

File tree

13 files changed

+926
-975
lines changed

13 files changed

+926
-975
lines changed

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ OBJS = src/backend/postgraph.o \
5555
src/backend/utils/adt/gtype_funcs.o \
5656
src/backend/utils/adt/gtype_typecasting.o \
5757
src/backend/utils/adt/gtype_util.o \
58+
src/backend/utils/adt/hashset.o \
5859
src/backend/utils/adt/cypher_funcs.o \
5960
src/backend/utils/adt/edge.o \
6061
src/backend/utils/adt/graphid.o \

postgraph--0.1.0.sql

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6818,10 +6818,71 @@ CREATE AGGREGATE regr_r2(gtype, gtype) (
68186818
parallel = SAFE
68196819
);
68206820

6821+
CREATE TYPE hashset;
68216822

6823+
CREATE FUNCTION hashset_in(cstring)
6824+
RETURNS hashset
6825+
LANGUAGE c
6826+
IMMUTABLE
6827+
RETURNS NULL ON NULL INPUT
6828+
PARALLEL SAFE
6829+
AS 'MODULE_PATHNAME';
6830+
6831+
CREATE FUNCTION hashset_out(hashset)
6832+
RETURNS cstring
6833+
LANGUAGE c
6834+
IMMUTABLE
6835+
RETURNS NULL ON NULL INPUT
6836+
PARALLEL SAFE
6837+
AS 'MODULE_PATHNAME';
6838+
6839+
-- binary I/O functions
6840+
CREATE FUNCTION hashset_send(hashset)
6841+
RETURNS bytea
6842+
LANGUAGE c
6843+
IMMUTABLE
6844+
RETURNS NULL ON NULL INPUT
6845+
PARALLEL SAFE
6846+
AS 'MODULE_PATHNAME';
6847+
6848+
CREATE FUNCTION hashset_recv(internal)
6849+
RETURNS hashset
6850+
LANGUAGE c
6851+
IMMUTABLE
6852+
RETURNS NULL ON NULL INPUT
6853+
PARALLEL SAFE
6854+
AS 'MODULE_PATHNAME';
6855+
6856+
CREATE TYPE hashset (
6857+
INPUT = hashset_in,
6858+
OUTPUT = hashset_out,
6859+
SEND = hashset_send,
6860+
RECEIVE = hashset_recv,
6861+
LIKE = jsonb,
6862+
STORAGE = extended
6863+
);
6864+
6865+
6866+
CREATE FUNCTION hashset_contains(hashset, graphid)
6867+
RETURNS boolean
6868+
LANGUAGE c
6869+
IMMUTABLE
6870+
RETURNS NULL ON NULL INPUT
6871+
PARALLEL SAFE
6872+
AS 'MODULE_PATHNAME';
6873+
6874+
CREATE OPERATOR @> (
6875+
FUNCTION = hashset_contains,
6876+
LEFTARG = hashset,
6877+
RIGHTARG = graphid--,
6878+
--COMMUTATOR = <@,
6879+
--NEGATOR = <> ,
6880+
--RESTRICT = edge_contains_restrict,
6881+
--JOIN = neqjoinsel
6882+
);
68226883

68236884
CREATE FUNCTION variable_edge_search(graph_oid gtype, id graphid, min gtype, max gtype)
6824-
RETURNS TABLE (edges variable_edge, endid graphid)
6885+
RETURNS TABLE (edges variable_edge, endid graphid, hset hashset)
68256886
CALLED ON NULL INPUT
68266887
STABLE
68276888
PARALLEL SAFE

regress/sql/cypher_create.sql

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2023-2024 PostGraphDB
2+
* Copyright (C) 2023-2025 PostGraphDB
33
*
44
* This program is free software: you can redistribute it and/or modify
55
* it under the terms of the GNU Affero General Public License as
@@ -76,9 +76,50 @@ CREATE ();
7676

7777
CREATE () RETURN 1 as a;
7878

79+
CREATE ()-[]->()-[]->();
7980
CREATE ()-[]->()-[]->();
8081
MATCH ()<-[]-()<-[]-() RETURN 1;
8182
MATCH ()-[]->()-[]->() RETURN 1;
83+
84+
85+
EXPLAIN ANALYZE MATCH (q)-[]->(q)-[]->() RETURN 1;
86+
MATCH (q)-[]->(q)-[]->() RETURN 1;
87+
88+
89+
90+
EXPLAIN ANALYZE
91+
MATCH (q)
92+
MATCH (q)-[]->()
93+
RETURN q;
94+
95+
MATCH (q)
96+
MATCH (q)-[]->()
97+
RETURN q;
98+
99+
EXPLAIN ANALYZE
100+
MATCH (q)
101+
MATCH ()-[]->(q)
102+
RETURN q;
103+
104+
MATCH (q)
105+
MATCH ()-[]->(q)
106+
RETURN q;
107+
108+
EXPLAIN ANALYZE
109+
MATCH (q)
110+
MATCH (b)-[]->()
111+
RETURN q;
112+
113+
MATCH (q)
114+
MATCH (b)-[]->()
115+
RETURN q;
116+
117+
EXPLAIN MATCH (q)-[]->()<-[]-(q) RETURN 1;
118+
MATCH (q)-[]->()<-[]-(q) RETURN 1;
119+
120+
EXPLAIN ANALYZE MATCH (q)<-[]-(q) RETURN 1;
121+
MATCH (q)<-[]-(q) RETURN 1;
122+
82123
EXPLAIN MATCH ()-[]->()<-[]-() RETURN 1;
83124
EXPLAIN ANALYZE MATCH ()-[]->()<-[]-() RETURN 1;
84125
MATCH ()-[]->()<-[]-() RETURN 1;
@@ -87,6 +128,10 @@ EXPLAIN MATCH (:test)-[]->()<-[]-(:test) RETURN 1;
87128
EXPLAIN ANALYZE MATCH (:test)-[]->()<-[]-(:test) RETURN 1;
88129
MATCH (:test)-[]->()<-[]-(:test) RETURN 1;
89130

131+
132+
MATCH ()-[*1]->()-[]->() RETURN 1;
133+
EXPLAIN ANALYZE MATCH ()-[*1]->()-[]->() RETURN 1;
134+
90135
SELECT * FROM cypher_create._adj__ag_label_vertex;
91136
MATCH (a) RETURN a;
92137
--SELECT * FROM cypher_create.idx_hash__adj__ag_label_vertex;

src/backend/parser/cypher_analyze.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1340,7 +1340,6 @@ analyze_cypher(List *stmt, ParseState *parent_pstate, const char *query_str, int
13401340
// we don't want functions that go up the pstate parent chain to access the * original SQL query pstate.
13411341
pstate->parentParseState = NULL;
13421342

1343-
// override p_sourcetext with query_str to make parser_errposition() work correctly with errpos_ecb()
13441343
pstate->p_sourcetext = query_str;
13451344

13461345
cpstate->graph_name = graph_name;

0 commit comments

Comments
 (0)