From aef5e1a6e382f1ab0203f067e4efbda566ba447a Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Wed, 10 Aug 2022 12:14:51 -0700 Subject: [PATCH 001/191] Add upgrade script for 1.0.0 to 1.1.0 Added upgrade script for 1.0.0 to 1.1.0 --- age--1.0.0--1.1.0.sql | 247 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 age--1.0.0--1.1.0.sql diff --git a/age--1.0.0--1.1.0.sql b/age--1.0.0--1.1.0.sql new file mode 100644 index 000000000..13b205a47 --- /dev/null +++ b/age--1.0.0--1.1.0.sql @@ -0,0 +1,247 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +-- complain if script is sourced in psql, rather than via CREATE EXTENSION +\echo Use "ALTER EXTENSION age UPDATE TO '1.1.0'" to load this file. \quit + +-- +-- agtype - access operators ( ->, ->> ) +-- + +CREATE FUNCTION ag_catalog.agtype_object_field(agtype, text) +RETURNS agtype +LANGUAGE c +IMMUTABLE +RETURNS NULL ON NULL INPUT +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + +-- get agtype object field +CREATE OPERATOR -> ( + LEFTARG = agtype, + RIGHTARG = text, + FUNCTION = ag_catalog.agtype_object_field +); + +CREATE FUNCTION ag_catalog.agtype_object_field_text(agtype, text) +RETURNS text +LANGUAGE c +IMMUTABLE +RETURNS NULL ON NULL INPUT +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + +-- get agtype object field as text +CREATE OPERATOR ->> ( + LEFTARG = agtype, + RIGHTARG = text, + FUNCTION = ag_catalog.agtype_object_field_text +); + +CREATE FUNCTION ag_catalog.agtype_array_element(agtype, int4) +RETURNS agtype +LANGUAGE c +IMMUTABLE +RETURNS NULL ON NULL INPUT +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + +-- get agtype array element +CREATE OPERATOR -> ( + LEFTARG = agtype, + RIGHTARG = int4, + FUNCTION = ag_catalog.agtype_array_element +); + +CREATE FUNCTION ag_catalog.agtype_array_element_text(agtype, int4) +RETURNS text +LANGUAGE c +IMMUTABLE +RETURNS NULL ON NULL INPUT +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + +-- get agtype array element as text +CREATE OPERATOR ->> ( + LEFTARG = agtype, + RIGHTARG = int4, + FUNCTION = ag_catalog.agtype_array_element_text +); + +-- +-- Contains operators @> <@ +-- +CREATE FUNCTION ag_catalog.agtype_contains(agtype, agtype) +RETURNS boolean +LANGUAGE c +STABLE +RETURNS NULL ON NULL INPUT +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + +CREATE OPERATOR @> ( + LEFTARG = agtype, + RIGHTARG = agtype, + FUNCTION = ag_catalog.agtype_contains, + COMMUTATOR = '<@', + RESTRICT = contsel, + JOIN = contjoinsel +); + +CREATE FUNCTION ag_catalog.agtype_contained_by(agtype, agtype) +RETURNS boolean +LANGUAGE c +STABLE +RETURNS NULL ON NULL INPUT +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + +CREATE OPERATOR <@ ( + LEFTARG = agtype, + RIGHTARG = agtype, + FUNCTION = ag_catalog.agtype_contained_by, + COMMUTATOR = '@>', + RESTRICT = contsel, + JOIN = contjoinsel +); + +-- +-- Key Existence Operators ? ?| ?& +-- +CREATE FUNCTION ag_catalog.agtype_exists(agtype, text) +RETURNS boolean +LANGUAGE c +IMMUTABLE +RETURNS NULL ON NULL INPUT +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + +CREATE OPERATOR ? ( + LEFTARG = agtype, + RIGHTARG = text, + FUNCTION = ag_catalog.agtype_exists, + COMMUTATOR = '?', + RESTRICT = contsel, + JOIN = contjoinsel +); + +CREATE FUNCTION ag_catalog.agtype_exists_any(agtype, text[]) +RETURNS boolean +LANGUAGE c +IMMUTABLE +RETURNS NULL ON NULL INPUT +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + +CREATE OPERATOR ?| ( + LEFTARG = agtype, + RIGHTARG = text[], + FUNCTION = ag_catalog.agtype_exists_any, + RESTRICT = contsel, + JOIN = contjoinsel +); + +CREATE FUNCTION ag_catalog.agtype_exists_all(agtype, text[]) +RETURNS boolean +LANGUAGE c +IMMUTABLE +RETURNS NULL ON NULL INPUT +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + +CREATE OPERATOR ?& ( + LEFTARG = agtype, + RIGHTARG = text[], + FUNCTION = ag_catalog.agtype_exists_all, + RESTRICT = contsel, + JOIN = contjoinsel +); + +-- +-- agtype GIN support +-- +CREATE FUNCTION ag_catalog.gin_compare_agtype(text, text) +RETURNS int +AS 'MODULE_PATHNAME' +LANGUAGE C +IMMUTABLE +STRICT +PARALLEL SAFE; + +CREATE FUNCTION gin_extract_agtype(agtype, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C +IMMUTABLE +STRICT +PARALLEL SAFE; + +CREATE FUNCTION ag_catalog.gin_extract_agtype_query(agtype, internal, int2, + internal, internal) +RETURNS internal +AS 'MODULE_PATHNAME' +LANGUAGE C +IMMUTABLE +STRICT +PARALLEL SAFE; + +CREATE FUNCTION ag_catalog.gin_consistent_agtype(internal, int2, agtype, int4, + internal, internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C +IMMUTABLE +STRICT +PARALLEL SAFE; + +CREATE FUNCTION ag_catalog.gin_triconsistent_agtype(internal, int2, agtype, int4, + internal, internal, internal) +RETURNS bool +AS 'MODULE_PATHNAME' +LANGUAGE C +IMMUTABLE +STRICT +PARALLEL SAFE; + +CREATE OPERATOR CLASS ag_catalog.gin_agtype_ops +DEFAULT FOR TYPE agtype USING gin AS + OPERATOR 7 @>, + OPERATOR 9 ?(agtype, text), + OPERATOR 10 ?|(agtype, text[]), + OPERATOR 11 ?&(agtype, text[]), + FUNCTION 1 ag_catalog.gin_compare_agtype(text,text), + FUNCTION 2 ag_catalog.gin_extract_agtype(agtype, internal), + FUNCTION 3 ag_catalog.gin_extract_agtype_query(agtype, internal, int2, + internal, internal), + FUNCTION 4 ag_catalog.gin_consistent_agtype(internal, int2, agtype, int4, + internal, internal), + FUNCTION 6 ag_catalog.gin_triconsistent_agtype(internal, int2, agtype, int4, + internal, internal, internal), +STORAGE text; + +-- +-- graph id conversion function +-- +ALTER FUNCTION ag_catalog.agtype_access_operator(VARIADIC agtype[]) IMMUTABLE; + +DROP FUNCTION IF EXISTS ag_catalog._property_constraint_check(agtype, agtype); + +-- +-- end +-- From 9b67e00864e72b7e4d2824544c05f58d1ec92777 Mon Sep 17 00:00:00 2001 From: Dehowe Feng Date: Wed, 10 Aug 2022 12:55:46 -0700 Subject: [PATCH 002/191] Upgrade AGE version from 1.0.0-->1.1.0 Upgrade AGE version to 1.1.0 --- Makefile | 2 +- README.md | 2 +- RELEASE | 40 ++++++++++++++++++-------------- age--1.0.0.sql => age--1.1.0.sql | 0 age.control | 2 +- 5 files changed, 26 insertions(+), 20 deletions(-) rename age--1.0.0.sql => age--1.1.0.sql (100%) diff --git a/Makefile b/Makefile index deb3b4d90..b8ed4f023 100644 --- a/Makefile +++ b/Makefile @@ -70,7 +70,7 @@ OBJS = src/backend/age.o \ EXTENSION = age -DATA = age--1.0.0.sql +DATA = age--1.1.0.sql # sorted in dependency order REGRESS = scan \ diff --git a/README.md b/README.md index 7484e4d76..285496329 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ Intelligent -- AGE allows you to perform graph queries that are the basis for ma ## Latest happenings -- Latest Apache AGE release, [Apache AGE 1.0.0 (https://github.com/apache/age/releases/tag/v1.0.0-rc1). +- Latest Apache AGE release, [Apache AGE 1.0.0 (https://github.com/apache/age/releases/tag/v1.1.0-rc1). - The latest Apache AGE documentation is now available at [here](https://age.apache.org/docs/master/index.html). - The roadmap has been updated, please check out the [Apache AGE website](http://age.apache.org/). - Send all your comments and inquiries to the user mailing list, users@age.apache.org. diff --git a/RELEASE b/RELEASE index 3e706219f..a8369970f 100644 --- a/RELEASE +++ b/RELEASE @@ -15,22 +15,28 @@ # specific language governing permissions and limitations # under the License. -Release Notes for Apache AGE release v1.0.0 +Release Notes for Apache AGE release v1.1.0 -Apache AGE 1.0.0 - Release Notes +Apache AGE 1.1.0 - Release Notes + + Support for Agtype containment ops and GIN Indices. + Add CALL [YIELD] grammar rules for the implementation of CALL procedures. + VLE path variable integration performance patch. + Improve WHERE clause performance and support index scans. + Allow global graph contexts to see currentCommandIds. + Cache Agtype and GRAPHID OIDs. + Allow lists and maps to be used in the SET clause. + Fix bug in aggregate function collect(). + Fix Bug in WHERE clause and property constraints. + Fix VLE local cache bug (crash). + Fix bug where integers were not being serialized correctly when stored in GIN indices. + Fix the VLE peek_stack_head routine to return a NULL if the stack is NULL. + Fix MERGE visibility in chained commands, SET specifically. + Fix github issue #212 - Add access operator (`->`, `->>`) to Agtype. + Fix github issue #220 - fix local cached contexts for static procedures. + Fix github issue #224 - fix regression tests to fix issues on mac with trigonometric functions. + Fix github issue #235 - when MERGE and SET were used together. + Fix github issue #240 - negative array bounds. + Fix github issue #240 - negative array bounds - addendum. + Updated README. - Add an upgrading SQL script file from 0.5.0 to 0.6.0 - Add upgrading file age--0.6.0--0.7.0.sql - Refactor function get_agtype_value_object_value - Age load issue (#188) - Refactor agtype_access_operator - Bugfix - Remove INLINE from function declaration - Rebase VLE code - Implement Merge Clause - Bugfix: chained union logic - Allow a path of one vertex - Created functions for load graph from CSV files - Add UNION into EXPLAIN grammar rule - Implement `UNWIND` clause(#173) - Bugfix:(nodejs) Corrects parsing for independence value(#177) - Feat: Implement `OPTIONAL MATCH` (#175) diff --git a/age--1.0.0.sql b/age--1.1.0.sql similarity index 100% rename from age--1.0.0.sql rename to age--1.1.0.sql diff --git a/age.control b/age.control index 4e320d024..b0fb1401d 100644 --- a/age.control +++ b/age.control @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. -default_version = '1.0.0' +default_version = '1.1.0' comment = 'AGE database extension' module_pathname = '$libdir/age' From 0c1f4e7f52a278d159a4ef0284f84544d58a61c3 Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Wed, 10 Aug 2022 15:55:02 -0700 Subject: [PATCH 003/191] Update NOTICE file Updated NOTICE file to remove 'incubating' --- NOTICE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NOTICE b/NOTICE index 282a6fc1a..40ce5ef8a 100644 --- a/NOTICE +++ b/NOTICE @@ -1,4 +1,4 @@ -Apache AGE (incubating) +Apache AGE Copyright 2022 The Apache Software Foundation. This product includes software developed at The Apache Software Foundation (http://www.apache.org/). From 3bd002cf3fc560686d35018382eb979e192cdce6 Mon Sep 17 00:00:00 2001 From: Dehowe Feng Date: Tue, 19 Jul 2022 15:28:33 +0900 Subject: [PATCH 004/191] Implement CALL ...[YIELD] for cypher functions. Queries can now call functions using the form CALL ... YIELD. CALL ... YIELD can be used in some of the following forms: Individual: CALL CALL YIELD CALL YIELD WHERE UPDATE/RETURN Subqueries: READING_CLAUSE CALL YIELD UPDATE/RETURN CALL YIELD READING_CLAUSE UPDATE/RETURN In the future, CALL YIELD support for record returning functions and multiple variable output functions can be added. Known Issue with WHERE clause where a WHERE in a MATCH + CALL subquery does not filter results is known. --- Makefile | 1 + regress/expected/cypher_call.out | 203 ++++++++++++++++++++++ regress/sql/cypher_call.sql | 99 +++++++++++ src/backend/nodes/ag_nodes.c | 2 + src/backend/nodes/cypher_outfuncs.c | 11 ++ src/backend/parser/cypher_clause.c | 257 +++++++++++++++++++++++++++- src/backend/parser/cypher_gram.y | 120 ++++++++++++- src/include/nodes/ag_nodes.h | 2 + src/include/nodes/cypher_nodes.h | 14 ++ src/include/nodes/cypher_outfuncs.h | 4 + 10 files changed, 701 insertions(+), 12 deletions(-) create mode 100644 regress/expected/cypher_call.out create mode 100644 regress/sql/cypher_call.sql diff --git a/Makefile b/Makefile index b8ed4f023..da0553b45 100644 --- a/Makefile +++ b/Makefile @@ -88,6 +88,7 @@ REGRESS = scan \ cypher_with \ cypher_vle \ cypher_union \ + cypher_call \ cypher_merge \ age_load \ index \ diff --git a/regress/expected/cypher_call.out b/regress/expected/cypher_call.out new file mode 100644 index 000000000..e9f9e346e --- /dev/null +++ b/regress/expected/cypher_call.out @@ -0,0 +1,203 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +LOAD 'age'; +SET search_path TO ag_catalog; +SELECT create_graph('cypher_call'); +NOTICE: graph "cypher_call" has been created + create_graph +-------------- + +(1 row) + +SELECT * FROM cypher('cypher_call', $$CREATE ({n: 'a'})$$) as (a agtype); + a +--- +(0 rows) + +SELECT * FROM cypher('cypher_call', $$CREATE ({n: 'b'})$$) as (a agtype); + a +--- +(0 rows) + +CREATE SCHEMA call_stmt_test; +CREATE FUNCTION call_stmt_test.add_agtype(agtype, agtype) RETURNS agtype + AS 'select $1 + $2;' + LANGUAGE SQL + IMMUTABLE + RETURNS NULL ON NULL INPUT; +/* + * CALL (solo) + */ +SELECT * FROM cypher('cypher_call', $$CALL sqrt(64)$$) as (sqrt agtype); + sqrt +------ + 8.0 +(1 row) + +/* CALL RETURN, should fail */ +SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) RETURN sqrt$$) as (sqrt agtype); +ERROR: Procedure call inside a query does not support naming results implicitly +LINE 2: SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) RETURN s... + ^ +HINT: Name explicitly using `YIELD` instead +/* CALL YIELD */ +SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt$$) as (sqrt agtype); + sqrt +------ + 8.0 +(1 row) + +/* incorrect variable should fail */ +SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD squirt$$) as (sqrt agtype); +ERROR: Unknown CALL output +LINE 2: ... FROM cypher('cypher_call', $$CALL sqrt(64) YIELD squirt$$) ... + ^ +/* qualified name */ +SELECT * FROM cypher('cypher_call', $$CALL call_stmt_test.add_agtype(1,2)$$) as (sqrt agtype); + sqrt +------ + 3 +(1 row) + +/* non-existent schema should fail */ +SELECT * FROM cypher('cypher_call', $$CALL ag_catalog.add_agtype(1,2)$$) as (sqrt agtype); +ERROR: function ag_catalog.add_agtype(agtype, agtype) does not exist +LINE 2: ...cypher('cypher_call', $$CALL ag_catalog.add_agtype(1,2)$$) a... + ^ +HINT: No function matches the given name and argument types. You might need to add explicit type casts. +/* CALL YIELD WHERE, should fail */ +SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt > 1$$) as (sqrt agtype); +ERROR: Cannot use standalone CALL with WHERE +LINE 2: ...r('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt > 1$$... + ^ +HINT: Instead use `CALL ... WITH * WHERE ... RETURN *` +/* + * subquery + */ + /* CALL YIELD UPDATE/RETURN */ +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt RETURN sqrt $$) as (sqrt agtype); + sqrt +------ + 8.0 +(1 row) + +/* Unrecognized YIELD, correct RETURN, should fail*/ +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD squirt RETURN sqrt $$) as (sqrt agtype); +ERROR: Unknown CALL output +LINE 2: ...FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD squirt RET... + ^ +/* CALL YIELD WHERE RETURN */ +SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt > 1 RETURN sqrt $$) as (a agtype); + a +----- + 8.0 +(1 row) + +/* MATCH CALL RETURN, should fail */ +SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) RETURN sqrt $$) as (sqrt agtype); +ERROR: Procedure call inside a query does not support naming results implicitly +LINE 2: SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(6... + ^ +HINT: Name explicitly using `YIELD` instead +/* MATCH CALL YIELD RETURN */ +SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt RETURN a, sqrt $$) as (a agtype, sqrt agtype); + a | sqrt +------------------------------------------------------------------------+------ + {"id": 281474976710657, "label": "", "properties": {"n": "a"}}::vertex | 8.0 + {"id": 281474976710658, "label": "", "properties": {"n": "b"}}::vertex | 8.0 +(2 rows) + +/* MATCH CALL YIELD WHERE UPDATE/RETURN */ +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt WHERE sqrt > 1 CREATE ({n:'c'}) $$) as (a agtype); + a +--- +(0 rows) + +SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE a.n = 'c' DELETE (a) $$) as (a agtype); + a +--- +(0 rows) + +SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE a.n = 'c' RETURN a $$) as (a agtype); + a +--- +(0 rows) + +/* CALL MATCH YIELD WHERE UPDATE/RETURN */ +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt WHERE sqrt > 1 CREATE ({n:'c'}) $$) as (a agtype); + a +--- +(0 rows) + +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE a.n = 'c' DELETE (a) $$) as (a agtype); + a +--- +(0 rows) + +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE a.n = 'c' RETURN a $$) as (a agtype); + a +--- +(0 rows) + +/* Multiple Calls: CALL YIELD CALL YIELD... RETURN */ +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL agtype_sum(2,2) YIELD agtype_sum RETURN sqrt, agtype_sum $$) as (sqrt agtype, agtype_sum agtype); + sqrt | agtype_sum +------+------------ + 8.0 | 4 +(1 row) + +/* should fail */ +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL sqrt(81) YIELD sqrt RETURN sqrt, sqrt $$) as (a agtype, b agtype); +ERROR: duplicate variable "sqrt" +LINE 2: ..., $$ CALL sqrt(64) YIELD sqrt CALL sqrt(81) YIELD sqrt RETUR... + ^ +/* Aliasing: CALL YIELD AS CALL YIELD AS ... UPDATE/RETURN */ +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL sqrt(81) YIELD sqrt AS sqrt1 RETURN sqrt, sqrt1 $$) as (sqrt agtype, sqrt1 agtype); + sqrt | sqrt1 +------+------- + 8.0 | 9.0 +(1 row) + +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt AS sqrt1 CALL sqrt(81) YIELD sqrt RETURN sqrt, sqrt1 $$) as (sqrt agtype, sqrt1 agtype); + sqrt | sqrt1 +------+------- + 9.0 | 8.0 +(1 row) + +/* duplicated alias should fail */ +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt AS sqrt1 CALL sqrt(81) YIELD sqrt AS sqrt1 RETURN sqrt1, sqrt1 $$) as (a agtype, b agtype); +ERROR: duplicate variable "sqrt1" +LINE 2: ... sqrt(64) YIELD sqrt AS sqrt1 CALL sqrt(81) YIELD sqrt AS sq... + ^ +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL agtype_sum(2,2) YIELD agtype_sum AS sqrt RETURN sqrt, sqrt $$) as (a agtype, b agtype); +ERROR: duplicate variable "sqrt" +LINE 1: ...LL sqrt(64) YIELD sqrt CALL agtype_sum(2,2) YIELD agtype_sum... + ^ +DROP SCHEMA call_stmt_test CASCADE; +NOTICE: drop cascades to function call_stmt_test.add_agtype(agtype,agtype) +SELECT drop_graph('cypher_call', true); +NOTICE: drop cascades to 2 other objects +DETAIL: drop cascades to table cypher_call._ag_label_vertex +drop cascades to table cypher_call._ag_label_edge +NOTICE: graph "cypher_call" has been dropped + drop_graph +------------ + +(1 row) + diff --git a/regress/sql/cypher_call.sql b/regress/sql/cypher_call.sql new file mode 100644 index 000000000..403049a10 --- /dev/null +++ b/regress/sql/cypher_call.sql @@ -0,0 +1,99 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +LOAD 'age'; +SET search_path TO ag_catalog; + + + +SELECT create_graph('cypher_call'); + +SELECT * FROM cypher('cypher_call', $$CREATE ({n: 'a'})$$) as (a agtype); +SELECT * FROM cypher('cypher_call', $$CREATE ({n: 'b'})$$) as (a agtype); + +CREATE SCHEMA call_stmt_test; + +CREATE FUNCTION call_stmt_test.add_agtype(agtype, agtype) RETURNS agtype + AS 'select $1 + $2;' + LANGUAGE SQL + IMMUTABLE + RETURNS NULL ON NULL INPUT; + +/* + * CALL (solo) + */ + +SELECT * FROM cypher('cypher_call', $$CALL sqrt(64)$$) as (sqrt agtype); +/* CALL RETURN, should fail */ +SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) RETURN sqrt$$) as (sqrt agtype); +/* CALL YIELD */ +SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt$$) as (sqrt agtype); +/* incorrect variable should fail */ +SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD squirt$$) as (sqrt agtype); + +/* qualified name */ +SELECT * FROM cypher('cypher_call', $$CALL call_stmt_test.add_agtype(1,2)$$) as (sqrt agtype); +/* non-existent schema should fail */ +SELECT * FROM cypher('cypher_call', $$CALL ag_catalog.add_agtype(1,2)$$) as (sqrt agtype); + +/* CALL YIELD WHERE, should fail */ +SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt > 1$$) as (sqrt agtype); + +/* + * subquery + */ + + /* CALL YIELD UPDATE/RETURN */ +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt RETURN sqrt $$) as (sqrt agtype); +/* Unrecognized YIELD, correct RETURN, should fail*/ +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD squirt RETURN sqrt $$) as (sqrt agtype); + +/* CALL YIELD WHERE RETURN */ +SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt > 1 RETURN sqrt $$) as (a agtype); + +/* MATCH CALL RETURN, should fail */ +SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) RETURN sqrt $$) as (sqrt agtype); + +/* MATCH CALL YIELD RETURN */ +SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt RETURN a, sqrt $$) as (a agtype, sqrt agtype); + +/* MATCH CALL YIELD WHERE UPDATE/RETURN */ +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt WHERE sqrt > 1 CREATE ({n:'c'}) $$) as (a agtype); +SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE a.n = 'c' DELETE (a) $$) as (a agtype); +SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE a.n = 'c' RETURN a $$) as (a agtype); + +/* CALL MATCH YIELD WHERE UPDATE/RETURN */ +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt WHERE sqrt > 1 CREATE ({n:'c'}) $$) as (a agtype); +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE a.n = 'c' DELETE (a) $$) as (a agtype); +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE a.n = 'c' RETURN a $$) as (a agtype); + +/* Multiple Calls: CALL YIELD CALL YIELD... RETURN */ +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL agtype_sum(2,2) YIELD agtype_sum RETURN sqrt, agtype_sum $$) as (sqrt agtype, agtype_sum agtype); +/* should fail */ +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL sqrt(81) YIELD sqrt RETURN sqrt, sqrt $$) as (a agtype, b agtype); + +/* Aliasing: CALL YIELD AS CALL YIELD AS ... UPDATE/RETURN */ +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL sqrt(81) YIELD sqrt AS sqrt1 RETURN sqrt, sqrt1 $$) as (sqrt agtype, sqrt1 agtype); +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt AS sqrt1 CALL sqrt(81) YIELD sqrt RETURN sqrt, sqrt1 $$) as (sqrt agtype, sqrt1 agtype); +/* duplicated alias should fail */ +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt AS sqrt1 CALL sqrt(81) YIELD sqrt AS sqrt1 RETURN sqrt1, sqrt1 $$) as (a agtype, b agtype); +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL agtype_sum(2,2) YIELD agtype_sum AS sqrt RETURN sqrt, sqrt $$) as (a agtype, b agtype); + +DROP SCHEMA call_stmt_test CASCADE; +SELECT drop_graph('cypher_call', true); \ No newline at end of file diff --git a/src/backend/nodes/ag_nodes.c b/src/backend/nodes/ag_nodes.c index d65bb5038..14715bd2e 100644 --- a/src/backend/nodes/ag_nodes.c +++ b/src/backend/nodes/ag_nodes.c @@ -52,6 +52,7 @@ const char *node_names[] = { "cypher_typecast", "cypher_integer_const", "cypher_sub_pattern", + "cypher_call", "cypher_create_target_nodes", "cypher_create_path", "cypher_target_node", @@ -114,6 +115,7 @@ const ExtensibleNodeMethods node_methods[] = { DEFINE_NODE_METHODS(cypher_typecast), DEFINE_NODE_METHODS(cypher_integer_const), DEFINE_NODE_METHODS(cypher_sub_pattern), + DEFINE_NODE_METHODS(cypher_call), DEFINE_NODE_METHODS_EXTENDED(cypher_create_target_nodes), DEFINE_NODE_METHODS_EXTENDED(cypher_create_path), DEFINE_NODE_METHODS_EXTENDED(cypher_target_node), diff --git a/src/backend/nodes/cypher_outfuncs.c b/src/backend/nodes/cypher_outfuncs.c index 05c0f7f50..0c48fb5ae 100644 --- a/src/backend/nodes/cypher_outfuncs.c +++ b/src/backend/nodes/cypher_outfuncs.c @@ -296,6 +296,17 @@ void out_cypher_sub_pattern(StringInfo str, const ExtensibleNode *node) WRITE_NODE_FIELD(pattern); } +// serialization function for the cypher_call ExtensibleNode. +void out_cypher_call(StringInfo str, const ExtensibleNode *node) +{ + DEFINE_AG_NODE(cypher_call); + + WRITE_NODE_FIELD(funccall); + WRITE_NODE_FIELD(funcexpr); + WRITE_NODE_FIELD(where); + WRITE_NODE_FIELD(yield_items); +} + // serialization function for the cypher_create_target_nodes ExtensibleNode. void out_cypher_create_target_nodes(StringInfo str, const ExtensibleNode *node) { diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 2269d3f3d..2c94fbad9 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -198,6 +198,9 @@ static void handle_prev_clause(cypher_parsestate *cpstate, Query *query, cypher_clause *clause, bool first_rte); static TargetEntry *placeholder_target_entry(cypher_parsestate *cpstate, char *name); + +static List *makeTargetListFromRTE(ParseState *pstate, RangeTblEntry *rte); + static Query *transform_cypher_sub_pattern(cypher_parsestate *cpstate, cypher_clause *clause); // set and remove clause @@ -261,6 +264,12 @@ static void transform_cypher_merge_mark_tuple_position(List *target_list, cypher_create_path *path); +//call...[yield] +static Query *transform_cypher_call_stmt(cypher_parsestate *cpstate, + cypher_clause *clause); +static Query *transform_cypher_call_subquery(cypher_parsestate *cpstate, + cypher_clause *clause); + // transform #define PREV_CYPHER_CLAUSE_ALIAS "_" #define CYPHER_OPT_RIGHT_ALIAS "_R" @@ -372,6 +381,10 @@ Query *transform_cypher_clause(cypher_parsestate *cpstate, { result = transform_cypher_unwind(cpstate, clause); } + else if (is_ag_node(self, cypher_call)) + { + result = transform_cypher_call_stmt(cpstate, clause); + } else { ereport(ERROR, (errmsg_internal("unexpected Node for cypher_clause"))); @@ -1001,6 +1014,211 @@ transform_cypher_union_tree(cypher_parsestate *cpstate, cypher_clause *clause, }//end else (is not leaf) } +/* + * Function that takes a cypher call and returns the yielded result + * This function also catches some cases that should fail that could not + * be picked up by the grammar. transform_cypher_call_subquery handles the + * call transformation itself. + */ +static Query * transform_cypher_call_stmt(cypher_parsestate *cpstate, + cypher_clause *clause) +{ + ParseState *pstate = (ParseState *)cpstate; + cypher_call *self = (cypher_call *)clause->self; + + if (!clause->prev && !clause->next) /* CALL [YIELD] -- the most simple call */ + { + if (self->where) /* Error check for WHERE clause after YIELD without RETURN */ + { + Assert(self->yield_items); + + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("Cannot use standalone CALL with WHERE"), + errhint("Instead use `CALL ... WITH * WHERE ... RETURN *`"), + parser_errposition(pstate, + exprLocation((Node *) self->where)))); + } + + return transform_cypher_call_subquery(cpstate, clause); + } + else /* subqueries */ + { + if (!self->yield_items) + { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("Procedure call inside a query does not support naming results implicitly"), + errhint("Name explicitly using `YIELD` instead"), + parser_errposition(pstate, + exprLocation((Node *) self)))); + } + Assert(self->yield_items); + + if (!clause->next) + { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("Query cannot conclude with CALL"), + errhint("Must be RETURN or an update clause"), + parser_errposition(pstate, + exprLocation((Node *) self)))); + } + + return transform_cypher_clause_with_where(cpstate, + transform_cypher_call_subquery, + clause); + } + + return NULL; +} + +/* + * Helper routine for transform_cypher_call_stmt. This routine transforms the + * call statement and handles the YIELD clause. + */ +static Query *transform_cypher_call_subquery(cypher_parsestate *cpstate, + cypher_clause *clause) +{ + ParseState *pstate = (ParseState *)cpstate; + ParseState *p_child_parse_state = make_parsestate(NULL); + cypher_call *self = (cypher_call *)clause->self; + Query *query; + char *colName; + FuncExpr *node = NULL; + TargetEntry *tle; + + Expr *where_qual = NULL; + + query = makeNode(Query); + query->commandType = CMD_SELECT; + + if (clause->prev) + { + /* we want to retain all previous range table entries */ + handle_prev_clause(cpstate, query, clause->prev, false); + } + + /* transform the funccall and store it in a funcexpr node */ + node = castNode( FuncExpr, transform_cypher_expr(cpstate, (Node *) self->funccall, + EXPR_KIND_FROM_FUNCTION)); + + /* retrieve the column name from funccall */ + colName = strVal(linitial(self->funccall->funcname)); + + /* make a targetentry from the funcexpr node */ + tle = makeTargetEntry((Expr *) node, + (AttrNumber) p_child_parse_state->p_next_resno++, + colName, + false); + + if (self->yield_items) /* if there are yield items, we need to check them */ + { + List *yield_targetList; + ListCell *lc; + + yield_targetList = list_make1(tle); + + foreach (lc, self->yield_items) + { + ResTarget *target = NULL; + ColumnRef *var = NULL; + TargetEntry *yielded_tle = NULL; + + target = (ResTarget *) lfirst(lc); + + if (!IsA(target->val, ColumnRef)) + { + ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("YIELD item must be ColumnRef"), + parser_errposition(&cpstate->pstate, 0))); + } + + var = (ColumnRef *) target->val; + + /* check if the restarget variable exists in the yield_targetList*/ + if (findTarget(yield_targetList, strVal(linitial(var->fields))) != NULL) + { + /* check if an alias exists. if one does, we check if it is + already declared in the targetlist */ + if (target->name) + { + if (findTarget(query->targetList, target->name) != NULL) + { + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_ALIAS), + errmsg("duplicate variable \"%s\"", target->name), + parser_errposition((ParseState *) cpstate, exprLocation((Node *) target)))); + } + else + { + yielded_tle = makeTargetEntry((Expr *) node, + (AttrNumber) pstate->p_next_resno++, + target->name, + false); + query->targetList = lappend(query->targetList, yielded_tle); + } + } + else/* if there is no alias, we check if the variable is already declared */ + { + if (findTarget(query->targetList, strVal(linitial(var->fields))) != NULL) + { + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_ALIAS), + errmsg("duplicate variable \"%s\"", colName), + parser_errposition((ParseState *) cpstate, exprLocation((Node *) target)))); + } + else + { + yielded_tle = makeTargetEntry((Expr *) node, + (AttrNumber) pstate->p_next_resno++, + colName, + false); + query->targetList = lappend(query->targetList, yielded_tle); + } + } + } + else + { + /* if the yield_item is not found and we return an error */ + ereport(ERROR, + (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), + errmsg("Unknown CALL output"), + parser_errposition(pstate, exprLocation((Node *) target)))); + } + } + } + else /* if there are no yield items this must be a solo call */ + { + tle = makeTargetEntry((Expr *) node, + (AttrNumber) pstate->p_next_resno++, + colName, + false); + query->targetList = list_make1(tle); + } + + + + markTargetListOrigins(pstate, query->targetList); + + query->rtable = cpstate->pstate.p_rtable; + query->jointree = makeFromExpr(cpstate->pstate.p_joinlist, (Node *)where_qual); + query->hasAggs = pstate->p_hasAggs; + + assign_query_collations(pstate, query); + + /* this must be done after collations, for reliable comparison of exprs */ + if (pstate->p_hasAggs || + query->groupClause || query->groupingSets || query->havingQual) + { + parse_check_aggregates(pstate, query); + } + + free_parsestate(p_child_parse_state); + + return query; +} + /* * Transform the Delete clause. Creates a _cypher_delete_clause * and passes the necessary information that is needed in the @@ -1927,8 +2145,22 @@ static Query *transform_cypher_clause_with_where(cypher_parsestate *cpstate, { ParseState *pstate = (ParseState *)cpstate; Query *query; - cypher_match *self = (cypher_match *)clause->self; - Node *where = self->where; + Node *self = clause->self; + cypher_match *match_self; + cypher_call *call_self; + Node *where; + + + if (is_ag_node(self, cypher_call)) + { + call_self = (cypher_call*) clause->self; + where = call_self->where; + } + else + { + match_self = (cypher_match*) clause->self; + where = match_self->where; + } if (where) { @@ -1948,8 +2180,27 @@ static Query *transform_cypher_clause_with_where(cypher_parsestate *cpstate, markTargetListOrigins(pstate, query->targetList); query->rtable = pstate->p_rtable; - query->jointree = makeFromExpr(pstate->p_joinlist, NULL); + if (is_ag_node(clause, cypher_call)) + { + cypher_call *call = (cypher_call *)clause->self; + + if (call->where != NULL) + { + Expr *where_qual = NULL; + + where_qual = (Expr *)transform_cypher_expr(cpstate, call->where, + EXPR_KIND_WHERE); + + where_qual = (Expr *)coerce_to_boolean(pstate, (Node *)where_qual, + "WHERE"); + query->jointree = makeFromExpr(pstate->p_joinlist, (Node *)where_qual); + } + } + else + { + query->jointree = makeFromExpr(pstate->p_joinlist, NULL); + } assign_query_collations(pstate, query); } else diff --git a/src/backend/parser/cypher_gram.y b/src/backend/parser/cypher_gram.y index b751cdbe6..84eb957a1 100644 --- a/src/backend/parser/cypher_gram.y +++ b/src/backend/parser/cypher_gram.y @@ -331,17 +331,98 @@ cypher_stmt: call_stmt: CALL expr_func_norm { - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("CALL not supported yet"), - ag_scanner_errposition(@1, scanner))); + cypher_call *n = make_ag_node(cypher_call); + n->funccall = castNode (FuncCall, $2); + + $$ = (Node *)n; + } + | CALL expr '.' expr + { + cypher_call *n = make_ag_node(cypher_call); + + if (IsA($4, FuncCall) && IsA($2, ColumnRef)) + { + FuncCall *fc = (FuncCall*)$4; + ColumnRef *cr = (ColumnRef*)$2; + List *fields = cr->fields; + Value *string = linitial(fields); + + /* + * A function can only be qualified with a single schema. So, we + * check to see that the function isn't already qualified. There + * may be unforeseen cases where we might need to remove this in + * the future. + */ + if (list_length(fc->funcname) == 1) + { + fc->funcname = lcons(string, fc->funcname); + $$ = (Node*)fc; + } + else + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("function already qualified"), + ag_scanner_errposition(@1, scanner))); + + n->funccall = fc; + $$ = (Node *)n; + } + else + { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("CALL statement must be a qualified function"), + ag_scanner_errposition(@1, scanner))); + } } | CALL expr_func_norm YIELD yield_item_list where_opt { - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("CALL... [YIELD] not supported yet"), - ag_scanner_errposition(@1, scanner))); + cypher_call *n = make_ag_node(cypher_call); + n->funccall = castNode (FuncCall, $2); + n->yield_items = $4; + n->where = $5; + $$ = (Node *)n; + } + | CALL expr '.' expr YIELD yield_item_list where_opt + { + cypher_call *n = make_ag_node(cypher_call); + + if (IsA($4, FuncCall) && IsA($2, ColumnRef)) + { + FuncCall *fc = (FuncCall*)$4; + ColumnRef *cr = (ColumnRef*)$2; + List *fields = cr->fields; + Value *string = linitial(fields); + + /* + * A function can only be qualified with a single schema. So, we + * check to see that the function isn't already qualified. There + * may be unforeseen cases where we might need to remove this in + * the future. + */ + if (list_length(fc->funcname) == 1) + { + fc->funcname = lcons(string, fc->funcname); + $$ = (Node*)fc; + } + else + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("function already qualified"), + ag_scanner_errposition(@1, scanner))); + + n->funccall = fc; + n->yield_items = $6; + n->where = $7; + $$ = (Node *)n; + } + else + { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("CALL statement must be a qualified function"), + ag_scanner_errposition(@1, scanner))); + } } ; @@ -359,14 +440,31 @@ yield_item_list: yield_item: expr AS var_name { + ResTarget *n; + n = makeNode(ResTarget); + n->name = $3; + n->indirection = NIL; + n->val = $1; + n->location = @1; + + $$ = (Node *)n; } | expr { + ResTarget *n; + n = makeNode(ResTarget); + n->name = NULL; + n->indirection = NIL; + n->val = $1; + n->location = @1; + + $$ = (Node *)n; } ; + semicolon_opt: /* empty */ | ';' @@ -419,6 +517,10 @@ query_part_last: { $$ = lappend(list_concat($1, $2), $3); } + | reading_clause_list call_stmt + { + $$ = list_concat($1, list_make1($2)); + } ; reading_clause_list: @@ -435,6 +537,7 @@ reading_clause_list: reading_clause: match | unwind + | call_stmt ; updating_clause_list_0: @@ -462,7 +565,6 @@ updating_clause: | remove | delete | merge - | call_stmt ; cypher_varlen_opt: diff --git a/src/include/nodes/ag_nodes.h b/src/include/nodes/ag_nodes.h index 15ff409f1..e51a8de43 100644 --- a/src/include/nodes/ag_nodes.h +++ b/src/include/nodes/ag_nodes.h @@ -59,6 +59,8 @@ typedef enum ag_node_tag cypher_integer_const_t, // sub patterns cypher_sub_pattern_t, + // procedure calls + cypher_call_t, // create data structures cypher_create_target_nodes_t, cypher_create_path_t, diff --git a/src/include/nodes/cypher_nodes.h b/src/include/nodes/cypher_nodes.h index fe9f6bd70..792edde35 100644 --- a/src/include/nodes/cypher_nodes.h +++ b/src/include/nodes/cypher_nodes.h @@ -236,6 +236,20 @@ typedef struct cypher_create_path char *var_name; } cypher_create_path; +/* + * procedure call + */ + +typedef struct cypher_call +{ + ExtensibleNode extensible; + FuncCall *funccall; /*from the parser */ + FuncExpr *funcexpr; /*transformed */ + + Node *where; + List *yield_items; // optional yield subclause +} cypher_call; + #define CYPHER_CLAUSE_FLAG_NONE 0x0000 #define CYPHER_CLAUSE_FLAG_TERMINAL 0x0001 #define CYPHER_CLAUSE_FLAG_PREVIOUS_CLAUSE 0x0002 diff --git a/src/include/nodes/cypher_outfuncs.h b/src/include/nodes/cypher_outfuncs.h index 20ef73fa9..836765bc9 100644 --- a/src/include/nodes/cypher_outfuncs.h +++ b/src/include/nodes/cypher_outfuncs.h @@ -65,6 +65,10 @@ void out_cypher_integer_const(StringInfo str, const ExtensibleNode *node); // sub pattern void out_cypher_sub_pattern(StringInfo str, const ExtensibleNode *node); +// procedure call + +void out_cypher_call(StringInfo str, const ExtensibleNode *node); + // create private data structures void out_cypher_create_target_nodes(StringInfo str, const ExtensibleNode *node); void out_cypher_create_path(StringInfo str, const ExtensibleNode *node); From dbc4584786655f848cf698a04713f47bb73f8ca9 Mon Sep 17 00:00:00 2001 From: Shoaib Date: Mon, 22 Aug 2022 17:38:01 +0200 Subject: [PATCH 005/191] Graph names with empty string '' are no more allowed. (#251) --- regress/expected/catalog.out | 6 ++++-- regress/sql/catalog.sql | 2 +- src/backend/commands/graph_commands.c | 11 +++++++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/regress/expected/catalog.out b/regress/expected/catalog.out index 8a83f45a6..4fca3e6ab 100644 --- a/regress/expected/catalog.out +++ b/regress/expected/catalog.out @@ -97,9 +97,11 @@ SELECT count(*) FROM pg_namespace WHERE nspname = 'g'; -- invalid cases SELECT create_graph(NULL); -ERROR: graph name must not be NULL +ERROR: graph name can not be NULL SELECT drop_graph(NULL); -ERROR: graph name must not be NULL +ERROR: graph name can not be NULL +SELECT create_graph(''); +ERROR: graph name can not be empty -- -- alter_graph() RENAME function tests -- diff --git a/regress/sql/catalog.sql b/regress/sql/catalog.sql index 6bc19814c..59a720f06 100644 --- a/regress/sql/catalog.sql +++ b/regress/sql/catalog.sql @@ -52,7 +52,7 @@ SELECT count(*) FROM pg_namespace WHERE nspname = 'g'; -- invalid cases SELECT create_graph(NULL); SELECT drop_graph(NULL); - +SELECT create_graph(''); -- -- alter_graph() RENAME function tests -- diff --git a/src/backend/commands/graph_commands.c b/src/backend/commands/graph_commands.c index c298324c8..bb21f8a9c 100644 --- a/src/backend/commands/graph_commands.c +++ b/src/backend/commands/graph_commands.c @@ -67,11 +67,18 @@ Datum create_graph(PG_FUNCTION_ARGS) if (PG_ARGISNULL(0)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("graph name must not be NULL"))); + errmsg("graph name can not be NULL"))); } graph_name = PG_GETARG_NAME(0); graph_name_str = NameStr(*graph_name); + + if (strlen(graph_name_str) == 0) + { + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("graph name can not be empty"))); + } if (graph_exists(graph_name_str)) { ereport(ERROR, @@ -158,7 +165,7 @@ Datum drop_graph(PG_FUNCTION_ARGS) if (PG_ARGISNULL(0)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("graph name must not be NULL"))); + errmsg("graph name can not be NULL"))); } graph_name = PG_GETARG_NAME(0); cascade = PG_GETARG_BOOL(1); From e426e947a250d0dfa9e4ca75fed29cc4e290caae Mon Sep 17 00:00:00 2001 From: Andrew Ko <76510292+aked21@users.noreply.github.com> Date: Tue, 6 Sep 2022 13:21:09 +0900 Subject: [PATCH 006/191] Update README.md Updating the latest release --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 285496329..6df5917d5 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ Intelligent -- AGE allows you to perform graph queries that are the basis for ma ## Latest happenings -- Latest Apache AGE release, [Apache AGE 1.0.0 (https://github.com/apache/age/releases/tag/v1.1.0-rc1). +- Latest Apache AGE release, [Apache AGE 1.1.0 (https://github.com/apache/age/releases/tag/v1.1.0-rc0). - The latest Apache AGE documentation is now available at [here](https://age.apache.org/docs/master/index.html). - The roadmap has been updated, please check out the [Apache AGE website](http://age.apache.org/). - Send all your comments and inquiries to the user mailing list, users@age.apache.org. From 4547d2d9b5178e5835e96738e2a2b17ec9e1fc76 Mon Sep 17 00:00:00 2001 From: Tomasz Durda Date: Sun, 4 Sep 2022 13:10:19 +0200 Subject: [PATCH 007/191] Updated drivers, minor docs fixes --- README.md | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 6df5917d5..a01a1c504 100644 --- a/README.md +++ b/README.md @@ -27,11 +27,11 @@ Intelligent -- AGE allows you to perform graph queries that are the basis for ma ## Latest happenings -- Latest Apache AGE release, [Apache AGE 1.1.0 (https://github.com/apache/age/releases/tag/v1.1.0-rc0). +- Latest Apache AGE release, [Apache AGE 1.1.0](https://github.com/apache/age/releases/tag/v1.1.0-rc1). - The latest Apache AGE documentation is now available at [here](https://age.apache.org/docs/master/index.html). -- The roadmap has been updated, please check out the [Apache AGE website](http://age.apache.org/). +- The roadmap - [Apache AGE website](http://age.apache.org/). - Send all your comments and inquiries to the user mailing list, users@age.apache.org. -- To focus more on implementing the openCypher specification, the support for PostgreSQL 12 will be added in the Q1 2022. +- To focus more on implementing the openCypher specification, the support for PostgreSQL 12 will be added in the Q4 2022. ## Installation @@ -40,7 +40,7 @@ Intelligent -- AGE allows you to perform graph queries that are the basis for ma ## Graph visualization tool for AGE -Apache AGE Viewer is a subproject of the Apache AGE project: https://github.com/apache/age-viewer +Apache AGE Viewer is a subproject of the Apache AGE project: - This is a visualization tool. After AGE Extension Installation @@ -54,7 +54,18 @@ Here is the link to the latest [Apache AGE documentation](https://age.apache.org You can learn about how to install Apache AGE, its features and built-in functions and how to use various Cypher queries. ## Language Specific Drivers -[Apache AGE Python Driver](https://github.com/rhizome-ai/apache-age-python) + +### Built-in + +- [Go driver](./drivers/golang) +- [Java driver](./drivers/jdbc) +- [NodeJs driver](./drivers/nodejs) +- [Python driver](./drivers/python) + +### Community + +- [Apache AGE Python Driver](https://github.com/rhizome-ai/apache-age-python) +- [Apache AGE Rust Driver](https://github.com/Dzordzu/rust-apache-age.git) ## Contribution From 6283dd4f6f0429e9541ee0a115e775c3dd5caead Mon Sep 17 00:00:00 2001 From: gorgonzola <76480303+gorgonzola-oh@users.noreply.github.com> Date: Wed, 7 Sep 2022 16:37:31 +0900 Subject: [PATCH 008/191] Update README.md fixes - documentation link - age viewer description --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a01a1c504..d21bbe1ff 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,10 @@ Intelligent -- AGE allows you to perform graph queries that are the basis for ma ## Graph visualization tool for AGE -Apache AGE Viewer is a subproject of the Apache AGE project: +Apache AGE Viewer is a user interface for Apache AGE to provide visualization and exploration of data. +It provides a simple web visualization tool for users to enter complex graph queries and explore the results in graph and table forms. +Apache AGE Viewer is enhanced to proceed with large graph data and discover the insights through various graph algorithms. +Apache AGE Viewer will become a graph data administration and development platform for Apache AGE to support multiple relational databases: . - This is a visualization tool. After AGE Extension Installation @@ -50,7 +53,7 @@ Under Connect to Database , select database type as "Apache AGE" ## Documentation -Here is the link to the latest [Apache AGE documentation](https://age.apache.org/docs/master/index.html). +Here is the link to the latest [Apache AGE documentation](https://age.apache.org/age-manual/master/index.html). You can learn about how to install Apache AGE, its features and built-in functions and how to use various Cypher queries. ## Language Specific Drivers From 9407ece8c6c8c3d10936893b9f23ce0cd03de590 Mon Sep 17 00:00:00 2001 From: Pieterjan De Potter Date: Thu, 8 Sep 2022 12:07:05 +0200 Subject: [PATCH 009/191] Update documentation link in README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d21bbe1ff..e84ceb706 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![forks badge](https://img.shields.io/github/forks/apache/age)](https://github.com/apache/age/network/members) [![stars badge](https://img.shields.io/github/stars/apache/age)](https://github.com/apache/age/stargazers) - + Apache AGE is a PostgreSQL Extension that provides graph database functionality. AGE is an acronym for A Graph Extension, and is inspired by Bitnine's fork of PostgreSQL 10, AgensGraph, which is a multi-model database. The goal of the project is to create single storage that can handle both relational and graph model data so that users can use standard ANSI SQL along with openCypher, the Graph query language. @@ -28,7 +28,7 @@ Intelligent -- AGE allows you to perform graph queries that are the basis for ma ## Latest happenings - Latest Apache AGE release, [Apache AGE 1.1.0](https://github.com/apache/age/releases/tag/v1.1.0-rc1). -- The latest Apache AGE documentation is now available at [here](https://age.apache.org/docs/master/index.html). +- The latest Apache AGE documentation is now available at [here](https://age.apache.org/age-manual/master/index.html). - The roadmap - [Apache AGE website](http://age.apache.org/). - Send all your comments and inquiries to the user mailing list, users@age.apache.org. - To focus more on implementing the openCypher specification, the support for PostgreSQL 12 will be added in the Q4 2022. From bae4fac865e496b028f7dcaf5e1bbf1b7553e6b6 Mon Sep 17 00:00:00 2001 From: Jasper Blues Date: Fri, 16 Sep 2022 12:02:58 +1000 Subject: [PATCH 010/191] Update README.md Add another important use-case. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e84ceb706..f5371e823 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ Powerful -- AGE adds graph database support to the already popular PostgreSQL da Flexible -- AGE allows you to perform openCypher queries, which make complex queries much easier to write. Intelligent -- AGE allows you to perform graph queries that are the basis for many next level web services such as fraud & intrusion detection, master data management, product recommendations, identity and relationship management, experience personalization, knowledge management and more. +Also, while the technology can be integrated with against many data layers, a graph database is also the perfect companion for a [GraphQL](https://graphql.org/) API! Since the information is already in a native format, it simplifies many factors and even allows many of the default operations to be generated automatically. GraphQL is rapidly superceeding REST as the standard for cloud applications. + ## Overview - **Apache AGE is currently being developed for the PostgreSQL 11 release** and will support PostgreSQL 12, 13 and all the future releases of PostgreSQL. From aad430ce4103a18632afc7ef7d6916961271f359 Mon Sep 17 00:00:00 2001 From: Jasper Blues Date: Sat, 17 Sep 2022 12:20:05 +1000 Subject: [PATCH 011/191] Update README.md fix typo. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f5371e823..40e3a47e2 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Powerful -- AGE adds graph database support to the already popular PostgreSQL da Flexible -- AGE allows you to perform openCypher queries, which make complex queries much easier to write. Intelligent -- AGE allows you to perform graph queries that are the basis for many next level web services such as fraud & intrusion detection, master data management, product recommendations, identity and relationship management, experience personalization, knowledge management and more. -Also, while the technology can be integrated with against many data layers, a graph database is also the perfect companion for a [GraphQL](https://graphql.org/) API! Since the information is already in a native format, it simplifies many factors and even allows many of the default operations to be generated automatically. GraphQL is rapidly superceeding REST as the standard for cloud applications. +Also, while the technology can be integrated against many data layers, a graph database is also the perfect companion for a [GraphQL](https://graphql.org/) API! Since the information is already in a native format, it simplifies many factors and even allows many of the default operations to be generated automatically. GraphQL is rapidly superceeding REST as the standard for cloud applications. ## Overview From c7cc0bf227fa01263cdb7421a6ae71e23638bc92 Mon Sep 17 00:00:00 2001 From: Jasper Blues Date: Sat, 17 Sep 2022 12:21:05 +1000 Subject: [PATCH 012/191] Update README.md Improve wording. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 40e3a47e2..ffe110de7 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Powerful -- AGE adds graph database support to the already popular PostgreSQL da Flexible -- AGE allows you to perform openCypher queries, which make complex queries much easier to write. Intelligent -- AGE allows you to perform graph queries that are the basis for many next level web services such as fraud & intrusion detection, master data management, product recommendations, identity and relationship management, experience personalization, knowledge management and more. -Also, while the technology can be integrated against many data layers, a graph database is also the perfect companion for a [GraphQL](https://graphql.org/) API! Since the information is already in a native format, it simplifies many factors and even allows many of the default operations to be generated automatically. GraphQL is rapidly superceeding REST as the standard for cloud applications. +Also, while the technology can be integrated against many data layers, a graph database is also the perfect companion for a [GraphQL](https://graphql.org/) API! Since the information is already in a native format, it simplifies many factors and even allows many operations to be generated automatically. GraphQL is rapidly superceeding REST as the standard for cloud applications. ## Overview From 015434ea586ae298a9bebe24dadd3212efc86451 Mon Sep 17 00:00:00 2001 From: Dehowe Feng Date: Thu, 29 Sep 2022 14:34:37 -0700 Subject: [PATCH 013/191] Fix Bug with CALL... YIELD clause ignores WHERE Typo fix where an if statement check was causing a logic error that caused the where statement to be ignored. Regression tests added to address this and thoroughly check WHERE clauses as well. Co-authored by: John Gemignani --- regress/expected/cypher_call.out | 51 ++++++++++++++++++++++++++++++ regress/sql/cypher_call.sql | 10 ++++++ src/backend/parser/cypher_clause.c | 2 +- 3 files changed, 62 insertions(+), 1 deletion(-) diff --git a/regress/expected/cypher_call.out b/regress/expected/cypher_call.out index e9f9e346e..a7862b5d0 100644 --- a/regress/expected/cypher_call.out +++ b/regress/expected/cypher_call.out @@ -109,6 +109,22 @@ SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt > 1 RE 8.0 (1 row) +SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt = 1 RETURN sqrt $$) as (a agtype); + a +--- +(0 rows) + +SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt = 8 RETURN sqrt $$) as (a agtype); + a +----- + 8.0 +(1 row) + +/* should fail */ +SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE a = 8 RETURN sqrt $$) as (a agtype); +ERROR: could not find rte for a +LINE 2: ...r('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE a = 8 RETU... + ^ /* MATCH CALL RETURN, should fail */ SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) RETURN sqrt $$) as (sqrt agtype); ERROR: Procedure call inside a query does not support naming results implicitly @@ -139,6 +155,22 @@ SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE --- (0 rows) +SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE sqrt = 1 RETURN a, sqrt $$) as (a agtype, sqrt agtype); + a | sqrt +---+------ +(0 rows) + +SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE sqrt = 8 RETURN a, sqrt $$) as (a agtype, sqrt agtype); + a | sqrt +------------------------------------------------------------------------+------ + {"id": 281474976710657, "label": "", "properties": {"n": "a"}}::vertex | 8.0 + {"id": 281474976710658, "label": "", "properties": {"n": "b"}}::vertex | 8.0 +(2 rows) + +SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE b = 8 RETURN a, sqrt $$) as (a agtype, sqrt agtype); +ERROR: could not find rte for b +LINE 1: ...all', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE b = 8 RETU... + ^ /* CALL MATCH YIELD WHERE UPDATE/RETURN */ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt WHERE sqrt > 1 CREATE ({n:'c'}) $$) as (a agtype); a @@ -155,6 +187,25 @@ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE --- (0 rows) +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE sqrt = 1 RETURN a, sqrt $$) as (a agtype, sqrt agtype); + a | sqrt +---+------ +(0 rows) + +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE sqrt = 8 RETURN a, sqrt $$) as (a agtype, sqrt agtype); + a | sqrt +------------------------------------------------------------------------+------ + {"id": 281474976710657, "label": "", "properties": {"n": "a"}}::vertex | 8.0 + {"id": 281474976710658, "label": "", "properties": {"n": "b"}}::vertex | 8.0 +(2 rows) + +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt WHERE sqrt = 8 MATCH (a) RETURN a, sqrt $$) as (a agtype, sqrt agtype); + a | sqrt +------------------------------------------------------------------------+------ + {"id": 281474976710657, "label": "", "properties": {"n": "a"}}::vertex | 8.0 + {"id": 281474976710658, "label": "", "properties": {"n": "b"}}::vertex | 8.0 +(2 rows) + /* Multiple Calls: CALL YIELD CALL YIELD... RETURN */ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL agtype_sum(2,2) YIELD agtype_sum RETURN sqrt, agtype_sum $$) as (sqrt agtype, agtype_sum agtype); sqrt | agtype_sum diff --git a/regress/sql/cypher_call.sql b/regress/sql/cypher_call.sql index 403049a10..9f600a96f 100644 --- a/regress/sql/cypher_call.sql +++ b/regress/sql/cypher_call.sql @@ -66,6 +66,10 @@ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD squirt RETURN sqrt $$ /* CALL YIELD WHERE RETURN */ SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt > 1 RETURN sqrt $$) as (a agtype); +SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt = 1 RETURN sqrt $$) as (a agtype); +SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE sqrt = 8 RETURN sqrt $$) as (a agtype); +/* should fail */ +SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD sqrt WHERE a = 8 RETURN sqrt $$) as (a agtype); /* MATCH CALL RETURN, should fail */ SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) RETURN sqrt $$) as (sqrt agtype); @@ -77,11 +81,17 @@ SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt RETURN SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt WHERE sqrt > 1 CREATE ({n:'c'}) $$) as (a agtype); SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE a.n = 'c' DELETE (a) $$) as (a agtype); SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE a.n = 'c' RETURN a $$) as (a agtype); +SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE sqrt = 1 RETURN a, sqrt $$) as (a agtype, sqrt agtype); +SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE sqrt = 8 RETURN a, sqrt $$) as (a agtype, sqrt agtype); +SELECT * FROM cypher('cypher_call', $$ MATCH (a) CALL sqrt(64) YIELD sqrt WHERE b = 8 RETURN a, sqrt $$) as (a agtype, sqrt agtype); /* CALL MATCH YIELD WHERE UPDATE/RETURN */ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt WHERE sqrt > 1 CREATE ({n:'c'}) $$) as (a agtype); SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE a.n = 'c' DELETE (a) $$) as (a agtype); SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE a.n = 'c' RETURN a $$) as (a agtype); +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE sqrt = 1 RETURN a, sqrt $$) as (a agtype, sqrt agtype); +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt MATCH (a) WHERE sqrt = 8 RETURN a, sqrt $$) as (a agtype, sqrt agtype); +SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt WHERE sqrt = 8 MATCH (a) RETURN a, sqrt $$) as (a agtype, sqrt agtype); /* Multiple Calls: CALL YIELD CALL YIELD... RETURN */ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL agtype_sum(2,2) YIELD agtype_sum RETURN sqrt, agtype_sum $$) as (sqrt agtype, agtype_sum agtype); diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 2c94fbad9..70afb5fa4 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -2181,7 +2181,7 @@ static Query *transform_cypher_clause_with_where(cypher_parsestate *cpstate, query->rtable = pstate->p_rtable; - if (is_ag_node(clause, cypher_call)) + if (is_ag_node(clause->self, cypher_call)) { cypher_call *call = (cypher_call *)clause->self; From c9c07f71123d2f11d6209188633dff1ad341d23a Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Tue, 4 Oct 2022 12:28:35 -0700 Subject: [PATCH 014/191] Fix EXPLAIN to allow for nested cypher commands Fixed the EXPLAIN command to allow for nested cypher commands within more complex SQL queries. --- src/backend/parser/cypher_analyze.c | 117 ++++++++++++++++++---------- 1 file changed, 77 insertions(+), 40 deletions(-) diff --git a/src/backend/parser/cypher_analyze.c b/src/backend/parser/cypher_analyze.c index 15222ffa2..1a8ea23e5 100644 --- a/src/backend/parser/cypher_analyze.c +++ b/src/backend/parser/cypher_analyze.c @@ -44,7 +44,17 @@ #include "utils/ag_func.h" #include "utils/agtype.h" +/* + * extra_node is a global variable to this source to store, at the moment, the + * explain stmt node passed up by the parser. The return value from the parser + * contains an 'extra' value, hence the name. + */ static Node *extra_node = NULL; +/* + * Takes a query node and builds an explain stmt query node. It then replaces + * the passed query node with the new explain stmt query node. + */ +static void build_explain_query(Query *query, Node *explain_node); static post_parse_analyze_hook_type prev_post_parse_analyze_hook; @@ -79,9 +89,34 @@ void post_parse_analyze_fini(void) static void post_parse_analyze(ParseState *pstate, Query *query) { if (prev_post_parse_analyze_hook) + { prev_post_parse_analyze_hook(pstate, query); + } + + /* + * extra_node is set in the parsing stage to keep track of EXPLAIN. + * So it needs to be set to NULL prior to any cypher parsing. + */ + extra_node = NULL; convert_cypher_walker((Node *)query, pstate); + + /* + * If there is an extra_node returned, we need to check to see if + * it is an EXPLAIN. + */ + if (extra_node != NULL) + { + /* process the EXPLAIN node */ + if (nodeTag(extra_node) == T_ExplainStmt) + { + build_explain_query(query, extra_node); + } + + /* reset extra_node */ + pfree(extra_node); + extra_node = NULL; + } } // find cypher() calls in FROM clauses and convert them to SELECT subqueries @@ -178,57 +213,55 @@ static bool convert_cypher_walker(Node *node, ParseState *pstate) flags = QTW_EXAMINE_RTES | QTW_IGNORE_RT_SUBQUERIES | QTW_IGNORE_JOINALIASES; - /* clear the global variable extra_node */ - extra_node = NULL; - /* recurse on query */ result = query_tree_walker(query, convert_cypher_walker, pstate, flags); - /* check for EXPLAIN */ - if (extra_node != NULL && nodeTag(extra_node) == T_ExplainStmt) - { - ExplainStmt *estmt = NULL; - Query *query_copy = NULL; - Query *query_node = NULL; + return result; + } - /* - * Create a copy of the query node. This is purposely a shallow copy - * because we are only moving the contents to another pointer. - */ - query_copy = (Query *) palloc(sizeof(Query)); - memcpy(query_copy, query, sizeof(Query)); + return expression_tree_walker(node, convert_cypher_walker, pstate); +} - /* build our Explain node and store the query node copy in it */ - estmt = makeNode(ExplainStmt); - estmt->query = (Node *)query_copy; - estmt->options = ((ExplainStmt *)extra_node)->options; +/* + * Takes a query node and builds an explain stmt query node. It then replaces + * the passed query node with the new explain stmt query node. + */ +static void build_explain_query(Query *query, Node *explain_node) +{ + ExplainStmt *estmt = NULL; + Query *query_copy = NULL; + Query *query_node = NULL; - /* build our replacement query node */ - query_node = makeNode(Query); - query_node->commandType = CMD_UTILITY; - query_node->utilityStmt = (Node *)estmt; - query_node->canSetTag = true; + /* + * Create a copy of the query node. This is purposely a shallow copy + * because we are only moving the contents to another pointer. + */ + query_copy = (Query *) palloc(sizeof(Query)); + memcpy(query_copy, query, sizeof(Query)); - /* now replace the top query node with our replacement query node */ - memcpy(query, query_node, sizeof(Query)); + /* build our Explain node and store the query node copy in it */ + estmt = makeNode(ExplainStmt); + estmt->query = (Node *)query_copy; + estmt->options = ((ExplainStmt *)explain_node)->options; - /* - * We need to free and clear the global variable when done. But, not - * the ExplainStmt options. Those will get freed by PG when the - * query is deleted. - */ - ((ExplainStmt *)extra_node)->options = NULL; - pfree(extra_node); - extra_node = NULL; + /* build our replacement query node */ + query_node = makeNode(Query); + query_node->commandType = CMD_UTILITY; + query_node->utilityStmt = (Node *)estmt; + query_node->canSetTag = true; - /* we need to free query_node as it is no longer needed */ - pfree(query_node); - } + /* now replace the top query node with our replacement query node */ + memcpy(query, query_node, sizeof(Query)); - return result; - } + /* + * We need to free and clear the global variable when done. But, not + * the ExplainStmt options. Those will get freed by PG when the + * query is deleted. + */ + ((ExplainStmt *)explain_node)->options = NULL; - return expression_tree_walker(node, convert_cypher_walker, pstate); + /* we need to free query_node as it is no longer needed */ + pfree(query_node); } static bool is_rte_cypher(RangeTblEntry *rte) @@ -386,6 +419,10 @@ static void convert_cypher_to_subquery(RangeTblEntry *rte, ParseState *pstate) { Node *temp = llast(stmt); + ereport(WARNING, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("too many extra_nodes passed from parser"))); + list_delete_ptr(stmt, temp); } From 07d9133b337cbf776f8c71e95424f0ce2f2ad264 Mon Sep 17 00:00:00 2001 From: Nataliapark <112913392+Nataliapark@users.noreply.github.com> Date: Tue, 11 Oct 2022 09:41:07 +0900 Subject: [PATCH 015/191] Update README.md (#322) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ffe110de7..1df66d8fd 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ Also, while the technology can be integrated against many data layers, a graph d ## Latest happenings -- Latest Apache AGE release, [Apache AGE 1.1.0](https://github.com/apache/age/releases/tag/v1.1.0-rc1). +- The latest Apache AGE release, [Apache AGE 1.1.0](https://github.com/apache/age/releases/tag/v1.1.0-rc1). - The latest Apache AGE documentation is now available at [here](https://age.apache.org/age-manual/master/index.html). - The roadmap - [Apache AGE website](http://age.apache.org/). - Send all your comments and inquiries to the user mailing list, users@age.apache.org. From 623ed005ce677a8df2917d90b497ac9204d36327 Mon Sep 17 00:00:00 2001 From: jbiz805 <49049733+jbiz805@users.noreply.github.com> Date: Tue, 11 Oct 2022 11:20:19 +0900 Subject: [PATCH 016/191] Update README.md (#323) Updated latest version link in : Latest happenings The latest Apache AGE release, Apache AGE 1.1.0. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1df66d8fd..5cafbb9c6 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ Also, while the technology can be integrated against many data layers, a graph d ## Latest happenings -- The latest Apache AGE release, [Apache AGE 1.1.0](https://github.com/apache/age/releases/tag/v1.1.0-rc1). +- The latest Apache AGE release, [Apache AGE 1.1.0](https://github.com/apache/age/releases/tag/v1.1.0-rc0). - The latest Apache AGE documentation is now available at [here](https://age.apache.org/age-manual/master/index.html). - The roadmap - [Apache AGE website](http://age.apache.org/). - Send all your comments and inquiries to the user mailing list, users@age.apache.org. From ff82d3da646c5987df374c1ee1eed00b2fbc0f1c Mon Sep 17 00:00:00 2001 From: jbiz805 <49049733+jbiz805@users.noreply.github.com> Date: Tue, 11 Oct 2022 11:20:34 +0900 Subject: [PATCH 017/191] Update README.md (#324) updated release badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5cafbb9c6..9928cf743 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # [Apache AGE](https://age.apache.org/#) [![license badge](https://img.shields.io/github/license/apache/age)](https://github.com/apache/age/blob/master/LICENSE) -[![release badge](https://img.shields.io/github/v/release/apache/age?sort=semver)](https://github.com/apache/age/releases) +[![release badge](https://img.shields.io/badge/Release-v1.1.0-FFA500?labelColor=gray&style=flat&link=https://github.com/apache/age/releases)](https://github.com/apache/age/releases) [![issue badge](https://img.shields.io/github/issues/apache/age)](https://github.com/apache/age/issues) [![forks badge](https://img.shields.io/github/forks/apache/age)](https://github.com/apache/age/network/members) [![stars badge](https://img.shields.io/github/stars/apache/age)](https://github.com/apache/age/stargazers) From a5d19baf32b81159c31da4c68de4a258113741f7 Mon Sep 17 00:00:00 2001 From: jbiz805 <49049733+jbiz805@users.noreply.github.com> Date: Tue, 11 Oct 2022 17:41:52 +0900 Subject: [PATCH 018/191] Update README.md (#325) Changed overall stuff like grammar, word choices, and format. --- README.md | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 9928cf743..01b323b4e 100644 --- a/README.md +++ b/README.md @@ -8,15 +8,15 @@ -Apache AGE is a PostgreSQL Extension that provides graph database functionality. AGE is an acronym for A Graph Extension, and is inspired by Bitnine's fork of PostgreSQL 10, AgensGraph, which is a multi-model database. The goal of the project is to create single storage that can handle both relational and graph model data so that users can use standard ANSI SQL along with openCypher, the Graph query language. +Apache AGE is a PostgreSQL Extension that provides graph database functionality. AGE is an acronym for A Graph Extension, and is inspired by Bitnine's AgensGraph, a multimodel database fork of PostgreSQL. The goal of the project is to enable users of Postgres to use graph query modeling in unison with Postgres' existing relational model. A graph consists of a set of vertices (also called nodes) and edges, where each individual vertex and edge possesses a map of properties. A vertex is the basic object of a graph, that can exist independently of everything else in the graph. An edge creates a directed connection between two vertices. A graph database is simply composed of vertices and edges. This type of database is useful when the meaning is in the relationships between the data. Relational databases can easily handle direct relationships, but indirect relationships are more difficult to deal with in relational databases. A graph database stores relationship information as a first-class entity. Apache AGE gives you the best of both worlds, simultaneously. Apache AGE is: -Powerful -- AGE adds graph database support to the already popular PostgreSQL database: PostgreSQL is used by organizations including Apple, Spotify, and NASA. -Flexible -- AGE allows you to perform openCypher queries, which make complex queries much easier to write. -Intelligent -- AGE allows you to perform graph queries that are the basis for many next level web services such as fraud & intrusion detection, master data management, product recommendations, identity and relationship management, experience personalization, knowledge management and more. +- **Powerful**: adds graph database support to the already popular PostgreSQL database: PostgreSQL is used by organizations including Apple, Spotify, and NASA. +- **Flexible**: allows you to perform openCypher queries, which make complex queries much easier to write. +- **Intelligent**: allows you to perform graph queries that are the basis for many next level web services such as fraud detection, master data management, product recommendations, identity and relationship management, experience personalization, knowledge management and more. Also, while the technology can be integrated against many data layers, a graph database is also the perfect companion for a [GraphQL](https://graphql.org/) API! Since the information is already in a native format, it simplifies many factors and even allows many operations to be generated automatically. GraphQL is rapidly superceeding REST as the standard for cloud applications. @@ -27,7 +27,7 @@ Also, while the technology can be integrated against many data layers, a graph d - Apache AGE enables querying multiple graphs at the same time. - Apache AGE will be enhanced with an aim to support all of the key features of AgensGraph (PostgreSQL fork extended with graph DB functionality). -## Latest happenings +## Latest Events - The latest Apache AGE release, [Apache AGE 1.1.0](https://github.com/apache/age/releases/tag/v1.1.0-rc0). - The latest Apache AGE documentation is now available at [here](https://age.apache.org/age-manual/master/index.html). @@ -42,21 +42,20 @@ Also, while the technology can be integrated against many data layers, a graph d ## Graph visualization tool for AGE -Apache AGE Viewer is a user interface for Apache AGE to provide visualization and exploration of data. -It provides a simple web visualization tool for users to enter complex graph queries and explore the results in graph and table forms. +Apache AGE Viewer is a user interface for Apache AGE that provides visualization and exploration of data. +Through this simple web visualization tool, users can enter complex graph queries and explore the results in graph and table forms. Apache AGE Viewer is enhanced to proceed with large graph data and discover the insights through various graph algorithms. Apache AGE Viewer will become a graph data administration and development platform for Apache AGE to support multiple relational databases: . - This is a visualization tool. -After AGE Extension Installation -You can use this tool to use the visualization features. +After installing AGE Extension, you may use this tool to get access to the visualization features. - Follow the instructions on the link to run it. -Under Connect to Database , select database type as "Apache AGE" +Under "Connect to Database", select database type as "Apache AGE" ## Documentation Here is the link to the latest [Apache AGE documentation](https://age.apache.org/age-manual/master/index.html). -You can learn about how to install Apache AGE, its features and built-in functions and how to use various Cypher queries. +Learn how to install Apache AGE, its features and built-in functions, and how to use various Cypher queries. ## Language Specific Drivers From 649f32f3717292a4def1f5194a2c1eeee0da11b0 Mon Sep 17 00:00:00 2001 From: jbiz805 <49049733+jbiz805@users.noreply.github.com> Date: Wed, 12 Oct 2022 13:09:11 +0900 Subject: [PATCH 019/191] Update README.md (#327) - Deleted outdated sentence in 'Graph Visualization tool for AGE' to avoid misunderstanding - Renamed Community to Community-driven Driver - Deleted Apache AGE Python driver in Community-driven Driver since it has already merged into Python driver available in 'Built-in' category. - Rearranged some header images and badges alignment --- README.md | 53 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 01b323b4e..a23f1154a 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,37 @@ -# [Apache AGE](https://age.apache.org/#) - -[![license badge](https://img.shields.io/github/license/apache/age)](https://github.com/apache/age/blob/master/LICENSE) -[![release badge](https://img.shields.io/badge/Release-v1.1.0-FFA500?labelColor=gray&style=flat&link=https://github.com/apache/age/releases)](https://github.com/apache/age/releases) -[![issue badge](https://img.shields.io/github/issues/apache/age)](https://github.com/apache/age/issues) -[![forks badge](https://img.shields.io/github/forks/apache/age)](https://github.com/apache/age/network/members) -[![stars badge](https://img.shields.io/github/stars/apache/age)](https://github.com/apache/age/stargazers) - - - -Apache AGE is a PostgreSQL Extension that provides graph database functionality. AGE is an acronym for A Graph Extension, and is inspired by Bitnine's AgensGraph, a multimodel database fork of PostgreSQL. The goal of the project is to enable users of Postgres to use graph query modeling in unison with Postgres' existing relational model. +
+ +

+ +

+ +
+ +

+ + + +   + + + +   + + + +   + + + +   + + + +   +

+ +
+ +[Apache AGE](https://age.apache.org/#) is a PostgreSQL Extension that provides graph database functionality. AGE is an acronym for A Graph Extension, and is inspired by Bitnine's AgensGraph, a multimodel database fork of PostgreSQL. The goal of the project is to enable users of Postgres to use graph query modeling in unison with Postgres' existing relational model. A graph consists of a set of vertices (also called nodes) and edges, where each individual vertex and edge possesses a map of properties. A vertex is the basic object of a graph, that can exist independently of everything else in the graph. An edge creates a directed connection between two vertices. A graph database is simply composed of vertices and edges. This type of database is useful when the meaning is in the relationships between the data. Relational databases can easily handle direct relationships, but indirect relationships are more difficult to deal with in relational databases. A graph database stores relationship information as a first-class entity. Apache AGE gives you the best of both worlds, simultaneously. @@ -40,7 +63,7 @@ Also, while the technology can be integrated against many data layers, a graph d - [Use a docker image - official ver.](https://hub.docker.com/r/apache/age) - [Installing from source](https://age.apache.org/#) -## Graph visualization tool for AGE +## Graph Visualization Tool for AGE Apache AGE Viewer is a user interface for Apache AGE that provides visualization and exploration of data. Through this simple web visualization tool, users can enter complex graph queries and explore the results in graph and table forms. @@ -49,8 +72,6 @@ Apache AGE Viewer will become a graph data administration and development platfo - This is a visualization tool. After installing AGE Extension, you may use this tool to get access to the visualization features. -- Follow the instructions on the link to run it. -Under "Connect to Database", select database type as "Apache AGE" ## Documentation @@ -66,9 +87,7 @@ Learn how to install Apache AGE, its features and built-in functions, and how to - [NodeJs driver](./drivers/nodejs) - [Python driver](./drivers/python) -### Community - -- [Apache AGE Python Driver](https://github.com/rhizome-ai/apache-age-python) +### Community-driven Driver - [Apache AGE Rust Driver](https://github.com/Dzordzu/rust-apache-age.git) ## Contribution From 4510facd7782fc8371c6a27c624571f214875a32 Mon Sep 17 00:00:00 2001 From: jbiz805 <49049733+jbiz805@users.noreply.github.com> Date: Thu, 13 Oct 2022 17:30:10 +0900 Subject: [PATCH 020/191] Update README.md (#331) Changed the category orders to : Documentation -> Installation(as is) -> Language Specifc Drivers(as is) -> Graph Visualization Tool for AGE Changes in Overview - Apache AGE is currently being developed for the PostgreSQL 12 release, not 11. - Replaced the old message (adding all features of AgensGraph) to (make it compatible with all RDBs) Changes in Latest Events: - Removed section about Documentation, since there's a category regarding documentation below (repetitive) - Changed statement about Apache AGE roadmap to "Renewed Apache AGE Homepage" since the roadmap isn't available on the renewed homepage anymore. - Rephrased sentence regarding support for postgresql Changes in Documentation: - Rephrased sentence Changes in Installation: - Added age.apache.org/download link to Installing from source - Added Apache AGE setup guide and its link to setup documentation - Replaced and edited Use a docker image - official ver to Installing via docker image and added documentation link to installing via docker image. Change to Contribution - Replaced link of Apache AGE Official Site - Developer Guidelines to https://age.apache.org/contribution/guide --- README.md | 47 +++++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index a23f1154a..ea4d04a37 100644 --- a/README.md +++ b/README.md @@ -41,42 +41,31 @@ Apache AGE is: - **Flexible**: allows you to perform openCypher queries, which make complex queries much easier to write. - **Intelligent**: allows you to perform graph queries that are the basis for many next level web services such as fraud detection, master data management, product recommendations, identity and relationship management, experience personalization, knowledge management and more. -Also, while the technology can be integrated against many data layers, a graph database is also the perfect companion for a [GraphQL](https://graphql.org/) API! Since the information is already in a native format, it simplifies many factors and even allows many operations to be generated automatically. GraphQL is rapidly superceeding REST as the standard for cloud applications. +Also, while the technology can be integrated against many data layers, a graph database is also the perfect companion for a [GraphQL](https://graphql.org/) API. Since the information is already in a native format, it simplifies many factors and even allows many operations to be generated automatically. GraphQL is rapidly superceeding REST as the standard for cloud applications. ## Overview -- **Apache AGE is currently being developed for the PostgreSQL 11 release** and will support PostgreSQL 12, 13 and all the future releases of PostgreSQL. +- **Apache AGE is currently being developed for the PostgreSQL 12 release** and will support PostgreSQL 13 and all the future releases of PostgreSQL. - Apache AGE supports the openCypher graph query language. - Apache AGE enables querying multiple graphs at the same time. -- Apache AGE will be enhanced with an aim to support all of the key features of AgensGraph (PostgreSQL fork extended with graph DB functionality). +- The goal of Apache AGE is to make it compatible with all relational databases in the future. ## Latest Events -- The latest Apache AGE release, [Apache AGE 1.1.0](https://github.com/apache/age/releases/tag/v1.1.0-rc0). -- The latest Apache AGE documentation is now available at [here](https://age.apache.org/age-manual/master/index.html). -- The roadmap - [Apache AGE website](http://age.apache.org/). +- Latest Apache AGE release, [Apache AGE 1.1.0](https://github.com/apache/age/releases/tag/v1.1.0-rc0). +- Renewed Apache AGE homepage - [Apache AGE website](http://age.apache.org/). - Send all your comments and inquiries to the user mailing list, users@age.apache.org. -- To focus more on implementing the openCypher specification, the support for PostgreSQL 12 will be added in the Q4 2022. +- Support for PostgreSQL will be added in the Q4 2022 to focus more on implementing the openCypher specification. -## Installation - -- [Use a docker image - official ver.](https://hub.docker.com/r/apache/age) -- [Installing from source](https://age.apache.org/#) - -## Graph Visualization Tool for AGE - -Apache AGE Viewer is a user interface for Apache AGE that provides visualization and exploration of data. -Through this simple web visualization tool, users can enter complex graph queries and explore the results in graph and table forms. -Apache AGE Viewer is enhanced to proceed with large graph data and discover the insights through various graph algorithms. -Apache AGE Viewer will become a graph data administration and development platform for Apache AGE to support multiple relational databases: . +## Documentation -- This is a visualization tool. -After installing AGE Extension, you may use this tool to get access to the visualization features. +Refer to our latest [Apache AGE documentation](https://age.apache.org/age-manual/master/index.html) to learn about installation, features and built-in functions, and Cypher queries. -## Documentation +## Installation -Here is the link to the latest [Apache AGE documentation](https://age.apache.org/age-manual/master/index.html). -Learn how to install Apache AGE, its features and built-in functions, and how to use various Cypher queries. +- [Installing from source](https://age.apache.org/download) +- [Apache AGE setup guide](https://age.apache.org/age-manual/master/intro/setup.html#) +- [Installing via docker image](https://age.apache.org/age-manual/master/intro/setup.html#installing-via-docker-image) ## Language Specific Drivers @@ -90,7 +79,17 @@ Learn how to install Apache AGE, its features and built-in functions, and how to ### Community-driven Driver - [Apache AGE Rust Driver](https://github.com/Dzordzu/rust-apache-age.git) +## Graph Visualization Tool for AGE + +Apache AGE Viewer is a user interface for Apache AGE that provides visualization and exploration of data. +Through this simple web visualization tool, users can enter complex graph queries and explore the results in graph and table forms. +Apache AGE Viewer is enhanced to proceed with large graph data and discover the insights through various graph algorithms. +Apache AGE Viewer will become a graph data administration and development platform for Apache AGE to support multiple relational databases: . + +- This is a visualization tool. +After installing AGE Extension, you may use this tool to get access to the visualization features. + ## Contribution You can improve ongoing efforts or initiate new ones by sending pull requests to [this repository](https://github.com/apache/age). -Also, you can learn from the code review process, how to merge pull requests, and from code style compliance to documentation, by visiting the [Apache AGE official site - Developer Guidelines](https://age.apache.org/#codereview). +Also, you can learn from the code review process, how to merge pull requests, and from code style compliance to documentation, by visiting the [Apache AGE official site - Developer Guidelines](https://age.apache.org/contribution/guide). From 0aba332cd783ee0bcd580186af77b19ab6dc2acf Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Mon, 17 Oct 2022 15:51:34 -0700 Subject: [PATCH 021/191] Fix delete_global_graphs Fixed the delete_global_graphs function. It was not keeping track of the previous graph global context pointer. This was causing a memory leak for multiple graph contexts if individual graphs were deleted. --- src/backend/utils/adt/age_global_graph.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/utils/adt/age_global_graph.c b/src/backend/utils/adt/age_global_graph.c index 3da11b44c..c18f9c935 100644 --- a/src/backend/utils/adt/age_global_graph.c +++ b/src/backend/utils/adt/age_global_graph.c @@ -858,7 +858,8 @@ static bool delete_specific_GRAPH_global_contexts(char *graph_name) return true; } - /* advance to the next one */ + /* save the current as previous and advance to the next one */ + prev_ggctx = curr_ggctx; curr_ggctx = next_ggctx; } From 492e7788d0497dabf24af76fb0197ff9c351a400 Mon Sep 17 00:00:00 2001 From: Eya Badal Date: Thu, 20 Oct 2022 11:43:57 -0700 Subject: [PATCH 022/191] Update CONTRIBUTING.md Removed "Incubator" --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 63687ae74..50a2c89e2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,4 @@ -# Contributing to Apache Incubator AGE +# Contributing to Apache AGE First off, thank you for considering contributing. @@ -12,4 +12,4 @@ Thank you for raising issues. ## Pull Requests -Pull requests are a great way to get your ideas into this repository. Check out our list of good [first issues](https://github.com/apache/incubator-age/labels/good%20first%20issue) +Pull requests are a great way to get your ideas into this repository. Check out our list of good [first issues](https://github.com/apache/age/labels/good%20first%20issue) From 24a7be5c75f67459531a7c32f2442c4667c32a33 Mon Sep 17 00:00:00 2001 From: Eya Badal Date: Thu, 20 Oct 2022 11:56:20 -0700 Subject: [PATCH 023/191] Delete DISCLAIMER Removed DISCLAIMER file --- DISCLAIMER | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 DISCLAIMER diff --git a/DISCLAIMER b/DISCLAIMER deleted file mode 100644 index 8be5086c5..000000000 --- a/DISCLAIMER +++ /dev/null @@ -1,10 +0,0 @@ -Apache AGE is an effort undergoing incubation at -The Apache Software Foundation (ASF), sponsored by Apache Incubator PMC. - -Incubation is required of all newly accepted projects until a further review -indicates that the infrastructure, communications, and decision making process -have stabilized in a manner consistent with other successful ASF projects. - -While incubation status is not necessarily a reflection of the completeness -or stability of the code, it does indicate that the project has yet to be fully -endorsed by the ASF. From 0375ecbceccbca269ed482a2d1a24749a0284a91 Mon Sep 17 00:00:00 2001 From: Eya Badal Date: Thu, 20 Oct 2022 12:40:06 -0700 Subject: [PATCH 024/191] Update README.md Removed "incubator" --- drivers/golang/README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/drivers/golang/README.md b/drivers/golang/README.md index bad9d064d..1d58fa6cf 100644 --- a/drivers/golang/README.md +++ b/drivers/golang/README.md @@ -1,4 +1,4 @@ -# incubator-age AGType parser and driver support for Golang +# age AGType parser and driver support for Golang AGType parser and driver support for [Apache AGE](https://age.apache.org/), graph extention for PostgreSQL. @@ -13,20 +13,20 @@ AGType parser and driver support for [Apache AGE](https://age.apache.org/), grap ### Go get ``` -go get github.com/apache/incubator-age/drivers/golang +go get github.com/apache/age/drivers/golang ``` ### gomod ``` -require github.com/apache/incubator-age/drivers/golang {version} +require github.com/apache/age/drivers/golang {version} ``` -Check [latest version](https://github.com/apache/incubator-age/releases) +Check [latest version](https://github.com/apache/age/releases) ### For more information about [Apache AGE](https://age.apache.org/) -* Apache Incubator Age : https://age.apache.org/ -* Github : https://github.com/apache/incubator-age -* Document : https://age.incubator.apache.org/docs/ +* Apache Age : https://age.apache.org/ +* Github : https://github.com/apache/age +* Document : https://age.apache.org/docs/ ### Check AGE loaded on your PostgreSQL Connect to your containerized Postgres instance and then run the following commands: @@ -38,9 +38,9 @@ SET search_path = ag_catalog, "$user", public; ``` ### Test -Check out and rewrite DSN in incubator-age/drivers/golang/age/age_test.go +Check out and rewrite DSN in age/drivers/golang/age/age_test.go ``` -cd incubator-age/drivers/golang/age +cd age/drivers/golang/age go test . -v ``` @@ -56,4 +56,4 @@ go test . -v ### License -Apache-2.0 License \ No newline at end of file +Apache-2.0 License From 327014a2b522536514de134c2a4a3479fe5f0044 Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Thu, 20 Oct 2022 15:10:13 -0700 Subject: [PATCH 025/191] Remove incubating from GO driver Removed incubating from GO driver. --- drivers/golang/age/builder.go | 2 +- drivers/golang/age/mapper.go | 2 +- drivers/golang/go.mod | 2 +- drivers/golang/samples/age_wrapper_sample.go | 2 +- drivers/golang/samples/sql_api_sample.go | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/golang/age/builder.go b/drivers/golang/age/builder.go index 7fa6d3b3e..be1c4bbb1 100644 --- a/drivers/golang/age/builder.go +++ b/drivers/golang/age/builder.go @@ -26,7 +26,7 @@ import ( "strings" "github.com/antlr/antlr4/runtime/Go/antlr" - "github.com/apache/incubator-age/drivers/golang/parser" + "github.com/apache/age/drivers/golang/parser" ) const MaxUint = ^uint(0) diff --git a/drivers/golang/age/mapper.go b/drivers/golang/age/mapper.go index 099407951..5857b1331 100644 --- a/drivers/golang/age/mapper.go +++ b/drivers/golang/age/mapper.go @@ -24,7 +24,7 @@ import ( "strings" "github.com/antlr/antlr4/runtime/Go/antlr" - "github.com/apache/incubator-age/drivers/golang/parser" + "github.com/apache/age/drivers/golang/parser" ) type AGMapper struct { diff --git a/drivers/golang/go.mod b/drivers/golang/go.mod index c7082b370..81525d66f 100644 --- a/drivers/golang/go.mod +++ b/drivers/golang/go.mod @@ -17,7 +17,7 @@ // * under the License. // */ -module github.com/apache/incubator-age/drivers/golang +module github.com/apache/age/drivers/golang go 1.16 diff --git a/drivers/golang/samples/age_wrapper_sample.go b/drivers/golang/samples/age_wrapper_sample.go index ac611fd76..6040ac525 100644 --- a/drivers/golang/samples/age_wrapper_sample.go +++ b/drivers/golang/samples/age_wrapper_sample.go @@ -21,7 +21,7 @@ package main import ( "fmt" - "github.com/apache/incubator-age/drivers/golang/age" + "github.com/apache/age/drivers/golang/age" ) // Do cypher query to AGE with Age API diff --git a/drivers/golang/samples/sql_api_sample.go b/drivers/golang/samples/sql_api_sample.go index e0a17fc1a..491532f38 100644 --- a/drivers/golang/samples/sql_api_sample.go +++ b/drivers/golang/samples/sql_api_sample.go @@ -22,7 +22,7 @@ import ( "database/sql" "fmt" - "github.com/apache/incubator-age/drivers/golang/age" + "github.com/apache/age/drivers/golang/age" ) // Do cypher query to AGE with database/sql Tx API transaction conrol From cd4c6b49a427b0465b4eeb7e1ead81ad1fb36170 Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Thu, 20 Oct 2022 15:28:16 -0700 Subject: [PATCH 026/191] Fix GO driver module version Fixed the GO driver module version. --- drivers/golang/go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/golang/go.mod b/drivers/golang/go.mod index 81525d66f..bd27c5c16 100644 --- a/drivers/golang/go.mod +++ b/drivers/golang/go.mod @@ -22,7 +22,7 @@ module github.com/apache/age/drivers/golang go 1.16 require ( - github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210521184019-c5ad59b459ec + github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20221020221120-327014a2b522 github.com/lib/pq v1.10.2 github.com/stretchr/testify v1.7.0 ) From 01e64f1959e49c3b9ea07cb4545ff71cfacb3cec Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Thu, 20 Oct 2022 15:46:46 -0700 Subject: [PATCH 027/191] Remove incubating from Python driver Removed incubating from the Python driver. --- drivers/python/README.md | 18 +++++++++--------- drivers/python/setup.py | 6 +++--- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/drivers/python/README.md b/drivers/python/README.md index 7de16f534..d01b88593 100644 --- a/drivers/python/README.md +++ b/drivers/python/README.md @@ -1,4 +1,4 @@ -# incubator-age AGType parser and driver support for Python +# AGE AGType parser and driver support for Python AGType parser and driver support for [Apache AGE](https://age.apache.org/), graph extention for PostgreSQL. ### Features @@ -22,9 +22,9 @@ python -m unittest -v test_agtypes.py ``` ### Build from source -``` -git clone https://github.com/apache/incubator-age.git -cd incubator-age/dirivers/python +``` +git clone https://github.com/apache/age.git +cd age/drivers/python python setup.py install @@ -32,15 +32,15 @@ python setup.py install ### Install from PyPi -``` +``` pip install apache-age-python ``` ### For more information about [Apache AGE](https://age.apache.org/) -* Apache Incubator Age : https://age.apache.org/ -* Github : https://github.com/apache/incubator-age -* Document : https://age.incubator.apache.org/docs/ +* Apache Age : https://age.apache.org/ +* Github : https://github.com/apache/age +* Document : https://age.apache.org/age-manual/master/index.html * apache-age-python GitHub : https://github.com/rhizome-ai/apache-age-python ### Check AGE loaded on your PostgreSQL @@ -58,4 +58,4 @@ SET search_path = ag_catalog, "$user", public; * Agtype converting samples: [Agtype Sample](samples/apache-age-agtypes.ipynb) in Samples. ### License -Apache-2.0 License \ No newline at end of file +Apache-2.0 License diff --git a/drivers/python/setup.py b/drivers/python/setup.py index e8cf410e5..7d8981fab 100644 --- a/drivers/python/setup.py +++ b/drivers/python/setup.py @@ -20,14 +20,14 @@ long_description = fh.read() setup( - name = 'incubator-age', + name = 'age', version = VERSION.VERSION, description = 'Python driver support for Apache AGE', long_description=long_description, long_description_content_type="text/markdown", author = 'rhizome', author_email = 'rhizome.ai@gmail.com', - url = 'https://github.com/apache/incubator-age', + url = 'https://github.com/apache/age', license = 'Apache2.0', install_requires = [ 'psycopg2', 'antlr4-python3-runtime' ], packages = ['age', 'age.gen'], @@ -38,4 +38,4 @@ classifiers = [ 'Programming Language :: Python :: 3.9' ] -) \ No newline at end of file +) From 567d2b0aada47c05dbd3845124209ed24960379f Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Thu, 20 Oct 2022 16:26:05 -0700 Subject: [PATCH 028/191] Remove incubating from ag_load Removed incubation from ag_load. --- src/include/utils/ag_load.h | 6 +++--- src/include/utils/load/age_load.h | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/include/utils/ag_load.h b/src/include/utils/ag_load.h index 5e461ac52..2c51dc2d9 100644 --- a/src/include/utils/ag_load.h +++ b/src/include/utils/ag_load.h @@ -17,8 +17,8 @@ * under the License. */ -#ifndef INCUBATOR_AGE_AG_LOAD_H -#define INCUBATOR_AGE_AG_LOAD_H +#ifndef AGE_AG_LOAD_H +#define AGE_AG_LOAD_H #include "postgres.h" @@ -57,4 +57,4 @@ #include "utils/graphid.h" -#endif //INCUBATOR_AGE_AG_LOAD_H +#endif //AGE_AG_LOAD_H diff --git a/src/include/utils/load/age_load.h b/src/include/utils/load/age_load.h index 9eeca3614..8424fb4c6 100644 --- a/src/include/utils/load/age_load.h +++ b/src/include/utils/load/age_load.h @@ -54,8 +54,8 @@ #include "utils/agtype.h" #include "utils/graphid.h" -#ifndef INCUBATOR_AGE_ENTITY_CREATOR_H -#define INCUBATOR_AGE_ENTITY_CREATOR_H +#ifndef AGE_ENTITY_CREATOR_H +#define AGE_ENTITY_CREATOR_H agtype* create_agtype_from_list(char **header, char **fields, size_t fields_len, int64 vertex_id); @@ -67,4 +67,4 @@ void insert_edge_simple(Oid graph_id, char* label_name, graphid edge_id, graphid start_id, graphid end_id, agtype* end_properties); -#endif //INCUBATOR_AGE_ENTITY_CREATOR_H +#endif //AGE_ENTITY_CREATOR_H From 04fd1481adbab6e9bff181bb3f135d8e07a53482 Mon Sep 17 00:00:00 2001 From: Rafsun Masud Date: Tue, 25 Oct 2022 15:02:38 -0400 Subject: [PATCH 029/191] add regression tests for delete_global_graphs (#336) --- Makefile | 1 + regress/expected/age_global_graph.out | 196 ++++++++++++++++++++++++++ regress/sql/age_global_graph.sql | 68 +++++++++ 3 files changed, 265 insertions(+) create mode 100644 regress/expected/age_global_graph.out create mode 100644 regress/sql/age_global_graph.sql diff --git a/Makefile b/Makefile index da0553b45..8c685a33d 100644 --- a/Makefile +++ b/Makefile @@ -90,6 +90,7 @@ REGRESS = scan \ cypher_union \ cypher_call \ cypher_merge \ + age_global_graph \ age_load \ index \ drop diff --git a/regress/expected/age_global_graph.out b/regress/expected/age_global_graph.out new file mode 100644 index 000000000..171ec1bd5 --- /dev/null +++ b/regress/expected/age_global_graph.out @@ -0,0 +1,196 @@ +LOAD 'age'; +SET search_path TO ag_catalog; +-- +-- test delete_specific_GRAPH_global_contexts function +-- +-- create 3 graphs +SELECT * FROM create_graph('age_global_graph_1'); +NOTICE: graph "age_global_graph_1" has been created + create_graph +-------------- + +(1 row) + +SELECT * FROM cypher('age_global_graph_1', $$ CREATE (v:vertex_from_graph_1) RETURN v $$) AS (v agtype); + v +----------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "vertex_from_graph_1", "properties": {}}::vertex +(1 row) + +SELECT * FROM create_graph('age_global_graph_2'); +NOTICE: graph "age_global_graph_2" has been created + create_graph +-------------- + +(1 row) + +SELECT * FROM cypher('age_global_graph_2', $$ CREATE (v:vertex_from_graph_2) RETURN v $$) AS (v agtype); + v +----------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "vertex_from_graph_2", "properties": {}}::vertex +(1 row) + +SELECT * FROM create_graph('age_global_graph_3'); +NOTICE: graph "age_global_graph_3" has been created + create_graph +-------------- + +(1 row) + +SELECT * FROM cypher('age_global_graph_3', $$ CREATE (v:vertex_from_graph_3) RETURN v $$) AS (v agtype); + v +----------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "vertex_from_graph_3", "properties": {}}::vertex +(1 row) + +-- load contexts using the vertex_stats command +SELECT * FROM cypher('age_global_graph_3', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); + result +----------------------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "vertex_from_graph_3", "in_degree": 0, "out_degree": 0, "self_loops": 0} +(1 row) + +SELECT * FROM cypher('age_global_graph_2', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); + result +----------------------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "vertex_from_graph_2", "in_degree": 0, "out_degree": 0, "self_loops": 0} +(1 row) + +SELECT * FROM cypher('age_global_graph_1', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); + result +----------------------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "vertex_from_graph_1", "in_degree": 0, "out_degree": 0, "self_loops": 0} +(1 row) + +-- delete age_global_graph_2's context +-- should return true (succeeded) +SELECT * FROM cypher('age_global_graph_2', $$ RETURN delete_global_graphs('age_global_graph_2') $$) AS (result agtype); + result +-------- + true +(1 row) + +-- delete age_global_graph_1's context +-- should return true (succeed) because previous command should not delete the 1st graph's context +SELECT * FROM cypher('age_global_graph_1', $$ RETURN delete_global_graphs('age_global_graph_1') $$) AS (result agtype); + result +-------- + true +(1 row) + +-- delete age_global_graph_3's context +-- should return true (succeed) because previous commands should not delete the 3rd graph's context +SELECT * FROM cypher('age_global_graph_3', $$ RETURN delete_global_graphs('age_global_graph_3') $$) AS (result agtype); + result +-------- + true +(1 row) + +-- delete all graphs' context again +-- should return false (did not succeed) for all of them because already removed +SELECT * FROM cypher('age_global_graph_2', $$ RETURN delete_global_graphs('age_global_graph_2') $$) AS (result agtype); + result +-------- + false +(1 row) + +SELECT * FROM cypher('age_global_graph_1', $$ RETURN delete_global_graphs('age_global_graph_1') $$) AS (result agtype); + result +-------- + false +(1 row) + +SELECT * FROM cypher('age_global_graph_3', $$ RETURN delete_global_graphs('age_global_graph_3') $$) AS (result agtype); + result +-------- + false +(1 row) + + +-- +-- test delete_GRAPH_global_contexts function +-- +-- load contexts again +SELECT * FROM cypher('age_global_graph_3', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); + result +----------------------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "vertex_from_graph_3", "in_degree": 0, "out_degree": 0, "self_loops": 0} +(1 row) + +SELECT * FROM cypher('age_global_graph_2', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); + result +----------------------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "vertex_from_graph_2", "in_degree": 0, "out_degree": 0, "self_loops": 0} +(1 row) + +SELECT * FROM cypher('age_global_graph_1', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); + result +----------------------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "vertex_from_graph_1", "in_degree": 0, "out_degree": 0, "self_loops": 0} +(1 row) + +-- delete all graph contexts +-- should return true +SELECT * FROM cypher('age_global_graph_1', $$ RETURN delete_global_graphs(NULL) $$) AS (result agtype); + result +-------- + true +(1 row) + +-- delete all graphs' context individually +-- should return false for all of them because already removed +SELECT * FROM cypher('age_global_graph_1', $$ RETURN delete_global_graphs('age_global_graph_1') $$) AS (result agtype); + result +-------- + false +(1 row) + +SELECT * FROM cypher('age_global_graph_2', $$ RETURN delete_global_graphs('age_global_graph_2') $$) AS (result agtype); + result +-------- + false +(1 row) + +SELECT * FROM cypher('age_global_graph_3', $$ RETURN delete_global_graphs('age_global_graph_3') $$) AS (result agtype); + result +-------- + false +(1 row) + +-- drop graphs +SELECT * FROM drop_graph('age_global_graph_1', true); +NOTICE: drop cascades to 3 other objects +DETAIL: drop cascades to table age_global_graph_1._ag_label_vertex +drop cascades to table age_global_graph_1._ag_label_edge +drop cascades to table age_global_graph_1.vertex_from_graph_1 +NOTICE: graph "age_global_graph_1" has been dropped + drop_graph +------------ + +(1 row) + +SELECT * FROM drop_graph('age_global_graph_2', true); +NOTICE: drop cascades to 3 other objects +DETAIL: drop cascades to table age_global_graph_2._ag_label_vertex +drop cascades to table age_global_graph_2._ag_label_edge +drop cascades to table age_global_graph_2.vertex_from_graph_2 +NOTICE: graph "age_global_graph_2" has been dropped + drop_graph +------------ + +(1 row) + +SELECT * FROM drop_graph('age_global_graph_3', true); +NOTICE: drop cascades to 3 other objects +DETAIL: drop cascades to table age_global_graph_3._ag_label_vertex +drop cascades to table age_global_graph_3._ag_label_edge +drop cascades to table age_global_graph_3.vertex_from_graph_3 +NOTICE: graph "age_global_graph_3" has been dropped + drop_graph +------------ + +(1 row) + +-- +-- End of tests +-- diff --git a/regress/sql/age_global_graph.sql b/regress/sql/age_global_graph.sql new file mode 100644 index 000000000..a62d3358a --- /dev/null +++ b/regress/sql/age_global_graph.sql @@ -0,0 +1,68 @@ +LOAD 'age'; +SET search_path TO ag_catalog; + +-- +-- test delete_specific_GRAPH_global_contexts function +-- + +-- create 3 graphs +SELECT * FROM create_graph('age_global_graph_1'); +SELECT * FROM cypher('age_global_graph_1', $$ CREATE (v:vertex_from_graph_1) RETURN v $$) AS (v agtype); + +SELECT * FROM create_graph('age_global_graph_2'); +SELECT * FROM cypher('age_global_graph_2', $$ CREATE (v:vertex_from_graph_2) RETURN v $$) AS (v agtype); + +SELECT * FROM create_graph('age_global_graph_3'); +SELECT * FROM cypher('age_global_graph_3', $$ CREATE (v:vertex_from_graph_3) RETURN v $$) AS (v agtype); + +-- load contexts using the vertex_stats command +SELECT * FROM cypher('age_global_graph_3', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); +SELECT * FROM cypher('age_global_graph_2', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); +SELECT * FROM cypher('age_global_graph_1', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); + +-- delete age_global_graph_2's context +-- should return true (succeeded) +SELECT * FROM cypher('age_global_graph_2', $$ RETURN delete_global_graphs('age_global_graph_2') $$) AS (result agtype); + +-- delete age_global_graph_1's context +-- should return true (succeed) because previous command should not delete the 1st graph's context +SELECT * FROM cypher('age_global_graph_1', $$ RETURN delete_global_graphs('age_global_graph_1') $$) AS (result agtype); + +-- delete age_global_graph_3's context +-- should return true (succeed) because previous commands should not delete the 3rd graph's context +SELECT * FROM cypher('age_global_graph_3', $$ RETURN delete_global_graphs('age_global_graph_3') $$) AS (result agtype); + +-- delete all graphs' context again +-- should return false (did not succeed) for all of them because already removed +SELECT * FROM cypher('age_global_graph_2', $$ RETURN delete_global_graphs('age_global_graph_2') $$) AS (result agtype); +SELECT * FROM cypher('age_global_graph_1', $$ RETURN delete_global_graphs('age_global_graph_1') $$) AS (result agtype); +SELECT * FROM cypher('age_global_graph_3', $$ RETURN delete_global_graphs('age_global_graph_3') $$) AS (result agtype); + + +-- +-- test delete_GRAPH_global_contexts function +-- + +-- load contexts again +SELECT * FROM cypher('age_global_graph_3', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); +SELECT * FROM cypher('age_global_graph_2', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); +SELECT * FROM cypher('age_global_graph_1', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); + +-- delete all graph contexts +-- should return true +SELECT * FROM cypher('age_global_graph_1', $$ RETURN delete_global_graphs(NULL) $$) AS (result agtype); + +-- delete all graphs' context individually +-- should return false for all of them because already removed +SELECT * FROM cypher('age_global_graph_1', $$ RETURN delete_global_graphs('age_global_graph_1') $$) AS (result agtype); +SELECT * FROM cypher('age_global_graph_2', $$ RETURN delete_global_graphs('age_global_graph_2') $$) AS (result agtype); +SELECT * FROM cypher('age_global_graph_3', $$ RETURN delete_global_graphs('age_global_graph_3') $$) AS (result agtype); + +-- drop graphs +SELECT * FROM drop_graph('age_global_graph_1', true); +SELECT * FROM drop_graph('age_global_graph_2', true); +SELECT * FROM drop_graph('age_global_graph_3', true); + +-- +-- End of tests +-- From 17714bcccf3a6a3473f5597d40582fdaaa51a50d Mon Sep 17 00:00:00 2001 From: jbiz805 <49049733+jbiz805@users.noreply.github.com> Date: Wed, 26 Oct 2022 16:14:37 +0900 Subject: [PATCH 030/191] Update README.md (#340) Added Discord Badge --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index ea4d04a37..4223e4ce8 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,8 @@   + +


From 2fabc17aa6be7846b21e0e574e9e2037d293eb2c Mon Sep 17 00:00:00 2001 From: Dehowe Feng Date: Fri, 21 Oct 2022 17:07:33 -0700 Subject: [PATCH 031/191] Invalid labels now return NULL Updated the behavior of invalid labels to return NULL rather than throw an error. Added additional regression tests as well. --- regress/expected/cypher_match.out | 48 ++++-- regress/sql/cypher_match.sql | 8 + src/backend/parser/cypher_clause.c | 228 +++++++++++++++++++++++------ 3 files changed, 228 insertions(+), 56 deletions(-) diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index 6327f1069..475739255 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -523,21 +523,45 @@ LINE 2: MATCH (a:v1)-[]-()-[]-(a {id:'will_fail'}) RETURN a ^ --Incorrect Labels SELECT * FROM cypher('cypher_match', $$MATCH (n)-[:v]-() RETURN n$$) AS (n agtype); -ERROR: label v is for vertices, not edges -LINE 1: SELECT * FROM cypher('cypher_match', $$MATCH (n)-[:v]-() RET... - ^ + n +--- +(0 rows) + SELECT * FROM cypher('cypher_match', $$MATCH (n)-[:emissing]-() RETURN n$$) AS (n agtype); -ERROR: label emissing does not exists -LINE 1: SELECT * FROM cypher('cypher_match', $$MATCH (n)-[:emissing]... - ^ + n +--- +(0 rows) + SELECT * FROM cypher('cypher_match', $$MATCH (n:e1)-[]-() RETURN n$$) AS (n agtype); -ERROR: label e1 is for edges, not vertices -LINE 1: SELECT * FROM cypher('cypher_match', $$MATCH (n:e1)-[]-() RE... - ^ + n +--- +(0 rows) + SELECT * FROM cypher('cypher_match', $$MATCH (n:vmissing)-[]-() RETURN n$$) AS (n agtype); -ERROR: label vmissing does not exists -LINE 1: SELECT * FROM cypher('cypher_match', $$MATCH (n:vmissing)-[]... - ^ + n +--- +(0 rows) + +SELECT * FROM cypher('cypher_match', $$MATCH (:e1)-[r]-() RETURN r$$) AS (r agtype); + r +--- +(0 rows) + +SELECT * FROM cypher('cypher_match', $$MATCH (:vmissing)-[r]-() RETURN r$$) AS (r agtype); + r +--- +(0 rows) + +SELECT * FROM cypher('cypher_match', $$MATCH (n),(:e1) RETURN n$$) AS (n agtype); + n +--- +(0 rows) + +SELECT * FROM cypher('cypher_match', $$MATCH (n),()-[:v]-() RETURN n$$) AS (n agtype); + n +--- +(0 rows) + -- -- Path of one vertex. This should select 14 -- diff --git a/regress/sql/cypher_match.sql b/regress/sql/cypher_match.sql index 5d42d2ebd..11282961c 100644 --- a/regress/sql/cypher_match.sql +++ b/regress/sql/cypher_match.sql @@ -293,6 +293,14 @@ SELECT * FROM cypher('cypher_match', $$MATCH (n:e1)-[]-() RETURN n$$) AS (n agty SELECT * FROM cypher('cypher_match', $$MATCH (n:vmissing)-[]-() RETURN n$$) AS (n agtype); +SELECT * FROM cypher('cypher_match', $$MATCH (:e1)-[r]-() RETURN r$$) AS (r agtype); + +SELECT * FROM cypher('cypher_match', $$MATCH (:vmissing)-[r]-() RETURN r$$) AS (r agtype); + +SELECT * FROM cypher('cypher_match', $$MATCH (n),(:e1) RETURN n$$) AS (n agtype); + +SELECT * FROM cypher('cypher_match', $$MATCH (n),()-[:v]-() RETURN n$$) AS (n agtype); + -- -- Path of one vertex. This should select 14 -- diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 70afb5fa4..825628777 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -128,10 +128,10 @@ static List *transform_match_path(cypher_parsestate *cpstate, Query *query, cypher_path *path); static Expr *transform_cypher_edge(cypher_parsestate *cpstate, cypher_relationship *rel, - List **target_list); + List **target_list, bool valid_label); static Expr *transform_cypher_node(cypher_parsestate *cpstate, cypher_node *node, List **target_list, - bool output_node); + bool output_node, bool valid_label); static Node *make_vertex_expr(cypher_parsestate *cpstate, RangeTblEntry *rte, char *label); static Node *make_edge_expr(cypher_parsestate *cpstate, RangeTblEntry *rte, @@ -2139,6 +2139,64 @@ static Query *transform_cypher_with(cypher_parsestate *cpstate, wrapper); } +static bool match_check_valid_label(cypher_match *match, + cypher_parsestate *cpstate) +{ + ListCell *cell1; + ListCell *cell2; + cypher_path *path; + + foreach(cell1, match->pattern) + { + int i = 0; + path = (cypher_path*) lfirst(cell1); + + foreach(cell2, path->path) + { + if (i % 2 == 0) + { + cypher_node *node = NULL; + + node = lfirst(cell2); + + if (node->label) + { + label_cache_data *lcd = + search_label_name_graph_cache(node->label, + cpstate->graph_oid); + + if (lcd == NULL || + lcd->kind != LABEL_KIND_VERTEX) + { + return false; + } + } + } + else + { + cypher_relationship *rel = NULL; + + rel = lfirst(cell2); + + if (rel->label) + { + label_cache_data *lcd = + search_label_name_graph_cache(rel->label, + cpstate->graph_oid); + + if (lcd == NULL || lcd->kind != LABEL_KIND_EDGE) + { + return false; + } + } + } + i++; + } + } + + return true; +} + static Query *transform_cypher_clause_with_where(cypher_parsestate *cpstate, transform_method transform, cypher_clause *clause) @@ -2150,7 +2208,6 @@ static Query *transform_cypher_clause_with_where(cypher_parsestate *cpstate, cypher_call *call_self; Node *where; - if (is_ag_node(self, cypher_call)) { call_self = (cypher_call*) clause->self; @@ -2218,6 +2275,24 @@ static Query *transform_cypher_clause_with_where(cypher_parsestate *cpstate, static Query *transform_cypher_match(cypher_parsestate *cpstate, cypher_clause *clause) { + cypher_match *match_self = (cypher_match*) clause->self; + + if(!match_check_valid_label(match_self, cpstate)) + { + cypher_bool_const *l = make_ag_node(cypher_bool_const); + cypher_bool_const *r = make_ag_node(cypher_bool_const); + + l->boolean = true; + l->location = -1; + r->boolean = false; + r->location = -1; + + /*if the label is invalid, create a paradoxical where to get null*/ + match_self->where = (Node *)makeSimpleA_Expr(AEXPR_OP, "=", + (Node *)l, + (Node *)r, -1); + } + return transform_cypher_clause_with_where( cpstate, transform_cypher_match_pattern, clause); } @@ -3556,6 +3631,56 @@ static bool isa_special_VLE_case(cypher_path *path) return false; } +static bool path_check_valid_label(cypher_path *path, + cypher_parsestate *cpstate) +{ + ListCell *lc = NULL; + int i = 0; + + foreach (lc, path->path) + { + if (i % 2 == 0) + { + cypher_node *node = NULL; + + node = lfirst(lc); + + if (node->label) + { + label_cache_data *lcd = + search_label_name_graph_cache(node->label, + cpstate->graph_oid); + + if (lcd == NULL || lcd->kind != LABEL_KIND_VERTEX) + { + return false; + } + } + } + else + { + cypher_relationship *rel = NULL; + + rel = lfirst(lc); + + if (rel->label) + { + label_cache_data *lcd = + search_label_name_graph_cache(rel->label, + cpstate->graph_oid); + + if (lcd == NULL || lcd->kind != LABEL_KIND_EDGE) + { + return false; + } + } + } + i++; + } + + return true; +} + /* * Iterate through the path and construct all edges and necessary vertices */ @@ -3569,8 +3694,10 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, bool node_declared_in_prev_clause = false; transform_entity *prev_entity = NULL; bool special_VLE_case = false; + bool valid_label = true; special_VLE_case = isa_special_VLE_case(path); + valid_label = path_check_valid_label(path, cpstate); /* * Iterate through every node in the path, construct the expr node @@ -3618,7 +3745,7 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, /* transform vertex */ expr = transform_cypher_node(cpstate, node, &query->targetList, - output_node); + output_node, valid_label); entity = make_transform_entity(cpstate, ENT_VERTEX, (Node *)node, expr); @@ -3677,7 +3804,8 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, } } - expr = transform_cypher_edge(cpstate, rel, &query->targetList); + expr = transform_cypher_edge(cpstate, rel, &query->targetList, + valid_label); entity = make_transform_entity(cpstate, ENT_EDGE, (Node *)rel, expr); @@ -3964,7 +4092,8 @@ static Node *make_qual(cypher_parsestate *cpstate, static Expr *transform_cypher_edge(cypher_parsestate *cpstate, cypher_relationship *rel, - List **target_list) + List **target_list, + bool valid_label) { ParseState *pstate = (ParseState *)cpstate; char *schema_name; @@ -3980,31 +4109,20 @@ static Expr *transform_cypher_edge(cypher_parsestate *cpstate, { rel->label = AG_DEFAULT_LABEL_EDGE; } - else + else if(!valid_label) { /* * XXX: Need to determine proper rules, for when label does not exist * or is for an edge. Maybe labels and edges should share names, like * in openCypher. But these are stand in errors, to prevent * segmentation faults, and other errors. + * + * Update: Nonexistent and mismatched labels now return a NULL value to + * prevent segmentation faults, and other errors. We can also consider + * if an all-purpose label would be useful. */ - label_cache_data *lcd = - search_label_name_graph_cache(rel->label, cpstate->graph_oid); - - if (lcd == NULL) - { - ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("label %s does not exists", rel->label), - parser_errposition(pstate, rel->location))); - } + rel->label = NULL; - if (lcd->kind != LABEL_KIND_EDGE) - { - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("label %s is for vertices, not edges", rel->label), - parser_errposition(pstate, rel->location))); - } } if (rel->name != NULL) @@ -4077,7 +4195,16 @@ static Expr *transform_cypher_edge(cypher_parsestate *cpstate, } schema_name = get_graph_namespace_name(cpstate->graph_name); - rel_name = get_label_relation_name(rel->label, cpstate->graph_oid); + + if (valid_label) + { + rel_name = get_label_relation_name(rel->label, cpstate->graph_oid); + } + else + { + rel_name = AG_DEFAULT_LABEL_EDGE; + } + label_range_var = makeRangeVar(schema_name, rel_name, -1); alias = makeAlias(rel->name, NIL); @@ -4091,7 +4218,14 @@ static Expr *transform_cypher_edge(cypher_parsestate *cpstate, resno = pstate->p_next_resno++; - expr = (Expr *)make_edge_expr(cpstate, rte, rel->label); + if (valid_label) + { + expr = (Expr *)make_edge_expr(cpstate, rte, rel->label); + } + else + { + expr = (Expr*)makeNullConst(AGTYPEOID, -1, InvalidOid); + } if (rel->name) { @@ -4104,7 +4238,7 @@ static Expr *transform_cypher_edge(cypher_parsestate *cpstate, static Expr *transform_cypher_node(cypher_parsestate *cpstate, cypher_node *node, List **target_list, - bool output_node) + bool output_node, bool valid_label) { ParseState *pstate = (ParseState *)cpstate; char *schema_name; @@ -4120,30 +4254,20 @@ static Expr *transform_cypher_node(cypher_parsestate *cpstate, { node->label = AG_DEFAULT_LABEL_VERTEX; } - else + else if (!valid_label) { /* * XXX: Need to determine proper rules, for when label does not exist * or is for an edge. Maybe labels and edges should share names, like * in openCypher. But these are stand in errors, to prevent * segmentation faults, and other errors. + * + * Update: Nonexistent and mismatched labels now return a NULL value to + * prevent segmentation faults, and other errors. We can also consider + * if an all-purpose label would be useful. */ - label_cache_data *lcd = - search_label_name_graph_cache(node->label, cpstate->graph_oid); + node->label = NULL; - if (lcd == NULL) - { - ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("label %s does not exists", node->label), - parser_errposition(pstate, node->location))); - } - if (lcd->kind != LABEL_KIND_VERTEX) - { - ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("label %s is for edges, not vertices", - node->label), - parser_errposition(pstate, node->location))); - } } if (!output_node) @@ -4222,7 +4346,16 @@ static Expr *transform_cypher_node(cypher_parsestate *cpstate, } schema_name = get_graph_namespace_name(cpstate->graph_name); - rel_name = get_label_relation_name(node->label, cpstate->graph_oid); + + if (valid_label) + { + rel_name = get_label_relation_name(node->label, cpstate->graph_oid); + } + else + { + rel_name = AG_DEFAULT_LABEL_VERTEX; + } + label_range_var = makeRangeVar(schema_name, rel_name, -1); alias = makeAlias(node->name, NIL); @@ -4236,7 +4369,14 @@ static Expr *transform_cypher_node(cypher_parsestate *cpstate, resno = pstate->p_next_resno++; - expr = (Expr *)make_vertex_expr(cpstate, rte, node->label); + if (valid_label) + { + expr = (Expr *)make_vertex_expr(cpstate, rte, node->label); + } + else + { + expr = (Expr*)makeNullConst(AGTYPEOID, -1, InvalidOid); + } /* make target entry and add it */ te = makeTargetEntry(expr, resno, node->name, false); From 8e5497cd7ba99fbf7c4cafcc9901629383e0d6ff Mon Sep 17 00:00:00 2001 From: jbiz805 <49049733+jbiz805@users.noreply.github.com> Date: Wed, 16 Nov 2022 03:06:57 +0900 Subject: [PATCH 032/191] Update CONTRIBUTING.md (#348) Edited the details available in https://age.apache.org/contribution/how --- CONTRIBUTING.md | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 50a2c89e2..d13839179 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,15 +1,35 @@ # Contributing to Apache AGE -First off, thank you for considering contributing. +Welcome, future Contributor! -## Issues +First off, thank you for considering contributing to Apache AGE. Team AGE welcomes anyone who is willing to help us mature AGE to become a fully-featured graph database extension for PostgreSQL. -Issues are very valuable to this project. Issues can be questions, ideas, suggestions or bug reports. +There are multiple ways you can contribute to the Apache AGE and [Apache AGE Viewer](https://github.com/apache/age-viewer) projects. We hope that adding features, fixing bugs, and changing documentations can be fun and educational for anyone and everyone. -Questions are encouraged. Your questions let us know what is unclear. If you spent longer than expected finding an answer let us know that too. +## Code of Conduct -Thank you for raising issues. +The community members of Apache AGE are expected to follow the 'Apache Way'. Please read the [Code of Conduct](https://www.apache.org/foundation/policies/conduct) provided by Apache Software Foundation. + +## How to Start + +A great way to get involved in the project is to ask questions on the mailing lists, Apache AGE Discord, or the Apache Reddit forum (r/apacheage). Reviewing the list of projects in the Apache AGE and AGE Viewer GitHubs may help you understand the overall roadmap. + +Once you understand the ins and outs of Apache AGE, share your knowledge by helping the newcomers as well. Spending a few minutes to answer questions are a valuable open source community service, which also demonstrates your expertise. + +We strongly recommend you to subscribe the mailing lists, join the Apache AGE Discord and Apache AGE Reddit community (r/apacheage) to keep up to date on what's happening in AGE. Visit [joinus](https://age.apache.org/joinus) for pathways you can follow to help you get started. ## Pull Requests -Pull requests are a great way to get your ideas into this repository. Check out our list of good [first issues](https://github.com/apache/age/labels/good%20first%20issue) +Changes to AGE source code are proposed, reviewed, and committed via Github pull requests (described in Code Convention). Pull requests are a great way to get your ideas into this repository. Anyone can view and comment on active changes here. Reviewing others' changes are a good way to learn how the change process works and gain exposure to activity in various parts of the code. You can help by reviewing the changes, asking questions, or pointing out issues as simple as typos. + +## Documentation Changes + +You can propose changes to Apache AGE documentation, edit the Markdown source files for the Apache AGE website pages. + +## Bug Reports + +Ideally, bug reports are accompanied by a proposed code change to fix the bug. This isn't always possible, as those who discover a bug may not have the experience to fix it. A bug may be reported by creating a GitHub issue, but without creating a pull request. + +Bug reports are only useful, however, if they include enough information to understand, isolate and ideally reproduce the bug. Simply encountering an error does not mean a bug should be reported; search GitHub and inquire on the Apache AGE's dev mailing list first. Unreproducible bugs or simple error reports without context shall be closed. + +The more context about a bug, the better, such as: how the bug was introduced, by which commit, etc. It assists the committers in the decision process on how far the bug fix should be backported, when the pull request is merged. The pull request to fix the bug should narrow down the problem to the root cause. Data correctness/data loss bugs are very serious. Make sure the corresponding bug report GitHub issue is labeled as correctness or data-loss. Please send an email to dev@age.apache.org after submitting the bug report, to quickly draw attention to the issue. Performance issues are classified as bugs. The pull request to fix a performance bug must provide a benchmark to prove the problem is indeed fixed. From 4e9110d0b88812b08c316ef7df2ff07f98e3a066 Mon Sep 17 00:00:00 2001 From: Jamie Gaskins Date: Sun, 20 Nov 2022 20:50:51 -0500 Subject: [PATCH 033/191] Use Debian Buster base image (#243) postgres:11 is currently based on Debian Bullseye. Presumable it used to be based on Buster. See: https://packages.debian.org/search?suite=default§ion=all&arch=any&searchon=names&keywords=postgresql-server-dev --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index d0b449aed..11d882b2e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,7 +17,7 @@ # -FROM postgres:11 +FROM postgres:11-buster RUN apt-get update RUN apt-get install --assume-yes --no-install-recommends --no-install-suggests \ @@ -31,4 +31,4 @@ RUN cd /age && make install COPY docker-entrypoint-initdb.d/00-create-extension-age.sql /docker-entrypoint-initdb.d/00-create-extension-age.sql -CMD ["postgres", "-c", "shared_preload_libraries=age"] \ No newline at end of file +CMD ["postgres", "-c", "shared_preload_libraries=age"] From f49c322eee85e47e4cfe4a2b1cacdbe74c9f4496 Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Mon, 21 Nov 2022 09:33:58 -0800 Subject: [PATCH 034/191] Add the ability to pass parameters to the cypher function Added the ability to pass parameters to the cypher() function via a function called age_prepare_cypher(). This extra function is necessary because the cypher() function itself isn't actually executed - it is instead transformed and replaced. This means that it needs to have its input parameters resolved prior to that transform. However, parameters aren't resolved until the execution phase. So, another command to resolve them needs to run prior to the cypher() function call. This mainly impacts the drivers, which will need to be updated. Additionally, modified the golang driver as an example of this new usage. Added regression tests. --- Makefile | 2 + age--1.1.0.sql | 12 +- drivers/golang/age/age.go | 52 ++----- drivers/golang/go.mod | 2 +- drivers/golang/go.sum | 14 ++ drivers/golang/parser/Age.g4 | 3 +- regress/expected/analyze.out | 135 +++++++++++++++++ regress/sql/analyze.sql | 60 ++++++++ src/backend/parser/cypher_analyze.c | 178 +++++++++++++++++------ src/backend/utils/adt/age_session_info.c | 170 ++++++++++++++++++++++ src/include/utils/age_session_info.h | 29 ++++ 11 files changed, 571 insertions(+), 86 deletions(-) create mode 100644 drivers/golang/go.sum create mode 100644 regress/expected/analyze.out create mode 100644 regress/sql/analyze.sql create mode 100644 src/backend/utils/adt/age_session_info.c create mode 100644 src/include/utils/age_session_info.h diff --git a/Makefile b/Makefile index 8c685a33d..da84c31ce 100644 --- a/Makefile +++ b/Makefile @@ -57,6 +57,7 @@ OBJS = src/backend/age.o \ src/backend/utils/adt/agtype_parser.o \ src/backend/utils/adt/agtype_util.o \ src/backend/utils/adt/age_global_graph.o \ + src/backend/utils/adt/age_session_info.o \ src/backend/utils/adt/age_vle.o \ src/backend/utils/adt/cypher_funcs.o \ src/backend/utils/adt/ag_float8_supp.o \ @@ -93,6 +94,7 @@ REGRESS = scan \ age_global_graph \ age_load \ index \ + analyze \ drop srcdir=`pwd` diff --git a/age--1.1.0.sql b/age--1.1.0.sql index e5c42192a..6fe30add8 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -3385,8 +3385,9 @@ AS 'MODULE_PATHNAME'; -- -- query functions -- -CREATE FUNCTION ag_catalog.cypher(graph_name name, query_string cstring, - params agtype = NULL) +CREATE FUNCTION ag_catalog.cypher(graph_name name = NULL, + query_string cstring = NULL, + params agtype = NULL) RETURNS SETOF record LANGUAGE c AS 'MODULE_PATHNAME'; @@ -4156,6 +4157,13 @@ STABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; +CREATE FUNCTION ag_catalog.age_prepare_cypher(cstring, cstring) +RETURNS boolean +LANGUAGE c +STABLE +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + -- -- End -- diff --git a/drivers/golang/age/age.go b/drivers/golang/age/age.go index 38a629f21..3f8392058 100644 --- a/drivers/golang/age/age.go +++ b/drivers/golang/age/age.go @@ -76,29 +76,34 @@ func execCypher(cursorProvider CursorProvider, tx *sql.Tx, graphName string, col cypherStmt := fmt.Sprintf(cypher, args...) - buf.WriteString("SELECT * from cypher('") - buf.WriteString(graphName) - buf.WriteString("', $$ ") - buf.WriteString(cypherStmt) - buf.WriteString(" $$)") - buf.WriteString(" as (") - buf.WriteString("v0 agtype") + buf.WriteString("SELECT * from cypher(NULL,NULL) as (v0 agtype") + for i := 1; i < columnCount; i++ { buf.WriteString(fmt.Sprintf(", v%d agtype", i)) } - buf.WriteString(")") + buf.WriteString(");") stmt := buf.String() + // Pass in the graph name and cypher statement via parameters to prepare + // the cypher function call for session info. + + prepare_stmt := "SELECT * FROM age_prepare_cypher($1, $2);" + _, perr := tx.Exec(prepare_stmt, graphName, cypherStmt) + if perr != nil { + fmt.Println(prepare_stmt + " " + graphName + " " + cypher) + return nil, perr + } + if columnCount == 0 { - _, err := tx.Exec(stmt) + _, err := tx.Exec(stmt) if err != nil { fmt.Println(stmt) return nil, err } return nil, nil } else { - rows, err := tx.Query(stmt) + rows, err := tx.Query(stmt) if err != nil { fmt.Println(stmt) return nil, err @@ -133,33 +138,6 @@ func ExecCypherMap(tx *sql.Tx, graphName string, columnCount int, cypher string, return cypherMapCursor, err } -// // ExecCypher execute without return -// // CREATE , DROP .... */ -// func ExecCypher2(tx *sql.Tx, graphName string, cypher string, args ...interface{}) error { -// cypherStmt := fmt.Sprintf(cypher, args...) -// stmt := fmt.Sprintf("SELECT * from cypher('%s', $$ %s $$) as (v agtype);", -// graphName, cypherStmt) - -// _, err := tx.Exec(stmt) -// return err -// } - -// // QueryCypher execute with return -// // MATCH .... RETURN .... -// // CREATE , DROP .... RETURN ... -// func QueryCypher(tx *sql.Tx, graphName string, cypher string, args ...interface{}) (*CypherCursor, error) { -// cypherStmt := fmt.Sprintf(cypher, args...) -// stmt := fmt.Sprintf("SELECT * from cypher('%s', $$ %s $$) as (v agtype);", -// graphName, cypherStmt) - -// rows, err := tx.Query(stmt) -// if err != nil { -// return nil, err -// } else { -// return NewCypherCursor(1, rows), nil -// } -// } - type Age struct { db *sql.DB graphName string diff --git a/drivers/golang/go.mod b/drivers/golang/go.mod index bd27c5c16..81525d66f 100644 --- a/drivers/golang/go.mod +++ b/drivers/golang/go.mod @@ -22,7 +22,7 @@ module github.com/apache/age/drivers/golang go 1.16 require ( - github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20221020221120-327014a2b522 + github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210521184019-c5ad59b459ec github.com/lib/pq v1.10.2 github.com/stretchr/testify v1.7.0 ) diff --git a/drivers/golang/go.sum b/drivers/golang/go.sum new file mode 100644 index 000000000..13a472eb9 --- /dev/null +++ b/drivers/golang/go.sum @@ -0,0 +1,14 @@ +github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210521184019-c5ad59b459ec h1:EEyRvzmpEUZ+I8WmD5cw/vY8EqhambkOqy5iFr0908A= +github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210521184019-c5ad59b459ec/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/lib/pq v1.10.2 h1:AqzbZs4ZoCBp+GtejcpCpcxM3zlSMx29dXbUSeVtJb8= +github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/drivers/golang/parser/Age.g4 b/drivers/golang/parser/Age.g4 index 5ba157ace..c5516a90a 100644 --- a/drivers/golang/parser/Age.g4 +++ b/drivers/golang/parser/Age.g4 @@ -79,7 +79,7 @@ BOOL ; NULL - : 'null' + : 'null' ; @@ -125,4 +125,3 @@ fragment EXP WS : [ \t\n\r] + -> skip ; - \ No newline at end of file diff --git a/regress/expected/analyze.out b/regress/expected/analyze.out new file mode 100644 index 000000000..5b248385a --- /dev/null +++ b/regress/expected/analyze.out @@ -0,0 +1,135 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +LOAD 'age'; +SET search_path TO ag_catalog; +-- +-- Start of tests +-- +SELECT * FROM create_graph('analyze'); +NOTICE: graph "analyze" has been created + create_graph +-------------- + +(1 row) + +SELECT * FROM cypher('analyze', $$ CREATE (u) RETURN u $$) AS (result agtype); + result +---------------------------------------------------------------- + {"id": 281474976710657, "label": "", "properties": {}}::vertex +(1 row) + +-- should error due to invalid input to cypher function +SELECT * FROM cypher(NULL, NULL) AS (result agtype); +ERROR: a name constant is expected +LINE 1: SELECT * FROM cypher(NULL, NULL) AS (result agtype); + ^ +SELECT * FROM cypher('analyze', NULL) AS (result agtype); +ERROR: a dollar-quoted string constant is expected +LINE 1: SELECT * FROM cypher('analyze', NULL) AS (result agtype); + ^ +SELECT * FROM cypher(NULL, '') AS (result agtype); +ERROR: a name constant is expected +LINE 1: SELECT * FROM cypher(NULL, '') AS (result agtype); + ^ +SELECT * FROM cypher('', '') AS (result agtype); +ERROR: a dollar-quoted string constant is expected +LINE 1: SELECT * FROM cypher('', '') AS (result agtype); + ^ +SELECT * FROM cypher('analyze', '') AS (result agtype); +ERROR: a dollar-quoted string constant is expected +LINE 1: SELECT * FROM cypher('analyze', '') AS (result agtype); + ^ +-- should error due to bad cypher statement +SELECT * FROM cypher('analyze', $$ $$) AS (result agtype); +ERROR: syntax error at end of input +LINE 1: SELECT * FROM cypher('analyze', $$ $$) AS (result agtype); + ^ +-- should return false due to invalid input to age_prepare_function +SELECT * FROM age_prepare_cypher(NULL, NULL); + age_prepare_cypher +-------------------- + f +(1 row) + +SELECT * FROM age_prepare_cypher('analyze', NULL); + age_prepare_cypher +-------------------- + f +(1 row) + +SELECT * FROM age_prepare_cypher(NULL, ''); + age_prepare_cypher +-------------------- + f +(1 row) + +-- should return true but cypher should fail +SELECT * FROM age_prepare_cypher('analyze', ''); + age_prepare_cypher +-------------------- + t +(1 row) + +SELECT * FROM cypher(NULL, NULL) AS (result agtype); +ERROR: syntax error at end of input +LINE 1: SELECT * FROM cypher(NULL, NULL) AS (result agtype); + ^ +-- should return true and execute cypher command +SELECT * FROM age_prepare_cypher('analyze', 'MATCH (u) RETURN (u)'); + age_prepare_cypher +-------------------- + t +(1 row) + +SELECT * FROM cypher(NULL, NULL) AS (result agtype); + result +---------------------------------------------------------------- + {"id": 281474976710657, "label": "", "properties": {}}::vertex +(1 row) + +-- should error due to invalid input to cypher function +SELECT * FROM cypher(NULL, NULL) AS (result agtype); +ERROR: a name constant is expected +LINE 1: SELECT * FROM cypher(NULL, NULL) AS (result agtype); + ^ +-- should return true but cypher should fail +SELECT * FROM age_prepare_cypher('analyze', '$$ $$'); + age_prepare_cypher +-------------------- + t +(1 row) + +SELECT * FROM cypher(NULL, NULL) AS (result agtype); +ERROR: unexpected character at or near "$" +LINE 1: SELECT * FROM cypher(NULL, NULL) AS (result agtype); + ^ +-- drop graphs +SELECT * FROM drop_graph('analyze', true); +NOTICE: drop cascades to 2 other objects +DETAIL: drop cascades to table "analyze"._ag_label_vertex +drop cascades to table "analyze"._ag_label_edge +NOTICE: graph "analyze" has been dropped + drop_graph +------------ + +(1 row) + +-- +-- End of tests +-- diff --git a/regress/sql/analyze.sql b/regress/sql/analyze.sql new file mode 100644 index 000000000..881ef3ffd --- /dev/null +++ b/regress/sql/analyze.sql @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +LOAD 'age'; +SET search_path TO ag_catalog; + +-- +-- Start of tests +-- + +SELECT * FROM create_graph('analyze'); +SELECT * FROM cypher('analyze', $$ CREATE (u) RETURN u $$) AS (result agtype); + +-- should error due to invalid input to cypher function +SELECT * FROM cypher(NULL, NULL) AS (result agtype); +SELECT * FROM cypher('analyze', NULL) AS (result agtype); +SELECT * FROM cypher(NULL, '') AS (result agtype); +SELECT * FROM cypher('', '') AS (result agtype); +SELECT * FROM cypher('analyze', '') AS (result agtype); +-- should error due to bad cypher statement +SELECT * FROM cypher('analyze', $$ $$) AS (result agtype); + +-- should return false due to invalid input to age_prepare_function +SELECT * FROM age_prepare_cypher(NULL, NULL); +SELECT * FROM age_prepare_cypher('analyze', NULL); +SELECT * FROM age_prepare_cypher(NULL, ''); +-- should return true but cypher should fail +SELECT * FROM age_prepare_cypher('analyze', ''); +SELECT * FROM cypher(NULL, NULL) AS (result agtype); +-- should return true and execute cypher command +SELECT * FROM age_prepare_cypher('analyze', 'MATCH (u) RETURN (u)'); +SELECT * FROM cypher(NULL, NULL) AS (result agtype); +-- should error due to invalid input to cypher function +SELECT * FROM cypher(NULL, NULL) AS (result agtype); +-- should return true but cypher should fail +SELECT * FROM age_prepare_cypher('analyze', '$$ $$'); +SELECT * FROM cypher(NULL, NULL) AS (result agtype); + +-- drop graphs +SELECT * FROM drop_graph('analyze', true); + +-- +-- End of tests +-- diff --git a/src/backend/parser/cypher_analyze.c b/src/backend/parser/cypher_analyze.c index 1a8ea23e5..685c7cb0a 100644 --- a/src/backend/parser/cypher_analyze.c +++ b/src/backend/parser/cypher_analyze.c @@ -42,6 +42,7 @@ #include "parser/cypher_parse_node.h" #include "parser/cypher_parser.h" #include "utils/ag_func.h" +#include "utils/age_session_info.h" #include "utils/agtype.h" /* @@ -75,6 +76,7 @@ static Query *analyze_cypher_and_coerce(List *stmt, RangeTblFunction *rtfunc, char *graph_name, Oid graph_oid, Param *params); + void post_parse_analyze_init(void) { prev_post_parse_analyze_hook = post_parse_analyze_hook; @@ -302,15 +304,18 @@ static void convert_cypher_to_subquery(RangeTblEntry *rte, ParseState *pstate) { RangeTblFunction *rtfunc = linitial(rte->functions); FuncExpr *funcexpr = (FuncExpr *)rtfunc->funcexpr; - Node *arg; - Name graph_name; - Oid graph_oid; - const char *query_str; - int query_loc; - Param *params; - errpos_ecb_state ecb_state; - List *stmt; - Query *query; + Node *arg1 = NULL; + Node *arg2 = NULL; + Node *arg3 = NULL; + Name graph_name = NULL; + char *graph_name_str = NULL; + Oid graph_oid = InvalidOid; + const char *query_str = NULL; + int query_loc = -1; + Param *params = NULL; + errpos_ecb_state ecb_state = {{0}}; + List *stmt = NULL; + Query *query = NULL; /* * We cannot apply this feature directly to SELECT subquery because the @@ -326,28 +331,14 @@ static void convert_cypher_to_subquery(RangeTblEntry *rte, ParseState *pstate) parser_errposition(pstate, exprLocation((Node *)funcexpr)))); } - arg = linitial(funcexpr->args); - Assert(exprType(arg) == NAMEOID); + /* get our first 2 arguments */ + arg1 = linitial(funcexpr->args); + arg2 = lsecond(funcexpr->args); - graph_name = expr_get_const_name(arg); - if (!graph_name) - { - ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("a name constant is expected"), - parser_errposition(pstate, exprLocation(arg)))); - } + Assert(exprType(arg1) == NAMEOID); + Assert(exprType(arg2) == CSTRINGOID); - graph_oid = get_graph_oid(NameStr(*graph_name)); - if (!OidIsValid(graph_oid)) - { - ereport(ERROR, - (errcode(ERRCODE_UNDEFINED_SCHEMA), - errmsg("graph \"%s\" does not exist", NameStr(*graph_name)), - parser_errposition(pstate, exprLocation(arg)))); - } - - arg = lsecond(funcexpr->args); - Assert(exprType(arg) == CSTRINGOID); + graph_name = expr_get_const_name(arg1); /* * Since cypher() function is nothing but an interface to get a Cypher @@ -361,32 +352,131 @@ static void convert_cypher_to_subquery(RangeTblEntry *rte, ParseState *pstate) * may differ from what they are shown. This will confuse users. * * In the case above, the error position may not be accurate. */ - query_str = expr_get_const_cstring(arg, pstate->p_sourcetext); - if (!query_str) + query_str = expr_get_const_cstring(arg2, pstate->p_sourcetext); + + /* + * Validate appropriate cypher function usage - + * + * Session info OVERRIDES ANY INPUT PASSED and if any is passed, it will + * cause the cypher function to error out. + * + * If this is using session info, both of the first 2 input parameters need + * to be NULL, in addition to the session info being set up. Furthermore, + * the input parameters passed in by session info need to both be non-NULL. + * + * If this is not using session info, both input parameters need to be + * non-NULL. + * + */ + if (is_session_info_prepared()) { - ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("a dollar-quoted string constant is expected"), - parser_errposition(pstate, exprLocation(arg)))); + /* check to see if either input parameter is non-NULL*/ + if (graph_name != NULL || query_str != NULL) + { + Node *arg = (graph_name == NULL) ? arg1 : arg2; + + /* + * Make sure to clean up session info because the ereport will + * cause the function to exit. + */ + reset_session_info(); + + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("session info requires cypher(NULL, NULL) to be passed"), + parser_errposition(pstate, exprLocation(arg)))); + } + /* get our input parameters from session info */ + else + { + graph_name_str = get_session_info_graph_name(); + query_str = get_session_info_cypher_statement(); + + /* check to see if either are NULL */ + if (graph_name_str == NULL || query_str == NULL) + { + /* + * Make sure to clean up session info because the ereport will + * cause the function to exit. + */ + reset_session_info(); + + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("both session info parameters need to be non-NULL"), + parser_errposition(pstate, -1))); + } + } + } + /* otherwise, we get the parameters from the passed function input */ + else + { + /* get the graph name string from the passed parameters */ + if (!graph_name) + { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("a name constant is expected"), + parser_errposition(pstate, exprLocation(arg1)))); + } + else + { + graph_name_str = NameStr(*graph_name); + } + /* get the query string from the passed parameters */ + if (!query_str) + { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("a dollar-quoted string constant is expected"), + parser_errposition(pstate, exprLocation(arg2)))); + } } - query_loc = get_query_location(((Const *)arg)->location, - pstate->p_sourcetext); /* - * Check to see if the cypher function had any parameters passed to it, + * The session info is only valid for one cypher call. Now that we are done + * with it, if it was used, we need to reset it to free the memory used. + * Additionally, the query location is dependent on how we got the query + * string, so set the location accordingly. + */ + if (is_session_info_prepared()) + { + reset_session_info(); + query_loc = 0; + } + else + { + /* this call will crash if we use session info */ + query_loc = get_query_location(((Const *)arg2)->location, + pstate->p_sourcetext); + } + + /* validate the graph exists */ + graph_oid = get_graph_oid(graph_name_str); + if (!OidIsValid(graph_oid)) + { + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_SCHEMA), + errmsg("graph \"%s\" does not exist", graph_name_str), + parser_errposition(pstate, exprLocation(arg1)))); + } + + /* + * Check to see if the cypher function had a third parameter passed to it, * if so make sure Postgres parsed the second argument to a Param node. */ if (list_length(funcexpr->args) == 3) { - arg = lthird(funcexpr->args); - if (!IsA(arg, Param)) + arg3 = lthird(funcexpr->args); + if (!IsA(arg3, Param)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("third argument of cypher function must be a parameter"), - parser_errposition(pstate, exprLocation(arg)))); + parser_errposition(pstate, exprLocation(arg3)))); } - params = (Param *)arg; + params = (Param *)arg3; } else { @@ -454,13 +544,13 @@ static void convert_cypher_to_subquery(RangeTblEntry *rte, ParseState *pstate) } query = analyze_cypher(stmt, pstate, query_str, query_loc, - NameStr(*graph_name), graph_oid, params); + graph_name_str, graph_oid, params); } else { query = analyze_cypher_and_coerce(stmt, rtfunc, pstate, query_str, - query_loc, NameStr(*graph_name), - graph_oid, params); + query_loc, graph_name_str, graph_oid, + params); } pstate->p_lateral_active = false; diff --git a/src/backend/utils/adt/age_session_info.c b/src/backend/utils/adt/age_session_info.c new file mode 100644 index 000000000..193aaa104 --- /dev/null +++ b/src/backend/utils/adt/age_session_info.c @@ -0,0 +1,170 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#include "postgres.h" + +#include "funcapi.h" + +#include +#include "utils/age_session_info.h" + +/* + * static/global session info variables for use with the driver interface. + */ +static int session_info_pid = -1; +static char *session_info_graph_name = NULL; +static char *session_info_cypher_statement = NULL; +static bool session_info_prepared = false; + +static void set_session_info(char *graph_name, char *cypher_statement); + +/* function to set the session info. it will clean it, if necessary. */ +static void set_session_info(char *graph_name, char *cypher_statement) +{ + MemoryContext oldctx = NULL; + + if (is_session_info_prepared()) + { + reset_session_info(); + } + + /* we need to use a higher memory context for the data pointed to. */ + oldctx = MemoryContextSwitchTo(TopMemoryContext); + + if (graph_name != NULL) + { + session_info_graph_name = pstrdup(graph_name); + } + else + { + session_info_graph_name = NULL; + } + + if (cypher_statement != NULL) + { + session_info_cypher_statement = pstrdup(cypher_statement); + } + else + { + session_info_cypher_statement = NULL; + } + + /* switch back to the original context */ + MemoryContextSwitchTo(oldctx); + + session_info_pid = getpid(); + session_info_prepared = true; +} + +/* + * Helper function to return the value of session_info_cypher_statement or NULL + * if the value isn't set. The value returned is a copy, so please free it when + * done. + */ +char *get_session_info_graph_name(void) +{ + if (is_session_info_prepared() && + session_info_graph_name != NULL) + { + return pstrdup(session_info_graph_name); + } + + return NULL; +} + +/* + * Helper function to return the value of session_info_cypher_statement or NULL + * if the value isn't set. The value returned is a copy, so please free it when + * done. + */ +char *get_session_info_cypher_statement(void) +{ + if (is_session_info_prepared() && + session_info_cypher_statement != NULL) + { + return pstrdup(session_info_cypher_statement); + } + + return NULL; +} + +/* function to return the state of the session info data */ +bool is_session_info_prepared(void) +{ + /* is the session infor prepared AND is the pid the same pid */ + if (session_info_prepared == true && + session_info_pid == getpid()) + { + return true; + } + + return false; +} + +/* function to clean and reset the session info back to default values */ +void reset_session_info(void) +{ + /* if the session info is prepared, free the strings */ + if (session_info_prepared == true) + { + if (session_info_graph_name != NULL) + { + pfree(session_info_graph_name); + } + + if (session_info_cypher_statement != NULL) + { + pfree(session_info_cypher_statement); + } + } + + /* reset the session info back to default unused values */ + session_info_graph_name = NULL; + session_info_cypher_statement = NULL; + session_info_prepared = false; + session_info_pid = -1; +} + +/* AGE SQL function to prepare session info */ +PG_FUNCTION_INFO_V1(age_prepare_cypher); + +Datum age_prepare_cypher(PG_FUNCTION_ARGS) +{ + char *graph_name_str = NULL; + char *cypher_statement_str = NULL; + + /* both arguments must be non-NULL */ + if (PG_ARGISNULL(0) || PG_ARGISNULL(1)) + { + PG_RETURN_BOOL(false); + } + + graph_name_str = PG_GETARG_CSTRING(0); + cypher_statement_str = PG_GETARG_CSTRING(1); + + /* both strings must be non-NULL */ + if (graph_name_str == NULL || cypher_statement_str == NULL) + { + PG_RETURN_BOOL(false); + } + + set_session_info(graph_name_str, cypher_statement_str); + + PG_RETURN_BOOL(true); +} diff --git a/src/include/utils/age_session_info.h b/src/include/utils/age_session_info.h new file mode 100644 index 000000000..ebf0035ab --- /dev/null +++ b/src/include/utils/age_session_info.h @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#ifndef AGE_SESSION_INFO_H +#define AGE_SESSION_INFO_H + +bool is_session_info_prepared(void); +char *get_session_info_graph_name(void); +char *get_session_info_cypher_statement(void); +void reset_session_info(void); + +#endif + From c17d8330a7b323b4a5071cab47a8272b9ef43abd Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Tue, 22 Nov 2022 16:43:52 -0800 Subject: [PATCH 035/191] Add license header Added license header to the following 3 files - regress/sql/age_global_graph.sql regress/sql/age_load.sql regress/sql/index.sql Adjusted regression tests for these 3. --- regress/expected/age_global_graph.out | 29 ++++++++++++++++++++------ regress/expected/age_load.out | 18 ++++++++++++++++ regress/expected/index.out | 18 ++++++++++++++++ regress/sql/age_global_graph.sql | 30 +++++++++++++++++++++------ regress/sql/age_load.sql | 19 +++++++++++++++++ regress/sql/index.sql | 19 +++++++++++++++++ 6 files changed, 121 insertions(+), 12 deletions(-) diff --git a/regress/expected/age_global_graph.out b/regress/expected/age_global_graph.out index 171ec1bd5..9512a7a7d 100644 --- a/regress/expected/age_global_graph.out +++ b/regress/expected/age_global_graph.out @@ -1,9 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ LOAD 'age'; SET search_path TO ag_catalog; -- --- test delete_specific_GRAPH_global_contexts function +-- test delete_specific_GRAPH_global_contexts function -- --- create 3 graphs +-- create 3 graphs SELECT * FROM create_graph('age_global_graph_1'); NOTICE: graph "age_global_graph_1" has been created create_graph @@ -43,7 +61,7 @@ SELECT * FROM cypher('age_global_graph_3', $$ CREATE (v:vertex_from_graph_3) RET {"id": 844424930131969, "label": "vertex_from_graph_3", "properties": {}}::vertex (1 row) --- load contexts using the vertex_stats command +-- load contexts using the vertex_stats command SELECT * FROM cypher('age_global_graph_3', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); result ----------------------------------------------------------------------------------------------------------- @@ -106,11 +124,10 @@ SELECT * FROM cypher('age_global_graph_3', $$ RETURN delete_global_graphs('age_g false (1 row) - -- --- test delete_GRAPH_global_contexts function +-- test delete_GRAPH_global_contexts function -- --- load contexts again +-- load contexts again SELECT * FROM cypher('age_global_graph_3', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); result ----------------------------------------------------------------------------------------------------------- diff --git a/regress/expected/age_load.out b/regress/expected/age_load.out index bae5924b3..5e74eaae6 100644 --- a/regress/expected/age_load.out +++ b/regress/expected/age_load.out @@ -1,3 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ \! cp -r regress/age_load/data regress/instance/data/age_load LOAD 'age'; SET search_path TO ag_catalog; diff --git a/regress/expected/index.out b/regress/expected/index.out index a27ca5be0..c4f9012b3 100644 --- a/regress/expected/index.out +++ b/regress/expected/index.out @@ -1,3 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ \! cp -r regress/age_load/data regress/instance/data/age_load LOAD 'age'; SET search_path TO ag_catalog; diff --git a/regress/sql/age_global_graph.sql b/regress/sql/age_global_graph.sql index a62d3358a..fa2dba9a7 100644 --- a/regress/sql/age_global_graph.sql +++ b/regress/sql/age_global_graph.sql @@ -1,11 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + LOAD 'age'; SET search_path TO ag_catalog; -- --- test delete_specific_GRAPH_global_contexts function +-- test delete_specific_GRAPH_global_contexts function -- --- create 3 graphs +-- create 3 graphs SELECT * FROM create_graph('age_global_graph_1'); SELECT * FROM cypher('age_global_graph_1', $$ CREATE (v:vertex_from_graph_1) RETURN v $$) AS (v agtype); @@ -15,7 +34,7 @@ SELECT * FROM cypher('age_global_graph_2', $$ CREATE (v:vertex_from_graph_2) RET SELECT * FROM create_graph('age_global_graph_3'); SELECT * FROM cypher('age_global_graph_3', $$ CREATE (v:vertex_from_graph_3) RETURN v $$) AS (v agtype); --- load contexts using the vertex_stats command +-- load contexts using the vertex_stats command SELECT * FROM cypher('age_global_graph_3', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); SELECT * FROM cypher('age_global_graph_2', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); SELECT * FROM cypher('age_global_graph_1', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); @@ -38,12 +57,11 @@ SELECT * FROM cypher('age_global_graph_2', $$ RETURN delete_global_graphs('age_g SELECT * FROM cypher('age_global_graph_1', $$ RETURN delete_global_graphs('age_global_graph_1') $$) AS (result agtype); SELECT * FROM cypher('age_global_graph_3', $$ RETURN delete_global_graphs('age_global_graph_3') $$) AS (result agtype); - -- --- test delete_GRAPH_global_contexts function +-- test delete_GRAPH_global_contexts function -- --- load contexts again +-- load contexts again SELECT * FROM cypher('age_global_graph_3', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); SELECT * FROM cypher('age_global_graph_2', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); SELECT * FROM cypher('age_global_graph_1', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); diff --git a/regress/sql/age_load.sql b/regress/sql/age_load.sql index 3516a170b..105c2fa60 100644 --- a/regress/sql/age_load.sql +++ b/regress/sql/age_load.sql @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + \! cp -r regress/age_load/data regress/instance/data/age_load LOAD 'age'; diff --git a/regress/sql/index.sql b/regress/sql/index.sql index 9e1cd0434..95322082d 100644 --- a/regress/sql/index.sql +++ b/regress/sql/index.sql @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + \! cp -r regress/age_load/data regress/instance/data/age_load LOAD 'age'; From ed44f91cb2607605ec2e225248e9ca46e146c215 Mon Sep 17 00:00:00 2001 From: Dehowe Feng Date: Wed, 23 Nov 2022 15:33:44 -0800 Subject: [PATCH 036/191] Modify the python driver's parameterization Modified the python driver to pass parameters to the cypher() function via age_prepare_cypher() --- drivers/python/age/age.py | 53 +++++++++++++++++++++++--------- drivers/python/age/exceptions.py | 2 +- 2 files changed, 40 insertions(+), 15 deletions(-) diff --git a/drivers/python/age/age.py b/drivers/python/age/age.py index 2c59610a6..7ba4a27f7 100644 --- a/drivers/python/age/age.py +++ b/drivers/python/age/age.py @@ -17,6 +17,7 @@ import psycopg2 from psycopg2 import errors from psycopg2 import extensions as ext +from psycopg2 import sql from .exceptions import * from .builder import ResultHandler , parseAgeValue, newResultHandler @@ -47,15 +48,15 @@ def setUpAge(conn:ext.connection, graphName:str): # Create the graph, if it does not exist def checkGraphCreated(conn:ext.connection, graphName:str): with conn.cursor() as cursor: - cursor.execute("SELECT count(*) FROM ag_graph WHERE name=%s", (graphName,)) + cursor.execute(sql.SQL("SELECT count(*) FROM ag_graph WHERE name={graphName}").format(graphName=sql.Literal(graphName))) if cursor.fetchone()[0] == 0: - cursor.execute("SELECT create_graph(%s);", (graphName,)) + cursor.execute(sql.SQL("SELECT create_graph({graphName});").format(graphName=sql.Literal(graphName))) conn.commit() def deleteGraph(conn:ext.connection, graphName:str): with conn.cursor() as cursor: - cursor.execute("SELECT drop_graph(%s, true);", (graphName,)) + cursor.execute(sql.SQL("SELECT drop_graph({graphName}, true);").format(graphName=sql.Literal(graphName))) conn.commit() @@ -76,11 +77,7 @@ def buildCypher(graphName:str, cypherStmt:str, columns:list) ->str: columnExp.append('v agtype') stmtArr = [] - stmtArr.append("SELECT * from cypher('") - stmtArr.append(graphName) - stmtArr.append("', $$ ") - stmtArr.append(cypherStmt) - stmtArr.append(" $$) as (") + stmtArr.append("SELECT * from cypher(NULL,NULL) as (") stmtArr.append(','.join(columnExp)) stmtArr.append(");") return "".join(stmtArr) @@ -101,7 +98,7 @@ def execSql(conn:ext.connection, stmt:str, commit:bool=False, params:tuple=None) raise cause except Exception as cause: conn.rollback() - raise SqlExcutionError("Excution ERR[" + str(cause) +"](" + stmt +")", cause) + raise SqlExecutionError("Execution ERR[" + str(cause) +"](" + stmt +")", cause) def querySql(conn:ext.connection, stmt:str, params:tuple=None) -> ext.cursor : @@ -115,23 +112,51 @@ def execCypher(conn:ext.connection, graphName:str, cypherStmt:str, cols:list=Non if conn == None or conn.closed: raise _EXCEPTION_NoConnection - stmt = buildCypher(graphName, cypherStmt, cols) + cursor = conn.cursor() + #clean up the string for mogrificiation + cypherStmt = cypherStmt.replace("\n", "") + cypherStmt = cypherStmt.replace("\t", "") + cypher = str(cursor.mogrify(cypherStmt, params)) + cypher = cypher[2:len(cypher)-1] + + preparedStmt = "SELECT * FROM age_prepare_cypher({graphName},{cypherStmt})" cursor = conn.cursor() try: - cursor.execute(stmt, params) + cursor.execute(sql.SQL(preparedStmt).format(graphName=sql.Literal(graphName),cypherStmt=sql.Literal(cypher))) + except SyntaxError as cause: + conn.rollback() + raise cause + except Exception as cause: + conn.rollback() + raise SqlExecutionError("Execution ERR[" + str(cause) +"](" + preparedStmt +")", cause) + + stmt = buildCypher(graphName, cypher, cols) + + cursor = conn.cursor() + try: + cursor.execute(stmt) return cursor except SyntaxError as cause: conn.rollback() raise cause except Exception as cause: conn.rollback() - raise SqlExcutionError("Excution ERR[" + str(cause) +"](" + stmt +")", cause) + raise SqlExecutionError("Execution ERR[" + str(cause) +"](" + stmt +")", cause) def cypher(cursor:ext.cursor, graphName:str, cypherStmt:str, cols:list=None, params:tuple=None) -> ext.cursor : - stmt = buildCypher(graphName, cypherStmt, cols) - cursor.execute(stmt, params) + #clean up the string for mogrificiation + cypherStmt = cypherStmt.replace("\n", "") + cypherStmt = cypherStmt.replace("\t", "") + cypher = str(cursor.mogrify(cypherStmt, params)) + cypher = cypher[2:len(cypher)-1] + + preparedStmt = "SELECT * FROM age_prepare_cypher({graphName},{cypherStmt})" + cursor.execute(sql.SQL(preparedStmt).format(graphName=sql.Literal(graphName),cypherStmt=sql.Literal(cypher))) + + stmt = buildCypher(graphName, cypher, cols) + cursor.execute(stmt) # def execCypherWithReturn(conn:ext.connection, graphName:str, cypherStmt:str, columns:list=None , params:tuple=None) -> ext.cursor : diff --git a/drivers/python/age/exceptions.py b/drivers/python/age/exceptions.py index c023b5371..7bbb5b4be 100644 --- a/drivers/python/age/exceptions.py +++ b/drivers/python/age/exceptions.py @@ -52,7 +52,7 @@ class NoCursor(Exception): def __repr__(self) : return 'No Cursor' -class SqlExcutionError(Exception): +class SqlExecutionError(Exception): def __init__(self, msg, cause): self.msg = msg self.cause = cause From 69f9a91f3e547ac17b034fbc11c463e1b4fa6ac3 Mon Sep 17 00:00:00 2001 From: Luke Hinds <7058938+lukehinds@users.noreply.github.com> Date: Mon, 28 Nov 2022 18:51:52 +0000 Subject: [PATCH 037/191] Implement CI testing for Golang Driver (#372) This change will implement running of the go driver unit tests upon every pull commit made to the `drivers/golang` code. It uses the `paths` directive to ensure the github action workflow only runs when the go driver code is changed. The docker-compose file is required to instaniate a postgres instance, needed for unit testing. --- .github/workflows/go-driver.yml | 33 +++++++++++++++++++++++++++++++ drivers/golang/docker-compose.yml | 10 ++++++++++ 2 files changed, 43 insertions(+) create mode 100644 .github/workflows/go-driver.yml create mode 100644 drivers/golang/docker-compose.yml diff --git a/.github/workflows/go-driver.yml b/.github/workflows/go-driver.yml new file mode 100644 index 000000000..52febad64 --- /dev/null +++ b/.github/workflows/go-driver.yml @@ -0,0 +1,33 @@ +name: Go Driver Tests + +on: + push: + branches: [ "master" ] + paths: + - 'drivers/golang' + pull_request: + branches: [ "master" ] + +jobs: + build: + runs-on: ubuntu-latest + defaults: + run: + working-directory: drivers/golang/age/ + + steps: + - uses: actions/checkout@v3 + + - name: Run apache/age docker image + run: docker-compose up -d + + - name: Set up Go + uses: actions/setup-go@v3 + with: + go-version: 1.16 + + - name: Build + run: go build -v ./... + + - name: Test + run: go test . -v diff --git a/drivers/golang/docker-compose.yml b/drivers/golang/docker-compose.yml new file mode 100644 index 000000000..668eb19d3 --- /dev/null +++ b/drivers/golang/docker-compose.yml @@ -0,0 +1,10 @@ +version: "3.3" +services: + db: + image: apache/age + environment: + - POSTGRES_USER=postgres + - POSTGRES_PASSWORD=agens + - POSTGRES_DB=postgres + ports: + - 5432:5432 \ No newline at end of file From 4d4173edfad73d4bc8eef545b87eeac535e9739f Mon Sep 17 00:00:00 2001 From: Eya Badal Date: Mon, 28 Nov 2022 11:07:10 -0800 Subject: [PATCH 038/191] Update README.md Added AGE logo and more AGE description. --- README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/README.md b/README.md index 4223e4ce8..50c91f505 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,27 @@

+
+ +

+ + + + + + is the leading multi-model graph database

+ + + +

Graph Processing & Analytics for Relational Databases


+ +
+ + +

From bce56eda96e90486ef07cb48709aa9ce202faf55 Mon Sep 17 00:00:00 2001 From: eyab Date: Mon, 28 Nov 2022 16:09:26 -0800 Subject: [PATCH 039/191] added new images for README --- img/AGE.png | Bin 0 -> 21332 bytes img/agce.gif | Bin 0 -> 1692177 bytes img/age-01.png | Bin 0 -> 599716 bytes img/age-02.png | Bin 0 -> 633093 bytes img/age-03.png | Bin 0 -> 465950 bytes img/apple.svg | 4 ++++ img/community.svg | 14 ++++++++++++++ img/contents.svg | 16 ++++++++++++++++ img/contributing.svg | 12 ++++++++++++ img/docker.svg | 1 + img/documentation.svg | 7 +++++++ img/features.svg | 12 ++++++++++++ img/gettingstarted.svg | 9 +++++++++ img/installation.svg | 9 +++++++++ img/pg.svg | 1 + img/tick.svg | 16 ++++++++++++++++ img/tux.svg | 1 + img/visualization.svg | 8 ++++++++ 18 files changed, 110 insertions(+) create mode 100644 img/AGE.png create mode 100644 img/agce.gif create mode 100644 img/age-01.png create mode 100644 img/age-02.png create mode 100644 img/age-03.png create mode 100644 img/apple.svg create mode 100644 img/community.svg create mode 100644 img/contents.svg create mode 100644 img/contributing.svg create mode 100644 img/docker.svg create mode 100644 img/documentation.svg create mode 100644 img/features.svg create mode 100644 img/gettingstarted.svg create mode 100644 img/installation.svg create mode 100644 img/pg.svg create mode 100644 img/tick.svg create mode 100644 img/tux.svg create mode 100644 img/visualization.svg diff --git a/img/AGE.png b/img/AGE.png new file mode 100644 index 0000000000000000000000000000000000000000..278d7baf607edaa72f0fd30827c94ead14a74ad8 GIT binary patch literal 21332 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 literal 0 HcmV?d00001 diff --git a/img/agce.gif b/img/agce.gif new file mode 100644 index 0000000000000000000000000000000000000000..85361758b84ab57df639219c47c940b86cb14f80 GIT binary patch literal 1692177 zcmeEshf`C}7jH-fgn$J^x_}y_7<%Y|&;<;FhzLlRA{crRX#s*rvw~8jgGdQQIuZ!I z_l|~M1izspEzjS~`!C)*`NF?hqgWpaJNvID*-1 z7}yP&_*~)FpTnE0Sub8;y>7`W@QhW!jrFGAMSjam{1%r4-LKqmzjD)qOZ^SE_9?H% zBCpmOZ+okNO0bZ`Q(?(_!jH1W)Lq3r+wMq6-%)UstSXhYJeLm{S5VPXd^x1#X{{XS zsN!I*8r+N44^p#tRP(XNc-dnDoiGs-8rpX?JS#Qu?%L*Wv?Fmk!Oc36INb=GZj^_f zP3T<@hr2#bcV9j;Ff=xBNHcovZxZGEAi&+s+|tbM!=unrbKgMoqy?+^;3v+BHhzJ2 zpXcn8q8u{f937mTzQj3u;9NhPJjufPHsU_-jAw+!sf5U-me3vg}tP2E*almW`Ap#D=I85DlRP|mX*}?m9(vtHH=ia z=2rw1e*a!o)jCmA+gQ`nR{OcKc3{2s=UJUUu`aB|Fe5^xVN{bcXGXVX||7Y(!aGjSlcs19vs>_8y*=Q z{qb{jc4h3JEU%Ae^-WC9PEJlvO;1hzTAZmFotd4R-TyQ9bMEKj%CBGZzbLQ zqod>FzvpMi$Hyn9CnslTr#pwIC#R=p|8VvXXNP-d$A@PpM`!<(|5N|d{2M(xJO79C z^S$%))1&j#e^3AG(P*^mvwtfr(m5<~|80IvT9Lm2d}-JpJX{7M;XQGJ#c4FIA^3tL-(1l*?>qS$0PPKPHA-w>+oo-IcSi z7G34JJxNHr?o{21yuK8a*T!sDMgG7SG@g-1ud-k$Tj$+v%kIjrBl$`*x@mgf3&*~h zRk+M`fB!a7YE6#exm#5`uE|T{2hizq>KlQ(gM2DHL>pSHFfh zPmaDUV%1wyw%CyZ`V9YP^2`?5nT-?-vPwfzPm^W_$6+R6uS=gZ%D`!_6uDd1>AL@5u_+U;T~shyPK? zuW5Yuel+~uT^srKWZ*~R$su*I=gYmOAOHN)Zcmc$%B}h3k2#z8mZLiR%2f!C?Ql_mtL;uC5jqX+330+tQ(3 z1b`VwU49qWtQ7t(X*k&UT}pzAY!X}9T{p`*Z+_b>@0I<%Suv<3vQ;^1>bmuP(y^xq z1VLaozV7HuY}AwtJKsu&JAM08w^{Z3Pd&9=%=@GF9*TV* zGkH?%Gj3tGwLkvEkNIHIHi_q8%0Amoc0eG1^I!(oA$B+`Jaa6ju;b)oM>^}Ix!{09 zHvu(37UUorL@yMN21QBrqZeZN`bmqg6;czuX@8V^KaR!8Dy7^`E#aP$Qpzb*KN+VfA056){ZnvQ0|6~2P(@$bfg z^sGSb_u-cjN;Ztf{tSli7b20dnM_Z0$eh#EC{%AI+^>_&drT#unX*`E1f5m^&h2O& z{j5t#ovk+&wqMX$Lh>rq_TvU`ni1PPTC58j95Zq zK|IH=vbk4vIuxe2Sg%_SRU%(Mbf=^5VK#rnpJ_CTdn-39aJF7a| zVOK)|AUc0Kpea?IRot3Tq)q}_(xVk%x}oqZg52YjcGEG~JYqH-{<#5@1)+=lsK-DF>hZ*|YypTNU<3UjG{$K9VhpAQ?> z3`zqhdVU@h9#&GR1T`@(wdSr^I;+G8HhO?XKkp@;tpagVAp5uQ+}HLIUM>%81|tQ) zYJd|MA>Iwml<=9P}}utGvi*!W?dX7<*RsfFR<4iwIR=68wTig zLck>G9&5CaAuAyH?7jP~%h$kgrX_)itwgPt#@~RxaMmiZ@Yy;5R}m}Y1>E-wzW!*_ z;z7DQC~JVPQ(o_&yn028V5``E6snN!f}wO4?OMudN7IV_s>00Qe*gZ8^uyj&m6N{% zq43HKn8BJl*YRMqVP)3U;x*1GyYdf>qF``nWQe~Y?>VJ|oj0@ue{G5`)OADf;lcVn zzk`bVQ;y|-dfTTz$U=yhhpKz%`JXlw%HF~YZO6JB{dBi65 zZ8|EROqtJH2d#>%1FSRosFNM4EAuQ?n`i)-qr9vp62LgnoieE|nNlt}H!}RSEBj!* zr{;#~Tc2;)vm0v=3mozd^kELfI$tqP@tK!~9rsVHN9bG+HA?Yxo;9JS^_Jmw%;VDq z4nI_oU*O>JO>4UMe>zk*_+cUMhxmeNgHF{MQ{Ub~(eP7#0yDLB$9b$SbK9xIIbYHG z&Osk(MfB0&&|ibs4Ax|Uy9$r)9rs`CG3NS-C~L_y*e`s1wm}Id722@OlP?)~k4e7=)B(6Az>YSz^~@yX(9=mhP06u)jQ*GhpQD<|6J zN$o7l9zt8`V?g|;JAk=Sg&ZZx_KDDWymiRsR4U;P3V7woQTx5~ZNk9NyFBk=!t>u2 z^7qa*9@CB|2Ywt>51jq^{h*xtzppfE{rP_Q8U4!qnzjHG5JtHia^%v4SLtoe4tc-0 zwH@4aemD>^@5lb8;omO4Dp7btlm{aE(ZuxW2UA12XAHND&8~)BLWN!Fun)?6 z8{8I3CkY~WJ(b*8xl<$=IJu8jXHtgIGc&Jh0Sm8a#yu*F?YJbE5;?=6a{(JZlJ#OY6mR(^Dq_zV zjI~iq1OWK~NB~IDnocPyoYMYe>59MV1IG)9Sh87cH!2bQDDiS~1a#lyI+$*JoF(ai zr4ImRVs$rb6?^AM7lV!otCnP<0D=c0VB+iIRZ)zOgoD4I>5zNDz9#z6&cFeN1kf=6 zz@}7_TL4f24FF=HK&+?$c54U{=U%;lZ;_2; zuIx0assgD60Qddr*eL*ZqBWB0QSJNaqDcyXAwqj9g|jY`TjAOP34W5uVu{1PH%V1X z!ro*E?FnFWa$=cY()ryPuhx>dIBLXm!&J&8yLQLJ%ZzDZ&^uuAejgiiP))Q}V2;k` z9KE_6{plRT;~d`=KAbdj5;AMA?NQK#SSgC9Sm3p)-wVuytQ$w#4XM21hlV#Ib?1=G z(}~Q})I1!cPwXnoIyT=oFyH@keqddG&~$$AaegRgLAXLegn2w_S;2sgY@4?45pmfW{lq+7rK~c z;+y}9)JMBcy2vRq;*xWiS_hdrGME+=N;(Fa8qrMiNal^YlFjLoKgT6h&e9!)(mnIi zgTT_G&!xw8rKi)S=f|Z0E+SBo2!2e2z97=45E;3MR2)Mcma!G>Hs1MYWbccJ3!7Yv ziw{uUW7l3S&l_P3V9uc9!Is~AQI1F{zg=H0I#VuwQjX-RkW{RYeq13-dr^T(sZgk| zP@1VwIjKN%RjMmiYCNvgN+}nbp%a<`2x!`8A6Fg+xM=wZicPyHcH-;9U4Lffigk!x z|NGsVtIAff%KmYcp{&tAl2$gHNiR zPxQ@Bih`4}#v`6)Tw_5h)CkGT*>}B?vU`)DSo`*I?VA_1i7B=3U)QF5tNr-9Hua=7 zO|dTPab4z%x{Q>%oY!^VzSZUZt}8mJD^{#8e_UVoqMn#iU-`Pe{#$+3@A`(5`bNcu zmd6dvFB(WG4Xs?Y>Pg-auHoj#U$}*eAE*__o-|CRG)~ty&dxOcJZT)H+4`l|vQ6dG zxc`l!r2N>Z|FJpqmgfSUwVB7rSP&>#|h zDv7aybRvA4<8lU_!0S_MDEd+Ydr&h+YBOg;GxuyW?`bnXcZ+~hi;zXj&7c-UYRm10 z7SY)j@zWM0H(64NENwxS4I-mb$w(%;?nIVdEX&o$Y?dZ0`&5=OVqXEe z`AlYR7uq@#(M(Nfrd2(rpxKV#(~eN?&Tys92#e0Bpw8&j&KO!lXY6ce{Ap(*ch_5` zuJ;yQAA`D*Q@cJlbfwOArJr_XaCg;(cGL|L3WslFPFY5%7nZFF|6R!^a`%)g^;BB) zR0Z|ar1sP`^fb)&{5b6)ard?;^|o5{wg>fgruKF>^!Cp7_Mi3+a`$x>`HzKOcuC(3 zC}*Rgnd^}7X=E&gyMIBcf61bMC8&QbwSS|be{;6~&uKrEdtgUtV9#RUAZXwyb>O&R z;BgNnC1rIXM?OfLzk3?u2>GSzZ~L78{%vn;+`Ag zJsaZZ85U3;7P1_^`EnSMHhjBrShRT9)wJ6?uMfP{M@O?9k$pLWN*hsV98sDZQ8^ny z^Ngx1kIrv0gNvU%@)#V;xWG6!YEN#rZam-?C=*}F0CNQFZ z)~8`P?)Y-tDQ(=Pas1ibxck}o!Lw0_8+)PBIPT?yf7(P~<3!NhMDW>!EVGZc+aN7` z&|q#XI&CthaWZypGX88bk!R}d+2|9V5p$!7W%PJx<5cS0RQlOe2G4Ys<$!0Jmbby+ zC*|qF#_6KD>5{W)V%&&l+^AjH)MuWVnzWg^#+in>nH1%jr)7P<%Fmwb*;Xsx%K}HV zF-LS2&pI#9d}Gefp+}QtXc6N$(Hiu)L%~zh?HMw^~7T$j5J)H>u zSu|Cra1S^A&%Mn(SAcH;er8$1*F)hQ4$RpX^MMAjYi_ex0*g@I&uN?Bqd7CZ+P3MMva7m&}BN(S)?}y@d>>F(ka3%Jehz-$_Py zEfJoY!L*EJS+Hh4^kzcHz&GRINrOx@BC|p;%W?)&5|YBzKSds7BqEs)SC^LgITr^l z4q1H`Nld+=_w()HCWXJovCPMA@Jb59TE_g{9}`mmreYEkGI#}EvS@4t&x+6+M=q}o zG96gclPHu$Eb{`EWhQjRxql{Ll6jk!xEAwc?bT1_0RMpn%Z1t0=^cA!8V>T1%Hl9c z{};>H$j@0BdO?4XafQOrYYjicF+8+h>c=v6urljY>4_xfjX|bVES#7DUO}%#!Y7tV z;D=P`D2}O)2=$?|6o+0QW8r-ih7ly3Mua`L4rv@*sr|E*Ey0vN$P$^jK05e2SQ*|! z1wG`4SGSjHRBKSzzs3jk)K zHN!`K#*a8gh6HLBj&X31`2zF0cBA_vkB3^l-BTI&XRyp0Na%Gmqc@J;hXmH6(kGz* zC;%>41EBZO7ic(!`!p&`T?Y7J1}F#zQRRnNTVGIOfu{3AmJ^x9eA2Z-_H@4N={4=? z|JpO8?P2-$??2zu)cvN9V^~Q1E%%GwCj)%*7o$=Lq#Nn!%DSrxfGQ;J+|K~}3^J0= zp#&_HMh!B4a_Ad!=>O#~Fyyf1SrEHWU)rWKHY=qlUOP;{#na-Mgn_NK@s<0e=|1DsnF*XmiAys5^lXUgkF_$ zLLvPI((aA&7|u48fP;|G4i)Hg5|~1~pihMAg`UMBJ)h%F$L>HP_?QPtV10f_5Eb+s zdjL?2n?Z*|n0YmlvGeLt%seU)97YQoQHxA2T-BSfcM?hO6OD&&^SzUNcrIg`wPbKj z_#tPQUCV!rX?&6Ii|CA35;bF#U!H?GP1dmZpV6F~?C?)_Kx|A(k(}S1MeXNfd6!q* zK9_`SH3UPrOp7K$9``s4>hyiNVwi-Y8rgn(bMa=J|5?HA;+ywce|d$Cv{$?3g}rk| zAGL#H-!=y2#A04Q*s<^a5N4}19($|VLl3q5SgJksl7hZ@K<`QPt6L%7q@{P|t5XRW zRhnMFebME?UI`l59Lj5PMD=LNv*bY;P9;40t0R0ZAo}WM1--o$Calavi~hUWpXXVEGkMSfi0A(+v_a5_5C4zWSzy6d#J z+QA%N*9=Q)!r#j&bv=!h=_a+6N&4Enf_qhdEo)cQzVY3}_};z*m$^OGs{E3dSrWU6t!lU{Oz(13EB zms1v92e*rg*y`tJ{eNXSUz9r&EnnYpXUR6t+P-P&&KbMO>Do(o>vPC~zgue1*UTs$ zu8v$N_w(UbdEDOMKkRmCekDv|Zcb_sB_HO7$*3Z3UW4(P?H2Lms62CX=Y?l6tQgp9f&8v5>|F2!~dE?>A9jtTEIZDmys-g;k~}}h^{RPPy$aO&enGYVdC#2=C9giY)zo$mmrq)$b+u)AT3$-d z8a%F*neENpBKK0v(>}?sHtPnlqSK+`_}_UibyvY&!k&b89&{;DW89emt6%II{hETq%jHx< z&bWq;YVfTrpWhA-DSz=82wrRXb$+FWbVBDQiBZ%v{<9dStKR~;r>prO+3(8N2Lm*G zn*uvX6V*b=xM#&O6eVM-tY5oECI`+DTgvv-CM!8EA6rRYn^uOp2>di92l9^%bsEJpC@Roj{N^sD)@^d%Aq!uNYeRne&pT6w8&UaCcM#xi-G(}N!zicJCVb6% zOc?)G?*U`<2L=yTneHK$farMl#Wii!N~1V8p`4F9YufVCx9U8sy}64o7u>nZ$wF{{ z&vm>BTc_w=-23_;f7EO3YQ5>|VDDb8nNFzE!9^DTz0rJChzmAS!6Xallb`#oK=xPy z{=C;a^$8wfZjm&Ux8nZQ$Zl2WqDyTSlFjQ*pQVvxhe=udyQ0p8+d(V3SE`2coyt60 zUV3J#2|)`opfYzwrVbM9PU+wwkj*DktY#=;*yWYv4(U20qwr_hoX1R&G;VrDvli3w z^2oE_eDT{XURD}hH2$b3kQa}JKbpd0=sQ#jnkPSGvEp|09>x`3Ou#0GmFE_VI>1B- zwj?s=d?@U8!ytG;b{^Dr{5Z&*T2~3my-#dvb|qcMGVdo}VtcIX zP!inAs78=cE^>3jEiL_2s{0mg>n&)bDz2T_LkGw4FS7Zr0mV*f9zAjfc6@C}JdeH+ z)61Z{odd_)3A%X>Vz5WtZCG%?Z@NM&EoL5HBwjF(DgO4m-ad<9uhjWeW|LDjrpyeO zX5)d0%F{pJmnk=vdTlNom4JFYwJJX}LEwQXAbf`iMSa{3W6&WDC$)R$$uv3}`UQ^s z%Q-219!k(Ag>f&?OQt?Zb22UE*?rUs&XE3=E+^4u|3hueLtz9`4OJy4(d1wE{A-e$@ZPhp>jSBn=a z#M@=e%>6R0UTYotq$He8-rbP4;fcaEjT8IY@bW9Ij#}fAJRF`LbE2w55IxuPmo3a;Izm7 z*sz3<{^PSvj+B4Pm|$ytoohb{c2x2C5U=XTLGneQ{j60(SYLaS2;N9oX$3wQneTE0 zLt!I=(S-eXs?>_lV0}W|3FFZ&V^AU?@vc=)g*e zFkh4+@CtgvneYOq;Oj*2N2uCTp;fQzZ`ijOrYQO+M|q=TLnvslH0gy7iLbXsM2O_u zsTRWDOw4ErEFc6GK;;227bn=yV*)LJ+AK2L!ZO=(WQVrxQWM+*-OnKOFQhif%LduW zEh_%-`WAWZBH<}(s~WhmKtfIvtTN37Lp#f9gO%qmr@0kC^td(5=+jcVHMI4A*w=IG z2Nk-~6Fj0}A0!B_HP8>WP=7SaBP(t76)%fP!{a?z@mFZcHC1nhBqJm~WDW6xNGMr@ z`toaeTf=;CgcN6(J5DLY3@QO2T*-*9P%-!cJkXYFfTnEeMlj zr6NoMo&2mIl|84kEmeL~<7%#RB7)zHnaBn+50 z{j)(H0duM8vZWFN5M5t{IwL9x9#?eQPPB@f{~6hlG9SeiO9-amjgpnxH^`nf)z!^R zi;BvVOyM3@~m2=UJ=2QSJh7l{?V{t-6n4wVb551Gqu|n z4f7%)aIAP+ojTT7K6_TsoxiZhiFmhH>QZLV5Hw*!0|sH@fXtHqi%<>TZu!q!cW;ys zgzGw5M|ra19Xbgi=!ntUT+XkZun#G(xl=hm6$Cqh^_+Vuvh`f{Y67UJ-BZ}M&_LCD zkdP2eJ-O>fs-oU*Wvy$t-n&o+RJhONRhu4yZz9YKp_M*Ea+HSIpBj1-c|R=O%b%?Y zL4r(l>U<~bRgXX&Jp?Bt$fp1rD-y+})EP+6!8(TCUqoNGRNcq0N+Bc5-r=!Wf(KQB zrd$MdGb^esx=UoxP|t}p^;cGmlT}ofYw~8**u1M02|+WDswvAU%czung8m4SRVs#z zT8xfJjp{@~EGLbvLu1hm#!u}`G$AJc;wKzCy~=E(+I=JK+z*^iOeTy>41B8eMaTMF zA(L-4o921wb9H9-NG}Er(nd6`yz?Bx%0sX)FAj(q7AxIQZyO4d?u}~d)=lzKFt+Y@ z?j&gW_xqbQxb4-%V+cp`U@s0uMJg!1LCS{$mcoLAkMIf&Q`&NvzRblft=eIf_u_RnIb6$$%2)_+EK41E6mghO(YQIRWpcC^BNj8Iu8@ zKLFBm>mAL=sTziE=m;zV0^CQv$W^!MR0Q($V*s#-eV9>aO)vr~Z;cV_>;iuUc@;$Y z7J!QP6f}=e+8mMEB*ok@&X@bBdq_}lsHC(gR16FAr4p)52>*TRQLVhI-xjGr1v@y& zTJlG^RuIjR7QYsa8DBJ-^FwV>a^x{c8w6?{I_sJZ0V*n+qkA=!8?7=%$;*)nH4&Bo zXy1*f(Ol)OIg7CyPzCx(uiue((^`k#Sy-SftSMkKDwsw&h1eo2Y>yz?%kSbnMk%?F zzBY(C{m*|G0zv0*SUnX)>TN|n8Ju-S`4mIw@>KY9*qJn;_LAVg%fvot46qqnNQfeRM;1glJs}M&vm-kQiN(5O@ zVLpgRRdht*Gf3fkkRbrZWf5gWi3o`nb?AhNqN9qoREZcscu9PhIivWEYAK*D1kh5J0;_fr%Xv9+H5@laRpZ1-U;!6C_AF(#D5MP~eF2 zi0(>~DPhR~EPMu_{f8DW*{^s`shtBftcDnL@C+o7o-5E~60qcHl$u-bj3AV4p&VEr zO1_MIgnew3h_^X{85Q6k`bS>=H}_OL21^J*fi-dRC{}ARG!%ua#Nr}qK73~=(Zdx$ zeJNtWX3&Q>VJcMoOA=a?Ncb0)F)oODgq-+iqysv_Lk4eDKu|mf(dBg<4b8}I*(#JZ z%-_AFzYGyw3ztJj*f~WcEJHAf_`6h)gg@BA=>b;0)$}D;KKZ>RA|iG%B2*SsBNJg0 z`dEb+IZ_ejuG331-3L3mL!>w!i&62|BQt9RL@E)ll?;(bg3S0Ki9ci$#lxo}Bdu5o z_1ul22N8E!K`J<~7y_t$r0{kn!lrZ8T+6^-kY_X%qO!K4qJY%V*#pqMh!A zf)t36kNiRM1!^jZcnk?LI{$S3b*l?X&Vmx5;2&YcidUF~h#i3{S3ozc@Y>0cr^a6j zK3y)8W$Oscy|$gzH1(q`{N3#hmH!s|EE^>JY6(~>C}XE`Adq2Nt__4@(Ai%6$V4Hrm^kgEc!o4JW1VTweMRaLk~v@QG$CK8JGB5jES zCTQDCwQ=#VfWh^nG7!Jc)~IR3m^e^T2P~RcE*|P8OTP^*vmdzhd?QRNS$mMO$xwum}LC9*Uo2hs7pIiiXP19)MpGpNaD8NK8iBhDstXQ#KA@FG3%F z-C2;RQxLnfh)Xsbk0!(dd4`x?Y5PjVqW>DLmNdWU(^vnn=*;W1<^c{p}wJ@oyz;d8S-L8kb1P6Dg~y> zIx*>pSN%85=y5YMJ73D$`FU&zGQvoQFf6|+ue-_#+Zz9Ta5l5{{8MU47FY@gI1g?z=DWV3jZBL?TggJI8_st`Z>SvYw#wD}$7DTSUC)Q4BijQfvM1msjA(4&52d@OAB*{a#dg7X531;9IB3 z6_>ghuRE^cH6_}duD=Q~y@HPv{_o5lv>Bs<|tk8Y%ZOc;|=xxRrTLN1M zkq*W^fA)q4WqSpa;Cp`2sa<5n$)jI&YLw1UW?s6DJ5h~MUg(V`XMoUKUCDd{`9^;B zC23lv9LtB@rECbQGuh*bgym$WrUZ@4<32z8dGcZccdI`pUht9*Qth&HXCl)D59y&+ zScvp|Tbh5j0A9pE9~}mcm=<136ZfZ!xpWJ#9md30v!llDkrTECyWB7ZR_ejpksq zC0Ja-Vv~fYx3AyUWW5i5q-pQfB9eJ@{rA^B(tO9qbL+CZEe|5oiwy5HGhJ(ivWKwtvdXb& z3dQnSyM!4%a%c{V6g2m?iDagQkc`0GmZ=uExp|TohVK|oy)I=BiLgy%b_|kFzUJ95 zT*@O$x~Q+QEBo+*XkA83+Y?Q;%m)&B5%&xE@^rRicpSaMAl$c3jUpr~QU@dNd&VtZ z5i7oexi5kIFJ=3Oa<&uRhR7}0U$4=!WkAt(!NWyWd$U?^4k3VDEwg;Kk}fl`YCL*UL&N|dq;xeuT3po=2oCZhqtL#gko3(;;D8Cf`1=? z99?6IP;m4bQVu$L1f z^MqLG3=PQKJ_s$<?) z?t1kuz>=)h1%s{WZ#Jkg#?`d2@owWWrx|cne=@Hu`4yk&V!ry8+4_CC)E9~0iyRv} zR11e*drH&VxGIOVWG2Z!JU6p>Gu2upN~&2xP6c`PDZf?K=NY8V$eIiOY4Z2?6MpQ- z@VquyR9(9GIi%8&clEEf(xfqS2sNAc`{N>}U86J%zq;}WiNMEe!*Vwr#*@0Q?IFH5 z87x{QlXudg(r-f!$%x`Rk0z*gHh{@_s$lXTNkh9CSjqE z=jxbi4ze%CuW2g{OYrz4+f~2Tgt-a!u>AU%#C-xN;f^TFlZ8k`M=;uDs!(srUEDCx zyJGTE7)d8HY0F-RfJj^_1DuT?Mt}0WoJuijpZtsAJ?rcUoH$_#A=)*b6E_3Q3V!Y@ zd@QByQDFkU^ETf0$x&HHZYr}$EH23yxRa=%;xmziwgpo%X?ZKkm~2CxyGV@oA4275 zFb0}nxJF-k%Ht&Bs>LR(E(lNFiKdgWaFTZ+CPT!tpdZ3z9JqU9qs22WIa)e>Vz#A({)pd&33Sr>Xm6@^Hhzj&T*>L{=tLp1A6fq zhj*TosQ)}e`78V0-SEd2tW+3XN)g8%Zt!qoY%L1r}k z_5RF=N1cxH-R>o*!pzqpso&=gSzU4GYRuyd4BRUP(W>np2|=BLGHXPF@?aR;uLeU| zJ0rmVQei=67_MNXEQNgaav+K+;x_Flc?=VeFIPMo8|t4K2o)^iSqO& z&r<-fupRAg-&mzc;Z0O?p9F5ZPLStMh8tFMELW-#rw@!GerilV zh>+viaDu5I6!(0Y8Yv3Z9ja7`gy4MVAN$IR)A&y7le{?tW*x992^*zuU$*r)0(ou3 zh~Pl-T^hbvI?$++R&qg!vO?4zfCRJ5WG((a7?f8$;`~`T-poCw^Q?ll@}{LDAKM_j zS?3Sp+~eA=ipRB65xHM~A-kr+&paIRl^w3zwZHsReCPa5brxF%y~<$| z%lR)p8glQLLP-v;F-59fQ*~-%`@F#*{2s^@XBKs7Fzkv&KZi~;$7r+aDM0-F%)*aRalN`J>fM=2R2pLmHril1KmBOi%Q#U4Lerp+@5a{QY{|09Dw zn4gI^Rg6_fe-J9u3A$|^CS?(=MB-=tk-_vMBl3)Vqj$h}sQtGX?fPYL-FN&^Yfg9u z9-wb5h6!pz-<<*PYE~(GHO=s5u6S-PcW&AN4K8Ytey@IA0}wox#G#d(-^&tUbDak` z50g!&&%(&R$1Hxu$dbb3iwJT17@qM=-VF=(&zQG=o8QV7_OB*quC#3=tzAO;(-6%Vgl?5CSsq@t?4mtynUzBS`VI zb6B~xPM7jr-_iU`UEUsJSIH)4&5z;-#zfFyev@iW@s56^FkveBnb1|YXBgQdyqGtP zD>2V0{H9xfo?G`#ZvSRMe}2y!6SgK8rBHlN4!vKZqeuUW2k$M<;hQnk7&$Y%(Qvz) z{w*KVd>^Y-J9~`$Y0EF638({J#k<38*wHiosS`X(cn~8Sfl+F0zBrc_-1ammd_JiE zR?yF<@%cR7YBE%MrCx)7UlM6p5IMa< zU;lSQn_;yNM~_eE}tx{6-GAg_=stz4_!MJiQXE3zQp+3^xit`*@J z*;W=Ae-Mi3LOkCnEu^_LKwTOyxrl^f>WnZl(RkG9MxO8OZ^yUutJE`iLGR>02?;oe zi4{T2K{6Uet%jm)de1t{GGtAP+D(f-r{_NO(QkJz>Wu&Q*DIc^a;xiY(Yr_daydmk z@tfU}u=$3~*3X;8#{%?^GGTui1nHP%kfw!Jy(i&3&J96Hx46vhJKJrjT4b zJzhNB4pP9nDaDeL)xZ8a7o*(I_dO4nM0~X~!Ms%)kIYHB7k+i@zV75O-r*}~tm$EfIQD-U8+DIk?r&|C?t zO5U4=sN$df?Ejq$C7g|qxooMRKQ3+*|K}(+_g3uZwAhEy2l5(j6m@8HjMKhj>4E#5 zL*LRv&r*B+d=wK#`2CZ=RV{z>O8=JJIW8|fuDWyjqxAG6-!c0iw?W~NW(*R=tBNr65`!bG?nEgpJS zj(xlzZJJ8Yos4A6)?xfYWUQdRYQS9}6PfCfF&5$SCeGIJV6Gf0(;<@i1j*8Yj6ndE zq#p?d(10;S;-ymLF@WA${(c?kO_FkI=&%Gxa(x4B@59^9&&JR55bJ;vk?{Kn6UcXv?oo}c1 zCDQi|>%1989)V}eP?r`ZOI`s^;B<(B}>1l6xQ#k)E|&G zn5Z-$d%s2Jt$W*Tpx70@Nn>H(u@i+pnwDM~42)f%W-%FKx$nlRKJDMh_hG!v5SVcY z_xRkPV3X`^9hpZ1@h10t6zMG$ zTQRCiz+0(!LAcD@_m$RHt8DnH-nRb2lzjUnd+;g!>n9hx%L z7NV^}f}fsZBB&U*e8T}|?E&4{&cCyRxtQ@{)))TjI`z`F9Y3FXRrx-b(-V=s9Pc9E zIsQyc-0en`&xH?$Pkc9)g#D_kUwo5NdRl$u81teNL^05wm*G|1I|#VQ9eh{2gE?Iu z{qfe3+Ost7gtIq`diZM@7>ltm$=-OS$yE7S(7;Pm1$yp2XYRgNNgdmVw#%)yTa&h* z!nu=QIkm}tE=czGs9AlPN-D#zEB{>Aef3`~YLT-~m4s1I3Ky)zSU>l>pZ24UhOS-!xrMpv7KmkGN5|D0~Z=UB_Ywfl6 zyY~0){eIv3FaN-g`@FB~yw5m}3r{K}YT}&u^M^8A z^RbbKB3$&sR#eJS2(@Vu<1WbM;F74}>MkQ0I%h0O8EZIXcIVHQ0N}b<+xJfk zc*=hpXnxlx+J;TL-%BXLiRmsB_FeaD{{YMm?UY;BK2YI3pN;cvFW;U!KT{7}LdHI# zJL9{o=nU{lAi8^-l4;n5v8pcYLAo2==O}V?1_RRaH(z|kl_Ujw-iXko!f4(p(NO<} zR%5qTiwFp(*N|GGL*#mKaijo(t+lXLK!y~5XuvNX1)3N~(Vw#S$HCJr`xic9O(CsK zF=B}}W-G>H9hI(8ZJm!b6RXr|rK8}{{jwdjvauGj_rp@%Xe#BFTcvhHL4&^*a7ws!-MdrKEr}oeN}A zcf5Y+kggULbSXPBNGx1B02|vQz3A5)u@E9=g@o#P4RB;!G4{z|z6wqVaE^ z#xIPVX$gbY8mt$J?oQTre!@h3?(YyL3fW19x1;c@-YQg~uz#|9=Sc)3j9(YW8PTiw z6AX*Kz5K3AfK+1_SPl59HqEj`3i$o{v_V#mz8wQ0>&L2C$P#OV3iBU)czPWf?v7g%xkPme5wDIn9vhXNJcoA! zcuO9Wv)cg^lY#j3kx#bhE*-4#Xw(vTJM$_drjEA0b!Nkq656AU!szyjc8W>VkB=0i zSyVV!$hnVedI_FZ#}?o`4`(8*?iqC(tskbfngnT&9u5*H0;X|6u!T5u65lUC#b}$a zWhTjubw~|GL7C;0Vtl$&L;x`tJ))OfTaA4n7^cz9@`*SCqRd@&zFQRP*0vjx>97kZ zrp5HV#vV3)A}3GaQGU1<^O%uaAwq7HeKSVp)~GjFBb0z(kQ@|qK%~WPI(k^`jo+HD>B#PI}r*nlNV+!UPqA1kq_d<`nnvpf&SU;XyHFD*)T zXgE?h?8fC?JnSV=H#q92v0XeGWR5X79_Fz1N_X(n#5(M*FU87EwTurS^SKNg%ywBn z3IY4BGG}J{USAD@eK$*YvfbWZU}sv~&9h}|Fk0+_y)G-m$P|@-D$)u}mMUaI6Ob!x znbTXT=h;hDRj$r+#qws()1BE#r@nGm`9(Q$NY-5mb&*G46f#E66a3mnoD4J z17C(rFJclrpE(of>kqh`*T5Jraet8x&F33T)Xmo9X0)rJ%b5Hr(u6j#0Ss0d!j>!2 z>(6`XvzP!Fl#`hZXQv2la2rU&aELm!L!wrJHDkQ| z@}JE%DRy0I$~!HxGQ21slxQ;tNyo=AylPWCyRDJu_OOq#doZUmZWOgn%tj?qXW19BPDB4+Z#>~r=f zGao@S;sS8YNtY0+odkbtQ!HCJBC?#@(v&#cQD;bu2aw3oeKp5sL$1Tc3Lhtysygp# zXJ6w%VmZNH%YE57X*v}$v*0#9SxMtnYxE z@2yzrH@1Tjtc$DUwR3%V!Zj>#X`;vnQ=M|w@BJb&-afn$)Ed7kKT!#lIg;`l$>Rhh zk}czUUT(f9(z1fudHl@$VK!_kEZ_^UBJQ>hU_99#Og}=zc*l;9+1iANolk+hPE8nH zduwH{?YC}^^2co-ok}c{Y)f1OOrE5KK+2E0Ueq^_yW0$A+#LCY<6s|DC?0EZ2fk}1=;5@dAsUZ@Z0ho9?R8ezp$`l zoiqa*D;xcKbw3)0lplatYGJnMd?Cpw+G=w0^AWCN*)D62Nlf}83p2>C&oI_{xt4a{ z<)U?k!Pb2u{m1V|PYA{IY`uTK`Wd7gDl#`_ix|9-7*Lq8AIY=}a(pmHm-ZO^)REBD{V8-ctm$+7_RhbS!}aR3k&n>c>XS{O#;dUa ziq{`W4ps`L2PY7Wr`gD&7W?${A-#v2w~sS+RFPH6BP&j&Tp9k|S=X}>OLlkqvPoaf zF9eH@Y$~^~*CF!I;fE29^;JuoTw7KP^Ng;|zOJbHXXee)k@{mUK?D^6}oTk zPu5=QZTUX};FJ~t~!_KJu; zI&axQSb{ylx|?j$ug9DY!I97Jjp)mW>dMyg@^UHYORfR2_vFuRH(3`)c<CL+i4Zs7vQU~@wEMEcdF5{Kul61j|egLRaP*Z#e^2%jAw_K6}00A``r4yX$ zyo>Tu3h%2F&9)!zWf!Qbi)_S?W<(12haZiW2AvcxvW3Ah(GNy0@oqmWmyC7aV|wl4naWc*3_7K(~-fU%ql}$;TkY#gO%s9}|Oh z0Rd?4W}tSYKSUrOXw!`%AW#9UW+VE%#}AmaSl*cly_g1HzGHb)#cAp&Y*8z0eIne- zk(Ps72RN*KJOZdX&U4XDq9tYxR}PE)K*yxW@v2r7{e+H009xn>EvrD6exm$34T0At+2Cs9@@(U{R-FJ;O`0`XNaxX2sFeM&u1^kg61aabu=P`S`axs*J=Pns$rH?6$%k)5SSQ!Ztfph~}!%5a^^ z*s02tpz5rX>U^E*(y8i-pxTC$+D@I?{;ArLp!%7U`c<9!-KjcINCVSZ1J_yI0zrKY zEG{vk?XY%X+|^_j(t7Bu#Zj-tbEd^Fq%GvEEn2TFai%RT^jzNg`P2I6C^mwokdBVC z&MZf<7AE-13Ms9T;_qBh>oZ+@Aw6ejJ@VwXAn}-`w!N{rr8mu+;{Ig08OB*tyk|u=T8q_54@(aD&kYVVeyXo1F%m{d1cm zVcRnoTcm`G#ng!{P{aS68!S zBlinegos;^t6Tl~dF7c~oQQj(t9xprd*+3Eu82pWt4C?0$H&BHSHhn4uAa?}p6wT& z-6CH7u3p29USk(tQzG88uHG8~ZlM?6DHLc$B(!b_XND=x!pAQAO$5weuv>#c}xNMyfT~ zT*YNKg*|kS=V*?1ri$km{UGH2L1aE&;_8F6Xo9?Z!qesi)vE-mqz^joi7%QHi<^Rs zM3YS2lPsE(tgn*nMU$PIlf0Xfy|0oHqA5Y{DPheiQCBHo>cm9%)YRtG6^c}3u4r1J zds=C8TE$gbjeCfpdwO$odi#}Et!PHSd&Y2c#@JQH6islad**y|=F(N>ifGn`dlvtk zcji^rk!bdrXoy-!*4#$7b$GF<1XyXQXi$m3WDKVr`0 zhvo};%RIdv(J;H8M3tqGo8eSI~L5obU)3sZQtgnlFU5lJO zirt~+_SeM-Xo>nap`ezMsOysUhT=qz($p5)ii^@*Xj!30S!qjI#dTQ?^kZR*u50th z_Un(`(DHtd^5K^9!R!1fXvM5Y#e7S}Y)k11v~t6va;K$oA8K3=twNr8R9&@H-Cb7! z#j26lmAI|dp4WLx&>9NQ8k*J`hSuOKVCh58PaHSz2yZ^|i`5Ew){3^KV_wxti`B_{ z);(>lQ@yFv6sy<*;1OG?tIfyBi35)+4@oRL)lGhw^&=hXWOu+No#G} zlvsP|TvkYH`_fH&r*q+~XUEQ~(EOW@BeBji&(5pXPGD;XP`nG%s|&ZSkR-j8M7*2A ztDA=2f90l|S-j_=R}Y7H5B_Zr|E(vTSFdPWuf%OH2c%cts}Fh7(4%_WrzzgA5srUsbQ;sn>u-+ko}$Kos?Wv)7<|+o1RDAVPd7XtB?}Z76E-t+e=XqStV0TTT1T zP_Foh(0N;7+en4D@x13yz1L^Q>yh@`&)wpq{kKMAEu&+%qf_EzvtDEKZApeVV=Ln0 z8(!l(ZR7j5<458XI~kv^+9vGvCV&!?nBJ4P?URIelO#)%gI-g;i=7O2Q_K=y9(sS_ z@YcJ#{lahPOyfN*+CDAe-Ip#tBkw))v^@iMH)Gp2rsF;PqJ7rzZq_KXT)_LQg}1fl z-B+`=8E5Zr?(N^CX}=*P=7PNEcA!&HcXM$P^NHT`sqOQ~jf~hZiG@P%h0@Ht+P1GX z65s0^7Mk0?x8Hs5mRRifUL3xgF}Yiul31GcUYc)T!qxk}BJpFx`^Sz%!p`S!M-o5J zynj+OE#75TUr8)u`Yhuz!jN~%B$6u>uf40ze{v99W4A}hI}lVxanyKZ>DVI;Y!=d)>%Wngl@dDpz@?6c+GvE?n< zVK2G8(!Ao^v90q1yeP4g=(CgBv6Cs8gfF>U=(Fo-xLt9-TO+v`<@3v;W25%|SGVMz zXy$fv#~%2{uYSq>S)cuw#rdWC{T0cB4WEOZ`^owH1LTq9@287mgM2R?#V&l2myLSo ziN05q2B6yi#NVV z4kJdk@!(t>wJI?mLxB3#nI&QB{e|_(afpy;B zp$N=KBDfzKNC}R>Vhn}*<2@dN2Y@7TkVd{$s!B#dl&?dLf@y7rj6xWFaEwD)qLqxp z9In<3!#OL5j3XX*;Fv@{8Q(Vc5dINr5)C~VGKrDA$9Wqo1A6*4PQh5-BwqRP@Y@e+ zlDMV`>WoiK6LnvQnI`GJ4vY(X?SuO+#W*^ZIhjmi5VhT1IgHxw@4z+7a2S7Tmg({% z%q+{}VAw3%=N{KQ#~-9@o*T>VjuWe48-@=xQ+?<*R9gukzBIT(3g)p1`|rm>UatSxad6JYge zdVA%wT|n9&$gZS_xN^QXhbS@-B{pAyB<8=QM+CcjKIE+R9(fspYlzl{Q#}) zsC{q#v9Og`?)iJQ;YZn#4kMgZqYj@RcM>>`KABK)925Q-={OGkJ?c0ii6n5Elp#`e znoCZa2lTAS1 z*AmcO7ab;4U6)*bM!Ej*_&w(O(+5fDw(L)&=C%?Hj&@rO=N)%ji-v*R*W=Y6yM9lq z8s(kd&mf%jk#!%b8gYz~_1G!!3_!N*tmTY*{Hp8(dG39hQ1jex_!;ea(DHlS^LGal zb`g9KVy9FuYXVYBJYtzT>v~gKMd|1U^AlSsOGW9v_NWyAa-JZ zwTVC3t=?iEqT9w?BVc|=K?I7^LmX}w_<%bXS3R_cyv#0$+bS3T4Nfohh+VK?c`l)C zXfOS)U5NNzE|D)z9~0hDAl)7oRt!6+=_%;$B*GvA zi>ec6fG^xW@-25h%|z&cAhOIp%E~IA?kCP5WW+w&sXU+Icj%z_E^6d$FCUCl8nnQ1 zi1okC69T!*bHz{46`Ig}r%&Pi<&Fu?nf^9BqS=D+=s0$UXkaN_{Sk+xy7EFE+py0DyAH{1dxgBdD3lDIV@l5H1FG5*C5$J>*6f}+ z#aUYM9vmOFlOn%E`c|T>&9&)fOR$&~uOjWj9W&Osi$y2G#+}L>Gxw~D#eU*WxQ#ew zot76%{0^J&+I7sn-7AJ6aVP!ooN_R{gV`nKRjtjZ=~kHx7e`lA+?ancp0PaD{t_Jh z!Sqx3!gc|Ztmyc=P$y&ot7-6)H2W_Jc}|6#)*R2??0!kTOgjIo?4U~w*0w&v8%-km9taW2!U;MA$I)X9%`Dp(OOp{i|C3enh$v#N zkJF_l(z@IPj6Xl5?D8q0qTG}>Vt&-pr8Z-K@7-_9Z;9bEIsFB}LW|*2H7}#fO-=Ej z_nJ=-?nEC_*ovM zRaqhM)bFKxWFIVMU`!sO-w$TwkC4wWCa%&SpdUC4Gxb^{|K8Nke^3)+cDqK8!l^!@ zJPr#hH)j1d*ALmOiOb%5%f>}BAa#EfA3$%)DLdb%b?_uPB4YzjzXPyf)l@0Z-Jn!{- z7iNPr>X||OmUhV=(@}?~#S&2mDs;v~P>7V&e*pZs9{?T#3eY4002GfLi1Xj%k>>z# z0C*7g|I8z2c@6*+j{g&n+=NqO8E*QeSR-Hg{}PWpM>c}-zs(~b`oQ&Oysi0UYcl^? zw%XlVyZ!7x@yH|pYaaQppA(&(NF)G@ec2C#(tH_#^Qh#1$0OhCM)Q08;O{*0h%Ij> zM5N$2J1`RR#dK7vX3w9Hb7U`mE!NgqfLQW&eR@LjbX0&y63`_3)({8;{N1p?O$vAf zs76!&A3dP>Jap`b+GYO&j8~0hqhN3PFM#nHG`r*_Ier0|pmNGNn!f|%KYsvpXBv!g z@;&<-Fdj3)f$1dxPs1VeZ@~B}Zl?bYF#i9;18Vi$8g&79)lACoulS>j;H^1B{=q z0bn#%6|knyLAj@TgT}mOmm{$Bm#t=YHwvlj16yPd)qsJ z06u7z+pq2~SB7&Vd(PBZqqlMWQloUQ6LXT@;U(pzx$IJ~*?VyAY9ZO7?0}`nvR%#S zI@YbSYAkS~I%`Is&@}!>F>}lU z#0HSF|1U4KO(2T)_U|ME|MF5R*GQ>Xz1HRge6IgXGSJ@Q00#nWwb7U+T`K;P47Aof z1|<0Dov%OpGiHviRsRdg!2jPd^QUA$v7Dd_5`5NIk=;2%jFJp|1U*asxzb>HhxtEv zss9l(e@X@-_&$}WMhbp4UyFilmarlg+8WpXj2SIS(BCBk%VX@sJb>k%_5Y9zNRfI? zZY00k_}c>>d_H6T03m3OYmYD$EF8NGZxo@9m8cd`Ro6Sr_tkx`H-;qoAK}k_jCRB85*|@#B`*QQa_-m5%>F_wqAIOtKN%YPMFh(M)M z|GmiKpJObjL<%8=iAnF~Ox)o2t>Q0{1&jG@k@^X;{mEq5H0$l@O3*4{qCC}8gUbSlJ|_xbYqIpYZ+;;W{07QycGwwB{Z(9()9j0s zR1?2aXZCZtmqR1wAbG18jwbYu;DyZ(sR$wOmy4kSZwJCbbR*>E<8OxS$$*!R7V(@i z8FUr87^M!sMiGXIjI+xBPCR0Wm_5wJIOJtePGXH!x1TT5 zn2X9D|AaZ8P3E4Y+PGWCZ+}^mb#-u4b3KUXqPm>O?DDL^7DIO2yhrtmSb}fz;F4|&^jU#?jk{@l7!B;y0zZsQPgq)mW`AMp@ z9IHPFcy6rnFo170oO7$(U-f}UMl&|7Y!tbw?sR!+YUuMH;*s}4tQoWkO?d&5nHkm5 zl9eS0LgDdB)(HRc^Zs#Ih0@f-L*?5Obe=o*?nqOwr~HKcP?hN(-aDo41Ngk)7eeJ# zc1;izdRvRdP)B@%&W4PfQc`B4$shFhD9MfCj(d)#%zq8}9Lk;TrKKWrTX(X`7I)}K z2(v7a9%st&%M0W3m-70|v^CVE2!l@=g_7RAeP1kf?{q>SFf}(lA-aBP5=nd5<@l5} zUV$u(^YDQcfq0)B3kP=&G2w(L8z$LP$YIx)A)cGAdeB39QxjJAeGJK%E`Qmy2P0u)ho{^u5rjJp0jpz^)A7u zAr}AgeB54qk6M;5{I&%2S6#$70jlMq41_rqvpNZPcBp3#Z|*C@uMyNY~INlGhHgy@Q|NUJdAn zsY&K|$$$VKlaOId@((^l(mrqL`2<151lx5@FjoQsbaxm`+H^z|b+<+er|zX&jU!S# z%YSdAjrr)57$j68Loq!UzzCNn5R#K2tUt`54Ye0?=*ti2+s@%G$BM8M+m3Vu73M>_cugOd1N^s8-YzOwBM+N9YGUww5E+a@#y4VEBX6?6i4lZ>gyg%}?n zBBt+ffEw+oJk-vQY-IZ@jL{yGZzeiC{AI7jc3g}+A6l5phkh`01<$)gmN-*GRzy%5 z$7eF15#aXbfs|1Ojn8i~vnPp<3iw-;0i1rcFVV>oG}zv=8`0mn;WnIChsgHzGAutG zl%(w^h%W_Fdcc{*pVzSKxY=0*Fe%XJvlBV+SrT>QU{e>xjpYrmF`n{aOXL*dDk#a~ z6R%;z()y4wd>Or={*xFF-x`I`jG(=*;K0E4k&5K>KguPJDv|rOn&MQqN>Vtf@NAKF z%3QD)Z0R@0#6E><9>+m&6`H~opBpNjlK)cgI^=N*oK}rq%41E#U-){3Hh~X8bIXw`M@4( zZ&6%!j9fe`9OJ@>>Ry)kxpINoS&FmefJfaqGnBXaS zySXHVeu^BrDLq;Vd6aN-Zv2b57;g+&!W?#Hv3mDt-Yg6{eZCOJT`W8uxd28ZxFNMh z5&;*oe2u8IcL4M4N{oF$K5b!&rYT%>YL)h)X@~;HrFt6FNzH!$fMt@4(|H%MBaEyimjJ5_FDi=U!x;<$3#U7*$N2i$M3ziH&!n3+vA)^V_XBWT4 ztrH#uKX8#}KQ)RLK&%qIMGFGQ*MKzSdMHkD6ay_Z@kLTihzgrhpG=rA3}mueMTN?7 zgpvs92%4mq!H*efr6aZ2n>*`s-Qa-mTI-=4zrUS~zp zvY8}Feg&=ya|VF-IS2%9d#2W}QQ{GW43n?Kh9J9TK*+&Y`;SvZ-p9S**ys@0UU#ym z3Ol%xeCB!e$M%Hfod`qd5X9vhRf4&RTPS81mF%(ne$?8-Ad4~hr!Atra}&n+R=OVhri%9-b*FV(v&2d1mxZZE1u^*0belA@iTjjfE*yzKrz=BxIb% zxe&}UsB?&*TkJ~-=ESNAlTI+E-H3J-KaW#EbbXRP9~uYh&E>vvX ztY!-{&7m4U4E{C3A0y?I%cf>nt|G`VXM`=5hnwZG9LzA{UZ{Ow&sEBYX@-O3SLJ>$ z#8{?+39idiQ?Sz}_Cl?e)7sLnNkxOATr;-ls6xjQ13(_P;_IhO9$yk=QGbj9r+3jv z;~GjllHN*l*Z^&R&q(Jx6R@>iJvh`}N$*(@U@xKWAyKq?*wA{ne|!`H%JU2pp_jtV zf(T-lt!Om01~Fg(+kP5;iMCJ^V2p%%iBl5A^t1lhjS}%1#{NS*(jggo_L=Xrg9XYi zi${u0-N>u%aXGqn8YP)A-}CI{TfNm)7+HYT3nl_!ef)e1xvF0`^R~?1K2; ztgaPH45)V;Cub9P@~ur`!)1iK>>{5iEt2sV|0N#re8W?51w`gu*ae|)FOz!Mj$C}3 zxIb?NUyM3OvOW57gMOGRU;3wb1bNT)jlY}Cei9qYd&?Kg%?~HVuM>>}n&Zk0$BEDN z`$IgUk8oL`KJUUW;KLsbh03{cq)P%8=4f&@Kh2jfW*V*&s# zZ~%Hr06qO6ICZdb3FRAhVt%(^J?cP{reLeNU{lRt8|n}TNQjeuh>Kf@TS|xridi=o z@^8c=O`(xTDPkZX76(%rhw>_}Km>>;jY9^&)6I!{vW$mz1SI8%q`-}5E{OwAVu%4S znkcZuwyV*(4`Wp)F#->Pw739LDInjA1i}j-3j7H5Bm7nk>d(O><4Yi)!~g>T;N>`l z)I`K1AgLYDr5Xg7#0fe~V6h+uiAG>>5LW{LEjfvl5FkFBz_$+D#SRTiGm)GLXw#fL zbOtmC1C~e;WDsNE+Yx&VCx^NlkP-t)4$Mcr#Jhi`1^wJ`v5H938U z^a!4sH_SBv0CZ~*4EUw>+ohF;z5CdlRuqN@sKz%}NO#jD{K`kjE1K3O3SQqGn0I!LJ!LX_F-Li)d02igBD zBAIk1(TjFxl-g+&N~6uX=lx3&DQZ(I?MCtW&#Awvd^$`L9_M?8^@Ek~zgC==g-hVd z<>W}u+4azfk&#Jz0G2=fWgR5PzJBJ~xcxan7sCe)nzFugNNgLf);BNsDi-PAu7L5uLs3V=p~-N>f_3|rzL+*(6u~TpPz*OG_rsTa4nhH zMCkXXTd^Ef<$K(a=@?0EvF|S1uEx=O@Tt{A(wTl#J@BP4@(a#qxPbn&_>U*W>Pb>M zXgt?sO=+#Df`I4oS=}Zf1M+?OQK;2uDJ!v<8;~#C2zgn%EPI=Qo`KLQ#Qx&7bE{1Y zpxoF(eXLdXB|pBKsu}Qgn$#R{rVHLSHo0+gnvmfA<717)=sAvaO9Gk#>tK$#8tiPv zd|ixkoAZSZ7(x#hM|QT(0H?(WCx0VI_6O<#smX4rk=lydI;@SoPfSLAOh zFhY&}YQ{MJvJNWloXV;&vmZ#~BPQN`+;3Q<44i_^unQ1M%B@cCH*Xi=TS4U;O8&48 zMwpB3jr?I9yx;XhzdHZ*yK`~>qaPZ8%IdHihYe*N{0`!dMZ<(hRil$oN%8eko0Z!u zVi3z6_A_uz9u53q9hANWo$>?l4n2>C`3AXbr7%aWPR1Zxw{XGWH{|S2aq6nZB!A0I+U&x%NgIRg}l3w+j;Y zmaT05wm{q)2vSy&jR;Cl&Z-w0A)X!q7V67h&!ir_gRalw2&(dom3I#dYL6dyPW}*= z8x=>Zk0;`(7R}8X{Ajw#d87tt#aG?Zt0YotYp9fIUZTjcQ>0SjG||9_qq^9wLY%b1*1| z2+?FzQ~A&T{J zI0&O09#VjQk_LIKvr=#jWAQwRLzWD}!kI(dRb*xG{D)b9lSF5@sQx1P5Ibx&$9t$Z z1~`fhz}ShAbz=b^!}Y}8_5EobY#&wA-OU~LeEU#Lz(Gw{CNbJGF#N+t$pD?UzY6W} zuxg<@F?VBgoRJ?ZIOtYUd;vk^1t|gF4Jk^_84)>^O=r#zhlriTB|2QMF@i>dp_AQ6 zkn?gc0}xV# z%Cro*bJsG+t(u9iAH_fe^AeCb#gB|ylwg-AZ`?LE8!%QhZ&DUSl3Aib_az33LzLtEB}!rZ(zz`4d#(W7HpPR~X& z7^TR0^b_C&7Cp#`4L~O%5TO3!-eDqjyMQR8Ju#grwvnX;1u0temZW<}Z8! zqeKPCW+?XdWjD#GJ{HS%+`QqW38fE?yzpy;t|+$$P50#>?Td+C@r z+r8j$983w9TucilhxU51p^O*CAZNb*2FnKzGo3Tu6ofl6-f!E$cDspumlwdtp%0)Q z`#C0ot8>fCgDe7qL_X}slvj4dVv{xGUNfxm(S9!C`fVDBf)=*VvFH#>>?yk5a-Uj- z51QRaF?X+Z@=ZU5C@sZB$7!WAoC*)t&0eYbeEO(zqc04F?9%%a-F~CrXb=SQean)Q z1$}xI(L6mic6E3OUYjf#5E(y;PS2-jx`04OYBXcsd#yi2n(+e`u>9zeeFVED3eat- zH{ri1>94KIA8`$zWZm3uA?*U`Z}|y}?D9JJ=7+svZBBA^S?RW`W&Q5p*kT$>yE>gM zUu(ym%RRk+z4;BDExpGU9;ITOWgqlJ9RFYzzU!EU4{|F=U$lI`J8+w5{c(|Xf!cVZ zow2)8U%hmJ{$^E>Qru#vqKWARcO+~_imM{VhkV*T9j0K1lUg)UBJ3oC(KYiL>!-8< zR+7Ov7hb!no!1ksjDV6ipLfmtuSbc_+WX;Hz0TP;K}>nB*qSE?AwO?cPhMYO4Y#Ky z{`5>MY5uqbz;3brJ=iZ`iX!pH24ER`U%y7){D9$vYEugO?A7*3pG+0-3^T{#YyI4e zuAK6kyYv~|qEtMn>b(Emi;KJAi*(v#;FVDl1NvbN(eH2K`0{&W&-rCf`GTksxtdC( z`Us*SAIcPj)e%t;hVoJlf=P)Yx|$YA<^KpmPWh0Gt;t^zfx~_2FE>Tx#DtfF5g@!x zhT{+bRU#8L_xso6i~?1eh5uK{*}qdlm&P$lARcLEVZ_E4{J$!prP2vabU`R3^xrD! zIsq4-EHNj4O=eXE!-0p%XJvm=LMK^rLEo%>SvjrxTes%(MNV~--_<0^_r|}J&_46q z@2eV6uA#ZmbLu(xONml7HxiXQqX*@ma-jW4jen6}|h zCA95!%=aycjMc>BuOp|2f3#q~-EP05pi+ni5KtY)0>CJt+01ZS zm?hxvG{{BQ3m(Sp3iB&-Gsz63^hhG4Hekl2r#9a#&W%;T(*ZDa8Fd3Nn>bKPXwn@& z^jD-zegI#~)Ya0GqO#qx@`jP!oXi0v=P#pdpR_LY`X1zJg{~)d3j%{JR-QHG0ssaQptSXUXzI zb?-vthp2|)s9p_;RX&4CA+%f*RnhI7X%$=AWUKNXJi>ftKy`tD3U3A^g2&{Pma(2F8 z)wqBDUE6&$O%y#2{bGst&O~8c(+s&ul(wG}cCpMnD>VB4tV!{5RdZtvv=(ckJNVc{ z-bU0HIn*5?L&hohZ6gO3LI6mfUj4FwdH*wptoBF{Z!i&B7o4?rYnQq#kF6S|wNBF{%zXL#S@|4e_yd;j82#b*-c z|5J7nb|WYkvwUBES}%+~g$8)MW>(Y+@!$I0`R)!Nb$PGYg+_bmhoh1sW%(#pgZ+=> z41TuUg#}SM^ta*&mU>_mZ0XcXM@_Ku{9alHFd6{%S?&|XK$9V9;o}58U%@wXOQigA z7%XouCkBv$(O>hiUzuaD>G~-3W$7~mKI!&7+U+9=cg!QVX6fU2dGrXiG)U2S z8P5b|@dM0ZQ4O+_(x7z(zg00&K=qJ?T54Eh-16xK@)}>vSx37Sgx($xDTeGF`Tz4# zLjb@Akf9@h|D$P-g5kKc-OT^owEM5^^Z(qm`#-hMLwH-gcIeCA|7oAcLjrX+>c224 zpiNZtsG#ig&Fc#BCuWXIJ1G0Sq7JKuYN2riAmzo!upCLi2UC2-2-{1|F;-06Tl6jp zJLyb7`9}=DpI@HzVHEukAs$tbZa1ArlCb}x_Zu3RRv)ublbE(9={AtDnGFB64WMs+ zG&H2c_e-E2r3qks$hri!T*d~x$1q&|5g=b$@Qf9m0*zT`a1t9JLdRc1%s!e*jw@eB zEvU+I2wxAE{N=?m$%7{URXvjG>$bMofM~2A+QTW<*cbteOJXQsos}4Ne~8Wmkb0aj z@%D6%?0GmXO&AE)iTfZY$^fJjq9g$7%QpZ4mi^GoTz0flC<_ZV)6Lv**x(Sf>IuoC zuHHp`uxwnWkhP$opAx z?v@m6)^(+TQm4&I%Nuqrl|CvXA9Q`J`}(JS{v~_S!x!eyQ(LgOtX^#2eozy0_P0%iTKEhkU9V21Y2@CO;2ZQJlHT!YQ{Xu%5uCO`eM0)ZIh2ul0uayJJ)W{H z%0K<0Of`eU#%%XxRPbAepehxBz%UujoR)_;P0lgubk6bKMhGAgG(*7Om*DW!<;fXKEWMZLE2la1sk@7f9p{{@ zO(|zP;FQl%)7pAUGKd*iQf$+>Q{MQP8snIh*0T*n4)E;d7K1lGecgI+^BZQ*b9>m1 zZhLz)#8!2CJSy`0_GD6#_wIB?&-U(Y&aCS0e9`sy-9>^u-u>lzvhDrVb}`B=iuw+` zzd0P_Mcx|VKK=7M5OyB)`?v3T^i4LP-IV|kI>9`xfh9dsQ;66mupo+5;-GbFmL;fu zq(i49yw^>zMI)p4!wrX@varKuxsUE^6TEb}mH^=gB!FrdXHu=6nR zn#X<6jnEj7F6^WzGA*8o9S)=q;0I0E_5*y*m4)yVgWrux%Vppej~=0ZGdD9Dn&Mlx z*-z$zfwY^;GXnmsJRp*{v#SgFWN$d@s8y~_cYx(`sTnyq)Gv&{4t^2 zOH4XSQF74ZxY)=7`yBRR<(J3tDcrO4;KX6I`#y9EKRh}Bib@#yg|%3GL+bg{k?<}= zB01vWHKZ?E5gx^4#a{RZ%?$=u!l1``%LEu@2H9(nvUJfGNsVZNOrD&iW_Y}#?Uo)3 z?!yCgVTADG$E(vyJcwiyi=m+$;4h+8!Zl@2 zCPgYDQpQ;CW3{DlQRKh0ifm9AT&{&e!-rk)ah5){{H=6|A$JK6o~Z^5JB_6FY%NU~ zfeDaPCXS02WPPNH!vojMO91s1@-kRFHTBSvE<^*AD~)_7_2-T|oncdW{!HVc@q>sg zQxowsHe*YE;kc+Z+Hcj$5|qv9GVcN-aZ`gt%QTyOB2B`@ zp`+AzIrhr7j`9p~T%}VXs_Xt*QA;~ww1&lrK?%;_pqE6eTkS0$t|OE}fh9rCDoYVc zBS;3qOTz;D0HoeBu!IPg_VU6R#_HHtoaqObVv2)*-yVk_cN3zH@ zU>@~ZlzvJdJHVt=IV(Wlm;ZlwdlP>s|Mu_yoEgJlmUHa8v1G{-LUv_XI75~2^KQYrW7b1k3i`@Qe`ab4fv<9GiL=W)J|<8{2A zuY)DD&qKwd9>L2EH8-GI3g>sr=*G=1Fh#;Zf+d}`tB}zCLxjzds5h;mf|0SJ9{0jW9pF8-Em_QQ{7@mRbMce9z|5HaovEA#s`0n;tM(6r2#FLIl|@6 ze>G3YTF(Cv;3DK1je`aSL@{r#g6cyGn&;^!xP+yr?1jlF&BTyrRs<@m#o z^_QjKFQ@H5_hWGqhNQ`jo@6^6rf#muApS*$Vq6lpBYUcr2hrB4V0jTeSdrb@HVxMrG>>GkwGP*?*=y#+F7FOM(}`uwqkAy60W zdU8b|AtOhKfk=R93aHiTt3>vKkk#9AlACx1Gf)N>)y)zRBW&~YwA3ogJe?%=2=^GA zGd)+RRv7`-&BtoG#`LsiJi~v`+)AAOB0XdG;COZ$2;}n!J>H6sfY&5x1kvG>h`a8K zeLOdh&*0t`ZFX?hAoVpOaF6%B7qsd4vB6M0dbF=sTkKGxD_b=8W56h%;Ta#XYNa2R z5iLwXrbTcu4#D%`c}Ck!uEETCX|7<-gQMWiYr1}zWVfpzG+pNQ~r-&i^4 zH0T0R2Z07?o{c8Y3;)0_ID&Mu}K?RF%H@*y&{WWkHO zQzClWnO^VZ38J)DF!6SRYMstv?QREaK?Xxwh$(r5h4J|>a%T=IQ#4Y4M6lPucs||w z?VzJ5uc2vXyxbrUW^+mKm&zA>sm6qNo{-=&TY`q&IHnnj7oaK|?=UNcbQH33Pv8Yw?BsRAI;?hJz~d*@O~#`?FO}64J_^iA&^+ysoOpZZ zkFKIC9%7*5C87SE(1~OI_%8IF>sSu)%kT{J2RTBJJ5JBaFW0vGc7dG$okNgWg#B>&Io)~1uohM*HVJ-2%Y4yBrya; zgHSi$wG3t&C`A)I@U?U-6;? zZstZKt8Hb@#MoA!`NeUbAtO$u`cOzY+qEh?feuOQU5>!5NNYhUPeynXhS$B>UDVz~ur;~^hLf^Du%|l?B7=YJXwykoeA#ws&U6aZYz`gPV$nrrb zc+;C@b}P{j8*QZ%Cl`5QH<tqlsZ^$M65==A{ouAfP+2YBpirUO!JcW$q5DL%hLckruEQ}#8vi* z5##W>#7srZ>Imu@0vrEPqW2K_BT*cR#oQJ?xUc?pqC&I|_DI~MI3aRX=NAIQ=cnrK88U%n@vTl0C`>ybL09_ZF zsl~`qFd8mkb;dN-ao;mr$dUjMF#ANrEiw=9$1F>o$d?`{NiJ6NXi4*}Ocw#>|Pa)p0$3CVq%=Vq3uXcvZ zU$noDeM>kmHmdV&OYt`2VE_b_0|Iwhh4&B1vs*gCN8!shESZevmrSe~Rv62jWAWZp-)2rG9!?z>qc8u%~KgW`@^CoL8xgF-2&s4Xs|WNB)mqn=AzTS zr}h_6EM^sxL}hGf&d!O)UhcuoOr)`2wp>ufrV+$rD@ve|M!%kw^2lQ#pJVV*ZkjDo z#~r{8oH+Spj@WiV5aV4~fz71^bZ;njSd|rbxXe5&QBb z%~y?UB*e8M#5JDs=)>it!{q?6Ja&LDiFSQHX1$zb3i^C!X>v^#l&=UK03QSiC@hq{ z$U;e~4rIm?*kX_x3P-C;^uwFA?rj8fm-AM&ug2L#cKEO`YLh-!e&QbT5; zVzd@R3s(41B>IVn*&M-aQqgmfBBqPz4@Gi&+sqiKNGSzMSGln1zwYP$|x-s^o-<@4sB1&tEhPbZivP$PD?* z^?4F+QOet zUxN#8OQ~Z^S$IqNjh6eZEtRiY9{p&k;%%)_Z>@7|Z3u5|y3yLw+S>N2^~sM`3UAvp z^|mg@ww~~|z8h@=t!;y^+Ftx<8{usqQ*WPeY@Z5m|LgU6>OSw2MfE4kj!#y?pRE4n z`urB}(~s&;cO0L734gkKqz@xo^fB*XYoAA4XdxP--vRD;El?9>9=V1EX=QA2kBO7c*uZFY&%Bbhq zXb0$3JMhoCKs$DBmMQF6H8g>FxK`|ccYU6J1gbeg=R87xWdw0^gsFYxU#`y&jj)YI zZIUqDL)e?l26uP|=j0NDvg>sh(pQiGvauSrFv#5@^li6(b~-KU=(yte|Ka+)zVn3P zl?mgU6Q=DG=JON(xIV9UCEe!yBzk*Pcoe?`TEN{eqjb3)HERnE-36MVB(2+pctK!~ZO1qasf?IYk-DPWXOc>wOV$~pD4+}*^X{Ze zLo0+q&tC}ro6!M(|1=U5NS*=u9jKo=`U!$piPJ&$GtNYC*ut5~u4TzB-XmN*C7z1&#{ z_^u$dhuz{mZj-?h8R3osyK)jMhJ zUJ*3xtlkjuW4h`sm%I4#$_8I{t*U4H>jbq4BHl>*S1Qxw{YPKcrA}_r@owm?+I4n7 z!uQ5~!rFeVOP4)kdJn3N^Mz9$lI!(Ju;a?%?2T-a)Xm!E!=}T{tG^mR^+CQLorgv} z!&&I4PvAPuyAC`L>rj#>O@;VEgHqb6*~x!&B->PMJ!76cijwb*A)08PMZd#CJ_}cF z7pw(uY?mVHmxffvN35Q!wB*E9cknj0t!T^j4xZLShacs8%mlg;dSt)OQ59+X{?S_$ zRf8@Lluk+N(W{A^$J!iZs((D2rTc`a~g>DCa8j-_|qeqn|5s%CM_)`bx`mOVv zu+w6cw2a>YEz=Klp2rhmNS&;KuKXZ-*+oyhP z?)t1NwaUt%LUBXWM~Rqp^A!0U-g>&Pn$D_rzfXIRtg*R}%t1rbRYl#g z7Ahb|gItVAj2mNZSCX~#T~pzJc=eI&j^s)&E*8<_Yx}s;meSG`k=1ZxP3kE6m2(dU z$jd+Rv0CpA=`n7?*j@Mgw!j0Yav_|#8`GsRrqqNb;nRG^Jp96j>@Ak5M>Ud;)dd(t z5kzF2^{uoIFY6>vxN$0#By*Qcld0V@X-@}4GQY3tsRHssR@Mm>bz^DoKNIBY@SY&N z1g@wfpNU<|NTmeyN8(^Wt^}L@GTt~XMK+sH)jA3QnF5WM!CL(!KG_8ZdA7SGhEYST z{GxiIw1jnBR|30O%uTCXrA84mB0&y;dl}}dif(b)4 zbo7)bl1>A7SXxm6`ylmr3X%mdNVvDa61g9%=rf#;tUjazG?QPC=pi3oMo8H+0w+ly zao4CYy}*j$EILNur(8N45C*DF7xMz4-M;8k@h>2>2SgD3cUG0)4rWEtI$rtGkq-LLDnytC6E6>KGZO+!S_T;AA3#Zy-=wl5tm zOo*}*DrSom(_bAi1wzM>*Fa-V^J*F`xey7hhH+G`--uo|mN00FQ9s1Oq;CuXdOM)J zbTzh7PR3ly@-RIe;iS0x7lps*Br7NNX9m3}t#0k}%}x^Oj+gc1+b1sTC2b>y1iCo* zm%H`(PLb7UagBe>bjv1TQ~dXdbwWfcogI4#+U8Li``*?GT)sRr?WPa9mTL6zTsC1G zP4@_I`Or*UAxYtWP7b=cOWM5z0h}|$omuWXg#5^KbQglf_;iPiTTNW29a&Cy6*XAr z!iH3erLXIb+c0G6PXx1PD%Z?w@0EgK(|v;9>W!6xvx{EucGjvd_MT^aHgL5rT3e2G zL~vBTHhgF4k*A4=4E^E@c>&QB++M60GZe}400a)nF0kv+)E1x|S2BZ;^))ABVfcH- z3d1pXbMBwgVv*=3ESu3YE~HHONceRnBp!?EQ?R%!%z58H0w6F6gnM?c(efFE+|x>H z9tvJVCUKXlWkp!;?%TSqBqZ8~zNL~rmt44vyMpqdCnsGLKklEH>8#YFVw6<#seMs- zP#koeh5+YCCH$hteE{>>vFlHE?qZ&K8w7k3^Lo8}na43*T(C5hQJ^~vUg8^-;64d( zbqAknXAV)ZwcO}@EEA#1@Gk3Gv55H_2D}qU(V?mbxrW%+!Zy zvmbd3YF#>t#@Ns!PE6zYTUW@Tq5%S*0K8^T#74*+I2sb%*v9T5Xp&dVGw=OJ+t;Do zJcz5n-WE)}sN%xaOBZ+|Z<%}1`)|c@-u2Mf)=T4eAqR>UhI~|!^blA;^lw~#GgZ`N zmKK_+qb@3#y6+m=$vIE7RE(Mtm^q@09Adp@?6eGv%y_XpG$>5XlHK=?5jh+ebi(x< zX^xHha0r;MD|cE};8Z%wuVAM&S0G-dqT{K#h?u&_^Ujsi_(FkcHXVN!ceh=4H*Zv+ z5!<`>^qB4!^H*%szGSd|+)PwA&BkTf>c54*Ip&KXKCa@W^BVE$zvt}!DUtWr_A&c5 zvoywUksDK?fp$OKlvR@Vd47Goe#9(FPn#TY#-BG*aA;NVDG=$Ix>JQQyNi(f0jx>` zU!e?h9>d|42g!|G#(m)@_R76EN&&lGl9tQfinsx9=WWABZXfp69rwRa5C6^V`$lwP z|H=ODaosl&Y{S}}f=|D@LCx{A?mxHwKq!4gV+UZATxKCZn&pZ`a_hs^9w!N^LbAd7 z(uI=v_SKk<*4mB6bH)7C>}%Q-V?G^Yu^U6+iajv<+R+XG$J*t^ zIyA*PO~<@zqnXK>|b@HA)e&149C%fNAG3ae&{+GmPg&XmZ{ zJlvcqJ(DT>EmMv=OF=bD(LPK0a+XR>ewJEumc~q$*0(G?cebu-w!VF~;pJ@O{A|y! z1I2ZM{kU@jRda(ARSax$u^C|uZs?5$aBT#=OU(&o#CCR_jP_yaJBtH}gz^Ei~iP#ZApGRX51JBrW0^)3I7+d1gAaVOE^qG~>OhZlS_zlayC7dm?0Dflv6VBIE*{HC%84lDX zwfv3abq=pb^Shft6rVG?&S^JoHO|nBVRO zrNvClb=6u+iPzyz-is!eMQ}PmX;V8M*c#|c>2X%rB!M)$P@hfGUHuVs=yFPW5Rw(!3sKq%Q$=o(#_=|BXli`vyQ90Y!-`_9mkVO# zy1NrSua6!nU!pOVKBp3q!gQ`urX}4n8v>%;!~qU4Abm{|S7bss!&A zdsJ(SP>!pvfB0&n73wS!tM+l_!5>fd4s5$OE%i|90H@PoCHe!~F7nvMRwrmAz1_uT zdv3d%X4~EF@$HY6>&3lW#qhTRMDIQcqdW|7=-$T1mRD`kwT6L67-e9XL-|wL&xz5G zFYsBt>G(w|U$D+AVmQsVYxLY~oIVj&@23=f^z-E7&wEE{w%vAzL6>VQLDQZWR!$6^ zxrfTKC1%902E9*$sUFg54JNQ~4)8CuxX>+c}r-!yjWJn(6*W?~_ zZVXVZ_D3d4>6x`{^JYA;7yaf)qf(6xK~bRlXr(UT7DxMe0D9*Tjxb<-fp)nKlb;~L#DuFFs;K;+8u%<);dx?9>@q}@CC(M)T< zN|}5;TygA#B%b4B=@q)ds^NSR{o(R+-aabB+6lhX7CM_dS!rye*}6tTUVK#)D4dO< ztB6)0k{+>Tv1sRH1>d`}rsgM2Mfj1V3fL}u9{?cTSH7-2Y+4y$*KDKBxtg$IQG)6| zNuCRe1jrSaz=`|sYex*jt;;VSQY-_Q!7UQ(wIr1kGZrWHq3LM8r>r^MO#=cafG0~{ zUG9WDlj5NQGfOb7Y6lg(D+k1mdb0^z%~ zvE7S{m;Tsy;A`)fxL5gcK)P|`<8zv?{S(co@E`fwe`YBFDV-ylE`Bn~Ln}K+8-_aj zWuzOU+){jmY{VO8F2diO~EMdKedKLdr~$llrmW;$k|1;_m_ zRmTQAg}VJGRcG?CB>KNSOV7f;A{I-HPPjv$c;>=7le+T1SDnxEt8}9})N;-|wjwSc?C0{C6aYW+RMvNM2k^XkcXD^rr_OX%huA z&iSNANmK}5ex?ecE^lt^9#oyS=!vL7MZ0{ivwE5Y z4gKe+a8&HP-Z3OFz7<)7uG)#t!EY@u!2z_w7KIT75Gah{t9BH)jh)v_9Q3mHa>2QV zwG~^}!VpG&K9Z%WuW1Ua2=IlngyDk~PT*mWi6D>`IE@347bb)_IrzQ5tQ$-2!R33+<(EZuk~ zT%q>XM@O zJ1a(@2!l99fx(bC0Ctn{;`hU|2M` z7{OkYDMf6W~>7O)- z@!t)LP)-_6vhKx;rqLwg#vM!!a^bHiui?k~I?w};WCUn5iIMR$7BMhN%)FS%w(l87 z%T}yhN-^@RaVO6#C`yy6c>VkI?nvw5imP;w#Zw}m3Gieb`eiH(tZ&osjVM0oLJ#)d zG|M#rkEOd)!f|RWK_)EV(ABLjRRGt0q+nZQKQu;UB&bI@kT#uCV|d^7Wyqyvq=mL6 zh}7iuYU#$XUfPHgWM~GjO!cCve@fSN0z5@DM+nL=~=M=r0|?>9Wpa;OUk`I3UL* zM}@@DF*0$b{v+msSIPOP``{qsInHVdfM!6uasd#ET>}ZmEMVSL$#3)+-5BMeY_hesTtw z*@(A)x6FqxLi>6cK8jqZOIR}T8`$ei(_}1GoN&H*CRPWw$xop%jSFWNV!6D^g@EtJ zmw3eYC!XQ!m`E?) z)feJ&#oq|SXl%W`74c>5opIv)$zkmQzDrL0^?N6W&(QaO6)R*$f>4IL)?xjao7kdv zw|}?H7-xg$0zJ((Ou*(yEcu3%7Lg>JO4(-_I`VTvo|NSpdC)QkhM9}R;-?a1O%7+{ zEyX4AY{6R;7(I|{{LSm}gpJ?%w9UOw=}MynJzI5a{$)6DUX3hm$;CGU)wn(oK!HxF zR=uj`vz=RxyULS=|G~ehz1Rb_GZFqh zoqG_F3;I0wNB*+heEe{e@?!2E1pZcn*RSs?zeE^zH+pXuYeOUTp6<>@$kIr+{hPnO ze}Dhx%80lcghx*OL-ZR6XCHo?d;(Vo0J1y@H@{kLMU}5He3$F%7|WySvMNRlMk;yQ zb`W3{SIh)w<&3QJkCjt2)Bawa&NVA{j_BIiMf*3Ev+3b7<@A)ITNY9Uc(%o6O~*8L z7Z@xOK)^twgw4-gK-^+GNqHN_(P*4yq!J~ISuWu^nVD{A7m(sDov6J>O;l{j5KSfO zYrZx%A{SPtg-#@hu)#>@Y3LWL><>k`8t1&SF*p2v$Z^5`Bz_*)8*YzdIgm%t(L| zdGhT+&tx$WkA9R8p$)@968Slyh?jlZs2# z8~vxb-`lxQmcQ^S1geg{dC{)EaCUr4bw76(FVEmy4>&D?0Mz2<>!s(nwF>}RE&lw$`udwEkPj6fA0!ldR+`!D$$xX~bw)qg)O>2EP^e~;uc zKY%<4hLUgp8Oe3Bl)f{cq);_>+N*Kz1+9dTJfx| zLDsTkQ*0A`x1C%dcoC13Z}cTj%7+g!onZeM7{Etz-f`0C`poQ$uT4w2&4h9;hrX?V4~ zMk8=@`psGvOK;@XQJbVLIL`*E(+J%AZ_hmmI{*BSr{3R0WGHmGhYZ_tI4Y}buF{wX zRc52gNri1FIkk(+>~p&I(ita5{9ke)SpXC;044lK-)Ep3G?LNkzJ7CH(Lk2$X(nlE zQRzP?>EAh!OaUEGgi#jMI4M|itjvU2&Y7C+3n{Uy_5C{;@ZFPA1c60@0&FBe=YBNY z@6D6cR~#Qk>q8fWorwx}r=R}q-CXE|y*j+b%PO=KC3zQGp72sY%UQ4cKonFDuwyw#=#g-P1Szk?~=!I~hgoFl1mfP5<>7ke&WQi)ur0b2d9UhwEsxloz0J@1jxMk`n#v+pVuCl^eLrS zF(Lcj9OOV2xh-9Pmws+1AlN#R+2-K;q(76cxdL()8}`rVE+o(*ydI0=XG_B%s`0{cF)F#Xdg_{^QlG{&0m(bq)2vl71t1Jg^IU1 zPGuZ(5&S~=XL4!ZXPIlqMMMD}opRYZ6m|V>GClFcoq;$dpB<@Us)3}5~9Tn z7AN?MO2o{%S&uuii5*By!r8(xM2BU-YU&hCYPxon5r}~{n_yjTM$sT7XMdH`cMSda z!`NwLK#M2w#C?0d;}u%^3nXScpZgDKvYxv(ZP|oBZZ-PyLG_5?gCZrs4$D)?8Jh<* zjD@^EfAuxj7}6mE#fz=VxJrYN*3XN8;!_Q9z?^GAX{L6A*39`7Jfc_b}!$(j5_G)pEN69_#wNu)uqiB@i#J{_k1h93K%(( z|F3E<68H)A`HxDFr8t^af?~M5%)6$!GG_lp%({)2Q6p8kLM-nXr?WUaC`yi%m?x?c zz`FaB5B^bt+?@Jc%&r@D)n3mF49up^(KTQPI8Nbn4^RJ@sMq-T%~Kv;(A$)Y0_`+F ziTK~oBf58A;A8`S!#R00F>7xGTY^hs1SRkeifhm^v)hK64i_QSnaqXD<_Av%ZLIDw zeq_hl{UDlIPN0^1CT%&z>Q{I z_;f;j6CfRMfPF$b0wH#U1YVx(V!UW(LPhcYKmq}9<2lqo`|C#LWT1@-4o8_A7i3D z5%n`3=^1bbArj2WC7a@RT-CVv`md2Cn%YZ$c(o`7%7ibbslBw22IZD=eA4B(FSGjuD!DMaZ}%|`>$&6>|vng%kPke8&YLm9Db9J9(_zY zq4SxKo7tOr!e`W!aO=CEl8sBkO2eGLlvkr*6iv+X;_>^?tXiQ0-ZLus=tv9s(YH12 zF`);XAr>cxw7>4q#4Lb8dW%B$kC29+P|8*(vpQ0~bJgZtfC-#=IZge?Ms#Uryqn^Y zQ)N@11?6#3m&KZ$uRd4EmtERbNS3u?yEY(aM^zI2d!_-WcxuhdWL8-+U=AOBF14CUj)5$52k zt`G5y$T&NQKLhPFK!ODQRdT+fRCaN)$bF}ygKxDIgBD-s$b4G{KQ{&33mmg2Kwu-9 zjd%uEISQ-~rDzYWn&Cb27Cq`gey?lwUE+P+OAD(zxs5+6=Ao+KCgi3daT?$PX=;bL zzsqKO!?|3jB#b5BdMp4w=<}B`!m~|x-1P{h)Z~0pgTqJH>;I$%`7JCU9f@!jS zv!5N$6}8nVsAyiolDjI{t?&=U*WPIg^3ugq2g>u4tw zi-i+@S|mi$kC-SwIOzd&8uzNrVvod&@agD>YIf4DLZMXz=vDBfiacqdoq?>Z4}AwA z4Tsmk8 zbBBQrR8h;R_f!3cV=(C&whQfJM{SK*XO4l1z^D2)gyrzAu6;r zm+O<8!^`a{7*x&*>e76&au1+vAUu3zl+a+O9on$+> z$kDpnEtgiEa@Kr_=hbeHN>0`Jpur`9AG^JHbPZX(CKbSZ>oc}cNa!wJ7E}M$Pe`lD z-mY1abo@48_o61Jaqz8d__yb-=-RyA4HsofB+ApG_I!>Ics>M{#COW3w(#d-x*DuV zU|%IhyiW*Rd+}{Jn4Touz`Uxve-|5PQFod)sRaR);iNQ0+h5xVBYmr}ydG06o{mKG z@Gz;Akez!*=h=aQ_mj z9AC2jY+Prc^q=f(dJmIA(b=iLtKRlETmZZTm0J0#k+?K)(=6B90f4hi94upLs`n3i z%je2}V)`!TwLr|hl!FPbIdD1ayv(1wrUz!)zm+AQ9LH8DDWc_I*L3=x^N;L{8wbzx zujKXR=*d>v^K9XCuCflEbdZ#;O0bURR5AY0b`Zp^%Aww@e9$3xa_(=Wf>FDlR>$8w z60b6|U0eNq z?a_6D7hxe4?`~a`q~5!YR!tz=p5qWLFP8mSv0CE!b8R(~B{lJ7u!og{TkM&*e2F`S zA->mPMR7d$@0I4v<^$zr1@~#}tQt2+%TPM}fYu>9aLNPJ0>4LHJL?Y~Hyp6Dvuuvi zK#!PTrQ0m>edVn=eHuGEs^zy?Z+H35X2UD@_nVEDmdwC0YL1_*<=ib=hrH47{vbn% zwre_2mfCm!v5W;6QhslLXh=Sy?Vb?Rv5if+HI+)5?a=t|%h-Qs*JK-;rlk5+`i-`i z91O3e#d+nmHh}cl8Dl#3{D^cN<=KwQ#e>oFB1MrUG~mDZO>OGIZIDaP8MA?NiDAVQ0O9VHDMSjj}U>>cvanH!|cs((vr#kJMd% z?$i!{puA*a;3d*sh&bJi5KZKs3|>M#c!lHrxqbYXhbHi8Yl%U;61EjlF`MU+`gTHn z1_R8ss-dJcvQBGdU1&8$X<6-UVU+&3@GU`P6X$nWX$|OvKA$C!YA1ZRxai{Jki))zt3u0>~Q zKQvF8(c?+m@4)uc=Z0^!MU7QFK2WW%RH0capA0|Mem_f<2?iM8>{X|oOH_+UQNNT{ zi`>f*%lQ#7HwsOSMRauld|(wN5)()Jx2Shp<@rF1B}Pbb7mY?@*)k78{%cB0eCgpp zBrFpZiie@P><%J8>@A7I{Q5a+?j=)N>#ulmAM!eYEf8FePxlf% zOi%}i5S?p#Oz*3@8bn`t-8@vckXAG`DF)ahV;rj|Y+hkK1$lPxXF+nyR0D-0xED`k zEA~#BDtq8>U~6GUfHFFLx4FZl)cT=)S5|RY3&;~5fd;L-wFjJ6{I)t+;NLi78B3VO zo`E7x09`^ru=gViORm|Tt_+8OE*$5BRQ$CF>#a^_$&tHm4`_t`09U;9r(3tc7{}iG z8SCeLncaP%nep-2cLb=xG`}{% zm9;7`GWJk#;Ok^te^mnK5~9F|Y2C~9MG^nN$4dFr2Yc-Q*+y-`=#AOu>G3N_;4NM; zRe|o}1+wW><`GND6}|}LFH(sZygK5H2j=L;>6Ib9u5-5ghOh0G2vR?4Unm1re**Ta zeadYCPXR+ZL74rU^->&2yFBb_Md-yNEx`bl5#ey~WXqgUQk=dAPU#M{>X#7N8C*uW z8YeKptr*Zuo}PmG2xd;gc6;5npcqrPGw@8li5A(O!*yNSiYfZ&w@6P*U39GQiOj20f;fx=5tL#K*=g5 zasvb=Xo+c`RLDP6VL-lWDVvZ29#E`_#74t`9y#V9Ygi_9J5Kq-rCwzyp7)h^=`G#M z+U97_WF~C91gC0--0N-EHIKeNL`9Qr&BvUk!Mn1T`hVxMQIKVF*WN`kc`~5Sag{ke zx~Jjl9cvDU#H$QI&_UKgS|9Ou6*4>k51ymBx2Oz;dpZo9U#jggvqg2rnz11?X1b~f z4$Mh{VN*f3-gn(o`;oQJWaE98A5X`K|M|%%1veV|Y7eCdA)?{}yCZ}~kp|!8)2`sQ zkEH?>gKLZF;e2PV!?2?IdjT&V^wkPw#)xZNsu@nsvl15PH#TQ18H+Agyrpv8$1Gjf z-~@{(Z=&RC*wz9AfVeIk$Q5VEnVDbP2LTp6`?zu&PDWd^pEf#m!bF}H;D%!pay*qF zt{lc5oYzsF9cdurTQhZIXOZ)3n7%y6BBLaVj`>%=g#DqCj`Adr$8$#vqAs>ah?%$_ho6JIEX#LMZo+z^2$Fp; zywrZ16Yw+uRri(kPi2lg!?zF=goWw&?BV|Ug?gZoVi%wN!({Cwo~cagbzHM1LR(FW zF}@VToO{K%pU<5^MYO9GCgiUx+5*l9#Gn>WCGpz?>e{VB0dZW4ZX4hdRkhHJnt6?% zQg@80G{t?_G~rKTV*;ipnPxPNF} zeZiZD!8Y9~oEMIcUtlk3g(ZgDoys75s|93{f}+I*j74^~sga^tLd7^bz$rpEl9t!* zkY^NhqRlxnxDy?SbC>Soejc?20UFLQ0t~|Ry!eYa>MI1c8;?CoiEMza#rdJe;EM`+ z`;0(d1p~aqI+A=D<4o3bN9m@&U@Gks3_z#aZZp*vDNDp$G`9SF4-7o7CW+I1G!gYq$; zpX(JScd8Ppf9RYeFU9TM=@hT1#j^!G5)1EQqF%Y6v)pfzxr*I!|WVh*Dh%vBt*AuHmeT%B7`2aNsFI*GOwiud{)+!vagtb_wH{ zjwXpj#>K@b@}!`5a93jT@%&`}`UNIQBiosqpuv_0_hSxY`JI5t<3^nvd;3+f?cDB9 zuCVIUxO@iYO_FaUILh`+EJ1uH5&;B9cZrI9&Edt1HXy4S+jbYt3>`{`MJY^Q4_ zWyOB))O3Keq>o^ld!GZ}Ke9ga%RQ4k&isa4-=Le>CGib^ zRVO84;%P#0K&HIaNtpj0@5@%h*GmPI8uOgfmcZ-#ZWiOV+{Pri!XH)Vte&v3ir_3g`8K~L7c5HTtCgxpB< zTUXTS81y6_T%jbW26$tzrm?}=#eD&SZb?EV3F>Ya8I{;yZ6yGJ^$YVl8VjgXnS$*0{=cfRsmDMc)m%c3jDppU3xA8R@}7O_O;{>HH_m(j?EG3eu^ z-D?frA#+J)$|iCYH)SBOX^NI9ocr>Z*#i#8e=Y-h*~g=DJoRhn4P;89N0VauBlGIrO3|ceS%>ycerm zCN9GrAiAeCI7xG7%FU3^(-8SB{#ve6(xpB@`CtPixz!*5A&-0~dPp)3j;%S%E#yh3 zh_%vn*Y$#3I7ZWZ7#JCWK=S1@V#Z`anSYI2q$v3IPx7^;<713?SN-;jNEd})N&T|rCq*J*Zxq`SfGhbFBJ;1he>gAHZP&Rm`$QZhy z-^ue($Py(R0_W-hxs^cOQV?bsJNEsdIM$Wf801llqJ}+^3kVJH#v`gLyO{uUYWAwy zV{WW#DG7a=j`^J&`j#9s3%lX%0z*Af&|Va5B9-hERIx%L*6yIzUSOMp(T@)Uie^yhh?i&EeJ>=~p$fKWa4GqBpi~$o;4R_Al0M zx)v+7)(WknztWNfBAK@PYo)^rfDwUDa+q&;jG!Du|3@8w<28AJUfF`M0rmRHb)WF{ zHp%s(?sc6d=ykdJcO&&Kyuy9(hR1=@KZ?*Bt_^43<0eNCzV8nkOJUrZ8v|Ymu9DGw zMRfZkjT0sHm&5DB-wW=}LK$%IpH*QYewdRF&|%?CUq%~aYMOo$8pEN4{EqrKv*xcE z=%peU!xro=k%opz#z-~aW^UPm=!^r*cPWs15cSrz=n+fgI-%j=`<8Wx_9h(SAgZsrTq2F}qc5vCoM^RVJnRg9B}YgL8u~_6A4zhQ>68CY*+*B8H|5hi2P` z=H`Z8?+sD;UeKWYWv3S_5ieE?bC*EW6!}z)WBtSTm|<7cYx0XP5yQKM!{6J6_vVIw z?F|Eea`~vN_j501i|Z=Q9=)hC(fc+6@{h7;jl<=ut9C){D|}4h6q5<$ZI?w|(l|{FMLCsTY-~sUj3w z^5u-iOX0+q#Ph?iDKBJu8g8kBn^epYemMNfbi&Q)r1t5Q`Dv&o`j;F!_#=9i+;t1+3F!#1y*;^R==v}LWq*iwbEIL*X{sQ5IBcFgOP;xS ze(Li6=6tEo%LUZy-NO0azWKtNuh-jOZw$SjBBR4`@L*ST7Zr7e2rnd|mwyi4vSYFZ z=sVTXg+#b59{HB^dR*h>%KTuEGkS$cMTb-0ro2X=vu3F?nm6jck;VbnaFh(1s~yiL zv#2YXIZH{*zp{8|np`lU`Es7j>OI5Zk6xvYH)+*WtktjvX($c2(Zm6PEMQt@gQPox{RTQOY z?Hs?~InQ-H=X(Bm&bhAqlYf)k_xH|cyxts()E~nh@N9Q@8Wl22{&+nJPNhTThcR|p z@JBS*p2uXi(lUn*yj|&MuF~p{;N>4Uct_x;%(w3chB>;2F~2XfrlDGX4MLhP&y_2E z`dstXaEAPuw!j;B4*r^BHTcVC>#F8^tK_$)@03<|tX8>d&$q6UM`mVrpZ?xYotmMr zoOhm8zM!`ZxOAPXAE z55sOxhaOSCz5lW{YBm35_|N+ox);Z5SH}A}?BtSA8oZan_K$l017_q%jpGQ*F~7my zOJnb(nzo=h-msnk_#Bfbt&@{4pUkn7&ru8jzo(oZrz1!k;KfeXbF81p zUb8Sm1CD75dp?DuHJGKB{$P}b!MxxY!Tp;=a!gRzJCPitX!i0M_Re7TjN#!i8;+wQ z_Fe#d#$$UBzdH&5*N{2xGZ4fLaGSxx^#OPafDK{OKS5r-E|+z&;j5DgTl+A_k6G9o z+R9=uJCRN{xpHmv;S7(jA_4-F5Z|4pMg{JA+g;Ov=ifA>8*96->^Z6Jo^s_0;r z(H9^?8sq>s_x^Aup8^tNv_m|O!C&sPWV#K(Eg@gNvB^LEvqWd*ab#`4v3g-SIiIkEzbeokozvTz6p{TrM%1aJuJT0OEUXhCobjcxT-yJ)2fpN-lo ztr1ezy{?z-*Gq!yM@0NRoCiuhD^t0&JLR$kX0I?M9`oxKD~Sr*yqw8*)dUL_m@#@% z4n8i?b1lh^K*HjE{?yu_3z0@Jhsop6>>*;OWNjpSMHIXk_19~3+^u3_2wsu{3+x2gBRAL z{0?6yXL&aC_mV|(Doh{f4)bGK-Tug4Pl=h)1`T216-6aYG+8g6VA}3V%6*Xvi6<_; zOl6z~gRkR+9@X>DGx#qDf2xP;{+XL6-=Arge5|6kxsWek-mfU!AaZAc{p#`Z z&HRhnKBgkRl9P)SS|YNqMej^D7eA9d(+C#6nnmdpaC*9V!!v;HlK{IsFe>#}KG$hK z<8I)^DFJ|o=T*i-pPo^oXTX~}BK(Z5W8A4b^`_d-<E&JI&>y^ zg4UO7(=Bto3EY}{xepZd-dFs5w!T6xOb@GmUGa1s&r-d=c_@NJ4HgbEMlwSw*y`qKUA5FG-1^>t*B&or3MrWg-xOoPMU%G z*SKXTov>LyY)@-C41PG`uC@F-+eyCuX0HO?u!8jByP`MOdCI034`Nr@j#m4^$63FYL_{#Ac^@VzRtAYWhe@#b|J(##O`~ALJi= zvp_}YD*M95BhMbs)SGm6sf1lK&65wvIoAu(UD&(XH=5#OZp8i`nW?-IcS<|Yi!X({ zQ=^ue?CaPmB(>QqSdIff7QW6N6A4sDvh?Yyi;H@B469BqJP41R=fdciXw;{tVfB*W z(F}aHlAaw2a@kWM!YN*N{Ciq$R;RGCJWxl;2oe$5X`lMWp&G@ajgI`z=M`zA;wlFA zMjNqj(!tsQQ`0z}aSG&|xAEx~98q)pIU>Q^%@XT%ypR5Cu_awuvtNaq(wp!1I9Xd zKH-NImhf3x)t>AxovP-p#v`zlb+m&@Z^@VuhwtvZ^@Dt$NA>9_N01|yu5E=YeB=oa)+^#4g>I`6Z^ObK zTIvQo&bU{@q!IjZK9=Zgig>S*5{RGYD=B^MX|6)l$^{7#e)N>b-!k+SdMq&H)T3Ga znnOidLimD+nPw@|k}IjqLMY)@Ly3NX@1@VvAA4>!sy#*;xV?~$#yfwJjGEAQ%;Z_Z ztzaE;3st-3%it44L)H$^+k{Sm0U49D)FFBZz$11#*G!-9u^R*H7Rz&xXx8BuyB@#3 zTj>p?nM~%SHR>;jUKI8+ZX&)?4fRr2+}W+IaKohwdGRS5c&X2sfw3W*+VUsd3uiyx`trlzcFV`FCq0t0xSU3>&?&I*?ux4 zifkh3H_Ba`XaWW@+ZbeM<=;P&R*<}4Wyt>Burc{9vpNlELIXL{mHjtn%-yCW5uwz&iz64a(A zcL-*6oK{B&bs4FSb%=uAp}60PNxlwIySMU19Mv|%C;UlYnT z0R-HmV2!xD?IgSH)w>-`x*Z+6FK~As^JQ4+acM6Y+k)gR8@gS)y4}XRFE4bvhrbne zg<6B~iL-Ltj)}jvy01C*T))PVFIKWI zPQ5SQq%S_-Kua&<0U2^hq-cJ(MJ-teU4Dnx}#K)4BUI zOwMOG_Gh}CpaSPJWBRkM_2)h8&mr_b$?AVxeEwu5B!8j5V7s5P+W#D6Q8?aTba=j) zd!X=|MTz=AF=3!2e4zBr^(OCMI$FNG z_P)XY{j2cz&4l-_W8Sx9S+*9xZykUCX2G&Gzo&X%MX9p6$)}C1Mjb^%<1DPY+^i(z zpxrT6JrAvV39X&QR(;ijJ?t&1?+5$8SoJRq4tEXG7p%rWLt|N1qbAk^jzb@=4Nb7i ze|R%EP8b?_X#FvN=wp}l=LV~p@xhbw17ntO_S?4AkmT^>;Lv9)n^|s~PYpx!)z)(+ zHcMUBi$XTb>_fsu2|kg;n~C7xhr`~`kxkIZA8y+%$&oF`k?m`?+u0UFxl!7nd~vy0{fCE{avwYg^4l6uVZ$f zUw~LXpih5LDaZ}+Cc5X^oeb(TG_HTpjQF6H@IgD*v8Na}K7!v*EcPB=XY3y}Hd3#?7pVVmvT_KYKp%~SKN$>27*ZuRiP=*;Ux^F?c{FNv^5Mi(N`XVrgfZvoOMnfMmmc(qfCBzG(eAynZ+VHE z;48QJ#Dh`N1q#7p3S>?Dl;8HLpxgQB&?l=YkVPUPVplCyTT!GhRsc6GFw0aL;ZhPX zT^`|5Q4`DO6sv4r=`%51^JDsQ!<65TDeCFZb!Y0~M;8IRBb*6b8LznRqY0KYt~~Mj zvL({_(S-XLNX!QD-YnF&8SKwTu$cl`^%3$lzPy_tSYf_&vP|3Xft9 z^!x5FgA-p$&M=ub6E~Np>8HPrUcfaz!6fWWhoe5HbVKYfe+}4ivX<=eJ1j(VLEx{O1|yC`gYKLB|*S61OWKu zTK?i_{FXQ5gCFG95^JC4eC)$=1y03$rX<)C7IV*GG#kK@1 zH1Se5*x7^dBzuN(ndM$CF&q=Wae10I7ibA3$U+HvD4=C7&>RC)n!Tz{J$cJaX!{~U zB{1$Tfyb`TYu=hq-6V$7AmPEe1dPK(_r+)rQp*wKPGURJ9CAAmI#mD$cYEOq`dA~r z+9t@JEivsdG5V}g2&p=4u*+o7%zRH9EK6p-u}hLSr<(C8-gnB2@F4!2a5jy+aET=$ zxH-X`Mnt`3@mliq@0+v6eW6@P5LF>5n@|6}FwKi6NMqvNs33Fg1cP#B%O#*CD$Zcz zquy-XX{YJGJ4}`sQt;By;g7|@zl%Zcok=@a_}ZLoPtWdVlI{Z_YR!ZgGU*Q8E91QI zEsRIQQ5{Du_#@59=FIE^A@EJ6CH$@I&X;L#RA zm+O^90qs;gqef*_l881QGfyvEcSiX*2eWvYgD>C`BJkIpFw3;=>sB6DrAk-L!dO8`L`;=M%3Z7PK6@A&<`pZ94i=K?&!cS#zv063KC&E&5)ivZg` z$hnDGYwIQWEvWNDbEW|MK=iAdGNkolh%G+h4(jnm4`N_B(NdcjNK2sf6GJiIpL9E0 zEfH)J3D&eZTg+AKC4v>r)0y_;*$}}33cgDrhC@NJ7pG4{2|AcK#_7noGfPa86ecB9 zoCqpVe3oh9X)Hg^W$R3w+Xgt`-u!au`brK8&~s7gWFZj+62!;zYmn|!na;{E%cIKt zk4QdzdHyB8RA|56z+-vvzmd?`Qk1}Qyu@r=#6*rP&vWW9N*nv{#5WS50Z*p zUd__y5P(}p_RLi2B`Xj2DB&;5DFNNt?$%QvQ$Rw*EHuPCK^C(jz!xY&x$)<2EI%ri z&tr2tVpG5=a8W8&hfECiUa6Se6#ls>($p9d4CZfx*shW8^+BS|f0~@c!{V9lHdi{I zz+&35h7?FRpHU2rWV7?TNhH*!J5(X)H_vRm?krFa8p}|djn|I^!pTc-xJ&d=7I;a9>mqtAy9}9 zp75v5jqrnM@$HwBGWFoO5J_*M--h-t%^e4`9a5ba^=LeX0=XBtBTmJiatb|51QiF8-n$YuP)J^;o) zNc>Sk_*nv4=J*Gb{uiQk+hUjCMF|MVHTum#5J54We)R87*=_upSUK~ANb-8XNQcGF zzx$9~Jn!yNv$6Xw#CmOfx0Mu4CB-C?LY5#518pWpYMd0KD>66H@Wz6#2afQ~F`=Eb zG5OV!nxg_eIWq{Bvp`M8uPFL1$KTqQ+1gTbL7X=J51)gB=p+v^3vQS246;w*-KRWC zxZnf{kr98r%n_yy)=FfS#P63s+OH^!lH85MG=t$*J2gM|YqcEICocMZA>G@6oJ5tL ztSi8GNwrgx4;+JF?&BMces4>Ew-SHf(uDXI^yPT%5YemTn(mb4^4jLF)$QO;v%?VW z!_G^G)n+7_HwNiT5TsGs?yK>%4e-eW0{`m%@V^*`D-lr;?EyAciY7!O~;z06cMMDtMLMlQGjK;JS4c!4z8VdL06_*`x2ge}n+MBe3$ST1EaAt@dH8tEf8#J=Kj6m66&0 zX!S%ZP~0p-!RL?UK$hI4djI7=X9jasZ;n;_Y)K90>)!sey1XS#rx<&tMuS(cbQW7M zO}&&x%owVnaS={UX`+TYa2uHwUggUlO0M!A7n!mzPc=Y?j)0wWLyxsAjPcGdd)A8X zFO63w$k_R`g!60Nx^_{~^%bKliB~OfbysDfFGJd))_+fRaqzKL*!t?8+7i9cEK@09 zUwvi#QLD;9LQc?F>DI!L0~i>`e{XYkZXOtqBZVF;XtbGe-s-$RL2NUvrTRF8GxUzU zpLg!3{hG|){iF55-RUR$(Z1i(@YgqY_S8eIoT8`dcK`hR@FIv|aD2G`Z|nDOh9RDb zRT~w{A`pp+gUL0c;yHA8Q3Our@`p-ohYo3xYy~&d43{??1{Jnws1nb8l#4cB3M{aBWg<+g;Zoc+5j@eg}HQ2RUK^Oq^SY?gxX*?pQ9I#J{7>n4c zaaUGUw#Zf0wCu}O*A3{(*BGXJ7<`&9)dkm0Vy3|j_rsTd6*8>mWr~+_y@uU60xJE= zIPbbh0t$`KS0)l8UMeKD0O~0sY zk>6)+2(Vie(DvCMdtI*;1|OMCICZai?g3sT)-FoX_CMwrR`F>_H$A!2iyG{Ge{}!t-f~l{nbxP@G17;d z?+p!)c0S)XJZ9|uYBzi|uPwozng1d6R=%_d0|1fspF@n56nVkbd&Q=>5E0E@_^$7k z8I_z8?AMp{fF@=JS!SuCZp`fVQ=JIC=O6?89MVF&3vuK5Bc@@Q^JCvry8a;$)m#C)d4q7ylw1MUHU1V1z;K1C*|=4`UsuD%nM-o?rr zFX{p4I6X8gB}{J$zU+1~Ztr1i5X?l>9q$k&@y+nLmxF8ugVUAl#~J{^Pq(Y3gG5I8 z&)3J+GeRRzpqcWX3V$Dtz@-eqaVK#-Cr%I&k7p4_OR1*au{wpy%o}vOp_b{x%!v$R z8>5=?y|Q~15c=}T%%PNaXaCDb+&^T(94sBo7t+N0JVl=4s;lcNu13AX4Vf;fk~ITmoV&=IB_2y%X5TOIoq@f?pK$P9GxO zJLM!7m^H|o_*vTy0-#`ZXS~gHzNo+>uEjriCn?4Dv|`ZbF(p?VSE`z_=RmPJm4`wy z36f*2Ra)vQZ0^cA7RgOi3_r;Ej5N!h*<}Za^y+}c>MTg0Pg>OXg zQF@WO>+`6m2_@#`n`s*A??hvqIt~AB5aroBMeSv}5ZWrlhS>B*?bA$Z&Trz`oKR4H zDxO1$!o+TZg7T1!R4${hazbu5wOmkA&CUI~Ja#gS|5l^6T?ZaUcCh7Nqx4I4Bcedb zo`kSH5(yJ$VZGaFyWJ=N@&*Ir6+GPVm(`ZTiDo(WI+W)P8e zVBLq$Pe-F6d0&VR#%WCmX4SjB*?gZ6Dxk{z$P zNeFS?*PiNB`dgQIBzfwmV~Q_Tz`7CYVO^X$#E?1-2=V)f}w4}|4c88eUR zkMJOB5w`~bE3st9aX-;ZaB2r_Q>NpXzcSg}eEr4;#%;^NXRO(eb&tjMszXdFGv02O z8tSh&d^6Ry7t&0!Xf6Dc4!sEY%~;^|V%ucfKjoIjfzNg?-^@weROWr4Szl%C zSBw=J^&n}!{H0a+{-AthP`0h0;_kQM&v{d%MZ3(Fah065!$m{G{b$jyt{faM>|Vcr zum+DwAS98rfU@TAB%^{H;}0+H3-bMVcPe0J;b`2BbC${e15S3#^4b%?L4ptq2eCJrC;Vz+hqewGQLaQ=Gv&&qISfrg= zq+Mvgy@b12aCPJXR%;NeL-o>I>eO4p>d_fkopP|jVv)hRgyG*J!(#~yxEKSMG`d05 zlmRLgV|5fHv6{tL14$FpViOz5bH>+n`OfJ(7Mli2n%$DbmSW`(SsF`7jprVOEMV32 zm?g=^qUDm7!%SAgM#9@2>N4@xGmyKgu1q(Uhhm*;&$u?0 zxQ704cEQR`d~4Jg)4_C}q8N$LX>#*NY&fl@bbmEOF^kn$#$dZ$YHVi8QV za|=L)aR6ciAMgjjfn?(RBE|Uyb9$rmHeNi0rz}K7I#jAGR7pBavn)*aW~pA8OL4s6 z#+cg;*UOFZ`i@reZ!jE#wA*n%*}4FCdN8m-ra~xj{k(K^V_EcD>6o6fm|^L=lRu%y z*pcQ^y%?crcCtR*{q`gt50{C3i-D2ju8pS4ev*#YERQ#kA()mEY?cV$%QTy%&foay z5B826#*^Z1o(!X$GRGQ@ce2>YB$bvY)ygC{mM7PjC%8+W?^z^9Nyl=@aAW~Q%Ym4- z^0Z?aGPr^amrW0~h!`mOI>_+OI=pERyp+OP&RUJv>~l}QSdr~6n{%TgXW(c0RqvC4 zn3S1v(j-3Cm^n&jDW|mJajoo=#)>C@&)t(+e$Y=nR7GYORQO#(+j{a7m(|ml_l9{5;PQ1mRds>O zhT)wV`SbTG<7MMk49UhYt6xwYlVn$lj!;!&pnTJ#h4xE;V1@}?NrMG4lIb# zG^;xe6uMMRs#Q%K#~!hO6mI4(>3n;jDB6)fu8D>VWqY2tM6UP zR>eU>ku}lWHA|C98{iiM$7|f+^&gJ|r&wS7QTp9pADI5|*AT#RJWy%t;)|U|zl?4frY^OujgJD?52yJ?KU_ zy6!(PqYQv-JkAJ;<*)7utp-R_nJ>xiS&Zxz`p+m)LAJrkTtVxvutZHIW(V|1^^730 z{JSu~tU}RPDELnlnzalalM!U9{%gD$LNHg91{L45P zfl%SZiuKPj){iTDfd_${T6L#dujHrJvi%$~G{NrZsqowkSv3jCBrCxsOco1)JH9IX zk2am~>-DKh=QGgzfmHr>6(O^v198wyuq$7$ib$`D04Z2BW1X!mNCfid)aMQRFEv?! zdX)4ZeX^^(dj)s>Y$xROn78c(%B2jq^6CXr+a1M5(<>WEI3xl`_@Nn$@0( zCYK*FHl>=>^s%)%RrZaFbqXKV3|rUEI?U~v{?YxXX4GDz{6u;4+!~Bm9s6hv5wCXI zbrYkde$IBysC9kljsNG1>SoDnYXc>#tZRG3O}^U==Oxxev`kDfK|ONY=iAlCW?qW= zZWwnqSjVplNf2hAil6${V2e=ZoiB(YY{@Yi?95h$c>Q(#w(PVt-VCT4hdt3ft8szx z%TT^T>SOqYpq)ldwZ@2Xu4hV@(jqQ7C{15gZ=}{ZWoo!0{Eo+zji&-+M#5Y_MpVtH zT^?(={QFgvfx7NDs~tV8`j&>Lt8d0anb7I;XTyKbjzxGH-l8mqKfCkW1KW7LwL&&xbn#G&6vGo4ncNy51k%q5xTFpMlbpz(Gx=ydjK{|Ow zZuf%%blu)%$JZ_9ynd3_OGr-0J-bV8f1N3M2Tt01+!RvqStot|4(!*R2M4bUT>ltD zbqh}IKl!=cAsz+$)m)gVQxw0K|1$EK*?#gtye7TM9=HG4kZ{^dH*aJu;VA{{ZBe3@ zL`sfI7i`JW-tREht>WD)?%a1A*)QmgG@FWgG9Ojdd&eGnv+`TZi>>CWN31U(k#$eB zDOypL^Z)8^?&tlyQ`vjF;j^|tlgQ$5C$;GBE6cNG(g|hK1k>N=*6&3VlK;Mr)_l>V z-D1Yrt@~x&dULOpE%ME6^AgM7@gL77-u(Uj>#8vY+a!Os9T8b$c-DdU%{|e>r>?E< zu0%E_Cs2RuG#JLjslCCP)OTOeuGqR@j{{YoJ?wd}sZY}gm8{BwoNdyId69P54UEQG z>5X!|dC%LpwYs%HjK)4Z5UXl($&DI%|F^Akp9yl*Z5v&T(i;+Ni$F9rkDUGR>mU7g zbeNfbv}oP18fYZ?)~ZXJue`z)ZNy-dPNhT4JNa&H8I$bDw)3tZjkAEE=%`Qfggyz9 zwt|T!Rp0FA(ZfWQL9MQVwAW!yyjm!eIeCJHQ@k+_IIs0~W=mBAfd4MtwIB*J@Na1x zVYJ2HG@tW}H@1p5HtC%I_;N|YWI_7e^fQ&kT+F$gIBMktKK;x|AwRr=8 zHt_eqx4#(%8<6%5gyAM{`=+SjAL;f#%7$B7?OTS1+h*G+IOxP{=M1$H^}hc z?e>4J_m>Rg*SES|4zO9#G4`{qpL!eZQQ{i-drN7@?pNMYQdmaKu#HLQRz4VD^?(=v z5{mgmivw~>IX06$u_T0;X_j{S)pNb)hB8$Dz#jxoNg;w(mrenO41HVxWhM zdLE+p^7pJ@w{u~D0heo~{sC(7et9Z>a#|9Xt59n*6RnSeuB7>YTHHzI4t7gUV3Dx4 z3Q;lcf_)`gk!-{jq+lEzlW+3EZjL-NBJt=?`xapz@fa8%K>-CkfD?^fY!Af33IG5U z{(}zi{9m90|A!%Q@7&0k|F<{xzZh@lI5>Cy<@f(PN%=q1B~Cz-6Oz)Z8I6-5{udqC zJQtPvU(h7Db>P3=*sWOL@CiwI{ENl}V)5-32a{*FmQL{emx?IViP?ha`jhz|bb#tE z=?ufns;~SP9k4;;Iie1C&+BqhPFV4ZJil+l!duKtPRA*X7)$ z`S-ue0mcA@quI3stu)aW!pz){axRiX#;2pV&Xl7hpgU7^=DRMZ{+Q13p9d}pT%XjaO{08j~C*^quSRR9UOXoUCm$=N)On(TpQy_PF z8=c_!f&2>c{|nFm*6cz%Q&z3&P*QtB<=XBPnPk20IKlI=KTa-0=GoP)krT%I|DkfF zYfjQ7wAM~$;>{Fy#!ndUoe8I#|6lUYTcXBt+8lsx9l0hb{1!9n|^lOYK}=(lc4imIz*q4f55wm+{~ZG_LkyT^vK*V z$+i0>;{a5%aq^4WJWZaEu+&w<_}KR&GxXH|iRb@sjCWARDez$rSZKKORpVq^_{43a z?|5LU&bN38QQb+$cIT7ZjjgWqvB!4tk5V&BHo(>?_4`NsU!NgQpcZ2W133EZ2q1$z znnRdWn|EJaH)>96?i3dHeP(*hg!jxn8MJtzIs$4V$ zfH_pKCtU_$;v!?YSb4uUKN9A=Y-2^|R{n#~aYBo^xI2ZuxSM4*b%SgGG8bg}#L}@1?6QwG;`x$7+v2??;@Nb%O!dSd zfZ)Q+mPo?L;HKFg#x6;*E)GM*@$luaz%je=97{h9&xBqR0C;yR11L;pjv#ntmpSjn z3Mk5vz_G#ADPc6m(f_~>RT2Z0fL-k-o;2Mh_kf~&^@G{7_Nb%C0`5Z<)3{tZd|bXy zUM8_G?yx3Vr%nifeEt3rt%Kb?*c^Q)mO*C!qbAmQ=xU~CCu6MI1^+hSWwb7nF83EL zP5_+O=To)Lqt6ilbY@ke57AH(1pS0hG%V~tB`Z^yA-4Gpt*Uzd8nIBkvkUrg%o%BC z-oXtmF;|%_Oqu#2S&YmxYs$|x)mObHbX{-WSm=4$)kJ$#s|@-43Xc6Ap$>J3On~jA zBZGr?#8;LU3atlV!4Ik=e_>#l5 zSbRm#GvU&r4!vF>maiG=CSJJDpvM>QMzSidB(k+UULbBAbPJsp?*(uX>X|=%-AOe1 zIH$Y7yTje5fJCq^UX)?)V8)?f9&nyGGeJaZAd@Z|G?Ck${6nRPevPVrwR(gQo zkqAd`P>l${gLUlOuelaY{KgPo3z$f>Ngx#6YkInaDo7~)0dwL zewCe`+E&L8t`wa;TE?ZdjF;K$RJtCmSnH@vHVyC8e(R=jsuX|h72))q6_n&X(>i@g z75u;|W-VA6CYy^!o(a}okNgIe&e`;d8*CA}dgY1Umd$QbWM^xFt)694?QYN6<4tnf zn+0jxy#d$bKe;1s7PUt9hNF+SD2TQtGu!>KC&%06wrwlIw(lm+z7?k4zPrFb74_+q z$lvC)wly}}gPGq?|FxAJ{oWFZnL~)KKkC1`p7!GJm+$j?bdtf=NB0=8jp4e4@bV7q z#nM_d<6sui&e-j>J^u5AakymLzW;IL_-`xY=-Zg?;m>EUxaCFoPTdfAE4zz_=X2n`36htL7w z!c%bQCNw-a#Dm7Q8FmY1XMqca7E-}!7dZ?g0T3iJcTVtoDl#D(i6JKNUni>AK@!h# z7E`Tnm_SZfZ?jOn*=DMn-%`a&%GHucHXU%{sfML$|fK z#wjN|vL|c5*Xo?YQcBpnkQ~%zof+KCuYmB^|35SiO84@;3E&by$rI+BaPXUeG3YhBa=Dn zm~+r92j(*KXtE*Gl^_sjB^ud7NfUrw;q+1R+xFA9O9D{XKW!v%q{CS3V7a)o0wj!i zG?lv!WP36QO$XXBHqtFZVch*(9aG2+$5ghC426me1sEWU0t4V-SyWCH98h_KnVA!4 zUy-T73~S}|wXcI&^dp~8GPv!4EMhqqopVI@FdKY4JKmi3IiwrQ8p~+-#|_TJe>pv! z9Di;;ihBJh=F_8ldynw^xiGDVak6})cDadpxf37KlJ?MsFhH``{ggfJhRmGIJE!mT z^XA;i^Om@kzjsI4gXv|L<+D#`*1}I)povIMCeU-Hl21HTu<-t00dR97{5g}12h$4} zZ&xEhJC{Fbg2Un!QkBZ2Cc9GAY-e&tRSlu_78iIBn3bb4ICa z_FYZ!=4im44b&-Is^|E=QHT~OLJ#nq&$_A^Riy1(B=fjPXCPO><;0u}pFkIzxD;at zc&71iuTsP&8ez3kY|UC?TUl%=P=aeI{;c-E(1MTp6EPUfev+n9*oCMxvz0w7~+Gp0o0|V)ZZ8BU8T6uRg`WVTvJd0@ihncvI z7;}lX-^8p?;BPZntu~l(d(5`{KpJcHj4n_ORr|^XC{Jegrm+NKK$_=48mJdK7!VB) z=gxu)7e@~y@eZz3(=DPWTw*2$PES?VFg#!eWQg|$iyM+fCAdnS#$rMS{druwV!>>J zgxd8s5skxQlT`xl;b^06B)Z{opsX)Lh-SPmNEjRAR6o5T-TOz@zSsZV)Sl|G2qC`-edGif;3A(#d7a?jisBwjH(TF@k-&tR|c5!{e9h^w$hBt0|zu zjz2ruqV>B)_K0A%tVb(fa@|C9n8s9Juc-lT9M)2@|^!f3y2Rpv%IxjG3584^fkw$)*dz`(aDT#>6hlRv9Fw0H|X zSEixcl`(xCkC`QcSzJ6orW?$%xHfGv(1iktqQb-kS550dd_oLve6hu4@RzORAj2bs6_>fD6T|1h{B@a1yjB6ZLCFn8pNv>^N@apNi6&Wq%8n_oD zctq0VU6w$(a$Up`8KOo0>PvwnV_-VMlUXQe935zk>(ir5wdgYIP}+aBd=q^;AWsIq z+CUtVZ~mphFUNe(`|fgO7Faj^&JzjNtOdty%<6am{b~j}0y?;a7P#Q;A^OY?81PLr zB!8BTeQlwgDf&#U_s^`43lGzUF12u@EGLp z(h!SpO85o7fN#1$W6?me*kUs6Vy1EZOHJeDu{#+k;0s&t`vG3t#`WY6ST{G}A($lu4taTD2j>LE}c$Esq8Sf#;h&Tu9z zx{%3#jMI9iKLhV4gK*2`*AVTzSNg<`LDl=)DJu4R6yx<-#5|2f@#+8I?5_Ws{Nw-8 zFIf;9J$iJCqeH;a1BsDRDlHf|0TmF1jnOr_afFnJgi44yIz*j<3W_=!%z=oQJ9~f5 z_j}Iwc00eFKVUy?*R|JmJ)if-QGO9dxcv& zy$FtAL(WUB0fN+@R-48D>O+V`1P)t}*L~WyDdR{X{Wx|@!FgNJ2+k)UK*D{MP^j!& zYg6IA=2&{**aNDB$GTIc!P$4C6&@QdwdPm;K_orZrY_pP0d7t}?d_VJYr=Eftg}j8 zYH)7#wc+~r^Qv)2aijfU3gjUrpO~8oig4yxefZ9p#k~kiP%*_ zD;uVh6}LuCeyP15yEWgXY4P=hw#LEGX2MdyMH?YMzJ8EF{T833 zNgVp;yOfL-RhtCt&oAYZ39`!THYz(-4+=cX^qR-7o#0&k_xCRchQl+nZoq01wI$@! z#OvLetvogUorZE6LpH+BxFLvGK#vT1Tn zZbtuOx3~YfF@vMWE{zE}MSf6IL+h`Tz=c8l)^L6WX{!_}CW07*J`~?WbamQgs8kTd ze3fpriwW9fS?>huW|`HpC=QYekHER6@ayyZUcNu1wY6d%_NJyG?Ry06Vy{!|J(92^#Ftut zG^(pGa>59%^4S=wsMX;!SPFG!0tF!jEgj&aho%w|qM^D~g z>RLBx&KFT|#}UNWV%$39*B$}W9d{p)*d>QDGHQC>sHj;>IWw61gi!jJdqhp+y0(44M~{}Xxr!{cj0!!SP0 ztx;7qvb>|uW|+5NH5=zCdVp$a!90yTdz+rh7epY7exOPWW7Y5H;5kXNzCZyci|6r+ zz(51mtAL%(2lb07LEln>_`-~>CEG?*fA;YRm3G%8o2MFDV6AnHFJy-%T8T{&Q_(}I z_$7XUlpNwnXsET6BE}MZ>6F5wwtDW-nZ*+uDR?Hlha#8*fT?c+QMH{Ag`DIQxx+)k zGtcrRUp~vbG#c{3>C!{9eSFUE>!RZBs>#Wk^Bhyo8t%{zM2g;<|e$Jq(ur(&rOz0?ZD+918V zbm(9HGZ2mW+B5qGl&|{Ausf6XrpH^3B)puh{h^c_t+kXQ7jzUKox-{&lITEK=pUAdJw4U((`SwMbHe)Om3&Hu--LT{O=56_UP(rOkc;9pJ+tV7l56y;yf@?!^I+_{x{Kz6DS6*hVE*mV7n^RZ%Z*1Vmc;gLY$ONtq; z($SqaunKCPL#=oN4>5ivU{=~(zi47qcZ)kn%!15tjtxfpVaN~uq|UZ%@1dV>+MBnC z`0w3)b-z{d(c#!?pKloL z{+iH9z|(@D!w+IMfm2%BGpG2q3oA&Q@69-V@@5MNYw>!bf$Dz!V4^_c;FY1Hirx36 zZRC*@rgg7|XQrj+k9=p~Sww?Mr)U5r_H@np>NT^CzjJX~|8S4s37u5^yGX^e3Lvq@ zPPmqWFDYJ<1iZiX*y>|A`KA7F2(R~o=UupI)GEkMJ6P5!e5_3~Fr?u4T#7xg&~0~X z!c13K%(VCQi(6vO=D&hwH*F&9Z@1RO;4vW{KdzDv#&CaREX}iZd#R`VRTGRB#?>xBRqY2|T3Y?w;I8^;A z)I{Z}XGr~_!y=BiOdS8jv0+SLj zn-n-;8%Fg2;9uNcPTU{+`tsFZ#U#tuM`Ps)8o8@~OIAfpJ@h$*=$G9&qAAPbO(EvsJ0b2q#!7IAQe4%GM=8!X zfI=-wA_|nq{q&d91KS=$qNCRjl4~p`fm1$cx1a(&>k?UYp~=g%H}OFAPKCT>F_Ift zKI1lqjeSL=;ppJSc}O)-I#S5cOb{ZC1L-W6&1dimuHG7t1NFvJ^sOkOSd{+e@c!wB zUINg<736_9OH-~qR;H87qbJRQAyDN+J>fq_TngKUtn&8I$Eb#*vupI^xRaa^~Qgkwa z?t)R3#21iTD>=ecOEyrRcKdIpKr@4E5h&k48jIGqe<`0mKSVxAG^MvvRQDNtzstv6(9VBPl)ub7|3b^EZ?~Z-|k=T#@Ln;?Fs?84i^HdX1P-XlAMj|FW;xL0i&RPAy^JbBV^JyTn>Y-$ zp%4mKzVVKzb;zyKmX+d$<nxtp?5yTEQ9J4eJEj@oFt_#G7TJ$zt1m?`bJNSJC*($`*=s+6)?rO zW(-|D^58`xP=!HJ*#$~73C+egck0H)SqI8fDx!d8IL7^!EwUhnYEMYB_EQ=GrGieY zIAX1wv&q}Z{g6>CKjrb)XL&dqkYQHUPtEj1jTQeZ)r&h8FUtb zqV>^w6scshg+ABJWST-I`IqjLAUAYChJV%*mQ7p*kwVe3UNzZprBGGdXX%QGHl0)@~iM(BDQMGNZQwBmSCN}SH^MY_1Jai`<_VY@);(GqMMp58c94;_Zoju=j4 zWM%JDL<2`3sC)BRd4K&WuM2>N2o*c|sBk$v0hc12BHK@;&kh5X(6H^$JB7AyZYyUl z_@&8W!Q&G7dgW4&KFCOOSFPu&9-Nv?i0^iuw9_bmhJkxmj0guw$wtmm4iYnB`fsK6 zwM16*L;WC%ff}thfpSFhU@OGY$FrT?fh(`_`Rljf)N}Myny}}aIj>^{lj+fu6Vg;? z4IxlNd}AaCR|*uzeUyt|X(Y6pbJVhO^oZ~y#$d`MaHOuH;!Un48j@rsTKl1+ajV0* zB?U(e&}WmYhjEfNygue>-vt+5h`#su4ohOBe>)4i^`=gJID^$-K61scx)tfnsL*tD zRMXdwfT&vT=Y5UH`Az^yEs5=}YB)Qzi0PUp&zq`6G*x=P zy?oA9h#;{df#c}i#i$dIF{K*avZYhp7nNk;sf=ubvU_o{=Z*jyFQpKd76)3=w)46` zNcSyF(*US<9z$!WfjAB4?-5q{!)16&_%n^bp$nM*-ugf>v1RF4|%ML*_i2$-H0hUOTKe!(H%+r=efW=0nqqozq zCa1ctP2S2P%hG{)?vj?NjRwc-eVR@vXf)asrdnd#54{W-R?rHGZjxe?c}ue6P8+%U z%f43{YYoZbUhSfR1lSkq4Uy~lheSKyPPX)s&F~)GpH|NqPAtO{Jpa%@xs~ zlsO^2Cp3mXmm*F=k}u-yzXO5AS(ZKMk6UiP-Uhu0 z-Dtu98M|C`5-8h`ZgqdA%Xet(SGiCYcq89%;v#!6sq?@51C16f922CCylKdUbsF8)6A2x06rlTE;0u>#|u#mRM~_)5)@D7d%7-LCOpy`ku=M zR%#@lXb4Am09-nJ}OqN5AET=CAf z_RY=vmYu!O%+AAS^?8G2<(=1>F&G0Ti1h5Bt((mao;Odb)1FqV-YPvKwmaxO?U$>lnTx*B&#YNGUrzj0Tk>LS76x$tNSO0U3u5o5@^l#2$-$pIVt z%Dp)X#T3De=}B$^LH`VTm+WDj?pyI`ZQX2l43>ZiTJ`uS2?w9{(&7t(a1R(7q{o)n zme0E0T9_0ZJ0-$wx6elbsl`otFcDKYipE}E zQuy#JGN?RYXxJh+ zbXDQ&yN*9^a;5KnmhaFgpSp1T+dVr!s?L1MZ%O&F3n^+$jM048?*x?SmeVLvbT~Xa zlXYNgp{yr(ArVug|3wr>JdHPxQn&x$GQ=CQ&rwiwCBtylf}1m1my zjWv4m{a!%tr3XVu5_v=QhPfjgY_gf6%FXg1!QCgpd^0I-SE?>vryQ+>bM{vb1lq_e zvC|Se(+y|#a?5)5qti@UpJudZ4fZQMeD3csoU2huZwst!6;s@J_EePl?8L{X0UK&@ z+T9=fv+|}-Tn36ik}MskPfQX;boxLB^q=Pks-c!_Pg#@c*WtI9_gk-Z{c`a2nFMO@ zgT@qrIejis>hzBly|pT`3Vib}OptQ&0KBm6lECHk*D;oacdJ1a_C1kyv%){~w98jb zlpD@I^oPjlo6}xj(^`cm5pP^<(P=yR=T$;YVlq{u+(H{~X2it&)&(gRUhb0n{h~=} zJ?LKPUY*yvN?LKh!GlZo!OP(W7IDY_hI|i+0!gd1eJ)$DLdCr?L%qn_F`K&EvaMj7C#hhcm-DP49qU+w>pJ7BBdp?F=^iz(Us&%{ zY3O_Eb%fG*wyYIoYBh3J;gL%XE5a){& zo$zdo@SBS6IpgSl+xV*E@=xTZ%`g0Kqo=sNPp^ApzJB?8XrH}2QFJg#?EHgB8>_t4mDL9uv);70;N0FZqEvd4C{f5uZAG|X+t6;D#HhWe$$j-s}fco`R z5xgMg*=d5ZN4^X=BA)gV%A2c_zVS7)fI|#+qLh z;f^?Ia3FeBp;&DSUMO-=H$zgrh3(02X1wkessOxhr#ve3pY}Yy#+?}B@-xr*tRgt)pDHfD$FLnFKx0Rq@{6bwIn$PK*c82uiG{~{7Jh6UC_5Aekq^ju7I6;}ydz;TucQ#nqLG_jQMP4=I6Pmnf zRxDz>)-^UV=o~kA4zmfZW`GfGpT!yi?c|G3czA1kllc^P^(*WmM=H&+jR z>0f~!GUqf}jWHBz42Ael@wqSBA{5~DDhVy*W`ao$8Y*PQ#*YdSc1h+Eo+AF;UE>%q zQqg!~!RX12tHX`wZBe-hMG8S84I}t>y$8*i+{w+|pU<%{<#ZPGoIblOob8i(c;nZ?N6qA8ciAgb1k3uEPr$|Tdcd1)MrDyj+ z4zq&<0Q$I#B7YPxBWmM1rK&pdeM5ZS0J`X4GLL>75Rs(@x6}%@{NZbZ8D>|{L zf=FbK9qzLl_v-F0=}1&Q_Ix{^b8)O|J zD_x=LFzXMqy?;if^tLB5Y&0Y@)PismfL55XkISiqPLK#I5UNklYL4y%nP;>G-CcO< z)j~o7n2M)52URV;wLXQ_ZwP5_X3PiUp^CTDJRd%XE0+ga0iWS(awRMYY4$<}lKIxM zztBg#p~{*LLwxX%Ri{eOeGEGgs=)@f%*|VdKM2%4Ryo;LZB!z<4-n(vC(QR+XKQwD zH=o&pai0&>lWTw)npYHw(JZG7c3Mykor2z-6-T4H#DR-*kp-s_+7n3Kxvtjxz z$q;=da;_5AN+<%IdQi*K27Y>~ZH8`tHw#k6T^ERqW>~)H95S=DV>rMYx@{V)t3@(OGTr9Xu_|O`QKEmY}>#FKlRcA}AauhQi@A}2~rK2M>Jbj0xYs4jQm<4HoI)>nsll~$v0UasC0}fyO(ql;c9)Z5N z!lL%oqrbA{{!OL|)+Y04W92V%l{|kR8>+1(kMt-XmM#);bR0dWi+!LYeH7Pn9$$~t z*#AUuspqN3z@2)6Y-B)!aD{+O2vXF_%M5zspywrl*49%QXQjaM1bLX-{Vw|^8t=#X zn5ohS`b}~X^H=d9NX^)#kVWu^9}z)MtUo|z+JM;y+f_~9t_?|O3FarUSL90BLy^fK z4Q!YTe~Y6iZXuky&I95nv_uQw`Pzs-R8h1}hk#o))#1NCLY`#8c(EXF6tc`i zSD@Uau`sfHHtkP5z&eiyL6HZ^@K=h%$c{6g#{33(Ov;Cg1s_1pKN;$G!$u0VzY6z^MJUvAA+j58G4mCh(^Aj9p}*5QrSDcSv&!x!_v zyso)7ypCPsjp($I(+bM`;CpL*W!+?1_*NX|Ca>HIR>#3f@#j*B-Q+6G-kcNdCuXNy zs&TS0#K3jwwGL^P7FfeRZkls32{3CppamLg9t_hx{=AX&*Amr7gVc}9XwUUz}o8xD;*K_O2@V=%_Z{Bp|@ZtCa@q;|0j0v+3 zZd-R^PkiuHrQmDvVeMFXloxGBqL5Mh>Y;zC8R6e3hWaY^=w&lo5fV^PDG+1_{En9s zpDQ1e2M%uoVCLf?gKj<&Z@-_FgI%PT{L52NtMC2R7F4YNsz>(&sa@k5Q)b=4q=My9Me z46zH4lukJeDN`69BR)s0kgr}lckfNM!!zwqE^Vk~# ziy_^YAwFPzpjOfJxa57MWznXT!}BBRX2as1K%qF!F)U;GaHpbAdxJkC@9>PZ=srA> zq!@9*d%h8E^Zg|%Jj7GF2aE5g}r^=LJ<*?w5bedRnvLtqkO2xmG_OUvMAC_>k1QiZR zR}bs&66y3W|hZ-NJ9BKi3?p;3-U8hxJC7L7V8l?lUSL zzl`w&s?%0=c7YO3PAK${$P7>mfVT+XfS`^g*;ht+R~?bN3bB*?7JZX-f394%Gp583UhT>BSSGBum!N$l+aU zQ|T-QFuC4oM16)|X&KRIag>9ftm6wCO>(SF+Si{O zATM8RNiVHZcvpYe*cVfoVk(k#xbKKU$L4{%DTkG^g5PbNyKD8c>jmdJL!LJBT)pWq zARzm$S{C;lCbp6;)>n|15`dD7^L}}a2cWtgR6^_X2dK<738z|vvDLQBQt!_ws z6?@Hm{QDq&cpER0C?>Evq@tVEu-ta%_(#ntcl{YM`PVbAa!-ND+V+{OF2|!?SAhJh zmRRhN)K4)`e<@KU}_bJ zs9$(_FP@639+p?R`BG&e8*?C6+UE;F-IP9JB0bEwO^jqYy#Dtok|I_+c=L57&*I*^ z2!4d&u=R5N<~vhIGp4mRB>n8)2@~g){5d?*3}gbpo8jNSGwfJ-GTD!}`Xb|Zneg1C zuD+CUbKMFhfaL%UXi!tLj?Fynxbl>(N^6rp*7=RnUSy1vmxBNZ8u!^x>i*f!cTZD- z&zb-jTZJ88|7l;$88L3O7Im^@%Ug;VfBgPwVZdA3;Mb?8?>esNq#<)GjQ|W|z^%Qg zgF(e3BFqpG^m}R@aLl;s!-CBC6+fc~&){0=Sfvz`2=I?5w>0ab0!S^FK6QMF8xh8w zn{g&fiAdop2~%E{veK$Ti^(p(1f2^R{21UPI7lrg<t!tu2qWqoGf(VPdDD zr?p8n8Tsc#h`tE_oDk35XCgM1O$no1YaqPO;D--k0?16y;j5lj2C*py$!sW0=S#rB z{nENs+uKW9W@>r6>>^>Q3VDy3Ozm-xL-H(xY1I z!*wLz)va|9)016oQR#t4Ue{+eymR z(eK%@ZUL%6VzkfQE{seuU_f=a^#p)qTmU~#8mzw0a59Wlzkx?=4oN%T#{PNb^y;?k z;;_yxNQb2F>i_yn78vSmJ+!teX`(M2LAF74yXWg@hKys|!2oHn(fcPjaI)^MzV}H< z;oEow6%UWSfS?*2O}W6U1{`fA`!?K>Z29h2bwNVJ%6q~O|xek>cKcWQC6t6?G^Yn>(S@Vue7P|c$)V5F?QiYG9Ni>pXCKE4xaj`uJmRn|K}c_@i3qd)*&i_r-jCDJ6yf`sQ8=ubiwm5J*Pm z2&;7lSdt;54M(ok>VL;W1*9{?obTWJ@zsXgCjI}mi9daC|Mw3r?ESAz{O|AmZy(=3 zefW^W0r04?k|AOdEHYfBg+<{r++?Mo?bMd2BHj^8shIGVr8Mb_n@j1~|JuZrN+Xst z)tXwCv%s=oyouJhT7%6ROK&B4bS5Um=ADlRQSp#t92Ah7BN%FPPFkX_z|nAPwTQ?Q z2NibnjtsJZcJ<_z1pEhk1Jl&k%R@^e*DE5LTGuPj+}&EQB8^wnnaxc`s>c0ecJTsC z-flI=`h5AhK@X2|*sL?1(%}R6M8SFMQF|Wgbegw@)L~HOtXkb0M#NS#JKGv%!jsG2S@cAo#UK=@;a_s1ZZ~$8%A~v8m{Np-{-kej%jOC{M42FGl&PUj=k4l zv{2of(+05l`038YzbmeX=ee-AmzAdZrEj&A3wt-4ZhRTg{yg&K9(!E#>)`Io(_ioJ zuXADVpS_P?9|B-nYz9R940{N!+Rh&4GvdNtw7u5$sL0VX+hdrMT-Ymp>C^WAg1u#D zcBa&t+jpk5dbzL{H=*@yM*kHT_8M=re|uu~c#&Kkd2v?KOo}%sA2!xbK}~&obY0K$aZ>ZEWf6RgBc=GEbQ&Kr)WVBo7z zioHu+qtBi2I&pLgy{!6>A0B&*&mY=7JE8cou>)kZd*=Tof?sx=~;1Y z8=AB;-6^2uC@Db;P1~ImC6S(36;a*XsF{_bZ%lhL8HBNazliBaq(f5nd(zE!3;UCdzf~}En)I7ZoB^R7 z8dpx)VLuR4HMqq#JrF=IeE6pOTp;uy*3$GuCrF5fg+<^LU|Z+&6JF2Cg+bys@bww_~E!}i|8+Bx#1vQwA;E$uZ<-H7qT)^6! ze;^;$I-e@LOH^@u75ubxVD~yMx7F!0A~^v$+H_z@)k3}7HPL-e{PgCMU3%p+5u&`< z-*Wpy&zDeV(ef~}46DUkn$Pe@i_4G7=-Q~!qbFNB2> zE4j^M%~BwPnUh4|4p!S^982PJ%? zr5_yq!D~})o$wG~)8f4%*UAQ-KRpl5-|2(duz-kPIJXzwI-_dxU4>)F;;TFtk-ASt z4juqz9>in#$#95J26{E}4_LDHrX?Tkkgv`;@dhO}#KJ5wRH>QD86Y)jyDx6%tCCD6 z&EQd#(~Phc$zI>pWUZ)H#}rwjVrP^$!cqM3rrn`m&uDqK8;|}H4*OCh!@+|E#?98B zI)0yha||d>tja$&m&}v$Ws`rWGkihi*W>efcTN{P50q<6XtRJrPJP_YHybo~q0|D> z-?4N@KlD@XcG<&c56@pEr0^Bo|IXWl&AplvD@*oPjXH{_hG9)*wmO^ifXR6zIVq(h zE=JDj-A~8=gM{Vq~wgrtIx}{B9srhZSpjl#~`QFS__-H{G~pi9gAB zb`s?Fv0tzLQ`W6LwL2}xlK@bPREG)zD(5dgDZkwX_$7XKMY?Ri z*Yxlk7sXX_{rZ!B`!m%1?yA3^B3$piepP!BP%N{;p{1$z;USXDWVlx{ReKK)i*2#) zWVzUz{9DS@1gup2g(sT+dWO=E5bqdv2FkP@LuF>yDEuLW{GYHlei@ZiY~J~ov~P?g zaA!-)$g*U$Th~nT%m?cvGmnN_>=eu;N(V#w{(j*fJ)M8C{Qhp)wTywXa~`+8jJ`N> zeN*rAkmzMhy+At7LNBKd84^GdsAa=AM_m>L5nZ}*LlKo@X6U|#77otJuq>fDIhWieR%P-CZ6Xx&2NAA;#XC{ zL%n42UXdS6)H+FE9DvNhBg&bGs!l`=4WSI@MaBtyPmX-d1n-o()s?vE07%9y{w*bB zF}DOfhH7O@weg|a#ZfIIL~>pwA9P1h=oBtGs-Pj<=Mlwp*c2PJ&b-{%2_j&_CDtN! z@DQB0*MK2PJVMa|E;#cl?W2l_`I^91puis{Je!ShGfqt?M^rKq9*p zevOIjWAU%Ep@Q%;BF63jdT#9KMeNW;mH0xnio$d08G`@~bBv*lP;aCBO z#7n2~jgxqJr{HuJ=`S1AoP6~;5AV-#`;aj~j z=INbH!&wjLKrRgw@6}=jpIolN<)3x)Fo;MG{y~ zMm-%n%>*DK0#CY8j;OJ3`tavbNUe3B))Wsi}LEx zZ*;l*Ci4lkmK2(_(;vSx5f3Ve|6y|NSO2v?KjZbuiF>$`_L|@E3jp z+~#R~0j;o)3>1f0hpiOMGO{y}Yzj8@xv)h#vBy(}rW94c#DqKIYFJ>M53Qpp*AC%jpxtHhQ2%mg6XLb^w+e*u>X{Ry4?anu<0u zs-uy3%vs#85X|*l_vr_|)6;xMTUz{TtjHuzCoi|dHW81!hbumpfIbe5T1%^a^&Ry9 z&tsLI|C<1^z`>wv&F+nbla=k$1MM@f+nYWJe`cI+Cc^xhiRRp}Qrv}cB;d#kfoF3! zLGsblc!-RHmlBDG#X>opv~_;n@g>X0(DLeMZ&Y{%SToR9)&OiZ0eeyE1zvM{LFc_q z=Vh{-KCh#gIG%*DVKz9wGT|Exfs%Ar zg$@3bH1LO5|4+9;7XbYGM1I$jt7R8>s2+*OkhZO_?^MhS=cIN9srX81`u#1>6)EAh zG>9-xhOqERE_JTqIrT=A6l@3Wr+NM~ur+zpd-Zp3VWjZ)+phc~}%l^DPy1|Ar*6Y^^GSiRG7y2?E0LS=aPh0B5O zOTezls1K~DYCOoCcFG;vR@#~2TMF|c1+|xlMI^g%k@7-@ZR@?k*)`$pqtFQSe_q<( zJ76vwasoplhVlEXo$&(PCUNd`N!Wr-(1Q;fv*wT7KgmAAMSn-|&`C{K51X!C|A)ja zA@OE`pG0U30O4C2X3hw1FNfK5x|uP-6UkmSTj2e9#=9`zkfy-W7cTm=fD>xrHG80F z&4GW$DAr!7%jlqjw7e)T9IE?}g3M8brNdmAnJ8W8f$*@}ohj zG-LNvVil8JmZj3>?xMbT_Im0MJ2?#-S-M5gK>AN@liKJY@HJ)UR)3s3cH#XamOGT9Fy#~eiGq< zy&nO%AJsWh!|{hk1%};d9U@&1AkCbeVAUr7ve~Pes?-vuR-q< zA`bQ!UmAG?DrppI{X17NP z$eazogTJtcM=e}Dy{AE*&G9#3g6{y_!X+)X(2FCAoaD$@dCGv>rt!2=jmA-jnv=7Fehs7V1ulzIgf^!f@;p)$M11ZwWNb zmkGK3!Tk@E{{1+>%Fma<64Zi|F^!!3usCLKVVV4I4=;-odCc;~d z>mQz$iH1Za^Kc#h2{hD=0d>ITZZ%)Hx#$*r7v#zcJNOnKD$|rzmKpk5=t(;1`VS{_ zO*GV&HxZATrq^G}&ASqp8ieOwo?u@dL?c(PX8ytUl0rL@b(^#s;^{Z$9=rZy2<#Ji@B6+U=fvfV%py#Id08{kpdE|SET1OXp z4iReS;APSY`S>xI*}8OveT2-0&Y!+?)XZ!0dv`6Z!H#G6zV&jYS=A5v$^;u?Om_hU zhJTGktTHdFMy<#!g>GSQ&Yiktb?Ig!uI{vC`thBqU;R_wi?W}zYIbo?hVq)E z7SL%W0AvBPB=svTmw_6m!$Rm#W2TEH3v9s+5y1N`|2`JMM+&j?9pJYqyK`0kmOxY0 z`<4gfdy;TtQn#jycm1WJexOqxJQ2{h=#lCAwKje9yE*Cw5y|vP0XB05 zeb#0~&Q@PpWhdOsmx8u{b9WJQh=`KTS7$iV&#j$)wi+H?Oh#eVty&+F6^vjf0U>6| z{n8~Tx2hnLPT&b_&$EORvyi9w{;T*UjT&m0lmcJC5DI3YGFcGkZDgajk8Y_h-MmXWu?ZJ$?7> z;>9nEk1K@LP?cs^{zh90Zyw2$1;iq58X3KPm^2a93Q|7pWt_xabkp;DseSZb?3=Z3 zhRrB(g%kDI%;zBpN&ORxO1_p2Fd0)5j>dSoTSyQ}j-nejEE3R1a<0N$`867`!e%`* zxZtP6`&>j+-P@=4ZI8m^MZLkJO6TqT9wz+VjFPSTKikB=*ZxnN`2WD(Z?`tCnKbQF z?i_rwc>`%w>jS#OlgU)R7XQKFWLHq3KUIid?@Xx7mFKOnp04TX^eT&;N^qgbw|x+T z0Gj%kEt!A?Rhkl5@PMWJE~tBM=NtArxkaeyMM_TpSrs%RWj zJ5_CPN>%391BjlJ&V*8rlipLC4~Gq2h4wfbY}akb8F}Iey(viU(wAfeYp61bX*p4y zRQQaW-)DNhkW(1=XS=(7muUoOtdJ6>9nSVO4YnRubPj@`owAzr<_B7ta zmXq%FoRIEI<_7M?ZI-1w39eh_S_%Gzn;vLnY!KE85?~y(ZK^@V&g{my zyuENOM2RDO{-3-?J92w#L+(fvHr`$ugn*=D;sSHCmHH+}a!uwhuJEOc*ZI?MxBDD; z4-_u_E)5OMRI2dL>A%i)#Vw4&6wzPGsMOd7HJHK&d`iB>Dc>`))kYhGF;5St-#z)v zexqMD{+IgLcIRnq9rA>+Z)Kh{4;iCGn?Gh#k~rhAAuCuHU966lxYt~H3RD-o*?9t| zP==4fA3_oK6s&HU?3AY%NRrT$V8y6=EqTL5KxlEO{?$)nM{|IGgca9G4MS?B8I)|b z4E%ET!SD=nS}@1ePjj-tgel5QhS>yyt`DPl44GsUH4viwzuLqT11)yQsKkhm9JvU9 zziW;+Shk(cGaTq-5%>)57%}W!xtUQIIH~Q#XC=3Rvp@VNsQBt8Q||C5?4kMdsPXv_ z*>4dri)6U^_*}4n7nXwRJ2`xAD+7`{X}@qPnVNF!!x<$d5F(x?{K731>&^tx%y_bL z&Nm8O>$6qXcSFeSlFwY3w8kznVMkW$knx)%Lyj$qvZKimi*jpJ(WIq-2D2ca8mbg# zXX@zf?kw7tez@^`LtRj-suFfs{fiDNrhG(h!_h%mzfi|n2DD@so`C!vri0qoi zgz>;0%3n52=P8SVqFz9!_}Cw^{g{dD>n!(x+r(d=p0$eWERs2(WV#%8vXPV#j~he?rtv}9_KTO{QFBJ5uLnf@RD|Iao%nH?NQ4s$-FnjCVrnZq1n zjyaZ7tTUk`)lSUWgizERa;_+eQm;85lBOh;YKj`ED3x^Bcdz&N`~7@Bzsu$Oz5MPIF3N#s@V|(}n!nkp3ux)jgLCSXM(KavD z*o1vEGy?D=avtAZ%XLb!fO}=qk&To>2OdPS>C_>$)J-PLd^e3I4*5Pm7#5>(FQNEwrP@edk ztT_2|K%WcB@o@%jdh!yS;;7}B1Q2Sthj>}om}b4#ZL(^u8PH~~qK|TWJFE3{;q@yu z4#YmCzcguV0udN}mtW3Pk8%m(f_AI{WGOs``slQBpxt-|elk$@8zXN%o6r$*Uas^g zQ3n1*r%Mwe38^au$(79v>{}g={-T9cT-8EfE{DX}gle4ugCe@p7Fe9OMWocMTZ98{ z_J+x*Q_j(WTNV7+FU8;NOco8V>ye)u&5V^>&k|4A|GWk}d7X(>fWdvToKVIonakDH z=m3nfOtHD{Ti6>!%8Im6BTR_(maoq{DW%x(40^^ZYqvHenJ2BT@2d1%z;R8kQM^lY z-SK>~FfLZ^{uguvxcIs*pM*vw=BEp4oy1hvq4AbF958-YkpOCwHe6WS5o3B?0BSie zUnit~l&7sonf}~`WgNs@<+t|(dw!rx;vnA+peRxw)V^rXmEZwR^}C5+ZM-hrjtF#7WwOJL z9Y_hkI+{`t;br`8z~<>B+{v;aKaAjnVN%H>YllXR$0d8#my=%2E7Fu6*tT<2ta1?* zlyc+b#V?s@Q%az%&9Kyeb~z&ebUnbzwtE3qgQi>CGi~TKx=vS0 zZ(r1bg-o$D-G9%aUuZQZX{ls3&+EIjHNo{qdga1#J93-L%0QaBP`kz<$L5vb$d4tE z2B%}0A@O=~U)gz^0Uizob2At6T4OD`NR3O>zUW0=X*~3&jbf%ZDKimO^&JX5W0msi zhgf6j8{}`ot|gEvKp57g*SBem2#r`_sgy(x6arskMb6RcYXpvc^U}+cx+R(m#nMId zhBCQ7W8%%kAy^Oi}OpCs*ZCx;)V`^w={LJiR zFvQQ$h9a`6STSO*7-dGn=rHw4k<=by)8{e1nKSvy8@`2FmH5*y&TgL6 z3rshYlB0+R9Tl0S5TI$1oY-}+toybF7$i-^`Lvx}o7J0)ziwY{NF_jGve?}hH3?~S$>GsVNTJs0u%xs8l=BTjld zgo2mY2-bmX*`dy$5|92UUDuZA{+QU}OWl{G7r1CeZ7Rq$1j+CgbNNF2_Q|at;%xo2_((|eH;`mx-I3Ef$9x7O)fSrc8 zvGQSKPzNCsXqpd7k|lUDhfYd0Z9vn?WsXZ0Ymv~?hRWnr*1pJ+%WaZ$Y2#_Cbf^?c zSMb3u)?)0Gq5ySU1E=tJ5#qy(_~RooRiIlm8lUy zoz|nv&xVPS`9vbF&k9T!xiNNsJB!B%ZQ~ct-@i9dArBho>$Z2}-5u7M1|zk0X~5|b zkRN{2)~>N8r<$(`P=|44pDyMZG8E8=0nBLakyF@9JUgvzAqtj0C6Zz!yF9}~QY7&|rxp=l!=Ydq7_$l!OyCBsH0B*ehDja@!oIA{fN zps~Y@mCt*bCU;%-ioAl;Zr;f+O=;rd+Y>oA%-6nE+#IXhq(eEx&^E_N9V!gso;>YMnNZ21hb&M4Sd|x2C4j5&?@K`Q8bi zxlhPcYivF3+jr*em6KnUiZ)k>tJ3&q>@L7`r8?cQSI2dB;PZ9Yt?lP7Sr6oAz$g#y z|Fb6s>Dt6Sh6~vB%M^cS(q-?|T2^m!+W)MHPkG#&@*JG$pL7R5x_73SP^oW| z)sWT&J^9o9PU-{W6^4o+`$H z!Y;#_M~+%KVPhGfKdtK3^>16`MzyMQ@IZ%lkLmkG1T})if<*>ipJT{DtQwpVW$qV2 zDt~kCV~T|Prcz6vwqi!p0*k|(Kx%Z8_2?``dPchB5N0Ls&`*OX?YaZ%ZJvOe_Q5Pu zL+Lm}=o!Q7`@_t{29r!e`4zRIZ8S{Ifv(J>sVsYud+mC0q};ifG1;n_U9pd_(UbWR zNu742PG2LH^$k>?u-MMuShAT{7D{bxgbgocc>m(;rLm1ith9q!4z$cOeCW1{r;Vl0 zo7je1UE(xSd@#&T=zkJK-QhbcNF^(1QSJk1p#wlg#1T ztcZSwf#C9)HmIgOJ19~iOx5zDHbrhk%0iEUrTEr__&)HTRD_kz;49?bcxd8WrirY_ zf=dSLz(;(?GY>dPsq87RUloDrAXIIvdj4c@M19-yr#B1Jh)~5exDP@JK+jAk_zhAx zR;B`RZop(~I>>K@Q=xpX1eY( z=3OFBTvs%d_Tk?Gn&`^$m;tHUFOog)5!yhuqmN;=XQZqD>S#qbfnpcOr@y^!T$lnV z38nNSfm?HNzul9zygFl*VT5DsnX~Bs!%U1UISpt{j^v;pJ#DKXrs%jIFV98wJ(b;E zr93jy>A|t*fs$yP;;~&2K|V!r`-oeX}5Aq|o~ z0y4(bsRT0(0JmPV?K7&S!bG5phzpxwLjydS)IYDccKXg_L|ogfd^k0e##g0}nTh|} zZ1Ib1iCw%>yUwA}V8(D|6Vo}#hr}{d#2F!ExUU#G?$`vRp9n^JcQHr$q0m3diBIIq zB4A~nQc>-w-1O{*jdR#WR(SAvzje+5I{1-@p;0b**rbPWncDytGI$ht>^zQJc{p*m zaflSZ3bUJD5mU=@t=$=#v=>$0_@EHL-Bqo&7Y)c?opzBKa z7VU zyqYx5a7TCRj|OGQeowmp$ZFzZzmBf(xwlzBd~jIY2vodB#4w;@Jez=C6(EDt%!;eb zIn>}bk>9vFMu+NF#MLPY2HR7mQ{mV{-OK4l(xZddt4~~iyoo`?OJDu{z&4wqN4@YY zc7%w@DJLzjf1(f^T*Ee?KB>mIttuLlv={AaS?1>l_bz*`A1biL>9&oj@HKz?mfuy9 zymHi>p+VR)7Q64rR+Mj1OJG5vfD~M&W*j6~D2sRbj5)=>-)|Rt$MNrW;Fd^5+*zxo zO>Cca&gCrmJp|@oosqu>LXuCjXJh}lNAtwB`?GPI;6uZ{B;XD0l;(D4W8wNf%Z|Lrv>C{fy*#r zq*Ug@mSsJ_OiSPfwuA>ZX9_R0$z`8r5V#=HHe;t3OUXd!b zo&PqSYgSW~U;C_BqbrEyy|v-xxbN{FsbR~hoLpS~x2OHsoCe(|dhWNo1*af?=r$Y){FIuws8ydE*}< z#oV87Et>Vv+QFpUb&G_Qd?BjAel3_fskO;Pg)odHUo)jZ>5dz9Zl_{QzFFvwhBj)n zXbdi}HLtR>GuMHAuh4bE7_n~Kyn651>CuQ^nO}PTp4I!dIjQ>3L<5#rbwYm zaBMZ>`1W&hI!KxsD)$u&ah*t(svM$kSydq-;D0ZAWdP}0re58xeaki=4(K? z@eIhD*ff{Bpx#}81i>^cc5`QRuI#Y~NNVB-MJrkZS#kz`t+Z9`p*+6Bkr=8I#}iEpnQNhi@BYIqkvYVf~y_>awhhP@40U;o#z z_sCznjkR|lp8VQz#SJYX5(lW1eg`zeE}ge8M?*3&ONbsZKgA;rM4K-|?pupRrQQx> z1G_2@Y+GL$P+{18MLVul78f`aQRQ&@dgoKM^)FDh2V^(563OU*abH=3b19ETBiT(| zBia{ADB0P>=%ckteyuK1VRl?%A99=3Xlb$OdgSP)42k*W^!xYQ%+M=vXV6hGMc=wl z@8@_i_4xm(iEB0O__rp0!XS0st~%%xU`qJjDRB@3LY?a{D?EYx^BAUH`THx{{Lai9 z8H>VK#RWFsE2T$a2Tmz2@D7Yx2owbKUuiam6|9FgX-IgeL2aORuE~YiFWLIW9#I2D zI}3Oj8t1v?@b-$ju2Jp0by{%Lg@f8`Y;}%1`KY3|B#?cw<4vK{*X4j=*ye-Zm|dIK z+L+~s?-E_Mstx`8-!<{=$>{&8iErae$=I#j3%FTZU=uHW6cnB~C{6D_dY9mG=iBUK zRKRi@xzJI(R@-h3+&xFLS+slZ<0zggo;WVHS@0j0^Tqe}%kRMyT_T!2CNyH3)>x=| ztBQWKB?}Dk*nZ1UHpkfG_1Qe*^O4%pir&+BW%T}lzSgKLJ=g3j7H#g&rN@R_aH&x9>|04bCpAvK-APwZx;~_#)c_)n-rO;OcAV!HMd9y4 zx4UUD=2yYW&d5*wM&i0UIeRVTQ*RBt$}C%qpSZn->$wKl(~zz(U-wAsqgA5?tP00q zgHjPmviR-cljVYjy~whko^nCA#fRH(0+sb|eW8u~PCU22WDW!9aUJ<Jk7HSM7EPai@wMob}X;X@d>Dr zt1=xj*GPoz=K5R%~DG(=)-wZ5Ml%A4)i)1yk|s&EC;NQkk;iI1qcYT&Oj2w5dD|$Q(SK*Iy#z z4z;oQZg{4y-}ofpuqz;2r4<1;&W%1CQ>piboywmWPTRk2e2j*z541$@#S8 zzN_5LM*9bD4lC7DWD-T$nZIY(d1t1^yq1P|g=6rF2qh=S$OkX8RiSTNJz&v_V#2UB zbsAOtM_jA+Ks30ud9|^M%e06_yp$Qi=clcJjDN3)mLuD<_z4dP7w{k6Lk1Niqu$D2 zA7MZ8(vcZ{#gt=Jv+?HSaTigP`i95_MGXe2t^f{f^oF4P0Girooz&MUP{*KZmE>3Q zH+V42{pH?*^b!`#hxU4Wzr6ILY2K-hMUo;Q!SwRRO8tLo;wQ1EjLIT`#aSsgS|aFk z^L~e92UOFz&lLoF5sWOz82x);%yN`^5w3L#_H{_>kP~{wYBOMYQezJ;8u8|`lwvbA zhdT&@TT_&0@mfStaKW**%fki$o$}}hWt6n?kkeUIkd1R6Zj|7v8(WlD_p+~F+{_2> zCun7P(4Ca<5Rln1scb<`^API8*xw)_%gkJ7uf_w8Nsw1fI5xAYD41iT{j)J9fh6s7 z^ikRKFY}7LUK3%_)^j&n7eqncI&BKoHnWN6{OJtvW|2GqN6sLoo6z(R3>oAF&GaqH z%fG>UI!>&@RIOBo!M(lm1*>REa<RHby_j$7BmoA4i(pW&X^?B`t&u04I8*r^BAF(f;*VOyhoXM!tc8jOS5 zIi{`E7zTkE@mR^URrct$-+-K692|1=5{sczk=1ZU4We|5^ydyG=KIjt%N=1yM=c7ff(cVkj;`;@|9|3x+B!! z`wFL<)s#Vi^+FvmPPjV27H0aAyDPUZ|BY>Y(-tPWQV2B>&%agb&T6sx^{I!pr6k8^ zSyIN`e{O1o1GlHwpwj6s79&z{?j8MkYr2aA9h6-2_1=$rPbX?xHnlD72fr8+E2mEM zN#C@Z_c^V42%SnRNc;^_;Fd~r4d;UWmixX0~Kehwy3)y%!Ogeufp0g zB!kSHijhb#{23PVfz)rE?6s$>R~9+Z*j9y}XDlwi`g{d1(}{O?=4@`_xuvUI6b(48 z^+i+IVRdw=%XtpVz53kX?HxEvtNbjLV*TW4HG&w)yi0s&hp^%@`%X!zmIr9r^&O$G zLw=KuS^=$h2g~XJ;+vToB^LofI6a9!*V=17E_JC3g2uZ=u+_>1gR|`~d20aF!Aphf zBaJWnqMCdSkWSkxpDcri6Vj{0%4c=vK{j;*Zr!|pYvMyPveVh#0D$Ea=q@Az&;tOp z4I%{(ZwL2nn{v_>^|lgZE$L3VrRAoE4;p2GmUbjmy360W86Lq^R&AoRZhW-P%T6Gr zS%P%NkC#{Myqy(wU?xL>(wo&4-fnfDVC`YH-p9tn%kj_?lY{Uo!L9-6U0w2zbY-&{ znYpE|nkc3TKkOC}q0$A5=z<+RD0aEa@YfBh`L`zSH~jcd%uXTLgG*NDDgaDKnS=E4 z6~2rBvTGfnNbgm2c2X&yWUF{)SGwvQ?8_HKt7(%I<{|o%Q1tlt>`R|BR?;?roueiF zj&^;DFjbpz5Fl9ER&sK%4zgW_pIV;1mmh@4%Tc=x>uzM=%Y7lyecE&xKdulct@7zvcy1oKBmW&I^`{fB*F~W!N z(r`3P_5Mht<0rj6-!GR*d^*nrrtM<=Os`?MruYn(DV_K{yYDTMBY}_lSctgFiKtp7?xq9D|6Bk7y#XUbS|63DxWur}%PrqyMlj5KH(s25(0o_cIIoiy=`O_2sG2USrCBz&cmGVh&yw-jqbNv<{6uYPyITBw1j*VV$q z2<-HvPDVP^$zA{om};ncW#kz2A_e~1-jKaI=bSK43k=eW5zu#4%HAn=8JTrjd=QcY z$aY93rwg@TAP0y9$N?dJ(;CP=T;&XevPHKaA3hX^DOUYUwx#qd@B`fS-T%zHBIn)Y z>Hw`puff_6jl4*xgp6GSfN~)bo!G?gGK@MQMDx{u5|{001l^N*Y0 zqEfqZFT!$hoPzwb!;?5W<_;6*lL-v8aNPaq-pn~9mPU4PCTzNuc&>UNiNBg8L3(zm zr`io4s3t{pNxyuij#UGhbstV`8+Wt=8MOA9&_+L5t_-RnhOxcUyGBH6Z2a-3gTKk_ z2P-N+Ro#|)x8x~ha5YQ2d$S-wxv3&O9APD|G4>4$_(aF7TF=(NoR`W7%=EKFNG4;%((_$(>VX>-p3EO+bxfnt=v4Y zV*PnX3|RJ)(uRHDuZj@a6-E=_E18(#=+&>WEM|CS%AYqJD75ZZUgw{+o5E{N$e1~g zu9J7*9v9YSO$9g&!ez8-7zjdLxe&cNGCn>vE>AT-WWw0eSD2Y7ML9PwM|k^O2@1zy z%-4Fm+b&gLNt#?1YsSpBvH#$?esL<2ZQiF^()VeCZD9A2MrgNn8|Hnq=| zJov_h?Q6^ahnR8C%A!-n%VwQrPO0ucRlkil_9)uRk0nUzVMs}F@SE~%%SX>1GQuvG z>jjslu6=eiWZ?xlF)6?+UP@O65K$&flg9lgmnsJu={Sdwx7LDUE>Q$Q2YxGXTHxRN zGk?!IYU^5t1c*>ekWv|E7?ey59~4^zR7#(;=o_kL$)@#hYLz0SvH~%&d+sma?zsOj z(ZYAQ^WX(%AJYMEU+^d4gtwNW-^YN%V#@^acWA?3mn+7y})8q<=qa$Jp;Gdj+OlZL?nm(rmeR z(^OwA?tL!4{b(z|$co~)W_fG8Gy9U2s~yyNyxpF_&bj35Ibdqvma1;6p6hcZ%t_v+ zoV?os8ej*#7cg17d^WR8Ox~S2ELoiuyalQEkiw+$-w0*AOTv)VL;F%)RG$?=U3lWL-nZt%&qOJ^SOO&s^Ib-Ns#PzeY}m$noCkG$aaS_ zy$fnY?9*tK(yc=R23XFm^G)V`TIS0kQE=y#ew(!q_D`r+<29X*Jis3W8VSkXA$_vR zwL4t#w_^{94BN*whV@K8DCJ3622>r&AZ#eY2FWcA=6SpFg1Y#RCuG^VIO88{JtC8qmAa!EcqyvkWR~}xBNZUqd27n4smq_& z9feNnRvy;#KRy1EHD~EBl3mo#K84|xbz{F3*q(BjzVqyoy<2PD^K14mZry$H&)w%c zmTemQ^j99QoCX?*$PRh^ZWR*bgkEeBgW!^a90#n{L1tMn(}*E$o`G41;z#oVDY z-EQ8eM{_5*J!)2CrK-C>M^3_`iA4X?zq_WtLXb7cLE zo^1Xmiy`Xj!XE2n03D);h@9;?GrYmAc+)?k7QDETPv#VatIJu0c805f#0O;67{Bv3 z*_=BVawC4SKJd=DLt(d$%ng;=mK~0`bA0vPzcumDq<8ece>NxYkLu@O4ZMHf3hz!_ zKf74n(Zu6>Trga8|9)h)d$;w`$b8?Ty@O>sBFbjvYn9!@GrInr2UX;CNFD3>o8l!j z?$En;rN4AV!h?+S+YRo^M!vFcp>cV0y&!kw*2CN>ypw$<+LOBxu6@(w_1(me^)9|e ztI@xdb^Nj>o`2Ey{45^0IsGs!;qA$n?^d*=x#p_99Aoxk_N9RIR8q$k^X56da|x+V zCcS{-0|Wp;q4gS?g!CQ2x|>W6$oqP=UmXfQI60^sm6xb?WS!xH@qmeIobl?LCyV4< znUij++piiQ>QJVYM>${fYT;Dq0;#H%W9n$-GvU%aa% z)PnY|?1lgmGXt~=iFk%CX2->K?LzB!Jb7D9@73W;=_`p3E+h_+pywUZa2Q=VKT#A) zJEwI-|AJL00}KLL$7v>^{`dtXzFXa!hgAz`a*)ew)4iAm?3Sv{jy=kShI-zg!##EW z7&z6LuIM=!mAz$pCZ=d-&@%(-<) zWww4vjkYzv*Z3y)BVdccro&ymyVTO}yT8}mgSUP=XNG?^SmvsK7S>P@9je7C$Rn~; zPIRf1L3c)p?}IXnk@&(ZKVmLq`gPl<2H4yKHMYz^Yini<%0kmQ3}PS zOX~`IJECL{q}Iwa6K3a6gL_A0(E#}6f)$DHr1`il)3Sp>9DhmhS{3ZHpa&O3Hp?X0qOJ@RV$^+~M(y*RC4&YK5}efNq&W$oTQrko6ANw>JXz5P&|!f6 z7-^;CV9BvtJLkRq5%5a(OM8Q}Ly|+#v^U|yI*+FMpf)SYZNVVicL1GS#Y8&?ORZTk zAEs;X1N*PISS`Uyj?T|PH0NUGh&DI!XX!HSX(jasciEO2n?mm<_!~y4`d3VJI8XDM zLTifrt3H)9*q$0POWt^V(LqOTSn?(#4ou7qLu#wEP?oj?Xyw8YK&UIxNs(Y^>iV4r zb#CmFTwQ1F5HL_Ff_^+v3K56{DHJ8tn_5*P0@In;3plp%bbDUhfZnEj>X6=10`Tc* zY}`W~(lV?Cs9kax-6L`_%S_sVvpI}S%No#7)tcCASF8GJMOqQa3GN+rj+5^uY4)rl z0gauT0!31?YPX$#N*BPi2T5p?D6l@Wqz!+Hf#4GIpS&vR8npP7Sad-t-lVMiLCRIL z^OJcCuD4Vw9}Jn7o8~73zg2niXJ2wlVjih061lf-B_gDC0gs6mS5P9IFqOfa?KLe*OMW|4Z{zzGcBwb-)s4` zVzM&M;@Y#ZQTxf=-!{dAABIe9RAp|*`*MuDqL4JNuhHI%>=Hq8(uC`uG6ZTiS3<=K>VVx2eV5P`BK`E2{MIc2%+9*SvycK}idxszL>Tu_eyQ@`4ql1rw-C_;~}b z>S$+LU7bJ}+FL-EzX$U$yC|4cTjxP#kJtQDKt#mp5rL-kL?mCSazkBfU4fE_j2x-@ zy|6?4^Zlc|z-#9P&AU^~^ISLd3Wb<{Ll>Rtl}xm4!gYUUHU1S|jxUtkhBrD z>ch%v;F)VgG$IPg2Ovc}Y#sz^**M#0EQ!*#r}A3T=?a#IuGNqpIkb%)jzl$+p4HDO ze5XSb0AFI`5F0{VPTSTRFVNd9uevaQKGg_hR!Sik zn31A36g(3Z$^+AD!0QC`FD^QTjyNrZ0)&V@A#{o;TY|?bnqrmPv9AHh5+U@e5b7jE zdkW>u66MKscqS92(T;U7MJlbzA{bjmJn&&Y^tS;0lOPY@Du0BJxk`jj^Duk>V2lWd zL?OqBvSWDU8XngVK&}ChYQC~{LPWU`v7Zb7vLbgmQGWAJs{FPhR3;N$PL%iLD@G*B zxBD6*7^opSqMVKx0sy>yQP0}db2sAw|HqG#0~i9H10(;-k4oUNnE!u%)b+a2VnZ3; z|JRSYV3ni+Zu2Ki{C7VpRF@}5l&VL-46|$knCFS z3Om?W<$3Gs%R8xGmtNk#^*{Y64X>{M?niNTJTLyok197i@ajK)6px(yA3y4GqkqeP z{HUjGG5`8eogZIF{HRwC?%ewPnlJIAynDJ<-;NY--ZRnD{q?;-;zxPkz5VUO%#8!D zC;s)L!b_#Zxc4g>Csss{?^r(dxqGs@|IuCO?JJ?Z>@=n!KOkFB&{RGp>YEUL+~ToToCU5yv(N`m%F4z=Q%7wapJE&c09880=~o!h_E z)L7rV)ZE&+wDhkZW&EMFV|xFGD_!rJKV0qkzVzW5AF_G5Z9wV3a{GvW%kuSc%MZ&p z1g@Juc1#5w_;_DYHn4A9edgl2%{p^Xr*7wf8lS00c;bJ~a@)bQl@4<5k*gan+AkXMVlh@tTg-u$p5kUrl|Jr{g{Td}iO{ zJi^@s>WITMPWD9c1H033gIU_W6U7V8N#mvlh2DGLHQ)NQ@u6*a>#yaGr-y%i?0P@( zPR?hA=#2IiO~fEAdRCZ3Q?+gBc@_#&zrP6Fw*6U~+I8g5x0(2Bf4&n)6?NlxdE}oR&?F zq0^azzIcaZj;#b!qN&wDty6muX$hGzzjf3tleHtRO8ltjSdQAyIaD`AcCUG@nl@Vp z_cnMS4kHD%pu}psM}j?n$7rOL#DsmKjCy#O7JkIMMgCev`&BYvk{*{FaxT~HO)ckN zfV!Cr)G*v$WXF?|owX`V8>i--W#^)gONhxYRNZePs5Ppcso2AVjD|^JBj*Z}XF*!A z;~-Qjv1ivb9lBYfbT0W8hEEKZ36bx&Ix-7sulVP)(o+MbJkj;|!ol`BqEWUxK*3k}x^ujC(hB>`jHI_&?&ff=h-JuQz$io@T4La6 zuWyB(qjBtJvpwlGdwGVJb@X-8P!3#vszo`;D~4!yaQaPA=Rr5;ucmow>00O$31p2d z$tZqYs?h;9pmSsqReaI>GPO$EZFUqL7!)N*`vFZ(y&qHM3bF4S7aSiK6~?ddp!dGg zv@OP1Cqio~y;7D!2Y!0q9-5TAgbzC&C1u*F-9(>Q2P)IYq&0dXQQyls_Dl-*gi>L> z>0tbqG;Yor0jvG!AB4T-{bv(t-*50_uh8smpBxYU2B(w*m1_jP+6i;;Q2PPvnRc?O z_^c`BaqGLyCx}cNE(q|uyxM-b=vl|iw=VnHYPZHv$;62P{@G!$Gs*+#*T}j6OpGU7 zUJXxcKf>;#I}sRt3g!gzJ#w8aMG}2GbtyuvQOzLe|Xc*-%1J%>pc!V6vsz% zg^7|0&t`nDX9FD)yz*8nBl5iC-^uahp5l=sy`1u4uXo!o{2ZrwC!OEoG+iH}Eyi%I zTr3Kzkx@u%tqZXblZ_}8$wv2XWGBKAvQy-=X+x0Z-QoD#SL9-_F}Z6u#UZ>)l&;&E z8>aL{XQ(ZI$Gck1k5Yif(O`s+VZUat0<2N_!TvJ<;q^sK%jD zuN^NW&1x6lFIw0?ACm<(dZQ<5qj3h(GKM=-g7C77agR5i7u0{RHoY!7{b^mcl9)mu zy(~QWJ4Q{YVcH1azR&ayE4R)HEcpun^@CZf$6V~_XlKUi7W)rhP6cfdNcA%muu3Ue znJp?#u6wvzV?!m|RnjLPp852`_zDEjdCh(?@J`yJpO~*hZo5C^(N#HOF%A4UVFr~x zOCGMY0y|1fUsIX7ahJRyt;z18H~_sf_Fk%Q>Vppj3ahv@jbX=`-h$9~Z)NjWYBHeK zAey;swyK_eDx&$p}IB9)g-P-tiKhiO0 z=8yW>Gss%S8-PNNA$Wm+#i|_}c`%KGP(6=IM7;hP4lRB!1MhUB?}C zf@9qr3aWD`)HiDl%FeoLbLb?@u42-Fo5SDLQ1kS;@3br@1@L`Vj*a=*GU(W=hb^;( z;8o3sBCw9-WVRQrMtfJ?4G?JZ?kWr7PePark!N$nFW2Y+}j)Ny$r^7&_j z1YAlkCuvR4}T(2n|Rcmfa6ip>9VQv(K|55 zT;yDIW%79cHt9>~{{mB`fKx00;&B@!nToiafSg)EY7a!{5_je}gPuAA1F5EMN-W3T z6IB-B7c9cVDd;_o8J8NcCQtw6cdqjg*8zy@c$rJw%us_1 zI0Y6Y{P{Gk)spt?TwdnT=^sSKC;?W*gHNaCSMbwWblL7KbnCmsVoP-8l#BM1kNQ)z z<*vL;O1jMIfz77jSq*4b!kM*Oj4C3$WjHvu0dvYSd{N-M6s+*BG-Hj2Qotb_cI7{n zm=9F=I3N8--w?cHq;XUN+j~KI#%q`8NIkr@UfBX*%YnBKz)it zound;1SGg-7YpYPcx7jKhhTpsaFY3Oonxg@^`{rhF{0y1aVp75lPEDCo{!h`a6cEi zN{4^5T1zgDV_gQ|CnJj)&lIC)$_pw^Tr?;`&SiY3qHQ2D zM|eoj;hk(Nx$pdBuUmz=+3x+j&Ks#<#gYIz6%`aBCu-ZPGld3NpI2Ee?>up#?ny{- zNX4wP>sSK3AAk6pphAs7zNF%`z>{&Gl5qh8`Y%UzoWRywSDEZ9|FnY6;2xVYkdyE; z@A(oe5VT)B5Aq?FzE!Nkk*b!g%TT`F+G`gIiHO4irT97YS31NB;J?TQC9R+>I2RSF zBhl-X>=Q-OzT|bP^8_98#vN!)1SJb)7Lq;E6n637<$r8*@mi3`cDFkK$CCk6hK zmr8)~WZN%(fMa8m5dnaRYaOm_3Gv7|FKq?%0uk+Hj`>tq+kihlJr!t5lf>CUI(6gQ*y2%+pi`*uN5aCT!pp=2LtWe z+AR|NZ#rXaT@V_9K0}XvO(TN?sHWI&=%z@pNwA&s2KqOl36qNfij7-)n9GeX325;t314J^<1(Msy{#S_fp|?@GzkvRNl$Srz!vOdxsS71^McG zS`#4+1X*o!^d|%7gtY_oxU<6IQc6+m`y5Qxf!$u>I22jE zb{Tc+TO=Utwq2y`t43K$Lfdo+D4dvds?!N><8aJc-mmn)wFCSvr8`s$a>o;|dpwzY zyyQO#RryrNZ9eLA(AiHIuXzHL;Bh(S2W6fJ^$Ff7Cy}}M(0Pe|CX^|pL*n@ocnN(Z z_O4QpUo^X4xzlb(SdoQPU|S2Hs^?m+j*o32;W;?j_zX1`+J1zt@@$ zz9T@d0*(`Hjyq68IK2A69-w~$BK1JC*;*kfwtq&(-c?EANM+9JJI9^a7_k5m$%j9{ zbU~h=9|PcC7ocr)l6{HG@fi~LgB%2>-Y4&DD*;&(5jy&3!_A$__3T+j@=mj( zLCym|cul^}KAcqvXH+ z8_;=w-RC&x4kDrsaM#md|M}Z?2fE{|SI6TafJfmEro$gBopx{f0+!05W$IP`?2(ycKxS3cRHab>;oJ%Tx$m_jdN$wLvpbW@-1gwcuSnlHOoc zYL1sKQMy5Z`pRn>IAPl;HXJ^lB9~P8xS<A;nNfFA=%<{CJ`M-$%w6g}@zJEIp-!`5e6LHWm+M^k-S~*}3Fb~0@0KDN zZvy_5qqD8uGMk_IinmF@wx!0CE08ZnvNza{WhlXCETPcx%=y%8 zc-n@Ts~i2tLEOU%TrxlYku2;H{Q81SHj9I3EPHqTg^%Ld6|22deror6O=4ck-9DU$ z1@-J}^gtqtqT7Wo1lXDgdjncTrNYjVh5tpyPVd79H1UWFfdy=0w8L^OJ2Q5NU*fUI zRvSWPTA+$6yf}||?*1Mo=@S+YtKWGGfboZ!dK4XT+od}{BQ&*ShD^l0Bp*Va{@JKI zgt!+?$0AEfUzrt18zE3ZAS`f>CRUU>k z+UMB9fh}Q0HqnS3vdCR~0qvV3>13f9j!?6^P=9dS%g?-m9elaXZ)7o7rgr@~Gk4rK z0qv5q@q5BXXY>KLwplk^u69E^h;(9mJ&pnfupB^p%In7+9mNV1dXCrFAwSQe$LcF5b^@B%;|AD;8!d!RZ8loD`4t)u zT&-i(edY?UkcG;yzZi8wH5|S;!0X!_1YiMiR7u6;SQpA@@YU0JfV?$b#^XIPTT+i# z+4oqq%U7_v0Fm`vawt-FsUcQ)HV>uf0o&=ahnJl%nTA;8W=(~UBz*nWJTkNDC}|SV zIcgpUdv=jGngsd9xEb-h^xOQs_Cb+1KJlw79&coQPL9?5;CzTK(ReO@k5tnlyamM; z9NycBH2(QL=m|kBYOO^SgU(YN-gtJL=oqVRS6lwc>DGaD#FWorYxi_%;d+_GRLvJ6S--9Uz?2zC0=PBL7c<-KJ zj8xm46R8U%uDsX`R4rQMZc771K%GD>rQUeX)WXZ(&x3Y9e|__`_ULKFqbhE>cCin) zvZl1oe!NlpvG#B(vX#x|NeNYH8iyXVq zwi2h`?=s}neE5Xg*glE)%G5vg9*;9wy@vJ*=az2UE2Tli8g6H*ZPb)yciBGxObn$n zWB`1t^>WA2DkVqrKfx(K)*=}-x7KzCD}#Of`paYf#o8+vbmQ-gsl6^Vs0|6{oO-13 z_#iVoVAa#UTKzmzIa4kiL(0TPuPy9Jq^WIvtnwW)|5%$$UfihlmIB81j+wls7ujS# zgUKa-E?gFRD)c9ZZZT95Q6qTn;;DzIh~|4f{-^s*XNuN<0HvTb=mFmlhPuxzBU}A| zOY%R*ex`IoRY<0$BZgjOHB6#kjF;*8sF6DD7>?|h*taBgZX;x{Hsu$tBk){C%wToQ zUX}_2)GV1xH=l05awT;X*WlRAL{Z^1(XmCPz%HD9h0jqxxJ>-DPs=j8s=I27Zs=WN zshh=axtRO5<98(|KH}M78L=^j;`R6p^YH)pQOgV5Uh|0R>PlTD&#oM?Hfb*`!87i{ z!jiCsT*W|b>c)S13o!Fdd!JpTvWQA&N9P`V`7j%DrS<|lt6xmH#+1d7PA2VF+J5zn zA*YzUbNt4AP>2pf{|r`jpIiA{qqOUIc@IPTWlOJ=Cw_NP>g1_NWKU?WbTzQ=EItI>7coUKKY9>st;yv`` z(ZvO^$enul<0y=I-#!8fXkUu6m{SvXHhLC%(G^yhQJ=6@AA4>+I_+pr{QPc&yg$nj zDtiHyl-~bTWVO2}Eg%8Do7$z^0B_`!gTzYRGyaAS3h!y!n(L=S!Y zCqXfxFWRQ+P#nd#H2F`jJkM?fpcZmUOW?}Af*&4SfU>g!!1?Zk83Gpt4n^HVq;rO$y==szJ$ zC-+4eyS>$CHs4~iv0Ff~4w>hc#Zy<7prA0Vl=PadjSNW)zqd&X&g7*>mT(wee0vqS zU&bR>?6!(r9~LxB3TAbWQsAk-?e+L(Xo_C-i1)#Ky6P4l**;sC=c5(zq^yaAI(>x| zZu6P0P?0#|jS~uB+ksHvof12$;xcB?@=4D`O%+3-bC#fUC_N`?rCHIn72ZhR6ki6^ zDgI^INjh*qnX z`8FV|$#sfHjG^SoMmMSc=wm+~&g60=BE;5pQne*ylZhY+7U85(Kz(+o8d$>b;NV_H z_^+DQL}*^HfBr49v5<9fx`15^FytCL%c1&v{3qXVhmaQqcP(jrNxB?CGMT*_aQv#J zLr;*vGq9MKvgFO3UX|P=w|>nY$y+G6Mf`3-fIBe8#YJ*Ie}#`CwoO*ZP%P-)qrh*T zUZwc>=R}Z`pI}9=Qe8{mfRQhMf%kiAE|YFkI+uUp!JzhLl)d>zgNsH7L3@$Zr}&wx zi<2dG1jsOczPei?sAr6Q;4l^??*MUg2)91J3ligSc)*nM#ZyCIF)Ak$#Z_)rp5$n> z0rT}v0%d9^lNw5ag)-gH3fNYhTpCg|Kysy(}C*P9ESiT{vi>5YG5Kea(Y1&K#3@p?|E&^I$`8f_$+zguu&#+ zUFivhXcnTJcV~1_K5h+{S<9iRlS3|&T0q@u=|Zl-TJp1eb{OtNOPEBX%#D@7-Pw>k zT9`G|bsSZdL!oI2e||tUqBittU01&U>cy>pg+*aj(dAox+COarz2||YG0i9B7r1>Y z*70ts7c_|rzHSy>CgRsMBm5U8k?K6asPzq0ZjRKiyV1>Peu+|X+W>kwU&;S)GFq_- z(og zv|h617I1Ax|L$lx9==(YFlwmuoQu2U(eLlTW9?t~BEm~56;n81snb8-cJx&RKehz( ze&tZq%R5rEyl)q7ZFCMvK202m>vJk#q%Nu3Bn=;VyHQq<>eLllk~X_2bB}Fn;`u4R zI^vmP=FkECaU9|ZX0jaB&=*nqU^T`42|lTNV9O%it@7L+RqPy#uGVxLk%n#HW%PCT z22mha04Nwe3-)j|q@-1?7`APM6zN2D{5?g88{;(l{VQbbYjQSq=gfPf_|t4;=+}1k%62q zM<(qsu;rjG(Jr769m}NB%rkiq<(cC*wMbXmi=^I0(H%TsCUw*=(VA`maZf|ZcF|mE z2UEftBn=B^v{?J{wY>06=SfkX&d6v?ZUf}QBI%mmj%jsU|A7yqC z`!hy6vW50?7C+P0bB2_G=Z(ZCnnMYUr3nU^FEf}6gZ5TzYBF-?Aj!YVg%?;~`E_{C ze4H3cZOuk;76CxXbi`JwZe3hgz1ObIlHrIup+RsXH8CDGRSrKFM_Xmq8mm#mNDvG3 zt$qB+IQ%|o!#*CEaGhW7X;ODE0M)dg=#ID!5G^xg9iet@T^dSyik!c;On zF^!)c>{PfG{HkCQ7WVOwY=;2ku2%Wiuoh}Xr6MPzbluniQ}U3Wjh-)U@qDy;a4ZS+ z=4VFG0^i`2?VAr+B@_4bFEKipkQYB^rNY>cypk(paEznm0Z#xNdJ!H-&9qv8r?eTD z&_n`AnSdK2h8v8?AuuSLXQ|buV&I;d?+Pqwwt_YIXJhkT?r}qmQlYVA$4WV_S!B7; zk~za_rK3Bs^zUkVB(r4)`W~go&tJk9CoJgn10Fim0|LIX4=(v-F|)bD2q8f|+0ZD5 z=I_8qo{3=VwS}B&fwUD^wI_^!mvMp*vS(cmc5sJ1=H%5x^P{y~x4BvN!WXSEH0^Sb z5e0&t%T5C@JW@2&kkJ27IYS{{w@19a8PKb2=*fo1 zllLzjJm_hb{}>=OsN?kzeDawUFtS(1sb*0dLPa&Cr#XmyJU~KF6quOCY^|r zVZ^lXx>TX_iIw56rH))YlyNi4opmoV$0>jD<-E? z(u+nf9`?2J8qRnCsn&`V*00Nyf>FvILEbqR#MZ%{9KPbu zPrh0k#izBLd2|ip*?F_2ZRN@SH_gt6vH+{yHI`$&N&%CCa-TE}L`Pobbor}VC9@_) zJ4WTpp+TC^$7uNV@>~HAkpv{;D3ft9p-2%*2`pCqP@bEHzT48tu*RvA_!P6&e52`f zjWwWFI^VD!d@s!%e(*K7eN)N7ot1=C4NQcDtu1JHB1D@EQdYz-ILx?Szm4;d#U%mV zY8oH?Vnk!;tAL}bTxv8Z@Ws}bP1uoKSCPCLEKB9nXKc?!Lz}nPK#`j8Bg$s;=Rf(O zGU9JC3#CS+mQ(~D|>K)0Qkw4uxsD0tc$-LxE9 zn`{iw^Bhs5-nhVwnR6;0msSmq{Av4rpY)Mi6D?1Ue`gCI^_l%2 z?+&#%N#uVCA~nD*P#MI$9BC!Gs!d(f%6Q=Ce&$GEJUj%paTY$pxRnh@Gwbv8Ul~ z_H@2LRL)sNCS5{1TcZs@cyt!c9!MiW+KxdjNGCEeOGYbK(OrCfH86)2FfR)%jFTZ5 zDg1H;I9XW6z&2|P0dq{yR|v%qTa@F>ew|ufM>XUtYd7$qC+!xHQ8_JoIIQ}UYz%it z10}QcsPk`mC3a=}&xL$5174O%-|p49k>Ukb6I^ipliAFh)Rpi*!V_Q7e6uRK>BooC zuU!-^rv(hb!T>x5^A0iu;?4&Pqd>#jo_gP5j(?$@R#a5Nf`c$VXDffD0v<`9J4+DU zq<-QGdsmWAEH#?_wRBD{*w?Uu(LRHr%ThvLuBBTdE5Gm7$1G4KxcPfQ=cW2rBR6;8 zVVxjL|7%u8#h2gfx!J+}$M?t7W%y7S{+^9-_!60w^atptPkCWt+;IXE5-WNcQ4jex zceRC_n$1VNR$U9Or?NCYULfz|fsTO~ntz@kE=(}>I}p;vnu7BIKyWc#(i*CV{(tkM zj^oq*ryn(;L@D6;QSx)Ql%5oS{rs0eYlJzMTSl?Carugmi?y77Iei*`)0I|AUSo=G zuHy5&&&AbuCnq}FmbkYj1KI=+()3ABhC zK5F%wAr)j(I>p>V^?;u_%iTz7%PcN<`}~T`xy^51f19mwdl=#dr~d4GPx%SZJpJvD z`PRy0wQ=pK$GgvyaaK3V=kCKqoXF3QoxZTGYm+=Vp1Y=aaWGf1?bPdo@5XoMIPLLT z;-61MA2A)>q9U#&f?yhtS12)|uR8d2nXH<2JxHOfj{LZ3amag9Yz%VXm3;n>=CEH!teMUs2V$oQ^SUDcTT+X z`$xQu7c%JL%n5l9AZduJe~h2|?b#@s?XL*Cl(hd6&yNZxyFc7r_5-lZd4AOR)lw7h z=@(@l=9Uu$)p2hxy4ox|Kag}bESDK7i@)3`;x_?k9JBez>gg5mIqC=!y;ntZ)yZq^ zeui1JtQa@{oBN)rTi4nnWVMHxBnVeLX#?>``))k9`scpMqqtaWAbxY=gn<65TyVBx zW$;Gp{;ZH58P!_Wj{=*SV@@y1_OL}@#HGo)Pd;i@vH3Rd$?r#PpioJ^pm*!R`sSO{ zV2Z`b&yNhA{{8jafKAdq5|}jmfagcqm|r1x3lq*s_1vz(+j{uC4370M;c$X1ezHEU z`TgL&A5kavu_6%xD@BNddq3Wsd+zozHhM(;JcOEK9{OQ&P@ITdCn|ALv!2_m7H`-o zjQ*h&*!-e^0O}t03R%{!+=UVO!$?D@+Op-Gh{eC9!z1!RWJ9>_5|8FGuW1o|w!b#@ zPWk>bsy_Vtzjzrtn@(Rk{~nSt3lPfcz1OaYe9S`U!SCBE-+q7X7PPUn z8vZMBUELc(9gq&{Ooz#Npw>Z`H}9oNt>0Um&7bWgzt1zd=ZimN>^8A!=(^qiP*B#S zm2w^7)_x|&nwxu9uWpa-)9+}KDKsSvfOX5bgdP{K3?}Xm2j+)yLJ-}|7d98(i=;NG zYQFkqZ^fC&zisE<@7&23d1x)@h0TLIq^?nDU&zr+CrPw}7-MW)$^+Aj$$YS)%RZZkpEmwBz z^^#dM82|+ysElmnz3n_oOo8G-H4D;mwgb9B91WuE2e7hS-BrY{`wpnL6e7-*6P&*? z{XWHqitNSL(G)*uW*8NTX1Pu0(I1^GdBgU|^CQxvdh1|X*McD;qUi!nd=TMmBk=c5 zJFKxU&4fzLF*9k@br%>m{e`8+_EY#snt6WX8wKH8^&+8Ium&BrUo-u7&32cD_2wK4 zyMDL!U;E)!&k)ENzeuR@O76+w`;BSuRU_Io`zKwmG@2{tsz0a$@ynaD_AgVU8m1O2 z*9;vSLI{Xz6!&wilH&k-y)&%(Crj9?c13wc8@C(NR_l?U*bE$#Zz4}3=K2#=xRL{h_`M6j zOTZblq!4G;i|%(V3y-go${zo?bN}(TenqQ|2?62@Zk^$Rry}w?ZbzWN9%J65@pdi8 z;DzeB?p}}41LY-8g_fXzx^5xJar)suG)2CHHDAenVq+JM)9=jEbwk(rMUM#5_6U9U zCdHz8%D-p|78`@wBATX$Ru=Ac`}R2oZRvW7@P^(<5TWxp>7TQf0_hzhXEe(&V{wKUxR2CB~ydAz;N)zE8MFDza9mL#9vy{K>FelG!E^>`$3yg zV3zh)-BdImvGq(s4sKe?@L(8GXQxoeGsWnB{D1r#fMI^ei)FLNbwC{HRyzGv>E`F&R|FAKmqM1%zZAe0Rm z8maa9R(z9|7d%g08{!SqAwOtn7xJeEg8;d#44cayP=MP|7q-Vbxv4Pw{qUR50g6Dcx1}-U($z4#l+nJ+N>upqD1@J!`#_vY1V4KKN${smJG62mZv$&~N2k@lmhF=O(n%I=HawkgRP4zB!AV7RFVMkuzlN=T z0V37WD(9}{Nc%~=Itj!}y)*B_>n`=$_!1PbUZkzPUUYHyOL;l5Eg^(uw>T>Oxg~C# z?(&F|SxNNM;q;hnf%X0pbk=aFXVY#gOe?yJ7J6PD>!#?gEWO0jf~K_QVV^q*|Gp|K zZP(j&N~2&6s7YG#Usowpdx1j|2ZzQjA+{!~-O5D23=gOcnt+DTCVjygB=3Xs`RVJf zzpCJ+P(J6*w_T&@7NfM0og=)-Rx5eJbor(0NmWKGG#|_aPNBHuWR?_>$}B{pGh|dr zAazX_<956bz1MP!pv6hQ*aG(M1Ix_=a35azZ~@ZgV0~79L3?f-%Gq)iY;+Q*`==LK z(JNtt>?B0XSxxjjM>i^?MSwN2cRl4*;99sj|tsbwEpM0B0 zRn7%_bMQ^JF88>2vr)YDY!>bnyl0JO!!xE5$30pBViTffX!?E{3}AfK8mc3+MW?I3Rs4 z$Z*yR$7Na$fz2^JIsq!iOoASf@JQ3&A~eU0i`OIfVBVAkas&%>?QNc@2W*_cmil2Q zvv9M6z^EMlhmNzkH2naO9;Zi7V!+W5mRI<4rVP0~wO$Rfl&0Dq%^FS9z~X;@bw@yZ#7A+c*+QvuFAcAr{ap^g{&00Vxb86zI)Hkc zfE0WQ?&G|V$6JR>DV!05(O%_ToT??rEcB=il78k>(KNaT1tDDK@AI)eq*Y7^7NYG7 z_0t;Y6HF9180sHTqmg{`4eF*wia-ID%Lff}G8Y2tazTqFw$`)Y_%=dEZm)JrkBSWI zcqcPgw?{klsKt(}RI?pWk)|&X_D~NW;?kNqg&c37oThTI%n^HF6+{21dy)cmCo>b zTYEhM6WwwWAmhGX-c^NpD_6xi=ejo)#irW5^3sy&*|!Qbn15~QKv2kKdvH`mmeN;F zy8UgwQu*Xl$F4Yj*3o-AzxttbUnSV+ z_R6$kV?`w%kkXani`rQ=xtt-dVyXtE8M{L;O?-}S2Wbg`oqUJIAWpZDIMiy7ynDLm z54JeD$8@wu*^8h|#v7Z^Y$!e9jwAUopgeal^d(Mt4W|`PGo!0#JjAsj_ePGs0I0FR z-`H25e7j!$RSCBhl%ysj>D?>d=_f8KC|T8W-27Ei@JpLkxd;Cw5DmwSW{1wBoZWZu zOw^$g9#FCrZqY1N`}xfQ395c;BiGTMDoVHP1Di__bf{tyK&%?!;^K zYvvN2G`w;&oN3B3_{b`s1R)QDQK0mwhf=4PRjcmPw|Z~iircK}z1zO=?%$1f0uV0f zrrqiddpg~Y4tZ}~xsdH*9sDW)`SHj!WwL$r6V|rl4_K3hG|1bV)#w}32<{ntkbCG4 z*bJ3^qFReT7iiQ3J7j6=MM5da_gI|j<8JGz<4}G>G$S+^P~Q8<{X`I55V3=|X$_v{ zj@?D~=pm_EGWG9Dp!rn<)c{BFemMUs?gPu#hSjT?JF@mZWa8W9TmMdZqzF9M_?E8>a!XmyKZ9L-)O0g&bmX3J@S~<) z3<+!;56=7bmhTPKP^MRJ2*2NpdXGMHe5}`89&g8szFcC`QMTuz}vuUkkp2bI80P*)<-Y?UVN3=`-^wFvD(qdM)aD6$7XTu{6D6ss(1{6}Q)9jZMyoa9+Y1@NL>uQ4vc=Z~Zu0 zf{Kxl$TP3%wMgZB&v1`kP=lYKYA^L-M)!)6#OO1v;#vVz4I}}$VQBL+?&+38frCWB z3LjRw9VgwsAp6!w0iv_dD8UB_Sn4%&ua^`EROqHZ;{w#kAelAbX;Zuw7jMu+(_IQy z*Syttii%PLQ%m#H*03C_dWVrdIzj0-*})4ZLtJaYoeHnNeE9v z%-IAH6_=;7zKrIhFq=MDgT-(btZ)>|O?4>(2Lf~Y|~>66D4ooV_+ znt4^Dc{|PgxuSdh>2|jKK?+z;p-_DuD**vzjsrK=-Q{m$b*c#F^aHQ!zz1chhrj$F zDbde@v3%bh^l6h~CI(>J}8>0oOm!l}~!@0YgG zNZjT5vMlu1%%B5VWtiA@v+OI0*{3_R?g(n7WFyL+sRVBGY4{Wv6gMD#COVO(~wc7@(Y4Jxr^JllL7fy1mTWhG-Qpmh;4}98{V7^2!SOqHe zfq7$fvSgk{csc$0emQrM0610DE2Q8j+xcPUb0UFODWD5kDf-^A-^)qI3#`K%#E3cwpg>9ACn_g6G)rMDJi?Gy>D@X5V4jYH(KwN#6Poa zC9r<~!f=Yh)eYXd_n;_MEVC5LS+Lf{5dnH#31!5Dm~{904y%#yObTCILOVaT`H%tW z3fTL4=LZFq-Nfa8{K= zu)0lU*0nn4+GeB9>7}1XBsE>=L1A*}i!SOy_&kV(L>yj$({19gVN!+5Jn2~4nH<5* zFqz%yOfw(<*fsv$^7+rM=X;hM_+t*jYC`()#Fwrc`{*nKt0}X`Q#Mx9_K&B_1YR8Z zi{YbV{;W93KMjUd(BUlU|N1-yS~VKb?vd0#W z?|mC|{`(|e%l+(ulZTbtU-Py8=p+sEjRMW-RwiEQL6LJpt8$5{Wtie&(_C=L0N3#_ zNY%vLCYSK-xmcnCK`&AA+;kMKP_V2DZ#DmK*8aczs34o|h^O19ZGN76`ZLXDhw*gh zNZKT#Z>M(ehd6QJBVMvRvZU$44GsXD5B70*is2Qg=)J0`EF<(mY{2IJQvuzv@4NC| z_n)xMlQtmrF&(Ift|dZ*!>3nnRNe8cIb{WEj(TYk_ZHA3fB$QcqP7R8uA(tSZk>F zNc+09H=f}yyDH)$p4Z|SQdXDZBd4x-T=98)>Fk%6)WE?~tICeZQ}<&(zIt$CrBk2LhTJDyB+fUVkf|=lB`n8+2wQEQ1{d&3qpo zI6V<6{O}QJqRx%Y@yoHcI);)5`0$aT03b1k?`L}jJa6ALUQneW*8y4+HE=b9xx_r0 z-hf>psk8PmlUM3xyvV9GWB|vm@?R?Id$%-Ch^dHepR+Um`+n~#Y~P98kjqtZQ4g9b z&a}^++$Ru{)POMSZ21oawW5mDPhL}IC0$Fu-l6wkb#la@Tj=np;WJ(1j?WzD!(*m% zC#S~D7M8{bB<@|kEFUBi!i0z=bMa-dfLXhKT=e{93&|g^!x3(y75ghsJ@km(w=bu) zu;*AOsgRyI&V(xdg;f`iMYUAe)jGiHn~JpM3;5DkHE5mu(FRUDR8eF- ztSU-PvVAD(a(!m8CmpCUa+JP6ERSuehn+bLBl9LLjOj$3f%Rn-fqm z2M3RtOPrRg&BY;|$95}>J_9JxQ3tNW_$B454q)LU+xz44{Z7C6F%$BL0`S!xrHmApwhlId$Lb{Ms$W`iuevk+9kiOy&7Kr z>+;QqQHLN8h)Q7%_s?I_^cwn6FAs1Aid8k%!=zQNk;M2_#>;=_YFu;AFfXRbSfSor zHc_jSX4ReSm+3d!X#+_@hTuHN##Sq$?5!LMZhT(?iEiYGUp7-$du18GUcTQ^nWc z*rxvQV;HZ>2nS7vKvmIA$|(T;XtZk1bN4-%=qr2bC<_Gzu$F{>kwx5=D17EzVDI)3 zu$nFh&cfR32qiuQb~=iNxuj8}+;%{(>HrY0N99O|%B0_R zg*Pg$9OtzR#qnba3w0{>pS^i*+C zmZ1qox80fPzS)g@&WS#>d?=S}q9Ue>E7A56ku2DiP z(-p?#BemE@o%`kU^;FrTHoqPoPbhxbTn^BvCsvns?jmY@UYcG`66s zRBNssxk0KIrG5CFUye4H%Ti?nWtXoCMM2*CfREzTzpw-*l0}5YA>Tedl+4j~PUkDC z?-t)a@ z6(QsbnG2{Fs#^d92HG;qo&tq}eZdNC)p6DL_5VBMBLolxWP{EF0epJ^ARoOBTh~qd z{{{IRzV_cCpZ&b!-pSAN&+cA%{@)=V?ZDyot5a9p8xK_a~A+h6m>;NdR2i$_!4R1h`fCOLxIHso05CQ;#u>KFo$8vk+Kah{s(*J^d9QI#b`d^TbyPejD z{|)(^Ix7VD5Gwm#`B>(hwBe@Z$2`;Hm#;2gI@$4Qxsp8a{|))bJ#_gm$VZ!VAn@pa zAfI1quKyeI+1?`kACS+D+d%lf_RNR5*m~ayVa%0f?W;C@Aa`DlcOpI?JI@z=)drwB zS#Y=N06yl*g+!yHcV}FGJy*?dpNeVTHR*ZQSsH#&?qRWok=~<=XYQObTQmAx@DMcN zZ_v14^ypT@hnnA~8<|4$B%65Votxd+cY4{14>Qx;`L(ZgqVS#n9at zQY$;T@l5kd>&CF|{Z$_1GpM^cYBFRQ%j_>x}j9gnO?q987q<_3hF3NB;JshQ0EH z(Y1bYFkpSaptfss%=lK<7RPPR^2cn@t@B&2{guwI#h?FX{^dQ*Ch*&GgogE}PyREl z^TK{7l77#4)AAR${I9rZ4VKfw|4q!sQTYTqz{N) za#6zJ;AFZ;+Mg2_OGZOAyp0Y4>conhB$^G@MvfHnp+HXU zG*(qO+go44(KXw}`H5J(@Xy1Q@OAKuy@R}pGNAMa-xT}MpFgQAh zVYX3Ai_Ss^u{u6K1d4LQB^qn0uMjxv1?J>*!6091KoS-f37{xdTJjy@_1?(sO;g~e zzTMKNp3Pn4&=dhXH^>a9`32bh&LLiXFXM~%p>ZjAX|)Rfa&Ugq8lmChmg=$Q35GNa z)e<2SY4t7L<-+#1YW?E~tT3Z~LgupJF@m zHhY?Ib&8iRPPKqKv8J08EbL8paIUVf#9L|5%R!H{3muELz4`#hsmUiZjtTJ)V9Wtblt9i=bziVsslbHi5sn9~^5PiT9K>Ggt;HT)1? zH}3_?BAN(u^_`(RrT4o&WRM?>Af6f7Hq7z)R_&lBS~E2Mg&;PyL-&e4bltJtDYUnE zy*r*beiyru`q650_g?BhWBjk!)~K}*xxI3Gn_q=t#RsTT_XDe|O;8 ze6b=4sFI=&?F_xjbh@Tm2)~s*h~J@brK?n4^}Y5+CA>A7wiByptv;xvrYz`ARFSyv zyx(YD*(EZ6QNAOw$Ny=tuS!vm(q_xx#6huFsYY+c1a_OuHwtrc!MvG~BT$PwCr9FW znkAb{)XN46*I)brHL1fHj~8y=^Y80?=JM@~s$0?r6}9QgKMW(8dVc5NwnGtjU!FB93$zMPv+GDfcKX5U zW0$#zQ7nH&9seZ`e>JZQZw;}$hHR&cNG($&J(4ubsfA`qg6ob=8N#`gbHzNNhK*Qm z(+7l8tM8=%$j-|zQ||Q%-FH9xr4I3Inqr|DY;1SJ9wvH00`ZrPxXk6-LLz>14>>xB z^>kzeXp)2r!~UWXpOM0k$Rdf&7yMf2&NDP_sH3r z#mo^Bb%os%I*)}#)am`>gnuoeKV)WIjMwD`3%+)D5%Lx7lF8iT2wJrT8&JRj?oORY z&S>xWs~ZMP`670CxC}Waf+JKY6(!s)!cQsyiAIU_BmSX;4`V@=NbsEqA5*j3IKJ%t zA#QYaA6;9J7fW!*eZR0r&il2fE_MHZ!8}RC-x3QEGKF%uh^U#<_UH21A4FL{{V&id zJmS>=nWE(5L#uEQ2A)q+qiS#12Q$5?QL&1`4Pv`H&d@ z=?C(+$*GzT$pLMkyBZfu*AN>>|MV=+D{Lri7cy^$9@a+*zbp7{b~czIm^-Fv~~mY-H9pVh$kunQY@rswkVQe+r4H3U#_4 zA9$B7)OFS|+EgTf8^|jeoY6C71ZAxxPQioY6Lmh3CNsM{!! zDtCcB?3t+@#7DGX5|Zy0+H-a77zyQrvjvs8$KChMS)$Yby{zq(Nnd_RUgZ1_*6u5+ zsV<5a{U()!kWdAY5~}pxYv@%79T5R(f}#R~(u9ygLJta3L=7Mv6|AU;fq?6ChNlkN!>wzz2J4wPlQA&rV`1jp`ny*S?l4eSBk_|-Fd*Z=jVf>k zC&@S|UC$lzntSXQzP(IDuqV<}^kjHsVQ0|>rEs|!V50gX8(hC+@_-XfIOHY#{+m+Z zP6Tj^5E?;%jk!C;E@dtfU_ve+TLSFutBYy3>Yu5INLb}bdI?i#T$PW7u0AI=(hjVKmDd}W|0OvJE0dX|am0ub4_Qzw&<90F<% zK;Lu^a-=|B8((rtO4t5Pe-m{1#9-000PjQ(;#cS5Jstjg&ikV_+;2J&&&BjSRKLMk z>-f!yn!PLdxGGPs8b#*_jo?wET|!k!i10m_7fh6FW#S78O5r_^K7d>zF8d_r}Aci7#WCBCeK74GIBPw_Q1Ts8wh zRwfCpC82Mv^X(j=c`U|vf7C}cCG{rs3qpOO$59R*)y6G*F^n&cJt+3orFRjtM#ogK z8=`N6_>9uT)`RM{LwRq5&A#lbipjbz2w2d;CV2QH;9H-M8C2T0C?fm}5PHD4*GWLO zGLUEY5USaE(~+d#>^L5G;Gan4jQ;6rGP+|l=S3H)wg|NoDdhOl?^lzMN?MV?m`je+ zp&v_k=uhBtjCd*D1FG4(sPH;KKUKU6RFb!fauBt%0Z|hj?fTZs3!^a9v9lP>*OXA zeYY8NS%gr76M(#D#A%(|^&uR@YFMy5MEp+sg6dx8u=wVaeti zM=(0B!(xIl?7EZmF(-W}^y!I0=~h0$b{r2qAqhR<3_e3Z%`nlg$%2z!lbd9nFq>iMX& zwrFQiAOZDPzj0)#Vq|L~jD6BUDAhO#F^(E(+X}nn4mzwqw2sAW6r&2U!mC}F_30P$ zObi2u*h53`;OK*1=|f!@9h7ht0d|s&+`x?`oU7Tod+4fp?OQeB7{V>OJJR~7(2cR? zYisUe3mCrBx3{f3d2jC{$c?HscY|T52HQ`^1gypGG`r*eM`YhHAzk~6pBek=+gIrA zYT-F-L*g=qT=E|*Sc^wgb|EUba55fM@D3y1l34NkpalW8CN*-nF`V#K>^AQrW{MH{ z@g+Eq)6Zd|%D95J*le}fLm!fkvQ?gW^<>r07wTmrD`F2AFhD)XXP+MgmEk~cOz@}| z1mHrJ@aQj*=$CZi2LO7w3pJdCdWT1|BZU^J{ZgHXat3C0Dtjk>MujVQZl*24sK7K2 z19L`qi3sL(q5d{c^6=>Uk%Dzt)N{OA7*)7jKf8{B>5`-|pn3Rx=u@cT;m8gHCism0 z&~L2IUvvKB0B*x?fGUD{2ckNG=MM-%y-ZYN2=Y?oa3@YMaIa7xUnJ!IhqBah1^FV) z01lPMDPL1Pcn&y%(* za-RtiXMpEt{$f0D3$d9q3Rdo@WlSBH@uCV0aG!2+FxTgWsQU11ypY1RfX7$!DshO% zaO4mhd6SL2iWhpshM(l#e})LW2l$pzJd3g(1l`QH{@Es2o&kuUCvk$;0C-O+B4|{w zoq_gf?&(%(o`3-NamX=dOoExGxyyK(#+TRnckf8j&GB^!Qv06bAm)+pCVNW+ z(bI>xko5Is7kY$#Z{cFO3*-Fi0dNKy_@#e(QerU*-0YC&zLSJrrlTrx*+aqEa%fp?jTf4@`o}TZnT4GPJ&<7Csl|b zuIa!2)rDEc3->Y+CnHbfBWkEP^lFm!2fX#oSLp{|Q2Ny*1_zF>rXIZuARXg#+8MXk z*bf@_#KX+)PtF&9VDcXgLPs+_mpSPDeD^5na0IXFP8H^Zh~P;!yp3@5aLswTCLOzp zSp)=61J9ojggdnnL-hEZDGYxgQx*LHAJg{5d&6GB{psocxYRoj3J*sAv{zhS7s2r9 z%u`fEO&6jDzt*|Ey1Np+-b291VxBS)bdu9-N?|g` z&<~iMIQf%TwlN%`egAk2bkR3Vn?Bq}1bT*v{EYV$$T?w52j3z@w2fyummgf}!u-Xd zuQLQSwX$!H3qHoi0_EQ?Jv;>!mN%|Of3(ZzO?F4W{-Mwlb-(prQ9cBY5VK`(cTn*v zmM7=ga$Z#LSj*Gjr`j(389$4WH%WgtXP{c8msHpDFPd6<(DM|p(Ebb#|+P@JSrrr48BO_;8N zT|$i86yX_ZurYg)=TI2)hTR?4cY)V;WkK(C#p|x4^lH|T4~@}i(N{_8_4IF0DYyY~M=9UqPGq%({L5VDLq1f6h@I>$rEhQbvh4aiQkMpre=S^&i~B_0 zow@eORU!Ipc~j*T$o+49%afZewLa2q#iDq6vQvA`R>6{lLh-C(hsKqJy(($wBbt|k z=J^vYPvWd;cF+7);Dpd4J3dpS>okf4g6v@s0}1+)-zoJ*Su5Lf+y|#gqM`KF+UX~ z>|_`{w-9b$xEwH#RVuXb{zTnv%Rcm*0W9=hDG$dG{el!Sdke{$SK3^Mj4o45Llat> zOhdD;4VfM|cK6vX!qJCc&L8M~BS09)a9f%^dvLoT?Lzc={7~JYUr*roPmb+(xqWI; z_)logMvdqNH_N3taW5G;r_0%6$(qeIG#nAGbYv2tk{y}?zn{G&U9Wb5?X1~k^!lmIOpUO`%XPS1MaC<1Km_61{k;$d)EZg>} z55g)A#N2~c#Mru5%b$FceE3pMzA_(0lGt01PGRIMHDzw+#T9lWg0L_J@A4N_nnBn@ zP#N7PRJp8h%>{*U`Q7shN1DY)+w@FV%VB<7pIUbLur;(^S!ebX3VPzk?x)X|x!Ptt z+==bWSl~f98B2Uu=-Sa=$t{<&&WH5($fO8fkxom0Io39BccrV6J)dE;wP3e4ET7T6 zd+waK>61Be=I{Ew-npgE;TqwQl>$lvGQXEy?<|&=1<(bA1Gb2J=xng(t!Q~4X5PNY zS+M6Ei6_6N?x98FfR(ZZcJXkoAb#bf+Byp2nPs1`WseDA5)WqI3xD|ilcir>l**w{h~8VGPPJtw7I z3UM)amKR`@#@&9bCiVcafomv@)#jHwX|-0p{5cZ(g9-K1UwKLQ7qD`1plzHdIR^pk3_5m}PEy=t4Iz!2Pr_{klKfXXW#@Q(SHDe*{HqyppL{hj5fDMf3ClU^mgnl0R3YfIsLtPZ zmu1zl#6^li~z zjXGbbEQ{p|nwAXqyH3A00k$2bjengt=wOM2+-i{VDS+EN{|S%TCgHz}xbsdRS20z> zqsP`Z;Kp0{VT&sb3ZsHr!ZI26dUqOShq?yE+4|JnhEE6^k$lJRhxFWfA4e~YLEQkX zM5t%CdR@o3$&o(wcRC>JOiX4xB z%;Pa3JmT;z@httZ^<4dptM*jcOJNgdwu5yGfL7_55l8gcZm^h_fXu@5P*#FIM_`-) z`!Pm6H1?Y!n?#0Kn^Wu<%|031v!W`D{?9>7QnXu-{1a$0&DnaeuS;X!5nq4%(8;pQ zIq)vu*2X=r;(ADeYTEs>`Q~pFMRK>Bs+*?4&obXhWw$CTyu@)zgL#vs^2#yT2O*Uw zP{g6sYL?}zZjSA$=x%py#l7+PecC;%7~@n7(AD3MTj;LH;UAIS9Env(vBGGBTFP8- zuacj0&2!w24d%j98SfjLSt^eQkIIbJ3p7TZmKaj_fO92G`_A@n@4d+}KWZ6p3Udt7 zp+}tp7Jm6sj?-{k%2>5IL8tuhudI=$T2cW6Vgiviav+N_dTR70P}WR*Q%`z>v_>`I8ApzW0T$DPl4yXflr9sX$5zS->JlI`iO7mc>Rn_e_(`wwqT z1>Q-!_Evd0e@EY_JO)D=9zq6@6{b{71Yi31fbiq`5tqYS!WEE0gEvGOU70 z@!6%o5O_lyClIt~4i?@uN>_A9@;z7>5`LgGXc45Yvvl8P!%tiEU@WZB#`or%`cuB^ zw-sxWhY!*FGGElIobBQg_*vic>s2Aq8ppm^1kB6D9!wt%MRwGM1!P>|HF{J{g{-gdUL-- z882JZ`RckxiTGAhG3{;U&L4$_TP+uYLxlkH!&opN$t=`R%Jbxi5qmJ<8c^>= zG$U!YN!U7Ys|6P9>2{IQL22NULzB>{@le>9y_{^3rWPVp9Og+Nr{&46u#JaO?5<84 zT^lKOuNd%ma*ls;KQLyf{lHLn$k4t$f>|NRv<YfIu@f#{4 zS31UjNk6lo#N2?WEXoTj3D^?I@c=azOG(zh`t%n(MTC;Lar?8OP+H`JTrS0>n&iq< zrs>1IGwU{Ido7u&x-Rv z8nh^PisW1#Z+9001u3tZHtlwLK6gdvhPG$7x|zIFF{!KS*h+Z-Lc_yf-0neJ4xSGd zhytx73zm1_1+DmMkFFZ<6$esCD|MVman;ufdsmeRP~jSNyDm_yaeN$y5~@zmro({| zitUK150>Ib%TJu9I99{nZ@aa`n{rX2vUu4GA_MW9vjrirrj>nZ z94cKK{Y{y)#z)5epG#4Edm^9TbQ(QvGb!^#s+^W>YociF`=wjlv^(%teA+Q4@ zlr4|0M~lS)Z@XWxsV6x)`5Y=RfqFrt*i6gSms4|aFlQ`0pGM71f`6EWdrLo)3%$t; zF;LCsQjgGJEuoa?5b{1I#Dh)V7fJR>LfQGM`zuKnOrwoQ1g>TZ%;;aJroj%5Jd2o= zW}!6YrFCCeJeR&bi)<#^ zyiKF#Z8wDt^NAncJp)g`lYRB`<2I-v>CiL)9->b6V;V1XpwD(0CQjyajPiW|N_Fk4 zeH##WeQ1n2ERO5roel|Ahx*|2y+dK9V@)rkx-9gm>j6~HkPF?oalJbJwVBGi9elI; z;l3fv4O~M5+b1lAq~`|Wqg3D{z73>(T}fwi*_7BGM~fAiVgkg8X3ayql?m?`^kY&E znp0z1$xo%p2bd&xb@+h|%JEk5px>w?(@;P#--ia-4^R?H$VZ)_F*sP9d44F95+n_~ z2&FP?;JO5tf`V!(b8@3`n|Q60^3kz4mhP?37qgn)NCzrWUj+ALHi_w6!}SQr7YL|l z=FM8kNlA7pZ`ycE!wctXLzYPG08mD|rQNQdLV!8oAs$TfzG-rt64_24nnI%<-NOB? zhQEvP=t_aOY)*TmH}8wgPa+`SOH;$UD3@skxDiICU!4@2qEJ#0iap!*4~g{6kLEgQ zv2^ok#&_D@yxupmTNQPSesB+|^1e!Gbz<%QxAt8$Zyr$J8?9b--mP2WlcWz*zbv7y z-MHeBx?mR2kR{#d(obIg#%I;?6P4u89+~{$rkIb<4*{r7baIRc`R@|MOBxc)p*Y4v ze0pdA0LXX?H)76RP)|`r9O8LDEPkx}=YWliv%L z4!pVe-l37>L6W4H^ZyeIyxZeYh=VI9==Nj7a~kQc@wOj0W~Z@-su))~l+ZB~bvhHu zY4L|D5p8MGG_k1 z{A&*BowA*rk@DIP(#1l{?+It);34TS-U3#tI3AiQidcN94w7N)#ariAaIEqj`cg(f zTEj9Z-j&ce4}ndxufOt0~j4c@=;%_+21-- zGZYR;%O-9~hR*3^;wk%D$@VmIVv=C0v{rBkB}zX(O0cDvMCE&V*1vi?7{qsmCdy!B z_Xa#PGBk6H>WJHYlQL&@K`Bcq?+T?he_-~=j%gFgvh$>Khj>x*+qm#K=e`ZBdBS+a zk{I8t^5KxTwipMmQ2QWshxB{rX+t;Op9^CU)zgV*c3MB#W70x~vL>j`?jJppD#!xB z>xxFpR-zH3AG1kK04O}Ts3H>Np&^eSAQFP$|T zFm!cZhz@yN9S_xw>g`KJN)8rS7Uqe&mrvZBzdZkl{4CUVKKO6st3CB1CpcsW;FYG6 zSuPX$DRBSajpmH_64Ax-PW7_fc;5$yQ27@5Pp2XKdi`>0+8^h~$ViG-QNQM>0?$bj#DOV2s{2JgI){53fY@IJnK;;7EEsY0^sv zA+}<#?RYR=CC-h#_WmZ5NThh;VaQJ<)JUqqH}^9cS|u~ku4l-SxwDxfmE{e_`A_z^ zY(j$Zkc4SI0AX@>?zAPjF%~>qUCG>}Uf*@kxNCefj8XWGjOUaFr z7+D=CS#pr-w5W>-~{IPv($=+%BpM zOvR>CP7+2PqeU$&Nww)9x9ZzJwGBc@%4S#LXYgd;z~^i(+>C*!!xE)JCbIF+no0@= zPVor&&SAh}1=}iR)Pm|oa<~w~>V^lCZmHV&2XV<+f4fNLhNUKT(X<;E3?3%q^Sidb z{;@*)Y?wq8{!l$_(?b+`!wP;^y)2hicrXNZgv$t`&jcqye6iFs)6~AflB@k{@#*=z zn6t-<{A$k7;AtXIe@0boQtZi>5}Jx32{?FQB!qwW+P)^+)1eYu@F)WGL_OV)LkV}k zd!!nC;@#4`3$X>KvM@)C{3Mu ze1v+(wtjn6Ufu$nfF(O^kk!Ax4SWUP+_VV|>CI)sZl_Ue3k$MaDe`B<^?cV8C`$#GNlirju~H5D3Xa+Qbj8rCg`+0A8R@O>nzdP;uS-XMQM0_b|K&FRpb$G2hh< zYQ5)4xk{cY44xK3^=d_VY(SjTp@dDUU;IU14a&TEheJO#<_!#prNsji`Lz6jr&5e7 z3f4pZcpNoFntG5yamB+5xKyUY9gF%n8ujm7a^by}zxVHEJ@6@d@cQq=(}mZQ3KQ?C zaX*8UIO^UaZ9*@LHNSPFwUT|(EBf9;5c}e@IPk;7;gC9v6)jZ_?ufUvziWC* z$nfH=oB-EE_yrkV*f4UD@m1zcF@_POKvR(ZA;>(i@*L{s5{4?v?(w@uX zvzCDEQ8-%aQSO70?xVN9ML1^iy!UlaM|)f3F1@?$dDxgvm(tVR>RLPTft~t$&0=|q zpDXdXsF|keaxLOvs-pn+%Uil~M5!?N!Plc3`k#4&g;GYxS2hghM$Yc_zm~XZI6qcv zcJh1nZq-G0yqZnzSmxJHG4}``@h7 zSANm>t$aP}v`>tl#T;7-kw!NfPy0r89YkJxNC%7k;jn@&=QnOX#kCWZ@T!dI7Z}$} zjpi!5(2P?`g&OTWN<}*NHY{?0kfNz_@)Q>33IREBL7 z(q6f3=wWi~w7wsk1rNfBGfJftRj?JtBqnCH&m!+-FS?~(9`Ne=GxsuGFjR; zo@ic>ws|%QCfuCxu)2Da?wh4^>t)QCKRBA$nZQZ4fB1`vSaOv;$hBpWA&( z9S~Hj)(7ECwii`HPK9Cnhr}ZUy#{yBu~|Njxa6Z{uKxyKAdS>iTl8(@RmYy&jdSUa z!g5mT`wWKa&XpMsYafoM$f~|hvg74DWn=V9(wjncW3okuqy#S44DVl$EcTQH>4|d1 zY*s$|v@daQma0`IHas~1ulF0%y*X_r-0M8k7^y3!_AnVfnK6uWP-xX` zLAz?zOSJ4=Op>e}`j&X+xqMZrY7qK7eRkaT+Z_0r;bzy{*3-fTQ-!)ba`02dWiE7| zWFXnosmGt2C=YCE`#YjD?A!)T`aY&(dZz;%5NZ{8P@yfq5#hP%)vz1Xy|-maM|F&i z<3%yUsc>e((NR0Qf4|>Gte@t6+;=|Ls=Erx{7yy!JnJtg93?JMvZ5@%hI_1l z%4cK~;w-iSoUU{LQ>K>ypBiyp?DAI+PgM?S?uG+b?DJKf{u@bn_UDc$W~|_fG@CHE zdxT9roZ6zGzC<-K=R4>d4sumJgZnjO@AqzUBw7b#>)sJa!mj|hb>lGE`m@y=KC68r z#8pXb0`s_gRCc`DS?j!SahMmMU@x{8=FdP+Q5in?=Yg_3zpu>3Hb1wy%_{*LUHe64 zLG}_SZ|ONua&uY~kp1-9dOo={s+uUfNO!fJQmpOmag=gO?{8}6&o~;;%l#1w>)r0| zU{A9YMzG-L{OvqXHK`sseBik?)*;`soB#b4_Z(fc)x+~(ED*l)TjPbT1$iD41j-3vbxzgqIac4r?DFdROlR&i_^c5EQ zKvEWZPqUgYcko;57faX-3%CNUaG0M(x5iUVWrj)_#$<)xty6-s{J?EBRA+1xKDPlH zmJ+F#-BfRKtC*l#$SUnRoB-98Nh{RE&uMNjUGF*_#$;}=_&uA>+A@Fc#TB$EjHC}) zjFmr$CGfx&#F=1VoRF{1_=Gx6BZ|5#=`L;Fyq@zIAZNPS5%Vc-U^s0F%98V8KP^D|`?uNMeKKgcYwGDfI;d5=kkC=`J=R&DfJp z^>C<)11env?6=V_?^pj6sar|%Yz51Xj=-!=CnJx>tgFhTMH3)NUN8q*+QRYI)~2eVsz(VDq-cwjA%8eW_jv9U># z8D;Q`d)=)r8?(lmjRA6QkvOp5_s1q0sOn=b#A{SwwOcq+NJ zGwA(KesWO5zD2-5Duq2N%doeXQZ>5OsPiqR{@$^}cTUB`Ni0B@@4N6D65iV(MGY*k zt2|dS7`!warp(YkE>}zw>a|Lyliw-ZD-!)1i!XSGfv_0O#gJi|CHj&34b104kkmUa z<$A(dg>A00LS`38@U}zcbJbh-6K>u68F25wq>YnSU+~lX)_K`3dbjTLdXE9`2VZn^ zGY-Qvul5P9F~H8n_KlMG!vakW>u%4VdOH|gRDh|ses@tGoG7c@Iv@I^e_AzX;^x(- z?_{@`kMnz5k^7}%h&+7QyH@r@GV1|6-8mspJxTV>xSEYB_rgqd6&`_>?Q6u z%9ylu^9y}4y_ zEAcY^@B6rVp+Cj{*|m357t!nQe6Px#B7BxSgHj5bdF!;7gB9|3Q5jtbuU$89gqB6mCGQJO< z?+X}_{rKK`dsZ)(6}j+>px+`g^|A|a)R+T%1O{165sdW(M$gA>$$HV_;kVMsV>&!Vaa&Jumr;4ty2YC~QE{ctAgu zWV!K-pBLE;0K)iwSsEmsQCuHc=>iN{+#)`*wwLFS+9n)r(+9+p?4OT_iHY>Xb&AJ@ z<;I~Dw{+s(HLw-7@VcVoid%4F{E+Xx8PPipS_7{mzkK{h314`r@b42g<_g#r2d2Nj zY$rncO9)R%AL4^RhVL8D_%eI&5^a-Ss-7>v0@je*s=D=p{)s&pPGu3$=QzR`Be|MsB+_ni0Nm6R#v z3+sq{Wq~U=rNS>ZdzLc7PjRSEGn@ss1na*I7;3{0Q%YUdL#>R3tTw>D6@nJpj-kg& zR=l1je<8|hmxruL+axO6w-4F%kO+CRb_{zGBuu;>`6%X{9p5mX0~V*(%o1 zV6=$6ULB=7O(F4}AtCRyZ6D%~vt_qEscatrrvNg}XcnSJjK|v=-f1)W6^QW&ekwzW8VkOJ|BtTM-R7 zBnxd7pql!_-T^%ZFt74M{5(oMU2dj{^0$ekjRLK+iwv2EOTrTfk{-$xL_6yQ%P~i5 zy5sqa&xHV{aEJprDxqW&u9pPD)VSKA=Cdn4Rw}_PdtJ?@2W*sFRNNiq2E_)>2o!F5 z6z*!T@1xZ^$gp)Zi!Q;7CgUw}?cv&2PN^;zf`IaJIjd?C#hL+$b5PZH&CoZ$U30C5f)Nx*dDHrwpO1MX zIU1I8RPeR_gI3>hms{Vp9<6sg+Bte_70O)KYB}}wP%+D*lZ6d%SP#Qo zJH;~bax_+VG)A%Xd!=Qv1;mO+h1LWN^+|>}Wt~N$A;2=!=HJ^6kW&t7xDxqDl3g)t z8mjRqMRO+YXn)FAO2&W@PHUz>JdogrNfIz`bu{fI>L!t{OLRU<(RxvOP+68ZRtxSo z^)PdKY6B!j41(?E2Bfvikz@V7$?ez9vn*O=nrTDA5QhhI9dCnRGYIX~UZojb*b6@7 z^ZA&AbmE6~of(&ok6SuX#g2B;jw&NWsf==aX_hv(UvWiXFLU6Wb^mL&`1`9&WjC;q zENO2NZ$L3pYcGSSyxp%b0{UF5tB!Io+-8}-ON@AT%%Otx@w}s*AWJm>Y&oLaf|j-9 zD=Qlg26)HNWJe7NqR9Ki{_}jZimiC4d9(sy%#xJ8$Yk_ zd^qtT=P0M|I`5Uv^T#K?dm~IyL~W;my#$9al!Lhw*n|MKq&Zrs3`yO391;K#-f*zO zAFDe>-8w?DWQVH}+FyvkO*t%c6!(L?K1lC}IR~uAbwG?KSroI(C8P{Dz~od zCQdp=1V@|Hj`|IfW%_sp4g9@W4mA7YuM1LTgRr#Wr#nXd?sp7y`l~sBs%0RQe&<;h zgMUBOo3VFP5V02)>6Z-y1GkQE&nN%=ZjfB+7y)!En8C0ZLq)08C<#NwJ^8DTudkZk zP_|1^R!DU4A{n@~JzP;&Mh#frs$6a0f0|^?Tje2ig5*Dv8ERDne8W_t6ssM&E-`E# z#=`OplwKQ(Wbv0S%g-s!ulL83r`KeLSQ@M%!wS$|5tj55uu;6AI+mh7=wL!%Y5z6A zUT`#`9sa;!N==a}Hn_^;`aN|5C5o~bHdE1!WG;+0-_@Q zVih2ZRFXNw*o~TMO(ogmLCX3Lst}TGJj)~rY(_Ko8cy|+N;beb$Stzlwr`jbzcenl3&zq_MOlj+r>|NMp!55wA^5idmNNBYRsx zrgdPG^!3BnO~bQ{`4S6qO$;HOr^*CrSCCB8!P>Y&&!Z$$GRe%1q^?e^2qGp2^VKsD zf2l`YPBFqK>a7hJ%7O=>@dy72iLMb0!$@X{q=?gw)`ED!*El3L&xCpV#NK?vD zv`$h9muh6~pja_rOlN6zy)=#oNBV96^aA@em|$R}#}t*G^?EbR$o$g6 zy_mU8V*t2h1|#{ij1yT#>BkiSl0q;TFb3~ku~!Dbk$;9FB1jfaiKY@@-CG0lUMvHy zy&^r))XDL(*>7VvcM~rX<5$Mz%Ui|)j@sk_Lma7n+>#IZFqHd&p~nSR0R{ebw+8D1 zIE|Hl1BS1LEK8R`lmm@#DGEJIeUvK zOVTfAGkum8zwp4<5R!P{zUh0tqglpN4<7pGKYaZl#))NwchnKdL(-Xo8#o0T$!Nu4 zVVP)=Xa!hEUIQA`AMNDUz zpujrnq`~Iiv2p8XZ~q#vIjjfui_`6U_^jA8QD+4d#Tr=n;Gz=}qg_qZT+BM0!PVvAFi4WK?^h=di5t*b8PIj>G&E+tHDei%5ak62lmG&j3{p~eFc<^r znuAT4JO>S9uy*f&_8j8%pGo1dep6%chlPJe#*RZW1J}(+OP6g|hWl2ObBsjtFl+*W z9E$GD)0?syN+Ibc5e?%Vjm;g6jY%evB>B2jHHF&>+j)j-wnoNafPLnJ5t!sSAX_2v z^HI)Gmd(ijhvfY;5|`Q~nbLCuM*8MB zr;hcN-9T~&L^#TrCZ=rD9;GAx7$Mc|d9~U3z#Wuup`?P{XToo<-A1v`00xAzmO=0!|MG5jgiaAe-W^>L#LWpBXchVm!(d zzh3Nf;feLkt(jX#UN(FQcssUV%iAFMaivw&@q-Ue|D1pMpz1`#qg(;_F6-)~LoBN3 zUOvIYH5e}C*@7 z+Y4?U>9Pm3Q}Nd$s_j`+`IHTMzGSO;(@jU@%xt+M+80vlqf`I^@JbVnVy0rePb*@U zk@v2M__*z+pbXp9&!SWUT3J;Qv;_Pk6h$%ayiMwEn1_%-uivOv+02mmfm1cbH-a*? zznpbU%|KQkeD{_j9r=0ri}a7$^1;%Br$pza56WlE+J)46-XqW|nZmisKdZHD3+N(iG^r$bLL=WCyJwQHJ2Z4A zb}GrRJ^#V}^SkHEEosh6HTzE~wzX9bYMIs^Ox!=;cKDWWbLAn`xeAyhx%xA!%I~`H z*S4dV1@cQn8{8A7GFg+aRBqh57;L@I;`{Xf1^L`xSI^K_^H8s+RCuP(q8=bM97}2{ z0i3YvT5EKfrv@Cg{y&PrEr~%Q{%^60xyK;2|36kSKSlzQG`s#kSVg=WNL@gJUtA{;n|(_DAFN`) zy2qbEYB5hf@*h?)b2I+M`bztqt8ecn&HhiU;{Aj4U;kkh*FQcYfQ96}{=+J0;#&VJ zR$+AX!`Qw5unNZ_`Ts3eK@w8%?&V_@Bj>dKU#!B`kMAa-zZNt;KiF0Oox^J3$(?_` zap%bA7abAfeGmWs;m(d;_IcFz@9)O1uOG)BJ>u~Im^z05*%i;p6I5&E5K*R!9Fj<1 zeyNFQ(8zncIDIhAcGoGv_jUkk_7hFz&6Rxx>Oq0Sy1>S{&qV|Ol&LiRR~r|K00OD8 z#5jQ@_dl@;CvCLFi!y*4btOXU_}#g4olo49`B;Vf`+}fVlj!qdg|Eg759V*y?0yd< z@ki8zuTv!f#<}?m=MADuaf|&4hok?k-5kG|T`CCQleDJM8Z{)SQn34F>g+Q{@y_q@ zMqrFprchUhU^bM*y$QAh0@{~aayA8)TeEFGyIBE|?#u1TUtZ8!Iv?|pRdzY)N?)&@ zF!}6e)3aW?tFsSgbzb?8;H{Fb5x+0(%5|Wm#2aiGs8;ht&|mSZcS1Xk;mZ=gUiFcF z?(qEX+$$%ady9`#kKbRp^Y!}!?qjVVy=$+I{&=`C-|?ewd;RN=M*v)#%Y;ZJa{C4M zc5(+$W-DBli0l7Jtit&6J8M2xaaz>Tr0hkaGbM|M^>4N;+*W+>q<6$5d#o5+;qqWmbxfP#9PcTS|q4stl z(_vRuy5nvcd#X)X9$Gk+k<$JXV=4O?`I+Eq{nQ>FXYNkovlLe5-T668;(zURa?SQS z634p~j+#S&^`ruml|%ArH|kS(rK+V`#to7udIk)h3fL(sx$ap6@+Fu6%yN))!rQB~ zO!syfDlXaFZfoM^u0KO_JqU$ZFXh*-njX({+e?zRr)>%)`B=rz()2MtRxvVcyY;h- z0Kr+|CEX^+_$TACZc5@y=+oGgQhMSXR$+!;XjGOXjq#K2yK9^$4a&HeUNjtdFC|^6+q`l|Y zXq*~Ep|{r6nE$4!9LIAfx2dLdI#IHhA<3&A-cyCBiQBn>{Z~C~7n(7}g-{dw!dYA?#sS!<3m*;oNY5FLK; zh*}_GGFgRc3-jB=|&wP(6GD_n6CHR{g1~cDscbi z)c+cwy?ND*`vHDGbFJ?_$`q;N>QH;Ml%ZQz*Q^4I134P_q#${v72A;$SmpD?+hsAB0=Gm@2Cfvbfh5b_#tqv{PLw64 zvJ^5(e&7{9fxFMvC-$aX$>I%^!K^m=Mdn>?%>&A+yh)Yrzn8K1-k`JRW@SC~H8Ck7 zf)_t1_X+KI>ImKV?6uP<-3$z?JC&EEUunErwhXr%=`OBtQA9dbJDRu2j7oe}9dMhc zW*f9&?BYS<svQh(BC0BG>x$NLI3%wv^TIL{v0S zs>EE)jI)O|&cG!DjTgqt97Mprpv^1y&g(rL#zp*i>wJ7>N zcLS`jH%G$wN+{;9*c-j>GgqzNY?ql0*N8IW^@Cp|V|=%iFT4!kw)|V2iTi9Kx4?$0 zt4|boL@K{(F>cX4eC&NFCZ!bk=W5qgkBs4xSS;03k;@*(GC3yK(l5eoM?{6v1Zyk4 zx1I`Xl9P@;{8IkCzN=T`zT^EWkbNw>#q3|z9;|Jb9l?X^LEZBliREeS!yVq|DNI1AYyd9 zMixF$ZizE6k0{G$HTu0OxSQFp7>-G+o<%hrPFNB>F`3&_zoNp-Q%$uzC0qSZqBkOI z`R0uz&YdUg%F`c&Hwvc%g$B#xTL(PK@murJmt?Qd2BebsCI|k_SJvGvUadGWBVkM+ zGmk&hd0PNaY@JmI*Qjxdh2H{DaxX2`>=PISaX=KaV3PJg=@{mb-+cU^$3%bPFHs!=fx-VtNg|sF8?8 zCZ-jXDchXqSAXKEiu_i=kWKWWV8<(IeRZ6Jk781maOepRW`&Nq0@!RBLuG$s`k3&;03zdU?8XI7;BnP9bQP*$+~kV^L3R>QU%05-Y*a-o+H!#Clm_$U zz!rgh|8VFtTu6in)C~`1CwZmvByubl(VHS(eH?`D5D~v28W7^q@*1scn74%YNQWv- z4xybxP&xb*IyaslzFkQ|Q~#jKKBL(J3F&`_ROBM=gj^O$+_?S z-S>H(FyG=J?3|YScTuWwZt`_|-VauMw{ZeL*H>Sx;!CLMjZW(t5gW67$u@7S5>)Ig}a)*9u#}hV*23@ zxlTMpZd`1AUg~LAC zpwDxOYEA5RE4GA=l(a|YjtcB(f*dxQK;tvwupwVGJqsuWuyXA9D9Ru&nQJtuA@Zm6 zJA4Mw!=y-2svuWW*GI%Gg9txO?)`&AfD%1JhRmy_L~sFmyugqqss=zkrlURp)wkI2 z60yi)BKqAn>IF$4mcjeSnwN@;_%)h#!2!HxefUkb?V}CsG!r!d2#k^iN*G1g$dyZ) zr^MPEjNH(lNEo0jcq0CAcATFdjqgu3Uj_iIuu`@Iisj#77x0)3#)->hWCh4S38LER zr~w)(o*j%&fQ{p^ufi~Q?HZx?J@b?ZOH7RRZ_ipb*DDd8#Xb=mLsiZ9&wgFX!3!`* z=oS7`<#F~;5kyiszdI+u9sG#dB({45xSKru50{(EMpn>}cR8N+~H5*TC427!CvDp@zBxBA=6Lh1>k+i2OA;%+0tvC*FGeGQc#G_>;BmbR?l0 z4$T>i#6BFdkAY#~u}^`9OGgCSHP36%`20vmyFyUqqx{<>EGD@F(T3$>4 zY4KNoDT47ITuUU~>hsUsu@Nk|O7y$YD4pU%)o;V-~?g4>qqE zQEh{R_q^@tGZA`t?|k)>EvzepH`XD@R39}*KH^xOK1wA2V0z}1DX?h#)&Ot|c{xkD zbt<=Ik%{VH6PHH?CRvC-B#bbn5Za;!?1mvzjlZGdiRGt z7SggGP>k&WkdN>gb4(Okq{kTLJvS<_4fuW`)PB5U%WMB^lMFDq&LW63S5VFEou4=GmynFeg%^O=_cn4uB=Kl z553QI5tlISS)A#33nnYVd+M*?>?RX;vHa|d!d=zNfH ziSsrK88Qs@qvu|NQ?I|~-}MS%#3l7H`M-gYL-vt`^UMiS?IWQ6UG(irKkxX z55T(w)YyYzBAwkgAMhU3!-h#Cc+HXsq(|GoFaI0G6!YHBvVP0kSb%{GTAsr^3K)!6 z5%^9XuTPCGRE_yQn&jExu*pD;f?1_e{5zW1wb6pAS%;?&#+nmb#sRKi0J#JTj5CXk z=w@M^9mb~D^#CN&>~u5hY~(hS>N)h3a}?D<-dFj+`yH%?VomDVFSz9d(I7*ZcJJk# zZq5-={Hh>l6wS~?AJfDBVqK1obOu5*uGo%TDSKr3`*H^Jiz#sbO#mi)hgazzZ#&?+ zl#Lx{A+rarNyi^vm_~&JYO`D9ai?6mwNGMdFey<=hD0GL24{tp+qmZQf8ww1E;ehgiYQ@CbR z2Jf49J~IA9h%3=wiXD)@b$N5h)TE3Z7<1a8lcMrW4eLDsFvzhzcy=VLv zJHs~6{X++Em_|*NAu{?gM?}93M92?dOKp9JH2qnP163Q?2)f%EG8=!eUE}+R(k;(- z6j0NqN$HxiuK~P+g|+|SrC@4*Jr12(fn_kEE~AKXAmGBMEUYJefrQ+SgKZu~|6`*= zouDG0G1`X(=IB0Go;Zw+^3RRF_i1$YF>f{;om>9opt!rVcvw)^(Su))H|%lRI`l)0 z89FtIA6j<#6k8AIqum4raH=&i_s#aRA;V1UI3A|JGW+`aq6Si6XO#cT1BX{^ME#pU zpUoQCU0zSp__*(r1_1fk^J}5{(c{jX+m#y zCeJX&6slX~IaK@Q-g1m1q{*h{ra07*gcxTjzb2BanF4Q)9{q?vcK2o$UB&rL9DjqR zuOp@BPZ}&P98yM1R+b_7y!yWNJ4U$8A(px3NW6%Pa6UbP=Fs3~jAUyz#GC6@Jc1dZ zjfcn}%xNyBwD*5apnpnTYVa6J$8!ia^F=_FTmF1y$W0Co+trJGkN<6@lsM|nMHd#W=Q?KxEkhR#u$sw4sI&7R-b_0MU4*DQUzvfz0-aEXD&L%Bv@{wu&$Ky6LcK1?IW%nM|MQ03!OORev_6eWV{QE)*`exfvg2Y(0 zDsu^WZ(R~}$I`aa%`_4!7D`itRhrkZG7A)&XiYWgrLA+a8*d*iNReWUl%?-2^DK8R zC(O3l$)-cJ336E>Sm0NY^#wCVv~?Cjkv2G0kpBAbzURL_v}s)qjFW6tP%7UTkaCmp ziLR$luA|6Nv^Hq>s0gyLBBrcz?JgWZ)F`g8bYOY`l9iw?F+IW-rqwKj32hIh3V zqzHtHTA0u>ZT`ubgAZaF(uP}Y_0&zeW0W6`{*7#qbFtC$^gI&U@ur2j#{cN?pqncE zZVW?F_Uu}r-i`E#r=kYO;BEY)$rC zb(rW8)!GIjpF>)WBL2&N79?_twwt|mqv&#ZVK3d=L{DUoIPW>Vlf0^uu=~8Z+!u@* z_N43y>kOpI-g@DXr(%A`F>%>`q1t^EKO_2*Sv%yR@RR3Fzn3r1)_#rRm6jV)Awz-4 z!1O~g4KrI~;le)nlEw>1cPyK4C$Jpt?BCo4|8zj*S?c;LI|r|oT>fv(++Qb#oW?CixIcdVJX}1=FMIRh9TMX? ze}gV|CAC+I!?aa8B#b=Am?6Jlb&I?N3(`WYWY2qNEAPudhU&U-q~8a?%>pb{p0K86 zlUojnTp(xft8R*(SN&j?R)W=ZMi=cxGU_Qbuemzfn8+*1caMK<~Dmhs1hE_GTf zH|5K^WCw{f8rq~mDEY)4$JP(4*s#0P;^rZ6lVz=or?PL!ZV%dt@Bn=^bZ5zPxt8cb z8Y+EsM&+cnbinJ3;#7|w(ffGlzCT^q2q&Hciui7AS}m5Cni*b7q?kxvI?wmEPSpJm zT+>hse)I_*nhe0TM@tNqrh23~^akTyt-{EitdOOoPZlp$`zHzcZV4;)VwXD|kNp}i z_j5h|wN(QA(NwW6xAM>}UdaUxX`r1kA-K0hL2P%>)<8rX zDr#E`XADx!<=Y;*5Q9XI?;X&F1Y?{TBeqjG8|hqpwh^NQpH zL}R?(g*y*^8tWUY>h9DY_6c;7{%mMxUei_Nu_6puw^*t-1oGR_3WTb1VHWJb^I~%0 z;`>{%UDuKYwx8?DexO5DqPozt8$Gh)xmBve6IGF=nZkb@gDnOF3*5OOs`T}UW1A1( zDQD_7$lJWEV_mF|8@7^}Z*~jcs^JW5^+t@PU~^4!^0Ms>>B{4%j^<}{ZuD( zX{%TJMaHNPnoqhS@2Zcdu*FlacMsoWsLUq&wE9bK_G0jd>}-Xk+=~vR!&a9Fi>=aiM?xe#@Liuq&gwP%wbF#)SrJ40 zkP1f-dq%TftdmL6&X+^tjmERI~PP=+nI8S`-W5Bnld>gJnOKXkDgX*e z;pTz8aC6x9@#yK(H0$Nc#UM;L8Cw71aeR}Qo(#e!a3#eA z??9mzT0u|f4Os@_u!{Z}!7s^Hde?Z!CaQmni&x^t7HktAHcu}qDm7{)lZ1ql*x7Bp zLZ1d|sanbn=yO|t;x=#tQYmajj(p3XJhAo)i-1*)D*s6Jq4sR-y)b0ng`Rf6VWi+k zVEw_GHWB62A5zx>>NGs2Bp-f|QcEIdpL3SmvmN1OOzJ=8MC=v^0Jv^g7t-4!SZcSW zKx2!P^Jmxdvz=YaxLyAbd1T`f_P58x-H%&l^;}iND_bFPA}kmfwo<+zM{CL?4TR=zUt@A+eZ>> zLM_gk@Q41AZX0k)=+bhdab^_u2fKuiWE@CPYz^g1itkYuynQuJ@s(^KcK4cAxmJI+ zS+ja_Vh#DX%-j0>a}|fMFB#9i^0CD8U#P2Bl#J_4TKjNV1;%CN1xBfIVDodGo1*O% zvDR7NS-UEcWQhDCM!rHHdcthdoeA~8KW4TL)WYlkBG8dby z0+lbNq(l`ZI;eHMo?6L-3Ni9b6yOP+jN5WhLJ}oS93E?sx!EvqqzgT6r zam8i|#Zh?epvpWRYhF=f=2kFMwY0mTM|exHiS8{J#M-kmdU5F^9&_Wu*})s}x!HuR z?0|sMSi&9IOb90e1sPheO(vD94H+5H z#<{UuOKOyWHVFWvdJ(9P=xWF7g~~jJIv_$#7b_Y_j*2Bsv{_0_z-7(q)^s+^uXE_2 z&%^zz1uhEZ1e$Qf7A25&#Y9c)%!fmzRR_h}O7OVM>B_-M0!74u_h1W;%V?Pfb=^{7dMtta{LEjk?ian)+iTmYv?8M1i%;=y!cyF@2+@;swQ=lLCvddEg@1P z2GtKNt7m6sa|MG6yr|U&ulDx2USG6sM!cknqu=YE&-p_QrNg-XiFPzfmjBw3ioO*5 zcwlRBG0>~Vb+up2(OE1~#b@d;Od+Ty!I08WS`MD;(%7>3ys=rGl8QAR!~V;{SD z-?*|%?}Y!{n+LBaijD0KUdtsAa-M13&Svq7YTlGGqzwGkf3pbRyM5Q04j~$10r75) ze{g@s^Q$-$H$z1s9Mo0&yk}p*YjK#bCN;tn+)TP^`FH%GVUABl!9U6R*u^YWyq+Sy zgbVTN`i~qF^?o<(f;*6}VJRF-RB^y*IT*suiBrP^a{dErhk|v(io6C}S3FQt|DctAm$qmkI%cCJa|d_?g#g*OR%CvW%ym^7* zgwOU@rMUrI{|db9W1kcPA`zJ5L#70>pi!zYy9(OoHAwViX=(h>N(;rg%Q*Otk9RXr*0KGcuU)oppUlhT|huMN98h9m{v=F?zuZi+qOLDU%PU4t6M_2 zprD}fEYY2`Xc1G9cZLr2^|p}nKe8tSwl3b90NziJfXNVe?y6GI0Vi^*W~E$yL_Z_kR)MrLvLaoFgPk)d>yP07}xNS}1rh#E@c& zfEd3=gk^P2ZNQ@ur7oRD;#DS`M!4)BM4?AvpnJ~MLD)`-Y8uYk!xt8z3bW0J_-I01 z4XLrjlJEmXv7HbZ07!24)Ir*N@5ol<@s_o?RxB9M&7>3coZ762nCbtmHp&IeCprseUyfWg(UNYW*F%n$e+A2?UM8P zTfn{WC#Z`aIgSy~Gpf>uZWN>%!l&~6YPfmqbHqKhex|F`P=;wO@v40X+-emfMCWNW z&2lHhd5vK%n$$?PMxHkG?25z@uBN30<`)6=CFX?F;c;C zBCBSh=qz_**j(b5{wAvnFDW@zhFRvC`?KpPUcBOa)!?BZ{0%@o!lVpHnNxg zq2iM=3n}W^PlUGB+M|$iIN`kK^}m`W0VQmo+*eSQx>$Z>$u(MlA3un zVVi!UILYVTG)ujR2;Z9`8`~I++*s;zHc-pDd;0wSbMi%}=&+MSFb$+078f|I>7zTX z9U1{s7@_(k@kr7{t~HGD#$QcWg(hvc{7rtGf}km?5@c{tH$!^FB^^dIJeCMQrwQ}v zq!4k%oKWJk7yRwuEb{oxV1Lzd=Bb5Exs^HF`B1temqR8IW z6BqUkb(~;~%l&j4g)KY$k-` z3t_h2DR~gV%ywF|zc>=e)#JETZ$`#HwBW$$x|HI9yf zfxt7iUb@z;n}g{D%6AeUNs}7XlCyBFHJt#n#qF^%)QZW4SvNs_gbo@E^6XWiq>?QY zdb^{We(FT(rk{d_TNnR{pso>>PBW^=$68|v0wq2r&Jw!AnsCyf7eg&;{( zo@7CYM?cLt$B}*Sj>rdWh{zi{Ori)%RPDKVB@&>+E_+DyN-#u&jG~xu*=|&#IL!Rl z?CrEuM+Xv*Py6m~tE{tx6H6MeHs%CrsYRHzM6Rxf>F;7=BS=V^8v}cooB_L3k2&#IBv2gmc!6thIiB1Vkx-}X2(SKC!1etPu6&?jheAR9x6(l8a zYv0wGcH);GZO`d`6#cr-lSG7hM(Oj7$C}Z-E}pxRAb#}exn^5SsaSEjw7ge-xXc?; zJO;V%-JX66HTE1r{He7|HK{VY8lJlGK3V0|-6i|hph=45t!znKs251pG=gz5VT8^F zJ~`bsngxZab!~|6Ud7hT;84^SC7y*guXXhL$cB>1`-4 zTvxM8kZm(>B_F{N`+g%e`)XQTDPjr5K2sr|5g zpYU)acg$F8MV1QQEia;vf;V=bthnBv2y1AEg@B( zJLYOZVb?{}j}4UxT6QbsVI8;TTit(mNIy)EU6x;3RovUb@vq^w%4`Ha-Eyihj+AWp zS#5JxZ{%N(GD5h~a&ni4`0jw1cJx(`2Y(W89W$%q3|g-5xe(G9H$NWgv|TLL=zK-f z#&_%C{>fRxlHij+c8oR_$D7@6pZfRkP1~<~A1A(?Q#Y$&^%OwUe}36oT^OheZaz(8 zXZ16+X7rri-|;4ND%y|pxtXu`dbu6vZJg#qD&7Ed56wpl3+Ox|yBEq|z0oml{HLJ@ zWA?Etp~#{syUt5f&W8_Ws8AA|uiHYe$3)A#oOz|4Ts?&}+GJmJA;^sc7a8@nTqskg zTi@Y&s#D8lE*>^EI+i?XZ=`g|(>GbE%*XeEr@iePh)6VNe#?DW_6o6^aOmDW63%r>n;alSN5QQi8aV~o0X0A zVvAkBY+xoFq&E++T+Ek02?^@#km3&BRkCut^IXmDtojh=z@r`QVJ(X{2LRoP;fWE8OK~!< zevd*f=(m&WX;otJ_A!reyE<5N!z&)IOdsfd7X?0MWDoD_ztK)}Qkvqsd+?2}&R)Y< ziiZ$==5=?lUSsFc@xlxzt}4V8H&$q|v$6H+b*QMYgI2#t>`T*i)+e3mypK1wrnOCW z4QERnWnvEpUrD?h{p7COh{eaYEDY7;uauX~FGld#@r5fMLW#ea2@mX5J7Ql|46=LT z4=({YXSL(t6rbcH%^rmhs{eEj@82bR*RUjU;RW#(?Q@u7@vhqrU&)NKLm-j3C zJgP;?mYz=9?(EX_XXbyu%Xav`w7sJ1WxPlazH7l@klZj%Dkm2jT<-Cesx*e1s7&Q8 zU8}{!4bLe5!^0J~0J3;50ECcjEgr_m&@_95HMgk-z8OVLV_DMM49e$u8mf))Qid^P zXLOBQ;M!2wJLK()Lbg~bKe$ab-;o2=>^d4WqfVRpz%&lknOxn;SA9DE!lHtwFnxAb zwv%Ba+X+Ge>kM==k#IcU@VqZkP_Y;6Z_Y;uf7BIJ>@noNCs`J|<@U&?Z@b+t>*pO& zx3Bk*XW+&M{X4G0@#^(fTCIcV^ZEo%YG=LZ3`2nsH>LksZ?)*yR4^_}Z8%UUR_#lz z#LkbYi>r(xX|EfWnMnaCXFXaJ=j?@~!HI@7O|{DMzf^t0RcvYM$ z5J~;K@sBYqEpFxH_d&Q}OILmJG+zQN4(<{#QIxLQBm6I5;N|XE{z>9$)i*U(qVK|$ zXtDM>u_vmw)bTwnCG{B77Dx0vNKe^NQq9^BQYs*z{Ft*cIM;ruc}-NrY!9~tpQD81 zIe*5xKG=+>N`-Ld$=MKy)F=@aUeR>%D!Dx{qs zJkQ9x{gZ?lbX-BV@D@&hN1F3p@l-r@`P06KtJ|}wx!3J2esrPE#H}1{rpX{vM}-rs z>t&<(#YO*4AK9naf*B_Z^tRyn6lq# zc=P7Yy$<(jY6}1yoxFEl_Mf+x`P$UQ_iMpE*IwAkeu1bEsufH}E*v<0ap-7`>iq{V z=cp%tp0OZBM;-qf!zY*v05aA*7j;^%o?=?QeBY4=tL^2z?qM|wv(q-#Iu0`nOaMHo3 zB_dp}lPP-;l=B1z;c7K>8^tY_2v4`4$%(<(d1>xyHq6) z8eL>ILw8a22zO_tu9#;^p$nr#+_)*cS*FlJ?f^0p4{;Te6OH-x{C?`0oPG3+*y3M# z#>1-+n_?Dv)=kr@cWS@6k9uxix^_T?60(VOMOF}eE-oJ2$M=#s;n0#0M z@Sv4+^?B-?-7aKuK%bLv%Yss*s#*mpH-z(z1!7|G+&I}{kMB9D;`C0-F;Wo7$0^BI zdyH!s=YH9ZSj-VoY#B!vt`{^}Lfp@j(c`()sTUL#Hv$?7Y}NgX=~)ptx%b1%U-xcX z9gHdb@bitin$ZjQTWgm-VhQT-3q!$}*x1rk)!w(_ZO2a*CDUi5fTS)viz-yhgB@9X z3U1`h$)Y6s6jC>A)8a+#BXrHQ_;Uwi<3Y=OeDxt^Lk*)>uPj%U6f+QJTS2CN$1sW? z#gUGh-D>QTUk&S!IZ>bO!F7yi(6=X49gYbX(B0}1-u-DcR?(j+RD7no9&5JfBGN+3 zPwTCh!b`$w9QCUW!+&Q`X5#T!YvUrtCGYz>vUaAnK?5VNq@)W~Y_Ok3_!OMXW#U~f z=-+kB6!e&ya)1jF5nq2#30v6D0eB-PbLk3|ultx5sZ;e9NpBsGZ`s!-8@(JW*mDDL zegbEHs>E)^Z1o5s0kurOa+wc=i{ z1yXr*E3DS?j!(<6zDCNh<&Le|1l%5x{Wo&FjfjJV1-R{8{Tok*r{G*t>4+j6vW$+b zp~Lg7%&gIga&LCd;MUILX5M#8&1PsZdo!l4sgU9lE0KEQ2kj7e_2CTjZp`ayJuf?z60xD?A)N3EK(Rf<7KPpJ$l+`}1 zdc9-yT5k2aVOjbB-XN-8AEE$wDCm_18%YKqY^pbQc&-aDbssC3-m5q5pE3ExftWoE zHl3a^o31y1SWmoLZ~k`1b6CMltie)7@sMN)US`%+q``uB*4Vbe+Sg9kqrv8wqOF&r zi!~n*5@MUsV3#>-BLlS!qS)0aIy5!doNBO*nYGOiAqe%^J1ZW3+Yo2U=RDuw{6o>@ zSA)xLh>H-#c@5(11trQTxydLIfjOc`qss?H4_hTq-7IZlqo8jmC> zd8ajc9iw>1D7h4d`ZR@l?q>VmYxH=kC2X zALmyNz$m-ShPu5D^*g8>EJM*WRSvOj3UQd%ME8U^hlQGlh4J@<9aEP4S7jZVFdyzk z2`^Iy{K8x+n!;<8qm08sYQlp1o1*_fbY3@|{GzM_Fi$QkpZcYI>R{GM-td$B&8OF_ zPwql=K$X+ZeJ5``a6{}oqzbwqRZD;e^o)Wvco+Wr5))&6T+Ibw<;9>#4eOC>CF+sZkr z)46A!TM6W;eptXtKjI#c^EJ~F0}8a>M$8cTzqHKw#Gv_@8LHiP6ypEAww$364h|IK zr-90b!yie%XSujqrI3c#2Sw+y^P31vdBC#QY)N2QWK)_EFCGPSR;yK%oa*1MvM_rQ zsd6GHwe{td)C==e37}$PfnI-LT?u#(URw;~Y)!nXquK6TYAE%JT57Ba`%harVR`9) zZ!4EYE&t!z%6H#JeY@E?f9>0?$G?`p-Dbk}uP}PWPOP*IDqml@Gpzq@rG3Dnz8|yKw(n3=clCesQg^ZrBW>cVzs3-d3)h zZ)n%g+S*w!{&*U@SZqNB)?Gfvz2n?GZp?Xor(Y&!=*n9Z&2;L1=;ltnlR_NX(oSIv z+?byJs%MUtb|Z}sD#R78E@Gq=dGV&QQbY}lV-nnCWb}-sk-+|mXGpakLrl@X07HwPeY2Y`MJH=d)74HEO~v$%1)x% zPtHc?Um;)d#hGBLj`Rr;H-d%3z}I6IJ2SVRo&2)p?eL=ulh9yA(IE0G3y`+<&wIm?UbHHUH-{D%8?72^K;qr3e5uw?lZuE!>sR_m}r5qTplqRgYnFn_&z(W%+^U0zj0LhqH8PX$IZm3y_hk;2l3 zW^)5;4lh8I+cRB&So`HuA%jqa?}>!#Atfu6NY+r^RUY6a_hY=au7)C$$BN}cD@V?X z)IDAd8J;SRVMUk8ccAnJ1jhs9d+Blq5JqkvD*Ss(o5+!2mMJ`f={W8hTA||nZ`!s{ zJ+39Dbs$+@$WDH%yOJ<6B zBQiDl9C;%zYD2W$sbDQE@-x4kC~r|H!rF|t3vRw7cC^K*s_cVi1lF z?gL)ezRxh7k+`IY5PUj%w@0~`v43oNh+ZOa9L$y}xNp=*#H0m(4di@+OsXZYAn1)=HoG65nxmtu@5?pJ&RkXYpCX0(0Gbc z7w_Sw2fvnQTho4}cXrj`w7k1%qcA2sRoFz=jf zv{v%V$PWNmdw8e#isdeN1G#o0mw{EgJ7f9&Tp;Os9O=+8Jg+V;m?L}3KbLOYmY4Bq z1I_EIU2uQ+cm}!q)v>ZXAGz`KL5n?=PO}h8#chQ7iLJbN7{1}acu`tQmZY9ou9{`c z18bufHe-a>VVuC1v3}iSd}_-HmTrDUpZ3T}iXzm913%E@%X?dF**2%z&ReQ9Ts+ugPyS0KCB!bS9cX4N<`YG^CU0^mzj@Z|HRxYE3BGn?Mz6t^A0P??- zGP%06_*;A3PNwg+;A}*(FCj_8987~Sz?eH!r3I2yvfl_Rs~c~0k638>Q!^5N#b zYw91fIC0Vu4UvSW)ZKsL8${hQmY3Ru6}$?5?j4TMKjpNOxfeuO?mlR|Li= z^iEFPBxrp|e0WV;OsG?{*=%y`)Y$QCvGcMBErK#lZKJDRGGS1Acj{fnN~DY@hiqzXaou3l6ixTl3iA;0By6sjbJH^XTW z0pN1MJ_Z%ic3P;-_D7=Y$xN@VBP6p>BzQ@1!Upz~*?nIxA@}P&|`6X&)}9u z4Q_BVl?=sdi6fO_gbgBko>qoBa~?9qf63lma7&dpoAfxG$~#q<4F}3em=$s+w3dLf zG|=^_LI`5fVuHnol;bsXl-`x`1yTd;UC_2xbqz?~3<0@5Y^y;fx)#;{9^`P!bV?#q z`7-!^_JeAPl>i-?kc*zU=mzTuGJc0)^`mzJFu|?I`2tgVRRsruQzOb?Tz&RbD_BE| zd0PfnX!3_H9X7le2XJLPu2|K0jN$rKM2WAYgWzHp7s}xJ#5}bPwk%0sVbkJ1|jL`GNjCuY`#9eR343Ppb${uK9_jw34|^-hCNCBR?V1k!KnB9&+3Bac^<{QH}<+-|D2(_UX^1<^7x8H@dA>{IfGPn=qw!I~_@{)o9EzT=U z^zBZNhSv#tAxOx=6FcewZmE}?-&hXDaD?xSy#UXV%mi~hj&AcB1|T`?OUSlX$yMGm z08`;`gO?{;a!j6GiUo~8;nucX-4^q;a)5<)WkLxcRP(RWn|^`0QTYnub+KAhC(ES$ z?j-|BUju%@HwxfNp7U+)?Xtv4>29(OD5~2Z8iby@E76{!j=Yq42xa#!84Kh zhzwE$0#!h5<{dlwE}$bi4ns|<)Wv~cBpS!yF%c&OvHYmMM4vIX(p7td_Hyv)1Hp57 z&bp}9ab`y5+GYJmn2Y-0Z^j*P6+J)?3Nv!~h6kHQGofP<$T3XgLtZ~pfHkUiiiEmf zb*au;Cn^WSEN#xE2u5)55OWY(r)+R=pP*>CU+aQ?xjj~ZV884O#+!h5_$Xq5zFOoX z@nGv;wk=f=yv+bX7-|?4Siz|->DlivZ><(MpU^|uP9%+MqVA1`7B+Hg)0t=Ag=YM7cw3CSaFne*#H?I@jooH?SI3q7 zr~pei$h74KjPGA#sdlts`^VQNcfPoHw z;ILr`z9D5?dtbllEqHjQhc={$c&Gc6lpuiuB5Vxi;?D{5Fz&v_RH&x)L4Y3*3!qwD z&dD{`pwNF%@aD=jfv{qzpt~cJ?=Ahok_R1<;kDA5@u3Z^7cD4L4MGqNoL};6>*pw~ zCn!q>`qGVG#2|<`Dy-$KSgql+cW3GgRfouKTEk#kxa0JM;gL^Z!*H;J8u)oM>Fr|> z)bmDZ33TBw%y&l%H^Z+2F}s?5P6gL?$w83jm~*z5zIq}9VL&}waE6AtsSdI^J7DJn z@OMk}4mA2@_LZ~CC;}eB|L`bEZpcUntfr$L(p2xUCi)XGEsL)qZCTW_Lugn0y+q8m zdpK?n`VR^Hhl-LQs!Tus+ zpVsSsC*(b{aZR490!XMofJH@%=lLV%7W0bE7cje{Ig^#h64K)d>tg_uUqfE;3(1JT z;x@+e)q`ZrfkOB1@s9^^A?P;Lp*P){-h~eqE|#+RZTpXG<8{O)6OD!*YW4LCzyUkA zlS?EV-VJ#L6gV?P9HoTB2peEsu{!=B3*>*W6!4mi8e+!jt>Rxc5Zw z^MMPtW5Zy9$ynP%!G+7<0ilQJK!>v(pY*T0oalRO)^-EoVRVipDBn_aBDb$*bl}z9 ztN0RuBS_$~Eu@iwTHkLEVt~PkFG$M|dnoN1Qx1j~j}5Z?QJc1}0VJotE_bc7$P50r z1Af{-*kuv>UGzj>NI;gZJ#Qd{CnublbL1`~e42Y&Z|K$PnkHt>Krr%ULi|m@rf|lO8O9=bU7zV~R2sNqi?uP5 z&O&8OY-`7-6<093*>zg0EaoX#cBBcrf4EqtKWB<0ax+e2`ig>c0#p#8YY)EW+PwxD z$gz1rj3ABP!atV0`xzwPL_K9-+nw(Vv<;ZkucK?1_uc(Sadke=Y?qvZX>|m7s;E+| z1phL$#J0Zgj!4gGe(oBRZQCOUKjYfG{8*^(TcE9(&e{|%YwBOu4yFqh^?rUKabsBf6{z*3#oaO7uELdO(T~PSl-cAp!wBRd=|g7!`+s# zdIe+ygotnD<>jxjwfS#rVbpqnO9rNH`StUT|01`#=6`f!|NnZq)qmE)cQ1g#*rd~c zH-EDBT;_b+^K|EZ;Lq6&@5^?T&VlD#dE*@e9KIc>AvRkiDodhS(kxN@s6 zbLX=*g(8O}gJy?j_A>Ani=T1jR*b7>{bJZ*|M5%ppdL-W&;_D}+Y06o*+2WF644X- zVrSLY1{KSr*Pg33-&lL0et%_c2yerO*U_Xdx{OGEiFJ`~+{$t`Uiy?3OW|xB8jzXT zsn-Rz&k>y=(0t8rtk58!^bA7UeqEsEOPWRLON)n^S_0~gQva~V`Nx~r z%~EbZF*szb^J7!VNxVB-=*`wd()_sAj}()m`?Fsz6dT;JQ>z~Cc^H2=7W2q#4ZSg# ziG<#~YjG|8>Djm^r*Hk9;f)*xO)ToqzZG&}e$I|g+J?^&85-3uke~Xa--X^ zeZ(G=213MY=gSOb=ilzego`;-_$rA0)+2Q^iU{()eWkHQpz{h>U{eeQ91jPt~_~gP<90uNH$);d}}3H><-$Qv!}ZEd|>Ao4%cE5 z2YY1xu&H=-9mt^)dgUcoa|up$uJSFt%EqhzleMsFwJ^eICiquvzy8D3^Q6LhsRhD+ zkz1u+7W!{;D|7=6Za?^eRY%KpYLMUae9(58AiY4E4Sii}%2i}=^MuqN>S_}H))y|) zB*azi>|eN5t(DTRPuacBc;WT%f`=)qYk&B*v=0D?@NLi9EZRA?t7qbpbf`8=Esz_f zta$SJ#fWiC`{n2RD@U_mBI@lAzs{|%%6boVUDG@qeF2hvs00QqPmRP>{bwy)klNq+ zGU4I+6?S2>X`psd=*#t*t>I?#-_JR((hfp`c1;V+_#8$vB{%4Zkt0e%{KB(p5YgM- zd8!gGN{;OCNqk;Zwkf#KeaSkq9w*RBaR1+kd+)cV{%u`*k^l*TBs27G=%H!oUFjVJ zL<9v43WyY?sWg>PLk~r|O7CdsMbv;GMZkcdfT*B=fDHr%RLmQ{YwdN`+Us2B-RE4V z{0sA!dyesWo_jc^C8cjy;6B-NI*d%_rYEo-L?+|v!Dl6-hgg|C&e)tS8@c&oyZSMa z)h^M}adx}425Z3SfHXoLaSyDuJAU*sGyim*x^ceKSe?`2qsNUA-|DZqh&Y>N^)@-h z-}JWmUlK|H=)`koDFuQ2*%-o&Vs5dA6LJpaT;V5mC&E!yh*wGF!L!z8Yz(e{q-asL&B$ z_!wDG!el-9|0YHBeA@kgNs9Q_E7MGi-tEfk8(#enq=^4TZWIPU-!Zu1^Da%3!40pMl#X|Qq==rE-g2B@$~6Cr8{<-E zvl*wIml>~2|H2LZW+s>rAvb(p84`cSL}Nks{7O;xo`ekW?NA_^s9l6}{GilgVo zY8x)BJgtT_(&yG2^6l$n8ar)s*Q&a{YYT`!U}bkX5=w&9QHJCm+cuAixBLGee`UJz zag*`N^zYoj4=QYps=n~w8q<8=5R&`)UL$XBf1%U&-4Iv`xHP9-*GgPIau zns}AgDS3_ZFWmTNDdOL_VJP^OOj6Ag;$m<^JIh!-szOr6V%YNJ*R1@}3TchuVcUqW z*(Ds6|G|wK>q@y3!whbGy+KK>R5-_wBF=ry?HsKF<;i2K(&l7lLa={kVq__btZ%#tp_R)9~N8;R%2B zR#w=H7NR+I@9*6Bv2}ZXL`EMrQh5?o)u;&TGYBwhiyxOR2CxvI;=SGMNAW|;B|avx zF=J^Ft!GAeYs}3oC$kC}+_0&&Ji*{b_jV;dt=9US<+H-M?JCW&TH7ll&u%fep^vO% zaAT@W@LP?!O`SvD$W)c~w^}=?8F)D&-!U|nw|FDYpmroLEO7eJ)~`C}y?q- zHuWcMnA_V79}5d!syB_6deJ@i?M~QOz38XX7Y`uStiVG3=`M#vN%#`mB`nMsR-bd0 zaeXSa(VXtD{Aeh~>!?UugSW;Lm+AaR!f57C=Zx6r#!*tiKyrV^H$=E5Uqh%Jqjsi&iSqMrA=Fz#dUt|vOr*Z~jl%-}I&o0`nH>MMi6ishCl29% zn>Y^tcPEazZ~uAXc=G-K(Zum#rbWh)l~DXB;%#dRy~EFkL5}#uN~6<3r_{dx7j?S- zjU0W6>1qO(;R}Bg>x$-fzF~-U&oU+s-%6Vl{O7;Kx?Jzl-ZR9y$(rABx6*)UXhnv? z`FA3J$l>Xtda!FU6WDlL;iHnEv3z4_ZAgMKafH7~agS*~oA3GK`O{Rds;;8H#JYun z<9~^Dx!&Jw{v+1?vbc86_m5cjc3cD-L#)ePS9AU!V%@Tw3*Vns{!Ogg!$z&Rkx=Mz z1PGN|uPxjouGi)NCDx6m53e_*G0eKPtt%t>46$z6hr20%#JW`8Nd7yIrG@hU66-e8 z*1hT_Dj*yFtuwFVJttlRam%H-(1jofb+{_pE_x1aq> zK0z&g-v86L7xftE<gIc52Vx?7C#q_xVtm^bYCLd!#yf7NG0fy!o46cNJOG z0JJKnwWWSKuX*ak>Y3?<+lLRktBwJ*>g8jCvuzqA_O`LM;&L;X2t7w)e5I003#Agd zv1zU{Q8J^QIh#|?E|P!`V&RXBg8~a3k7{hRD`}AoV&hIO53j`~&+q z$8?AwMQ7EHmFqc`S!(sIsFNTe;p9ZJgB>lVGTKC9m6~LlV;CcnY^r)o%#ahcBw$*Y zpl0e!J{KKmi0jVb2slyBms=yMIqHE57%IEGyODT!sWgecYS1svX-|@eyhUermPKk# zBw730gXN5T!i9d3&lK?iCqj~}&t?iia+s50R21LFB0T!-ID9u^_~4SP7px_`SCsMv zx%<$CR6c%?N8)NsN7i{#kKAF}>8a-7^MocTiz z0qlX!wXAuCG1&y}zsNCAEUx{+q9(E-@vn*Fy~WdrxxY^wv-C3f*KB2*A2MEbQh!Yx z^^WnHbIj50VpB>VB5GU-QWME1x6Am)aK|@F?fX(=i$xd{hgfb`=3nGk6OAwZ8#(kU zMN>=DLp2XpT`FY;I%ALBpDF(bIbN%Xd{JFLHMMA0`G*{7b&l1R({(4m)j2aJj*gM( zve!o0ZpeD)pN4i+%DYOeNc~A!=y)4qnR_`pUPhD1-hnU?y)1&z{5o>tV@=E5!%c%n znXG2|+7rSO(nfFTi?I`<4YAw!K?2u3P9Ffv4N&{_S2NQ?qHi=yTMQogW$y%RKwE2U z8ciuRbI-fKx2+^Gy(YZO(mQ5e-q6-i zgp&Lp+V;P4aQ_RNt%l=Fe`(vD^07n%2$N~O`&f6|hZmHyFXFNH+CRPQEYdb#(CYZ| zCcSA}UNeetu^R& z_4V=kWXR9+%wh?Q%@%(EiyJ_NNJLDPCE*{N&!i|n_mS{H>4rUrYJ6XPXRZ1hw?t0U zB6yO0;>{SFt%JF)!JvMpaF&hJd8t#D5YRmx;uX%=Y}Hi)OebSBtDv6Z#$NgU?E*K> zfqm!aQ{1~5o2}zSxIQWDf8%D$?pw@8qdS(=hOiO36P(#ie=>BnrBHE$mZndo~LR!kgJncf9Ud} zX$rahr}*PElh+kol#;WfF*TY?qW`XKFOINdIu}Uk4RYyDN2EHzc$w2Rm!r?7KcNg8 zjSVFWY-|p`j_5<1{-!mt13bBKcEE^BHFQEi%K^3ffUEvP-N*5kGs zs;bYdzl5sw^6?xdze9<=-d@T$bb(uAD$dVN{aXCK;Nfe)f|f}zM~H@7FhEf;TIKNF zODn&pzH72SWv_17BD2Ky`b4SG>5tL94ptWAFUcksE^i&o)UIQfO#jMEghq>hoCyuE z9)&8BC4ZPN4JMceiNmfM?`P4}f6H-qo2G9l-T&F?8jRDVwyYdo?aB_-1)NCV)Lkx9 zn8b2`XqQ$9Q2f(el~lzJ6zgMnl#KY44IhYWmce<5k4#qWQlW=qb)A3%=KZ~*v#K@M z*tN_ImZrgLb#EzcCZrMtm*zRXFBL*n2s^Xt5Z z#`)2i+9p^t`T`*_ZibMA+Jhm29OA6@yP&}Qlt3vuzQ}RJX zMbRxh=@&mFC8}~cO>=Wl;uqdLF%D|_8E-DaGD+9wIoN-ozCQ8DZzc3KN78}%Qx@ta zGTH#+<`$cjtu_#msq^_A_V*A>TU?ubU(1VkZ!%uZM7hU_BP|<4WSP9fYZ-(4NT&L{ z-H8X{Mf1N}M?7`~;PE`&OzF8NckYE?gfFdcW*CLV2tx$;!v?&NgUSio z$^4%q-bZp>&bODzz*k>-xA@v^pu96{Ggij2#(mr=_JK0P7z3t|uj}?<(3LJ4&n@4a z*ez|v&sG_0&SgcZ8a||bI_gXP@Te@mG(#~c&IlI#km-~LH?#gkl!^}d;M7;?8MUP3 zm#l!e`XNdCDqp-a zFGHI9|kb{ z-H`j&$5l>#|FxnzD<@=M#ZlgyBF-D`GLiosQ2^1GW-4I?AXu_iRMDD4h!hk*MAb+6 zuR9%+YO(q#s`q(q{iM}^V8b0#Hl_uaQ$K&aprYC-i8de42>qPV?NVsY8~f;8E_H{q z>sCwkE3)tQ6$wH`d%FdMHOV#d<-%ukd3e~}s|i2nxi;gJnfH$q^UDRG!+aMeY%Y=l z%l*EMGg7-_jJ?LsHvqbm3bWma5&E?NKib*HH@=ae^J@{z=rSw+8=aP*^HBPYhc=HC0YjL+yAEn>QuI8`jBaoT*Gr#a--PLH_i z^`WO|<GNpVS6z!vwBcEBapT9t!KLC}-;A}!Lem6D(*3 zcr|fOX6i(ozM)w8?Zb5bssq`24cX%5Ge!~2!7Eco-yuSGdj)%l5fiGbZ8r`L;}{Yc zhwFI3Vk1)t1LT{`D3&H~vUVv|p)xxZo;h3yj;^ z^y~ZMh#M6M*`u+ z#_R+;#2V#lp_mJ#H%=EPI30~@q_8&HAw~f9r;I<0QG4Zcrd^`gK+ z?GQWU>+ZXFuIH!TVo?ru2p4BKf#MPXSDL3JM%Eygu^g5Zm_rHkY;|1tD*obbg1s{$ z(hiY9#|9*tD@6?@&Jj@iAbO1wo4Jb59!h*p)+!E5f{e_)$!tY~n(ISd$=R+Rht#9b z9NmO3XmUo*fIF2*Fd|z{G~129j2sFZz>sSPk{xR?hwxBF!W6OziCVki(klTh7>W6C z7vt4EF7p&(^EgV`cFZv)S3*Ng(F^kYB!w+$t7zC?9h~ zy>Q0RrEa$H&R!u!pr~1^sC8DZ!KElvOtZ7AsAo;lX{zW%a4t}ySPUy}>eDjtEMwdi{9<)?cBH_uB6lrYI)!Iv&KACwkY6R&d8J(!qF#b597V7$;Vl7bQE zqEYq`-V&zwTD*MKwg+qZAF`no`oV)(s1O#4C}q+CO16@4`-^CfkelKFz&J0+fdEjx zAb@~K+m$#fk!igUo*yL;4~QV5R2mCWpq23Y;$BjVS({22n=WwxqNoiX6f9>SDN{OG zMhq@Q1~D7qK{Ei*DJ<8iD+kCd1604o=yG*I+~NYVwLN1#@F+B-!b+~v8i57^kG>{U zT6E(?R$a_bf^*00A%OQe$cX%4vxv6bfCX%YkWg_B+v~0JiqmN>);YNM3i1NqEg2Ci2yY zS{D1;`&C&6&^mIrf0ZSemHld!jw?;zMwrG{8fTlCp2tJHx$V=4&~N)(i$L{ht@VONsz(khzk`z>PREC zkGva<@!$h8y4x2_61YS0mHA~S{6-FZf&d_D;MuL}O+j2R0`Oo(?q}BSl-y$VKqK1y zcftcb<+R`QqJGWYO~^t;x8y*2uXDbX-be;rTe9Afbu99l;wRPm2;lSoD@u;2iCJqG~?+{c;P0XmOS4sIe(g}^NrH5Pexf0!0qS;jd}qgc5b=ZCivzh zhRc5LWNUvy+07U`=c2Zg_gaEVi#RZat2ZD}54KfeYg;>oIgb;igjyq8u>_%-3tQd9 z+<6Q;+@J8>?qaCGQ5gA->wRkG@_8jx^f$a>z}X!64;^7;?aA`8VZPwnMs`{e?sq6k zH-VB}gj)$L7*A*~NRc6S2f?y64$#CAnjXN&I=wF|!TQ+m>ERfImTRlhHA}$NR0sS4O}+LJNH2&V--Lr;X~F zqWip%HY8n%g}i_soQgRY&oMFiS=cQCD)d>0OapgScdHju=VwBLh;BVY8opZ62rxYDCt9Gx zQQoH>JvE>(H=T>@=ActO#YX#Zq5aS6`yV!SZ#Iw3F@@_jWg{pycCwK?cyGa|1VG#_G5%?+v4>Y2*D`x^0^Htc zIA{GNs24?FVB3%f*YQtef>_(5(Umz#RVumzfz-!TH~`-GbI5{>+6gp-*!M#`4l=HO z`~cP8*$r|&8!l!cU+;oc>)WZ>L&vGQvy`y9E%a|1dRJfLM<=Q@{w~BHoX|%j)6jG~ zl<(QGNQ{SJRK8-+!>J%v$ixk157dM*ZVzil)XjaFlQX$^*z_wLz^^+Rsy-+bmxEL{skbyA^ffdO0e#f!h++fS0fL3_Cg~Ie@k3*j~?8rXgsuG$<1oJ66tY|qs^jU-39?Pl; zl14+UNrJNg(j?gw-P;v-vj|l>UWY%=w}{*$E3~*mvjyOzXHPSi_P(cdF%#KJ87#~J z!}e!FJ)U^4fL8LgS=uW8i4?XE;JIjyeG2+|g8OZ|yul9_0FZsw^t96lKUSkF9d@}U zvfcp2X_fK>R{GGj+;M>F_F(Ej8^u-?54IuM-_sY+ZH;qZ`CZ{b=CHXpJqVa=a#rRYwg|#Ulz|7qs+fj7t%V3aERwX|Gu_j|2+6#{cG(x+iwY^Wnw*&VKFt2&IDTHE1o~ zRSnw?*s;_-@mP^}dP+sz-%t;k(h!2Q0`ef+wWVMp^nxz$~DdH+19)-QE?; z7Is+?{)c4U*L@5$P$*!MhI%T9`L2Ji=;eX367)B07qbEKec%AZ1OLVVx?MEIZwq>T z>$Ul%2FukuWc%^_g!<|S=NH2xT#HM<&qo@1!i-wPhHAk+CC4iY^^vTQXany2M0XJs z^3y+iDk;7oA4g#ncPL_R`DjF%4ghY#h@wsUqmW)vgnD=JwIHtF@~a*XV7*XAN8aGV z#u>3%UeQAkV#E6|g>b=#iu9*ZZ%_l}aVU>iuRH>K%OegE6krnn2}kE$D?zdRZcRT4 z%Db{0r@@<3XFn&PcdS62gP@7rSnLn=Fj6y{*k`HJpq{Q$sn7*~SMb^ukmW%hgefVi z3sOPDu1+5aOin!gtF>c{<$|)^n~es1gycRC^AcPCNIT`C~^>G~@(zkg z!2w~_M00v6FL&{&oeQt;U!}8(x`x>a0#gCS&do~Ja=D_nxrfcgI*Arq7ntp=OXTCT z+>iHvv|hjif=t^arNGzJ0N#5ycx!B5c|>(5ycxWGnttu~{{GH5jF0G^DJ>YRA3WTh z?H=}4F?~BpQmR%oCQdj6aJCiOWK}j4ivnBYg+G>vKW*w_Jt=+r+wZeYCVZ#kluQNo z9g=TGecgP2AaV*L`zY)8L__%qvxAisGZQ=jJFh8Jb0C0Ou%Bm|RWR5@99SU2fP+>I zw;y+Fv(;U5iXs(cZR6K`rNOl3p3#DjaS2nTG&3Cr0oZZUG zr<)j@uQqn!Z`$@1WPzneo#N=_X2DQ_2nTyoVm%P(Sz^OlR>hk|5@U@HeazF^e)%^W zf1dYq3ALQ`n$2@>6~$J%&fUJwdQwc;D*0UXxs%GFC9dmO53DD3;=Orxf-Hhw=S8(Z z^+tWXYObx%!WmeWy7X-5Ky9pP=)@tW{d_GxexyZ5j@)@Ok)_rCQII%3GhQN7zc;bI39DPr8e%%xP{&wQ6gNlli zk>`M57J|st9LW}Q;>zN=nn(oiDj(A@kB?x)<{Dzu?fF|0d(>p@xm8JWeqT-axP?ur z%`XtHi9Nx2oqQ+)W=w$a)R4LKmhfC5=AF!C=#b)a$!97SpM_Zf;6N*FoBr*RGq!w19gd{p17@#Wt^qgwe1i;Mt*d_P?)60 z`HVdUM7tmg60G2lG0^9ILfBSPE?A`;IrAvSOPh-=YGME4>LQI8hgiNby?GeW0THAk+kzYIfZzax!%*Q#OFh=WU0t9lSY)y z=M^TYS;CLgjlN2$On2E{?jA~)S(~=(sRAQGgvMv{RGku8@^ka@Yd{Ul#+^73(D1@- zMJ@QDI;f3CtC7bi*K_h>+7l0P_F^AtE3ABb#&_75h5AE$J}^U&WW2P^Axgi;N)Twm z7KZ?aZkl|@nQ6tW-#F7c9^YL$7)S8V+2=pq%WGj@#yeeeIO(m0wr`e1fh`YtX-GD0 zGTn~lEjMSS0m^e)d&)+l3a3?Q=&piZ9$v0FXX1DA(%W?ROv!vipY+k=4!NgkTdrz7 zX2F+h1=W*VB#o9yaIIiFSnV_=aX?J!it>}~t8HQMu*F-z{F|JJTYw<>ZNaYZ;%C_zUicz@=H=rX>a%U>R5O0CI0? z_XRjm_9V_EhtrJ?(dXN0aoafTSJTDt7^Q4u4u{b>PNgt&h0#|(c(F9k!Haf-6`Uj; z9nLRnNWX9r(PGVQTZ+{O_(OR!O#%Y?X4ze6{*VHbfcB^dNK_*a%;Gc6H#+u49Ad!r zv2ZSvn`5f730CgGYq{~urHY3yV{K|}ZZhiDSBuLE5Qn0{@(UY*s@-T?1sXFkp$LuiR$Lpi!6}6Zf{=Dshkaz|4{DdjV zW8o3}`dwNGWMVvAurc@s$2U&j9ItjJfPHjH;Yt-ad>P&1c1!xbu-@KqK3~U*!4)ha1PQ zcYU|L9dOUld;rGjIu&m;P_!E-S~oWAQvwx%io(CIjq#KpiM#r&w>>!ZBbvs}96A+# zuFYu@{rc1!I=zF9C5b&A$LhP9b>S-qF_8Iez8*kT4smAvGMTlwcrQMJ&0DM?G3@rY zV{AMdh^yjaPoM^?P%5XYL0)HKD7hwi4UwxPM#SetIkO(6p|1PzQJ=8IDzo`&-hXaE zdRAT@X%O>MET-ZuJdsM`nit;YYAQj<#bXUd4R|@ldAtQE$&`lc`mmKn*$}_P(##e` zBQ5KqHbr9mQ6N6MUOk&?K%eA7O2rx3ib*z<)M^($(i+Xxsi-}3j7>L+H0dK{Ygyoi zttDzE%m=}o=CUGjMk#VEB7TX=A4wwu#mFqx?A7eK5*V{UNxBcBlB7UO>C==n;h&X| z(KT5!5|UA6Q>utFH&=mG=n*@aiM#hleGX4~G<@7Vm||X>*^4^p$)*ZK>r+H;^ulfy zz@E#R+$P@ij=N<$#ACleI<(QfZNxYi#CDyZ6PS!M$?td=k;|~9D4o>xF&+%{WV2X; zca+3;bHby-RnrMKgPU~eYuU{zY{o6{SCE{cGkh>k(@T;=jn9nqRN0Pf8%2ze`)in& z1mF{5=#*n{b6grd)DCu87mc11kHA*@Esz3nO^LhWMNH8IO}HNjKdJ>AITIgDRV6Mk zO9&>#$qyCvTVzuyWp)pbR3z?yP4p&9MNnW-HTfq6<32UDrUOZ5qH{0Qq_KM>5_H)7 z2xUb5a;wqd+a7(5{`pa0X%l$!D7QrNc6}S5>_x1SsbjXJF`qS0WM4dz?!ysSliJ{u zdL5Ujl9F)FQ$i8|PP(vi8zypWk31?q%pGYMP~V8PNN+AQ{HC19KCGV@$m|b?S)Y=- zuf*L)OnxzxDI+FqU&}3N$L^&GcW1cG@V8EYZ2fUITb2Wk#%zuX{7$NTKUG83YdGz6JF4Y6r$5sw$2P9e238D*}eA&2!4E;ne=Mj@an>VRrpF$;cwrzE$ zk_?iYi^vjbj+x=KAtL$4*S846@G^%^j@?ZRwYVq!UcF)6E%l}GeNW9jLPF#cJ7Iz3 z5^*250D&HF%L#-t9Vf+VCjJg7*?sqvO;PSpPSOaC?{swTWI4MlPHP7w8QCTIm$1fr zBqsSJCh-ePpJj_LqkYmfH*_%EZ-%( zq2va$hh3)AlLvj&v^P)#BEjrMA99`Z=;c)V!%_Cz4q%$HhV^EjlE|^!=hK!0@%L(2 z=rPV2R}2$GWZ~y2%s_NP5LKWi8WFI;>@XvhILRUM(ZMI~@O)1F4Z8;WsC=XQHlLPc zUm82k3lFGl+|tHpKW-f}b+a}OP#&YgYKCB!NX<&;VIixD_HxNFV%b%-vGc-k@l_^q zd_ll^AHGtpAkfhi>G&$lG;uS>{f6LaFSgS>&)vVJ`OW5em^htv8}^iXo^S3XVE~>z z{yZz}`LQ*U)B140eC3=uhpGcyT(jyv=Ec<*!~%vCHUul3FZ(r{x67rP<0CnF=DGLS zbO~i*lxb3XbmDN%gkHrXp-(Rq-IDmFoUbpR5E-!7HlF!nZ5|hJ`0H?N6#URA_>>;6 z=zKLGDcFZkH4IXboe?y9=ag_#7=RB@O;2r2Jo3}xk>s@OGmez|FCuQZ@VgYaxfBpv zQ>q!)&j460d#aN*Nhpk@Sm8k2C|%XX98O`1vri0<&L~F?9`m>rd**RLWlGVsQt=ql zbvff6gy*gl4~6Aa;qJ-#&ZoJ!m#xQNwt2m5cYB#0c&bB+)TzeTmWJ#^o=QI@8bV1l z=6>8+c`CQWGFvlq>ln$8V~|gu8)aB_@oit7Nmek*<99u~)7) zcIR1ru}5d*;&FoU3z8Eeq(HZ}`qjiC9@3a!lBj09Y!g;ozdL8wbyTlmc)o$IzxnF* z&C%Xz?%-8uO(mOaH`vu6CA~KCfdVJT>AV){p-sCIXI|Z(ng8(W_4u;;({Haosnw4! z&wpik^F`{-_NUidEN?bNPJfSovwP#sUget~ZEt>hy%}>Lg+-9UaEa&NN{$oSSWS|c z4kw-U6+9meOQEJ;*=!w$a{s!qz*e<@XkTD|yuk5%0l7jzIt|iUJeW|67+w!fX%7JK z;8tJc@m}P;yvUcZ$e-)M|2gFa_7)DbB=RSUtSpMY_6XW2cGu4tUNtVn6&?<3N&#U9 z9>BGgVNsfy0=aKxtKQ1Bzm{t$2B_cr#pT2`fIiE9a|L zeA`$29qWS@!UwsPq@0=P8Apf7<$cO}xVP`)Uz4q0!)IS_;6u}6 zzh-YgYWs&C^^cEu{kxs~n_qwEcJgbz?0?t$0g?Q%yxo7L<>TN5zXT88Dkt9?tNst4 zr#!vDHhJ0i$#4ILm9^=|tA-0uA}%fwv@eGLQw|Qv$iZR$r*m)?ncqMDzs|vpcD4MK zgA=vsZe4p;bL{UqI8iQ5bKp-7?!*DWZXsIZ^BZa``vKdY&dqm2*@GO_JzZPxxxW?E z51|-7xEW+_cHX}d-~f{*BM0}Vsl#Y^^8TZ#!)SQ^cbhu@qlRbh!OJV*Hg8gaQW2z&38fav8dL=C27_z$9V>66_A!t9mmfSGK)ib3~VmR8?=RY>$hzG+5i z?!Xf-)-hy&uf+69K%?Nyj}fI{Lp7Cti&rPwj=^RVC+L0O&DyB71AZ#+6fsQ)Vvn^O z3^5*}?y77G9J>T;NZ8?)%tJ}bmTqqo`AyOy$?DRFLWfLmF>Wu&)P49$N?TD#Kl$Qx zhiAOLGikcTIS|-PL^2(UQZsu7&=>|Qp9OQ1!1;80zD{|Fv59}N4C{OGOIvF%A;Z7z zR+!UXfqEs`+pq&19&a2rA>X!YxPMdKXrq^-PtoMXj=6*7zVB7#fE=UORtp5yLz?~J zJ^G|!&V0txN}a?lP1F+a8Q3@OJJ{H4(o7C7#xS}Gi-{na-dIcdF;ZVWvJCShLXVQ=~S{?xDEm{;* zPQO0XD3(q$Q*xIfyV1@{UBa;*nRf!Okf6nObE@p)7mV4jzw@@SabRGJNOaN-k^nMecB-Y$HAg2PCUt=%8BhN{u~Z!aP?iypx_Es0n^*M7L9s>oM%CIoYMEBvuC6KH<1d&T}f!?r9H zJW#?No2sPsl3R;2qs;%AjBPB53M9~n3Fe+2kSFJ!5y~yJP5XtpTJ4VX^Kz>M21@Vk zdR_79BuB2Bh_s6j$Xx0(1t{o)pX;PO7%2$=te4q}W7EBNRyBpUN?3MmnA4!PCBXlz zl!l_M?4>NbECH!%JB-P}4|`lj5CX4`=h%0EJk_qiBbFa3=~!e5>amVg>&=?!_H0hw z?mt^yK0A229}yh}9>;!NNH=&8K@Qh#5@j8zb1jD?UL5;&C)j|Yg7rx74K>ORLpHel zHgE<;V-H+g=(k{!cUEI8hBBB6&j?w~=2nzn*V;5*_0kSEp^a@r0DS$J(lI4qdS=kOF0v7+H8#J5*|7txCjSF zo^Y|$*tcu@f+`zIG7)MP%+np+*}i@`v(3=p0}gtJ17C>U`$RhFp)7AEjHtP>&*RDV zb%6cWa$EY0U{oVd^1{f69%iDDjJh@$UZEn_F;+N!ntNXJ{yn@iDpR@4lh){%BvGZeJ z_GTA=(Xj~o@upNJ0KC|cJ(>U9{D#Wdnr-BdXCd2_V@yeg@9+)%glwJ*mh^5JusL>X@kfO>`nic}3=xd-$IQKVh;Ri(6fK5fK_6FK-?F{~0Nabg;>#thheMe-w5=sX z*Z2pknxII0PqG#)oLR(@gEcq0aU7BPY8EAytS0@qZnoh}1Drd|g?6emAMp1^iYKboS1;^^f1-KqhWBA^}|P|cX%6+~K)#&A4WTQ$e* zhCM2ijm4fVf8qK~kPYH-ox6$oC>3f~IV>gIZ#l@<^ft->* zsj3_bM#&C(XafSlKu_Z0ZZomvK09gC#O5#r7GYz#?V&8C3GOoqlaH15@_2rq!?;a{ zUC5WTzk)mvbpA@G^gQ9hRen;8CMnLDln_QDtqP3gk^FkmG4w$anLlY*JZU|MA%l~h z10!-~Bzrj%i!`~TefVzeCLM!>R@8XQ5SXahy47KVKeo6n^{;>!MtX{=(T8Wv1l`ao zz`hfXDrLeEm^$)##^b>ZY$&PM>=j;vLkudk0Ff>M6&D}}@u_?cBKvsMd|(Ky7s6;k zVmHzNFr5{Xw&0UynW;qafQVzk2^^?EfV{?KNMkcTk{JUXZQbl^xWlMCMe{)sj3ckYlWzV;r7?b51pP z$;m+PNn1Y={&mk{30bcWo~(S|C40D?iR9KOsDyRFI$Cm7hAy^=TnD z%|(|zNkh{j|7hX`ML`A-e;+RMXl53soc>`xV-Tumrz6i)IM&5a z$Sx2U3yE~O8Lw1)fC;sZFA}FS#muh>NYdhe($GhZF%Rr+-L{Y9!W{n`E_j@(u_enV zAI|;N1yd7#`?sv({vNnhl0$bXIX{W&IA2md!FDVkoDtxBM=n7K^7*SqZ{_3(h~0uR z;(~!-rbg*SCHWx&BD~ZDg zUsN{+*w!~n4r>b>qCk!kl0kcIlRAN;G}wo%pvl>az)WVfpyETB<&NEz3R!5T5zJ^H z$M6+9R|LPYuO;3i&ug7ab%gVrC1$;|D)@)gO98H*TGclus=~SjPIp&dTNlZ&0Kb(~ zn`{PN7v#BklENINK z2*Oz9UD8J>7uIVp-c%sg!wk^Mh0Mkqb)1W3la`!fEj}}ZT2q6@H$OOaBkl}&+(C)e zty|U}YP!Ym(fDPAciR^XiEa2M$M+){Tvi76zIrof!Zy0@UNbPeJ%|46OW}A)37M=x z74ZcLHn~j3bKe6e1i53AxhBG!luIj*O~8)oEAN+7jjKbU6DQ@dHP4iDcIKQ*?0A%- z!O^uQ8G3JtLNCY19~gGO7G>hK!!LO{=0H86*1$~k6D(5Nuk~ssI?wD5o~hY75~Ncr z?Ch&~C+;4r2Zz^UX3TaR*8s;@9}2xE zEoP@|pFl0*Lnk9v7uuPedL)$YNgJ51m$b2$CXN;4>PNJZxnU7ja9wGn4f1Q%{Z zlDxSBx6Lo90)9+Nb-zi}z$=f$Qqq8{0a6x$ncEl;DOJG_4Y)Na48&f0N_gxM6z(_r z*t3^I-;84rudKm5c%msItY9`b}T|!`HERKXPTt;C(*#=BKZJ+X7s?clq0T2m{N+~M_1+sKdm?+kns+n93g2kxcCBDs3!=u3OM2+e zu)n&TY<*FXWzL$-~07l{&YiyT+SB*THS{)z3>AF zdF{RYcQW^Rz4BZFi>IaB`uNZFIG2rjZIO7O6>5RTMTqJb4+N_lluyhHH>Ws*)j|i| zl%Mhlp6QwRH9f#r-t+aTK6Dxhw78xbC=#+s60kaaj?o%~R2lB+Q(>4@6&(5V*z8m1yX1Otx?ZS)&XZ+x40cAbN! zJ7)&2$lTF1J!Yi%D!N@ybg#(K;eyai$l|@-m12o%hl?dIwok2AoO`jiR#WcuW4&P~ z_s0jyQT5_WRYmD;1MP!%etz!R`TX+>6?W*?MnB)h|Btl$3TiT7;{_j*Kqx7I^xnHj z?@B0RaJlY`$;Lo;f=^J9B1E zCYQO$WODJmPx<}N_IkxXo$U{*{yzKTk`6jQm~gsxemL#_>HKK^{_pd@MC_G|1SfK3$w{e1-JR`e) z6>W0w^0OzAohyk{QP-9>1k(@y&-;DM>AK~i*L?M8zS)X;oI{(EcR{THClVcUfC;%z1 z@0l2c_U0~4^}TtfH}GhCg&#`-tApEN*H52aAvq*S#F`C$RVvKsok-!=YO8b?Q;d_+ z8r9`nO1{wklk3uFBD|bD6y)doYJR^|?Za}iXZoK!!zDvCY|?PVekVVXg;sOHY$WgM z^OuK%8>V%AWUGg#4kG?%Wk~HYghsMZ9>}WPc)Ea)X=0wd9fMJo{Cyl{Sx6NhF9gYsFECS*l)TwEY+eE#;4Hkx80ze3HDpTAG z!VfyQ=K^FS9kS8_uNH9~GyeojMsbmwcpSdcHmsJU z@R0->Q{jl6C(kPDar1Ivm7mQ=j{kkZfI7 z$Ud}bta&<`nO;{cZuQgL<#a4(xUN+7|ELR~#s)EbI&U!=KoLhQ!sm#(dWNB5Y5v))<-q3&$k0?G)>8sM-9#AJE)B27c;Vd zo951UBS)GS{|^6c{dfKw{oSrEnDO}Iw2grBm6m1pk>hU7i#-u)jn!)X-QMHq{Ty9_ zR#X1TaP-9=9OC@^NGj?>j&LLN)m!8~0Ns(X`o-?5mGS5jY+4h%Q4%I^u6{k+{SmvM zkfTSEL(%9DVUbp_-Xo!31JNnvi&Epre@cbA=RX+?8(^ake_|AfJ0_i+M1(HG@#VsY zzyF9F)BUen0D$rm044voK5C}pG5z1w0$9Gj``_0BG`oUd|G(-Zif8u!uLbnn9vJxi z>Bl!Th=I?tv1+L!`I5Bz|E!NJzwFO^4U>0S{GU^jh40*|_g1W5J3crKygfPZ{#wlH zzgj@(uf?H=yaxZ3^6T8HX}R}m*U)!rRa#~mXIcgdwQ|xt8n&pbU7X6bqyPQ{Hph}7 z|Mko^$3NU0S@dbp_D-fEI_<#T+-9jQSOKp;(+vY;0gZ(>Q^iNanS33F;wL$#7tQ7j zIXqRCb1(}kYst^k5*Cs%>1wlqy8n{)avUn9UkRSbX zdEPzM8f2k3&!RCbUk5N}^_xvC8c>qD+>@u;F5xijKDBLRRahB99)GXgK1yF+SrPv} zpy2b=lUJ&Zr1vn{hwiNJ?-3qu{d7bIDQ26mgP(k;tUHzZRZv@Vx=}M4PD#xvl+T6B zq;Z5$7#1!2Ct5v^OROl986hza->k7-`JVynvcbo+MFa2MuX_(GrnOXe^Yw26Y2 zOO`3P*t;u^Dz6mN)#u99M)FsR67Hzpt4(w!eFj}WyyhF12#u$| zAN--cWLoX1l$ApoPB6Vct?wezK}F-@*uiGO8GDYHKg@Yyja$p9Exc`8ze}l)dSw4? z*YPJ7DBM8{c8Nw;*!6$$Ab6!Kt9b?_??xy0(eZAm)OcMTJaZVJx_ssUvzoB;(yVWVo`1o`%b!x>%|`Jy_^;1{>dqcDS$PH&j}TW+WT!AWOAp4kUjWZ*G~|Upg^BL#aqf@| zr6*YMA#y9pFUz|Hw@9?s1byBfK!=i+9YjYC#N&ZCQU@PpsDx087m3bA!V)aDj)}dJ zWTJjC+MsP;1fQ`rQ{Ep6zm{F|e;myJdS=(3->uN2kH%qSetMKh^LX=Q-VxQ{DoD6~YESnv6EcRfPmA3o z{--M}PZWQCmvMvMH@RD9)-z38Vu^lWP}CAxEXMm7BQ~7c&HB+cC6=I1@063IR(HL1 zyDgq#v4fR|+aB|8FZ17PY}Y-;kuh$O_Vh(0Fo#wfR@t@iR-Q9PW1<>soVh~Zfa_*` zq4z}f*qbjz+Gre4N_Ji^g0^t*&To2{+Eh@z#p3<-?ouUPpDu(Fk4<=?1yJ6)Wt_Kd zw{ABn`NeL0k#9_gVBk_}EZ%{4m$;$e7o2z<6^3h##0c_JwJUHeGu|PY@cOC1L)^TQ z*YREQrg~VpI1D1J%7`}ykaE2@mA6(xm;>MTJ}k`cG3^~ArCzG5I<%8)4a5#sFTu%} ziY2BS0$m)k1z;UqFz1$BC!!qv_G{ICP0rANJ+mB-UhdX8tm0q6411m;LyehkU8o-R zQ5}lsUnXa77_cywoFMS3f3xS%uMif?qE9z0+4CEZ1B)_(yr=KnEr#2i;g|@v?cDf18nX*;P7k>)(S6VK+mXxk&LtqtVLga7Wpz0} z(m=;=F9|#r$5I(^gOe}Vuwxil8G|!c`AB?ha$3adi~OzdF_hX@#v3|A z__KGP7gWYEC7Te9F~L-Q7Jc_&Pk)O#y9{s3zw}$&ewGb(1;%nqlP{C8s)k>meJuB3 zrzuVn-En}(Z+o&;wZy9@QPG6w z{!M`-8@m^L0l!yh+yb(nU;8k!Irs0Tc!|J=XeS*HuapFi!SLG<=uMUJu5uHxH3%zs&(8gu-F_rJX!-f2En>Gqx?b#UT=xVPfVuh|J@xllA=G*8;R%@1S*Bdn`+DIStP}Ou z0W_b`UNu=>dA2lU0xBuf&zIy-1fW?(Q6vD^GD(^uN&JZt}Vi71(hHLnR4XRR#SCfnCTkRAs{Qs}!4Y_lQ+7 z>v)C|TR0{Ah0zER;SZPlPQP;v_ESKBNPN&teBgv&^!Qq2t}8V z4)OK43B)iIBN3GVhJ$fv2(1AYNuSRMYY;Hn>x8bO&D@G%|0X?>h;&309TsI4p=Mi) zXXqC&a`K3+-V+*Ol34d(NW#+{9&AZ1^PCK1O_iJ}H%Uhyk{ zg#iFzsK}e1upJcLz54(?HJH~+Rx?GKubpxcoz5l5OxFVDQAWg{ZZ21O_z*EMuL|Lk zV|{4Kx=3K0At;P2!EP@L=3?LrnPMvB6G4s;1>R)^_72z_3Ss6WzmA5#E{9JR2z8KX z8i`5{4wUiaow!=qI*uU`#kI{Sb&?4Opc#^?R2E6kHu0hw`X;%G@IwG#6Ny+RC~RgT z^o_IMJcp;*!zuT606aWcF>_5Wa~;5d%|!eF1JZ2ix6n#gig-DIfFq*9t;ZJUw(u3X z%%hixBP3#!LPe-Dgd3Rf2{DRdxLRK#00Pg$>M}T&6>d8S&Ew%x$NxhMU@zdWtAdnx zSosoYopbn?kq}=J%`Y5`sZF$s6tM(g7|0TEVifhTrBx{dCwe?b6bLRLDKXTpB}o25 z+^ZXfj8X04ab$hTl^O9_q09L|sfR%270Kt@Re~c5@V^3ZfE=q#t@8D!8XM|rivZOT zh4>htR4FsAs^;=fbzIGu6lnHkzCO%W@o7J^bh2W8X?%W%C*lZ&0N`+4UT<0Yd3ZGn zo(Sd7Kg$q{DwN3OTmeAGkqmB1Jd7FC!Tfb~*2BJxDSSqMd?W=Jh*>ILJ7LQlE0R1d@!%@OR12-45n(?| z+~wi9eryiUm2RA}E+U~rjEHt6*gpPgIFqzZKj)eATd&hHG*@~2`;4*pQjdZ%-#saR z!B>@JdnxBA4q^c_w1D{`J%CN{UEQm9l$-Rt*?0M;?}X#t>{N5uZIxl7-k0aTf8X>T zZC+Aw`o4_4LEbYq|K_m(uLs)kRhG=2rAKRfO5S z|JYwa;Hn(cs4VhKor zByoM(*Z6dBprv<53$4#Fo9>C0dD1f^Ps96PesiKLlqJ3RO-~68`3H)CbBX>2k zW;KgTHCuEw$LngY=4zg~YQBHf0^Bu_0cbxmwgUwfe_bQdTq8ACBlE9Dmb+F?vsS^S zR*4*4tMa;5t+`fXu66_u9R<|sbJrPa))~9hnMT){zpk@vt{VgZtmo?Nx$CcL);qe? zJ4e^wcwO(>T<<#}CjF07DTiL*(nv zQO%!Y<~~3A_ZiLI7_Zrw;L?~B-55DXf6>&KI@g%~uQ8MR%QMX{SuS5*{Q9)U2^S{YhwU z{nw1=ZfVzS>2zu7j&A9F-O}IO(xsW%`GMs-)7LT0uM-UFwF4P4qb0M=U*|O|C{q$5 znY(p4`uZ9X+FsT4{dMbBbL+Nd^IuXciTm5W=C=cvZ%5JJj$eN}{qSvzn|(5lYlBPV zr)K`$87rC?Jng)dfLD3r93C!HF7l;$N3)GZt8E9>#*s(SX4-h>+xX7f1bEtopzY@a zY(vbKM{&@>s&<+AcG>y%Q?qvubA>kL5W{lN<|>A-xDG8DsCr9BLluKgONZt>^bb)1 zk=JRS`kqNkmG!LCR;%4!tLv(3mt#ensElrw!qepbXUGt)ZbrH{nRKtK=yFlrelgv* zTe|)7=x}ljr&T-(^RPcCdVeHXIkP9Kr6*>-M;QtBN73(P`dYa5Cgl}c&BJZUExoL% zi1f4GOrE}HT76lreJ^7Aa`O7Jp@8Geu7~?V9ZTGg^d-V;c~;*sPoQAG80oSp5(~`#8ajYMF)ZL*=%|G%+ zxxS8WG33tKS|;H@7X;ccA_7)g8lmaIO3QG7W|+*BJY|Gt5xPH;Q|YphbSkg`HMj8^ z)VM#-z$*gX8#&rv0vUl=usXh{!xA`T36!q_UXdGAMgr}ufR;l&N@(yWdtL{s_wMJD z9=uatyiELs{CCT2bGYNa20B$D)3DL$d!?r5^AM{rm-V{ z0`SxiVg`HW2a5sld1NobZDA^nV;ulk#~Iw3h29|#P5t}@hfFtT)2jf00PZ(!KatSg z%tg*rMA0wA&&<&+>1U~5y~7EvAx`^tlH-AZ6R-0bYhO09|n=gfg?2 zbf*qL(YxZQgXET@&wv`kE8pL2y_e;X+-IF`8MTr{?2!u*-+1^WO%Ihv}R zKve|zNJ7F@sz7Xv&KO|7h=d4xQowzAyYo>S83z_5fpBlPab%DN0oYTOz3BSm@(c_aFP1tcAQZxTTrGUu zHaWfkd$-Wt(9(S;mF|}7NcB8j7KxT@30ty7JV0&@xq*W25eD-pnQe$rV^(js^QqYL z>5TJRUz<_nXVZ_*TXS>~7mTn34+sDSam3M5{3tde^(hjeO`ckOJH3r#`1AWb=Lh^S z6Y;zY0noerBb$G$=8a~j=ghYUhubqn>~_nBPgtm2J0nNujMI5lLspKMd`#~Ne+mC( ze0RRdJWIv5zu4@OWsbt#v6e4%mxQk`P1%hnF>`V;U%Aa=lza6SjL+n?&_g|7S{+K% zEUGj2+AqhCZeJf!b31N3*Z2c9IN|)meVhMk0jGDr55LiT zaCWfAFow543nl$LabS1;wE8Xk^7nDy>!E9HadYSYf~kM&#*g4mZ%VUbFjQh9o ztnus6a&>BEQ<>4HJ-pH2{T_asSKU1KnwaFxL|^*Un2EnlP%xJ)E3Pq@{?w^paryIV zjm4F3V8ua^o?A2=Q(6X!R?6QE75SsB|B2@^pyk%U>c@M2Z>eWiYi<68?J3%-{O*Ia z%a?O>klPJdQd$m-Uo-c}Z{%9`eDUM4R^7QeZmsPmYj!8M$Ui^nY9;oX zlT%`Neq@XKHA|O!UCK^w_t)y3ZpKopOiTAE)he5U9-8Jq!b<{^FICVkCr}TPHr__g z_iZ@e9jCfF=dA}4ejB?_wStWqerTwiw6&*VWk!XRbbqi>^4UG=bG6vbJ54L9Hy>SI zaC#j`)1c}eb2#)l_co)Wvu6@}gWv0T@zO@Glq=n8-f61qjoul$H0nN2O~k(VJhw4c z_sv!xF6H(c^eGd1<)6P<&_>wnp%-XD>%HxG@e`k7T*ErZ`!&Eg$}b|!tm$X&&O7nj zgyLjl@=M?1W4%}I`R|0mUQ@h-w_g1?tP89iG1k0W|J|?o?&lv#nn7PSN}Ge4e|Kx% z`}%ji`QA4&jTWj6BHlu(A9!3k9dWMI^H$aa&`$pl&)LI&MMkZS;f}CNi%pQ`-`f0` z9HKzNn2qWi5HFho+rj&3?X6U#U2&mUTWFU)zgEWhzqs0j^9dNBB<>8~~Fv+0vK$JJ~azQj=G@4jCnCcl3q?*X1CZVjb{~O$=Y< z=l~Vu`qL7tXF`b46wNV8a5@h3bR9_s(rZPWQN$3^$L0xjcek}V_g0GCPy2XvD zu@|2^ePzSHShydJz5E9DlS@>$^kN&&>FE@$=A+gy^_1p4#zQprm*9Ribo_70AN+E6 zsk&n4ik#HSm{c^qBj7f!K%5A!)w4D`sKkH|OP3JxTGL%TYoysJ+e*R3VRz7Jx^gTGP3mZK?_zp5X@Nvir(IYrSM>LKfHVGqWuO z@y=8QYH$p^1o`^aDueww`JQIT%jwZMO=IAAT*7tNI5sDa4%X7qp``ZpYyn`-eHm)z znjm2w62OoV2>>!Ner^;($_8Vb=a&`!HV$0dMPUH66zi1xNGmX+zS(Uz;(POtu4IMU zFCD&~R5WhM-Iw?WhGJPdXi(33@-^-c1zn!hAp<&uv-U8t_+|PqO7C2yA*c$#a-y{I;%R;LHMS1kN_p^qKl*Yqg_sz=koO2weB<;9%g+}UgNG1&^ae5n=y z7W0TxYr?pZrlz}9yMxoiV=SJ(_{ncEbd#yV7Aifxgb=p{3kH&H!J6|0v_@zHc@02< zfEq4 zKdiA+7aBaPsuWLW4=_;fCP6jMzVn=wo7|Ni_sFz0n6Yo{l&{%KHcl>O$-o;ay&p}s zr&Kvp0Hlh>nWs@%4)tHhx|BaVUTlGQaK<7UN?HgYGZ|=f&ou7dH2aE5Qk`EyjL>R` zr1rjQs_A+1%hms=z=Ic8$l)H<9c)`7g49P>@MSH zJtkzmjJ%A2$0xnU^|M`fgCge`eL1?7E}|2q>-6bj2yx<+|DLo~A>#8U0s<@!XT8mW-$7s%oP~XGFkQz8$NWHbbAJM6ihbXuOgx zulDiv{Vk^-l;!b_>w8Q0oiCI~yEzc;<2`y^@E+?R$wdClgI*}Qjj4;!BXL@t>Xf6{ zI^k1lul_Ce{z8Pv;vz-`2AMz`%9YGJ7aD_dntOz=m9Lf9kW>s+aZm!97e&QP=ztlY9`+`g!HeW{GtmrNoS`+aZoI8Qvea3cMueMX{G=!ZW$5p>wdWXvs*kFeza zrDy%C@68#@&EIvJuk`mXg~X|mngs{@a)Iq7o!QkaGCX;0_Y4O}`|>iiro$h48^d_R z1E1BOrJL{3gd|g&kt`gJ2kh%d&ZjTe!>nPU)*E#+5nyywo%L3W_4eTKHZ*7R zVE8w9gv2tkCo;0HH1fxA67v0e(n8P>(XQjxveb zF|XMov`3k*jpCWGA(2U+JU?+{k5Uq(x#~x`EA159MtRpp`LgW*jdnko#so#jgp|jG zjmAW-jfwh>iG_~|Yt#5LCOIYxKB*a#?i!Ps9J{bNVRT%3ZCvMYT$g$RIq7g)jYdy-!oX<4(1?S_ zYr;5u!X$CRG<(9VWWv0D!lG-!a&p3IZNmC+!iIX%mUYrj^qK|ryW4R>JQ|bszLSpO zlTL|~&TCisOD1pBPr7tXy4FuRZ4J5~PTr)R@?f3vWX%c{n({W9^0_wUTaWPDdF~c6 z6_7o3t7Pgn^&9_F`Nq1byK7THhmM|!Q}!L z*wS3|vCC&_z`Hltn4F~eH7b!_Dhtya;Y1$YS}?x=kWT<8giZ=g&P^qye0wuDd^kTs zy+B}fn`;-neh2{&CQ{@U%&xf^-(8qYT$s*Yuz2WZTe&ckeKlYUD}6OdoCqX~n8x$b zf|GEF`+)1W)Ieo!aayL%0r91#JB;($i$6;ix9S&vb-9~NmW-|~?jA1wroNfbuKU#% z0&tFJN~Ra;O^n7tdSI!JeGmX`f|eR}cyjJ3?T@p`ALna7E~w{SYuqQgu2QjG0|s3K zst~s+M_hg$w&CtE<=EKXL`8vk5rM?e9PA?w=*C@a3;^3r1&9b<43(S&2N5qBFR?gM zw15Ryg}H4iH2aHW4mNJC7faknX52b17Gp~VhbiJfY%BnR!Wk*qL0*DO3Lh6=ZC?_L zSQbxOmUyuYo^_ul{rImI;KkMcEwrhWV%3C7EC(wq zd=d4F>l*pXn%ygplb5t3xHQwfiVsu6NZ4R>V&+gw#IzV-T0)E-`h-}lm9%PVEnrr< zs@3YG$LX3pxoWk(`Y%4wK9WWJb|R$)6Ti`JZM=5X(O2cmYE}R0wWKxY^(pKz*534r z(jGW?6XJLQnLERxv)4S>{2mz1sZg|lsq0^j*1yuGwxL{mh9IE$^J?P}F6p*yRcyehyfyY}A65tXgUrrBWeU)ZVA_1tu#vVN;5S*4 zPV+NU%n>OzAA?Rx6oAT=lR07w$`R^|Fu;PQ+)&95pp$`!@+ z{cG5~e_&$*%$9(?gQmGbOt7z#2vvi)lv9+XS|q(e4$8CIrAa(AHyH z4<&M6qO9lvR4+*=f&>|(T+?^&aLf9IukVl-k9LL%d&7v>@J-5B0h@dL3Jpjz_*f9u zTVbiN@#Dqr&(ff#p^~lc-Ru!7+-VycRpFi@(DG5ZAYHy(vgP!b{ zs^dh{ll7&F#s2PJfrM&Dka)%acpPELA-Ke_A+ZhFKPvZ}FWvv67V8{h4Dm%mJluKI z;uO_4{)8m{(SaO9@}`#CL4>BZB7zG;(bV>hNx$e0Onx|uBL0{`w#7ds^R?1mi}K`d zICv7^x1ycq?M&NJj(EK{YocNMjBix}AIB;X@7I`bP@TY6V%lH_YF2Q63k4b;){&S4N9(9q!?hUeba-s=PoOSJ&{cY%9_SYWhUKX{~h%AZ)_~=F621w zw@duzRO3=e0x@3P6v&63edNJT9#-#)4WJQ1&2kZ_r>X>_da)J)aU981%;lgEM%|vu z2#m>zD>>BklM|=YZ%1{kPH$Xa8r7}0v-r&YoVQ!0<+q~Le8SbRS8!BZ$-sc=J9&O5 z#Ws#+pAJj!M~!tqi0*~>S4H|`6GL&3(Kg+j-=H5>@uKM2e^%46<-gobw*nm?W>Kg0 z{?QWd4@$8AZe4Z_Kqm~UV108+r{V%aGt!whL9f>#;dsaJUK-U0rHv+M-n@T0fB10y zC9%bxag>qNxHs9I_So+4J#0NQRfl+;VfAk&g*uDt zO@AN!{PKJj;kcnd-W~*&wC)JxA!uh~X*f=fVWNg9v z?itVH^d!22A(La59X?d?rxtbZW0Pjp3B}nRoa?( z?{rT`^V3b8+XMTLy_0s|HpTAVUMdvbVS3CiJwNU3|JWky%FSfFhRHqmR(r#!%)P{W zi!&(|pF@A|o@*YHmU~jt1Np>H4z|A6-ur!_eKzR-Yf^J#B&*0eTgcPld#ZzEQ3~hzF9~*i7R2&K9WO<1Ja)eHSTr|M=!xX}Mxhj` z5)8uRa?|uvv!iM6Vck<`yqS1vOd+k*06KI~rlgM9N_`=9azy=Q3rQayN5l*#WM17f zVzDFPEOq`&2n*+sJ)fwHz4FaHd6vBK=8M?tyGc9|LAH)Mr>ga0UNNWIKJFsi}0!UjGLvfbgWt^AAte8?Jmi zKmB(F?>G}_R~A%W^$}6FYA|BtFIjpmVkaz@p7qx=y)CWHtmiOUz*GoSE%kjzhE&Qy z&Y*7W`pSqBd297jn)*q=WV-RXoWp?Z8cSA<=!5By^fdn&4!Kby?uSZaW(?U^eEw*h zD^2*1y&O?<)p}~ktUdS?q2V{YGQzIjVuaydmBBz2CM6tT=}{q_>Dtrt3JkiNy+yoGWUHT0RG) zbh=j(M#AuIl!Fje#$W{j5Ma5tTh>%Q#rr^?dluO(gQR+5)4O~LS8l9QC!ao-2Za1G z*W+71c*;~$ofZ_c;-i)Gd~38i-EQSczD#^ZEC9e>MKo$W^-MJ-iTf(1(DAhiiiD6> z_?ih5#hP^mOX(4L;ROw#5Ld;y5mPFX9J(bt?mTti zR=sccu1n8=>ys^5wB78nM{%m(aKcmL!fFOoc?bWYDfXezEvsO?4VE+EIMLHl3*@0- z#0voiDhSiCo(Jge<`Ww2eZ0C5iAcAO!u}3>4!`>`HJ9zHgt6lL(X^1dBEItgh5HY# zxIU{Zu36??Jn%HX9%je7iOzp_qrJxwFT{00dSil;dS-pSJ?z91q8YUEI64Z*A1iDq z^ei~VD@UJySiVQ`hCGDfsem~-hoIXeFL?7+-3RxFxuzSEQ`OHXVYk}SH^$#j)z^^g zD}x?NyRJxm|1wtpF~aB$^^hn0Vc^r0Tw5cJ!C?5q{6oGj1-2nlL8`@pKKhFN9Zg^& z_t_+d$KTY8B@>ktDpA9+j>GC4w`KU6V)zdwmX&OesZCA2^$ArX%;rxKjSKY+4PP$@ zg?^Y@*l+mU`lie@TWo%b`Ez6E9eGrnYI~=DK z8Y4)3ML@5eEkbvT>vJ3Ykz4{MEW_g8r2!jPr<}{EL>R zSj80@K)~>ysCCj#bzxYe=tLsVdg=}BGalrT^pCS>u6P7H>{O`o_xE-u&Beig)T{9i z^xD6OBB^(~HTF9OjVCOXuU!sRS7sdQeW19UaieaT z%g#lC?){eF$G7TEgcg*A=`u4@s!Z*tj#~dd7UNlZ_^0^?V{30ZnJMjxWgN7OWTN~+ z4~A~=_Mq6r^7C=xHz!dFS8kYyI7_9NGul-BkrPV&ehu_1^5>&V{aq}EMhWZ_%RDiL z25mO-;yQHmmt@mv(&>&67PeHa^~V;{`J+M6jVnB5IR<=qd6y)!!5`MK8WTm<8BQzB zTUD($iN$t_Of4Q@EoU0_DD~x(vm%zoWFOO*5cvJga^~D#uy8M(b~M3&ceU4mWmq7z zdm+ObVwU{EM;fNknFH1$7{9!rf@xS%!CKx2`@FTo@Jyh=4mtPL$yrRuOoExsXsyPk z!MA5JpPLR!W4(XC>=Q+0;uw?zO#8mA`Q4W|;jcm)sXOfKp5}m93y%#mf<}A)4MA+l z0uX|1WQN%(h|{6b7MAcRQ`F}LO};aSE&&(+Q9RK4WB?+A8>AMJNaY7Qo<7SSWcs>D zN-B%hJzL@LaqItfar8H{PtuUuejLq~5R{|ooQFT>xjD~hSOVSe#prHgq+~EUbsY;W zGuOjlYDkc7d57SPna;L8vr?9*4@TD(${YrVDJ7_DaWZ>YA#iO;JI*@O@h)1lC$8CP zP{U$F`_B2d@Ll4IhXn2U1jjrG0xrn(sOP%v7*FRkts%K>_9S6N)&EhglF2G20+h8QIgLAq2ta~?(=YUo#jn{tKV z&p}+P_$F7NI(~?H6r`5d&UsajKeLOARZv*P>u441SN?d@$}4daqX7nTf#a2Mugr)Y zif9A6YEQ|{S@$}SPL+Ww)Y2o(O-I7C1f8If1NwXj(g+yO_4ML5HPDa&y;+SrK1NCr zF?sbEWaK3giPUZCd0C$6rUSi4!K|XjMM~}o*3$#YmclAiqt4*|=|r$j0u;IPRJE>M zMkzBQGlhCNV^nfSH765irnoC35-|8Ft_Jx}Bh0`dHYn*!WSm5tzb9;y4}|QV3k#?RGgLt%iV& z)>(((LWiy;=*k%;WfCZ|tv~$0P$zJ9W2Qsb6(mAx+dk{~0svfz`99NWsku%01^Z^g z!A`_>c>wyi4Cl|(RHldK8%iwikRry610I1Q&Pk%Tk;Wp{IoI<=ZT2&?wyK9X1~6{}6|z7&!yQ(U33w_@9xg7i1t5OV&-WtUl|cK@Fz$FT?n*+(upR5k zP@kb5Mx7L|xQfw08A%g>{MX4o9n~0J34=9dVf8xa4nl5T6-c?e77}u9f;W@(9mf0Sdx(oCvHZor5l;;)7Vk0ftb3wW$=2 ziX9B(e~3uTY-2&iDO99WQSpdRr8P`6D`3=Bl5r7)RzPp(~X27D)3(Ta)(51mPb=xQ6*=}()gCh^c zY>wfE1t8opCLo?Hp@RZ3p%!Q@+r;#J60Ie(9p7c!^Cs4JWCuyUjCgmiLCj=(@LJmH zS0$?sJ*;>O-lYW)`pES~NS8dzro2{PoZDi5#rKKELI!&f0^CD;l}bTigx%FNO9m4^ z2z2J@P&PH^Y`T=wbbWcK570KQFm0fq50R;IXExMBNI=IQNR}tPFPD-?NPqt>U+TU4 zNJ0)s64kD747$0VQXSJqpNWLw^*@oo?T^-c4=a_qsJx2kVLsW34Ub9wXUSk^9c;g@%>gN zQn;DWQnJ+7sSjVH2u6z^T6d*iKI-f+qJmcd5EJp9x8GS4#pS1#BqQ}@ah&ao2?IVI zxAu!wwt>{F2$?Kk>5@UPt@)$t?~BSY3KPI9B#_QghnlT{(pkGiFlEOv9%-j9Qh~`k zdAMje1 zV9K>^Jx%*?n?0RavD2;6>2CQknVA1L5z=?(0AaGEdN=V#Lm&XvWS|2;>eBWlUFM88_t4E;)s?~IB~u%Y=HFx% zRg`%ze;g;}fsqjDl_kzwP0ALl`zw<$I+0B5zC6+ig9?L`n6!9>JO+h4jOYQLHlALo zvEv3x|1Ca9^O`|1K)^(;MDrN5+5PFP+izp|)A{13WP)493^m;#`?{F452{NktLQ=T zqGV=VO!XXg9js$2iknXt3W!%br;_5h(~qS2{H{aE6eEEK3VXCueTi3?*01dAQzPs9cSiK2#eI9ZMngv=-SQpQ_Xs>sus%0nFw z+V=x?GA}w53Fx?|08Yvt%Y2aa0mkzcNH=FpG8`yT2jZodw>}i*qe4qm3S zNZ9NPeC4J2v0YdoUUS<(E7dXoD^NGVQeDe{r4o&>+XJd6pe3z1?Lyg?q_SdM?IGG-S(PAfleiF>~c%HdWDaG?Ifp`v|1n!Nj_eNWG78ydv7yImjIMR z0%6V@Yt``UK0h5lk1IxsrQCj}iH19-i@yWl%ZBRQ6osz4Cne7--$V%FTm_pKI{5nN zlmi#dUAp=74Fm@D1k?zgu{VC>Fei`Wm5%iR@;_ZjNW=u$MrR(#-ls2yZod|6L3t<= zMVk0b0>wr2Dq8`P1gF_#16<6FhA;y?ON{$7w|@@Z3#zm+lAX ztdJ|Jp{k!lbw8WjdR~2C|MbZ#T&fe7A4sVjqz%Sgj{J}iAg^}>N}aEiG*{JG?eG{7 zsmWaq13gzZdxj3)Q`%$f#B{AZG*Hp1lQ8wP6HIDkg%_4{9bHVV%uJGj1oAS2!{KznY z!1R=?gvai~0m@Hf%i3e>u#)AK9@(_GUU8iASa8d0JzWi9jb2V6JT}{~WA6>A$bRi4 zxMVpdLcaZx#Auk53hw+@1wSoi;c9%Y<_3sa-|uGFnI{3C#>2lTWxjQdSGz;9OyLk+ z<@USqr?!(2s&M&1e2HB=P9*l-IZ>%-D;Sl?dpWTgtrEA>k>59rLE^Cw5~MMczM|XX zF~CEc<8h(z|60DLzE|egxS~pkkXH$RQyd}9rQwWH;@<3~pHTpA7Fv$P$UO+>uE#6o zR_1P|Zx|keorgcl3YY(j$4S)pBwJaMHC&L)MZ(-G?=5~wCff(>^yp5qQCZJ2qW>Lj zTT_=ISD_-}TL>o+ML_{R4m*?NgK&tgA+2gy?ic)?=9kRX+Tgoq@hz6}_4u4|$~Tr6 zLN1Rv+}2(pvOefSSi8iM$`^dWO=WRdIHW|U>`IB5weVfGDg{&-GE)gIPRj6wO0xH9 z1u1cKhv9!&Z_s9a0=#VUk-3WzbFM9MnTQ8wAaqAVOny7}a_uUQ4#t>6=e_8;er3u0n*aJsnn0gi zHJ?-ZcRul)B7nU>&pPRS5e_2DBX%;}n`2N(VudO`P?tqVaWCPw=pljFI~BQ13_f4G zwB|y%e0wN(6G2HtZ1*Y7Y;U$fdrDpcKd2F(Z`YaMzn7x~MOEDUoS#>T9hVlZ;L*I$ zx=WNu6vju@7rPiHprdTrGZ?|AtV?h7TRyn^&@Vl2z~%Y(^Y`)>Hs3FP(`0Xj3(07b z!Eg#X6aMJ27WgU&HIG{)HFI2rfNKyBeLDgsC>MY1sl}y1!D;1}f+C0b3TSB?=f#d- zz)?$ISv@nK3nu+-?8P4@ZWirm_N?Un-`)QA?i5hN4Fa(3{{Fdk#_@acSNX;rQW=83 z#7y#R_ZXrCAnXjh(F(&)!S4-=)RP`R?@YCOR;CYEOOr~oe_o1HZ9UtWhH;q39w3nf zImV8Q^?#A2&%4r{Ubnfd{Y;b2aDLn6bFw|#mErRKyW?_;$BuK}cLf!D)`m|a=3N1o zc=J{2;~AYE$pH0ZbpeBTI>wVRQl^ExuLH@mhGzrg8ykaX z$Mh1eWpOj8lfs|P!F$KR`>y=pU;XXI40?&VtC78= z!lMR#K*>X-GU-9b4#eIYS_YY9DF!fkGg!b_f&(Q>n1W^84H^R*F(+HBX|dV^d48uI z#l_cyu+nD#-K5Ak3Jn9?_=Fb>qhB5GvaHiT-Va%U1Wtu^n9$qTJK1k*JHR4nG%hEj z*F7$PKKO;vK>qA$L&RsUZ>Yj3)5yx5K6zZAF;bD3e+H?HFOKYa(C0rosSb@dp3>y5 zX*R;)8#A8Pl{}i6)>i~RpE10kc`gvT!|4A32w!;h7S-H&3^Ik%}ru{4T*OY zac6R~O7prCjuP`m({sjBYgKMBc`gy3Q9X)Q2s3>jNg~Q15Y4)g8ZcZD$rNxi#F-yp zKvperzEE*K8gSz#2=TZxw=VR=)8-sCjw{grW_xNbEcA>RBd~x9r_eK5`$R9WP_0Q1 zB%O>Ad=Rq!S$N!JL-8cOp5yIt06D}XRhSb3fM^fo28T^XJXDif-2Rqua2>^D#CP&z z6R~?ekjw+q2qR_p9x9WvtE5{ac<7Hqm-}JU5S*VtTb$jKo_?*a=ONKCKkvaBv-XJv z@5FhdX;Sa?QOjba!6YFYVU?2tf8O$O*U4&TiMcKDVo%cRSHxQZ8u z15ANXZGiTl((A@A*~*U;J=nWbTVpxw51a6B5aN<`|+nHIfJBz;rBdQi@ zjq>(H|NQd%^R}-u2mtmap|=up{s_~5cfFP6vUC+NV3HVbEkFW;W)#!6~X}?CN`W2$k|l6h~lzq=*6=kMQJvo_n9xmy9OCQT) z%OORQ-2_Sap8)aZHJ}^z8t}1@9}a2_++jnr^TWxvM|7PcDN}{)A3p6E`gJ%uG{Gp- z0t(ckr-mpJXBa-BD&Hj(L%P9uO4%d6TP!j>Uf&F-lZX@$gwV=!8QWYD8eha?pql782e=D5>Nz@1l{cA@t;X&gmw>B8w zNGMaai$?`3d{(+IAP}_$ zVE&$|y`;lfSJ{-cz$sxk6|lYoZj zP-=a~0mb_3@8_;cy?>}yNIk9#MovS?f?!PF6dZ}`)L;zPu($-=BaL*|bsQ$wN1{N7 zbXC<+-gxi7MNnotP5tbtv~&{EMd)W8R3b%V^bY~89^$viN3>qi*xl}s2vJsih7t4w zPFq9L_f&n&xJ)oF+AtoBzx+-j|<6PTwBn#;zWtXmVAD}inVz<^rAf%fqLC~ zP&IB|@n{OQdyW#wB?5p`Ac`$J?PI%Ye=c9_MmSc3NGxpl+qK5*;y1C(ZN(vGf?}le zpI+wEhCT|#VQ~!w=b{K`uk7xcC;S({!D%o8k;;ZRyJ-A`AcO2}Rz+q{nGU8cA%G+( zqg~(l19gIQ)Eljox+nbj%=^AfZas>is^d}?1gc-?=NcHV(#E@bRPB-5Yzhm~jHE$= zB79CeHjX`%NESgO`=as8Q{fSKd>tSwG7SoM`Eu~~QtGYIY&1R&4p}bOfXp{NR(vRz zv#9s&@>*?u+M84iQyuIFYseeomsEYMTX;Akh&4iot)4u!p@AS|57+`H>){vjfl71{ zH+s~8KI*0Z6N&1_@)L~(sCsLO7ZhYcqc<$BMnv-e44aIvLgaW+Z^FZli66;??x~;# z>Dl&;K6^jNT)Yd`mZ$wmCA8uSL$-ewyNzGex?5UDHN zc;q81Wax8@9-2if{N@dsz#J)X1!pQ$q-O}l?}rjzTO2KgMdKX-LR~-f4#u$_KqBE( zu5gCC9_D^!$W@Q$l_HaAD5VK6QQYv0Xu@a|!%R;po#p%S5YiPKmeOsV zFf@fAH*<9;V=9~~0XpVi=}XS*>{(AKdqQbmPq0W%)A$o|181^@J0KmsuVQ+4&1p44 z=_^C2tf34>;B(|Cvng7-GM=R$m+9kYo9#yjBz+Id35a2nl!drV<%;xXN3_rgTkfg?>*xq7S9m-ETKa)jxQryX!B1rB&5jys;&M0$Y6shUf ztfUklM(ok&nlqZMmAjj3KH=P9h~TgfZ4nYyQsATYH%n+oP<}jSyH})RCo95Sa5Gur zQu3_Pj0&!UlzyLDaa_e*G8ID_p$?`hJRBY(^V{`#A|KKPMa3z*3Gw^&;3Vy=#DyUM z)*dF$(5nb@+5%k0I|Vn(P`8!7S$il$0-WIrO0Cw&&Rx#7$}PImNUikqtq6gzCV=6C zx$QP9Z32{mT$6*S@GV~WyIm;LpfcnX&SbAR14;><*>Dq@EVu4q`{XV<)Fd<3WNgo8 zRFEvPD2m*k;_+i8v{j%zg)?NX(Pf&`!$QSR08}E16qRtsbVXVTIK4ldVRwy6?IFEI zL0B)0t%_IKsO0I3?Ltr(!zeC|Rw(0YBK?{92BES{Yzf1-m5Ny?6((p8f`g#c+W)d- zq&guYu~nFyS&G5#*XVqqkkZKDCj!hEMOqm}dXrupaBqa`C+5nCzIR-VnWCfq zW&|H_9@_S+(z0tf$Eg4NtN*lLL|qwz+hQOb6XzaE71)!3H%MctCOiqHm&2v1$EA*q#*UXrnw%m`&kkudX9#Ohs;;214Sn~MTw~CjmPyOOH55MyO7*6PZlSTd z8du`XN^jhp);EOEw}3D%gpJijv6D&w==Ca#+SxfZS?Ej#Q{rX%UhAzrVdNkeBw_8L zExdO>6tdnEsuNAG5lXk+L-T>+>&%AS`d%^3I(i`@Bk+%LZ7G$EdAh5n`;|Ejiz4I= zNV^zH^9K4bgzw>8D2o8wbC{6jJ~Yl2H!D5lb>{|r{ZC%)20i&{bGes=WUIwAr4dof zD^;49pIX^SMOw2Swl&LiM{D}Z{xnx8MCiF}9vLMijEVtn%QGB%9I6^w`6)HD{OA42kJ(+Mzi!sc&>=*&>ZTz#guNos}V-x4izI*6R}r&*Xn555)(ao z;W+ukY1Z3mvDJy%(jec9GJk?)w%2JQ%=zSrOGlj;23De5iu-IYl;&`PB34lnhn2w< z$~f91>$>KJ(wFyj6VlrxHAWGdnV>pKp3H^s2$VUeuZ$p=O+MB~CerY~_S#5qj zh0bGPM~@;ME9R48iy#+@3_5Garvg;5p-flYk}z{x7%LzUrTJG(#J7-o(;~5bPHFz{ z+p#s8M~c*`JybBDs@hBH!yPZ6H>>x?v4|oiA(WnJfLz_0KH7nUr&3D~m!bPb(tRks z0`%cs0o~svJq81B7iBAKXW8-Td8OEv0?HDQ*nTDai z)E+$$_F-WtdVbbJnTM_WuqLr&XNWYXv-V~3te~iNq!7b>G_A<8qH1;DLr14bDP>Nf zpvb(53mJsc#3@op!6_9KJq#V*&7tLH%!x88m?LA`|Kk3sHKBRp{_c5ug5r~i6N$w0 zD@Vwd#jT0Dqy#J=Ds@iL4bAz`a*g`k+U%+bzp`l7R5V0J2;vy}D!r7X0GHVYPNnBL zM>r?W4W)}EkdH1>N1M~jnNvQgVFVS@r-wfH`jV0teuT>a*LYB9Tg$OBer@}zAy zsE9BbNAj=HbGh0KE2x`L58V{0J0U)47afyGi9ef!px) z@C1ZV3JeRDnPU$^`jB~Qo}N#i8VgV8jD^e z{r(W%(O!6YXkvdUzzCN)13F_3fAV$HHKcl4&d5Uj=BS>u%T~uv@Kbe`pdV%ddk2h< z#lmmilrOg~i@&pWJ`zZMrHc7>QdLCApn+X9whkZQ{Whf|JksO!+$JBr{R>8BKj6#C~@$Urm=mS&qnoGW|y%$n`HE7=Iu)1IaT_b z5Ry3{P>U#!CEQa2T8JqnhBLD1;6VZJus5Djn=*qPYpNAZJuL53m^ynVI)Ob0nSSa& zzTYw;f@O>YR}z^yET7*Fl5Tz4u4OWX)84~BOho4UgtF*~mmf4ysXU~wv7)i8B zASCfuB=8@SLUximXp;WxB=f&XsO%I+&=mK-$wa(+tY~;>vGu}wc}XKMuwshhZNvhs zrP2wC=7WTovotczMx)-P>^IT$R;S`tdB&u9HrQXSm#Lz+NK7tr!}@po*X6JOmV0EU+{2kz;CuV5v~wyP z-CwJr}(-*Wx zzqWFOznijfMM0m;3(6SN!8f;?r`#l8v+34^0%QMAe7S84A_I~a6bb9S_Y-~#2?-8i@ z9jq(Nh51#jI{*9N2XEsm&ZynFJCL-@-)1ElWQqQ|_NF_~;=)LKwkPy7gveb%Sk73) zyWg#~ClB+e2vJ%bv=7#wz7hzwh zJDfzU4Dk4Zs}eI`_A^^dpIL8{NdWp`D9<5EsSmV{)`)==!$E3sdxIzv#SiRNpB~_Z z8OwR!uXOZ9)xH1jy?6gl8X%A_6+uM1E!tK++xYQ(e`_QPnLn7suAMCtBT_P)#`n52 z5JN0lI+}rFztkNgTBe)**z4wwxPTK0SF}lH*D~JKO;uTz3?dP)oT)IbGW{AWUNu+q zrpx~y$&>1Z2D96eGar5f*7x^P$pp)=x6SrDD=k$|1tAsGGQQoJkH+49_1@q97e2RZ zQ2p^xD!HmJoaiBo?cms1hCOx@R^x-O)KeGN8Gnqo;v=tGe&cS8+4cG4&hPHFW{2f( z@i}}`rRF|o-usMp^QiC3|5CM5^G>%$bEJbovYmhTW~yF)Pmt}pI9llnz|{WA^9{bZ zle`-kes*!FPIEDzY%a-O2KfT?{pk=owA{#@>kD(RthfXuDtjEK$Bg=R^r8-d*t7v9LwmBL2y0G@DQV z^@G&}N#PwfJy}9ON|?Ny`i!iWz>sB%o*c1Ns*#?iRoaVpF;?lO&O=ri?><(PJkwgA z21)G}ZzLoWhT3h#+?8t(5DTMAbmjI|l$RvyP1d#L&vI=iWOihX!YyTBP@w!Bo%b-4 z#|o|KyZM69e)=+YTi7$ssk4b#@xSM+{uhon`aG7d4G(B#71nnmkLrmXsvF0(95Pgv zHn(b?idXQa;JkU2lH7Se%&TWWlkvK7SYX7lXN#&tt;3PixJ~GUL zsmu%vUw|T(#;O0IKG|HogrZf-a~gc|*`M?tI@AL!Hg~Cd2rn6`A3SxV?jr)q*(vTGMf}b)$QUJWQTsj@!iMxJX@f^UlVc|HU7p0(}$0e+}0> zqTm+XMybUJCF))@vdu>bFAe&|oz~m!SgtIx;{)2TgFXDh~@>dls`Cz#xf%r^ABszOdN2zcM(JjJ3SKRUQRb zol9KDJ1(vUgFjxaYg^@Ugchi+#+Z0*CQ5GH6`4Anq1eWR=TqBZ#x2sRzpw5w@@es3 zk0jhEQ8?iTJmt2LpZp}gLe-HCDmu2kmzVB%tlPCsZfzd znNReCOUo_RxVn&1be7*IlbE@#Gb*#zIPq1@9*eAUO7@iH4>3%oTf8AzGG)*v`=g=# z7j9y6DarjmW%k_?0}qQJ7@|Q15_g!RyG3=F7g$+9Ga;&Y>fdUJINze~)>n|=3;?!ywT zFiUL+x0Sl6;g)8|tK?iE)#MzvtV=@#Ql6ON-w*cG741agD?Lm2oGP@< z=f;}NRYMXcyPj*j=SVhDm)%bYw3;p#@v88y zW;1vfJ6mnS;h~%jKfVLFPhZt%WULH zmyogE&BgpRc2(i866u9oG~bNlXDz4{4tuvY*Bn89Z-FBVCR@9YYFvUDhbn1!TM_)V zZixYJrtU15P#*^9l1P8;YCTPqA{M~q{QT=sO~?8k6QafpLq`~)03Vk4>-=hl5DAYt z^UIv-0)CUehbVF6zt>O<4RnQoTf=2fjVGzv^9O4jKEkQk!}S8e;V0)~Tx6JB|4{a8892I5i@PB#HVJ zrr;ozecvB4#|??WD^= zd3;)XT>cE|;Wuh2;1QN%S{?Q!oXUByPaKCldj~W>>RH?LC7;K-*z~;9=eQ{!Q@zl# zRRr0-ipqB<*;V1~9G3vHD$oM=H1L;rm<<6KiE=kksif&t?y+YgBXB(5cX7H{z$uLrheUBx@jZCx=_Fx$~k zvJ9A-{4Pafq;D_7I_SI$6LhRr<->LNpuOkI*pWASL+DvKk_hR#7Qw47!)&h3ucOfo z>bXEM?RfRz-?@4F1a6L|zmhBe^kAGE%Fve+Rr)22*3&Y)fxWJyPBCb)k!4|9Cb4-4 zDonu63MJ84Adp0^!CuM}>}@U(_%mRZ&&o0MJMnMZX6jaL{Jmm{2pD>32b1Eh5O}o9 z8vfGvhCuadCFVZLvBtW%^Y#q-rOn#q@vQ_Ok$HR^jKNRZLL|VF>j5*p-4DKW;e

339wZb|I*HNpT&E02{8T+Q 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

EpMD{=^(_ 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 gJOUsOpurBd#XaLq)>j04E8a!0SpL^k&e! z&ZXFjqJ6qx)^fDVoFtWcnif6L5Txlg4Hz;9qu9ExfWcEzl1J8%i8IZT4F%Y=#}B!5 zUy{`#uWvogpOKaAmwdM?DKVbr?GN{h8StaP zLt8fdqjtbBfId=C4RVpkDs=f%!4<*`%e)zxx9`)R;mwOWn(z`e|D3`4N$ zk#^!Wd*&_Ef8|TX)TgDx64GG+A7v89nm%#D7MP@{n3~zx zdrr}}o#MNlVrOPAt;}8?ccO9=rZRI0N1ZPpa!%59PH>n@@tsRO;hg3+m&P@j)9*Q_ zI-uTLr6uX~mK1j!vOwAaR68LTbD|6Pew8^9S$M$3k`A*3s5WWyln@x;T$mtKm>`_y z?jd61A~Mb5y?z2!u|8i&JeA1eb(2f0OrD-*xtx(nA+1lXu#u@{U03P$iA~cYUGVS> zMEHkOnv?YA*gbv>tM|)OE0l%Wy$uZG^a`p$P18c^G~KpfU?ko+`1TCXkL2raFLD^k z%)N_ANY~y&i-|(6{kjJR+*}jQT&FZ$hq7IV&$|LKt|LbmN4i}{%Uz$2FFtc{Wfi)P zuP=^wyG|W?`Na6;$d>EiUbo@D+@8v~J$G}Pz4vmW+ieW@a;8WICA-{xE&J7m@8VM#q-%ZhveTA3>{6EZn&$e`!s zR=58yv4x0-Ws2P6qu%9T6XmA~S{dCzn%j(-Jm6-M(gYOmbReh?J?)18p}GRE@vIoB zW1Yx3V)p>UFjK5tNMUUXe-mefrY;(s6#en(iPGl`HjOu_S-JmEXRz> znDy;{60@)0EcTW2`sV8X-s}I*xp<*TU-Yrn|K(hK;&QgSaMbEjDltXwO&T|o^d?=d zww{|wy1)8{n@N&;o2B;L|NoW5)|lp4>{AqQ&?pzV#}Iq={#tEe+3J^fWf7<5&Gl#Y ze(gm|PjeHqh9{+P+{A20aVR5iY6vZ~LIF{^*ud55g8lG$<3S((3AH<(%W#9qB)hfx z>Xv(^;Q^sG+{A3l)@z?tjooT_p!L-9sJ?%Q3gjB3n?%!p3<1yG>>o@U%U>!US|uMP z8W|eRcb)pwCi#?B?>}4ppy*(mUWAh2IRBo*_m(^42!RV3-^BTVE^=Zg=aFJ?*Vii` zw39<}-gtC-BWyu)j|;cfEuuqkfavDUkP3T%V~DvTuklQ0YYfVKh&hY(*K5P|_k^QP z2`~nwA2(nOrV4Luj#TURZH|(Ll)j9qMOl3r*LZ*H%Tt~2pN@=ic9g!dcq=wXOlrZ~ zU$166$n=tlIymw)%m!yLW2<~SvN&>kCQp6QO&WsnzKR3pfvj>m3Z9MQt^~2#wiazH z_@eB6T6O6tNzU##_obz{Kacm^$!N@`9$9ENlrKum(AL z{}rN#%tGxyM>I6>Bkn0yFB2Y2XJ}hm0zE4et`hmyC z4b*3634XU045hbba%t@2`fmk>|E`61)Hyu6gsd)DaArP!ogGZQa`D9rG1hE3t<;!5c!p^MBJg?1jG4TLF=m7=f7(nI~dV`aydO1KgyU?v#= zUt1#Y#vlPnv~<7>_w;q-u#sZ6l>cYykRAZGCH5NOV@%o&!7ipP22NA0vK{^OTY`uZSu(AucJVX?o~CITt@MBw;Oqbkv_hDaUxjB)3% zuT{iD^}1sFZ5LYSr~{_ViCf9mHQ4zCas##I1Wx zR&C4P^Qwo3Pkn3o_AAS~YSMA6l274J@h8h7_B{DMRQwsT(Hg>otJ=TpaWfzwAgF`_ z>{_Ww+$rbU=Nb42vm)7T@Q~5q#KX=Hg4ru+z7Dw;hc7PDD$@6+SxXr_PolR-H}ji~ z@Eh2^i~HUgSt%4FAE!SsxPa&bm|-^!e@yO-(HC^jMnjd#tRIdg9l^*XRdV1c8vDSaE*0 zL@)u_w8arQo9y|*G3jW_fB=w@mzmNKlM}~Fjuaj};70Q9C-5|rCmmjiRN3q;Wx?dW z@{q94>C(U3O|`;;mQ^QdVn1V&<*Oyce6i9@;=F(1QZfGW9BtnR0CD70LZhIa(XJpg zG^5zi^$nOipRK-RgslCX`zdf)V39vf_l6>Pkr_#Zc7!*-D-*Z~Xx`XbV(Muv()E!( zd>{#t#PR0aWTh=+i~p}0tfl(@T?`S~0AE3s!u`(Uv> zWI0{__~ixmR_AR-N$wta78jWR@tJh(1tE2;HvjlmOhgx~0XFV|hOgkICb7Ae}W zF{P_g8W}z1w7s!X8)2biQ}tPws}04}Uz_m*z*M=w6>N=K2mX8yU!J1T8;iPO*j8ifPT`sIK4)xkGE6bwtHW0ADO(K+t{K49FF{@8}@L2J0tS%FJ{;~ zc&^0u+Sc!DdHiSsG>tFdo4(bLtYj1E^>Oji&=(36Q=I0nln=?f<(_}@KXK~cSFOR@ z_Yr%Er0Gihyw{>le$y;2D)o_gY}#DFLNa}re`edUlLoIquQgl+aIcrhQTE`cktB`5qP9dqypktqlAP1TAdxA>X+rNWXUwJL>~5#gg}CBcdVzC#QA~Pqae8Tcdf8n1 z_3dncQHAu#W^3^b3V=GY;5OngmO1Ea=-p7leAr&`?EcFXD;{8b}k@HhiKAaE_8S- z9a%z0Kcr*l>G&UXP&kiYGw+qNfFw;|fugz3JP+H9^Yj6QV?p6H+#*Zs(^8&X>=oIy zJgAL;ggoflgIlEMskvw}w)1}M+6YX0T;T=>bmp%-r{kWIanb>}X)BI7QYgBN29&X{Zdg#y@1Me%DzY4Tv?8Y+?#TCtt)?1{Kyz<-_o zPde&eNE9TY_$?LBO-_BG;D?$J&m;&=E?fbwh>O&5O}OhU*Eo2z1>iyk7nJ-Ct;a-3b7 z9fGT-V!k}#x@+i83ObjBxlI+F=alwwur(p58s^nr4m{KxeI3MI4?&HR5m%Y02{NvX zg&bjE2_H~1+~5rpd!jGplfOrnGvc6z@Cdzpo_T$Og`E%K^$kHeagc^T;khi52NU5$ zLBvz=U0e;0&3zj34GA~TwdO*wom>HrOPi74+5d#Xikl|T-rO`D8U2cd31$}GW+KYS zhh6;&8?ly5@I&3`shS@~JE(>{;g74tK ztD6vwftXYl@;(LejErek!0u8I+1yARcs0BkbCJt=>1Uch1as#3M~{K@0PsmOc+~|R zNv$1aVtHnRscLTVNSOgL74dA(Pz#%fut`S!|ax>eeE{6v==lD2x_M1*9piFKuxZ2-|i&$=2YLpvV3c+UmKoaAy+#FT}E1fth$Os3| z|Ki?A#D!ku{(K`hLdk{fhPb!FZ|)gl7b(6dGQ?mmGBED7*!`LJM=00b-_=K807u0; z0P8_!&^>1^COz@M`A6H^CgFY-);g%A-9I0yU!S3ZRoCY-WF3tdVRasCFB!aj5!(x% zSLYF?Phgdr-SDBZPavn2dmw(%>n7=#Z$#eRgGXzyotiZ<{Ct?|JI>cuV!OzC5p z0M^*%v8*Eaaz2`$j|w#5o)hbx#_>i^FM9>ojlL^|B^hfw(29%Koy?D5mtrP zegVbmYtv!rny^swOxaDjdlap$0`J^?N~KQjJ!e4bqJ?06?}icrIt({syr0>+>1Hd#Wqy*&=#qn#~C)KusKjEX2r5aW!<&V@>?4jHc)yyOF+f&wh)$vxn7<$b z)2M9Ax!p>%_6PQt+BP_*AopcrM?T?Yu)0{`G(`BEb@dwS%QM+5pDXDHvzWcPnrlL3 zq&CRQOuW{KXV+TZ-r6VgeR13B)|yr!WfCRTvZ!$A<&Whraf<>1d*VO#3#_z^!tEOI zT00TmSUJA4T0fVE9=PsoXD^y z>upxLy1XvAfBu;Elv%6I45w;&6oHVGP4uz8^27I zb(WY>8sp*%hQ-Z<6f~ zlBweENJ8#`{dtZzzf|y>8_3g^`nXqIhmLPZC~vt;WaQ_U={gtU9kW?t$)_uYOk>4k5vDH*hrzcrK$6){O;=QQ1 z!^4TvSYWG^SH4nZ02EUSgWnu_a=2b=bcF|@Ozc6ovk3QNSqHMMWX3)$5&WkUoJ^2H zKZwX9u`VA^pyNGjCi8LwI1GdiTOa30&WInAN;S9gmAah_-y8plSCNsd@-cya@#|ah zK913$X$gfu2$9y!hU~9oCM$E;d=_77RqbL4?txNhhhaf}Gg4}BLo4yy_K;{iXSewX zkZJ!RxdqQ6NLIU-ZM(xjXmT%C%0|r8t)%T$eOZ?iuS65={#c2<+F`_hYE-m{ z3OoEXFWU=yyCNatwI;FoCU>mrxM@(X#pJ=ol_}BBIlR;Pa8JoSk$a%KELHzbNvfFW z_>CVx{qY(Oio|)e64=K>6-aw3U z+Ad;Iu`MgBqBds&X<^YwER7TJ+~-TUy;*TrsvfHOsfVDRap*uW><%IK>Hw{wiEn1x zRG?uMZ&lGJ`rbK3bK3Kv9ncCt%1$7h^t8HM4CN2^Pf|8Is+BNonYnqYI_mV0`L`uQ zySH-2^*QNQy9rgg&s+M1SOh>VH$DE2vZNgEiLx6uZn9m>h;i)M<=-imNiV@3m0GYB zd(SbJqwr){Qzb?D1rSPNe0A~tnglyy?>;(DwigkK)14FKkD(-!X8Xd5*s^L)tc-xk zSVPY)1QK_@p8u60Q*UWw*>PO2tg&w|jRiX>)Qmbk2iaG%3O|w(iaqICDcICB;L_uH z+svU1{G`dx+Nmb0&RwPNBnVKMnT{E{<*>|JD82q274z4h6h#s zB)C&wsLKky_~0}B408bq0%XkoI42L~pZo7%!z#<{M_$@{gJV-DLNeO3p zvvJBA$*>RUvS0!>Fki`f|Ib`MI%HpV_Yj$5b635jZ$IHMT+Mk2NwN15D48>ov9BP! z-k-DoCCJb$Y7U#6=^NgHFb9ixa_p^^{H56m$~!i8<)&t_uYZ~n$*2?ik=~`@CsD+T z$ZvXI88?_6wRsa2IJcNyfhK?6qufSVlrvt0#!NaW*PQOp>3e|N%T_hYz;|R_wLLKl zS1RZU)i>_Lohk0S!~@uZo+HkpeS?3B7Z0sFaQ6th55PxL)wvr1 zVI~R4qrt1+{8VGUuSB3MsW2OM_#^gFHURuOcx-|zLj%AL<5F-7rjkrpB@%wWCk!)? zoeX3ZoA4{-#Gwb+8a8TzAs^qX0R0*w+Zq_LdH$<4~*z>~kb?Y5>3gsPoyC(^Zp{cT~bp5Ou!~`M`s) zNd0G_v!IST&N&zsW$`E3;_!AN%l4cR5N!tFhC$o_2^SpZ!QYSn#3Ado^PM!b<(VN| zl!;fNL(XsrbT5MXJ)7&hY@7al$P#0f;TEMbnNapYWH}X8Kt^Q{(QGn4*o)wqk2^z# z=`wl4u7saYlPFz2wdXnFAyMrQ3CFFh+K9$~Ko76hV>N>OC#MJ>C{FL_2u;w!hvCN# zljq@XIg{Z!Y&&x@%#v~NbJd009CQa6+X(=yCY1_mXk06bK_)QXY6o9Ylp@;MQO&Hr zq~3Ox@X9}Rc8D;+L^Y8yujppGTzA9{{gIRL+T>hDaVKT5>alzdVTgyJ{+^QbsfvpTd{ljjPuyu6*o+Q}IM8c?0u88U> z_gzyk*cRW}gdJvMPMe`xYf(3cGlY3U-x4F=ktD82%Auw8U++o!IIO6^h8ui2c=kIs zHyS-_uRI%pNo+!0Gey%lt|8Eh2>2`j zd?Dl6Y;+WxR6@kmlDWxRJXg@D^MI)UXH-b4GDp0>O&+_ies$j!r(KWG7O<=ZME&$Q zU+>7bxp|Nlg?-1cNvOBfGCK5J5?9Sa6tTrFNKAp+3D zL|c~`+-(5m16ou}BYv<{gDbJ!B)nZ)aMu%w#XkJ=FiaNx=rwW~y6qae`C9PT^9xKa zc!4{=Y!XmlqGE3}{q^7u6Th-I&xZ^%C!e(Dz~U$UCn(AWQW_J0qJ*G2z`zwz;auao z&`Eigg3uvD?L1I_$b_Yq8||{n8zhxw4!S7?Wi*1k$w<2)qgd<5!28E)W>g$+O#5&w zZr1}983Lz!_*_`_S&odWN{)UYi95?acV-Lb$BVBDNr|7M6i@o^vRuEi@rhxIPxj%K zSytk$5H(OiLNG>Wfym9(P0{0ja?o#!P)|t4D^7E;U@ zLeWqtl+@brAW5Xix~XaDjTpxbI6bR|#F9(f85nOnBcUYv3`qX&VG$PKv&_cmt=J)E z5Z~IWE?W?9Z6BPVpv6mE{xAq{*vMg02yMu)q*A^IKtnTdYsM++XAd=ydAn?(_sq{| zX_4Puah(APY1}&dx!MmlJar#5oR0CHMSi6ikycOtpki7%wWMjv9}ZT~(bI+ky=HM@ zO7Pasgmz9qg`1k@wN2!8fUniSc9$MsW27GOMfJH?Ert$aUJny;n=<(K9dUkwze+*BnZYZZHlnw| zNHTV6{}*rX71cx={_O^mkPt!=niLTN1SCiaRYDEDL#U#n(xizRs;DR-kU|ed0R;&~ zK~xNg3Kk3<6*UwE)K^0l6*VAeKr}o5@8sKS@3r>&j`mu!=5!8b=6PoB`@XK<-IFs% z+5a>w-?HGBlGB$6@JclNKtkmPU$0%ZeM;0jm7Yxi&ji3cweJXdl8=~;&sm78@{9!zr2iA}2nxATR^oD_<1bm% zT7$;VKl&|9?cOlX=txG;x%)6^&_&knOQ5V=e8y8Rk8F&2POR4xJhYZ*dI13Q%hfT+ zF`VZ~yrW34P4pV)v*;+W&L6M`2RO#ouOavRTvRjemkc6Fr0`++Ij1sZp)bucwRks@ zEZ~!9!itvBvWc!REx}W-=U02^2+FU_A~-d+qPz?%PtpMi5oeutD%pCxt_nq1#OB^=O4d&_p2@la$ zJx9MvFg*3Z@V$DaBl0g(Dw=Dw=nRTuTRh11c-p^vlq2b~)A3%a&muFE`e<(}>D+#y zlH+d^voFEvT-oX+bdEnY;#Sb`ugZL3xZ5Hig>Rl>zE{t4_nt`oB4=X!-hCkfpF~@o zB_gQx%GS_UQs7Tk1c3%D3oQqVIbE(U_=j^C8y5v4jQqj1mxbF}V~8_o`_EPer*}(d z^TBaEsRd5@0!adc3N&W|PxBDl+_*R*SjrppZQAZaq(L@!pE0WM*TNAl?#wa?Ug3NS zyyy9!F^kP`DI1ihnPSY34Etd%Dl7A z$RaM`e8MY!QhGNRl7fP!%DK9wMr)7K{%u?n#YCVSs(zF9qLQ3D$M>HFUAR+*V5Nk9 z=ONoU#^=Zq+2p#Sd%8mxuMbW(ex zecy$!P;Bb_phtyf%;&*@^8)01j^xn8=ieG5Ei8^sYlYx?#3i!A?JAf{mz_IN9 zofB%Q_xplOx#T(II0^bLS)vDh2^Zz_iw}JZ=>9h0X>1D&Lgy(}BP*W)@mydESNhll z@h|bk5fKMt zJa{hB=Ds8vWq4+~Gf6V7*rB(M-#Fe_zV{xIWJ>cX-McS|BiBA;FmG`qjkOST^zL|Q zZSFqgp&h|S9AHZDDM2`LV;p`9kX*3V>3aSZ{djVdkS$*44YWa-DQSlZNs{1O@R#ZD z+$VgR?qECl&$(+vb-f}Z^r5m1@WU^G!7Ph^oWrk4h$SwR8QHnah1Qp~F>7bhZZ$dN+tLsX(dC_z$pPS{=XH1A29 z@x5PB^`G5NYO8wA{f6<6{Lq!b?3Ic`7WDB6aIft;&fSc6uXhrNd~dSSZ}*LhyoxfL zBG1|S!ag>6v_^H7H@9Giz*@Xpr@u*#2nn<}cBe4_@GliHh<1L>KFKB{rUugYRIaEQ zP46<(%T24t$z97t7YWxuPaX}!KdNR|^!K6KD+@+k0u0uR8<}jNv6T)xT0mW79=w)WWv&Tf#=Yo zhv@hUF*Gv$wjoS%DgyB^TuOkC{LDhUunr+S`JY6d9@P9p_F;!;$v7t%n<(9nlPZ1) zZ{_5bvMw3yIxqAgmG{v<3AqqFTl~y}{zmZ!U+>y>)*wsJnIATP)&5XzjC$XV14pQN z5=TCKe?F`^u%RchhsVMK#*hH=+28NGk4=3Ke|%B`o< z=T&KR5MT6paI1R#{3(vA$%Ov+AAQz5{zg_W~}f2K;>j#x&& zh^|?#i;K$}Qr+nwMlB~fI!M$UO_!mYb;8CA2kE+Hi*jEstphJaQuJLbLk{#(6_0Xe zP3ndj1aV1C#t2g_>)C10uC3_A;rgR7;_-J7PtYPwuqlveS!y#?2*qBV>$vHo)CIfH}VEqv9X7np0M1 z*6Soo8kudbODzVi2ArA}W2vMxDTC!*Gq)rwA{+8{W1H5xm+Qh>(6dAsd}JVLp!d6aPs) z>41#e^%PqS!{^vl4Xp$1DtNjY`JJ)Ce{C;IsinSVpL1pH*T+89C?S(S4Ny#46RIQg z^N!ZK>weCa0jN4q8v`C}itwNC&4zp@J?q#?OagDV;MiIOUF}cDBgU<)j(G4cvgy$q zLbYs-Zs&tpD^KYQ8BZjv6WfP%9wv4xy|qA@aV-bc;x6Kc)t|fD`e@|-JH1eOeD-Z3 z8fvhbO;?fFtErf|bp5jFU6r%46*^jDvA$lgiJrX@>ShzhvEq8^i< zL0tXYsO-g{P`ijZq9JOv;DJJfhyeX5L-tUnh z`r8gREsqMKqaoHWDL34WKdJW$oOctFr2H46)c=e?Fd=-3g2=wVAk>vGW6MYuCnch$ zTijJDBT5fvG^l@_cQY_7E!w?KFfpof!qoxGQVtob^IB*lTN;Shiye92mg(LVGS_ya zG$hT)O18@mt$`Mk^+;-*^T%XngL9*Ne;0I)c(*4pT1)+XgOXu2w1K}kuW};8QDKc) z^5M`JBd%1Wg_VINKXO!wc}A7FBAcTG?UhX*kSK}PkRoPIs9iL5vv@gM?V5O7&82rx zYl#QUl<8F*Au3zl4AFcsowJKO%`Cb{znCho9m}hdRSW=JP#6eTq#vu;#QYBf^tvtP z@`z=+gLI6)vzz`;x>eYhSMK0^f0KG2twUS&gj=$^J^_Y>hJrirKcSAcVGMD_Gbm_d zqMY32<$>Kj)k9ghsG7MOE}P;Z(gCBh=VEbT;p)j(Z2}hRs%Bj7s?E9Q`wytUB~uN$ z7D~cuG$f4B6m8x3wucr|-LI(MvmWh5{n(gSvs+R7J}J&UJJg^w3vj_iXEP$}T9udELn<{$=`W5TZ1DY0NE+coH z+yIue(_>?>lLD<=xq5p1(^6!XZmQa?YS%q#Ntfrh=hduCsF;_=`JpvAE&^RQ12unG zOrcXy(WaZeZ++4EN1+eLz{yOi&B9~MRWrFXH}3*rJ;U%{H0mptj_0rXy+~95%$|K- z_|HLl)@+ACij4I8n-+y3%*M*d>yCO4#1QBBTFS3WsYXo>_$*GOiuP8miC&*UHnTDH zk;^mt6&dN!6>-%MEO*Oj|2$7JrR1Lyq~6O|x_TRUC{Tjqf5I)=_te`7=N)F)EneO+ z+(~rGvvp!*E6h8!?{%R7v~Tavk`(5gOssxs<&*7_`02jBcYl+^e8r_xEZ5X);=q<% zfU+i&5~4E8w`0yi-KgJEzC*`-x3ogh7~6>a+GiJK)d6{@-HaNBXRSgjrT7ypU!C66)A}|M6$&921O^s zY;A16j8#R1Ic5NeaSPh^-71@nDl=T@tHEq3U*}NnIX9c!iU{9yxRWGXX=F|~D=CUi zJ}@qtfz!F)LwLj|M&&8l$NVT^$qLh2K1RnAW_pWLd9r|WyX|UqcBe1x{kZvKi@tMG zj*3A==y6Aea3uefl+GyipDZ^^a)+d6X8GCTNa=ni^Qo@QtYnC{>H(YfBGS0Qbn`#D z#S-y6H^imdnb*4*I(io8 zmh*f`jh-a1#9N82KhP9q#eB<-Pf@))QhUK-tfNwLBP|sCL$!}zYLj{Nv<%s!T^Erm z47DgFHK?3%9;KdTwB>;)$e@K(sc45mvj{Z3xLO5n~NSfBuH-nBa0)kp9oHL&y8e2&xg|! z03{(+V3K8VAbCfEBPD)$;0&k2Q+^~HcW=xYm4+~?T(fxI4=TWk0Z0$R9@)Ol%dR?sE zr>qpN-u#}Cc8pi{iWM|l;viXKR?7W;s7 zS**H*7Z&zv47Iip0H%~TV&tR|tAoiE$pp(-G8LGSdw^d{fR-Easngk`xdg9+A~tBI zi>Y}drA30ohHY-So$69RSi|hM#0`l~nwG$10cK41`F{&9JZcz?JOyDFPlU@rVlrg9 z2?ZPRO`;F5?g#WN0@#Bgag>Z=%1S3+?yHwCAQ0(Dxr!_vMIm&gbAp9@*p|hk{nY{n zOy>kB(Vue)Q@Iv_?+m9%#jOB~&Sh9v`?D;RtemxU8i)Ri0oNq&PRG6a5X1$avkSUY zz{gTy1yV0iMR92Q8}dka6x1Lev^PID4bZ5!XHNnFYX}7mIu;mQexXh5*G0S07?N=S zfGk=}B{Vx=L?#8=sMZHbVM^zO^$z&c6B%B54d5_R(TD2tA!sfeC8ffpW<_(cR|EX+ zT)E#BaCc-plL5_dq*k(w4DaqZHak9jS@kgIQF9+%Xnb_S7|cqZ1{IBgLhoGMoEh{@ zEiPx5mb4mCi4Xyns|?UN!?yz7A2aKKu}rQ_aogT>Q4bcgaS1S3ULmjbcxJ zFRnqUL!5kO*@8i8_?}uwk}ps})3Qbx_^KDW0t&{`JJOtftSi@)06auS!fOj2^g>d} z)MOIo&rO;uSEgHqF@smZroBEzojP~Wd9C~PDEdZJ0bAd+^y|1xr~vd4Nc9wG{>UqT zQKe-(@#?I*yYZ}eP%S+r5xy5%(|5C1c!q~h0gy=;F?BX*Yx_;Ob$I}@qqB+;kD8&| zn47guWgMNkSk&f{2+o4Oe95oO~FIzyYr-Ro)vN(BX2gKnYXd9KkgmG1F&)JSx-P z-KVx_CDUSCo^02cA7e{yXnBW4n zMtMUtMUSW7a2b-^1$tZY<`?v_Bb) zEYA~hm8_CZU1cAQnXz!1Fxs6KNdl29A)*NQn7FI^dDKdQv>&Qm4-FQOpNJ<)LA#sB zcrY*pbhR9=X?aOt(@~nB8St5Yf(8BxBW4Mn3;px&rTzDt`Z3*D@m}yg3R~e6r|;DQ zJg{0iVT2YYcjV>t<7y&AKM0o3p~tbo7uq4=nfdX3RNoq<(6Z-&2RZzwhj~0Px_|bC zGoiQNd4;YaTMKEAZ|vlv>HEo`6IV+vwtf^)XO+Ior4t~jRr?u1w!%q9C&RuuiUZZF zRQpi)^}zVGLo{iJyZL-bGJvkDgaaP3{;{%iVG`bYlNMwN)P#c$tcLV>sJ13z{yyGE z;)yqhirJAL3k@&Mn#V-hWXrf6WpuGsOdNBT!AjaU+rF;R<^Mq3`sP22tKZ+I$8xA) zS`3;JT`z9T{E-i>#b~SEP#Xgi4mjom=#@C5ilPN~7xjh_+FCMXE50bjGPmBQZ70u{ z44SowSqzb2%2hMcLa7Hiw3*pKynjn(7bv0inwzd0Q>o_`iJiiu2e%Y^aUo}L5UL(y zpxowCZO!Z^J%FEEbNvus-mgJJ%x=S7rapY9V(0=cd#bQe`=K)*@7cSxURm2qWffT z<=<#a@yUEhkNc(A7FQHS2KjMI$917&tlOD8$|-Z=uNyvOr+;a_ClzV|IhRo_T3KuX z%}F?Vd>k#_lJ?r8-+PPl!jXQ0A@Qvr91|`P52EKt+~PKXLII5(4kZFH5G;yk{D zFAsd}WnvsT*Da$YW$d7BV&Q=d7gb9~^NWqQ2^ESw_s22c{{1?6f283&m+r|%M974Z zTJGnM(8DZEuQO@=Ff-a=x_3*i4^PQepgGN$e>imP+&M3eJcin(@^k=%eTH$h0UF)~ zIy9nnRax<=0zHZ)Q54GPT5HWxlF)<}C|Kscw`L4H|B$i_{FM@^mO;z%E_*c%4iKz( zBzzIl)G@>DKB&vOAZc%-%JBb=fq@QO(vI%<{=P4rsicsrQU0}DuiLugXB~Voa zXg`-;R`uU*MGIk#XOp|M`y*tDiKrQTClOjD`Z9?kQ{#B_L%K#&ta7|@0)R==!!0WE zLIbUf?ymqb8KNH`T{VWpsjF?N;W8gXXLR>&kPY|v=Fu)lmbn}=cWHSTZAK3vLrHwy zxGD+jOAy63euZ(6^EjGLH~1V8Qd-)LZIgO0DLHYPYS#to`63$TH-h#~879 z*(C(-h$1@Ynfvj(anJ9K{%$^Xut}74b&KlC2OV#Gt=4gIsmn%$poevV{CH()b{CGy zN7~+mB({EqKYsE6`Xh@)RZyx?BJJwbRtP(jt2##e$r(<7Ui?B*^%emALzQO@-$zu@ z5(Jp@Xu2u)Wzh>1%z60F9Tg1?>hI~DEmPYT*BEaSK#x}F8jI8b!4W0w_2coy4)?(U zJnB`bU_ZOW!Kl~mTf|92x}TrRy{uW`eOvkhX_Uyrj;#FMlQ{kHiSTrtMEv-G`$bIr-+|SwPd8uN0Df^6WliS>rDS89 zf{!or)xOXGtx3<^PBvPfx*ps7fnoJ)@XXJ(&4zZ(p#qsBo>;HU+aK+ZU0t3%ruZ(b zC+z~xzcttAK>N|>Ykz;n8d-dyf3DDUg`h12Zxyv;p3~)xwgqdSCT^b;+Wp(!`u+2V z<*OrV!6X?Mc`sCwC;mB~B87WxIbURVCwyFzdMPNN$nJC1geP`1DDb7_njp#pX;U?l zgKShLxO1--z#))xIf0m#aWRk%c&~1b>Aw@0WG_!KO}4(lh+-+O)pwQ}(A( z?ag^XP2yyeTN!;%jhghMo~d_?h(9yvh^8>Gyp@Jg?OX7`XSmnVKo5l@q+Sq!2AHk`gFaU?c(SgF~4dqzO-M_*OInhoSrN2c}{Nh+7s5HHE*ImlTu>6 zNzR+V4^}iHl4szp@V$Rk<3l4>24YHV+poadP6(I9y(9f+x(y$Gd+^8b(dx4sZ`?Mv z%kxDko+zMX96HMAzObs_4_BBv9;$sIwZFt_UNxm~_kX-7L}asozfam&X*JgNn^|5( z@e-%+WnuKi{nwr%uorxch1~j_u(n^A8@_vrcmY*bydWUQ=BMf+@zrJpu*k|yA;j0< zPPEf2d#XSS()$Cp9zo6rw*O{Yd#(A&~(u5F2)}y6ITWFHRiJJ5dFW^ z=snk*v|VDD2^pr|c5g_UC7kEz35X;ncL&4vr}w#?XEg2y6x$b0Sl}03|E9oiNS)jC zH~;irG^~58)5IsDT|P=FAlD$U=+w8S2_#^F{diOsn|sj-{f{kRF8t;_%QL)mU(RB6 zaA%gy+S6Bb+1F+j$ z?8b7+Lr7Li93eHRiPSj)fTHtCFQSy(XuHE1V>NO8Wm<=+!NotrxQtTiG{L;iFqCHJ z><_QEjZ*C7400leul1>3)rykyFko_lS}jFB0mgxnjKg(V$~j2zkE5X4y8v5dNRoofHC4IaxI1 z8^Ra&!@RkK5(UYNx9`SOM!I+SzX1m_cC5n%w)H? zy5vUvMQq@VzJTMlm1x2?JK^VFO7_-2F(P?@DXuE!*e~0IqN>$s8n?GUy>R=Hq5@e0 z7fg__{S^Z9%@E&li{PpsmNdmN(NvD}ly#lES%3a!gBdHbOY_D@Ly=oB1V+{rc@oqbaH|Sz z*+VaK@NRy(rKD{guCUr({&;0i=M?_pn8`Uzl)_i8TT$y;Nen5%?*ut4xQBA-J397> z>h))MmK@yewv7Bg?(+4aHzl1@m(_SJr|^Ppi*(DKfV&y45yFO2X^YvXXdTTH3d#P3 zkW1^@X^OxHl&=U%AL$M!qd>v^M;g zPa8G$zs=LSC-sP0Wc0QnlLb^<=hs`Ry(*Z~x7TFqds}$cBYt;5rDKUH@;w9zso$Mt z^*zJ*<&|$gZwvqa9@bHOIxGnD#ir&g5#F_%J-=YC3TQ(91i-C3``7Yz zy1Aok4C;gi;adwiK81C<=zip4junPwA2#FGRk3^BL7^twkO>sD7f_A?Sl7A0E;5~?3ryuI z7!kdLZ4Sb)nkG6?-)0#G%C0?sbDGThy(j&&e2Z_e-XE$NvQKqtXCBeVJ7X_6VF^y^ z8PA$oy>gwjxseM_xT*Qjz({GHi+O>qr7)tac0AG2Gs>@c~2YXd<>>2^N4mjzc>Ff(_S9S+^xdtkBp^uT1#l z6EhV%0T}lN+3{MZ;jr8<7-j!XU>BF6u-R{E*4LCr@2=>RpT!)wb~WqJ%pHYy(gGKF zAxD|0XxEh^x8^3hk>gH$=5naI=WdRPyOvoeUHJaFGP+lmDQ*S;R+A5;aMAXtaO+|s zk5usSkg{)djL$j{I0rMR5K@*#BjH!B0B3W2bXf8`D<;y!$l|0c73dGo9(Cq3WBw-n91qW6DrtBBQ6&UZ8w|SLj zZZA=>p8t@3Gzm$@g}G%YezI5UCINwRKy27 zN3k$xd^4ax6I>-fLPy31o6Fgen5`~orD?pUR;-2RkKDfeYP(;R z8!yWzP#wS?Ge{Oi9lzpRBrk(m7gHag9QGZoOmA&|@H|VJ!#K!+KldZ zTybYQhSq{o2ukry%zvquoVnQ(gGHw(bnaFRAS_L_a=!&xQ!e#SnpNkP`-0s z7F-2(tu)QvBuG0K&1JUUJ8`TA$BSx%v<}RG=O8V{FR0@T8O=lG*5ctd*k_v6x&sm;6qAL!Bd0~T z=CZZYpzd)HYl$**1^VL4qN|efzDI~t(L-w*$L*Nnd+VJcGvap6#~;6s9m#g(EY(Uy zwymn&UacrF*p@)H0b~en`LhP0gG`bLNs{3MQJnO|pXKciy0D+M8hJU9|Ql zWA=4u4-aBq4QZb=+5M0zdCEkW-m!m@p13rrT>f+Q@m_Hn!K9(srAV!n>BNjV&=*)4Fw6U)aV zj^aPwjrghF_P+n>;l4nk9xol#=G?EnjZ#&=cl5`RVnL2sjZo}F(Q)& zB)h3PKPqxSRequ!#)ln==t5xQ+w7~vO>zgOekCQJ`hDx03xe!QTF*8Maxz{PH*f|< zZ1<;Z1MPMD)kofyp5A-z>ZJqQrdeVG5)e~=KjOR zeFiKKvr@|igHf$d1~WoF75yMaWGnW8wJmsNB-uNM5zmi+J&4v#P

)+y29hqTZ6%B-ayff?wXy! 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%0A+( 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 Q1VbdIs;`1F)ulKz%>tWcsTOK;q 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


R5+_)|xwE&OVQ5rzNWioW`_3d_)uW5NjV zifqYh^ly-hV#6zjD`U74r;|2T4$Z1%T z``pMs)-LGrSi}j0C*cZz8#CR5PC@ixB#Yo|f6-Tv>-u60{+S3{l#_5g?uN7`*>IY9|~nT|1c>~ z?dkQvw& zfr8Tm(ga2vVx`wb#Vy3AN79Yz#J<3^XtyL8i8TY26#g2BIg;d8!;$s zQb_j-agsi4+H!V5;4DcfMvMV`2n93RfD= zGFD5Evp8!#2z8{X%>X<5b>VA?0^|5M>L~ioQ7Z&TT!v- zFiJ?k6lMVdvl2ks=BGGiVXBZ(cW`K7u<-FPbP_Hay3YMw!<)ky_O+H65G+~60+d5Y zY}q2TRih3PXvS_@|Ow|wwo-F{Vr|=+tq)FTJ|EtwyI$$63j(k~Il3dLD#XCe&E!gRb zbnY&l_f!b=<3v1b496Fepv6ekm)G9-ZZU$4yy)U7zyO5K1b(Os|2w8oQ5!Fa;C|bg zAHy&CdjKlLDE=J8x4Z9i&E}wo6x_TyGq165cpk_xzL>pH1>^Uy6hEASCNNe} zabVe*Jf_8nvmF!2qO&ocWBFzk3#P)4Lebq;=`7*86n(11k5ygaGxV zR=X~z3Iy;LMZ74)G-{QdA&9Lv@Kvr~xu^@_(tuoYt9h2j6W5DJK$XVL1plq`=cfu} z-Mn%F5v=u&g4ZRz57r#n$dORH1f+6o@AIgs=?nX6@+?DF?D^nezTcEcqq=m#I$yy; zcEL8p5#H8gjm0Pqn)4t7Gzfj)OU^zKa+wj&5Ncd3sx^pGtlv{FaH-0$(m@t73KTOQ z_<=m|?3=ZzT24GhkHqA%>;nf87qlRp=F;@H&?|}1UueH7Jt50MZs7`gpqLuVmm_BD zUFg^$S$wdqq?6pXSI9Jo4y3gdA=$?v2IdPsr&KyM1b!7&4zKfflyz}xmQm=GdwnQ3 zn_YH(BIWY|7B%B>7fP7F3Uxk491ZaFl3F~w?i|pdd`+xO>s3hmfElakGow5^zC65F zh5x}Xjtju{@tk4=P}reuiW+3X!CQbJcuNb?2$(p92AEXv{Oy41#qs6Md4AMukKRyg zj)uPY4voVrMsM@Wz<5^oR6;Q&dN7_L_N=Kov0wgjl0ITb-*}E|yMQ8Q$xa3I0oy8E zNJtc>#=s+v@Q`3&#-W*R&FHL}pL5-?sks?Iqn=V&iORu1OL+Ryml=CO}MMBK0Ne}J5n>vh!|){rM+iefFJ|fHk);* zwEL-PN$@(4@)0uoq3Y1ExAqXuP}N@vS*MaFBRQe@?BglA8G3~SW~-q6cY@JCAo?a- zmi{kZWqbZ9s>?kv47;8UTX}rkflC`u(9?w}^>UXmn#MNBiq(njZSja_5(L-#qzHuZ zwF|p=g*)3ao?WuL09#m}rm;PD(gj1N8L|78fmNMK>TC~gamau1=0Xe-14jJ1%6oTb zxy>5DvukQfe$QN^^pB!^nmU@L3EcHz!p-b3pJ=*g&J6fxM>!CAA#Q+(8HZ{zmkacZ zIjKF#B|b$%Gd>i;GYVOm!z8#65XnXqbM$j)!x^$8_`yqPdcRqE469}m<~uApAS{ti zh>;ysww~vhp|&7|9!oFtmI8|FjEYZwLnVR~f1=L|4w3*od&XK4FhE)fyO3Pmi;ZHs zvhm2JNbOsqm}MtVDjQ%D3cKz;w4VfZ+=k+Q%Y6i%6-$kd2`3FdmV+kppGWiF2;q%`FXQAJmZ$LS_gcPO(lbSYR&h2G0)%ir)ZzC^)NmZW>|QU2WRp)Ie9dy3%4F1 zdX_liD9OZMZv%5wUAGhRf=MS$GQ_HRA&V)1f`f`6kOJ1?&{O+65 ztnn&eZ_2}myH~M|iEutkh}YejYxpeY4V;N7svM5ssN0ELq(ZykD9I?0U?SPpO6ik=SZ&$OJ@>=Y}+}b^)F?Wf;Swur7Dc-)&LN z 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 mL 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%0A^|$M$cZ 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≦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

+s_{8C+U=x?M8}rzRDj0Ju_8 zGIxFzmh@JJyS59mI`qhZPrQstp+~?TsO8HnwrH6U6>m_&tV6=NYDw8(5vAV!;apG} zDpDkh-vZmj6@-tk&1ZZ!(;v$@n{gWXm$8k}WF1@I4)1xC$!xnnR@GxUxQcSG53cn3 z+!D&M-r17hmE|XuePDzBOLyMLGjCxGDZpQ3J=|oe>sDCYH@*|;K3TSDm+1OQC{r9~-2^7SwQ&ir!KyFb19R*g?i*!} z^EPVzrgL9~JAW4o_Zh<&?F-j1;<(m3Cbjn7sr_n9!?bLyU^krW9|&{IKg7QwBoXd# z;f$%ZHmNtm0ekaM(4i4`nv`f`>+-RN9d0+p{JtfX05g#*w+xL2;9)`lkL&SkHBC^-0g#@&KnVN{F z$Lg9e;CcJY#tPC#qPT1KHhi;9vGHUhMvWwn;?!T}YP{gC- zg2xsnYwZ%(A(+P1udefCBn$Z~%q6#wTAxV|d9CX;^-KeM4yl61!9B?sf)!>U>cKQn zbo#W9UNSxUHjiMP`vA6KxMjd#x%(v{IXdA0B9=b&qWI^-t~OTs1c9YR_FyzsJ;f_x zB>8V1oCvY4ShVK$&{Bc zy`o-P3UqUF6o1y;r0Od(RqR*bePZPQsohW>|Sm*|AABP z-sl}t0zuW(FD=X;ft9-zR9*i#B9?}iN?{usIUYpC6I;ml#FIE+?mow-^+FW$p z*EM+pi-qizu=<8usDHZuqN(<`uWOhl9oG1v%dh9b!9hS`GEYBcaks|vF?CVvz~Gpo z;gB~gzs-#ge7#vg)kTVAyscNf9aP)yby-omeDRFG@OxSwigR$BYWR%;)JImipQkM~ zRUKQg3VA{WgB{77m3{Z`+C;{S}E&3j?GRnp<&{}6(VvJKwk*@p=xVx4<25OFP^AmODx zc#(8+t`^o(mx#89+}z*Dif4tfO~xp&8Y*%$O!l>bk`gSB3s?wq8XiT}NPnUkzSltP z84^OmjxXOgR62(dT9vW@^U4JpZyT7aWpnIm-o$v^+&eTpdfhbW?kU7p1yFnG4u#74 z^WDf_^g@D+0A|64eL^sO)lu=;tZ?&kJ2mkQ{TPT4kpY$NAEaB^*~A9kLmc*xN2Zel zqrV=3iO#?k#Il5lvlb;!sF(h~SP6{+5#3Q_4}H?(~BKYd|E!s!}&C2_AvPhb_9 z@9*3h3A~1IiP=JWpZM$Ulmig>eon*%nc;Rn6j72Ne8lqUnms*}L!4NPGB8FSg;Uzr zOYF`3J72k8Z)VJ&xzFjoW(A(atgQF7FsSD!Bnwkq*|HxRuvVYX`#Zvce{+_ai!Z|O zR}PbSeOByB{lRLT@6#dzKhv$amGp?|Jlio@#a;E%nh&05ruCn$_FOrD={;=E$5!BN zW+3qVil57G0y(;GKM)GJujBOLz_SYx*p{$?Om)*B7Lbc;BdNc;K&E9%2HECB%mz!s zP8kgUYzNO}7l#IYqiZ$lxuc5|B~Kwl>#=#Bx~W#W5HI`_DGf&czV`0v_i?3{7LC@^ zxtFzhMeNacDck&L4o7G~p++Ih9F7V93ZKdDy+?UBq%iUw*~D8Y^%q7m zS4a#(qPy-CLSvLRSdD+C{M#uwDX}%JXu;2C8_ECg1whM-I9JP{q?Sj>)}UO1F(3aM zvB5n9nV-c#OwS0eR-kPuWrHoFcN_$EC?^;ie|Huc1^drHhj?bbAdq zrKAvXFzVw1T~iSqWOWc}nwN&pv25t6u06ceKgMoLTaLFMHONcuwHKLKkZlT*eDxf+ zHtntD4Ia?X%7_~DQlGP>mBSGlwxvo(U9rcotHV+tllyr(&UFsg%eY3zYJZS{1Tmp+ z@^#!p_r}kO4U29fVrQ(_H?p+ZZs-RF%pY7v=Z#*t;E`5qN{8P87~Df9I)!o8##Ebs zAfTG$)~voiHIg(Ydh`N+7y|18Kou(7KLn=dnVI+-Ex<$fX%qX$ka!`QL8(HIc!!zX zgdL*r5Ek|B^Ar_hQA{=A&cBxI`@^@jynTy_B*XL#a{BS}nJLnj!IcVHmJ8p3SWfS< zCGc+&_xiQ>D-B~EUk}fDl$e-&)6)nNOXuoG-6Q2lH^Eq%P`I>)`r zT<54haca6L#7~UDoKofxESf_KO^`3);Nu(1J_y%75PrP?X2Ok--4xogwOtSExBDa7 zRHx|hj~e~z=pYXUT(jQOVvOm*su#9dCK_h1(_ik^AtJD|>o#YO3hYsL!SZ@?yfR?n zv5DdKnjCzB8RJ}- zE7qx=mk6hntDJ3eF)tkeOH;`xWMZy|Ok;bazccr+Oe%-aHj$!xL^s&jjGTW702hwe zh}(^kkAWgH1yXBoCrp|ga&zzsOd1>ddFrGW<{wh9vpf{f-PaLH5ZfybAw3nu8cQ+*Xnx56ff>@Td9t z>GQ_2u(J02omVJR$&U+IK6ih6A-&g1cQDWHqzL7ik?OF(0hJ@n=@)}Xt1_WX6VMOk)sM9s)hFU=YdAn@kcpT-} z3Y`MW)Vjl@!y_xpw?NAHGk=$f#7QOQ8pc1{(vFvbU$YDhwJ3tjJqe`P&6W7akcr31 zM;oe$1w4@8vk2Aeb(m7+3;Qdzs@J>yJAoI;>{pt=Octfnyna;al;F^d26!31&$G2M zk&jDGSgUH1ZEWs_X(RCQ4PU|#7YUbT#jSVP&%0d*J>ckEInO+MN&9zKj~IcHZ|5Vp zz1~{B>3WkIcwaa}PRy#;y)*2l_m#jE`9d7^j-8hv}5_4vb8B-B1Get~q1g`<5J_3~#B@pn_+cw(*ML}>=T@Y~L zQs6h?v_2NpAz3$M6qrAHI$@olfBiT@Xk`nkrcxzPY-i812B)=L#ejk2lyD7;0QE13 zw8{0B!+AFa37NEyW%(}yMxdYbXhT&~Y^GslQ_kd&!N6c@eArAYsBSVe7jdS*JbWfC z)hMD^9Fli{w6J}x#5yPrS$IX4v5ul8ZVY}I{H|#-=K5)p4pw;UOZ3{KPX_^ooPsxV zJ=bk55{A5|2RmhlA%_wQ@BPwzu*ng8xk^%)7ihn{VS&09T@b6HGi8q0BMFTI5hj#0 z9ZxwVE!^lfVsP@@@>Sws`G;j%YSc~H8Un98G#%z-JBFoyt=v3HlHLs;w7$cak^@-PVo+$JCMZr-oi9@@*X`Fw1I{Dw5&z-m2R zmPa0}=~jNC51!pc&G8UxbC}Hckrpj( z`ZHAR#FQ$OH?DHeW)1ZKN$h}r9p?>Mw)Z!(mt_rt8K*6%CLJpmrGR6H>5AsT<_-A2IReSsJ4>{-PM?=E7cYynIblEE zab#Zte~BfFwZRYMvmSbMpC1VX-Xd$PRAVrh2@)VJMVjYWmnIRH`S$}#_4Ev4XaayO z1*S$KTw}=J3qaMtR);!v>_(|F!6^Rr9YKezkB|$g@uCfNn!l?ZGa3V7FB6}eESjUH zk3Siuu(najMZLm&;QGTHn_M7AQ;UaYkc_pzHldjc5iuvRz&9zpmRC{oP%cs(&UlM@yh4mEeLaFbn8ikk;kZIifk{l4f;P-l5tqnh$|X7~tD_L%JO z_iaYX~?xQF!nNFQ|tLq>U@U3l}JqwIZQF{Ea3d0kIReM)T7osxt z^3X@JBbWB`noh@wH0Hm1#*(qpW+ovMw!?n{DdyU?tGo5BWx}&Bzn-&xb+#22qeC>+hsRH+s?cO!)T*%aM z;PZG4&@Zz~B3wJ_{)gJ#aad_Y^AChp%Q`IHYV^@nCH)m&_sX$tf4%FvvvJe4I;N1S zsP865mNAcxym*tmu(koHh9VXAdwP4mFZ>MmiAc$cv3ISN{f^4RW(6m|7z``8i+0$Z zUH`oQNY+rimqTGfLLE@#d-EL%E=-DQqKE~GP7yjTEVv=Xa5>|FvI!PC2E`jq%|>mU z7J0(TaIcUC35sq2H}&7dF~q24=+XR7bE#_k9C4xG0YekY#AlO!($#TWNe`{?Yd7b; zb8awRcZ=&?PKteWl2!=X2tUq*#5*$Wb6FfiNMmUd$bLd6s$;n@bAN6Vn_UOjy*0M2 zoPN2J(qH!T=|#Z}KKv3spfvQDVoMWNR7~}@dAe9~>XanMQZ`4(X1LFPsvU!<5|jLd zMNu)x_*=Y!^$-+y?OH+7|>7c zi@*!MIt2G3$HvwLvXFp-VHq>0U|DgIRwQF%)mTjAXSOS)SLG+gEO`T)u z8kThX&Dq-Z$8GBjk)X*Cx$5c&2P7a0Jp5h!_jyX2@BO4zOF3{}*bW|cIz7cq%*WNb z*`=5+f8zB6Ygz^(>H6u|f_3oHf<~C~1{zyiIr0=H zNn1=XVYMYh+Vz}*tF;IU@ess*^JRAcpL7BzV*Q~3T=pT#C|;jYfJ&QAD?$4pFOTSR zFvL^HW5Y3W?AvDZ3cno>C{Dq?74fh`>%elYp<3_r_HaYw-$?uOy%wn$t>V}Om_Y@_ zI#J1&)D{2T?JqozY*&jR@fkl+7_&_aRd+AHN$deuy_>xOTIC!#34&PZYAwj+8m}#B z>nm)Djt#@T6*F@9V18rCTpvi$Dk@hrQc-~%ba z908ND)y`zbGKAY%BXxb_Y;%bqdNsd~P$iyh0QG!J=D$V%9t~+*tbRRuGTMaEqHb^@ zQwe3h&cNCTxlR=jlUfg6_D4|?>^GXFn=Z9^A1;zER8Z__=XZ^)fx48`+OUxpdFOP&@@6Eys2aRvszUIWM^U0D_511}2&rmM2I zKgP%E&l=Wm8}x3rk{0eR3YHeCrM_$Nj0hQZYNjMakZp2|to{)Ug)bbBojqHt2`@X$ znt|a!Nlwg5mde?bKx0Eva~pA552!{yX_2@v4PY{2!u;-1{Wb=B^}>4Xe~*~W1Ew^W zr=Q#DkuJn-v*w^O9_ohVDmT-|QNNs1)%7Uy(Mm}2n$)O&&XZV!d#F=Ht_il)Rz%wF z5-`&Fu>Ic0le!W|t?Ne+4WGDuaMY=t%^pv)fi9k(vOR}~HiSeTZKa~GQT5bFS3|3OHCRp-x(ZpudYA*`2 zHeQu1NQ6Dl_ZDJLe*viPP#l&1F1WGhN^AEE#6!e55PU?1C0kjjDD}Y2ucqdhnBZ=k zAWeUBkxycHx-t6Q6}HxpX2(5Nc8!e}9sOv~x<`9H$eexwKPj_At1JF+ER~ z@9*Dy)htyxW}C5%pgM64atn7_Pag6~xCB%2JrE@H?>MmlvSBy=y$t#VoT4O`{Rk&Q z*`X$^aI>-16vxuZa3+vkNpdDt_^TgNAu(GQCG?_kg*3Mh=cJc|%;QlUox8kO724%w z=CI(w|E2%utXKbUJP4#DR{(<4*;3`Rg|~1%YpQ(S@fgcONoL|Z|4^#4xEjpF-9-a^ zieQ(+R143w$KBOt@Y)UZz8T-2t1e{To^At#>6!e`{T`#w^{{b&p1c_WF`@M*>UFk$InZrU!1mndwp!|F5n>@vb7;Nv zm%HxJA7Nnic6u+G*?ip*0TO$8+O>MW6b)rRQJV>@BkbGW*E@xuj_j^h`+p^xmkB;a z(w`-;N%{Q@O^8CdrD;#I$mMfAIxWi=_J3*GDFjt>3u+%A01nC;G8^JZ6A=B3%C#6C ze8Uz3CY_rLjD11q2xYGc*38Tae17ZAe2RUqGQx7^*cVbw`?9Ium0zVGnN$>77xh3U?!lk8YGYxcW&6SQG3 ze{TRk$vP&$EpTa*;O0guY2cDqFFQ>V3(=>yXdpZA6bUI_#P0P1k@OG9>6E0*=^urt z{%3U(xk!&7D)uMffWz;Jz-m~!T8vPJFrCz3yLnrScOWe->9#zx8sJ4(yf=NT~L+sOZD|(zC?^mp^CGYcUtc{wIU1bkeX`HI^0@ogcZ-j}VdYYGZ zj87$qGhRnWrp2%2VL=3@(>}4%1NVX>-|ROGb#!S4@u56{l zE~KYRC5%-XcQqJ{h6$R1>w_(KUv3BA`>SW|ndKv#-T&Gv{#HEyVLyK)?ebq~cGX+a zA{Gce3E39eX&_q3+h!APsn9p5@plknY5{+8#fsoJ>8W=^9|NT(&`7%qS8Ov^eii_K2Iou`BAwa>){>gURi zf%}sM%zpeKm%cZ9t?UJ=O{W$~=Xr=z$KIB&>!Dyl`?oR@zd$flxA+tcx>uh*6*8C%bnyItv3r&qG%~&dGZgXo!OdN@?p772^jv9ca)K)xp z1;_GF6NyWg{tJh^@;RZfpTtxOOl@z_$}^}{QGTb?#fha0!9>f2BfU{B5AyU+HO*I@}`0H>BzSx$Sl;9 z{f?K8KTmGYHou3pv84Mjih7SNF1qJGX&ZI8E1Y;`diGrCEpOI8Yt-gAc?%O~ZfonL zH9z(;_WZ49b@cs5#lYE}Uuo2&_k|%6su&He>{XG|Q$5;jSuJuX3`}tF&-FqxvEK3a zX8U$mJHAAF%uVmZIq_;|5l21ZbM$3{@?2Px=4jwsU#D>EwN}PdroMwpO-qjchWh$9 z<_+>e8xdaO4gHNZ?_GfAd%-%QJoSK>AX&ia5AXPit+A*U#e3Ml?77)?AK^4`GL!JF zOqqiKX(lp7aL!LygpZGY^S~$X@y`#|dF=z>xqDwm{q%(}XU8pK9I(_f%HFhSpMa2?Dq%nbg@6*3#C+jgi) zp(8rqP;sD;9S1=b+%zSXhrUCg6*g{ufHQ5q)o~%D$%h^pD9_bi8YfwARwp) z?;$jK}+nT>HX%t^MgGe+xW*-9gE$3Y=%^HF4ZxE7tHM5iw|8bV0^ z#89QRr!5RqM?D+egp!>kx{f3tZO2<7PqvbkyvwYc|yNyp!5o|m56D_U+PSPDg+x~kIS{D8x^cC&jm z`Ne`wo^t;g+@62kBA>P;9Wi4+7OFa9p)nRab8Q27~$dEiex8cMhcO8GS z5I7Jy2n4GHG%1tBqT}}AoTO1t|4;3E5M&K?KmX@roy~|x6BUpIKl6*<)rH@n%`DMB$dD$G<^GF}i0ydA7J3Ou0mX3hVs zn($to-PFXA9a-Qg0#^dd=77qS#887t33F}~uBwb$))$tQ|90?a1EygCA}GRPL)-?x z8LH4Zq$yM?mh%QA@2wq?(n$rt!OK@iREAxc3U1?z5l6&|I9~|qT{eCzO0h@&jzQKE zTxQW>{|rl=vf+y++MWmxI1@J07An@nTAN%Q>5YgyooU)qz@?7P(5Cz^BVsBXrkhs5fUSy+kAEQ> zB;9=4W2oHgE zw?XTEUZH5CS!gblteZJ^oto7TFtj5%_F&9VIKS+-8;YA5;FJx{-@skFO;jy{oXyK1 zqfszT)9BkYQ=t)0YKeL^@b{jtjT-Bj{p&?*k6mg9|JtM})I*C!iR_aTn;+GD4L#i!Rw zjW-h{!8msp#nkW4qXgx8tbxue7AT@tv6@B@6m&S%2ns{`o8P=jJ~QRmGfPmUOj|q zE3>KuP@!?^Q6S!D(V=Pk{&@>6^CzA|ab;e{6+W#04wZsVdvr{!9S8alru&k$wTm%A zw&M~<0TZ~=*^rmfj)=U)y$S=L>G;$V#n9DMcqhy#z6_Hm; z(wEUvT*D@ThpcyKZ02Ec@D4}5p8G@r$LB+yw3WD_W}RS`Ou^GV{6scQCY-XevM`!< zKtBNjr9Tv1fL#qp!8C(1&yvw&XZ5L&?>04Xg*$yHFaEz5AehHfHX{NT;x9)@xcGqS zTPae|Z75*Ts-tICjS-&;cG1YAF;Nx?5;S$GPHob1Q*`fTMo!LAbTEI_cC7TSH5kXK zX;#s0VK>2I4l$c7&#mhtJb>dJg$Nx*xlA1De-w!67sc-vPkG5e|LC0xim~V)5gz>x z5_{K(iX$?HtsU64!8`LAnh@(e(|Bx(QOeN3ijU_o-UgGVCJ~;5n}UX7AYOt9y@fUr zwejb%EmaiP-siBQc{)lr7*M#f$(+$H4Q&VU0{=Yl4zAuZ4Gj*4XH-mR%&5JV%5D~( zClG2kPVU6VcX`3L-smV34IlkRehRo`RgiuPHNm9HF*7D+fu0>Gu{JQeKTPF&3(zSV ziN%` zSE@YN=d5qAjnX%MNdI!KjCftwYhnHv>UorSsVAQLO91ii*HcPXw!2Q54`4W%nGofE}hg81{&X1INEHwVKW z0uTx}Me+J&PnM*1pJL%wX$HrRCzO?U&-7*Uy>@G6E<2_6Kzv3`BQ*ToDI2(dJl+^Q zSw|eqHsTsz-oiZn?^su+Cuf}lnsAUZ(3YS(RyKRg9#wjTwY98FZr<5b+a%6|0eVz? zY;60_cx=HLpf+fAg0+X}y-KSxgV7}{82F_re@2OU0^o~Jle28;{F)uVsVTV)JR-{7r2jK)>6b-twMG{Q0+Ce@YuziKcWzrvo z+4f;qr6^#d*&qKtf5zKDDQrOw`7XZJf^WIy69LKo)!46-Ee~8mZET|@H?i!HiX+wf zYH8nQjch2i;q*JZLvCW13XFtsX*FFoD=w|%MN zU79o}QrmE<4fzTko*KLe^sKxrBYb0|BB!M^Br`_ZLr`Z_a3c*lq~TX{-Aw;Vli7H6 zUH$p5@U&D_o^41ASxMx_Ko51gwLYd3!i|1=V~6qNdYeT6@h*7q0{-n@Y^GoMqLL4Bx?bY zcqhZhN7Svk$>W+p3+|o2n%;GK&+?)O%69G7UTb%ehp>Y!9ao9_3(+Ml3$YPs+@WZQ z$DM6v*@UxsY0Nl@$dY@4DU3cRi(!{MTgx1$9a=Q)`sJzwty0_Hyk8z_9C|)9u0NKq z91`p-R+=aFJ?b~5oCQcy1p-n#TiOqO-uHSw=Jh@g8dINtDDvGQ?yN!riK^jRz2-+F zk+y$(*||gvh+__4lV$P#^W-!h{gwlevu**BW~wEvN}k_QrWJrUB}BOfau9~Kv?^{E zHs;v^f+=X`ras`m0apsvd(;XU$wW#7ww4F{`nRcorpSGv!pgxj zO%PP^J6xW)i6)Zn=hY~^-Ld$D&E#X$-$Ix?{GwFdM1t8~;Q^w#$Q!qzf_9Tu2kz`x zX-c=>znhx4I5{yPU=({A9XeI%4(^||Dy8&%O5#juU<1^#EXc@n6BeYP;uvnBT=Nh-7*~+jvKceHX$X-D#uR;jy5J8-$+c) z3)&0I4l@e2RRmKeTtH&Ru-*GBIXBbB6XSegem0X+Vl*x2xxgG@N`~YEV9-V=x;SjG zq+OUsxgk0G^6Y!eZ32+wtBz$deO!$7yvqOWaCXoo4baf?|rM^0GiK~QqR=fh>u_xgA~HuAmvvhx^1_DicWeIL7ByhDCg zzfr|9B6fER|6?$I&2*H4Vj#Hs*Bw$cpI$;a6(y2t=ooY|UAK-o0v=IbZ}|YdbUB%} zOn<(-QS7xeF6oNTEr^rt+#80=RSu~wZX?QG z+T4DKIbQR4CU1$Bc+g>C(i0cOIJixLD~jJtoyk!yY1Q3pLDu9(XeGH;*dBzoUC*4u zvY?93i?-Is9=G^(OT-!>=En|_iW*PTZCFQt`5GQIMz$Y{&w}%IG4NMXH{em7!upYUHtS3VU`%lJ3=IuI zAdKz)$m=9s=h9TuXpDx@qe79-=}IH7WxX?g7A^61E!Zh)aWEIZijT6-32mn>jDF$7 zYm01`9>3G(ANRF+@kXT+!k0qM2k9R-KQ;`7qQ--+kI(OwE0bftNebNuO$^@#HSX+jl1hjc+6fjtP!t_vy3<2sgr-+ z!d|~@cI%mNcdAl7i{sv+%x$(f)GWY!6Ua;RBocm^P48|v`>X%fU~cN(MJGev)q@c@ zVNzvxwNropUh9btFlw483^+^%fya#(-`>(uKV&kf+T&!laG^{kLgbv-)LDP81)@kL z3Hf_cf<17I4k&_&Vn797M5;uogVES|HPIjxtH3;MH95c1BjS#OW1&IVa}b5CeT7$3 z#Q#I>+QNiMHxbE>2cwzUK(rg0K+cgq@n({!+I`m+&bma!_cfeM#99@GqLVN%FC3hn z-BxlW#u*V^dgKJmnu19ECW|p1{PY&t=t=haeAp>5WzO5_%rti95;j>Ml;YkYT2Gd{ zgc_u!3Vv|Hg(v@00u2gqssfm6skDqlt}XI0#VoC=i;Pqo_>}^i!k7k0jlD(eBm*Ok zgh?*VlF$QgZz|>CEW~6qmd2ZP8rnvxCuw0MJ7N+9riUE(bN+vVall{;%s>t}RG+(he*Y$d3O?`XzMh$y zGWhLP570t?TpSkFoQLCHg~w&t06w-SdKWyT{TOQV#Hla7JVuW<+b>~fCE7FL=sF7e zXKN4z`V$oY4ma}y{bxAupZ)bz;&4xg>_U$ZX@8hy(?E(?>sO2%sH<2l*ZTYgI5Z4H zTM=>OM6AhLHCPFPHiV}yK&#GORlySbJarcno2wC10?&LbECygR%<5g>fSm<3BmsA+ z&ZW_2+d(tY z9Xc!QzT8;ZE8!o7eVS~htmPzrTpcO|%#NtXQ#&DVY?%aGfm)I)_S=|>bOdMlk1u*# z$QEQep)MaCK{%*nXOK_bN8ilnvbn5Wn=Dr=Wr1mWX!qZk)tF~^Kb)z zBIMq{^kv0i!{dJ*B|vP9xDv{o`|>|rYSDz7jd+~4mm>5`6xJ76_;Ra-u};DV2cs^} zg%a%}g8QWteFncs3QWB5%dR^s%TnQoRK24K&PRu80S`E3VAEGzp&42_9RGqjH6(4f zw!ca4`AM|yzx6+TA|j67m4Mfg(Wo9`tV`EyvrG1!BfC+K^MUsE{NFcs!od5)h#s$FlHKUd79rVoQ`~5r1z9?- zM+YPSH`tGtxqpqcW^qYhzzr&oLEbB@o1OdbuLv4C5>}7|e(B~ES(nHQ#EE!nHRsC8 z$`INIS3o`;pe6)FR4mzc8TL?grRw8bU#0HJX3{=2iQ(24c;Yk&!D0TCl)=lKWL(Qj z+*yU#;J1{Z(v-u4_7;V@XiqU^&$c^wz+sgigU_I)nMPP ze_|m+42@T1Gu0k#YE?I;8G!;Pecqt;VLRPqgnZM1~j-pK$=Yqpv)~x^xFT&|N(2 zW>M5m{)PX*&HCH7Zyp{%pK5tI{gLRxw;c6yAhVM-ReBRAEx21aVUzPE1WO|&!I697 zoVLc-t5%PGl9d0H=XZiYw1h#rLYU;tX60@>-cDU+T&UJc#kZ~p~#P_l1x%miu zJOiqjEGUZor5ww}Lq8M*tgp6l4Fh({K5btg<9Uf?PPRGN< z)ONYM9C!3h{$`w~&TI>bfjeR2QFV3etotEcL84`N56ezHt zy#F_tWBueA`!fkquhgywoqZPo_ZcvGpE`qJQD@G?6H0~UsDtV_!BcA>VxMc~fcB(5 zJWX(PxN~~G>dl^@q=tOQElO3@1n|^#s|P%@_$Qgp$TmbgazD#`K_y|7_*#DG9DC}Q7&3pM7URGaUmW5PE-g;$v+E9W|TX;ACbt1Pl#D{9M)jl6fLNR^0MkN$bDSrNEZq!32BfY

tcyIWhHepe(1Lh^m;)JVECB!0C$-?q} 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

c& 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%0DalC$13Nd>P? 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�^5>Z4$XDL9C#GB?53I+XFHn3# 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� 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�_&9rZ7k>#!I~neINb}+Xt_CiE&rM6SH1eoT)UTnUQd4k8FF5B z07-iAFI;qE`QNHEoSgx3t?gcgutwmsfEHH}x&`l`f2o7Tp4XJp^RqI%L}q6n2{j4g zhiYo97pj&35eNmPSR(g5LRY$R#D{W0Xv0b^cbOt#A?jaJ-G5y(f>mk4989Yg6^*CL z7w^_8-gA#~bxJWN1TT>(|1`I%GIP*BHY$JX82kzTXHWDQsNrFyhoTU}pz`K5%hy5zy1b#6*~9 zAb0egz^&8AA8E>(nTg5V#wJQO58i6knh_<+bi*r0U#TG&w+9?3uyh1>C_Kv}^F(JrkcyM$pNEEwWOp7OjQW#oN2Bz1;_* z!kTE$;BJ7&$|j7!*B^d#Sf`eMo+F4L-No)4CyrViP#SA5jG((RHdRBByf`P|r#AJ+ zz!|`uncv3GUDHX4z?!O?c(uWAgO9P=e^}Kzm`xI|zr$8UVBDq}8E6F&&b3ZW_kWR( zJ%5W9VXd5xJN6Mf>E*K7`RHBNrT9cIE00sL)OJe5U|ZosZleeiF2k%i4*5orVT5Ss z!DrLWsE3H>-}&~9^wii!8uJIWnmVcsq4ygZTF%5k0_9JgMK_rW0yykI13{btcN54LLCMHZk15gP^KZ)sEk_rvGw~aO z01|49e`wZBKUudtq4ly?1lBp7*~^)=Hy))+<4J_V969-B>x*~3@OSuf6H*EnkxVjB zp_V-&&g4IPuDZr*b%<-~xmEmg@7de83HGQ@dJx)GdejYqhlt!v&$n`k5DdlFPKCLU zwn86c%^$qenC89@qCNqbCwqLFjg$KPo(WDw!!oouXGF7bl8P>dD5?^l{hc?B95Tts?_emA?!1RX z43{QZY~F;+uJ%1QXMxq9m_;XwkwSDnGmFV^v4qW!-~BkZdEFoNlp0ZmWd>m6Pcri6 z$mFrzVEE*fGtqhbzduCY#I9juvg znrqHCeq)TRcK09YV_fU48t|Y&n+USFY7T&xyuIDs`ExY2H8o+gpWyUK(kOm2cA?E?sQY*t(MVdrrlBz6%g(Go^ee72t=!}y`+3xFQ}rMo ztvg`43YdAKVizeVZpFBaqr%iydRhNR{a62_HC{3c5qka6Bt@XK`zHz;lj@>;Z;nmH zcNngCm;FYUSD9^DjaBJ4rCp+EOrN$Sj z%sDt+mbNteF+pB0uoTNrF76#x3RNk?Cy6eUe;Uf`O~&QA_j*!8oH#t2#7rhJjz#V* zT*^;!oo#1g(6BCi4lg>p(Q#)&-lu}lXcom%K`nafyBSBu;QE?&`m&bM+={T7%7@Poo_E`cTipu7J)S8AY**gBxG}Niq|+8_;In3up_H@JW++E` zajTrkf&0<-Mbi8t55%ZK8vkDANS}(ZSgEC2Wf_T~WBKAd+!%)3hu5K-{%ZwYTdlHy z$Kc}PCMG38ef-9S_ zFIzi1SB%e&Aencl4ThUmu;l|XaRx-P`&!4>?6Q{2E0$)+SKyHK%7qo#Ga+eUI@F) zLdG~5bmDb{z=M0`0Y0gDv^gfd8!_Amv?PB&xE#d{wB*q4(M7G(Q`|1Qpq;rNAN|=D zp4ECN(H89o_>XVTPpS>1Cw+#w@(K(ifBpIe<--gZy%ZF{oPSx4my`1qcJzb0>=w5O+Fi4+eLj@`K{rfLKjw&E9Dj~6S zC24^toPPguncxKNm}gvR=N%`?^Hr$D+Ja7=K=wP_NW!_`FSE&Txs_q+fU!dndf=q8 zafMw1ssNT z^>t1j9uhWRi76QId;mC5rQ=yROIAT90mQ8P+E|tDUEeIhkskUVBlNhCueBANLi;V7*_?E}?&KpR(Ak?}K zE5k~?xw@i)&ua$yBbZ8FbrEDch)@jO+B`eZR0it0w*`MmBW7ri{ZW=$c7ZD4XYR;q zYT7$PiXv8nQN_b~vE>i-zJ;doOYn4w3s;H$k~7@*{&8_CK(eLIky?!;VXb!?qql5} zOy#O3*0g^if`0UVKwOS!mLQ{5KrY;8ly$+K?^ySGCc39!x}U`$o3hMZ#wIW!s6p|=d@335M47HgFWx_*?P z-OGiudv%Q0gUNDn=QWzCF3j3$L(|-i-Z{f-jmni8JhF_Tf~53=eB>r~A0{ z$7o38@@&a+)*5;eq0Ek9|C^iRxZQG&HtD=<*~@VI0zY&+$^&2JLRRj>o|$aPNNj^h z^hn;TNEZ6PFH&Ewrw?sdoc|1Gij9@A>N6P@JNz(KTwK-um#N_EM!1m0p3_gE5s8a8 za=b+TJ6;DSduQvzY#F#3c*ka$h=%SMtMMG^gZsBCeoRb6ZXSJ+Y^k+RKDA@r1-KbH zNkBc}aRHxJ7LX>8@!;ILb&>&V5-R@(Tgi^mLZ^jR+F+9f8Xfov=<~8MM#@;xK1$4C>r3 z*fx!6S$HzYXYuZF(=WrfC5vC3e_KCf6RD{>PPnRg>7)|wow*4E`tJ34a2mQ+en9KV zpxqB6#_L!lXl`bAe!}A!b&CQPCM&xwG?LeHIEa;l@b*``d}Wp9CO>P;8XX`D@q8W# zW2kOkGs9$&-?~j)S~_2iRpdGLA_hECawh{i(rH2LUn5bZtFTy1ob08tD6z{(xvBm1=$Hu~rw~h@zeI(Lk9u4zK{(ogv4c&B_pqw+eOQL8X5F(C zDPtA;ivD~Z?8{XKq`hJ_3tmjxTc!zYWX@+A-rbQ0ww+IXiM%dzVvt`sLK66%3<}i? zlgcnP8|)~R1gOn7E!^vUUN26duRm8LFzm$dwzU6EsN;s1e%Ztud?^B)*ztjUQSW)pMV_EJin(6|$`?q7V4=Dc2Mp=r4;}{ww;2Fa=fg zZU(Nh9>Y{++e3x*iRlCGw%Z_L^|E$EI&( z7jOf3swlsy=cu+&bleRVDinvZS4+#PJ)jACrqWVY>LgWWB2Zw#zkzKIuy@CJixR)p z9{_d?XdOQWAM@~n>zF-o*D&r=RG_3`!2MaGN-q}Mt9Jy z^WskWA~$A-|^`{t4QhiyWQ}p-uZ^dbTCr0{Yo7N{~jg1rLRK-cx5vRX+Y)+0p z%UPS6t~bnMuBE^MfnN(|9GGH%AQQ%>JwP-^(>(jq8f5R)#i(PuV9^hvJb%_Y%{t7R zyhc6JBz0&wzpRMl19g9j^d#L)ozi*xLuDYgbw}Cn>W;Ruxh9(pvp!miQM?VT_f%M_fdv2kmnoH zx~FVq{HSg$kIfm%K9kI*`L(7HtIG{tSgCn387DOhD$**)mcEtyT+-UFcvH`>2pN)b zypKvwps7Z7o{eN7r1Hx8PBm0Va+?Srr&MCDbAx8F^udh@>{ATA@&o6XJI|xs^x5jo z*dC^mBHx&_5q`{F{>(S^a-pj^@+}Kdpf;ne@}r-N zFqWTDO~JIBD>tM=TL@-ybrNQg+$|ImEOAtrM5{pCd5J|ySxaio@R58?R*Gotp3*%u z=12Hd6fyIQGzEs;L8zrMZ{Od#6roooDcyfyYv!lN=(S@q;?|W=K&eF@oM51;8hWZX zHMDt)cF>iP&du6-;lF_9ELHiL;5?&TTpCsvm1$7AQ^zTTjur<82fBF`Oo3X{`Vx@V z!j~SHh~q+)q{}WzKUm5SU(cyFH+lVX`0L}~lZLrgAZ#h1L@x6Yl;B^Ghxb#3d_$wF z^H@n1q- zC=-O#eg1ws;RxO1FbGW8detTo%1nRQHALo)HB3=;T<}SV&t>)tLhXO)+!AMOI zv;v)c>aS7A$Nyix}4xG+6BUG7q8oPCSvX!L{y}&*c)9 z4@eljn$b?5h_fNU{H?Cv8Pv^PLNp6vgmiFsc@RZfH zY5nGny2#JIvAobrAht~K{HKH?E{|%J_CV~jEBg>}HZJa{bgUIDV!)_ii;>TjRb#AeSe*fk@JNG=@UanPA!URvKRF>al^Hv$|2{><7fa z;Gm~4DI&F|9*I>%{fIpO{{FwJGkPOQOi|RJzki1cY|q!dE&G2$7WRf@+JDs0mr~np zB#ylMOKYTku0QNKfH`KMrG=do@EetezhP?v6VyeC*C1sA(Gl#?#+@>{!yblOSX*}h z^9XhN(Z7E}Qlqh2$ZlZ!K-ox<{23&qFisc%>fa)JWA5+G4~hTZAb_yU3@%siuMJHy zN5VxXiQbXdRr*BL)q+Cc9-0y_k9W|${V@Y>5LV2`TZIDPB)z;`(k}4L zPsG>BX&vUhK5xI0GN<-e8dL!K{w@EjrMda(>}be8DAbjn5&BAK)V_LU+8F|pE18y4 zCh8=J#sVoqsXkz!Tt{&JhygLWUZEPs=WM2#Bl?3RA~EQM`Orv8%bYYU+=6-N#J92~ zms9U!38Ix6V<-}yTlPf8I5KGwfGxCji=jte_KVFSD^^XM7-b8B3Z-g9oASt7P%j0x zsf-6Btqtk>^s&D&vk#LFQltw&Z_b4;4%^r;duEA zeHnE#CQ2oXvzlAmvDuAh;>Ow=8;+s=sLq$|RD(A~uEv|8Kg(tGx35|85e|}{vFE<7 z7pcCr2%ZrRwWoqnLq@79SAxjH7LT#d(n-j1jz{8j**gL2%=-T#@EHEBF1N0X8nxpV z8Y2jY%j%R}8;|85_%w>9WqT!yriID!?>O%?G9OE%8CLcFHOb(zuk~jo-q_lD;Mc(Q=6oT;hl^PC)%NBRFHPKH_VS3E)qz2&x!j*#tzcIchK z1H8Ubx9RH5$|Kmd_CN(MMOlfa_YCAv)Jf&~TxTCG=0EzF&kgwQ)vMUh zJVY57!1OG+|7U{$e*q{6<3SeZ9tR%4VhesfczB5Y0sT;wX{PxL#bZ|xW;X6<6&8Cl zdf%_q7T=0N{%U4^(A(aqjfm0LXVp~PZ3nMxYlYi_&$-5r)I_k2iXwHC{Wm0}Pw0vk zIbxe?ep8Z?;q3~my~Z9eH-Dohw1MGtDe;%@KH`go7ig z;${$KbpHWI-om4_iMM_#ah$vL;TR1T^XC}V3D?LU_{Mp*yuQ{3#mC1(IRy(8WoCt+ zcPl5p*4yK`c z+@H2L8hk(B-tWN}#{<%89e!?{a<@5|2LwH4XJ2Bt6CAy;WNw(WN%ihmm6#}~3n$Ns zlG{UbMAxUtiWOszW&WalAmBD8aW&;W9X?B>B@vCKqRd<$mW@Gdg@S7zjaip?kB>2p zg6ajM8#9LcDe{Lt_U&(oricYIqINVa`^t=rpj*mYY21yIiQO|sjJc8P7z9K_IKuh@ zm@3$1hh=&`G7Shzb!Tq-&pQNjVQL17ya=%}MjQn)Vtddv5)+|OkbZRx3hb>R+R49t z*Dq4zd4Wyk;|RSugvJ18l1a!M?#^MMgi$qGwrhgJ6Y6aC_l{v$x&OjcYsUGG5?X!j4fM=((r+-(sue*K7vN8e$Krjd8nstVOvTIhcu_Yl%||Wc69y~6Gzo*`P zdjbJhaqUzl%4`2c0rWnv!FzuS_5C4aiUw@AA1PzU+QNeo__y;ags1$E>)jxYcT#q& z;TJDKSq7<)3l)QuYsDlnp;**Y{XD%`YtZJ!B0;+Zi3d$GGu;z_E<#F))UT7HtAFDf za-nYQU+5EgyKDF!eQ19CwaHsaWn+62E%@?e4T6%~B7n>pzY7oRv{kcDwyihazs_Tu z+g;#14TJ!3LZ7mNZQXu0J9yy%(@?%?t&-8%+Va$br zS%VM6f(QB0clsuAidj92%Ix#XVppi;PO?r?bRPT|9Bk=Nd6OA zlBmeYUYPzEK-!K@g(0PGS++4C??#gzwoFe-hGQ5q_C4MtXYyU-i~y2c{!vDNY}d{9 z)Qo=5I=)y$Oy19X{#}J6;hX}_)5scnJqIGGdxu1HkFiRn>#ml^Er~FzNa(IUySbCT zy=gRB25%qh}QMR`3)%$w7m+F#IXuDD+#Nws0fcEvnz~+%fv1;r7&9))IU|pmqkE-|DRj zV2?`pCI{@mE+DGszGUE?Sgk|Ye_Ze8K-V`S{0uHmuy{xg-h7~)iLs)8;8b&XZF&qZ zEKDXmsJ@2o#=zBmaXl^vJI)0zZQ0_$;KxgA+t$Y?QWPJ9-^1EP?A_$!hn4fq&cg+H z)3+5Y|0sR~4yI7fYPOpoWG52b7s0P_Ua>i(C2rLkzAxt|`~N6sAxb5@IR7ytJC zd+^1ncL{xjqzy!TkB@sSeneqSqJi=Xh(Q3Q##?Pc5DyTRaf%cvjuiy`z&Fr~XdIoh zM4hPRAXB9McV{ne3U|-zH2v{%#a3rQkt{wWvt#yS!PInxykZU0XLs8YWld{k8I_*< zp8ly0Yws6}icyzee9SK;9=_IJ7vFnhr^j67KIIyZ#Sy24L4F~vE^n~}myF&tdz5&C zUj>eev8E3~sP~M@j)g>@D6x0Fiml1s@2&{L<6ajO)`ZO=kMbo?JK_nMbp1P;s~ZNlwj>f`QO|16ocLK>+_kr_ZV=#mx2QB-M8mSImflMRe zEUUF6g|a7CZu#0!ADqGIOWi!BfaKp^pI=WiUXnAU8TNGtDGo#lWYCq#=O)IAl}u0# z&G>KPd=gqQFIG`N1cN6UEXPp1M76#*t~GZX5{a8(w6k$D@8pJ<=>=2a-TTy3orSylUq?L3r_oWVp0yPM9}*1 zmnFg>h7PRDzy&(S@W| zYORwwDQ!+D$eWQHXBt(lHw6E8rdIeUk%^+wzLq&%i7MJ1Yd!0>Dg(dtEc3}%UF?ic zSk%hGGpG%*14Ob%GZx5|pRmlW`ca<~>XvJ96|f|T5wfDl`tUS8MnkIKI;$OYdTeb? zA3|A>wvA-man3j7;xgBmbY*whP@Zrx3uh6;(z8@}xhO7-G_Px%(B&}L8+zqb^H8cH zR1H%ofatZ6$m~=!!38dh{DR^>zrlhlAgF-pxd?Wp zR9yrd7>3aEU0zA=+0m|<&GRHDL314tn6!fS7$yVIJOEz#bMcpxh~%9+4n-qXIF%(M zLql!<=3Ht!FD2Vc86USFPQwTH_Wk=@w~c^t%RhI)P3hXYMzLwa)#1{f-oZiS2$U)Q z%W)i(OVGRqFJXLq&j0M?Riqkg1nXPHR-peXufiKm43kzr*1rW*l*b9&Yo^n*Zs;vd*j<UQ&PF`^Yo#19Zn^LXU4P}~1Lmt27v$LW;s$$hId;m(Wr8Y11#L0n`odfQ6i)h&E7@~paX^w=$eR6i}j%op^ z+Y7gb#kAA8=F$>Ze}|70QkO~+UBb;co-ZvTNGh^(g{-O1MAXkW>}0-`JlyG2Y086%LGI zYlF93eq8+Z_1}QA1YxuwWm|p%4g{0+S19zoO*_{CKd>}}L*=9L_1si0qofs11gvq) zEiKVTpRP&y+eW}p7rfdx9x1(32cAOa;$Q;Yyi6`qoV^<9@gQ=gtzm6{LK#XvGa^!;sU7B6D9#%zo8l*D)$F^VA&Sf@+O)j@Z>xTxXH& zdM(O?8-hJ2UlUbDvVF6eP?*NzJ*v_z3}GqN?Lm z^+pP3;%<7@Nrp4kVwd()D!G*3cM+u-7(a2mEcf!yuuH_u%)eKCoQib2{fXuVU6=ac zL6Aovu4^#8bB9N6)tf1-n?sXDg_RyXrnwvXNvjbuWWtU@X?ldiqG_W1N^JVa?~Y3& z+!BkKXT9Tx@ET-t6OJ_Qb#;x9pOcpksgVugtM{1jH_B0-jA>gM88v~g>`U#P9eE_&8fGT5_W>~9C9{~OeU>)dE#lerXc|qRW`|v#tcuiDj z7c{K2WMI{3{qCc%X#>h_>v>6@)8C&zf5O#fXO%j5Aa_ns*MrFbcb}KHx0#8ui%S#a zm_is~6GgRJBe>w2zk6&2`4OB7oTLEAKu-;#z0KK1Mi%P|$gW+{H$BH|pN~Fx;3?i~^6BqDm#L&byl@$+%qQgHHT6$KDWpQaQGy z{1Yv9kPn4HK`W<dad;h4n^OtVE)+8?;J8n}pzT@;XV%*Xe3v;(5 zY}}F^<%*_NkT4l--fSlxyu(Ag9lJ=4yiAZ?I znCdeggIyUR!4RQnT%u#v`v4_}z=>k`7Y9a3tJ+l=w^`(k7&M1-`6`But~h5xiLhrH z<1v>vT90!D*j2=p7k@L!Sf+M|artA6TLyHr$guB42fjG@FehyC**ohNkKQiffJrvt!8C#urNswwcvS+S~ zBwri;Ff!^-k=W(L?-$NrV?xSs1T`zvJ3=Rm_D5D|1rhqz0W7@ZSm1Q}0W!9$1M2@K zko{_?tGg{B;k<2oP-13=DIlD^f#}L`0Z9!=?;G&jM9HpC2JB#X+&)TRHeX4Ga<=aY z=Ss=QT=bIY02XCkyBrIdqiZ%-hc*@*l)^-oYi-P^awgiNk(%g&VImsq^7qM{jmIg^2HKNQ{>@|{nI`aM#vYMPX?~x~ zxGImDk>K7MZjw`2h=1Zy{yC5P2i2b2_XL$v48JvJoRL?_PSa|x5~t^3fkdX>wxB(z{R@-g@c~`X}gIwsRI=^`jZ3 zq6$)S-N#-fxiu72D5mrLYgH_@+vA;(C%0X!bGn>rIIU4tvsI$JbKkagQe-goNNme? z+sE34-_<0lkF8c*VB?ufXFuFol=9d|T3wW(V^$b^)wO*kzmm$x#8h=s(ioO zMKiv|_$(2VCSZ+*i_J8x`DM%s_dgf88_JFPa|$W^?4m zTjbMJUXBBqV#?bLMn6z*`$<2xsvNu?Z-G=)K)}tzWBkt4K{?xE48U2}?;SWz3i{ks z)<5q7NTpE1lbt>pMnn|{*tamt_`hf@c`*&K(FQH-+xjn1f1W5AvWJV!a+ynLfI z&>O!Jax!Rh`P-y(4vDmlAuGGVckU;>07C=t{2drjPYLsR1dI0I zInHn~4!nK71zgfic=1pyU2hJjrgmpE&EXZDzB~lWcBu3n!P`zN4wdpQfcilDK>{o4 zxC6S7BMt&{U56wIE9c`Q4EOst%=8FV@jlMBOg8ikqir0dT?z=o`7+uPEtMclh!j74 zZlZ~zGO1ku=p5UW)7C0-Nldx9#e?ZI{>MRFKS>6q8hJ%n5bBo+F3D6=&a!gHVPQsn zjS{VjBb;jXBt^6Q1mHRwX(6eoUi1t>jV7*~x z)NCPMRQs(&FZ)-8gr$6gYSxb*e(`&)9{8+ErVc~CtV}=#Ba`-iv}q@)%n^P@du#6= zabBrD)!}=@IF6{}Grujh7`~&AG3H+sA27?E7t+Kd5qI^8M)hU7u(=i9W2$i*#YYGR zddB7NKVWO2C-3x8FtiWqqFUJDA{RijoK=3}AOwisTxaMN+#X#GrRdf}5#K6GQ@kHM z6C${#AHnZ8iAK!)PkM^hd)VlJvn4G2+$Ypd+^!MyYe^mTL?31^xJbza{)3mrqhJ(Ij;TjFwPCwkxWG*a&<-rp#Co0up=oiA>NDvVs=hB{9(*sP~;f*?Z2 z%#cXgQ>D+u7TfJgjX-Tw5p8^va7p!tQI zi*ePmhHuaGZkE10eW9THC88n~-{LRRBZcyY6{~k@6~Af8MMW${a|eYhFEW1@D~%HI zW*qDVhE$`i{lKLg`xQQciT?N7OjP0uE=P$DoG3Kgc5?{-tB^gc1e}U!Eu=faEafbN zv_W|y_3`~I2vY|U0gUaZy9TjtjyriheE6k9b0*p+xi?5$O6m+K6$Y6A(pF81qGL0s zM~}WYI*!6&%CWpYSC?A=bs5)MZ?$QPS(LO+CqtWmaUCBw6M8YTvEdv*_h`1k9`-g2 zSI3{XTi57iV_mL_?|MGC_NjSA_Zj_+u#Vto=jv-=~0+ z0^cf+MC+G7c4OJs-O?EFe>SEZA;#jX!?im^es&ooI4{2 zI%CDtpKn*Xo|57OO~-onxQfi2;JAe?MvFuX)no66=s6d}ztThQlsP>7d=htX`Y;;* zYbIA_)F?$NuBoc!XFp?qo0P_olQra>*jvWtW+mohv8&wSTcOXL_>p(_BR(=!aoAxI zb^U5@ZR7ktNaPzwyeax9cOe)2ypFyGCfcwc1X2r%FWAOl-Mprf^Yejz z81ghodhF`D3Hu?*kaO|p`oG8OubnU879%Aii(@uD_8gxF77ToaG<0XlhMTTB0Jnk1 z7be`@2L}hWp%*R{W9AkXpeO|z0w!ERV9*5wC>c4qlBN!1!p z1pP2n>euq$Z9i2~V!cWDpGJfKdVSt!Nxfj@q#ABHuTGP_EnJ&su_-r!DL_IGtHuXa>5 zstWeKFHnthjArabJXBg5J~1v0kF8=PLwnrq5Fbg|#(ZbTu0)ZkL9va2d5PsQ0~?L5 zp%(HosZyY{)Q4J+gk%a!-Kt>XRz%{9%dJd&?c7kw(jLh;HY97BxU0EYPN}D>s?&Jy zdA&Do{x{)q@pustNm^a9IRDD&+;sJ$f;L|prf1&FF~!ma)VC0fIhs|!Sy}YUCEZuM zZZ~qGFoZW>^6~Tkg+Q$KA7?VGEVWA=YlgXHl&r7q242gyfn)&~s8zVQetr*&jR8N$ zIAz5bgvZmtx4sMvNPs`s_5AAB7cvBq@+egNu&-R$ntvyJkVB6f#2?^tVcPn{9xPD+ za`)sM$a1Q=APkCNop`ni{z+h)4|7dMeRQ4(;$bkFhlkkq8Oq%Q!XRsN^8m2P1XW%{ z5nwCVoLAO1s0P<-Zh9NLs3N# zuBv!Y*ipy%m6nY>WEGSvSnZ3rMLVQuSTSPxv8830{>fOquz_PhM?WJ?@wtj(IyvDa z$%m{HW|ExVKJDF&CDQyL$raCgzxH1ErckFvskODGP>l;N+$a?PA>#V=bMD;dfXKbI zPJ7fWSpKXQz8xfXzNPe35k)6#CiiVENgV!$W-Lx*9XC?7v{niKD<;Y_t&)(N&L01I z&cWA$RSqroF;|kRbGTCmnZiq6q|TF2iV^}DGM4AH4{Mj?O0^6lEq?sm+*m`-R(KS4 z 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 trjSSu literal 0 HcmV?d00001 diff --git a/img/age-02.png b/img/age-02.png new file mode 100644 index 0000000000000000000000000000000000000000..abaa36b5edbb57fff334e1301bf85c62540dad0b GIT binary patch literal 633093 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 D2U46u zAtfV|e@X*OL+8mY`c5@sfi5?GN!ZrqsQqU2R(tesj^s*jE9Lg+zo8rdoV$Q7v>oWOfz7+;VG9+#v$8kJX~ctZW^^*@ZAJ)X#Hat znoD?cd{j%7=RrgF8`I*e(Y{IQ+Fbmps*9Va&L{_M=4MWxFl9_m-?w`iv$e`H+nvqq z{JKnk=6C_=O+peoZHnuk4vqB|C(W8}c=cA-+DONsa;~B}`0+px6@EXHmlI8gGnFrM zpe1;B2vTn~-O3U{n7CVQ$Ftz=;Lz zGGJ0r(!oT7l##VB95Sj;u2~wL>U0kui3qjH)#$KWD3!2?`U}jYOFk)U;+}{1f3RgC zKO}WTBV1PK%sJ{7!aFN-RQn7qIk##aZ8o2km3-^&cvC=~Uz~j3X-&=8%9r#TuYCn> zFw0!RqlbuoC@O#;t6;+2*b_#Wfbh5ezV#0o(>|4rlv}%JLW^;#3&S#z>z7?cvBv@? zx-R47PqVEi(Nb$w1zrUVCGUZ+hBEACYY()BOKD6)M?(NLLa&(AfN*3k`qYwS?r!IT zjB4)5NuLjVF`d4Se1Hmu08W z$tGuO_x7ojW5_D3L`cN&Pv4%*O@HI3x1Nw#4z=Rbv152nqg7`nQg&p70Te)8&+YaQ z2E>q*f`bDE6In(Dxxk&19rgyyGU4s&s%3NDNcZ7YqadhAld{GduIDR#e-Zxs-T!uw zf%uGA(my*-TUNde+(lh6sCz#bZXbVe7A4B79Xw>p?$7-L-WY+)lmv^^vKVLEc9DyW zat$h{iEW+v3h>9#H z_11F#*f=+?-r}s*k|R1s2ai7z+&9jJ}w{re>@>q&Rg;@2|7_7LH??erqM$D2C zIGW_?JcaUjOrR)+TZg$YFY%wT`=P%e197Z`+U4!Ge*s z-N)0@vjYfW0_usjxQQTD8HF?#?#~s_&Sn%%Zh^oB!sSPbp1V-#!*%)UxZ`JSj{2sN zMP6>VE+*YhjjYWub;Rr!9y#LZ#MjNAO>W)Qb~uQ98z$A@kgOy#fp0j)v%qOtw(0YM zu+I4c|IS!19WhE_^HymC_<=hRp^advnX9F25cpWHD+^F&yIDc%#R4j#D)>B#dUMs9 zm0=4{Z-@H}Dn44Z`c0JVIdppq^oQD%(frY#x@EkAMtseyD_P$jI7EZ_oVw3Cm)1Xv zsX4;O35wMR(jqwTH16}S)dz|sYyTQl(>aa`+g~=h@!O@u68%E%8CY=kvif*~XR1RS z#$Iu=W9(2iq*za!$>Ab4U-28s#vusQCNS;|D!1KrW1vA1Thk&qj?)E^r7e9u-r`8_ z3wqUO`98S732KY#YR0u)n81*0!YI!QyWXY@KJEoPpECmfx)}WHo%0jY2BH*Y{4s4w zaVi?em>-xB^e_Lf*XHyKDXH~mnTNWIzJQEByAUT<0p+aQp4%~)+A9K>wi1u&PVSF^ zGNxZ4)n1%Cy}*mmoD_YKW`k+%NuAq*aKtEvxkA~cGcLKB5_kpiQ8on3Z{NedO2jkMlE#(0U0|X^i0&ahM>$Z%u337BYxfsaI)U zI9=G?N&V&{2HT^Or$p7h^+JEF-Uu>W$AS;X%)00Qv;ZWmUYy;phR@kF!I&5T`Rwp_ zUk9f91|KZbDJD_I==p~Brt!En2jWowXH5SS1HU_(D%PooL}RQ$@pK2SegBny-9;=j zkp_=}zpLCKgw{W8lIOs4!!TxQ8^Ir<4;2v^iXKIys#!$RRJYfoxntj`DYjD`wV;8h zHX=>av`=*D09nq2I`>eu!ltBS*6zT(;H{-nO+S|fgg%18+{@x+#kai!n-75_jmqBy zR_NPEzkHM7VFdg+5ilM6z2`b!R zOMy?WV)szIi*EId-H(rdWy*nZnwFU?M^7FrMyQ|~As{4ob5I!Y0bWKPOx((N^+Reu zH-lHeFwTuN{V$Ott^%H6s;)e*fhN8@XI)IP|r$EIX4c%W_mjW)Y zJL>*ecfL3mMzCpq3PTOC_23s4#z^&w`M$~+c)h);1YAda9Zmv-(dq`w!EBPzEX?;g zUw`HeG5iRL5&s1&5KNIND8=bOd`=L6Ni2mJkRAlHcvz%*!lYKjwrVE5gwd{iYEzGY zx|-NlaZ$g!ZZ#ty(`h1?{j1ODGTYOhhrI?;MMdl>MUUosJX*Z0K4s%Dr+f~7u^S@0 zRQB+oJ=u(vwfV_DM9}Iy09f%U0KtYv{X8J%LYu%4+i08#XD^%I!{JSCHojYTs+5b? znN|e*#BIdIQ7op3tBcU6(q;5Dyy8()2_H(g+nw%{j6bZCm->mJ`aQ9cIQB}+#ky*E z#JCDlL@pibPN{8tPUYo##YgMH?`9o$d6+?*4Ylzm=#3-y6a8>dOpq-WkZa>jtZvI} zmEE$Am%2FgX|k$hvkUglYav(s0p%6S?lJ8NET3aX!6635zOte0nXv<fhWtpmc)$=8_H~Pz8Rdq)f{Ax^hYh9bF>b6r6VzFcMIkz)8>FHko3S)Q0w-O^0+#vkYFXjonMknHuP=;v@)nZR;OsQ$Mn_8^Ood$sC zHl)XC>S+tl+m#}01apBRz)Z^F6x8mWc>{^gUkTlBE?fnv&gf5EZ|!}#cb99h97=iQ z0l?TW=~N>Rh+2@3w5z4J9@SRza`a?zYC}cDLn+&AC(!EEHCO9-Zo?GoopmryJBMO zm!$D6elIKkve2l?={jBOx`;>p%p56PNE4`pqkFZezM*;45>*DYa#6VcbX6{(*k2&l zKpQxDOG_$}nsnOFJZq%PzPROpb==oc=L1);aYPu8Rslw9MXA9d-HQ>! zK3=p)iGI$f3yLJP&f@wAZh(;CNU@%m z4Q&Gde*bxgm+Pcrgb8m*`fV#cipIsWAMC^T*?s;41R9H=EV1VI!J#`9{6Z#T3$!9h zMTa`D*_`U@Xh_lRXV?hn=vv)CQ{k<&FC9C8HYP9iitghtdF)A;t>B7k-E&v)R+;mc zVNg#OA=Q~jK1h|qZUF*i3o72eKKBRej<3p|@QQh&S}mdyb+b(J1`+F?Miw3n_}rBj z)0w5rtU=gZ%ycF2V-U1Lg{9MV%cZ~l8|P6vFR&#Ave#@IFuJ+K=*K?N6V3;ECuo>f z@Yx-(CRW3Z_q;xAUhZm6QQVeU?xbegcWJp0>UWShruAY_d4H|s85|gSO6LSJAj2^$Hg;8?YC^p->qn;2G^lv|qw)XPGpChDxkJtr6SX!m zV5&QJfuI#Kadr5;wPNKx7uXP>Jg#CdnUEt1qV2QEx@b_OQ5Ubxt^4f05WpgUqSfv< z-)_IE_ZV-oZlJrA+cvCy%3Q$g%HHhnFEHN*)+rsZa<{&Wvk)a?2{8{V2|L2S$T`W| zH{C`}S&F~_`kjAl$j+2q(DP5$>%07nY^3nHwek|gbg3}6r0S&d9?I_mL7O&Pu zUhvSrIH#2BJ!qZ76&|R#Fxi|@dNIlq7)1Zlj+n|0wbC9`{!Cth;@mQIq^9LS%knW% zia4B#51XWM8_zr!$^+GQ7@(UxN1bB-#Fo90)#opTtkbro@~{eEmriR#jMyOZh6;dD z2q<7Z#_`6d$AmBKRbODDu+OP>O2$;!H!R@=$Tc3G}wt!$<;Oo_FIJ*T%x zF~^jPu=G*;`ex+(w;y|4xi&W{TGN7rhMBLBGPE_Z z);83x3zI*nINPoZsyj}#Ws9HRUPM_Tf6i8AN3~2#4b#}kZBhl?La(uc3w}*d!)?Jl zPEY^)#!%bG>#dJEW+~hihK$vVvD=B^%bY{k%hS^pHu6?G6ynrsIlqnVc-G@|0B98y zOZFVPk?$@NeY&S`;XhGBE7Cl08R%b*><}_Aa^iR(v87)PN5n!&yNmn zOYN2-&g3}FuM)Y|!0XKaF&=+EzK#}5-k*BllWeBx9;z`j@HZ>JFZFwJ*rBcS3{H!> z(ISaSQM^(wve+mOe-nLLd*yAO=x1SSAD36>yNMGYFR!jp)40<)TMc~Z;xg-1*RRdn zb#XOxHSpmW_}+^ea2zTbWrP|0GuD1qU&Q9^O}AgOo`PTG=7Ct$u+~PC7OmdsD~;DnH@ya*BI8k^toRQ z^$PKoCPfKNZZswajf#T+J4n?tEoWZHshX9mf(vHRJnKd}YTT05mz3Jzn)<<&s=6(= z;0hy+l3@B~JFgF=*a?1=k2`_`%_}ox<`Z{+pHcJlB;1(Vu&z8o6HuD^;qQI_=y%%P z$MXGQvG;yc?|VlhR}sbux9}W0it24#sK0os2L>b@xs0wrO;aT*L>Rm`)WUQ zhKg=xmCec|*C@S}UhT9lKH~mhrpH42u}+PJaT#sf46ZtnuV&P0%Q4f+z34kjtt4t4 zd&FrPr8;UC(^v)Q;;$@|Um{%z8E7P4Tq{3N397Z96;YyH;Z5@0LL{F-H`=upMmC*f zQZHbj3Hh&IdzfPSt?X(CYanzseUM`@NE7Rbr{VhnCRvYZE?*fBUV}!_T4j0|gq+Ci z;`t@wk31E-YCR*+9_{+$~_35he%J)imdbI7{jEDnoR)&ny3#s29?1e$X z0e7&gikyu@aj3s$^0?uTf?C0BGui!+X}?fR8QO4__u_9%MWtp8u8kY%jun&#+l`ZI z271V}6?Ntn!0^d1znY+mk+A%3CU1Z&p~n{04?UzuDsT*33vo$O;u@KqZF9*c7A4-z zN?yw3<|o24sqwgf_-~YXhG8*wPz2^<01ZzmHUY*+Fh~igNOkBe>>BdMx21v%$FKYX zYq;QA_;=HN&`;i*XmoOV^0-xTtVjqIM&VyIo5VeVS(=4t<_6uMhT(~~$1m!^fcOi$ z5PxCbjOmPZinp9-Ub5D7EY>sZ4p1=$N1qx*PdE{tTJWzyR)xOWsQEyo^dDP=i8}{e z6o9dtFyNBNYbi0pe{j2HV>nWWW2jS1r=~pP#qp^@aJ_V=MV&@(G6^3yq14}f^_B^K zc40RW22Cp{nQccp{i7)=m9Ft0XXzmafT1R$+h_j?NlY40bsbh4_<-D|-?*+4`l@i^ zA2=(7p40-)@i9}6@k;eV^%8e9Jb=O8x-X&b`rb=mrj_H8#)Ba zl5=KBG3!V0gDK&cYLRXkU9O%rT@y9XvC36;a_LiQr;P4hO%~caJq-uNg zGH7}Rw^f_5r-`v?6A!q+r}V0rJD;8#JJu3_oj86kzS%v%3{Li0(vWCq<>|mEYQ5oG z)d}*}E+(H*y5^k_YY?4N#(09vi<6K#KK;QPV~?vL6LIP+)a@1ts&wMnVw1HZ3b>D2 z0hSu9ayWJ?0u#kDq1y%R9*B=g^;2Ch%6F6&m2s~XrN5fAEVaX`0dKEu9)oF0sM=O) z#!)jP{}I=TD@PvhOZQt*DhX+bC@`qbzxwB6v1L4eWmL1lsP`CFL_h zpAI%jnEeCJkH{n1zz!##n%lnL{qtb!Z0TGtjG-kMk_LGSkD_HEyVDOn{va1qhqMc}R-%3)S;+UIe%LhU^|*+2k5O2m!<(#YyonNnPStr z5@cAhfLT?3b7ugc2De02Em_8uu4Fwn^9?g`5q-aX%DWxZ+GH^zf4+d5Qttqf;W1PW zr;3V0uXGnWh5wk*-)P3>!R`^f*6g-JdUHn=JLzV5)Cym9F?lq{>SKbJ43VLc7Dn!_k)2lei z+vN|$i9b||=7urE$}2W)f_Ug*Bu^b&MJB46PKQaS65@ea^&O8j>qtz5Of5Vi?HJi=k|7MFH#fMD(_fpOK9m@_;Xl>OnNJR z^_rfm<(B23r#p{BkEijr^07(LZL(oga*HX9f6d%!{MZ|OMr4rk(IO2J4PIsrZofpz zxtmc6INB4&v6yp>{D)VAbY679EgRw?nfUU49qZVWd6XI(Wt(fEOAS$nQzK6Quh>*T z^A_Mn{s!L=(-6c9d;KvENzbPo&Z10)2H_oChz*Z27faEmSHr^|rCZj6#N@KNY^fG9 zgD|-}+Bw0H)4*v9cg?oQZ|jDIZzgQd$lB1Qvmy|!D@=?ElXcN7#7>F2JZ6RwaX_vP zjGqX(d%SahT&4R6MIRzRDHW?((RQ1(mQ9Fd%bI+YMwb;75399YA@@KmJNUg<#hvDh zh9me#HHA5NP(*D*B+4K50&D#;{^xFx2K{?Jhc)RkNcm%3uvnpL<9+}T9D-h*z%l)W zFns7MD4S%wR@=~PX{kgsZ|Ox#>B3r@@4&R8HA<%dG)Qtw$@X>Kuoi&LSfBF#{mwqXXp@{BLHz+lQx* zXp|X4z=dfsVl|OXqiO9@SZqrI)+RQ@| z23^A|A;TKu-iZ(SQn(ELy5gHZXs;evnfy7fRIZ#cnCw(6u?hoeXmRq97Il7pJ@EiJ zv9ofMGls`+Rt*UWH-JFKi{(n(>TY_FCHf$XY0LA!Y9*AC(kh{6;Ja|zMj}GqODX3l zL!n3#EZP$mLTEzTB`o!(@(N;$x^97G@{-}nthaPUBBi6bE39;8(-PUNxvpBHll#E4 zyp{vYo6LT_hxr|m2N4g#CS_2mR)+bf@$uJZGc>|7JD4rh3JGTe{XF>3j_xYLy`K?k zxyKjUnzEV8DOGN|!p9|(ba=Yua9--@inaGMe^m)7U4I`%GZ!EO!6Ca()a_~b)F5%z z7TJuJmI>VOsms2=raMnnE<1PprsC>hd)+j5G~?)r58Aptbyo;;Qo2xun6`8TkuNpC z6=&L;$P=i>u0Pe1YL5Xnn8O%UQ8kmf9IGeUi9}{_S;o zQ?4F6cm_KauWdoGn0W(rdJmVE>zvvDIA7p|tHZ-<+S!GA^tI(l_wlqsCqtpIC`5zr zg~e=myiI5p#4y|mSqz9zejl4C?mau7`BMdYqs3Xzf&iL;)qHiD%<;&=0JGWvI7*gGkd~6x2vu>xn<`KxGOYXnk{GY~{gbNsw_(XU{ z;IQ(e%<>V?4r^v%^Vt@)`ts83 z9AR6UQhweTKLUbT04=rKToHbI>XfGuBt7~-re30EzNoa)J!4;^K(~wA?X`#|1FQi1 z7Ru9>hEOf%afVYQhU~JMXoXBx%uLK8U>L%6pqJk1#=KR<+12KL#pJ#MvgZeFaf$~H z0#E-ODI6Vi^!G%>H}!wz=k~{Ir$m#ESU3a<5%5UH{{z&3HFVS&RR8}Vkzn3U62xKj z8py(m2Y_|R#vMuZD++!UepU6AG#aqQ`_lB-LjjMtS}{GA!|E^m<^ar@f`Tn#mSWqus z2HgT_FUS99s5KP7IVp4qztq;olxb0%_d}1JNPnm`Kg%3-igYD7XwA0v zLfi-cy;_$)!j|P+u(^JzRny`2><(67;6*cAGw_PrTLZgggz(mr5kr=BL; zvAJ4Q^g#lV61c6}W>XYH)*nO7p=qRA^(_=OaIl3;$LT2Tn#W^d|uPWro8 zSqSZeXA*9l`1CLGqucv+1|J$8QF;ND>1gbz1mo<8^GtwpLwi|sk_Z?5SlK1;%c`GC06sI}zc?u- z6aR85`9#a4K+70V+FMo{5Sz4R4{S7{Aky&hk{R^ThDe@5@MckWxLnyxC4s%Ahv*u4BK z5(*N!c|fE#K5EkO#?d4>;Caj8KMgi%K}cksQl3d!1l?>6MvJnR!Ysl(KA1?sLMUt& zdPvY?<)LbIxwt@?K?5t~jWuQSi1oQLYYDX%>QLr7Q;loG60BPll=(`Yv6XZ?LAJK8 z+d0$kx78=*ijyejS6a4oNu7GQcXyB(T%`lXUS;}%<=8v!WZk@>4UP4#&S=_x-3l?l zH}KpO6P9klEzGR^ZYu> zdDAeHOLhJ^;eSmaD=#sP!p)ej?OW%#9w)Dk!UVlceo1mwB@#aA2)#Rn#Hu#cTt3Po z6N{}sZV>2KZA0O9m7*YiF}==YKi(<}z|{FVG3AXT72DeJD1c?WKHG3_Zola|w{H0s z$u!WWM~OBy2yK$xuiUzZabc}Z)fL^;Y?)p1fFb9}gGY&MGiLJ^kCrg>G{=`JqCX-4$QYmzjG|xe)UrZ9&s$uOUFuC+4E?hFx zQ~K2O`lkUH=i|d7@b{1*B+)FWeahgf&$MZ{DP{t0pwIUBDPw!wpWn0bBVh!`4|k5> ztI|iJH!qDL)nPzlLx!*qEcGDNwwm0WQN=K9I&sfn|G4ZWEYhIni3`o(>z#+~9 zSq(B(+bbuim-yZ$>`K8ZUS5(h^s}0s=Vmavn&WE@8nH3K9(0OOkhJcK8V;z2wQ5_m z)xeR+EWHK%pO9`0qJBXOrOhus^R7w1@WxkS?8c&8cK)__IfBdN`9Cdyva4IoHAuAN zL7Ac_%(GW^=Himh(kVhRhtKbrpEusb5Gve~CA6V8lXT)^G;Ciz-2rloXG`F{@;jXL z^F9B2Xy`MfbZ$aK6ZiLKD8Y#9L3G&&6XWV5+pYh9>NCEvKzrjRX6@`1NC(TLU=(Qu zN2I!ifl$F>)%3JgX{)SsSDy21%5c6F=6LPu4-(va=kB9#Z=z-JG{|OLdQRmccvN$}2ns9U?#yL?k!RjOccS;Qa6Jb!eosDrpv)GDw^JK@ z1cEEU%$TUQR-uG^KE~>Jr=@Pbpm<{+)yA*I;;p4qj=82uUC7@}BqSj{J_Kpn+|~F? zU>TNTP>Rn&_bf+nlyqCNwzfu7q2AA0)msRL$?6mq&9)!29;DG=q7Wy47YV|pNgc7H zgH!jceyofHg)LqV9Co7&th=oeb_aQTBQiWRkQf77iEHw@{j(0n1n$~@W&>y%|Gxj# z?p;Is1kOXTi?HSvHGToo!9;+iu@Fnl=$g3_)g*vZO}n?0 z>Ut-T53R_haIAyXEn6<~PIwj6icIoJkhkl0odA+*iXutOHSFCUvsLO83QGo+#uy_@ zPaN~i}Bu|JS&ljLFnXoFqnO4C$z^Kki7Xng*> zfrq`k@J3kj+zb>mNuP8{Td6e^gQS6JRF&-{6Ox$O`5b4xQF=KhU;PzdW4}{lYL6}( z+q9GOR5P>dlDxJRjG<1h%RGulp6MzuQ|KAOPAQ;Vs@1?LN-%GC zP|%NDkjl9B{uvmAK#7a2pG}JNM2T0@^_=?cJ&+2#~uVZ&3zixqmYL({(LSC zpP=G$PUbU-!WFY|ut)rPg4&P;(UROmOZZy}@C!zZ5@nHxZ5X8$*SqqUnlNTu%2tja zO;+`)r;)F%=UF4*^C@`h3hEPmPtei8{p4fHR%0iWX-xfW(uLXy8PZg)c*~; z|HBY$Ek8b>Z0S6(&q8i2lCHS@nPHg~in{c+ua8*^;?V_@PNuPlpsC9+)A_?+ z9`RRMl3XO-suFMb;Ag)$3j$E7Q2txQm(uGn0vC zmR4!TK|6+)?k0FTQ^z_r>Mwee0fW4=Qc;MP;lOq%ULXJKVewH=zAyb1*_Fd57lime z(g}7N1LH6Mlk@LajsUr<@4fFwfveL3QA?}?BUuH&a*&VQ1DcL<_BNy%y+nWh3(|f* zOv16TWINFv!Sj@;p3790zeTK51H@1!1k2}y#oK(=B-qG_4{&=o1bp=sx|$oR`~|aZ zQmGe}R($9BhBhzOg}~N2v3t)q^E7xlP%*d33J}n6EdI{HWe&U7J%*A{90jkHm_`<1wRxss>>zT6DZ-g-fcgUc(`;$Wr&+)X&|a zm0H>U*V3zGomoGasO|E|b!vmyajVJyXM!UCD04m%_6_7`i8}-b1FM514wZohUTU`X zP9L#yM%M@E=+j4!D!(^8xm6u>Taixx2!c7G6{?#GlBU2Z&YMKSSQ>F>?kOJQx3aWT z5)fBL9dm-P6bQDVKV9sAtt368+bQqitAn;@grUkD|*9?rp1=eB@`oz4` zW44gm~W>G9UkO~&|cIh7%C4pl5C9#`$hE~WHm;c{8! z1qFqqrLW7|N<{No7X77fMMkv`cpwqfrv1qK5|;GGqA_)VdjdJIxF?HnmCMFE$lZc9 z!RUaokHxzO|9gM$L-+20UccMns?XQwcfo0hNMLSqaj1OGPt!m@4=dTYXmN#g->!?m zFGSSc4)CC={&MR4^wWxlofuE>!`Qj67=O1XH3d?ybE8O^yT&77#KSX$K zZ*V=L6^FuDOd`By$9ki|se&5sR~&438gH6Jg_pj7{O3jNgb=yilpV7==7W$bcJujd zo~rOc^4i_$s}#*zY0-?7xp4UH-~R35MLScAwLQXc_0+)HyQr2m%Fs0CiqDoPG)MP5 z^sv|BxeO-NFS`3DcdSKwt*n+VzGH4LlC6RjI6=J5iIt!<&PnPnjDKQ;?&1_#oL%MZ zxKdK%WdG)De>Zw^E4T^}=xv)!&S#lPF|!)-22^WU1ps%G+@@X+tEL^P@z+VqNV0W6 z{H^Q|6wwFqYqzG)6V&O6j2<2y-C%w!Zf6;l8$o1}&6C!g{?B~s?}~O@gwW4^^5^?M zJ^>9jU}uJAr}TiJ9-Y-Bl_V_`iyr-i_iFMue+VENBwMM_?H}$g!0jK)Uad{?ppq#< z@h}*oBpg>37Ei)554%)(wd%dqovXRpPWEdNo?$|>md;%-R9N)d%_>G@QlH+kQrF#^j6dla%s zAC|iqQ|1+>^n^aTHThahtJjnkIl7QuW_1^!HWn<8)kOz8*7T9P=%(Bp9Spa*zv0r+ zF>e=k;#1mD`EPP1GRQ89bmrlpl3+@yZo2dt(Bs*g2eW&7(bMaASEXy9qKli_nyUg^ zqpts#h(-8sIl#2m=Df+tyAnBY;aev#plwEb$Zk8Y%;Gp@V3Ibg3OZzf9+5|{jsNWw z9oMaS5duoQT*3+CiU5R1bPFYZSzHp-tCqdvFGa~I!ofNoCQ0BRaYf~#W)c7D z1WR9Pm&Jg|HdAv`xJY7=ni!YEM%fx#bIn5;VOr`Qu~ys9xn|!(_oSf5@%FYAbU#RMs`0KmEqjV~JQLQ*H+i zdToGB&F92Sb)ImcyzEOi9m>+C?6Y9#1)1Qg8a=g{m~$y$1V}8CZV8YF@wblP;qKtc z0o_pFt+M^LzBQL8r-_x%iK}R)mQz|7bh`+3%A{wpB~{z=4(f#-RWp?rcv*QBfgu>eR+J{{U!5B$CLyJ{@Yd{6JhS8e z^&gb}^b;TZM2lxGwSysS4AA;1J&eieYH{wditujl9_IrCv=xvQTNckPBtFu)ORmlB zAq0_e5QOV!IHg#gxI(kTt<29XrRJneC0bJ2sLYdG0h4fKlP=^mdmCb5p)h3owcLfW zLAxqTt)Ll`q%2cw#)|WBp>VA)6_cb^){+GZWIulM7(d(%pB|!3R|9Q1bgWLtwNj)u zLsYAQl$3Atu-T%OO#M~Wlwn%jS|#cl5-CdV#xLKCU#(TIV^|!%%YEn!=F65ex2?W< z-^@BbebGw8BCWTN$}I`aExn4;(?rbcw!sny|Jrv7qtwcL0ZnCTMnS(P~8$>?fChOnm5XNc$_D|5U&qm!{5^!8awW<{L(+V`MRY?%W?q- z)?horYg2kWb8&!fB}|f1=J3Mp`GZ$gc&si$v=-5IFYxvYE$k7K8AY=w91du7N;AFPH9bVZE-^vzZA7Py}*H|buU42=Du0#~(Ta=#y%azfY zPSqKJ>PQPUkHjxAW`TP3DEm=k3@#yB_;Y%Nb@93h@XJ z2nkQ~1i6|8i!*(xY-4P7v7*X;CSF%bEL^*lYIoIQYND{Jq|CN14xqk8PQj?rH%jjg zchOMgSh-s<)WvB;6tN?k$Y$}Os^mw1Q$)_CO4|Hu<>)P_GM^XU%ORd>)tOu?HgAJt z6*0jA@+z9t$~j495{C&req;K=R&aGIcmimR>0Ku|R=gBd6jYil@wz~ZYnUUUv>J=L zJ`n1tXsK0e+0SldY}IhthD_K)HW$GZ4sTALJEezIr+zbnpDriR|LuLLFgvpdJ+(Urm52C&GtTowz<#6cmEh(cc8VfDsCzKa88 zf)+-e1f`THSbQZniVr&mo*36nQM47CElVl}Gcd1X;Kz`cl8bE+C#UMTD?NO$a}z)(Y)G14`rG$fI?XTB}4CFa{oAa zv^RKq1lxx5y!BnuRjee+6@bN_#X7TarrV?i8E*fiVomnsmTTyWRZJraOgWcp=xlWnWujIKQ{R@cR zj)~sON^jlE5sDSO{lDiBy*0Vxcr}pDj2+x-=S{3=0)%J~#&Mz*W@NHs=?YbqC`+rH z#TdlTnglYmD3kq2nI93Fk@(K!l@Z>!61@#Wq!8N{Rpbw4CO1;VZ;Xq}GDSHjl;`B6 z2E{Y;CuNCi9}?yWUK25_0YF9~zfkGHXo==;NR!iZ6B@q}zj$Z*GUAQijrz4jExcbP zmk6I@vu^+dBfL3)_4CjfceBd&&h{@q`-|`Y;P^Kp_DNG@1Wg7(oo77x9j%Rb={p7WK@v8}$@`_ly z#+}-6Ef9vLnZ~^i$HT(}dP%8^vvO5Ami;?y2Ue=9JBH^*QMIBE&u~2qXTkJzMiOEW zl8efsBvu*us8VncY@qqju?kG70l4HXSx6N)Z;qnV~Fr~ zyS_u!vtRk8U;V=8|L`1+2MX5lrG&;~x^JCtSwgldkSI@w=$yW^u%C-OJUmngAR3Zw zN_;HtDxuYVND@;t8-+uZMC1G-8>ng#V`>5G;Eg;pR%Kw2NeVqxm~VPziPmVt#l0IN zt188aN$Z+q+WK(eF0sBj9Ii!2k58u4_{{r1Q^l}%Ks2_=e&NCjBu@PE=MOXAR0c?3 zR4}YE3>bxle9)$Ja%cL=MzFgbytT;zx-EkZ9x#h`kRiWKi!ci(&k;w(RLmCJHs?mK z-!o`g6@sCw1jqEjt<&cwc%|6*9ue15zsr=z zs-yCG;G=T6D9?sq#Wk<;a0vgNuP%ZR);6QrlupNSCP2w7sS3e0EuY%eFmC`>`438b z46|2KDg+Cul?C=7mw+kSpWQi}J=hyOwGO+r9!g`!wHh$oXQKL&TV_U0J?Z$_jF!aW zqDGd2xYVrD8q5o9QcpnzbISR(WdE&`M~9;Vm8V9@ex*m`;f>ROcS82Fu2b0_&CTl2 z&8&#$=%67FkNzV>gHf;@oUdbXo#37CddKg4_BXe-w^YP__qYDffAEX{aPj3lN^}84 zn{Z`H$EW1bxq4i6C}3TiZe3kAyPffJxQB;_2#oL$ZNn_|ijNgVd8g*=u*Q_w>=eOt z9gh+c7WtN?r;1u@d+Js+Uk7XKvK4HoY`5mzidFRI#hNr%dA2T>15ag#ZUatqv#LWY z`+y+8JC`?Sli9(+Nirj4wyF(fMZ|5UtYAt@HEeQ?nKmT1(8AGD8fU4x3>_zr$H~D~ zcy$Y3L3Iw$tpykN51N=Ui%1WunLQ{|*Z@L2h!ty9Q04w(It7^?Psh0xcL|!_JpJP% z@{rYxE$9JvpxbI-b8~Zdch@{5w+(chu+whLPx62jiB%QKYq?b16by49u~LF4rljwtPFgKfDBKte7me%> zLCJ&Z>&NhLXYkema+qMVwkV_WlaijW+qgA32Z-?^RBSuc4V7|P%YV*ov+{>S-U>t4 z_Pwbaau?I_>ytm(pWT*o#9Xir%V${SR2!Wn2ZgI>tJ}2ND8}?mQ1Sn zeT|2QhYBOK9gv|Po)v{brcuqRZEW-kZHSc?QB^xOa7Xd^9;ZKCK^;TL#UAbFQRB)s}rJ8D(klxws64 z5=O;TF`NX^gW25^c(fZ{i_lhYRhG5xe@|7f98)GUf$Tx3q2^Ml=&C?bayNeE{`55{ z8qE`d=gQmKnz1hL3)j|QFxcDMTU%Q*DXikN<6Tvg)J<(W!FUU?bFA*3-Ds76^2sN; z((I~VmmCYJhFxkHujSd7QxJXSL`9Ez?h)1kBuz--9QxzFxX!A2YI621dpA{&vZ{)! zIg919rOY`jS?M#Z_sSG=*W}lw)t#|T=yaSUGb)DUib~$H;~~l|hGnsGk>+IaoG>A_ z!YR26a+&{EMhEi5GMSIzJbrgR0y$%_IEI!&Df}LxjbLv#dfZ^S-JQO2Z}!TJ zPP1`JX;Ws{C^`F<_aL9vTrRhjS^dqe0vKa2VD$&JLhj7PjB_(Stpd{XP+BxQ`D6CeKmW-e`O%MPO1<#hi+}AeedJ*OfSGgcNAjKTddG)8{Dbd#?{|OsOMmn$ zpZ?V|vb{utW~by}MyJbVPP$p(wiqlpF&ksd9U0?LLS9|pVGj?Fh^`ILIwk)7T}=r0 zjoS)o?`y7$uYLE!5s+w1LB3m2X(vpSX;S?g7xJsot!pl7bSx$+K9feJ##+54K&-CP z8CJ5YqQ?1)>oaZY?})T@^T0B_DO##X)QA>(y_}xDox~z)CUb&>(DC8vcswmh#+jas zF@YgYGsYbC#qk8?TGG_Yke39&bG9HoR_yF23|acMOcloRvQU??*9)y0AQ-^*D^yX5dXWGUlX2w(9akb@9B4cGHTen3-*t+(xGY)v7vY^nl*EJ$XJM^Q4SW zXvPRvuB;hjuPj=wY29G2H?d-hS1w<^yt%n4Eud1k<@+6t=|SvBPLrL|IRl5uu;?c` zX>JD5=AyCDRHE(jZSZhD80ffBlcl`LgOo!amD_VYf^+sRn%<;_mCF%2u#SsM$V%K+ zz%bkhlNe1;XK1mQb8JhbRkj3_tiYu{%Tp`!VYuw)fSRa3bJpdv6=(nbRvLJ3foB5R)Z zyVxS^CwFd6{$xT=5T)g=b8d!6alLn0Wqd~E9>QBYmW2pLBfK3T|3*l#y|evK{@JtN z^WHzBDf7bDGCOWFq!!!{eDHgpx_<3nf9c=+7eD;bzQyBm2vE3z_oj3_p+^o6&~=Mi zDiT-1vv(r#@K|YJgh%ueBG|vl=K-dBP!V9U6Puk2mo8&eH6r-qhn6Wg{5-DEsAq1n(V>jZ4m7{lhJ_0ih!_-GQJ9iUs%6(C04 z!SY**e<&R#C4S&FCaToRn5hoHp1&*FadUoHP2J-2l%Cv~zPuG&*$kcl+uf6!n?o(9 zHW`F_(1cDc2!RKt;HT$K9(al-aCmF{+$lYxGR+u9h?FYmG-Kv3X{)budMs|P9IKVk z$RrL;b+O|)s`*Aw<)h=#Jshra{kfrqDVGbxTq;*`aLyFY5AqxyTP-4mXd>gN@db2x3%DdcZJWu3csAu7bJybLR^B9{n?!pc(fN?AHYW4`_GL) z<$I_ZDQ-V(|5B^ls5nHnY?svDRCeQ0eW0yafXZ%$ro)v_7;jmw!h{^&nEc66a$gWs z7aJg2s5x3ZG1noy5qG7*zVH5k`Q`{vv=(fKXt3%Xu|>u6^Uim@WrYV!f z;~uJfwkq-TGf(}-MIZXfB0j+|M`Dei^vi&fb|GQ6LK=4ht9cZ>8K=? z@ZkMQJv=-{Xa|$QN*!$H;T%#Mk16O`zGVo)O*EX6V9ALqoIrJ$eF~L8-g7~{ZV;H1 zg48~}y6XP+?pHVrc82Sd@$C5Egv>2nCA)3mZ^6sbXSasCRH|LLsSB(#wn=~@pn;9) zmC{B^%^0g4I!qp(ko}$Li8a_Y83B=QkKl|cSo~MBlJ0A*y0$R9FA197oxS{MdMkg` z5zTXSvzoD-IZm%zFCMo8j7FoYSFdu%;-34>OT!NO&7DU}D7}XlP}f;Eok$;`3j8CX&ss&&c%d^pzoOUXHE@z-s?1_9}TmFe5vctD4~^(`Jb#Xv0zBy{#>{NlaID_Kx4UD%py z2Ig{CmI$9wdDY>au^a*rjPTa5zF*G8!H0h62la>JF6_8}@goNZHYUvNovrtO@O%IB zAN|NXzUw>ki@)+q&;I(a{jYPw@G1ci9^uUaT0bTGF+J@$=WU;ji~yqVKm&H9#4;sa#;}=lWU=~T4;4Bca|+jTB5*G zh2#R;R-WEjP{r}d>ZH-S*#|<&qxj8Zc)UA!GNkh3MFlt(4tpqTHcE6{30k_@4#`%$ z1r$9}i{?1vvo|=T6`A=aOUcP*JeSMw%$u94v-2|eE$!Tv7 zWt88s3f)^?JVdx1d=p8g14yEB8$PTZfIG(D2~tvoC`IRUiKX1-R-dlAsT=wRz$jdU zAPVABLXw;xqC`nT&5g2Usi8jb&j0`*07*naRF^ZP<>%_+asnB)Rmf{V z7M=>3L3T=y-b#94nAE^weLW5SiOiL~}}XLx#RTDD0; zamH{FAxNQ7q-p^d}f>G7{K~E-f4HIy&6!Cz-ONQ zg}?gYzpU@W3(vjy*Z<;24)+h`bBp+dX2sGl+z);DFSB;yfBmI@^K(D-3(tS`#bS|e zcwklM2vD$r_hxi*LiY)sIcdJV^E<>-bDs@#D#Kk#8B{1qCQ;w+xci@lNyE*Hq1wY7rONl<9&kDijvz%Qba;=>>t9 zp5C3jwiayfgm1+(P!w+q#q?z1Hs6C4k1lMSnewuK@-n4pOdsB!ybzPIm?4=_ebore z1u-b3Ltu>4jLHRD%s$ARk6POt=er^6DY401>Nj*Atpc8W^2wAwckqMC5~evxTVGP+ zwV`@LYI$CmSnn$R0Y!Ntzpm=9okt#9SChA`p|`#!9#>zovLkj`Wz3xc4Lh#SRHJEv zwfIW?OxeR-D!JvzRu&V>OG}a|#AA{>0xn7}YJ#xZFCripk1li4t>6`y3%)e_Ja-a< z+^}14!&-aOa9b#p#(A-Hq_QT8&|aEH=pqCG3U{KnuEFkHhA~>$Byx>tbFI5XQubq2 zo$Pqt50*{74Z7F}RM}_qa>k}yz9pVs$#K}2Txpn7NP3mwIC*q?^4tm8pZ}P~ z#HS=EL5t6s$(g1E*bhv3l!>b4`(w(ra&f6ELivo!D*+QHP|g*dE3672xR~RqLWlCjg*xlwc}QY&$3Gez`Ni3-9PeQe&qZ9!#~FsIXpQ0l~4cb zum9RV5JuJlY0Ec!+jz;+Ms9 z3XtvUj7%8ZZmH=c3>bp-SrSZ&E9GENjb4t`Z%B)=#}@MK%CsWfSB*-iQpG3orW^q^ zDX~-Rimd6BRJ|q+owTATFz7dowaDgOFdP$;@s|?R-|<={#k*i0N1<1-s%p(91~dumxF2E~Iw0T)kHOh;jzzWfl(t&g%kK=1eDsS<~@c zGZt)ym)CWe1%J<+?+jah3Ya^kUpddif>JxJ4qg8 zZ^l9`MuGWEN(!<0Gf3w_+q9g=k1qa#=8m9C#+!~cDuM>}}!j!9N$)wdv)oR03 zz+xEyV1sB)-YbWuTvc^Z#u821h9ayvOw7!#=v&WRwG8v-1FpICwQdZ=F7WNZvTJ$S&-->7Ud(d$#o{dD$87?AH06-9Q?HlXSC9GX-E+8<3Yp^+h^$R-!CV1z&zT>w)`y2YC%4r1c z-~8c^9XvkZe@LG|#&)}q3MhT|`@Z|fKJl^ddGDVQNqzidpS=04o8kfYX+WBuD>>wvP6wy1jm43%{Gf7axZ@M;q3K%f-7`lMQli>2P;%$Y!pP++`@w(*NicZwADdLmj;8u z-rnBYno%ZjS4K@&RZ=@qExUlpY}N*=PAYar@PhErPzPAKpu0lYK^xZK)Fmub10)KL zO&D-uEl-JbpcL+`3Ac}C8#J4khx-LU!I0tzW@AK?>=B||H&`LHPztjpFyP!ODoDM# z9XF?<^4{Z9E0+sF@d4OU>=%g1>AmTz8^P{Y_(Y(Xe?;?h)!LhhNFv8-sRyJVB?KxO ztyfD$%&2N*Az{;H&5(>jYUfXAazB3cUi|8ePV=2odH7N07@J*P?5T2tH+R0o%Vnu zIYec2m+;0~509lFq@xkqraq&xhZ3zk8_A5K!(liYk--T?gj;|(>tK89f{Ct1b26^z zN!erpH942J4M+nv?9iTKu+lzlK~QSbU81+^Xfqma3{DTGr{i2!l<9;^*99S*E69C; z(mggyt<05Y+%zex&SKPMb0l>3FupN_jZ1^KhIGirZHR4j4MmoMC1SaoQ+eAI9npJl zPQN~*@#3sGO0yV?RR2Yp)5Y@qOS%(tDWf{;UNeR<-rL*T+N$tW?jan`(iZSrGmjK) zn75>8(Ue>1PVOWo#;psOxl??v;9Q()+p(?<5l}U8vki55Lp8~ZYLmh=+CVhMvk9e1 zak>17wWRW5V#W_gm}a7FUJOG?>dilK5^yopVo2_S5MuM#u*a{SRXQP$$J4{j;K~-h zBKDVBNNL$w6QaMI*zLUYh?WJyOw>led=_P<+%2&Xs8k|8ca<@;mxEtT1Y}JKnt6aS z@-`JK0my@qOHsW{j$@%$^pM=YJ$Ye5j}apH?D!a3$f0L_f=pDU%!#>_5mXIN%$46V zO~kGBTjnz=uP9d1HK+H8U~LU=tDI~+a(w35PgNd{ixB$ne(D#0{eS!o`EN{ACYn!S zPhY?GnP)#G8ga8=+@HGn`Yn-2*})2mtOu+4b_6Ke#8+cF9@7I?2k16|)R8nzu9JVY zATNgGil|hYtF+`E9v%*X5niL05yAd7yI4@{MV7L%&Q2*z)`B%k2IE$xU%ie_s@AYz z#`-)m){^Z&yOJqtYW3H;t;#aBI%T3nZNhn_m%wtjU>KwIOM}5$G(MWnrn4$V42Yk~ zVF#Mp^3NdoX`ve`pKDfVmde69uc@2Tle_V2n|OCCxPlh>mh-2*dO&n&a;K=`bGKZS zII7QvgJ+ehzQPm^-<*E^lpfK!t5-R6SsELYDJmKDn0R6?xHH+-)w-w0;x<=~xtg)f zcRJbcgt*zydT&Wl;erCi?)?8SQ`;ms^ z&O469G8rv$l-xNXk9UH%j$o7Tt&OCnj7E}JHMyS^JNDAieXMlWQj(cwWX*?6+KA$r zTHur%y*YjHm^`4&aMH{OArH*WuPo%%`~>G-1m=1p?yAG^40|cO$j$*nxPf;=H0Tvq zJw$dm?w{7PHV>lxfsY z_-Umd?g6YtFghhi6MERq0lIaePp&A1CLgkRJ;0mxo7ZSVy~<417jq4}%Gp z+rqitC{mQ1KoD=D;WRx!S9)H%t2kXYrJPjKHl)mX9hpSaYS=dKQIm)f@#uu+{IpTM zZd=_LHoELoIE1a?a5|1o_9u+uNOH1kDZ&BS z%G$HD&&TA^m>g_}SJz==bkkN)Av?~aWL1M89+4}2RJtXW638gZ z7xdGRTmW5}^eds$N3$D4*t`^73sA%~n@hK{AXpWoC9+Ud@p3^|@>>eQ)L4x8{B_R7 zHlzE@jJY(0HE4JKX>2q1dnO4AEGUFu&1kSS8HxlY_u^OXPhZPVWzHN3DPHV!m;|3~ z2Ie|+ukjg`R~^#ZS9woa1Ia}n!3=<44Q~%ce;N+~?|j#HeCF9-sI=q0@Z3uu|LA}H z{8wMB82S0*`u-pI^PhS4Q_=%>UwH1Nzw@zAR?-n^o&(Gu%dG)g8| zTucn;#(-{mBkqMp?diYu!z7cKpg0T$5nUV8Oy}=h+n`BM>0Bde5$0i1rC~s-VK|Db zu-E3)Dv2}CR2d zkIBtP(;I0<8DeRpoza>8-pN)D?dSTY@0j) zxiXz=&YCjYL{80NDi~=Luf{5mF(!ntudZJDw|~87I61{6p}ccnN;#v7WpS~oxUrBv zGm|S6sfgL6xeEz33(1AdmJ6A~S=z)r+<9I+I}rqOqi@#PjLBj|7WC;{c-h34H^ZwK z;k-X63yhVSFBd&2C^1*K?2-@Fj4utWFU&)6rRY!m4~yN58`je zbV>=C-wI06*@wAEPZuAUzw<{T{hB`8lq`PAybuvxuvYqT_Agm*MROLjC&k$kNGT11 zz`~c@W93kJ`zqZeRk>Bq)3Y#ujdgqpkPlC<#yj8j9l!nA|7B~t!sh)4pZ|Y9{?VU0 z*gs@1E|z6ly0W#s^_gdX{`)@o=cIK0`EUJ;pZnx5a&)AmQed2?3PkLZcn&b5(-ZP2 zL9yGeSkLg%NkC6WHE&3#6fP>4js4B{Yk75+LS0!}nx)wcp}!$^RDWuf>%@@x^JzQqU|MJQMN@E*$70@+WwE zdwXwhPg;Q68fbFSYi1`+b_dOTD;gsV=K=E_5Nr9WMPH1EHqkK47x?5I7y1yO0WgRXpiZCIkWjeXLBp6R?4cHx%$9JYLkIBKpn0{s`AcPi4hSI=X&i#-%F?aEk^AmHe;UjS`APk+)426yJ zWXBEha1HN-Xw(BHqYbKljN`BT1lM`|{CXf4&Z`qYghqaHnDsh>2 z{r2!^0*vqo?O_tNA6@CO3MfAV#vy54JUaC309}NqTX;PtVHS*7m1dJORdUyB^I#j@ z(Xd@90~%75Q5KaHRuoc|)H!xj#vyE8j*>}uvLBNq&r@5{erWBud71p8R8LbX#ESL? zA-OzFt_ph{5S)^u)9KMxcx4^$0@XU*y11W~GzyhmPG@CJxmwN>6yKSC{e(PTWYNom zTC|!mtH9hsGuBd1Q*3T-Ub=KC47)pUvpv+B(>U8|>!Fig{pisSIyL3ysP(q!Lxfpd zsaqypLG+hjbyy#JEQ;@L$7ER}>>$L}y6FK4BSNMTIW1JTT0w*nwB+I}V<$zNMV9>u z&vWT!#@j+#fs(Weg_oXGqAffYQv)WD{n;BQ@OV3TVu04u5>kzd%$nO6;yFicY{}(% z_}XZstJjX$j85*vuN)=!=kA8NjXvG2EX=g!&Jz-Lr8#)m%qAN};FezMYz`*%L}cNg|o0o=^<)1Ugp-}qbqskG$b z!O@5R(vN)Yt1mQR_*_2iL%cP>8>eLdl<<+t-J{jjMB~P8Qr9nY9v&7Lp`DPf`;5vS zD+EF)ISPYlfY!$pX4Z_085-)U#oZ=euB2A?G{pW0MbdCC=k%M{%Q+pLp&`6K2!^or z#9(qnCP%Ykv^md6xei4hZ@^htD>Z3QR$!F<=odOLU}GLi#$$=%=_t8BP7XH1%OkX< zR7-jHqc%bRfA-!5%yOeV6RxkMbM4coyQgQ&T$llp*kFQ_jR_`y?2u$J*$0pR1e?v; zKw?O^1cMz2`z+W7vKPQJz`sE71wy!*#D-)sYy#%V25%B#Cku`t`(xGw_Q{{MJ@y!1 zX8PWJj#TwOQc0y!sZ=Um&ZWEc(u{Sax~Wu>K7H?ZLGCH{#A)Z@Fad6$`lO-5cia^r z+ANkaS8Pzqm`kF&veeU~*=#N@E_ON{hEs z*<%Y?Tn3|if{5on&3yK#8F$IrbeB9py(vW$w}!ZZ$)-)5$Y@v@S~=Pg?Twod24aOE zl7eJQD2lB@b-5Way0TJQjgh{hE2={WPdX2_VSd)$Yav^4{iK8v>X;stF}#Mz=ljct ztdgKospy!?Ps7+Tw*r_) zRIahBusb=A4xVe{SyV?JbM3k|M6wN z{F_UsmkW$@%9U%C01)org(jZaa8D2E=7a~6=K+!yk4w{z=7LHeQ&JL;`h8cUMlLi^ zr;X<7h{`oGF`Y|<3<+9l*_}3Nt|K6YC0lb6*YNeE$Ef4(D&MV@M*}YWDKQ?IE$N3{ z^7;=6gCdPaJ)ne3-$WeGTjmQ*H zOe$8OdZoh|FEGK~0d{P%36#XSTMD6+5i<>pv#LUA0F_EmSstSQL(+>^=uKjJ1rirT zX;^4^i!KiaYctk-*V-ecauluCgn_Hr%6zV?G-4xld2F%viA3{BEy?Cb1RfeWh1Ojq zryd{v)4=oZCejoLHM#krfn#p+3?ow6)G;?j2sQ%tG5VRUu?mo3um~`j zSS;HV&pzi_|IbbD(T{y)dG&R__S^sC?t3y%@u^1+e(bX!KKnV(R380{ul{8+$!;$2 zMUKHsX}(iop=QrI!=dYI3wQ8JCJ0DF z8F795Iz#jGk}$fVN-dZ4&DF>2o>~A#?YV%^bp~#hrFfc4Zlaj5ouWxI39YORR+s32 z?HtmLCx#ESaeo%?gDE!2EwL=7Xhi`+16Y4z@W2*XL!PM@gnBTgV{VEo!U!C5%V@^> z{r63m-T_}$hgVHOvk_(y?NefEX;bbiC0+P4)pRFbu;;0QIg}H!;f(=DR8j1(O*?3hT6e1PnMUfPO zNHL)i85K+sDYGzRZn}{~8j-#0Z;`dfhyT1zmi@pjlp>dUhpAtPEp&fB_&X_yj#5JW zJxC}|yu}vY+<}IV<(1{t%YXSd|JQfEm)W+ywJ&_`PygLj@8mxt1Dd3hlk&59dY2?WohFTMFFi%ARjHvt7wxfVyN;+l zS^VlNF8RPmuV+K}Z(q6d-@o$ZB9{4;;K9y+Eij(m6ExGQH>qP$_Gma%<(@PZrRM#MvEGQ~>t8Q+(Ufk_Y+7ZB~}Hj+uosp(&g$JWS8i)#~7dHq5S(CkJ$W3dXZ-P`@H;>}E8f z*Cul{i8~EA{Io-S6u)%zg}-$4g&#b2(-?P)D39VixCbbx)yI?Z>bH<((^61jwG2-VM3;bK6`KLkvWGLpC z%L@mLz3g#Pv16`n+k5x!?RL9)=BP%E8ruNT8-m7Be&{qZLx~#aN2?WRlI<5m(zKB8 zsigg45l-}%Mw;i6BTQ>t*>d@dXl|=mtZ@-}E1DNJtXTOirWp^#gtoVE*8wZo&5x%s zrV{sNAg!WwQdVq7Nd^a!ZeY+DEQ54u7|@VzKH)sDMjoS-q@6j6amGmgSs3FIGDn~y z2kE~do$CE(#d++Z!FQJ2AEJOqr@|!07=1uEx{Pt}Y6vee2>peUd3crmofyfVE26iz zP+PiYIp)N&EZepjm8-cKM|uO+s4*pIL2to6RP(sS@cW2`TlWqzt;)~$R<#pM4Q zI~z8%`shI0t$Ez(#qV7E#=rYtUwic%ubA)%)1x;PT07%jaPEN8jJZ*mI_{NH02t%>`T4_#4>KOOz9IZXq(E>JMBY=*>rkKc_ErXDt}yZgwH%mntzpyMU}CG1 zRSjwc-69aFII)bdB@lxE>C$RwKqi?w#wA+L<_1=8fr*=vK8AI&v`JRF)}AgbBsjjb z&u(P~U(rJ}1=+T4nTxi{o2V$!8?dYFzuuLlXp^j-b|2m%tCS~F4$OLdV?*x}V1!&g z{?K$V>6k0^;%@;4KNdV!A^-p&07*naR0?y#F&9SXm|LgCtx<$c8AkM|@Jdx4M`t|3f1OCU212NZ_F>YjN!;njY=8FOAHU``Z@A(=yzSVZfBDX- z7;pUhBjfuqSE-SKQaao~crc5*u50HDTv634ex$+q7?h2d9KU|p($QRf<;oeHi2{xX zhKbTlhBu=0z~u{QfNj)TK#eVXW0_Dd-g2sDEE-M_X1P$XxWIW>G})6ESJZCBGv@M&ECw^+Fa{pwI#*-OSg+SxSXi*EXh~G1=*}!z^QHw* zM{bxZ7=ANO{F059%GD%4n9jwT6x|33R6->s!Zbm%lBpQQ%|D*V*i*F<%ro7lRV+|t zbl|Eh(il*TtYMoBKoS|n5s7@Ou}d!1f2p!mAwpA;q#KV`6KzLfnPt*9*d~asxleAv z>a4Z5fx0n?Ieoh0ry>nf3;Fz#k%u#T&^8}d)TjuQtrnw^T{>8D9$6<#6bNI@X(UDl z^@QXuA&u+Fm>7Tr0&XahidLhPQb8&WPl__BGdP63%jfTo&YDZgV(p|*n|iupMCHtA z_L4rgR`1r>VE}}?)

Yvv`ekJo}tyzUi&6*H6$l?*99CUH3kdNz|~yE6c0D_3Lkz z!bs|q{hL3p#*o@$3em*9ChqtqU(4I~EW~R)CExbRY|Y661)3e{`?n6iQG=t6=9;uu zlepUphmIWlgWGQSA9vmJ!Rv4OyTAG71je5Hz!mnWzXqod#HC~fTa7;Lt`Ts`bDTR^ zmXOXad9uo+@_I#|#!Nr6JM*Dd!YC)-@`i+NUJY2uC6v@B=Y7}X7MIEfE!0EQV0sJKnN(q# zl4zjJQYbYVUYUZsMozCdKct9+t}PJi#R5MBNlE38n|l9?!Yy;fRd7bWZcEmTB{W)` z8xFN*h-=1}tA*I9=^}47n~RH!?RLAE^{xJyAQlt%PvLuE2fwXq-nRzB2&r5tM9C=F zyU`JiNg<|iUt&5~N~!2NW+HzW+Qf;$TSjgCSXKP(q$s={VLtPQw?KvTQq&6&(%OKA z1zR2JNa7$w+#50sAR~4FC?e%z5~sMu_*$ORnlIo^NcyY&O~DcIjJd4c@Q`9G~;h2M4E`yP7W5wjOjuCEX zfw@)k*pO~c!FWc6!tb(TG{3&PG<~;8vxX&W)F=QOT3xyqk$Ra;Eix|6&s^}l&)@Os z|MExw^#j-6^w0w*#(frL*$YT)Oa|_dqNQ%54Q_kQ`y$j2dO9AJNh%S(%mdt#Q7f_H^GV-cU-=3j%2Mt!N;f5Q(L!;Xkvn9tpFvU@*)KjvW zELD3Z_M{|zvATVvCY60x2X|%o*d|_^wf10|op2<#J8TuRF11naN|q;<=@wmC9zN!J zx=}vKTrrjEm`jo5m>X%vxF4-N!bHYg8dB~G$6SbOz(T$_Gh;5scyV#D*OL?a1I!ToOq?TEOdSf4{ytq6nzxO1jTyr8xgH2^&<%x^u zTh$7Y`?Uz|u3@K1Hk)ApLO~*-z;mVYaYg@de@ql^h=YoGPznJ^{1mIKkuaRHp7f1U zP;l-w{0Bl2CX$Q?WaAV$(Xr;bFpnWUzAhjn`*{ijh`WD^p!`IVB03f2IsbCUNKMKq z%cLqmJ#%v3@<~Vr;K?;tG%W|YNCU-rvqKj$ocBmeG=?_610F?kTY^ZK`@ z9s0)I_kQ8FKQ(=t@MWnwXet0}YgHAeSCqsic!L1gee1x0uCJ3Pd>zg9gGNcJ@$yl= z-ISVHWku1GRV>WjeaSK$$qxjjL5tXJ z?DmP6ZW!J||N0fb01rX%zVfgB?|=Eh>u>(VO}C8ud}#Vl)#yQ8I@9`h9B?)%Y|Yp+ z?y#|z=4GWgqZDhDsk(QJW|Ft4XJ0qVzL)7i0=rdR1py z`)Tu;=0>cP$24j^X+xY4{w-|ou9v9|D}$0wEMP%vo;GK!!3sEAqKQMGzGCbfh;BG2 zUW#wVd|@HZxI$Q0%Bw1t24SxhTA2sc194}hnu@ek;Ly!e&ckgyI|F-IJDPiBY?v-t z$yYTwcx!F=>rw(y`!2X>f$0V39oiHZ=HyW--hD0(8*HbP>Y;Gfo>&G>Ss;FZ>fyN@UgH;vGNsO6R|rOU9_h`yS1FSlQ7$#{oUhl`}04$ za{|7(6=RY)biD++s~FpJxHE7Yiog~8Eih&^i}JNHqA_H)tXKD!Y+PA*%rWYU`F@C& zUX_e?T2e?fXloC(H?6@6A&$tH##C5wbyh-!1)?_tNLsSEnhPnL5>;#ot(sU`F+7PR z-Xd!QwBE7iI?$is(nI4pX?xj_) z126A3RP4i%X38;!JF1M_Icf{*$y!2H0;M(INKdMmlvyE0L03;tSZTMp4z`5{T{Ogz zAQ%aUKm)oBI6oI7T(M|=m=<*^)VGNS#YWN>L9zud(xp|Bbg5*6oL(o(l)7wgu@_X! zH#3C54?ARYL(l9;TIA-ROu(hVE|Qip7f?!GkYvVONnjQ7f@C=6dQqVet0?a=-Aeg7MG-&>t}#jqW!I7MF3ka^0l65C&09s>$Xu)io%-2HVPQ`!z z{p&A#@vFA~$xZlKL>x+18jW^~bk+$B^^f;5DP7Z0Ug17cMT$PwU|u#?Uq#BNI|`V1 zmE@(;Gv`5*OIY&Qp5Uul?A>a+ohG>J*5(S4*wYkp*H?uFyW-vr0^$Mf)P>AKE63S4 zByKCq(+ziN3$4vI_Sv*0+T|C*Xs%J_k{47{CAlxAUfQI~8!pp~A?A9^luj9rxq%*% zJ1GRDErf0lNyprvw6C%%kug`+j7b%3+ge=Q)9rT0b1O|Dqfra?HFh&9rgD`*Vy8bJ zYNqjBN$IMv>EDzoRK2UYN;edyP?c^7@=g3UAMi08%?~`K`y3}V3;Zfy-8L#oh27JJXEspXzK+^ z_IYt|gA)ry*l3{2jJZ;e3CCQ)yEl(xuIzA|=9mjCUrl-l?HVvH0)kMrer4aH(nMGKRrVqjDHitLJpv;H+4~O_Ii* zX8I&(%OIutOX7@0U5Hpk(uT#|C!#WfM#x=u9<`y}vlgu~YX1^fO0VqF9OYee|B|8u z@Zi8;%{k>F2k{hRYydRVF_(%NbNT+bV{Sq-7E8Mp4W%N-Tra$Hzu%us_ngf%%-1k#V8+&VK!WzZ6l1X z%p}f0FwJz#MWKKjI_9E8##|K5e__YmkWp4R=K5)I3wq+#l3a})1{<0^Yp;zu^@Xh* znL6Sx-1=wfK@np3rK37l`2O#F->@AM7&avbwBT{5j7O5IWQ8YK6`H8qw7XkmWtBW$ z$6MAw$>ZjNGOd&{$!?7rm0%V<#UicR8Fw2ZzxH|hUM@(`{O1|m6r2b}&N{L-=V4~( zHr6xkb+#P}hwC$EJ(Fc57<%!VC#oy}iL+5=)iw9B9VsSG@q$eo3qyNg4VHkoG{%^w z2BK4I#?ph;N$hM?HC6K_l!{f5^Y1FQUAnd8Jks$rV||6I!-%2nk(!OC)Ozr9v8@cz z1`RUCL70n{QL6Ai%s zZ~HWf$GqiCBrEcC)`cxf(#!*urs%~^gzH3j%2gh?tmNY+?GmJ&g}x~%x|&oV>2F=e zLsvR?O`7qvnICiHG(DLu7Blzah8l1oME%dt1m%vNLA^AhL=%p-8x z5{t~MC?e8eD6%9ft`mufjR~b{LKkCBCSokiZZHhMOb6?gBcWkkAZU3mr@kme*4(85 zY<8_Vn|8Sb%%?%?P^;d_Ja;J%tdh}SvN6akC&+Pe#ALz{;a$#my2u%j^#R%Rl7D!4 zg$a`%1;<>>$k#B~vglz=Fv5hoDA-B-u-1eI^efYPdyNV~WE76Mara{;gHjs)E6yFI zBrM`f)zNy6%n!jIctAAkrdEFRMUzz2P)2+nPD2c+8skA`2#w6QYBHomRRDy0)?&-c zdsJg2==Wze&7OGhk#F4n_lEuI9enSlCON58&jrTUul2x14p?YG*KTlt3}$w_lrxK{Y(zq z98&lk<;*C9MyAcDRBZe@@trEew7rPR3pI&bV*(I;YZGCJ3~shbCe0N=2t_Nl)tE=U zH5Z2Li1OiTqK*XwO;n^L602};T|j8VUD-lwGxmHF^|WW6 zZ=$4ArctCfqw*R3()2?{pq_^VU8A913n-BAMrT8fIp#7a1?20{g6=^IQzu+;o-vmx zAXy1Yz5O(YV=i#VT%S3nB#g|*Pu`bl{l(I3G!_=;JDrXRRgnfxpqN)olZQ2rrZn-G zJu$>FB#~Dup4ng~3Y#&Fr%D=jl7Vb4-m1bLx3vYEou*P5gTrg)%RBRPxBT)Q!wsO< zcT~F^M|ZKr>{*pGSZ3xmLcfUVzbD1TFlObB;{F0MY%YUs*@HfEFc+{w>MeA;6vC3o zLRhLxF5`wd{fPxmQxlg)mR3;wfaJTgUO4U3UvBF9{ysgAkc0hMEJWbYX6^yy-C z#$4h{vYu3o%Y9Omz@%t~8dHm;j5N+yOb5?(@g6{R=*SV`(2;|h#{c4uzcPFrJ@v@J z*}hIuvb?lf?8!!{xsbq~V5x;Y)h*%@NKnP3S+m}=8wqT{CIfp0@9VDPR^Ow^m>PfjR=S`YTTDD%wd^m!%AeBD&_B-hz#eJ!{i;{`nXce9zX3FS-kZfwMuu4Jgt; zmlcNn^VMZ>$6Um2yFfz)p%ZW94ja#y8vp=&-wFT5rZM#wgbFZ2$6S6y;h2j7FD%Z_ z^txleIH+32B=gZ%RYz5!)(7r9?3in6i{IzsfzdIJ=16|?r`fwr|HrLpHqQ4{KJ2QV zfXZo4n!t|}%5ZI(F^>((+s6Xow4LI4TPY6<$AdDzcWz1EK zlwEQmFNicB6bXk!`$XQOaGv}p8wJTY^U7`>lj(A}UWeuU8`z1+L!I-7ApT zNZqjw;A~RZnzg&cX{~I-;ip1Wk&VHpb33A#7BQ{L&Y3h!t^OA7*ksjq21sN^OZ zpx^J!@97utRUI|VZ*y~R`{{gi)KdBm!_K&%c3M=BF<=w{G)iJSb|+~8(ju$mf>d#O z4BKm!N1FFMM(vUQYVTWn`D!1TV-= zINYW*&M^ZQzF72N#N{D>keg(AfHvD!uZ?ud`fPxbr>z(uNRet{m|Z61Q0jQ1s!!Ge zScp2oDF+j!bIkReXuU8lkz+0dc7q`F3Y-QO9di-Ih`Kbq{(@sJGH}eLsgAi`eP`tJ zn~r2qsR<6I#&lwA-%%DcdU$UW&(sTHJh=b9e?0GJpPSazH}1aIa1_r!KO^Vv+2@>9 zn98ko`AteGFg>zd6K3|tv};pqqxYG<)MQcrsiqn(T&36fmY71&Xo1yIDAy z!HZ4Ot8dmC(}HOUlUx}nrOp~yTl3J}@)9ulP(EGFA4HiEnA4C{Nr@FT3QS&LvJXtn z@RWx{zIi+&mm)>yDsQrXX8;(9LXbc0oK6D2yYo_CA#wxpTxf+U{QrRH{Ix`myUDsjqysw}NyeXm(f}ujv+%XrTWW9h;tKHtSZ{D^oNgH2svWj6M0RtwES{XPV zjB}oM%r&+7*0wmMv?tg03Z<(TJ&U1?v7u(P;+|^R-10uP6JHFXKW^a|GGbGPotAum zOY2108ap&-EMa@KIh;qshH%jZagYa14%t)L9#9S-gQL2k>6I8KITUz=cH%C%3>a{b zX*D6OMty~1VYmwus9w8aHOiMjWLqQ+~`4pp%kI*p}eB(rxW*Lcwja*ix%G2^kL@1CTf$v07 zJLA?+LV954vPH|gq5$EpHSe2C*AbP+iPUSlvRp7EvJ%ff|EF)i?aO03ue8uR+*#3k zbek^GQj?H)x=xGe-nI62tc6wgu}!k0{E#X{+MChvjhQ!qO|ciT$T9Oh1w{0;u9N%4 zbiXF$le9!JR%3S>wzgreL+9&=$~y}MuIBVDfQs4NsW?H84Owp5%{HA`bz!J~=Hv>u zpm~s*BdJG9;}>%^YeKSWPOU(*$zr^u*M)o21*Zw*!h zHI*`svFvOR>_p;!qcFemy0NlI8(LZL_0KH;>NknM^M2wPJ4WySt<6UDgL3hFYTY9}EjE5+G(R2qN3LpN94 z$Jgnp?dyL-0+ErO9TV~~lhFYzCg?LU-T%W8M;m%khXOtDxeKd97=s!F9-KENeg=4K zlW^f7x)`y(P=eTxf?)fe-2MdA8O*xE}x1tq}eZyXz}D_f0Nax-zuxV z?+k&FJqJ(ikcE_dA2n*!7zvyKA*W{=oAW?xiFC(eg4*Ei2TW0Kv$=1}?ubdFBE-Wl zr>V0dbqb0?9H%ALP2G-b+r;AP(8_VC1GD`Exhu}8RdR~JB;%r$0reaexRZ167l!C# zIdLKM@d$h#gbM&%55_fPp^plLDlLFSF+N`AED>tnqL76Gc^@(Il4dMHfCI~Y)1U7h zIJ|E4(DAnT^cqAkO70@a zwV~6nXIAZ&`leb_SjCbMWm zt7q+NK+Pmg2H&{*-dFzC%f`_4Y`=HmMZa+SZGSeN(^M`$LWsVA2uV)R6w}`|dfT<~ zkKAO0{JgIf8@h8=cMC7CIFHrwmXk;musICzDJK zCH#d;{f`AoV^@JGySVx*=9mk@4;q%_j=9}lcXqyO2@#c*5?wA7s3=iCX^$hNjH;1c z_0T+X3b(05RnLcsD+vwXhNJ6o*JAwhpzP6Bl`Pxnh@h17#O)C+UrChA3+0!5+F4XM z;2nRnNm@oKPKf{jAOJ~3K~!>$slk*$!@rL0N-5U{SEA`BZGe}Z_IlHq!^41S2;@IX zMPU;lVoW8owS=^aL?bnIT$*@|xc6-smjnT)QKbMfqP!&31Ydk2n`CuJH#^pxjatbI zKuzSy5q@IFS$RY}f(M8vt0I>Md2PYZcI%&xx5aJ*o-r4hWXwfD##|x)agfdfgcIbh zw87U1+l476z9A$6mLZo$#Q?%RYq5jp z>nWcgzNyWIYyPY;apC>#x4!PqJN{~UX?uk8H9U7n|7kvZWuEDp0pvm(`mIK9-95EN zo-8q(8tGTcjPV`mmt9r%ofSf3=bAQ>$x11PpR|Q1tpjsiv{;k4HAGCcYD36H6Y2GL z1gJ}$W!r8p(C&t7Z3d^C=hjY=0p^|(yt`_jcm>k^>WPh{K8laL!eL9DDtj#7;5e(B zRGGpIowPZ?dk1)P0C)fi;#SqDD&+FO zT_2*&j@@gZZr0fc%ARWNPK@tHk8icX_E}h_8RISlk>e~zzBhv+V=i-05Hsd-%~+%v z)nv>Kv|+Jaw?RqDgDV47X3RxGTOyjxMt{#tv)u?zu^a(W68a}t?d?#b#xwvI9)oDV zrm?Rt^PQRNn|4G{x~mpA3yv`lej4U*JV*<^`~Z46a21vJ556M6Xk}Nn}r09cO7=f>0K=C7t0gmuDhq!=_%r6--0RpLkL-5 zx4rznR$zwdpEV1fEDe~?8^k^dFqhGJEfiRELOfOs(7B5g(>Jp*;EEf;T1Pef&ov3+~j*mfA*3#Dr<>}@=w=5Z&E<)xLcef6)Eqd4zp z&ov+2i3c9eEOY4af$?|%?<#P`NBL-hfbfj9xM)A4i8J+CHKqlHHQH6l+vUIbCTk%* z(q3|P*TkJY@U$*nEMx6gqehKt;S7j-y46^(EZ(yDbFz{*dzk@@ryUK-YgQ#pn2m&LA(dJG1x<8|qv*(}LS?`|^b^ z{(0qK`g46lC))e(`+-TZSH1q_w}0--CmwiYJ4}q>Qit@P<~K{J+lplYU@;-f-=P*X z=B=j=@y4=y(xtp0Wjccd@(l1r|97(K)G8Op!KGOJ4t)+XIq(CDFk z7HO9mSdHz20xNJgeAh!_V~Q}`K(N_w%#dMgX(FSVxPxXgo5L6sdKETX;RH^h&aIMR z|)L(6M8+4`P4wUuPttH6XXv>7$RcqDap}wjP;KIo3w(Kq`Aeo5nXb15 zPC;5s<)_rV@Bpu^b{=#aYw-Xw5NT0mn?&VzsT4pajgbv+L#5aX!gkcCLW)I@Cf#}h z)PSz9lT({$EsxgFyl74Unz8ou@LoVxC}anwf0Fqj`xhr1bK|jkOdWHXJ)`WH%L~L! z5e3^rk?2)B=2Gkqto3Sn+z~zVYgw&^5*0>QwxH3s_Agk6YaVy1@U=Vs>coR;ZuPwL zpKCtSH1A#!v;E$CZ~PD2c(Qg48qis^pD}|Mq4Y;njnP5M8=~)L6t8&A_njd;yFEh2 zX7yiwz?Gwi_s!A6HIG|k`ym#Ds6tGsa)VMjTm@@skL~0OT%k;YSh()CK(2RF<>4H1 zg|HqSlEc_}AKKI&qJ`zg+z=w_Q=uXY_s0DbknjsBs!Q9FmW&tSKdGdRiE5_?tBdvP zyH5=1=DNGIMb`~yV6*_#vSzxlXn_rW)?5EvxOa!zF_)rL$J}tb3OMG*4i$FHZM2(v zpSm!+(5alq9kpmDYT!-E*91q68lym}l?~7HpLU~W-n!N1h!ri}G*Y1CM4ODnVi-SD z@8DalzM$|EHqH94eEfRJdKzQQ76X4J5RyAGYNn;UzPj=qps|QFX~ATQl-E5i8;br# zmFYEJfSJ}$OR_1$)uZEf zprP>_aJNtpnODqt!%!Y#Hf|B!7!<`Q^daTaYQPAKb*#A-^eA$@u+J3xe#bPh7^K*rO=f-=I_7#8h3#RExfB9F zTMWz?(Pv~`X0XV_`^fwd`-7km`d4Fwz0UY4F&jeP!Vm+Cz|8(dgfaGk+if@rl!g}% z`#!mpqM-xp4jls3-7Mx$-3ph)I~65ut@x``T24J{Zx=6sZ(va`r)k5D z@B4#eH~emLP(O42bML$(o1kU5^Nznx^X?UK-p`)#<1N&iLHj)Kni{(a1+F&~sWf^-p{O#) zp9|s*UO_6#YC#-|mRgNghjdq5JV?H>(;kn>pm!RV)}+3*{W9DOb}P)V%nllai)4d1;iBoau%Z?dFb zb}h*QBxTM5x3IaazJ0M%9Z@EJUgIBt;Y)CY2IeDjmZ~uZNJ6BToTJ#)6ce0m>&1|q z84_aJ&TAA89pyO^)&329Z3uK1Qxe8jR$8*L+A-XwrbT#6OO7ME_t zDufO<$kGN{COn%4x55)sgouBdoti%!{drU>K+Brl+jvG7&x;0zfdGS2%@31_MiO~P zBFEhDj|su*jJYWC-v#kZ;*Pl}ly@VKUI=%3i`JPSqJvm zN9qK+J07(_q6c>%F5eVJ_5wOGL(V{?=5cH66zrzwhqFcK>0WbVfhW*azE2H5^y+7? z61!(wlnTRbcKVo*-YVX^Vzp^pXTqTlL?>$R;%>ERpm{G$o!6!1eL+(QRfyS+xd^bJ`-0HBgZtwGg;;F4&<%w< z<|Ze+h+}S`Tf?X~*Iqo-GvRTk0aFsPrCQYdRE?d1?X65Sj}28a!oW_oaWF^u=bh9- z-pCK;*LrjiZo2x?-3xT&X<`W)r=#ogzCzN|TV-)m@ z92jikB?mUfum}sI{n8#RN zURwF$=e}Z6a<<<)e$&6Nue%b{`Alv=XTdr=XCJ5yGIkQu9_&-K2sLiL;{nFFT4AY= z_RrHJK)$>;;4}$w6em*0)b1Nb!T}<*HN70EcBPn@nXOW)}aMB zY(v8z08@npDyMKypc!L>Wc02W0x(ioK@bs8aC_hm3S5;XEBe9%AZX-*nfE<;!>f>Z z)Crda_zlzUH5c}GJ9E=6@FaESl_<)l>J?CH|7z?2M2`|pOtYy)rk8#BvoMU2QoiMB z!;}wivQQGGnb9rup7K>CN2z3qDnnS9gzwm}p4hUMy3W3a(~G&}Mqy$S27n2tSr+3& zZC4nGMl{$C>F2JYIlCC)W~GCFd?YA?$$ zn~iFZeYgQLl)A)=;zE33l(6{8LBtpqwAw#4@CpDw>YqO5lMqCl_IJ|2#{t6NFG0Lz z8qHXkEQIo(d|ZB58H5QUK~S$Ck_-gR2Z66q6jn1h9qNL!g_ax?L{t`o0j4ddNu|5q zjxW9%6M;$ON#z3>5bj%Nbn$|}9e-=2es9;9B<{KUTX%l->o0uq3#2i;^ko;{bN9Cl z2X^E8{@{|!kD8Qx){me0_V@hT>))>6k0*u9mFeeG2xE=;@5(X{@U-qshEcfFk`Me2 z%(WY{YwnY)l;UI}A-}3>ssr;~vbd|97i*}H-!gk!2u|r^EHQc| z^)f}EE^=0^#?~U4S$C~`hP+aKw26nzEii^Dgfc#J`8QgD0LaPM(aAQYZC;D35vsZ( z#9SyTzA;C zJCbHB1!58L>St7)u@-0W9_q#Sby2|V0zpjoWkGNe1En8$0hWP9S7srUnGy^GxRg8Q zl8^uba1gbDfL#GB{iZ|r);B)f$fh+pB2Fz=m=@8k<4a*U`X?5lsb~}5% z%3#W$T2h$zTIW`yMq#j*;|{SX-$rio+tj1Kq@!oj>?Lpf?YwdDMge{1&g{^9rSk-s zV5IFRGbKoSym-sj!^_PFSiI%505TD2D3uAwKcwhEC1MKuK@13!kYbT)KUTHFL}~2v zr$KVrfxEUvR|#_D0VP&}_Gc2%v-TcpJ*Q*Mh30;IV404&D00jN?wIQz0xPsFj5+4= zm@|U;VLW(p!Z8ANnJeBYERxn$7ehH|avOi`3j={DX%dbzt*!G;ni zpou$AX`G3{CZ02{8@S&3f83`QsU34e5i>GBj5+4AFvl)pJTyE1G{@Y)I8o!68w$G= zg{=|4x@d~Xif_T%20g_WMgfy*E{vKy{0o#RmghTfl^Q!0xfVkMI&;>33$?->%G;s- zdYMuzFRi}u*WY@}f4x~6-qmk??KM}u%W%v$yzk>LF>}mC2;KDA_rLI`E?Hh$nT84B z=Hw;?xByt9Ls7aAZT`Z;ra@3L$BN>?`oOTfkE-FDj9ll44@o(Mkqcpu9#UQOTlB z%BhvdVof`#l4~QW^kf^-_dtQxq`OSHFvRt?2}_&Jr9OFT)9G^;SU+M(%v?_Rj%CJn zL1RIf87hmdJkkq`_8aVu%Y~BY$%xy40Y!oArf!ydr$)`7S%dQ@!eBQ7Zc?JBaxdP!idq4BURUA!k$578+V?4O$?r-1n`=7t!w=NTVd&%WT zZ+zb;PCW34$q*iX;N(s3`@|dH`f8KHv;E$6@A;i;jd|iJL>cKKqomr&Al8)EHI*b5 zZ%3MB$g(6<^%7~}nKR(bb@Ifr`?v_EqkoLW%itXlTQUYOl*8taO)O3_!O&O+7C)xw;L=qy|9kSa$pgiDMQk{fLMdoiKTfVvhm8qiV9y!K~Q4De#(X+6A;P=|P$EaqO|tGt42 zUrc31S=c<5YmA+)PrU}3G3pVzzW;+)4!mH;)N^l$6kq;4knluk+*iT>g2$8)MxP_* zRuOtZgqpEPrROzEc>=P~X~O^6Y~$7f1)FO8I+CQoNN+CXU7V)mm+rEX&+4jV%Ul#s zq=YiPDyFh6B(6K5EHWSe5*p^QzS8D!<=dX(2adJIc*(e;Rmr5rLoutobz>qX5>F&8fQ+OI zjs=j3g;rLTkDEgxhd5hw%|TnzQ!|Xc!negg@MFZ_ea#;^tMh`6HP6Du`2R-Xl#viu z8T)}{LQx)vab}_rF+wO94AH;A9}a)U3o`~bj0_Xj5;}^4EenZSg3k%&xeHvDMc|_0 zDm=Q19(9PLU&AJk+3CqhSEEKT%;J4dX`ID*+70D@3q{fVU@J6Me}!bS`0tK zjxsA6e(;*h6&0#p%YS!Bil9tct3dn3s_&Rjs$qNC-SZgkZ2<_;;P^jC(mSOlyA_pT zRH_0gO@XLk6B^14Ru}6UV{t^DtAn#e)(H$DH}HJ(;L}^@%~=Ox*~B8;3n-?J;}Mj|f!}06S9aTHwlJ9E%@Y zE2Arc#)@$K3|6K!mZoCzp~2bQG#6fioYVF{ckq12Im4zcE+(=FB$x;FjoS~#Mah)? zu~02aF%(|oe|b@r*}MS8)U!jB9CMlU%%UU%i%|ycOi+*mL~zW7 zFb*>WBk=iPZ$vbVEyE%%v$!!pH|Xg#^tfhWFa70b4?cB2AII~4_NQKW^aXc*_3I`hTUl9s<163##s7Yb;b~m)`pb^J z<3rnUo=0_X&ymHM+qHAt_uNac#;86Z8lV}_ep0^M7=$<9_(E(X2+kTB2 z;u0HKxqiQXtRiCjKY zlNJw9Cur5;A~oNSjUR_>`B1(uuyv)0lP~z*ssb4HON+~PP zdL*oU;zz5b(avDo+fT_RoL+;+TbnoZgb{Kq`-^QFq=q?-3$vF z^VXpz?k49zW|eY+)=o@QfM-4D%v-*6^K3tQfIs}u$(Q`%udghv8V>G?-@5GDcfHx9 z&)`OM*Qx~`$P|no+8t~CNDx>sI#Ip4Fgy!!5I{`2jB^ySG6C_nmh zv#)x?%dWoWwY=tMKJvK_AN$z$BBWn*@h`mU%9pWi#v_X3|LtpEC!U}Q&YXMRILCkK zD=vP=@qfz%fR*Ld44D=sj!f+ zKiC_(pHhUdq|OSQO=Bvx9ggl3Fu!%(zetc6)tL(Le|lCjJ#h*H|JMCFPDsGQ0bt81uSw$noPEIHJ1_JkI2kw_YhPLwifbSN%jLf~o} zy5#aQ@%@q%8zs$+Nyfo`&g1&~X5CaApo$y`OH~-hGMP)sgzN< zP9Uu!*CnnmFS@>1N&Q1iVDEy&gljlp}^{fLM@xZyMJ702?~k9|Iu`|R~Myz?cOU1U=7MbEwT#Dm+?^$LQtQlo7g zg3RtDCeo<7<|UP7G*yZW57aa;q3#-eV#Rr^ShF>1=rNsCZWk72=w3u8rhM@j&}(0t zWUvrI-@ESz?|It?zH!&RlNeVHT>1(%3AeJmdc(0lFl7@binGr->+Q$ia^3~!ii0@u z;3Mz3<^x~*@?W!`S6};}PXG;4|Jov~pum4X*ODO*x zU{)i$)Oi=2d-b)iJ@5Q;(+aFCuU>!62XDW1GL{W?6Vu+BV{M2#C5}OQWJwRDVpMJ} z+D}8}n&{SwQMsCvO8zuCsk~IKUYS-Em8-v$hV0P}pmN0)S{r-NS{KoXJw-9!2ARj@ zDk+}lHDXmE#;_{)bM2PDA1C}J`~?Y7tmAMPL2$T)s{eMkAwb~g5Ng9X%Nwf2n99nha;+A%`vcP4GF%Me!-PGlMor~bShpCJJEAI;k73LW zZpSgyRBk1xjLJQD@SyU5{^gYGgHRk(u5&MM6g;9gcP?a#S^Qdxk8(Yf?1D1LEiaJk zC83;o@x_x#{F`&+N#VE{3=NLTLt{ay_f=KSb8>BPyU{d#lpGbMW*ia~?L1^VvX_Y3V)u5Kpogl^H zKrH6uF0g3Cu~f1iC(MU|A=rblN9fwVUoi9=`}bN;$9_a*B?QOZKvZQ^F5_+~vm)e< zxg_S8O9D^a$T61+j=7!;8{0$tj%dL0LSSG>DRG${qA#$zl>6Y4P_&I4a|t-7=mQ&c zDa{ExX}F_zwAH6rPHQa<=1;a`+}U=l@24T(vTm?sQaTCmFU zngTT{#3h#>eb0yAA-4CbOWyd+yT4`F!|Yt|mM`7>%paGP!b#+6c3Wel)bEHO-E@Xz zFrkCf?#WHEVrX(yzb0xJqGY(y%F%>w9~}Tv{IysTY4n?fuYKjO-*e3erZZl#$tmPu z6DNWG-0a(rzvYsbA5H7~n|FQdJ=c8T{_lK$I;q@4M-IIG_**VK`tzDH-@NNvZ@cn8 zW-Otiw>-#QPR)Jv(ukf;gc$Sz6Ev`pohi%nFM+Aa^#h=G~fP( zsVoy89w1h0eGzSR0=6_6K#sGjm?w@6f(?tBvAB1yus>3NdEc1+s8GTsH{8x}$(5@x zJs66rumrT&vM?rrt3%hCJH!4lh-=2g#~tFDF3L1lYRBBr>wx|ANnGHLxom&rn9KiS zj=2y!6nZSUjI2c=YpZn3C1C-;)S4TjnV3n6axqBSt&(C}Nl7p78qOSKrt|I?ymCh& z{q9cQbmC*!4QE}9%2g;3^j^7BPUVi_N>@VVCdIX6foY?1ljNfKGcB2JCdHc^Smt01 zF&-*6*Q?jWDLlC_b_SKJA?c+(9lB@UIf9Wb1&2YLf(1dW3~weePz9-dcmS0(3{q)VB`^?Rso1S>Zc~9YMU-|kJ64I}F!{uo%(GtFS z*SF68iL*>fia2ZT`Be@#j{e;2E8lSWtKM+A;izsn{&C$BDtbGL+y*Fis}8ckUwPRp zRfE6r_{Tr7xqq2&NGTwGG}uF<#=>F*ML$_^Yp))a#AxwT4xuereiZ%V zIz5&4oRQXmbglIdA6}r$vMg4c1-g{^z~lJ#^$Ccb00knm>Bh)9?7=orYZuwub-jz2AMw9FzwFsFYu1`s6Y)bGvNgKFQ}rXgR4@9LX!T$w zfaP#nZ|lw&LN5MO>&wXoxO=F%^+amIH}S5dQFVC7!1;9C^;wiuwD8t-7Z4WNzEAx= ztS;xVfJZL|w)HmowYiEb{fL3;f24c8F3`SLAjaUOP_e*@^OZ*mizpS|vhz$S%K9m# zYj*=H@Q{rV)7kB*G}X1ep3?C;JLL0R=nnt8Cr)s*>F}zzK)~m&>dHe;|Jr5q=3%M* z-lg*~soKU0>GEq5rPK9H6-KkK-e;G#b~z^VrQtsu|MPj%#k;1F4gaj}hWW|2aiJbh z@VYybU)s7vnaRWuiA_A%fW>BOzw%*g>9CJ+Uf9^X-J~g(I*qGPtCcpvZMed)R0SNs zRZc5^Q-D&Cm@6}ZYeL(YK( zfeSiU^1^i%>&~vfc8-miq`@kmsNnld40yZcfDmz-jxWX8tAZV661feLe+mA%uhrKI zx-C;a57rEKt}U7+vmMxo_1eZ-xu>w7ApG^--Jo62kWYpFz8)63Gzx*A-1zh2)Z z+sPh`!r%u@lBOF1X_aQD%clQML5;1h8Ae3ifmVm$wF;|K4ZEe5nK37c(i*>wjG44T z3&Ti%9b%H^KX8mQ5k*zAFDg2PvTm46jiH$4T$33UX$_WP2UrPLUmpbQ6!l+R7Txu$)ab}H*|gnm=)#jX@-kr{Exn<}B1R_gy` z4?(22E#pWu*^9Rx-m4?Xk21AXRtyZTx#4{IG;{YS;aE~tTvbRY$x)+Fjr>R-tzt62 zuN>feoXcoonf3lt%^ww#qvwaausd1pt!?O#b7LUq@!XT}A6yO2%5=RhRMQTN9o=}L z>T)0I`W)MeM_LE%w9wlJlZB3`i2kZjD7dE7AvYCr0p~0D-ImaboYJ{_Olkc!J=Jk- z60UqT_3&RUpZWqGWxH<2NdTL5Uc(EB-sjsUvh2tMEqBrRGdOYZK^2{}x$_HD)#q}? zj`TIbIPkw*53KmV{2jL5;>Pi=DhUC zb-X#*d_Jr^ZxeZ6@8jv*G{tyb*Xy6hR#o+IT)i%;c3wArzMrog_5X>xqvw3u9j?=> zyk6g8zbIZ4ZW6AwxGho-hE;YqH`kD*i9Phqc$}bVv=l!ryh#Zr+M}S2*a;k zWKWNx2CImMT8z79wwrdH$B(UAYHr}P%kdH4M*nBL3KKW%4Z z97xfP4UU=(ZNVHA1X9Q_)or6L!(pjxY??7O$A=YDl|itn22k=9jFx7X&(f73)q!?L zuewDQ{$JEeGK=t@>SY4$6NG73g#6g=^3i^!kQCmvYLZtUJ{I+bwEYO34gGp?@oUqii0)_-?M%YHMLtwWT=zKhD5V@Ul4rjd?k zj4a3AOziuwzgC~dAZgKw`U=BEF5^w8x#b{Uv)zbC~LU-VKa9gs)L$ixl@D%t- zOzR+cU>vOSD5p)Jfdg4R_B6++rrrHq*R^uEi?g_L3fxu1xFDrn`XNOkn%^>73wovX z`qFclhZG2G2Cb36?)p<)lX2*8EN20m=(7)OCNow z{-u^#VF)i|W&H_H{pqEIqL2_oINe;YAuXGxnlkI z{ppy+X1Pd!wkzu^j&&|bY!x)QWcY(SyL%qG40xJi=5~wscFE!|BdU3s7(-HLwjvOv zgNx4l-RGoZaoUVvY5Mv->B&HzO2+_qHY_o;AGq>H5>enI2rkL?)Ri)yk5=8IL z9$hlxpN!uAs?O*K5pC@!A35tHioh!Q^W?-!_s=;94;Y5!X~*N@oFS>wzpr@Aicx9? zL*1G1rKnz>HF7BW8Xay4@b8&*T@D*J97NpqxxL09gXHo5s=G=X8w{ESMoG<6B*+!Y z?tVqUZc$+UPWz7R(#ZCNCffV`5hcr|2WW5{u_wyVZO_*7y1L|ft$6i1lJj{}jtg3K zWnuVeET|<^G}|AllItStZ6 z(In;`9q3uM<5P6+=Sv8l54E>$AzflH4MYFcTkI8sASA{22dKQiUJAJp-zNFZ%&4JyfSa!7c__E1 zqHJB8Ie5cuaRfY+;d`gzuVl%C^n`+R=1Q9pb3_A6DyaQ$hIt?vv;TV*so4FW>8{BL zr(ca}fl9Pj;}*L@rlR?2Zg#;#4i!p`vG)vn`XnCq?1gDeabUBSxP>2P7Ni&W13jjI z;=^-R11SqwF!q^Q+)q774H@n}GB*4l@Gutx`@_=>s39-hXtQ)!mC$ym0yv&{eS#WB z^uV}C8u30MTBCE6fQ5a#)ZeAhzd4V!lmLlLs*$fkB+&j#j4N{^%8QiNz8|@ zJU~V{vq~$9(z<2d--GKi4ezKQA>{7>>9~tXD@8&2HzMfxw-SGKjRQXlKHGN76wOb%+j;HY6Ze4C1-oW_8=1`ypfA=boJ6 z%)S)}EO~5b0)A}#FFZD|+K5GEZK0B`7x9@V^cNZ50 z^Y?R{Ceu>7R@*u$Ds2aHLoIiLSuE63)p~%Y{JG2mL#%dQGW@bh--HvUy4x9c$7BBV zRiA6^&E$mc2O0q4XQxV*g}{UAy$>UR7pH89K%HuLne^p?&hOvpH*pi8aXyjE-IQLYhy zN~R~Ke_X_{~sMlFZStHurxOp*B$?WxaT@jt#8i+4b#=r9LarBumS z|A1&@NPTXBJCePEMy)IqPiJWtw{8P0J zW~Bb!ON(Z)UFA!Mnq7*fsc7HUD?Mf``ZIe1TIlGPu*S1@_{WMjrXN@_f<6CY<*DWV zh=hbk6|&JzC#lMJ9X5(|GvlwCn7(3XcNO z%c;kUvxG!CGEJ4qjHyrimY4K#%tUL+46*xHpj{gEFU7aXbC~Z*@Z{bWzuR%KBnA-( z0=fxitHg%AN=Ew9eZgCAEcPfZPK^OrH}ZA9FEriwvoa+%HQivRv14lx+7@{+Ir_o{ zy*>8T>kX)*!L?7U2vq7FI##3u9@Z_*XCkD00?&PfCR)eqqGHJ58%VLf4F+L_T_UfdRbvzaE?ZC` z=(;Xl#Wh28U0k0^KG_H9i0zlp89A!jTGmLHz_Ycb_MHtQd&VJ$1NQ`BmT_U^_x-O>1k1i$p6 z+u$8SDIo_3OwO|J%4y|~GK@i6rff-?U`bRSQHEi0e}NK8QU~b&#Ix5Nt^qE@WwZhoj-?>ObiYew}rQO{qEhjK}Q5-xNN22%@>oD%cQeKCxCr0Ut=f#jis53s&|c>8 zKOrOD^uNK~>3)_ZIWn18;WQ;{`>JDvd8Nx|yNNcRwG< zJY^iCoF^Rc&7S))HoT8FxA2aXPT!u^mDM-rKDDmGIkcP?*s1~gS_2BHqZd;TfZN&E z&kQD%=j52d6#2cLMfuF@dd*6;_{Q?L7_b;k631-&4yDV9*{mn=j3(m` zk69Igq<>>2Nir|)TP@yZa&eX-i-NU~8#OI`G)#>;bshHyQiD{CSw>ygr%NzPTKB(M z(kmVu6xsuG0#ccl6wPlUf#BF@X#Xq$Bp{oM$k%ixCL4OBO!B|Xhpih)jcFmM&Pc&& zQCVUKhgQTd${=1$kp~9;zu4I;ut&k?lphIA*#3)59B3s^1iE&?hElDy5e2#}d!5cv zXrBO`NL-CHMC+tSUv^ymz@BeUJ|oXHWrXDn{!5kRE*P*js!yS0O+lTJoX%lYqNa0l zH8GB1u;#QH877Ex$M5A5`2Uya$L2aZmUMh-<4{tf()yAfwb7T@{@u11oC z7cF3g)dyiWwC+2)zw9nz4Xikx`Py4&Da_byh>0GR zp=ZAd$NLL>RrudT17=9K9MbCQ{YTNXcdU4Z*R0X}mkaK7{Fv_hC5mnYs{4=)(cA1% zr#W-}n>Q6tOC^1E$1$*rI~yv52NPYIf$pX;T{zt%lSspfNY|dIs5BR=tk~W{DOBB6 zGUYOBzG?x~2D!XXFu1)$P`XN}CaZ#CX=G~s{Y8JFWCx?u@l4f*^D&J1GB2flH^24; z{p_X^c!x0Wet<{ccDlNidGR#Jr4;=S-m70%=%s8OL|$z#i*07(zo%Hgojxpif<#oh z&b5{RM=iU9E(O^oI--vRgQa(!k--RX%^$B8eS?w*N`S&{i30ngsVV7SDQCPaL&eku z0uclf2NZj7xXvATrCJidX9&-&0NLPBl-l+p6Ke8I%Q>VC_Ndp$OutepdLhU&t`K_e zQbgRGLDni=-&&TI6AJAgV#<9TFdK9Zqk(~3+Ys;&Gif}B>`f}hUjjp`RGvG`3`QfT zX-WV!+NCT_WAU`py7bWvdV^SbMIdyIaH$qWkCOO-q%!X+i5#5+xd#)(vL~bDucdae zzF&XeJPk6Htc!0=Lll5U;~1l$;e;RY(6fV?&fkK{*2f_z3UlK}ACl><@c&GiC5R{> zBJr2*l2FSa{oHE~{?@v0zpIiM37R$gRJ-0;l-n<|Cm+(fjL$gzZ!J+0^t?3%N*Ae8 zFNAf`vI5)dZ9;^~vfj!{*6~4@C=!MO9=|~vT2$D-#nrW;w-w6EPc+ z4Ml2Y^GMvt3ARE5lOuPZrvRS9EF1TOwX65?UghRsE()Q8U^F;=7jlVC4A+roIXg;8 z{QN}PgajG@Ns}hQKj5J2bl@d~7j8bOC!O(b*Va>zSuP3=p8G`7)uiUxbR48^>)Tv{ zKB~xnq`%#aGW4#<+h@N`dZ<(bnp@dADEUaa_!#4=%sgGbZK>jW?cJU%XenLZ(La}I zc6t^#QeBer#FxBQ9>IdnaOiwh%znbx0kc{35fVPlux*s34#JIQfBbe}CsB-0Qv`xO zLk;jd^pzVWz*E9%$3(#5D{X!+tV6#x64Cw zCZk@t4kGS|DlBk=?Z#6uZyU{&Dt@i}g)3n$uMq-tXWDlMEkg8NN{e$AH3PD9WO)t< zy+%nsW+>9WBUAjD9d<|=>~K}U5DX57vL#H>QVDF^|4S=b;k#{nM#@57M(HvG?IEMXlLNf$+n(&AhQz{}uom{s!Z661=kr|qb-U@ZUIR&?SJL~gB8f0FZlhBq5fXnO0*CY; z8`Dn#9|?IYYEt&C;1ju=$*Q}w))$3i{nBvAX`!*}WzfRg!TsJT`#&-qJhL63c zp$-j%bBF+(?#i1Q&7KE?N7~m6qI~QQnS3t40k=zpK699=qn`VPrB}NR|2GR@J9i_u z>3W`klQl#H&}~1P({I@eA>wu0tCjOUQCY#I?VVCyF3tYV~L%7b!y`P4` zQl!my%@hP&qC)}Q0SZ3i)%L7~AGb}kP6{op5=#^V_ZSg+*oOv-k=I`)S5n)BRF@xZ z9>&htkGq?~&NpC8;PX)95x#C=TD3no3LiQ&ITrL7zq_ zT=$Ztm-^xgieMddVmYTkV>!D#rdNFBq-CF6lvPxeS9rJ^pH>h#7ni)Mc9jDFdrwtc z)w7z9Vab}fuae@8(~#`O_I(XP==hy>a1_CbPmyyllJ#2l$_tz`>;uE*Wj~!C>4D+a z?)T>9$*&8XL$v4`T<#wJcl+u<(m~Ub`bDHkCKtw5X3(JknW80h99isx)Cx)r zHhy{U^L|uY+avE{eW0cg?r2kpCL5}KAP7iU9`(K$91Xt+Q8a(smVOdZqw}OKK~JlJ zQdyi8jOB;C>M0MnyC5_y?%|WaET$_ltq?;F8bT?PFH&-=2sg^ zKfC(Wj_@KQauZ7Qdj*FVb!olimkUNctLkrAJC-`5#gJUX3QvS|-Mrulu-}n(`B*9#CDjILynwcdz1*P} z)Y0gPR}0L&41|*6#LZxhkOQOSCtY69O)-VA=n2@5XylV;T3xgN>s+XFuiP}vNYr== ziw^O)2ttPp3k}g~6YA3@G^X765{QdTmytQlVA!%O10j zK_p-9(klyPY%wYnD&(iIHY3?U5|h$je_mHNDvaVf)%UFrHzTF!{U(aaCZ$`90~!}5 zw4=(ivulc_J2b+}+0Y7$%SX~Gtfh4nSyW}F7+c(5=^ItKT4^4uZSgyf4;(y8x`K4- zGBw3r!Ia^Zpof%TMB8u`R=D<=DZ6T_%$Aw~&pli$lR6L2xc<9Gx~!(_x)1&7IU6l% zuGD9E=3UMkDN|j??XR_L!%%a@IYyq#olZ}rV_#QE*h`}Z?%E=wM7{iwhIMs<%2m#y zF7M(d7#_ZWhA?qXu^{$xtuh64ZyYR{(_zZea^r}E@$^l|nsUd11?;yfIBCwZ+R2b# z3JSpK;4Ukfw$Ga7$$}JQBB|gpSt$X>+y#{!pK7n89V59-#xKpmrPslAu?pGX(o@8w z#ChrizBqYodK@ED!D8K@^#i}HY@+_zww3*Lh;4M6Z)XlwB0H`ujstIzR`F5n-3aaWYD`7W}D ztnNXY=4CArzg(=A(A>#2{AkmA31x?Vy?;TC)(1S6y?ROxUjY>TNHsvr?A3Ht{ZYY+ z+f6$sn<)E3RIh7G4a{{Z(@T-@^eUk>M9k?il?f8}I2KhYFdSbpQIKL;> z+Io|AoLb=<4JlG3NI<9nifv*U3voO_9aF+)0hS>DFe*Mb*yW+I(-ofe7x z+!uTYfIb?37atvZB^@>hXy&+heOh%PQhy|iUW5*2&r!1Ejh8189t}p0Qo@&rXQkp~ zHJ;rPuTf=GZ-omB%5jTvz<%^yg!Z;Kg~QZmy6)2&KIQLsv3ZI$u4-tkyGoSzaVoaP zbl79wZf5*ZImyc=Ed%}5pf=1{%#tVtpzc0rb{sqFUa*HF{?|?X#y1;jNQK-TG4&~YjM;cQw0-yALjEwD=hAggqZ15>_P^SB#KzO0Y@;g4#NzZOfb2BA{cTZhR2Y(_b=jdJRmRSQcLlZa${bS6;$p3pRK zwCG3~8*O6v8<<-<6zaz#M_@Y;>wx076l+YX3z6H5=FI=>jl0NZnU;9VmQu$le4=Q= zgl{I=@~ep}QgX>Mm)*1JU9QZvCp5@Q%hP$+um=uXn+p@Egc3`IgM$W>&G_x_^X?b+ zV1BlnW^GQT@_Mh{*H5M0#DygcK}MJF0J2qeJUS{t*%)5wJZY;7AWy{q(rt!CUM! z@B~x>)Euwmrn*uc2e11__9$fuzZ!wM-us8AwB$d9+wGHl;t`+4TuI(W8v(it_c)Yb)0v!oJNpJ zQRT3C8q>XKqm~z76W+~MRhSazw4p;;q3~nu`kVxx`hMkixBtWX9V(5FAe0)u!-=>9 zFmA$`u|z9ed9$H_bp8QvNd~2WJT-HF{zLYXAh(-kmuE52Mz^p^H+1cIUXyzvncHa8 z_QP;I`?t)(oCi#OaY@-W%c1e_)MJA8$c(CD4lw`hHYm`PF3*sbL3B7T6NmDSyZK;w z1?Bx=vELEwJ>jziF^?Q`r6v7A)UXaTa>XQpUIzTSXU&BsgR>lp{hx$-{3H3K?wWtv zMz#$oP6Z|oJBijTJ#JB>r{Q-D>29AQEK_OT?B}to_Se?}x>{|gH*9O^&g%4Sni)&u z5_6@^AO9pqp;bJc@fK}9M_;xkJjdd~YKDXwcJm12J zB-ydSJ_HSAMz}o{I>(AMjI2&VS`Eaw4d~#d+l^Y!r%N*7aO~`ztUDTDnev42l*^W| z8N=3Q*PHI6VNnQ7-|mm5-g?g?{`|2tHrM924ClHoJ-G;4hS!}tvoWYaNRt3AC&5w49 zn{nGh>;32z*(k{SXSYcpZnlqShnLra@-rX;>?pMUiufX7u{sdH%FK2FnF=xk@vhd`7&(w>R}9Vd78t1I)&%^~gfdvt`wfWhM^b%=B_(YI=Dwfx`r;lj3)yze5@1 zI9vQ5%ZtP51~*>!W4~G`z`@>}M?jK7?}(YHN+i^mrJq$K-o2EyrkDeKZRxj29IVQx zquQ441WFF5F^$xtM-soDZ5_TNDbaC5uqs%Tu6RRR-PLS8TdRWIh~9=1lc}~BJP`Qp zyci@e`#H|#p;1BPbCSaVc$=H+@~bf2Et~^ISJ%fRra-(Uz(hXG#ya_B{g&Km^=Wvo zHraL;PF=A(9gNm0&=!#R#!3Dj@V8Mv&^_EIdH^%}5|Ax+`O#GrLBtAWqxN<=%R|`i zbo0cJzSzQiDO};r`vwf*V;HdO^O2aIK#D0GvA=_=W z&#!D~;8$7rzVw=Q>2&;)#*i8|rm#r`H-u~Tn_Wy)w=yoh*qSnXLbeLT+K#m)KLY#8 zagR9!`TMHsEEYUL1tBNbJdgc#cP;H)GBu?U&RivS!}vqx^l19cc^!d!!V_{b=+2Xc z%0gu%MqL`Bs`N6bc%ZwlGI1oOWOFes{Y#o7K8r^Zi@?WgZ6s|$AWj}TN8Flpk3fGz z`E8<`Wh!OH=tyb-FS%cy&DAQOVn1bpq2X)v6<{BeE!eHp;30~2Rs%9!240|UBehHs zJ<#=I1uEm7IrfX=E51JcvY=UDavEJRaxaqTG)|~ffBWWS5M2)Gfmr2%c|#98bRH=D z$t22DXaGpQZIhAJUJx9G#NGi7eZoBUFI|PVi%wCKc#y5w9zlNB z9}`EY3&b?i7`Xl?9L7$@U>;<4obcJgIN4=-Xr!urU4~%t)92$T-RZwT0b$z1Kh2=B zwskjs5yN*qU&ljq3n{g_f%6H9nBH1o^OyA}N|&8xv=R-sZHz`a?vL;0r7GqzB2SN$ z;!&gATD_#4PxIO&MBn8lMNOmf{0Pwh)>TiujlPR)v2^KlZENEEO1bhK(;{Jym5)ZGsgNf*5JQ(lTnwz4B=?P> z4%{(xEyB6>g%+a1G zdS#3D#mvrTWn2&Jyb#<{ax#Y{p%!L$dV=%(PJ7GYD`cXkI#qnDMU9*W*c>_?UzD*I ze~WeFs(tiJja_<{76B(bHV~yVc|R$ex2^+h)|>43dIQsGepp_nN72N^C6~wutf{VI z(QVJrvZxgMz)|Hf<;}hAW)ajLrtV2fykqnilfsN5Kr zGg)4TYw0LE8s}ZZ{qBBK<g`Y+9)MWIkPj9!yHa?so&t?$@qxAj;X$Q`%=~^-*yG|2 z6DK~a10jO+j8W#XX`=&EnRJe^-r`@0B{3@yj^oNOa^o^?$H?4=#iOWKbUgMo`&Hf- zEwSr*oHin?F(^20(GQ|e^XR*6x~>s$X5qAq&j~rBSKX5C?7YLWm4e;6i^?YIG+LuY z%m3olI8_Hcp@yh|V3|^kJp_q;e=M`)KnWi7ckg>+G`H+kMiCgMNfK#$uaC^?jJn*bxMdL5(w)_4y^@ z*J)GHaL(bzEz*#?glh<~-)Vv*r7G+x8@caT;<^nP8oYoDtv&G`s_?>&(`uS9I_bA% z990Djgczw_7MjKNw&y9JQiHAC)vkb#-J#3yj@y4_pHN*b^h!1Z@~qaM*`Crl?4mkRoDpEw1^{^+uz? zMhEV;o=!ABuBR`l0uoefxX(JM4ZS8M4-i%QR1ddkht?Y|=nt~-P#)M-J6kI(WpY+` z7brTibT3PTH-(M|lnX5L(CAJ8|yuGwk#(5OpR2=DUX`4mp%;u7rOUAh)sypiu%S_w$yJZX3xTm>;_ zpk7&7U0Xq2yY_rCguQBOJZ0c?NH^UD!5=P%{i8Ag_tak2PpbPT@9|FFYx#ERK6tC$ zG|C8=eNvuTx)V7`MSC|Ys61GpLxjcmQrKaNxE%yJ;VsQRf|8sEh*$H0j+PMgmGpf3 z_k7K(pmqGy(;YO;+x)UQfTEE65oaWq#R|Ag2kPq6`AdZ%(W=+Xx1U+ub$a$yZL#8w zEFF5kgs))Jb?i+Aqgb@mAI*4t*-u8+oAw8{xnnUrLwdah>aD#iUE>||v~5RUF#sP> zw98^=#D720f8Jpmm&id}UY_?1sZW#$7wjo$pHLAoH;|~zd>1Cjr7@hRSoO)W#&5q)>I=6r&P5B>uWj|{a_qp=941w%E(4CNaUwljP3 zofCea^R@}HOG0Vexu*sOCxDIkEckqtDk4lVzVZjLWyFl^@Ql0_i@yUnC)b*mCG=n1 zTrS>&2~9-QP23~F+x}~Gzpiu+^K=+hgulwK{%ULRidtIHp)D;rzTflj5 z_0%ZMZ}{78TzM(cAXxxh$6%2ly#{}|CUb%@z>LrrhsY&ID!v2qheL%Q`l9iVDczVk?b zSr2?=`Y^fPdy6Q)yz^Ld?v39FWHob^32cl!#cV#!&+>epe=xm(nsmI&Q>GH6l&RM3 zTXk$po7D~wilKvDZL(T%Iu_I%^Xoy`PdbpTI^0tSivRI&YV`S|?v~%htF5#C z3)4hdPy^16gJg*MCyv`R@ehvJKKvrCxc0@S^z7}#us;yX5-|}Bp_&017CICL%#)~r ztlH_S{~*6x>kG0YXhP3Up~JC%^T#)=f)MDzVKUQ~jG%@T3t>m1CSa<3x)(GwWq!?Y z6HE78s28R|NpFwO5-K(jkLxs!Kks%5_z200-_L<%6VFbnC<2`jy|*G!RxJBU7%k5- z@^FFG4J+kK)|^iMyI<|dy}Tvl8U{uzZXBpgv+qYOjTV@SP4y;G2XQ&mN+>t%PzUU% zJVR!_oo^bMFSjC?5P>d4$%a7n3$Ki+=Lw-bn`rHIwi{tFgCvWs~hQHOg?2N zVuUnRMQwvoq!!ZICA_j#DuY*)2{`%9CtOnwMw*eHo4$hL4Fx%z+H5F9b7spd*3EU; zG}P3!>EYA0dEsTWDp_OI8hF8muQ=7aJVePs#yxbrU1kJ5vDX@M-W=`Lu~E>B=b^=` z_zXfg|Hk%yh5zMfIvi0=-tsx>`|`BQdZJKrm(KLmFj5xrGO*GXmI?19&{fx#rT=%< z)AzLXQuBM4yZR+drY&v>L=$a}4gDfU6>cmiE=pJ>;dw)&Y%fzio4#6ShVIK0)^I8O zP76enSe2-zmQlh+DLMA5|5xjFaBI{P4>Hp{PktSzQ(jo6K9GoNJVB*)zU2U{z0bKx zA-2xDP0UF#65WF;B$)RUI%N*Ko&6$|fybP6z{c7j6Xh{c+O!9de=na5!xmS; zprN5bgW>#Jfst*x_^EgHx!W#$w0RnxApgVmlWN2R)24#`nLB2gPN~pd76hK2%NM1zTE2Jp?Ld6Ak)^`*1N{EUt}wtk?s6aUJ2mjGvLi)|2Ut=#OuTgdAo9V9k}iK zMpnWB5X*TSa`^=OnT+H0B>v8ayRlK?;!%c>=X2=r2tB*UYx85l5o%|VLv<#J6F-^= z50e`xU3J^lgoYLr2tpWAShQXTFO5LDxp>VK5Vfque+D6h8?gQ{54!0+@g)iZw#qb% zv{E7?^o+;hn*~ICv(3%FaS&1>omh!uTxwoKa*5;G?ZPE6&eX=^2)yWhyBHFb{WSSh z%=T&5DSFeIs%Mr&RZD>-r`MswCq`au>HNdU$0rE`obh590}cc1D+wkf!`U@;C`(c)hnN4Y4&h@l{0(LgKXM+CN6x4G=@&!xIf z&ry=k>AD*&4iIR%xVRMe*;;M2Mg-tj$qn*Nnp-|Zv0Ve}g=!4WE~Cyk1m2#dvTvr* zUP4>Yt|FVVLYw#hxI9q+0;fYatLJZrF)$ZkHAvS&OqC0SC}ETS5}A?_D{RBLJn-6I z>0Uk{;l0+MrC6%9y@0?56z3j^!j?RX%_qlXm*HWvz*oUMR2idjlDpD{1>SNPucNOD z6q^Oa8uv5URy0fSwNXDtwDK^(ecx$+2hP)t%cQYt6b}F3#3E*vPOYVi6d)R%$etAZ z7;~C|7OrHRk8J2qmGPBsUYcu!h*)K5ekw{7Z$G{OSxcH%T->cYF!lu1%kyodY9A}U zEa|!h2Wo=WD!>&^A;L2;4v&0@dP<{IE6&^+>OPh?1l?BCHWfF6!_GKx-yfaCFnOe5 z@Lzmoxp~UwZT9CFqANlb{CMe_N19R}nlP$Z7F4ix9Y6f0etO0_;C2q2S3EaV*ZlTq3_k(;%o| zIAk$f8Z>)0ZRPLF(|rg1FUMc+*QKi8*U!0hxxHq~*3qgAujfxpUULoAL4UQ}YW0|F zoxoeNk*%FHD_&;P2milW0CiVgg)QHmY~>Y(19V4`lW0Od+_jRUzLC;OVaAV)*I*YYprCl4p~m-Eq<54hB(qFyuA>i0F! zH|gvWyisbhAX&LwnxY)LK%=YCaa#mJx+pSSR=fK*=p|$^I|2rhizja?pxnRufYA9; z5%i={*Hj)S=MWHxYY}saJQUp{;Kt?5DImSUsXcZ7ILG=|Zjy`$2RiC47pmJ)SZ6H3 z2p1kqVe+HI&X~qM&C`}NvDr%A)V&#BdkMDTQuyGEM)FMTQD$D>$UJ#uZ1>LBP7*v| zff}nVy~UszX=r_q{EZ(DaH+CNb%_e8fP&2K%*01gfy(ue6nhPCUxy*$ad7K~KWhtV zoq{@qwLiw4lc8Oc1wUhmq>9aZMK;`kEL7PjLt*JT;DEX=ArdFt;(k~PmCo6)&Y068 zOb!I+K#At);JR_nsJqzT9uhq(F##>Y8hd4@0Z+So7jOkdl@;~@R1K8Qo%o*JyKK3?p)QgK5i%ps}(6T>k{u+gU2GStQa^z~^OSu%^qm4`qxbNFK9>uy2 zgig2Qs{CzW6Q8TObFo;emwUfhq5NdGyERiR$$1!wFqY<9a?zrtVeh!nv2XxkqQ3t^ z!P}JoT&B}0RdAH2@XaP$P&M(>_1U#yB`S2(Gqb`2cE!G*w=jkF4@BN}We3xltXBK` z{==l2rpx(psJyVzKMeKgz(6Qs`H+_coaH`FESHtt5cWzDBDJ4rf*gVyca8X_7F^Sh zw|8fi&9a%ypM`_zW-OEZU-39j$zIy3Qy;t4SoB7deX8;g=(Wkw$31~)CVwOB1&P%N z{AgM>@qi-mHD+M7EtUf4qe9C{7mWQh)}=y=U=zmH&#hdIxpAUcQVtA2035dZj^`uE zsG9jEA#zh7ji#s=h4MXHc^KFs88dE*mMU^25uBqn3ZIL(mspD-O1EBb-GfmF_Ry;fH=#SjwKLMkjGV&*&N`Ey0wG? z@{+3d0WVRl#eU_pPDX<8U5m|*L){j(J@7K$OTTGh&d~lIVKZ9@U*8^)36k#H!z#MJ zi1N-$>LU=4w(&!(5bXb_{XpIu0@I`ddsgmm0AW5ukZWN13GpN}*1J>JLcP(A>_^ivb~;=_t+YM6#>O83{R6vdvho_q6;@Gl=^SN@ONx z$k#l(lJ9DUJ|LML`Js@BsjpeBi#f_7F_I$6E8!&fTQQFRmcP%Ba>~Tznd8k%wYSoE zMalU*uBB1v7QW4cH`nr3Ehv>2{OjZIU+1qpM_V%vE0t5=0wwR(S8VZCYjtn6Z=c+D zqtD7TIvS0;n0*LKew7JfM+~jryNNe2Pw(}3-a%v~%{D6?USpT4*}7k#Y_QpR zPq}z2o8k5-%F1%lqv#CRp?hVHw~R9f3umv^<`^?3Xpt8Ck6#8FuTr)LszU19 zQCK&a&h)}@_N=ONsSoAGpSYN1>>T+V=||A9+C+`oUzQ#S{|Eyqm-Ee)mE>q%EXl&_ zHP-2!0OoANR$Y@%&VprKQWykLIanWrG&_S3xVOT?vaIfGYI{ly)v_&K2X+W3|AGdeQhf&q<4atAbmDO>VL;%_%%sTg6zQ5&vK@r5Hj!}V zixZ{RA_UE{#!k&|L>Ke%q(71gY&?|OkxLx2&(Cwr<91Sj5Uz^4w)Jz~Vidt%FfvGQ zCD5FktdvN96r8PRA6aE@E}CrH2ynO`(VOr=6F%r{J&bC%MuA4rR^ZNumFw4V5=|i$ z@NI8L;~%2Gq?6y)R$jrvcQ=3l1^ z4qc|+0tTb5WDFKbu1CE_D!-Oyw|`$QPB{dma!<3@bTG^WNp=6O<2(aWf8XToDGa;tMlj2WkEJ3kT(Svj z?SF6p+V-*QQn3iuu`HbLeA)SLO3VaQg8w|)5?ucwsUXzw@Q=c30>Nz-{*qRC-$JOG zC7ysxaOt7%hT!6KQW5fKp)5g(uN3090qvQQ?|P%>V%@yHp#ute(|eUits5==q{%8iPSZKycF4)?5wsOvcQ-ELw3&kT?Gw?#j<8*e{h#hkF1?&6 zc*}_Tktz3tI5%hTuJEzStC8n1Zoym82=!MZS&rzQU+V@?<_z6l&Zo3lt|Bnt`3An$ zJ;p%4tk$^UAf3C=boM#AwpHkGTe25GMu1N&5hB$_{*nOkE%?U|L&f3BrCx6 zn{f4;s)x0 zUYLQ2K#k$PXnar~#U-|5Ip73u?Wm@2)LKZKRxvDgsrxK}hTp}l;A@uggNw-;1-w~b ze+|-zV7A5!3O-QRNqY+&E*Xndd93=$^>Mb&Gh@nL8Ty)v$Id1d) z;?Uzyak0rSZ5ry)*+X-f*W+LG{0?SO!#KYp{Ncj)vPr)cO@Pn} zgo+~J*pL^3+tO21ZQGXYm&oV6S_pAnF5j!Q`QID_+CJ$a>^Q9s)$g!8Cv2UJLfT?- z0slkOR|dt|@Lc0spg@7*?ovu|cXxLw?(XhZ+=>);cUatIad&5tBBe-i_^$hT=ljD9 zGrP=kWs{tooFoND8FG#wyMOQ#xI*7?_tK76Ze+00eBhHYe4f*{XwrOvhz$sFZcZ9| zVNP!+DOxH!zHh(uKMJ>3Sw5!=q!R_>)b_5o)}EMjcl#SFiAJx{;yUwIB(60EmSb)P zi;H#z?A^A)lr z>SDX@R1Vdzlj++>_<<_Ko4plzY`}Rm@F|bIP%HUB;JVrZDp;k&)AhV!PxoM`uMB*< zcS;pgX^B;}rnWk1dDfh^OztU+;Ygz0QV>{D5v{>^0Nc2QI|%KFkYfeewAG>bB5Vc8 z%xliomNKetV&nGFE?2De`Y@(dWaWICmiKxBQrn&HeH}?xIJ4K!r0$Z^SIUVZ<|W~y zJIloZb~VB8Kx27u<4665jiluJuj-LiL}n-Tcr)zuwf_?`4307i^l1cBnzNOOfaR;9*z7f6MszEw8;tMyzWh&~%H`%0;d<+v5 zJSpi(Y{7M$cynkiHpIcWW;p2U8ng&QHXcf^Y%2d%G&7lCik~&SNz&Xa_^t6OBROAf zlLKhbJoTMIY1_Q>1@}~ml!&~({hj5$IEV|b5b0)b8DzciuOjfI%c6(l(_50MzWld3 z;duK7qIKT+D_xr)nUQw!z|{=} zQP_`#esTdj-(N5P{>t>ZuV6VDSOiYFxyg2YTV5vo^O=N*kDa@^9#1}%uWbm0ot&^N z4`Ad27A{;(;0Fx^-u(~iAoQS~kXkx}IZCPTzAxTPwHHrcX$NuF{QEVrmm#0|6ZR8@ zaUB9mamp9Yon+rH^DVJ0HbnlX{=` zl>O0rDaWkzybP%W0xJrm(HQg>(th(MLEks(1t3q}noi_SKSsl@T4wx>P%9X!L0tdy za_Zmq@@H4rXhqreZj;gOW_=ETf&MdQq$J`6(Z|wsbAxjRTYo9#J!m&)q4eCL_>dE~ zmwhDbzmucYhY==C*jLd9DXY5t5ZD|O9rKyJ46cy5>9E$J=)CPqleu9JKIo{9oQ8o9 z{z74*P+<|&m0_G@d~J+$_PQ7bYno^Z?8f>m(H*#2(Oy1jDP z$Y?5Ea>>-p&U{qPqnA{FsiavMVNFsO=Avn0Q!#U1oFb{--)1?FT|tftOHyfnNGf*w zc4(`1j8|FL%{r9{%S+!T1cyD6ZdWSr<`qBG5Jbd}du2PFm*R^uOQbbk6FP{~<1496 z>(b@;VHr{UTSWAHqKg{2xd%-qt+K!_%2e~9JtN`Sv{W!3b<#`8g~9W_V>8uu_Qx0T zU&$WEY_MZgr0LYnjk2t_!giNQ54BoPe|T^=ESIJ<$Y!V{S-cYOBm=hu>NyecJxZma z1Pq$t!Q$!(ty1^s(HRLJeqk-jnjJVH_SCL)L}V==`Q5cT$9KNHxE9O2uCy^b+6xwr zHGO-9>E_yA!W5V-^E`6K=igZh&Uxik7xSWro3{H}YSWIWIgZ@%{bFymA*sMQEqG4U z?S@D`6nzv4((2dNPe8C@jai%PI}B+Ox<6?w`;zwx>OdF*ou6N+zXMt~&`ll4@85Ac zbAZ`hOmFOL9%1VY`o10xq``c~&GX-j*_^%)g8xDXvrxwo-qtUHPc4=-vjPqm9m(7z zLW`I@iOQyz%zu$OQ;Ck~#7(?rxS)BWS>?yaT*{@IG~@;Za%TVKm9GlX@Oqp5iB$Dq zWz<2<5g!S9>x;f9IM!|UMEx`Ocyp1Gm^fy11*a|fB-d|*TK#TKoFnPRZ833XOW zcPyN{{pUED!ib{Ewvz8cKuXzj29+Z}<~ZE1Tu{Q7%DrXaQ|?P;<5a28Bw zwz>%|@S^+P&4*xkupwmb?oVUa5Z2ZX6W==^(sZy?(t^9As$966WR2GMoy{NgWzN+q zpB~?lN1IeR_AitH)JT=i>K|ou_s8S9m&p>X0FU8o%Us_=>59#~_sh|-S#W|-{cjNM zTM}v<)yF8thN2_^gTEd+Jkv?oylb243{;*~Up{HnGrqvTP;ub5?@PNWSyr3Nk3V27 zCBc@2g^foXxhpJk{CI@SXMYg&JXq)F^EU=8;Hdw+z2sWQ4Mb%#&R3%^U4LirmXEU< zTEn-?JX_K25`Oy!wUI6md^|ozaja-V=%-+f@|#eKyw}b6$K9)UDCr@)CwkjFg*2AL zffwH*vzkrOSr7gtYsWG8XMF7mc9VmZUu8BHszawbI_y zj<1M!r-nn0qKEv*Gs4z|Zm^&WYQGTC#@VL=Cds1x0++3gf+MlR;Z7-1*5dl$1Lv)P zs8;kd(ZhB)vckHLxXU?p9}k_lkJ!)#TM<=mT4L%04r|85+=FE-;aHFu%!Nxi4MFrn zsVC1#cq{(|pxU%W4fbxOXj+-MllLWhIABctLk6-tawz1?LOWIzUN?yO)(Ou(lh~9a z#WP*EH&)t+6MR%d29{wKh5?wwVw$<>%j54d9Er!NK!K|l>@Rr72R;9e*7B4zV1kbG z{2nhiND_g`W+-4*K>~v)f%w`|9O4(5(WyJ!2+}kR*6Tre3Gb;K@56chuQY~}{DJbT z&^Z&eEAryQCb>4`x&DiLXAHkEI%)qRzS`Tvd0no-W5P48(C=614uHnI9fl@xI}85T ziMt)RGVpvxX#1PcwseYnA*;QUu?q;e0Gci1cb-cFDkT$~JQ>&r=uR|&(htqzf+ul# z!Wrx4Vkm6$^gFelXO>?MZXo(h9~`oOl(P~(+V=coTBm^i+Tv(5UL__vNcb$If>k5` z%xR`Ga!%~JA=kzU|HhW@=F7@Y&Yb5!XqV(s=@;mFgUVBl`zUTkjTEVp7i#-$V>*0u z0s4ciVlJ*4la5cOL&g|6a#G5ADSk|toktO(i>5sq_tC4@_*XU0!47d;q|c#YwxYG9 z8-tn#{(st0R|$63v234|PeKsvD=TeLPLgeFE$`0jWaa!Oc6=|-mk=}Zg;|{(fFnQo z>;}|rYz|$2oF3eEd9Nu7Jky>JV&F0ne|U_yP}EYzOWu2qqGK>xf3DPc;%BR`q8qy} zZ0vX$ZJPm64I1^lN-lsQRW3E^4y?A*kd2G$}6l#(JL9--e<3hn<0AWL=HSos|@|ET-DVqy$)|2O~(QKU5!Q7Tx~F$vuQ(f ztJ|h?ut89l8nh6XpCqkva>kwf$)AtLQU$XzPW8^6DyA(dgmYOY_ae^p1D}4_xzY!n zh9y$m+R}P_Fc4q}kW~1yW>W}f?4ZxfU? zgL!De*3K)n7ukgyi-ETpkstBoExq&5{w( zofFw3kL~b20~`y7ss@-=al8>WS}3ZgS<1lEV;oP4p{!&fsB;TZC{LQm54iIjIyWUO za`MX1?uj~J4_gl0O>;TyKsEHyX@dIa)Yr`}P@M+bwb%{=!{=BHo9X^zP^0wfRTw6c zYLjo89R&|D5-kLAK7MNlGQZj!mF*#$(Y>WtY8l4uHtZ4xMg!VQUv{T#y)I> zk4SaxXxOB7yCG>qO9?e1(aNUv+M6d4`gU2vO%Ndpv{^yDbBbNgc!sJ0a z%zh5vFYV)?A^GW|G2L)`vY@0LP~h-fUu#j?#)!mB)g>Rbe{6jH#^)&bCy%t+wW?}L zGibf>AlmPpI8c^lC13ESE9Eg1l8G5@OcQbW)@bh?FB&wFK zq9OYLRc@}S#k%FF)+CUVm-`0a;{_MX+&(0?pB^XUa_5I}NorP~=dKWWXHcSsv`&-8 zT@XarWw{mgrzEXx31Z#;D##(8@1K_|TG-gg_Bj|`rywOtXenOKmrZ)l`wgCdKQ`5n z|Mk^;%?M8iElKjHxX_vY4!6bcAM~ycnF7w&6@_M+8X1({n@(CYU0;~}-o`U-_N{TR z-jS(&*gFDu`g*Ao^!l!R@NISQEM6Nt$Kh)$Rl0ixI*OQ|MD&TT&N+&u+N+Lh!zXkg z014U?IBqJ>0nUQ2^3&>9kzl;^Ep1tovUGociRjdcby^vKu+Xakk>*m$@%g}2Zkk(d zRXWa2bg!0aXGhM`ABaHjte*W#%VrvbfDhuERcrifMR^gjKgvw#{TG@2?upLo-(kCV z?WBbfOZQe$RQOw^#qzyxWH}fkk-s)WPNg)BElyCgMduDr+mHwp+d1u-r0N=g;4p+%gZpF-*=m=8{4*wEKrwkh8 zSE#k%ibo}=U(h?FegxP~Z!iM_7yeoxJ9sC#@zkto9h~H;la~CiO$76eJkZG@gOT|c}ELzbU)K5UDi*G-t*~AjQIKNlW00}mc zIIBTo|4iOcz;DP{yM9%+-e9_W=GZ%To4rA@+Tfm$0VY$?(GWDbt|(LDZRs(Q|2;@w z3Sr+|a-C>8BeGBdj5m!K$Z0Z9-*>mN+;ulW`cm3C(fKh6i#3@=s^Q;YlEJmM zKC(l8nVB;OiP9>DU#qyIN3RhM(Kj~k=}@l;N6#+dlyd;Rc>|aLG{f?X^JX#|Z>qp~ zvkUn05G|e$(U)y^opfwIwL0jwLEfkn{=y&q;)X1ClD^gf@SOEG^?-rEJ+rsnaHA#n zbq?@$Bc|7eDhV$Sh|s03SFhaPbO35N7`koIetF||>TUtOHazF9HJB^;n@+jk)V1PX z-H<-wLI?|VTm8y2&mDCCd!?wEC-8aR?_lEa8iROT^`l!QT0MuYJh5hH6bT6kpqfa! zt_KW?@9Pg0Bbs^lYwI;(`VVb!u`}Tt6%&)~2Wcn;z6AdmTTh11s+UYXbOjgt?FYd} z9L;t9PP1j4dVunUBrD;VP5GGZH$U~fBaK8dRO;d~k=C-)#kh2ttt|IdvXq1yX4Po1 zOm$b6?Dk+HoW+6MV{jy}x$%+{cps()j=BYhuTEaEeMyU5oGF3r0TL>pdTnx3*EdyA z*e&{R_=$>RRM-4;C*(a2;`)+xAV9vpz8UbIJesQzk?Rq5c4Q>ryA3&f za>kgc@mu3j;RSwMF&{<2jRhiMjCs}O&0sFCD|jllmd~H9of>td)LrjLzr#4OxFokl zLo)-on;Om|1g*57gnQAWF@Ya*Gzn8g#ru6qs_+?`cO4t=7d2j*oKkF~DyTJw`jW!s zzIarfC3&y(P|cvwg{NJ6V`F^89>!d{_PDFmB`I^>60HvV>_E--Sx}Xr{4+uMCa%wA z;uE?peU374ttrcLi_D!WjS)^_>^sV4U|(FJ`Cr$OG;L^Jc)@dhuH_IQ$#M`LGDdWT@H8fX`ov*gz4dS*zOy9Z#9(oqKNGw-KjHO9&bv;@7uHQSKkm2_CYNn3M`NBjGi z6KuS<$h+@AlKG3M$+s6l9Y$6=x=z{2caT#XhJ~fMTcJO3C=x6wFo82!UtTB$Ud+qa z)zo9#MiMh}eC4kD*n-Tnt(rM56_3BvWIb|LOb0AxEh`B1@@RhUfzmEEJsqD~(Q@I)~4)rw>Tr<=iYIm_2@Q&RNGT9`gAOmUf zt~YFvzk&a{T`<)tmJX@dWe*=i#2aiAT=du^NboeYEKd*b!cVWcpU5F~j4aN9EUFVk z&$ma9TI^D@hWWtRpw2S?I^jb+-jr+*xhJ~zlrT@{C0k*Azg=|Na$m#>eeox9T@8hCI0a;sz@OQ?xnhP&UsJ0#Q7xW#po~;{UC%uMVH!G;5yXd?MegEZ~W-Ii@fFTNqQkN)`o+BBK@PjV5 zVFO(=XItP~wPUB&w+aF149a`B;#O{cD9x;`YI^`dReV0k@BOoJmUa1bdQHsV%zh)T zqIKKO=2RYNtF+JU>w&Ux-rUge^%s4t7Rw&34CE;hO#QiijEf?C7Mm({W*ChjmJ zTt6o~G8+tWy$UyPyPz@&vM+d71FF%x8bRd5`S2{CcqKyP)_-MJmQ zUOE(>1yV%7?SyU3bh|y`2B}dGP~jS;Q#m*kFv>c1HMtw>$)A2X@=3fxa%RRc#t%ed z$(E}{@n@?mrxZie2qtJiJQ+~0_5DB{RPn9s<@;$ukk=TH`Cu!IK}gq=JgOpP8L=*= z!+Y~3yNrDa!lalj(=)X8d!$^w$Lkr#hd8GOD2A$u|B}Xng?xo=waTXwU|~Uwo=GZy?N-h$5Ul~m*}_;uM$Gt@+qpouo_V;~F zZ(HH&Zatb>KJsv>1zIUuQ=oIO?U!%AoQ?EumH}74UeDsXsof2alrHQA3|tpbxXLIx z@NHEYBu;|&m6*I(sdO>5?<9Ev+_F~~)7EgHb8`cv`(DF`pbfy#Yd0);-vZN5pWFS$ z!H^KZ*csDrw+gYfI5>_xn@cxm#eiC672&wNnk6so7Oh*}uIoh0$m?tcHKUEF9{*fi z>@C=V#i_ zOj_!-gmgX(TEJSXGo>Rug*k@M7LER_?|i~5C}wyl#eZSbZ2z+rwN`H6cv@a9F`sU# zJXgKzSx?)F;~K~v2x!@Mr+U~K`rdDVJW4FGG35Nl4!`M_ zwWcG(N;A8`l&f{B<7eT&>VO>RD#218Q;E}iT8LE z7_;Qq_&xniyzO)UGJjM=U4!W;MTMZIZmKaA)eBWRxCA6!>hh>kBrs-gNHTDs^$TK-0%A!IaiOTTDeLabU&@p6;pp#YT=bZpQly2^RfLlu4 z>iPyM^tHLMZXwBrpjMZ}XdWU%dqP;-BzxM;X-4dF#&>1VSl5^}l7_e%uNj z%5Olon2B4R&-Pu3Rw?r)wmEzz>slEzoEBhM848mr^K*MTTzprnE*n3B+pFFFrFVa6 zwcg}1S+6Z;-o6y;cF`}Bt};4G7n5lhWd z5oA5*2@1tIPOsrg{FBhv*OdK^^syQE9EWT36PkpMrvOJ>n=N!!G^;WSytN~69ISBm zk-y{71NFOW3fsPHGsm@vWwk;Ozp&50YAn#|*9v{vtVCgmZXkq=vb(?qd45;7uuRAq z?^K5!c%--Zd*%9~ren4YE9BZ2ZGP!8Y-w`V?iuQ}PRPk%W>Fw-o>}+g{z|j;<3z%U ze5HiGQ~|Xv67%3E8vYk5$A+>>$=BFqty>eali6E-5%3nvBz_Z;b^4J3Ds%~+VUO?? zWXL#@6wQ+)g{*?6;aujtp`CkUzQaSVr%L1ZW@QBvrVOvzLg#7$;iyVXi-)wbOcce5Hd!^*?p9=yulmF>=Emfve zTg^Z!bZT~g&8EHKWH|%WO&eJW0Q&f2wSKng{I6(%R!cptxAllw#6~tsMCs*WZY-As zUqy#PE6O&yy}=FU2*>6ht<^HLqBzoNaFX+tsW37+#u6~L2017jTFgud?72m}MVxKr zY}Ub`KPHdn>5Y#RW&hz}?5$#a0^}x?a{|rkrX<6#Ldz@7u(IG+qs|h?aNBC9 zXUZ!Dliwy0A7!?KuF0Ua;@)J-YFf+dr+c+ajyo2xAe*;qvkf>G!m>hq;R)JC`Ufi5 zcItt!!O)eZ3nt^Y5j0)E&;zVW#t$bv#xNU{XEHU>dt|<6@s_1NGp%Almrb zI0Pc^OopNKwGum4c9n{81!<(O^1YP(ut!T-n25jR7kMXNy1EF}VAJ)-5D(_%iK5#@X|F6>N5y$b)u`w}S z?wU|VyiG=$ORa){(xsNpAsXc zi^sF_naz{N88ELUt^*IT|DK?2wYP9)?!yPbaLQw=W-W;tKBw%Nt)YKbqO(7+IH1+u zLT7%TxU)`0mY}u8TAoA>V|5QDri$ywN;>}0{Qi9Tne)Ow8$ny#w7%#fa(u#xipYJpe}1f+K9xrEBEo5>{_X}`osH6F#|czO~NtZ{37Zi z1E@n>FeuVu@o_b7rK1(=zN=RD4gaqY2@AqXjSE2lYD?hp|E^qw?q8(aTPFnOAxnVg*oVU6wC>atgZVU9EoW)8FUZyBkXB3*`1&-Iv^; z|3J%S-WxEpst9b#jloiT%6@LUrQ*#o8-;UV$cVV0^!txr9LGli7~9$5Yo0w_T6V0b(gu=XEfA5#wH4@f(Fbf z&=v)YU35C7xPTN##jiOoi|6wJ5DYnz<$yUL%DNq~Dd3iHCyHfI7?CQ-4`rcGjv=FS zO`DKhICt;5uuF09=e&MfcTx`K>!&bbhzs51v3m@v!ht^YwH6Ub4qz$xi5s2takuZ& zYgIv-Do$DaWiAu>w*OU#Sir#|t967M%Ap)4O|wMxTJZo;j8P?`-#Y|q zT~0j7iS<&+VE7IxoF}*+rj?@WZK)hg`)ZX@v6XBTi`vBHX^1DPg|*I;Gw)6ZQkL>; zDZSkeXInzA3-Qdp{zBCv(oz=$2qi_| z=}~JL2+V-11cU;f_qLIm)`>1M*TSO2#W}SSn;~Nsq1u<0r%Ttq$w?8yHhx@Ar^%4< zpMe8l#UWT9X2+^RNjX>r)|%s<%h8cP5aQb*S+kBZiG-BvB!-1qMo~TKBD4bQm?ju9 zt}w6EYqMTCZWO}5n9O6Vh7?&!I$hV5!bxW2=+?$1PK9BWDe;svGT`TSbXL(CN$WFO zOm#21&1}sz-v?7C9HU~`4EVt@PhALpK(vqT82JkHnuG*-U0s0IuvT6mqs%@^)=|pv zNrwxCbGiF2Y)1SrbttQ&ot4#?RXMDsZ-XjGT8$*01a{fE9*>gRTAX#GF}a_p8JjE3 z)>dQ~KE81&rDw5S3SpBj228CSak~`q98Hfl)qRV}_$mxJO5FWqC7q$p@!hf zn%*QYRH8ZyE~vyMP8$7)^#^d>9^8W9N|U##m@rV}@{7yp=cS9{#|{NZ2U;ND6E%ls z4nM~ya5JDXw+V0~A}mX^enfyd@;;HK$ps`i_oZc|flFS}wg++AMGcW>XWKT_S^V*x zO%q+E88R@q8SqT&5m?Xyno(;$$Vna*Sro%p!f-4VtOqf`%FT}wfbAao6m><;JE);DgImS_`A+xr*CA!zQ>QPC_O%G_|pTUGm z+7qZ|cI}$LD6GhyEG5O_m!ctt;VpQ?lGe&vuY)X|a_JrPU>koteh7gk2$We_=-*dI z%fr%ZClpq%GNecfK`H%jIyF^Sgu9`b z>pC++>F27hFf0M~SvQL1qr5WN`UFheMRxuaY)_;GEjU(Uva(IvI)3Ui$!RT_$d@Jdax7m3G%BO5tnCN zNQ(~GM(Oo@PIi+JBG}p>*-A@^0(19GOg2x?!sJ-DMq{Iv^>3A17{5mEhESM|k6Vrp zHSD(gBJ-YgI6Tde+qbq(80uj&?xB>J4TMr=tBw7Wr@>udNU0cu<8E%yOCg^)DfanQ zE}lsl&t$oEq<9J!@-kW6nrOy8U@)&-Enhk^LcUYtD^P!o8a$Imh0(ap_$P(vqT9s; zPeT+h@ek*ho@rgLQWo<)LrFh>Tfdyzt#`{^bccH|r2 z*i~GTQobD8DsMsC*60Oij<^UNgCUA(eZ-d%5lmftdd&8iZp!2n8)C0s24x{8K&B)e$ zB=KqisaTX6ySKzUfr24GD`3z-33MYr%vG9)CMS-m-BQJK-1p+m`T7_3h&3UM>W+6% zW~QarcTXeI&Tr~5@3%S(A|u_$gxn=HpwJRk=&fFU4_9XqRp+#>NKZ_>`c|*bV)9a& zNeHptvGh%*s6rE<9V4gB_(E0d*0_i8az2Tz{RlOA1Zj>&ZVfgM@{eNg&kTlR{~Mz3 zZ(|m|b#|#OpmPHs{uZ;Qmx;N^@>Sq3?Te)KtyT-;HbH!wR^;!h(3WJjNt_;+i{YJ~ z(+No0X$pan*S?X2HZoTAEY7Qw*-FES;D1GvQt;ZIc&}r0A{OWZgOWy1U7pk`&W^B9 zBaS}vqcP93jHsyS2cj^Y__L(fSI0=~(QAmxZv3;eqTl@JI`xDJ^(SHr6zNbMjb%0U zOx5+Qpxq!nQO(A%WGt9$o@1Zzoqhb5-8&QDBofO4k1ZDb2Mqby0AJ^8R2MaP=+!$c zmMA#t>yCNik=Pj??tQJOkeN<~CoxG^q}`<(??WFIhBd{q#9)tc%RVGT(BDI<`4DFM zSU}Q&_Zct$CmZTOs4+^JnD-ZdG$cEmN4`7HB2GVqSlW*rDD^u9gHJ@DL#(y^V$%7) zC;h3U^W$PL8pD1;wQ^+loT!0(e+KIO27p!DT!9d$n>m0ZFlRCIw7q21SNX5;+rE56 zX+I^kIinB)>jTUvZ1z%D-j1)QjBz<#I*H!&coaqAdZ4z z-KeQvFbrgxC0bjg?hl`v*wRx9tF`@DayPwozTr?WTzuAA)<0P@$}tb6^wh^~jez&j zB(&BVxBc|r~OM`O% zQh4_tz+9>733WArAhJC1pIQc%MV7rWo&JVpPNy~0m>F9(aM+d#{Ai7)&*NaZM62bl zmQ&vNIUW`oaO#SQ#6#H(Kk^r;Cl%q7F23ux1gW~11=<1(qIf&f!nn`C{J=ce3ryc1 zAKUYk2bEAo2Y$dvcwX4S>wO-1uB%&nxO}?z?CIUP$a)>S#aQ9|0gz`;lnX-qCiCME z4eR$^4yB%_&UYW~%_U0Gnn2dX6F&BO9;Srhv@yBWOQ%BoF@!)>75Zov&=@-U$F!#73#Xsk|v!piHA;b~u zi9@4_4#^|eZTG<#QKLvd3!)67s8|#bLpyuxCr<6QWNGP#k2VGd#A-omw5HKlTEmq; zwD-mg)Tiz5BL+6@KF0Z(X+S+TN@4}+McqYtg$(9o{wlSWyt2__o0Q*`97S0S8f4O6 zO2nE*-8W0On<6e*+RG`G>DJ1w}51 zLN>Fy-z=so1<4c(sj)tLK3AD}F&cMt()FTSg9i&zl%)7ENcbuY1$mtw)qK zQ&Iz4-JMyb@PeJQFs?|YGz<3sa(5drXuaqE=*6L z=V=kAzDoxtCt&g$;k1|2pi6v>-uYgmr}=B10ZMV;hdjdJi#F8&ea;`{x8s z*9vr|DKv@nLGia1has_fp@B9{oN-P@bd=5a;PCJ!Za4-xbzB&ct4Z8W?B=MpPwuld_tRR1MpXLW&dZ zmm&xWbAD9wlf_lj?$N^JjZ&=v6FU$!%})x;eo8s#`muJ7M~E9V$B`UCiT(&V!_zHlpf;; z5x(6l`)Q;&{4O&Um$rcx%hPXKhu0~0&~g^qpPs+{1CBe)0&ZK9{FwI9b^;`P+N;B< zbhyRk`nUB_pSOa8<)>t0WO=v)pz$UCHJWTu8=41o=R5!}Us(i)5Z2*;8R=p+hB0RD-M z3xV}(-R=L^0$9d;lWh1MA&0O+SYq}dS+usQ$&}en9r;son-O@H{!TOm%ba2uGLZE` z?h1XboGzehZRRC&Wug-+xZ$PtDv0(sR`kQwfu3b3WhChM|avyVJ zh4%dZrkCXdYtx|rw*Sm_=4W|2+m#?7;kscyvsHT0HhK|f+jgmMjmjncqP_7DtJH&g z`P<-O;|$Drv-@eJHB@S)cJ1MibVZtE#r(t`mJd)ggQLJ$643QKRBlD9sa_;nA|?If z;yPFT&N^|Yu=YvzV$GFbsSh~t9d$$pU{7TAqt7pPKE{(W*Z-#ZX79)5JonT2IVil- zkQ=0RUb%K4+|vHktP%RKea*eKzCw#|6+8KWooWL$^2$7oexYNfmF+RJ*+wA(y ze2oX)3JvPW&O;;zNVP+LyC>rDR%}XwtEq&A$e&A@H{|0FvKH}sABF3$m!;%;5kp2c zRvGe~GVDt?-+F`z+Sd{VvO!I)Q!r~TKR<<%+l)(*v^w$feU*XAJC%S8{o*SB@V}JT zL7B}?Pe=#9%v>k&TY0g*JZzKsR9mkvf4v~407XCN_2VPjxIUJ0@< zi3t-ap4rDqy})`3-Q~PWA!osM>+0#@*YS1yZ~Mx}pLjf)7&)lecXAeI)+6dcE5!xl z$av0tX2{`<5T=;B%u*~|40gMbwF$8T3<87BQ>WLO9xKr(3YhcAC>JNu4Y#g zHPg>{r!7x-=Y87>ZB84Z|J&74+b5mvCpvAPkTc93a#WAdx9h9lY2 zP~H7^nV>(9^^wa+l&NFlHAzVZU4}6*~b( zKNP&e{`u4gz{8(gxtPY8iBOjGlDdjci&@NSsN!A`3$sR}4P$1R@{<&C@-P~czb2Py zBTL7K4&mzO%L;sx@JwQZYX&yMs3AN(?DKRYyV*6mNecMVgo31}69v5*mLW@X|NeUC z+rOc>8PctaMdX5UtRC?wXnWnRG%5t*?}dYuNWxed@J@=tbM)m>D#REvaNwq8$kOC? zb#ug2LEhq!WJ_s9ZX7*^4Azi&q_%+J?re5ZZZ9SxOjI==K#-xiJ}(c&PC}J7vFB@} z=XeA?xx8t=B$=EKho^zgkiiDSN!o^Xvkx?aWO0oaSAhml)Kn4;Dk+5o1dt)fl4RJ` zkNAt1_7ha^#rEk0i7U~x@M`N-#393p1_Yo8hP2F8GQ@*9z6Q*H!-p09W89Bjto{uRFkrjPX8q#Crs#P>uMfNtS&GAf2y-${zQ>k-EH zLl`gpMPbRrJZ2pUq~Iu%7I9+Uj>A+e4h&I`B^nkB^DTVn$>ab|DP5oQuc()5XqWVbDmFKLo8K(`rMVc{fWL;B9DT{!agoBzR~w3usA zvCC=8-M8TrONNYS@kDh8!6PK#S*}hu_4F7x`uOQ224X2f20*Kgxzc;f8;|AsdWdQv^0H;xPjK=MMXA&+s+HW!>A8CF3~SZw zFeNCxYD9)0?!wd_CQW}p8Rm!bGl$olF??a;h@yCqoXHVTs6mN9DvyNH|In|34hKpv z&K((kW6;S;7*Kt##!RRmZ$Ycc;)Be=NMO73OR+P~k{DxU zMDD*m$xx!LCAa*G-8l}WuD44l;u;3qLLeDHHBr858 z{H!kORyq8_TA~BU`?811#iv$oMg_|hXlb@Il(Rg*x5!i@oSos?d)Y-9q$!AOtxSC^ zr)C2*O~yUILuCZUaVbAigm(|eu76=KZDI^p3Y7?^R_>SUhr*X3W3c1^ojmTr2(}!6 z+rRrf#uXom4wz>ff<#H1pqDCJdvpSBjNCLj#7XQqGWtWxchHis_L7eWt z*lGP=#bB4(&BD<_Z4_Pu5za-jshrhbtlFEnHkWL}l+itlKJzt6Sgv^L-OO=J)nyxv zD%n&6wA=IMH-^f{_&oOMc2z@}Gq~2rDf@^?pw8N>rRvXFtf^YT(0^Gw4xk%%#l!bG zpar0MIQD2v%`O%e%J*6FTk+M@p;@pKL5_UtM<;!nA5Eb`cSC$n*uR$gJ1T{lO`y^e z6Z`g@?4FE|-z>J&B{-`>UNj|Bsz*fJ%K9T*SB!st^PCw+Fni>Ub+fCIEw0e1Y zm?C+iP1m%WUt~qK5H);}^r-~Hq?eW)uhg26rQt$TieQg@zFlo#ASsD(Oe>MV2fKQk zwjP&Lh*k#fnIq1caA$hXXf5nxv`M1NrIOp7R0lAYBN;JbW79CC2h^1u2O$-B0q&)H zo~XuKa*hBi&^qPlm-x?V3Sqt7aU)Fa!rxP^sgNOiXEj1zRfWUtrFev$F$e4Ccl(3^ z+8OiX^Vk*3mqX{BuG1K5As?~|Crq;3D0ZnV-tSSk6yz%T%1u6`IG{CYkvRRZ)G=gc zCqBCD_Cb0*wgYrpF?rDh(gc$8cw%A=m+Ox$D0$kzO$F4wp(Ov;Y=qnG$qlM0h&Iyg z<+Vi}KWVV8G&;}WZ!FbGzv`;*R~IQv!h0fu3*Up%WR3mzhnGc@q0__dY(qSo;bEZl zi4^ZGkcs?4Yv>xMSrMW1+oslijaY&U$mvK+E=DBv%|3HM9Y$@e9lvz%9*HEmv=_xE zig;VG+@s1_1>CaKn5l#XAkg+NZ{&V7#<$|>>x9Bv2*OlcYlS5@!ow0?Z50Pr45a2R z*{^#niI>woRn`kixeS?Za7LgK#i@V(H$?5}Fm|@B#Aap4zDqxw;C8Fi9+&vtIaPfs zkZDJ)9<_%50nHop4Rb8q>LZt91lsbNkU2}CsB9K8hXQaRM^ZELH|hq4^-;Lmmk019 zKAzvFH|zf_bQ@?3z|ycDY+lNF`o#DyCzdcj=Hf5^w75}SWCe>qv@-5Ixl6b|w&cC) zm^6Vp3frXq0VLLNS~%K+e@WVk3{c~IfuSslnMwWB zp`#ILmG*zz*VZPfsF0%QVSS(8iQ`GXCY$-h43xRlK>t6YzA-w|F4%hFOzcdY%*3|s ziEVr0bZmQKc5K_WZJQI@`uhFuy6c{`p4C74{OPB<>g?LPPF3=*pSEN^41QQrP2^ge zVAH2)4PxIT47S z(O{pSS%BzG5rpid;`epgEhod30HSl=r2{ctmq!B-M z2B5iO5%qcyq$M5glYh9upa~<$)gi`2E(+CdY-RuB=d3B@*5Ki_k1xyl^Zk3cQApK* z_Rp(kG1t5hv6Iwtly?q$ZQar3PJMH()d2Zcy`mJmsOljPY}cY1R*EKzP|f*t*Hi$B z8;0aF+*}u39QL)lNU-dx*ryhhLjpqA2YC+`X-o{0AL0{0(h+$H(FziqeyrGUA3(Yx zj%1bf`7mI^0*My;q_qZZNq&H260!05n_PGe~5`whq(lo3iSE>61_5DFNk z#Iug}2IJvw<;YHPu_II};5_Lc*q_3Kvqq*Ox3%k8l)^OVE}URg3sWn*_U9|0+oHkH zgr)Q(iW8iu0u6Qs$~rM-Td5P^3Q8?FoE#ws`6T1HQwNo&d5~!5&{a#V_QO)gRAf5f z2AlDVv?OsNus44hRA3*+pk!W5j;VKR_;Tm7`RYW__$UNz6YH`3nXAIs5O*r5^k@6N z`5z5~{T}=ItDLbB-OuLG!hluc5x}9#qQ-bgZ$Nb*2f(f4xi^z`vO9vN4>>w&nNn-10@@PQ*xdh-Zl$I8Di2R@}gfHwPU zcC&KUMq$SCKmCFjy|w}0<`sS9bq={~#72f)c&C3K<_oDTUJj_RCz1cww(zK!n;^ZA zo5TA({HI9vR%^Advi@Gnrl7`-ap9dQ8(^KO@FLD239E6%6)if6;YaC(ZjX>yMOSem zPB?Qa<0_(knu1#7Vp&fvFTO2q)2L)UHJCerpSp0~POlU-CT2k1Db$Z#n?RE`NWaM> zIYnEDQOlOz1Q2CT%oquyOG0>e%It#9Mo$MX8G+FCel;J=}Qn?~eZbu6`E6K(HL-R)oG=_alT zXeYo`0<8lL2DKRCi$Hajw;Gm^3xZWf-o8GX-X>Zwy-L$+eOmZ8BfMnn8n8FR;WvX( zKN69;C{2hw()0ciTqWoRmIHe&5x`1^6UUp+%ayM#b6?5CSj9*fI)%I*O*wVf?t3OC zj{Ba8iAh$NBYb<`n%>Y9Zh-dHJj&O$15-i#Vp-8Vj@!xQuV?zQ`A{qwGa#n#%yKoKj{n%#@u zc4Tp)LA%H{QO(vKoxEw*x3)IV{BRhfOU#y;zskEl%4s5JuHT%~9(W_UN}xVE&E<|H)=_-tfJdN{ z!ZLDfMw?tsuDh#>a@)K_a=*(9Tn@nKDe)dlhxKWT3xV@vMx(x$DdVMVMN4H?EY!-a zSMO{#eC8#U7;duSp(;AcPAIfdfW@%(zDT(dfpRG(V@GZVO59v0p-r#;e zSNDD8_~3nTM=e&Xf??h~49*=4KvTSXyBRBI_|)!xhZlHj_Tgqq?!H^{ z{5tIZ5?ERfSyg zLN0)!d0^M}xRu}wEe)c-*Km~hDr&2n#Y14KL}q|_T#7URtK#=;1PU8+6TYz}+rZ)G z5@nr~s&~#!J$srPR~}!_QUN=1HzgyZxQlr7Q25iO&PFtu>Co(`j@~Z_XZmg- zq|63N=!Lw23!T5TEP1hyz|?V%#(LSVhvXYmiX~=jbl+$Iwo)=vush4gpV+G(wr>l` ztW9rX2!)dEJDnx!yRIg8i-K*LQ`%MOY`}>QtGrI2o}pen$LpL5&GdSNONI>EsfL8} z3hpssNe#OaO**tH68=f(5_haHFg+Ok!J$l(pJw^{?Y(^A=R{(T_rFr?xh)ZNPs2yukZXcE`<|ug}#||KqlbQD%1jkcpM~{)3gi+sB&z+pYQ+ zrt{S*tlg^HTOiaQPT&*ly)+JIKfCfV=D`_LXOuRLh2{J;4m%wqq6dsFb28 zcs6x1l3$RJKzgi6aW-TMTRV*WY2`#Zw&G&$4%gZ@bgQiarD<^Jd2nPYSc*2--He*rie7QO%8~~TOq0bP$#V6A z>cko8!N4bBlfPTKz?cw?Xx4(t3MyH@HxpF5Za-WWmOf59fUyxYe+T%iht%#^M*$Mg zjPSpn6hD~d?>pfR(KFRem$8bmbk{oE=QwPSI+JoQjN=p zP1!kEct{p~7J&L0SP1Y@`+75}n@pt9$qj{Tiw<8j{EKJL_DyUp!q9t=E19l2;25W` zpKZUt>3;6e59b5rQ8?6`0VB`%-QFo-V+6P1@g_+PR;d?`rc4; zUk8khnC;rqJwc8gBMo8A)f1t>wfVEi##e*9`87D0sMZ z=I$RENW;CohFpv+hiad?B7k^S=z(3zO{JI^i>Z3xsc$VohGnIhBXnn#CojSU+`q+*HUQn@<^#hP?* z<(Mz#Wt89tNo!6ra24)BB@r|O+%OYEEM!F{m~9L-!=d;$$qsx(OqPc^V zW`)7`P+I?UEafwQ`?dLM)8qaz{i^fh$dgE~`(+o|uF0@m$;i zSCOu&>#Mb&8B#2;J@QX`*RRJ zv)l`ZR|_A%2!*zVrNhVW-bXF8Vkx>c>)6K5&d$b0buU3TX)eF)fxHBT_?7ZkLD_A{ z^n&_=$pn2kGtV;lh%?tG=V{=&_Hu7;Z!VL{!{}l@pnTGNy~CiV@fzxVydd#+mp;WY zzCG!v))^j!*5`E+L2Mcu_V!WGrzr0F-zIA4Fp{RCK~~4>L>o1eu}861rIhu@ z8pV{-7LwIYt3xo`3>{@(De_^!j>EP&pO}C&dy3g&u_(A^U!Y`^QE5^o+k<$5@+c$G z_-x>;gq6`*fN$ZkDNHwejO&)y*U*DD=udOH*foC( z7C5?N0E%MGUnkXDoi8Pgy&ED9UZCTsc)xvins%`se!^Mfk0gVE-cEQG?2lOpDt<7_ z6?1hkb(M?VAhCY{nq#eeCe*4XcMM+M?^$~P^j2@_`&jYuvEbwb*Rv5m0le#29H=fd z1gY(UMRdcQF1UnJVn-wH_5WUB+2@OrVls(R-sSSD^@R4mAQW z{yAO`^;+iCZ$(@stzY}mBCqq)OG=p9V(TvIwK{K**OIrG%tfEHYDS2KrD?Y%lNe2{ z^^T211!C{n(vKRkQK|4CzW-IQh1sA_c^2)_8+;p3%hMBM{jqL~qa(0x3s%io-AwCP zy>WXlo0bTBWw~2#JA4-Wk}UN0uVO&0B$M^*N0D02jDiMDLS91%?k4=quLTwPQn<4P zPZB9D~j!kYquXW!%eKuN-5)x&JlTS2nd)XN+cf3%Jje0#D^$*3fSP^}* zIhPP${r5bV)G4h_!L!EidT8V%*sz=ia;By1?wd}Kbmu*v73Ev|UxeF!ANG9$ZT-5( z>qd9hDn|+1{kVy04}410Mzt=ple4956{{DeakbYVu|IK`{eDNc9uy`kSvu~n6MOQ| zD{OP;HcsD)|5_TmM>PgZ5pE(AIY`xubR{tF-8#&%(Y{lY!Kp7>W0h37Q#W2 zWGn_-6qKvVjLYmqGJEv|YT4etS=D-{Rbd(Yl#IA!0Ca;6tX|d9;Bk zC#i&8Z2C@SU$ZEf*)bxS1C6!5qX6s&?eIm)PV)k*V8D`WI-80WHvW$z`Snn;I}src z#r=m#;dEVm^Kc`TCO)VKzn}Dr**2+ltbXn<;I3}n{b==tOUqQ5Rcb$oZY$97=@u}T z+QK=UD>E^k!r1ziby`)Ud@E`!_`eW^Y>*)pjT6s}!I8GyRvL zM#`=iqW8?NDgcu7-p#-H_CO-U1I>ZPyke}HDel4$mn9vT(C@q_^*QLi_$^eMd%q+B zg=FwY{sq{$>JENko6%M?^1wtUeagttgsGJxU&Ct0MHc2{F3tuVFuX0ot~dMp+P!Jg z1ml&_-)VJ#S9DG-ng0$u7gyKirKJVoNy?JSWmaX)A~nR9-_;@lsy(o9Xua6EqHp?o z<3xFTB^s4t*>*2F_?H#QimTok-+HU=e|${yGdrKMDYlYVoRPPc^K&4c$ZWcOf& z^{}j%lB8oQQJaJFuC0UU#5}3%s0Y=4Bnmx5cvVjle)MocLBp}JYcaZ z`phi-DUZz>VIm9(R0E@ARi<(D%vXEWDbCpL4-ZVqzS7xxWN2h>?g$J7cei`*-Q4vQ zN>#*x8&ZuCQl=kFYd5HyyX%;ooV3u^nHe!pNA(};X-x+t)SJq*Qlpv}${hr4(V4kd zDVV_}kPE#k(;GZB;&7t!*w#u^0|AZN^*17{hf0aa&Z&UjE=!sHQ<>I_KeIvg#N32h zeS#2~3Q1JUZR)m-I4cWP|62=CvW}bBLyp(uDQcbEbZaC&0}kqO8_U_jeEw%ZHu1Q- zHZCE&%~jD^(l2!~4~8V@n@)lQ3_e$rX8ECobOK>r2_ z@W+^PjI)Pc_HW%lgE+mB-$jQ>j<8oAiW*wZ(h6;4NOr>9KMTW;Tcy1`E*({d99u*Q1bJragDm*nNIi*a-aW8`l zsQVb~xr|__$@+eDc!d8uj&O_M;pF73Am1Ssj(j_T5uxkFAPP(3s1_>uxdn!i4o%{? zG_E1wet%dH=PNPJh-XSJI=j8?>HN?Xb{BD;Up~M# z23c;~=j_8Xb~pL+aMrTx_B2WVd8o14Yd_5lsoVAJ#`j_T>n`f7nK>U0_r@*(IfQ7F zsEcT1S0$ZSm8$rD28Y|qyw2Ia=GQe$*79K=GRI6NIBWIK_~6S&m9_pqF0F^_Fle*9 z85IEbGJ)iLnEaTfj?B)jNP?xnbqD)Y^dal(+0`#s4Bo^W*l2y-#m+yE%{2-0Mx#@< z&F%H|^H)y^@qN&8P6;OVdCux4j;*8De%5qIXYA|blIfMbH>o^ z;cQfoP}#Ao*EGLrss9F?o(xp}_GBl}g$Lce)&B5rYf?f2hJr{hdt)l}YKxbjw=#c_ z!S~?-^hj6hzwugJd2z+gBznCi~AHB%AaTTx8KpP2}0tuy8Nx6sI@BzageFX`TQ<5wg!r^&!Csg}$>tzaa zD)#;d5)z_N&Cca@^<@lyA}y+UT!J#bO?$lme<=ZI+1dt}kEiaj>dtr_iK{{UM*9=5Yr$Gj9+DRB z%M=N?eTGGyI7|k_*p^Xh{9-e>)Uiga^Nhyn<*0$_4%wwfLes%~5Ise`oq*mr{h~i@ zqrBLrj>{U{2}h};Z$tk2ekRa%MJ~Bl6$s4V$+d?r!rVyWZ6(`(y&DIc`wt22qMNLA zV6P8t5u0Am2W`OKIf6%gvJ%8r^*yt(KFmZVJnSrpdUfjgH=dNTD)XHoFK)AoUd6L|^F|gHSJg zMOKJ~1i&>HtBH7kb&h{gWkYS0AUv0#XzFOCeE=vxxk9|IipvsBT#+=5XvE76WQ{tf ztk5fYs28s}s9!oYsgk9n5fyC}U3T7QU{K`I^?M28|D-<-khNPPU8`wem=+mzi`U}u zFR{~)hVk!NLO!Jte7QGmLL+D}XT*4>jDwyy98ZxI6PO!p(W6?XsMCsKj~6R2F~Fz% zb*5~Uyvqo_Qd?F#mcgVz-lg@SQ?zkglAL1`6bJ$;O24<~ic?JmbxQn*w{UOmQI+Xe zNQ$VIN#&N+l)HqVJF&|JnYhi?gxJz+U)I+2re%`t>#e|TVhrnZW!CNK@7NuTD%FT_ zA?$zAa5luY*C0}F>}CDwA2D6f$GBU;$Eg}c+c4~`T9!Z5KAI62}dE-=k{s`_^n1vt6)*2CN2!9yl<7`>JCM3*0FuCkBH{(@CET;d|kWZ(IWkz6eK&# z`-*f0Ie1wVS5DYcQ|gf_Z`KJAL1VDAA){=2W@1{syuP({`CvvhV}pw(>yDX}3N3c0 zWuIqs)I6^+fuLD=Q@7^Q+fHtoFp=%fFhLrou^fAxl=`I_1yjh;Ba}CL!#k}~tN{Jv zFp(>T{x|yh?>kc_^DDRRU26rWcwo^6c*%fC>I-U4KaMTUaNdfn_A~KOmY0#(R#@4D zI6*q5B~TCb@k)VX$eI(YpI-k;{B0Kp z&gy|ngu<_H&J#?$8zp-{B|o|In`(qXJ{4Wl(5T_{KT@~0O?Q{}yT6%;p-sea3_c)# zei|!R*LQz_GcDf%QI(+d@$u`S`~8km#2N3}#OdtwI*>6R01|pucbsB$j$|uZZHGY_ zf(MB^`pXXM%8(^)Ni@&r|2bpwZaSgvo*OtcC~!U0gtCp9azuqQJ`abmo=L zs9yI~12v4-CehU41@0pC?5(Sbjvm!a1$r<(F$Za1c2u(NmU2R{ zUs|1x*PyH1ECNgeBJWS>yPiG8gU%%I6>(Bwv%t2p5myTa1}5}KabKw*+D^xCdgRQ|lAk_e9-JC=`AHzV6A&lV@FbJL^twls*jx1US*9TPL<68u_o%+M3Nyja~ zN|Na1UJKXy`BD-gB@*m}7n^48}u{rDWwT1YufF(<8?D@2& zy4K*Db*OL1t`BExB#I^f8q*CQvuGP*L zY2Z1WEVNzj@iJvb+&vZJr?p<^MyE#&741n0x47SW z1qmgN))kz7i^V%IIn-*k_WXy^FD`7hpC)zvnWG|!1$k`E4(RzBIOan_Rf_KPTe?c4 zNa`eJYf<_$PYA%%kfo_{Pzu2gdy_PqQgE6@U&A24_?g2eCI$l-pD0~0r=rXA_}W9b zytUwG%Q#&B^ys_oLa}@+7leb=e)NI_K6dLcwXlDV7mI@xT6^o4b8jrM+Of@(8sC|U zlib~=P2v_u9cV((pUWIEW9!zVfciy!Qi8q+r>7yp^{EB2IgwsxZFSz~pV%SAcp=sC3l2?3Tb$Xl-lXc->%xMWyezGn_- zeQ#6gM65%4CYe#u`k#AAlbPQWsyn#(Mlda``azp_GC2hPuUAYg>cS>(R~sL6@#BcV3QkW%){X?PDGWCwHkaPEL%WR73&3w=Ki#SlQ;m zC`e5&UfmcO*9lYQW^z=u9pzm1BnC#z&urTAD*JBTv#~OvUn}&*pCdj{Eiz0iK3hQ_sJzvI~6efBJD7C zPpL;txb<-VQ088-=Yn%ZtTgDDT{!)mTH_om|BgujbNa+|1jjz zw2oCHQBvgEZH+gFb&OJq)x??S8ULBwH0hv}b8=w~dFX*9oK=j*d|r(jUI^w)Q|C8C z8mG3dVV;iW3%>Tl?3763Cy$p!n(B{=z6+wKK>>Sfw7h3}(Jh zw8fzkX}LgyS3V)xcqUQ0_K2N&pYvE-TN@PP&A8mG%f)9i(wb;Y6hk!lPQ+VupoO(% z+lCe!I@YRW|Hc6!b0iutTw5zm@u)%#^ zX4K|A5~W>#MT153$S4BF=y1o)OY=l`l|vLN!62mVdaB?+JX$7)h{MkZAV6qeHu(NV zys@a<=v(bs!^@i-)8Ua+(QF45_We)MHkuSFYzi@$5mg{|E{-z2?rT769IA4aJ423X zvmcc@%gF985_Ouevu{cNSU@vq>=8FCx%6pdI)95&vV zx4~Kr*i@7q4$8DfGVey#gca$)p=P^!dTko}=hOB_=lnNYXc8 z8@v()^sV)U7j|*j6i+udeV8wIRGt%BH9p4jq7)Koty@zbh{nSEy54pVoqZd z>2~vtVtaoq-F%)zT|dJh4xt|_MW^c5`*XH(czrRp2q03|omQX+-%U`K0|6v_PAZy| z!=T?|C{v`bA^5wX7YHE0f=x;Xh`8yt4uLDvmfgy0LSlX&Wh14P|1K2~s;osDFqcqx z3PC8hVLeqMP zOj(pz4*ehQbzItbczCF+q?;+y$fa6lT}*Xh)A+5jOxjspcjlf13UNE*f!^B>$@2Z_3Juq{3F2-T754eC!q# z8ecGm{zo;ki4u0~SiK#ROB-z}ah;Hml~dW)(8=OZ#*$_RrD(_M zs6Q`Zw7}NwW7E4ij~=#JcM>NTe#hHV=vCK4?$`#1N6iA=GIw2RuB}5WL!q$_Tq3YGV+cQYwnBY5yaSX)_A)Ez>RF5#Snq#{ zAp90Hu#aBbeF9?lvKrU&vB93m*AL|o3hg>?An@7~?6(+-CfdSJn!kZ)Kktt0wGJ00 zBWv?@IgHoa@!@=JWawAK*DX@J~pjrxil&)q(xIajxX^ z9r~FD`~JQwaeVp}gICmp{ZyrK)BWFz5IDw^n~Zb1I%A9B>d)|k{qeVmK3lGAE}ivn zQ|-1|0!0G+qAn2y+?d;dO&uXWna4-NY3j!Jl_`pWISXPXa^UuWIfNFR5=FJwuI|Rh z#j7W(sl%ws_%Yf`xayR+c8JbUN4m%Hz`b93t!&u-Cmi~tozvdI>E+eQY#FoA=1VpZ z8_M?fsqmJphvcOUn`fKsE5gw0`04PsY5)teyW28bd=6xWe=?L;a6)HFbYAsKqL+g| zm04JP6c94tF_w|YxoS=G8+EnM4Ct#9D+aPoNmByBxj?0-Lay`2x+39tfBac6mxe|c z82B3N9_NW6DJ$H|_{G2wXJC|Qw8LPr@S%`H_AJJ`TXwJL8-%cjM|*)-`G<;{?ZoZMh-@N&J@u@D&Y;(QF{YaI-#?#QR* zpLiUq$alj3IMU;ZzJV_SDJ$dVHyL^+>}b0KO~uT^x$l}Lr92FPTxM$w`%qj97< zs8sc9)^1H_Or;ScAu+ADnpD=FJN}##{*qpkxk**pRr&Ky_FjZGe5eodPOWKDdV=8B z*i&mV1O-dCYn5w+Qt>+}LIdX>f{ED&K6l&LUs&7M za^V^Yj3vrySd;-hgJ?cX+FglV?mA_*Ln7}pa}Vd+SbOkD+g~qnYmTkI?2y$4p8Kp$ z8r4^J?n=O2LEPho(iW7}U3pMp)B>x^sA{_OX*#c;Cz$1Z?(0dc&ioAC$Hm=6=2Si3 zG+DA!su69-Q;2{McNfPjoctDbuX6g=cPu-wA6*@GBgUx?2CtRWG4z_y@O{zz zj8*zN7I@~++?@D7T;2yORl5@jzsu={cBH+v<1P%Kqaw>6kDHVb`nh49 zV7@rL2U%)Y35>-Z=^x&ocfQ&HwRpYpcwBeTfRbUR7Qo-c4;SLi>f0f?WWt%CV&q6W zZ6R=U?4P{TMruRG0U-b^rfVdgtu%p48iw3Fyhe$6O93_q2wbB{<@&w_XDY6A5G@+Z zC%CuX#EU}f#@yxJ2ReMFhw(s@&Do91sR}@~0tt*0# zVac*1C$-ttX$IY9@I5!t8VnEOtQ@*b?dr#0JrvIFiOO49D{IVVsE`&#F_xOfql7gK zZH{{(RCm8!5gx}wQS99a655PLrhmGh(Q(tV94KBNY+VP&;mdRx%-_e*su4|N3_M(= z@~m^Dn0w7ta-X&KyF-D}WbdSu(Fw|Rsmr#qD!lsoIN!B|^sIk{d{lzzRf`?Co}7x_ zxwHWw=45tqzrM3>Lc_4KNX?g69wZTL+%ufNPCJCO*l^L(k)k6@5b@z|FFZPAOZA9S zQ~O9K5;&^Hlnji9Q=qn0ZZmO=m2`9=nK+j65)Faps-ij%=8;mR>n(a0hX<6$t5G^k zhk-+O^Nwaoo^u;LGx&U$6Ih1G69w>O4wV_A+E5}PMF!*M1A4LD=owh(ohHYcDzfO8 z#&Umb+!xxaEOuH7KS*u4+PkDb^@CTzGzh6OkGhzxX?v*8u-xsq7o$2d7Y_G8j@*BO zaX|HG|Hd+C4MFTnO5k*aG%bO}%7_R=y?S^_7RZ#5voq z>p{6R2}~~jl`xx${NNvP3kymp-e)kI9p2u!Ar})0Ma&QpQ52EHXo5(ly_7itbxNgw zYl2Jy{@=7lP{`&!13qfQgF+2MVbN_7^wHEIdOxmJ?i%_)$ zi=o>9=hpZr`*9Tu*@;Z#=;)@btH+FfkT(`|WE8^REiE4a#%wF^4}M=C&~k2^p4+%% z=dQbIXyJ#$xP}r1t?$*XM5hA))I_N?t9wvKRh5+>_{PI6$u?vlB^BmJZW!CJFM2t!BG5e_g zSOuT0lkY;`mF0>n+g3@=^ksjxrR=R8xg%*Ew|oj3*t!8-2je+1+ODyAfduqIf1QK- zl^oB%HB%Njd6IQXxpPDD7aX~^+^TC^<*m5-TxvPT+H9a`@8X@#e2bVA83J%35k5VO zZ?89;LzM`zRF}DIbbyG&y2L7+m38Dp$O>d7@k=HW=Gfu>o8PH+FTm*KU@cb-!oP#| z0xeG#_a_sqJjz(*`oe65q&f9S-LYv?Z7K$~Mgw#e^=d!zeQ>Db3R;hh7b8a8zi%8B z=iFu9H@S@I2D7UntoU!AJPx@005JrKR42Yk*^tN-Q8H2N0>kqe1YIQyiR zJ*!l`0sS|D=%4q($7SQq9dJKJ@;&>BvcpBV+!6ckQEJ!C3;kQ;2-J%*GxDfy5GF2M z+Cltb*VQlbl7k#-WXy~75alLs2%9raBk&GxVN6FThb6;>1#({YTr=(*<)5ILc$y>* zc^~b5Kz#fJOAf5)e7ctbn-mouweg7rn&rZZB0$kniKaP+gT2MKOtUT>C^KoOFzjbb zVmZT8wQG5JFpdAM1z0@#XF&qT(=|CephP%TWF&`Eevv@#*+O0T<~>8g#nJXfa& zbK{Uo`G^Ea#TQ09DK;_}3gfn1*49LN$IizbN7NBuu+MV!ds+Jm@=OVhBPLs^Hk=|d zDw!r;F+Y`VWX`a0>6O?t3ifgr;{)N~9|%bCZ}V<tj{f3x+Ii}3G_;Ysp7QNJBPzlqsN%_Iq?JiN3Lgy!**~qV2 zIugiW9Bpn~$7BS4Dx*u>8K(KaDDjGD&iz<>;g+(4xsv1^U zy5+XqOowYHc>hH^)iKcbp31*~s}@d-t;6*C>(^5@&+T(KPARbFy}k20pzeu8RB>dH z{5!is&-(9LWCF#$Kn&Va6f@)K@dV3x#{5)(4%th$l0;1l?+c;)o13@*zueYM7+q;( z;zEDvPN0JII!mRnQ!IxlM275P8aI3ES{<8is(~Jyd-s$u)-!a#Exb#6wTU+F|w`|@=G#I=s3q+OX-JmVJmssLouvj?m z(j7sH)HWaH0ZaGt?c<$_mbgTV9e+Z&VSxRcfreuUqM5$4zQw-Mc+XY7L{iEAi9M$Y zZd2RD4{1l_?m9uZqz7kXu<~4NG1cfJZcFr=Ue~NDb;G*W9cfUHpJ5^eRMyL%V$b>h z!rre0uj+E=fl}Ew=Oi5UJ=um)O!zSItY4=~^ssV}z6$<)C{3LBCri&OyPu1wb95u6 z;hre@-CFVF^Ma1U5B5l^k$5#Da&2)pWoc%+C`UOadUE;hf^{mN@66z+$+zr599qrG z!c{c}chHgE;&A6{>CNG)g8iGq?|$&?{8%w4$M$+Mtl8RT&azOCaIgbNswPgJc+mTX@lQ zZUMcO1_cW?m$sRmZUU@n*FwllTpy*eAUGzH83DIds~5Q77qkw6e`+X=`o0R!uFedV z6}&$u)=ACmYgXN+zhviu1o9@^`gBseF30$!yumZFEol8W(B*S6Lf z5@8l>SJJ?rywwQtCXM5R#v`?8GB+A4-Ci?(@JVkC_|U@C>64h2R9$TKp#q6=WM@ zi%;)Vyvy8Gd4g@(kui!y87a_r6A+!UqitQE^EapNY#}xWgAMlI`jO=ayGW*r@<}cZ zREDElS>Ve7;262w-+M+&^9US4B>vElc=I~cbea}hTV;b_7hI5*p`TXog#D^~zPP*_4u$z)Ucvd1x59lu9$q%~`)YOOK^(tnQ7@X?>opCL6EAwQuw{1#w+{7@hb(?5gZJXUjkGQx^u zB(mYyqq8bxM%!CKaSzxbTW=?k;NSY;<7;f(|JXSuBP7}&)a0_6DZM-k-5{0SnnOYf zL@hx*g^!%T!^=_ zejVFLsVxYVHaqh0FglgF>gywb8Zs^8BM#~T-LVzGO>Zmc0nevSraVuAjNfjNp=ru! zHW)5*hCBWZjWeQ()9R`{#g{%w$eVs5TZ-t3ctqGXI@Gz-53UOn``WbLV3Q_23N7Qx zP*`yhKCSYGwVU!wmYBdwtwszv@F~m{gDJN`%Uv@HjC#VZZ{v#l3a0GX#`^lsa3L2r zeta@klb?qXbLqslfs$zccFaFkhyN|EDqE^D!>C6^BeX~-@OLuCDM{KmSjZR$Z*WiDfGm_M<$wSDcXE(LF}qiV6Mk`2fB zzz`-?U!`2(?-TXbDtd{s$cC^BT4{5q+oBur6zYSpZZ>GQ;zeOe`Hp@-?U=q&0zTK= z0*!gXF|Sgp$;V<>BRFq{K0?-%9Uc<;ym0Nw6pqeNa8I`~EeZuNOlo;$QTI6kzo#kC ziT5X0QOY1#036qrCkPa==^h?TIA9d7OA8K`MMN zNIZ^>TAZ*`;R0vpeI&f^sH|F%l7J0xBot)CanZTMt@;=$Oji^Tv0b}pVV`OY@lzI# z&i-rr&=KXBiLKLh*d)YUOSHj-FQ68r^?Y4SzN7|uM9xx8`Nt80=g1?gyQ^#I>|u=I z|IzeKfpI@yyg_3-Y1r7dZQE*W+qP}n*x1&lL1Q~(967PF<2X9-e=CUZvQxy&A)Ze^lF!1(WHoFBUJ_Qo%*Qyunn6J zD<#&sq(T$$?VB$zT;H8IoM1IgCx80K$evlK(b}y?o=680?&M+V-hwjG7_=4>^7KB& z5<^9+g<2om&)Alq4GUo-e!p(XVea56xYITJfd)E=>kGg5HjHsP&%%wO)VcJaFi7s4 zhQ7rt+da@q^B5G0gnQ&R0D064ABy??nY)|!3wQ6I>D8bjE1WU;dEtqm?aIDOnov~& zF0*R&lX#c^VSBjTbKg9DdAz>8bj7eP&9WLDK70E|c0msLeL4#8Xei@FKJ!J> zzjGEP7!i5wvzQy5KIJHy`sc`ar5Ff?ME1_@3OP6?M~wJL&e1qIMBJ^6C}{pqD#gf-*R1pjc@%%`z4LH0ZN@_DleTfZpiHc9e44m zw+Qw>5;0Gbqm-DLmoKko9moN(`ik;2@>EgE)EPPL+Ndhco!b10gB9L`8mds3lp7RS zHmq|UD0Rwlo&QtimVf{pLLWZ`#M!%8qhczRpPmaA;MUidxjL2Fw|Qc<%Hypmuyb6T zu7jvJ(xd(+99l)3UL+ZC0dqYt@>5dQdQ)oh^{|nn92ymUD|J70V}BF+&rSmfJ?x7v zl`fm8ai>#FoLa808hrWaXNzD#P=T_vvM~M_V6dWUZHDtv5>%d%6v2SWlBs(JPxr#e zFQJ?M{e3LWu05kE@gZyhnVr1w9=|(nAD<(Cs+nn^U&qYHX1*m~ zoukXOGTk=>(4#-{UR)8Hf(yb#4>Kz_t^^vw)qkKBuyfxyK{h|X4DEKb?p>aFpuLbS;21^bVfIFrea`p)A3W+O!R6(?I`OV@F|4;goi&h7)L zYo1vG3rKdiGF)$pjSveGg*2bbh1YX!nQCa~;Cko6&H4KfXnt#tU}A#DcHZ53wiLHQ z(WELLs$L_WK6DRgIF-OZ({&%3)ihfEsD^#ssyde6WG27Jxt=S54La3KJUkDz2wRd#P$X688$ajq5&6 zdrZmNpDg`AD4Glnd)#Emii$}kqLZN=)pj$1Al|m&iwEbYKu53xTatW1%xCG| zK0TucW$^}4R_*_!aT*}t2Ke!57-%2d2cLHuKaye+9MR_cK>%9Qp`ga(0WDcqs9G92 zQFantCEbI2RU^s>>p(=aljn(cDVm9=+`9_R8<;*RVO}aT;T@0kyB3)sQd~9tVFgiP zdPL(B?@v<^2{!#-tSD%kqeATzm{z!4m>`BQoYNt*lmlhBZo`d>O+S}pc&|TclCHm- zp;l~V0&Z{MUafAybodRFb~ah8N%@G5=RD1jn`VneqyGWv%rl@Zh|yj3SAV3t2;g8C z^aFU-g*_QoHX-0`bIsi}ja0PpdB}fHTa&V>H8cbj;6A2Bq$KH6JDQnJYhbO+Y6hyN zLe7m%EEO8;7(IBr`=x%75Zs%R!&u%sktCL)I92Im?>8sWzdNc@mne}TnCXki+ssrA zmnBFil;(hX6_$S1gv0n6MY^W5ED)Q~5Tg|Seyc9y$M0X77I;K|X$>MEGAnB&g~C*X zBosA5Vv}<4l{J1mjQqj$L#E|Facn{`{IyCkCSOs#$UuSTJ~jL#nvvlk>7Ud>JA4qq zO+Ad*Mc|4Y(~GI#AcXam?-m;vFv52VEmsdZkfnRY#v;`480VB(X{NNp!ztRxigFb~ z=K4SCfGNZ06f#q76{^E=!{W+{bhH0SW+)cfri?0LVA<)e7%5A{JS-BD;c@}tJxLE}9y6J5T}d%Shy1JlWj zM-K0nlKJyxgU@%s*w)*cg1d@ff6Gu0s0MfS-@L4T^xvevOb+1;c=aFX*JtYMg#O|7 z;p`M23Q-5L$6D-!d(TAK$F2S7L=$kur{sOm_~A&0wKDHFJ*Q;nV(tZ$7=q^VcBKvt zZ(8Q%ZbM4XcG03DG&MB)4m+cVst}S^4`MT<*wi$hEHxMa%;*qz{6+L7E(~ohESg55 zH?!sRQ0e^BQ6YdUItZUq?~%vNXQ|p8dn)JyD{4i~-iJRs-r^?p zn54SaKK{0I{J!8m7R6(dd~)^jDlKf|AduMz`Q62JbGH?@g799nAf~jKA8Acl5o=nW zR&SP7*s||C--)6Ft<%WVP%#DW%ngBOiaj|TmwE_l|K<1fh@JCldK9X1 zN-rBpHmQ|ks~AR*Gn-GKzkl0%+!8onO*@IvEQBg08Y2!7k>ZjbY@PZ)~)u z$%*T=cf%B}$52>w=3N|LkPJr+ip1or}5vp`W);7I%f!N z)JUGS3@#VoHbh6*YI*1}hJ$jYR0b6y9j#D=#P)6DNQ&g^Z-Q&=jf1@3t04clN|@L? zx@nrNCgOLHWpSrUmF~Ia7wWwLKz$-2^nuwdG#O8tJZ`e2d~;KSrm@4M%@aN^$jz2E zfyc-FfDBk~?bnapR)F{7UZ3k=GsR1@CQ^)&o@-jLLF=2mavGPqzq~tJi5TeF&zIty z^ei$aNrV|{HWuMNPF4l#Cufi{YXQHR7YuF%G;UtaV@5n;89~-!qT3(b{U`v zyruw!o1@rAJF{xLAZWvD*vY$0>s;GQDAL9|Y)E&IaT!AS4ssjC6mFmdl^>wbPrl2I zTDPhhf&L_WgvRS$=eL=9vGACW98&H~X!lXES~G$9nQqgsUj(@L2=t7^OmaGHsIC0% zn(lfs;|ApYUD{$44-aONr5OXqIm-LW)(=&B$n-uh&@PW=em(PC9e*tacEBS$8#+MR zWT}fvHM&|YD|lOu_7;iQt8uA9ha+NCHfmHcSa&;$L8NW^Ji+aazWrB9^XYF znG&*R#sGcHAzgV2Fa4=Y1w04|2sUEGJa!NB?Y{_cqM^xVdZ*RG*Pr%>)4Vy}oRp)> z%3T5Y7#@6J$xC~C^xPYl`r3z^4wu+L#)nIL!cEN<)drn|TW7;ZEmIcYtnjn>3-WTp z^vtU_ub%;lzEG<=;aaiYNU7W$vKK)8=iYmI4cNJ$)ux8VH8O`dC9}{qc<&-J*hT^k z4i+O`M%@3UH88(E%nKFrL|4P7nIU%>=X`5R=^hg!eAK`SRQRC-2$-2MJ9wZDldcQ0 zIMur6W`#6F@P*hw?AEZq)k&GkfnD5v$??i?zLaD6aHjCcktdabGHWF`!dwi~bkKuV z<`zdsvNkJySssT}+|}3J%u(!yI%m8J7vT+GwGIWc+=odA$v>&8laLHJXMd8mz(`sq!vg^OfC}DD9 z6BR!BPOE292YM$uR^9-c!kLKPl#1W*;jp7*gTilwwRf zryu>3B^)}q7hjhDu#pt1!ycUgo#ohIqRkC6-_$k;YwL13>;{~Ti^@Y&ofz1oeau)p zWKZ3Uy}81E@Jm3GMtgLiFz_S#K0e9TQ-t+jW0bt+LK<_>eHA zTKFr+mKa1aTPI+%Ewy_yEaDfO23G^@F=esQ;W9w>S?ZYyVeir}{r57z(sca2oSR6_ z&icAbx~^N5F2<&6u<1a?IdUST+q!i2+kNGMCWkVOaO`KZ{W*ymQI-~QJv+k(dvMM+ z4q?9F%6!L&Hz=27cPo^Hu|qcR&hwl42ZL0aSVAtE*5wxv(Fg@s{i7@6UClqtVuIt3 z?NE>QEQVB+JVNBX)vTiL&`Cz%j!WZ1upJf`#$+*fy1q2gc<;CjS!FOE9YGddXA&zj zX&$Ik-AMSs_r0Z5;a_&ankob$xCpeRKbYcNKO!gT+H-eQlse`K;C=7pZt`j^#B;)> zlX&aO7e9B$@aXHG~arfy~aNgI% zMhb%i*z|1Kh^XTP{f;qLAiFlo&9t-lG(|$A;o?N6-MZ<@er?d#=i#R3%8+#8W{(@= zJm&qQix`5oOE35bHp%>I&A+2bq&!>!-zUN`Na8P7$Go6h(+%RnJ2HW z2@-xX_w%jO{PG2id{kX$tt;tZt>`Lj7zW8V11(my)aXJV(MX->@5K{oBQDRB<9J>C zM_?|u9z=Zw!^xZ}sWw+**5bYkz@j+@BCOeJnM`cSFtgzI#7!e3BgFrF+e;H#Kbe0w zRp>(@Yj@F)ljA~`7Q1zAh&cM5wj|Cyf??9*rtcRj$2uGxME{Bd`xnS)VMLU4q0m9)Ale$;}FiXEp2QN`nvr zwh_9^RdU+b7gt2bb66JDu?VYp&a`%7V&k2ilovQ9OcC}k6<|-gGA-KydEu*%YX1<#Tmz<{Hv;Z#6F?4Zh{MEuaHw=Ob=Rs?=fPODLbomw*O%{WeeJ^1SS) zj&y?tIN{JzB)fJY9lWh?X)CF+iG3fTvc?=%>aBEw;`)%utrNYZJuU=8@?$VTxW^VX z{?Y6KunWi2;PENp-qmNS84uU~=ppXQ$C*)?$PkedCtpN?pawN3{&%OrZysShqC6#U z3wr# z2hMY9)DNbAvKOKys{O1L^`Oj}9lR3={*a)3jBsF>9E3FjU2T>?yT-OjU-Q(nL46-NcxdBv^LM zv5w?`Hx9AQV`;)lt%XP=B6nC};?!hg5+V3R+tdiRxPgMladvVV`CW{QElAse?mOkj zf^!3qk41ozyV2Fy3DF~D!XoqbKw5*~Am_7eW6li&BuD$m<`3oS#J2mJrOMgi=WE`t zsPT6#^YfS+u0;^5g)7>Oe$l|Cn{1BMKZojg?$|}H9LN(OjxGTH%|>_zpVtg}d6gwB zl`b42{<;AFza`%URPrT1)osjWXEDkUCDddUky6P#I5SEee(gRpwT#jPBeo~ z^K~~gMcDWnB1N=s_{2~sBS>ycUaD80FjOg+tx%QD7MgDF;NQ8b*FfWr zm-hJHCIOD^WKmYvLj5o^oE1x^T9IkhkS*YXbzrOdy9E%8{LL`~mYJq`oGsa+p)Z% zUg){Bp;xd1Gmq#+pMbDmokP>dT-F3#%D|%p<-=O8QY4rt#uBdvZC*fX`Zs?&cvwbM z9GV_CLT}gI+mQpQo6Py-E@6VN*uf`7hI>VX>U}F()eAdyI$cPX8|XH%^@?L@=izO~ za$J+3UCqysEYDUwt|Uu|qgZ&9CU^*EVmx8ukj3Y9Vb@LGRUdUA9y%{IM4n#(GP}E& z&H@$Reu~lCq=bMUkbR+-+g`9rW5r_Qm5oh?WUQvSsgaki6Oag)kT#pe1^U?d4~4Kf z&vstke_g!uDBQD5{tC!$ai|fsIjJ@KXPaam)7b*2Fm8d>hL|ir6Zhr$P7=bSqGmYGRl;^dm%+yj$mh+NakSA+U z9kXEJ{}?T2yvK~P36pn^=TT3R-s(kC$(q-w92}H>C%}VFW6{}T7|a!Bgn7d6!jy_4 zs^C9qSkjh-mR-z~D{NEl(ZG<4QmwtmM(722d%gmf^H2J!z2n0YIALnY@Fsf!`BhCy zuGu}b)-x-P$9mD!nQ8Xf4_M;w8P?5lmE^Fd@-}>-J2ffZ5AW}3)>^sYTBFJC#$;V? zDe#?PO9WcUHk=u(La=*smHzUx)qeX;c1_mxVonp^ujsvQy7XPC6CsW8N%+?a_=cgw zU9VVFGI+lWc}>`K>>YU0iBo*a5Co7w@c0n;wNQ4`SVjC4( zzb_~0H}wyf>5gW*B*9NQ1IF_XUDX%l$vE+ zDxE)Woh=iB?@?G*XRKoL6hjPAk>|h;EQA9+7@AYtf9bFCUtEVlJZ`({tSC}b`e@qo zi@$7E&&!ujEBb&Y7uq&VOJ{@0`0Ayf1Gl=0?RNxDt`L3!&)BPHgIoc zAL;EJ&T8Rl4YQQ)@>dRjUnZL-uY`iP5@Qx#4~JnZe2f$! zf00*SF)zbn*!<)OGfOR*o93HwwZfNV`jVpJba=L+V(NDq1P42#IVYDGbH?o{nPVxm z{;db!l(+M~a;!9#)^)~a@3fj@5SP3Yj(-hMRI~@y+$OS*2+p=z6LURhu+7k_ppb_PfB8YgMKAyELW6f6o@7l_Fsphz4+x?2jXtML3BWLS*|oA z&{D{obeqyax|M1y6G z4e1qH*T#{)c4xbZaFzYGl@nO}T^_BO877%~!vtHf>A~e6>c49{lh-o5P;~lKy9omm z#7R!(W0vpqg`Z*U@>7&dHYp)Bl4oMAVil$;5>}J1t!Vm;5V8 zr2al?ODnl?^7f?jCuQ`K|75xR;QK_zNv$fi-nt^MW_i%$Vb*fuNvj+-SNCvoGQJev zx?2l%{YqDCO32buK_So3Wwt&*V4g+6J?B5piv21F}0R1=ijuwfo>hWP<$`{%XY&u%Gr^MK-`Cjo@{#>oswAcXKA5kjN zuUS)1@-sbAno(mpUz*1R0!HxewLhpB}dw{gzra0hN`{m%o;uE+* zQ;x3A9Ir{og6`9H)bK_Lv6T96yqeo)f`s1I!@Vixyll@L1beTwU_}0v?F;^;{q5)j zpYPV+BAn*zE@p_cW{#us^P|NqC)}N!q)FCZn_pk6U!osFs^sIH)h|mxdV-jU(F@nT zkBpkctR(kcnx6O-)6U=gc`ZnNpbL}Pi`&$E%v5gAIdE?C;x3-M!sA2(Fdf{r_0Zd& zv|W7krisKsK~O`k`FmVO1LGdTO}HJb!HjxT*Py6%Lt9>&Z?!9ZB2=@yWRxv(U%$Gv zBgLU|3ytEK9HJ5$)JblCvetd6OPGW<6uFXTqk?XsA?t%H zlOTH1T^yVnT$Jl~$L z2R*+;g*j^s1`7iD>OUA5^#|4EtU$P+jS(CW8Y-6CH1@(tg?~mn&RU_f z+DVCh7*oM6kH9+CGe#=VWfLE&RITNVJSo!0(;gBzt)S3!FHY|={-4n4%IEy*83#7+ zuD|2_A%MJBoIH{8KupLYwY3>GHTozAwBJn!P1mW)q7uVh2n1m>m_u9X|WORWNVJXQ2PYl?y=>k{gs8uPkR=Z7l9Q)bVw$ zAJ8X%a|ggry$|a<2QA-HCK;%srKiQyt46k9Iag?Y(^C48pSM1LQ97%>Y$j;i^h-Xj zQd5~nYCL))-a=>%yBKhqQk~f1&TY^`%7_f6g&^{ z=|1K$f&;g+#nbR2E#*oReP)MNW6_Uzl%RC+bn)7c*uMc!4m^i5UO=J~1c}1~lrBm- zG|=Tx8?86p2f*@W-=+sk5K(;Q>Bale?4L7c#MQCxJuqJ}g^9ywMSj=(9WSDp<7ln{cv=!yR8o41}pc}ooA+6kV#^WvT?R~YBv)foPQ za}5MxU6}S$XHf#(dwt74`R+QxHqB)J{tzqE&@EFGs^clo{gG)| zsFWwYk$|9lB3w#B6-)q1x%1r_=iSxe7OL#;Sbtg(tF=ffQ$RLXtIEupPKYjB@*sv? zdUO@smNm{;6x#A9iSi`gJGq8b(>r%_1QUQ{%eBz8Xda9w9(!bUdI>%+jj0Jkp}@>s zAUx|q8C6wT_cwNt{qJKP3H6nob#&YGeG`805inuhwo>ehCZM3T!pFIKPldBCkC3{) zA9YeADzQb&|3`lJ*rqvz2}n9T2F6{7EIZBGXtHT@K&iI-!PCg!%@K@m#Zb6mbX5o4 z6ykkZ^c1&3JSsl)s+NnB!VKD;-6a)+uUk(%Ya_G&?crUPE0Ncy zhZY7WwZld$4ye9GwAcUOX4&2ha;XN~I=$X$Ba0X`Rl*RJ=d{?AW615b!7j`GsWhJE z*T7ieaHXS)7~W76r@@qudtHxSBaT*+n{P)@h4$}vZ}#n)>DfPgc_fni^EhXgLZqdz z$CDxxlDu@08b60@m?FP;=*2p9k1>HWy{?|Ikjsq*Vx zlwS&@0^r#iwEC)z4xXHzccBisrS*`Ga6VoJMXh8OWHdVcKF~d`P+;d$8XFD zeQ)5&L%b)!o-WbJQR4e#%8X?XO4SG~fl$GG==J%UP&Q>pkg~;FP%RG8>n+J)IXOS%c}YmTERa^KhKTZ*e*00*%{L(FOYK%&eSLs0;Z@ zNYDJeU$kvJsNTHM^O!%6#oE8Cq4Fs_>MQTxTHV7nTuK7$JB@COaV+R>JXfB7&C!rZ z>$i(#T2iLQPX}|0=5#cIdrNwGs$4hU&S+C&K;jx0cv0K<>lqW4Gzi!!%-&&TK%b0F zp@ST+&fh8z&Mia#d<<s&IDU%1z{HSb6GV+1?x_rhuEdNvjUU{26zrb!pWXr6tWJ)~wsd8`GyY5H z+Ilhben=;)8NX7hO;>L+6^x z5SIxwHT9Q`XoYwwzR0-^wpVIog$`;(mlbt2J>**qp8Li>?kB`|RGmdkV95kLROt#meq4<-%_$jy|?$md1!OCwqCRaecJ z8KdoW@6H_7qm?y&n^YooL5bQVvIYrAR&x!CW+LEMbx&xWOd(hPwg~m0PEe^Tuc}>n zf&X1z4JM}oWsDi`yL@V47~14}t-j#Fp_;c7I{!YyrbT+BchtP6A@6F}WwT;Q(6cJ9 zZTX9;fB!7VOs8LTun_oaJMhLkc-I_3xi{flbnxY6G!Cknf_;}OUfl}p3o}nX zCFOS9!+MuShb@Ld7*98ZQJMwmYLDYeW#jL;Mv677kq4q~E4taN6-cC9UpAxpS&540 z7N*gLou}Zh@Cnc@z9AT5JOsKEqe_W(AHBI)0M1HU!mh|0`(AZT7Uya;E=#d=5SdER z!WAOi4HWhT@~JsNxwFfSjg60+fqy{08{y3VSZrhNRG97j zyTE6Zz=zO3#PL$#r)m=gllf5S#F9TOSJc>&Gcz1Ghs=_7&QDsTMM%BIiBMB=DbedC zLAZEpbTo4T!|dk(lH;l9>6qYdoLM}nLBl#+tT)y<)U(a?`TOXT}r}3cF|D` zzq*BCE5o)9>4(LEYI^H*Lf73`Op!V)osV8PYa*Oefn8%RVry7m(=1LXFkld7G6qrK zb^iiZkE4~9yS9=ZiB+$7K8z!v&E|C!U*+jnSIMtcS-bRDcZuM_C?XlP9a4o*NU&99 z6`v`)4Nw}+zv}IlDNtffKkEkA$a)c7FdAvs1rCwWiGd|8!P$5I+cENI6AB;E-0KDx z3KRb3&f1rQfr?Uaj-fcHmu z-Feh5(tCX#bKW8SD|Df{M=YAx9IM?1)-BQ}wq0@3TU!LRl}?C{nwo?~Mi!=TGQm#@ z&+;LhJFJDU;at;l3V~;PJ=wL6G+fuh-iBV`5C*sg+(}ZNlB>jtLMAja-vvD@&fEg!GH{$JJnS94%881axL~)87~mhQ^7!d(&77+NRT6NpRu-qrU33 z0~+P$l>8@a+sYC(Ord-3ivnZqZjg@+qr%->stk-h!O(i`G$FNaB6(F;s}aX_xZiWEG+VtL!_w|aJC9QpH7kxy<> zo@&QU1m!OM&CkrpXo}EcegT98(@#g&e=H{-bswhxDuM1yA9Wb4s5hpz3pz@UX-sbk zU1H8{AXRrN%z5Nwz>8-f7tdE$;YU}dp-=RGoW{|_>cE%#_}Vc};Ro?oN8qE;ztn%C zz!sb%zyi=LX?58y?5|&IQC|bf|LLaE}OF-b6IBq=~kX4Rv&3?qHN1BPFY^r`; ztyGQOt{t$h9VZ$doi>Eb1khbp&+lqr_}Smy#cFHD1|zf68l@~) zoB!3-iw$Q>C0iKLpir+2Dp4v5q{9~F+h3+chNHfz0EHXRje)BGm51vu6IV0j4KwL3gavA3)05Eq1Q{xbD!q?1S!;w^Ky#Y_+U7*6?lN zBz^Q?(}UThy~W0Ph@bP7kqP>g+`5f`|+vn)U;wvTbUeRsfPm5Dq!wo}HzL^LFDX< zv^km1Vs*Tu`?Ri9fh+M?Hdih>mbDzUxiSTEj8_V|?4LSj&rXbF4eLIHDtMzgC(gm| zMW&q= zZTMvof09KCtluAT4hthPkfuFmB*RM?oI>QSLk;?RrtAH zNFkKVb==(u%48WKIGedL;iUg{Cb<Cgk;kIu zqZ?gD=)9OV6=4`Vg(q)bER6)5aB-r2PM&ws(0%|IUi^Cmg-RECy03SDFsuUpCt|{f zNYR*XVsI$V4=W23e}2r)3>Ta(E5`0ztp+_|dFRJpQxKz>VCHSrQ0miAaT6r|o2}G! zg?4*WKrQFKw9?g~VkGV3%vz9eJ&dw_v&c86vM2?Swg#%4eCW98kkb$638^w8%Y_W} zN^I_dpii-@ck@2Pbh)mnp0`S+A7w1ZVX;?%OBKC~H8e33ax88)+ypcQtB(zVyN`Ey z;Q@-4927nf=BYi;0;h%OVEQ6r8j#xxmCp%2IWIIiVg zJmkD#H5d|v1U)1}5;FZD$$A3HVi4*Guy1@Zty2Ilc4^kW8m}Z%nL+AhY$;zah2iV8a0J*Zpc5-QmR^p%y;{P zjTc<+rD#%0rx2&P0QPmY~j*HtmO zPm-M-88h}My&@CM!$ZY^1H6ykCAsCKEj~=YQ&`1k1fp(y(Ot~zk0J~Z#;Jyke9+85`!qt4m5F z`6*1NBGu^~F6fxv?{YW=@OQ$7D29eG+drV&kOoqN!?PnICjpX?6fa$Bm`|z|6$8+sLo_0UQ`e!a^ zE`62@L#3*_x-~4{G%k^%k3X`qqSkHDup4y^Wu_XZV*XdzFU$Ob4)AvgEU?oZ!_)HE z?Ly^mC75<~lND9uu;r>Gm86tW$N5Q9&h+V+#hh4vq-i<}B3@JKCzAEEM( z@#U691X8~%LRc|FTU|5?6vHjpEeq4dRW-<4RO<)1@$U}BJQBymhAwr@WaSs8lo_QS zamC#uWo~Y8LF+_N!QT;wvm@_Oplak3Ev$Pi&C?%9zlsS~Vw&wxwlL zaHm4Si}({R!khoyEYR9<&eCDS^WB3eyw{~zwP?6Go87dLRM?Y6w>Kss+x6(W+Bl+Z zN-A-pZq)4%sIK`1tpVMM_4s#ffknz9$8m#mhjx9bk6BJ`*A)M{8yBUk-l!{2=le`X z)3+u828O+s;}<;*Y3$^v?{?~fZ%&J65EALxXj6Qki%)wx;-Stpj7lqzI%$D{0+~;m6OPvV7GOG{ zZwjI+Yld|R1*dn*X4|?VV4C3)(I0=Fm9~Bl4~ZG<16vXYeRN84ExIfCmd%;ZogL|w zfTN&Pim9X6PbU9>!_(E?d~U@_rI1KXPG+v8QmUajs>572z6NYj9DA>7N?8ys;WT)+ zD91$Mu{D{7pczOi*vHV%^@#ktQOm>WO5P7*kya2A^XuPbpKp?xmN%8xO?|-mZ}U(S zD_kv;IHXx^^T-MOpZv8u6a)$R+O>S9q$^&QV(*qzuQN8!h31|kUY4uPETNG6e+cQB zz}H5aQdkf1^OgJlM2UJY?aP*p>4QM z$aDe+yHDn(X~A~PbpTQMwELJS(`hRS9mi4Z0E;&dXPmT5>mf|zLTwOOBC|_BoVL?# zh5pThIu;{)6?YQ$=z99T-5X0fn-=zVnq;nTr|sOINrvKLjaU}GBLvz8?rA8jeF!N} zx!%JlCWqvm{@; z@us4r?b`@G#m9I&+gU%7ShJId{MoMD26CUE@1!ICnUe=>FJACDc+Jnr2~AA;iCPLU zIt2G;$w{w}Xf-?*-dM~{5?m6_fL5haA%FxO6}2gg+x-Gl@8;>rJstP{BZDcW&`c(A z+u2p^&uAD-t`?Pjn+xge@C2F)u8(aM%Ch&Pl1k=v+Znyd9b$Y=l za3bOk+yXZ zfq0Qt`vZ#(G%z1#w=jU`)Dq}>H2v7mzn0?>IN5bZEBz-UB*3Q`p;#wf5|bKBFnpGP z@-+_wSB)AiK15hp*r1^R#Cy6qX=5!?7?>4T%uWY6BGGsms0zlfRU#gMLt zo$30!(FL|rzFsCS%6M(+1(_u|4!S$p8>z{UN>YuFHQRhv-|pHdKDQF3Rnuo!kW<1v z{W0@`r%pSJ7VXoBo_; zQr`~s9WF=X`lag}{jH05@$pfqnkxR{qoTqv=2lt419E96gkQAw`8rGFiu+$0wujwv zvN6~J#I<&TEVIv=S2`S%!Yulfv`_oMr{ACCPq)ne$hmTTf-C8(9C^jK`^g{G!#Tx> zGg}DCJZ@owi_?AHKsbNNxqI6GR@t#I zjYBy#%P$jVR8L-rlBLgOezKNj9=jO`l*EV6+ z!ItZc*-5oQKZvF}7M)L{@}!(D8Mi5-+I0483Nxs_v|vI1WxX)h7TrbMrix3};5il^ zlk=*agV==H+RZ2R`;Yo?4~ z1Y&9jos^6jjcF?-Nfl*&43Y~`81x?C5KUjF$dB3)4pQUn+dpl?Z=G1=ZwG$;W&C6l ztS$lM5WP+HB}@z(ed07aQh|nOE3QyZ$STdcd4XWZBJGTWeR98}UU_34g1lnX?u^Zj z#>v@S2sKo0S-m&HVK=dKQFU;45b_~ODve6BVZ@mK1zpeNQvo(leahyjsUPmsR=>CM zFGQ+tH&-=LikB+`*NGfCsM@;G!`;O@rC`K6qjto7p~^wD4fu9>z{)kX12kn=@Aa=~ zJ_o-(aH9m=i{%3D?1|!Y%(Y4EYvJ~RMa4F{FL0tSN!NJ)Au8fcPp-) z({0VR6OA?|Ok)`+>O&k>V<;H@ye!LEbpDFM6qG?3Lx1(dBxH~>n1t+8IAhCLnT3o|m6sC(UlGCK@ zY!wN4YRxy{?RA%UcG^j@0rk|M>P#9QQt>d%?CSL3_NOk~8Z;^8*MgyEGUjS& z6=}_k?s2OF3gW*xg#egw>6LzIofM2>lvKzimYFPd6T&GXMe4fsK{AncfmgOzn4Pdt z!#*btCuNf|aFR1!9iTtO|Egr<#`X{FT#kacvA0#qtasU7TED(@ef>v`7 z76ya9tZeV-=$Oyvv!n$CEPM0#Uy^#Kj8@y3qk$@if(U)`EP4b=w)v+^m^HDQ73m@l zVZ^eywCub8Vl?Tnt{BRglxD)$#>Ik>*0#zJYm;zrm$SN(VPBTOZ;J721#CU%ff&JR zgcjN)U5D54-_|21+Ol=lVR*TsoX@`*mL1xg7K})R$GT&Yy5JVbB>Zm z@uJxxmA*oIm-z46g>#hb#Tj`BEtmiY@rfSAHT9ZS*jV5pVKc-7?L&$QFM~ENeT>+G zU6g=h_tO{|3&%q4ic`!1^+p^qB@X<;L=1c+YKnP-)@gd^n`Rd$BkVETV=KbwXdl~|#n!>SoV*LKiDBw4TG!5LUIJ(v?E^qKz z$R6)Zf~#K+_5U`^&TYb3+iO`-zzuFmmOb*U*QzDeV5W?uqi#8MS);~|+kVu2WgdQz zkZ1Z*YuUTzC8hz;qT!-HMwpk(Xn5~eO8*_rNjZj#C1_8_qGoMU#v|lE^n7Z?3syvZ z!_VqzX=wofPWqyPf`WJ;eS7ZT-@Dz9zptmCexO{9Goh>y=XeoH2Ij_5 zC)s_4Jl@FcKNw#SjLtZiI5|}oWYi!&t``P-h%>4eh06RUCXk9kd@Dvo7}W@7o;#@3r)?&}p8X7P$ z!59;7P+0_&57A-*XxMz26|K8^6--_8?Ly%W`31|`D;=r~+V6|toYSg@zLi7j%MgS! z6@)3z2&{b(ur*qX)MHyn&yC*On)3#wb17@c%oDKZL*)LL^KcXouF_o#rn2yM$Hgt0 z<3Y-;cNY-k4F{rFroLXohj1h9KtPp|k^ZaQr?%QZ+V5ZIBaHy9G!!{RUrED!M}M%E z-SL>`BXxx0cp@Svi7d8wQr|7*TnzIihvGw>Z0{Fu_|2oqO{NVv$AP(B(tWk_)N7rm zhCy0|V10ePR;y9UXU?1{sGxv=fce15lP8y#56p_Dw=0X-Nnd!0Jlu|J;}uQ4@bUXP zadPGzaU|){hF-a~SZ3&*SQHNEPgpl6Q_F}yMReOw&uXVUQ2)6kGghZsT5fKo837Snas#) z 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

&ciD++M+=qM1+MZT>vBm(X}Y(wh^`tXJ`; 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%0D!yDsCvJc~5TGa(S=M3viZe090XIiC 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

Vat-`%Y)4RPp1jd@YhAnyzz|f+KM0G}BSWJle0_ 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%0AWeEa^0&)@S#Ve8VUh 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 + + + \ No newline at end of file diff --git a/img/community.svg b/img/community.svg new file mode 100644 index 000000000..4b81068b6 --- /dev/null +++ b/img/community.svg @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/img/contents.svg b/img/contents.svg new file mode 100644 index 000000000..f5c8082c6 --- /dev/null +++ b/img/contents.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/img/contributing.svg b/img/contributing.svg new file mode 100644 index 000000000..08aea6132 --- /dev/null +++ b/img/contributing.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/img/docker.svg b/img/docker.svg new file mode 100644 index 000000000..424268998 --- /dev/null +++ b/img/docker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/documentation.svg b/img/documentation.svg new file mode 100644 index 000000000..d78bcf3e8 --- /dev/null +++ b/img/documentation.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/img/features.svg b/img/features.svg new file mode 100644 index 000000000..403d3ce32 --- /dev/null +++ b/img/features.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/img/gettingstarted.svg b/img/gettingstarted.svg new file mode 100644 index 000000000..b214160b5 --- /dev/null +++ b/img/gettingstarted.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/img/installation.svg b/img/installation.svg new file mode 100644 index 000000000..90513b75b --- /dev/null +++ b/img/installation.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/img/pg.svg b/img/pg.svg new file mode 100644 index 000000000..4a770c14d --- /dev/null +++ b/img/pg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/tick.svg b/img/tick.svg new file mode 100644 index 000000000..e7381e1e9 --- /dev/null +++ b/img/tick.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/img/tux.svg b/img/tux.svg new file mode 100644 index 000000000..8f313122c --- /dev/null +++ b/img/tux.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/visualization.svg b/img/visualization.svg new file mode 100644 index 000000000..dd9f708d6 --- /dev/null +++ b/img/visualization.svg @@ -0,0 +1,8 @@ + + + + + + + + From 6e89f3e657a91577bf2545177ca79c5aa57fe72e Mon Sep 17 00:00:00 2001 From: Eya Badal Date: Tue, 29 Nov 2022 10:48:00 -0800 Subject: [PATCH 040/191] Update README.md Add more content and images for the overview and features sections. --- README.md | 47 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 50c91f505..7b32875ea 100644 --- a/README.md +++ b/README.md @@ -51,24 +51,49 @@
-[Apache AGE](https://age.apache.org/#) is a PostgreSQL Extension that provides graph database functionality. AGE is an acronym for A Graph Extension, and is inspired by Bitnine's AgensGraph, a multimodel database fork of PostgreSQL. The goal of the project is to enable users of Postgres to use graph query modeling in unison with Postgres' existing relational model. -A graph consists of a set of vertices (also called nodes) and edges, where each individual vertex and edge possesses a map of properties. A vertex is the basic object of a graph, that can exist independently of everything else in the graph. An edge creates a directed connection between two vertices. A graph database is simply composed of vertices and edges. This type of database is useful when the meaning is in the relationships between the data. Relational databases can easily handle direct relationships, but indirect relationships are more difficult to deal with in relational databases. A graph database stores relationship information as a first-class entity. Apache AGE gives you the best of both worlds, simultaneously. +

  What is Apache AGE?

-Apache AGE is: +[Apache AGE](https://age.apache.org/#) is an extension for PostgreSQL that enables users to leverage a graph database on top of the existing relational databases. AGE is an acronym for A Graph Extension and is inspired by Bitnine's AgensGraph, a multi-model database fork of PostgreSQL. The basic principle of the project is to create a single storage that handles both the relational and graph data model so that the users can use the standard ANSI SQL along with openCypher, one of the most popular graph query languages today. +
+
+
+ +

+ +

+ +
+ +Since AGE is based on the powerful PostgreSQL RDBMS, it is robust and fully featured. AGE is optimized for handling complex connected graph data. It provides plenty of robust databases features essential to the database environment, including ACID transactions, multi-version concurrency control (MVCC), stored procedure, triggers, constraints, sophisticated monitoring, and a flexible data model (JSON). Users with a relational background who require graph data analytics can use this extension with minimal effort because they can use existing data without having to go through migration. + +There is a strong need for cohesive, easy-to-implement multi-model databases. As an extension of PostgreSQL, AGE supports all the functionalities and features of PostgreSQL while also offering a graph model to boot. + + +

  Overview

+ +Apache AGE is : - **Powerful**: adds graph database support to the already popular PostgreSQL database: PostgreSQL is used by organizations including Apple, Spotify, and NASA. -- **Flexible**: allows you to perform openCypher queries, which make complex queries much easier to write. -- **Intelligent**: allows you to perform graph queries that are the basis for many next level web services such as fraud detection, master data management, product recommendations, identity and relationship management, experience personalization, knowledge management and more. +- **Flexible**: allows you to perform openCypher queries, which makes complex queries much easier to write. It also enables multiple graphs at the same time. +- **Intelligent**: allows you to perform graph queries that are the basis for many next-level web services such as fraud detection, master data management, product recommendations, identity and relationship management, experience personalization, knowledge management, and more. -Also, while the technology can be integrated against many data layers, a graph database is also the perfect companion for a [GraphQL](https://graphql.org/) API. Since the information is already in a native format, it simplifies many factors and even allows many operations to be generated automatically. GraphQL is rapidly superceeding REST as the standard for cloud applications. +

  Features

+
+
+ +

+ +

+
-## Overview +- **Cypher Query**: supports graph query language +- **Hybrid Querying**: enables SQL and/or Cypher +- **Querying**: enables multiple graphs +- **Hierarchical**: graph label organization +- **Property Indexes**: on both vertices(nodes) and edges +- **Full PostgreSQL**: supports PG features -- **Apache AGE is currently being developed for the PostgreSQL 12 release** and will support PostgreSQL 13 and all the future releases of PostgreSQL. -- Apache AGE supports the openCypher graph query language. -- Apache AGE enables querying multiple graphs at the same time. -- The goal of Apache AGE is to make it compatible with all relational databases in the future. ## Latest Events From 680cd1e22b91d60edf4f19f1a7353226f4a842b0 Mon Sep 17 00:00:00 2001 From: Eya Badal Date: Tue, 29 Nov 2022 12:09:32 -0800 Subject: [PATCH 041/191] Update README.md Add more content and images for the Installation, documentation, and quick start sections. --- README.md | 223 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 213 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 7b32875ea..a70ef9b15 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,6 @@ Apache AGE is : - **Property Indexes**: on both vertices(nodes) and edges - **Full PostgreSQL**: supports PG features - ## Latest Events - Latest Apache AGE release, [Apache AGE 1.1.0](https://github.com/apache/age/releases/tag/v1.1.0-rc0). @@ -102,28 +101,232 @@ Apache AGE is : - Send all your comments and inquiries to the user mailing list, users@age.apache.org. - Support for PostgreSQL will be added in the Q4 2022 to focus more on implementing the openCypher specification. -## Documentation -Refer to our latest [Apache AGE documentation](https://age.apache.org/age-manual/master/index.html) to learn about installation, features and built-in functions, and Cypher queries. +

  Documentation

+ +Refer to our latest [Apache AGE documentation](https://age.apache.org/age-manual/master/index.html) to learn about installation, features, built-in functions, and Cypher queries. + + + +

  Pre-Installation

+ +Install the following essential libraries according to each OS. Building AGE from the source depends on the following Linux libraries (Ubuntu package names shown below): + +- **CentOS** +```bash +yum install gcc glibc glib-common readline readline-devel zlib zlib-devel flex bison +``` +- **Fedora** +```bash +dnf install gcc glibc bison flex readline readline-devel zlib zlib-devel +``` +- **Ubuntu** +```bash +sudo apt-get install build-essential libreadline-dev zlib1g-dev flex bison +``` + +

  Installation

+ +Apache AGE is intended to be simple to install and run. It can be installed with Docker and other traditional ways. + +

+ Install PosgtreSQL +

+ +You will need to install an AGE compatible version of Postgres, for now AGE only supports Postgres 11 and 12. + +

+ Install From Package Manager +

+ +You can use a
package management that your OS provides to download AGE. + +
+ +```bash +sudo apt install postgresql + +``` +

+ Install From Source Code +

+ +You can download the Postgres source code and install your own instance of Postgres. You can read instructions on how to install from source code for different versions on the offical Postgres Website. + + + +

 Install AGE on Linux and MacOS +

+ +Clone the github repository or download thedownload an official release. + +Run the pg_config utility and check the version of PostgreSQL. Currently, only PostgreSQL versions 11 & 12 are supported. If you have any other version of Postgres, you will need to install PostgreSQL version 11 & 12. +
+ +```bash +pg_config +``` +Run the following command in the source code directory of Apache AGE to build and install the extension. + +```bash +make install +``` + +If the path to your Postgres installation is not in the PATH variable, add the path in the arguments: +```bash +make PG_CONFIG=/path/to/postgres/bin/pg_config install +``` + + +

+ Run using Docker +

+ +
Get the docker image
+ +```bash +docker pull apache/age + +``` +
Create AGE docker container
+ +```bash +docker run \ + --name age \ + -p 5455:5432 \ + -e POSTGRES_USER=postgresUser \ + -e POSTGRES_PASSWORD=postgresPW \ + -e POSTGRES_DB=postgresDB \ + -d \ + apache/age +``` + + + +

  Post Installation

+ +For every connection of AGE you start, you will need to load the AGE extension. + +```bash +CREATE EXTENSION age; +``` +```bash +LOAD 'age'; +``` +```bash +SET search_path = ag_catalog, "$user", public; +``` + -## Installation -- [Installing from source](https://age.apache.org/download) -- [Apache AGE setup guide](https://age.apache.org/age-manual/master/intro/setup.html#) -- [Installing via docker image](https://age.apache.org/age-manual/master/intro/setup.html#installing-via-docker-image) +

  Quick Start

-## Language Specific Drivers +To create a graph, use the create_graph function located in the ag_catalog namespace. -### Built-in +```bash +create_graph(graph_name); +``` + +To create a single vertex, use the CREATE clause. + +```bash +SELECT * +FROM cypher('graph_name', $$ + CREATE (n) +$$) as (v agtype); +``` + + +To create a single vertex with the label, use the CREATE clause. + +```bash +SELECT * +FROM cypher('graph_name', $$ + CREATE (:label) +$$) as (v agtype); +``` + +To query the graph, you can use the MATCH clause. + +```bash +SELECT * FROM cypher('graph_name', $$ +MATCH (v) +RETURN v +$$) as (v agtype); +``` + +You can use the following to create an edge, for example, between two nodes. + +```bash +SELECT * +FROM cypher('graph_name', $$ + MATCH (a:lable), (b:lable) + WHERE a.property = 'Node A' AND b.property = 'Node B' + CREATE (a)-[e:RELTYPE]->(b) + RETURN e +$$) as (e agtype); +``` + + +To create an edge and set properties. + +```bash +SELECT * +FROM cypher('graph_name', $$ + MATCH (a:label), (b:label) + WHERE a.property = 'Node A' AND b.property = 'Node B' + CREATE (a)-[e:RELTYPE {property:a.property + '<->' + b.property}]->(b) + RETURN e +$$) as (e agtype); +``` + +Example + +```bash +SELECT * +FROM cypher('graph_name', $$ + MATCH (a:Person), (b:Person) + WHERE a.name = 'Node A' AND b.name = 'Node B' + CREATE (a)-[e:RELTYPE {name:a.name + '<->' + b.name}]->(b) + RETURN e +$$) as (e agtype); +``` + + + +

  Language Specific Drivers

+ +Starting with Apache AGE is very simple. You can easily select your platform and incorporate the relevant SDK into your code. +
+
+ +

+ +

+ + +

Built-in

- [Go driver](./drivers/golang) - [Java driver](./drivers/jdbc) - [NodeJs driver](./drivers/nodejs) - [Python driver](./drivers/python) -### Community-driven Driver +

Community-driven Driver

+ - [Apache AGE Rust Driver](https://github.com/Dzordzu/rust-apache-age.git) + + + + + + + + + + + ## Graph Visualization Tool for AGE Apache AGE Viewer is a user interface for Apache AGE that provides visualization and exploration of data. From cdbb31f77b65dd7ebd4d64ee9632e700c4da52e5 Mon Sep 17 00:00:00 2001 From: Eya Badal Date: Tue, 29 Nov 2022 12:29:46 -0800 Subject: [PATCH 042/191] Add more content and images Add more content and images for the contribution community and Visualization sections. --- README.md | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index a70ef9b15..583f73ed6 100644 --- a/README.md +++ b/README.md @@ -319,25 +319,34 @@ Starting with Apache AGE is very simple. You can easily select your platform a +

  Community

+Join the AGE community for help, questions, discussions, and contributions. +- Check our [website](https://age.apache.org/) +- Chat live with us on [Discord](https://discord.com/invite/NMsBs9X8Ss/) +- Follow us on [Twitter](https://twitter.com/apache_age?s=20&t=7Hu8Txk4vjvuEp-ryakacg) +- Join our [Dev community](https://lists.apache.org/list.html?dev@age.apache.org) +

  Graph Visualization Tool for AGE

- - -## Graph Visualization Tool for AGE - Apache AGE Viewer is a user interface for Apache AGE that provides visualization and exploration of data. -Through this simple web visualization tool, users can enter complex graph queries and explore the results in graph and table forms. -Apache AGE Viewer is enhanced to proceed with large graph data and discover the insights through various graph algorithms. +This web visualization tool allows users to enter complex graph queries and explore the results in graph and table forms. +Apache AGE Viewer is enhanced to proceed with extensive graph data and discover insights through various graph algorithms. Apache AGE Viewer will become a graph data administration and development platform for Apache AGE to support multiple relational databases: . -- This is a visualization tool. +**This is a visualization tool.** After installing AGE Extension, you may use this tool to get access to the visualization features. -## Contribution + +![Viewer gdb, and graph](/img/agce.gif) + + + +

  Contributing

You can improve ongoing efforts or initiate new ones by sending pull requests to [this repository](https://github.com/apache/age). -Also, you can learn from the code review process, how to merge pull requests, and from code style compliance to documentation, by visiting the [Apache AGE official site - Developer Guidelines](https://age.apache.org/contribution/guide). +Also, you can learn from the code review process, how to merge pull requests, and from code style compliance to documentation by visiting the [Apache AGE official site - Developer Guidelines](https://age.apache.org/contribution/guide). +Send all your comments and inquiries to the user mailing list, users@age.apache.org. From 57c6b5b77f99d25b5e508a760b15113f33ec6109 Mon Sep 17 00:00:00 2001 From: Eya Badal Date: Tue, 29 Nov 2022 15:23:53 -0800 Subject: [PATCH 043/191] Add image for news header section --- img/news.jpeg | Bin 0 -> 8555 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/news.jpeg diff --git a/img/news.jpeg b/img/news.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..ee507885ca4590a1e646cd6baf07ef3eef5077fe GIT binary patch literal 8555 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 VO=_jSX8!wsBKKeYf$V7TzX2TtyW{`> literal 0 HcmV?d00001 From 26c2f4110a37718f2032f03b9fde98a443121a26 Mon Sep 17 00:00:00 2001 From: Eya Badal Date: Tue, 29 Nov 2022 15:27:42 -0800 Subject: [PATCH 044/191] Add header logo for news section --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 583f73ed6..38ceb15eb 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,7 @@ Apache AGE is : - **Property Indexes**: on both vertices(nodes) and edges - **Full PostgreSQL**: supports PG features -## Latest Events +

  Latest Events

- Latest Apache AGE release, [Apache AGE 1.1.0](https://github.com/apache/age/releases/tag/v1.1.0-rc0). - Renewed Apache AGE homepage - [Apache AGE website](http://age.apache.org/). From bdf836ce0a6b194712e3a1710b93970c764229e9 Mon Sep 17 00:00:00 2001 From: Eya Badal Date: Tue, 29 Nov 2022 17:07:42 -0800 Subject: [PATCH 045/191] Remove News Section --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index 38ceb15eb..ba1848f2a 100644 --- a/README.md +++ b/README.md @@ -94,12 +94,6 @@ Apache AGE is : - **Property Indexes**: on both vertices(nodes) and edges - **Full PostgreSQL**: supports PG features -

  Latest Events

- -- Latest Apache AGE release, [Apache AGE 1.1.0](https://github.com/apache/age/releases/tag/v1.1.0-rc0). -- Renewed Apache AGE homepage - [Apache AGE website](http://age.apache.org/). -- Send all your comments and inquiries to the user mailing list, users@age.apache.org. -- Support for PostgreSQL will be added in the Q4 2022 to focus more on implementing the openCypher specification.

  Documentation

From 78b901cab52ef566e5854119e1ab9fcaf16a0cee Mon Sep 17 00:00:00 2001 From: Eya Badal Date: Tue, 29 Nov 2022 17:18:26 -0800 Subject: [PATCH 046/191] Update README.md Update content --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ba1848f2a..b81db5edb 100644 --- a/README.md +++ b/README.md @@ -127,7 +127,7 @@ Apache AGE is intended to be simple to install and run. It can be installed with  Install PosgtreSQL -You will need to install an AGE compatible version of Postgres, for now AGE only supports Postgres 11 and 12. +You will need to install an AGE compatible version of Postgres, for now AGE supports Postgres 11 and 12. Supporting the latest versions is on AGE roadmap.

 Install From Package Manager From 397aec1095692cfb3c38589f14a43608fa9caaf9 Mon Sep 17 00:00:00 2001 From: Eya Badal Date: Wed, 30 Nov 2022 11:12:56 -0800 Subject: [PATCH 047/191] Update README Typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b81db5edb..b243c49d3 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ - is the leading multi-model graph database

+ is a leading multi-model graph database From ccd413dc15410d7262e754f21f0970f1861c9430 Mon Sep 17 00:00:00 2001 From: Vittorio Parrella <93098480+parvit@users.noreply.github.com> Date: Wed, 7 Dec 2022 22:22:31 -0500 Subject: [PATCH 048/191] Fix null pointer on name compare (#376) * Fix null pointer on name compare * typo in name of test script * additional regression tests and style fixes --- regress/sql/issue_369.sql | 31 ++++++++++++++++++++ src/backend/parser/cypher_transform_entity.c | 9 ++++-- 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 regress/sql/issue_369.sql diff --git a/regress/sql/issue_369.sql b/regress/sql/issue_369.sql new file mode 100644 index 000000000..038a282d8 --- /dev/null +++ b/regress/sql/issue_369.sql @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +LOAD 'age'; +SET search_path TO ag_catalog; + +SELECT create_graph('cypher'); + +SELECT * from cypher('cypher', $$ CREATE (a {x:1})-[:foo]->(b {x:2}),(c {x:3}) $$) as (v0 agtype); + +SELECT * from cypher('cypher', $$ MATCH ()-[a:foo]->(), (b {x:2}),(c {x:3}) MERGE (b)-[d:bar]->(c) RETURN d $$) as (v0 agtype); + +SELECT * from cypher('cypher', $$ MATCH (x)-[a:foo]->(), (b {x:2}),(c {x:3}) MERGE (b)-[d:bar]->(c) RETURN d $$) as (v0 agtype); + +SELECT * from cypher('cypher', $$ MATCH ()-[a:foo]->(y), (b {x:2}),(c {x:3}) MERGE (b)-[d:bar]->(c) RETURN d $$) as (v0 agtype); diff --git a/src/backend/parser/cypher_transform_entity.c b/src/backend/parser/cypher_transform_entity.c index c9f13a868..465539df4 100644 --- a/src/backend/parser/cypher_transform_entity.c +++ b/src/backend/parser/cypher_transform_entity.c @@ -60,6 +60,11 @@ transform_entity *find_transform_entity(cypher_parsestate *cpstate, char *name, enum transform_entity_type type) { + if( name == NULL ) + { + return NULL; + } + ListCell *lc; foreach(lc, cpstate->entities) @@ -73,14 +78,14 @@ transform_entity *find_transform_entity(cypher_parsestate *cpstate, if (type == ENT_VERTEX) { - if (!strcmp(entity->entity.node->name, name)) + if (entity->entity.node->name != NULL && !strcmp(entity->entity.node->name, name)) { return entity; } } else if (type == ENT_EDGE || type == ENT_VLE_EDGE) { - if (!strcmp(entity->entity.rel->name, name)) + if (entity->entity.rel->name != NULL && !strcmp(entity->entity.rel->name, name)) { return entity; } From a5202c1d4fc73db258dbd22cc5a8931efaa28f02 Mon Sep 17 00:00:00 2001 From: Luke Hinds <7058938+lukehinds@users.noreply.github.com> Date: Sat, 10 Dec 2022 01:14:51 +0000 Subject: [PATCH 049/191] Update to go version 1.19, as 1.16 is EOL (#373) * Update to go version 1.19, as 1.16 is EOL The current version of the driver is 1.16 which went EOL Feb 2021 This upgrades to 1.19 and also configures CI to retrospectively test back to 1.18 (1.17 is EOL). This will give test coverage for all actively supported go versions. * Also update readme go version --- .github/workflows/go-driver.yml | 5 ++++- drivers/golang/README.md | 2 +- drivers/golang/go.mod | 8 +++++++- drivers/golang/go.sum | 1 + 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/.github/workflows/go-driver.yml b/.github/workflows/go-driver.yml index 52febad64..25fcf770a 100644 --- a/.github/workflows/go-driver.yml +++ b/.github/workflows/go-driver.yml @@ -11,6 +11,9 @@ on: jobs: build: runs-on: ubuntu-latest + strategy: + matrix: + go-version: [ '1.18', '1.19' ] defaults: run: working-directory: drivers/golang/age/ @@ -24,7 +27,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v3 with: - go-version: 1.16 + go-version: ${{ matrix.go-version }} - name: Build run: go build -v ./... diff --git a/drivers/golang/README.md b/drivers/golang/README.md index 1d58fa6cf..4433212cf 100644 --- a/drivers/golang/README.md +++ b/drivers/golang/README.md @@ -7,7 +7,7 @@ AGType parser and driver support for [Apache AGE](https://age.apache.org/), grap * Cypher query support for 3rd. Party sql driver (enables to use cypher queries directly) ### Prerequisites -* over Go 1.16 +* over Go 1.18 / 1.19 * This module runs on golang standard api [database/sql](https://golang.org/pkg/database/sql/) and [antlr4-python3](https://github.com/antlr/antlr4/tree/master/runtime/Go/antlr) diff --git a/drivers/golang/go.mod b/drivers/golang/go.mod index 81525d66f..a6bd74bd6 100644 --- a/drivers/golang/go.mod +++ b/drivers/golang/go.mod @@ -19,10 +19,16 @@ module github.com/apache/age/drivers/golang -go 1.16 +go 1.19 require ( github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210521184019-c5ad59b459ec github.com/lib/pq v1.10.2 github.com/stretchr/testify v1.7.0 ) + +require ( + github.com/davecgh/go-spew v1.1.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect +) diff --git a/drivers/golang/go.sum b/drivers/golang/go.sum index 13a472eb9..89d1775ed 100644 --- a/drivers/golang/go.sum +++ b/drivers/golang/go.sum @@ -9,6 +9,7 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= From cb0b3a981c6f0740adb633d61f4a1a513136ca6c Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Mon, 12 Dec 2022 10:36:28 -0800 Subject: [PATCH 050/191] Fix Travis CI warning message Fixed a Travis CI warning message that was overlooked - warning: ISO C90 forbids mixed declarations and code --- src/backend/parser/cypher_transform_entity.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/backend/parser/cypher_transform_entity.c b/src/backend/parser/cypher_transform_entity.c index 465539df4..6d4b2c753 100644 --- a/src/backend/parser/cypher_transform_entity.c +++ b/src/backend/parser/cypher_transform_entity.c @@ -60,12 +60,12 @@ transform_entity *find_transform_entity(cypher_parsestate *cpstate, char *name, enum transform_entity_type type) { - if( name == NULL ) + ListCell *lc; + + if (name == NULL) { return NULL; } - - ListCell *lc; foreach(lc, cpstate->entities) { From 203f61a7028cfd60fea74c89607b766fd7e35dc6 Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Mon, 12 Dec 2022 10:47:43 -0800 Subject: [PATCH 051/191] Fix Travis CI warning message MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed Travis CI warning message - warning: unused variable ‘stack’ --- src/backend/utils/adt/age_vle.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/backend/utils/adt/age_vle.c b/src/backend/utils/adt/age_vle.c index 35d7e71d7..ad54bc929 100644 --- a/src/backend/utils/adt/age_vle.c +++ b/src/backend/utils/adt/age_vle.c @@ -1446,7 +1446,12 @@ static VLE_path_container *build_VLE_zero_container(VLE_local_context *vlelctx) graphid vid = 0; /* we should have an empty stack */ - Assert(get_stack_size(stack) == 0); + if (get_stack_size(stack) != 0) + { + ereport(ERROR, + (errcode(ERRCODE_DATA_EXCEPTION), + errmsg("build_VLE_zero_container: stack is not empty"))); + } /* * Create the container. Note that the path size will always be 1 as this is From dc5895ed0b6215ac29e15e66686de41af80a1538 Mon Sep 17 00:00:00 2001 From: Utkarsh Kansal Date: Mon, 12 Dec 2022 13:06:26 -0800 Subject: [PATCH 052/191] create complete graph function (#342) * create complete graph function * fix get_label_name * add regression tests --- Makefile | 3 + age--1.1.0.sql | 13 +- regress/expected/graph_generation.out | 111 ++++++++++++++ regress/sql/graph_generation.sql | 47 ++++++ src/backend/catalog/ag_label.c | 10 +- src/backend/commands/label_commands.c | 2 +- src/backend/utils/adt/agtype.c | 2 +- src/backend/utils/cache/ag_cache.c | 196 +++++++++++++++++++++++++ src/backend/utils/graph_generation.c | 203 ++++++++++++++++++++++++++ src/backend/utils/load/age_load.c | 2 +- src/include/catalog/ag_label.h | 8 +- src/include/commands/graph_commands.h | 27 ++++ src/include/commands/label_commands.h | 5 + src/include/utils/ag_cache.h | 2 + src/include/utils/load/age_load.h | 2 + 15 files changed, 625 insertions(+), 8 deletions(-) create mode 100644 regress/expected/graph_generation.out create mode 100644 regress/sql/graph_generation.sql create mode 100644 src/backend/utils/graph_generation.c create mode 100644 src/include/commands/graph_commands.h diff --git a/Makefile b/Makefile index da84c31ce..e6024d6ba 100644 --- a/Makefile +++ b/Makefile @@ -63,6 +63,7 @@ OBJS = src/backend/age.o \ src/backend/utils/adt/ag_float8_supp.o \ src/backend/utils/adt/graphid.o \ src/backend/utils/ag_func.o \ + src/backend/utils/graph_generation.o \ src/backend/utils/cache/ag_cache.o \ src/backend/utils/load/ag_load_labels.o \ src/backend/utils/load/ag_load_edges.o \ @@ -95,7 +96,9 @@ REGRESS = scan \ age_load \ index \ analyze \ + graph_generation \ drop + srcdir=`pwd` diff --git a/age--1.1.0.sql b/age--1.1.0.sql index 6fe30add8..e2a5e8397 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -47,7 +47,8 @@ CREATE TABLE ag_label ( graph oid NOT NULL, id label_id, kind label_kind, - relation regclass NOT NULL + relation regclass NOT NULL, + seq_name name NOT NULL ) WITH (OIDS); CREATE UNIQUE INDEX ag_label_oid_index ON ag_label USING btree (oid); @@ -62,6 +63,9 @@ USING btree (graph, id); CREATE UNIQUE INDEX ag_label_relation_index ON ag_label USING btree (relation); +CREATE UNIQUE INDEX ag_label_seq_name_graph_index +ON ag_label +USING btree (seq_name, graph); -- -- catalog lookup functions -- @@ -4157,6 +4161,13 @@ STABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; +CREATE FUNCTION ag_catalog.create_complete_graph(graph_name name, nodes int, edge_label name, node_label name = NULL) +RETURNS void +LANGUAGE c +CALLED ON NULL INPUT +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + CREATE FUNCTION ag_catalog.age_prepare_cypher(cstring, cstring) RETURNS boolean LANGUAGE c diff --git a/regress/expected/graph_generation.out b/regress/expected/graph_generation.out new file mode 100644 index 000000000..118ab6e9e --- /dev/null +++ b/regress/expected/graph_generation.out @@ -0,0 +1,111 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +LOAD 'age'; +SET search_path = ag_catalog; +SELECT * FROM create_complete_graph('gp1',5,'edges','vertices'); +NOTICE: graph "gp1" has been created +NOTICE: VLabel "vertices" has been created +NOTICE: ELabel "edges" has been created + create_complete_graph +----------------------- + +(1 row) + +SELECT COUNT(*) FROM gp1."edges"; + count +------- + 10 +(1 row) + +SELECT COUNT(*) FROM gp1."vertices"; + count +------- + 5 +(1 row) + +SELECT * FROM cypher('gp1', $$MATCH (a)-[e]->(b) RETURN e$$) as (n agtype); + n +---------------------------------------------------------------------------------------------------------------------------- + {"id": 1125899906842625, "label": "edges", "end_id": 844424930131970, "start_id": 844424930131969, "properties": {}}::edge + {"id": 1125899906842629, "label": "edges", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge + {"id": 1125899906842626, "label": "edges", "end_id": 844424930131971, "start_id": 844424930131969, "properties": {}}::edge + {"id": 1125899906842630, "label": "edges", "end_id": 844424930131972, "start_id": 844424930131970, "properties": {}}::edge + {"id": 1125899906842627, "label": "edges", "end_id": 844424930131972, "start_id": 844424930131969, "properties": {}}::edge + {"id": 1125899906842632, "label": "edges", "end_id": 844424930131972, "start_id": 844424930131971, "properties": {}}::edge + {"id": 1125899906842631, "label": "edges", "end_id": 844424930131973, "start_id": 844424930131970, "properties": {}}::edge + {"id": 1125899906842634, "label": "edges", "end_id": 844424930131973, "start_id": 844424930131972, "properties": {}}::edge + {"id": 1125899906842633, "label": "edges", "end_id": 844424930131973, "start_id": 844424930131971, "properties": {}}::edge + {"id": 1125899906842628, "label": "edges", "end_id": 844424930131973, "start_id": 844424930131969, "properties": {}}::edge +(10 rows) + +SELECT * FROM create_complete_graph('gp1',5,'edges','vertices'); + create_complete_graph +----------------------- + +(1 row) + +SELECT COUNT(*) FROM gp1."edges"; + count +------- + 20 +(1 row) + +SELECT COUNT(*) FROM gp1."vertices"; + count +------- + 10 +(1 row) + +SELECT * FROM create_complete_graph('gp2',5,'edges'); +NOTICE: graph "gp2" has been created +NOTICE: ELabel "edges" has been created + create_complete_graph +----------------------- + +(1 row) + +SELECT * FROM create_complete_graph('gp3',5, NULL); +ERROR: edge label can not be NULL +SELECT * FROM create_complete_graph('gp4',NULL,NULL); +ERROR: number of nodes can not be NULL +SELECT * FROM create_complete_graph(NULL,NULL,NULL); +ERROR: graph name can not be NULL +SELECT drop_graph('gp1', true); +NOTICE: drop cascades to 4 other objects +DETAIL: drop cascades to table gp1._ag_label_vertex +drop cascades to table gp1._ag_label_edge +drop cascades to table gp1.vertices +drop cascades to table gp1.edges +NOTICE: graph "gp1" has been dropped + drop_graph +------------ + +(1 row) + +SELECT drop_graph('gp2', true); +NOTICE: drop cascades to 3 other objects +DETAIL: drop cascades to table gp2._ag_label_vertex +drop cascades to table gp2._ag_label_edge +drop cascades to table gp2.edges +NOTICE: graph "gp2" has been dropped + drop_graph +------------ + +(1 row) + diff --git a/regress/sql/graph_generation.sql b/regress/sql/graph_generation.sql new file mode 100644 index 000000000..1ad90f5a3 --- /dev/null +++ b/regress/sql/graph_generation.sql @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + +LOAD 'age'; + +SET search_path = ag_catalog; + +SELECT * FROM create_complete_graph('gp1',5,'edges','vertices'); + +SELECT COUNT(*) FROM gp1."edges"; +SELECT COUNT(*) FROM gp1."vertices"; + +SELECT * FROM cypher('gp1', $$MATCH (a)-[e]->(b) RETURN e$$) as (n agtype); + +SELECT * FROM create_complete_graph('gp1',5,'edges','vertices'); + +SELECT COUNT(*) FROM gp1."edges"; +SELECT COUNT(*) FROM gp1."vertices"; + +SELECT * FROM create_complete_graph('gp2',5,'edges'); + +SELECT * FROM create_complete_graph('gp3',5, NULL); + +SELECT * FROM create_complete_graph('gp4',NULL,NULL); + +SELECT * FROM create_complete_graph(NULL,NULL,NULL); + +SELECT drop_graph('gp1', true); +SELECT drop_graph('gp2', true); + diff --git a/src/backend/catalog/ag_label.c b/src/backend/catalog/ag_label.c index 8001f53c4..cd8d0bab6 100644 --- a/src/backend/catalog/ag_label.c +++ b/src/backend/catalog/ag_label.c @@ -44,11 +44,12 @@ #include "utils/graphid.h" // INSERT INTO ag_catalog.ag_label -// VALUES (label_name, label_graph, label_id, label_kind, label_relation) +// VALUES (label_name, label_graph, label_id, label_kind, label_relation, seq_name) Oid insert_label(const char *label_name, Oid label_graph, int32 label_id, - char label_kind, Oid label_relation) + char label_kind, Oid label_relation, const char *seq_name) { NameData label_name_data; + NameData seq_name_data; Datum values[Natts_ag_label]; bool nulls[Natts_ag_label]; Relation ag_label; @@ -65,6 +66,7 @@ Oid insert_label(const char *label_name, Oid label_graph, int32 label_id, AssertArg(label_kind == LABEL_KIND_VERTEX || label_kind == LABEL_KIND_EDGE); AssertArg(OidIsValid(label_relation)); + AssertArg(seq_name); namestrcpy(&label_name_data, label_name); values[Anum_ag_label_name - 1] = NameGetDatum(&label_name_data); @@ -82,6 +84,10 @@ Oid insert_label(const char *label_name, Oid label_graph, int32 label_id, values[Anum_ag_label_relation - 1] = ObjectIdGetDatum(label_relation); nulls[Anum_ag_label_relation - 1] = false; + namestrcpy(&seq_name_data, seq_name); + values[Anum_ag_label_seq_name - 1] = NameGetDatum(&seq_name_data); + nulls[Anum_ag_label_seq_name - 1] = false; + ag_label = heap_open(ag_label_relation_id(), RowExclusiveLock); tuple = heap_form_tuple(RelationGetDescr(ag_label), values, nulls); diff --git a/src/backend/commands/label_commands.c b/src/backend/commands/label_commands.c index 66b6818fe..02bf574c9 100644 --- a/src/backend/commands/label_commands.c +++ b/src/backend/commands/label_commands.c @@ -308,7 +308,7 @@ Oid create_label(char *graph_name, char *label_name, char label_type, label_id = get_new_label_id(graph_oid, nsp_id); label_oid = insert_label(label_name, graph_oid, label_id, label_type, - relation_id); + relation_id,seq_name); CommandCounterIncrement(); diff --git a/src/backend/utils/adt/agtype.c b/src/backend/utils/adt/agtype.c index 908f38870..6c1a50009 100644 --- a/src/backend/utils/adt/agtype.c +++ b/src/backend/utils/adt/agtype.c @@ -4526,7 +4526,7 @@ static char *get_label_name(const char *graph_name, int64 graphid) tupdesc = RelationGetDescr(ag_label); /* bail if the number of columns differs */ - if (tupdesc->natts != 5) + if (tupdesc->natts != 6) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_TABLE), errmsg("Invalid number of attributes for ag_catalog.ag_label"))); diff --git a/src/backend/utils/cache/ag_cache.c b/src/backend/utils/cache/ag_cache.c index ec34355c6..95e5d0df3 100644 --- a/src/backend/utils/cache/ag_cache.c +++ b/src/backend/utils/cache/ag_cache.c @@ -87,6 +87,18 @@ typedef struct label_relation_cache_entry label_cache_data data; } label_relation_cache_entry; +typedef struct label_seq_name_graph_cache_key +{ + NameData name; + Oid graph; +} label_seq_name_graph_cache_key; + +typedef struct label_seq_name_graph_cache_entry +{ + label_seq_name_graph_cache_key key; // hash key + label_cache_data data; +} label_seq_name_graph_cache_entry; + // ag_graph.name static HTAB *graph_name_cache_hash = NULL; static ScanKeyData graph_name_scan_keys[1]; @@ -111,6 +123,10 @@ static ScanKeyData label_graph_id_scan_keys[2]; static HTAB *label_relation_cache_hash = NULL; static ScanKeyData label_relation_scan_keys[1]; +// ag_label.seq_name, ag_label.graph +static HTAB *label_seq_name_graph_cache_hash = NULL; +static ScanKeyData label_seq_name_graph_scan_keys[2]; + // initialize all caches static void initialize_caches(void); @@ -140,6 +156,7 @@ static void create_label_oid_cache(void); static void create_label_name_graph_cache(void); static void create_label_graph_id_cache(void); static void create_label_relation_cache(void); +static void create_label_seq_name_graph_cache(void); static void invalidate_label_caches(Datum arg, Oid relid); static void invalidate_label_oid_cache(Oid relid); static void flush_label_oid_cache(void); @@ -149,6 +166,9 @@ static void invalidate_label_graph_id_cache(Oid relid); static void flush_label_graph_id_cache(void); static void invalidate_label_relation_cache(Oid relid); static void flush_label_relation_cache(void); +static void invalidate_label_seq_name_graph_cache(Oid relid); +static void flush_label_seq_name_graph_cache(void); + static label_cache_data *search_label_oid_cache_miss(Oid oid); static label_cache_data *search_label_name_graph_cache_miss(Name name, Oid graph); @@ -159,6 +179,12 @@ static label_cache_data *search_label_graph_id_cache_miss(Oid graph, int32 id); static void *label_graph_id_cache_hash_search(Oid graph, int32 id, HASHACTION action, bool *found); static label_cache_data *search_label_relation_cache_miss(Oid relation); +static label_cache_data *search_label_seq_name_graph_cache_miss(Name name, + Oid graph); +static void *label_seq_name_graph_cache_hash_search(Name name, Oid graph, + HASHACTION action, + bool *found); + static void fill_label_cache_data(label_cache_data *cache_data, HeapTuple tuple, TupleDesc tuple_desc); @@ -486,6 +512,12 @@ static void initialize_label_caches(void) // ag_label.relation ag_cache_scan_key_init(&label_relation_scan_keys[0], Anum_ag_label_relation, F_OIDEQ); + + // ag_label.seq_name, ag_label.graph + ag_cache_scan_key_init(&label_seq_name_graph_scan_keys[0], Anum_ag_label_seq_name, + F_NAMEEQ); + ag_cache_scan_key_init(&label_seq_name_graph_scan_keys[1], Anum_ag_label_graph, + F_OIDEQ); create_label_caches(); @@ -506,6 +538,8 @@ static void create_label_caches(void) create_label_name_graph_cache(); create_label_graph_id_cache(); create_label_relation_cache(); + create_label_seq_name_graph_cache(); + } static void create_label_oid_cache(void) @@ -578,9 +612,28 @@ static void create_label_relation_cache(void) &hash_ctl, HASH_ELEM | HASH_BLOBS); } +static void create_label_seq_name_graph_cache(void) +{ + HASHCTL hash_ctl; + + MemSet(&hash_ctl, 0, sizeof(hash_ctl)); + hash_ctl.keysize = sizeof(label_seq_name_graph_cache_key); + hash_ctl.entrysize = sizeof(label_seq_name_graph_cache_entry); + + /* + * Please see the comment of hash_create() for the nelem value 16 here. + * HASH_BLOBS flag is set because the key for this hash is fixed-size. + */ + label_seq_name_graph_cache_hash = hash_create("ag_label (seq_name, graph) cache", + 16, &hash_ctl, + HASH_ELEM | HASH_BLOBS); +} + static void invalidate_label_caches(Datum arg, Oid relid) { Assert(label_name_graph_cache_hash); + Assert(label_seq_name_graph_cache_hash); + if (OidIsValid(relid)) { @@ -588,6 +641,7 @@ static void invalidate_label_caches(Datum arg, Oid relid) invalidate_label_name_graph_cache(relid); invalidate_label_graph_id_cache(relid); invalidate_label_relation_cache(relid); + invalidate_label_seq_name_graph_cache(relid); } else { @@ -595,6 +649,7 @@ static void invalidate_label_caches(Datum arg, Oid relid) flush_label_name_graph_cache(); flush_label_graph_id_cache(); flush_label_relation_cache(); + flush_label_seq_name_graph_cache(); } } @@ -802,6 +857,61 @@ static void flush_label_relation_cache(void) } } +static void invalidate_label_seq_name_graph_cache(Oid relid) +{ + HASH_SEQ_STATUS hash_seq; + + hash_seq_init(&hash_seq, label_seq_name_graph_cache_hash); + for (;;) + { + label_seq_name_graph_cache_entry *entry; + void *removed; + + entry = hash_seq_search(&hash_seq); + if (!entry) + break; + + if (entry->data.relation != relid) + continue; + + removed = hash_search(label_seq_name_graph_cache_hash, &entry->key, + HASH_REMOVE, NULL); + hash_seq_term(&hash_seq); + + if (!removed) + { + ereport(ERROR, + (errmsg_internal("label (seq_name, graph) cache corrupted"))); + } + + break; + } +} + +static void flush_label_seq_name_graph_cache(void) +{ + HASH_SEQ_STATUS hash_seq; + + hash_seq_init(&hash_seq, label_seq_name_graph_cache_hash); + for (;;) + { + label_seq_name_graph_cache_entry *entry; + void *removed; + + entry = hash_seq_search(&hash_seq); + if (!entry) + break; + + removed = hash_search(label_seq_name_graph_cache_hash, &entry->key, + HASH_REMOVE, NULL); + if (!removed) + { + ereport(ERROR, + (errmsg_internal("label (seq_name, graph) cache corrupted"))); + } + } +} + label_cache_data *search_label_oid_cache(Oid oid) { label_cache_data *entry; @@ -1080,6 +1190,88 @@ static label_cache_data *search_label_relation_cache_miss(Oid relation) return entry; } +label_cache_data *search_label_seq_name_graph_cache(const char *name, Oid graph) +{ + NameData name_key; + label_seq_name_graph_cache_entry *entry; + + AssertArg(name); + AssertArg(OidIsValid(graph)); + + initialize_caches(); + + namestrcpy(&name_key, name); + entry = label_seq_name_graph_cache_hash_search(&name_key, graph, HASH_FIND, + NULL); + if (entry) + return &entry->data; + + return search_label_seq_name_graph_cache_miss(&name_key, graph); +} + +static label_cache_data *search_label_seq_name_graph_cache_miss(Name name, + Oid graph) +{ + ScanKeyData scan_keys[2]; + Relation ag_label; + SysScanDesc scan_desc; + HeapTuple tuple; + bool found; + label_seq_name_graph_cache_entry *entry; + + memcpy(scan_keys, label_seq_name_graph_scan_keys, + sizeof(label_seq_name_graph_scan_keys)); + scan_keys[0].sk_argument = NameGetDatum(name); + scan_keys[1].sk_argument = ObjectIdGetDatum(graph); + + /* + * Calling heap_open() might call AcceptInvalidationMessage() and that + * might invalidate the label caches. This is OK because this function is + * called when the desired entry is not in the cache. + */ + ag_label = heap_open(ag_label_relation_id(), AccessShareLock); + scan_desc = systable_beginscan(ag_label, ag_label_seq_name_graph_index_id(), + true, NULL, 2, scan_keys); + + /* + * don't need to loop over scan_desc because ag_label_seq_name_graph_index is + * UNIQUE + */ + tuple = systable_getnext(scan_desc); + if (!HeapTupleIsValid(tuple)) + { + systable_endscan(scan_desc); + heap_close(ag_label, AccessShareLock); + + return NULL; + } + + // get a new entry + entry = label_seq_name_graph_cache_hash_search(name, graph, HASH_ENTER, + &found); + Assert(!found); // no concurrent update on label_seq_name_graph_cache_hash + + // fill the new entry with the retrieved tuple + fill_label_cache_data(&entry->data, tuple, RelationGetDescr(ag_label)); + + systable_endscan(scan_desc); + heap_close(ag_label, AccessShareLock); + + return &entry->data; +} + +static void *label_seq_name_graph_cache_hash_search(Name name, Oid graph, + HASHACTION action, bool *found) +{ + label_seq_name_graph_cache_key key; + + // initialize the hash key for label_seq_name_graph_cache_hash + namecpy(&key.name, name); + key.graph = graph; + + return hash_search(label_seq_name_graph_cache_hash, &key, action, found); +} + static void fill_label_cache_data(label_cache_data *cache_data, HeapTuple tuple, TupleDesc tuple_desc) { @@ -1110,4 +1302,8 @@ static void fill_label_cache_data(label_cache_data *cache_data, value = heap_getattr(tuple, Anum_ag_label_relation, tuple_desc, &is_null); Assert(!is_null); cache_data->relation = DatumGetObjectId(value); + // ag_label.seq_name + value = heap_getattr(tuple, Anum_ag_label_seq_name, tuple_desc, &is_null); + Assert(!is_null); + namecpy(&cache_data->seq_name, DatumGetName(value)); } diff --git a/src/backend/utils/graph_generation.c b/src/backend/utils/graph_generation.c new file mode 100644 index 000000000..49da5f829 --- /dev/null +++ b/src/backend/utils/graph_generation.c @@ -0,0 +1,203 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#include "postgres.h" + +#include "access/xact.h" +#include "access/genam.h" +#include "access/heapam.h" +#include "catalog/dependency.h" +#include "catalog/objectaddress.h" +#include "commands/defrem.h" +#include "commands/schemacmds.h" +#include "commands/tablecmds.h" +#include "fmgr.h" +#include "miscadmin.h" +#include "nodes/makefuncs.h" +#include "nodes/nodes.h" +#include "nodes/parsenodes.h" +#include "nodes/pg_list.h" +#include "nodes/value.h" +#include "parser/parser.h" +#include "utils/fmgroids.h" +#include "utils/relcache.h" +#include "utils/rel.h" + +#include "catalog/ag_graph.h" +#include "catalog/ag_label.h" +#include "commands/label_commands.h" +#include "utils/graphid.h" +#include "commands/graph_commands.h" +#include "utils/load/age_load.h" +#include "utils/load/ag_load_edges.h" +#include "utils/load/ag_load_labels.h" + + +PG_FUNCTION_INFO_V1(create_complete_graph); + +/* +* SELECT * FROM ag_catalog.create_complete_graph('graph_name',no_of_nodes, 'edge_label', 'node_label'=NULL); +*/ + +Datum create_complete_graph(PG_FUNCTION_ARGS) +{ + Oid graph_id; + Name graph_name; + + int64 no_vertices; + int64 i,j,vid = 1, eid, start_vid, end_vid; + + Name vtx_label_name = NULL; + Name edge_label_name; + int32 vtx_label_id; + int32 edge_label_id; + + agtype *props = NULL; + graphid object_graph_id; + graphid start_vertex_graph_id; + graphid end_vertex_graph_id; + + Oid vtx_seq_id; + Oid edge_seq_id; + + char* graph_name_str; + char* vtx_name_str; + char* edge_name_str; + + graph_cache_data *graph_cache; + label_cache_data *vertex_cache; + label_cache_data *edge_cache; + + Oid nsp_id; + Name vtx_seq_name; + char *vtx_seq_name_str; + + Name edge_seq_name; + char *edge_seq_name_str; + + int64 lid; + + if (PG_ARGISNULL(0)) + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("graph name can not be NULL"))); + } + + if (PG_ARGISNULL(1)) + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("number of nodes can not be NULL"))); + } + + if (PG_ARGISNULL(2)) + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("edge label can not be NULL"))); + } + + + graph_name = PG_GETARG_NAME(0); + no_vertices = (int64) PG_GETARG_INT64(1); + edge_label_name = PG_GETARG_NAME(2); + namestrcpy(vtx_label_name, AG_DEFAULT_LABEL_VERTEX); + + graph_name_str = NameStr(*graph_name); + vtx_name_str = AG_DEFAULT_LABEL_VERTEX; + edge_name_str = NameStr(*edge_label_name); + + + if (!graph_exists(graph_name_str)) + { + DirectFunctionCall1(create_graph, CStringGetDatum(graph_name)); + + } + + graph_id = get_graph_oid(graph_name_str); + + + + if (!PG_ARGISNULL(3)) + { + vtx_label_name = PG_GETARG_NAME(3); + vtx_name_str = NameStr(*vtx_label_name); + // Check if label with the input name already exists + if (!label_exists(vtx_name_str, graph_id)) + { + DirectFunctionCall2(create_vlabel, CStringGetDatum(graph_name), CStringGetDatum(vtx_label_name)); + } + } + + if (!label_exists(edge_name_str, graph_id)) + { + DirectFunctionCall2(create_elabel, CStringGetDatum(graph_name), CStringGetDatum(edge_label_name)); + } + + vtx_label_id = get_label_id(vtx_name_str, graph_id); + edge_label_id = get_label_id(edge_name_str, graph_id); + + graph_cache = search_graph_name_cache(graph_name_str); + vertex_cache = search_label_name_graph_cache(vtx_name_str,graph_id); + edge_cache = search_label_name_graph_cache(edge_name_str,graph_id); + + nsp_id = graph_cache->namespace; + vtx_seq_name = &(vertex_cache->seq_name); + vtx_seq_name_str = NameStr(*vtx_seq_name); + + edge_seq_name = &(edge_cache->seq_name); + edge_seq_name_str = NameStr(*edge_seq_name); + + vtx_seq_id = get_relname_relid(vtx_seq_name_str, nsp_id); + edge_seq_id = get_relname_relid(edge_seq_name_str, nsp_id); + + /* Creating vertices*/ + for (i=(int64)1;i<=no_vertices;i++) + { + vid = nextval_internal(vtx_seq_id, true); + object_graph_id = make_graphid(vtx_label_id, vid); + props = create_empty_agtype(); + insert_vertex_simple(graph_id,vtx_name_str,object_graph_id,props); + } + + lid = vid; + + /* Creating edges*/ + for (i = 1;i<=no_vertices-1;i++) + { + start_vid = lid-no_vertices+i; + for(j=i+1;j<=no_vertices;j++) + { + end_vid = lid-no_vertices+j; + eid = nextval_internal(edge_seq_id, true); + object_graph_id = make_graphid(edge_label_id, eid); + + start_vertex_graph_id = make_graphid(vtx_label_id, start_vid); + end_vertex_graph_id = make_graphid(vtx_label_id, end_vid); + + props = create_empty_agtype(); + + insert_edge_simple(graph_id, edge_name_str, + object_graph_id, start_vertex_graph_id, + end_vertex_graph_id, props); + + } + } + + PG_RETURN_VOID(); +} + diff --git a/src/backend/utils/load/age_load.c b/src/backend/utils/load/age_load.c index b80e95086..cbdf1585d 100644 --- a/src/backend/utils/load/age_load.c +++ b/src/backend/utils/load/age_load.c @@ -58,7 +58,7 @@ #include "utils/load/ag_load_labels.h" #include "utils/load/ag_load_edges.h" -static agtype* create_empty_agtype(void) +agtype* create_empty_agtype(void) { agtype_in_state result; diff --git a/src/include/catalog/ag_label.h b/src/include/catalog/ag_label.h index d925b8d55..f60a038b7 100644 --- a/src/include/catalog/ag_label.h +++ b/src/include/catalog/ag_label.h @@ -49,8 +49,10 @@ #define Anum_ag_label_id 3 #define Anum_ag_label_kind 4 #define Anum_ag_label_relation 5 +#define Anum_ag_label_seq_name 6 -#define Natts_ag_label 5 + +#define Natts_ag_label 6 #define ag_label_relation_id() ag_relation_id("ag_label", "table") #define ag_label_oid_index_id() ag_relation_id("ag_label_oid_index", "index") @@ -60,6 +62,8 @@ ag_relation_id("ag_label_graph_id_index", "index") #define ag_label_relation_index_id() \ ag_relation_id("ag_label_relation_index", "index") +#define ag_label_seq_name_graph_index_id() \ + ag_relation_id("ag_label_seq_name_graph_index", "index") #define LABEL_ID_SEQ_NAME "_label_id_seq" @@ -67,7 +71,7 @@ #define LABEL_KIND_EDGE 'e' Oid insert_label(const char *label_name, Oid label_graph, int32 label_id, - char label_kind, Oid label_relation); + char label_kind, Oid label_relation, const char *seq_name); void delete_label(Oid relation); Oid get_label_oid(const char *label_name, Oid label_graph); diff --git a/src/include/commands/graph_commands.h b/src/include/commands/graph_commands.h new file mode 100644 index 000000000..6e1bbb964 --- /dev/null +++ b/src/include/commands/graph_commands.h @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#ifndef AG_GRAPH_COMMANDS_H +#define AG_GRAPH_COMMANDS_H + +#include "postgres.h" + +Datum create_graph(PG_FUNCTION_ARGS); + +#endif \ No newline at end of file diff --git a/src/include/commands/label_commands.h b/src/include/commands/label_commands.h index ad1041c4d..711a56453 100644 --- a/src/include/commands/label_commands.h +++ b/src/include/commands/label_commands.h @@ -54,6 +54,11 @@ #define IS_AG_DEFAULT_LABEL(x) \ (IS_DEFAULT_LABEL_EDGE(x) || IS_DEFAULT_LABEL_VERTEX(x)) + +Datum create_vlabel(PG_FUNCTION_ARGS); + +Datum create_elabel(PG_FUNCTION_ARGS); + Oid create_label(char *graph_name, char *label_name, char label_type, List *parents); diff --git a/src/include/utils/ag_cache.h b/src/include/utils/ag_cache.h index deb50ef82..a368c26ba 100644 --- a/src/include/utils/ag_cache.h +++ b/src/include/utils/ag_cache.h @@ -39,6 +39,7 @@ typedef struct label_cache_data int32 id; char kind; Oid relation; + NameData seq_name; } label_cache_data; // callers of these functions must not modify the returned struct @@ -48,5 +49,6 @@ label_cache_data *search_label_oid_cache(Oid oid); label_cache_data *search_label_name_graph_cache(const char *name, Oid graph); label_cache_data *search_label_graph_id_cache(Oid graph, int32 id); label_cache_data *search_label_relation_cache(Oid relation); +label_cache_data *search_label_seq_name_graph_cache(const char *name, Oid graph); #endif diff --git a/src/include/utils/load/age_load.h b/src/include/utils/load/age_load.h index 8424fb4c6..49eff48de 100644 --- a/src/include/utils/load/age_load.h +++ b/src/include/utils/load/age_load.h @@ -57,6 +57,8 @@ #ifndef AGE_ENTITY_CREATOR_H #define AGE_ENTITY_CREATOR_H +agtype* create_empty_agtype(void); + agtype* create_agtype_from_list(char **header, char **fields, size_t fields_len, int64 vertex_id); agtype* create_agtype_from_list_i(char **header, char **fields, From a3cdba0fa10d021eba627e207a04a7695e6cb5cd Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Wed, 14 Dec 2022 13:10:07 -0800 Subject: [PATCH 053/191] Fix compare_agtype_scalar_values returned result Fixed compare_agtype_scalar_values returned result. It used a function, varstr_cmp, that wasn't guaranteed to return 1, 0, or -1. It was only guaranteed to return >0, 0, or <0. This caused some builds to fail during the regression tests, as 1, 0, or -1 were expected. --- src/backend/utils/adt/agtype_util.c | 45 +++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/src/backend/utils/adt/agtype_util.c b/src/backend/utils/adt/agtype_util.c index bd7afb772..222ba13e7 100644 --- a/src/backend/utils/adt/agtype_util.c +++ b/src/backend/utils/adt/agtype_util.c @@ -1577,27 +1577,54 @@ int compare_agtype_scalar_values(agtype_value *a, agtype_value *b) case AGTV_NULL: return 0; case AGTV_STRING: - return varstr_cmp(a->val.string.val, a->val.string.len, - b->val.string.val, b->val.string.len, - DEFAULT_COLLATION_OID); + { + /* varstr_cmp isn't guaranteed to return 1, 0, -1 */ + int result = varstr_cmp(a->val.string.val, a->val.string.len, + b->val.string.val, b->val.string.len, + DEFAULT_COLLATION_OID); + if (result > 0) + { + return 1; + } + else if (result < 0) + { + return -1; + } + else + { + return 0; + } + } case AGTV_NUMERIC: return DatumGetInt32(DirectFunctionCall2( numeric_cmp, PointerGetDatum(a->val.numeric), PointerGetDatum(b->val.numeric))); case AGTV_BOOL: if (a->val.boolean == b->val.boolean) + { return 0; + } else if (a->val.boolean > b->val.boolean) + { return 1; + } else + { return -1; + } case AGTV_INTEGER: if (a->val.int_value == b->val.int_value) + { return 0; + } else if (a->val.int_value > b->val.int_value) + { return 1; + } else + { return -1; + } case AGTV_FLOAT: return compare_two_floats_orderability(a->val.float_value, b->val.float_value); @@ -1614,11 +1641,17 @@ int compare_agtype_scalar_values(agtype_value *a, agtype_value *b) b_graphid = b_id->val.int_value; if (a_graphid == b_graphid) + { return 0; + } else if (a_graphid > b_graphid) + { return 1; + } else + { return -1; + } } case AGTV_PATH: { @@ -1638,7 +1671,9 @@ int compare_agtype_scalar_values(agtype_value *a, agtype_value *b) res = compare_agtype_scalar_values(&a_elem, &b_elem); if (res) + { return res; + } } return 0; @@ -1650,12 +1685,16 @@ int compare_agtype_scalar_values(agtype_value *a, agtype_value *b) } /* check for integer compared to float */ if (a->type == AGTV_INTEGER && b->type == AGTV_FLOAT) + { return compare_two_floats_orderability((float8)a->val.int_value, b->val.float_value); + } /* check for float compared to integer */ if (a->type == AGTV_FLOAT && b->type == AGTV_INTEGER) + { return compare_two_floats_orderability(a->val.float_value, (float8)b->val.int_value); + } /* check for integer or float compared to numeric */ if (is_numeric_result(a, b)) { From ba2046d57b70b52678eaaae3ecbc490937ce7e32 Mon Sep 17 00:00:00 2001 From: Dehowe Feng Date: Thu, 15 Dec 2022 14:17:17 +0800 Subject: [PATCH 054/191] Edit python driver README.md for clarity One line change in the Python driver README for dependency clarification. --- drivers/python/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/python/README.md b/drivers/python/README.md index d01b88593..ab7573236 100644 --- a/drivers/python/README.md +++ b/drivers/python/README.md @@ -12,8 +12,7 @@ AGType parser and driver support for [Apache AGE](https://age.apache.org/), grap sudo apt-get update sudo apt-get install python3-dev libpq-dev pip install --no-binary :all: psycopg2 -pip install antlr4-python3-runtime - +pip install antlr4-python3-runtime==4.9.2 ``` ### Test ``` From 934d7633a1edb5436434f4aa96deb7120dab01ff Mon Sep 17 00:00:00 2001 From: Pragyan Das <36222744+PragyanD@users.noreply.github.com> Date: Mon, 19 Dec 2022 17:04:40 -0600 Subject: [PATCH 055/191] Regression tests for age_global_graph (#341) * Modified age_global_graph regression tests Add files via upload Add files via upload Delete age_global_graph.out Delete age_global_graph.sql Add files via upload Add files via upload * Update age_global_graph.out * Update age_global_graph.sql * Update age_global_graph.out * Update age_global_graph.out * Update age_global_graph.sql --- regress/expected/age_global_graph.out | 239 +++++++++++++++----------- regress/sql/age_global_graph.sql | 126 ++++++++------ 2 files changed, 213 insertions(+), 152 deletions(-) diff --git a/regress/expected/age_global_graph.out b/regress/expected/age_global_graph.out index 9512a7a7d..b98a370d9 100644 --- a/regress/expected/age_global_graph.out +++ b/regress/expected/age_global_graph.out @@ -1,154 +1,156 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ LOAD 'age'; SET search_path TO ag_catalog; -- --- test delete_specific_GRAPH_global_contexts function +-- delete_specific_GRAPH_global_contexts -- --- create 3 graphs -SELECT * FROM create_graph('age_global_graph_1'); -NOTICE: graph "age_global_graph_1" has been created +-- +SELECT * FROM create_graph('ag_graph_1'); +NOTICE: graph "ag_graph_1" has been created create_graph -------------- (1 row) -SELECT * FROM cypher('age_global_graph_1', $$ CREATE (v:vertex_from_graph_1) RETURN v $$) AS (v agtype); - v ------------------------------------------------------------------------------------ - {"id": 844424930131969, "label": "vertex_from_graph_1", "properties": {}}::vertex +SELECT * FROM cypher('ag_graph_1', $$ CREATE (v:vertex1) RETURN v $$) AS (v agtype); + v +----------------------------------------------------------------------- + {"id": 844424930131969, "label": "vertex1", "properties": {}}::vertex (1 row) -SELECT * FROM create_graph('age_global_graph_2'); -NOTICE: graph "age_global_graph_2" has been created +SELECT * FROM create_graph('ag_graph_2'); +NOTICE: graph "ag_graph_2" has been created create_graph -------------- (1 row) -SELECT * FROM cypher('age_global_graph_2', $$ CREATE (v:vertex_from_graph_2) RETURN v $$) AS (v agtype); - v ------------------------------------------------------------------------------------ - {"id": 844424930131969, "label": "vertex_from_graph_2", "properties": {}}::vertex +SELECT * FROM cypher('ag_graph_2', $$ CREATE (v:vertex2) RETURN v $$) AS (v agtype); + v +----------------------------------------------------------------------- + {"id": 844424930131969, "label": "vertex2", "properties": {}}::vertex (1 row) -SELECT * FROM create_graph('age_global_graph_3'); -NOTICE: graph "age_global_graph_3" has been created +SELECT * FROM create_graph('ag_graph_3'); +NOTICE: graph "ag_graph_3" has been created create_graph -------------- (1 row) -SELECT * FROM cypher('age_global_graph_3', $$ CREATE (v:vertex_from_graph_3) RETURN v $$) AS (v agtype); - v ------------------------------------------------------------------------------------ - {"id": 844424930131969, "label": "vertex_from_graph_3", "properties": {}}::vertex +SELECT * FROM cypher('ag_graph_3', $$ CREATE (v:vertex3) RETURN v $$) AS (v agtype); + v +----------------------------------------------------------------------- + {"id": 844424930131969, "label": "vertex3", "properties": {}}::vertex (1 row) -- load contexts using the vertex_stats command -SELECT * FROM cypher('age_global_graph_3', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); - result ------------------------------------------------------------------------------------------------------------ - {"id": 844424930131969, "label": "vertex_from_graph_3", "in_degree": 0, "out_degree": 0, "self_loops": 0} +SELECT * FROM cypher('ag_graph_3', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); + result +----------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "vertex3", "in_degree": 0, "out_degree": 0, "self_loops": 0} +(1 row) + +SELECT * FROM cypher('ag_graph_2', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); + result +----------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "vertex2", "in_degree": 0, "out_degree": 0, "self_loops": 0} (1 row) -SELECT * FROM cypher('age_global_graph_2', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); - result ------------------------------------------------------------------------------------------------------------ - {"id": 844424930131969, "label": "vertex_from_graph_2", "in_degree": 0, "out_degree": 0, "self_loops": 0} +SELECT * FROM cypher('ag_graph_1', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); + result +----------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "vertex1", "in_degree": 0, "out_degree": 0, "self_loops": 0} (1 row) -SELECT * FROM cypher('age_global_graph_1', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); - result ------------------------------------------------------------------------------------------------------------ - {"id": 844424930131969, "label": "vertex_from_graph_1", "in_degree": 0, "out_degree": 0, "self_loops": 0} +--- loading undefined contexts +--- should throw exception - graph "ag_graph_4" does not exist +SELECT * FROM cypher('ag_graph_4', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); +ERROR: graph "ag_graph_4" does not exist +LINE 1: SELECT * FROM cypher('ag_graph_4', $$ MATCH (u) RETURN verte... + ^ +--- delete with invalid parameter +---should return false +SELECT * FROM cypher('ag_graph_2', $$ RETURN delete_global_graphs('E1337') $$) AS (result agtype); + result +-------- + false (1 row) --- delete age_global_graph_2's context --- should return true (succeeded) -SELECT * FROM cypher('age_global_graph_2', $$ RETURN delete_global_graphs('age_global_graph_2') $$) AS (result agtype); +-- delete ag_graph_2's context +-- should return true +SELECT * FROM cypher('ag_graph_2', $$ RETURN delete_global_graphs('ag_graph_2') $$) AS (result agtype); result -------- true (1 row) --- delete age_global_graph_1's context --- should return true (succeed) because previous command should not delete the 1st graph's context -SELECT * FROM cypher('age_global_graph_1', $$ RETURN delete_global_graphs('age_global_graph_1') $$) AS (result agtype); +-- delete ag_graph_1's context +-- should return true(succeed) because the previous command should not delete the 1st graph's context +SELECT * FROM cypher('ag_graph_1', $$ RETURN delete_global_graphs('ag_graph_1') $$) AS (result agtype); result -------- true (1 row) --- delete age_global_graph_3's context --- should return true (succeed) because previous commands should not delete the 3rd graph's context -SELECT * FROM cypher('age_global_graph_3', $$ RETURN delete_global_graphs('age_global_graph_3') $$) AS (result agtype); +-- delete ag_graph_3's context +-- should return true(succeed) beacuse the previous commands should not delete the 3rd graph's context +SELECT * FROM cypher('ag_graph_3', $$ RETURN delete_global_graphs('ag_graph_3') $$) AS (result agtype); result -------- true (1 row) -- delete all graphs' context again --- should return false (did not succeed) for all of them because already removed -SELECT * FROM cypher('age_global_graph_2', $$ RETURN delete_global_graphs('age_global_graph_2') $$) AS (result agtype); +-- should return false (did not succeed) for all of them because they are already removed +SELECT * FROM cypher('ag_graph_2', $$ RETURN delete_global_graphs('ag_graph_2') $$) AS (result agtype); result -------- false (1 row) -SELECT * FROM cypher('age_global_graph_1', $$ RETURN delete_global_graphs('age_global_graph_1') $$) AS (result agtype); +SELECT * FROM cypher('ag_graph_1', $$ RETURN delete_global_graphs('ag_graph_1') $$) AS (result agtype); result -------- false (1 row) -SELECT * FROM cypher('age_global_graph_3', $$ RETURN delete_global_graphs('age_global_graph_3') $$) AS (result agtype); +SELECT * FROM cypher('ag_graph_3', $$ RETURN delete_global_graphs('ag_graph_3') $$) AS (result agtype); result -------- false (1 row) +--- delete unitialized graph context +--- should throw exception graph "ag_graph_4" does not exist +SELECT * FROM cypher('ag_graph_4', $$ RETURN delete_global_graphs('ag_graph_4') $$) AS (result agtype); +ERROR: graph "ag_graph_4" does not exist +LINE 1: SELECT * FROM cypher('ag_graph_4', $$ RETURN delete_global_g... + ^ -- --- test delete_GRAPH_global_contexts function +-- delete_GRAPH_global_contexts -- -- load contexts again -SELECT * FROM cypher('age_global_graph_3', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); - result ------------------------------------------------------------------------------------------------------------ - {"id": 844424930131969, "label": "vertex_from_graph_3", "in_degree": 0, "out_degree": 0, "self_loops": 0} +SELECT * FROM cypher('ag_graph_3', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); + result +----------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "vertex3", "in_degree": 0, "out_degree": 0, "self_loops": 0} (1 row) -SELECT * FROM cypher('age_global_graph_2', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); - result ------------------------------------------------------------------------------------------------------------ - {"id": 844424930131969, "label": "vertex_from_graph_2", "in_degree": 0, "out_degree": 0, "self_loops": 0} +SELECT * FROM cypher('ag_graph_2', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); + result +----------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "vertex2", "in_degree": 0, "out_degree": 0, "self_loops": 0} (1 row) -SELECT * FROM cypher('age_global_graph_1', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); - result ------------------------------------------------------------------------------------------------------------ - {"id": 844424930131969, "label": "vertex_from_graph_1", "in_degree": 0, "out_degree": 0, "self_loops": 0} +SELECT * FROM cypher('ag_graph_1', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); + result +----------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "vertex1", "in_degree": 0, "out_degree": 0, "self_loops": 0} (1 row) -- delete all graph contexts -- should return true -SELECT * FROM cypher('age_global_graph_1', $$ RETURN delete_global_graphs(NULL) $$) AS (result agtype); +SELECT * FROM cypher('ag_graph_1', $$ RETURN delete_global_graphs(NULL) $$) AS (result agtype); result -------- true @@ -156,58 +158,101 @@ SELECT * FROM cypher('age_global_graph_1', $$ RETURN delete_global_graphs(NULL) -- delete all graphs' context individually -- should return false for all of them because already removed -SELECT * FROM cypher('age_global_graph_1', $$ RETURN delete_global_graphs('age_global_graph_1') $$) AS (result agtype); +SELECT * FROM cypher('ag_graph_1', $$ RETURN delete_global_graphs('ag_graph_1') $$) AS (result agtype); result -------- false (1 row) -SELECT * FROM cypher('age_global_graph_2', $$ RETURN delete_global_graphs('age_global_graph_2') $$) AS (result agtype); +SELECT * FROM cypher('ag_graph_2', $$ RETURN delete_global_graphs('ag_graph_2') $$) AS (result agtype); result -------- false (1 row) -SELECT * FROM cypher('age_global_graph_3', $$ RETURN delete_global_graphs('age_global_graph_3') $$) AS (result agtype); +SELECT * FROM cypher('ag_graph_3', $$ RETURN delete_global_graphs('ag_graph_3') $$) AS (result agtype); result -------- false (1 row) --- drop graphs -SELECT * FROM drop_graph('age_global_graph_1', true); +-- +-- age_vertex_stats +-- +--checking validity of vertex_stats +--adding unlabelled vertices to ag_graph_1 +SELECT * FROM cypher('ag_graph_1', $$ CREATE (n), (m) $$) as (v agtype); + v +--- +(0 rows) + +--adding labelled vertice to graph 2 +SELECT * FROM cypher('ag_graph_2', $$ CREATE (:Person) $$) as (v agtype); + v +--- +(0 rows) + +---adding edges between nodes +SELECT * FROM cypher('ag_graph_2', $$ MATCH (a:Person), (b:Person) WHERE a.name = 'A' AND b.name = 'B' CREATE (a)-[e:RELTYPE]->(b) RETURN e $$) as (e agtype); + e +--- +(0 rows) + +--checking if vertex stats have been updated along with the new label +--should return 3 vertices +SELECT * FROM cypher('ag_graph_1', $$ MATCH (n) RETURN vertex_stats(n) $$) AS (result agtype); + result +----------------------------------------------------------------------------------------------- + {"id": 281474976710657, "label": "", "in_degree": 0, "out_degree": 0, "self_loops": 0} + {"id": 281474976710658, "label": "", "in_degree": 0, "out_degree": 0, "self_loops": 0} + {"id": 844424930131969, "label": "vertex1", "in_degree": 0, "out_degree": 0, "self_loops": 0} +(3 rows) + +--should return 1 vertice and 1 label +SELECT * FROM cypher('ag_graph_2', $$ MATCH (a) RETURN vertex_stats(a) $$) AS (result agtype); + result +----------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "vertex2", "in_degree": 0, "out_degree": 0, "self_loops": 0} + {"id": 1125899906842625, "label": "Person", "in_degree": 0, "out_degree": 0, "self_loops": 0} +(2 rows) + +--drop graphs +SELECT * FROM drop_graph('ag_graph_1', true); NOTICE: drop cascades to 3 other objects -DETAIL: drop cascades to table age_global_graph_1._ag_label_vertex -drop cascades to table age_global_graph_1._ag_label_edge -drop cascades to table age_global_graph_1.vertex_from_graph_1 -NOTICE: graph "age_global_graph_1" has been dropped +DETAIL: drop cascades to table ag_graph_1._ag_label_vertex +drop cascades to table ag_graph_1._ag_label_edge +drop cascades to table ag_graph_1.vertex1 +NOTICE: graph "ag_graph_1" has been dropped drop_graph ------------ (1 row) -SELECT * FROM drop_graph('age_global_graph_2', true); -NOTICE: drop cascades to 3 other objects -DETAIL: drop cascades to table age_global_graph_2._ag_label_vertex -drop cascades to table age_global_graph_2._ag_label_edge -drop cascades to table age_global_graph_2.vertex_from_graph_2 -NOTICE: graph "age_global_graph_2" has been dropped +SELECT * FROM drop_graph('ag_graph_2', true); +NOTICE: drop cascades to 5 other objects +DETAIL: drop cascades to table ag_graph_2._ag_label_vertex +drop cascades to table ag_graph_2._ag_label_edge +drop cascades to table ag_graph_2.vertex2 +drop cascades to table ag_graph_2."Person" +drop cascades to table ag_graph_2."RELTYPE" +NOTICE: graph "ag_graph_2" has been dropped drop_graph ------------ (1 row) -SELECT * FROM drop_graph('age_global_graph_3', true); +SELECT * FROM drop_graph('ag_graph_3', true); NOTICE: drop cascades to 3 other objects -DETAIL: drop cascades to table age_global_graph_3._ag_label_vertex -drop cascades to table age_global_graph_3._ag_label_edge -drop cascades to table age_global_graph_3.vertex_from_graph_3 -NOTICE: graph "age_global_graph_3" has been dropped +DETAIL: drop cascades to table ag_graph_3._ag_label_vertex +drop cascades to table ag_graph_3._ag_label_edge +drop cascades to table ag_graph_3.vertex3 +NOTICE: graph "ag_graph_3" has been dropped drop_graph ------------ (1 row) +----------------------------------------------------------------------------------------------------------------------------- -- -- End of tests -- diff --git a/regress/sql/age_global_graph.sql b/regress/sql/age_global_graph.sql index fa2dba9a7..13b81a9ed 100644 --- a/regress/sql/age_global_graph.sql +++ b/regress/sql/age_global_graph.sql @@ -1,86 +1,102 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - LOAD 'age'; SET search_path TO ag_catalog; -- --- test delete_specific_GRAPH_global_contexts function +-- delete_specific_GRAPH_global_contexts -- --- create 3 graphs -SELECT * FROM create_graph('age_global_graph_1'); -SELECT * FROM cypher('age_global_graph_1', $$ CREATE (v:vertex_from_graph_1) RETURN v $$) AS (v agtype); +-- +SELECT * FROM create_graph('ag_graph_1'); +SELECT * FROM cypher('ag_graph_1', $$ CREATE (v:vertex1) RETURN v $$) AS (v agtype); -SELECT * FROM create_graph('age_global_graph_2'); -SELECT * FROM cypher('age_global_graph_2', $$ CREATE (v:vertex_from_graph_2) RETURN v $$) AS (v agtype); +SELECT * FROM create_graph('ag_graph_2'); +SELECT * FROM cypher('ag_graph_2', $$ CREATE (v:vertex2) RETURN v $$) AS (v agtype); -SELECT * FROM create_graph('age_global_graph_3'); -SELECT * FROM cypher('age_global_graph_3', $$ CREATE (v:vertex_from_graph_3) RETURN v $$) AS (v agtype); +SELECT * FROM create_graph('ag_graph_3'); +SELECT * FROM cypher('ag_graph_3', $$ CREATE (v:vertex3) RETURN v $$) AS (v agtype); -- load contexts using the vertex_stats command -SELECT * FROM cypher('age_global_graph_3', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); -SELECT * FROM cypher('age_global_graph_2', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); -SELECT * FROM cypher('age_global_graph_1', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); +SELECT * FROM cypher('ag_graph_3', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); +SELECT * FROM cypher('ag_graph_2', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); +SELECT * FROM cypher('ag_graph_1', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); + +--- loading undefined contexts +--- should throw exception - graph "ag_graph_4" does not exist +SELECT * FROM cypher('ag_graph_4', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); + +--- delete with invalid parameter +---should return false +SELECT * FROM cypher('ag_graph_2', $$ RETURN delete_global_graphs('E1337') $$) AS (result agtype); --- delete age_global_graph_2's context --- should return true (succeeded) -SELECT * FROM cypher('age_global_graph_2', $$ RETURN delete_global_graphs('age_global_graph_2') $$) AS (result agtype); +-- delete ag_graph_2's context +-- should return true +SELECT * FROM cypher('ag_graph_2', $$ RETURN delete_global_graphs('ag_graph_2') $$) AS (result agtype); --- delete age_global_graph_1's context --- should return true (succeed) because previous command should not delete the 1st graph's context -SELECT * FROM cypher('age_global_graph_1', $$ RETURN delete_global_graphs('age_global_graph_1') $$) AS (result agtype); +-- delete ag_graph_1's context +-- should return true(succeed) because the previous command should not delete the 1st graph's context +SELECT * FROM cypher('ag_graph_1', $$ RETURN delete_global_graphs('ag_graph_1') $$) AS (result agtype); --- delete age_global_graph_3's context --- should return true (succeed) because previous commands should not delete the 3rd graph's context -SELECT * FROM cypher('age_global_graph_3', $$ RETURN delete_global_graphs('age_global_graph_3') $$) AS (result agtype); +-- delete ag_graph_3's context +-- should return true(succeed) beacuse the previous commands should not delete the 3rd graph's context +SELECT * FROM cypher('ag_graph_3', $$ RETURN delete_global_graphs('ag_graph_3') $$) AS (result agtype); -- delete all graphs' context again --- should return false (did not succeed) for all of them because already removed -SELECT * FROM cypher('age_global_graph_2', $$ RETURN delete_global_graphs('age_global_graph_2') $$) AS (result agtype); -SELECT * FROM cypher('age_global_graph_1', $$ RETURN delete_global_graphs('age_global_graph_1') $$) AS (result agtype); -SELECT * FROM cypher('age_global_graph_3', $$ RETURN delete_global_graphs('age_global_graph_3') $$) AS (result agtype); +-- should return false (did not succeed) for all of them because they are already removed +SELECT * FROM cypher('ag_graph_2', $$ RETURN delete_global_graphs('ag_graph_2') $$) AS (result agtype); +SELECT * FROM cypher('ag_graph_1', $$ RETURN delete_global_graphs('ag_graph_1') $$) AS (result agtype); +SELECT * FROM cypher('ag_graph_3', $$ RETURN delete_global_graphs('ag_graph_3') $$) AS (result agtype); + +--- delete unitialized graph context +--- should throw exception graph "ag_graph_4" does not exist +SELECT * FROM cypher('ag_graph_4', $$ RETURN delete_global_graphs('ag_graph_4') $$) AS (result agtype); -- --- test delete_GRAPH_global_contexts function +-- delete_GRAPH_global_contexts -- -- load contexts again -SELECT * FROM cypher('age_global_graph_3', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); -SELECT * FROM cypher('age_global_graph_2', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); -SELECT * FROM cypher('age_global_graph_1', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); +SELECT * FROM cypher('ag_graph_3', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); +SELECT * FROM cypher('ag_graph_2', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); +SELECT * FROM cypher('ag_graph_1', $$ MATCH (u) RETURN vertex_stats(u) $$) AS (result agtype); -- delete all graph contexts -- should return true -SELECT * FROM cypher('age_global_graph_1', $$ RETURN delete_global_graphs(NULL) $$) AS (result agtype); +SELECT * FROM cypher('ag_graph_1', $$ RETURN delete_global_graphs(NULL) $$) AS (result agtype); -- delete all graphs' context individually -- should return false for all of them because already removed -SELECT * FROM cypher('age_global_graph_1', $$ RETURN delete_global_graphs('age_global_graph_1') $$) AS (result agtype); -SELECT * FROM cypher('age_global_graph_2', $$ RETURN delete_global_graphs('age_global_graph_2') $$) AS (result agtype); -SELECT * FROM cypher('age_global_graph_3', $$ RETURN delete_global_graphs('age_global_graph_3') $$) AS (result agtype); +SELECT * FROM cypher('ag_graph_1', $$ RETURN delete_global_graphs('ag_graph_1') $$) AS (result agtype); +SELECT * FROM cypher('ag_graph_2', $$ RETURN delete_global_graphs('ag_graph_2') $$) AS (result agtype); +SELECT * FROM cypher('ag_graph_3', $$ RETURN delete_global_graphs('ag_graph_3') $$) AS (result agtype); --- drop graphs -SELECT * FROM drop_graph('age_global_graph_1', true); -SELECT * FROM drop_graph('age_global_graph_2', true); -SELECT * FROM drop_graph('age_global_graph_3', true); +-- +-- age_vertex_stats +-- +--checking validity of vertex_stats +--adding unlabelled vertices to ag_graph_1 +SELECT * FROM cypher('ag_graph_1', $$ CREATE (n), (m) $$) as (v agtype); + +--adding labelled vertice to graph 2 +SELECT * FROM cypher('ag_graph_2', $$ CREATE (:Person) $$) as (v agtype); + +---adding edges between nodes +SELECT * FROM cypher('ag_graph_2', $$ MATCH (a:Person), (b:Person) WHERE a.name = 'A' AND b.name = 'B' CREATE (a)-[e:RELTYPE]->(b) RETURN e $$) as (e agtype); + +--checking if vertex stats have been updated along with the new label +--should return 3 vertices +SELECT * FROM cypher('ag_graph_1', $$ MATCH (n) RETURN vertex_stats(n) $$) AS (result agtype); + +--should return 1 vertice and 1 label +SELECT * FROM cypher('ag_graph_2', $$ MATCH (a) RETURN vertex_stats(a) $$) AS (result agtype); + +--drop graphs + +SELECT * FROM drop_graph('ag_graph_1', true); +SELECT * FROM drop_graph('ag_graph_2', true); +SELECT * FROM drop_graph('ag_graph_3', true); +----------------------------------------------------------------------------------------------------------------------------- -- -- End of tests -- + From 2811a07dec2ad5f478e2d3163b316253f45a2195 Mon Sep 17 00:00:00 2001 From: "M.Imran Zaheer" <62287456+imranzaheer612@users.noreply.github.com> Date: Wed, 21 Dec 2022 00:38:46 +0500 Subject: [PATCH 056/191] Readme Added for AGE-JDBC-Driver (#383) * added readme for age-jdbc-driver --- drivers/jdbc/README.md | 98 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 drivers/jdbc/README.md diff --git a/drivers/jdbc/README.md b/drivers/jdbc/README.md new file mode 100644 index 000000000..c04529e11 --- /dev/null +++ b/drivers/jdbc/README.md @@ -0,0 +1,98 @@ +# **AGE AGType parser and driver support for Java** + +AGType parser and driver support for [Apache AGE](https://age.apache.org/), graph extention for PostgreSQL. + +## Prerequisites + +You should have installed following jar files and packages. + +- [gradle](https://gradle.org/install/) build tool +- [postgres JDBC driver](https://jdbc.postgresql.org/download/) +- [antlr4-4.9.2-complete](https://repo1.maven.org/maven2/org/antlr/antlr4/4.9.2/) +- [common-lang3](http://www.java2s.com/Code/Jar/c/Downloadcommonlang3jar.htm) +- [commons-text-1.6](http://www.java2s.com/ref/jar/download-commonstext16jar-file.html) + +Kindly unzip the jars if they are zipped before using them. + +## Build from source + +```bash +git clone https://github.com/apache/age.git +cd age/drivers/jdbc + +gradle assemble +``` + +After the build completes successfully, a jar file will be created at path `age/drivers/jdbc/lib/build/libs/lib.jar`. Now add this JAR file to class path for your java project. + +## Getting Started + +* Install AGE on your machine. [https://age.apache.org/age-manual/master/index.html](https://age.apache.org/age-manual/master/index.html) +* Add the downloaded jar files to class path. +* Connect to the postgres server using pg JDBC drivers. + +Lets say we have a graph named `demo_graph` having some nodes. In order to extract its nodes we can try following steps. To create some more graphs. [https://github.com/apache/age#quick-start](https://github.com/apache/age#quick-start). Following sample code shows how to return query result as `Agtype`. + +```java +import org.apache.age.jdbc.base.Agtype; +import org.postgresql.jdbc.PgConnection; + +import java.sql.*; + +public class Sample { + static final String DB_URL = "jdbc:postgresql://localhost:5432/demo"; + static final String USER = "postgres"; + static final String PASS = "pass"; + + public static void main(String[] args) { + + // Open a connection + try { + + PgConnection connection = DriverManager.getConnection(DB_URL, USER, PASS).unwrap(PgConnection.class); + connection.addDataType("agtype", Agtype.class); + + // configure AGE + Statement stmt = connection.createStatement(); + stmt.execute("CREATE EXTENSION IF NOT EXISTS age;"); + stmt.execute("LOAD 'age'"); + stmt.execute("SET search_path = ag_catalog, \"$user\", public;"); + + // Run cypher + ResultSet rs = stmt.executeQuery("SELECT * from cypher('demo_graph', $$ MATCH (n) RETURN n $$) as (n agtype);"); + + while (rs.next()) { + + // Returning Result as Agtype + Agtype returnedAgtype = rs.getObject(1, Agtype.class); + + String nodeLabel = returnedAgtype.getMap().getObject("label").toString(); + String nodeProp = returnedAgtype.getMap().getObject("properties").toString(); + + System.out.println("Vertex : " + nodeLabel + ", \tProps : " + nodeProp); + } + } catch (Exception e) { + e.printStackTrace(); + } + } +} +``` + +Output + +``` +Vertex : Person, Props : {bornIn=Pakistan, name=imran} +Vertex : Person, Props : {bornIn=Pakistan, name=ali} +Vertex : Person, Props : {bornIn=US, name=james} +Vertex : Person, Props : {bornIn=Pakistan, name=ali} +Vertex : Person, Props : {bornIn=Pakistan, name=usama} +Vertex : Person, Props : {bornIn=Pakistan, name=akabr} +Vertex : Country, Props : {name=Pakistan} +Vertex : Country, Props : {name=US} +``` + +## For more information about [Apache AGE](https://age.apache.org/) + +- Apache Age : [https://age.apache.org/](https://age.apache.org/) +- Github : [https://github.com/apache/age](https://github.com/apache/age) +- Document : [https://age.apache.org/age-manual/master/index.html](https://age.apache.org/age-manual/master/index.html) From 4e6ccd4666ea8ec7a530207769be3698b55ba7be Mon Sep 17 00:00:00 2001 From: Hunaid Sohail <76044242+Hunaid2000@users.noreply.github.com> Date: Sat, 24 Dec 2022 06:45:37 +0500 Subject: [PATCH 057/191] Changed volatility category of functions age_atan2, age_degrees, age_radians from STABLE to IMMUTABLE (#412) Reasons: - These math functions will not scan/lookup database - They simply take the input (int, float or numeric), applies operation on it and returns the result - They cannot modify database - They are guaranteed to return the same results given the same arguments forever --- age--1.1.0.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index e2a5e8397..d76d47993 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -3686,21 +3686,21 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_atan2(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_degrees(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_radians(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; From 5aa551af6551d1fc591de4fd9a2fe84a6160da5c Mon Sep 17 00:00:00 2001 From: Muhammad Zahid Date: Sun, 25 Dec 2022 16:04:41 +0500 Subject: [PATCH 058/191] Changed age_split, age_replace, age_sin from STABLE TO IMMUTABLE (#402) Generally reasons for changing signature of these functions are: 1.These functions do not need to perform database lookup. 2.These functions neither perform database modification. 3.These functions are guaranteed to return the same constant results given the same argument. --- age--1.1.0.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index d76d47993..1d008057c 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -3620,14 +3620,14 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_split(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_replace(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; @@ -3637,7 +3637,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_sin(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; From caed3406659e35ff5de5b4715b4454c75ddf657f Mon Sep 17 00:00:00 2001 From: RC-002 <83537305+RC-002@users.noreply.github.com> Date: Sun, 25 Dec 2022 16:36:05 +0530 Subject: [PATCH 059/191] Modified the Volatility Category of functions age_asin and age_acos from STABLE TO IMMUTABLE (#404) * Modified the Volatility Category of functions age_asin and age_acos from STABLE to IMMUTABLE * Corrected the Volatility Category of functions age_asin and age_acos from STABLE TO IMMUTABLE Co-authored-by: RC-adaptive --- age--1.1.0.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index 1d008057c..8b8d48aa7 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -3665,14 +3665,14 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_asin(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_acos(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; From 933a4f15af26a70289344059ee44820b9e2ec0f2 Mon Sep 17 00:00:00 2001 From: Matheus Farias de Oliveira Matsumoto <83461020+MatheusFarias03@users.noreply.github.com> Date: Tue, 27 Dec 2022 14:15:13 -0300 Subject: [PATCH 060/191] Changed age_head, age_last and age_properties to IMMUTABLE (#406) Co-authored-by: Matheus Matsumoto --- age--1.1.0.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index 8b8d48aa7..1f0d097b4 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -3437,7 +3437,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_head(agtype) RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; @@ -3445,7 +3445,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_last(agtype) RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; @@ -3453,7 +3453,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_properties(agtype) RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; From da7398474ae89cc7037261e18fe1431a65117fc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Aur=C3=A9lio=20Silva=20de=20Souza=20J=C3=BAnior?= <57829631+markgomer@users.noreply.github.com> Date: Tue, 27 Dec 2022 14:16:18 -0300 Subject: [PATCH 061/191] Changed age_id, age_start_id and age_end_id function signatures to IMMUTABLE (#405) * Changed some function signatures to IMMUTABLE Changed age_id(agtype), age_start_id(agtype) and age_end_id(agtype) from STABLE to IMMUTABLE. * Revert "Changed some function signatures to IMMUTABLE" This reverts commit 92ac40d15f3eb90812323370bf1be23e7526e623. * Changed age_id signature to IMMUTABLE * Function signature was changed from STABLE to IMMUTABLE; * Function receives a vertex or edge container (or null), and analyze its contents to return the "id" stored in said container; * As it acts only on its arguments, it will always return the same result, given the same arguments, even across multiple SQL statements, being classified as IMMUTABLE function. * Changed age_start_id signature to IMMUTABLE * Function signature was changed from STABLE to IMMUTABLE; * Function receives an edge container (or null), and analyze its contents to return the "start_id" stored in said container; * As it acts only on its arguments, it will always return the same result, given the same arguments, even across multiple SQL statements, being classified as IMMUTABLE function. * Changed age_end_id signature to IMMUTABLE * Function signature was changed from STABLE to IMMUTABLE; * Function receives an edge container (or null), and analyze its contents to return the "end_id" stored in said container; * As it acts only on its arguments, it will always return the same result, given the same arguments, even across multiple SQL statements, being classified as IMMUTABLE function. --- age--1.1.0.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index 1f0d097b4..de074d8b4 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -3413,7 +3413,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_id(agtype) RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; @@ -3421,7 +3421,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_start_id(agtype) RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; @@ -3429,7 +3429,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_end_id(agtype) RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; From c64b5172fd56d6f846ac3b1ec3287bf26b4f8319 Mon Sep 17 00:00:00 2001 From: "M.Imran Zaheer" <62287456+imranzaheer612@users.noreply.github.com> Date: Tue, 27 Dec 2022 22:18:11 +0500 Subject: [PATCH 062/191] Changed age_sqrt & age_floor volatility to IMMUTABLE (#411) * Changed volatility categories of functions from STABLE to IMMUTABLE * As their result depends upon their input arguments only * Both are guaranteed to return the same result given the same arguments forever * They fulfill the requirements to be IMMUTABLE functions --- age--1.1.0.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index de074d8b4..62df28277 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -3721,7 +3721,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_floor(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; @@ -3770,7 +3770,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_sqrt(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; From 516e6afa2daeb8fc759935c128763d7f93cd96b0 Mon Sep 17 00:00:00 2001 From: Kamlesh Kumar <95052507+KamleshKumar427@users.noreply.github.com> Date: Tue, 27 Dec 2022 22:19:31 +0500 Subject: [PATCH 063/191] Changed volatility types of age_substring, age_left and age_right to IMMUTABLE from STABLE (#408) --- age--1.1.0.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index 62df28277..6964daba6 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -3599,21 +3599,21 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_right(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_left(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_substring(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; From 098e452d2da2169ebb9cd3d1ec481ac8f4706d98 Mon Sep 17 00:00:00 2001 From: Pratik Kumar <95461380+Pratikkapsime@users.noreply.github.com> Date: Tue, 27 Dec 2022 22:50:21 +0530 Subject: [PATCH 064/191] Changed age_cos, age_tan and age_cot to Immutable from Stable (#409) --- age--1.1.0.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index 6964daba6..8958c374d 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -3644,21 +3644,21 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_cos(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_tan(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_cot(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; From 9c253db673d027fb69d150aaa8689a17a627eb26 Mon Sep 17 00:00:00 2001 From: maaz Date: Tue, 27 Dec 2022 22:21:38 +0500 Subject: [PATCH 065/191] agtype_typecast funcs changed to immutable (#407) --- age--1.1.0.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index 8958c374d..618c5c1c2 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -3987,21 +3987,21 @@ CREATE AGGREGATE ag_catalog.age_collect(variadic "any") CREATE FUNCTION ag_catalog.agtype_typecast_int(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.agtype_typecast_numeric(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.agtype_typecast_float(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; From 0b30da10b279252c0365bd1394b4ec0d0f9863f7 Mon Sep 17 00:00:00 2001 From: fatima <63642648+fatimafatimaprogrammer@users.noreply.github.com> Date: Tue, 27 Dec 2022 22:23:56 +0500 Subject: [PATCH 066/191] Changed volatility category of age_rtrim,age_ltrim,age_trim (#410) * changing function definations of age_rtrim,ltrim,trim from stable to immutable * Changed volatility category of functions age_ltrim, age_rtrim, age_trim from STABLE to IMMUTABLE Reasons: - These functions will not scan/lookup database - They simply take the input (String), applies operation on it and returns the result - They cannot modify database - They are guaranteed to return the same results given the same arguments forever --- age--1.1.0.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index 618c5c1c2..9318f4038 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -3575,7 +3575,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_ltrim(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; @@ -3583,7 +3583,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_rtrim(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; @@ -3591,7 +3591,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_trim(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; From 7aff75f4e0fb76307934ce2c7ea2ec5640ea8dfd Mon Sep 17 00:00:00 2001 From: Moontasir Mahmood <53787290+Munmud@users.noreply.github.com> Date: Tue, 27 Dec 2022 23:25:57 +0600 Subject: [PATCH 067/191] Create graph instruction fixed (#414) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b243c49d3..b673ad0e5 100644 --- a/README.md +++ b/README.md @@ -218,7 +218,7 @@ SET search_path = ag_catalog, "$user", public; To create a graph, use the create_graph function located in the ag_catalog namespace. ```bash -create_graph(graph_name); +SELECT create_graph('graph_name'); ``` To create a single vertex, use the CREATE clause. From 30edc59d759d0e869aa0fbf644551d17f1d5a359 Mon Sep 17 00:00:00 2001 From: Fahad Zaheer <52493343+FahadZaheerfzr@users.noreply.github.com> Date: Tue, 27 Dec 2022 22:26:29 +0500 Subject: [PATCH 068/191] Changed the definition of graphid_eq, graphid_ne, and graphid_lt from Stable to Immutable (#415) --- age--1.1.0.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index 9318f4038..52277ce20 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -185,7 +185,7 @@ CREATE TYPE graphid ( CREATE FUNCTION ag_catalog.graphid_eq(graphid, graphid) RETURNS boolean LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; @@ -205,7 +205,7 @@ CREATE OPERATOR = ( CREATE FUNCTION ag_catalog.graphid_ne(graphid, graphid) RETURNS boolean LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; @@ -223,7 +223,7 @@ CREATE OPERATOR <> ( CREATE FUNCTION ag_catalog.graphid_lt(graphid, graphid) RETURNS boolean LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; From 14a4440b5ec6e98389f65ae1c86999f66f66f1e4 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed <85064039+MuhammadTahaNaveed@users.noreply.github.com> Date: Tue, 27 Dec 2022 22:27:20 +0500 Subject: [PATCH 069/191] Fix function signature (age_length, age_toboolean, age_tofloat) from stable to immutable (#416) * Fix comment - IS_A_AGTYPE_SCALAR() checks that type is between AGTV_NULL and AGTV_ARRAY instead of AGTV_BOOL. * Fix function signatures - The functions age_length takes a set(path) of nodes(vertices and edges) as an argument and computes the length of path.This function does not modify database and is guaranteed to return same result given the same arguments forever. - The function age_toboolean just converts bool values in other data types passed as an argument to agtype. This function is also guaranteed to return same result given the same arguments forever. - The function age_tofloat also just converts float value in other data types passed as an argument to agtype. This function is also guaranteed to return same result given the same arguments forever. All these functions only performs operations on the arguments provided. These functions don't depend on table data at all. --- age--1.1.0.sql | 6 +++--- src/include/utils/agtype.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index 52277ce20..690405c4f 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -3477,7 +3477,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_length(agtype) RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; @@ -3485,7 +3485,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_toboolean(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; @@ -3493,7 +3493,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_tofloat(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; diff --git a/src/include/utils/agtype.h b/src/include/utils/agtype.h index e5019d5df..c7eab03ad 100644 --- a/src/include/utils/agtype.h +++ b/src/include/utils/agtype.h @@ -303,7 +303,7 @@ typedef struct /* * IMPORTANT NOTE: For agtype_value_type, IS_A_AGTYPE_SCALAR() checks that the - * type is between AGTV_NULL and AGTV_BOOL, inclusive. So, new scalars need to + * type is between AGTV_NULL and AGTV_ARRAY, excluding AGTV_ARRAY. So, new scalars need to * be between these values. */ enum agtype_value_type From da7b415e4f5f4546015563afa56520d1902e2b6f Mon Sep 17 00:00:00 2001 From: Sarthak <69689387+sarthak-19@users.noreply.github.com> Date: Tue, 27 Dec 2022 22:57:46 +0530 Subject: [PATCH 070/191] Changed Volatility of agtype_typecase_path (#417) --- age--1.1.0.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index 690405c4f..3f785fa28 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -4022,7 +4022,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.agtype_typecast_path(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; From 8a5191cc38e057cf51d8902dea2cbe8949db2cbe Mon Sep 17 00:00:00 2001 From: Alex Kwak Date: Wed, 28 Dec 2022 10:57:50 +0900 Subject: [PATCH 071/191] , --- .github/workflows/installcheck.yml | 40 ++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 .github/workflows/installcheck.yml diff --git a/.github/workflows/installcheck.yml b/.github/workflows/installcheck.yml new file mode 100644 index 000000000..76503fe06 --- /dev/null +++ b/.github/workflows/installcheck.yml @@ -0,0 +1,40 @@ +name: PG12 Regression + +on: + push: + branches: [ '*' ] + pull_request: + branches: [ '*' ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - name: Get latest commit id of PostgreSQL 12 + run: | + echo "PG_COMMIT_HASH=$(git ls-remote git://git.postgresql.org/git/postgresql.git refs/heads/REL_12_STABLE | awk '{print $1}')" >> $GITHUB_ENV + + - name: Cache PostgreSQL 12 + uses: actions/cache@v2 + id: pg12cache + with: + path: ~/pg12 + key: ${{ runner.os }}-v1-pg12-${{ env.PG_COMMIT_HASH }} + + - name: Install PostgreSQL 12 + if: steps.pg12cache.outputs.cache-hit != 'true' + run: | + git clone --depth 1 --branch REL_12_STABLE git://git.postgresql.org/git/postgresql.git ~/pg12source + cd ~/pg12source + ./configure --prefix=$HOME/pg12 CFLAGS="-std=gnu99 -ggdb -O0" --enable-cassert + make install -j$(nproc) > /dev/null + + - uses: actions/checkout@v2 + - name: Regression + run: | + export PG_CONFIG=$HOME/pg12/bin/pg_config + make -j$(nproc) + make install + make installcheck \ No newline at end of file From 98bd8b0346eb5088911472787e27add729beb729 Mon Sep 17 00:00:00 2001 From: Alex Kwak Date: Wed, 28 Dec 2022 11:02:20 +0900 Subject: [PATCH 072/191] Revert "," This reverts commit 8a5191cc38e057cf51d8902dea2cbe8949db2cbe. --- .github/workflows/installcheck.yml | 40 ------------------------------ 1 file changed, 40 deletions(-) delete mode 100644 .github/workflows/installcheck.yml diff --git a/.github/workflows/installcheck.yml b/.github/workflows/installcheck.yml deleted file mode 100644 index 76503fe06..000000000 --- a/.github/workflows/installcheck.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: PG12 Regression - -on: - push: - branches: [ '*' ] - pull_request: - branches: [ '*' ] - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - name: Get latest commit id of PostgreSQL 12 - run: | - echo "PG_COMMIT_HASH=$(git ls-remote git://git.postgresql.org/git/postgresql.git refs/heads/REL_12_STABLE | awk '{print $1}')" >> $GITHUB_ENV - - - name: Cache PostgreSQL 12 - uses: actions/cache@v2 - id: pg12cache - with: - path: ~/pg12 - key: ${{ runner.os }}-v1-pg12-${{ env.PG_COMMIT_HASH }} - - - name: Install PostgreSQL 12 - if: steps.pg12cache.outputs.cache-hit != 'true' - run: | - git clone --depth 1 --branch REL_12_STABLE git://git.postgresql.org/git/postgresql.git ~/pg12source - cd ~/pg12source - ./configure --prefix=$HOME/pg12 CFLAGS="-std=gnu99 -ggdb -O0" --enable-cassert - make install -j$(nproc) > /dev/null - - - uses: actions/checkout@v2 - - name: Regression - run: | - export PG_CONFIG=$HOME/pg12/bin/pg_config - make -j$(nproc) - make install - make installcheck \ No newline at end of file From 28cdee7b77f4e418a5897f193e0e0ed66c9916e3 Mon Sep 17 00:00:00 2001 From: Moontasir Mahmood <53787290+Munmud@users.noreply.github.com> Date: Wed, 28 Dec 2022 20:32:57 +0600 Subject: [PATCH 073/191] string reverse change Stable to immutable (#419) --- age--1.1.0.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index 3f785fa28..5c9f62483 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -3551,7 +3551,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_reverse(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; From 6cbcccfe21ee1274729db91ce3feca07cba7d7c7 Mon Sep 17 00:00:00 2001 From: Moontasir Mahmood <53787290+Munmud@users.noreply.github.com> Date: Wed, 28 Dec 2022 20:33:28 +0600 Subject: [PATCH 074/191] Changed the volatility of String function age_toupper() : from STABLE to IMMUTABLE (#420) --- age--1.1.0.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index 5c9f62483..1ca04bb62 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -3559,7 +3559,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_toupper(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; From 8f0780568496ded13ed027d12e0af8f6388e5e24 Mon Sep 17 00:00:00 2001 From: Moontasir Mahmood <53787290+Munmud@users.noreply.github.com> Date: Wed, 28 Dec 2022 20:33:52 +0600 Subject: [PATCH 075/191] Changed the volatility of String function age_tolower() (#421) --- age--1.1.0.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index 1ca04bb62..829731dfb 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -3567,7 +3567,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_tolower(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; From 89b2510bc412c34360bb3780e76b42ab6cc97d2e Mon Sep 17 00:00:00 2001 From: Syed Umer Tariq <60536818+umer200@users.noreply.github.com> Date: Wed, 28 Dec 2022 19:34:54 +0500 Subject: [PATCH 076/191] typecast_vertex and typecast_edge functions volatility changed from STABLE to IMMUTABLE (#425) --- age--1.1.0.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index 829731dfb..b21b7d271 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -4008,14 +4008,14 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.agtype_typecast_vertex(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.agtype_typecast_edge(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; From bc3e2875b487fadd0eecf857d26b2871f5b08f34 Mon Sep 17 00:00:00 2001 From: moeed-k <99591855+moeed-k@users.noreply.github.com> Date: Wed, 28 Dec 2022 19:35:23 +0500 Subject: [PATCH 077/191] Update age_log10, age_e, age_exp VOLATILITY Classes (#427) -age_log10, age_e,age_exp function VOLATILITY changed from STABLE to IMMUTABLE -No database lookup or external configuration required for these functions -IMMUTABLE class allows the optimizer to build an index for faster processing --- age--1.1.0.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index b21b7d271..0e331fa89 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -3749,21 +3749,21 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_log10(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_e() RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_exp(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; From a4388e8735c0b68dddc702763c9e6bee735d6259 Mon Sep 17 00:00:00 2001 From: Vaibhav Sharma <48472541+GhostVaibhav@users.noreply.github.com> Date: Wed, 28 Dec 2022 20:08:28 +0530 Subject: [PATCH 078/191] Modified the volatility of functions age_atan, age_round and age_ceil to IMMUTABLE (#424) --- age--1.1.0.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index 0e331fa89..1437cfa50 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -3679,7 +3679,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_atan(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; @@ -3707,14 +3707,14 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_round(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_ceil(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; From 49ac01f7429e61384eca44bdd3f2f153ae1e3d63 Mon Sep 17 00:00:00 2001 From: Ahmar Zaidi <71930390+AhmarZaidi@users.noreply.github.com> Date: Thu, 29 Dec 2022 18:27:55 +0530 Subject: [PATCH 079/191] Change volatility category of range(), unnest(). (#418) --- age--1.1.0.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index 1437cfa50..73cfc05f0 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -4136,14 +4136,14 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_range(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_unnest(agtype, block_types boolean = false) RETURNS SETOF agtype LANGUAGE c - STABLE + IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; From acab46b833541cf2e2f42419d17c145ded33942d Mon Sep 17 00:00:00 2001 From: Vaibhav Sharma <48472541+GhostVaibhav@users.noreply.github.com> Date: Thu, 29 Dec 2022 23:15:52 +0530 Subject: [PATCH 080/191] Fixed a typo in README (#436) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b673ad0e5..a57f85543 100644 --- a/README.md +++ b/README.md @@ -254,7 +254,7 @@ You can use the following to create an edge, for example, between two nodes. ```bash SELECT * FROM cypher('graph_name', $$ - MATCH (a:lable), (b:lable) + MATCH (a:label), (b:label) WHERE a.property = 'Node A' AND b.property = 'Node B' CREATE (a)-[e:RELTYPE]->(b) RETURN e From ad0a491d99b080ff34a607dba572c11fa832b679 Mon Sep 17 00:00:00 2001 From: Rafsun Masud Date: Thu, 29 Dec 2022 14:43:17 -0500 Subject: [PATCH 081/191] Issue 317: Graph naming convention (#349) * add name validation for graphs and labels * update test script to use valid graph name --- Makefile | 8 +- regress/expected/catalog.out | 198 ++++++------- regress/expected/name_validation.out | 401 ++++++++++++++++++++++++++ regress/sql/catalog.sql | 62 ++-- regress/sql/name_validation.sql | 153 ++++++++++ src/backend/commands/graph_commands.c | 16 +- src/backend/commands/label_commands.c | 9 +- src/backend/utils/name_validation.c | 91 ++++++ src/include/utils/name_validation.h | 44 +++ 9 files changed, 843 insertions(+), 139 deletions(-) create mode 100644 regress/expected/name_validation.out create mode 100644 regress/sql/name_validation.sql create mode 100644 src/backend/utils/name_validation.c create mode 100644 src/include/utils/name_validation.h diff --git a/Makefile b/Makefile index e6024d6ba..b1d340c78 100644 --- a/Makefile +++ b/Makefile @@ -68,7 +68,8 @@ OBJS = src/backend/age.o \ src/backend/utils/load/ag_load_labels.o \ src/backend/utils/load/ag_load_edges.o \ src/backend/utils/load/age_load.o \ - src/backend/utils/load/libcsv.o + src/backend/utils/load/libcsv.o \ + src/backend/utils/name_validation.o EXTENSION = age @@ -90,13 +91,14 @@ REGRESS = scan \ cypher_with \ cypher_vle \ cypher_union \ - cypher_call \ + cypher_call \ cypher_merge \ - age_global_graph \ + age_global_graph \ age_load \ index \ analyze \ graph_generation \ + name_validation \ drop diff --git a/regress/expected/catalog.out b/regress/expected/catalog.out index 4fca3e6ab..240ff17b4 100644 --- a/regress/expected/catalog.out +++ b/regress/expected/catalog.out @@ -21,75 +21,75 @@ SET search_path TO ag_catalog; -- -- create_graph(), drop_label(), and drop_graph() tests -- -SELECT create_graph('g'); -NOTICE: graph "g" has been created +SELECT create_graph('graph'); +NOTICE: graph "graph" has been created create_graph -------------- (1 row) -SELECT * FROM ag_graph WHERE name = 'g'; - name | namespace -------+----------- - g | g +SELECT * FROM ag_graph WHERE name = 'graph'; + name | namespace +-------+----------- + graph | graph (1 row) -- create a label to test drop_label() -SELECT * FROM cypher('g', $$CREATE (:l)$$) AS r(a agtype); +SELECT * FROM cypher('graph', $$CREATE (:l)$$) AS r(a agtype); a --- (0 rows) -- test drop_label() -SELECT drop_label('g', 'l'); -NOTICE: label "g"."l" has been dropped +SELECT drop_label('graph', 'l'); +NOTICE: label "graph"."l" has been dropped drop_label ------------ (1 row) -- create a label to test drop_graph() -SELECT * FROM cypher('g', $$CREATE (:v)$$) AS r(a agtype); +SELECT * FROM cypher('graph', $$CREATE (:v)$$) AS r(a agtype); a --- (0 rows) -- DROP SCHEMA ... CASCADE should fail -DROP SCHEMA g CASCADE; +DROP SCHEMA graph CASCADE; NOTICE: drop cascades to 4 other objects -DETAIL: drop cascades to sequence g._label_id_seq -drop cascades to table g._ag_label_vertex -drop cascades to table g._ag_label_edge -drop cascades to table g.v +DETAIL: drop cascades to sequence graph._label_id_seq +drop cascades to table graph._ag_label_vertex +drop cascades to table graph._ag_label_edge +drop cascades to table graph.v ERROR: table "v" is for label "v" -- DROP TABLE ... should fail -DROP TABLE g.v; +DROP TABLE graph.v; ERROR: table "v" is for label "v" -- should fail (cascade = false) -SELECT drop_graph('g'); -ERROR: cannot drop schema g because other objects depend on it -DETAIL: table g._ag_label_vertex depends on schema g -table g._ag_label_edge depends on schema g -table g.v depends on schema g +SELECT drop_graph('graph'); +ERROR: cannot drop schema graph because other objects depend on it +DETAIL: table graph._ag_label_vertex depends on schema graph +table graph._ag_label_edge depends on schema graph +table graph.v depends on schema graph HINT: Use DROP ... CASCADE to drop the dependent objects too. -SELECT drop_graph('g', true); +SELECT drop_graph('graph', true); NOTICE: drop cascades to 3 other objects -DETAIL: drop cascades to table g._ag_label_vertex -drop cascades to table g._ag_label_edge -drop cascades to table g.v -NOTICE: graph "g" has been dropped +DETAIL: drop cascades to table graph._ag_label_vertex +drop cascades to table graph._ag_label_edge +drop cascades to table graph.v +NOTICE: graph "graph" has been dropped drop_graph ------------ (1 row) -SELECT count(*) FROM ag_graph WHERE name = 'g'; +SELECT count(*) FROM ag_graph WHERE name = 'graph'; count ------- 0 (1 row) -SELECT count(*) FROM pg_namespace WHERE nspname = 'g'; +SELECT count(*) FROM pg_namespace WHERE nspname = 'graph'; count ------- 0 @@ -101,7 +101,7 @@ ERROR: graph name can not be NULL SELECT drop_graph(NULL); ERROR: graph name can not be NULL SELECT create_graph(''); -ERROR: graph name can not be empty +ERROR: graph name is invalid -- -- alter_graph() RENAME function tests -- @@ -216,119 +216,119 @@ HINT: valid operations: RENAME -- -- label id test -- -SELECT create_graph('g'); -NOTICE: graph "g" has been created +SELECT create_graph('graph'); +NOTICE: graph "graph" has been created create_graph -------------- (1 row) -- label id starts from 1 -SELECT * FROM cypher('g', $$CREATE (:v1)$$) AS r(a agtype); +SELECT * FROM cypher('graph', $$CREATE (:v1)$$) AS r(a agtype); a --- (0 rows) SELECT name, id, kind, relation FROM ag_label; - name | id | kind | relation -------------------+----+------+-------------------- - _ag_label_vertex | 1 | v | g._ag_label_vertex - _ag_label_edge | 2 | e | g._ag_label_edge - v1 | 3 | v | g.v1 + name | id | kind | relation +------------------+----+------+------------------------ + _ag_label_vertex | 1 | v | graph._ag_label_vertex + _ag_label_edge | 2 | e | graph._ag_label_edge + v1 | 3 | v | graph.v1 (3 rows) -- skip label id 2 to test the logic that gets an unused label id after cycle -SELECT nextval('g._label_id_seq'); +SELECT nextval('graph._label_id_seq'); nextval --------- 4 (1 row) -- label id is now 3 -SELECT * FROM cypher('g', $$CREATE (:v3)$$) as r(a agtype); +SELECT * FROM cypher('graph', $$CREATE (:v3)$$) as r(a agtype); a --- (0 rows) SELECT name, id, kind, relation FROM ag_label; - name | id | kind | relation -------------------+----+------+-------------------- - _ag_label_vertex | 1 | v | g._ag_label_vertex - _ag_label_edge | 2 | e | g._ag_label_edge - v1 | 3 | v | g.v1 - v3 | 5 | v | g.v3 + name | id | kind | relation +------------------+----+------+------------------------ + _ag_label_vertex | 1 | v | graph._ag_label_vertex + _ag_label_edge | 2 | e | graph._ag_label_edge + v1 | 3 | v | graph.v1 + v3 | 5 | v | graph.v3 (4 rows) -- to use 65535 as the next label id, set label id to 65534 -SELECT setval('g._label_id_seq', 65534); +SELECT setval('graph._label_id_seq', 65534); setval -------- 65534 (1 row) -- label id is now 65535 -SELECT * FROM cypher('g', $$CREATE (:v65535)$$) as r(a agtype); +SELECT * FROM cypher('graph', $$CREATE (:v65535)$$) as r(a agtype); a --- (0 rows) SELECT name, id, kind, relation FROM ag_label; - name | id | kind | relation -------------------+-------+------+-------------------- - _ag_label_vertex | 1 | v | g._ag_label_vertex - _ag_label_edge | 2 | e | g._ag_label_edge - v1 | 3 | v | g.v1 - v3 | 5 | v | g.v3 - v65535 | 65535 | v | g.v65535 + name | id | kind | relation +------------------+-------+------+------------------------ + _ag_label_vertex | 1 | v | graph._ag_label_vertex + _ag_label_edge | 2 | e | graph._ag_label_edge + v1 | 3 | v | graph.v1 + v3 | 5 | v | graph.v3 + v65535 | 65535 | v | graph.v65535 (5 rows) -- after cycle, label id is now 2 -SELECT * FROM cypher('g', $$CREATE (:v2)$$) as r(a agtype); +SELECT * FROM cypher('graph', $$CREATE (:v2)$$) as r(a agtype); a --- (0 rows) SELECT name, id, kind, relation FROM ag_label; - name | id | kind | relation -------------------+-------+------+-------------------- - _ag_label_vertex | 1 | v | g._ag_label_vertex - _ag_label_edge | 2 | e | g._ag_label_edge - v1 | 3 | v | g.v1 - v3 | 5 | v | g.v3 - v65535 | 65535 | v | g.v65535 - v2 | 4 | v | g.v2 + name | id | kind | relation +------------------+-------+------+------------------------ + _ag_label_vertex | 1 | v | graph._ag_label_vertex + _ag_label_edge | 2 | e | graph._ag_label_edge + v1 | 3 | v | graph.v1 + v3 | 5 | v | graph.v3 + v65535 | 65535 | v | graph.v65535 + v2 | 4 | v | graph.v2 (6 rows) -SELECT drop_graph('g', true); +SELECT drop_graph('graph', true); NOTICE: drop cascades to 6 other objects -DETAIL: drop cascades to table g._ag_label_vertex -drop cascades to table g._ag_label_edge -drop cascades to table g.v1 -drop cascades to table g.v3 -drop cascades to table g.v65535 -drop cascades to table g.v2 -NOTICE: graph "g" has been dropped +DETAIL: drop cascades to table graph._ag_label_vertex +drop cascades to table graph._ag_label_edge +drop cascades to table graph.v1 +drop cascades to table graph.v3 +drop cascades to table graph.v65535 +drop cascades to table graph.v2 +NOTICE: graph "graph" has been dropped drop_graph ------------ (1 row) -- create labels -SELECT create_graph('g'); -NOTICE: graph "g" has been created +SELECT create_graph('graph'); +NOTICE: graph "graph" has been created create_graph -------------- (1 row) -SELECT create_vlabel('g', 'n'); +SELECT create_vlabel('graph', 'n'); NOTICE: VLabel "n" has been created create_vlabel --------------- (1 row) -SELECT create_elabel('g', 'r'); +SELECT create_elabel('graph', 'r'); NOTICE: ELabel "r" has been created create_elabel --------------- @@ -337,29 +337,29 @@ NOTICE: ELabel "r" has been created -- check if labels have been created or not SELECT name, id, kind, relation FROM ag_label; - name | id | kind | relation -------------------+----+------+-------------------- - _ag_label_vertex | 1 | v | g._ag_label_vertex - _ag_label_edge | 2 | e | g._ag_label_edge - n | 3 | v | g.n - r | 4 | e | g.r + name | id | kind | relation +------------------+----+------+------------------------ + _ag_label_vertex | 1 | v | graph._ag_label_vertex + _ag_label_edge | 2 | e | graph._ag_label_edge + n | 3 | v | graph.n + r | 4 | e | graph.r (4 rows) -- try to create duplicate labels -SELECT create_vlabel('g', 'n'); +SELECT create_vlabel('graph', 'n'); ERROR: label "n" already exists -SELECT create_elabel('g', 'r'); +SELECT create_elabel('graph', 'r'); ERROR: label "r" already exists -- remove the labels that have been created -SELECT drop_label('g', 'n', false); -NOTICE: label "g"."n" has been dropped +SELECT drop_label('graph', 'n', false); +NOTICE: label "graph"."n" has been dropped drop_label ------------ (1 row) -SELECT drop_label('g', 'r', false); -NOTICE: label "g"."r" has been dropped +SELECT drop_label('graph', 'r', false); +NOTICE: label "graph"."r" has been dropped drop_label ------------ @@ -367,21 +367,21 @@ NOTICE: label "g"."r" has been dropped -- check if labels have been deleted or not SELECT name, id, kind, relation FROM ag_label; - name | id | kind | relation -------------------+----+------+-------------------- - _ag_label_vertex | 1 | v | g._ag_label_vertex - _ag_label_edge | 2 | e | g._ag_label_edge + name | id | kind | relation +------------------+----+------+------------------------ + _ag_label_vertex | 1 | v | graph._ag_label_vertex + _ag_label_edge | 2 | e | graph._ag_label_edge (2 rows) -- try to remove labels that is not there -SELECT drop_label('g', 'n'); +SELECT drop_label('graph', 'n'); ERROR: label "n" does not exist -SELECT drop_label('g', 'r'); +SELECT drop_label('graph', 'r'); ERROR: label "r" does not exist -- Trying to call the functions with label null -SELECT create_vlabel('g', NULL); +SELECT create_vlabel('graph', NULL); ERROR: label name must not be NULL -SELECT create_elabel('g', NULL); +SELECT create_elabel('graph', NULL); ERROR: label name must not be NULL -- Trying to call the functions with graph null SELECT create_vlabel(NULL, 'n'); @@ -394,11 +394,11 @@ ERROR: graph name must not be NULL SELECT create_elabel(NULL, NULL); ERROR: graph name must not be NULL -- dropping the graph -SELECT drop_graph('g', true); +SELECT drop_graph('graph', true); NOTICE: drop cascades to 2 other objects -DETAIL: drop cascades to table g._ag_label_vertex -drop cascades to table g._ag_label_edge -NOTICE: graph "g" has been dropped +DETAIL: drop cascades to table graph._ag_label_vertex +drop cascades to table graph._ag_label_edge +NOTICE: graph "graph" has been dropped drop_graph ------------ diff --git a/regress/expected/name_validation.out b/regress/expected/name_validation.out new file mode 100644 index 000000000..a1bc779c3 --- /dev/null +++ b/regress/expected/name_validation.out @@ -0,0 +1,401 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +LOAD 'age'; +SET search_path TO ag_catalog; +-- +-- Test graph names +-- +-- length +-- invalid (length < 3) +SELECT create_graph('db'); +ERROR: graph name is invalid +-- valid (though length > 63, it's truncated automatically before reaching validation function) +SELECT create_graph('oiblpsacrufgxiilyevvoiblpsacrufgxiilyevvoiblpsacrufgxiilyevvsdss'); +NOTICE: graph "oiblpsacrufgxiilyevvoiblpsacrufgxiilyevvoiblpsacrufgxiilyevvsds" has been created + create_graph +-------------- + +(1 row) + +-- valid +SELECT create_graph('mydatabase'); +NOTICE: graph "mydatabase" has been created + create_graph +-------------- + +(1 row) + +-- numeric characters +-- invalid (first character numeric; only alphabetic allowed) +SELECT create_graph('2mydatabase'); +ERROR: graph name is invalid +-- valid +SELECT create_graph('mydatabase2'); +NOTICE: graph "mydatabase2" has been created + create_graph +-------------- + +(1 row) + +-- special characters +-- invalid (newline character) +SELECT create_graph('my +database'); +ERROR: graph name is invalid +-- invalid (space character) +SELECT create_graph('my database'); +ERROR: graph name is invalid +-- invalid (symbol character) +SELECT create_graph('my&database'); +ERROR: graph name is invalid +-- valid (non-ascii alphabet) +SELECT create_graph('mydätabase'); +NOTICE: graph "mydätabase" has been created + create_graph +-------------- + +(1 row) + +SELECT create_graph('mydঅtabase'); +NOTICE: graph "mydঅtabase" has been created + create_graph +-------------- + +(1 row) + +-- dots, dashes, underscore +-- valid +SELECT create_graph('main.db'); +NOTICE: graph "main.db" has been created + create_graph +-------------- + +(1 row) + +-- invalid (ends with dot) +SELECT create_graph('main.db.'); +ERROR: graph name is invalid +-- valid +SELECT create_graph('main-db'); +NOTICE: graph "main-db" has been created + create_graph +-------------- + +(1 row) + +-- invalid (ends with dash) +SELECT create_graph('main.db-'); +ERROR: graph name is invalid +-- valid +SELECT create_graph('_mydatabase'); +NOTICE: graph "_mydatabase" has been created + create_graph +-------------- + +(1 row) + +SELECT create_graph('my_database'); +NOTICE: graph "my_database" has been created + create_graph +-------------- + +(1 row) + +-- test rename +-- invalid +SELECT alter_graph('mydatabase', 'RENAME', '1mydatabase'); +ERROR: new graph name is invalid +-- valid +SELECT alter_graph('mydatabase', 'RENAME', 'mydatabase1'); +NOTICE: graph "mydatabase" renamed to "mydatabase1" + alter_graph +------------- + +(1 row) + +-- clean up +SELECT drop_graph('mydatabase1', true); +NOTICE: drop cascades to 2 other objects +DETAIL: drop cascades to table mydatabase1._ag_label_vertex +drop cascades to table mydatabase1._ag_label_edge +NOTICE: graph "mydatabase1" has been dropped + drop_graph +------------ + +(1 row) + +SELECT drop_graph('mydätabase', true); +NOTICE: drop cascades to 2 other objects +DETAIL: drop cascades to table "mydätabase"._ag_label_vertex +drop cascades to table "mydätabase"._ag_label_edge +NOTICE: graph "mydätabase" has been dropped + drop_graph +------------ + +(1 row) + +SELECT drop_graph('mydঅtabase', true); +NOTICE: drop cascades to 2 other objects +DETAIL: drop cascades to table "mydঅtabase"._ag_label_vertex +drop cascades to table "mydঅtabase"._ag_label_edge +NOTICE: graph "mydঅtabase" has been dropped + drop_graph +------------ + +(1 row) + +SELECT drop_graph('mydatabase2', true); +NOTICE: drop cascades to 2 other objects +DETAIL: drop cascades to table mydatabase2._ag_label_vertex +drop cascades to table mydatabase2._ag_label_edge +NOTICE: graph "mydatabase2" has been dropped + drop_graph +------------ + +(1 row) + +SELECT drop_graph('main.db', true); +NOTICE: drop cascades to 2 other objects +DETAIL: drop cascades to table "main.db"._ag_label_vertex +drop cascades to table "main.db"._ag_label_edge +NOTICE: graph "main.db" has been dropped + drop_graph +------------ + +(1 row) + +SELECT drop_graph('main-db', true); +NOTICE: drop cascades to 2 other objects +DETAIL: drop cascades to table "main-db"._ag_label_vertex +drop cascades to table "main-db"._ag_label_edge +NOTICE: graph "main-db" has been dropped + drop_graph +------------ + +(1 row) + +SELECT drop_graph('_mydatabase', true); +NOTICE: drop cascades to 2 other objects +DETAIL: drop cascades to table _mydatabase._ag_label_vertex +drop cascades to table _mydatabase._ag_label_edge +NOTICE: graph "_mydatabase" has been dropped + drop_graph +------------ + +(1 row) + +SELECT drop_graph('my_database', true); +NOTICE: drop cascades to 2 other objects +DETAIL: drop cascades to table my_database._ag_label_vertex +drop cascades to table my_database._ag_label_edge +NOTICE: graph "my_database" has been dropped + drop_graph +------------ + +(1 row) + +SELECT drop_graph('oiblpsacrufgxiilyevvoiblpsacrufgxiilyevvoiblpsacrufgxiilyevvsds', true); +NOTICE: drop cascades to 2 other objects +DETAIL: drop cascades to table oiblpsacrufgxiilyevvoiblpsacrufgxiilyevvoiblpsacrufgxiilyevvsds._ag_label_vertex +drop cascades to table oiblpsacrufgxiilyevvoiblpsacrufgxiilyevvoiblpsacrufgxiilyevvsds._ag_label_edge +NOTICE: graph "oiblpsacrufgxiilyevvoiblpsacrufgxiilyevvoiblpsacrufgxiilyevvsds" has been dropped + drop_graph +------------ + +(1 row) + +-- +-- Test label names +-- +SELECT create_graph('graph123'); +NOTICE: graph "graph123" has been created + create_graph +-------------- + +(1 row) + +-- length +-- invalid +SELECT create_vlabel('graph123', ''); +ERROR: label name is invalid +SELECT create_elabel('graph123', ''); +ERROR: label name is invalid +-- valid +SELECT create_vlabel('graph123', 'labelx'); +NOTICE: VLabel "labelx" has been created + create_vlabel +--------------- + +(1 row) + +SELECT create_elabel('graph123', 'labely'); +NOTICE: ELabel "labely" has been created + create_elabel +--------------- + +(1 row) + +-- special characters +-- invalid (newline character) +SELECT create_vlabel('graph123', 'my +label'); +ERROR: label name is invalid +SELECT create_elabel('graph123', 'my +label'); +ERROR: label name is invalid +-- invalid (space character) +SELECT create_vlabel('graph123', 'my label'); +ERROR: label name is invalid +SELECT create_elabel('graph123', 'my label'); +ERROR: label name is invalid +-- invalid (symbol character) +SELECT create_vlabel('graph123', 'my&label'); +ERROR: label name is invalid +SELECT create_elabel('graph123', 'my&label'); +ERROR: label name is invalid +-- valid (non-ascii alphabet) +SELECT create_vlabel('graph123', 'myläbelx'); +NOTICE: VLabel "myläbelx" has been created + create_vlabel +--------------- + +(1 row) + +SELECT create_elabel('graph123', 'myläbely'); +NOTICE: ELabel "myläbely" has been created + create_elabel +--------------- + +(1 row) + +SELECT create_vlabel('graph123', 'mylঅbelx'); +NOTICE: VLabel "mylঅbelx" has been created + create_vlabel +--------------- + +(1 row) + +SELECT create_elabel('graph123', 'mylঅbely'); +NOTICE: ELabel "mylঅbely" has been created + create_elabel +--------------- + +(1 row) + +-- valid (underscore) +SELECT create_vlabel('graph123', '_labelx'); +NOTICE: VLabel "_labelx" has been created + create_vlabel +--------------- + +(1 row) + +SELECT create_elabel('graph123', '_labely'); +NOTICE: ELabel "_labely" has been created + create_elabel +--------------- + +(1 row) + +SELECT create_vlabel('graph123', 'label_x'); +NOTICE: VLabel "label_x" has been created + create_vlabel +--------------- + +(1 row) + +SELECT create_elabel('graph123', 'label_y'); +NOTICE: ELabel "label_y" has been created + create_elabel +--------------- + +(1 row) + +-- numeric +-- invalid +SELECT create_vlabel('graph123', '1label'); +ERROR: label name is invalid +SELECT create_elabel('graph123', '2label'); +ERROR: label name is invalid +-- valid +SELECT create_vlabel('graph123', 'label1'); +NOTICE: VLabel "label1" has been created + create_vlabel +--------------- + +(1 row) + +SELECT create_elabel('graph123', 'label2'); +NOTICE: ELabel "label2" has been created + create_elabel +--------------- + +(1 row) + +-- label creation with cypher +-- invalid +SELECT * from cypher('graph123', $$ CREATE (a:`my&label`) $$) as (a agtype); +ERROR: label name is invalid +LINE 1: SELECT * from cypher('graph123', $$ CREATE (a:`my&label`) $$... + ^ +SELECT * from cypher('graph123', $$ CREATE (:A)-[:`my&label2`]->(:C) $$) as (a agtype); +ERROR: label name is invalid +LINE 1: SELECT * from cypher('graph123', $$ CREATE (:A)-[:`my&label2... + ^ +-- valid +SELECT * from cypher('graph123', $$ CREATE (a:`mylabel`) $$) as (a agtype); + a +--- +(0 rows) + +SELECT * from cypher('graph123', $$ CREATE (:A)-[:`mylabel2`]->(:C) $$) as (a agtype); + a +--- +(0 rows) + +-- clean up +SELECT drop_graph('graph123', true); +NOTICE: drop cascades to 18 other objects +DETAIL: drop cascades to table graph123._ag_label_vertex +drop cascades to table graph123._ag_label_edge +drop cascades to table graph123.labelx +drop cascades to table graph123.labely +drop cascades to table graph123."myläbelx" +drop cascades to table graph123."myläbely" +drop cascades to table graph123."mylঅbelx" +drop cascades to table graph123."mylঅbely" +drop cascades to table graph123._labelx +drop cascades to table graph123._labely +drop cascades to table graph123.label_x +drop cascades to table graph123.label_y +drop cascades to table graph123.label1 +drop cascades to table graph123.label2 +drop cascades to table graph123.mylabel +drop cascades to table graph123."A" +drop cascades to table graph123.mylabel2 +drop cascades to table graph123."C" +NOTICE: graph "graph123" has been dropped + drop_graph +------------ + +(1 row) + +-- +-- End of test +-- diff --git a/regress/sql/catalog.sql b/regress/sql/catalog.sql index 59a720f06..363ac66b9 100644 --- a/regress/sql/catalog.sql +++ b/regress/sql/catalog.sql @@ -24,30 +24,30 @@ SET search_path TO ag_catalog; -- create_graph(), drop_label(), and drop_graph() tests -- -SELECT create_graph('g'); -SELECT * FROM ag_graph WHERE name = 'g'; +SELECT create_graph('graph'); +SELECT * FROM ag_graph WHERE name = 'graph'; -- create a label to test drop_label() -SELECT * FROM cypher('g', $$CREATE (:l)$$) AS r(a agtype); +SELECT * FROM cypher('graph', $$CREATE (:l)$$) AS r(a agtype); -- test drop_label() -SELECT drop_label('g', 'l'); +SELECT drop_label('graph', 'l'); -- create a label to test drop_graph() -SELECT * FROM cypher('g', $$CREATE (:v)$$) AS r(a agtype); +SELECT * FROM cypher('graph', $$CREATE (:v)$$) AS r(a agtype); -- DROP SCHEMA ... CASCADE should fail -DROP SCHEMA g CASCADE; +DROP SCHEMA graph CASCADE; -- DROP TABLE ... should fail -DROP TABLE g.v; +DROP TABLE graph.v; -- should fail (cascade = false) -SELECT drop_graph('g'); +SELECT drop_graph('graph'); -SELECT drop_graph('g', true); -SELECT count(*) FROM ag_graph WHERE name = 'g'; -SELECT count(*) FROM pg_namespace WHERE nspname = 'g'; +SELECT drop_graph('graph', true); +SELECT count(*) FROM ag_graph WHERE name = 'graph'; +SELECT count(*) FROM pg_namespace WHERE nspname = 'graph'; -- invalid cases SELECT create_graph(NULL); @@ -104,59 +104,59 @@ SELECT alter_graph('GraphB', 'DUMMY', 'GraphA'); -- label id test -- -SELECT create_graph('g'); +SELECT create_graph('graph'); -- label id starts from 1 -SELECT * FROM cypher('g', $$CREATE (:v1)$$) AS r(a agtype); +SELECT * FROM cypher('graph', $$CREATE (:v1)$$) AS r(a agtype); SELECT name, id, kind, relation FROM ag_label; -- skip label id 2 to test the logic that gets an unused label id after cycle -SELECT nextval('g._label_id_seq'); +SELECT nextval('graph._label_id_seq'); -- label id is now 3 -SELECT * FROM cypher('g', $$CREATE (:v3)$$) as r(a agtype); +SELECT * FROM cypher('graph', $$CREATE (:v3)$$) as r(a agtype); SELECT name, id, kind, relation FROM ag_label; -- to use 65535 as the next label id, set label id to 65534 -SELECT setval('g._label_id_seq', 65534); +SELECT setval('graph._label_id_seq', 65534); -- label id is now 65535 -SELECT * FROM cypher('g', $$CREATE (:v65535)$$) as r(a agtype); +SELECT * FROM cypher('graph', $$CREATE (:v65535)$$) as r(a agtype); SELECT name, id, kind, relation FROM ag_label; -- after cycle, label id is now 2 -SELECT * FROM cypher('g', $$CREATE (:v2)$$) as r(a agtype); +SELECT * FROM cypher('graph', $$CREATE (:v2)$$) as r(a agtype); SELECT name, id, kind, relation FROM ag_label; -SELECT drop_graph('g', true); +SELECT drop_graph('graph', true); -- create labels -SELECT create_graph('g'); -SELECT create_vlabel('g', 'n'); -SELECT create_elabel('g', 'r'); +SELECT create_graph('graph'); +SELECT create_vlabel('graph', 'n'); +SELECT create_elabel('graph', 'r'); -- check if labels have been created or not SELECT name, id, kind, relation FROM ag_label; -- try to create duplicate labels -SELECT create_vlabel('g', 'n'); -SELECT create_elabel('g', 'r'); +SELECT create_vlabel('graph', 'n'); +SELECT create_elabel('graph', 'r'); -- remove the labels that have been created -SELECT drop_label('g', 'n', false); -SELECT drop_label('g', 'r', false); +SELECT drop_label('graph', 'n', false); +SELECT drop_label('graph', 'r', false); -- check if labels have been deleted or not SELECT name, id, kind, relation FROM ag_label; -- try to remove labels that is not there -SELECT drop_label('g', 'n'); -SELECT drop_label('g', 'r'); +SELECT drop_label('graph', 'n'); +SELECT drop_label('graph', 'r'); -- Trying to call the functions with label null -SELECT create_vlabel('g', NULL); -SELECT create_elabel('g', NULL); +SELECT create_vlabel('graph', NULL); +SELECT create_elabel('graph', NULL); -- Trying to call the functions with graph null SELECT create_vlabel(NULL, 'n'); @@ -167,6 +167,6 @@ SELECT create_vlabel(NULL, NULL); SELECT create_elabel(NULL, NULL); -- dropping the graph -SELECT drop_graph('g', true); +SELECT drop_graph('graph', true); diff --git a/regress/sql/name_validation.sql b/regress/sql/name_validation.sql new file mode 100644 index 000000000..b67d113ae --- /dev/null +++ b/regress/sql/name_validation.sql @@ -0,0 +1,153 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +LOAD 'age'; + +SET search_path TO ag_catalog; + +-- +-- Test graph names +-- + +-- length + +-- invalid (length < 3) +SELECT create_graph('db'); +-- valid (though length > 63, it's truncated automatically before reaching validation function) +SELECT create_graph('oiblpsacrufgxiilyevvoiblpsacrufgxiilyevvoiblpsacrufgxiilyevvsdss'); +-- valid +SELECT create_graph('mydatabase'); + +-- numeric characters + +-- invalid (first character numeric; only alphabetic allowed) +SELECT create_graph('2mydatabase'); +-- valid +SELECT create_graph('mydatabase2'); + +-- special characters + +-- invalid (newline character) +SELECT create_graph('my +database'); +-- invalid (space character) +SELECT create_graph('my database'); +-- invalid (symbol character) +SELECT create_graph('my&database'); +-- valid (non-ascii alphabet) +SELECT create_graph('mydätabase'); +SELECT create_graph('mydঅtabase'); + +-- dots, dashes, underscore + +-- valid +SELECT create_graph('main.db'); +-- invalid (ends with dot) +SELECT create_graph('main.db.'); +-- valid +SELECT create_graph('main-db'); +-- invalid (ends with dash) +SELECT create_graph('main.db-'); +-- valid +SELECT create_graph('_mydatabase'); +SELECT create_graph('my_database'); + +-- test rename + +-- invalid +SELECT alter_graph('mydatabase', 'RENAME', '1mydatabase'); +-- valid +SELECT alter_graph('mydatabase', 'RENAME', 'mydatabase1'); + +-- clean up +SELECT drop_graph('mydatabase1', true); +SELECT drop_graph('mydätabase', true); +SELECT drop_graph('mydঅtabase', true); +SELECT drop_graph('mydatabase2', true); +SELECT drop_graph('main.db', true); +SELECT drop_graph('main-db', true); +SELECT drop_graph('_mydatabase', true); +SELECT drop_graph('my_database', true); +SELECT drop_graph('oiblpsacrufgxiilyevvoiblpsacrufgxiilyevvoiblpsacrufgxiilyevvsds', true); + + +-- +-- Test label names +-- + +SELECT create_graph('graph123'); + +-- length + +-- invalid +SELECT create_vlabel('graph123', ''); +SELECT create_elabel('graph123', ''); +-- valid +SELECT create_vlabel('graph123', 'labelx'); +SELECT create_elabel('graph123', 'labely'); + +-- special characters + +-- invalid (newline character) +SELECT create_vlabel('graph123', 'my +label'); +SELECT create_elabel('graph123', 'my +label'); +-- invalid (space character) +SELECT create_vlabel('graph123', 'my label'); +SELECT create_elabel('graph123', 'my label'); +-- invalid (symbol character) +SELECT create_vlabel('graph123', 'my&label'); +SELECT create_elabel('graph123', 'my&label'); +-- valid (non-ascii alphabet) +SELECT create_vlabel('graph123', 'myläbelx'); +SELECT create_elabel('graph123', 'myläbely'); +SELECT create_vlabel('graph123', 'mylঅbelx'); +SELECT create_elabel('graph123', 'mylঅbely'); +-- valid (underscore) +SELECT create_vlabel('graph123', '_labelx'); +SELECT create_elabel('graph123', '_labely'); +SELECT create_vlabel('graph123', 'label_x'); +SELECT create_elabel('graph123', 'label_y'); + +-- numeric + +-- invalid +SELECT create_vlabel('graph123', '1label'); +SELECT create_elabel('graph123', '2label'); +-- valid +SELECT create_vlabel('graph123', 'label1'); +SELECT create_elabel('graph123', 'label2'); + +-- label creation with cypher + +-- invalid +SELECT * from cypher('graph123', $$ CREATE (a:`my&label`) $$) as (a agtype); +SELECT * from cypher('graph123', $$ CREATE (:A)-[:`my&label2`]->(:C) $$) as (a agtype); + +-- valid +SELECT * from cypher('graph123', $$ CREATE (a:`mylabel`) $$) as (a agtype); +SELECT * from cypher('graph123', $$ CREATE (:A)-[:`mylabel2`]->(:C) $$) as (a agtype); + +-- clean up +SELECT drop_graph('graph123', true); + +-- +-- End of test +-- diff --git a/src/backend/commands/graph_commands.c b/src/backend/commands/graph_commands.c index bb21f8a9c..f0074ed2a 100644 --- a/src/backend/commands/graph_commands.c +++ b/src/backend/commands/graph_commands.c @@ -43,6 +43,7 @@ #include "catalog/ag_label.h" #include "commands/label_commands.h" #include "utils/graphid.h" +#include "utils/name_validation.h" /* * Schema name doesn't have to be graph name but the same name is used so @@ -73,17 +74,16 @@ Datum create_graph(PG_FUNCTION_ARGS) graph_name_str = NameStr(*graph_name); - if (strlen(graph_name_str) == 0) + if (!is_valid_graph_name(graph_name_str)) { - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("graph name can not be empty"))); + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("graph name is invalid"))); } if (graph_exists(graph_name_str)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), - errmsg("graph \"%s\" already exists", graph_name_str))); + errmsg("graph \"%s\" already exists", graph_name_str))); } nsp_id = create_schema_for_graph(graph_name); @@ -323,6 +323,12 @@ static void rename_graph(const Name graph_name, const Name new_name) char *newname = NameStr(*new_name); char *schema_name; + if (!is_valid_graph_name(newname)) + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("new graph name is invalid"))); + } + /* * ProcessUtilityContext of this command is PROCESS_UTILITY_SUBCOMMAND * so the event trigger will not be fired. diff --git a/src/backend/commands/label_commands.c b/src/backend/commands/label_commands.c index 02bf574c9..f1a0f9edc 100644 --- a/src/backend/commands/label_commands.c +++ b/src/backend/commands/label_commands.c @@ -52,6 +52,7 @@ #include "utils/ag_cache.h" #include "utils/agtype.h" #include "utils/graphid.h" +#include "utils/name_validation.h" /* * Relation name doesn't have to be label name but the same name is used so @@ -226,7 +227,7 @@ Datum create_elabel(PG_FUNCTION_ARGS) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), - errmsg("graph \"%s\" does not exist.", graph_name_str))); + errmsg("graph \"%s\" does not exist.", graph_name_str))); } graph_oid = get_graph_oid(graph_name_str); @@ -273,6 +274,12 @@ Oid create_label(char *graph_name, char *label_name, char label_type, Oid relation_id; Oid label_oid; + if (!is_valid_label(label_name, label_type)) + { + ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), + errmsg("label name is invalid"))); + } + cache_data = search_graph_name_cache(graph_name); if (!cache_data) { diff --git a/src/backend/utils/name_validation.c b/src/backend/utils/name_validation.c new file mode 100644 index 000000000..d96f3154c --- /dev/null +++ b/src/backend/utils/name_validation.c @@ -0,0 +1,91 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#include "postgres.h" + +#include "catalog/pg_collation_d.h" +#include "utils/builtins.h" + +#include "utils/name_validation.h" + +static int regex_match(const char *string, const char *pattern); + +/* + * Returns whether the graph name is valid. + * + * @param graph_name name of the graph + * @return int + */ +int is_valid_graph_name(const char *graph_name) +{ + int len = strlen(graph_name); + + if (len < MIN_GRAPH_NAME_LEN || len > MAX_GRAPH_NAME_LEN) + { + return 0; + } + + return regex_match(graph_name, REGEX_GRAPH_NAME); +} + +/* + * Returns whether the label name is valid. + * + * Note: label_type parameter is not used in this implementation. + * It should be used if validation algorithm for edge and vetex + * differs in future. + * + * @param label_name name of the label + * @param label_type label type defined in label_commands.h + * @return int + */ +int is_valid_label(char *label_name, char label_type) +{ + int len = strlen(label_name); + + if (len < MIN_LABEL_NAME_LEN || len > MAX_LABEL_NAME_LEN) + { + return 0; + } + + return regex_match(label_name, REGEX_LABEL_NAME); +} + +/* + * Returns whether there is a regex match. + * + * @param string source string + * @param pattern regex pattern + * @return int match returns non-zero + */ +static int regex_match(const char *string, const char *pattern) +{ + text *t_string = NULL; + text *t_pattern = NULL; + Datum result; + + t_string = cstring_to_text_with_len(string, strlen(string)); + t_pattern = cstring_to_text_with_len(pattern, strlen(pattern)); + + result = (DirectFunctionCall2Coll(textregexeq, C_COLLATION_OID, + PointerGetDatum(t_string), + PointerGetDatum(t_pattern))); + + return DatumGetBool(result); +} diff --git a/src/include/utils/name_validation.h b/src/include/utils/name_validation.h new file mode 100644 index 000000000..7cfe9bf7b --- /dev/null +++ b/src/include/utils/name_validation.h @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#ifndef AG_NAME_VALIDATION_H +#define AG_NAME_VALIDATION_H + +/* + * Following ID_Start and ID_Continue values are taken from: + * https://util.unicode.org/UnicodeJsps/list-unicodeset.jsp + */ +#define REGEX_ID_STRT \ + "A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑ ˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-Ρ Σ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײ ؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯ ݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪ ࡰ-ࢇࢉ-ࢎࢠ-ࣉऄ-हऽॐक़-ॡॱ-ঀঅ-ঌ এঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱ ৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜ ਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હ ઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହ ଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞ டணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హ ఽౘ-ౚౝౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ ಽೝೞೠೡೱೲഄ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖ ൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะ าำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽ ເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿ ၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍ ა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍ ነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕ ጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚ ᚠ-ᛪᛮ-ᛸᜀ-ᜑᜟ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰ ក-ឳៗៜᠠ-ᡸᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭ ᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭌ ᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-Ჺ Ჽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕ ἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼ ιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼ ⁱⁿₐ-ₜℂℇℊ-ℓℕ℘-ℝℤΩℨK-ℹℼ-ℿ ⅅ-ⅉⅎⅠ-ↈⰀ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧ ⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎ ⷐ-ⷖⷘ-ⷞ々-〇〡-〩〱-〵〸-〼ぁ-ゖ ゛-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆿㇰ-ㇿ 㐀-䶿一-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝ ꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꟊꟐꟑꟓꟕ-ꟙꟲ-ꠁ ꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾ ꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾ ꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽ ꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦ ꬨ-ꬮꬰ-ꭚꭜ-ꭩꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ 豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּ מּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴ ﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲ ᅳ-ᅵ𐀀-𐀋𐀍-𐀦𐀨-𐀺𐀼𐀽𐀿-𐁍𐁐-𐁝𐂀-𐃺 𐅀-𐅴𐊀-𐊜𐊠-𐋐𐌀-𐌟𐌭-𐍊𐍐-𐍵𐎀-𐎝 𐎠-𐏃𐏈-𐏏𐏑-𐏕𐐀-𐒝𐒰-𐓓𐓘-𐓻𐔀-𐔧 𐔰-𐕣𐕰-𐕺𐕼-𐖊𐖌-𐖒𐖔𐖕𐖗-𐖡𐖣-𐖱𐖳-𐖹 𐖻𐖼𐘀-𐜶𐝀-𐝕𐝠-𐝧𐞀-𐞅𐞇-𐞰𐞲-𐞺𐠀-𐠅 𐠈𐠊-𐠵𐠷𐠸𐠼𐠿-𐡕𐡠-𐡶𐢀-𐢞𐣠-𐣲𐣴𐣵 𐤀-𐤕𐤠-𐤹𐦀-𐦷𐦾𐦿𐨀𐨐-𐨓𐨕-𐨗𐨙-𐨵 𐩠-𐩼𐪀-𐪜𐫀-𐫇𐫉-𐫤𐬀-𐬵𐭀-𐭕𐭠-𐭲 𐮀-𐮑𐰀-𐱈𐲀-𐲲𐳀-𐳲𐴀-𐴣𐺀-𐺩𐺰𐺱𐼀-𐼜 𐼧𐼰-𐽅𐽰-𐾁𐾰-𐿄𐿠-𐿶𑀃-𑀷𑁱𑁲𑁵𑂃-𑂯 𑃐-𑃨𑄃-𑄦𑅄𑅇𑅐-𑅲𑅶𑆃-𑆲𑇁-𑇄𑇚𑇜𑈀-𑈑 𑈓-𑈫𑈿𑉀𑊀-𑊆𑊈𑊊-𑊍𑊏-𑊝𑊟-𑊨𑊰-𑋞 𑌅-𑌌𑌏𑌐𑌓-𑌨𑌪-𑌰𑌲𑌳𑌵-𑌹𑌽𑍐𑍝-𑍡 𑐀-𑐴𑑇-𑑊𑑟-𑑡𑒀-𑒯𑓄𑓅𑓇𑖀-𑖮𑗘-𑗛 𑘀-𑘯𑙄𑚀-𑚪𑚸𑜀-𑜚𑝀-𑝆𑠀-𑠫𑢠-𑣟𑣿-𑤆 𑤉𑤌-𑤓𑤕𑤖𑤘-𑤯𑤿𑥁𑦠-𑦧𑦪-𑧐𑧡𑧣𑨀𑨋-𑨲 𑨺𑩐𑩜-𑪉𑪝𑪰-𑫸𑰀-𑰈𑰊-𑰮𑱀𑱲-𑲏𑴀-𑴆 𑴈𑴉𑴋-𑴰𑵆𑵠-𑵥𑵧𑵨𑵪-𑶉𑶘𑻠-𑻲𑼂𑼄-𑼐 𑼒-𑼳𑾰𒀀-𒎙𒐀-𒑮𒒀-𒕃𒾐-𒿰𓀀-𓐯𓑁-𓑆 𔐀-𔙆𖠀-𖨸𖩀-𖩞𖩰-𖪾𖫐-𖫭𖬀-𖬯𖭀-𖭃 𖭣-𖭷𖭽-𖮏𖹀-𖹿𖼀-𖽊𖽐𖾓-𖾟𖿠𖿡𖿣𗀀-𘟷 𘠀-𘳕𘴀-𘴈𚿰-𚿳𚿵-𚿻𚿽𚿾𛀀-𛄢𛄲𛅐-𛅒 𛅕𛅤-𛅧𛅰-𛋻𛰀-𛱪𛱰-𛱼𛲀-𛲈𛲐-𛲙𝐀-𝑔 𝑖-𝒜𝒞𝒟𝒢𝒥𝒦𝒩-𝒬𝒮-𝒹𝒻𝒽-𝓃𝓅-𝔅 𝔇-𝔊𝔍-𝔔𝔖-𝔜𝔞-𝔹𝔻-𝔾𝕀-𝕄𝕆𝕊-𝕐 𝕒-𝚥𝚨-𝛀𝛂-𝛚𝛜-𝛺𝛼-𝜔𝜖-𝜴𝜶-𝝎 𝝐-𝝮𝝰-𝞈𝞊-𝞨𝞪-𝟂𝟄-𝟋𝼀-𝼞𝼥-𝼪 𞀰-𞁭𞄀-𞄬𞄷-𞄽𞅎𞊐-𞊭𞋀-𞋫𞓐-𞓫𞟠-𞟦 𞟨-𞟫𞟭𞟮𞟰-𞟾𞠀-𞣄𞤀-𞥃𞥋𞸀-𞸃𞸅-𞸟 𞸡𞸢𞸤𞸧𞸩-𞸲𞸴-𞸷𞸹𞸻𞹂𞹇𞹉𞹋𞹍-𞹏𞹑𞹒 𞹔𞹗𞹙𞹛𞹝𞹟𞹡𞹢𞹤𞹧-𞹪𞹬-𞹲𞹴-𞹷𞹹-𞹼 𞹾𞺀-𞺉𞺋-𞺛𞺡-𞺣𞺥-𞺩𞺫-𞺻𠀀-𪛟𪜀-𫜹 𫝀-𫠝𫠠-𬺡𬺰-𮯠丽-𪘀𰀀-𱍊𱍐-𲎯" +#define REGEX_ID_CONT \ + "0-9A-Z_a-zªµ·ºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮ̀-ʹͶͷͺ-ͽͿΆ-ΊΌΎ-ΡΣ-ϵϷ-ҁ҃-҇Ҋ-ԯԱ-Ֆՙՠ-ֈ֑-ׇֽֿׁׂׅׄא-תׯ-ײؐ-ؚؠ-٩ٮ-ۓە-ۜ۟-۪ۨ-ۼۿܐ-݊ݍ-ޱ߀-ߵߺ߽ࠀ-࠭ࡀ-࡛ࡠ-ࡪࡰ-ࢇࢉ-ࢎ࢘-ࣣ࣡-ॣ०-९ॱ-ঃঅ-ঌএঐও-নপ-রলশ-হ়-ৄেৈো-ৎৗড়ঢ়য়-ৣ০-ৱৼ৾ਁ-ਃਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹ਼ਾ-ੂੇੈੋ-੍ੑਖ਼-ੜਫ਼੦-ੵઁ-ઃઅ-ઍએ-ઑઓ-નપ-રલળવ-હ઼-ૅે-ૉો-્ૐૠ-ૣ૦-૯ૹ-૿ଁ-ଃଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହ଼-ୄେୈୋ-୍୕-ୗଡ଼ଢ଼ୟ-ୣ୦-୯ୱஂஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹா-ூெ-ைொ-்ௐௗ௦-௯ఀ-ఌఎ-ఐఒ-నప-హ఼-ౄె-ైొ-్ౕౖౘ-ౚౝౠ-ౣ౦-౯ಀ-ಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ಼-ೄೆ-ೈೊ-್ೕೖೝೞೠ-ೣ೦-೯ೱ-ೳഀ-ഌഎ-ഐഒ-ൄെ-ൈൊ-ൎൔ-ൗൟ-ൣ൦-൯ൺ-ൿඁ-ඃඅ-ඖක-නඳ-රලව-ෆ්ා-ුූෘ-ෟ෦-෯ෲෳก-ฺเ-๎๐-๙ກຂຄຆ-ຊຌ-ຣລວ-ຽເ-ໄໆ່-໎໐-໙ໜ-ໟༀ༘༙༠-༩༹༵༷༾-ཇཉ-ཬཱ-྄྆-ྗྙ-ྼ࿆က-၉ၐ-ႝႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚ፝-፟፩-፱ᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛸᜀ-᜕ᜟ-᜴ᝀ-ᝓᝠ-ᝬᝮ-ᝰᝲᝳក-៓ៗៜ៝០-៩᠋-᠍᠏-᠙ᠠ-ᡸᢀ-ᢪᢰ-ᣵᤀ-ᤞᤠ-ᤫᤰ-᤻᥆-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉ᧐-᧚ᨀ-ᨛᨠ-ᩞ᩠-᩿᩼-᪉᪐-᪙ᪧ᪰-᪽ᪿ-ᫎᬀ-ᭌ᭐-᭙᭫-᭳ᮀ-᯳ᰀ-᰷᱀-᱉ᱍ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿ᳐-᳔᳒-ᳺᴀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼ‿⁀⁔ⁱⁿₐ-ₜ⃐-⃥⃜⃡-⃰ℂℇℊ-ℓℕ℘-ℝℤΩℨK-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-ⳤⳫ-ⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯ⵿-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⷠ-ⷿ々-〇〡-〯〱-〵〸-〼ぁ-ゖ゙-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆿㇰ-ㇿ㐀-䶿一-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘫꙀ-꙯ꙴ-꙽ꙿ-꛱ꜗ-ꜟꜢ-ꞈꞋ-ꟊꟐꟑꟓꟕ-ꟙꟲ-ꠧ꠬ꡀ-ꡳꢀ-ꣅ꣐-꣙꣠-ꣷꣻꣽ-꤭ꤰ-꥓ꥠ-ꥼꦀ-꧀ꧏ-꧙ꧠ-ꧾꨀ-ꨶꩀ-ꩍ꩐-꩙ꩠ-ꩶꩺ-ꫂꫛ-ꫝꫠ-ꫯꫲ-꫶ꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭩꭰ-ꯪ꯬꯭꯰-꯹가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻ︀-️︠-︯︳︴﹍-﹏ﹰ-ﹴﹶ-ﻼ0-9A-Z_a-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ𐀀-𐀋𐀍-𐀦𐀨-𐀺𐀼𐀽𐀿-𐁍𐁐-𐁝𐂀-𐃺𐅀-𐅴𐇽𐊀-𐊜𐊠-𐋐𐋠𐌀-𐌟𐌭-𐍊𐍐-𐍺𐎀-𐎝𐎠-𐏃𐏈-𐏏𐏑-𐏕𐐀-𐒝𐒠-𐒩𐒰-𐓓𐓘-𐓻𐔀-𐔧𐔰-𐕣𐕰-𐕺𐕼-𐖊𐖌-𐖒𐖔𐖕𐖗-𐖡𐖣-𐖱𐖳-𐖹𐖻𐖼𐘀-𐜶𐝀-𐝕𐝠-𐝧𐞀-𐞅𐞇-𐞰𐞲-𐞺𐠀-𐠅𐠈𐠊-𐠵𐠷𐠸𐠼𐠿-𐡕𐡠-𐡶𐢀-𐢞𐣠-𐣲𐣴𐣵𐤀-𐤕𐤠-𐤹𐦀-𐦷𐦾𐦿𐨀-𐨃𐨅𐨆𐨌-𐨓𐨕-𐨗𐨙-𐨵𐨸-𐨿𐨺𐩠-𐩼𐪀-𐪜𐫀-𐫇𐫉-𐫦𐬀-𐬵𐭀-𐭕𐭠-𐭲𐮀-𐮑𐰀-𐱈𐲀-𐲲𐳀-𐳲𐴀-𐴧𐴰-𐴹𐺀-𐺩𐺫𐺬𐺰𐺱𐻽-𐼜𐼧𐼰-𐽐𐽰-𐾅𐾰-𐿄𐿠-𐿶𑀀-𑁆𑁦-𑁵𑁿-𑂺𑃂𑃐-𑃨𑃰-𑃹𑄀-𑄴𑄶-𑄿𑅄-𑅇𑅐-𑅳𑅶𑆀-𑇄𑇉-𑇌𑇎-𑇚𑇜𑈀-𑈑𑈓-𑈷𑈾-𑉁𑊀-𑊆𑊈𑊊-𑊍𑊏-𑊝𑊟-𑊨𑊰-𑋪𑋰-𑋹𑌀-𑌃𑌅-𑌌𑌏𑌐𑌓-𑌨𑌪-𑌰𑌲𑌳𑌵-𑌹𑌻-𑍄𑍇𑍈𑍋-𑍍𑍐𑍗𑍝-𑍣𑍦-𑍬𑍰-𑍴𑐀-𑑊𑑐-𑑙𑑞-𑑡𑒀-𑓅𑓇𑓐-𑓙𑖀-𑖵𑖸-𑗀𑗘-𑗝𑘀-𑙀𑙄𑙐-𑙙𑚀-𑚸𑛀-𑛉𑜀-𑜚𑜝-𑜫𑜰-𑜹𑝀-𑝆𑠀-𑠺𑢠-𑣩𑣿-𑤆𑤉𑤌-𑤓𑤕𑤖𑤘-𑤵𑤷𑤸𑤻-𑥃𑥐-𑥙𑦠-𑦧𑦪-𑧗𑧚-𑧡𑧣𑧤𑨀-𑨾𑩇𑩐-𑪙𑪝𑪰-𑫸𑰀-𑰈𑰊-𑰶𑰸-𑱀𑱐-𑱙𑱲-𑲏𑲒-𑲧𑲩-𑲶𑴀-𑴆𑴈𑴉𑴋-𑴶𑴺𑴼𑴽𑴿-𑵇𑵐-𑵙𑵠-𑵥𑵧𑵨𑵪-𑶎𑶐𑶑𑶓-𑶘𑶠-𑶩𑻠-𑻶𑼀-𑼐𑼒-𑼺𑼾-𑽂𑽐-𑽙𑾰𒀀-𒎙𒐀-𒑮𒒀-𒕃𒾐-𒿰𓀀-𓐯𓑀-𓑕𔐀-𔙆𖠀-𖨸𖩀-𖩞𖩠-𖩩𖩰-𖪾𖫀-𖫉𖫐-𖫭𖫰-𖫴𖬀-𖬶𖭀-𖭃𖭐-𖭙𖭣-𖭷𖭽-𖮏𖹀-𖹿𖼀-𖽊𖽏-𖾇𖾏-𖾟𖿠𖿡𖿣𖿤𖿰𖿱𗀀-𘟷𘠀-𘳕𘴀-𘴈𚿰-𚿳𚿵-𚿻𚿽𚿾𛀀-𛄢𛄲𛅐-𛅒𛅕𛅤-𛅧𛅰-𛋻𛰀-𛱪𛱰-𛱼𛲀-𛲈𛲐-𛲙𛲝𛲞𜼀-𜼭𜼰-𜽆𝅥-𝅩𝅭-𝅲𝅻-𝆂𝆅-𝆋𝆪-𝆭𝉂-𝉄𝐀-𝑔𝑖-𝒜𝒞𝒟𝒢𝒥𝒦𝒩-𝒬𝒮-𝒹𝒻𝒽-𝓃𝓅-𝔅𝔇-𝔊𝔍-𝔔𝔖-𝔜𝔞-𝔹𝔻-𝔾𝕀-𝕄𝕆𝕊-𝕐𝕒-𝚥𝚨-𝛀𝛂-𝛚𝛜-𝛺𝛼-𝜔𝜖-𝜴𝜶-𝝎𝝐-𝝮𝝰-𝞈𝞊-𝞨𝞪-𝟂𝟄-𝟋𝟎-𝟿𝨀-𝨶𝨻-𝩬𝩵𝪄𝪛-𝪟𝪡-𝪯𝼀-𝼞𝼥-𝼪𞀀-𞀆𞀈-𞀘𞀛-𞀡𞀣𞀤𞀦-𞀪𞀰-𞁭𞂏𞄀-𞄬𞄰-𞄽𞅀-𞅉𞅎𞊐-𞊮𞋀-𞋹𞓐-𞓹𞟠-𞟦𞟨-𞟫𞟭𞟮𞟰-𞟾𞠀-𞣄𞣐-𞣖𞤀-𞥋𞥐-𞥙𞸀-𞸃𞸅-𞸟𞸡𞸢𞸤𞸧𞸩-𞸲𞸴-𞸷𞸹𞸻𞹂𞹇𞹉𞹋𞹍-𞹏𞹑𞹒𞹔𞹗𞹙𞹛𞹝𞹟𞹡𞹢𞹤𞹧-𞹪𞹬-𞹲𞹴-𞹷𞹹-𞹼𞹾𞺀-𞺉𞺋-𞺛𞺡-𞺣𞺥-𞺩𞺫-𞺻🯰-🯹𠀀-𪛟𪜀-𫜹𫝀-𫠝𫠠-𬺡𬺰-𮯠丽-𪘀𰀀-𱍊𱍐-𲎯󠄀" + +#define REGEX_GRAPH_NAME \ + "^[" REGEX_ID_STRT "_][" REGEX_ID_CONT "\\.\\-]*[" REGEX_ID_CONT "]$" +#define REGEX_LABEL_NAME "^[" REGEX_ID_STRT "_][" REGEX_ID_CONT "]*$" + +#define MAX_GRAPH_NAME_LEN 63 +#define MIN_GRAPH_NAME_LEN 3 +#define MAX_LABEL_NAME_LEN 65535 +#define MIN_LABEL_NAME_LEN 1 + +int is_valid_graph_name(const char *graph_name); +int is_valid_label(char *label_name, char label_type); + +#endif From 26ae7d94c40e14e9b878676bbcbb240ef6471afd Mon Sep 17 00:00:00 2001 From: Hrishikesh Mallick <65110396+intrigued-rishi@users.noreply.github.com> Date: Sat, 31 Dec 2022 20:40:04 +0530 Subject: [PATCH 082/191] Updated volatility information of function age_tointeger(),age_tostring(),age_size() (#434) --- age--1.1.0.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index 73cfc05f0..a32d2b559 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -3501,7 +3501,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_tointeger(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; @@ -3509,7 +3509,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_tostring(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; @@ -3517,7 +3517,7 @@ AS 'MODULE_PATHNAME'; CREATE FUNCTION ag_catalog.age_size(variadic "any") RETURNS agtype LANGUAGE c -STABLE +IMMUTABLE RETURNS NULL ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; From 9bc36072819084377aecea48a89d108eddb368ef Mon Sep 17 00:00:00 2001 From: Umar Hayat Date: Wed, 4 Jan 2023 01:57:13 +0900 Subject: [PATCH 083/191] Fixed typos at multiple locations (#470) --- README.md | 2 +- drivers/golang/README.md | 2 +- drivers/golang/parser/Age.g4 | 2 +- drivers/golang/parser/README.md | 2 +- drivers/golang/samples/main.go | 2 +- drivers/golang/samples/sql_api_sample.go | 4 +-- drivers/jdbc/README.md | 2 +- .../apache/age/jdbc/AgtypeStatementTest.java | 12 ++++----- drivers/python/README.md | 2 +- drivers/python/age/exceptions.py | 2 +- drivers/python/antlr/README.md | 2 +- drivers/python/samples/apache-age-note.ipynb | 2 +- regress/expected/cypher_create.out | 2 +- regress/sql/cypher_create.sql | 2 +- src/backend/executor/cypher_delete.c | 2 +- src/backend/executor/cypher_merge.c | 10 +++---- src/backend/executor/cypher_set.c | 4 +-- src/backend/parser/cypher_analyze.c | 2 +- src/backend/parser/cypher_clause.c | 26 +++++++++---------- src/backend/utils/adt/age_session_info.c | 2 +- src/backend/utils/adt/age_vle.c | 16 ++++++------ src/backend/utils/name_validation.c | 2 +- src/include/executor/cypher_utils.h | 2 +- src/include/nodes/cypher_nodes.h | 6 ++--- src/include/nodes/cypher_readfuncs.h | 2 +- src/include/parser/cypher_transform_entity.h | 4 +-- src/include/utils/load/csv.h | 4 +-- 27 files changed, 61 insertions(+), 61 deletions(-) diff --git a/README.md b/README.md index a57f85543..e51068ccc 100644 --- a/README.md +++ b/README.md @@ -145,7 +145,7 @@ sudo apt install postgresql  Install From Source Code -You can download the Postgres source code and install your own instance of Postgres. You can read instructions on how to install from source code for different versions on the offical Postgres Website. +You can download the Postgres source code and install your own instance of Postgres. You can read instructions on how to install from source code for different versions on the official Postgres Website. diff --git a/drivers/golang/README.md b/drivers/golang/README.md index 4433212cf..367031000 100644 --- a/drivers/golang/README.md +++ b/drivers/golang/README.md @@ -1,6 +1,6 @@ # age AGType parser and driver support for Golang -AGType parser and driver support for [Apache AGE](https://age.apache.org/), graph extention for PostgreSQL. +AGType parser and driver support for [Apache AGE](https://age.apache.org/), graph extension for PostgreSQL. ### Features * Unmarshal AGE result data(AGType) to Vertex, Edge, Path diff --git a/drivers/golang/parser/Age.g4 b/drivers/golang/parser/Age.g4 index c5516a90a..96ac4e608 100644 --- a/drivers/golang/parser/Age.g4 +++ b/drivers/golang/parser/Age.g4 @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -/* Apache AGE output data grammer */ +/* Apache AGE output data grammar */ grammar Age; ageout diff --git a/drivers/golang/parser/README.md b/drivers/golang/parser/README.md index 6319ce75d..a70eede38 100644 --- a/drivers/golang/parser/README.md +++ b/drivers/golang/parser/README.md @@ -1,5 +1,5 @@ # ANTLR4 Go Query Result data parser generation rules for apache-age-go -Go driver for Apache AGE, graph extention for PostgreSQL. +Go driver for Apache AGE, graph extension for PostgreSQL. ### Build diff --git a/drivers/golang/samples/main.go b/drivers/golang/samples/main.go index 9839e55c2..f2e349dde 100644 --- a/drivers/golang/samples/main.go +++ b/drivers/golang/samples/main.go @@ -32,7 +32,7 @@ var graphName string = "testGraph" func main() { - // Do cypher query to AGE with database/sql Tx API transaction conrol + // Do cypher query to AGE with database/sql Tx API transaction control fmt.Println("# Do cypher query with SQL API") doWithSqlAPI(dsn, graphName) diff --git a/drivers/golang/samples/sql_api_sample.go b/drivers/golang/samples/sql_api_sample.go index 491532f38..9e67e0961 100644 --- a/drivers/golang/samples/sql_api_sample.go +++ b/drivers/golang/samples/sql_api_sample.go @@ -25,7 +25,7 @@ import ( "github.com/apache/age/drivers/golang/age" ) -// Do cypher query to AGE with database/sql Tx API transaction conrol +// Do cypher query to AGE with database/sql Tx API transaction control func doWithSqlAPI(dsn string, graphName string) { // Connect to PostgreSQL @@ -75,7 +75,7 @@ func doWithSqlAPI(dsn string, graphName string) { if err != nil { panic(err) } - // Unmarsal result data to Vertex row by row + // Unmarshal result data to Vertex row by row for cypherCursor.Next() { row, err := cypherCursor.GetRow() if err != nil { diff --git a/drivers/jdbc/README.md b/drivers/jdbc/README.md index c04529e11..d22373030 100644 --- a/drivers/jdbc/README.md +++ b/drivers/jdbc/README.md @@ -1,6 +1,6 @@ # **AGE AGType parser and driver support for Java** -AGType parser and driver support for [Apache AGE](https://age.apache.org/), graph extention for PostgreSQL. +AGType parser and driver support for [Apache AGE](https://age.apache.org/), graph extension for PostgreSQL. ## Prerequisites diff --git a/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/AgtypeStatementTest.java b/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/AgtypeStatementTest.java index e13e5bb85..e160ef394 100644 --- a/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/AgtypeStatementTest.java +++ b/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/AgtypeStatementTest.java @@ -56,7 +56,7 @@ void tearDown() throws Exception { /** * When a statement is run first, "ag_catalog"."agtype" needs to be added to the connection. * - * @throws SQLException Throws an SQL Exepction if the driver is unable to parse Agtype. + * @throws SQLException Throws an SQL Exception if the driver is unable to parse Agtype. */ @Test void agTypeInStatementAsString() throws SQLException, InvalidAgtypeException { @@ -69,7 +69,7 @@ void agTypeInStatementAsString() throws SQLException, InvalidAgtypeException { * When a Prepared statement is run first and the agtype is a parameter, agtype needs to be * added to the connection. * - * @throws SQLException Throws an SQL Exepction if the driver is unable to parse Agtype. + * @throws SQLException Throws an SQL Exception if the driver is unable to parse Agtype. */ @Test void asTypeInPreparedStatementAsParameter() throws SQLException, InvalidAgtypeException { @@ -82,7 +82,7 @@ void asTypeInPreparedStatementAsParameter() throws SQLException, InvalidAgtypeEx * When a Prepared statement is run first and the agtype is not a parameter, but in the string, * "ag_catalog"."agtype" needs to be added to the connection. * - * @throws SQLException Throws an SQL Exepction if the driver is unable to parse Agtype. + * @throws SQLException Throws an SQL Exception if the driver is unable to parse Agtype. */ @Test void asTypeInPreparedStatementAsString() throws SQLException, InvalidAgtypeException { @@ -95,7 +95,7 @@ void asTypeInPreparedStatementAsString() throws SQLException, InvalidAgtypeExcep * When a Prepared statement is run and agType is both a string and a parameter, agtype needs to * be added to the connection, but "ag_catalog."agtype" does not need to be added. * - * @throws SQLException Throws an SQL Exepction if the driver is unable to parse Agtype. + * @throws SQLException Throws an SQL Exception if the driver is unable to parse Agtype. */ @Test void agTypeInPreparedStatementAsStringAndParam() throws SQLException, InvalidAgtypeException { @@ -111,7 +111,7 @@ void agTypeInPreparedStatementAsStringAndParam() throws SQLException, InvalidAgt * When a statement is run first, "ag_catalog"."agType" needs to be added to the connection, no * need to add agtype for running a Prepared Statement afterward. * - * @throws SQLException Throws an SQL Exepction if the driver is unable to parse Agtype. + * @throws SQLException Throws an SQL Exception if the driver is unable to parse Agtype. */ @Test void asTypeInStatementThenPreparedStatement() throws SQLException, InvalidAgtypeException { @@ -126,7 +126,7 @@ void asTypeInStatementThenPreparedStatement() throws SQLException, InvalidAgtype * When a Prepared statement is run first, agtype needs to be added to the connection, no need * to add "ag_catalog"."agType" for running a Statement afterward. * - * @throws SQLException Throws an SQL Exepction if the driver is unable to parse Agtype. + * @throws SQLException Throws an SQL Exception if the driver is unable to parse Agtype. */ @Test void asTypeInPreparedStatementThenStatement() throws SQLException, InvalidAgtypeException { diff --git a/drivers/python/README.md b/drivers/python/README.md index ab7573236..af1705e74 100644 --- a/drivers/python/README.md +++ b/drivers/python/README.md @@ -1,5 +1,5 @@ # AGE AGType parser and driver support for Python -AGType parser and driver support for [Apache AGE](https://age.apache.org/), graph extention for PostgreSQL. +AGType parser and driver support for [Apache AGE](https://age.apache.org/), graph extension for PostgreSQL. ### Features * Unmarshal AGE result data(AGType) to Vertex, Edge, Path diff --git a/drivers/python/age/exceptions.py b/drivers/python/age/exceptions.py index 7bbb5b4be..cee9cc3be 100644 --- a/drivers/python/age/exceptions.py +++ b/drivers/python/age/exceptions.py @@ -59,7 +59,7 @@ def __init__(self, msg, cause): super().__init__(msg, cause) def __repr__(self) : - return 'SqlExcution [' + self.msg + ']' + return 'SqlExecution [' + self.msg + ']' class AGTypeError(Exception): def __init__(self, msg, cause): diff --git a/drivers/python/antlr/README.md b/drivers/python/antlr/README.md index b83b17df9..bd817adc4 100644 --- a/drivers/python/antlr/README.md +++ b/drivers/python/antlr/README.md @@ -1,5 +1,5 @@ # ANTLR4 Python3 Agtype parser generation rules for apache-age -Python driver for Apache AGE, graph extention for PostgreSQL. +Python driver for Apache AGE, graph extension for PostgreSQL. ### Build diff --git a/drivers/python/samples/apache-age-note.ipynb b/drivers/python/samples/apache-age-note.ipynb index c63ec9f59..44b15b43e 100644 --- a/drivers/python/samples/apache-age-note.ipynb +++ b/drivers/python/samples/apache-age-note.ipynb @@ -11,7 +11,7 @@ "```\n", "import age\n", "```\n", - "## Connect to PostgreSQL(with AGE extention)\n", + "## Connect to PostgreSQL(with AGE extension)\n", "* Connect to PostgreSQL server \n", "* Load AGE and register agtype to db session (Psycopg2 driver)\n", "* Check graph exists and set graph. If not, age make that.\n", diff --git a/regress/expected/cypher_create.out b/regress/expected/cypher_create.out index fb92a3795..7cac75e35 100644 --- a/regress/expected/cypher_create.out +++ b/regress/expected/cypher_create.out @@ -324,7 +324,7 @@ $$) as (a agtype, b agtype); SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) WHERE a.name = 'Node Z' - CREATE (a)-[:e_var {name: a.name + ' -> doesnt exist'}]->(:n_other_node) + CREATE (a)-[:e_var {name: a.name + ' -> does not exist'}]->(:n_other_node) RETURN a $$) as (a agtype); a diff --git a/regress/sql/cypher_create.sql b/regress/sql/cypher_create.sql index 62b7d1657..5934dcb18 100644 --- a/regress/sql/cypher_create.sql +++ b/regress/sql/cypher_create.sql @@ -172,7 +172,7 @@ $$) as (a agtype, b agtype); SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) WHERE a.name = 'Node Z' - CREATE (a)-[:e_var {name: a.name + ' -> doesnt exist'}]->(:n_other_node) + CREATE (a)-[:e_var {name: a.name + ' -> does not exist'}]->(:n_other_node) RETURN a $$) as (a agtype); diff --git a/src/backend/executor/cypher_delete.c b/src/backend/executor/cypher_delete.c index 3d9406bdc..9344a8657 100644 --- a/src/backend/executor/cypher_delete.c +++ b/src/backend/executor/cypher_delete.c @@ -77,7 +77,7 @@ const CustomExecMethods cypher_delete_exec_methods = {DELETE_SCAN_STATE_NAME, /* * Initialization at the beginning of execution. Setup the child node, - * setup its scan tuple slot and projection infp, expression context, + * setup its scan tuple slot and projection info, expression context, * collect metadata about visible edges, and alter the commandid for * the transaction. */ diff --git a/src/backend/executor/cypher_merge.c b/src/backend/executor/cypher_merge.c index c65abf2fe..2502c977b 100644 --- a/src/backend/executor/cypher_merge.c +++ b/src/backend/executor/cypher_merge.c @@ -114,7 +114,7 @@ static void begin_cypher_merge(CustomScanState *node, EState *estate, Relation rel; /* - * This entity is refrences an entity that is already declared. Either + * This entity is references an entity that is already declared. Either * by a previous clause or an entity earlier in the MERGE path. In both * cases, this target_entry will not create data, only reference data * that already exists. @@ -124,7 +124,7 @@ static void begin_cypher_merge(CustomScanState *node, EState *estate, continue; } - // Open relation and aquire a row exclusive lock. + // Open relation and acquire a row exclusive lock. rel = heap_open(cypher_node->relid, RowExclusiveLock); // Initialize resultRelInfo for the vertex @@ -189,7 +189,7 @@ static bool check_path(cypher_merge_custom_scan_state *css, * If target_node as a valid attribute number and is a node not * declared in a previous clause, check the tuple position in the * slot. If the slot is null, the path was not found. The rules - * state that if one part of the path does not exists, the whold + * state that if one part of the path does not exists, the whole * path must be created. */ if (node->tuple_position != InvalidAttrNumber || @@ -477,7 +477,7 @@ static TupleTableSlot *exec_cypher_merge(CustomScanState *node) Assert(css->found_a_path == false); /* - * This block of sub-case 1 should only be exectuted once. To + * This block of sub-case 1 should only be executued once. To * create the single path if the path does not exist. If we find * ourselves here again, the internal state of the MERGE execution * node was incorrectly altered. @@ -513,7 +513,7 @@ static TupleTableSlot *exec_cypher_merge(CustomScanState *node) econtext->ecxt_scantuple->tts_values, econtext->ecxt_scantuple->tts_isnull); - // store the heap tuble + // store the heap tuple ExecStoreTuple(heap_tuple, econtext->ecxt_scantuple, InvalidBuffer, false); /* diff --git a/src/backend/executor/cypher_set.c b/src/backend/executor/cypher_set.c index 1bc74b764..8baea711a 100644 --- a/src/backend/executor/cypher_set.c +++ b/src/backend/executor/cypher_set.c @@ -211,7 +211,7 @@ static bool check_path(agtype_value *path, graphid updated_id) /* * Construct a new agtype path with the entity with updated_id - * replacing all of its intances in path with updated_entity + * replacing all of its instances in path with updated_entity */ static agtype_value *replace_entity_in_path(agtype_value *path, graphid updated_id, @@ -441,7 +441,7 @@ static void process_update_list(CustomScanState *node) /* * If we need to remove the property, set the value to NULL. Otherwise - * fetch the evaluated expression from the tuble slot. + * fetch the evaluated expression from the tuple slot. */ if (remove_property) { diff --git a/src/backend/parser/cypher_analyze.c b/src/backend/parser/cypher_analyze.c index 685c7cb0a..b99ff0a90 100644 --- a/src/backend/parser/cypher_analyze.c +++ b/src/backend/parser/cypher_analyze.c @@ -777,7 +777,7 @@ static Query *analyze_cypher_and_coerce(List *stmt, RangeTblFunction *rtfunc, /* * The coercion context of this coercion is COERCION_EXPLICIT - * because the target type is explicitly metioned in the column + * because the target type is explicitly mentioned in the column * definition list and we need to do this by looking up all * possible coercion. */ diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 825628777..9b0c76e17 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -1671,7 +1671,7 @@ cypher_update_information *transform_cypher_set_item_list( { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("SET clause doesnt not support updating maps or lists in a property"), + errmsg("SET clause does not support updating maps or lists in a property"), parser_errposition(pstate, set_item->location))); } @@ -3236,7 +3236,7 @@ static Node *make_type_cast_to_agtype(Node *arg) /* * Makes an agtype bool node that Postgres' transform expression logic - * can handle. Used when contructed the join quals for building the paths + * can handle. Used when constructed the join quals for building the paths */ static Node *make_bool_a_const(bool state) { @@ -3343,7 +3343,7 @@ static List *join_to_entity(cypher_parsestate *cpstate, return quals; } -// makes the quals neccessary when an edge is joining to another edge. +// makes the quals necessary when an edge is joining to another edge. static List *make_edge_quals(cypher_parsestate *cpstate, transform_entity *edge, enum transform_entity_join_side side) @@ -3434,7 +3434,7 @@ static A_Expr *filter_vertices_on_label_id(cypher_parsestate *cpstate, /* * Creates the Contains operator to process property contraints for a vertex/ - * edge in a MATCH clause. creates the agtype @> with the enitity's properties + * edge in a MATCH clause. creates the agtype @> with the entity's properties * on the right and the contraints in the MATCH clause on the left. */ static Node *create_property_constraints(cypher_parsestate *cpstate, @@ -3869,7 +3869,7 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, /* * Iterate through the list of entities setup the join conditions. Joins * are driven through edges. To correctly setup the joins, we must - * aquire information about the previous edge and vertex, and the next + * acquire information about the previous edge and vertex, and the next * edge and vertex. */ static List *make_path_join_quals(cypher_parsestate *cpstate, List *entities) @@ -4611,7 +4611,7 @@ transform_cypher_create_path(cypher_parsestate *cpstate, List **target_list, else { ereport(ERROR, - (errmsg_internal("unreconized node in create pattern"))); + (errmsg_internal("unrecognized node in create pattern"))); } } @@ -4896,7 +4896,7 @@ static cypher_target_node *transform_create_cypher_existing_node( */ if (declared_in_current_clause) { - rel->flags |= EXISTING_VARAIBLE_DECLARED_SAME_CLAUSE; + rel->flags |= EXISTING_VARIABLE_DECLARED_SAME_CLAUSE; } /* @@ -5066,7 +5066,7 @@ static Expr *cypher_create_properties(cypher_parsestate *cpstate, } else { - ereport(ERROR, (errmsg_internal("unreconized entity type"))); + ereport(ERROR, (errmsg_internal("unrecognized entity type"))); } // add a volatile wrapper call to prevent the optimizer from removing it @@ -5237,7 +5237,7 @@ static TargetEntry *findTarget(List *targetList, char *resname) } /* - * Wrap the expression with a volatile function, to prevent the optimer from + * Wrap the expression with a volatile function, to prevent the optimizer from * elimating the expression. */ static Expr *add_volatile_wrapper(Expr *node) @@ -5308,7 +5308,7 @@ Query *cypher_parse_sub_analyze(Node *parseTree, * take: * * 1. If there is no previous clause, the query will have a subquery that - * represents the path as a select staement, similar to match with a targetList + * represents the path as a select statement, similar to match with a targetList * that is all declared variables and the FuncExpr that represents the MERGE * clause with its needed metadata information, that will be caught in the * planner phase and converted into a path. @@ -5445,7 +5445,7 @@ static Query *transform_cypher_merge(cypher_parsestate *cpstate, * This function does the heavy lifting of transforming a MERGE clause that has * a clause before it in the query of turning that into a lateral left join. * The previous clause will still be able to emit tuples if the path defined in - * MERGE clause is not found. In that case variable assinged in the MERGE + * MERGE clause is not found. In that case variable assigned in the MERGE * clause will be emitted as NULL (same as OPTIONAL MATCH). */ static cypher_create_path * @@ -5658,7 +5658,7 @@ transform_cypher_merge_path(cypher_parsestate *cpstate, List **target_list, else { ereport(ERROR, - (errmsg_internal("unreconized node in create pattern"))); + (errmsg_internal("unrecognized node in create pattern"))); } } @@ -5902,7 +5902,7 @@ static cypher_clause *convert_merge_to_match(cypher_merge *merge) } /* - * Creates a namespace item for the given rte. boolean arguements will + * Creates a namespace item for the given rte. boolean arguments will * let the rest of the ParseState know if the relation and/or columns are * visible, whether the rte is only usable in lateral joins, and if the rte * is accessible in lateral joins. diff --git a/src/backend/utils/adt/age_session_info.c b/src/backend/utils/adt/age_session_info.c index 193aaa104..350273eb3 100644 --- a/src/backend/utils/adt/age_session_info.c +++ b/src/backend/utils/adt/age_session_info.c @@ -107,7 +107,7 @@ char *get_session_info_cypher_statement(void) /* function to return the state of the session info data */ bool is_session_info_prepared(void) { - /* is the session infor prepared AND is the pid the same pid */ + /* is the session info prepared AND is the pid the same pid */ if (session_info_prepared == true && session_info_pid == getpid()) { diff --git a/src/backend/utils/adt/age_vle.c b/src/backend/utils/adt/age_vle.c index ad54bc929..f86a9e9b7 100644 --- a/src/backend/utils/adt/age_vle.c +++ b/src/backend/utils/adt/age_vle.c @@ -522,7 +522,7 @@ static VLE_local_context *build_local_vle_context(FunctionCallInfo fcinfo, /* * No context change is needed here as the cache entry is in the proper * context. Additionally, all of the modifications are either pointers - * to objects already in the proper context or primative types that will + * to objects already in the proper context or primitive types that will * be stored in that context since the memory is allocated there. */ @@ -1324,7 +1324,7 @@ static VLE_path_container *create_VLE_path_container(int64 path_size) /* allocate the container */ vpc = palloc0(container_size_bytes); - /* initialze the PG headers */ + /* initialize the PG headers */ SET_VARSIZE(vpc, container_size_bytes); /* initialize the container */ @@ -1921,8 +1921,8 @@ Datum age_match_two_vle_edges(PG_FUNCTION_ARGS) /* * This function is used when we need to know if the passed in id is at the end - * of a path. The first arg is the path the second is the vertex id to check and - * the last is a boolean that syas whether to check the start or the end of the + * of a path. The first arg is the path, the second is the vertex id to check and + * the last is a boolean that says whether to check the start or the end of the * vle path. */ PG_FUNCTION_INFO_V1(age_match_vle_edge_to_id_qual); @@ -2007,7 +2007,7 @@ Datum age_match_vle_edge_to_id_qual(PG_FUNCTION_ARGS) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("match_vle_terminal_edge() arguement 1 must be an agtype integer or a graphid"))); + errmsg("match_vle_terminal_edge() argument 1 must be an agtype integer or a graphid"))); } pos_agt = AG_GET_ARG_AGTYPE_P(2); @@ -2247,7 +2247,7 @@ Datum age_match_vle_terminal_edge(PG_FUNCTION_ARGS) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("match_vle_terminal_edge() arguement 1 must be an agtype integer or a graphid"))); + errmsg("match_vle_terminal_edge() argument 1 must be an agtype integer or a graphid"))); } /* get the veid */ @@ -2277,7 +2277,7 @@ Datum age_match_vle_terminal_edge(PG_FUNCTION_ARGS) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("match_vle_terminal_edge() arguement 2 must be an agtype integer or a graphid"))); + errmsg("match_vle_terminal_edge() argument 2 must be an agtype integer or a graphid"))); } /* compare the path beginning or end points */ @@ -2374,7 +2374,7 @@ Datum age_build_vle_match_edge(PG_FUNCTION_ARGS) /* * This function checks the edges in a MATCH clause to see if they are unique or * not. Filters out all the paths where the edge uniques rules are not met. - * Arguements can be a combination of agtype ints and VLE_path_containers. + * Arguments can be a combination of agtype ints and VLE_path_containers. */ PG_FUNCTION_INFO_V1(_ag_enforce_edge_uniqueness); diff --git a/src/backend/utils/name_validation.c b/src/backend/utils/name_validation.c index d96f3154c..2ee998dea 100644 --- a/src/backend/utils/name_validation.c +++ b/src/backend/utils/name_validation.c @@ -48,7 +48,7 @@ int is_valid_graph_name(const char *graph_name) * Returns whether the label name is valid. * * Note: label_type parameter is not used in this implementation. - * It should be used if validation algorithm for edge and vetex + * It should be used if validation algorithm for edge and vertex * differs in future. * * @param label_name name of the label diff --git a/src/include/executor/cypher_utils.h b/src/include/executor/cypher_utils.h index 4d19937f6..469b729bb 100644 --- a/src/include/executor/cypher_utils.h +++ b/src/include/executor/cypher_utils.h @@ -34,7 +34,7 @@ /* * When executing the children of the CREATE, SET, REMOVE, and - * DELETE clasues, we need to alter the command id in the estate + * DELETE clauses, we need to alter the command id in the estate * and the snapshot. That way we can hide the modified tuples from * the sub clauses that should not know what their parent clauses are * doing. diff --git a/src/include/nodes/cypher_nodes.h b/src/include/nodes/cypher_nodes.h index 792edde35..66807068f 100644 --- a/src/include/nodes/cypher_nodes.h +++ b/src/include/nodes/cypher_nodes.h @@ -310,7 +310,7 @@ typedef struct cypher_target_node /* * Attribute number this entity needs to be stored in * for parent execution nodes to reference it. If the - * entity is a varaible (CYPHER_TARGET_NODE_IS_VAR). + * entity is a variable (CYPHER_TARGET_NODE_IS_VAR). */ AttrNumber tuple_position; } cypher_target_node; @@ -323,7 +323,7 @@ typedef struct cypher_target_node * a variable that was already created AND created in the * same clause. */ -#define EXISTING_VARAIBLE_DECLARED_SAME_CLAUSE 0x0002 +#define EXISTING_VARIABLE_DECLARED_SAME_CLAUSE 0x0002 //node is the first instance of a declared variable #define CYPHER_TARGET_NODE_IS_VAR 0x0004 @@ -346,7 +346,7 @@ typedef struct cypher_target_node * later. We don't need to check to see if the vertex still exists. */ #define SAFE_TO_SKIP_EXISTENCE_CHECK(flags) \ - (flags & EXISTING_VARAIBLE_DECLARED_SAME_CLAUSE) + (flags & EXISTING_VARIABLE_DECLARED_SAME_CLAUSE) #define CYPHER_TARGET_NODE_INSERT_ENTITY(flags) \ (flags & CYPHER_TARGET_NODE_FLAG_INSERT) diff --git a/src/include/nodes/cypher_readfuncs.h b/src/include/nodes/cypher_readfuncs.h index 5d4b0a526..e3bb97a33 100644 --- a/src/include/nodes/cypher_readfuncs.h +++ b/src/include/nodes/cypher_readfuncs.h @@ -27,7 +27,7 @@ /* * Deserialization functions for AGE's ExtensibleNodes. We assign - * each node to its deserialization functionin the DEFINE_NODE_METHODS + * each node to its deserialization function in the DEFINE_NODE_METHODS * and DEFINE_NODE_METHODS_EXTENDED macros in ag_nodes.c. * diff --git a/src/include/parser/cypher_transform_entity.h b/src/include/parser/cypher_transform_entity.h index 3c024062a..5732c833b 100644 --- a/src/include/parser/cypher_transform_entity.h +++ b/src/include/parser/cypher_transform_entity.h @@ -53,7 +53,7 @@ typedef struct /* * MATCH clauses are transformed into a select * FROM ... JOIN, etc - * We need to know wheter the table that this entity represents is + * We need to know whether the table that this entity represents is * part of the join tree. If a cypher_node does not meet the conditions * set in INCLUDE_NODE_IN_JOIN_TREE. Then we can skip the node when * constructing our join tree. The entities around this particular entity @@ -63,7 +63,7 @@ typedef struct /* * The parse data structure will be transformed into an Expr that represents - * the entity. When contructing the join tree, we need to know what it was + * the entity. When constructing the join tree, we need to know what it was * turned into. If the entity was originally created in a previous clause, * this will be a Var that we need to reference to extract the id, startid, * endid for the join. If the entity was created in the current clause, then diff --git a/src/include/utils/load/csv.h b/src/include/utils/load/csv.h index 8549084f5..fd1edb4d9 100644 --- a/src/include/utils/load/csv.h +++ b/src/include/utils/load/csv.h @@ -43,7 +43,7 @@ extern "C" { #define CSV_STRICT 1 /* enable strict mode */ #define CSV_REPALL_NL 2 /* report all unquoted carriage returns and linefeeds */ #define CSV_STRICT_FINI 4 /* causes csv_fini to return CSV_EPARSE if last - field is quoted and doesn't containg ending + field is quoted and doesn't contain ending quote */ #define CSV_APPEND_NULL 8 /* Ensure that all fields are null-terminated */ #define CSV_EMPTY_IS_NULL 16 /* Pass null pointer to cb1 function when @@ -61,7 +61,7 @@ extern "C" { struct csv_parser { int pstate; /* Parser state */ int quoted; /* Is the current field a quoted field? */ - size_t spaces; /* Number of continious spaces after quote or in a non-quoted field */ + size_t spaces; /* Number of continuous spaces after quote or in a non-quoted field */ unsigned char * entry_buf; /* Entry buffer */ size_t entry_pos; /* Current position in entry_buf (and current size of entry) */ size_t entry_size; /* Size of entry buffer */ From e39681551f403addbfb74c51596350521d5b780a Mon Sep 17 00:00:00 2001 From: Rafsun Masud Date: Tue, 3 Jan 2023 17:26:52 -0500 Subject: [PATCH 084/191] Fix bug #339 - entities in WHERE clause have wrong Expr (#391) Whenever a node or an edge within a WHERE clause uses a Var type expr retrieved from a different cypher parsestate, the Var->varlevelsup is adjusted. --- regress/expected/cypher_match.out | 80 ++++++++++++++++++++ regress/sql/cypher_match.sql | 44 +++++++++++ src/backend/parser/cypher_clause.c | 5 +- src/backend/parser/cypher_transform_entity.c | 31 ++++++++ src/include/parser/cypher_transform_entity.h | 2 + 5 files changed, 159 insertions(+), 3 deletions(-) diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index 475739255..6ff9a3c6e 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -1000,6 +1000,73 @@ SELECT * FROM cypher('cypher_match', $$ "nobody" | | | "anybody" | | (12 rows) +-- +-- Tests retrieving Var from some parent's cpstate during transformation +-- +SELECT create_graph('test_retrieve_var'); +NOTICE: graph "test_retrieve_var" has been created + create_graph +-------------- + +(1 row) + +SELECT * FROM cypher('test_retrieve_var', $$ CREATE (:A)-[:incs]->(:C) $$) as (a agtype); + a +--- +(0 rows) + +-- Tests with node Var +-- both queries should return the same result +-- first query does not retrieve any variable from any parent's cpstate +-- second query retrieves variable 'a', inside WHERE, from parent's parent's cpstate +SELECT * FROM cypher('test_retrieve_var', $$ + MATCH (a:A) WITH a + OPTIONAL MATCH (a)-[:incs]->(c) + WHERE EXISTS((c)<-[:incs]-()) + RETURN a, c +$$) AS (a agtype, c agtype); + a | c +-----------------------------------------------------------------+------------------------------------------------------------------ + {"id": 844424930131969, "label": "A", "properties": {}}::vertex | {"id": 1407374883553281, "label": "C", "properties": {}}::vertex +(1 row) + +SELECT * FROM cypher('test_retrieve_var', $$ + MATCH (a:A) WITH a + OPTIONAL MATCH (a)-[:incs]->(c) + WHERE EXISTS((c)<-[:incs]-(a)) + RETURN a, c +$$) AS (a agtype, c agtype); + a | c +-----------------------------------------------------------------+------------------------------------------------------------------ + {"id": 844424930131969, "label": "A", "properties": {}}::vertex | {"id": 1407374883553281, "label": "C", "properties": {}}::vertex +(1 row) + +-- Tests with edge Var +-- both queries should return the same result +-- first query does not retrieve any variable from any parent's cpstate +-- second query retrieves variable 'r', inside WHERE, from parent's parent's cpstate +SELECT * FROM cypher('test_retrieve_var', $$ + MATCH (a:A)-[r:incs]->() WITH a, r + OPTIONAL MATCH (a)-[r]->(c) + WHERE EXISTS(()<-[]-(c)) + RETURN a, r +$$) AS (a agtype, r agtype); + a | r +-----------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "A", "properties": {}}::vertex | {"id": 1125899906842625, "label": "incs", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {}}::edge +(1 row) + +SELECT * FROM cypher('test_retrieve_var', $$ + MATCH (a:A)-[r:incs]->() WITH a, r + OPTIONAL MATCH (a)-[r]->(c) + WHERE EXISTS(()<-[r]-(c)) + RETURN a, r +$$) AS (a agtype, r agtype); + a | r +-----------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "A", "properties": {}}::vertex | {"id": 1125899906842625, "label": "incs", "end_id": 1407374883553281, "start_id": 844424930131969, "properties": {}}::edge +(1 row) + -- -- JIRA: AGE2-544 -- @@ -1135,6 +1202,19 @@ NOTICE: graph "cypher_match" has been dropped (1 row) +SELECT drop_graph('test_retrieve_var', true); +NOTICE: drop cascades to 5 other objects +DETAIL: drop cascades to table test_retrieve_var._ag_label_vertex +drop cascades to table test_retrieve_var._ag_label_edge +drop cascades to table test_retrieve_var."A" +drop cascades to table test_retrieve_var.incs +drop cascades to table test_retrieve_var."C" +NOTICE: graph "test_retrieve_var" has been dropped + drop_graph +------------ + +(1 row) + -- -- End -- diff --git a/regress/sql/cypher_match.sql b/regress/sql/cypher_match.sql index 11282961c..c4c48bf76 100644 --- a/regress/sql/cypher_match.sql +++ b/regress/sql/cypher_match.sql @@ -501,6 +501,49 @@ SELECT * FROM cypher('cypher_match', $$ ORDER BY n, p, m, q $$) AS (n agtype, r agtype, p agtype, m agtype, s agtype, q agtype); + +-- +-- Tests retrieving Var from some parent's cpstate during transformation +-- +SELECT create_graph('test_retrieve_var'); +SELECT * FROM cypher('test_retrieve_var', $$ CREATE (:A)-[:incs]->(:C) $$) as (a agtype); + +-- Tests with node Var +-- both queries should return the same result +-- first query does not retrieve any variable from any parent's cpstate +-- second query retrieves variable 'a', inside WHERE, from parent's parent's cpstate +SELECT * FROM cypher('test_retrieve_var', $$ + MATCH (a:A) WITH a + OPTIONAL MATCH (a)-[:incs]->(c) + WHERE EXISTS((c)<-[:incs]-()) + RETURN a, c +$$) AS (a agtype, c agtype); + +SELECT * FROM cypher('test_retrieve_var', $$ + MATCH (a:A) WITH a + OPTIONAL MATCH (a)-[:incs]->(c) + WHERE EXISTS((c)<-[:incs]-(a)) + RETURN a, c +$$) AS (a agtype, c agtype); + +-- Tests with edge Var +-- both queries should return the same result +-- first query does not retrieve any variable from any parent's cpstate +-- second query retrieves variable 'r', inside WHERE, from parent's parent's cpstate +SELECT * FROM cypher('test_retrieve_var', $$ + MATCH (a:A)-[r:incs]->() WITH a, r + OPTIONAL MATCH (a)-[r]->(c) + WHERE EXISTS(()<-[]-(c)) + RETURN a, r +$$) AS (a agtype, r agtype); + +SELECT * FROM cypher('test_retrieve_var', $$ + MATCH (a:A)-[r:incs]->() WITH a, r + OPTIONAL MATCH (a)-[r]->(c) + WHERE EXISTS(()<-[r]-(c)) + RETURN a, r +$$) AS (a agtype, r agtype); + -- -- JIRA: AGE2-544 -- @@ -561,6 +604,7 @@ $$) as (n agtype); -- Clean up -- SELECT drop_graph('cypher_match', true); +SELECT drop_graph('test_retrieve_var', true); -- -- End diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 9b0c76e17..a541fb4fc 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -4146,7 +4146,7 @@ static Expr *transform_cypher_edge(cypher_parsestate *cpstate, if (entity != NULL) { - return entity->expr; + return get_relative_expr(entity, 2); } else { @@ -4294,10 +4294,9 @@ static Expr *transform_cypher_node(cypher_parsestate *cpstate, */ transform_entity *entity = find_variable(parent_cpstate, node->name); - if (entity != NULL) { - return entity->expr; + return get_relative_expr(entity, 2); } else { diff --git a/src/backend/parser/cypher_transform_entity.c b/src/backend/parser/cypher_transform_entity.c index 6d4b2c753..b80c22811 100644 --- a/src/backend/parser/cypher_transform_entity.c +++ b/src/backend/parser/cypher_transform_entity.c @@ -152,3 +152,34 @@ char *get_entity_name(transform_entity *entity) return NULL; } + +/* + * Returns entity->expr relative to the current cpstate. + * + * For example, + * If entity is from current cpstate, its levelsup = 0. + * If entity is from immediate parent cpstate, its levelsup = 1. + * If entity is from parent's parent's cpstate, its levelsup = 2. + * + * Relative Expr is necessary when entity->expr is a Var and the entity + * is not from the current cpstate. In this case, Var->varlevelsup must + * reflect the distance between source cpstate of the entity and the + * cpstate where the Var is being used. + */ +Expr *get_relative_expr(transform_entity *entity, Index levelsup) +{ + Var *var; + Var *updated_var; + + if (!IsA(entity->expr, Var)) + { + return entity->expr; + } + + var = (Var *)entity->expr; + updated_var = makeVar(var->varno, var->varattno, var->vartype, + var->vartypmod, var->varcollid, + var->varlevelsup + levelsup); + + return (Expr *)updated_var; +} diff --git a/src/include/parser/cypher_transform_entity.h b/src/include/parser/cypher_transform_entity.h index 5732c833b..79a8a336d 100644 --- a/src/include/parser/cypher_transform_entity.h +++ b/src/include/parser/cypher_transform_entity.h @@ -24,6 +24,7 @@ #include "parser/parse_node.h" #include "nodes/cypher_nodes.h" +#include "nodes/makefuncs.h" #include "parser/cypher_parse_node.h" enum transform_entity_type @@ -93,5 +94,6 @@ transform_entity *make_transform_entity(cypher_parsestate *cpstate, enum transform_entity_type type, Node *node, Expr *expr); char *get_entity_name(transform_entity *entity); +Expr *get_relative_expr(transform_entity *entity, Index levelsup); #endif From f7bb3b1e3c4b1fb003a36685fd9724fc1094ad71 Mon Sep 17 00:00:00 2001 From: Rafsun Masud Date: Wed, 4 Jan 2023 13:30:39 -0500 Subject: [PATCH 085/191] Update SET clause to support assigning a map to a variable (#468) For example, 'SET v = {..}' will remove all properties of v and set the provided map as its properties. --- regress/expected/cypher_set.out | 111 ++++++++++++++++++++++++++++- regress/sql/cypher_set.sql | 52 ++++++++++++++ src/backend/executor/cypher_set.c | 20 +++--- src/backend/parser/cypher_clause.c | 103 ++++++++++++++++++-------- src/backend/utils/adt/agtype.c | 51 +++++++++++++ src/include/utils/agtype.h | 1 + 6 files changed, 301 insertions(+), 37 deletions(-) diff --git a/regress/expected/cypher_set.out b/regress/expected/cypher_set.out index 5cd42ee97..74b3c17b2 100644 --- a/regress/expected/cypher_set.out +++ b/regress/expected/cypher_set.out @@ -374,7 +374,7 @@ ERROR: undefined reference to variable wrong_var in SET clause LINE 1: ...ELECT * FROM cypher('cypher_set', $$MATCH (n) SET wrong_var.... ^ SELECT * FROM cypher('cypher_set', $$MATCH (n) SET i = 3$$) AS (a agtype); -ERROR: SET clause expects a variable name +ERROR: SET clause expects a map LINE 1: ...ELECT * FROM cypher('cypher_set', $$MATCH (n) SET i = 3$$) A... ^ -- @@ -667,6 +667,100 @@ SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); {"id": 2533274790395905, "label": "end", "properties": {"i": {}, "j": 3}}::vertex (13 rows) +-- +-- Test entire property update +-- +SELECT * FROM create_graph('cypher_set_1'); +NOTICE: graph "cypher_set_1" has been created + create_graph +-------------- + +(1 row) + +SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Andy {name:'Andy', age:36, hungry:true}) $$) AS (a agtype); + a +--- +(0 rows) + +SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Peter {name:'Peter', age:34}) $$) AS (a agtype); + a +--- +(0 rows) + +SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Kevin {name:'Kevin', age:32, hungry:false}) $$) AS (a agtype); + a +--- +(0 rows) + +SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Matt {name:'Matt', city:'Toronto'}) $$) AS (a agtype); + a +--- +(0 rows) + +SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Juan {name:'Juan', role:'admin'}) $$) AS (a agtype); + a +--- +(0 rows) + +-- test copying properties between entities +SELECT * FROM cypher('cypher_set_1', $$ + MATCH (at {name: 'Andy'}), (pn {name: 'Peter'}) + SET at = properties(pn) + RETURN at, pn +$$) AS (at agtype, pn agtype); + at | pn +----------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------ + {"id": 844424930131969, "label": "Andy", "properties": {"age": 34, "name": "Peter"}}::vertex | {"id": 1125899906842625, "label": "Peter", "properties": {"age": 34, "name": "Peter"}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_set_1', $$ + MATCH (at {name: 'Kevin'}), (pn {name: 'Matt'}) + SET at = pn + RETURN at, pn +$$) AS (at agtype, pn agtype); + at | pn +-------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------ + {"id": 1407374883553281, "label": "Kevin", "properties": {"city": "Toronto", "name": "Matt"}}::vertex | {"id": 1688849860263937, "label": "Matt", "properties": {"city": "Toronto", "name": "Matt"}}::vertex +(1 row) + +-- test replacing all properties using a map and = +SELECT * FROM cypher('cypher_set_1', $$ + MATCH (m {name: 'Matt'}) + SET m = {name: 'Peter Smith', position: 'Entrepreneur', city:NULL} + RETURN m +$$) AS (m agtype); + m +----------------------------------------------------------------------------------------------------------------------- + {"id": 1407374883553281, "label": "Kevin", "properties": {"name": "Peter Smith", "position": "Entrepreneur"}}::vertex + {"id": 1688849860263937, "label": "Matt", "properties": {"name": "Peter Smith", "position": "Entrepreneur"}}::vertex +(2 rows) + +-- test removing all properties using an empty map and = +SELECT * FROM cypher('cypher_set_1', $$ + MATCH (p {name: 'Juan'}) + SET p = {} + RETURN p +$$) AS (p agtype); + p +--------------------------------------------------------------------- + {"id": 1970324836974593, "label": "Juan", "properties": {}}::vertex +(1 row) + +-- test assigning non-map to an enitity +SELECT * FROM cypher('cypher_set_1', $$ + MATCH (p {name: 'Peter'}) + SET p = "Peter" + RETURN p +$$) AS (p agtype); +ERROR: SET clause expects a map +LINE 3: SET p = "Peter" + ^ +SELECT * FROM cypher('cypher_set_1', $$ + MATCH (p {name: 'Peter'}) + SET p = sqrt(4) + RETURN p +$$) AS (p agtype); +ERROR: a map is expected -- -- Clean up -- @@ -689,4 +783,19 @@ NOTICE: graph "cypher_set" has been dropped (1 row) +SELECT drop_graph('cypher_set_1', true); +NOTICE: drop cascades to 7 other objects +DETAIL: drop cascades to table cypher_set_1._ag_label_vertex +drop cascades to table cypher_set_1._ag_label_edge +drop cascades to table cypher_set_1."Andy" +drop cascades to table cypher_set_1."Peter" +drop cascades to table cypher_set_1."Kevin" +drop cascades to table cypher_set_1."Matt" +drop cascades to table cypher_set_1."Juan" +NOTICE: graph "cypher_set_1" has been dropped + drop_graph +------------ + +(1 row) + -- diff --git a/regress/sql/cypher_set.sql b/regress/sql/cypher_set.sql index 76a3a0258..b408c5529 100644 --- a/regress/sql/cypher_set.sql +++ b/regress/sql/cypher_set.sql @@ -204,12 +204,64 @@ SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = {} RETURN n$$) AS (a ag SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); +-- +-- Test entire property update +-- +SELECT * FROM create_graph('cypher_set_1'); + +SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Andy {name:'Andy', age:36, hungry:true}) $$) AS (a agtype); +SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Peter {name:'Peter', age:34}) $$) AS (a agtype); +SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Kevin {name:'Kevin', age:32, hungry:false}) $$) AS (a agtype); +SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Matt {name:'Matt', city:'Toronto'}) $$) AS (a agtype); +SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Juan {name:'Juan', role:'admin'}) $$) AS (a agtype); + +-- test copying properties between entities +SELECT * FROM cypher('cypher_set_1', $$ + MATCH (at {name: 'Andy'}), (pn {name: 'Peter'}) + SET at = properties(pn) + RETURN at, pn +$$) AS (at agtype, pn agtype); + +SELECT * FROM cypher('cypher_set_1', $$ + MATCH (at {name: 'Kevin'}), (pn {name: 'Matt'}) + SET at = pn + RETURN at, pn +$$) AS (at agtype, pn agtype); + +-- test replacing all properties using a map and = +SELECT * FROM cypher('cypher_set_1', $$ + MATCH (m {name: 'Matt'}) + SET m = {name: 'Peter Smith', position: 'Entrepreneur', city:NULL} + RETURN m +$$) AS (m agtype); + +-- test removing all properties using an empty map and = +SELECT * FROM cypher('cypher_set_1', $$ + MATCH (p {name: 'Juan'}) + SET p = {} + RETURN p +$$) AS (p agtype); + +-- test assigning non-map to an enitity +SELECT * FROM cypher('cypher_set_1', $$ + MATCH (p {name: 'Peter'}) + SET p = "Peter" + RETURN p +$$) AS (p agtype); + +SELECT * FROM cypher('cypher_set_1', $$ + MATCH (p {name: 'Peter'}) + SET p = sqrt(4) + RETURN p +$$) AS (p agtype); + -- -- Clean up -- DROP TABLE tbl; DROP FUNCTION set_test; SELECT drop_graph('cypher_set', true); +SELECT drop_graph('cypher_set_1', true); -- diff --git a/src/backend/executor/cypher_set.c b/src/backend/executor/cypher_set.c index 8baea711a..e095cb610 100644 --- a/src/backend/executor/cypher_set.c +++ b/src/backend/executor/cypher_set.c @@ -452,14 +452,18 @@ static void process_update_list(CustomScanState *node) new_property_value = DATUM_GET_AGTYPE_P(scanTupleSlot->tts_values[update_item->prop_position - 1]); } - /* - * Alter the properties Agtype value to contain or remove the updated - * property. - */ - altered_properties = alter_property_value(original_properties, - update_item->prop_name, - new_property_value, - remove_property); + // Alter the properties Agtype value. + if (strcmp(update_item->prop_name, "")) + { + altered_properties = alter_property_value(original_properties, + update_item->prop_name, + new_property_value, + remove_property); + } + else + { + altered_properties = get_map_from_agtype(new_property_value); + } resultRelInfo = create_entity_result_rel_info(estate, css->set_list->graph_name, diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index a541fb4fc..4c1032770 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -1610,17 +1610,52 @@ cypher_update_information *transform_cypher_set_item_list( A_Indirection *ind; char *variable_name, *property_name; Value *property_node, *variable_node; + int is_entire_prop_update = 0; // true if a map is assigned to variable - // ColumnRef may come according to the Parser rule. - if (!IsA(set_item->prop, A_Indirection)) + // LHS of set_item must be a variable or an indirection. + if (IsA(set_item->prop, ColumnRef)) { - ereport(ERROR, - (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), + /* + * A variable can only be assigned a map, a function call that + * evaluates to a map, or a variable. + * + * In case of a function call, whether it actually evaluates to + * map is checked in the execution stage. + */ + if (!is_ag_node(set_item->expr, cypher_map) && + !IsA(set_item->expr, FuncCall) && + !IsA(set_item->expr, ColumnRef)) + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("SET clause expects a map"), + parser_errposition(pstate, set_item->location))); + } + + is_entire_prop_update = 1; + + /* + * In case of a variable, it is wrapped as an argument to + * the 'properties' function. + */ + if (IsA(set_item->expr, ColumnRef)) + { + List *qualified_name, *args; + + qualified_name = list_make2(makeString("ag_catalog"), + makeString("age_properties")); + args = list_make1(set_item->expr); + set_item->expr = (Node *)makeFuncCall(qualified_name, args, + -1); + } + } + else if (!IsA(set_item->prop, A_Indirection)) + { + ereport(ERROR, (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), errmsg("SET clause expects a variable name"), parser_errposition(pstate, set_item->location))); } - ind = (A_Indirection *)set_item->prop; item = make_ag_node(cypher_update_item); if (!is_ag_node(lfirst(li), cypher_set_item)) @@ -1640,9 +1675,42 @@ cypher_update_information *transform_cypher_set_item_list( item->remove_item = false; - // extract variable name - ref = (ColumnRef *)ind->arg; + // set variable and extract property name + if (is_entire_prop_update) + { + ref = (ColumnRef *)set_item->prop; + item->prop_name = NULL; + } + else + { + ind = (A_Indirection *)set_item->prop; + ref = (ColumnRef *)ind->arg; + + // extract property name + if (list_length(ind->indirection) != 1) + { + ereport( + ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg( + "SET clause doesnt not support updating maps or lists in a property"), + parser_errposition(pstate, set_item->location))); + } + + property_node = linitial(ind->indirection); + if (!IsA(property_node, String)) + { + ereport(ERROR, + (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), + errmsg("SET clause expects a property name"), + parser_errposition(pstate, set_item->location))); + } + property_name = property_node->val.str; + item->prop_name = property_name; + } + + // extract variable name variable_node = linitial(ref->fields); if (!IsA(variable_node, String)) { @@ -1666,27 +1734,6 @@ cypher_update_information *transform_cypher_set_item_list( parser_errposition(pstate, set_item->location))); } - // extract property name - if (list_length(ind->indirection) != 1) - { - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("SET clause does not support updating maps or lists in a property"), - parser_errposition(pstate, set_item->location))); - } - - property_node = linitial(ind->indirection); - if (!IsA(property_node, String)) - { - ereport(ERROR, - (errcode(ERRCODE_INVALID_COLUMN_REFERENCE), - errmsg("SET clause expects a property name"), - parser_errposition(pstate, set_item->location))); - } - - property_name = property_node->val.str; - item->prop_name = property_name; - // create target entry for the new property value item->prop_position = (AttrNumber)pstate->p_next_resno; target_item = transform_cypher_item(cpstate, set_item->expr, NULL, diff --git a/src/backend/utils/adt/agtype.c b/src/backend/utils/adt/agtype.c index 6c1a50009..ff97378c2 100644 --- a/src/backend/utils/adt/agtype.c +++ b/src/backend/utils/adt/agtype.c @@ -8395,6 +8395,57 @@ agtype_value *alter_property_value(agtype_value *properties, char *var_name, return parsed_agtype_value; } +/** + * Returns the map contained within the provided agtype. + */ +agtype_value *get_map_from_agtype(agtype *a) +{ + agtype_iterator *it; + agtype_iterator_token tok = WAGT_DONE; + agtype_parse_state *parse_state = NULL; + agtype_value *key; + agtype_value *value; + agtype_value *parsed_agtype_value = NULL; + + key = palloc0(sizeof(agtype_value)); + value = palloc0(sizeof(agtype_value)); + it = agtype_iterator_init(&a->root); + tok = agtype_iterator_next(&it, key, true); + + if (tok != WAGT_BEGIN_OBJECT) + { + ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("a map is expected"))); + } + + parsed_agtype_value = push_agtype_value(&parse_state, WAGT_BEGIN_OBJECT, + NULL); + + while (true) + { + tok = agtype_iterator_next(&it, key, true); + + if (tok == WAGT_DONE || tok == WAGT_END_OBJECT) + { + break; + } + + agtype_iterator_next(&it, value, true); + + if (value->type != AGTV_NULL) + { + parsed_agtype_value = push_agtype_value(&parse_state, WAGT_KEY, + key); + parsed_agtype_value = push_agtype_value(&parse_state, WAGT_VALUE, + value); + } + } + + parsed_agtype_value = push_agtype_value(&parse_state, WAGT_END_OBJECT, + NULL); + return parsed_agtype_value; +} + /* * Helper function to extract 1 datum from a variadic "any" and convert, if * possible, to an agtype, if it isn't already. diff --git a/src/include/utils/agtype.h b/src/include/utils/agtype.h index c7eab03ad..5f45eac21 100644 --- a/src/include/utils/agtype.h +++ b/src/include/utils/agtype.h @@ -523,6 +523,7 @@ bool is_decimal_needed(char *numstr); int compare_agtype_scalar_values(agtype_value *a, agtype_value *b); agtype_value *alter_property_value(agtype_value *properties, char *var_name, agtype *new_v, bool remove_property); +agtype_value *get_map_from_agtype(agtype *a); agtype *get_one_agtype_from_variadic_args(FunctionCallInfo fcinfo, int variadic_offset, From 0e96fbbf9d6cfb997b8d75da2c8dab1211915319 Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Wed, 4 Jan 2023 16:21:02 -0800 Subject: [PATCH 086/191] Patch to address PR 203 that appears to be inactive. This patch is credited to deem0n (Dmitriy Dorofeev). Many thanks! Fixed a typo that causes a backup of a passed in variable to become indeterminate. This, in turn, caused the restoration of that variable to become indeterminate. Fixed a typo that caused the incorrect hash, label_name_graph_cache_hash, to be initialized instead of, label_oid_cache_hash. Added the ag_graph and ag_label tables to the pg_dump output. --- age--1.1.0.sql | 6 ++++++ src/backend/executor/cypher_set.c | 2 +- src/backend/utils/cache/ag_cache.c | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/age--1.1.0.sql b/age--1.1.0.sql index a32d2b559..54f0f304a 100644 --- a/age--1.1.0.sql +++ b/age--1.1.0.sql @@ -29,6 +29,9 @@ CREATE TABLE ag_graph ( namespace regnamespace NOT NULL ) WITH (OIDS); +-- include content of the ag_graph table into the pg_dump output +SELECT pg_catalog.pg_extension_config_dump('ag_graph', ''); + CREATE UNIQUE INDEX ag_graph_oid_index ON ag_graph USING btree (oid); CREATE UNIQUE INDEX ag_graph_name_index ON ag_graph USING btree (name); @@ -51,6 +54,9 @@ CREATE TABLE ag_label ( seq_name name NOT NULL ) WITH (OIDS); +-- include content of the ag_label table into the pg_dump output +SELECT pg_catalog.pg_extension_config_dump('ag_label', ''); + CREATE UNIQUE INDEX ag_label_oid_index ON ag_label USING btree (oid); CREATE UNIQUE INDEX ag_label_name_graph_index diff --git a/src/backend/executor/cypher_set.c b/src/backend/executor/cypher_set.c index e095cb610..a765d12ea 100644 --- a/src/backend/executor/cypher_set.c +++ b/src/backend/executor/cypher_set.c @@ -117,7 +117,7 @@ static HeapTuple update_entity_tuple(ResultRelInfo *resultRelInfo, HTSU_Result update_result; Buffer buffer; - ResultRelInfo *saved_resultRelInfo = saved_resultRelInfo;; + ResultRelInfo *saved_resultRelInfo = estate->es_result_relation_info; estate->es_result_relation_info = resultRelInfo; lockmode = ExecUpdateLockMode(estate, resultRelInfo); diff --git a/src/backend/utils/cache/ag_cache.c b/src/backend/utils/cache/ag_cache.c index 95e5d0df3..6501476c6 100644 --- a/src/backend/utils/cache/ag_cache.c +++ b/src/backend/utils/cache/ag_cache.c @@ -688,7 +688,7 @@ static void flush_label_oid_cache(void) { HASH_SEQ_STATUS hash_seq; - hash_seq_init(&hash_seq, label_name_graph_cache_hash); + hash_seq_init(&hash_seq, label_oid_cache_hash); for (;;) { label_cache_data *entry; From 218e4c83efd1bdce6ac1d2648c8350699a2aead5 Mon Sep 17 00:00:00 2001 From: Hunaid Sohail <76044242+Hunaid2000@users.noreply.github.com> Date: Thu, 5 Jan 2023 09:32:59 +0500 Subject: [PATCH 087/191] Issue #388 - Fix python driver build from source (#389) * Fixed a bug where python driver throws error when build from source * Moved required packages to requirements.txt * Update Readme Rearranged instructions and added instructions to install from requirements.txt * Fixed a typo in exceptions.py file Fixed a typo 'SqlExcution' on line 62 in exceptions.py file --- drivers/python/README.md | 15 ++++++++------- drivers/python/requirements.txt | Bin 0 -> 158 bytes drivers/python/setup.py | 4 +--- 3 files changed, 9 insertions(+), 10 deletions(-) create mode 100644 drivers/python/requirements.txt diff --git a/drivers/python/README.md b/drivers/python/README.md index af1705e74..e82e770fc 100644 --- a/drivers/python/README.md +++ b/drivers/python/README.md @@ -11,9 +11,15 @@ AGType parser and driver support for [Apache AGE](https://age.apache.org/), grap ``` sudo apt-get update sudo apt-get install python3-dev libpq-dev -pip install --no-binary :all: psycopg2 -pip install antlr4-python3-runtime==4.9.2 +git clone https://github.com/apache/age.git +cd age/drivers/python +``` + +### Install required packages +``` +pip install -r requirements.txt ``` + ### Test ``` python -m unittest -v test_age_py.py @@ -22,18 +28,13 @@ python -m unittest -v test_agtypes.py ### Build from source ``` -git clone https://github.com/apache/age.git -cd age/drivers/python - python setup.py install - ``` ### Install from PyPi ``` pip install apache-age-python - ``` ### For more information about [Apache AGE](https://age.apache.org/) diff --git a/drivers/python/requirements.txt b/drivers/python/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..918763cbfe5163b75d9480c93ffd02331959529e GIT binary patch literal 158 zcmZ9EK?;LF5CrQS@DF}K59%dC9-~1L!K}-=9{hY_CCAXr&^_HfpLb;A;Lb|qK|@I; zg1Ta4mJK8mCB1ABz5KsbaM2B9{X}Os+Q~fq6KK_m{pZiTn7E0Knyb_DZEs$)ndn}{ G;^hRA Date: Tue, 10 Jan 2023 11:36:44 -0800 Subject: [PATCH 088/191] Updated files for PG11 AGE release to 1.2.0 modified: Makefile modified: README.md modified: RELEASE renamed: age--1.1.0.sql -> age--1.2.0.sql modified: age.control --- Makefile | 2 +- README.md | 2 +- RELEASE | 63 +++++++++++++++++++++----------- age--1.1.0.sql => age--1.2.0.sql | 0 age.control | 2 +- 5 files changed, 44 insertions(+), 25 deletions(-) rename age--1.1.0.sql => age--1.2.0.sql (100%) diff --git a/Makefile b/Makefile index b1d340c78..4b60c7c77 100644 --- a/Makefile +++ b/Makefile @@ -73,7 +73,7 @@ OBJS = src/backend/age.o \ EXTENSION = age -DATA = age--1.1.0.sql +DATA = age--1.2.0.sql # sorted in dependency order REGRESS = scan \ diff --git a/README.md b/README.md index e51068ccc..1850a25ee 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@   - +   diff --git a/RELEASE b/RELEASE index a8369970f..d648e27ee 100644 --- a/RELEASE +++ b/RELEASE @@ -15,28 +15,47 @@ # specific language governing permissions and limitations # under the License. -Release Notes for Apache AGE release v1.1.0 +Release Notes for Apache AGE release v1.2.0 -Apache AGE 1.1.0 - Release Notes +Apache AGE 1.2.0 - Release Notes - Support for Agtype containment ops and GIN Indices. - Add CALL [YIELD] grammar rules for the implementation of CALL procedures. - VLE path variable integration performance patch. - Improve WHERE clause performance and support index scans. - Allow global graph contexts to see currentCommandIds. - Cache Agtype and GRAPHID OIDs. - Allow lists and maps to be used in the SET clause. - Fix bug in aggregate function collect(). - Fix Bug in WHERE clause and property constraints. - Fix VLE local cache bug (crash). - Fix bug where integers were not being serialized correctly when stored in GIN indices. - Fix the VLE peek_stack_head routine to return a NULL if the stack is NULL. - Fix MERGE visibility in chained commands, SET specifically. - Fix github issue #212 - Add access operator (`->`, `->>`) to Agtype. - Fix github issue #220 - fix local cached contexts for static procedures. - Fix github issue #224 - fix regression tests to fix issues on mac with trigonometric functions. - Fix github issue #235 - when MERGE and SET were used together. - Fix github issue #240 - negative array bounds. - Fix github issue #240 - negative array bounds - addendum. - Updated README. + NOTE: Due to additions to core tables, there is no upgrade path from the + previous version. + + Fix Python driver (#388). + Patch to apply PR (#203) - typos and incorrect hash init. + Update SET clause to support assigning a map (#468). + Fix WHERE clause wrong Expr bug (#339). + Fix multiple typos (#470). + Updated the volatility category (from STABLE to IMMUTABLE) of multiple functions. + Graph naming convention now aligns with Cypher spec. (#349). + Fixed README typos (#436). + Create graph instruction fixed (#414). + Readme added for JDBC driver (#383). + Regression tests added (#341). + Regression tests added (#336). + Updated Python driver Readme for clarity. + Fixed compare_agtype_scalar to only return 1, 0, or -1. + Created complete graph function (#342). + Fix Travis CI warning messages. + Updated Golang version to 1.19 (#373). + Fixed NULL pointer on name compare (#376). + Multiple updates to the README.md file. + Implemented CI testing for Golang Driver (#372). + Modify the Python driver's parameterization. + Added license header to new files that it was missing from. + Modify the Golang driver's usage of parameterization. + Added the ability to pass PostgreSQL parameters to the cypher function (specifically for drivers). + Use Debian Buster base image (#243). + Updated the CONTRIBUTING.md file (#348). + Invalid labels now return NULL instead of erroring out. + Removed incubating from overlooked files. + Fixed Golang driver module. + Removed DISCLAIMER file. + Fixed bug in delete_global_graphs. + Fixed EXPLAIN to allow for nested cypher commands. + Fixed bug with Call, YIELD clause ignores WHERE. + Graph names with empty string '' are now disallowed (#251). + Implement CALL YIELD for cypher functions. + Update NOTICE file. diff --git a/age--1.1.0.sql b/age--1.2.0.sql similarity index 100% rename from age--1.1.0.sql rename to age--1.2.0.sql diff --git a/age.control b/age.control index b0fb1401d..ca11e5db1 100644 --- a/age.control +++ b/age.control @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. -default_version = '1.1.0' +default_version = '1.2.0' comment = 'AGE database extension' module_pathname = '$libdir/age' From 69fe25288038def541771d2c83e6a3e83a2dad03 Mon Sep 17 00:00:00 2001 From: Hrishikesh Mallick <65110396+intrigued-rishi@users.noreply.github.com> Date: Mon, 23 Jan 2023 22:45:44 +0530 Subject: [PATCH 089/191] Added some comments for create_graph function (#582) * Added comments for create_graph function --- src/backend/commands/graph_commands.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/backend/commands/graph_commands.c b/src/backend/commands/graph_commands.c index f0074ed2a..4216652bc 100644 --- a/src/backend/commands/graph_commands.c +++ b/src/backend/commands/graph_commands.c @@ -58,6 +58,7 @@ static void rename_graph(const Name graph_name, const Name new_name); PG_FUNCTION_INFO_V1(create_graph); +/* function that is evoked for creating a graph */ Datum create_graph(PG_FUNCTION_ARGS) { char *graph; @@ -65,20 +66,26 @@ Datum create_graph(PG_FUNCTION_ARGS) char *graph_name_str; Oid nsp_id; + //if no argument is passed with the function, graph name cannot be null if (PG_ARGISNULL(0)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("graph name can not be NULL"))); } - graph_name = PG_GETARG_NAME(0); + + //gets graph name as function argument + graph_name = PG_GETARG_NAME(0); graph_name_str = NameStr(*graph_name); + //checking if the name of the graph falls under the pre-decided graph naming conventions(regex) if (!is_valid_graph_name(graph_name_str)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("graph name is invalid"))); } + + //graph name must be unique, a graph with the same name should not exist if (graph_exists(graph_name_str)) { ereport(ERROR, @@ -88,7 +95,8 @@ Datum create_graph(PG_FUNCTION_ARGS) nsp_id = create_schema_for_graph(graph_name); - insert_graph(graph_name, nsp_id); + //inserts the graph info into the relation which has all the other existing graphs info + insert_graph(graph_name, nsp_id); //Increment the Command counter before create the generic labels. CommandCounterIncrement(); @@ -101,7 +109,8 @@ Datum create_graph(PG_FUNCTION_ARGS) ereport(NOTICE, (errmsg("graph \"%s\" has been created", NameStr(*graph_name)))); - PG_RETURN_VOID(); + //according to postgres specification of c-language functions if function returns void this is the syntax + PG_RETURN_VOID(); } static Oid create_schema_for_graph(const Name graph_name) From 2a233e3e2da911bf6bcf186bcb962144ea46cf6d Mon Sep 17 00:00:00 2001 From: moeed-k <99591855+moeed-k@users.noreply.github.com> Date: Thu, 26 Jan 2023 04:41:02 +0500 Subject: [PATCH 090/191] Optimize age_exists function (#586) -age_exists, which is the executor for exists(property) function, was making up to 3 redundant memory accesses. -exists(property) predicate function only serves to check if a property exists or not. -In Cypher, if a property is assigned the value of NULL, this is considered the same as the property not existing at all. Thus the function calls to get the value type is not needed as the check for the null argument itself filters out all NULL inputs. If a property passes this check, it implies existence. --- src/backend/utils/adt/agtype.c | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/backend/utils/adt/agtype.c b/src/backend/utils/adt/agtype.c index ff97378c2..62ecd8b30 100644 --- a/src/backend/utils/adt/agtype.c +++ b/src/backend/utils/adt/agtype.c @@ -5449,26 +5449,10 @@ PG_FUNCTION_INFO_V1(age_exists); */ Datum age_exists(PG_FUNCTION_ARGS) { - agtype *agt_arg = NULL; - agtype_value *agtv_value = NULL; - /* check for NULL, NULL is FALSE */ if (PG_ARGISNULL(0)) PG_RETURN_BOOL(false); - /* get the argument */ - agt_arg = AG_GET_ARG_AGTYPE_P(0); - - /* check for a scalar AGTV_NULL */ - if (AGT_ROOT_IS_SCALAR(agt_arg)) - { - agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); - - /* again, if NULL, NULL is FALSE */ - if (agtv_value->type == AGTV_NULL) - PG_RETURN_BOOL(false); - } - /* otherwise, we have something, and something is TRUE */ PG_RETURN_BOOL(true); } From cbde5802960297b18f126c239078c69a1ef83c1d Mon Sep 17 00:00:00 2001 From: Rafsun Masud Date: Tue, 31 Jan 2023 19:07:27 -0500 Subject: [PATCH 091/191] Implement plus-equal operator in SET clause (#638) Additional changes: Null properties are removed from cypher maps in certain cases. A new property `cypher_map.keep_null` is added. It is set while transforming CREATE, MATCH and SET clause. Based on its value, transform_cypher_map tells executor whether to keep the null properties in maps that appear in the mentioned clauses. Cases of null removal: - For CREATE and SET with equal operator, nulls are removed. - For MATCH, nulls are not removed. - For SET with plus-equal operator, nulls are kept during transformation, but removed after execution. - For any other cases, nulls are removed by default. --- age--1.2.0.sql | 8 ++ regress/expected/agtype.out | 49 +++++++++++ regress/expected/cypher_set.out | 31 ++++++- regress/expected/expr.out | 12 +-- regress/sql/agtype.sql | 10 +++ regress/sql/cypher_set.sql | 16 ++++ src/backend/executor/cypher_set.c | 15 +++- src/backend/nodes/cypher_copyfuncs.c | 1 + src/backend/nodes/cypher_outfuncs.c | 1 + src/backend/nodes/cypher_readfuncs.c | 1 + src/backend/parser/cypher_clause.c | 36 ++++++--- src/backend/parser/cypher_expr.c | 4 + src/backend/utils/adt/agtype.c | 117 ++++++++++++++++++++++----- src/include/nodes/cypher_nodes.h | 2 + src/include/utils/agtype.h | 5 +- 15 files changed, 267 insertions(+), 41 deletions(-) diff --git a/age--1.2.0.sql b/age--1.2.0.sql index 54f0f304a..3075824c9 100644 --- a/age--1.2.0.sql +++ b/age--1.2.0.sql @@ -3145,6 +3145,14 @@ CALLED ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME', 'agtype_build_map_noargs'; +CREATE FUNCTION ag_catalog.agtype_build_map_nonull(VARIADIC "any") +RETURNS agtype +LANGUAGE c +STABLE +CALLED ON NULL INPUT +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + -- -- There are times when the optimizer might eliminate -- functions we need. Wrap the function with this to diff --git a/regress/expected/agtype.out b/regress/expected/agtype.out index 196747a7e..2d53f3c3d 100644 --- a/regress/expected/agtype.out +++ b/regress/expected/agtype.out @@ -2268,6 +2268,55 @@ SELECT i, pg_typeof(i) FROM (SELECT '{"bool":false, "int":3, "float":3.14}'::agt | text (1 row) +-- Test duplicate keys and null value +-- expected: only the latest key, among duplicates, will be kept; and null will be removed +SELECT * FROM create_graph('agtype_null_duplicate_test'); +NOTICE: graph "agtype_null_duplicate_test" has been created + create_graph +-------------- + +(1 row) + +SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:NULL, b:'bb', c:'cc', d:'dd' }) RETURN a $$) AS (a agtype); + a +----------------------------------------------------------------------------------------------- + {"id": 281474976710657, "label": "", "properties": {"b": "bb", "c": "cc", "d": "dd"}}::vertex +(1 row) + +SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:'aa', b:'bb', c:'cc', d:'dd' }) RETURN a $$) AS (a agtype); + a +---------------------------------------------------------------------------------------------------------- + {"id": 281474976710658, "label": "", "properties": {"a": "aa", "b": "bb", "c": "cc", "d": "dd"}}::vertex +(1 row) + +SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:'aa', b:'bb', b:NULL , d:NULL }) RETURN a $$) AS (a agtype); + a +------------------------------------------------------------------------- + {"id": 281474976710659, "label": "", "properties": {"a": "aa"}}::vertex +(1 row) + +SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:'aa', b:'bb', b:'xx', d:NULL }) RETURN a $$) AS (a agtype); + a +------------------------------------------------------------------------------------ + {"id": 281474976710660, "label": "", "properties": {"a": "aa", "b": "xx"}}::vertex +(1 row) + +SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:NULL }) RETURN a $$) AS (a agtype); + a +---------------------------------------------------------------- + {"id": 281474976710661, "label": "", "properties": {}}::vertex +(1 row) + +SELECT * FROM drop_graph('agtype_null_duplicate_test', true); +NOTICE: drop cascades to 2 other objects +DETAIL: drop cascades to table agtype_null_duplicate_test._ag_label_vertex +drop cascades to table agtype_null_duplicate_test._ag_label_edge +NOTICE: graph "agtype_null_duplicate_test" has been dropped + drop_graph +------------ + +(1 row) + -- -- Vertex -- diff --git a/regress/expected/cypher_set.out b/regress/expected/cypher_set.out index 74b3c17b2..fbc4b631d 100644 --- a/regress/expected/cypher_set.out +++ b/regress/expected/cypher_set.out @@ -702,6 +702,11 @@ SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Juan {name:'Juan', role:'admin --- (0 rows) +SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Robert {name:'Robert', role:'manager', city:'London'}) $$) AS (a agtype); + a +--- +(0 rows) + -- test copying properties between entities SELECT * FROM cypher('cypher_set_1', $$ MATCH (at {name: 'Andy'}), (pn {name: 'Peter'}) @@ -761,6 +766,29 @@ SELECT * FROM cypher('cypher_set_1', $$ RETURN p $$) AS (p agtype); ERROR: a map is expected +-- test plus-equal +-- expected: {name:'Rob', age:47, city:London} +SELECT * FROM cypher('cypher_set_1', $$ + MATCH (p {name: 'Robert'}) + SET p += {name:'Rob', role:NULL, age:47} + RETURN p +$$) AS (p agtype); + p +----------------------------------------------------------------------------------------------------------------- + {"id": 2251799813685249, "label": "Robert", "properties": {"age": 47, "city": "London", "name": "Rob"}}::vertex +(1 row) + +-- expected: no change +SELECT * FROM cypher('cypher_set_1', $$ + MATCH (p {name: 'Rob'}) + SET p += {} + RETURN p +$$) AS (p agtype); + p +----------------------------------------------------------------------------------------------------------------- + {"id": 2251799813685249, "label": "Robert", "properties": {"age": 47, "city": "London", "name": "Rob"}}::vertex +(1 row) + -- -- Clean up -- @@ -784,7 +812,7 @@ NOTICE: graph "cypher_set" has been dropped (1 row) SELECT drop_graph('cypher_set_1', true); -NOTICE: drop cascades to 7 other objects +NOTICE: drop cascades to 8 other objects DETAIL: drop cascades to table cypher_set_1._ag_label_vertex drop cascades to table cypher_set_1._ag_label_edge drop cascades to table cypher_set_1."Andy" @@ -792,6 +820,7 @@ drop cascades to table cypher_set_1."Peter" drop cascades to table cypher_set_1."Kevin" drop cascades to table cypher_set_1."Matt" drop cascades to table cypher_set_1."Juan" +drop cascades to table cypher_set_1."Robert" NOTICE: graph "cypher_set_1" has been dropped drop_graph ------------ diff --git a/regress/expected/expr.out b/regress/expected/expr.out index 5f28e3642..7064356a6 100644 --- a/regress/expected/expr.out +++ b/regress/expected/expr.out @@ -39,18 +39,18 @@ SELECT * FROM cypher('expr', $$RETURN {}$$) AS r(c agtype); SELECT * FROM cypher('expr', $$ RETURN {s: 's', i: 1, f: 1.0, b: true, z: null} $$) AS r(c agtype); - c ----------------------------------------------------- - {"b": true, "f": 1.0, "i": 1, "s": "s", "z": null} + c +----------------------------------------- + {"b": true, "f": 1.0, "i": 1, "s": "s"} (1 row) -- nested maps SELECT * FROM cypher('expr', $$ RETURN {s: {s: 's'}, t: {i: 1, e: {f: 1.0}, s: {a: {b: true}}}, z: null} $$) AS r(c agtype); - c ---------------------------------------------------------------------------------------- - {"s": {"s": "s"}, "t": {"e": {"f": 1.0}, "i": 1, "s": {"a": {"b": true}}}, "z": null} + c +---------------------------------------------------------------------------- + {"s": {"s": "s"}, "t": {"e": {"f": 1.0}, "i": 1, "s": {"a": {"b": true}}}} (1 row) -- diff --git a/regress/sql/agtype.sql b/regress/sql/agtype.sql index 3a116cc4d..958172ffa 100644 --- a/regress/sql/agtype.sql +++ b/regress/sql/agtype.sql @@ -586,6 +586,16 @@ SELECT i, pg_typeof(i) FROM (SELECT '{"bool":false, "int":3, "float":3.14}'::agt SELECT i, pg_typeof(i) FROM (SELECT '{"bool":false, "int":3, "float":3.14}'::agtype->'true'->2 as i) a; SELECT i, pg_typeof(i) FROM (SELECT '{"bool":false, "int":3, "float":3.14}'::agtype->'true'->>2 as i) a; +-- Test duplicate keys and null value +-- expected: only the latest key, among duplicates, will be kept; and null will be removed +SELECT * FROM create_graph('agtype_null_duplicate_test'); +SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:NULL, b:'bb', c:'cc', d:'dd' }) RETURN a $$) AS (a agtype); +SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:'aa', b:'bb', c:'cc', d:'dd' }) RETURN a $$) AS (a agtype); +SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:'aa', b:'bb', b:NULL , d:NULL }) RETURN a $$) AS (a agtype); +SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:'aa', b:'bb', b:'xx', d:NULL }) RETURN a $$) AS (a agtype); +SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:NULL }) RETURN a $$) AS (a agtype); +SELECT * FROM drop_graph('agtype_null_duplicate_test', true); + -- -- Vertex -- diff --git a/regress/sql/cypher_set.sql b/regress/sql/cypher_set.sql index b408c5529..a2b36a0a3 100644 --- a/regress/sql/cypher_set.sql +++ b/regress/sql/cypher_set.sql @@ -214,6 +214,7 @@ SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Peter {name:'Peter', age:34}) SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Kevin {name:'Kevin', age:32, hungry:false}) $$) AS (a agtype); SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Matt {name:'Matt', city:'Toronto'}) $$) AS (a agtype); SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Juan {name:'Juan', role:'admin'}) $$) AS (a agtype); +SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Robert {name:'Robert', role:'manager', city:'London'}) $$) AS (a agtype); -- test copying properties between entities SELECT * FROM cypher('cypher_set_1', $$ @@ -255,6 +256,21 @@ SELECT * FROM cypher('cypher_set_1', $$ RETURN p $$) AS (p agtype); +-- test plus-equal +-- expected: {name:'Rob', age:47, city:London} +SELECT * FROM cypher('cypher_set_1', $$ + MATCH (p {name: 'Robert'}) + SET p += {name:'Rob', role:NULL, age:47} + RETURN p +$$) AS (p agtype); + +-- expected: no change +SELECT * FROM cypher('cypher_set_1', $$ + MATCH (p {name: 'Rob'}) + SET p += {} + RETURN p +$$) AS (p agtype); + -- -- Clean up -- diff --git a/src/backend/executor/cypher_set.c b/src/backend/executor/cypher_set.c index a765d12ea..4c81faf5c 100644 --- a/src/backend/executor/cypher_set.c +++ b/src/backend/executor/cypher_set.c @@ -462,7 +462,20 @@ static void process_update_list(CustomScanState *node) } else { - altered_properties = get_map_from_agtype(new_property_value); + altered_properties = alter_properties( + update_item->is_add ? original_properties : NULL, + new_property_value); + + /* + * For SET clause with plus-equal operator, nulls are not removed + * from the map during transformation because they are required in + * the executor to alter (merge) properties correctly. Only after + * that step, they can be removed. + */ + if (update_item->is_add) + { + remove_null_from_agtype_object(altered_properties); + } } resultRelInfo = create_entity_result_rel_info(estate, diff --git a/src/backend/nodes/cypher_copyfuncs.c b/src/backend/nodes/cypher_copyfuncs.c index 242ccfa53..6c832f897 100644 --- a/src/backend/nodes/cypher_copyfuncs.c +++ b/src/backend/nodes/cypher_copyfuncs.c @@ -138,6 +138,7 @@ void copy_cypher_update_item(ExtensibleNode *newnode, const ExtensibleNode *from COPY_STRING_FIELD(prop_name); COPY_NODE_FIELD(qualified_name); COPY_SCALAR_FIELD(remove_item); + COPY_SCALAR_FIELD(is_add); } // copy function for cypher_delete_information diff --git a/src/backend/nodes/cypher_outfuncs.c b/src/backend/nodes/cypher_outfuncs.c index 0c48fb5ae..b73f29f25 100644 --- a/src/backend/nodes/cypher_outfuncs.c +++ b/src/backend/nodes/cypher_outfuncs.c @@ -371,6 +371,7 @@ void out_cypher_update_item(StringInfo str, const ExtensibleNode *node) WRITE_STRING_FIELD(prop_name); WRITE_NODE_FIELD(qualified_name); WRITE_BOOL_FIELD(remove_item); + WRITE_BOOL_FIELD(is_add); } // serialization function for the cypher_delete_information ExtensibleNode. diff --git a/src/backend/nodes/cypher_readfuncs.c b/src/backend/nodes/cypher_readfuncs.c index 3d3249d9a..a74e89683 100644 --- a/src/backend/nodes/cypher_readfuncs.c +++ b/src/backend/nodes/cypher_readfuncs.c @@ -248,6 +248,7 @@ void read_cypher_update_item(struct ExtensibleNode *node) READ_STRING_FIELD(prop_name); READ_NODE_FIELD(qualified_name); READ_BOOL_FIELD(remove_item); + READ_BOOL_FIELD(is_add); } /* diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 4c1032770..466551115 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -1522,6 +1522,7 @@ cypher_update_information *transform_cypher_remove_item_list( errmsg("REMOVE clause does not support adding propereties from maps"), parser_errposition(pstate, set_item->location))); } + set_item->is_add = false; item->remove_item = true; @@ -1665,20 +1666,13 @@ cypher_update_information *transform_cypher_set_item_list( errmsg("unexpected node in cypher update list"))); } - if (set_item->is_add) - { - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("SET clause does not yet support adding propereties from maps"), - parser_errposition(pstate, set_item->location))); - } - item->remove_item = false; - // set variable and extract property name + // set variable, is_add and extract property name if (is_entire_prop_update) { ref = (ColumnRef *)set_item->prop; + item->is_add = set_item->is_add; item->prop_name = NULL; } else @@ -1686,6 +1680,17 @@ cypher_update_information *transform_cypher_set_item_list( ind = (A_Indirection *)set_item->prop; ref = (ColumnRef *)ind->arg; + if (set_item->is_add) + { + ereport( + ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg( + "SET clause does not yet support incrementing a specific property"), + parser_errposition(pstate, set_item->location))); + } + set_item->is_add = false; + // extract property name if (list_length(ind->indirection) != 1) { @@ -1734,6 +1739,12 @@ cypher_update_information *transform_cypher_set_item_list( parser_errposition(pstate, set_item->location))); } + // set keep_null property + if (is_ag_node(set_item->expr, cypher_map)) + { + ((cypher_map*)set_item->expr)->keep_null = set_item->is_add; + } + // create target entry for the new property value item->prop_position = (AttrNumber)pstate->p_next_resno; target_item = transform_cypher_item(cpstate, set_item->expr, NULL, @@ -3802,6 +3813,7 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, { Node *n = NULL; + ((cypher_map*)node->props)->keep_null = true; n = create_property_constraints(cpstate, entity, node->props); cpstate->property_constraint_quals = @@ -3861,7 +3873,10 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, if (rel->props) { - Node *n = create_property_constraints(cpstate, entity, + Node *n; + + ((cypher_map*)rel->props)->keep_null = true; + n = create_property_constraints(cpstate, entity, rel->props); cpstate->property_constraint_quals = lappend(cpstate->property_constraint_quals, n); @@ -5097,6 +5112,7 @@ static Expr *cypher_create_properties(cypher_parsestate *cpstate, if (props) { + ((cypher_map*)props)->keep_null = false; properties = (Expr *)transform_cypher_expr(cpstate, props, EXPR_KIND_INSERT_TARGET); } diff --git a/src/backend/parser/cypher_expr.c b/src/backend/parser/cypher_expr.c index cb437880b..8a276ffe5 100644 --- a/src/backend/parser/cypher_expr.c +++ b/src/backend/parser/cypher_expr.c @@ -633,6 +633,10 @@ static Node *transform_cypher_map(cypher_parsestate *cpstate, cypher_map *cm) { func_oid = get_ag_func_oid("agtype_build_map", 0); } + else if (!cm->keep_null) + { + func_oid = get_ag_func_oid("agtype_build_map_nonull", 1, ANYOID); + } else { func_oid = get_ag_func_oid("agtype_build_map", 1, ANYOID); diff --git a/src/backend/utils/adt/agtype.c b/src/backend/utils/adt/agtype.c index 62ecd8b30..22bf462c7 100644 --- a/src/backend/utils/adt/agtype.c +++ b/src/backend/utils/adt/agtype.c @@ -174,6 +174,7 @@ static int extract_variadic_args_min(FunctionCallInfo fcinfo, int variadic_start, bool convert_unknown, Datum **args, Oid **types, bool **nulls, int min_num_args); +static agtype_value* agtype_build_map_as_agtype_value(FunctionCallInfo fcinfo); agtype_value *agtype_composite_to_agtype_value_binary(agtype *a); /* global storage of OID for agtype and _agtype */ @@ -1838,6 +1839,39 @@ static void composite_to_agtype(Datum composite, agtype_in_state *result) ReleaseTupleDesc(tupdesc); } +/* + * Removes properties with null value from the given agtype object. + */ +void remove_null_from_agtype_object(agtype_value *object) +{ + agtype_pair *avail; // next available position + agtype_pair *ptr; + + if (object->type != AGTV_OBJECT) + { + ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("a map is expected"))); + } + + avail = object->val.object.pairs; + ptr = object->val.object.pairs; + + while (ptr - object->val.object.pairs < object->val.object.num_pairs) + { + if (ptr->value.type != AGTV_NULL) + { + if (ptr != avail) + { + memcpy(avail, ptr, sizeof(agtype_pair)); + } + avail++; + } + ptr++; + } + + object->val.object.num_pairs = avail - object->val.object.pairs; +} + /* * Append agtype text for "val" to "result". * @@ -2313,12 +2347,7 @@ Datum make_edge(Datum id, Datum startid, Datum endid, Datum label, properties); } -PG_FUNCTION_INFO_V1(agtype_build_map); - -/* - * SQL function agtype_build_map(variadic "any") - */ -Datum agtype_build_map(PG_FUNCTION_ARGS) +static agtype_value* agtype_build_map_as_agtype_value(FunctionCallInfo fcinfo) { int nargs; int i; @@ -2364,8 +2393,18 @@ Datum agtype_build_map(PG_FUNCTION_ARGS) } result.res = push_agtype_value(&result.parse_state, WAGT_END_OBJECT, NULL); + return result.res; +} - PG_RETURN_POINTER(agtype_value_to_agtype(result.res)); +PG_FUNCTION_INFO_V1(agtype_build_map); + +/* + * SQL function agtype_build_map(variadic "any") + */ +Datum agtype_build_map(PG_FUNCTION_ARGS) +{ + agtype_value *result= agtype_build_map_as_agtype_value(fcinfo); + PG_RETURN_POINTER(agtype_value_to_agtype(result)); } PG_FUNCTION_INFO_V1(agtype_build_map_noargs); @@ -2385,6 +2424,18 @@ Datum agtype_build_map_noargs(PG_FUNCTION_ARGS) PG_RETURN_POINTER(agtype_value_to_agtype(result.res)); } +PG_FUNCTION_INFO_V1(agtype_build_map_nonull); + +/* + * Similar to agtype_build_map except null properties are removed. + */ +Datum agtype_build_map_nonull(PG_FUNCTION_ARGS) +{ + agtype_value *result= agtype_build_map_as_agtype_value(fcinfo); + remove_null_from_agtype_object(result); + PG_RETURN_POINTER(agtype_value_to_agtype(result)); +} + PG_FUNCTION_INFO_V1(agtype_build_list); /* @@ -8379,10 +8430,15 @@ agtype_value *alter_property_value(agtype_value *properties, char *var_name, return parsed_agtype_value; } -/** - * Returns the map contained within the provided agtype. +/* + * Appends new_properties into a copy of original_properties. If the + * original_properties is NULL, returns new_properties. + * + * This is a helper function used by the SET clause executor for + * updating properties with the equal, or plus-equal operator and a map. */ -agtype_value *get_map_from_agtype(agtype *a) +agtype_value *alter_properties(agtype_value *original_properties, + agtype *new_properties) { agtype_iterator *it; agtype_iterator_token tok = WAGT_DONE; @@ -8391,9 +8447,34 @@ agtype_value *get_map_from_agtype(agtype *a) agtype_value *value; agtype_value *parsed_agtype_value = NULL; + parsed_agtype_value = push_agtype_value(&parse_state, WAGT_BEGIN_OBJECT, + NULL); + + // Copy original properties. + if (original_properties) + { + int i; + + if (original_properties->type != AGTV_OBJECT) + { + ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("a map is expected"))); + } + + for (i = 0; i < original_properties->val.object.num_pairs; i++) + { + agtype_pair* pair = original_properties->val.object.pairs + i; + parsed_agtype_value = push_agtype_value(&parse_state, WAGT_KEY, + &pair->key); + parsed_agtype_value = push_agtype_value(&parse_state, WAGT_VALUE, + &pair->value); + } + } + + // Append new properties. key = palloc0(sizeof(agtype_value)); value = palloc0(sizeof(agtype_value)); - it = agtype_iterator_init(&a->root); + it = agtype_iterator_init(&new_properties->root); tok = agtype_iterator_next(&it, key, true); if (tok != WAGT_BEGIN_OBJECT) @@ -8402,9 +8483,6 @@ agtype_value *get_map_from_agtype(agtype *a) errmsg("a map is expected"))); } - parsed_agtype_value = push_agtype_value(&parse_state, WAGT_BEGIN_OBJECT, - NULL); - while (true) { tok = agtype_iterator_next(&it, key, true); @@ -8416,13 +8494,10 @@ agtype_value *get_map_from_agtype(agtype *a) agtype_iterator_next(&it, value, true); - if (value->type != AGTV_NULL) - { - parsed_agtype_value = push_agtype_value(&parse_state, WAGT_KEY, - key); - parsed_agtype_value = push_agtype_value(&parse_state, WAGT_VALUE, - value); - } + parsed_agtype_value = push_agtype_value(&parse_state, WAGT_KEY, + key); + parsed_agtype_value = push_agtype_value(&parse_state, WAGT_VALUE, + value); } parsed_agtype_value = push_agtype_value(&parse_state, WAGT_END_OBJECT, diff --git a/src/include/nodes/cypher_nodes.h b/src/include/nodes/cypher_nodes.h index 66807068f..afe3127ee 100644 --- a/src/include/nodes/cypher_nodes.h +++ b/src/include/nodes/cypher_nodes.h @@ -195,6 +195,7 @@ typedef struct cypher_map ExtensibleNode extensible; List *keyvals; int location; + bool keep_null; // if false, keyvals with null value are removed } cypher_map; typedef struct cypher_list @@ -374,6 +375,7 @@ typedef struct cypher_update_item char *prop_name; List *qualified_name; bool remove_item; + bool is_add; } cypher_update_item; typedef struct cypher_delete_information diff --git a/src/include/utils/agtype.h b/src/include/utils/agtype.h index 5f45eac21..4433ef533 100644 --- a/src/include/utils/agtype.h +++ b/src/include/utils/agtype.h @@ -523,8 +523,9 @@ bool is_decimal_needed(char *numstr); int compare_agtype_scalar_values(agtype_value *a, agtype_value *b); agtype_value *alter_property_value(agtype_value *properties, char *var_name, agtype *new_v, bool remove_property); -agtype_value *get_map_from_agtype(agtype *a); - +void remove_null_from_agtype_object(agtype_value *object); +agtype_value *alter_properties(agtype_value *original_properties, + agtype *new_properties); agtype *get_one_agtype_from_variadic_args(FunctionCallInfo fcinfo, int variadic_offset, int expected_nargs); From 57ee011da993c202b893edc466f923fe9f4416f0 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed <85064039+MuhammadTahaNaveed@users.noreply.github.com> Date: Wed, 1 Feb 2023 05:37:51 +0500 Subject: [PATCH 092/191] Implement CI test for python driver (#587) - This CI workflow will run python driver unit tests and ensure that any PR/commit that modifies files under age/drivers/python is passing the tests. - Moved docker-compose.yaml file in age/drivers/golang to age/drivers,because this is required to instaniate a postgres instance, needed for unit testing. - Modified host address of connection params to localhost in 'test_age_py.py' to connect to postgres instance running in docker container. --- .github/workflows/python-driver.yaml | 45 +++++++++++++++++++++++++ drivers/{golang => }/docker-compose.yml | 0 drivers/python/test_age_py.py | 4 +-- 3 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/python-driver.yaml rename drivers/{golang => }/docker-compose.yml (100%) diff --git a/.github/workflows/python-driver.yaml b/.github/workflows/python-driver.yaml new file mode 100644 index 000000000..fb6ca3b33 --- /dev/null +++ b/.github/workflows/python-driver.yaml @@ -0,0 +1,45 @@ +name: Python Driver Tests + +on: + push: + branches: [ "master" ] + paths: + - 'drivers/python/**' + + pull_request: + branches: [ "master" ] + paths: + - 'drivers/python/**' + +jobs: + build: + runs-on: ubuntu-latest + + defaults: + run: + working-directory: drivers/python + + steps: + - uses: actions/checkout@v3 + + - name: Run apache/age docker image + run: docker-compose up -d + + - name: Set up python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Install pre-requisites + run: | + sudo apt-get install python3-dev libpq-dev + pip install -r requirements.txt + + - name: Build + run: | + python setup.py install + + - name: Test + run: | + python -m unittest -v test_age_py.py + python -m unittest -v test_agtypes.py diff --git a/drivers/golang/docker-compose.yml b/drivers/docker-compose.yml similarity index 100% rename from drivers/golang/docker-compose.yml rename to drivers/docker-compose.yml diff --git a/drivers/python/test_age_py.py b/drivers/python/test_age_py.py index 1758989e0..dfc5fe237 100644 --- a/drivers/python/test_age_py.py +++ b/drivers/python/test_age_py.py @@ -18,8 +18,8 @@ import decimal import age -DSN = "host=172.17.0.2 port=5432 dbname=postgres user=postgres password=agens" -TEST_HOST = "172.17.0.2" +DSN = "host=127.0.0.1 port=5432 dbname=postgres user=postgres password=agens" +TEST_HOST = "127.0.0.1" TEST_PORT = 5432 TEST_DB = "postgres" TEST_USER = "postgres" From bc1d15c89a234c0ad2ece0c8d37f90817f2ba9ee Mon Sep 17 00:00:00 2001 From: Nandhini1809 <123108251+Nandhini1809@users.noreply.github.com> Date: Thu, 2 Feb 2023 12:35:47 -0800 Subject: [PATCH 093/191] Update readme (#649) Updated developer mailing list email --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1850a25ee..7fb69f45d 100644 --- a/README.md +++ b/README.md @@ -320,7 +320,7 @@ Join the AGE community for help, questions, discussions, and contributions. - Check our [website](https://age.apache.org/) - Chat live with us on [Discord](https://discord.com/invite/NMsBs9X8Ss/) - Follow us on [Twitter](https://twitter.com/apache_age?s=20&t=7Hu8Txk4vjvuEp-ryakacg) -- Join our [Dev community](https://lists.apache.org/list.html?dev@age.apache.org) +- Subscribe to our developer mailing list by sending an email to dev-subscribe@age.apache.org

  Graph Visualization Tool for AGE

From 4988b1bfb191318577ea17a4dc4f3dfc46951bbc Mon Sep 17 00:00:00 2001 From: yadav9887 <123498106+yadav9887@users.noreply.github.com> Date: Thu, 2 Feb 2023 12:53:03 -0800 Subject: [PATCH 094/191] Update Readme (#650) Added user mailing list subscription --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7fb69f45d..9f864d1c4 100644 --- a/README.md +++ b/README.md @@ -321,6 +321,7 @@ Join the AGE community for help, questions, discussions, and contributions. - Chat live with us on [Discord](https://discord.com/invite/NMsBs9X8Ss/) - Follow us on [Twitter](https://twitter.com/apache_age?s=20&t=7Hu8Txk4vjvuEp-ryakacg) - Subscribe to our developer mailing list by sending an email to dev-subscribe@age.apache.org +- Subscribe to our user mailing list by sending an email to users-subscribe@age.apache.org

  Graph Visualization Tool for AGE

From 9622656578736664cc6cc0c794c3de7e5102b275 Mon Sep 17 00:00:00 2001 From: WALEED SHAHID <75040621+waleedahmed0001@users.noreply.github.com> Date: Tue, 7 Feb 2023 21:35:47 +0500 Subject: [PATCH 095/191] Add video links (#634) Added different video tutorials in it which will help in installation of Apache Age on Windows and MacOS. --- README.md | 8 ++++++++ img/videos.png | Bin 0 -> 209 bytes 2 files changed, 8 insertions(+) create mode 100644 img/videos.png diff --git a/README.md b/README.md index 9f864d1c4..34e375286 100644 --- a/README.md +++ b/README.md @@ -339,6 +339,14 @@ After installing AGE Extension, you may use this tool to get access to the visua ![Viewer gdb, and graph](/img/agce.gif) +

  Video Links

+ +You can also get help from these videos. + +- Install on [Windows](https://www.youtube.com/watch?v=ddk8VX8Hm-I&list=PLGp3huJbWNDjgwP7s99Q-9_w1vxpjNHXG) +- Install on [MacOS](https://www.youtube.com/watch?v=0-qMwpDh0CA) + +

  Contributing

diff --git a/img/videos.png b/img/videos.png new file mode 100644 index 0000000000000000000000000000000000000000..46490a1881f00105f88c6cfc130b1cbe592dcea5 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-MYE@i zV@SoEw^t3h4mk+4K3xBaP43X4>LnY#>dZUZeWOC?_SW;PK|N==oOp!Hf+ap3UM+Ty zf3v~iV?0(ig1wqsvt1$=*x0Ek-|Js{B;@=q)^ZtR)<(wgH=9`kFF$UIou-f_XOYhB zS8uvV@$=+-i$5B9LT3_>Hci^QZg;Cn>Z=DiKaO!PD4qXozviPRpmP{JUHx3vIVCg! E0Qr|qLjV8( literal 0 HcmV?d00001 From 47ddb82f1899b7ae1c840f9d7556006d466785d9 Mon Sep 17 00:00:00 2001 From: udaiganny67 <122323453+udaiganny67@users.noreply.github.com> Date: Tue, 7 Feb 2023 22:23:44 -0800 Subject: [PATCH 096/191] Update README.md (#651) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 34e375286..7a3ac26b0 100644 --- a/README.md +++ b/README.md @@ -322,6 +322,7 @@ Join the AGE community for help, questions, discussions, and contributions. - Follow us on [Twitter](https://twitter.com/apache_age?s=20&t=7Hu8Txk4vjvuEp-ryakacg) - Subscribe to our developer mailing list by sending an email to dev-subscribe@age.apache.org - Subscribe to our user mailing list by sending an email to users-subscribe@age.apache.org +- Subscribe to our committer mailing list (To become a committer) by sending an email to commits-subscribe@age.apache.org

  Graph Visualization Tool for AGE

From fe9de2bbe39b068f1bd63d781d04bcbb7e22c118 Mon Sep 17 00:00:00 2001 From: jbiz805 <49049733+jbiz805@users.noreply.github.com> Date: Thu, 9 Feb 2023 09:00:56 +0900 Subject: [PATCH 097/191] Update README.md (#564) Added PostgreSQL 11 badge --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 1850a25ee..0336853db 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,10 @@
  + + + +   From 33590ca4aabc5f16753ef48051c1982dd87ac3f0 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed <85064039+MuhammadTahaNaveed@users.noreply.github.com> Date: Wed, 15 Feb 2023 02:52:03 +0500 Subject: [PATCH 098/191] Move from travis CI to github actions for build (#676) - Added installcheck.yaml - Removed .travis.yaml file --- .github/workflows/installcheck.yaml | 52 +++++++++++++++++++++++++++++ .travis.yml | 17 ---------- 2 files changed, 52 insertions(+), 17 deletions(-) create mode 100644 .github/workflows/installcheck.yaml delete mode 100644 .travis.yml diff --git a/.github/workflows/installcheck.yaml b/.github/workflows/installcheck.yaml new file mode 100644 index 000000000..b18921f21 --- /dev/null +++ b/.github/workflows/installcheck.yaml @@ -0,0 +1,52 @@ +name: Build / Regression + +on: + push: + branches: [ 'master', 'PG11' ] + pull_request: + branches: [ 'master', 'PG11' ] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Get latest commit id of PostgreSQL 11 + run: | + echo "PG_COMMIT_HASH=$(git ls-remote git://git.postgresql.org/git/postgresql.git refs/heads/REL_11_STABLE | awk '{print $1}')" >> $GITHUB_ENV + + - name: Cache PostgreSQL 11 + uses: actions/cache@v3 + id: pg11cache + with: + path: ~/pg11 + key: ${{ runner.os }}-v1-pg11-${{ env.PG_COMMIT_HASH }} + + - name: Install PostgreSQL 11 + if: steps.pg11cache.outputs.cache-hit != 'true' + run: | + git clone --depth 1 --branch REL_11_STABLE git://git.postgresql.org/git/postgresql.git ~/pg11source + cd ~/pg11source + ./configure --prefix=$HOME/pg11 CFLAGS="-std=gnu99 -ggdb -O0" --enable-cassert + make install -j$(nproc) > /dev/null + + - uses: actions/checkout@v3 + + - name: Build + id: build + run: | + make PG_CONFIG=$HOME/pg11/bin/pg_config install -j$(nproc) + + - name: Regression tests + id: regression_tests + run: | + make PG_CONFIG=$HOME/pg11/bin/pg_config installcheck + continue-on-error: true + + - name: Dump regression test errors + if: steps.regression_tests.outcome != 'success' + run: | + echo "Dump section begin." + cat $HOME/work/age/age/regress/regression.diffs + echo "Dump section end." + exit 1 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 7dadc21a4..000000000 --- a/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -language: c -os: linux -dist: bionic -arch: amd64 -jobs: - include: - - name: PostgreSQL 11 - compiler: gcc - addons: - apt: - packages: - - postgresql-11 - - postgresql-server-dev-11 - script: - - sudo make install -j$(nproc) - - make installcheck - after_failure: cat regress/regression.diffs From 63d5b105fb0f29b8a3073de91b5d7d92e8f9d0df Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed <85064039+MuhammadTahaNaveed@users.noreply.github.com> Date: Wed, 15 Feb 2023 03:07:30 +0500 Subject: [PATCH 099/191] Fix golang driver workflow (#563) * added paths directive to on: pull request * Now this CI will only run when a commit or PR has touched any file in drivers/golang --- .github/workflows/go-driver.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/go-driver.yml b/.github/workflows/go-driver.yml index 25fcf770a..a2b543cd9 100644 --- a/.github/workflows/go-driver.yml +++ b/.github/workflows/go-driver.yml @@ -4,9 +4,12 @@ on: push: branches: [ "master" ] paths: - - 'drivers/golang' + - 'drivers/golang/**' + pull_request: branches: [ "master" ] + paths: + - 'drivers/golang/**' jobs: build: From de91f4a290ba169598ba4d0f17688d5d925506ca Mon Sep 17 00:00:00 2001 From: Hrishikesh Mallick <65110396+intrigued-rishi@users.noreply.github.com> Date: Mon, 23 Jan 2023 22:45:44 +0530 Subject: [PATCH 100/191] Added some comments for create_graph function (#582) * Added comments for create_graph function --- src/backend/commands/graph_commands.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/backend/commands/graph_commands.c b/src/backend/commands/graph_commands.c index f0074ed2a..4216652bc 100644 --- a/src/backend/commands/graph_commands.c +++ b/src/backend/commands/graph_commands.c @@ -58,6 +58,7 @@ static void rename_graph(const Name graph_name, const Name new_name); PG_FUNCTION_INFO_V1(create_graph); +/* function that is evoked for creating a graph */ Datum create_graph(PG_FUNCTION_ARGS) { char *graph; @@ -65,20 +66,26 @@ Datum create_graph(PG_FUNCTION_ARGS) char *graph_name_str; Oid nsp_id; + //if no argument is passed with the function, graph name cannot be null if (PG_ARGISNULL(0)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("graph name can not be NULL"))); } - graph_name = PG_GETARG_NAME(0); + + //gets graph name as function argument + graph_name = PG_GETARG_NAME(0); graph_name_str = NameStr(*graph_name); + //checking if the name of the graph falls under the pre-decided graph naming conventions(regex) if (!is_valid_graph_name(graph_name_str)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("graph name is invalid"))); } + + //graph name must be unique, a graph with the same name should not exist if (graph_exists(graph_name_str)) { ereport(ERROR, @@ -88,7 +95,8 @@ Datum create_graph(PG_FUNCTION_ARGS) nsp_id = create_schema_for_graph(graph_name); - insert_graph(graph_name, nsp_id); + //inserts the graph info into the relation which has all the other existing graphs info + insert_graph(graph_name, nsp_id); //Increment the Command counter before create the generic labels. CommandCounterIncrement(); @@ -101,7 +109,8 @@ Datum create_graph(PG_FUNCTION_ARGS) ereport(NOTICE, (errmsg("graph \"%s\" has been created", NameStr(*graph_name)))); - PG_RETURN_VOID(); + //according to postgres specification of c-language functions if function returns void this is the syntax + PG_RETURN_VOID(); } static Oid create_schema_for_graph(const Name graph_name) From 6540ccfb47748b9a0ec6a1af18c28c129713607b Mon Sep 17 00:00:00 2001 From: moeed-k <99591855+moeed-k@users.noreply.github.com> Date: Thu, 26 Jan 2023 04:41:02 +0500 Subject: [PATCH 101/191] Optimize age_exists function (#586) -age_exists, which is the executor for exists(property) function, was making up to 3 redundant memory accesses. -exists(property) predicate function only serves to check if a property exists or not. -In Cypher, if a property is assigned the value of NULL, this is considered the same as the property not existing at all. Thus the function calls to get the value type is not needed as the check for the null argument itself filters out all NULL inputs. If a property passes this check, it implies existence. --- src/backend/utils/adt/agtype.c | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/backend/utils/adt/agtype.c b/src/backend/utils/adt/agtype.c index ff97378c2..62ecd8b30 100644 --- a/src/backend/utils/adt/agtype.c +++ b/src/backend/utils/adt/agtype.c @@ -5449,26 +5449,10 @@ PG_FUNCTION_INFO_V1(age_exists); */ Datum age_exists(PG_FUNCTION_ARGS) { - agtype *agt_arg = NULL; - agtype_value *agtv_value = NULL; - /* check for NULL, NULL is FALSE */ if (PG_ARGISNULL(0)) PG_RETURN_BOOL(false); - /* get the argument */ - agt_arg = AG_GET_ARG_AGTYPE_P(0); - - /* check for a scalar AGTV_NULL */ - if (AGT_ROOT_IS_SCALAR(agt_arg)) - { - agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); - - /* again, if NULL, NULL is FALSE */ - if (agtv_value->type == AGTV_NULL) - PG_RETURN_BOOL(false); - } - /* otherwise, we have something, and something is TRUE */ PG_RETURN_BOOL(true); } From 9b06aaf2332321c7eaba5004c90bf724b29529d9 Mon Sep 17 00:00:00 2001 From: Rafsun Masud Date: Tue, 31 Jan 2023 19:07:27 -0500 Subject: [PATCH 102/191] Implement plus-equal operator in SET clause (#638) Additional changes: Null properties are removed from cypher maps in certain cases. A new property `cypher_map.keep_null` is added. It is set while transforming CREATE, MATCH and SET clause. Based on its value, transform_cypher_map tells executor whether to keep the null properties in maps that appear in the mentioned clauses. Cases of null removal: - For CREATE and SET with equal operator, nulls are removed. - For MATCH, nulls are not removed. - For SET with plus-equal operator, nulls are kept during transformation, but removed after execution. - For any other cases, nulls are removed by default. --- age--1.2.0.sql | 8 ++ regress/expected/agtype.out | 49 +++++++++++ regress/expected/cypher_set.out | 31 ++++++- regress/expected/expr.out | 12 +-- regress/sql/agtype.sql | 10 +++ regress/sql/cypher_set.sql | 16 ++++ src/backend/executor/cypher_set.c | 15 +++- src/backend/nodes/cypher_copyfuncs.c | 1 + src/backend/nodes/cypher_outfuncs.c | 1 + src/backend/nodes/cypher_readfuncs.c | 1 + src/backend/parser/cypher_clause.c | 36 ++++++--- src/backend/parser/cypher_expr.c | 4 + src/backend/utils/adt/agtype.c | 117 ++++++++++++++++++++++----- src/include/nodes/cypher_nodes.h | 2 + src/include/utils/agtype.h | 5 +- 15 files changed, 267 insertions(+), 41 deletions(-) diff --git a/age--1.2.0.sql b/age--1.2.0.sql index 54f0f304a..3075824c9 100644 --- a/age--1.2.0.sql +++ b/age--1.2.0.sql @@ -3145,6 +3145,14 @@ CALLED ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME', 'agtype_build_map_noargs'; +CREATE FUNCTION ag_catalog.agtype_build_map_nonull(VARIADIC "any") +RETURNS agtype +LANGUAGE c +STABLE +CALLED ON NULL INPUT +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + -- -- There are times when the optimizer might eliminate -- functions we need. Wrap the function with this to diff --git a/regress/expected/agtype.out b/regress/expected/agtype.out index 196747a7e..2d53f3c3d 100644 --- a/regress/expected/agtype.out +++ b/regress/expected/agtype.out @@ -2268,6 +2268,55 @@ SELECT i, pg_typeof(i) FROM (SELECT '{"bool":false, "int":3, "float":3.14}'::agt | text (1 row) +-- Test duplicate keys and null value +-- expected: only the latest key, among duplicates, will be kept; and null will be removed +SELECT * FROM create_graph('agtype_null_duplicate_test'); +NOTICE: graph "agtype_null_duplicate_test" has been created + create_graph +-------------- + +(1 row) + +SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:NULL, b:'bb', c:'cc', d:'dd' }) RETURN a $$) AS (a agtype); + a +----------------------------------------------------------------------------------------------- + {"id": 281474976710657, "label": "", "properties": {"b": "bb", "c": "cc", "d": "dd"}}::vertex +(1 row) + +SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:'aa', b:'bb', c:'cc', d:'dd' }) RETURN a $$) AS (a agtype); + a +---------------------------------------------------------------------------------------------------------- + {"id": 281474976710658, "label": "", "properties": {"a": "aa", "b": "bb", "c": "cc", "d": "dd"}}::vertex +(1 row) + +SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:'aa', b:'bb', b:NULL , d:NULL }) RETURN a $$) AS (a agtype); + a +------------------------------------------------------------------------- + {"id": 281474976710659, "label": "", "properties": {"a": "aa"}}::vertex +(1 row) + +SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:'aa', b:'bb', b:'xx', d:NULL }) RETURN a $$) AS (a agtype); + a +------------------------------------------------------------------------------------ + {"id": 281474976710660, "label": "", "properties": {"a": "aa", "b": "xx"}}::vertex +(1 row) + +SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:NULL }) RETURN a $$) AS (a agtype); + a +---------------------------------------------------------------- + {"id": 281474976710661, "label": "", "properties": {}}::vertex +(1 row) + +SELECT * FROM drop_graph('agtype_null_duplicate_test', true); +NOTICE: drop cascades to 2 other objects +DETAIL: drop cascades to table agtype_null_duplicate_test._ag_label_vertex +drop cascades to table agtype_null_duplicate_test._ag_label_edge +NOTICE: graph "agtype_null_duplicate_test" has been dropped + drop_graph +------------ + +(1 row) + -- -- Vertex -- diff --git a/regress/expected/cypher_set.out b/regress/expected/cypher_set.out index 74b3c17b2..fbc4b631d 100644 --- a/regress/expected/cypher_set.out +++ b/regress/expected/cypher_set.out @@ -702,6 +702,11 @@ SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Juan {name:'Juan', role:'admin --- (0 rows) +SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Robert {name:'Robert', role:'manager', city:'London'}) $$) AS (a agtype); + a +--- +(0 rows) + -- test copying properties between entities SELECT * FROM cypher('cypher_set_1', $$ MATCH (at {name: 'Andy'}), (pn {name: 'Peter'}) @@ -761,6 +766,29 @@ SELECT * FROM cypher('cypher_set_1', $$ RETURN p $$) AS (p agtype); ERROR: a map is expected +-- test plus-equal +-- expected: {name:'Rob', age:47, city:London} +SELECT * FROM cypher('cypher_set_1', $$ + MATCH (p {name: 'Robert'}) + SET p += {name:'Rob', role:NULL, age:47} + RETURN p +$$) AS (p agtype); + p +----------------------------------------------------------------------------------------------------------------- + {"id": 2251799813685249, "label": "Robert", "properties": {"age": 47, "city": "London", "name": "Rob"}}::vertex +(1 row) + +-- expected: no change +SELECT * FROM cypher('cypher_set_1', $$ + MATCH (p {name: 'Rob'}) + SET p += {} + RETURN p +$$) AS (p agtype); + p +----------------------------------------------------------------------------------------------------------------- + {"id": 2251799813685249, "label": "Robert", "properties": {"age": 47, "city": "London", "name": "Rob"}}::vertex +(1 row) + -- -- Clean up -- @@ -784,7 +812,7 @@ NOTICE: graph "cypher_set" has been dropped (1 row) SELECT drop_graph('cypher_set_1', true); -NOTICE: drop cascades to 7 other objects +NOTICE: drop cascades to 8 other objects DETAIL: drop cascades to table cypher_set_1._ag_label_vertex drop cascades to table cypher_set_1._ag_label_edge drop cascades to table cypher_set_1."Andy" @@ -792,6 +820,7 @@ drop cascades to table cypher_set_1."Peter" drop cascades to table cypher_set_1."Kevin" drop cascades to table cypher_set_1."Matt" drop cascades to table cypher_set_1."Juan" +drop cascades to table cypher_set_1."Robert" NOTICE: graph "cypher_set_1" has been dropped drop_graph ------------ diff --git a/regress/expected/expr.out b/regress/expected/expr.out index 5f28e3642..7064356a6 100644 --- a/regress/expected/expr.out +++ b/regress/expected/expr.out @@ -39,18 +39,18 @@ SELECT * FROM cypher('expr', $$RETURN {}$$) AS r(c agtype); SELECT * FROM cypher('expr', $$ RETURN {s: 's', i: 1, f: 1.0, b: true, z: null} $$) AS r(c agtype); - c ----------------------------------------------------- - {"b": true, "f": 1.0, "i": 1, "s": "s", "z": null} + c +----------------------------------------- + {"b": true, "f": 1.0, "i": 1, "s": "s"} (1 row) -- nested maps SELECT * FROM cypher('expr', $$ RETURN {s: {s: 's'}, t: {i: 1, e: {f: 1.0}, s: {a: {b: true}}}, z: null} $$) AS r(c agtype); - c ---------------------------------------------------------------------------------------- - {"s": {"s": "s"}, "t": {"e": {"f": 1.0}, "i": 1, "s": {"a": {"b": true}}}, "z": null} + c +---------------------------------------------------------------------------- + {"s": {"s": "s"}, "t": {"e": {"f": 1.0}, "i": 1, "s": {"a": {"b": true}}}} (1 row) -- diff --git a/regress/sql/agtype.sql b/regress/sql/agtype.sql index 3a116cc4d..958172ffa 100644 --- a/regress/sql/agtype.sql +++ b/regress/sql/agtype.sql @@ -586,6 +586,16 @@ SELECT i, pg_typeof(i) FROM (SELECT '{"bool":false, "int":3, "float":3.14}'::agt SELECT i, pg_typeof(i) FROM (SELECT '{"bool":false, "int":3, "float":3.14}'::agtype->'true'->2 as i) a; SELECT i, pg_typeof(i) FROM (SELECT '{"bool":false, "int":3, "float":3.14}'::agtype->'true'->>2 as i) a; +-- Test duplicate keys and null value +-- expected: only the latest key, among duplicates, will be kept; and null will be removed +SELECT * FROM create_graph('agtype_null_duplicate_test'); +SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:NULL, b:'bb', c:'cc', d:'dd' }) RETURN a $$) AS (a agtype); +SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:'aa', b:'bb', c:'cc', d:'dd' }) RETURN a $$) AS (a agtype); +SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:'aa', b:'bb', b:NULL , d:NULL }) RETURN a $$) AS (a agtype); +SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:'aa', b:'bb', b:'xx', d:NULL }) RETURN a $$) AS (a agtype); +SELECT * FROM cypher('agtype_null_duplicate_test', $$ CREATE (a { a:NULL }) RETURN a $$) AS (a agtype); +SELECT * FROM drop_graph('agtype_null_duplicate_test', true); + -- -- Vertex -- diff --git a/regress/sql/cypher_set.sql b/regress/sql/cypher_set.sql index b408c5529..a2b36a0a3 100644 --- a/regress/sql/cypher_set.sql +++ b/regress/sql/cypher_set.sql @@ -214,6 +214,7 @@ SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Peter {name:'Peter', age:34}) SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Kevin {name:'Kevin', age:32, hungry:false}) $$) AS (a agtype); SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Matt {name:'Matt', city:'Toronto'}) $$) AS (a agtype); SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Juan {name:'Juan', role:'admin'}) $$) AS (a agtype); +SELECT * FROM cypher('cypher_set_1', $$ CREATE (a:Robert {name:'Robert', role:'manager', city:'London'}) $$) AS (a agtype); -- test copying properties between entities SELECT * FROM cypher('cypher_set_1', $$ @@ -255,6 +256,21 @@ SELECT * FROM cypher('cypher_set_1', $$ RETURN p $$) AS (p agtype); +-- test plus-equal +-- expected: {name:'Rob', age:47, city:London} +SELECT * FROM cypher('cypher_set_1', $$ + MATCH (p {name: 'Robert'}) + SET p += {name:'Rob', role:NULL, age:47} + RETURN p +$$) AS (p agtype); + +-- expected: no change +SELECT * FROM cypher('cypher_set_1', $$ + MATCH (p {name: 'Rob'}) + SET p += {} + RETURN p +$$) AS (p agtype); + -- -- Clean up -- diff --git a/src/backend/executor/cypher_set.c b/src/backend/executor/cypher_set.c index a765d12ea..4c81faf5c 100644 --- a/src/backend/executor/cypher_set.c +++ b/src/backend/executor/cypher_set.c @@ -462,7 +462,20 @@ static void process_update_list(CustomScanState *node) } else { - altered_properties = get_map_from_agtype(new_property_value); + altered_properties = alter_properties( + update_item->is_add ? original_properties : NULL, + new_property_value); + + /* + * For SET clause with plus-equal operator, nulls are not removed + * from the map during transformation because they are required in + * the executor to alter (merge) properties correctly. Only after + * that step, they can be removed. + */ + if (update_item->is_add) + { + remove_null_from_agtype_object(altered_properties); + } } resultRelInfo = create_entity_result_rel_info(estate, diff --git a/src/backend/nodes/cypher_copyfuncs.c b/src/backend/nodes/cypher_copyfuncs.c index 242ccfa53..6c832f897 100644 --- a/src/backend/nodes/cypher_copyfuncs.c +++ b/src/backend/nodes/cypher_copyfuncs.c @@ -138,6 +138,7 @@ void copy_cypher_update_item(ExtensibleNode *newnode, const ExtensibleNode *from COPY_STRING_FIELD(prop_name); COPY_NODE_FIELD(qualified_name); COPY_SCALAR_FIELD(remove_item); + COPY_SCALAR_FIELD(is_add); } // copy function for cypher_delete_information diff --git a/src/backend/nodes/cypher_outfuncs.c b/src/backend/nodes/cypher_outfuncs.c index 0c48fb5ae..b73f29f25 100644 --- a/src/backend/nodes/cypher_outfuncs.c +++ b/src/backend/nodes/cypher_outfuncs.c @@ -371,6 +371,7 @@ void out_cypher_update_item(StringInfo str, const ExtensibleNode *node) WRITE_STRING_FIELD(prop_name); WRITE_NODE_FIELD(qualified_name); WRITE_BOOL_FIELD(remove_item); + WRITE_BOOL_FIELD(is_add); } // serialization function for the cypher_delete_information ExtensibleNode. diff --git a/src/backend/nodes/cypher_readfuncs.c b/src/backend/nodes/cypher_readfuncs.c index 3d3249d9a..a74e89683 100644 --- a/src/backend/nodes/cypher_readfuncs.c +++ b/src/backend/nodes/cypher_readfuncs.c @@ -248,6 +248,7 @@ void read_cypher_update_item(struct ExtensibleNode *node) READ_STRING_FIELD(prop_name); READ_NODE_FIELD(qualified_name); READ_BOOL_FIELD(remove_item); + READ_BOOL_FIELD(is_add); } /* diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 4c1032770..466551115 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -1522,6 +1522,7 @@ cypher_update_information *transform_cypher_remove_item_list( errmsg("REMOVE clause does not support adding propereties from maps"), parser_errposition(pstate, set_item->location))); } + set_item->is_add = false; item->remove_item = true; @@ -1665,20 +1666,13 @@ cypher_update_information *transform_cypher_set_item_list( errmsg("unexpected node in cypher update list"))); } - if (set_item->is_add) - { - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("SET clause does not yet support adding propereties from maps"), - parser_errposition(pstate, set_item->location))); - } - item->remove_item = false; - // set variable and extract property name + // set variable, is_add and extract property name if (is_entire_prop_update) { ref = (ColumnRef *)set_item->prop; + item->is_add = set_item->is_add; item->prop_name = NULL; } else @@ -1686,6 +1680,17 @@ cypher_update_information *transform_cypher_set_item_list( ind = (A_Indirection *)set_item->prop; ref = (ColumnRef *)ind->arg; + if (set_item->is_add) + { + ereport( + ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg( + "SET clause does not yet support incrementing a specific property"), + parser_errposition(pstate, set_item->location))); + } + set_item->is_add = false; + // extract property name if (list_length(ind->indirection) != 1) { @@ -1734,6 +1739,12 @@ cypher_update_information *transform_cypher_set_item_list( parser_errposition(pstate, set_item->location))); } + // set keep_null property + if (is_ag_node(set_item->expr, cypher_map)) + { + ((cypher_map*)set_item->expr)->keep_null = set_item->is_add; + } + // create target entry for the new property value item->prop_position = (AttrNumber)pstate->p_next_resno; target_item = transform_cypher_item(cpstate, set_item->expr, NULL, @@ -3802,6 +3813,7 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, { Node *n = NULL; + ((cypher_map*)node->props)->keep_null = true; n = create_property_constraints(cpstate, entity, node->props); cpstate->property_constraint_quals = @@ -3861,7 +3873,10 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, if (rel->props) { - Node *n = create_property_constraints(cpstate, entity, + Node *n; + + ((cypher_map*)rel->props)->keep_null = true; + n = create_property_constraints(cpstate, entity, rel->props); cpstate->property_constraint_quals = lappend(cpstate->property_constraint_quals, n); @@ -5097,6 +5112,7 @@ static Expr *cypher_create_properties(cypher_parsestate *cpstate, if (props) { + ((cypher_map*)props)->keep_null = false; properties = (Expr *)transform_cypher_expr(cpstate, props, EXPR_KIND_INSERT_TARGET); } diff --git a/src/backend/parser/cypher_expr.c b/src/backend/parser/cypher_expr.c index cb437880b..8a276ffe5 100644 --- a/src/backend/parser/cypher_expr.c +++ b/src/backend/parser/cypher_expr.c @@ -633,6 +633,10 @@ static Node *transform_cypher_map(cypher_parsestate *cpstate, cypher_map *cm) { func_oid = get_ag_func_oid("agtype_build_map", 0); } + else if (!cm->keep_null) + { + func_oid = get_ag_func_oid("agtype_build_map_nonull", 1, ANYOID); + } else { func_oid = get_ag_func_oid("agtype_build_map", 1, ANYOID); diff --git a/src/backend/utils/adt/agtype.c b/src/backend/utils/adt/agtype.c index 62ecd8b30..22bf462c7 100644 --- a/src/backend/utils/adt/agtype.c +++ b/src/backend/utils/adt/agtype.c @@ -174,6 +174,7 @@ static int extract_variadic_args_min(FunctionCallInfo fcinfo, int variadic_start, bool convert_unknown, Datum **args, Oid **types, bool **nulls, int min_num_args); +static agtype_value* agtype_build_map_as_agtype_value(FunctionCallInfo fcinfo); agtype_value *agtype_composite_to_agtype_value_binary(agtype *a); /* global storage of OID for agtype and _agtype */ @@ -1838,6 +1839,39 @@ static void composite_to_agtype(Datum composite, agtype_in_state *result) ReleaseTupleDesc(tupdesc); } +/* + * Removes properties with null value from the given agtype object. + */ +void remove_null_from_agtype_object(agtype_value *object) +{ + agtype_pair *avail; // next available position + agtype_pair *ptr; + + if (object->type != AGTV_OBJECT) + { + ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("a map is expected"))); + } + + avail = object->val.object.pairs; + ptr = object->val.object.pairs; + + while (ptr - object->val.object.pairs < object->val.object.num_pairs) + { + if (ptr->value.type != AGTV_NULL) + { + if (ptr != avail) + { + memcpy(avail, ptr, sizeof(agtype_pair)); + } + avail++; + } + ptr++; + } + + object->val.object.num_pairs = avail - object->val.object.pairs; +} + /* * Append agtype text for "val" to "result". * @@ -2313,12 +2347,7 @@ Datum make_edge(Datum id, Datum startid, Datum endid, Datum label, properties); } -PG_FUNCTION_INFO_V1(agtype_build_map); - -/* - * SQL function agtype_build_map(variadic "any") - */ -Datum agtype_build_map(PG_FUNCTION_ARGS) +static agtype_value* agtype_build_map_as_agtype_value(FunctionCallInfo fcinfo) { int nargs; int i; @@ -2364,8 +2393,18 @@ Datum agtype_build_map(PG_FUNCTION_ARGS) } result.res = push_agtype_value(&result.parse_state, WAGT_END_OBJECT, NULL); + return result.res; +} - PG_RETURN_POINTER(agtype_value_to_agtype(result.res)); +PG_FUNCTION_INFO_V1(agtype_build_map); + +/* + * SQL function agtype_build_map(variadic "any") + */ +Datum agtype_build_map(PG_FUNCTION_ARGS) +{ + agtype_value *result= agtype_build_map_as_agtype_value(fcinfo); + PG_RETURN_POINTER(agtype_value_to_agtype(result)); } PG_FUNCTION_INFO_V1(agtype_build_map_noargs); @@ -2385,6 +2424,18 @@ Datum agtype_build_map_noargs(PG_FUNCTION_ARGS) PG_RETURN_POINTER(agtype_value_to_agtype(result.res)); } +PG_FUNCTION_INFO_V1(agtype_build_map_nonull); + +/* + * Similar to agtype_build_map except null properties are removed. + */ +Datum agtype_build_map_nonull(PG_FUNCTION_ARGS) +{ + agtype_value *result= agtype_build_map_as_agtype_value(fcinfo); + remove_null_from_agtype_object(result); + PG_RETURN_POINTER(agtype_value_to_agtype(result)); +} + PG_FUNCTION_INFO_V1(agtype_build_list); /* @@ -8379,10 +8430,15 @@ agtype_value *alter_property_value(agtype_value *properties, char *var_name, return parsed_agtype_value; } -/** - * Returns the map contained within the provided agtype. +/* + * Appends new_properties into a copy of original_properties. If the + * original_properties is NULL, returns new_properties. + * + * This is a helper function used by the SET clause executor for + * updating properties with the equal, or plus-equal operator and a map. */ -agtype_value *get_map_from_agtype(agtype *a) +agtype_value *alter_properties(agtype_value *original_properties, + agtype *new_properties) { agtype_iterator *it; agtype_iterator_token tok = WAGT_DONE; @@ -8391,9 +8447,34 @@ agtype_value *get_map_from_agtype(agtype *a) agtype_value *value; agtype_value *parsed_agtype_value = NULL; + parsed_agtype_value = push_agtype_value(&parse_state, WAGT_BEGIN_OBJECT, + NULL); + + // Copy original properties. + if (original_properties) + { + int i; + + if (original_properties->type != AGTV_OBJECT) + { + ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("a map is expected"))); + } + + for (i = 0; i < original_properties->val.object.num_pairs; i++) + { + agtype_pair* pair = original_properties->val.object.pairs + i; + parsed_agtype_value = push_agtype_value(&parse_state, WAGT_KEY, + &pair->key); + parsed_agtype_value = push_agtype_value(&parse_state, WAGT_VALUE, + &pair->value); + } + } + + // Append new properties. key = palloc0(sizeof(agtype_value)); value = palloc0(sizeof(agtype_value)); - it = agtype_iterator_init(&a->root); + it = agtype_iterator_init(&new_properties->root); tok = agtype_iterator_next(&it, key, true); if (tok != WAGT_BEGIN_OBJECT) @@ -8402,9 +8483,6 @@ agtype_value *get_map_from_agtype(agtype *a) errmsg("a map is expected"))); } - parsed_agtype_value = push_agtype_value(&parse_state, WAGT_BEGIN_OBJECT, - NULL); - while (true) { tok = agtype_iterator_next(&it, key, true); @@ -8416,13 +8494,10 @@ agtype_value *get_map_from_agtype(agtype *a) agtype_iterator_next(&it, value, true); - if (value->type != AGTV_NULL) - { - parsed_agtype_value = push_agtype_value(&parse_state, WAGT_KEY, - key); - parsed_agtype_value = push_agtype_value(&parse_state, WAGT_VALUE, - value); - } + parsed_agtype_value = push_agtype_value(&parse_state, WAGT_KEY, + key); + parsed_agtype_value = push_agtype_value(&parse_state, WAGT_VALUE, + value); } parsed_agtype_value = push_agtype_value(&parse_state, WAGT_END_OBJECT, diff --git a/src/include/nodes/cypher_nodes.h b/src/include/nodes/cypher_nodes.h index 66807068f..afe3127ee 100644 --- a/src/include/nodes/cypher_nodes.h +++ b/src/include/nodes/cypher_nodes.h @@ -195,6 +195,7 @@ typedef struct cypher_map ExtensibleNode extensible; List *keyvals; int location; + bool keep_null; // if false, keyvals with null value are removed } cypher_map; typedef struct cypher_list @@ -374,6 +375,7 @@ typedef struct cypher_update_item char *prop_name; List *qualified_name; bool remove_item; + bool is_add; } cypher_update_item; typedef struct cypher_delete_information diff --git a/src/include/utils/agtype.h b/src/include/utils/agtype.h index 5f45eac21..4433ef533 100644 --- a/src/include/utils/agtype.h +++ b/src/include/utils/agtype.h @@ -523,8 +523,9 @@ bool is_decimal_needed(char *numstr); int compare_agtype_scalar_values(agtype_value *a, agtype_value *b); agtype_value *alter_property_value(agtype_value *properties, char *var_name, agtype *new_v, bool remove_property); -agtype_value *get_map_from_agtype(agtype *a); - +void remove_null_from_agtype_object(agtype_value *object); +agtype_value *alter_properties(agtype_value *original_properties, + agtype *new_properties); agtype *get_one_agtype_from_variadic_args(FunctionCallInfo fcinfo, int variadic_offset, int expected_nargs); From 42f94e7f36dc084b74ec335536a18173c6fca4cd Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed <85064039+MuhammadTahaNaveed@users.noreply.github.com> Date: Wed, 1 Feb 2023 05:37:51 +0500 Subject: [PATCH 103/191] Implement CI test for python driver (#587) - This CI workflow will run python driver unit tests and ensure that any PR/commit that modifies files under age/drivers/python is passing the tests. - Moved docker-compose.yaml file in age/drivers/golang to age/drivers,because this is required to instaniate a postgres instance, needed for unit testing. - Modified host address of connection params to localhost in 'test_age_py.py' to connect to postgres instance running in docker container. --- .github/workflows/python-driver.yaml | 45 +++++++++++++++++++++++++ drivers/{golang => }/docker-compose.yml | 0 drivers/python/test_age_py.py | 4 +-- 3 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/python-driver.yaml rename drivers/{golang => }/docker-compose.yml (100%) diff --git a/.github/workflows/python-driver.yaml b/.github/workflows/python-driver.yaml new file mode 100644 index 000000000..fb6ca3b33 --- /dev/null +++ b/.github/workflows/python-driver.yaml @@ -0,0 +1,45 @@ +name: Python Driver Tests + +on: + push: + branches: [ "master" ] + paths: + - 'drivers/python/**' + + pull_request: + branches: [ "master" ] + paths: + - 'drivers/python/**' + +jobs: + build: + runs-on: ubuntu-latest + + defaults: + run: + working-directory: drivers/python + + steps: + - uses: actions/checkout@v3 + + - name: Run apache/age docker image + run: docker-compose up -d + + - name: Set up python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Install pre-requisites + run: | + sudo apt-get install python3-dev libpq-dev + pip install -r requirements.txt + + - name: Build + run: | + python setup.py install + + - name: Test + run: | + python -m unittest -v test_age_py.py + python -m unittest -v test_agtypes.py diff --git a/drivers/golang/docker-compose.yml b/drivers/docker-compose.yml similarity index 100% rename from drivers/golang/docker-compose.yml rename to drivers/docker-compose.yml diff --git a/drivers/python/test_age_py.py b/drivers/python/test_age_py.py index 1758989e0..dfc5fe237 100644 --- a/drivers/python/test_age_py.py +++ b/drivers/python/test_age_py.py @@ -18,8 +18,8 @@ import decimal import age -DSN = "host=172.17.0.2 port=5432 dbname=postgres user=postgres password=agens" -TEST_HOST = "172.17.0.2" +DSN = "host=127.0.0.1 port=5432 dbname=postgres user=postgres password=agens" +TEST_HOST = "127.0.0.1" TEST_PORT = 5432 TEST_DB = "postgres" TEST_USER = "postgres" From 0a089f3f0cc56396b39f8caa9fda09b1ceccc969 Mon Sep 17 00:00:00 2001 From: Nandhini1809 <123108251+Nandhini1809@users.noreply.github.com> Date: Thu, 2 Feb 2023 12:35:47 -0800 Subject: [PATCH 104/191] Update readme (#649) Updated developer mailing list email --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0336853db..49c26ed02 100644 --- a/README.md +++ b/README.md @@ -324,7 +324,7 @@ Join the AGE community for help, questions, discussions, and contributions. - Check our [website](https://age.apache.org/) - Chat live with us on [Discord](https://discord.com/invite/NMsBs9X8Ss/) - Follow us on [Twitter](https://twitter.com/apache_age?s=20&t=7Hu8Txk4vjvuEp-ryakacg) -- Join our [Dev community](https://lists.apache.org/list.html?dev@age.apache.org) +- Subscribe to our developer mailing list by sending an email to dev-subscribe@age.apache.org

  Graph Visualization Tool for AGE

From 13e647c035b08cf42e8c5bf4730e665613c26d41 Mon Sep 17 00:00:00 2001 From: yadav9887 <123498106+yadav9887@users.noreply.github.com> Date: Thu, 2 Feb 2023 12:53:03 -0800 Subject: [PATCH 105/191] Update Readme (#650) Added user mailing list subscription --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 49c26ed02..eec7a8dce 100644 --- a/README.md +++ b/README.md @@ -325,6 +325,7 @@ Join the AGE community for help, questions, discussions, and contributions. - Chat live with us on [Discord](https://discord.com/invite/NMsBs9X8Ss/) - Follow us on [Twitter](https://twitter.com/apache_age?s=20&t=7Hu8Txk4vjvuEp-ryakacg) - Subscribe to our developer mailing list by sending an email to dev-subscribe@age.apache.org +- Subscribe to our user mailing list by sending an email to users-subscribe@age.apache.org

  Graph Visualization Tool for AGE

From 9e41690885ca78e573d2fff84630916ddf217b36 Mon Sep 17 00:00:00 2001 From: WALEED SHAHID <75040621+waleedahmed0001@users.noreply.github.com> Date: Tue, 7 Feb 2023 21:35:47 +0500 Subject: [PATCH 106/191] Add video links (#634) Added different video tutorials in it which will help in installation of Apache Age on Windows and MacOS. --- README.md | 8 ++++++++ img/videos.png | Bin 0 -> 209 bytes 2 files changed, 8 insertions(+) create mode 100644 img/videos.png diff --git a/README.md b/README.md index eec7a8dce..0352189c4 100644 --- a/README.md +++ b/README.md @@ -343,6 +343,14 @@ After installing AGE Extension, you may use this tool to get access to the visua ![Viewer gdb, and graph](/img/agce.gif) +

  Video Links

+ +You can also get help from these videos. + +- Install on [Windows](https://www.youtube.com/watch?v=ddk8VX8Hm-I&list=PLGp3huJbWNDjgwP7s99Q-9_w1vxpjNHXG) +- Install on [MacOS](https://www.youtube.com/watch?v=0-qMwpDh0CA) + +

  Contributing

diff --git a/img/videos.png b/img/videos.png new file mode 100644 index 0000000000000000000000000000000000000000..46490a1881f00105f88c6cfc130b1cbe592dcea5 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjoCO|{#S9GG!XV7ZFl!D-MYE@i zV@SoEw^t3h4mk+4K3xBaP43X4>LnY#>dZUZeWOC?_SW;PK|N==oOp!Hf+ap3UM+Ty zf3v~iV?0(ig1wqsvt1$=*x0Ek-|Js{B;@=q)^ZtR)<(wgH=9`kFF$UIou-f_XOYhB zS8uvV@$=+-i$5B9LT3_>Hci^QZg;Cn>Z=DiKaO!PD4qXozviPRpmP{JUHx3vIVCg! E0Qr|qLjV8( literal 0 HcmV?d00001 From 7a68d6813e9d8c760a6f489cf0d4637931c9a36a Mon Sep 17 00:00:00 2001 From: udaiganny67 <122323453+udaiganny67@users.noreply.github.com> Date: Tue, 7 Feb 2023 22:23:44 -0800 Subject: [PATCH 107/191] Update README.md (#651) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0352189c4..2ae335130 100644 --- a/README.md +++ b/README.md @@ -326,6 +326,7 @@ Join the AGE community for help, questions, discussions, and contributions. - Follow us on [Twitter](https://twitter.com/apache_age?s=20&t=7Hu8Txk4vjvuEp-ryakacg) - Subscribe to our developer mailing list by sending an email to dev-subscribe@age.apache.org - Subscribe to our user mailing list by sending an email to users-subscribe@age.apache.org +- Subscribe to our committer mailing list (To become a committer) by sending an email to commits-subscribe@age.apache.org

  Graph Visualization Tool for AGE

From ed483c77b3d53ff152d406bb889ba6d7da7d4f3c Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed <85064039+MuhammadTahaNaveed@users.noreply.github.com> Date: Wed, 15 Feb 2023 02:52:03 +0500 Subject: [PATCH 108/191] Move from travis CI to github actions for build (#676) - Added installcheck.yaml - Removed .travis.yaml file --- .github/workflows/installcheck.yaml | 52 +++++++++++++++++++++++++++++ .travis.yml | 17 ---------- 2 files changed, 52 insertions(+), 17 deletions(-) create mode 100644 .github/workflows/installcheck.yaml delete mode 100644 .travis.yml diff --git a/.github/workflows/installcheck.yaml b/.github/workflows/installcheck.yaml new file mode 100644 index 000000000..b18921f21 --- /dev/null +++ b/.github/workflows/installcheck.yaml @@ -0,0 +1,52 @@ +name: Build / Regression + +on: + push: + branches: [ 'master', 'PG11' ] + pull_request: + branches: [ 'master', 'PG11' ] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Get latest commit id of PostgreSQL 11 + run: | + echo "PG_COMMIT_HASH=$(git ls-remote git://git.postgresql.org/git/postgresql.git refs/heads/REL_11_STABLE | awk '{print $1}')" >> $GITHUB_ENV + + - name: Cache PostgreSQL 11 + uses: actions/cache@v3 + id: pg11cache + with: + path: ~/pg11 + key: ${{ runner.os }}-v1-pg11-${{ env.PG_COMMIT_HASH }} + + - name: Install PostgreSQL 11 + if: steps.pg11cache.outputs.cache-hit != 'true' + run: | + git clone --depth 1 --branch REL_11_STABLE git://git.postgresql.org/git/postgresql.git ~/pg11source + cd ~/pg11source + ./configure --prefix=$HOME/pg11 CFLAGS="-std=gnu99 -ggdb -O0" --enable-cassert + make install -j$(nproc) > /dev/null + + - uses: actions/checkout@v3 + + - name: Build + id: build + run: | + make PG_CONFIG=$HOME/pg11/bin/pg_config install -j$(nproc) + + - name: Regression tests + id: regression_tests + run: | + make PG_CONFIG=$HOME/pg11/bin/pg_config installcheck + continue-on-error: true + + - name: Dump regression test errors + if: steps.regression_tests.outcome != 'success' + run: | + echo "Dump section begin." + cat $HOME/work/age/age/regress/regression.diffs + echo "Dump section end." + exit 1 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 7dadc21a4..000000000 --- a/.travis.yml +++ /dev/null @@ -1,17 +0,0 @@ -language: c -os: linux -dist: bionic -arch: amd64 -jobs: - include: - - name: PostgreSQL 11 - compiler: gcc - addons: - apt: - packages: - - postgresql-11 - - postgresql-server-dev-11 - script: - - sudo make install -j$(nproc) - - make installcheck - after_failure: cat regress/regression.diffs From 5d751411ddef7c046ce2ff5840481036d553d54d Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed <85064039+MuhammadTahaNaveed@users.noreply.github.com> Date: Wed, 15 Feb 2023 03:07:30 +0500 Subject: [PATCH 109/191] Fix golang driver workflow (#563) * added paths directive to on: pull request * Now this CI will only run when a commit or PR has touched any file in drivers/golang --- .github/workflows/go-driver.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/go-driver.yml b/.github/workflows/go-driver.yml index 25fcf770a..a2b543cd9 100644 --- a/.github/workflows/go-driver.yml +++ b/.github/workflows/go-driver.yml @@ -4,9 +4,12 @@ on: push: branches: [ "master" ] paths: - - 'drivers/golang' + - 'drivers/golang/**' + pull_request: branches: [ "master" ] + paths: + - 'drivers/golang/**' jobs: build: From e87a8443653db3f4e590b5461f74930ac396b51d Mon Sep 17 00:00:00 2001 From: fatima <63642648+fatimafatimaprogrammer@users.noreply.github.com> Date: Thu, 16 Feb 2023 00:16:22 +0000 Subject: [PATCH 110/191] Updated Readme for drivers folder (#642) * Updated Readme for drivers folder and added important links related to Apache-AGE project which were included in other readme files. * Updated NodeJS driver readme and added important links of Apache-AGE project as included in other readme files. --- drivers/README | 5 +++++ drivers/nodejs/README.md | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/drivers/README b/drivers/README index 2026129fa..19f34d8b5 100644 --- a/drivers/README +++ b/drivers/README @@ -16,3 +16,8 @@ # under the License. This folder contains drivers for specific languages + +### For more information about [Apache AGE](https://age.apache.org/) +* Apache Age : https://age.apache.org/ +* Github : https://github.com/apache/age +* Document : https://age.apache.org/age-manual/master/index.html diff --git a/drivers/nodejs/README.md b/drivers/nodejs/README.md index f2d4228c4..c15632200 100644 --- a/drivers/nodejs/README.md +++ b/drivers/nodejs/README.md @@ -46,3 +46,7 @@ const results: QueryResultRow = await client?.query(` $$) as (a agtype); `)! ``` +### For more information about [Apache AGE](https://age.apache.org/) +* Apache Age : https://age.apache.org/ +* Github : https://github.com/apache/age +* Document : https://age.apache.org/age-manual/master/index.html From 66c3ca684f4e3bc44ed76987390b2217f343fbdf Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed <85064039+MuhammadTahaNaveed@users.noreply.github.com> Date: Thu, 16 Feb 2023 22:13:15 +0500 Subject: [PATCH 111/191] Implement CI test for jdbc driver (#665) - This CI will only run whenever a PR or commit touches files drivers/jdbc. - Added logger to display the result of tests i.e. passing, failing etc. --- .github/workflows/jdbc-driver.yaml | 32 ++++++++++++++++++++++++++++++ drivers/jdbc/lib/build.gradle.kts | 19 +++++++++++++++++- 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/jdbc-driver.yaml diff --git a/.github/workflows/jdbc-driver.yaml b/.github/workflows/jdbc-driver.yaml new file mode 100644 index 000000000..0946bdc3b --- /dev/null +++ b/.github/workflows/jdbc-driver.yaml @@ -0,0 +1,32 @@ +name: JDBC Driver Tests + +on: + push: + branches: [ "master", "PG11" ] + + pull_request: + branches: [ "master", "PG11" ] + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + distributions: ['zulu', 'temurin', 'microsoft'] + + defaults: + run: + working-directory: drivers/jdbc + + steps: + - uses: actions/checkout@v3 + + - name: Set up Java + uses: actions/setup-java@v3 + with: + distribution: ${{ matrix.distributions }} + java-version: '17' + + - name: Build and Test + run: gradle build \ No newline at end of file diff --git a/drivers/jdbc/lib/build.gradle.kts b/drivers/jdbc/lib/build.gradle.kts index 86af61ac8..5e2d0f27b 100644 --- a/drivers/jdbc/lib/build.gradle.kts +++ b/drivers/jdbc/lib/build.gradle.kts @@ -17,6 +17,9 @@ * under the License. */ +import org.gradle.api.tasks.testing.logging.TestExceptionFormat +import org.gradle.api.tasks.testing.logging.TestLogEvent + plugins { `java-library` antlr @@ -36,6 +39,9 @@ dependencies { testImplementation("org.testcontainers:testcontainers:1.15.3") testImplementation("org.postgresql:postgresql:42.2.20") + + testImplementation("org.slf4j:slf4j-api:1.7.5") + testImplementation("org.slf4j:slf4j-simple:1.7.5") } tasks.generateGrammarSource { @@ -50,5 +56,16 @@ tasks.generateGrammarSource { } tasks.test { - useJUnitPlatform() + useJUnitPlatform(); + testLogging { + // set options for log level LIFECYCLE + events(TestLogEvent.FAILED, + TestLogEvent.PASSED, + TestLogEvent.SKIPPED, + TestLogEvent.STANDARD_OUT) + exceptionFormat = TestExceptionFormat.FULL + showExceptions = true + showCauses = true + showStackTraces = true + } } From cf87827e56c623a316c1e534738ef241da59ce31 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed <85064039+MuhammadTahaNaveed@users.noreply.github.com> Date: Thu, 16 Feb 2023 22:45:02 +0500 Subject: [PATCH 112/191] Update Go driver CI to run on every PR/commit (#683) - Removed path directive - Included PG11 as trigger branch --- .github/workflows/go-driver.yml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/go-driver.yml b/.github/workflows/go-driver.yml index a2b543cd9..fbf2cec99 100644 --- a/.github/workflows/go-driver.yml +++ b/.github/workflows/go-driver.yml @@ -2,14 +2,10 @@ name: Go Driver Tests on: push: - branches: [ "master" ] - paths: - - 'drivers/golang/**' + branches: [ "master", PG11 ] pull_request: - branches: [ "master" ] - paths: - - 'drivers/golang/**' + branches: [ "master", PG11 ] jobs: build: From 74eef31c59410f63cff1ed48679a85045321f59c Mon Sep 17 00:00:00 2001 From: Fahad Zaheer <52493343+FahadZaheerfzr@users.noreply.github.com> Date: Fri, 17 Feb 2023 00:41:00 +0500 Subject: [PATCH 113/191] Removed async from function definitions (#680) Found async function without any await expressions in NodeJS Driver. Async keyword is used in Asynchronous programming and for the functions that wait for some responses. These functions dont need to be Asynchronous. --- drivers/nodejs/test/Agtype.test.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/nodejs/test/Agtype.test.ts b/drivers/nodejs/test/Agtype.test.ts index 27f5f4e4e..5ae26b549 100644 --- a/drivers/nodejs/test/Agtype.test.ts +++ b/drivers/nodejs/test/Agtype.test.ts @@ -20,7 +20,7 @@ import { AGTypeParse } from '../src' describe('Parsing', () => { - it('Vertex', async () => { + it('Vertex', () => { expect( AGTypeParse('{"id": 844424930131969, "label": "Part", "properties": {"part_num": "123", "number": 3141592653589793, "float": 3.141592653589793}}::vertex') ).toStrictEqual(new Map(Object.entries({ @@ -34,7 +34,7 @@ describe('Parsing', () => { }))) }) - it('Edge', async () => { + it('Edge', () => { expect( AGTypeParse('{"id": 1125899906842625, "label": "used_by", "end_id": 844424930131970, "start_id": 844424930131969, "properties": {"quantity": 1}}::edge') ).toStrictEqual(new Map(Object.entries({ @@ -46,7 +46,7 @@ describe('Parsing', () => { }))) }) - it('Path', async () => { + it('Path', () => { expect( AGTypeParse('[{"id": 844424930131969, "label": "Part", "properties": {"part_num": "123"}}::vertex, {"id": 1125899906842625, "label": "used_by", "end_id": 844424930131970, "start_id": 844424930131969, "properties": {"quantity": 1}}::edge, {"id": 844424930131970, "label": "Part", "properties": {"part_num": "345"}}::vertex]::path') ).toStrictEqual([ @@ -70,7 +70,7 @@ describe('Parsing', () => { ]) }) - it('Null Properties', async () => { + it('Null Properties', () => { expect( AGTypeParse('{"id": 1688849860263937, "label": "car", "properties": {}}::vertex') ).toStrictEqual(new Map(Object.entries({ From 1af3f44cd8fa2aa19ffb59e14a41a5b4964ea908 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed <85064039+MuhammadTahaNaveed@users.noreply.github.com> Date: Fri, 17 Feb 2023 06:08:08 +0500 Subject: [PATCH 114/191] Update python driver CI to run on every PR/commit (#684) - Removed path directive - Included PG11 as trigger branch --- .github/workflows/python-driver.yaml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/python-driver.yaml b/.github/workflows/python-driver.yaml index fb6ca3b33..720e8c22f 100644 --- a/.github/workflows/python-driver.yaml +++ b/.github/workflows/python-driver.yaml @@ -2,14 +2,10 @@ name: Python Driver Tests on: push: - branches: [ "master" ] - paths: - - 'drivers/python/**' + branches: [ "master", "PG11" ] pull_request: - branches: [ "master" ] - paths: - - 'drivers/python/**' + branches: [ "master", "PG11" ] jobs: build: From 7628c85edbb95bbb6cf7caa7501f12c1aa40c9f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Aur=C3=A9lio=20Silva=20de=20Souza=20J=C3=BAnior?= <57829631+markgomer@users.noreply.github.com> Date: Fri, 17 Feb 2023 15:45:05 -0300 Subject: [PATCH 115/191] Barbell graph generation (#648) * Added function to create a Barbell Graph * Created auxiliary function to get_next_val_internal; * Currently creates a bridge of no vertexes between graphs, will be implemented next. * Added signature to age_create_barbell_graph * Moved bracket to next line to macth code standards * Fixed patterns to match code standards * moved PG_FUNCTION_INFO_V1(age_create_barbell_graph) next to age_create_barbell_graph function; * added brackets to if/else conditions if just one line; * moved get_nextval_internal auxiliary function to the beggining of the file. --- age--1.2.0.sql | 13 +++ src/backend/utils/graph_generation.c | 156 ++++++++++++++++++++++++++- 2 files changed, 165 insertions(+), 4 deletions(-) diff --git a/age--1.2.0.sql b/age--1.2.0.sql index 3075824c9..e34b3c97c 100644 --- a/age--1.2.0.sql +++ b/age--1.2.0.sql @@ -4182,6 +4182,19 @@ CALLED ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; +CREATE FUNCTION ag_catalog.age_create_barbell_graph(graph_name name, + graph_size int, + bridge_size int, + node_label name = NULL, + node_properties agtype = NULL, + edge_label name = NULL, + edge_properties agtype = NULL) +RETURNS void +LANGUAGE c +CALLED ON NULL INPUT +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + CREATE FUNCTION ag_catalog.age_prepare_cypher(cstring, cstring) RETURNS boolean LANGUAGE c diff --git a/src/backend/utils/graph_generation.c b/src/backend/utils/graph_generation.c index 49da5f829..80ef85f29 100644 --- a/src/backend/utils/graph_generation.c +++ b/src/backend/utils/graph_generation.c @@ -41,14 +41,35 @@ #include "catalog/ag_graph.h" #include "catalog/ag_label.h" +#include "commands/graph_commands.h" #include "commands/label_commands.h" #include "utils/graphid.h" -#include "commands/graph_commands.h" #include "utils/load/age_load.h" #include "utils/load/ag_load_edges.h" #include "utils/load/ag_load_labels.h" +int64 get_nextval_internal(graph_cache_data* graph_cache, + label_cache_data* label_cache); +/* + * Auxiliary function to get the next internal value in the graph, + * so a new object (node or edge) graph id can be composed. + */ + +int64 get_nextval_internal(graph_cache_data* graph_cache, + label_cache_data* label_cache) +{ + Oid obj_seq_id; + char* label_seq_name_str; + + label_seq_name_str = NameStr(label_cache->seq_name); + obj_seq_id = get_relname_relid(label_seq_name_str, + graph_cache->namespace); + + return nextval_internal(obj_seq_id, true); +} + + PG_FUNCTION_INFO_V1(create_complete_graph); /* @@ -125,7 +146,6 @@ Datum create_complete_graph(PG_FUNCTION_ARGS) if (!graph_exists(graph_name_str)) { DirectFunctionCall1(create_graph, CStringGetDatum(graph_name)); - } graph_id = get_graph_oid(graph_name_str); @@ -194,10 +214,138 @@ Datum create_complete_graph(PG_FUNCTION_ARGS) insert_edge_simple(graph_id, edge_name_str, object_graph_id, start_vertex_graph_id, end_vertex_graph_id, props); - } } - PG_RETURN_VOID(); } + +PG_FUNCTION_INFO_V1(age_create_barbell_graph); + +/* + * The barbell graph is two complete graphs connected by a bridge path + * Syntax: + * ag_catalog.age_create_barbell_graph(graph_name Name, + * m int, + * n int, + * vertex_label_name Name DEFAULT = NULL, + * vertex_properties agtype DEFAULT = NULL, + * edge_label_name Name DEAULT = NULL, + * edge_properties agtype DEFAULT = NULL) + * Input: + * + * graph_name - Name of the graph to be created. + * m - number of vertices in one complete graph. + * n - number of vertices in the bridge path. + * vertex_label_name - Name of the label to assign each vertex to. + * vertex_properties - Property values to assign each vertex. Default is NULL + * edge_label_name - Name of the label to assign each edge to. + * edge_properties - Property values to assign each edge. Default is NULL + * + * https://en.wikipedia.org/wiki/Barbell_graph + */ + +Datum age_create_barbell_graph(PG_FUNCTION_ARGS) +{ + FunctionCallInfo arguments; + Oid graph_oid; + Name graph_name; + char* graph_name_str; + + int64 start_node_index, end_node_index, nextval; + + Name node_label_name = NULL; + int32 node_label_id; + char* node_label_str; + + Name edge_label_name; + int32 edge_label_id; + char* edge_label_str; + + graphid object_graph_id; + graphid start_node_graph_id; + graphid end_node_graph_id; + + graph_cache_data* graph_cache; + label_cache_data* edge_cache; + + agtype* properties = NULL; + + arguments = fcinfo; + + // create two separate complete graphs + DirectFunctionCall4(create_complete_graph, arguments->arg[0], + arguments->arg[1], + arguments->arg[5], + arguments->arg[3]); + DirectFunctionCall4(create_complete_graph, arguments->arg[0], + arguments->arg[1], + arguments->arg[5], + arguments->arg[3]); + + // Handling remaining arguments + /* + * graph_name: doesn't need to validate, since the create_complete_graph + * function already does that. + */ + graph_name = PG_GETARG_NAME(0); + graph_name_str = NameStr(*graph_name); + graph_oid = get_graph_oid(graph_name_str); + + /* + * int64 bridge_size: currently only stays at zero. + * to do: implement bridge with variable number of nodes. + */ + if (PG_ARGISNULL(2) || PG_GETARG_INT32(2) < 0 ) + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("Bridge size must not be NULL or lower than 0"))); + } + + // node label: if null, gets default label, which is "_ag_label_vertex" + if (PG_ARGISNULL(3)) + { + namestrcpy(node_label_name, AG_DEFAULT_LABEL_VERTEX); + } + else + { + node_label_name = PG_GETARG_NAME(3); + } + node_label_str = NameStr(*node_label_name); + node_label_id = get_label_id(node_label_str, graph_oid); + + /* + * edge_label: doesn't need to validate, since the create_complete_graph + * function already does that. + */ + edge_label_name = PG_GETARG_NAME(5); + edge_label_str = NameStr(*edge_label_name); + edge_label_id = get_label_id(edge_label_str, graph_oid); + + /* + * Fetching caches to get next values for graph id's, and access nodes + * to be connected with edges. + */ + graph_cache = search_graph_name_cache(graph_name_str); + edge_cache = search_label_name_graph_cache(edge_label_str,graph_oid); + + // connect a node from each graph + start_node_index = 1; // first created node, from the first complete graph + end_node_index = arguments->arg[1]*2; // last created node, second graph + + // next index to be assigned to a node or edge + nextval = get_nextval_internal(graph_cache, edge_cache); + + // build the graph id's of the edge to be created + object_graph_id = make_graphid(edge_label_id, nextval); + start_node_graph_id = make_graphid(node_label_id, start_node_index); + end_node_graph_id = make_graphid(node_label_id, end_node_index); + properties = create_empty_agtype(); + + // connect two nodes + insert_edge_simple(graph_oid, edge_label_str, + object_graph_id, start_node_graph_id, + end_node_graph_id, properties); + + PG_RETURN_VOID(); +} From a4df471ce3dbb342adcda3d276d77a0f048f0a4c Mon Sep 17 00:00:00 2001 From: Arunabh Das Date: Thu, 23 Feb 2023 17:54:29 +0800 Subject: [PATCH 116/191] UPDATED Python Driver ANTLR 4.9.3 -> 4.11.1 (#706) --- .gitignore | 2 + drivers/python/age/gen/AgtypeLexer.py | 153 +++++++++++------------ drivers/python/age/gen/AgtypeListener.py | 3 +- drivers/python/age/gen/AgtypeParser.py | 100 +++++++-------- drivers/python/age/gen/AgtypeVisitor.py | 3 +- drivers/python/antlr/README.md | 14 ++- drivers/python/requirements.txt | Bin 158 -> 160 bytes drivers/python/setup.py | 2 +- 8 files changed, 138 insertions(+), 139 deletions(-) diff --git a/.gitignore b/.gitignore index 78e991256..660286b03 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ build.sh .idea .deps .DS_Store +*.tokens +*.interp \ No newline at end of file diff --git a/drivers/python/age/gen/AgtypeLexer.py b/drivers/python/age/gen/AgtypeLexer.py index 543bee285..54f19c7db 100644 --- a/drivers/python/age/gen/AgtypeLexer.py +++ b/drivers/python/age/gen/AgtypeLexer.py @@ -12,7 +12,8 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -# Generated from Agtype.g4 by ANTLR 4.9.2 +# Generated from ../Agtype.g4 by ANTLR 4.11.1 + from antlr4 import * from io import StringIO import sys @@ -22,86 +23,76 @@ from typing.io import TextIO - def serializedATN(): - with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\25") - buf.write("\u00b9\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") - buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") - buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") - buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") - buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\3\2\3\2\3\2\3\2\3\2\3\3") - buf.write("\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3") - buf.write("\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\13\3\f") - buf.write("\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16") - buf.write("\3\16\3\17\3\17\7\17h\n\17\f\17\16\17k\13\17\3\20\3\20") - buf.write("\3\20\7\20p\n\20\f\20\16\20s\13\20\3\20\3\20\3\21\3\21") - buf.write("\3\21\5\21z\n\21\3\22\3\22\3\22\3\22\3\22\3\22\3\23\3") - buf.write("\23\3\24\3\24\3\25\5\25\u0087\n\25\3\25\3\25\3\26\3\26") - buf.write("\3\26\7\26\u008e\n\26\f\26\16\26\u0091\13\26\5\26\u0093") - buf.write("\n\26\3\27\5\27\u0096\n\27\3\27\3\27\3\27\3\30\5\30\u009c") - buf.write("\n\30\3\30\3\30\5\30\u00a0\n\30\3\30\3\30\3\31\3\31\6") - buf.write("\31\u00a6\n\31\r\31\16\31\u00a7\3\32\3\32\5\32\u00ac\n") - buf.write("\32\3\32\6\32\u00af\n\32\r\32\16\32\u00b0\3\33\6\33\u00b4") - buf.write("\n\33\r\33\16\33\u00b5\3\33\3\33\2\2\34\3\3\5\4\7\5\t") - buf.write("\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20") - buf.write("\37\21!\2#\2%\2\'\2)\22+\2-\23/\24\61\2\63\2\65\25\3\2") - buf.write("\f\5\2C\\aac|\7\2&&\62;C\\aac|\n\2$$\61\61^^ddhhppttv") - buf.write("v\5\2\62;CHch\5\2\2!$$^^\3\2\63;\3\2\62;\4\2GGgg\4\2-") - buf.write("-//\5\2\13\f\17\17\"\"\2\u00bf\2\3\3\2\2\2\2\5\3\2\2\2") - buf.write("\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17") - buf.write("\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3") - buf.write("\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2") - buf.write("\2\2\2)\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\65\3\2\2\2\3\67") - buf.write("\3\2\2\2\5<\3\2\2\2\7B\3\2\2\2\tG\3\2\2\2\13I\3\2\2\2") - buf.write("\rK\3\2\2\2\17M\3\2\2\2\21O\3\2\2\2\23Q\3\2\2\2\25S\3") - buf.write("\2\2\2\27V\3\2\2\2\31X\3\2\2\2\33a\3\2\2\2\35e\3\2\2\2") - buf.write("\37l\3\2\2\2!v\3\2\2\2#{\3\2\2\2%\u0081\3\2\2\2\'\u0083") - buf.write("\3\2\2\2)\u0086\3\2\2\2+\u0092\3\2\2\2-\u0095\3\2\2\2") - buf.write("/\u009b\3\2\2\2\61\u00a3\3\2\2\2\63\u00a9\3\2\2\2\65\u00b3") - buf.write("\3\2\2\2\678\7v\2\289\7t\2\29:\7w\2\2:;\7g\2\2;\4\3\2") - buf.write("\2\2<=\7h\2\2=>\7c\2\2>?\7n\2\2?@\7u\2\2@A\7g\2\2A\6\3") - buf.write("\2\2\2BC\7p\2\2CD\7w\2\2DE\7n\2\2EF\7n\2\2F\b\3\2\2\2") - buf.write("GH\7}\2\2H\n\3\2\2\2IJ\7.\2\2J\f\3\2\2\2KL\7\177\2\2L") - buf.write("\16\3\2\2\2MN\7<\2\2N\20\3\2\2\2OP\7]\2\2P\22\3\2\2\2") - buf.write("QR\7_\2\2R\24\3\2\2\2ST\7<\2\2TU\7<\2\2U\26\3\2\2\2VW") - buf.write("\7/\2\2W\30\3\2\2\2XY\7K\2\2YZ\7p\2\2Z[\7h\2\2[\\\7k\2") - buf.write("\2\\]\7p\2\2]^\7k\2\2^_\7v\2\2_`\7{\2\2`\32\3\2\2\2ab") - buf.write("\7P\2\2bc\7c\2\2cd\7P\2\2d\34\3\2\2\2ei\t\2\2\2fh\t\3") - buf.write("\2\2gf\3\2\2\2hk\3\2\2\2ig\3\2\2\2ij\3\2\2\2j\36\3\2\2") - buf.write("\2ki\3\2\2\2lq\7$\2\2mp\5!\21\2np\5\'\24\2om\3\2\2\2o") - buf.write("n\3\2\2\2ps\3\2\2\2qo\3\2\2\2qr\3\2\2\2rt\3\2\2\2sq\3") - buf.write("\2\2\2tu\7$\2\2u \3\2\2\2vy\7^\2\2wz\t\4\2\2xz\5#\22\2") - buf.write("yw\3\2\2\2yx\3\2\2\2z\"\3\2\2\2{|\7w\2\2|}\5%\23\2}~\5") - buf.write("%\23\2~\177\5%\23\2\177\u0080\5%\23\2\u0080$\3\2\2\2\u0081") - buf.write("\u0082\t\5\2\2\u0082&\3\2\2\2\u0083\u0084\n\6\2\2\u0084") - buf.write("(\3\2\2\2\u0085\u0087\7/\2\2\u0086\u0085\3\2\2\2\u0086") - buf.write("\u0087\3\2\2\2\u0087\u0088\3\2\2\2\u0088\u0089\5+\26\2") - buf.write("\u0089*\3\2\2\2\u008a\u0093\7\62\2\2\u008b\u008f\t\7\2") - buf.write("\2\u008c\u008e\t\b\2\2\u008d\u008c\3\2\2\2\u008e\u0091") - buf.write("\3\2\2\2\u008f\u008d\3\2\2\2\u008f\u0090\3\2\2\2\u0090") - buf.write("\u0093\3\2\2\2\u0091\u008f\3\2\2\2\u0092\u008a\3\2\2\2") - buf.write("\u0092\u008b\3\2\2\2\u0093,\3\2\2\2\u0094\u0096\7/\2\2") - buf.write("\u0095\u0094\3\2\2\2\u0095\u0096\3\2\2\2\u0096\u0097\3") - buf.write("\2\2\2\u0097\u0098\5+\26\2\u0098\u0099\5\61\31\2\u0099") - buf.write(".\3\2\2\2\u009a\u009c\7/\2\2\u009b\u009a\3\2\2\2\u009b") - buf.write("\u009c\3\2\2\2\u009c\u009d\3\2\2\2\u009d\u009f\5+\26\2") - buf.write("\u009e\u00a0\5\61\31\2\u009f\u009e\3\2\2\2\u009f\u00a0") - buf.write("\3\2\2\2\u00a0\u00a1\3\2\2\2\u00a1\u00a2\5\63\32\2\u00a2") - buf.write("\60\3\2\2\2\u00a3\u00a5\7\60\2\2\u00a4\u00a6\t\b\2\2\u00a5") - buf.write("\u00a4\3\2\2\2\u00a6\u00a7\3\2\2\2\u00a7\u00a5\3\2\2\2") - buf.write("\u00a7\u00a8\3\2\2\2\u00a8\62\3\2\2\2\u00a9\u00ab\t\t") - buf.write("\2\2\u00aa\u00ac\t\n\2\2\u00ab\u00aa\3\2\2\2\u00ab\u00ac") - buf.write("\3\2\2\2\u00ac\u00ae\3\2\2\2\u00ad\u00af\t\b\2\2\u00ae") - buf.write("\u00ad\3\2\2\2\u00af\u00b0\3\2\2\2\u00b0\u00ae\3\2\2\2") - buf.write("\u00b0\u00b1\3\2\2\2\u00b1\64\3\2\2\2\u00b2\u00b4\t\13") - buf.write("\2\2\u00b3\u00b2\3\2\2\2\u00b4\u00b5\3\2\2\2\u00b5\u00b3") - buf.write("\3\2\2\2\u00b5\u00b6\3\2\2\2\u00b6\u00b7\3\2\2\2\u00b7") - buf.write("\u00b8\b\33\2\2\u00b8\66\3\2\2\2\21\2ioqy\u0086\u008f") - buf.write("\u0092\u0095\u009b\u009f\u00a7\u00ab\u00b0\u00b5\3\b\2") - buf.write("\2") - return buf.getvalue() - + return [ + 4,0,19,183,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5, + 2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2, + 13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7, + 19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,1, + 0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1, + 3,1,3,1,4,1,4,1,5,1,5,1,6,1,6,1,7,1,7,1,8,1,8,1,9,1,9,1,9,1,10,1, + 10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1, + 12,1,13,1,13,5,13,102,8,13,10,13,12,13,105,9,13,1,14,1,14,1,14,5, + 14,110,8,14,10,14,12,14,113,9,14,1,14,1,14,1,15,1,15,1,15,3,15,120, + 8,15,1,16,1,16,1,16,1,16,1,16,1,16,1,17,1,17,1,18,1,18,1,19,3,19, + 133,8,19,1,19,1,19,1,20,1,20,1,20,5,20,140,8,20,10,20,12,20,143, + 9,20,3,20,145,8,20,1,21,3,21,148,8,21,1,21,1,21,1,21,1,22,3,22,154, + 8,22,1,22,1,22,3,22,158,8,22,1,22,1,22,1,23,1,23,4,23,164,8,23,11, + 23,12,23,165,1,24,1,24,3,24,170,8,24,1,24,4,24,173,8,24,11,24,12, + 24,174,1,25,4,25,178,8,25,11,25,12,25,179,1,25,1,25,0,0,26,1,1,3, + 2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14, + 29,15,31,0,33,0,35,0,37,0,39,16,41,0,43,17,45,18,47,0,49,0,51,19, + 1,0,10,3,0,65,90,95,95,97,122,5,0,36,36,48,57,65,90,95,95,97,122, + 8,0,34,34,47,47,92,92,98,98,102,102,110,110,114,114,116,116,3,0, + 48,57,65,70,97,102,3,0,0,31,34,34,92,92,1,0,49,57,1,0,48,57,2,0, + 69,69,101,101,2,0,43,43,45,45,3,0,9,10,13,13,32,32,189,0,1,1,0,0, + 0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0, + 13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0, + 23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,39,1,0,0,0,0, + 43,1,0,0,0,0,45,1,0,0,0,0,51,1,0,0,0,1,53,1,0,0,0,3,58,1,0,0,0,5, + 64,1,0,0,0,7,69,1,0,0,0,9,71,1,0,0,0,11,73,1,0,0,0,13,75,1,0,0,0, + 15,77,1,0,0,0,17,79,1,0,0,0,19,81,1,0,0,0,21,84,1,0,0,0,23,86,1, + 0,0,0,25,95,1,0,0,0,27,99,1,0,0,0,29,106,1,0,0,0,31,116,1,0,0,0, + 33,121,1,0,0,0,35,127,1,0,0,0,37,129,1,0,0,0,39,132,1,0,0,0,41,144, + 1,0,0,0,43,147,1,0,0,0,45,153,1,0,0,0,47,161,1,0,0,0,49,167,1,0, + 0,0,51,177,1,0,0,0,53,54,5,116,0,0,54,55,5,114,0,0,55,56,5,117,0, + 0,56,57,5,101,0,0,57,2,1,0,0,0,58,59,5,102,0,0,59,60,5,97,0,0,60, + 61,5,108,0,0,61,62,5,115,0,0,62,63,5,101,0,0,63,4,1,0,0,0,64,65, + 5,110,0,0,65,66,5,117,0,0,66,67,5,108,0,0,67,68,5,108,0,0,68,6,1, + 0,0,0,69,70,5,123,0,0,70,8,1,0,0,0,71,72,5,44,0,0,72,10,1,0,0,0, + 73,74,5,125,0,0,74,12,1,0,0,0,75,76,5,58,0,0,76,14,1,0,0,0,77,78, + 5,91,0,0,78,16,1,0,0,0,79,80,5,93,0,0,80,18,1,0,0,0,81,82,5,58,0, + 0,82,83,5,58,0,0,83,20,1,0,0,0,84,85,5,45,0,0,85,22,1,0,0,0,86,87, + 5,73,0,0,87,88,5,110,0,0,88,89,5,102,0,0,89,90,5,105,0,0,90,91,5, + 110,0,0,91,92,5,105,0,0,92,93,5,116,0,0,93,94,5,121,0,0,94,24,1, + 0,0,0,95,96,5,78,0,0,96,97,5,97,0,0,97,98,5,78,0,0,98,26,1,0,0,0, + 99,103,7,0,0,0,100,102,7,1,0,0,101,100,1,0,0,0,102,105,1,0,0,0,103, + 101,1,0,0,0,103,104,1,0,0,0,104,28,1,0,0,0,105,103,1,0,0,0,106,111, + 5,34,0,0,107,110,3,31,15,0,108,110,3,37,18,0,109,107,1,0,0,0,109, + 108,1,0,0,0,110,113,1,0,0,0,111,109,1,0,0,0,111,112,1,0,0,0,112, + 114,1,0,0,0,113,111,1,0,0,0,114,115,5,34,0,0,115,30,1,0,0,0,116, + 119,5,92,0,0,117,120,7,2,0,0,118,120,3,33,16,0,119,117,1,0,0,0,119, + 118,1,0,0,0,120,32,1,0,0,0,121,122,5,117,0,0,122,123,3,35,17,0,123, + 124,3,35,17,0,124,125,3,35,17,0,125,126,3,35,17,0,126,34,1,0,0,0, + 127,128,7,3,0,0,128,36,1,0,0,0,129,130,8,4,0,0,130,38,1,0,0,0,131, + 133,5,45,0,0,132,131,1,0,0,0,132,133,1,0,0,0,133,134,1,0,0,0,134, + 135,3,41,20,0,135,40,1,0,0,0,136,145,5,48,0,0,137,141,7,5,0,0,138, + 140,7,6,0,0,139,138,1,0,0,0,140,143,1,0,0,0,141,139,1,0,0,0,141, + 142,1,0,0,0,142,145,1,0,0,0,143,141,1,0,0,0,144,136,1,0,0,0,144, + 137,1,0,0,0,145,42,1,0,0,0,146,148,5,45,0,0,147,146,1,0,0,0,147, + 148,1,0,0,0,148,149,1,0,0,0,149,150,3,41,20,0,150,151,3,47,23,0, + 151,44,1,0,0,0,152,154,5,45,0,0,153,152,1,0,0,0,153,154,1,0,0,0, + 154,155,1,0,0,0,155,157,3,41,20,0,156,158,3,47,23,0,157,156,1,0, + 0,0,157,158,1,0,0,0,158,159,1,0,0,0,159,160,3,49,24,0,160,46,1,0, + 0,0,161,163,5,46,0,0,162,164,7,6,0,0,163,162,1,0,0,0,164,165,1,0, + 0,0,165,163,1,0,0,0,165,166,1,0,0,0,166,48,1,0,0,0,167,169,7,7,0, + 0,168,170,7,8,0,0,169,168,1,0,0,0,169,170,1,0,0,0,170,172,1,0,0, + 0,171,173,7,6,0,0,172,171,1,0,0,0,173,174,1,0,0,0,174,172,1,0,0, + 0,174,175,1,0,0,0,175,50,1,0,0,0,176,178,7,9,0,0,177,176,1,0,0,0, + 178,179,1,0,0,0,179,177,1,0,0,0,179,180,1,0,0,0,180,181,1,0,0,0, + 181,182,6,25,0,0,182,52,1,0,0,0,15,0,103,109,111,119,132,141,144, + 147,153,157,165,169,174,179,1,6,0,0 + ] class AgtypeLexer(Lexer): @@ -151,7 +142,7 @@ class AgtypeLexer(Lexer): def __init__(self, input=None, output:TextIO = sys.stdout): super().__init__(input, output) - self.checkVersion("4.9.2") + self.checkVersion("4.11.1") self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) self._actions = None self._predicates = None diff --git a/drivers/python/age/gen/AgtypeListener.py b/drivers/python/age/gen/AgtypeListener.py index 15016bf99..6e60da421 100644 --- a/drivers/python/age/gen/AgtypeListener.py +++ b/drivers/python/age/gen/AgtypeListener.py @@ -12,7 +12,8 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -# Generated from Agtype.g4 by ANTLR 4.9.2 +# Generated from ../Agtype.g4 by ANTLR 4.11.1 + from antlr4 import * if __name__ is not None and "." in __name__: from .AgtypeParser import AgtypeParser diff --git a/drivers/python/age/gen/AgtypeParser.py b/drivers/python/age/gen/AgtypeParser.py index ff98746a6..daaf578e8 100644 --- a/drivers/python/age/gen/AgtypeParser.py +++ b/drivers/python/age/gen/AgtypeParser.py @@ -12,8 +12,9 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -# Generated from Agtype.g4 by ANTLR 4.9.2 +# Generated from ../Agtype.g4 by ANTLR 4.11.1 # encoding: utf-8 + from antlr4 import * from io import StringIO import sys @@ -22,39 +23,35 @@ else: from typing.io import TextIO - def serializedATN(): - with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\25") - buf.write("R\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b") - buf.write("\t\b\4\t\t\t\3\2\3\2\3\2\3\3\3\3\5\3\30\n\3\3\4\3\4\3") - buf.write("\4\3\4\3\4\3\4\3\4\3\4\5\4\"\n\4\3\5\3\5\3\5\3\5\7\5(") - buf.write("\n\5\f\5\16\5+\13\5\3\5\3\5\3\5\3\5\5\5\61\n\5\3\6\3\6") - buf.write("\3\6\3\6\3\7\3\7\3\7\3\7\7\7;\n\7\f\7\16\7>\13\7\3\7\3") - buf.write("\7\3\7\3\7\5\7D\n\7\3\b\3\b\3\b\3\t\3\t\3\t\5\tL\n\t\3") - buf.write("\t\3\t\5\tP\n\t\3\t\2\2\n\2\4\6\b\n\f\16\20\2\2\2Y\2\22") - buf.write("\3\2\2\2\4\25\3\2\2\2\6!\3\2\2\2\b\60\3\2\2\2\n\62\3\2") - buf.write("\2\2\fC\3\2\2\2\16E\3\2\2\2\20O\3\2\2\2\22\23\5\4\3\2") - buf.write("\23\24\7\2\2\3\24\3\3\2\2\2\25\27\5\6\4\2\26\30\5\16\b") - buf.write("\2\27\26\3\2\2\2\27\30\3\2\2\2\30\5\3\2\2\2\31\"\7\21") - buf.write("\2\2\32\"\7\22\2\2\33\"\5\20\t\2\34\"\7\3\2\2\35\"\7\4") - buf.write("\2\2\36\"\7\5\2\2\37\"\5\b\5\2 \"\5\f\7\2!\31\3\2\2\2") - buf.write("!\32\3\2\2\2!\33\3\2\2\2!\34\3\2\2\2!\35\3\2\2\2!\36\3") - buf.write("\2\2\2!\37\3\2\2\2! \3\2\2\2\"\7\3\2\2\2#$\7\6\2\2$)\5") - buf.write("\n\6\2%&\7\7\2\2&(\5\n\6\2\'%\3\2\2\2(+\3\2\2\2)\'\3\2") - buf.write("\2\2)*\3\2\2\2*,\3\2\2\2+)\3\2\2\2,-\7\b\2\2-\61\3\2\2") - buf.write("\2./\7\6\2\2/\61\7\b\2\2\60#\3\2\2\2\60.\3\2\2\2\61\t") - buf.write("\3\2\2\2\62\63\7\21\2\2\63\64\7\t\2\2\64\65\5\4\3\2\65") - buf.write("\13\3\2\2\2\66\67\7\n\2\2\67<\5\4\3\289\7\7\2\29;\5\4") - buf.write("\3\2:8\3\2\2\2;>\3\2\2\2<:\3\2\2\2<=\3\2\2\2=?\3\2\2\2") - buf.write("><\3\2\2\2?@\7\13\2\2@D\3\2\2\2AB\7\n\2\2BD\7\13\2\2C") - buf.write("\66\3\2\2\2CA\3\2\2\2D\r\3\2\2\2EF\7\f\2\2FG\7\20\2\2") - buf.write("G\17\3\2\2\2HP\7\23\2\2IP\7\24\2\2JL\7\r\2\2KJ\3\2\2\2") - buf.write("KL\3\2\2\2LM\3\2\2\2MP\7\16\2\2NP\7\17\2\2OH\3\2\2\2O") - buf.write("I\3\2\2\2OK\3\2\2\2ON\3\2\2\2P\21\3\2\2\2\n\27!)\60kUlrWSs6adM5Aj|=Z005wq2de-8 delta 37 ocmZ3$IFE5cgPbLU9)mFhF9R1tF+(at2}3DE0g%iG!W^Io0G4|Pf&c&j diff --git a/drivers/python/setup.py b/drivers/python/setup.py index a7979a262..4565dc5d5 100644 --- a/drivers/python/setup.py +++ b/drivers/python/setup.py @@ -29,7 +29,7 @@ author_email = 'rhizome.ai@gmail.com', url = 'https://github.com/apache/age', license = 'Apache2.0', - install_requires = [ 'psycopg2', 'antlr4-python3-runtime==4.9.3'], + install_requires = [ 'psycopg2', 'antlr4-python3-runtime==4.11.1'], packages = ['age', 'age.gen'], keywords = ['Graph Database', 'Apache AGE', 'PostgreSQL'], python_requires = '>=3.9', From 33401707fb550b54fddf722d1a433de20e9c97e9 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed <85064039+MuhammadTahaNaveed@users.noreply.github.com> Date: Fri, 24 Feb 2023 23:32:09 +0500 Subject: [PATCH 117/191] Modify docker url for JDBC driver tests (#716) - Update JDBC driver tests to pull image from apache/age dockerhub repo. --- .../src/test/java/org/apache/age/jdbc/BaseDockerizedTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/BaseDockerizedTest.java b/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/BaseDockerizedTest.java index 8024f1a89..8e6aea460 100644 --- a/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/BaseDockerizedTest.java +++ b/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/BaseDockerizedTest.java @@ -51,7 +51,7 @@ public void afterAll() throws Exception { public void beforeAll() throws Exception { String CORRECT_DB_PASSWORDS = "postgres"; agensGraphContainer = new GenericContainer<>(DockerImageName - .parse("sorrell/agensgraph-extension-alpine:latest")) + .parse("apache/age:latest")) .withEnv("POSTGRES_PASSWORD", CORRECT_DB_PASSWORDS) .withExposedPorts(5432); agensGraphContainer.start(); From 67f519f8d367f57e994632da411fd584ca24bcff Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed <85064039+MuhammadTahaNaveed@users.noreply.github.com> Date: Sat, 25 Feb 2023 05:52:21 +0500 Subject: [PATCH 118/191] Fix WITH ignoring WHERE clause (#646) * Fix WITH ignoring WHERE clause - When transforming WITH clause into return clause, WHERE was getting ignored because that case wasn't handled in tranform_cypher_clause_with_where. - Had to revert to the previous function header of tranform_cypher_clause_with_where which had a explicit parameter of where node, because after tranforming cypher_with into cypher_return, the wrapper clause now has cypher_return and the where node of cypher_with was lost. * Fix WITH clause segmentation fault - When transforming columnrefs in WITH clause, it should only check referenced Columns in its parsestate or parent parsestate. - If only expr_kind is WHERE, try to find the columnRef as a transform_entity and extract the expr. This will happen in case of (MATCH/WHERE). * Add regression tests for cypher_with --- regress/expected/cypher_with.out | 353 ++++++++++++++++++++++++++++- regress/sql/cypher_with.sql | 211 ++++++++++++++++- src/backend/parser/cypher_clause.c | 57 ++--- src/backend/parser/cypher_expr.c | 16 +- 4 files changed, 582 insertions(+), 55 deletions(-) diff --git a/regress/expected/cypher_with.out b/regress/expected/cypher_with.out index 7f5faca3d..1166fff36 100644 --- a/regress/expected/cypher_with.out +++ b/regress/expected/cypher_with.out @@ -16,8 +16,12 @@ * specific language governing permissions and limitations * under the License. */ + \! cp -r regress/age_load/data regress/instance/data/age_load LOAD 'age'; SET search_path TO ag_catalog; +-- +-- Load data +-- SELECT create_graph('cypher_with'); NOTICE: graph "cypher_with" has been created create_graph @@ -25,31 +29,366 @@ NOTICE: graph "cypher_with" has been created (1 row) +SELECT create_vlabel('cypher_with','Country'); +NOTICE: VLabel "Country" has been created + create_vlabel +--------------- + +(1 row) + +SELECT load_labels_from_file('cypher_with', 'Country', + 'age_load/countries.csv'); + load_labels_from_file +----------------------- + +(1 row) + +SELECT create_vlabel('cypher_with','City'); +NOTICE: VLabel "City" has been created + create_vlabel +--------------- + +(1 row) + +SELECT load_labels_from_file('cypher_with', 'City', + 'age_load/cities.csv'); + load_labels_from_file +----------------------- + +(1 row) + +SELECT create_elabel('cypher_with','has_city'); +NOTICE: ELabel "has_city" has been created + create_elabel +--------------- + +(1 row) + +SELECT load_edges_from_file('cypher_with', 'has_city', + 'age_load/edges.csv'); + load_edges_from_file +---------------------- + +(1 row) + +-- +-- Test WITH clause +-- +SELECT count(*) FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m,b + RETURN m,b +$$) AS (City agtype, Country agtype); + count +------- + 2361 +(1 row) + +-- WITH/AS +SELECT * FROM cypher('cypher_with', $$ + MATCH (b:Country {iso2 : 'AT'}) + WITH b.name AS name, id(b) AS id + RETURN name,id +$$) AS (Country agtype, Country_id agtype); + country | country_id +-----------+----------------- + "Austria" | 844424930131983 +(1 row) + SELECT * FROM cypher('cypher_with', $$ -WITH true AS b -RETURN b + MATCH (m:City {name: 'Zell'})-[]-(b:Country {iso2 : 'AT'}) + WITH b as country, count(*) AS foaf + WHERE foaf > 1 + RETURN country.name, foaf +$$) as (name agtype, foaf agtype); + name | foaf +-----------+------ + "Austria" | 2 +(1 row) + +SELECT * FROM cypher('cypher_with', $$ + WITH true AS b + RETURN b $$) AS (b bool); b --- t (1 row) +-- WITH/WHERE +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country{iso2:'BE'}) + WITH b,m + WHERE m.name='x' + RETURN m.name,b.iso2 +$$) AS ( "m.name" agtype, "b" agtype); + m.name | b +--------+--- +(0 rows) + +SELECT * FROM cypher('cypher_with', $$ + MATCH (b:Country {iso2 : 'AT'}) + WITH b.name AS name, id(b) AS id + WHERE name = 'Austria' + RETURN name,id +$$) AS (Country agtype, Country_id agtype); + country | country_id +-----------+----------------- + "Austria" | 844424930131983 +(1 row) + +SELECT * FROM cypher('cypher_with', $$ + MATCH (b:Country {iso2 : 'AT'}) + WITH b.name AS name, id(b) AS id + WHERE name = 'Austria' OR name = 'Kosovo' + RETURN name,id +$$) AS (Country agtype, Country_id agtype); + country | country_id +-----------+----------------- + "Austria" | 844424930131983 +(1 row) + +SELECT * FROM cypher('cypher_with', $$ + MATCH p = (m:City)-[:has_city*1..2]->(b:Country {iso2 : 'AT'}) + WITH p, length(p) AS path_length + WHERE path_length > 1 + RETURN p +$$) AS (pattern agtype); + pattern +--------- +(0 rows) + +-- MATCH/WHERE with WITH/WHERE +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WHERE b.name = 'Austria' + WITH m.name AS city,b.name AS country + WHERE city = 'Vienna' + RETURN city,country +$$) AS (City agtype, Country agtype); + city | country +----------+----------- + "Vienna" | "Austria" +(1 row) + +-- WITH/ORDER BY +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + ORDER BY id(m) DESC LIMIT 10 + RETURN id(city),city +$$) AS (id agtype, city agtype); + id | city +------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 1125899906986495 | {"id": 1125899906986495, "label": "City", "properties": {"id": "143871", "name": "Zell", "__id__": 143871, "latitude": "46.47222222", "state_id": "2057", "longitude": "14.38888889", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex + 1125899906986492 | {"id": 1125899906986492, "label": "City", "properties": {"id": "143868", "name": "Weißenstein", "__id__": 143868, "latitude": "46.68222222", "state_id": "2057", "longitude": "13.72361111", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex + 1125899906986491 | {"id": 1125899906986491, "label": "City", "properties": {"id": "143867", "name": "Weißensee", "__id__": 143867, "latitude": "46.71666667", "state_id": "2057", "longitude": "13.3", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex + 1125899906986490 | {"id": 1125899906986490, "label": "City", "properties": {"id": "143866", "name": "Weitensfeld im Gurktal", "__id__": 143866, "latitude": "46.84861111", "state_id": "2057", "longitude": "14.19166667", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex + 1125899906986489 | {"id": 1125899906986489, "label": "City", "properties": {"id": "143865", "name": "Velden am Wörther See", "__id__": 143865, "latitude": "46.6125", "state_id": "2057", "longitude": "14.04194444", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex + 1125899906986488 | {"id": 1125899906986488, "label": "City", "properties": {"id": "143864", "name": "Umberg", "__id__": 143864, "latitude": "46.64833", "state_id": "2057", "longitude": "13.9575", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex + 1125899906986487 | {"id": 1125899906986487, "label": "City", "properties": {"id": "143863", "name": "Tschachoritsch", "__id__": 143863, "latitude": "46.55352", "state_id": "2057", "longitude": "14.21461", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex + 1125899906986486 | {"id": 1125899906986486, "label": "City", "properties": {"id": "143862", "name": "Treffen", "__id__": 143862, "latitude": "46.66833333", "state_id": "2057", "longitude": "13.85555556", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex + 1125899906986484 | {"id": 1125899906986484, "label": "City", "properties": {"id": "143860", "name": "Timenitz", "__id__": 143860, "latitude": "46.68333", "state_id": "2057", "longitude": "14.41667", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex + 1125899906986483 | {"id": 1125899906986483, "label": "City", "properties": {"id": "143859", "name": "Techelsberg", "__id__": 143859, "latitude": "46.65861111", "state_id": "2057", "longitude": "14.10194444", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex +(10 rows) + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City) + WITH m AS city + ORDER BY id(m) ASC LIMIT 10 + RETURN id(city),city.name +$$) AS (id agtype, names agtype); + id | names +------------------+----------------------- + 1125899906842625 | "Andorra la Vella" + 1125899906842626 | "Arinsal" + 1125899906842627 | "Canillo" + 1125899906842628 | "El Tarter" + 1125899906842629 | "Encamp" + 1125899906842630 | "Ordino" + 1125899906842631 | "Pas de la Casa" + 1125899906842632 | "Sant Julià de Lòria" + 1125899906842633 | "la Massana" + 1125899906842634 | "les Escaldes" +(10 rows) + +-- WITH/ORDER BY/DESC/WHERE +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + ORDER BY id(m) DESC LIMIT 10 + WHERE city.name = 'Zell' OR city.name = 'Umberg' + RETURN id(city),city.name,country.name +$$) AS (id agtype, city agtype, country agtype); + id | city | country +------------------+----------+----------- + 1125899906986495 | "Zell" | "Austria" + 1125899906986488 | "Umberg" | "Austria" +(2 rows) + +-- multiple WITH clauses +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + WITH city LIMIT 10 + RETURN city.name +$$) AS (city agtype); + city +--------------------- + "Andau" + "Antau" + "Apetlon" + "Bad Sauerbrunn" + "Bad Tatzmannsdorf" + "Badersdorf" + "Bernstein" + "Bocksdorf" + "Breitenbrunn" + "Bruckneudorf" +(10 rows) + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + ORDER BY id(m) DESC LIMIT 10 + WITH city + WHERE city.name = 'Zell' + RETURN id(city),city.name +$$) AS (id agtype, city agtype); + id | city +------------------+-------- + 1125899906986495 | "Zell" +(1 row) + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + WHERE country.name = 'Austria' + WITH city + ORDER BY id(city) DESC + WHERE city.name = 'Zell' + RETURN id(city),city.name +$$) AS (id agtype, city agtype); + id | city +------------------+-------- + 1125899906986495 | "Zell" + 1125899906846495 | "Zell" +(2 rows) + -- Expression item must be aliased. SELECT * FROM cypher('cypher_with', $$ -WITH 1 + 1 -RETURN i + WITH 1 + 1 + RETURN i $$) AS (i int); ERROR: expression item must be aliased -LINE 2: WITH 1 + 1 - ^ +LINE 2: WITH 1 + 1 + ^ HINT: Items can be aliased by using AS. +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH id(m) + RETURN m +$$) AS (id agtype, city agtype); +ERROR: expression item must be aliased +LINE 3: WITH id(m) + ^ +HINT: Items can be aliased by using AS. +-- Reference undefined variable in WITH clause (should error out) +SELECT count(*) FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m + RETURN m,b +$$) AS (City agtype, Country agtype); +ERROR: could not find rte for b +LINE 4: RETURN m,b + ^ +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + WHERE country.name = 'Austria' + WITH city + WHERE city.name = 'Zell' + RETURN id(city),country.name +$$) AS (id agtype, country agtype); +ERROR: could not find rte for country +LINE 7: RETURN id(city),country.name + ^ +-- Clean up SELECT drop_graph('cypher_with', true); -NOTICE: drop cascades to 2 other objects +NOTICE: drop cascades to 5 other objects DETAIL: drop cascades to table cypher_with._ag_label_vertex drop cascades to table cypher_with._ag_label_edge +drop cascades to table cypher_with."Country" +drop cascades to table cypher_with."City" +drop cascades to table cypher_with.has_city NOTICE: graph "cypher_with" has been dropped drop_graph ------------ (1 row) +-- Issue 329 (should error out) +SELECT create_graph('graph'); +NOTICE: graph "graph" has been created + create_graph +-------------- + +(1 row) + +SELECT * FROM cypher('graph', $$ + CREATE (a:A)-[:incs]->(:C), (a)-[:incs]->(:C) + RETURN a +$$) AS (n agtype); + n +----------------------------------------------------------------- + {"id": 844424930131969, "label": "A", "properties": {}}::vertex +(1 row) + +SELECT * FROM cypher('graph', $$ + MATCH (a:A) + WHERE ID(a)=0 + WITH a + OPTIONAL MATCH (a)-[:incs]->(c)-[d:incs]-() + WITH a,c,COUNT(d) AS deps + WHERE deps<=1 + RETURN c,d +$$) AS (n agtype, d agtype); +ERROR: could not find rte for d +LINE 8: RETURN c,d + ^ +-- Issue 396 (should error out) +SELECT * FROM cypher('graph',$$ + CREATE (v),(u),(w), + (v)-[:hasFriend]->(u), + (u)-[:hasFriend]->(w) +$$) as (a agtype); + a +--- +(0 rows) + +SELECT * FROM cypher('graph',$$ + MATCH p=(v)-[*1..2]->(u) + WITH p,length(p) AS path_length + RETURN v,path_length +$$) as (a agtype,b agtype); +ERROR: could not find rte for v +LINE 4: RETURN v,path_length + ^ +-- Clean up +SELECT drop_graph('graph', true); +NOTICE: drop cascades to 6 other objects +DETAIL: drop cascades to table graph._ag_label_vertex +drop cascades to table graph._ag_label_edge +drop cascades to table graph."A" +drop cascades to table graph.incs +drop cascades to table graph."C" +drop cascades to table graph."hasFriend" +NOTICE: graph "graph" has been dropped + drop_graph +------------ + +(1 row) + +-- +-- End of test +-- diff --git a/regress/sql/cypher_with.sql b/regress/sql/cypher_with.sql index 623487b4c..95b18c506 100644 --- a/regress/sql/cypher_with.sql +++ b/regress/sql/cypher_with.sql @@ -17,20 +17,223 @@ * under the License. */ + \! cp -r regress/age_load/data regress/instance/data/age_load + LOAD 'age'; SET search_path TO ag_catalog; +-- +-- Load data +-- SELECT create_graph('cypher_with'); +SELECT create_vlabel('cypher_with','Country'); +SELECT load_labels_from_file('cypher_with', 'Country', + 'age_load/countries.csv'); + +SELECT create_vlabel('cypher_with','City'); +SELECT load_labels_from_file('cypher_with', 'City', + 'age_load/cities.csv'); + +SELECT create_elabel('cypher_with','has_city'); +SELECT load_edges_from_file('cypher_with', 'has_city', + 'age_load/edges.csv'); + +-- +-- Test WITH clause +-- + +SELECT count(*) FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m,b + RETURN m,b +$$) AS (City agtype, Country agtype); + +-- WITH/AS + SELECT * FROM cypher('cypher_with', $$ -WITH true AS b -RETURN b + MATCH (b:Country {iso2 : 'AT'}) + WITH b.name AS name, id(b) AS id + RETURN name,id +$$) AS (Country agtype, Country_id agtype); + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City {name: 'Zell'})-[]-(b:Country {iso2 : 'AT'}) + WITH b as country, count(*) AS foaf + WHERE foaf > 1 + RETURN country.name, foaf +$$) as (name agtype, foaf agtype); + +SELECT * FROM cypher('cypher_with', $$ + WITH true AS b + RETURN b $$) AS (b bool); +-- WITH/WHERE + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country{iso2:'BE'}) + WITH b,m + WHERE m.name='x' + RETURN m.name,b.iso2 +$$) AS ( "m.name" agtype, "b" agtype); + +SELECT * FROM cypher('cypher_with', $$ + MATCH (b:Country {iso2 : 'AT'}) + WITH b.name AS name, id(b) AS id + WHERE name = 'Austria' + RETURN name,id +$$) AS (Country agtype, Country_id agtype); + +SELECT * FROM cypher('cypher_with', $$ + MATCH (b:Country {iso2 : 'AT'}) + WITH b.name AS name, id(b) AS id + WHERE name = 'Austria' OR name = 'Kosovo' + RETURN name,id +$$) AS (Country agtype, Country_id agtype); + +SELECT * FROM cypher('cypher_with', $$ + MATCH p = (m:City)-[:has_city*1..2]->(b:Country {iso2 : 'AT'}) + WITH p, length(p) AS path_length + WHERE path_length > 1 + RETURN p +$$) AS (pattern agtype); + +-- MATCH/WHERE with WITH/WHERE + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WHERE b.name = 'Austria' + WITH m.name AS city,b.name AS country + WHERE city = 'Vienna' + RETURN city,country +$$) AS (City agtype, Country agtype); + +-- WITH/ORDER BY + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + ORDER BY id(m) DESC LIMIT 10 + RETURN id(city),city +$$) AS (id agtype, city agtype); + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City) + WITH m AS city + ORDER BY id(m) ASC LIMIT 10 + RETURN id(city),city.name +$$) AS (id agtype, names agtype); + +-- WITH/ORDER BY/DESC/WHERE + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + ORDER BY id(m) DESC LIMIT 10 + WHERE city.name = 'Zell' OR city.name = 'Umberg' + RETURN id(city),city.name,country.name +$$) AS (id agtype, city agtype, country agtype); + +-- multiple WITH clauses + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + WITH city LIMIT 10 + RETURN city.name +$$) AS (city agtype); + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + ORDER BY id(m) DESC LIMIT 10 + WITH city + WHERE city.name = 'Zell' + RETURN id(city),city.name +$$) AS (id agtype, city agtype); + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + WHERE country.name = 'Austria' + WITH city + ORDER BY id(city) DESC + WHERE city.name = 'Zell' + RETURN id(city),city.name +$$) AS (id agtype, city agtype); + -- Expression item must be aliased. + SELECT * FROM cypher('cypher_with', $$ -WITH 1 + 1 -RETURN i + WITH 1 + 1 + RETURN i $$) AS (i int); +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH id(m) + RETURN m +$$) AS (id agtype, city agtype); + +-- Reference undefined variable in WITH clause (should error out) + +SELECT count(*) FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m + RETURN m,b +$$) AS (City agtype, Country agtype); + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + WHERE country.name = 'Austria' + WITH city + WHERE city.name = 'Zell' + RETURN id(city),country.name +$$) AS (id agtype, country agtype); + +-- Clean up + SELECT drop_graph('cypher_with', true); + +-- Issue 329 (should error out) + +SELECT create_graph('graph'); + +SELECT * FROM cypher('graph', $$ + CREATE (a:A)-[:incs]->(:C), (a)-[:incs]->(:C) + RETURN a +$$) AS (n agtype); + +SELECT * FROM cypher('graph', $$ + MATCH (a:A) + WHERE ID(a)=0 + WITH a + OPTIONAL MATCH (a)-[:incs]->(c)-[d:incs]-() + WITH a,c,COUNT(d) AS deps + WHERE deps<=1 + RETURN c,d +$$) AS (n agtype, d agtype); + +-- Issue 396 (should error out) + +SELECT * FROM cypher('graph',$$ + CREATE (v),(u),(w), + (v)-[:hasFriend]->(u), + (u)-[:hasFriend]->(w) +$$) as (a agtype); + +SELECT * FROM cypher('graph',$$ + MATCH p=(v)-[*1..2]->(u) + WITH p,length(p) AS path_length + RETURN v,path_length +$$) as (a agtype,b agtype); + +-- Clean up + +SELECT drop_graph('graph', true); + +-- +-- End of test +-- diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 466551115..380eef92b 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -114,7 +114,8 @@ static Query *transform_cypher_with(cypher_parsestate *cpstate, cypher_clause *clause); static Query *transform_cypher_clause_with_where(cypher_parsestate *cpstate, transform_method transform, - cypher_clause *clause); + cypher_clause *clause, + Node *where); // match clause static Query *transform_cypher_match(cypher_parsestate *cpstate, cypher_clause *clause); @@ -1067,7 +1068,7 @@ static Query * transform_cypher_call_stmt(cypher_parsestate *cpstate, return transform_cypher_clause_with_where(cpstate, transform_cypher_call_subquery, - clause); + clause, self->where); } return NULL; @@ -2194,7 +2195,7 @@ static Query *transform_cypher_with(cypher_parsestate *cpstate, wrapper->prev = clause->prev; return transform_cypher_clause_with_where(cpstate, transform_cypher_return, - wrapper); + wrapper, self->where); } static bool match_check_valid_label(cypher_match *match, @@ -2254,28 +2255,14 @@ static bool match_check_valid_label(cypher_match *match, return true; } - static Query *transform_cypher_clause_with_where(cypher_parsestate *cpstate, transform_method transform, - cypher_clause *clause) + cypher_clause *clause, Node *where) { ParseState *pstate = (ParseState *)cpstate; Query *query; Node *self = clause->self; - cypher_match *match_self; - cypher_call *call_self; - Node *where; - - if (is_ag_node(self, cypher_call)) - { - call_self = (cypher_call*) clause->self; - where = call_self->where; - } - else - { - match_self = (cypher_match*) clause->self; - where = match_self->where; - } + Node *where_qual = NULL; if (where) { @@ -2290,32 +2277,27 @@ static Query *transform_cypher_clause_with_where(cypher_parsestate *cpstate, rtindex = list_length(pstate->p_rtable); Assert(rtindex == 1); // rte is the only RangeTblEntry in pstate + /* + * add all the target entries in rte to the current target list to pass + * all the variables that are introduced in the previous clause to the + * next clause + */ query->targetList = expandRelAttrs(pstate, rte, rtindex, 0, -1); markTargetListOrigins(pstate, query->targetList); query->rtable = pstate->p_rtable; - if (is_ag_node(clause->self, cypher_call)) + if (!is_ag_node(self, cypher_match)) { - cypher_call *call = (cypher_call *)clause->self; - - if (call->where != NULL) - { - Expr *where_qual = NULL; - - where_qual = (Expr *)transform_cypher_expr(cpstate, call->where, - EXPR_KIND_WHERE); + where_qual = transform_cypher_expr(cpstate, where, + EXPR_KIND_WHERE); - where_qual = (Expr *)coerce_to_boolean(pstate, (Node *)where_qual, - "WHERE"); - query->jointree = makeFromExpr(pstate->p_joinlist, (Node *)where_qual); - } - } - else - { - query->jointree = makeFromExpr(pstate->p_joinlist, NULL); + where_qual = coerce_to_boolean(pstate, where_qual, + "WHERE"); } + + query->jointree = makeFromExpr(pstate->p_joinlist, where_qual); assign_query_collations(pstate, query); } else @@ -2352,7 +2334,8 @@ static Query *transform_cypher_match(cypher_parsestate *cpstate, } return transform_cypher_clause_with_where( - cpstate, transform_cypher_match_pattern, clause); + cpstate, transform_cypher_match_pattern, clause, + match_self->where); } /* diff --git a/src/backend/parser/cypher_expr.c b/src/backend/parser/cypher_expr.c index 8a276ffe5..f0bc9c8c7 100644 --- a/src/backend/parser/cypher_expr.c +++ b/src/backend/parser/cypher_expr.c @@ -318,16 +318,18 @@ static Node *transform_ColumnRef(cypher_parsestate *cpstate, ColumnRef *cref) } /* - * Try to find the columnRef as a transform_entity and extract - * the expr. + * If expr_kind is WHERE, Try to find the columnRef as a + * transform_entity and extract the expr. */ - te = find_variable(cpstate, colname) ; - if (te != NULL && te->expr != NULL) + if (pstate->p_expr_kind == EXPR_KIND_WHERE) { - node = (Node *)te->expr; - break; + te = find_variable(cpstate, colname) ; + if (te != NULL && te->expr != NULL) + { + node = (Node *)te->expr; + break; + } } - /* * Not known as a column of any range-table entry. * Try to find the name as a relation. Note that only From 6e8836b1df0047410944ab78f33d9f62a1cee669 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed <85064039+MuhammadTahaNaveed@users.noreply.github.com> Date: Tue, 28 Feb 2023 01:23:31 +0500 Subject: [PATCH 119/191] Implement isEmpty() predicate function (#710) - Added isEmpty() predicate function to check if a List, map or string is empty. - Added regression tests for isEmpty() function. --- age--1.2.0.sql | 8 ++ regress/expected/cypher_match.out | 160 ++++++++++++++++++++++++++++++ regress/sql/cypher_match.sql | 97 ++++++++++++++++++ src/backend/utils/adt/agtype.c | 81 +++++++++++++++ 4 files changed, 346 insertions(+) diff --git a/age--1.2.0.sql b/age--1.2.0.sql index e34b3c97c..e50f1a628 100644 --- a/age--1.2.0.sql +++ b/age--1.2.0.sql @@ -3551,6 +3551,14 @@ STABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; +CREATE FUNCTION ag_catalog.age_isempty(agtype) +RETURNS boolean +LANGUAGE c +IMMUTABLE +RETURNS NULL ON NULL INPUT +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + CREATE FUNCTION ag_catalog.age_label(agtype) RETURNS agtype LANGUAGE c diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index 6ff9a3c6e..9ec4112d6 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -816,6 +816,166 @@ AS (u agtype); ERROR: syntax error at or near ")" LINE 2: $$MATCH (u) WHERE EXISTS(u) RETURN u$$) ^ +-- +-- MATCH with WHERE isEmpty(property) +-- +SELECT create_graph('for_isEmpty'); +NOTICE: graph "for_isEmpty" has been created + create_graph +-------------- + +(1 row) + +-- Create vertices +SELECT * FROM cypher('for_isEmpty', + $$CREATE (u:for_pred {id:1, type: "empty", list: [], map: {}, string: ""}), + (v:for_pred {id:2, type: "filled", list: [1], map: {a:1}, string: "a"}), + (w:for_pred)$$) +AS (a agtype); + a +--- +(0 rows) + +-- Match vertices with empty properties +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u.list) RETURN properties(u) $$) +AS (u agtype); + u +----------------------------------------------------------------- + {"id": 1, "map": {}, "list": [], "type": "empty", "string": ""} +(1 row) + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u.map) RETURN properties(u) $$) +AS (u agtype); + u +----------------------------------------------------------------- + {"id": 1, "map": {}, "list": [], "type": "empty", "string": ""} +(1 row) + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u.string) RETURN properties(u) $$) +AS (u agtype); + u +----------------------------------------------------------------- + {"id": 1, "map": {}, "list": [], "type": "empty", "string": ""} +(1 row) + +-- Match vertices with non-empty properties +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE NOT isEmpty(u.list) RETURN properties(u) $$) +AS (u agtype); + u +-------------------------------------------------------------------------- + {"id": 2, "map": {"a": 1}, "list": [1], "type": "filled", "string": "a"} +(1 row) + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE NOT isEmpty(u.map) RETURN properties(u) $$) +AS (u agtype); + u +-------------------------------------------------------------------------- + {"id": 2, "map": {"a": 1}, "list": [1], "type": "filled", "string": "a"} +(1 row) + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE NOT isEmpty(u.string) RETURN properties(u) $$) +AS (u agtype); + u +-------------------------------------------------------------------------- + {"id": 2, "map": {"a": 1}, "list": [1], "type": "filled", "string": "a"} +(1 row) + +-- Match vertices with no properties +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(properties(u)) RETURN properties(u) $$) +AS (u agtype); + u +---- + {} +(1 row) + +-- Match vertices with properties +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE NOT isEmpty(properties(u)) RETURN properties(u) $$) +AS (u agtype); + u +-------------------------------------------------------------------------- + {"id": 1, "map": {}, "list": [], "type": "empty", "string": ""} + {"id": 2, "map": {"a": 1}, "list": [1], "type": "filled", "string": "a"} +(2 rows) + +-- Match vertices with null property (should return nothing since WHERE null) +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u.tree) RETURN properties(u) $$) +AS (u agtype); + u +--- +(0 rows) + +-- Match and Return bool +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u.list) RETURN isEmpty(u.list), u.type $$) +AS (b agtype, type agtype); + b | type +------+--------- + true | "empty" +(1 row) + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE NOT isEmpty(u.list) RETURN isEmpty(u.list), u.type $$) +AS (b agtype, type agtype); + b | type +-------+---------- + false | "filled" +(1 row) + +-- Return null on null +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) RETURN isEmpty(u.tree) $$) +AS (b agtype); + b +--- + + + +(3 rows) + +-- Should give an error +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u) RETURN properties(u) $$) +AS (u agtype); +ERROR: isEmpty() unsupported argument, expected a List, Map, or String +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(1) RETURN properties(u) $$) +AS (u agtype); +ERROR: isEmpty() unsupported argument, expected a List, Map, or String +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(1,2,3) RETURN properties(u) $$) +AS (u agtype); +ERROR: function ag_catalog.age_isempty(agtype, agtype, agtype) does not exist +LINE 2: $$MATCH (u:for_pred) WHERE isEmpty(1,2,3) RETURN properties... + ^ +HINT: No function matches the given name and argument types. You might need to add explicit type casts. +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty() RETURN properties(u) $$) +AS (u agtype); +ERROR: function ag_catalog.age_isempty() does not exist +LINE 2: $$MATCH (u:for_pred) WHERE isEmpty() RETURN properties(u) $... + ^ +HINT: No function matches the given name and argument types. You might need to add explicit type casts. +-- clean up +SELECT drop_graph('for_isEmpty', true); +NOTICE: drop cascades to 3 other objects +DETAIL: drop cascades to table "for_isEmpty"._ag_label_vertex +drop cascades to table "for_isEmpty"._ag_label_edge +drop cascades to table "for_isEmpty".for_pred +NOTICE: graph "for_isEmpty" has been dropped + drop_graph +------------ + +(1 row) + -- --Distinct -- diff --git a/regress/sql/cypher_match.sql b/regress/sql/cypher_match.sql index c4c48bf76..aeed9f386 100644 --- a/regress/sql/cypher_match.sql +++ b/regress/sql/cypher_match.sql @@ -415,6 +415,103 @@ SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE EXISTS(u) RETURN u$$) AS (u agtype); +-- +-- MATCH with WHERE isEmpty(property) +-- + +SELECT create_graph('for_isEmpty'); + +-- Create vertices + +SELECT * FROM cypher('for_isEmpty', + $$CREATE (u:for_pred {id:1, type: "empty", list: [], map: {}, string: ""}), + (v:for_pred {id:2, type: "filled", list: [1], map: {a:1}, string: "a"}), + (w:for_pred)$$) +AS (a agtype); + +-- Match vertices with empty properties + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u.list) RETURN properties(u) $$) +AS (u agtype); + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u.map) RETURN properties(u) $$) +AS (u agtype); + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u.string) RETURN properties(u) $$) +AS (u agtype); + +-- Match vertices with non-empty properties + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE NOT isEmpty(u.list) RETURN properties(u) $$) +AS (u agtype); + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE NOT isEmpty(u.map) RETURN properties(u) $$) +AS (u agtype); + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE NOT isEmpty(u.string) RETURN properties(u) $$) +AS (u agtype); + +-- Match vertices with no properties + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(properties(u)) RETURN properties(u) $$) +AS (u agtype); + +-- Match vertices with properties + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE NOT isEmpty(properties(u)) RETURN properties(u) $$) +AS (u agtype); + +-- Match vertices with null property (should return nothing since WHERE null) + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u.tree) RETURN properties(u) $$) +AS (u agtype); + +-- Match and Return bool + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u.list) RETURN isEmpty(u.list), u.type $$) +AS (b agtype, type agtype); + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE NOT isEmpty(u.list) RETURN isEmpty(u.list), u.type $$) +AS (b agtype, type agtype); + +-- Return null on null + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) RETURN isEmpty(u.tree) $$) +AS (b agtype); + +-- Should give an error + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u) RETURN properties(u) $$) +AS (u agtype); + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(1) RETURN properties(u) $$) +AS (u agtype); + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(1,2,3) RETURN properties(u) $$) +AS (u agtype); + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty() RETURN properties(u) $$) +AS (u agtype); + +-- clean up +SELECT drop_graph('for_isEmpty', true); + -- --Distinct -- diff --git a/src/backend/utils/adt/agtype.c b/src/backend/utils/adt/agtype.c index 22bf462c7..ed4bf4d47 100644 --- a/src/backend/utils/adt/agtype.c +++ b/src/backend/utils/adt/agtype.c @@ -5508,6 +5508,87 @@ Datum age_exists(PG_FUNCTION_ARGS) PG_RETURN_BOOL(true); } +PG_FUNCTION_INFO_V1(age_isempty); +/* + * Executor function for isEmpty(property). + */ + +Datum age_isempty(PG_FUNCTION_ARGS) +{ + Datum *args; + Datum arg; + bool *nulls; + Oid *types; + char *string = NULL; + Oid type; + int64 result; + + /* extract argument values */ + extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); + + /* + * isEmpty() supports cstring, text, or the agtype string or list input + */ + arg = args[0]; + type = types[0]; + + if (type == CSTRINGOID) + { + string = DatumGetCString(arg); + result = strlen(string); + } + else if (type == TEXTOID) + { + string = text_to_cstring(DatumGetTextPP(arg)); + result = strlen(string); + } + else if (type == AGTYPEOID) + { + agtype *agt_arg; + + /* get the agtype argument */ + agt_arg = DATUM_GET_AGTYPE_P(arg); + + if (AGT_ROOT_IS_SCALAR(agt_arg)) + { + agtype_value *agtv_value; + + agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); + + if (agtv_value->type == AGTV_STRING) + { + result = agtv_value->val.string.len; + } + else + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("isEmpty() unsupported argument, expected a List, Map, or String"))); + } + } + else if (AGT_ROOT_IS_ARRAY(agt_arg)) + { + result = AGT_ROOT_COUNT(agt_arg); + } + else if (AGT_ROOT_IS_OBJECT(agt_arg)) + { + result = AGT_ROOT_COUNT(agt_arg); + } + else + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("isEmpty() unsupported argument, expected a List, Map, or String"))); + } + } + else + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("isEmpty() unsupported argument, expected a List, Map, or String"))); + } + + /* build the result */ + PG_RETURN_BOOL(result == 0); +} + PG_FUNCTION_INFO_V1(age_label); /* * Executor function for label(edge/vertex). From 49ae33ade596e020202539b9e839ce439c976f81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Aur=C3=A9lio=20Silva=20de=20Souza=20J=C3=BAnior?= <57829631+markgomer@users.noreply.github.com> Date: Tue, 28 Feb 2023 21:32:08 -0300 Subject: [PATCH 120/191] Barbell regress tests (#708) * Fixed bug where the system was crashing when graph_name was passed as NULL. * added checks for possible NULL arguments before calling create_complete_graph. * Added regress tests for Barbell graph generation --- regress/expected/graph_generation.out | 111 ++++++++++++++++++++++++++ regress/sql/graph_generation.sql | 27 +++++++ src/backend/utils/graph_generation.c | 57 ++++++++----- 3 files changed, 174 insertions(+), 21 deletions(-) diff --git a/regress/expected/graph_generation.out b/regress/expected/graph_generation.out index 118ab6e9e..b9ed65b12 100644 --- a/regress/expected/graph_generation.out +++ b/regress/expected/graph_generation.out @@ -109,3 +109,114 @@ NOTICE: graph "gp2" has been dropped (1 row) +-- Tests for barbell graph generation +SELECT * FROM age_create_barbell_graph('gp1',5,0,'vertices',NULL,'edges',NULL); +NOTICE: graph "gp1" has been created +NOTICE: VLabel "vertices" has been created +NOTICE: ELabel "edges" has been created + age_create_barbell_graph +-------------------------- + +(1 row) + +SELECT COUNT(*) FROM gp1."edges"; + count +------- + 21 +(1 row) + +SELECT COUNT(*) FROM gp1."vertices"; + count +------- + 10 +(1 row) + +SELECT * FROM cypher('gp1', $$MATCH (a)-[e]->(b) RETURN e$$) as (n agtype); + n +---------------------------------------------------------------------------------------------------------------------------- + {"id": 1125899906842625, "label": "edges", "end_id": 844424930131970, "start_id": 844424930131969, "properties": {}}::edge + {"id": 1125899906842629, "label": "edges", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge + {"id": 1125899906842626, "label": "edges", "end_id": 844424930131971, "start_id": 844424930131969, "properties": {}}::edge + {"id": 1125899906842627, "label": "edges", "end_id": 844424930131972, "start_id": 844424930131969, "properties": {}}::edge + {"id": 1125899906842632, "label": "edges", "end_id": 844424930131972, "start_id": 844424930131971, "properties": {}}::edge + {"id": 1125899906842630, "label": "edges", "end_id": 844424930131972, "start_id": 844424930131970, "properties": {}}::edge + {"id": 1125899906842634, "label": "edges", "end_id": 844424930131973, "start_id": 844424930131972, "properties": {}}::edge + {"id": 1125899906842628, "label": "edges", "end_id": 844424930131973, "start_id": 844424930131969, "properties": {}}::edge + {"id": 1125899906842631, "label": "edges", "end_id": 844424930131973, "start_id": 844424930131970, "properties": {}}::edge + {"id": 1125899906842633, "label": "edges", "end_id": 844424930131973, "start_id": 844424930131971, "properties": {}}::edge + {"id": 1125899906842635, "label": "edges", "end_id": 844424930131975, "start_id": 844424930131974, "properties": {}}::edge + {"id": 1125899906842639, "label": "edges", "end_id": 844424930131976, "start_id": 844424930131975, "properties": {}}::edge + {"id": 1125899906842636, "label": "edges", "end_id": 844424930131976, "start_id": 844424930131974, "properties": {}}::edge + {"id": 1125899906842637, "label": "edges", "end_id": 844424930131977, "start_id": 844424930131974, "properties": {}}::edge + {"id": 1125899906842642, "label": "edges", "end_id": 844424930131977, "start_id": 844424930131976, "properties": {}}::edge + {"id": 1125899906842640, "label": "edges", "end_id": 844424930131977, "start_id": 844424930131975, "properties": {}}::edge + {"id": 1125899906842644, "label": "edges", "end_id": 844424930131978, "start_id": 844424930131977, "properties": {}}::edge + {"id": 1125899906842638, "label": "edges", "end_id": 844424930131978, "start_id": 844424930131974, "properties": {}}::edge + {"id": 1125899906842641, "label": "edges", "end_id": 844424930131978, "start_id": 844424930131975, "properties": {}}::edge + {"id": 1125899906842643, "label": "edges", "end_id": 844424930131978, "start_id": 844424930131976, "properties": {}}::edge + {"id": 1125899906842645, "label": "edges", "end_id": 844424930131978, "start_id": 844424930131969, "properties": {}}::edge +(21 rows) + +SELECT * FROM age_create_barbell_graph('gp1',5,0,'vertices',NULL,'edges',NULL); + age_create_barbell_graph +-------------------------- + +(1 row) + +SELECT COUNT(*) FROM gp1."edges"; + count +------- + 42 +(1 row) + +SELECT COUNT(*) FROM gp1."vertices"; + count +------- + 20 +(1 row) + +SELECT * FROM age_create_barbell_graph('gp2',5,10,'vertices',NULL,'edges',NULL); +NOTICE: graph "gp2" has been created +NOTICE: VLabel "vertices" has been created +NOTICE: ELabel "edges" has been created + age_create_barbell_graph +-------------------------- + +(1 row) + +-- SHOULD FAIL +SELECT * FROM age_create_barbell_graph(NULL,NULL,NULL,NULL,NULL,NULL,NULL); +ERROR: Graph name cannot be NULL +SELECT * FROM age_create_barbell_graph('gp2',NULL,0,'vertices',NULL,'edges',NULL); +ERROR: Graph size cannot be NULL or lower than 3 +SELECT * FROM age_create_barbell_graph('gp3',5,NULL,'vertices',NULL,'edges',NULL); +ERROR: Bridge size cannot be NULL or lower than 0 +SELECT * FROM age_create_barbell_graph('gp4',NULL,0,'vertices',NULL,'edges',NULL); +ERROR: Graph size cannot be NULL or lower than 3 +SELECT * FROM age_create_barbell_graph('gp5',5,0,'vertices',NULL,NULL,NULL); +ERROR: edge label can not be NULL +-- DROPPING GRAPHS +SELECT drop_graph('gp1', true); +NOTICE: drop cascades to 4 other objects +DETAIL: drop cascades to table gp1._ag_label_vertex +drop cascades to table gp1._ag_label_edge +drop cascades to table gp1.vertices +drop cascades to table gp1.edges +NOTICE: graph "gp1" has been dropped + drop_graph +------------ + +(1 row) + +SELECT drop_graph('gp2', true); +NOTICE: drop cascades to 4 other objects +DETAIL: drop cascades to table gp2._ag_label_vertex +drop cascades to table gp2._ag_label_edge +drop cascades to table gp2.vertices +drop cascades to table gp2.edges +NOTICE: graph "gp2" has been dropped + drop_graph +------------ + +(1 row) + diff --git a/regress/sql/graph_generation.sql b/regress/sql/graph_generation.sql index 1ad90f5a3..32fa56dd5 100644 --- a/regress/sql/graph_generation.sql +++ b/regress/sql/graph_generation.sql @@ -45,3 +45,30 @@ SELECT * FROM create_complete_graph(NULL,NULL,NULL); SELECT drop_graph('gp1', true); SELECT drop_graph('gp2', true); + +-- Tests for barbell graph generation +SELECT * FROM age_create_barbell_graph('gp1',5,0,'vertices',NULL,'edges',NULL); + +SELECT COUNT(*) FROM gp1."edges"; +SELECT COUNT(*) FROM gp1."vertices"; + +SELECT * FROM cypher('gp1', $$MATCH (a)-[e]->(b) RETURN e$$) as (n agtype); + +SELECT * FROM age_create_barbell_graph('gp1',5,0,'vertices',NULL,'edges',NULL); + +SELECT COUNT(*) FROM gp1."edges"; +SELECT COUNT(*) FROM gp1."vertices"; + +SELECT * FROM age_create_barbell_graph('gp2',5,10,'vertices',NULL,'edges',NULL); + +-- SHOULD FAIL +SELECT * FROM age_create_barbell_graph(NULL,NULL,NULL,NULL,NULL,NULL,NULL); +SELECT * FROM age_create_barbell_graph('gp2',NULL,0,'vertices',NULL,'edges',NULL); +SELECT * FROM age_create_barbell_graph('gp3',5,NULL,'vertices',NULL,'edges',NULL); +SELECT * FROM age_create_barbell_graph('gp4',NULL,0,'vertices',NULL,'edges',NULL); +SELECT * FROM age_create_barbell_graph('gp5',5,0,'vertices',NULL,NULL,NULL); + +-- DROPPING GRAPHS +SELECT drop_graph('gp1', true); +SELECT drop_graph('gp2', true); + diff --git a/src/backend/utils/graph_generation.c b/src/backend/utils/graph_generation.c index 80ef85f29..b40ef07e2 100644 --- a/src/backend/utils/graph_generation.c +++ b/src/backend/utils/graph_generation.c @@ -273,25 +273,23 @@ Datum age_create_barbell_graph(PG_FUNCTION_ARGS) arguments = fcinfo; - // create two separate complete graphs - DirectFunctionCall4(create_complete_graph, arguments->arg[0], - arguments->arg[1], - arguments->arg[5], - arguments->arg[3]); - DirectFunctionCall4(create_complete_graph, arguments->arg[0], - arguments->arg[1], - arguments->arg[5], - arguments->arg[3]); - - // Handling remaining arguments - /* - * graph_name: doesn't need to validate, since the create_complete_graph - * function already does that. - */ + // Checking for possible NULL arguments + // Name graph_name + if (PG_ARGISNULL(0)) + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("Graph name cannot be NULL"))); + } graph_name = PG_GETARG_NAME(0); graph_name_str = NameStr(*graph_name); - graph_oid = get_graph_oid(graph_name_str); + // int graph size (number of nodes in each complete graph) + if (PG_ARGISNULL(1) && PG_GETARG_INT32(1) < 3) + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("Graph size cannot be NULL or lower than 3"))); + } + /* * int64 bridge_size: currently only stays at zero. * to do: implement bridge with variable number of nodes. @@ -299,7 +297,7 @@ Datum age_create_barbell_graph(PG_FUNCTION_ARGS) if (PG_ARGISNULL(2) || PG_GETARG_INT32(2) < 0 ) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("Bridge size must not be NULL or lower than 0"))); + errmsg("Bridge size cannot be NULL or lower than 0"))); } // node label: if null, gets default label, which is "_ag_label_vertex" @@ -312,14 +310,31 @@ Datum age_create_barbell_graph(PG_FUNCTION_ARGS) node_label_name = PG_GETARG_NAME(3); } node_label_str = NameStr(*node_label_name); - node_label_id = get_label_id(node_label_str, graph_oid); /* - * edge_label: doesn't need to validate, since the create_complete_graph - * function already does that. - */ + * Name edge_label + */ + if (PG_ARGISNULL(5)) + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("edge label can not be NULL"))); + } edge_label_name = PG_GETARG_NAME(5); edge_label_str = NameStr(*edge_label_name); + + + // create two separate complete graphs + DirectFunctionCall4(create_complete_graph, arguments->arg[0], + arguments->arg[1], + arguments->arg[5], + arguments->arg[3]); + DirectFunctionCall4(create_complete_graph, arguments->arg[0], + arguments->arg[1], + arguments->arg[5], + arguments->arg[3]); + + graph_oid = get_graph_oid(graph_name_str); + node_label_id = get_label_id(node_label_str, graph_oid); edge_label_id = get_label_id(edge_label_str, graph_oid); /* From 7ae6db23234e4fd4cb956bc85b2a7dd448671484 Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Wed, 1 Mar 2023 10:43:30 -0800 Subject: [PATCH 121/191] Fix cypher function input argument checks (issue #718) Fixed issue #718 which was due to a lack of input checks for an edge case and added regression tests. Addition of the driver parameter patch caused 2 additional edge cases that needed to be checked - SELECT * FROM cypher() AS (result agtype); SELECT * FROM cypher(NULL) AS (result agtype); --- regress/expected/analyze.out | 5 +++++ regress/sql/analyze.sql | 4 ++++ src/backend/parser/cypher_analyze.c | 9 +++++++++ 3 files changed, 18 insertions(+) diff --git a/regress/expected/analyze.out b/regress/expected/analyze.out index 5b248385a..676dab9da 100644 --- a/regress/expected/analyze.out +++ b/regress/expected/analyze.out @@ -119,6 +119,11 @@ SELECT * FROM cypher(NULL, NULL) AS (result agtype); ERROR: unexpected character at or near "$" LINE 1: SELECT * FROM cypher(NULL, NULL) AS (result agtype); ^ +-- should return errors +SELECT * FROM cypher() AS (result agtype); +ERROR: cypher function requires a minimum of 2 arguments +SELECT * FROM cypher(NULL) AS (result agtype); +ERROR: cypher function requires a minimum of 2 arguments -- drop graphs SELECT * FROM drop_graph('analyze', true); NOTICE: drop cascades to 2 other objects diff --git a/regress/sql/analyze.sql b/regress/sql/analyze.sql index 881ef3ffd..1da70b239 100644 --- a/regress/sql/analyze.sql +++ b/regress/sql/analyze.sql @@ -52,6 +52,10 @@ SELECT * FROM cypher(NULL, NULL) AS (result agtype); SELECT * FROM age_prepare_cypher('analyze', '$$ $$'); SELECT * FROM cypher(NULL, NULL) AS (result agtype); +-- should return errors +SELECT * FROM cypher() AS (result agtype); +SELECT * FROM cypher(NULL) AS (result agtype); + -- drop graphs SELECT * FROM drop_graph('analyze', true); diff --git a/src/backend/parser/cypher_analyze.c b/src/backend/parser/cypher_analyze.c index b99ff0a90..425b1167b 100644 --- a/src/backend/parser/cypher_analyze.c +++ b/src/backend/parser/cypher_analyze.c @@ -331,6 +331,15 @@ static void convert_cypher_to_subquery(RangeTblEntry *rte, ParseState *pstate) parser_errposition(pstate, exprLocation((Node *)funcexpr)))); } + /* verify that we have 2 input parameters as it is possible to get 1 or 0 */ + if (funcexpr->args == NULL || list_length(funcexpr->args) < 2) + { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("cypher function requires a minimum of 2 arguments"), + parser_errposition(pstate, -1))); + } + /* get our first 2 arguments */ arg1 = linitial(funcexpr->args); arg2 = lsecond(funcexpr->args); From fbed473104abc1a5876a3d46fec55c85c8fef734 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Fri, 3 Mar 2023 00:16:18 +0500 Subject: [PATCH 122/191] Fix Issue #693 - server termination from return exists(path) (#721) - Updated assert to pass EXPR_KIND_SELECT_TARGET. - Added regression tests. --- regress/expected/cypher_match.out | 96 ++++++++++++++++++++++++++++++ regress/sql/cypher_match.sql | 23 +++++++ src/backend/parser/cypher_clause.c | 1 + 3 files changed, 120 insertions(+) diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index 9ec4112d6..8f325cbe6 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -720,6 +720,57 @@ AS (u agtype, e agtype, v agtype); {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex | {"id": 3096224743817217, "label": "self", "end_id": 2814749767106561, "start_id": 2814749767106561, "properties": {}}::edge | {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex (1 row) +-- Return exists(pattern) +SELECT * FROM cypher('cypher_match', + $$MATCH (u) RETURN EXISTS((u)-[]->()) $$) +AS (exists agtype); + exists +-------- + false + false + false + false + false + true + true + false + false + true + false + true + false + true + true +(15 rows) + +SELECT * FROM cypher('cypher_match', + $$MATCH p=(u)-[e]->(v) RETURN EXISTS((p)) $$) +AS (exists agtype); + exists +-------- + true + true + true + true + true + true + true +(7 rows) + +SELECT * FROM cypher('cypher_match', + $$MATCH (u)-[e]->(v) RETURN EXISTS((u)-[e]->(v)-[e]->(u))$$) +AS (exists agtype); + exists +-------- + false + false + false + false + false + false + false +(7 rows) + -- These should error -- Bad pattern SELECT * FROM cypher('cypher_match', @@ -809,6 +860,51 @@ AS (u agtype); {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex (1 row) +-- Return exists(property) +SELECT * FROM cypher('cypher_match', + $$MATCH (u) RETURN EXISTS(u.id), properties(u) $$) +AS (exists agtype, properties agtype); + exists | properties +--------+------------------------------------------------------------------------------------------------------------- + false | {"int_key": 1, "map_key": {"key": "value"}, "list_key": [1, 2, 3], "float_key": 3.14, "string_key": "test"} + false | {"lst": [1, null, 3.14, "string", {"key": "value"}, []]} + false | {} + false | {"i": 0} + false | {"i": 1} + true | {"id": "initial"} + true | {"id": "middle"} + true | {"id": "end"} + true | {"id": "initial"} + true | {"id": "middle"} + true | {"id": "end"} + true | {"id": "initial"} + true | {"id": "middle"} + true | {"id": "end"} + true | {"id": "initial"} +(15 rows) + +SELECT * FROM cypher('cypher_match', + $$MATCH (u) RETURN EXISTS(u.name), properties(u) $$) +AS (exists agtype, properties agtype); + exists | properties +--------+------------------------------------------------------------------------------------------------------------- + false | {"int_key": 1, "map_key": {"key": "value"}, "list_key": [1, 2, 3], "float_key": 3.14, "string_key": "test"} + false | {"lst": [1, null, 3.14, "string", {"key": "value"}, []]} + false | {} + false | {"i": 0} + false | {"i": 1} + false | {"id": "initial"} + false | {"id": "middle"} + false | {"id": "end"} + false | {"id": "initial"} + false | {"id": "middle"} + false | {"id": "end"} + false | {"id": "initial"} + false | {"id": "middle"} + false | {"id": "end"} + false | {"id": "initial"} +(15 rows) + -- should give an error SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE EXISTS(u) RETURN u$$) diff --git a/regress/sql/cypher_match.sql b/regress/sql/cypher_match.sql index aeed9f386..70f638df2 100644 --- a/regress/sql/cypher_match.sql +++ b/regress/sql/cypher_match.sql @@ -372,6 +372,20 @@ SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((u)-[e]->(u)) AND EXISTS((v)-[e]->(v)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); +-- Return exists(pattern) + +SELECT * FROM cypher('cypher_match', + $$MATCH (u) RETURN EXISTS((u)-[]->()) $$) +AS (exists agtype); + +SELECT * FROM cypher('cypher_match', + $$MATCH p=(u)-[e]->(v) RETURN EXISTS((p)) $$) +AS (exists agtype); + +SELECT * FROM cypher('cypher_match', + $$MATCH (u)-[e]->(v) RETURN EXISTS((u)-[e]->(v)-[e]->(u))$$) +AS (exists agtype); + -- These should error -- Bad pattern SELECT * FROM cypher('cypher_match', @@ -410,6 +424,15 @@ SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE EXISTS(u.id) AND EXISTS((u)-[]->(u)) RETURN u$$) AS (u agtype); +-- Return exists(property) +SELECT * FROM cypher('cypher_match', + $$MATCH (u) RETURN EXISTS(u.id), properties(u) $$) +AS (exists agtype, properties agtype); + +SELECT * FROM cypher('cypher_match', + $$MATCH (u) RETURN EXISTS(u.name), properties(u) $$) +AS (exists agtype, properties agtype); + -- should give an error SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE EXISTS(u) RETURN u$$) diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 380eef92b..e1e6c94be 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -5142,6 +5142,7 @@ transform_cypher_clause_as_subquery(cypher_parsestate *cpstate, Assert(pstate->p_expr_kind == EXPR_KIND_NONE || pstate->p_expr_kind == EXPR_KIND_OTHER || pstate->p_expr_kind == EXPR_KIND_WHERE || + pstate->p_expr_kind == EXPR_KIND_SELECT_TARGET || pstate->p_expr_kind == EXPR_KIND_FROM_SUBSELECT); /* From b09160fdde0506327ef9cc4073159ec06112f380 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Fri, 3 Mar 2023 00:22:46 +0500 Subject: [PATCH 123/191] Implemented CI test for nodejs driver (#720) * Modify nodejs driver tests - Modified connection params to connect with running docker instance. - Fixed failing tests by modifying the expected outcomes. * Include asf header as key/value to avoid EJSONPARSE error - "//" key will never be used by npm for any purpose, and is reserved for comments. * Implement CI test for nodejs driver --- .github/workflows/nodejs-driver.yaml | 36 +++++++++++++++++ drivers/docker-compose.yml | 2 +- drivers/nodejs/package.json | 37 +++++++++-------- drivers/nodejs/test/index.test.ts | 59 ++++++++++++++++++---------- 4 files changed, 94 insertions(+), 40 deletions(-) create mode 100644 .github/workflows/nodejs-driver.yaml diff --git a/.github/workflows/nodejs-driver.yaml b/.github/workflows/nodejs-driver.yaml new file mode 100644 index 000000000..f812e2c33 --- /dev/null +++ b/.github/workflows/nodejs-driver.yaml @@ -0,0 +1,36 @@ +name: Nodejs Driver Tests + +on: + push: + branches: [ "master", "PG11" ] + + pull_request: + branches: [ "master", "PG11" ] + +jobs: + build: + runs-on: ubuntu-latest + + defaults: + run: + working-directory: drivers/nodejs/ + + steps: + - uses: actions/checkout@v3 + + - name: Run apache/age docker image + run: docker-compose up -d + + - name: Set up Node + uses: actions/setup-node@v3 + with: + node-version: latest + + - name: Install dependencies + run: npm install + + - name: Build + run: npm run build + + - name: Test + run: npm test \ No newline at end of file diff --git a/drivers/docker-compose.yml b/drivers/docker-compose.yml index 668eb19d3..8bdf00318 100644 --- a/drivers/docker-compose.yml +++ b/drivers/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.3" services: db: - image: apache/age + image: apache/age:latest environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=agens diff --git a/drivers/nodejs/package.json b/drivers/nodejs/package.json index db385eefb..9f88bc2ba 100644 --- a/drivers/nodejs/package.json +++ b/drivers/nodejs/package.json @@ -1,23 +1,22 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - { + "//": [ + "Licensed to the Apache Software Foundation (ASF) under one", + "or more contributor license agreements. See the NOTICE file", + "distributed with this work for additional information", + "regarding copyright ownership. The ASF licenses this file", + "to you under the Apache License, Version 2.0 (the", + "\"License\"); you may not use this file except in compliance", + "with the License. You may obtain a copy of the License at", + "", + "http://www.apache.org/licenses/LICENSE-2.0", + "", + "Unless required by applicable law or agreed to in writing,", + "software distributed under the License is distributed on an", + "\"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY", + "KIND, either express or implied. See the License for the", + "specific language governing permissions and limitations", + "under the License." + ], "name": "pg-age", "version": "1.0.0-alpha", "main": "dist/index.js", diff --git a/drivers/nodejs/test/index.test.ts b/drivers/nodejs/test/index.test.ts index 60f9e2fef..ea386ddaa 100644 --- a/drivers/nodejs/test/index.test.ts +++ b/drivers/nodejs/test/index.test.ts @@ -24,8 +24,8 @@ const config = { user: 'postgres', host: '127.0.0.1', database: 'postgres', - password: 'postgres', - port: 25432 + password: 'agens', + port: 5432 } const testGraphName = 'age-test' @@ -59,25 +59,44 @@ describe('Pre-connected Connection', () => { $$) as (a agtype); `)! expect(results.rows).toStrictEqual( - [{ - a: { - id: 844424930131969, - label: 'Part', - properties: { part_num: '123' } + [ + { + a : new Map(Object.entries({ + id: 844424930131969, + label: 'Part', + properties: new Map(Object.entries({ + part_num: '123' + })) + })), + }, + { + a : new Map(Object.entries({ + id: 844424930131970, + label: 'Part', + properties: new Map(Object.entries({ + part_num: '345' + })) + })), + }, + { + a : new Map(Object.entries({ + id: 844424930131971, + label: 'Part', + properties: new Map(Object.entries({ + part_num: '456' + })) + })), + }, + { + a : new Map(Object.entries({ + id: 844424930131972, + label: 'Part', + properties: new Map(Object.entries({ + part_num: '789' + })) + })), } - }, { - a: { - id: 844424930131970, - label: 'Part', - properties: { part_num: '345' } - } - }, { - a: { - id: 844424930131971, - label: 'Part', - properties: { part_num: '456' } - } - }, { a: { id: 844424930131972, label: 'Part', properties: { part_num: '789' } } }] + ] ) }) }) From debe398476365b56fb5d7c6de1aee58193e16e22 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Fri, 3 Mar 2023 23:41:55 +0500 Subject: [PATCH 124/191] Update regression tests for cypher_with (#725) - Used a small dataset for regression tests. --- regress/expected/cypher_with.out | 408 ++++++++++++++----------------- regress/sql/cypher_with.sql | 207 ++++++++-------- 2 files changed, 286 insertions(+), 329 deletions(-) diff --git a/regress/expected/cypher_with.out b/regress/expected/cypher_with.out index 1166fff36..e5f82aa21 100644 --- a/regress/expected/cypher_with.out +++ b/regress/expected/cypher_with.out @@ -16,7 +16,6 @@ * specific language governing permissions and limitations * under the License. */ - \! cp -r regress/age_load/data regress/instance/data/age_load LOAD 'age'; SET search_path TO ag_catalog; -- @@ -29,82 +28,71 @@ NOTICE: graph "cypher_with" has been created (1 row) -SELECT create_vlabel('cypher_with','Country'); -NOTICE: VLabel "Country" has been created - create_vlabel ---------------- - -(1 row) - -SELECT load_labels_from_file('cypher_with', 'Country', - 'age_load/countries.csv'); - load_labels_from_file ------------------------ - -(1 row) - -SELECT create_vlabel('cypher_with','City'); -NOTICE: VLabel "City" has been created - create_vlabel ---------------- - -(1 row) - -SELECT load_labels_from_file('cypher_with', 'City', - 'age_load/cities.csv'); - load_labels_from_file ------------------------ - -(1 row) - -SELECT create_elabel('cypher_with','has_city'); -NOTICE: ELabel "has_city" has been created - create_elabel ---------------- - -(1 row) - -SELECT load_edges_from_file('cypher_with', 'has_city', - 'age_load/edges.csv'); - load_edges_from_file ----------------------- - -(1 row) +SELECT * FROM cypher('cypher_with', $$ + CREATE (andres {name : 'Andres', age : 36}), + (caesar {name : 'Caesar', age : 25}), + (bossman {name : 'Bossman', age : 55}), + (david {name : 'David', age : 35}), + (george {name : 'George', age : 37}), + (andres)-[:BLOCKS]->(caesar), + (andres)-[:KNOWS]->(bossman), + (caesar)-[:KNOWS]->(george), + (bossman)-[:BLOCKS]->(david), + (bossman)-[:KNOWS]->(george), + (david)-[:KNOWS]->(andres) +$$) as (a agtype); + a +--- +(0 rows) -- -- Test WITH clause -- -SELECT count(*) FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m,b - RETURN m,b -$$) AS (City agtype, Country agtype); - count -------- - 2361 -(1 row) +SELECT * FROM cypher('cypher_with', $$ + MATCH (n)-[e]->(m) + WITH n,e,m + RETURN n,e,m +$$) AS (N1 agtype, edge agtype, N2 agtype); + n1 | edge | n2 +--------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------- + {"id": 281474976710657, "label": "", "properties": {"age": 36, "name": "Andres"}}::vertex | {"id": 844424930131969, "label": "BLOCKS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge | {"id": 281474976710658, "label": "", "properties": {"age": 25, "name": "Caesar"}}::vertex + {"id": 281474976710659, "label": "", "properties": {"age": 55, "name": "Bossman"}}::vertex | {"id": 844424930131970, "label": "BLOCKS", "end_id": 281474976710660, "start_id": 281474976710659, "properties": {}}::edge | {"id": 281474976710660, "label": "", "properties": {"age": 35, "name": "David"}}::vertex + {"id": 281474976710657, "label": "", "properties": {"age": 36, "name": "Andres"}}::vertex | {"id": 1125899906842625, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710657, "properties": {}}::edge | {"id": 281474976710659, "label": "", "properties": {"age": 55, "name": "Bossman"}}::vertex + {"id": 281474976710658, "label": "", "properties": {"age": 25, "name": "Caesar"}}::vertex | {"id": 1125899906842626, "label": "KNOWS", "end_id": 281474976710661, "start_id": 281474976710658, "properties": {}}::edge | {"id": 281474976710661, "label": "", "properties": {"age": 37, "name": "George"}}::vertex + {"id": 281474976710659, "label": "", "properties": {"age": 55, "name": "Bossman"}}::vertex | {"id": 1125899906842627, "label": "KNOWS", "end_id": 281474976710661, "start_id": 281474976710659, "properties": {}}::edge | {"id": 281474976710661, "label": "", "properties": {"age": 37, "name": "George"}}::vertex + {"id": 281474976710660, "label": "", "properties": {"age": 35, "name": "David"}}::vertex | {"id": 1125899906842628, "label": "KNOWS", "end_id": 281474976710657, "start_id": 281474976710660, "properties": {}}::edge | {"id": 281474976710657, "label": "", "properties": {"age": 36, "name": "Andres"}}::vertex +(6 rows) -- WITH/AS SELECT * FROM cypher('cypher_with', $$ - MATCH (b:Country {iso2 : 'AT'}) - WITH b.name AS name, id(b) AS id - RETURN name,id -$$) AS (Country agtype, Country_id agtype); - country | country_id ------------+----------------- - "Austria" | 844424930131983 -(1 row) + MATCH (n)-[e]->(m) + WITH n.name AS n1, e as edge, m.name as n2 + RETURN n1,label(edge),n2 +$$) AS (start_node agtype,edge agtype, end_node agtype); + start_node | edge | end_node +------------+----------+----------- + "Andres" | "BLOCKS" | "Caesar" + "Bossman" | "BLOCKS" | "David" + "Andres" | "KNOWS" | "Bossman" + "Caesar" | "KNOWS" | "George" + "Bossman" | "KNOWS" | "George" + "David" | "KNOWS" | "Andres" +(6 rows) -SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City {name: 'Zell'})-[]-(b:Country {iso2 : 'AT'}) - WITH b as country, count(*) AS foaf - WHERE foaf > 1 - RETURN country.name, foaf -$$) as (name agtype, foaf agtype); - name | foaf ------------+------ - "Austria" | 2 -(1 row) +SELECT * FROM cypher('cypher_with',$$ + MATCH (person)-[r]->(otherPerson) + WITH *, type(r) AS connectionType + RETURN person.name, connectionType, otherPerson.name +$$) AS (start_node agtype, connection agtype, end_node agtype); + start_node | connection | end_node +------------+------------+----------- + "Andres" | "BLOCKS" | "Caesar" + "Bossman" | "BLOCKS" | "David" + "Andres" | "KNOWS" | "Bossman" + "Caesar" | "KNOWS" | "George" + "Bossman" | "KNOWS" | "George" + "David" | "KNOWS" | "Andres" +(6 rows) SELECT * FROM cypher('cypher_with', $$ WITH true AS b @@ -117,162 +105,139 @@ $$) AS (b bool); -- WITH/WHERE SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country{iso2:'BE'}) - WITH b,m - WHERE m.name='x' - RETURN m.name,b.iso2 -$$) AS ( "m.name" agtype, "b" agtype); - m.name | b ---------+--- -(0 rows) - -SELECT * FROM cypher('cypher_with', $$ - MATCH (b:Country {iso2 : 'AT'}) - WITH b.name AS name, id(b) AS id - WHERE name = 'Austria' - RETURN name,id -$$) AS (Country agtype, Country_id agtype); - country | country_id ------------+----------------- - "Austria" | 844424930131983 +MATCH (george {name: 'George'})<-[]-(otherPerson) + WITH otherPerson, toUpper(otherPerson.name) AS upperCaseName + WHERE upperCaseName STARTS WITH 'C' + RETURN otherPerson.name +$$) as (name agtype); + name +---------- + "Caesar" (1 row) SELECT * FROM cypher('cypher_with', $$ - MATCH (b:Country {iso2 : 'AT'}) - WITH b.name AS name, id(b) AS id - WHERE name = 'Austria' OR name = 'Kosovo' - RETURN name,id -$$) AS (Country agtype, Country_id agtype); - country | country_id ------------+----------------- - "Austria" | 844424930131983 + MATCH (david {name: 'David'})-[]-(otherPerson)-[]->() + WITH otherPerson, count(*) AS foaf + WHERE foaf > 1 + RETURN otherPerson.name +$$) as (name agtype); + name +---------- + "Andres" (1 row) SELECT * FROM cypher('cypher_with', $$ - MATCH p = (m:City)-[:has_city*1..2]->(b:Country {iso2 : 'AT'}) + MATCH p = (m)-[*1..2]->(b) WITH p, length(p) AS path_length WHERE path_length > 1 RETURN p $$) AS (pattern agtype); - pattern ---------- -(0 rows) + pattern +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"age": 36, "name": "Andres"}}::vertex, {"id": 1125899906842625, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710657, "properties": {}}::edge, {"id": 281474976710659, "label": "_ag_label_vertex", "properties": {"age": 55, "name": "Bossman"}}::vertex, {"id": 1125899906842627, "label": "KNOWS", "end_id": 281474976710661, "start_id": 281474976710659, "properties": {}}::edge, {"id": 281474976710661, "label": "_ag_label_vertex", "properties": {"age": 37, "name": "George"}}::vertex]::path + [{"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"age": 36, "name": "Andres"}}::vertex, {"id": 1125899906842625, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710657, "properties": {}}::edge, {"id": 281474976710659, "label": "_ag_label_vertex", "properties": {"age": 55, "name": "Bossman"}}::vertex, {"id": 844424930131970, "label": "BLOCKS", "end_id": 281474976710660, "start_id": 281474976710659, "properties": {}}::edge, {"id": 281474976710660, "label": "_ag_label_vertex", "properties": {"age": 35, "name": "David"}}::vertex]::path + [{"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"age": 36, "name": "Andres"}}::vertex, {"id": 844424930131969, "label": "BLOCKS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge, {"id": 281474976710658, "label": "_ag_label_vertex", "properties": {"age": 25, "name": "Caesar"}}::vertex, {"id": 1125899906842626, "label": "KNOWS", "end_id": 281474976710661, "start_id": 281474976710658, "properties": {}}::edge, {"id": 281474976710661, "label": "_ag_label_vertex", "properties": {"age": 37, "name": "George"}}::vertex]::path + [{"id": 281474976710659, "label": "_ag_label_vertex", "properties": {"age": 55, "name": "Bossman"}}::vertex, {"id": 844424930131970, "label": "BLOCKS", "end_id": 281474976710660, "start_id": 281474976710659, "properties": {}}::edge, {"id": 281474976710660, "label": "_ag_label_vertex", "properties": {"age": 35, "name": "David"}}::vertex, {"id": 1125899906842628, "label": "KNOWS", "end_id": 281474976710657, "start_id": 281474976710660, "properties": {}}::edge, {"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"age": 36, "name": "Andres"}}::vertex]::path + [{"id": 281474976710660, "label": "_ag_label_vertex", "properties": {"age": 35, "name": "David"}}::vertex, {"id": 1125899906842628, "label": "KNOWS", "end_id": 281474976710657, "start_id": 281474976710660, "properties": {}}::edge, {"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"age": 36, "name": "Andres"}}::vertex, {"id": 1125899906842625, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710657, "properties": {}}::edge, {"id": 281474976710659, "label": "_ag_label_vertex", "properties": {"age": 55, "name": "Bossman"}}::vertex]::path + [{"id": 281474976710660, "label": "_ag_label_vertex", "properties": {"age": 35, "name": "David"}}::vertex, {"id": 1125899906842628, "label": "KNOWS", "end_id": 281474976710657, "start_id": 281474976710660, "properties": {}}::edge, {"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"age": 36, "name": "Andres"}}::vertex, {"id": 844424930131969, "label": "BLOCKS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge, {"id": 281474976710658, "label": "_ag_label_vertex", "properties": {"age": 25, "name": "Caesar"}}::vertex]::path +(6 rows) -- MATCH/WHERE with WITH/WHERE SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WHERE b.name = 'Austria' - WITH m.name AS city,b.name AS country - WHERE city = 'Vienna' - RETURN city,country -$$) AS (City agtype, Country agtype); - city | country -----------+----------- - "Vienna" | "Austria" + MATCH (m)-[e]->(b) + WHERE label(e) = 'KNOWS' + WITH * + WHERE m.name = 'Andres' + RETURN m.name,label(e),b.name +$$) AS (N1 agtype, edge agtype, N2 agtype); + n1 | edge | n2 +----------+---------+----------- + "Andres" | "KNOWS" | "Bossman" (1 row) -- WITH/ORDER BY SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - ORDER BY id(m) DESC LIMIT 10 - RETURN id(city),city -$$) AS (id agtype, city agtype); - id | city -------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - 1125899906986495 | {"id": 1125899906986495, "label": "City", "properties": {"id": "143871", "name": "Zell", "__id__": 143871, "latitude": "46.47222222", "state_id": "2057", "longitude": "14.38888889", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex - 1125899906986492 | {"id": 1125899906986492, "label": "City", "properties": {"id": "143868", "name": "Weißenstein", "__id__": 143868, "latitude": "46.68222222", "state_id": "2057", "longitude": "13.72361111", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex - 1125899906986491 | {"id": 1125899906986491, "label": "City", "properties": {"id": "143867", "name": "Weißensee", "__id__": 143867, "latitude": "46.71666667", "state_id": "2057", "longitude": "13.3", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex - 1125899906986490 | {"id": 1125899906986490, "label": "City", "properties": {"id": "143866", "name": "Weitensfeld im Gurktal", "__id__": 143866, "latitude": "46.84861111", "state_id": "2057", "longitude": "14.19166667", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex - 1125899906986489 | {"id": 1125899906986489, "label": "City", "properties": {"id": "143865", "name": "Velden am Wörther See", "__id__": 143865, "latitude": "46.6125", "state_id": "2057", "longitude": "14.04194444", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex - 1125899906986488 | {"id": 1125899906986488, "label": "City", "properties": {"id": "143864", "name": "Umberg", "__id__": 143864, "latitude": "46.64833", "state_id": "2057", "longitude": "13.9575", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex - 1125899906986487 | {"id": 1125899906986487, "label": "City", "properties": {"id": "143863", "name": "Tschachoritsch", "__id__": 143863, "latitude": "46.55352", "state_id": "2057", "longitude": "14.21461", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex - 1125899906986486 | {"id": 1125899906986486, "label": "City", "properties": {"id": "143862", "name": "Treffen", "__id__": 143862, "latitude": "46.66833333", "state_id": "2057", "longitude": "13.85555556", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex - 1125899906986484 | {"id": 1125899906986484, "label": "City", "properties": {"id": "143860", "name": "Timenitz", "__id__": 143860, "latitude": "46.68333", "state_id": "2057", "longitude": "14.41667", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex - 1125899906986483 | {"id": 1125899906986483, "label": "City", "properties": {"id": "143859", "name": "Techelsberg", "__id__": 143859, "latitude": "46.65861111", "state_id": "2057", "longitude": "14.10194444", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex -(10 rows) + MATCH (n) + WITH n + ORDER BY id(n) + RETURN n +$$) as (name agtype); + name +-------------------------------------------------------------------------------------------- + {"id": 281474976710657, "label": "", "properties": {"age": 36, "name": "Andres"}}::vertex + {"id": 281474976710658, "label": "", "properties": {"age": 25, "name": "Caesar"}}::vertex + {"id": 281474976710659, "label": "", "properties": {"age": 55, "name": "Bossman"}}::vertex + {"id": 281474976710660, "label": "", "properties": {"age": 35, "name": "David"}}::vertex + {"id": 281474976710661, "label": "", "properties": {"age": 37, "name": "George"}}::vertex +(5 rows) +-- WITH/ORDER BY/DESC SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City) - WITH m AS city - ORDER BY id(m) ASC LIMIT 10 - RETURN id(city),city.name -$$) AS (id agtype, names agtype); - id | names -------------------+----------------------- - 1125899906842625 | "Andorra la Vella" - 1125899906842626 | "Arinsal" - 1125899906842627 | "Canillo" - 1125899906842628 | "El Tarter" - 1125899906842629 | "Encamp" - 1125899906842630 | "Ordino" - 1125899906842631 | "Pas de la Casa" - 1125899906842632 | "Sant Julià de Lòria" - 1125899906842633 | "la Massana" - 1125899906842634 | "les Escaldes" -(10 rows) + MATCH (n) + WITH n + ORDER BY n.name DESC LIMIT 3 + RETURN collect(n.name) +$$) as (names agtype); + names +------------------------------- + ["George", "David", "Caesar"] +(1 row) --- WITH/ORDER BY/DESC/WHERE SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - ORDER BY id(m) DESC LIMIT 10 - WHERE city.name = 'Zell' OR city.name = 'Umberg' - RETURN id(city),city.name,country.name -$$) AS (id agtype, city agtype, country agtype); - id | city | country -------------------+----------+----------- - 1125899906986495 | "Zell" | "Austria" - 1125899906986488 | "Umberg" | "Austria" + MATCH (n {name: 'Andres'})-[]-(m) + WITH m + ORDER BY m.name DESC LIMIT 1 + MATCH (m)-[]-(o) + RETURN o.name ORDER BY o.name +$$) as (name agtype); + name +----------- + "Andres" + "Bossman" (2 rows) -- multiple WITH clauses SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - WITH city LIMIT 10 - RETURN city.name -$$) AS (city agtype); - city ---------------------- - "Andau" - "Antau" - "Apetlon" - "Bad Sauerbrunn" - "Bad Tatzmannsdorf" - "Badersdorf" - "Bernstein" - "Bocksdorf" - "Breitenbrunn" - "Bruckneudorf" -(10 rows) + MATCH (n)-[e]->(m) + WITH n, e, m + WHERE label(e) = 'KNOWS' + WITH n.name as n1, label(e) as edge, m.name as n2 + WHERE n1 = 'Andres' + RETURN n1,edge,n2 +$$) AS (N1 agtype, edge agtype, N2 agtype); + n1 | edge | n2 +----------+---------+----------- + "Andres" | "KNOWS" | "Bossman" +(1 row) SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - ORDER BY id(m) DESC LIMIT 10 - WITH city - WHERE city.name = 'Zell' - RETURN id(city),city.name -$$) AS (id agtype, city agtype); - id | city -------------------+-------- - 1125899906986495 | "Zell" -(1 row) + UNWIND [1, 2, 3, 4, 5, 6] AS x + WITH x + WHERE x > 2 + WITH x + LIMIT 5 + RETURN x +$$) as (name agtype); + name +------ + 3 + 4 + 5 + 6 +(4 rows) SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - WHERE country.name = 'Austria' - WITH city - ORDER BY id(city) DESC - WHERE city.name = 'Zell' - RETURN id(city),city.name -$$) AS (id agtype, city agtype); - id | city -------------------+-------- - 1125899906986495 | "Zell" - 1125899906846495 | "Zell" + MATCH (m)-[]->(b) + WITH m,b + ORDER BY id(m) DESC LIMIT 5 + WITH m as start_node, b as end_node + WHERE end_node.name = 'George' + RETURN id(start_node),start_node.name,id(end_node),end_node.name +$$) AS (id1 agtype, name1 agtype, id2 agtype, name2 agtype); + id1 | name1 | id2 | name2 +-----------------+-----------+-----------------+---------- + 281474976710659 | "Bossman" | 281474976710661 | "George" + 281474976710658 | "Caesar" | 281474976710661 | "George" (2 rows) -- Expression item must be aliased. @@ -285,42 +250,41 @@ LINE 2: WITH 1 + 1 ^ HINT: Items can be aliased by using AS. SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + MATCH (m)-[]->(b) WITH id(m) RETURN m -$$) AS (id agtype, city agtype); +$$) AS (id agtype); ERROR: expression item must be aliased LINE 3: WITH id(m) ^ HINT: Items can be aliased by using AS. -- Reference undefined variable in WITH clause (should error out) SELECT count(*) FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + MATCH (m)-[]->(b) WITH m RETURN m,b -$$) AS (City agtype, Country agtype); +$$) AS (a agtype, b agtype); ERROR: could not find rte for b LINE 4: RETURN m,b ^ SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - WHERE country.name = 'Austria' - WITH city - WHERE city.name = 'Zell' - RETURN id(city),country.name -$$) AS (id agtype, country agtype); -ERROR: could not find rte for country -LINE 7: RETURN id(city),country.name - ^ + MATCH (m)-[]->(b) + WITH m AS start_node,b AS end_node + WHERE start_node.name = 'Andres' + WITH start_node + WHERE start_node.name = 'George' + RETURN id(start_node),end_node.name +$$) AS (id agtype, node agtype); +ERROR: could not find rte for end_node +LINE 7: RETURN id(start_node),end_node.name + ^ -- Clean up SELECT drop_graph('cypher_with', true); -NOTICE: drop cascades to 5 other objects +NOTICE: drop cascades to 4 other objects DETAIL: drop cascades to table cypher_with._ag_label_vertex drop cascades to table cypher_with._ag_label_edge -drop cascades to table cypher_with."Country" -drop cascades to table cypher_with."City" -drop cascades to table cypher_with.has_city +drop cascades to table cypher_with."BLOCKS" +drop cascades to table cypher_with."KNOWS" NOTICE: graph "cypher_with" has been dropped drop_graph ------------ @@ -358,22 +322,22 @@ LINE 8: RETURN c,d ^ -- Issue 396 (should error out) SELECT * FROM cypher('graph',$$ - CREATE (v),(u),(w), - (v)-[:hasFriend]->(u), - (u)-[:hasFriend]->(w) + CREATE (v),(u),(w), + (v)-[:hasFriend]->(u), + (u)-[:hasFriend]->(w) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('graph',$$ - MATCH p=(v)-[*1..2]->(u) - WITH p,length(p) AS path_length - RETURN v,path_length + MATCH p=(v)-[*1..2]->(u) + WITH p,length(p) AS path_length + RETURN v,path_length $$) as (a agtype,b agtype); ERROR: could not find rte for v -LINE 4: RETURN v,path_length - ^ +LINE 4: RETURN v,path_length + ^ -- Clean up SELECT drop_graph('graph', true); NOTICE: drop cascades to 6 other objects diff --git a/regress/sql/cypher_with.sql b/regress/sql/cypher_with.sql index 95b18c506..93413f2c9 100644 --- a/regress/sql/cypher_with.sql +++ b/regress/sql/cypher_with.sql @@ -17,8 +17,6 @@ * under the License. */ - \! cp -r regress/age_load/data regress/instance/data/age_load - LOAD 'age'; SET search_path TO ag_catalog; @@ -27,42 +25,43 @@ SET search_path TO ag_catalog; -- SELECT create_graph('cypher_with'); -SELECT create_vlabel('cypher_with','Country'); -SELECT load_labels_from_file('cypher_with', 'Country', - 'age_load/countries.csv'); - -SELECT create_vlabel('cypher_with','City'); -SELECT load_labels_from_file('cypher_with', 'City', - 'age_load/cities.csv'); - -SELECT create_elabel('cypher_with','has_city'); -SELECT load_edges_from_file('cypher_with', 'has_city', - 'age_load/edges.csv'); +SELECT * FROM cypher('cypher_with', $$ + CREATE (andres {name : 'Andres', age : 36}), + (caesar {name : 'Caesar', age : 25}), + (bossman {name : 'Bossman', age : 55}), + (david {name : 'David', age : 35}), + (george {name : 'George', age : 37}), + (andres)-[:BLOCKS]->(caesar), + (andres)-[:KNOWS]->(bossman), + (caesar)-[:KNOWS]->(george), + (bossman)-[:BLOCKS]->(david), + (bossman)-[:KNOWS]->(george), + (david)-[:KNOWS]->(andres) +$$) as (a agtype); -- -- Test WITH clause -- -SELECT count(*) FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m,b - RETURN m,b -$$) AS (City agtype, Country agtype); +SELECT * FROM cypher('cypher_with', $$ + MATCH (n)-[e]->(m) + WITH n,e,m + RETURN n,e,m +$$) AS (N1 agtype, edge agtype, N2 agtype); -- WITH/AS SELECT * FROM cypher('cypher_with', $$ - MATCH (b:Country {iso2 : 'AT'}) - WITH b.name AS name, id(b) AS id - RETURN name,id -$$) AS (Country agtype, Country_id agtype); + MATCH (n)-[e]->(m) + WITH n.name AS n1, e as edge, m.name as n2 + RETURN n1,label(edge),n2 +$$) AS (start_node agtype,edge agtype, end_node agtype); -SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City {name: 'Zell'})-[]-(b:Country {iso2 : 'AT'}) - WITH b as country, count(*) AS foaf - WHERE foaf > 1 - RETURN country.name, foaf -$$) as (name agtype, foaf agtype); +SELECT * FROM cypher('cypher_with',$$ + MATCH (person)-[r]->(otherPerson) + WITH *, type(r) AS connectionType + RETURN person.name, connectionType, otherPerson.name +$$) AS (start_node agtype, connection agtype, end_node agtype); SELECT * FROM cypher('cypher_with', $$ WITH true AS b @@ -72,28 +71,21 @@ $$) AS (b bool); -- WITH/WHERE SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country{iso2:'BE'}) - WITH b,m - WHERE m.name='x' - RETURN m.name,b.iso2 -$$) AS ( "m.name" agtype, "b" agtype); - -SELECT * FROM cypher('cypher_with', $$ - MATCH (b:Country {iso2 : 'AT'}) - WITH b.name AS name, id(b) AS id - WHERE name = 'Austria' - RETURN name,id -$$) AS (Country agtype, Country_id agtype); +MATCH (george {name: 'George'})<-[]-(otherPerson) + WITH otherPerson, toUpper(otherPerson.name) AS upperCaseName + WHERE upperCaseName STARTS WITH 'C' + RETURN otherPerson.name +$$) as (name agtype); SELECT * FROM cypher('cypher_with', $$ - MATCH (b:Country {iso2 : 'AT'}) - WITH b.name AS name, id(b) AS id - WHERE name = 'Austria' OR name = 'Kosovo' - RETURN name,id -$$) AS (Country agtype, Country_id agtype); + MATCH (david {name: 'David'})-[]-(otherPerson)-[]->() + WITH otherPerson, count(*) AS foaf + WHERE foaf > 1 + RETURN otherPerson.name +$$) as (name agtype); SELECT * FROM cypher('cypher_with', $$ - MATCH p = (m:City)-[:has_city*1..2]->(b:Country {iso2 : 'AT'}) + MATCH p = (m)-[*1..2]->(b) WITH p, length(p) AS path_length WHERE path_length > 1 RETURN p @@ -102,66 +94,67 @@ $$) AS (pattern agtype); -- MATCH/WHERE with WITH/WHERE SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WHERE b.name = 'Austria' - WITH m.name AS city,b.name AS country - WHERE city = 'Vienna' - RETURN city,country -$$) AS (City agtype, Country agtype); + MATCH (m)-[e]->(b) + WHERE label(e) = 'KNOWS' + WITH * + WHERE m.name = 'Andres' + RETURN m.name,label(e),b.name +$$) AS (N1 agtype, edge agtype, N2 agtype); -- WITH/ORDER BY SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - ORDER BY id(m) DESC LIMIT 10 - RETURN id(city),city -$$) AS (id agtype, city agtype); + MATCH (n) + WITH n + ORDER BY id(n) + RETURN n +$$) as (name agtype); -SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City) - WITH m AS city - ORDER BY id(m) ASC LIMIT 10 - RETURN id(city),city.name -$$) AS (id agtype, names agtype); +-- WITH/ORDER BY/DESC --- WITH/ORDER BY/DESC/WHERE +SELECT * FROM cypher('cypher_with', $$ + MATCH (n) + WITH n + ORDER BY n.name DESC LIMIT 3 + RETURN collect(n.name) +$$) as (names agtype); SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - ORDER BY id(m) DESC LIMIT 10 - WHERE city.name = 'Zell' OR city.name = 'Umberg' - RETURN id(city),city.name,country.name -$$) AS (id agtype, city agtype, country agtype); + MATCH (n {name: 'Andres'})-[]-(m) + WITH m + ORDER BY m.name DESC LIMIT 1 + MATCH (m)-[]-(o) + RETURN o.name ORDER BY o.name +$$) as (name agtype); -- multiple WITH clauses SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - WITH city LIMIT 10 - RETURN city.name -$$) AS (city agtype); + MATCH (n)-[e]->(m) + WITH n, e, m + WHERE label(e) = 'KNOWS' + WITH n.name as n1, label(e) as edge, m.name as n2 + WHERE n1 = 'Andres' + RETURN n1,edge,n2 +$$) AS (N1 agtype, edge agtype, N2 agtype); SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - ORDER BY id(m) DESC LIMIT 10 - WITH city - WHERE city.name = 'Zell' - RETURN id(city),city.name -$$) AS (id agtype, city agtype); + UNWIND [1, 2, 3, 4, 5, 6] AS x + WITH x + WHERE x > 2 + WITH x + LIMIT 5 + RETURN x +$$) as (name agtype); SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - WHERE country.name = 'Austria' - WITH city - ORDER BY id(city) DESC - WHERE city.name = 'Zell' - RETURN id(city),city.name -$$) AS (id agtype, city agtype); + MATCH (m)-[]->(b) + WITH m,b + ORDER BY id(m) DESC LIMIT 5 + WITH m as start_node, b as end_node + WHERE end_node.name = 'George' + RETURN id(start_node),start_node.name,id(end_node),end_node.name +$$) AS (id1 agtype, name1 agtype, id2 agtype, name2 agtype); -- Expression item must be aliased. @@ -171,27 +164,27 @@ SELECT * FROM cypher('cypher_with', $$ $$) AS (i int); SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + MATCH (m)-[]->(b) WITH id(m) RETURN m -$$) AS (id agtype, city agtype); +$$) AS (id agtype); -- Reference undefined variable in WITH clause (should error out) SELECT count(*) FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + MATCH (m)-[]->(b) WITH m RETURN m,b -$$) AS (City agtype, Country agtype); +$$) AS (a agtype, b agtype); SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - WHERE country.name = 'Austria' - WITH city - WHERE city.name = 'Zell' - RETURN id(city),country.name -$$) AS (id agtype, country agtype); + MATCH (m)-[]->(b) + WITH m AS start_node,b AS end_node + WHERE start_node.name = 'Andres' + WITH start_node + WHERE start_node.name = 'George' + RETURN id(start_node),end_node.name +$$) AS (id agtype, node agtype); -- Clean up @@ -219,15 +212,15 @@ $$) AS (n agtype, d agtype); -- Issue 396 (should error out) SELECT * FROM cypher('graph',$$ - CREATE (v),(u),(w), - (v)-[:hasFriend]->(u), - (u)-[:hasFriend]->(w) + CREATE (v),(u),(w), + (v)-[:hasFriend]->(u), + (u)-[:hasFriend]->(w) $$) as (a agtype); SELECT * FROM cypher('graph',$$ - MATCH p=(v)-[*1..2]->(u) - WITH p,length(p) AS path_length - RETURN v,path_length + MATCH p=(v)-[*1..2]->(u) + WITH p,length(p) AS path_length + RETURN v,path_length $$) as (a agtype,b agtype); -- Clean up From 377e1d710f670870f215c4135438283652bb00bc Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Tue, 7 Mar 2023 03:26:44 +0500 Subject: [PATCH 125/191] Fix issue #733 - create_complete_graph() terminates the server (#734) - A vertex and an edge cannot have the same label within the same graph, so added a check for that. - insert_simple_vertex() and insert_simple_edge() functions were not checking for the kind of label. Since a vertex cannot be inserted into a label relation of edge and vice versa, this was causing the server termination. Added a check for that. - Added regression tests. --- regress/expected/graph_generation.out | 8 ++++++++ regress/sql/graph_generation.sql | 8 ++++++++ src/backend/catalog/ag_label.c | 15 +++++++++++++++ src/backend/utils/graph_generation.c | 14 ++++++++++++-- src/backend/utils/load/age_load.c | 13 +++++++++++++ src/include/catalog/ag_label.h | 1 + 6 files changed, 57 insertions(+), 2 deletions(-) diff --git a/regress/expected/graph_generation.out b/regress/expected/graph_generation.out index b9ed65b12..235052a08 100644 --- a/regress/expected/graph_generation.out +++ b/regress/expected/graph_generation.out @@ -80,12 +80,17 @@ NOTICE: ELabel "edges" has been created (1 row) +-- SHOULD FAIL SELECT * FROM create_complete_graph('gp3',5, NULL); ERROR: edge label can not be NULL SELECT * FROM create_complete_graph('gp4',NULL,NULL); ERROR: number of nodes can not be NULL SELECT * FROM create_complete_graph(NULL,NULL,NULL); ERROR: graph name can not be NULL +-- Should error out because same labels are used for both vertices and edges +SELECT * FROM create_complete_graph('gp5',5,'label','label'); +ERROR: vertex and edge label can not be same +-- DROPPING GRAPHS SELECT drop_graph('gp1', true); NOTICE: drop cascades to 4 other objects DETAIL: drop cascades to table gp1._ag_label_vertex @@ -195,6 +200,9 @@ SELECT * FROM age_create_barbell_graph('gp4',NULL,0,'vertices',NULL,'edges',NULL ERROR: Graph size cannot be NULL or lower than 3 SELECT * FROM age_create_barbell_graph('gp5',5,0,'vertices',NULL,NULL,NULL); ERROR: edge label can not be NULL +-- Should error out because same labels are used for both vertices and edges +SELECT * FROM age_create_barbell_graph('gp6',5,10,'label',NULL,'label',NULL); +ERROR: vertex and edge label can not be same -- DROPPING GRAPHS SELECT drop_graph('gp1', true); NOTICE: drop cascades to 4 other objects diff --git a/regress/sql/graph_generation.sql b/regress/sql/graph_generation.sql index 32fa56dd5..e9ee8ea81 100644 --- a/regress/sql/graph_generation.sql +++ b/regress/sql/graph_generation.sql @@ -36,12 +36,17 @@ SELECT COUNT(*) FROM gp1."vertices"; SELECT * FROM create_complete_graph('gp2',5,'edges'); +-- SHOULD FAIL SELECT * FROM create_complete_graph('gp3',5, NULL); SELECT * FROM create_complete_graph('gp4',NULL,NULL); SELECT * FROM create_complete_graph(NULL,NULL,NULL); +-- Should error out because same labels are used for both vertices and edges +SELECT * FROM create_complete_graph('gp5',5,'label','label'); + +-- DROPPING GRAPHS SELECT drop_graph('gp1', true); SELECT drop_graph('gp2', true); @@ -68,6 +73,9 @@ SELECT * FROM age_create_barbell_graph('gp3',5,NULL,'vertices',NULL,'edges',NULL SELECT * FROM age_create_barbell_graph('gp4',NULL,0,'vertices',NULL,'edges',NULL); SELECT * FROM age_create_barbell_graph('gp5',5,0,'vertices',NULL,NULL,NULL); +-- Should error out because same labels are used for both vertices and edges +SELECT * FROM age_create_barbell_graph('gp6',5,10,'label',NULL,'label',NULL); + -- DROPPING GRAPHS SELECT drop_graph('gp1', true); SELECT drop_graph('gp2', true); diff --git a/src/backend/catalog/ag_label.c b/src/backend/catalog/ag_label.c index cd8d0bab6..41a11abef 100644 --- a/src/backend/catalog/ag_label.c +++ b/src/backend/catalog/ag_label.c @@ -170,6 +170,21 @@ char *get_label_relation_name(const char *label_name, Oid label_graph) return get_rel_name(get_label_relation(label_name, label_graph)); } +char get_label_kind(const char *label_name, Oid label_graph) +{ + label_cache_data *cache_data; + + cache_data = search_label_name_graph_cache(label_name, label_graph); + if (cache_data) + { + return cache_data->kind; + } + else + { + return INVALID_LABEL_ID; + } +} + PG_FUNCTION_INFO_V1(_label_name); /* diff --git a/src/backend/utils/graph_generation.c b/src/backend/utils/graph_generation.c index b40ef07e2..e1a363440 100644 --- a/src/backend/utils/graph_generation.c +++ b/src/backend/utils/graph_generation.c @@ -142,6 +142,18 @@ Datum create_complete_graph(PG_FUNCTION_ARGS) vtx_name_str = AG_DEFAULT_LABEL_VERTEX; edge_name_str = NameStr(*edge_label_name); + if (!PG_ARGISNULL(3)) + { + vtx_label_name = PG_GETARG_NAME(3); + vtx_name_str = NameStr(*vtx_label_name); + + // Check if vertex and edge label are same + if (strcmp(vtx_name_str, edge_name_str) == 0) + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("vertex and edge label can not be same"))); + } + } if (!graph_exists(graph_name_str)) { @@ -154,8 +166,6 @@ Datum create_complete_graph(PG_FUNCTION_ARGS) if (!PG_ARGISNULL(3)) { - vtx_label_name = PG_GETARG_NAME(3); - vtx_name_str = NameStr(*vtx_label_name); // Check if label with the input name already exists if (!label_exists(vtx_name_str, graph_id)) { diff --git a/src/backend/utils/load/age_load.c b/src/backend/utils/load/age_load.c index cbdf1585d..d9819a301 100644 --- a/src/backend/utils/load/age_load.c +++ b/src/backend/utils/load/age_load.c @@ -148,6 +148,12 @@ void insert_edge_simple(Oid graph_id, char* label_name, graphid edge_id, Relation label_relation; HeapTuple tuple; + // Check if label provided exists as vertex label, then throw error + if (get_label_kind(label_name, graph_id) == LABEL_KIND_VERTEX) + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("label %s already exists as vertex label", label_name))); + } values[0] = GRAPHID_GET_DATUM(edge_id); values[1] = GRAPHID_GET_DATUM(start_id); @@ -176,6 +182,13 @@ void insert_vertex_simple(Oid graph_id, char* label_name, Relation label_relation; HeapTuple tuple; + // Check if label provided exists as edge label, then throw error + if (get_label_kind(label_name, graph_id) == LABEL_KIND_EDGE) + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("label %s already exists as edge label", label_name))); + } + values[0] = GRAPHID_GET_DATUM(vertex_id); values[1] = AGTYPE_P_GET_DATUM((vertex_properties)); diff --git a/src/include/catalog/ag_label.h b/src/include/catalog/ag_label.h index f60a038b7..39ab5c975 100644 --- a/src/include/catalog/ag_label.h +++ b/src/include/catalog/ag_label.h @@ -78,6 +78,7 @@ Oid get_label_oid(const char *label_name, Oid label_graph); int32 get_label_id(const char *label_name, Oid label_graph); Oid get_label_relation(const char *label_name, Oid label_graph); char *get_label_relation_name(const char *label_name, Oid label_graph); +char get_label_kind(const char *label_name, Oid label_graph); bool label_id_exists(Oid label_graph, int32 label_id); RangeVar *get_label_range_var(char *graph_name, Oid graph_oid, char *label_name); From 7a85e8327f91b00a15650c88e750a7623642e292 Mon Sep 17 00:00:00 2001 From: Dehowe Feng <8065116+dehowef@users.noreply.github.com> Date: Sat, 11 Mar 2023 09:50:57 +0900 Subject: [PATCH 126/191] Prevent MATCH from following OPTIONAL MATCH (#740) Added logic to prevent match from following optional match. This syntax is considered invalid, add logic to throw an error when this happens. Also added regression tests to test this logic. --- regress/expected/cypher_match.out | 19 +++++++++++++++++++ regress/sql/cypher_match.sql | 14 ++++++++++++++ src/backend/parser/cypher_clause.c | 17 +++++++++++++++++ 3 files changed, 50 insertions(+) diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index 8f325cbe6..4888556d9 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -1256,6 +1256,25 @@ SELECT * FROM cypher('cypher_match', $$ "nobody" | | | "anybody" | | (12 rows) +-- Tests to catch match following optional match logic +-- this syntax is invalid in cypher +SELECT * FROM cypher('cypher_match', $$ + OPTIONAL MATCH (n) + MATCH (m) + RETURN n,m + $$) AS (n agtype, m agtype); +ERROR: MATCH cannot follow OPTIONAL MATCH +LINE 1: SELECT * FROM cypher('cypher_match', $$ + ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH (n) + OPTIONAL MATCH (m) + MATCH (o) + RETURN n,m + $$) AS (n agtype, m agtype); +ERROR: MATCH cannot follow OPTIONAL MATCH +LINE 1: SELECT * FROM cypher('cypher_match', $$ + ^ -- -- Tests retrieving Var from some parent's cpstate during transformation -- diff --git a/regress/sql/cypher_match.sql b/regress/sql/cypher_match.sql index 70f638df2..344453e00 100644 --- a/regress/sql/cypher_match.sql +++ b/regress/sql/cypher_match.sql @@ -621,6 +621,20 @@ SELECT * FROM cypher('cypher_match', $$ ORDER BY n, p, m, q $$) AS (n agtype, r agtype, p agtype, m agtype, s agtype, q agtype); +-- Tests to catch match following optional match logic +-- this syntax is invalid in cypher +SELECT * FROM cypher('cypher_match', $$ + OPTIONAL MATCH (n) + MATCH (m) + RETURN n,m + $$) AS (n agtype, m agtype); + +SELECT * FROM cypher('cypher_match', $$ + MATCH (n) + OPTIONAL MATCH (m) + MATCH (o) + RETURN n,m + $$) AS (n agtype, m agtype); -- -- Tests retrieving Var from some parent's cpstate during transformation diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index e1e6c94be..294ebb064 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -2508,6 +2508,23 @@ static Query *transform_cypher_match_pattern(cypher_parsestate *cpstate, query = makeNode(Query); query->commandType = CMD_SELECT; + if(self->optional == true && clause->next) + { + cypher_clause *next = clause->next; + if (is_ag_node(next->self, cypher_match)) + { + cypher_match *next_self = (cypher_match *)next->self; + if (!next_self->optional) + { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("MATCH cannot follow OPTIONAL MATCH"), + parser_errposition(pstate, + exprLocation((Node *) next_self)))); + } + } + } + // If there is no previous clause, transform to a general MATCH clause. if (self->optional == true && clause->prev != NULL) { From 16d9c088471760fd9236333a202311f863e0de84 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Sat, 11 Mar 2023 05:51:42 +0500 Subject: [PATCH 127/191] Remove check for scalar agtypes in unwind (#736) - Added regression tests for unwind. --- age--1.2.0.sql | 8 +- regress/expected/cypher_unwind.out | 155 ++++++++++++++++++++++++++--- regress/sql/cypher_unwind.sql | 92 +++++++++++++++-- src/backend/parser/cypher_clause.c | 2 +- src/backend/utils/adt/agtype.c | 14 +-- 5 files changed, 232 insertions(+), 39 deletions(-) diff --git a/age--1.2.0.sql b/age--1.2.0.sql index e50f1a628..c8d7ecd0b 100644 --- a/age--1.2.0.sql +++ b/age--1.2.0.sql @@ -4162,10 +4162,10 @@ IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; -CREATE FUNCTION ag_catalog.age_unnest(agtype, block_types boolean = false) - RETURNS SETOF agtype - LANGUAGE c - IMMUTABLE +CREATE FUNCTION ag_catalog.age_unnest(agtype) +RETURNS SETOF agtype +LANGUAGE c +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; diff --git a/regress/expected/cypher_unwind.out b/regress/expected/cypher_unwind.out index d0a71717a..3c454f100 100644 --- a/regress/expected/cypher_unwind.out +++ b/regress/expected/cypher_unwind.out @@ -25,25 +25,48 @@ NOTICE: graph "cypher_unwind" has been created (1 row) +-- Create nodes and relations SELECT * FROM cypher('cypher_unwind', $$ - UNWIND [1, 2, 3] AS i RETURN i + CREATE (n {name: 'node1', a: [1, 2, 3]}), + (m {name: 'node2', a: [4, 5, 6]}), + (o {name: 'node3', a: [7, 8, 9]}), + (n)-[:KNOWS]->(m), + (m)-[:KNOWS]->(o) $$) as (i agtype); i --- - 1 - 2 - 3 +(0 rows) + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH (n) + RETURN n +$$) as (i agtype); + i +----------------------------------------------------------------------------------------------- + {"id": 281474976710657, "label": "", "properties": {"a": [1, 2, 3], "name": "node1"}}::vertex + {"id": 281474976710658, "label": "", "properties": {"a": [4, 5, 6], "name": "node2"}}::vertex + {"id": 281474976710659, "label": "", "properties": {"a": [7, 8, 9], "name": "node3"}}::vertex (3 rows) +-- +-- Test UNWIND clause +-- SELECT * FROM cypher('cypher_unwind', $$ - CREATE ({a: [1, 2, 3]}), ({a: [4, 5, 6]}) + UNWIND [1, 2, 3] AS i + RETURN i $$) as (i agtype); i --- -(0 rows) + 1 + 2 + 3 +(3 rows) SELECT * FROM cypher('cypher_unwind', $$ - MATCH (n) WITH n.a AS a UNWIND a AS i RETURN * + MATCH (n) + WITH n.a AS a + UNWIND a AS i + RETURN * $$) as (i agtype, j agtype); i | j -----------+--- @@ -53,7 +76,10 @@ $$) as (i agtype, j agtype); [4, 5, 6] | 4 [4, 5, 6] | 5 [4, 5, 6] | 6 -(6 rows) + [7, 8, 9] | 7 + [7, 8, 9] | 8 + [7, 8, 9] | 9 +(9 rows) SELECT * FROM cypher('cypher_unwind', $$ WITH [[1, 2], [3, 4], 5] AS nested @@ -70,17 +96,118 @@ $$) as (i agtype); 5 (5 rows) +-- UNWIND vertices +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=(n)-[:KNOWS]->(m) + UNWIND nodes(p) as node + RETURN node +$$) as (i agtype); + i +----------------------------------------------------------------------------------------------- + {"id": 281474976710657, "label": "", "properties": {"a": [1, 2, 3], "name": "node1"}}::vertex + {"id": 281474976710658, "label": "", "properties": {"a": [4, 5, 6], "name": "node2"}}::vertex + {"id": 281474976710658, "label": "", "properties": {"a": [4, 5, 6], "name": "node2"}}::vertex + {"id": 281474976710659, "label": "", "properties": {"a": [7, 8, 9], "name": "node3"}}::vertex +(4 rows) + SELECT * FROM cypher('cypher_unwind', $$ - WITH [{id: 0, label:'', properties:{}}::vertex, {id: 1, label:'', properties:{}}::vertex] as n - UNWIND n as a - SET a.i = 1 - RETURN a + MATCH p=(n)-[:KNOWS]->(m) + UNWIND nodes(p) as node + RETURN node.name $$) as (i agtype); -ERROR: UNWIND clause does not support agtype vertex + i +--------- + "node1" + "node2" + "node2" + "node3" +(4 rows) + +-- UNWIND edges +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=(n)-[:KNOWS]->(m) + UNWIND relationships(p) as relation + RETURN relation +$$) as (i agtype); + i +--------------------------------------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "KNOWS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge + {"id": 844424930131970, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710658, "properties": {}}::edge +(2 rows) + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=(n)-[:KNOWS]->(m) + UNWIND relationships(p) as relation + RETURN type(relation) +$$) as (i agtype); + i +--------- + "KNOWS" + "KNOWS" +(2 rows) + +-- UNWIND paths (vle) +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=({name:'node1'})-[e:KNOWS*]->({name:'node3'}) + UNWIND [p] as path + RETURN path +$$) as (i agtype); + i +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"a": [1, 2, 3], "name": "node1"}}::vertex, {"id": 844424930131969, "label": "KNOWS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge, {"id": 281474976710658, "label": "_ag_label_vertex", "properties": {"a": [4, 5, 6], "name": "node2"}}::vertex, {"id": 844424930131970, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710658, "properties": {}}::edge, {"id": 281474976710659, "label": "_ag_label_vertex", "properties": {"a": [7, 8, 9], "name": "node3"}}::vertex]::path +(1 row) + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=({name:'node1'})-[e:KNOWS*]->({name:'node3'}) + UNWIND [p] as path + RETURN relationships(path) +$$) as (i agtype); + i +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 844424930131969, "label": "KNOWS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge, {"id": 844424930131970, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710658, "properties": {}}::edge] +(1 row) + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=({name:'node1'})-[e:KNOWS*]->({name:'node3'}) + UNWIND [p] as path + UNWIND relationships(path) as edge + RETURN edge +$$) as (i agtype); + i +--------------------------------------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "KNOWS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge + {"id": 844424930131970, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710658, "properties": {}}::edge +(2 rows) + +-- Unwind with SET clause +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=(n)-[:KNOWS]->(m) + UNWIND nodes(p) as node + SET node.type = 'vertex' +$$) as (i agtype); + i +--- +(0 rows) + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH (n) + RETURN n +$$) as (i agtype); + i +----------------------------------------------------------------------------------------------------------------- + {"id": 281474976710657, "label": "", "properties": {"a": [1, 2, 3], "name": "node1", "type": "vertex"}}::vertex + {"id": 281474976710658, "label": "", "properties": {"a": [4, 5, 6], "name": "node2", "type": "vertex"}}::vertex + {"id": 281474976710659, "label": "", "properties": {"a": [7, 8, 9], "name": "node3", "type": "vertex"}}::vertex +(3 rows) + +-- +-- Clean up +-- SELECT drop_graph('cypher_unwind', true); -NOTICE: drop cascades to 2 other objects +NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to table cypher_unwind._ag_label_vertex drop cascades to table cypher_unwind._ag_label_edge +drop cascades to table cypher_unwind."KNOWS" NOTICE: graph "cypher_unwind" has been dropped drop_graph ------------ diff --git a/regress/sql/cypher_unwind.sql b/regress/sql/cypher_unwind.sql index d1f2d81fb..8e8c74bc9 100644 --- a/regress/sql/cypher_unwind.sql +++ b/regress/sql/cypher_unwind.sql @@ -22,16 +22,35 @@ SET search_path TO ag_catalog; SELECT create_graph('cypher_unwind'); +-- Create nodes and relations + SELECT * FROM cypher('cypher_unwind', $$ - UNWIND [1, 2, 3] AS i RETURN i + CREATE (n {name: 'node1', a: [1, 2, 3]}), + (m {name: 'node2', a: [4, 5, 6]}), + (o {name: 'node3', a: [7, 8, 9]}), + (n)-[:KNOWS]->(m), + (m)-[:KNOWS]->(o) $$) as (i agtype); SELECT * FROM cypher('cypher_unwind', $$ - CREATE ({a: [1, 2, 3]}), ({a: [4, 5, 6]}) + MATCH (n) + RETURN n +$$) as (i agtype); + +-- +-- Test UNWIND clause +-- + +SELECT * FROM cypher('cypher_unwind', $$ + UNWIND [1, 2, 3] AS i + RETURN i $$) as (i agtype); SELECT * FROM cypher('cypher_unwind', $$ - MATCH (n) WITH n.a AS a UNWIND a AS i RETURN * + MATCH (n) + WITH n.a AS a + UNWIND a AS i + RETURN * $$) as (i agtype, j agtype); SELECT * FROM cypher('cypher_unwind', $$ @@ -41,11 +60,70 @@ SELECT * FROM cypher('cypher_unwind', $$ RETURN y $$) as (i agtype); +-- UNWIND vertices + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=(n)-[:KNOWS]->(m) + UNWIND nodes(p) as node + RETURN node +$$) as (i agtype); + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=(n)-[:KNOWS]->(m) + UNWIND nodes(p) as node + RETURN node.name +$$) as (i agtype); + +-- UNWIND edges + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=(n)-[:KNOWS]->(m) + UNWIND relationships(p) as relation + RETURN relation +$$) as (i agtype); + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=(n)-[:KNOWS]->(m) + UNWIND relationships(p) as relation + RETURN type(relation) +$$) as (i agtype); + +-- UNWIND paths (vle) + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=({name:'node1'})-[e:KNOWS*]->({name:'node3'}) + UNWIND [p] as path + RETURN path +$$) as (i agtype); + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=({name:'node1'})-[e:KNOWS*]->({name:'node3'}) + UNWIND [p] as path + RETURN relationships(path) +$$) as (i agtype); + SELECT * FROM cypher('cypher_unwind', $$ - WITH [{id: 0, label:'', properties:{}}::vertex, {id: 1, label:'', properties:{}}::vertex] as n - UNWIND n as a - SET a.i = 1 - RETURN a + MATCH p=({name:'node1'})-[e:KNOWS*]->({name:'node3'}) + UNWIND [p] as path + UNWIND relationships(path) as edge + RETURN edge $$) as (i agtype); +-- Unwind with SET clause + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=(n)-[:KNOWS]->(m) + UNWIND nodes(p) as node + SET node.type = 'vertex' +$$) as (i agtype); + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH (n) + RETURN n +$$) as (i agtype); + +-- +-- Clean up +-- + SELECT drop_graph('cypher_unwind', true); \ No newline at end of file diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 294ebb064..526a23fbf 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -1331,7 +1331,7 @@ static Query *transform_cypher_unwind(cypher_parsestate *cpstate, old_expr_kind = pstate->p_expr_kind; pstate->p_expr_kind = EXPR_KIND_SELECT_TARGET; funcexpr = ParseFuncOrColumn(pstate, unwind->funcname, - list_make2(expr, makeBoolConst(true, false)), + list_make1(expr), pstate->p_last_srf, unwind, false, target_syntax_loc); diff --git a/src/backend/utils/adt/agtype.c b/src/backend/utils/adt/agtype.c index ed4bf4d47..cba3316b2 100644 --- a/src/backend/utils/adt/agtype.c +++ b/src/backend/utils/adt/agtype.c @@ -10031,14 +10031,11 @@ Datum age_range(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(age_unnest); /* * Function to convert the Array type of Agtype into each row. It is used for - * Cypher `UNWIND` clause, but considering the situation in which the user can - * directly use this function in vanilla PGSQL, put a second parameter related - * to this. + * Cypher `UNWIND` clause. */ Datum age_unnest(PG_FUNCTION_ARGS) { agtype *agtype_arg = AG_GET_ARG_AGTYPE_P(0); - bool block_types = PG_GETARG_BOOL(1); ReturnSetInfo *rsi; Tuplestorestate *tuple_store; TupleDesc tupdesc; @@ -10090,15 +10087,6 @@ Datum age_unnest(PG_FUNCTION_ARGS) bool nulls[1] = {false}; agtype *val = agtype_value_to_agtype(&v); - if (block_types && ( - v.type == AGTV_VERTEX || v.type == AGTV_EDGE || v.type == AGTV_PATH)) - { - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("UNWIND clause does not support agtype %s", - agtype_value_type_to_string(v.type)))); - } - /* use the tmp context so we can clean up after each tuple is done */ old_cxt = MemoryContextSwitchTo(tmp_cxt); From c596757412daef8b2e786e56d51fd5de0bfbe4fd Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Thu, 16 Mar 2023 19:42:17 -0700 Subject: [PATCH 128/191] Fix property constraints against resolved variables in concurrent MATCH clauses(#701) (#747) Fixed an issue where an already resolved variable, when used for a property constraint in a second MATCH clause, errored out. See #701 and #724 for more details. This is part of a series of PRs done to refactor MATCH clause behavior. This also fixed a regression test that was erroring out, but was overlooked. Adjusted and added additional regression tests. Co-authored-by: Dehowe Feng --- regress/expected/cypher_match.out | 225 ++++++++++++++++++++++++++++- regress/expected/cypher_merge.out | 40 ++--- regress/sql/cypher_match.sql | 73 ++++++++++ src/backend/parser/cypher_clause.c | 167 ++++++++++++++++++--- 4 files changed, 461 insertions(+), 44 deletions(-) diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index 4888556d9..f3817a50d 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -1450,11 +1450,233 @@ $$) as (n agtype); {"id": 281474976710662, "label": "", "properties": {"i": 1, "j": 2, "k": 3}}::vertex (1 row) +-- +-- Regression tests to check previous clause variable refs +-- +-- set up initial state and show what we're working with +SELECT * FROM cypher('cypher_match', $$ + CREATE (a {age: 4}) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------ + {"id": 281474976710665, "label": "", "properties": {"age": 4}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ + CREATE (b {age: 6}) RETURN b $$) as (b agtype); + b +------------------------------------------------------------------------ + {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) RETURN a $$) as (a agtype); + a +-------------------------------------------------------------------------------------- + {"id": 281474976710659, "label": "", "properties": {"name": "orphan"}}::vertex + {"id": 281474976710660, "label": "", "properties": {"name": "F"}}::vertex + {"id": 281474976710661, "label": "", "properties": {"name": "T"}}::vertex + {"id": 281474976710662, "label": "", "properties": {"i": 1, "j": 2, "k": 3}}::vertex + {"id": 281474976710663, "label": "", "properties": {"i": 1, "j": 3}}::vertex + {"id": 281474976710664, "label": "", "properties": {"i": 2, "k": 3}}::vertex + {"id": 281474976710665, "label": "", "properties": {"age": 4}}::vertex + {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex +(8 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) WHERE exists(a.name) RETURN a $$) as (a agtype); + a +-------------------------------------------------------------------------------- + {"id": 281474976710659, "label": "", "properties": {"name": "orphan"}}::vertex + {"id": 281474976710660, "label": "", "properties": {"name": "F"}}::vertex + {"id": 281474976710661, "label": "", "properties": {"name": "T"}}::vertex +(3 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) WHERE exists(a.name) SET a.age = 4 RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710659, "label": "", "properties": {"age": 4, "name": "orphan"}}::vertex + {"id": 281474976710660, "label": "", "properties": {"age": 4, "name": "F"}}::vertex + {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex +(3 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a),(b) WHERE a.age = 4 AND a.name = "T" AND b.age = 6 + RETURN a,b $$) as (a agtype, b agtype); + a | b +-------------------------------------------------------------------------------------+------------------------------------------------------------------------ + {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex | {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a),(b) WHERE a.age = 4 AND a.name = "T" AND b.age = 6 CREATE + (a)-[:knows {relationship: "friends", years: 3}]->(b) $$) as (r agtype); + r +--- +(0 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a),(b) WHERE a.age = 4 AND a.name = "orphan" AND b.age = 6 CREATE + (a)-[:knows {relationship: "enemies", years: 4}]->(b) $$) as (r agtype); + r +--- +(0 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a)-[r]-(b) RETURN r $$) as (r agtype); + r +----------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge + {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge + {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge + {"id": 1407374883553283, "label": "e1", "end_id": 281474976710661, "start_id": 281474976710660, "properties": {}}::edge + {"id": 1407374883553283, "label": "e1", "end_id": 281474976710661, "start_id": 281474976710660, "properties": {}}::edge +(6 rows) + +-- check reuse of 'a' +SELECT * FROM cypher('cypher_match', $$ + MATCH (a {age:4}) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710665, "label": "", "properties": {"age": 4}}::vertex + {"id": 281474976710659, "label": "", "properties": {"age": 4, "name": "orphan"}}::vertex + {"id": 281474976710660, "label": "", "properties": {"age": 4, "name": "F"}}::vertex + {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex +(4 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) MATCH (a {age:4}) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710665, "label": "", "properties": {"age": 4}}::vertex + {"id": 281474976710659, "label": "", "properties": {"age": 4, "name": "orphan"}}::vertex + {"id": 281474976710660, "label": "", "properties": {"age": 4, "name": "F"}}::vertex + {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex +(4 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a {age:4, name: "orphan"}) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710659, "label": "", "properties": {"age": 4, "name": "orphan"}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) MATCH (a {age:4}) MATCH (a {name: "orphan"}) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710659, "label": "", "properties": {"age": 4, "name": "orphan"}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a {age:4}) MATCH (a {name: "orphan"}) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710659, "label": "", "properties": {"age": 4, "name": "orphan"}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) MATCH (a {age:4}) MATCH (a {name: "orphan"}) SET a.age = 3 RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) MATCH (a {age:3}) MATCH (a {name: "orphan"}) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a {name: "orphan"}) MATCH (a {age:3}) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) WHERE exists(a.age) AND exists(a.name) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710660, "label": "", "properties": {"age": 4, "name": "F"}}::vertex + {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex + {"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex +(3 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) WHERE exists(a.age) AND NOT exists(a.name) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------ + {"id": 281474976710665, "label": "", "properties": {"age": 4}}::vertex + {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex +(2 rows) + +-- check reuse of 'r' +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r]-() RETURN r $$) as (r agtype); + r +----------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge + {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge + {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge + {"id": 1407374883553283, "label": "e1", "end_id": 281474976710661, "start_id": 281474976710660, "properties": {}}::edge + {"id": 1407374883553283, "label": "e1", "end_id": 281474976710661, "start_id": 281474976710660, "properties": {}}::edge +(6 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r]-() MATCH ()-[r {relationship: "friends"}]-() RETURN r $$) as (r agtype); + r +----------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge +(2 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r {years:3, relationship: "friends"}]-() RETURN r $$) as (r agtype); + r +----------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge +(2 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r {years:3}]-() MATCH ()-[r {relationship: "friends"}]-() RETURN r $$) as (r agtype); + r +----------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge +(2 rows) + +--mismatch year #, should return nothing +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r {years:2}]-() MATCH ()-[r {relationship: "friends"}]-() RETURN r $$) as (r agtype); + r +--- +(0 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r {relationship:"enemies"}]-() MATCH ()-[r {years:4}]-() RETURN r $$) as (r agtype); + r +----------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge + {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge +(2 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r {relationship:"enemies"}]-() MATCH ()-[r {relationship:"friends"}]-() RETURN r $$) as (r agtype); + r +--- +(0 rows) + -- -- Clean up -- SELECT drop_graph('cypher_match', true); -NOTICE: drop cascades to 16 other objects +NOTICE: drop cascades to 17 other objects DETAIL: drop cascades to table cypher_match._ag_label_vertex drop cascades to table cypher_match._ag_label_edge drop cascades to table cypher_match.v @@ -1471,6 +1693,7 @@ drop cascades to table cypher_match.dup_edge drop cascades to table cypher_match.other_v drop cascades to table cypher_match.opt_match_v drop cascades to table cypher_match.opt_match_e +drop cascades to table cypher_match.knows NOTICE: graph "cypher_match" has been dropped drop_graph ------------ diff --git a/regress/expected/cypher_merge.out b/regress/expected/cypher_merge.out index 389c34d10..988dff3c2 100644 --- a/regress/expected/cypher_merge.out +++ b/regress/expected/cypher_merge.out @@ -513,15 +513,17 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtyp */ --test query SELECT * FROM cypher('cypher_merge', $$CREATE (n {i : 1}) SET n.i = 2 MERGE ({i: 2}) $$) AS (a agtype); -ERROR: missing FROM-clause entry for table "_age_default_alias_0" -LINE 5: SELECT * FROM cypher('cypher_merge', $$CREATE (n {i : 1}) SE... - ^ ---validate created correctly -SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a --- (0 rows) +--validate created correctly +SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); + a +---------------------------------------------------------------------- + {"id": 281474976710690, "label": "", "properties": {"i": 2}}::vertex +(1 row) + --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a @@ -541,7 +543,7 @@ SELECT * FROM cypher('cypher_merge', $$CREATE (n {i : 1}) SET n.i = 2 WITH n as SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------------- - {"id": 281474976710690, "label": "", "properties": {"i": 2}}::vertex + {"id": 281474976710691, "label": "", "properties": {"i": 2}}::vertex (1 row) --clean up @@ -569,7 +571,7 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n {i : 1}) SET n.i = 2 WITH n as a SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------------- - {"id": 281474976710691, "label": "", "properties": {"i": 2}}::vertex + {"id": 281474976710692, "label": "", "properties": {"i": 2}}::vertex (1 row) --clean up @@ -594,7 +596,7 @@ ERROR: vertex assigned to variable n was deleted SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------------- - {"id": 281474976710692, "label": "", "properties": {"i": 1}}::vertex + {"id": 281474976710693, "label": "", "properties": {"i": 1}}::vertex (1 row) --clean up @@ -672,7 +674,7 @@ SELECT * FROM cypher('cypher_merge', $$MERGE ()-[:e]-()$$) AS (a agtype); SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710693, "label": "", "properties": {}}::vertex, {"id": 844424930131982, "label": "e", "end_id": 281474976710694, "start_id": 281474976710693, "properties": {}}::edge, {"id": 281474976710694, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710694, "label": "", "properties": {}}::vertex, {"id": 844424930131982, "label": "e", "end_id": 281474976710695, "start_id": 281474976710694, "properties": {}}::edge, {"id": 281474976710695, "label": "", "properties": {}}::vertex]::path (1 row) --clean up @@ -687,14 +689,14 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtyp SELECT * FROM cypher('cypher_merge', $$MERGE (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------- - {"id": 281474976710695, "label": "", "properties": {}}::vertex + {"id": 281474976710696, "label": "", "properties": {}}::vertex (1 row) --validate SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------- - {"id": 281474976710695, "label": "", "properties": {}}::vertex + {"id": 281474976710696, "label": "", "properties": {}}::vertex (1 row) --clean up @@ -709,14 +711,14 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtyp SELECT * FROM cypher('cypher_merge', $$MERGE p=()-[:e]-() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710696, "label": "", "properties": {}}::vertex, {"id": 844424930131983, "label": "e", "end_id": 281474976710697, "start_id": 281474976710696, "properties": {}}::edge, {"id": 281474976710697, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710697, "label": "", "properties": {}}::vertex, {"id": 844424930131983, "label": "e", "end_id": 281474976710698, "start_id": 281474976710697, "properties": {}}::edge, {"id": 281474976710698, "label": "", "properties": {}}::vertex]::path (1 row) --validate SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710696, "label": "", "properties": {}}::vertex, {"id": 844424930131983, "label": "e", "end_id": 281474976710697, "start_id": 281474976710696, "properties": {}}::edge, {"id": 281474976710697, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710697, "label": "", "properties": {}}::vertex, {"id": 844424930131983, "label": "e", "end_id": 281474976710698, "start_id": 281474976710697, "properties": {}}::edge, {"id": 281474976710698, "label": "", "properties": {}}::vertex]::path (1 row) --clean up @@ -731,14 +733,14 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtyp SELECT * FROM cypher('cypher_merge', $$MERGE (a)-[:e]-(b) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------- - {"id": 281474976710698, "label": "", "properties": {}}::vertex + {"id": 281474976710699, "label": "", "properties": {}}::vertex (1 row) --validate SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710698, "label": "", "properties": {}}::vertex, {"id": 844424930131984, "label": "e", "end_id": 281474976710699, "start_id": 281474976710698, "properties": {}}::edge, {"id": 281474976710699, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710699, "label": "", "properties": {}}::vertex, {"id": 844424930131984, "label": "e", "end_id": 281474976710700, "start_id": 281474976710699, "properties": {}}::edge, {"id": 281474976710700, "label": "", "properties": {}}::vertex]::path (1 row) --clean up @@ -753,14 +755,14 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtyp SELECT * FROM cypher('cypher_merge', $$CREATE p=()-[:e]->() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710700, "label": "", "properties": {}}::vertex, {"id": 844424930131985, "label": "e", "end_id": 281474976710701, "start_id": 281474976710700, "properties": {}}::edge, {"id": 281474976710701, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710701, "label": "", "properties": {}}::vertex, {"id": 844424930131985, "label": "e", "end_id": 281474976710702, "start_id": 281474976710701, "properties": {}}::edge, {"id": 281474976710702, "label": "", "properties": {}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_merge', $$MERGE p=()-[:e]-() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710700, "label": "", "properties": {}}::vertex, {"id": 844424930131985, "label": "e", "end_id": 281474976710701, "start_id": 281474976710700, "properties": {}}::edge, {"id": 281474976710701, "label": "", "properties": {}}::vertex]::path - [{"id": 281474976710701, "label": "", "properties": {}}::vertex, {"id": 844424930131985, "label": "e", "end_id": 281474976710701, "start_id": 281474976710700, "properties": {}}::edge, {"id": 281474976710700, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710701, "label": "", "properties": {}}::vertex, {"id": 844424930131985, "label": "e", "end_id": 281474976710702, "start_id": 281474976710701, "properties": {}}::edge, {"id": 281474976710702, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710702, "label": "", "properties": {}}::vertex, {"id": 844424930131985, "label": "e", "end_id": 281474976710702, "start_id": 281474976710701, "properties": {}}::edge, {"id": 281474976710701, "label": "", "properties": {}}::vertex]::path (2 rows) --clean up @@ -805,7 +807,7 @@ ERROR: Existing variable m cannot be NULL in MERGE clause SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (a agtype); a ---------------------------------------------------------------- - {"id": 281474976710702, "label": "", "properties": {}}::vertex + {"id": 281474976710703, "label": "", "properties": {}}::vertex (1 row) -- diff --git a/regress/sql/cypher_match.sql b/regress/sql/cypher_match.sql index 344453e00..f08f8dfb0 100644 --- a/regress/sql/cypher_match.sql +++ b/regress/sql/cypher_match.sql @@ -734,6 +734,79 @@ SELECT * FROM cypher('cypher_match', $$ RETURN n $$) as (n agtype); +-- +-- Regression tests to check previous clause variable refs +-- +-- set up initial state and show what we're working with +SELECT * FROM cypher('cypher_match', $$ + CREATE (a {age: 4}) RETURN a $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ + CREATE (b {age: 6}) RETURN b $$) as (b agtype); + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) RETURN a $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) WHERE exists(a.name) RETURN a $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) WHERE exists(a.name) SET a.age = 4 RETURN a $$) as (a agtype); + + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a),(b) WHERE a.age = 4 AND a.name = "T" AND b.age = 6 + RETURN a,b $$) as (a agtype, b agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a),(b) WHERE a.age = 4 AND a.name = "T" AND b.age = 6 CREATE + (a)-[:knows {relationship: "friends", years: 3}]->(b) $$) as (r agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a),(b) WHERE a.age = 4 AND a.name = "orphan" AND b.age = 6 CREATE + (a)-[:knows {relationship: "enemies", years: 4}]->(b) $$) as (r agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a)-[r]-(b) RETURN r $$) as (r agtype); + +-- check reuse of 'a' +SELECT * FROM cypher('cypher_match', $$ + MATCH (a {age:4}) RETURN a $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) MATCH (a {age:4}) RETURN a $$) as (a agtype); + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a {age:4, name: "orphan"}) RETURN a $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) MATCH (a {age:4}) MATCH (a {name: "orphan"}) RETURN a $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a {age:4}) MATCH (a {name: "orphan"}) RETURN a $$) as (a agtype); + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) MATCH (a {age:4}) MATCH (a {name: "orphan"}) SET a.age = 3 RETURN a $$) as (a agtype); + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) MATCH (a {age:3}) MATCH (a {name: "orphan"}) RETURN a $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a {name: "orphan"}) MATCH (a {age:3}) RETURN a $$) as (a agtype); + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) WHERE exists(a.age) AND exists(a.name) RETURN a $$) as (a agtype); + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) WHERE exists(a.age) AND NOT exists(a.name) RETURN a $$) as (a agtype); + +-- check reuse of 'r' +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r]-() RETURN r $$) as (r agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r]-() MATCH ()-[r {relationship: "friends"}]-() RETURN r $$) as (r agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r {years:3, relationship: "friends"}]-() RETURN r $$) as (r agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r {years:3}]-() MATCH ()-[r {relationship: "friends"}]-() RETURN r $$) as (r agtype); +--mismatch year #, should return nothing +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r {years:2}]-() MATCH ()-[r {relationship: "friends"}]-() RETURN r $$) as (r agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r {relationship:"enemies"}]-() MATCH ()-[r {years:4}]-() RETURN r $$) as (r agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r {relationship:"enemies"}]-() MATCH ()-[r {relationship:"friends"}]-() RETURN r $$) as (r agtype); + -- -- Clean up -- diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 526a23fbf..01b336057 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -163,7 +163,8 @@ static A_Expr *filter_vertices_on_label_id(cypher_parsestate *cpstate, Node *id_field, char *label); static Node *create_property_constraints(cypher_parsestate *cpstate, transform_entity *entity, - Node *property_constraints); + Node *property_constraints, + Node *prop_expr); static TargetEntry *findTarget(List *targetList, char *resname); static transform_entity *transform_VLE_edge_entity(cypher_parsestate *cpstate, cypher_relationship *rel, @@ -3497,33 +3498,43 @@ static A_Expr *filter_vertices_on_label_id(cypher_parsestate *cpstate, */ static Node *create_property_constraints(cypher_parsestate *cpstate, transform_entity *entity, - Node *property_constraints) + Node *property_constraints, + Node *prop_expr) { ParseState *pstate = (ParseState *)cpstate; char *entity_name; - ColumnRef *cr; - Node *prop_expr, *const_expr; + Node *const_expr; RangeTblEntry *rte; Node *last_srf = pstate->p_last_srf; - cr = makeNode(ColumnRef); - - entity_name = get_entity_name(entity); + /* + * If the prop_expr node wasn't passed in, create it. Otherwise, skip + * the creation step. + */ + if (prop_expr == NULL) + { + ColumnRef *cr = NULL; - cr->fields = list_make2(makeString(entity_name), makeString("properties")); + cr = makeNode(ColumnRef); + entity_name = get_entity_name(entity); + cr->fields = list_make2(makeString(entity_name), + makeString("properties")); - // use Postgres to get the properties' transform node - if ((rte = find_rte(cpstate, entity_name))) - { - prop_expr = scanRTEForColumn(pstate, rte, AG_VERTEX_COLNAME_PROPERTIES, - -1, 0, NULL); - } - else - { - prop_expr = transformExpr(pstate, (Node *)cr, EXPR_KIND_WHERE); + /* use Postgres to get the properties' transform node */ + rte = find_rte(cpstate, entity_name); + if (rte != NULL) + { + prop_expr = scanRTEForColumn(pstate, rte, + AG_VERTEX_COLNAME_PROPERTIES, -1, 0, + NULL); + } + else + { + prop_expr = transformExpr(pstate, (Node *)cr, EXPR_KIND_WHERE); + } } - // use cypher to get the constraints' transform node + /* use cypher to get the constraints' transform node */ const_expr = transform_cypher_expr(cpstate, property_constraints, EXPR_KIND_WHERE); @@ -3808,13 +3819,68 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, entity = make_transform_entity(cpstate, ENT_VERTEX, (Node *)node, expr); - /* transform properties if they exist */ + /* transform the properties if they exist */ if (node->props) { Node *n = NULL; + Node *prop_var = NULL; + Node *prop_expr = NULL; + + /* + * We need to build a transformed properties(prop_var) + * expression IF the properties variable already exists from a + * previous clause. Please note that the "found" prop_var was + * previously transformed. + */ + + /* get the prop_var if it was previously resolved */ + if (node->name != NULL) + { + prop_var = colNameToVar(pstate, node->name, false, + node->location); + } + + /* + * If prop_var exists and is an alias, just pass it through by + * assigning the prop_expr the prop_var. + */ + if (prop_var != NULL && + pg_strncasecmp(node->name, AGE_DEFAULT_ALIAS_PREFIX, + strlen(AGE_DEFAULT_ALIAS_PREFIX)) == 0) + { + prop_expr = prop_var; + } + /* + * Else, if it exists and is not an alias, create the prop_expr + * as a transformed properties(prop_var) function node. + */ + else if (prop_var != NULL) + { + /* + * Remember that prop_var is already transformed. We need + * to built the transform manually. + */ + FuncCall *fc = NULL; + List *targs = NIL; + List *fname = NIL; + + targs = lappend(targs, prop_var); + fname = list_make2(makeString("ag_catalog"), + makeString("age_properties")); + fc = makeFuncCall(fname, targs, -1); + + /* + * Hand off to ParseFuncOrColumn to create the function + * expression for properties(prop_var) + */ + prop_expr = ParseFuncOrColumn(pstate, fname, targs, + pstate->p_last_srf, fc, false, + -1); + } ((cypher_map*)node->props)->keep_null = true; - n = create_property_constraints(cpstate, entity, node->props); + n = create_property_constraints(cpstate, entity, node->props, + prop_expr); cpstate->property_constraint_quals = lappend(cpstate->property_constraint_quals, n); @@ -3873,13 +3939,66 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, if (rel->props) { - Node *n; + Node *r = NULL; + Node *prop_var = NULL; + Node *prop_expr = NULL; + + /* + * We need to build a transformed properties(prop_var) + * expression IF the properties variable already exists from + * a previous clause. Please note that the "found" prop_var + * was previously transformed. + */ + + /* get the prop_var if it was previously resolved */ + if (rel->name != NULL) + { + prop_var = colNameToVar(pstate, rel->name, false, + rel->location); + } + + /* + * If prop_var exists and is an alias, just pass it through by + * assigning the prop_expr the prop_var. + */ + if (prop_var != NULL && + pg_strncasecmp(rel->name, AGE_DEFAULT_ALIAS_PREFIX, + strlen(AGE_DEFAULT_ALIAS_PREFIX)) == 0) + { + prop_expr = prop_var; + } + /* + * Else, if it exists and is not an alias, create the prop_expr + * as a transformed properties(prop_var) function node. + */ + else if (prop_var != NULL) + { + /* + * Remember that prop_var is already transformed. We need + * to built the transform manually. + */ + FuncCall *fc = NULL; + List *targs = NIL; + List *fname = NIL; + + targs = lappend(targs, prop_var); + fname = list_make2(makeString("ag_catalog"), + makeString("age_properties")); + fc = makeFuncCall(fname, targs, -1); + + /* + * Hand off to ParseFuncOrColumn to create the function + * expression for properties(prop_var) + */ + prop_expr = ParseFuncOrColumn(pstate, fname, targs, + pstate->p_last_srf, fc, + false, -1); + } ((cypher_map*)rel->props)->keep_null = true; - n = create_property_constraints(cpstate, entity, - rel->props); + r = create_property_constraints(cpstate, entity, rel->props, prop_expr); cpstate->property_constraint_quals = - lappend(cpstate->property_constraint_quals, n); + lappend(cpstate->property_constraint_quals, r); } entities = lappend(entities, entity); From 58a46ed853173531deee08839c1e84424bcbea79 Mon Sep 17 00:00:00 2001 From: fatima <63642648+fatimafatimaprogrammer@users.noreply.github.com> Date: Thu, 16 Feb 2023 00:16:22 +0000 Subject: [PATCH 129/191] Updated Readme for drivers folder (#642) * Updated Readme for drivers folder and added important links related to Apache-AGE project which were included in other readme files. * Updated NodeJS driver readme and added important links of Apache-AGE project as included in other readme files. --- drivers/README | 5 +++++ drivers/nodejs/README.md | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/drivers/README b/drivers/README index 2026129fa..19f34d8b5 100644 --- a/drivers/README +++ b/drivers/README @@ -16,3 +16,8 @@ # under the License. This folder contains drivers for specific languages + +### For more information about [Apache AGE](https://age.apache.org/) +* Apache Age : https://age.apache.org/ +* Github : https://github.com/apache/age +* Document : https://age.apache.org/age-manual/master/index.html diff --git a/drivers/nodejs/README.md b/drivers/nodejs/README.md index f2d4228c4..c15632200 100644 --- a/drivers/nodejs/README.md +++ b/drivers/nodejs/README.md @@ -46,3 +46,7 @@ const results: QueryResultRow = await client?.query(` $$) as (a agtype); `)! ``` +### For more information about [Apache AGE](https://age.apache.org/) +* Apache Age : https://age.apache.org/ +* Github : https://github.com/apache/age +* Document : https://age.apache.org/age-manual/master/index.html From 50264274343466c64db02ba07fef956368047ff9 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed <85064039+MuhammadTahaNaveed@users.noreply.github.com> Date: Thu, 16 Feb 2023 22:13:15 +0500 Subject: [PATCH 130/191] Implement CI test for jdbc driver (#665) - This CI will only run whenever a PR or commit touches files drivers/jdbc. - Added logger to display the result of tests i.e. passing, failing etc. --- .github/workflows/jdbc-driver.yaml | 32 ++++++++++++++++++++++++++++++ drivers/jdbc/lib/build.gradle.kts | 19 +++++++++++++++++- 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/jdbc-driver.yaml diff --git a/.github/workflows/jdbc-driver.yaml b/.github/workflows/jdbc-driver.yaml new file mode 100644 index 000000000..0946bdc3b --- /dev/null +++ b/.github/workflows/jdbc-driver.yaml @@ -0,0 +1,32 @@ +name: JDBC Driver Tests + +on: + push: + branches: [ "master", "PG11" ] + + pull_request: + branches: [ "master", "PG11" ] + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + distributions: ['zulu', 'temurin', 'microsoft'] + + defaults: + run: + working-directory: drivers/jdbc + + steps: + - uses: actions/checkout@v3 + + - name: Set up Java + uses: actions/setup-java@v3 + with: + distribution: ${{ matrix.distributions }} + java-version: '17' + + - name: Build and Test + run: gradle build \ No newline at end of file diff --git a/drivers/jdbc/lib/build.gradle.kts b/drivers/jdbc/lib/build.gradle.kts index 86af61ac8..5e2d0f27b 100644 --- a/drivers/jdbc/lib/build.gradle.kts +++ b/drivers/jdbc/lib/build.gradle.kts @@ -17,6 +17,9 @@ * under the License. */ +import org.gradle.api.tasks.testing.logging.TestExceptionFormat +import org.gradle.api.tasks.testing.logging.TestLogEvent + plugins { `java-library` antlr @@ -36,6 +39,9 @@ dependencies { testImplementation("org.testcontainers:testcontainers:1.15.3") testImplementation("org.postgresql:postgresql:42.2.20") + + testImplementation("org.slf4j:slf4j-api:1.7.5") + testImplementation("org.slf4j:slf4j-simple:1.7.5") } tasks.generateGrammarSource { @@ -50,5 +56,16 @@ tasks.generateGrammarSource { } tasks.test { - useJUnitPlatform() + useJUnitPlatform(); + testLogging { + // set options for log level LIFECYCLE + events(TestLogEvent.FAILED, + TestLogEvent.PASSED, + TestLogEvent.SKIPPED, + TestLogEvent.STANDARD_OUT) + exceptionFormat = TestExceptionFormat.FULL + showExceptions = true + showCauses = true + showStackTraces = true + } } From 6a3fa926e0069bdee11c1234e306f2d677148ad4 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed <85064039+MuhammadTahaNaveed@users.noreply.github.com> Date: Thu, 16 Feb 2023 22:45:02 +0500 Subject: [PATCH 131/191] Update Go driver CI to run on every PR/commit (#683) - Removed path directive - Included PG11 as trigger branch --- .github/workflows/go-driver.yml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/go-driver.yml b/.github/workflows/go-driver.yml index a2b543cd9..fbf2cec99 100644 --- a/.github/workflows/go-driver.yml +++ b/.github/workflows/go-driver.yml @@ -2,14 +2,10 @@ name: Go Driver Tests on: push: - branches: [ "master" ] - paths: - - 'drivers/golang/**' + branches: [ "master", PG11 ] pull_request: - branches: [ "master" ] - paths: - - 'drivers/golang/**' + branches: [ "master", PG11 ] jobs: build: From 1df55f5bb99d0bac3e823316b739ca7ba2c5dc27 Mon Sep 17 00:00:00 2001 From: Fahad Zaheer <52493343+FahadZaheerfzr@users.noreply.github.com> Date: Fri, 17 Feb 2023 00:41:00 +0500 Subject: [PATCH 132/191] Removed async from function definitions (#680) Found async function without any await expressions in NodeJS Driver. Async keyword is used in Asynchronous programming and for the functions that wait for some responses. These functions dont need to be Asynchronous. --- drivers/nodejs/test/Agtype.test.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/nodejs/test/Agtype.test.ts b/drivers/nodejs/test/Agtype.test.ts index 27f5f4e4e..5ae26b549 100644 --- a/drivers/nodejs/test/Agtype.test.ts +++ b/drivers/nodejs/test/Agtype.test.ts @@ -20,7 +20,7 @@ import { AGTypeParse } from '../src' describe('Parsing', () => { - it('Vertex', async () => { + it('Vertex', () => { expect( AGTypeParse('{"id": 844424930131969, "label": "Part", "properties": {"part_num": "123", "number": 3141592653589793, "float": 3.141592653589793}}::vertex') ).toStrictEqual(new Map(Object.entries({ @@ -34,7 +34,7 @@ describe('Parsing', () => { }))) }) - it('Edge', async () => { + it('Edge', () => { expect( AGTypeParse('{"id": 1125899906842625, "label": "used_by", "end_id": 844424930131970, "start_id": 844424930131969, "properties": {"quantity": 1}}::edge') ).toStrictEqual(new Map(Object.entries({ @@ -46,7 +46,7 @@ describe('Parsing', () => { }))) }) - it('Path', async () => { + it('Path', () => { expect( AGTypeParse('[{"id": 844424930131969, "label": "Part", "properties": {"part_num": "123"}}::vertex, {"id": 1125899906842625, "label": "used_by", "end_id": 844424930131970, "start_id": 844424930131969, "properties": {"quantity": 1}}::edge, {"id": 844424930131970, "label": "Part", "properties": {"part_num": "345"}}::vertex]::path') ).toStrictEqual([ @@ -70,7 +70,7 @@ describe('Parsing', () => { ]) }) - it('Null Properties', async () => { + it('Null Properties', () => { expect( AGTypeParse('{"id": 1688849860263937, "label": "car", "properties": {}}::vertex') ).toStrictEqual(new Map(Object.entries({ From 5df5d440d71de5ccbf53cac2b20f7709115cf9f8 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed <85064039+MuhammadTahaNaveed@users.noreply.github.com> Date: Fri, 17 Feb 2023 06:08:08 +0500 Subject: [PATCH 133/191] Update python driver CI to run on every PR/commit (#684) - Removed path directive - Included PG11 as trigger branch --- .github/workflows/python-driver.yaml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/python-driver.yaml b/.github/workflows/python-driver.yaml index fb6ca3b33..720e8c22f 100644 --- a/.github/workflows/python-driver.yaml +++ b/.github/workflows/python-driver.yaml @@ -2,14 +2,10 @@ name: Python Driver Tests on: push: - branches: [ "master" ] - paths: - - 'drivers/python/**' + branches: [ "master", "PG11" ] pull_request: - branches: [ "master" ] - paths: - - 'drivers/python/**' + branches: [ "master", "PG11" ] jobs: build: From 0c793704e85b82028710d20c5903fe21583a0c3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Aur=C3=A9lio=20Silva=20de=20Souza=20J=C3=BAnior?= <57829631+markgomer@users.noreply.github.com> Date: Fri, 17 Feb 2023 15:45:05 -0300 Subject: [PATCH 134/191] Barbell graph generation (#648) * Added function to create a Barbell Graph * Created auxiliary function to get_next_val_internal; * Currently creates a bridge of no vertexes between graphs, will be implemented next. * Added signature to age_create_barbell_graph * Moved bracket to next line to macth code standards * Fixed patterns to match code standards * moved PG_FUNCTION_INFO_V1(age_create_barbell_graph) next to age_create_barbell_graph function; * added brackets to if/else conditions if just one line; * moved get_nextval_internal auxiliary function to the beggining of the file. --- age--1.2.0.sql | 13 +++ src/backend/utils/graph_generation.c | 156 ++++++++++++++++++++++++++- 2 files changed, 165 insertions(+), 4 deletions(-) diff --git a/age--1.2.0.sql b/age--1.2.0.sql index 3075824c9..e34b3c97c 100644 --- a/age--1.2.0.sql +++ b/age--1.2.0.sql @@ -4182,6 +4182,19 @@ CALLED ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; +CREATE FUNCTION ag_catalog.age_create_barbell_graph(graph_name name, + graph_size int, + bridge_size int, + node_label name = NULL, + node_properties agtype = NULL, + edge_label name = NULL, + edge_properties agtype = NULL) +RETURNS void +LANGUAGE c +CALLED ON NULL INPUT +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + CREATE FUNCTION ag_catalog.age_prepare_cypher(cstring, cstring) RETURNS boolean LANGUAGE c diff --git a/src/backend/utils/graph_generation.c b/src/backend/utils/graph_generation.c index 49da5f829..80ef85f29 100644 --- a/src/backend/utils/graph_generation.c +++ b/src/backend/utils/graph_generation.c @@ -41,14 +41,35 @@ #include "catalog/ag_graph.h" #include "catalog/ag_label.h" +#include "commands/graph_commands.h" #include "commands/label_commands.h" #include "utils/graphid.h" -#include "commands/graph_commands.h" #include "utils/load/age_load.h" #include "utils/load/ag_load_edges.h" #include "utils/load/ag_load_labels.h" +int64 get_nextval_internal(graph_cache_data* graph_cache, + label_cache_data* label_cache); +/* + * Auxiliary function to get the next internal value in the graph, + * so a new object (node or edge) graph id can be composed. + */ + +int64 get_nextval_internal(graph_cache_data* graph_cache, + label_cache_data* label_cache) +{ + Oid obj_seq_id; + char* label_seq_name_str; + + label_seq_name_str = NameStr(label_cache->seq_name); + obj_seq_id = get_relname_relid(label_seq_name_str, + graph_cache->namespace); + + return nextval_internal(obj_seq_id, true); +} + + PG_FUNCTION_INFO_V1(create_complete_graph); /* @@ -125,7 +146,6 @@ Datum create_complete_graph(PG_FUNCTION_ARGS) if (!graph_exists(graph_name_str)) { DirectFunctionCall1(create_graph, CStringGetDatum(graph_name)); - } graph_id = get_graph_oid(graph_name_str); @@ -194,10 +214,138 @@ Datum create_complete_graph(PG_FUNCTION_ARGS) insert_edge_simple(graph_id, edge_name_str, object_graph_id, start_vertex_graph_id, end_vertex_graph_id, props); - } } - PG_RETURN_VOID(); } + +PG_FUNCTION_INFO_V1(age_create_barbell_graph); + +/* + * The barbell graph is two complete graphs connected by a bridge path + * Syntax: + * ag_catalog.age_create_barbell_graph(graph_name Name, + * m int, + * n int, + * vertex_label_name Name DEFAULT = NULL, + * vertex_properties agtype DEFAULT = NULL, + * edge_label_name Name DEAULT = NULL, + * edge_properties agtype DEFAULT = NULL) + * Input: + * + * graph_name - Name of the graph to be created. + * m - number of vertices in one complete graph. + * n - number of vertices in the bridge path. + * vertex_label_name - Name of the label to assign each vertex to. + * vertex_properties - Property values to assign each vertex. Default is NULL + * edge_label_name - Name of the label to assign each edge to. + * edge_properties - Property values to assign each edge. Default is NULL + * + * https://en.wikipedia.org/wiki/Barbell_graph + */ + +Datum age_create_barbell_graph(PG_FUNCTION_ARGS) +{ + FunctionCallInfo arguments; + Oid graph_oid; + Name graph_name; + char* graph_name_str; + + int64 start_node_index, end_node_index, nextval; + + Name node_label_name = NULL; + int32 node_label_id; + char* node_label_str; + + Name edge_label_name; + int32 edge_label_id; + char* edge_label_str; + + graphid object_graph_id; + graphid start_node_graph_id; + graphid end_node_graph_id; + + graph_cache_data* graph_cache; + label_cache_data* edge_cache; + + agtype* properties = NULL; + + arguments = fcinfo; + + // create two separate complete graphs + DirectFunctionCall4(create_complete_graph, arguments->arg[0], + arguments->arg[1], + arguments->arg[5], + arguments->arg[3]); + DirectFunctionCall4(create_complete_graph, arguments->arg[0], + arguments->arg[1], + arguments->arg[5], + arguments->arg[3]); + + // Handling remaining arguments + /* + * graph_name: doesn't need to validate, since the create_complete_graph + * function already does that. + */ + graph_name = PG_GETARG_NAME(0); + graph_name_str = NameStr(*graph_name); + graph_oid = get_graph_oid(graph_name_str); + + /* + * int64 bridge_size: currently only stays at zero. + * to do: implement bridge with variable number of nodes. + */ + if (PG_ARGISNULL(2) || PG_GETARG_INT32(2) < 0 ) + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("Bridge size must not be NULL or lower than 0"))); + } + + // node label: if null, gets default label, which is "_ag_label_vertex" + if (PG_ARGISNULL(3)) + { + namestrcpy(node_label_name, AG_DEFAULT_LABEL_VERTEX); + } + else + { + node_label_name = PG_GETARG_NAME(3); + } + node_label_str = NameStr(*node_label_name); + node_label_id = get_label_id(node_label_str, graph_oid); + + /* + * edge_label: doesn't need to validate, since the create_complete_graph + * function already does that. + */ + edge_label_name = PG_GETARG_NAME(5); + edge_label_str = NameStr(*edge_label_name); + edge_label_id = get_label_id(edge_label_str, graph_oid); + + /* + * Fetching caches to get next values for graph id's, and access nodes + * to be connected with edges. + */ + graph_cache = search_graph_name_cache(graph_name_str); + edge_cache = search_label_name_graph_cache(edge_label_str,graph_oid); + + // connect a node from each graph + start_node_index = 1; // first created node, from the first complete graph + end_node_index = arguments->arg[1]*2; // last created node, second graph + + // next index to be assigned to a node or edge + nextval = get_nextval_internal(graph_cache, edge_cache); + + // build the graph id's of the edge to be created + object_graph_id = make_graphid(edge_label_id, nextval); + start_node_graph_id = make_graphid(node_label_id, start_node_index); + end_node_graph_id = make_graphid(node_label_id, end_node_index); + properties = create_empty_agtype(); + + // connect two nodes + insert_edge_simple(graph_oid, edge_label_str, + object_graph_id, start_node_graph_id, + end_node_graph_id, properties); + + PG_RETURN_VOID(); +} From 73353c5a40ad12249302b423eedf2767ddc30f7c Mon Sep 17 00:00:00 2001 From: Arunabh Das Date: Thu, 23 Feb 2023 17:54:29 +0800 Subject: [PATCH 135/191] UPDATED Python Driver ANTLR 4.9.3 -> 4.11.1 (#706) --- .gitignore | 2 + drivers/python/age/gen/AgtypeLexer.py | 153 +++++++++++------------ drivers/python/age/gen/AgtypeListener.py | 3 +- drivers/python/age/gen/AgtypeParser.py | 100 +++++++-------- drivers/python/age/gen/AgtypeVisitor.py | 3 +- drivers/python/antlr/README.md | 14 ++- drivers/python/requirements.txt | Bin 158 -> 160 bytes drivers/python/setup.py | 2 +- 8 files changed, 138 insertions(+), 139 deletions(-) diff --git a/.gitignore b/.gitignore index 78e991256..660286b03 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ build.sh .idea .deps .DS_Store +*.tokens +*.interp \ No newline at end of file diff --git a/drivers/python/age/gen/AgtypeLexer.py b/drivers/python/age/gen/AgtypeLexer.py index 543bee285..54f19c7db 100644 --- a/drivers/python/age/gen/AgtypeLexer.py +++ b/drivers/python/age/gen/AgtypeLexer.py @@ -12,7 +12,8 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -# Generated from Agtype.g4 by ANTLR 4.9.2 +# Generated from ../Agtype.g4 by ANTLR 4.11.1 + from antlr4 import * from io import StringIO import sys @@ -22,86 +23,76 @@ from typing.io import TextIO - def serializedATN(): - with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\25") - buf.write("\u00b9\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7") - buf.write("\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r") - buf.write("\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22\4\23") - buf.write("\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30") - buf.write("\4\31\t\31\4\32\t\32\4\33\t\33\3\2\3\2\3\2\3\2\3\2\3\3") - buf.write("\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3") - buf.write("\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\13\3\f") - buf.write("\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16") - buf.write("\3\16\3\17\3\17\7\17h\n\17\f\17\16\17k\13\17\3\20\3\20") - buf.write("\3\20\7\20p\n\20\f\20\16\20s\13\20\3\20\3\20\3\21\3\21") - buf.write("\3\21\5\21z\n\21\3\22\3\22\3\22\3\22\3\22\3\22\3\23\3") - buf.write("\23\3\24\3\24\3\25\5\25\u0087\n\25\3\25\3\25\3\26\3\26") - buf.write("\3\26\7\26\u008e\n\26\f\26\16\26\u0091\13\26\5\26\u0093") - buf.write("\n\26\3\27\5\27\u0096\n\27\3\27\3\27\3\27\3\30\5\30\u009c") - buf.write("\n\30\3\30\3\30\5\30\u00a0\n\30\3\30\3\30\3\31\3\31\6") - buf.write("\31\u00a6\n\31\r\31\16\31\u00a7\3\32\3\32\5\32\u00ac\n") - buf.write("\32\3\32\6\32\u00af\n\32\r\32\16\32\u00b0\3\33\6\33\u00b4") - buf.write("\n\33\r\33\16\33\u00b5\3\33\3\33\2\2\34\3\3\5\4\7\5\t") - buf.write("\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20") - buf.write("\37\21!\2#\2%\2\'\2)\22+\2-\23/\24\61\2\63\2\65\25\3\2") - buf.write("\f\5\2C\\aac|\7\2&&\62;C\\aac|\n\2$$\61\61^^ddhhppttv") - buf.write("v\5\2\62;CHch\5\2\2!$$^^\3\2\63;\3\2\62;\4\2GGgg\4\2-") - buf.write("-//\5\2\13\f\17\17\"\"\2\u00bf\2\3\3\2\2\2\2\5\3\2\2\2") - buf.write("\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17") - buf.write("\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3") - buf.write("\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2") - buf.write("\2\2\2)\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\65\3\2\2\2\3\67") - buf.write("\3\2\2\2\5<\3\2\2\2\7B\3\2\2\2\tG\3\2\2\2\13I\3\2\2\2") - buf.write("\rK\3\2\2\2\17M\3\2\2\2\21O\3\2\2\2\23Q\3\2\2\2\25S\3") - buf.write("\2\2\2\27V\3\2\2\2\31X\3\2\2\2\33a\3\2\2\2\35e\3\2\2\2") - buf.write("\37l\3\2\2\2!v\3\2\2\2#{\3\2\2\2%\u0081\3\2\2\2\'\u0083") - buf.write("\3\2\2\2)\u0086\3\2\2\2+\u0092\3\2\2\2-\u0095\3\2\2\2") - buf.write("/\u009b\3\2\2\2\61\u00a3\3\2\2\2\63\u00a9\3\2\2\2\65\u00b3") - buf.write("\3\2\2\2\678\7v\2\289\7t\2\29:\7w\2\2:;\7g\2\2;\4\3\2") - buf.write("\2\2<=\7h\2\2=>\7c\2\2>?\7n\2\2?@\7u\2\2@A\7g\2\2A\6\3") - buf.write("\2\2\2BC\7p\2\2CD\7w\2\2DE\7n\2\2EF\7n\2\2F\b\3\2\2\2") - buf.write("GH\7}\2\2H\n\3\2\2\2IJ\7.\2\2J\f\3\2\2\2KL\7\177\2\2L") - buf.write("\16\3\2\2\2MN\7<\2\2N\20\3\2\2\2OP\7]\2\2P\22\3\2\2\2") - buf.write("QR\7_\2\2R\24\3\2\2\2ST\7<\2\2TU\7<\2\2U\26\3\2\2\2VW") - buf.write("\7/\2\2W\30\3\2\2\2XY\7K\2\2YZ\7p\2\2Z[\7h\2\2[\\\7k\2") - buf.write("\2\\]\7p\2\2]^\7k\2\2^_\7v\2\2_`\7{\2\2`\32\3\2\2\2ab") - buf.write("\7P\2\2bc\7c\2\2cd\7P\2\2d\34\3\2\2\2ei\t\2\2\2fh\t\3") - buf.write("\2\2gf\3\2\2\2hk\3\2\2\2ig\3\2\2\2ij\3\2\2\2j\36\3\2\2") - buf.write("\2ki\3\2\2\2lq\7$\2\2mp\5!\21\2np\5\'\24\2om\3\2\2\2o") - buf.write("n\3\2\2\2ps\3\2\2\2qo\3\2\2\2qr\3\2\2\2rt\3\2\2\2sq\3") - buf.write("\2\2\2tu\7$\2\2u \3\2\2\2vy\7^\2\2wz\t\4\2\2xz\5#\22\2") - buf.write("yw\3\2\2\2yx\3\2\2\2z\"\3\2\2\2{|\7w\2\2|}\5%\23\2}~\5") - buf.write("%\23\2~\177\5%\23\2\177\u0080\5%\23\2\u0080$\3\2\2\2\u0081") - buf.write("\u0082\t\5\2\2\u0082&\3\2\2\2\u0083\u0084\n\6\2\2\u0084") - buf.write("(\3\2\2\2\u0085\u0087\7/\2\2\u0086\u0085\3\2\2\2\u0086") - buf.write("\u0087\3\2\2\2\u0087\u0088\3\2\2\2\u0088\u0089\5+\26\2") - buf.write("\u0089*\3\2\2\2\u008a\u0093\7\62\2\2\u008b\u008f\t\7\2") - buf.write("\2\u008c\u008e\t\b\2\2\u008d\u008c\3\2\2\2\u008e\u0091") - buf.write("\3\2\2\2\u008f\u008d\3\2\2\2\u008f\u0090\3\2\2\2\u0090") - buf.write("\u0093\3\2\2\2\u0091\u008f\3\2\2\2\u0092\u008a\3\2\2\2") - buf.write("\u0092\u008b\3\2\2\2\u0093,\3\2\2\2\u0094\u0096\7/\2\2") - buf.write("\u0095\u0094\3\2\2\2\u0095\u0096\3\2\2\2\u0096\u0097\3") - buf.write("\2\2\2\u0097\u0098\5+\26\2\u0098\u0099\5\61\31\2\u0099") - buf.write(".\3\2\2\2\u009a\u009c\7/\2\2\u009b\u009a\3\2\2\2\u009b") - buf.write("\u009c\3\2\2\2\u009c\u009d\3\2\2\2\u009d\u009f\5+\26\2") - buf.write("\u009e\u00a0\5\61\31\2\u009f\u009e\3\2\2\2\u009f\u00a0") - buf.write("\3\2\2\2\u00a0\u00a1\3\2\2\2\u00a1\u00a2\5\63\32\2\u00a2") - buf.write("\60\3\2\2\2\u00a3\u00a5\7\60\2\2\u00a4\u00a6\t\b\2\2\u00a5") - buf.write("\u00a4\3\2\2\2\u00a6\u00a7\3\2\2\2\u00a7\u00a5\3\2\2\2") - buf.write("\u00a7\u00a8\3\2\2\2\u00a8\62\3\2\2\2\u00a9\u00ab\t\t") - buf.write("\2\2\u00aa\u00ac\t\n\2\2\u00ab\u00aa\3\2\2\2\u00ab\u00ac") - buf.write("\3\2\2\2\u00ac\u00ae\3\2\2\2\u00ad\u00af\t\b\2\2\u00ae") - buf.write("\u00ad\3\2\2\2\u00af\u00b0\3\2\2\2\u00b0\u00ae\3\2\2\2") - buf.write("\u00b0\u00b1\3\2\2\2\u00b1\64\3\2\2\2\u00b2\u00b4\t\13") - buf.write("\2\2\u00b3\u00b2\3\2\2\2\u00b4\u00b5\3\2\2\2\u00b5\u00b3") - buf.write("\3\2\2\2\u00b5\u00b6\3\2\2\2\u00b6\u00b7\3\2\2\2\u00b7") - buf.write("\u00b8\b\33\2\2\u00b8\66\3\2\2\2\21\2ioqy\u0086\u008f") - buf.write("\u0092\u0095\u009b\u009f\u00a7\u00ab\u00b0\u00b5\3\b\2") - buf.write("\2") - return buf.getvalue() - + return [ + 4,0,19,183,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5, + 2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2, + 13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7, + 19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,1, + 0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1, + 3,1,3,1,4,1,4,1,5,1,5,1,6,1,6,1,7,1,7,1,8,1,8,1,9,1,9,1,9,1,10,1, + 10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1, + 12,1,13,1,13,5,13,102,8,13,10,13,12,13,105,9,13,1,14,1,14,1,14,5, + 14,110,8,14,10,14,12,14,113,9,14,1,14,1,14,1,15,1,15,1,15,3,15,120, + 8,15,1,16,1,16,1,16,1,16,1,16,1,16,1,17,1,17,1,18,1,18,1,19,3,19, + 133,8,19,1,19,1,19,1,20,1,20,1,20,5,20,140,8,20,10,20,12,20,143, + 9,20,3,20,145,8,20,1,21,3,21,148,8,21,1,21,1,21,1,21,1,22,3,22,154, + 8,22,1,22,1,22,3,22,158,8,22,1,22,1,22,1,23,1,23,4,23,164,8,23,11, + 23,12,23,165,1,24,1,24,3,24,170,8,24,1,24,4,24,173,8,24,11,24,12, + 24,174,1,25,4,25,178,8,25,11,25,12,25,179,1,25,1,25,0,0,26,1,1,3, + 2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14, + 29,15,31,0,33,0,35,0,37,0,39,16,41,0,43,17,45,18,47,0,49,0,51,19, + 1,0,10,3,0,65,90,95,95,97,122,5,0,36,36,48,57,65,90,95,95,97,122, + 8,0,34,34,47,47,92,92,98,98,102,102,110,110,114,114,116,116,3,0, + 48,57,65,70,97,102,3,0,0,31,34,34,92,92,1,0,49,57,1,0,48,57,2,0, + 69,69,101,101,2,0,43,43,45,45,3,0,9,10,13,13,32,32,189,0,1,1,0,0, + 0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0, + 13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0, + 23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,39,1,0,0,0,0, + 43,1,0,0,0,0,45,1,0,0,0,0,51,1,0,0,0,1,53,1,0,0,0,3,58,1,0,0,0,5, + 64,1,0,0,0,7,69,1,0,0,0,9,71,1,0,0,0,11,73,1,0,0,0,13,75,1,0,0,0, + 15,77,1,0,0,0,17,79,1,0,0,0,19,81,1,0,0,0,21,84,1,0,0,0,23,86,1, + 0,0,0,25,95,1,0,0,0,27,99,1,0,0,0,29,106,1,0,0,0,31,116,1,0,0,0, + 33,121,1,0,0,0,35,127,1,0,0,0,37,129,1,0,0,0,39,132,1,0,0,0,41,144, + 1,0,0,0,43,147,1,0,0,0,45,153,1,0,0,0,47,161,1,0,0,0,49,167,1,0, + 0,0,51,177,1,0,0,0,53,54,5,116,0,0,54,55,5,114,0,0,55,56,5,117,0, + 0,56,57,5,101,0,0,57,2,1,0,0,0,58,59,5,102,0,0,59,60,5,97,0,0,60, + 61,5,108,0,0,61,62,5,115,0,0,62,63,5,101,0,0,63,4,1,0,0,0,64,65, + 5,110,0,0,65,66,5,117,0,0,66,67,5,108,0,0,67,68,5,108,0,0,68,6,1, + 0,0,0,69,70,5,123,0,0,70,8,1,0,0,0,71,72,5,44,0,0,72,10,1,0,0,0, + 73,74,5,125,0,0,74,12,1,0,0,0,75,76,5,58,0,0,76,14,1,0,0,0,77,78, + 5,91,0,0,78,16,1,0,0,0,79,80,5,93,0,0,80,18,1,0,0,0,81,82,5,58,0, + 0,82,83,5,58,0,0,83,20,1,0,0,0,84,85,5,45,0,0,85,22,1,0,0,0,86,87, + 5,73,0,0,87,88,5,110,0,0,88,89,5,102,0,0,89,90,5,105,0,0,90,91,5, + 110,0,0,91,92,5,105,0,0,92,93,5,116,0,0,93,94,5,121,0,0,94,24,1, + 0,0,0,95,96,5,78,0,0,96,97,5,97,0,0,97,98,5,78,0,0,98,26,1,0,0,0, + 99,103,7,0,0,0,100,102,7,1,0,0,101,100,1,0,0,0,102,105,1,0,0,0,103, + 101,1,0,0,0,103,104,1,0,0,0,104,28,1,0,0,0,105,103,1,0,0,0,106,111, + 5,34,0,0,107,110,3,31,15,0,108,110,3,37,18,0,109,107,1,0,0,0,109, + 108,1,0,0,0,110,113,1,0,0,0,111,109,1,0,0,0,111,112,1,0,0,0,112, + 114,1,0,0,0,113,111,1,0,0,0,114,115,5,34,0,0,115,30,1,0,0,0,116, + 119,5,92,0,0,117,120,7,2,0,0,118,120,3,33,16,0,119,117,1,0,0,0,119, + 118,1,0,0,0,120,32,1,0,0,0,121,122,5,117,0,0,122,123,3,35,17,0,123, + 124,3,35,17,0,124,125,3,35,17,0,125,126,3,35,17,0,126,34,1,0,0,0, + 127,128,7,3,0,0,128,36,1,0,0,0,129,130,8,4,0,0,130,38,1,0,0,0,131, + 133,5,45,0,0,132,131,1,0,0,0,132,133,1,0,0,0,133,134,1,0,0,0,134, + 135,3,41,20,0,135,40,1,0,0,0,136,145,5,48,0,0,137,141,7,5,0,0,138, + 140,7,6,0,0,139,138,1,0,0,0,140,143,1,0,0,0,141,139,1,0,0,0,141, + 142,1,0,0,0,142,145,1,0,0,0,143,141,1,0,0,0,144,136,1,0,0,0,144, + 137,1,0,0,0,145,42,1,0,0,0,146,148,5,45,0,0,147,146,1,0,0,0,147, + 148,1,0,0,0,148,149,1,0,0,0,149,150,3,41,20,0,150,151,3,47,23,0, + 151,44,1,0,0,0,152,154,5,45,0,0,153,152,1,0,0,0,153,154,1,0,0,0, + 154,155,1,0,0,0,155,157,3,41,20,0,156,158,3,47,23,0,157,156,1,0, + 0,0,157,158,1,0,0,0,158,159,1,0,0,0,159,160,3,49,24,0,160,46,1,0, + 0,0,161,163,5,46,0,0,162,164,7,6,0,0,163,162,1,0,0,0,164,165,1,0, + 0,0,165,163,1,0,0,0,165,166,1,0,0,0,166,48,1,0,0,0,167,169,7,7,0, + 0,168,170,7,8,0,0,169,168,1,0,0,0,169,170,1,0,0,0,170,172,1,0,0, + 0,171,173,7,6,0,0,172,171,1,0,0,0,173,174,1,0,0,0,174,172,1,0,0, + 0,174,175,1,0,0,0,175,50,1,0,0,0,176,178,7,9,0,0,177,176,1,0,0,0, + 178,179,1,0,0,0,179,177,1,0,0,0,179,180,1,0,0,0,180,181,1,0,0,0, + 181,182,6,25,0,0,182,52,1,0,0,0,15,0,103,109,111,119,132,141,144, + 147,153,157,165,169,174,179,1,6,0,0 + ] class AgtypeLexer(Lexer): @@ -151,7 +142,7 @@ class AgtypeLexer(Lexer): def __init__(self, input=None, output:TextIO = sys.stdout): super().__init__(input, output) - self.checkVersion("4.9.2") + self.checkVersion("4.11.1") self._interp = LexerATNSimulator(self, self.atn, self.decisionsToDFA, PredictionContextCache()) self._actions = None self._predicates = None diff --git a/drivers/python/age/gen/AgtypeListener.py b/drivers/python/age/gen/AgtypeListener.py index 15016bf99..6e60da421 100644 --- a/drivers/python/age/gen/AgtypeListener.py +++ b/drivers/python/age/gen/AgtypeListener.py @@ -12,7 +12,8 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -# Generated from Agtype.g4 by ANTLR 4.9.2 +# Generated from ../Agtype.g4 by ANTLR 4.11.1 + from antlr4 import * if __name__ is not None and "." in __name__: from .AgtypeParser import AgtypeParser diff --git a/drivers/python/age/gen/AgtypeParser.py b/drivers/python/age/gen/AgtypeParser.py index ff98746a6..daaf578e8 100644 --- a/drivers/python/age/gen/AgtypeParser.py +++ b/drivers/python/age/gen/AgtypeParser.py @@ -12,8 +12,9 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -# Generated from Agtype.g4 by ANTLR 4.9.2 +# Generated from ../Agtype.g4 by ANTLR 4.11.1 # encoding: utf-8 + from antlr4 import * from io import StringIO import sys @@ -22,39 +23,35 @@ else: from typing.io import TextIO - def serializedATN(): - with StringIO() as buf: - buf.write("\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\25") - buf.write("R\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b") - buf.write("\t\b\4\t\t\t\3\2\3\2\3\2\3\3\3\3\5\3\30\n\3\3\4\3\4\3") - buf.write("\4\3\4\3\4\3\4\3\4\3\4\5\4\"\n\4\3\5\3\5\3\5\3\5\7\5(") - buf.write("\n\5\f\5\16\5+\13\5\3\5\3\5\3\5\3\5\5\5\61\n\5\3\6\3\6") - buf.write("\3\6\3\6\3\7\3\7\3\7\3\7\7\7;\n\7\f\7\16\7>\13\7\3\7\3") - buf.write("\7\3\7\3\7\5\7D\n\7\3\b\3\b\3\b\3\t\3\t\3\t\5\tL\n\t\3") - buf.write("\t\3\t\5\tP\n\t\3\t\2\2\n\2\4\6\b\n\f\16\20\2\2\2Y\2\22") - buf.write("\3\2\2\2\4\25\3\2\2\2\6!\3\2\2\2\b\60\3\2\2\2\n\62\3\2") - buf.write("\2\2\fC\3\2\2\2\16E\3\2\2\2\20O\3\2\2\2\22\23\5\4\3\2") - buf.write("\23\24\7\2\2\3\24\3\3\2\2\2\25\27\5\6\4\2\26\30\5\16\b") - buf.write("\2\27\26\3\2\2\2\27\30\3\2\2\2\30\5\3\2\2\2\31\"\7\21") - buf.write("\2\2\32\"\7\22\2\2\33\"\5\20\t\2\34\"\7\3\2\2\35\"\7\4") - buf.write("\2\2\36\"\7\5\2\2\37\"\5\b\5\2 \"\5\f\7\2!\31\3\2\2\2") - buf.write("!\32\3\2\2\2!\33\3\2\2\2!\34\3\2\2\2!\35\3\2\2\2!\36\3") - buf.write("\2\2\2!\37\3\2\2\2! \3\2\2\2\"\7\3\2\2\2#$\7\6\2\2$)\5") - buf.write("\n\6\2%&\7\7\2\2&(\5\n\6\2\'%\3\2\2\2(+\3\2\2\2)\'\3\2") - buf.write("\2\2)*\3\2\2\2*,\3\2\2\2+)\3\2\2\2,-\7\b\2\2-\61\3\2\2") - buf.write("\2./\7\6\2\2/\61\7\b\2\2\60#\3\2\2\2\60.\3\2\2\2\61\t") - buf.write("\3\2\2\2\62\63\7\21\2\2\63\64\7\t\2\2\64\65\5\4\3\2\65") - buf.write("\13\3\2\2\2\66\67\7\n\2\2\67<\5\4\3\289\7\7\2\29;\5\4") - buf.write("\3\2:8\3\2\2\2;>\3\2\2\2<:\3\2\2\2<=\3\2\2\2=?\3\2\2\2") - buf.write("><\3\2\2\2?@\7\13\2\2@D\3\2\2\2AB\7\n\2\2BD\7\13\2\2C") - buf.write("\66\3\2\2\2CA\3\2\2\2D\r\3\2\2\2EF\7\f\2\2FG\7\20\2\2") - buf.write("G\17\3\2\2\2HP\7\23\2\2IP\7\24\2\2JL\7\r\2\2KJ\3\2\2\2") - buf.write("KL\3\2\2\2LM\3\2\2\2MP\7\16\2\2NP\7\17\2\2OH\3\2\2\2O") - buf.write("I\3\2\2\2OK\3\2\2\2ON\3\2\2\2P\21\3\2\2\2\n\27!)\60kUlrWSs6adM5Aj|=Z005wq2de-8 delta 37 ocmZ3$IFE5cgPbLU9)mFhF9R1tF+(at2}3DE0g%iG!W^Io0G4|Pf&c&j diff --git a/drivers/python/setup.py b/drivers/python/setup.py index a7979a262..4565dc5d5 100644 --- a/drivers/python/setup.py +++ b/drivers/python/setup.py @@ -29,7 +29,7 @@ author_email = 'rhizome.ai@gmail.com', url = 'https://github.com/apache/age', license = 'Apache2.0', - install_requires = [ 'psycopg2', 'antlr4-python3-runtime==4.9.3'], + install_requires = [ 'psycopg2', 'antlr4-python3-runtime==4.11.1'], packages = ['age', 'age.gen'], keywords = ['Graph Database', 'Apache AGE', 'PostgreSQL'], python_requires = '>=3.9', From c3331ed7d1575e708711c5b6c8850ff092ae2276 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed <85064039+MuhammadTahaNaveed@users.noreply.github.com> Date: Fri, 24 Feb 2023 23:32:09 +0500 Subject: [PATCH 136/191] Modify docker url for JDBC driver tests (#716) - Update JDBC driver tests to pull image from apache/age dockerhub repo. --- .../src/test/java/org/apache/age/jdbc/BaseDockerizedTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/BaseDockerizedTest.java b/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/BaseDockerizedTest.java index 8024f1a89..8e6aea460 100644 --- a/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/BaseDockerizedTest.java +++ b/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/BaseDockerizedTest.java @@ -51,7 +51,7 @@ public void afterAll() throws Exception { public void beforeAll() throws Exception { String CORRECT_DB_PASSWORDS = "postgres"; agensGraphContainer = new GenericContainer<>(DockerImageName - .parse("sorrell/agensgraph-extension-alpine:latest")) + .parse("apache/age:latest")) .withEnv("POSTGRES_PASSWORD", CORRECT_DB_PASSWORDS) .withExposedPorts(5432); agensGraphContainer.start(); From 4817bfb5a1a2f6dc2a4f9c96ac3349854de09688 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed <85064039+MuhammadTahaNaveed@users.noreply.github.com> Date: Sat, 25 Feb 2023 05:52:21 +0500 Subject: [PATCH 137/191] Fix WITH ignoring WHERE clause (#646) * Fix WITH ignoring WHERE clause - When transforming WITH clause into return clause, WHERE was getting ignored because that case wasn't handled in tranform_cypher_clause_with_where. - Had to revert to the previous function header of tranform_cypher_clause_with_where which had a explicit parameter of where node, because after tranforming cypher_with into cypher_return, the wrapper clause now has cypher_return and the where node of cypher_with was lost. * Fix WITH clause segmentation fault - When transforming columnrefs in WITH clause, it should only check referenced Columns in its parsestate or parent parsestate. - If only expr_kind is WHERE, try to find the columnRef as a transform_entity and extract the expr. This will happen in case of (MATCH/WHERE). * Add regression tests for cypher_with --- regress/expected/cypher_with.out | 353 ++++++++++++++++++++++++++++- regress/sql/cypher_with.sql | 211 ++++++++++++++++- src/backend/parser/cypher_clause.c | 57 ++--- src/backend/parser/cypher_expr.c | 16 +- 4 files changed, 582 insertions(+), 55 deletions(-) diff --git a/regress/expected/cypher_with.out b/regress/expected/cypher_with.out index 7f5faca3d..1166fff36 100644 --- a/regress/expected/cypher_with.out +++ b/regress/expected/cypher_with.out @@ -16,8 +16,12 @@ * specific language governing permissions and limitations * under the License. */ + \! cp -r regress/age_load/data regress/instance/data/age_load LOAD 'age'; SET search_path TO ag_catalog; +-- +-- Load data +-- SELECT create_graph('cypher_with'); NOTICE: graph "cypher_with" has been created create_graph @@ -25,31 +29,366 @@ NOTICE: graph "cypher_with" has been created (1 row) +SELECT create_vlabel('cypher_with','Country'); +NOTICE: VLabel "Country" has been created + create_vlabel +--------------- + +(1 row) + +SELECT load_labels_from_file('cypher_with', 'Country', + 'age_load/countries.csv'); + load_labels_from_file +----------------------- + +(1 row) + +SELECT create_vlabel('cypher_with','City'); +NOTICE: VLabel "City" has been created + create_vlabel +--------------- + +(1 row) + +SELECT load_labels_from_file('cypher_with', 'City', + 'age_load/cities.csv'); + load_labels_from_file +----------------------- + +(1 row) + +SELECT create_elabel('cypher_with','has_city'); +NOTICE: ELabel "has_city" has been created + create_elabel +--------------- + +(1 row) + +SELECT load_edges_from_file('cypher_with', 'has_city', + 'age_load/edges.csv'); + load_edges_from_file +---------------------- + +(1 row) + +-- +-- Test WITH clause +-- +SELECT count(*) FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m,b + RETURN m,b +$$) AS (City agtype, Country agtype); + count +------- + 2361 +(1 row) + +-- WITH/AS +SELECT * FROM cypher('cypher_with', $$ + MATCH (b:Country {iso2 : 'AT'}) + WITH b.name AS name, id(b) AS id + RETURN name,id +$$) AS (Country agtype, Country_id agtype); + country | country_id +-----------+----------------- + "Austria" | 844424930131983 +(1 row) + SELECT * FROM cypher('cypher_with', $$ -WITH true AS b -RETURN b + MATCH (m:City {name: 'Zell'})-[]-(b:Country {iso2 : 'AT'}) + WITH b as country, count(*) AS foaf + WHERE foaf > 1 + RETURN country.name, foaf +$$) as (name agtype, foaf agtype); + name | foaf +-----------+------ + "Austria" | 2 +(1 row) + +SELECT * FROM cypher('cypher_with', $$ + WITH true AS b + RETURN b $$) AS (b bool); b --- t (1 row) +-- WITH/WHERE +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country{iso2:'BE'}) + WITH b,m + WHERE m.name='x' + RETURN m.name,b.iso2 +$$) AS ( "m.name" agtype, "b" agtype); + m.name | b +--------+--- +(0 rows) + +SELECT * FROM cypher('cypher_with', $$ + MATCH (b:Country {iso2 : 'AT'}) + WITH b.name AS name, id(b) AS id + WHERE name = 'Austria' + RETURN name,id +$$) AS (Country agtype, Country_id agtype); + country | country_id +-----------+----------------- + "Austria" | 844424930131983 +(1 row) + +SELECT * FROM cypher('cypher_with', $$ + MATCH (b:Country {iso2 : 'AT'}) + WITH b.name AS name, id(b) AS id + WHERE name = 'Austria' OR name = 'Kosovo' + RETURN name,id +$$) AS (Country agtype, Country_id agtype); + country | country_id +-----------+----------------- + "Austria" | 844424930131983 +(1 row) + +SELECT * FROM cypher('cypher_with', $$ + MATCH p = (m:City)-[:has_city*1..2]->(b:Country {iso2 : 'AT'}) + WITH p, length(p) AS path_length + WHERE path_length > 1 + RETURN p +$$) AS (pattern agtype); + pattern +--------- +(0 rows) + +-- MATCH/WHERE with WITH/WHERE +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WHERE b.name = 'Austria' + WITH m.name AS city,b.name AS country + WHERE city = 'Vienna' + RETURN city,country +$$) AS (City agtype, Country agtype); + city | country +----------+----------- + "Vienna" | "Austria" +(1 row) + +-- WITH/ORDER BY +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + ORDER BY id(m) DESC LIMIT 10 + RETURN id(city),city +$$) AS (id agtype, city agtype); + id | city +------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 1125899906986495 | {"id": 1125899906986495, "label": "City", "properties": {"id": "143871", "name": "Zell", "__id__": 143871, "latitude": "46.47222222", "state_id": "2057", "longitude": "14.38888889", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex + 1125899906986492 | {"id": 1125899906986492, "label": "City", "properties": {"id": "143868", "name": "Weißenstein", "__id__": 143868, "latitude": "46.68222222", "state_id": "2057", "longitude": "13.72361111", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex + 1125899906986491 | {"id": 1125899906986491, "label": "City", "properties": {"id": "143867", "name": "Weißensee", "__id__": 143867, "latitude": "46.71666667", "state_id": "2057", "longitude": "13.3", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex + 1125899906986490 | {"id": 1125899906986490, "label": "City", "properties": {"id": "143866", "name": "Weitensfeld im Gurktal", "__id__": 143866, "latitude": "46.84861111", "state_id": "2057", "longitude": "14.19166667", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex + 1125899906986489 | {"id": 1125899906986489, "label": "City", "properties": {"id": "143865", "name": "Velden am Wörther See", "__id__": 143865, "latitude": "46.6125", "state_id": "2057", "longitude": "14.04194444", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex + 1125899906986488 | {"id": 1125899906986488, "label": "City", "properties": {"id": "143864", "name": "Umberg", "__id__": 143864, "latitude": "46.64833", "state_id": "2057", "longitude": "13.9575", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex + 1125899906986487 | {"id": 1125899906986487, "label": "City", "properties": {"id": "143863", "name": "Tschachoritsch", "__id__": 143863, "latitude": "46.55352", "state_id": "2057", "longitude": "14.21461", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex + 1125899906986486 | {"id": 1125899906986486, "label": "City", "properties": {"id": "143862", "name": "Treffen", "__id__": 143862, "latitude": "46.66833333", "state_id": "2057", "longitude": "13.85555556", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex + 1125899906986484 | {"id": 1125899906986484, "label": "City", "properties": {"id": "143860", "name": "Timenitz", "__id__": 143860, "latitude": "46.68333", "state_id": "2057", "longitude": "14.41667", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex + 1125899906986483 | {"id": 1125899906986483, "label": "City", "properties": {"id": "143859", "name": "Techelsberg", "__id__": 143859, "latitude": "46.65861111", "state_id": "2057", "longitude": "14.10194444", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex +(10 rows) + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City) + WITH m AS city + ORDER BY id(m) ASC LIMIT 10 + RETURN id(city),city.name +$$) AS (id agtype, names agtype); + id | names +------------------+----------------------- + 1125899906842625 | "Andorra la Vella" + 1125899906842626 | "Arinsal" + 1125899906842627 | "Canillo" + 1125899906842628 | "El Tarter" + 1125899906842629 | "Encamp" + 1125899906842630 | "Ordino" + 1125899906842631 | "Pas de la Casa" + 1125899906842632 | "Sant Julià de Lòria" + 1125899906842633 | "la Massana" + 1125899906842634 | "les Escaldes" +(10 rows) + +-- WITH/ORDER BY/DESC/WHERE +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + ORDER BY id(m) DESC LIMIT 10 + WHERE city.name = 'Zell' OR city.name = 'Umberg' + RETURN id(city),city.name,country.name +$$) AS (id agtype, city agtype, country agtype); + id | city | country +------------------+----------+----------- + 1125899906986495 | "Zell" | "Austria" + 1125899906986488 | "Umberg" | "Austria" +(2 rows) + +-- multiple WITH clauses +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + WITH city LIMIT 10 + RETURN city.name +$$) AS (city agtype); + city +--------------------- + "Andau" + "Antau" + "Apetlon" + "Bad Sauerbrunn" + "Bad Tatzmannsdorf" + "Badersdorf" + "Bernstein" + "Bocksdorf" + "Breitenbrunn" + "Bruckneudorf" +(10 rows) + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + ORDER BY id(m) DESC LIMIT 10 + WITH city + WHERE city.name = 'Zell' + RETURN id(city),city.name +$$) AS (id agtype, city agtype); + id | city +------------------+-------- + 1125899906986495 | "Zell" +(1 row) + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + WHERE country.name = 'Austria' + WITH city + ORDER BY id(city) DESC + WHERE city.name = 'Zell' + RETURN id(city),city.name +$$) AS (id agtype, city agtype); + id | city +------------------+-------- + 1125899906986495 | "Zell" + 1125899906846495 | "Zell" +(2 rows) + -- Expression item must be aliased. SELECT * FROM cypher('cypher_with', $$ -WITH 1 + 1 -RETURN i + WITH 1 + 1 + RETURN i $$) AS (i int); ERROR: expression item must be aliased -LINE 2: WITH 1 + 1 - ^ +LINE 2: WITH 1 + 1 + ^ HINT: Items can be aliased by using AS. +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH id(m) + RETURN m +$$) AS (id agtype, city agtype); +ERROR: expression item must be aliased +LINE 3: WITH id(m) + ^ +HINT: Items can be aliased by using AS. +-- Reference undefined variable in WITH clause (should error out) +SELECT count(*) FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m + RETURN m,b +$$) AS (City agtype, Country agtype); +ERROR: could not find rte for b +LINE 4: RETURN m,b + ^ +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + WHERE country.name = 'Austria' + WITH city + WHERE city.name = 'Zell' + RETURN id(city),country.name +$$) AS (id agtype, country agtype); +ERROR: could not find rte for country +LINE 7: RETURN id(city),country.name + ^ +-- Clean up SELECT drop_graph('cypher_with', true); -NOTICE: drop cascades to 2 other objects +NOTICE: drop cascades to 5 other objects DETAIL: drop cascades to table cypher_with._ag_label_vertex drop cascades to table cypher_with._ag_label_edge +drop cascades to table cypher_with."Country" +drop cascades to table cypher_with."City" +drop cascades to table cypher_with.has_city NOTICE: graph "cypher_with" has been dropped drop_graph ------------ (1 row) +-- Issue 329 (should error out) +SELECT create_graph('graph'); +NOTICE: graph "graph" has been created + create_graph +-------------- + +(1 row) + +SELECT * FROM cypher('graph', $$ + CREATE (a:A)-[:incs]->(:C), (a)-[:incs]->(:C) + RETURN a +$$) AS (n agtype); + n +----------------------------------------------------------------- + {"id": 844424930131969, "label": "A", "properties": {}}::vertex +(1 row) + +SELECT * FROM cypher('graph', $$ + MATCH (a:A) + WHERE ID(a)=0 + WITH a + OPTIONAL MATCH (a)-[:incs]->(c)-[d:incs]-() + WITH a,c,COUNT(d) AS deps + WHERE deps<=1 + RETURN c,d +$$) AS (n agtype, d agtype); +ERROR: could not find rte for d +LINE 8: RETURN c,d + ^ +-- Issue 396 (should error out) +SELECT * FROM cypher('graph',$$ + CREATE (v),(u),(w), + (v)-[:hasFriend]->(u), + (u)-[:hasFriend]->(w) +$$) as (a agtype); + a +--- +(0 rows) + +SELECT * FROM cypher('graph',$$ + MATCH p=(v)-[*1..2]->(u) + WITH p,length(p) AS path_length + RETURN v,path_length +$$) as (a agtype,b agtype); +ERROR: could not find rte for v +LINE 4: RETURN v,path_length + ^ +-- Clean up +SELECT drop_graph('graph', true); +NOTICE: drop cascades to 6 other objects +DETAIL: drop cascades to table graph._ag_label_vertex +drop cascades to table graph._ag_label_edge +drop cascades to table graph."A" +drop cascades to table graph.incs +drop cascades to table graph."C" +drop cascades to table graph."hasFriend" +NOTICE: graph "graph" has been dropped + drop_graph +------------ + +(1 row) + +-- +-- End of test +-- diff --git a/regress/sql/cypher_with.sql b/regress/sql/cypher_with.sql index 623487b4c..95b18c506 100644 --- a/regress/sql/cypher_with.sql +++ b/regress/sql/cypher_with.sql @@ -17,20 +17,223 @@ * under the License. */ + \! cp -r regress/age_load/data regress/instance/data/age_load + LOAD 'age'; SET search_path TO ag_catalog; +-- +-- Load data +-- SELECT create_graph('cypher_with'); +SELECT create_vlabel('cypher_with','Country'); +SELECT load_labels_from_file('cypher_with', 'Country', + 'age_load/countries.csv'); + +SELECT create_vlabel('cypher_with','City'); +SELECT load_labels_from_file('cypher_with', 'City', + 'age_load/cities.csv'); + +SELECT create_elabel('cypher_with','has_city'); +SELECT load_edges_from_file('cypher_with', 'has_city', + 'age_load/edges.csv'); + +-- +-- Test WITH clause +-- + +SELECT count(*) FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m,b + RETURN m,b +$$) AS (City agtype, Country agtype); + +-- WITH/AS + SELECT * FROM cypher('cypher_with', $$ -WITH true AS b -RETURN b + MATCH (b:Country {iso2 : 'AT'}) + WITH b.name AS name, id(b) AS id + RETURN name,id +$$) AS (Country agtype, Country_id agtype); + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City {name: 'Zell'})-[]-(b:Country {iso2 : 'AT'}) + WITH b as country, count(*) AS foaf + WHERE foaf > 1 + RETURN country.name, foaf +$$) as (name agtype, foaf agtype); + +SELECT * FROM cypher('cypher_with', $$ + WITH true AS b + RETURN b $$) AS (b bool); +-- WITH/WHERE + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country{iso2:'BE'}) + WITH b,m + WHERE m.name='x' + RETURN m.name,b.iso2 +$$) AS ( "m.name" agtype, "b" agtype); + +SELECT * FROM cypher('cypher_with', $$ + MATCH (b:Country {iso2 : 'AT'}) + WITH b.name AS name, id(b) AS id + WHERE name = 'Austria' + RETURN name,id +$$) AS (Country agtype, Country_id agtype); + +SELECT * FROM cypher('cypher_with', $$ + MATCH (b:Country {iso2 : 'AT'}) + WITH b.name AS name, id(b) AS id + WHERE name = 'Austria' OR name = 'Kosovo' + RETURN name,id +$$) AS (Country agtype, Country_id agtype); + +SELECT * FROM cypher('cypher_with', $$ + MATCH p = (m:City)-[:has_city*1..2]->(b:Country {iso2 : 'AT'}) + WITH p, length(p) AS path_length + WHERE path_length > 1 + RETURN p +$$) AS (pattern agtype); + +-- MATCH/WHERE with WITH/WHERE + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WHERE b.name = 'Austria' + WITH m.name AS city,b.name AS country + WHERE city = 'Vienna' + RETURN city,country +$$) AS (City agtype, Country agtype); + +-- WITH/ORDER BY + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + ORDER BY id(m) DESC LIMIT 10 + RETURN id(city),city +$$) AS (id agtype, city agtype); + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City) + WITH m AS city + ORDER BY id(m) ASC LIMIT 10 + RETURN id(city),city.name +$$) AS (id agtype, names agtype); + +-- WITH/ORDER BY/DESC/WHERE + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + ORDER BY id(m) DESC LIMIT 10 + WHERE city.name = 'Zell' OR city.name = 'Umberg' + RETURN id(city),city.name,country.name +$$) AS (id agtype, city agtype, country agtype); + +-- multiple WITH clauses + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + WITH city LIMIT 10 + RETURN city.name +$$) AS (city agtype); + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + ORDER BY id(m) DESC LIMIT 10 + WITH city + WHERE city.name = 'Zell' + RETURN id(city),city.name +$$) AS (id agtype, city agtype); + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + WHERE country.name = 'Austria' + WITH city + ORDER BY id(city) DESC + WHERE city.name = 'Zell' + RETURN id(city),city.name +$$) AS (id agtype, city agtype); + -- Expression item must be aliased. + SELECT * FROM cypher('cypher_with', $$ -WITH 1 + 1 -RETURN i + WITH 1 + 1 + RETURN i $$) AS (i int); +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH id(m) + RETURN m +$$) AS (id agtype, city agtype); + +-- Reference undefined variable in WITH clause (should error out) + +SELECT count(*) FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m + RETURN m,b +$$) AS (City agtype, Country agtype); + +SELECT * FROM cypher('cypher_with', $$ + MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + WITH m AS city,b AS country + WHERE country.name = 'Austria' + WITH city + WHERE city.name = 'Zell' + RETURN id(city),country.name +$$) AS (id agtype, country agtype); + +-- Clean up + SELECT drop_graph('cypher_with', true); + +-- Issue 329 (should error out) + +SELECT create_graph('graph'); + +SELECT * FROM cypher('graph', $$ + CREATE (a:A)-[:incs]->(:C), (a)-[:incs]->(:C) + RETURN a +$$) AS (n agtype); + +SELECT * FROM cypher('graph', $$ + MATCH (a:A) + WHERE ID(a)=0 + WITH a + OPTIONAL MATCH (a)-[:incs]->(c)-[d:incs]-() + WITH a,c,COUNT(d) AS deps + WHERE deps<=1 + RETURN c,d +$$) AS (n agtype, d agtype); + +-- Issue 396 (should error out) + +SELECT * FROM cypher('graph',$$ + CREATE (v),(u),(w), + (v)-[:hasFriend]->(u), + (u)-[:hasFriend]->(w) +$$) as (a agtype); + +SELECT * FROM cypher('graph',$$ + MATCH p=(v)-[*1..2]->(u) + WITH p,length(p) AS path_length + RETURN v,path_length +$$) as (a agtype,b agtype); + +-- Clean up + +SELECT drop_graph('graph', true); + +-- +-- End of test +-- diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 466551115..380eef92b 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -114,7 +114,8 @@ static Query *transform_cypher_with(cypher_parsestate *cpstate, cypher_clause *clause); static Query *transform_cypher_clause_with_where(cypher_parsestate *cpstate, transform_method transform, - cypher_clause *clause); + cypher_clause *clause, + Node *where); // match clause static Query *transform_cypher_match(cypher_parsestate *cpstate, cypher_clause *clause); @@ -1067,7 +1068,7 @@ static Query * transform_cypher_call_stmt(cypher_parsestate *cpstate, return transform_cypher_clause_with_where(cpstate, transform_cypher_call_subquery, - clause); + clause, self->where); } return NULL; @@ -2194,7 +2195,7 @@ static Query *transform_cypher_with(cypher_parsestate *cpstate, wrapper->prev = clause->prev; return transform_cypher_clause_with_where(cpstate, transform_cypher_return, - wrapper); + wrapper, self->where); } static bool match_check_valid_label(cypher_match *match, @@ -2254,28 +2255,14 @@ static bool match_check_valid_label(cypher_match *match, return true; } - static Query *transform_cypher_clause_with_where(cypher_parsestate *cpstate, transform_method transform, - cypher_clause *clause) + cypher_clause *clause, Node *where) { ParseState *pstate = (ParseState *)cpstate; Query *query; Node *self = clause->self; - cypher_match *match_self; - cypher_call *call_self; - Node *where; - - if (is_ag_node(self, cypher_call)) - { - call_self = (cypher_call*) clause->self; - where = call_self->where; - } - else - { - match_self = (cypher_match*) clause->self; - where = match_self->where; - } + Node *where_qual = NULL; if (where) { @@ -2290,32 +2277,27 @@ static Query *transform_cypher_clause_with_where(cypher_parsestate *cpstate, rtindex = list_length(pstate->p_rtable); Assert(rtindex == 1); // rte is the only RangeTblEntry in pstate + /* + * add all the target entries in rte to the current target list to pass + * all the variables that are introduced in the previous clause to the + * next clause + */ query->targetList = expandRelAttrs(pstate, rte, rtindex, 0, -1); markTargetListOrigins(pstate, query->targetList); query->rtable = pstate->p_rtable; - if (is_ag_node(clause->self, cypher_call)) + if (!is_ag_node(self, cypher_match)) { - cypher_call *call = (cypher_call *)clause->self; - - if (call->where != NULL) - { - Expr *where_qual = NULL; - - where_qual = (Expr *)transform_cypher_expr(cpstate, call->where, - EXPR_KIND_WHERE); + where_qual = transform_cypher_expr(cpstate, where, + EXPR_KIND_WHERE); - where_qual = (Expr *)coerce_to_boolean(pstate, (Node *)where_qual, - "WHERE"); - query->jointree = makeFromExpr(pstate->p_joinlist, (Node *)where_qual); - } - } - else - { - query->jointree = makeFromExpr(pstate->p_joinlist, NULL); + where_qual = coerce_to_boolean(pstate, where_qual, + "WHERE"); } + + query->jointree = makeFromExpr(pstate->p_joinlist, where_qual); assign_query_collations(pstate, query); } else @@ -2352,7 +2334,8 @@ static Query *transform_cypher_match(cypher_parsestate *cpstate, } return transform_cypher_clause_with_where( - cpstate, transform_cypher_match_pattern, clause); + cpstate, transform_cypher_match_pattern, clause, + match_self->where); } /* diff --git a/src/backend/parser/cypher_expr.c b/src/backend/parser/cypher_expr.c index 8a276ffe5..f0bc9c8c7 100644 --- a/src/backend/parser/cypher_expr.c +++ b/src/backend/parser/cypher_expr.c @@ -318,16 +318,18 @@ static Node *transform_ColumnRef(cypher_parsestate *cpstate, ColumnRef *cref) } /* - * Try to find the columnRef as a transform_entity and extract - * the expr. + * If expr_kind is WHERE, Try to find the columnRef as a + * transform_entity and extract the expr. */ - te = find_variable(cpstate, colname) ; - if (te != NULL && te->expr != NULL) + if (pstate->p_expr_kind == EXPR_KIND_WHERE) { - node = (Node *)te->expr; - break; + te = find_variable(cpstate, colname) ; + if (te != NULL && te->expr != NULL) + { + node = (Node *)te->expr; + break; + } } - /* * Not known as a column of any range-table entry. * Try to find the name as a relation. Note that only From 88c44b9a1845092510abaae5053b01b46ad076e8 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed <85064039+MuhammadTahaNaveed@users.noreply.github.com> Date: Tue, 28 Feb 2023 01:23:31 +0500 Subject: [PATCH 138/191] Implement isEmpty() predicate function (#710) - Added isEmpty() predicate function to check if a List, map or string is empty. - Added regression tests for isEmpty() function. --- age--1.2.0.sql | 8 ++ regress/expected/cypher_match.out | 160 ++++++++++++++++++++++++++++++ regress/sql/cypher_match.sql | 97 ++++++++++++++++++ src/backend/utils/adt/agtype.c | 81 +++++++++++++++ 4 files changed, 346 insertions(+) diff --git a/age--1.2.0.sql b/age--1.2.0.sql index e34b3c97c..e50f1a628 100644 --- a/age--1.2.0.sql +++ b/age--1.2.0.sql @@ -3551,6 +3551,14 @@ STABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; +CREATE FUNCTION ag_catalog.age_isempty(agtype) +RETURNS boolean +LANGUAGE c +IMMUTABLE +RETURNS NULL ON NULL INPUT +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + CREATE FUNCTION ag_catalog.age_label(agtype) RETURNS agtype LANGUAGE c diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index 6ff9a3c6e..9ec4112d6 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -816,6 +816,166 @@ AS (u agtype); ERROR: syntax error at or near ")" LINE 2: $$MATCH (u) WHERE EXISTS(u) RETURN u$$) ^ +-- +-- MATCH with WHERE isEmpty(property) +-- +SELECT create_graph('for_isEmpty'); +NOTICE: graph "for_isEmpty" has been created + create_graph +-------------- + +(1 row) + +-- Create vertices +SELECT * FROM cypher('for_isEmpty', + $$CREATE (u:for_pred {id:1, type: "empty", list: [], map: {}, string: ""}), + (v:for_pred {id:2, type: "filled", list: [1], map: {a:1}, string: "a"}), + (w:for_pred)$$) +AS (a agtype); + a +--- +(0 rows) + +-- Match vertices with empty properties +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u.list) RETURN properties(u) $$) +AS (u agtype); + u +----------------------------------------------------------------- + {"id": 1, "map": {}, "list": [], "type": "empty", "string": ""} +(1 row) + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u.map) RETURN properties(u) $$) +AS (u agtype); + u +----------------------------------------------------------------- + {"id": 1, "map": {}, "list": [], "type": "empty", "string": ""} +(1 row) + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u.string) RETURN properties(u) $$) +AS (u agtype); + u +----------------------------------------------------------------- + {"id": 1, "map": {}, "list": [], "type": "empty", "string": ""} +(1 row) + +-- Match vertices with non-empty properties +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE NOT isEmpty(u.list) RETURN properties(u) $$) +AS (u agtype); + u +-------------------------------------------------------------------------- + {"id": 2, "map": {"a": 1}, "list": [1], "type": "filled", "string": "a"} +(1 row) + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE NOT isEmpty(u.map) RETURN properties(u) $$) +AS (u agtype); + u +-------------------------------------------------------------------------- + {"id": 2, "map": {"a": 1}, "list": [1], "type": "filled", "string": "a"} +(1 row) + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE NOT isEmpty(u.string) RETURN properties(u) $$) +AS (u agtype); + u +-------------------------------------------------------------------------- + {"id": 2, "map": {"a": 1}, "list": [1], "type": "filled", "string": "a"} +(1 row) + +-- Match vertices with no properties +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(properties(u)) RETURN properties(u) $$) +AS (u agtype); + u +---- + {} +(1 row) + +-- Match vertices with properties +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE NOT isEmpty(properties(u)) RETURN properties(u) $$) +AS (u agtype); + u +-------------------------------------------------------------------------- + {"id": 1, "map": {}, "list": [], "type": "empty", "string": ""} + {"id": 2, "map": {"a": 1}, "list": [1], "type": "filled", "string": "a"} +(2 rows) + +-- Match vertices with null property (should return nothing since WHERE null) +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u.tree) RETURN properties(u) $$) +AS (u agtype); + u +--- +(0 rows) + +-- Match and Return bool +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u.list) RETURN isEmpty(u.list), u.type $$) +AS (b agtype, type agtype); + b | type +------+--------- + true | "empty" +(1 row) + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE NOT isEmpty(u.list) RETURN isEmpty(u.list), u.type $$) +AS (b agtype, type agtype); + b | type +-------+---------- + false | "filled" +(1 row) + +-- Return null on null +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) RETURN isEmpty(u.tree) $$) +AS (b agtype); + b +--- + + + +(3 rows) + +-- Should give an error +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u) RETURN properties(u) $$) +AS (u agtype); +ERROR: isEmpty() unsupported argument, expected a List, Map, or String +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(1) RETURN properties(u) $$) +AS (u agtype); +ERROR: isEmpty() unsupported argument, expected a List, Map, or String +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(1,2,3) RETURN properties(u) $$) +AS (u agtype); +ERROR: function ag_catalog.age_isempty(agtype, agtype, agtype) does not exist +LINE 2: $$MATCH (u:for_pred) WHERE isEmpty(1,2,3) RETURN properties... + ^ +HINT: No function matches the given name and argument types. You might need to add explicit type casts. +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty() RETURN properties(u) $$) +AS (u agtype); +ERROR: function ag_catalog.age_isempty() does not exist +LINE 2: $$MATCH (u:for_pred) WHERE isEmpty() RETURN properties(u) $... + ^ +HINT: No function matches the given name and argument types. You might need to add explicit type casts. +-- clean up +SELECT drop_graph('for_isEmpty', true); +NOTICE: drop cascades to 3 other objects +DETAIL: drop cascades to table "for_isEmpty"._ag_label_vertex +drop cascades to table "for_isEmpty"._ag_label_edge +drop cascades to table "for_isEmpty".for_pred +NOTICE: graph "for_isEmpty" has been dropped + drop_graph +------------ + +(1 row) + -- --Distinct -- diff --git a/regress/sql/cypher_match.sql b/regress/sql/cypher_match.sql index c4c48bf76..aeed9f386 100644 --- a/regress/sql/cypher_match.sql +++ b/regress/sql/cypher_match.sql @@ -415,6 +415,103 @@ SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE EXISTS(u) RETURN u$$) AS (u agtype); +-- +-- MATCH with WHERE isEmpty(property) +-- + +SELECT create_graph('for_isEmpty'); + +-- Create vertices + +SELECT * FROM cypher('for_isEmpty', + $$CREATE (u:for_pred {id:1, type: "empty", list: [], map: {}, string: ""}), + (v:for_pred {id:2, type: "filled", list: [1], map: {a:1}, string: "a"}), + (w:for_pred)$$) +AS (a agtype); + +-- Match vertices with empty properties + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u.list) RETURN properties(u) $$) +AS (u agtype); + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u.map) RETURN properties(u) $$) +AS (u agtype); + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u.string) RETURN properties(u) $$) +AS (u agtype); + +-- Match vertices with non-empty properties + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE NOT isEmpty(u.list) RETURN properties(u) $$) +AS (u agtype); + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE NOT isEmpty(u.map) RETURN properties(u) $$) +AS (u agtype); + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE NOT isEmpty(u.string) RETURN properties(u) $$) +AS (u agtype); + +-- Match vertices with no properties + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(properties(u)) RETURN properties(u) $$) +AS (u agtype); + +-- Match vertices with properties + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE NOT isEmpty(properties(u)) RETURN properties(u) $$) +AS (u agtype); + +-- Match vertices with null property (should return nothing since WHERE null) + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u.tree) RETURN properties(u) $$) +AS (u agtype); + +-- Match and Return bool + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u.list) RETURN isEmpty(u.list), u.type $$) +AS (b agtype, type agtype); + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE NOT isEmpty(u.list) RETURN isEmpty(u.list), u.type $$) +AS (b agtype, type agtype); + +-- Return null on null + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) RETURN isEmpty(u.tree) $$) +AS (b agtype); + +-- Should give an error + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(u) RETURN properties(u) $$) +AS (u agtype); + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(1) RETURN properties(u) $$) +AS (u agtype); + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty(1,2,3) RETURN properties(u) $$) +AS (u agtype); + +SELECT * FROM cypher('for_isEmpty', + $$MATCH (u:for_pred) WHERE isEmpty() RETURN properties(u) $$) +AS (u agtype); + +-- clean up +SELECT drop_graph('for_isEmpty', true); + -- --Distinct -- diff --git a/src/backend/utils/adt/agtype.c b/src/backend/utils/adt/agtype.c index 22bf462c7..ed4bf4d47 100644 --- a/src/backend/utils/adt/agtype.c +++ b/src/backend/utils/adt/agtype.c @@ -5508,6 +5508,87 @@ Datum age_exists(PG_FUNCTION_ARGS) PG_RETURN_BOOL(true); } +PG_FUNCTION_INFO_V1(age_isempty); +/* + * Executor function for isEmpty(property). + */ + +Datum age_isempty(PG_FUNCTION_ARGS) +{ + Datum *args; + Datum arg; + bool *nulls; + Oid *types; + char *string = NULL; + Oid type; + int64 result; + + /* extract argument values */ + extract_variadic_args(fcinfo, 0, true, &args, &types, &nulls); + + /* + * isEmpty() supports cstring, text, or the agtype string or list input + */ + arg = args[0]; + type = types[0]; + + if (type == CSTRINGOID) + { + string = DatumGetCString(arg); + result = strlen(string); + } + else if (type == TEXTOID) + { + string = text_to_cstring(DatumGetTextPP(arg)); + result = strlen(string); + } + else if (type == AGTYPEOID) + { + agtype *agt_arg; + + /* get the agtype argument */ + agt_arg = DATUM_GET_AGTYPE_P(arg); + + if (AGT_ROOT_IS_SCALAR(agt_arg)) + { + agtype_value *agtv_value; + + agtv_value = get_ith_agtype_value_from_container(&agt_arg->root, 0); + + if (agtv_value->type == AGTV_STRING) + { + result = agtv_value->val.string.len; + } + else + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("isEmpty() unsupported argument, expected a List, Map, or String"))); + } + } + else if (AGT_ROOT_IS_ARRAY(agt_arg)) + { + result = AGT_ROOT_COUNT(agt_arg); + } + else if (AGT_ROOT_IS_OBJECT(agt_arg)) + { + result = AGT_ROOT_COUNT(agt_arg); + } + else + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("isEmpty() unsupported argument, expected a List, Map, or String"))); + } + } + else + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("isEmpty() unsupported argument, expected a List, Map, or String"))); + } + + /* build the result */ + PG_RETURN_BOOL(result == 0); +} + PG_FUNCTION_INFO_V1(age_label); /* * Executor function for label(edge/vertex). From 1b226efcdabe42a71c86c0484b8ae46059503875 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Aur=C3=A9lio=20Silva=20de=20Souza=20J=C3=BAnior?= <57829631+markgomer@users.noreply.github.com> Date: Tue, 28 Feb 2023 21:32:08 -0300 Subject: [PATCH 139/191] Barbell regress tests (#708) * Fixed bug where the system was crashing when graph_name was passed as NULL. * added checks for possible NULL arguments before calling create_complete_graph. * Added regress tests for Barbell graph generation --- regress/expected/graph_generation.out | 111 ++++++++++++++++++++++++++ regress/sql/graph_generation.sql | 27 +++++++ src/backend/utils/graph_generation.c | 57 ++++++++----- 3 files changed, 174 insertions(+), 21 deletions(-) diff --git a/regress/expected/graph_generation.out b/regress/expected/graph_generation.out index 118ab6e9e..b9ed65b12 100644 --- a/regress/expected/graph_generation.out +++ b/regress/expected/graph_generation.out @@ -109,3 +109,114 @@ NOTICE: graph "gp2" has been dropped (1 row) +-- Tests for barbell graph generation +SELECT * FROM age_create_barbell_graph('gp1',5,0,'vertices',NULL,'edges',NULL); +NOTICE: graph "gp1" has been created +NOTICE: VLabel "vertices" has been created +NOTICE: ELabel "edges" has been created + age_create_barbell_graph +-------------------------- + +(1 row) + +SELECT COUNT(*) FROM gp1."edges"; + count +------- + 21 +(1 row) + +SELECT COUNT(*) FROM gp1."vertices"; + count +------- + 10 +(1 row) + +SELECT * FROM cypher('gp1', $$MATCH (a)-[e]->(b) RETURN e$$) as (n agtype); + n +---------------------------------------------------------------------------------------------------------------------------- + {"id": 1125899906842625, "label": "edges", "end_id": 844424930131970, "start_id": 844424930131969, "properties": {}}::edge + {"id": 1125899906842629, "label": "edges", "end_id": 844424930131971, "start_id": 844424930131970, "properties": {}}::edge + {"id": 1125899906842626, "label": "edges", "end_id": 844424930131971, "start_id": 844424930131969, "properties": {}}::edge + {"id": 1125899906842627, "label": "edges", "end_id": 844424930131972, "start_id": 844424930131969, "properties": {}}::edge + {"id": 1125899906842632, "label": "edges", "end_id": 844424930131972, "start_id": 844424930131971, "properties": {}}::edge + {"id": 1125899906842630, "label": "edges", "end_id": 844424930131972, "start_id": 844424930131970, "properties": {}}::edge + {"id": 1125899906842634, "label": "edges", "end_id": 844424930131973, "start_id": 844424930131972, "properties": {}}::edge + {"id": 1125899906842628, "label": "edges", "end_id": 844424930131973, "start_id": 844424930131969, "properties": {}}::edge + {"id": 1125899906842631, "label": "edges", "end_id": 844424930131973, "start_id": 844424930131970, "properties": {}}::edge + {"id": 1125899906842633, "label": "edges", "end_id": 844424930131973, "start_id": 844424930131971, "properties": {}}::edge + {"id": 1125899906842635, "label": "edges", "end_id": 844424930131975, "start_id": 844424930131974, "properties": {}}::edge + {"id": 1125899906842639, "label": "edges", "end_id": 844424930131976, "start_id": 844424930131975, "properties": {}}::edge + {"id": 1125899906842636, "label": "edges", "end_id": 844424930131976, "start_id": 844424930131974, "properties": {}}::edge + {"id": 1125899906842637, "label": "edges", "end_id": 844424930131977, "start_id": 844424930131974, "properties": {}}::edge + {"id": 1125899906842642, "label": "edges", "end_id": 844424930131977, "start_id": 844424930131976, "properties": {}}::edge + {"id": 1125899906842640, "label": "edges", "end_id": 844424930131977, "start_id": 844424930131975, "properties": {}}::edge + {"id": 1125899906842644, "label": "edges", "end_id": 844424930131978, "start_id": 844424930131977, "properties": {}}::edge + {"id": 1125899906842638, "label": "edges", "end_id": 844424930131978, "start_id": 844424930131974, "properties": {}}::edge + {"id": 1125899906842641, "label": "edges", "end_id": 844424930131978, "start_id": 844424930131975, "properties": {}}::edge + {"id": 1125899906842643, "label": "edges", "end_id": 844424930131978, "start_id": 844424930131976, "properties": {}}::edge + {"id": 1125899906842645, "label": "edges", "end_id": 844424930131978, "start_id": 844424930131969, "properties": {}}::edge +(21 rows) + +SELECT * FROM age_create_barbell_graph('gp1',5,0,'vertices',NULL,'edges',NULL); + age_create_barbell_graph +-------------------------- + +(1 row) + +SELECT COUNT(*) FROM gp1."edges"; + count +------- + 42 +(1 row) + +SELECT COUNT(*) FROM gp1."vertices"; + count +------- + 20 +(1 row) + +SELECT * FROM age_create_barbell_graph('gp2',5,10,'vertices',NULL,'edges',NULL); +NOTICE: graph "gp2" has been created +NOTICE: VLabel "vertices" has been created +NOTICE: ELabel "edges" has been created + age_create_barbell_graph +-------------------------- + +(1 row) + +-- SHOULD FAIL +SELECT * FROM age_create_barbell_graph(NULL,NULL,NULL,NULL,NULL,NULL,NULL); +ERROR: Graph name cannot be NULL +SELECT * FROM age_create_barbell_graph('gp2',NULL,0,'vertices',NULL,'edges',NULL); +ERROR: Graph size cannot be NULL or lower than 3 +SELECT * FROM age_create_barbell_graph('gp3',5,NULL,'vertices',NULL,'edges',NULL); +ERROR: Bridge size cannot be NULL or lower than 0 +SELECT * FROM age_create_barbell_graph('gp4',NULL,0,'vertices',NULL,'edges',NULL); +ERROR: Graph size cannot be NULL or lower than 3 +SELECT * FROM age_create_barbell_graph('gp5',5,0,'vertices',NULL,NULL,NULL); +ERROR: edge label can not be NULL +-- DROPPING GRAPHS +SELECT drop_graph('gp1', true); +NOTICE: drop cascades to 4 other objects +DETAIL: drop cascades to table gp1._ag_label_vertex +drop cascades to table gp1._ag_label_edge +drop cascades to table gp1.vertices +drop cascades to table gp1.edges +NOTICE: graph "gp1" has been dropped + drop_graph +------------ + +(1 row) + +SELECT drop_graph('gp2', true); +NOTICE: drop cascades to 4 other objects +DETAIL: drop cascades to table gp2._ag_label_vertex +drop cascades to table gp2._ag_label_edge +drop cascades to table gp2.vertices +drop cascades to table gp2.edges +NOTICE: graph "gp2" has been dropped + drop_graph +------------ + +(1 row) + diff --git a/regress/sql/graph_generation.sql b/regress/sql/graph_generation.sql index 1ad90f5a3..32fa56dd5 100644 --- a/regress/sql/graph_generation.sql +++ b/regress/sql/graph_generation.sql @@ -45,3 +45,30 @@ SELECT * FROM create_complete_graph(NULL,NULL,NULL); SELECT drop_graph('gp1', true); SELECT drop_graph('gp2', true); + +-- Tests for barbell graph generation +SELECT * FROM age_create_barbell_graph('gp1',5,0,'vertices',NULL,'edges',NULL); + +SELECT COUNT(*) FROM gp1."edges"; +SELECT COUNT(*) FROM gp1."vertices"; + +SELECT * FROM cypher('gp1', $$MATCH (a)-[e]->(b) RETURN e$$) as (n agtype); + +SELECT * FROM age_create_barbell_graph('gp1',5,0,'vertices',NULL,'edges',NULL); + +SELECT COUNT(*) FROM gp1."edges"; +SELECT COUNT(*) FROM gp1."vertices"; + +SELECT * FROM age_create_barbell_graph('gp2',5,10,'vertices',NULL,'edges',NULL); + +-- SHOULD FAIL +SELECT * FROM age_create_barbell_graph(NULL,NULL,NULL,NULL,NULL,NULL,NULL); +SELECT * FROM age_create_barbell_graph('gp2',NULL,0,'vertices',NULL,'edges',NULL); +SELECT * FROM age_create_barbell_graph('gp3',5,NULL,'vertices',NULL,'edges',NULL); +SELECT * FROM age_create_barbell_graph('gp4',NULL,0,'vertices',NULL,'edges',NULL); +SELECT * FROM age_create_barbell_graph('gp5',5,0,'vertices',NULL,NULL,NULL); + +-- DROPPING GRAPHS +SELECT drop_graph('gp1', true); +SELECT drop_graph('gp2', true); + diff --git a/src/backend/utils/graph_generation.c b/src/backend/utils/graph_generation.c index 80ef85f29..b40ef07e2 100644 --- a/src/backend/utils/graph_generation.c +++ b/src/backend/utils/graph_generation.c @@ -273,25 +273,23 @@ Datum age_create_barbell_graph(PG_FUNCTION_ARGS) arguments = fcinfo; - // create two separate complete graphs - DirectFunctionCall4(create_complete_graph, arguments->arg[0], - arguments->arg[1], - arguments->arg[5], - arguments->arg[3]); - DirectFunctionCall4(create_complete_graph, arguments->arg[0], - arguments->arg[1], - arguments->arg[5], - arguments->arg[3]); - - // Handling remaining arguments - /* - * graph_name: doesn't need to validate, since the create_complete_graph - * function already does that. - */ + // Checking for possible NULL arguments + // Name graph_name + if (PG_ARGISNULL(0)) + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("Graph name cannot be NULL"))); + } graph_name = PG_GETARG_NAME(0); graph_name_str = NameStr(*graph_name); - graph_oid = get_graph_oid(graph_name_str); + // int graph size (number of nodes in each complete graph) + if (PG_ARGISNULL(1) && PG_GETARG_INT32(1) < 3) + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("Graph size cannot be NULL or lower than 3"))); + } + /* * int64 bridge_size: currently only stays at zero. * to do: implement bridge with variable number of nodes. @@ -299,7 +297,7 @@ Datum age_create_barbell_graph(PG_FUNCTION_ARGS) if (PG_ARGISNULL(2) || PG_GETARG_INT32(2) < 0 ) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("Bridge size must not be NULL or lower than 0"))); + errmsg("Bridge size cannot be NULL or lower than 0"))); } // node label: if null, gets default label, which is "_ag_label_vertex" @@ -312,14 +310,31 @@ Datum age_create_barbell_graph(PG_FUNCTION_ARGS) node_label_name = PG_GETARG_NAME(3); } node_label_str = NameStr(*node_label_name); - node_label_id = get_label_id(node_label_str, graph_oid); /* - * edge_label: doesn't need to validate, since the create_complete_graph - * function already does that. - */ + * Name edge_label + */ + if (PG_ARGISNULL(5)) + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("edge label can not be NULL"))); + } edge_label_name = PG_GETARG_NAME(5); edge_label_str = NameStr(*edge_label_name); + + + // create two separate complete graphs + DirectFunctionCall4(create_complete_graph, arguments->arg[0], + arguments->arg[1], + arguments->arg[5], + arguments->arg[3]); + DirectFunctionCall4(create_complete_graph, arguments->arg[0], + arguments->arg[1], + arguments->arg[5], + arguments->arg[3]); + + graph_oid = get_graph_oid(graph_name_str); + node_label_id = get_label_id(node_label_str, graph_oid); edge_label_id = get_label_id(edge_label_str, graph_oid); /* From 8d1febe7819fd128acc4afcf2c299097df16ae33 Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Wed, 1 Mar 2023 10:43:30 -0800 Subject: [PATCH 140/191] Fix cypher function input argument checks (issue #718) Fixed issue #718 which was due to a lack of input checks for an edge case and added regression tests. Addition of the driver parameter patch caused 2 additional edge cases that needed to be checked - SELECT * FROM cypher() AS (result agtype); SELECT * FROM cypher(NULL) AS (result agtype); --- regress/expected/analyze.out | 5 +++++ regress/sql/analyze.sql | 4 ++++ src/backend/parser/cypher_analyze.c | 9 +++++++++ 3 files changed, 18 insertions(+) diff --git a/regress/expected/analyze.out b/regress/expected/analyze.out index 5b248385a..676dab9da 100644 --- a/regress/expected/analyze.out +++ b/regress/expected/analyze.out @@ -119,6 +119,11 @@ SELECT * FROM cypher(NULL, NULL) AS (result agtype); ERROR: unexpected character at or near "$" LINE 1: SELECT * FROM cypher(NULL, NULL) AS (result agtype); ^ +-- should return errors +SELECT * FROM cypher() AS (result agtype); +ERROR: cypher function requires a minimum of 2 arguments +SELECT * FROM cypher(NULL) AS (result agtype); +ERROR: cypher function requires a minimum of 2 arguments -- drop graphs SELECT * FROM drop_graph('analyze', true); NOTICE: drop cascades to 2 other objects diff --git a/regress/sql/analyze.sql b/regress/sql/analyze.sql index 881ef3ffd..1da70b239 100644 --- a/regress/sql/analyze.sql +++ b/regress/sql/analyze.sql @@ -52,6 +52,10 @@ SELECT * FROM cypher(NULL, NULL) AS (result agtype); SELECT * FROM age_prepare_cypher('analyze', '$$ $$'); SELECT * FROM cypher(NULL, NULL) AS (result agtype); +-- should return errors +SELECT * FROM cypher() AS (result agtype); +SELECT * FROM cypher(NULL) AS (result agtype); + -- drop graphs SELECT * FROM drop_graph('analyze', true); diff --git a/src/backend/parser/cypher_analyze.c b/src/backend/parser/cypher_analyze.c index b99ff0a90..425b1167b 100644 --- a/src/backend/parser/cypher_analyze.c +++ b/src/backend/parser/cypher_analyze.c @@ -331,6 +331,15 @@ static void convert_cypher_to_subquery(RangeTblEntry *rte, ParseState *pstate) parser_errposition(pstate, exprLocation((Node *)funcexpr)))); } + /* verify that we have 2 input parameters as it is possible to get 1 or 0 */ + if (funcexpr->args == NULL || list_length(funcexpr->args) < 2) + { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("cypher function requires a minimum of 2 arguments"), + parser_errposition(pstate, -1))); + } + /* get our first 2 arguments */ arg1 = linitial(funcexpr->args); arg2 = lsecond(funcexpr->args); From 4c8ee36ae36801a8035de28239fd87f9f688111d Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Fri, 3 Mar 2023 00:16:18 +0500 Subject: [PATCH 141/191] Fix Issue #693 - server termination from return exists(path) (#721) - Updated assert to pass EXPR_KIND_SELECT_TARGET. - Added regression tests. --- regress/expected/cypher_match.out | 96 ++++++++++++++++++++++++++++++ regress/sql/cypher_match.sql | 23 +++++++ src/backend/parser/cypher_clause.c | 1 + 3 files changed, 120 insertions(+) diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index 9ec4112d6..8f325cbe6 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -720,6 +720,57 @@ AS (u agtype, e agtype, v agtype); {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex | {"id": 3096224743817217, "label": "self", "end_id": 2814749767106561, "start_id": 2814749767106561, "properties": {}}::edge | {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex (1 row) +-- Return exists(pattern) +SELECT * FROM cypher('cypher_match', + $$MATCH (u) RETURN EXISTS((u)-[]->()) $$) +AS (exists agtype); + exists +-------- + false + false + false + false + false + true + true + false + false + true + false + true + false + true + true +(15 rows) + +SELECT * FROM cypher('cypher_match', + $$MATCH p=(u)-[e]->(v) RETURN EXISTS((p)) $$) +AS (exists agtype); + exists +-------- + true + true + true + true + true + true + true +(7 rows) + +SELECT * FROM cypher('cypher_match', + $$MATCH (u)-[e]->(v) RETURN EXISTS((u)-[e]->(v)-[e]->(u))$$) +AS (exists agtype); + exists +-------- + false + false + false + false + false + false + false +(7 rows) + -- These should error -- Bad pattern SELECT * FROM cypher('cypher_match', @@ -809,6 +860,51 @@ AS (u agtype); {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex (1 row) +-- Return exists(property) +SELECT * FROM cypher('cypher_match', + $$MATCH (u) RETURN EXISTS(u.id), properties(u) $$) +AS (exists agtype, properties agtype); + exists | properties +--------+------------------------------------------------------------------------------------------------------------- + false | {"int_key": 1, "map_key": {"key": "value"}, "list_key": [1, 2, 3], "float_key": 3.14, "string_key": "test"} + false | {"lst": [1, null, 3.14, "string", {"key": "value"}, []]} + false | {} + false | {"i": 0} + false | {"i": 1} + true | {"id": "initial"} + true | {"id": "middle"} + true | {"id": "end"} + true | {"id": "initial"} + true | {"id": "middle"} + true | {"id": "end"} + true | {"id": "initial"} + true | {"id": "middle"} + true | {"id": "end"} + true | {"id": "initial"} +(15 rows) + +SELECT * FROM cypher('cypher_match', + $$MATCH (u) RETURN EXISTS(u.name), properties(u) $$) +AS (exists agtype, properties agtype); + exists | properties +--------+------------------------------------------------------------------------------------------------------------- + false | {"int_key": 1, "map_key": {"key": "value"}, "list_key": [1, 2, 3], "float_key": 3.14, "string_key": "test"} + false | {"lst": [1, null, 3.14, "string", {"key": "value"}, []]} + false | {} + false | {"i": 0} + false | {"i": 1} + false | {"id": "initial"} + false | {"id": "middle"} + false | {"id": "end"} + false | {"id": "initial"} + false | {"id": "middle"} + false | {"id": "end"} + false | {"id": "initial"} + false | {"id": "middle"} + false | {"id": "end"} + false | {"id": "initial"} +(15 rows) + -- should give an error SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE EXISTS(u) RETURN u$$) diff --git a/regress/sql/cypher_match.sql b/regress/sql/cypher_match.sql index aeed9f386..70f638df2 100644 --- a/regress/sql/cypher_match.sql +++ b/regress/sql/cypher_match.sql @@ -372,6 +372,20 @@ SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((u)-[e]->(u)) AND EXISTS((v)-[e]->(v)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); +-- Return exists(pattern) + +SELECT * FROM cypher('cypher_match', + $$MATCH (u) RETURN EXISTS((u)-[]->()) $$) +AS (exists agtype); + +SELECT * FROM cypher('cypher_match', + $$MATCH p=(u)-[e]->(v) RETURN EXISTS((p)) $$) +AS (exists agtype); + +SELECT * FROM cypher('cypher_match', + $$MATCH (u)-[e]->(v) RETURN EXISTS((u)-[e]->(v)-[e]->(u))$$) +AS (exists agtype); + -- These should error -- Bad pattern SELECT * FROM cypher('cypher_match', @@ -410,6 +424,15 @@ SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE EXISTS(u.id) AND EXISTS((u)-[]->(u)) RETURN u$$) AS (u agtype); +-- Return exists(property) +SELECT * FROM cypher('cypher_match', + $$MATCH (u) RETURN EXISTS(u.id), properties(u) $$) +AS (exists agtype, properties agtype); + +SELECT * FROM cypher('cypher_match', + $$MATCH (u) RETURN EXISTS(u.name), properties(u) $$) +AS (exists agtype, properties agtype); + -- should give an error SELECT * FROM cypher('cypher_match', $$MATCH (u) WHERE EXISTS(u) RETURN u$$) diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 380eef92b..e1e6c94be 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -5142,6 +5142,7 @@ transform_cypher_clause_as_subquery(cypher_parsestate *cpstate, Assert(pstate->p_expr_kind == EXPR_KIND_NONE || pstate->p_expr_kind == EXPR_KIND_OTHER || pstate->p_expr_kind == EXPR_KIND_WHERE || + pstate->p_expr_kind == EXPR_KIND_SELECT_TARGET || pstate->p_expr_kind == EXPR_KIND_FROM_SUBSELECT); /* From ef82b9dd641c3dde0ff92ed6a0a1d33b66cfb448 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Fri, 3 Mar 2023 00:22:46 +0500 Subject: [PATCH 142/191] Implemented CI test for nodejs driver (#720) * Modify nodejs driver tests - Modified connection params to connect with running docker instance. - Fixed failing tests by modifying the expected outcomes. * Include asf header as key/value to avoid EJSONPARSE error - "//" key will never be used by npm for any purpose, and is reserved for comments. * Implement CI test for nodejs driver --- .github/workflows/nodejs-driver.yaml | 36 +++++++++++++++++ drivers/docker-compose.yml | 2 +- drivers/nodejs/package.json | 37 +++++++++-------- drivers/nodejs/test/index.test.ts | 59 ++++++++++++++++++---------- 4 files changed, 94 insertions(+), 40 deletions(-) create mode 100644 .github/workflows/nodejs-driver.yaml diff --git a/.github/workflows/nodejs-driver.yaml b/.github/workflows/nodejs-driver.yaml new file mode 100644 index 000000000..f812e2c33 --- /dev/null +++ b/.github/workflows/nodejs-driver.yaml @@ -0,0 +1,36 @@ +name: Nodejs Driver Tests + +on: + push: + branches: [ "master", "PG11" ] + + pull_request: + branches: [ "master", "PG11" ] + +jobs: + build: + runs-on: ubuntu-latest + + defaults: + run: + working-directory: drivers/nodejs/ + + steps: + - uses: actions/checkout@v3 + + - name: Run apache/age docker image + run: docker-compose up -d + + - name: Set up Node + uses: actions/setup-node@v3 + with: + node-version: latest + + - name: Install dependencies + run: npm install + + - name: Build + run: npm run build + + - name: Test + run: npm test \ No newline at end of file diff --git a/drivers/docker-compose.yml b/drivers/docker-compose.yml index 668eb19d3..8bdf00318 100644 --- a/drivers/docker-compose.yml +++ b/drivers/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.3" services: db: - image: apache/age + image: apache/age:latest environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=agens diff --git a/drivers/nodejs/package.json b/drivers/nodejs/package.json index db385eefb..9f88bc2ba 100644 --- a/drivers/nodejs/package.json +++ b/drivers/nodejs/package.json @@ -1,23 +1,22 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - { + "//": [ + "Licensed to the Apache Software Foundation (ASF) under one", + "or more contributor license agreements. See the NOTICE file", + "distributed with this work for additional information", + "regarding copyright ownership. The ASF licenses this file", + "to you under the Apache License, Version 2.0 (the", + "\"License\"); you may not use this file except in compliance", + "with the License. You may obtain a copy of the License at", + "", + "http://www.apache.org/licenses/LICENSE-2.0", + "", + "Unless required by applicable law or agreed to in writing,", + "software distributed under the License is distributed on an", + "\"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY", + "KIND, either express or implied. See the License for the", + "specific language governing permissions and limitations", + "under the License." + ], "name": "pg-age", "version": "1.0.0-alpha", "main": "dist/index.js", diff --git a/drivers/nodejs/test/index.test.ts b/drivers/nodejs/test/index.test.ts index 60f9e2fef..ea386ddaa 100644 --- a/drivers/nodejs/test/index.test.ts +++ b/drivers/nodejs/test/index.test.ts @@ -24,8 +24,8 @@ const config = { user: 'postgres', host: '127.0.0.1', database: 'postgres', - password: 'postgres', - port: 25432 + password: 'agens', + port: 5432 } const testGraphName = 'age-test' @@ -59,25 +59,44 @@ describe('Pre-connected Connection', () => { $$) as (a agtype); `)! expect(results.rows).toStrictEqual( - [{ - a: { - id: 844424930131969, - label: 'Part', - properties: { part_num: '123' } + [ + { + a : new Map(Object.entries({ + id: 844424930131969, + label: 'Part', + properties: new Map(Object.entries({ + part_num: '123' + })) + })), + }, + { + a : new Map(Object.entries({ + id: 844424930131970, + label: 'Part', + properties: new Map(Object.entries({ + part_num: '345' + })) + })), + }, + { + a : new Map(Object.entries({ + id: 844424930131971, + label: 'Part', + properties: new Map(Object.entries({ + part_num: '456' + })) + })), + }, + { + a : new Map(Object.entries({ + id: 844424930131972, + label: 'Part', + properties: new Map(Object.entries({ + part_num: '789' + })) + })), } - }, { - a: { - id: 844424930131970, - label: 'Part', - properties: { part_num: '345' } - } - }, { - a: { - id: 844424930131971, - label: 'Part', - properties: { part_num: '456' } - } - }, { a: { id: 844424930131972, label: 'Part', properties: { part_num: '789' } } }] + ] ) }) }) From 9dbdde99ba326a9b469a606cb773e0b766330df4 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Fri, 3 Mar 2023 23:41:55 +0500 Subject: [PATCH 143/191] Update regression tests for cypher_with (#725) - Used a small dataset for regression tests. --- regress/expected/cypher_with.out | 408 ++++++++++++++----------------- regress/sql/cypher_with.sql | 207 ++++++++-------- 2 files changed, 286 insertions(+), 329 deletions(-) diff --git a/regress/expected/cypher_with.out b/regress/expected/cypher_with.out index 1166fff36..e5f82aa21 100644 --- a/regress/expected/cypher_with.out +++ b/regress/expected/cypher_with.out @@ -16,7 +16,6 @@ * specific language governing permissions and limitations * under the License. */ - \! cp -r regress/age_load/data regress/instance/data/age_load LOAD 'age'; SET search_path TO ag_catalog; -- @@ -29,82 +28,71 @@ NOTICE: graph "cypher_with" has been created (1 row) -SELECT create_vlabel('cypher_with','Country'); -NOTICE: VLabel "Country" has been created - create_vlabel ---------------- - -(1 row) - -SELECT load_labels_from_file('cypher_with', 'Country', - 'age_load/countries.csv'); - load_labels_from_file ------------------------ - -(1 row) - -SELECT create_vlabel('cypher_with','City'); -NOTICE: VLabel "City" has been created - create_vlabel ---------------- - -(1 row) - -SELECT load_labels_from_file('cypher_with', 'City', - 'age_load/cities.csv'); - load_labels_from_file ------------------------ - -(1 row) - -SELECT create_elabel('cypher_with','has_city'); -NOTICE: ELabel "has_city" has been created - create_elabel ---------------- - -(1 row) - -SELECT load_edges_from_file('cypher_with', 'has_city', - 'age_load/edges.csv'); - load_edges_from_file ----------------------- - -(1 row) +SELECT * FROM cypher('cypher_with', $$ + CREATE (andres {name : 'Andres', age : 36}), + (caesar {name : 'Caesar', age : 25}), + (bossman {name : 'Bossman', age : 55}), + (david {name : 'David', age : 35}), + (george {name : 'George', age : 37}), + (andres)-[:BLOCKS]->(caesar), + (andres)-[:KNOWS]->(bossman), + (caesar)-[:KNOWS]->(george), + (bossman)-[:BLOCKS]->(david), + (bossman)-[:KNOWS]->(george), + (david)-[:KNOWS]->(andres) +$$) as (a agtype); + a +--- +(0 rows) -- -- Test WITH clause -- -SELECT count(*) FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m,b - RETURN m,b -$$) AS (City agtype, Country agtype); - count -------- - 2361 -(1 row) +SELECT * FROM cypher('cypher_with', $$ + MATCH (n)-[e]->(m) + WITH n,e,m + RETURN n,e,m +$$) AS (N1 agtype, edge agtype, N2 agtype); + n1 | edge | n2 +--------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------- + {"id": 281474976710657, "label": "", "properties": {"age": 36, "name": "Andres"}}::vertex | {"id": 844424930131969, "label": "BLOCKS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge | {"id": 281474976710658, "label": "", "properties": {"age": 25, "name": "Caesar"}}::vertex + {"id": 281474976710659, "label": "", "properties": {"age": 55, "name": "Bossman"}}::vertex | {"id": 844424930131970, "label": "BLOCKS", "end_id": 281474976710660, "start_id": 281474976710659, "properties": {}}::edge | {"id": 281474976710660, "label": "", "properties": {"age": 35, "name": "David"}}::vertex + {"id": 281474976710657, "label": "", "properties": {"age": 36, "name": "Andres"}}::vertex | {"id": 1125899906842625, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710657, "properties": {}}::edge | {"id": 281474976710659, "label": "", "properties": {"age": 55, "name": "Bossman"}}::vertex + {"id": 281474976710658, "label": "", "properties": {"age": 25, "name": "Caesar"}}::vertex | {"id": 1125899906842626, "label": "KNOWS", "end_id": 281474976710661, "start_id": 281474976710658, "properties": {}}::edge | {"id": 281474976710661, "label": "", "properties": {"age": 37, "name": "George"}}::vertex + {"id": 281474976710659, "label": "", "properties": {"age": 55, "name": "Bossman"}}::vertex | {"id": 1125899906842627, "label": "KNOWS", "end_id": 281474976710661, "start_id": 281474976710659, "properties": {}}::edge | {"id": 281474976710661, "label": "", "properties": {"age": 37, "name": "George"}}::vertex + {"id": 281474976710660, "label": "", "properties": {"age": 35, "name": "David"}}::vertex | {"id": 1125899906842628, "label": "KNOWS", "end_id": 281474976710657, "start_id": 281474976710660, "properties": {}}::edge | {"id": 281474976710657, "label": "", "properties": {"age": 36, "name": "Andres"}}::vertex +(6 rows) -- WITH/AS SELECT * FROM cypher('cypher_with', $$ - MATCH (b:Country {iso2 : 'AT'}) - WITH b.name AS name, id(b) AS id - RETURN name,id -$$) AS (Country agtype, Country_id agtype); - country | country_id ------------+----------------- - "Austria" | 844424930131983 -(1 row) + MATCH (n)-[e]->(m) + WITH n.name AS n1, e as edge, m.name as n2 + RETURN n1,label(edge),n2 +$$) AS (start_node agtype,edge agtype, end_node agtype); + start_node | edge | end_node +------------+----------+----------- + "Andres" | "BLOCKS" | "Caesar" + "Bossman" | "BLOCKS" | "David" + "Andres" | "KNOWS" | "Bossman" + "Caesar" | "KNOWS" | "George" + "Bossman" | "KNOWS" | "George" + "David" | "KNOWS" | "Andres" +(6 rows) -SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City {name: 'Zell'})-[]-(b:Country {iso2 : 'AT'}) - WITH b as country, count(*) AS foaf - WHERE foaf > 1 - RETURN country.name, foaf -$$) as (name agtype, foaf agtype); - name | foaf ------------+------ - "Austria" | 2 -(1 row) +SELECT * FROM cypher('cypher_with',$$ + MATCH (person)-[r]->(otherPerson) + WITH *, type(r) AS connectionType + RETURN person.name, connectionType, otherPerson.name +$$) AS (start_node agtype, connection agtype, end_node agtype); + start_node | connection | end_node +------------+------------+----------- + "Andres" | "BLOCKS" | "Caesar" + "Bossman" | "BLOCKS" | "David" + "Andres" | "KNOWS" | "Bossman" + "Caesar" | "KNOWS" | "George" + "Bossman" | "KNOWS" | "George" + "David" | "KNOWS" | "Andres" +(6 rows) SELECT * FROM cypher('cypher_with', $$ WITH true AS b @@ -117,162 +105,139 @@ $$) AS (b bool); -- WITH/WHERE SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country{iso2:'BE'}) - WITH b,m - WHERE m.name='x' - RETURN m.name,b.iso2 -$$) AS ( "m.name" agtype, "b" agtype); - m.name | b ---------+--- -(0 rows) - -SELECT * FROM cypher('cypher_with', $$ - MATCH (b:Country {iso2 : 'AT'}) - WITH b.name AS name, id(b) AS id - WHERE name = 'Austria' - RETURN name,id -$$) AS (Country agtype, Country_id agtype); - country | country_id ------------+----------------- - "Austria" | 844424930131983 +MATCH (george {name: 'George'})<-[]-(otherPerson) + WITH otherPerson, toUpper(otherPerson.name) AS upperCaseName + WHERE upperCaseName STARTS WITH 'C' + RETURN otherPerson.name +$$) as (name agtype); + name +---------- + "Caesar" (1 row) SELECT * FROM cypher('cypher_with', $$ - MATCH (b:Country {iso2 : 'AT'}) - WITH b.name AS name, id(b) AS id - WHERE name = 'Austria' OR name = 'Kosovo' - RETURN name,id -$$) AS (Country agtype, Country_id agtype); - country | country_id ------------+----------------- - "Austria" | 844424930131983 + MATCH (david {name: 'David'})-[]-(otherPerson)-[]->() + WITH otherPerson, count(*) AS foaf + WHERE foaf > 1 + RETURN otherPerson.name +$$) as (name agtype); + name +---------- + "Andres" (1 row) SELECT * FROM cypher('cypher_with', $$ - MATCH p = (m:City)-[:has_city*1..2]->(b:Country {iso2 : 'AT'}) + MATCH p = (m)-[*1..2]->(b) WITH p, length(p) AS path_length WHERE path_length > 1 RETURN p $$) AS (pattern agtype); - pattern ---------- -(0 rows) + pattern +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"age": 36, "name": "Andres"}}::vertex, {"id": 1125899906842625, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710657, "properties": {}}::edge, {"id": 281474976710659, "label": "_ag_label_vertex", "properties": {"age": 55, "name": "Bossman"}}::vertex, {"id": 1125899906842627, "label": "KNOWS", "end_id": 281474976710661, "start_id": 281474976710659, "properties": {}}::edge, {"id": 281474976710661, "label": "_ag_label_vertex", "properties": {"age": 37, "name": "George"}}::vertex]::path + [{"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"age": 36, "name": "Andres"}}::vertex, {"id": 1125899906842625, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710657, "properties": {}}::edge, {"id": 281474976710659, "label": "_ag_label_vertex", "properties": {"age": 55, "name": "Bossman"}}::vertex, {"id": 844424930131970, "label": "BLOCKS", "end_id": 281474976710660, "start_id": 281474976710659, "properties": {}}::edge, {"id": 281474976710660, "label": "_ag_label_vertex", "properties": {"age": 35, "name": "David"}}::vertex]::path + [{"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"age": 36, "name": "Andres"}}::vertex, {"id": 844424930131969, "label": "BLOCKS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge, {"id": 281474976710658, "label": "_ag_label_vertex", "properties": {"age": 25, "name": "Caesar"}}::vertex, {"id": 1125899906842626, "label": "KNOWS", "end_id": 281474976710661, "start_id": 281474976710658, "properties": {}}::edge, {"id": 281474976710661, "label": "_ag_label_vertex", "properties": {"age": 37, "name": "George"}}::vertex]::path + [{"id": 281474976710659, "label": "_ag_label_vertex", "properties": {"age": 55, "name": "Bossman"}}::vertex, {"id": 844424930131970, "label": "BLOCKS", "end_id": 281474976710660, "start_id": 281474976710659, "properties": {}}::edge, {"id": 281474976710660, "label": "_ag_label_vertex", "properties": {"age": 35, "name": "David"}}::vertex, {"id": 1125899906842628, "label": "KNOWS", "end_id": 281474976710657, "start_id": 281474976710660, "properties": {}}::edge, {"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"age": 36, "name": "Andres"}}::vertex]::path + [{"id": 281474976710660, "label": "_ag_label_vertex", "properties": {"age": 35, "name": "David"}}::vertex, {"id": 1125899906842628, "label": "KNOWS", "end_id": 281474976710657, "start_id": 281474976710660, "properties": {}}::edge, {"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"age": 36, "name": "Andres"}}::vertex, {"id": 1125899906842625, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710657, "properties": {}}::edge, {"id": 281474976710659, "label": "_ag_label_vertex", "properties": {"age": 55, "name": "Bossman"}}::vertex]::path + [{"id": 281474976710660, "label": "_ag_label_vertex", "properties": {"age": 35, "name": "David"}}::vertex, {"id": 1125899906842628, "label": "KNOWS", "end_id": 281474976710657, "start_id": 281474976710660, "properties": {}}::edge, {"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"age": 36, "name": "Andres"}}::vertex, {"id": 844424930131969, "label": "BLOCKS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge, {"id": 281474976710658, "label": "_ag_label_vertex", "properties": {"age": 25, "name": "Caesar"}}::vertex]::path +(6 rows) -- MATCH/WHERE with WITH/WHERE SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WHERE b.name = 'Austria' - WITH m.name AS city,b.name AS country - WHERE city = 'Vienna' - RETURN city,country -$$) AS (City agtype, Country agtype); - city | country -----------+----------- - "Vienna" | "Austria" + MATCH (m)-[e]->(b) + WHERE label(e) = 'KNOWS' + WITH * + WHERE m.name = 'Andres' + RETURN m.name,label(e),b.name +$$) AS (N1 agtype, edge agtype, N2 agtype); + n1 | edge | n2 +----------+---------+----------- + "Andres" | "KNOWS" | "Bossman" (1 row) -- WITH/ORDER BY SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - ORDER BY id(m) DESC LIMIT 10 - RETURN id(city),city -$$) AS (id agtype, city agtype); - id | city -------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - 1125899906986495 | {"id": 1125899906986495, "label": "City", "properties": {"id": "143871", "name": "Zell", "__id__": 143871, "latitude": "46.47222222", "state_id": "2057", "longitude": "14.38888889", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex - 1125899906986492 | {"id": 1125899906986492, "label": "City", "properties": {"id": "143868", "name": "Weißenstein", "__id__": 143868, "latitude": "46.68222222", "state_id": "2057", "longitude": "13.72361111", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex - 1125899906986491 | {"id": 1125899906986491, "label": "City", "properties": {"id": "143867", "name": "Weißensee", "__id__": 143867, "latitude": "46.71666667", "state_id": "2057", "longitude": "13.3", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex - 1125899906986490 | {"id": 1125899906986490, "label": "City", "properties": {"id": "143866", "name": "Weitensfeld im Gurktal", "__id__": 143866, "latitude": "46.84861111", "state_id": "2057", "longitude": "14.19166667", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex - 1125899906986489 | {"id": 1125899906986489, "label": "City", "properties": {"id": "143865", "name": "Velden am Wörther See", "__id__": 143865, "latitude": "46.6125", "state_id": "2057", "longitude": "14.04194444", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex - 1125899906986488 | {"id": 1125899906986488, "label": "City", "properties": {"id": "143864", "name": "Umberg", "__id__": 143864, "latitude": "46.64833", "state_id": "2057", "longitude": "13.9575", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex - 1125899906986487 | {"id": 1125899906986487, "label": "City", "properties": {"id": "143863", "name": "Tschachoritsch", "__id__": 143863, "latitude": "46.55352", "state_id": "2057", "longitude": "14.21461", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex - 1125899906986486 | {"id": 1125899906986486, "label": "City", "properties": {"id": "143862", "name": "Treffen", "__id__": 143862, "latitude": "46.66833333", "state_id": "2057", "longitude": "13.85555556", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex - 1125899906986484 | {"id": 1125899906986484, "label": "City", "properties": {"id": "143860", "name": "Timenitz", "__id__": 143860, "latitude": "46.68333", "state_id": "2057", "longitude": "14.41667", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex - 1125899906986483 | {"id": 1125899906986483, "label": "City", "properties": {"id": "143859", "name": "Techelsberg", "__id__": 143859, "latitude": "46.65861111", "state_id": "2057", "longitude": "14.10194444", "country_id": "15", "state_code": "2", "country_code": "AT"}}::vertex -(10 rows) + MATCH (n) + WITH n + ORDER BY id(n) + RETURN n +$$) as (name agtype); + name +-------------------------------------------------------------------------------------------- + {"id": 281474976710657, "label": "", "properties": {"age": 36, "name": "Andres"}}::vertex + {"id": 281474976710658, "label": "", "properties": {"age": 25, "name": "Caesar"}}::vertex + {"id": 281474976710659, "label": "", "properties": {"age": 55, "name": "Bossman"}}::vertex + {"id": 281474976710660, "label": "", "properties": {"age": 35, "name": "David"}}::vertex + {"id": 281474976710661, "label": "", "properties": {"age": 37, "name": "George"}}::vertex +(5 rows) +-- WITH/ORDER BY/DESC SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City) - WITH m AS city - ORDER BY id(m) ASC LIMIT 10 - RETURN id(city),city.name -$$) AS (id agtype, names agtype); - id | names -------------------+----------------------- - 1125899906842625 | "Andorra la Vella" - 1125899906842626 | "Arinsal" - 1125899906842627 | "Canillo" - 1125899906842628 | "El Tarter" - 1125899906842629 | "Encamp" - 1125899906842630 | "Ordino" - 1125899906842631 | "Pas de la Casa" - 1125899906842632 | "Sant Julià de Lòria" - 1125899906842633 | "la Massana" - 1125899906842634 | "les Escaldes" -(10 rows) + MATCH (n) + WITH n + ORDER BY n.name DESC LIMIT 3 + RETURN collect(n.name) +$$) as (names agtype); + names +------------------------------- + ["George", "David", "Caesar"] +(1 row) --- WITH/ORDER BY/DESC/WHERE SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - ORDER BY id(m) DESC LIMIT 10 - WHERE city.name = 'Zell' OR city.name = 'Umberg' - RETURN id(city),city.name,country.name -$$) AS (id agtype, city agtype, country agtype); - id | city | country -------------------+----------+----------- - 1125899906986495 | "Zell" | "Austria" - 1125899906986488 | "Umberg" | "Austria" + MATCH (n {name: 'Andres'})-[]-(m) + WITH m + ORDER BY m.name DESC LIMIT 1 + MATCH (m)-[]-(o) + RETURN o.name ORDER BY o.name +$$) as (name agtype); + name +----------- + "Andres" + "Bossman" (2 rows) -- multiple WITH clauses SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - WITH city LIMIT 10 - RETURN city.name -$$) AS (city agtype); - city ---------------------- - "Andau" - "Antau" - "Apetlon" - "Bad Sauerbrunn" - "Bad Tatzmannsdorf" - "Badersdorf" - "Bernstein" - "Bocksdorf" - "Breitenbrunn" - "Bruckneudorf" -(10 rows) + MATCH (n)-[e]->(m) + WITH n, e, m + WHERE label(e) = 'KNOWS' + WITH n.name as n1, label(e) as edge, m.name as n2 + WHERE n1 = 'Andres' + RETURN n1,edge,n2 +$$) AS (N1 agtype, edge agtype, N2 agtype); + n1 | edge | n2 +----------+---------+----------- + "Andres" | "KNOWS" | "Bossman" +(1 row) SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - ORDER BY id(m) DESC LIMIT 10 - WITH city - WHERE city.name = 'Zell' - RETURN id(city),city.name -$$) AS (id agtype, city agtype); - id | city -------------------+-------- - 1125899906986495 | "Zell" -(1 row) + UNWIND [1, 2, 3, 4, 5, 6] AS x + WITH x + WHERE x > 2 + WITH x + LIMIT 5 + RETURN x +$$) as (name agtype); + name +------ + 3 + 4 + 5 + 6 +(4 rows) SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - WHERE country.name = 'Austria' - WITH city - ORDER BY id(city) DESC - WHERE city.name = 'Zell' - RETURN id(city),city.name -$$) AS (id agtype, city agtype); - id | city -------------------+-------- - 1125899906986495 | "Zell" - 1125899906846495 | "Zell" + MATCH (m)-[]->(b) + WITH m,b + ORDER BY id(m) DESC LIMIT 5 + WITH m as start_node, b as end_node + WHERE end_node.name = 'George' + RETURN id(start_node),start_node.name,id(end_node),end_node.name +$$) AS (id1 agtype, name1 agtype, id2 agtype, name2 agtype); + id1 | name1 | id2 | name2 +-----------------+-----------+-----------------+---------- + 281474976710659 | "Bossman" | 281474976710661 | "George" + 281474976710658 | "Caesar" | 281474976710661 | "George" (2 rows) -- Expression item must be aliased. @@ -285,42 +250,41 @@ LINE 2: WITH 1 + 1 ^ HINT: Items can be aliased by using AS. SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + MATCH (m)-[]->(b) WITH id(m) RETURN m -$$) AS (id agtype, city agtype); +$$) AS (id agtype); ERROR: expression item must be aliased LINE 3: WITH id(m) ^ HINT: Items can be aliased by using AS. -- Reference undefined variable in WITH clause (should error out) SELECT count(*) FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + MATCH (m)-[]->(b) WITH m RETURN m,b -$$) AS (City agtype, Country agtype); +$$) AS (a agtype, b agtype); ERROR: could not find rte for b LINE 4: RETURN m,b ^ SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - WHERE country.name = 'Austria' - WITH city - WHERE city.name = 'Zell' - RETURN id(city),country.name -$$) AS (id agtype, country agtype); -ERROR: could not find rte for country -LINE 7: RETURN id(city),country.name - ^ + MATCH (m)-[]->(b) + WITH m AS start_node,b AS end_node + WHERE start_node.name = 'Andres' + WITH start_node + WHERE start_node.name = 'George' + RETURN id(start_node),end_node.name +$$) AS (id agtype, node agtype); +ERROR: could not find rte for end_node +LINE 7: RETURN id(start_node),end_node.name + ^ -- Clean up SELECT drop_graph('cypher_with', true); -NOTICE: drop cascades to 5 other objects +NOTICE: drop cascades to 4 other objects DETAIL: drop cascades to table cypher_with._ag_label_vertex drop cascades to table cypher_with._ag_label_edge -drop cascades to table cypher_with."Country" -drop cascades to table cypher_with."City" -drop cascades to table cypher_with.has_city +drop cascades to table cypher_with."BLOCKS" +drop cascades to table cypher_with."KNOWS" NOTICE: graph "cypher_with" has been dropped drop_graph ------------ @@ -358,22 +322,22 @@ LINE 8: RETURN c,d ^ -- Issue 396 (should error out) SELECT * FROM cypher('graph',$$ - CREATE (v),(u),(w), - (v)-[:hasFriend]->(u), - (u)-[:hasFriend]->(w) + CREATE (v),(u),(w), + (v)-[:hasFriend]->(u), + (u)-[:hasFriend]->(w) $$) as (a agtype); a --- (0 rows) SELECT * FROM cypher('graph',$$ - MATCH p=(v)-[*1..2]->(u) - WITH p,length(p) AS path_length - RETURN v,path_length + MATCH p=(v)-[*1..2]->(u) + WITH p,length(p) AS path_length + RETURN v,path_length $$) as (a agtype,b agtype); ERROR: could not find rte for v -LINE 4: RETURN v,path_length - ^ +LINE 4: RETURN v,path_length + ^ -- Clean up SELECT drop_graph('graph', true); NOTICE: drop cascades to 6 other objects diff --git a/regress/sql/cypher_with.sql b/regress/sql/cypher_with.sql index 95b18c506..93413f2c9 100644 --- a/regress/sql/cypher_with.sql +++ b/regress/sql/cypher_with.sql @@ -17,8 +17,6 @@ * under the License. */ - \! cp -r regress/age_load/data regress/instance/data/age_load - LOAD 'age'; SET search_path TO ag_catalog; @@ -27,42 +25,43 @@ SET search_path TO ag_catalog; -- SELECT create_graph('cypher_with'); -SELECT create_vlabel('cypher_with','Country'); -SELECT load_labels_from_file('cypher_with', 'Country', - 'age_load/countries.csv'); - -SELECT create_vlabel('cypher_with','City'); -SELECT load_labels_from_file('cypher_with', 'City', - 'age_load/cities.csv'); - -SELECT create_elabel('cypher_with','has_city'); -SELECT load_edges_from_file('cypher_with', 'has_city', - 'age_load/edges.csv'); +SELECT * FROM cypher('cypher_with', $$ + CREATE (andres {name : 'Andres', age : 36}), + (caesar {name : 'Caesar', age : 25}), + (bossman {name : 'Bossman', age : 55}), + (david {name : 'David', age : 35}), + (george {name : 'George', age : 37}), + (andres)-[:BLOCKS]->(caesar), + (andres)-[:KNOWS]->(bossman), + (caesar)-[:KNOWS]->(george), + (bossman)-[:BLOCKS]->(david), + (bossman)-[:KNOWS]->(george), + (david)-[:KNOWS]->(andres) +$$) as (a agtype); -- -- Test WITH clause -- -SELECT count(*) FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m,b - RETURN m,b -$$) AS (City agtype, Country agtype); +SELECT * FROM cypher('cypher_with', $$ + MATCH (n)-[e]->(m) + WITH n,e,m + RETURN n,e,m +$$) AS (N1 agtype, edge agtype, N2 agtype); -- WITH/AS SELECT * FROM cypher('cypher_with', $$ - MATCH (b:Country {iso2 : 'AT'}) - WITH b.name AS name, id(b) AS id - RETURN name,id -$$) AS (Country agtype, Country_id agtype); + MATCH (n)-[e]->(m) + WITH n.name AS n1, e as edge, m.name as n2 + RETURN n1,label(edge),n2 +$$) AS (start_node agtype,edge agtype, end_node agtype); -SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City {name: 'Zell'})-[]-(b:Country {iso2 : 'AT'}) - WITH b as country, count(*) AS foaf - WHERE foaf > 1 - RETURN country.name, foaf -$$) as (name agtype, foaf agtype); +SELECT * FROM cypher('cypher_with',$$ + MATCH (person)-[r]->(otherPerson) + WITH *, type(r) AS connectionType + RETURN person.name, connectionType, otherPerson.name +$$) AS (start_node agtype, connection agtype, end_node agtype); SELECT * FROM cypher('cypher_with', $$ WITH true AS b @@ -72,28 +71,21 @@ $$) AS (b bool); -- WITH/WHERE SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country{iso2:'BE'}) - WITH b,m - WHERE m.name='x' - RETURN m.name,b.iso2 -$$) AS ( "m.name" agtype, "b" agtype); - -SELECT * FROM cypher('cypher_with', $$ - MATCH (b:Country {iso2 : 'AT'}) - WITH b.name AS name, id(b) AS id - WHERE name = 'Austria' - RETURN name,id -$$) AS (Country agtype, Country_id agtype); +MATCH (george {name: 'George'})<-[]-(otherPerson) + WITH otherPerson, toUpper(otherPerson.name) AS upperCaseName + WHERE upperCaseName STARTS WITH 'C' + RETURN otherPerson.name +$$) as (name agtype); SELECT * FROM cypher('cypher_with', $$ - MATCH (b:Country {iso2 : 'AT'}) - WITH b.name AS name, id(b) AS id - WHERE name = 'Austria' OR name = 'Kosovo' - RETURN name,id -$$) AS (Country agtype, Country_id agtype); + MATCH (david {name: 'David'})-[]-(otherPerson)-[]->() + WITH otherPerson, count(*) AS foaf + WHERE foaf > 1 + RETURN otherPerson.name +$$) as (name agtype); SELECT * FROM cypher('cypher_with', $$ - MATCH p = (m:City)-[:has_city*1..2]->(b:Country {iso2 : 'AT'}) + MATCH p = (m)-[*1..2]->(b) WITH p, length(p) AS path_length WHERE path_length > 1 RETURN p @@ -102,66 +94,67 @@ $$) AS (pattern agtype); -- MATCH/WHERE with WITH/WHERE SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WHERE b.name = 'Austria' - WITH m.name AS city,b.name AS country - WHERE city = 'Vienna' - RETURN city,country -$$) AS (City agtype, Country agtype); + MATCH (m)-[e]->(b) + WHERE label(e) = 'KNOWS' + WITH * + WHERE m.name = 'Andres' + RETURN m.name,label(e),b.name +$$) AS (N1 agtype, edge agtype, N2 agtype); -- WITH/ORDER BY SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - ORDER BY id(m) DESC LIMIT 10 - RETURN id(city),city -$$) AS (id agtype, city agtype); + MATCH (n) + WITH n + ORDER BY id(n) + RETURN n +$$) as (name agtype); -SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City) - WITH m AS city - ORDER BY id(m) ASC LIMIT 10 - RETURN id(city),city.name -$$) AS (id agtype, names agtype); +-- WITH/ORDER BY/DESC --- WITH/ORDER BY/DESC/WHERE +SELECT * FROM cypher('cypher_with', $$ + MATCH (n) + WITH n + ORDER BY n.name DESC LIMIT 3 + RETURN collect(n.name) +$$) as (names agtype); SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - ORDER BY id(m) DESC LIMIT 10 - WHERE city.name = 'Zell' OR city.name = 'Umberg' - RETURN id(city),city.name,country.name -$$) AS (id agtype, city agtype, country agtype); + MATCH (n {name: 'Andres'})-[]-(m) + WITH m + ORDER BY m.name DESC LIMIT 1 + MATCH (m)-[]-(o) + RETURN o.name ORDER BY o.name +$$) as (name agtype); -- multiple WITH clauses SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - WITH city LIMIT 10 - RETURN city.name -$$) AS (city agtype); + MATCH (n)-[e]->(m) + WITH n, e, m + WHERE label(e) = 'KNOWS' + WITH n.name as n1, label(e) as edge, m.name as n2 + WHERE n1 = 'Andres' + RETURN n1,edge,n2 +$$) AS (N1 agtype, edge agtype, N2 agtype); SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - ORDER BY id(m) DESC LIMIT 10 - WITH city - WHERE city.name = 'Zell' - RETURN id(city),city.name -$$) AS (id agtype, city agtype); + UNWIND [1, 2, 3, 4, 5, 6] AS x + WITH x + WHERE x > 2 + WITH x + LIMIT 5 + RETURN x +$$) as (name agtype); SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - WHERE country.name = 'Austria' - WITH city - ORDER BY id(city) DESC - WHERE city.name = 'Zell' - RETURN id(city),city.name -$$) AS (id agtype, city agtype); + MATCH (m)-[]->(b) + WITH m,b + ORDER BY id(m) DESC LIMIT 5 + WITH m as start_node, b as end_node + WHERE end_node.name = 'George' + RETURN id(start_node),start_node.name,id(end_node),end_node.name +$$) AS (id1 agtype, name1 agtype, id2 agtype, name2 agtype); -- Expression item must be aliased. @@ -171,27 +164,27 @@ SELECT * FROM cypher('cypher_with', $$ $$) AS (i int); SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + MATCH (m)-[]->(b) WITH id(m) RETURN m -$$) AS (id agtype, city agtype); +$$) AS (id agtype); -- Reference undefined variable in WITH clause (should error out) SELECT count(*) FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) + MATCH (m)-[]->(b) WITH m RETURN m,b -$$) AS (City agtype, Country agtype); +$$) AS (a agtype, b agtype); SELECT * FROM cypher('cypher_with', $$ - MATCH (m:City)-[:has_city]->(b:Country {iso2 : 'AT'}) - WITH m AS city,b AS country - WHERE country.name = 'Austria' - WITH city - WHERE city.name = 'Zell' - RETURN id(city),country.name -$$) AS (id agtype, country agtype); + MATCH (m)-[]->(b) + WITH m AS start_node,b AS end_node + WHERE start_node.name = 'Andres' + WITH start_node + WHERE start_node.name = 'George' + RETURN id(start_node),end_node.name +$$) AS (id agtype, node agtype); -- Clean up @@ -219,15 +212,15 @@ $$) AS (n agtype, d agtype); -- Issue 396 (should error out) SELECT * FROM cypher('graph',$$ - CREATE (v),(u),(w), - (v)-[:hasFriend]->(u), - (u)-[:hasFriend]->(w) + CREATE (v),(u),(w), + (v)-[:hasFriend]->(u), + (u)-[:hasFriend]->(w) $$) as (a agtype); SELECT * FROM cypher('graph',$$ - MATCH p=(v)-[*1..2]->(u) - WITH p,length(p) AS path_length - RETURN v,path_length + MATCH p=(v)-[*1..2]->(u) + WITH p,length(p) AS path_length + RETURN v,path_length $$) as (a agtype,b agtype); -- Clean up From 89feda14d4634aa1793aff87520b66530febd485 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Tue, 7 Mar 2023 03:26:44 +0500 Subject: [PATCH 144/191] Fix issue #733 - create_complete_graph() terminates the server (#734) - A vertex and an edge cannot have the same label within the same graph, so added a check for that. - insert_simple_vertex() and insert_simple_edge() functions were not checking for the kind of label. Since a vertex cannot be inserted into a label relation of edge and vice versa, this was causing the server termination. Added a check for that. - Added regression tests. --- regress/expected/graph_generation.out | 8 ++++++++ regress/sql/graph_generation.sql | 8 ++++++++ src/backend/catalog/ag_label.c | 15 +++++++++++++++ src/backend/utils/graph_generation.c | 14 ++++++++++++-- src/backend/utils/load/age_load.c | 13 +++++++++++++ src/include/catalog/ag_label.h | 1 + 6 files changed, 57 insertions(+), 2 deletions(-) diff --git a/regress/expected/graph_generation.out b/regress/expected/graph_generation.out index b9ed65b12..235052a08 100644 --- a/regress/expected/graph_generation.out +++ b/regress/expected/graph_generation.out @@ -80,12 +80,17 @@ NOTICE: ELabel "edges" has been created (1 row) +-- SHOULD FAIL SELECT * FROM create_complete_graph('gp3',5, NULL); ERROR: edge label can not be NULL SELECT * FROM create_complete_graph('gp4',NULL,NULL); ERROR: number of nodes can not be NULL SELECT * FROM create_complete_graph(NULL,NULL,NULL); ERROR: graph name can not be NULL +-- Should error out because same labels are used for both vertices and edges +SELECT * FROM create_complete_graph('gp5',5,'label','label'); +ERROR: vertex and edge label can not be same +-- DROPPING GRAPHS SELECT drop_graph('gp1', true); NOTICE: drop cascades to 4 other objects DETAIL: drop cascades to table gp1._ag_label_vertex @@ -195,6 +200,9 @@ SELECT * FROM age_create_barbell_graph('gp4',NULL,0,'vertices',NULL,'edges',NULL ERROR: Graph size cannot be NULL or lower than 3 SELECT * FROM age_create_barbell_graph('gp5',5,0,'vertices',NULL,NULL,NULL); ERROR: edge label can not be NULL +-- Should error out because same labels are used for both vertices and edges +SELECT * FROM age_create_barbell_graph('gp6',5,10,'label',NULL,'label',NULL); +ERROR: vertex and edge label can not be same -- DROPPING GRAPHS SELECT drop_graph('gp1', true); NOTICE: drop cascades to 4 other objects diff --git a/regress/sql/graph_generation.sql b/regress/sql/graph_generation.sql index 32fa56dd5..e9ee8ea81 100644 --- a/regress/sql/graph_generation.sql +++ b/regress/sql/graph_generation.sql @@ -36,12 +36,17 @@ SELECT COUNT(*) FROM gp1."vertices"; SELECT * FROM create_complete_graph('gp2',5,'edges'); +-- SHOULD FAIL SELECT * FROM create_complete_graph('gp3',5, NULL); SELECT * FROM create_complete_graph('gp4',NULL,NULL); SELECT * FROM create_complete_graph(NULL,NULL,NULL); +-- Should error out because same labels are used for both vertices and edges +SELECT * FROM create_complete_graph('gp5',5,'label','label'); + +-- DROPPING GRAPHS SELECT drop_graph('gp1', true); SELECT drop_graph('gp2', true); @@ -68,6 +73,9 @@ SELECT * FROM age_create_barbell_graph('gp3',5,NULL,'vertices',NULL,'edges',NULL SELECT * FROM age_create_barbell_graph('gp4',NULL,0,'vertices',NULL,'edges',NULL); SELECT * FROM age_create_barbell_graph('gp5',5,0,'vertices',NULL,NULL,NULL); +-- Should error out because same labels are used for both vertices and edges +SELECT * FROM age_create_barbell_graph('gp6',5,10,'label',NULL,'label',NULL); + -- DROPPING GRAPHS SELECT drop_graph('gp1', true); SELECT drop_graph('gp2', true); diff --git a/src/backend/catalog/ag_label.c b/src/backend/catalog/ag_label.c index cd8d0bab6..41a11abef 100644 --- a/src/backend/catalog/ag_label.c +++ b/src/backend/catalog/ag_label.c @@ -170,6 +170,21 @@ char *get_label_relation_name(const char *label_name, Oid label_graph) return get_rel_name(get_label_relation(label_name, label_graph)); } +char get_label_kind(const char *label_name, Oid label_graph) +{ + label_cache_data *cache_data; + + cache_data = search_label_name_graph_cache(label_name, label_graph); + if (cache_data) + { + return cache_data->kind; + } + else + { + return INVALID_LABEL_ID; + } +} + PG_FUNCTION_INFO_V1(_label_name); /* diff --git a/src/backend/utils/graph_generation.c b/src/backend/utils/graph_generation.c index b40ef07e2..e1a363440 100644 --- a/src/backend/utils/graph_generation.c +++ b/src/backend/utils/graph_generation.c @@ -142,6 +142,18 @@ Datum create_complete_graph(PG_FUNCTION_ARGS) vtx_name_str = AG_DEFAULT_LABEL_VERTEX; edge_name_str = NameStr(*edge_label_name); + if (!PG_ARGISNULL(3)) + { + vtx_label_name = PG_GETARG_NAME(3); + vtx_name_str = NameStr(*vtx_label_name); + + // Check if vertex and edge label are same + if (strcmp(vtx_name_str, edge_name_str) == 0) + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("vertex and edge label can not be same"))); + } + } if (!graph_exists(graph_name_str)) { @@ -154,8 +166,6 @@ Datum create_complete_graph(PG_FUNCTION_ARGS) if (!PG_ARGISNULL(3)) { - vtx_label_name = PG_GETARG_NAME(3); - vtx_name_str = NameStr(*vtx_label_name); // Check if label with the input name already exists if (!label_exists(vtx_name_str, graph_id)) { diff --git a/src/backend/utils/load/age_load.c b/src/backend/utils/load/age_load.c index cbdf1585d..d9819a301 100644 --- a/src/backend/utils/load/age_load.c +++ b/src/backend/utils/load/age_load.c @@ -148,6 +148,12 @@ void insert_edge_simple(Oid graph_id, char* label_name, graphid edge_id, Relation label_relation; HeapTuple tuple; + // Check if label provided exists as vertex label, then throw error + if (get_label_kind(label_name, graph_id) == LABEL_KIND_VERTEX) + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("label %s already exists as vertex label", label_name))); + } values[0] = GRAPHID_GET_DATUM(edge_id); values[1] = GRAPHID_GET_DATUM(start_id); @@ -176,6 +182,13 @@ void insert_vertex_simple(Oid graph_id, char* label_name, Relation label_relation; HeapTuple tuple; + // Check if label provided exists as edge label, then throw error + if (get_label_kind(label_name, graph_id) == LABEL_KIND_EDGE) + { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("label %s already exists as edge label", label_name))); + } + values[0] = GRAPHID_GET_DATUM(vertex_id); values[1] = AGTYPE_P_GET_DATUM((vertex_properties)); diff --git a/src/include/catalog/ag_label.h b/src/include/catalog/ag_label.h index f60a038b7..39ab5c975 100644 --- a/src/include/catalog/ag_label.h +++ b/src/include/catalog/ag_label.h @@ -78,6 +78,7 @@ Oid get_label_oid(const char *label_name, Oid label_graph); int32 get_label_id(const char *label_name, Oid label_graph); Oid get_label_relation(const char *label_name, Oid label_graph); char *get_label_relation_name(const char *label_name, Oid label_graph); +char get_label_kind(const char *label_name, Oid label_graph); bool label_id_exists(Oid label_graph, int32 label_id); RangeVar *get_label_range_var(char *graph_name, Oid graph_oid, char *label_name); From 082209305bb7553c025f6cab3a586389dbab8c70 Mon Sep 17 00:00:00 2001 From: Dehowe Feng <8065116+dehowef@users.noreply.github.com> Date: Sat, 11 Mar 2023 09:50:57 +0900 Subject: [PATCH 145/191] Prevent MATCH from following OPTIONAL MATCH (#740) Added logic to prevent match from following optional match. This syntax is considered invalid, add logic to throw an error when this happens. Also added regression tests to test this logic. --- regress/expected/cypher_match.out | 19 +++++++++++++++++++ regress/sql/cypher_match.sql | 14 ++++++++++++++ src/backend/parser/cypher_clause.c | 17 +++++++++++++++++ 3 files changed, 50 insertions(+) diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index 8f325cbe6..4888556d9 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -1256,6 +1256,25 @@ SELECT * FROM cypher('cypher_match', $$ "nobody" | | | "anybody" | | (12 rows) +-- Tests to catch match following optional match logic +-- this syntax is invalid in cypher +SELECT * FROM cypher('cypher_match', $$ + OPTIONAL MATCH (n) + MATCH (m) + RETURN n,m + $$) AS (n agtype, m agtype); +ERROR: MATCH cannot follow OPTIONAL MATCH +LINE 1: SELECT * FROM cypher('cypher_match', $$ + ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH (n) + OPTIONAL MATCH (m) + MATCH (o) + RETURN n,m + $$) AS (n agtype, m agtype); +ERROR: MATCH cannot follow OPTIONAL MATCH +LINE 1: SELECT * FROM cypher('cypher_match', $$ + ^ -- -- Tests retrieving Var from some parent's cpstate during transformation -- diff --git a/regress/sql/cypher_match.sql b/regress/sql/cypher_match.sql index 70f638df2..344453e00 100644 --- a/regress/sql/cypher_match.sql +++ b/regress/sql/cypher_match.sql @@ -621,6 +621,20 @@ SELECT * FROM cypher('cypher_match', $$ ORDER BY n, p, m, q $$) AS (n agtype, r agtype, p agtype, m agtype, s agtype, q agtype); +-- Tests to catch match following optional match logic +-- this syntax is invalid in cypher +SELECT * FROM cypher('cypher_match', $$ + OPTIONAL MATCH (n) + MATCH (m) + RETURN n,m + $$) AS (n agtype, m agtype); + +SELECT * FROM cypher('cypher_match', $$ + MATCH (n) + OPTIONAL MATCH (m) + MATCH (o) + RETURN n,m + $$) AS (n agtype, m agtype); -- -- Tests retrieving Var from some parent's cpstate during transformation diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index e1e6c94be..294ebb064 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -2508,6 +2508,23 @@ static Query *transform_cypher_match_pattern(cypher_parsestate *cpstate, query = makeNode(Query); query->commandType = CMD_SELECT; + if(self->optional == true && clause->next) + { + cypher_clause *next = clause->next; + if (is_ag_node(next->self, cypher_match)) + { + cypher_match *next_self = (cypher_match *)next->self; + if (!next_self->optional) + { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("MATCH cannot follow OPTIONAL MATCH"), + parser_errposition(pstate, + exprLocation((Node *) next_self)))); + } + } + } + // If there is no previous clause, transform to a general MATCH clause. if (self->optional == true && clause->prev != NULL) { From 68e3b5aedd9ad9fcee19505de9f5844023935e0e Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Sat, 11 Mar 2023 05:51:42 +0500 Subject: [PATCH 146/191] Remove check for scalar agtypes in unwind (#736) - Added regression tests for unwind. --- age--1.2.0.sql | 8 +- regress/expected/cypher_unwind.out | 155 ++++++++++++++++++++++++++--- regress/sql/cypher_unwind.sql | 92 +++++++++++++++-- src/backend/parser/cypher_clause.c | 2 +- src/backend/utils/adt/agtype.c | 14 +-- 5 files changed, 232 insertions(+), 39 deletions(-) diff --git a/age--1.2.0.sql b/age--1.2.0.sql index e50f1a628..c8d7ecd0b 100644 --- a/age--1.2.0.sql +++ b/age--1.2.0.sql @@ -4162,10 +4162,10 @@ IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; -CREATE FUNCTION ag_catalog.age_unnest(agtype, block_types boolean = false) - RETURNS SETOF agtype - LANGUAGE c - IMMUTABLE +CREATE FUNCTION ag_catalog.age_unnest(agtype) +RETURNS SETOF agtype +LANGUAGE c +IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; diff --git a/regress/expected/cypher_unwind.out b/regress/expected/cypher_unwind.out index d0a71717a..3c454f100 100644 --- a/regress/expected/cypher_unwind.out +++ b/regress/expected/cypher_unwind.out @@ -25,25 +25,48 @@ NOTICE: graph "cypher_unwind" has been created (1 row) +-- Create nodes and relations SELECT * FROM cypher('cypher_unwind', $$ - UNWIND [1, 2, 3] AS i RETURN i + CREATE (n {name: 'node1', a: [1, 2, 3]}), + (m {name: 'node2', a: [4, 5, 6]}), + (o {name: 'node3', a: [7, 8, 9]}), + (n)-[:KNOWS]->(m), + (m)-[:KNOWS]->(o) $$) as (i agtype); i --- - 1 - 2 - 3 +(0 rows) + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH (n) + RETURN n +$$) as (i agtype); + i +----------------------------------------------------------------------------------------------- + {"id": 281474976710657, "label": "", "properties": {"a": [1, 2, 3], "name": "node1"}}::vertex + {"id": 281474976710658, "label": "", "properties": {"a": [4, 5, 6], "name": "node2"}}::vertex + {"id": 281474976710659, "label": "", "properties": {"a": [7, 8, 9], "name": "node3"}}::vertex (3 rows) +-- +-- Test UNWIND clause +-- SELECT * FROM cypher('cypher_unwind', $$ - CREATE ({a: [1, 2, 3]}), ({a: [4, 5, 6]}) + UNWIND [1, 2, 3] AS i + RETURN i $$) as (i agtype); i --- -(0 rows) + 1 + 2 + 3 +(3 rows) SELECT * FROM cypher('cypher_unwind', $$ - MATCH (n) WITH n.a AS a UNWIND a AS i RETURN * + MATCH (n) + WITH n.a AS a + UNWIND a AS i + RETURN * $$) as (i agtype, j agtype); i | j -----------+--- @@ -53,7 +76,10 @@ $$) as (i agtype, j agtype); [4, 5, 6] | 4 [4, 5, 6] | 5 [4, 5, 6] | 6 -(6 rows) + [7, 8, 9] | 7 + [7, 8, 9] | 8 + [7, 8, 9] | 9 +(9 rows) SELECT * FROM cypher('cypher_unwind', $$ WITH [[1, 2], [3, 4], 5] AS nested @@ -70,17 +96,118 @@ $$) as (i agtype); 5 (5 rows) +-- UNWIND vertices +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=(n)-[:KNOWS]->(m) + UNWIND nodes(p) as node + RETURN node +$$) as (i agtype); + i +----------------------------------------------------------------------------------------------- + {"id": 281474976710657, "label": "", "properties": {"a": [1, 2, 3], "name": "node1"}}::vertex + {"id": 281474976710658, "label": "", "properties": {"a": [4, 5, 6], "name": "node2"}}::vertex + {"id": 281474976710658, "label": "", "properties": {"a": [4, 5, 6], "name": "node2"}}::vertex + {"id": 281474976710659, "label": "", "properties": {"a": [7, 8, 9], "name": "node3"}}::vertex +(4 rows) + SELECT * FROM cypher('cypher_unwind', $$ - WITH [{id: 0, label:'', properties:{}}::vertex, {id: 1, label:'', properties:{}}::vertex] as n - UNWIND n as a - SET a.i = 1 - RETURN a + MATCH p=(n)-[:KNOWS]->(m) + UNWIND nodes(p) as node + RETURN node.name $$) as (i agtype); -ERROR: UNWIND clause does not support agtype vertex + i +--------- + "node1" + "node2" + "node2" + "node3" +(4 rows) + +-- UNWIND edges +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=(n)-[:KNOWS]->(m) + UNWIND relationships(p) as relation + RETURN relation +$$) as (i agtype); + i +--------------------------------------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "KNOWS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge + {"id": 844424930131970, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710658, "properties": {}}::edge +(2 rows) + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=(n)-[:KNOWS]->(m) + UNWIND relationships(p) as relation + RETURN type(relation) +$$) as (i agtype); + i +--------- + "KNOWS" + "KNOWS" +(2 rows) + +-- UNWIND paths (vle) +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=({name:'node1'})-[e:KNOWS*]->({name:'node3'}) + UNWIND [p] as path + RETURN path +$$) as (i agtype); + i +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 281474976710657, "label": "_ag_label_vertex", "properties": {"a": [1, 2, 3], "name": "node1"}}::vertex, {"id": 844424930131969, "label": "KNOWS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge, {"id": 281474976710658, "label": "_ag_label_vertex", "properties": {"a": [4, 5, 6], "name": "node2"}}::vertex, {"id": 844424930131970, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710658, "properties": {}}::edge, {"id": 281474976710659, "label": "_ag_label_vertex", "properties": {"a": [7, 8, 9], "name": "node3"}}::vertex]::path +(1 row) + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=({name:'node1'})-[e:KNOWS*]->({name:'node3'}) + UNWIND [p] as path + RETURN relationships(path) +$$) as (i agtype); + i +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 844424930131969, "label": "KNOWS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge, {"id": 844424930131970, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710658, "properties": {}}::edge] +(1 row) + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=({name:'node1'})-[e:KNOWS*]->({name:'node3'}) + UNWIND [p] as path + UNWIND relationships(path) as edge + RETURN edge +$$) as (i agtype); + i +--------------------------------------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "KNOWS", "end_id": 281474976710658, "start_id": 281474976710657, "properties": {}}::edge + {"id": 844424930131970, "label": "KNOWS", "end_id": 281474976710659, "start_id": 281474976710658, "properties": {}}::edge +(2 rows) + +-- Unwind with SET clause +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=(n)-[:KNOWS]->(m) + UNWIND nodes(p) as node + SET node.type = 'vertex' +$$) as (i agtype); + i +--- +(0 rows) + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH (n) + RETURN n +$$) as (i agtype); + i +----------------------------------------------------------------------------------------------------------------- + {"id": 281474976710657, "label": "", "properties": {"a": [1, 2, 3], "name": "node1", "type": "vertex"}}::vertex + {"id": 281474976710658, "label": "", "properties": {"a": [4, 5, 6], "name": "node2", "type": "vertex"}}::vertex + {"id": 281474976710659, "label": "", "properties": {"a": [7, 8, 9], "name": "node3", "type": "vertex"}}::vertex +(3 rows) + +-- +-- Clean up +-- SELECT drop_graph('cypher_unwind', true); -NOTICE: drop cascades to 2 other objects +NOTICE: drop cascades to 3 other objects DETAIL: drop cascades to table cypher_unwind._ag_label_vertex drop cascades to table cypher_unwind._ag_label_edge +drop cascades to table cypher_unwind."KNOWS" NOTICE: graph "cypher_unwind" has been dropped drop_graph ------------ diff --git a/regress/sql/cypher_unwind.sql b/regress/sql/cypher_unwind.sql index d1f2d81fb..8e8c74bc9 100644 --- a/regress/sql/cypher_unwind.sql +++ b/regress/sql/cypher_unwind.sql @@ -22,16 +22,35 @@ SET search_path TO ag_catalog; SELECT create_graph('cypher_unwind'); +-- Create nodes and relations + SELECT * FROM cypher('cypher_unwind', $$ - UNWIND [1, 2, 3] AS i RETURN i + CREATE (n {name: 'node1', a: [1, 2, 3]}), + (m {name: 'node2', a: [4, 5, 6]}), + (o {name: 'node3', a: [7, 8, 9]}), + (n)-[:KNOWS]->(m), + (m)-[:KNOWS]->(o) $$) as (i agtype); SELECT * FROM cypher('cypher_unwind', $$ - CREATE ({a: [1, 2, 3]}), ({a: [4, 5, 6]}) + MATCH (n) + RETURN n +$$) as (i agtype); + +-- +-- Test UNWIND clause +-- + +SELECT * FROM cypher('cypher_unwind', $$ + UNWIND [1, 2, 3] AS i + RETURN i $$) as (i agtype); SELECT * FROM cypher('cypher_unwind', $$ - MATCH (n) WITH n.a AS a UNWIND a AS i RETURN * + MATCH (n) + WITH n.a AS a + UNWIND a AS i + RETURN * $$) as (i agtype, j agtype); SELECT * FROM cypher('cypher_unwind', $$ @@ -41,11 +60,70 @@ SELECT * FROM cypher('cypher_unwind', $$ RETURN y $$) as (i agtype); +-- UNWIND vertices + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=(n)-[:KNOWS]->(m) + UNWIND nodes(p) as node + RETURN node +$$) as (i agtype); + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=(n)-[:KNOWS]->(m) + UNWIND nodes(p) as node + RETURN node.name +$$) as (i agtype); + +-- UNWIND edges + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=(n)-[:KNOWS]->(m) + UNWIND relationships(p) as relation + RETURN relation +$$) as (i agtype); + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=(n)-[:KNOWS]->(m) + UNWIND relationships(p) as relation + RETURN type(relation) +$$) as (i agtype); + +-- UNWIND paths (vle) + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=({name:'node1'})-[e:KNOWS*]->({name:'node3'}) + UNWIND [p] as path + RETURN path +$$) as (i agtype); + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=({name:'node1'})-[e:KNOWS*]->({name:'node3'}) + UNWIND [p] as path + RETURN relationships(path) +$$) as (i agtype); + SELECT * FROM cypher('cypher_unwind', $$ - WITH [{id: 0, label:'', properties:{}}::vertex, {id: 1, label:'', properties:{}}::vertex] as n - UNWIND n as a - SET a.i = 1 - RETURN a + MATCH p=({name:'node1'})-[e:KNOWS*]->({name:'node3'}) + UNWIND [p] as path + UNWIND relationships(path) as edge + RETURN edge $$) as (i agtype); +-- Unwind with SET clause + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH p=(n)-[:KNOWS]->(m) + UNWIND nodes(p) as node + SET node.type = 'vertex' +$$) as (i agtype); + +SELECT * FROM cypher('cypher_unwind', $$ + MATCH (n) + RETURN n +$$) as (i agtype); + +-- +-- Clean up +-- + SELECT drop_graph('cypher_unwind', true); \ No newline at end of file diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 294ebb064..526a23fbf 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -1331,7 +1331,7 @@ static Query *transform_cypher_unwind(cypher_parsestate *cpstate, old_expr_kind = pstate->p_expr_kind; pstate->p_expr_kind = EXPR_KIND_SELECT_TARGET; funcexpr = ParseFuncOrColumn(pstate, unwind->funcname, - list_make2(expr, makeBoolConst(true, false)), + list_make1(expr), pstate->p_last_srf, unwind, false, target_syntax_loc); diff --git a/src/backend/utils/adt/agtype.c b/src/backend/utils/adt/agtype.c index ed4bf4d47..cba3316b2 100644 --- a/src/backend/utils/adt/agtype.c +++ b/src/backend/utils/adt/agtype.c @@ -10031,14 +10031,11 @@ Datum age_range(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(age_unnest); /* * Function to convert the Array type of Agtype into each row. It is used for - * Cypher `UNWIND` clause, but considering the situation in which the user can - * directly use this function in vanilla PGSQL, put a second parameter related - * to this. + * Cypher `UNWIND` clause. */ Datum age_unnest(PG_FUNCTION_ARGS) { agtype *agtype_arg = AG_GET_ARG_AGTYPE_P(0); - bool block_types = PG_GETARG_BOOL(1); ReturnSetInfo *rsi; Tuplestorestate *tuple_store; TupleDesc tupdesc; @@ -10090,15 +10087,6 @@ Datum age_unnest(PG_FUNCTION_ARGS) bool nulls[1] = {false}; agtype *val = agtype_value_to_agtype(&v); - if (block_types && ( - v.type == AGTV_VERTEX || v.type == AGTV_EDGE || v.type == AGTV_PATH)) - { - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("UNWIND clause does not support agtype %s", - agtype_value_type_to_string(v.type)))); - } - /* use the tmp context so we can clean up after each tuple is done */ old_cxt = MemoryContextSwitchTo(tmp_cxt); From 1a7032859f1ce14d8127bdf8953eac44379adcf0 Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Thu, 16 Mar 2023 19:42:17 -0700 Subject: [PATCH 147/191] Fix property constraints against resolved variables in concurrent MATCH clauses(#701) (#747) Fixed an issue where an already resolved variable, when used for a property constraint in a second MATCH clause, errored out. See #701 and #724 for more details. This is part of a series of PRs done to refactor MATCH clause behavior. This also fixed a regression test that was erroring out, but was overlooked. Adjusted and added additional regression tests. Co-authored-by: Dehowe Feng --- regress/expected/cypher_match.out | 225 ++++++++++++++++++++++++++++- regress/expected/cypher_merge.out | 40 ++--- regress/sql/cypher_match.sql | 73 ++++++++++ src/backend/parser/cypher_clause.c | 167 ++++++++++++++++++--- 4 files changed, 461 insertions(+), 44 deletions(-) diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index 4888556d9..f3817a50d 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -1450,11 +1450,233 @@ $$) as (n agtype); {"id": 281474976710662, "label": "", "properties": {"i": 1, "j": 2, "k": 3}}::vertex (1 row) +-- +-- Regression tests to check previous clause variable refs +-- +-- set up initial state and show what we're working with +SELECT * FROM cypher('cypher_match', $$ + CREATE (a {age: 4}) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------ + {"id": 281474976710665, "label": "", "properties": {"age": 4}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ + CREATE (b {age: 6}) RETURN b $$) as (b agtype); + b +------------------------------------------------------------------------ + {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) RETURN a $$) as (a agtype); + a +-------------------------------------------------------------------------------------- + {"id": 281474976710659, "label": "", "properties": {"name": "orphan"}}::vertex + {"id": 281474976710660, "label": "", "properties": {"name": "F"}}::vertex + {"id": 281474976710661, "label": "", "properties": {"name": "T"}}::vertex + {"id": 281474976710662, "label": "", "properties": {"i": 1, "j": 2, "k": 3}}::vertex + {"id": 281474976710663, "label": "", "properties": {"i": 1, "j": 3}}::vertex + {"id": 281474976710664, "label": "", "properties": {"i": 2, "k": 3}}::vertex + {"id": 281474976710665, "label": "", "properties": {"age": 4}}::vertex + {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex +(8 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) WHERE exists(a.name) RETURN a $$) as (a agtype); + a +-------------------------------------------------------------------------------- + {"id": 281474976710659, "label": "", "properties": {"name": "orphan"}}::vertex + {"id": 281474976710660, "label": "", "properties": {"name": "F"}}::vertex + {"id": 281474976710661, "label": "", "properties": {"name": "T"}}::vertex +(3 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) WHERE exists(a.name) SET a.age = 4 RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710659, "label": "", "properties": {"age": 4, "name": "orphan"}}::vertex + {"id": 281474976710660, "label": "", "properties": {"age": 4, "name": "F"}}::vertex + {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex +(3 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a),(b) WHERE a.age = 4 AND a.name = "T" AND b.age = 6 + RETURN a,b $$) as (a agtype, b agtype); + a | b +-------------------------------------------------------------------------------------+------------------------------------------------------------------------ + {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex | {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a),(b) WHERE a.age = 4 AND a.name = "T" AND b.age = 6 CREATE + (a)-[:knows {relationship: "friends", years: 3}]->(b) $$) as (r agtype); + r +--- +(0 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a),(b) WHERE a.age = 4 AND a.name = "orphan" AND b.age = 6 CREATE + (a)-[:knows {relationship: "enemies", years: 4}]->(b) $$) as (r agtype); + r +--- +(0 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a)-[r]-(b) RETURN r $$) as (r agtype); + r +----------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge + {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge + {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge + {"id": 1407374883553283, "label": "e1", "end_id": 281474976710661, "start_id": 281474976710660, "properties": {}}::edge + {"id": 1407374883553283, "label": "e1", "end_id": 281474976710661, "start_id": 281474976710660, "properties": {}}::edge +(6 rows) + +-- check reuse of 'a' +SELECT * FROM cypher('cypher_match', $$ + MATCH (a {age:4}) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710665, "label": "", "properties": {"age": 4}}::vertex + {"id": 281474976710659, "label": "", "properties": {"age": 4, "name": "orphan"}}::vertex + {"id": 281474976710660, "label": "", "properties": {"age": 4, "name": "F"}}::vertex + {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex +(4 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) MATCH (a {age:4}) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710665, "label": "", "properties": {"age": 4}}::vertex + {"id": 281474976710659, "label": "", "properties": {"age": 4, "name": "orphan"}}::vertex + {"id": 281474976710660, "label": "", "properties": {"age": 4, "name": "F"}}::vertex + {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex +(4 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a {age:4, name: "orphan"}) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710659, "label": "", "properties": {"age": 4, "name": "orphan"}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) MATCH (a {age:4}) MATCH (a {name: "orphan"}) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710659, "label": "", "properties": {"age": 4, "name": "orphan"}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a {age:4}) MATCH (a {name: "orphan"}) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710659, "label": "", "properties": {"age": 4, "name": "orphan"}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) MATCH (a {age:4}) MATCH (a {name: "orphan"}) SET a.age = 3 RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) MATCH (a {age:3}) MATCH (a {name: "orphan"}) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a {name: "orphan"}) MATCH (a {age:3}) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) WHERE exists(a.age) AND exists(a.name) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710660, "label": "", "properties": {"age": 4, "name": "F"}}::vertex + {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex + {"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex +(3 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) WHERE exists(a.age) AND NOT exists(a.name) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------ + {"id": 281474976710665, "label": "", "properties": {"age": 4}}::vertex + {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex +(2 rows) + +-- check reuse of 'r' +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r]-() RETURN r $$) as (r agtype); + r +----------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge + {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge + {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge + {"id": 1407374883553283, "label": "e1", "end_id": 281474976710661, "start_id": 281474976710660, "properties": {}}::edge + {"id": 1407374883553283, "label": "e1", "end_id": 281474976710661, "start_id": 281474976710660, "properties": {}}::edge +(6 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r]-() MATCH ()-[r {relationship: "friends"}]-() RETURN r $$) as (r agtype); + r +----------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge +(2 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r {years:3, relationship: "friends"}]-() RETURN r $$) as (r agtype); + r +----------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge +(2 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r {years:3}]-() MATCH ()-[r {relationship: "friends"}]-() RETURN r $$) as (r agtype); + r +----------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge +(2 rows) + +--mismatch year #, should return nothing +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r {years:2}]-() MATCH ()-[r {relationship: "friends"}]-() RETURN r $$) as (r agtype); + r +--- +(0 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r {relationship:"enemies"}]-() MATCH ()-[r {years:4}]-() RETURN r $$) as (r agtype); + r +----------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge + {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge +(2 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r {relationship:"enemies"}]-() MATCH ()-[r {relationship:"friends"}]-() RETURN r $$) as (r agtype); + r +--- +(0 rows) + -- -- Clean up -- SELECT drop_graph('cypher_match', true); -NOTICE: drop cascades to 16 other objects +NOTICE: drop cascades to 17 other objects DETAIL: drop cascades to table cypher_match._ag_label_vertex drop cascades to table cypher_match._ag_label_edge drop cascades to table cypher_match.v @@ -1471,6 +1693,7 @@ drop cascades to table cypher_match.dup_edge drop cascades to table cypher_match.other_v drop cascades to table cypher_match.opt_match_v drop cascades to table cypher_match.opt_match_e +drop cascades to table cypher_match.knows NOTICE: graph "cypher_match" has been dropped drop_graph ------------ diff --git a/regress/expected/cypher_merge.out b/regress/expected/cypher_merge.out index 389c34d10..988dff3c2 100644 --- a/regress/expected/cypher_merge.out +++ b/regress/expected/cypher_merge.out @@ -513,15 +513,17 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtyp */ --test query SELECT * FROM cypher('cypher_merge', $$CREATE (n {i : 1}) SET n.i = 2 MERGE ({i: 2}) $$) AS (a agtype); -ERROR: missing FROM-clause entry for table "_age_default_alias_0" -LINE 5: SELECT * FROM cypher('cypher_merge', $$CREATE (n {i : 1}) SE... - ^ ---validate created correctly -SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a --- (0 rows) +--validate created correctly +SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); + a +---------------------------------------------------------------------- + {"id": 281474976710690, "label": "", "properties": {"i": 2}}::vertex +(1 row) + --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a @@ -541,7 +543,7 @@ SELECT * FROM cypher('cypher_merge', $$CREATE (n {i : 1}) SET n.i = 2 WITH n as SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------------- - {"id": 281474976710690, "label": "", "properties": {"i": 2}}::vertex + {"id": 281474976710691, "label": "", "properties": {"i": 2}}::vertex (1 row) --clean up @@ -569,7 +571,7 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n {i : 1}) SET n.i = 2 WITH n as a SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------------- - {"id": 281474976710691, "label": "", "properties": {"i": 2}}::vertex + {"id": 281474976710692, "label": "", "properties": {"i": 2}}::vertex (1 row) --clean up @@ -594,7 +596,7 @@ ERROR: vertex assigned to variable n was deleted SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------------- - {"id": 281474976710692, "label": "", "properties": {"i": 1}}::vertex + {"id": 281474976710693, "label": "", "properties": {"i": 1}}::vertex (1 row) --clean up @@ -672,7 +674,7 @@ SELECT * FROM cypher('cypher_merge', $$MERGE ()-[:e]-()$$) AS (a agtype); SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710693, "label": "", "properties": {}}::vertex, {"id": 844424930131982, "label": "e", "end_id": 281474976710694, "start_id": 281474976710693, "properties": {}}::edge, {"id": 281474976710694, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710694, "label": "", "properties": {}}::vertex, {"id": 844424930131982, "label": "e", "end_id": 281474976710695, "start_id": 281474976710694, "properties": {}}::edge, {"id": 281474976710695, "label": "", "properties": {}}::vertex]::path (1 row) --clean up @@ -687,14 +689,14 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtyp SELECT * FROM cypher('cypher_merge', $$MERGE (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------- - {"id": 281474976710695, "label": "", "properties": {}}::vertex + {"id": 281474976710696, "label": "", "properties": {}}::vertex (1 row) --validate SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------- - {"id": 281474976710695, "label": "", "properties": {}}::vertex + {"id": 281474976710696, "label": "", "properties": {}}::vertex (1 row) --clean up @@ -709,14 +711,14 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtyp SELECT * FROM cypher('cypher_merge', $$MERGE p=()-[:e]-() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710696, "label": "", "properties": {}}::vertex, {"id": 844424930131983, "label": "e", "end_id": 281474976710697, "start_id": 281474976710696, "properties": {}}::edge, {"id": 281474976710697, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710697, "label": "", "properties": {}}::vertex, {"id": 844424930131983, "label": "e", "end_id": 281474976710698, "start_id": 281474976710697, "properties": {}}::edge, {"id": 281474976710698, "label": "", "properties": {}}::vertex]::path (1 row) --validate SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710696, "label": "", "properties": {}}::vertex, {"id": 844424930131983, "label": "e", "end_id": 281474976710697, "start_id": 281474976710696, "properties": {}}::edge, {"id": 281474976710697, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710697, "label": "", "properties": {}}::vertex, {"id": 844424930131983, "label": "e", "end_id": 281474976710698, "start_id": 281474976710697, "properties": {}}::edge, {"id": 281474976710698, "label": "", "properties": {}}::vertex]::path (1 row) --clean up @@ -731,14 +733,14 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtyp SELECT * FROM cypher('cypher_merge', $$MERGE (a)-[:e]-(b) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------- - {"id": 281474976710698, "label": "", "properties": {}}::vertex + {"id": 281474976710699, "label": "", "properties": {}}::vertex (1 row) --validate SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710698, "label": "", "properties": {}}::vertex, {"id": 844424930131984, "label": "e", "end_id": 281474976710699, "start_id": 281474976710698, "properties": {}}::edge, {"id": 281474976710699, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710699, "label": "", "properties": {}}::vertex, {"id": 844424930131984, "label": "e", "end_id": 281474976710700, "start_id": 281474976710699, "properties": {}}::edge, {"id": 281474976710700, "label": "", "properties": {}}::vertex]::path (1 row) --clean up @@ -753,14 +755,14 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtyp SELECT * FROM cypher('cypher_merge', $$CREATE p=()-[:e]->() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710700, "label": "", "properties": {}}::vertex, {"id": 844424930131985, "label": "e", "end_id": 281474976710701, "start_id": 281474976710700, "properties": {}}::edge, {"id": 281474976710701, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710701, "label": "", "properties": {}}::vertex, {"id": 844424930131985, "label": "e", "end_id": 281474976710702, "start_id": 281474976710701, "properties": {}}::edge, {"id": 281474976710702, "label": "", "properties": {}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_merge', $$MERGE p=()-[:e]-() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710700, "label": "", "properties": {}}::vertex, {"id": 844424930131985, "label": "e", "end_id": 281474976710701, "start_id": 281474976710700, "properties": {}}::edge, {"id": 281474976710701, "label": "", "properties": {}}::vertex]::path - [{"id": 281474976710701, "label": "", "properties": {}}::vertex, {"id": 844424930131985, "label": "e", "end_id": 281474976710701, "start_id": 281474976710700, "properties": {}}::edge, {"id": 281474976710700, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710701, "label": "", "properties": {}}::vertex, {"id": 844424930131985, "label": "e", "end_id": 281474976710702, "start_id": 281474976710701, "properties": {}}::edge, {"id": 281474976710702, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710702, "label": "", "properties": {}}::vertex, {"id": 844424930131985, "label": "e", "end_id": 281474976710702, "start_id": 281474976710701, "properties": {}}::edge, {"id": 281474976710701, "label": "", "properties": {}}::vertex]::path (2 rows) --clean up @@ -805,7 +807,7 @@ ERROR: Existing variable m cannot be NULL in MERGE clause SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (a agtype); a ---------------------------------------------------------------- - {"id": 281474976710702, "label": "", "properties": {}}::vertex + {"id": 281474976710703, "label": "", "properties": {}}::vertex (1 row) -- diff --git a/regress/sql/cypher_match.sql b/regress/sql/cypher_match.sql index 344453e00..f08f8dfb0 100644 --- a/regress/sql/cypher_match.sql +++ b/regress/sql/cypher_match.sql @@ -734,6 +734,79 @@ SELECT * FROM cypher('cypher_match', $$ RETURN n $$) as (n agtype); +-- +-- Regression tests to check previous clause variable refs +-- +-- set up initial state and show what we're working with +SELECT * FROM cypher('cypher_match', $$ + CREATE (a {age: 4}) RETURN a $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ + CREATE (b {age: 6}) RETURN b $$) as (b agtype); + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) RETURN a $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) WHERE exists(a.name) RETURN a $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) WHERE exists(a.name) SET a.age = 4 RETURN a $$) as (a agtype); + + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a),(b) WHERE a.age = 4 AND a.name = "T" AND b.age = 6 + RETURN a,b $$) as (a agtype, b agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a),(b) WHERE a.age = 4 AND a.name = "T" AND b.age = 6 CREATE + (a)-[:knows {relationship: "friends", years: 3}]->(b) $$) as (r agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a),(b) WHERE a.age = 4 AND a.name = "orphan" AND b.age = 6 CREATE + (a)-[:knows {relationship: "enemies", years: 4}]->(b) $$) as (r agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a)-[r]-(b) RETURN r $$) as (r agtype); + +-- check reuse of 'a' +SELECT * FROM cypher('cypher_match', $$ + MATCH (a {age:4}) RETURN a $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) MATCH (a {age:4}) RETURN a $$) as (a agtype); + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a {age:4, name: "orphan"}) RETURN a $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) MATCH (a {age:4}) MATCH (a {name: "orphan"}) RETURN a $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a {age:4}) MATCH (a {name: "orphan"}) RETURN a $$) as (a agtype); + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) MATCH (a {age:4}) MATCH (a {name: "orphan"}) SET a.age = 3 RETURN a $$) as (a agtype); + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) MATCH (a {age:3}) MATCH (a {name: "orphan"}) RETURN a $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a {name: "orphan"}) MATCH (a {age:3}) RETURN a $$) as (a agtype); + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) WHERE exists(a.age) AND exists(a.name) RETURN a $$) as (a agtype); + +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) WHERE exists(a.age) AND NOT exists(a.name) RETURN a $$) as (a agtype); + +-- check reuse of 'r' +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r]-() RETURN r $$) as (r agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r]-() MATCH ()-[r {relationship: "friends"}]-() RETURN r $$) as (r agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r {years:3, relationship: "friends"}]-() RETURN r $$) as (r agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r {years:3}]-() MATCH ()-[r {relationship: "friends"}]-() RETURN r $$) as (r agtype); +--mismatch year #, should return nothing +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r {years:2}]-() MATCH ()-[r {relationship: "friends"}]-() RETURN r $$) as (r agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r {relationship:"enemies"}]-() MATCH ()-[r {years:4}]-() RETURN r $$) as (r agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r {relationship:"enemies"}]-() MATCH ()-[r {relationship:"friends"}]-() RETURN r $$) as (r agtype); + -- -- Clean up -- diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 526a23fbf..01b336057 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -163,7 +163,8 @@ static A_Expr *filter_vertices_on_label_id(cypher_parsestate *cpstate, Node *id_field, char *label); static Node *create_property_constraints(cypher_parsestate *cpstate, transform_entity *entity, - Node *property_constraints); + Node *property_constraints, + Node *prop_expr); static TargetEntry *findTarget(List *targetList, char *resname); static transform_entity *transform_VLE_edge_entity(cypher_parsestate *cpstate, cypher_relationship *rel, @@ -3497,33 +3498,43 @@ static A_Expr *filter_vertices_on_label_id(cypher_parsestate *cpstate, */ static Node *create_property_constraints(cypher_parsestate *cpstate, transform_entity *entity, - Node *property_constraints) + Node *property_constraints, + Node *prop_expr) { ParseState *pstate = (ParseState *)cpstate; char *entity_name; - ColumnRef *cr; - Node *prop_expr, *const_expr; + Node *const_expr; RangeTblEntry *rte; Node *last_srf = pstate->p_last_srf; - cr = makeNode(ColumnRef); - - entity_name = get_entity_name(entity); + /* + * If the prop_expr node wasn't passed in, create it. Otherwise, skip + * the creation step. + */ + if (prop_expr == NULL) + { + ColumnRef *cr = NULL; - cr->fields = list_make2(makeString(entity_name), makeString("properties")); + cr = makeNode(ColumnRef); + entity_name = get_entity_name(entity); + cr->fields = list_make2(makeString(entity_name), + makeString("properties")); - // use Postgres to get the properties' transform node - if ((rte = find_rte(cpstate, entity_name))) - { - prop_expr = scanRTEForColumn(pstate, rte, AG_VERTEX_COLNAME_PROPERTIES, - -1, 0, NULL); - } - else - { - prop_expr = transformExpr(pstate, (Node *)cr, EXPR_KIND_WHERE); + /* use Postgres to get the properties' transform node */ + rte = find_rte(cpstate, entity_name); + if (rte != NULL) + { + prop_expr = scanRTEForColumn(pstate, rte, + AG_VERTEX_COLNAME_PROPERTIES, -1, 0, + NULL); + } + else + { + prop_expr = transformExpr(pstate, (Node *)cr, EXPR_KIND_WHERE); + } } - // use cypher to get the constraints' transform node + /* use cypher to get the constraints' transform node */ const_expr = transform_cypher_expr(cpstate, property_constraints, EXPR_KIND_WHERE); @@ -3808,13 +3819,68 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, entity = make_transform_entity(cpstate, ENT_VERTEX, (Node *)node, expr); - /* transform properties if they exist */ + /* transform the properties if they exist */ if (node->props) { Node *n = NULL; + Node *prop_var = NULL; + Node *prop_expr = NULL; + + /* + * We need to build a transformed properties(prop_var) + * expression IF the properties variable already exists from a + * previous clause. Please note that the "found" prop_var was + * previously transformed. + */ + + /* get the prop_var if it was previously resolved */ + if (node->name != NULL) + { + prop_var = colNameToVar(pstate, node->name, false, + node->location); + } + + /* + * If prop_var exists and is an alias, just pass it through by + * assigning the prop_expr the prop_var. + */ + if (prop_var != NULL && + pg_strncasecmp(node->name, AGE_DEFAULT_ALIAS_PREFIX, + strlen(AGE_DEFAULT_ALIAS_PREFIX)) == 0) + { + prop_expr = prop_var; + } + /* + * Else, if it exists and is not an alias, create the prop_expr + * as a transformed properties(prop_var) function node. + */ + else if (prop_var != NULL) + { + /* + * Remember that prop_var is already transformed. We need + * to built the transform manually. + */ + FuncCall *fc = NULL; + List *targs = NIL; + List *fname = NIL; + + targs = lappend(targs, prop_var); + fname = list_make2(makeString("ag_catalog"), + makeString("age_properties")); + fc = makeFuncCall(fname, targs, -1); + + /* + * Hand off to ParseFuncOrColumn to create the function + * expression for properties(prop_var) + */ + prop_expr = ParseFuncOrColumn(pstate, fname, targs, + pstate->p_last_srf, fc, false, + -1); + } ((cypher_map*)node->props)->keep_null = true; - n = create_property_constraints(cpstate, entity, node->props); + n = create_property_constraints(cpstate, entity, node->props, + prop_expr); cpstate->property_constraint_quals = lappend(cpstate->property_constraint_quals, n); @@ -3873,13 +3939,66 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, if (rel->props) { - Node *n; + Node *r = NULL; + Node *prop_var = NULL; + Node *prop_expr = NULL; + + /* + * We need to build a transformed properties(prop_var) + * expression IF the properties variable already exists from + * a previous clause. Please note that the "found" prop_var + * was previously transformed. + */ + + /* get the prop_var if it was previously resolved */ + if (rel->name != NULL) + { + prop_var = colNameToVar(pstate, rel->name, false, + rel->location); + } + + /* + * If prop_var exists and is an alias, just pass it through by + * assigning the prop_expr the prop_var. + */ + if (prop_var != NULL && + pg_strncasecmp(rel->name, AGE_DEFAULT_ALIAS_PREFIX, + strlen(AGE_DEFAULT_ALIAS_PREFIX)) == 0) + { + prop_expr = prop_var; + } + /* + * Else, if it exists and is not an alias, create the prop_expr + * as a transformed properties(prop_var) function node. + */ + else if (prop_var != NULL) + { + /* + * Remember that prop_var is already transformed. We need + * to built the transform manually. + */ + FuncCall *fc = NULL; + List *targs = NIL; + List *fname = NIL; + + targs = lappend(targs, prop_var); + fname = list_make2(makeString("ag_catalog"), + makeString("age_properties")); + fc = makeFuncCall(fname, targs, -1); + + /* + * Hand off to ParseFuncOrColumn to create the function + * expression for properties(prop_var) + */ + prop_expr = ParseFuncOrColumn(pstate, fname, targs, + pstate->p_last_srf, fc, + false, -1); + } ((cypher_map*)rel->props)->keep_null = true; - n = create_property_constraints(cpstate, entity, - rel->props); + r = create_property_constraints(cpstate, entity, rel->props, prop_expr); cpstate->property_constraint_quals = - lappend(cpstate->property_constraint_quals, n); + lappend(cpstate->property_constraint_quals, r); } entities = lappend(entities, entity); From 0ef2dc27a0b4c328f819077a8c8c26ae2c0fb4de Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Wed, 22 Mar 2023 10:08:57 -0700 Subject: [PATCH 148/191] Fix property constraints against resolved variables (#724) (#751) Fixed an issue where an already resolved variable, when used for a property constraint, errored out. See #724 for more details. This is the second part of the fix for the match property constraint bug regarding variable reuse. The prior fix addressed clause-to-clause, this fix addresses within a clause. Adjusted and added additional regression tests. Co-authored-by: Dehowe Feng --- regress/expected/cypher_match.out | 118 ++++++++++++++++++++++++++--- regress/sql/cypher_match.sql | 40 ++++++++-- src/backend/parser/cypher_clause.c | 68 +++++++++++------ 3 files changed, 186 insertions(+), 40 deletions(-) diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index f3817a50d..0e5964067 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -502,25 +502,45 @@ SELECT * FROM cypher('cypher_match', $$MATCH (n:v)$$) AS (a agtype); ERROR: syntax error at end of input LINE 1: SELECT * FROM cypher('cypher_match', $$MATCH (n:v)$$) AS (a ... ^ ---Invalid Variables +--invalid variable reuse, these should fail SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]-()-[]-(a:v1) RETURN a $$) AS (a agtype); -ERROR: variable a already exists +ERROR: multiple labels for variable 'a' are not supported LINE 2: MATCH (a)-[]-()-[]-(a:v1) RETURN a ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH (a)-[]-(a:v2)-[]-(a) RETURN a +$$) AS (a agtype); +ERROR: multiple labels for variable 'a' are not supported +LINE 2: MATCH (a)-[]-(a:v2)-[]-(a) RETURN a + ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH (a)-[]-(a:v1) RETURN a +$$) AS (a agtype); +ERROR: multiple labels for variable 'a' are not supported +LINE 2: MATCH (a)-[]-(a:v1) RETURN a + ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH (a)-[]-(a)-[]-(a:v1) RETURN a +$$) AS (a agtype); +ERROR: multiple labels for variable 'a' are not supported +LINE 2: MATCH (a)-[]-(a)-[]-(a:v1) RETURN a + ^ +--Valid variable reuse, although why would you want to do it this way? SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)-[]-()-[a]-() RETURN a $$) AS (a agtype); -ERROR: variable a already exists +ERROR: variable 'a' is for a vertex LINE 2: MATCH (a:v1)-[]-()-[a]-() RETURN a ^ SELECT * FROM cypher('cypher_match', $$ - MATCH (a:v1)-[]-()-[]-(a {id:'will_fail'}) RETURN a + MATCH (a:v1)-[]-()-[]-(a {id:'will_not_fail'}) RETURN a $$) AS (a agtype); -ERROR: variable a already exists -LINE 2: MATCH (a:v1)-[]-()-[]-(a {id:'will_fail'}) RETURN a - ^ + a +--- +(0 rows) + --Incorrect Labels SELECT * FROM cypher('cypher_match', $$MATCH (n)-[:v]-() RETURN n$$) AS (n agtype); n @@ -1509,14 +1529,14 @@ SELECT * FROM cypher('cypher_match', $$ (1 row) SELECT * FROM cypher('cypher_match', $$ - MATCH (a),(b) WHERE a.age = 4 AND a.name = "T" AND b.age = 6 CREATE + MATCH (a),(b) WHERE a.age = 4 AND a.name = "T" AND b.age = 6 CREATE (a)-[:knows {relationship: "friends", years: 3}]->(b) $$) as (r agtype); r --- (0 rows) SELECT * FROM cypher('cypher_match', $$ - MATCH (a),(b) WHERE a.age = 4 AND a.name = "orphan" AND b.age = 6 CREATE + MATCH (a),(b) WHERE a.age = 4 AND a.name = "orphan" AND b.age = 6 CREATE (a)-[:knows {relationship: "enemies", years: 4}]->(b) $$) as (r agtype); r --- @@ -1534,7 +1554,7 @@ SELECT * FROM cypher('cypher_match', $$ {"id": 1407374883553283, "label": "e1", "end_id": 281474976710661, "start_id": 281474976710660, "properties": {}}::edge (6 rows) --- check reuse of 'a' +-- check reuse of 'a' clause-to-clause - vertices SELECT * FROM cypher('cypher_match', $$ MATCH (a {age:4}) RETURN a $$) as (a agtype); a @@ -1614,7 +1634,7 @@ SELECT * FROM cypher('cypher_match', $$ {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex (2 rows) --- check reuse of 'r' +-- check reuse of 'r' clause-to-clause - edges SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r]-() RETURN r $$) as (r agtype); r @@ -1672,6 +1692,82 @@ SELECT * FROM cypher('cypher_match', $$ --- (0 rows) +-- check reuse within clause - vertices +SELECT * FROM cypher('cypher_match', $$ CREATE (u {name: "Dave"})-[:knows]->({name: "John"})-[:knows]->(u) RETURN u $$) as (u agtype); + u +------------------------------------------------------------------------------ + {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ MATCH p=(u)-[]-()-[]-(u) RETURN p $$)as (p agtype); + p +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex]::path + [{"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex]::path + [{"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex]::path + [{"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex]::path +(4 rows) + +SELECT * FROM cypher('cypher_match', $$ MATCH p=(u)-[]->()-[]->(u) RETURN p $$)as (p agtype); + p +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex]::path + [{"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex]::path +(2 rows) + +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[]->()-[]->(a {name: "Dave"}) RETURN p $$)as (p agtype); + p +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex]::path +(1 row) + +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[]->()-[]->(a {name: "John"}) RETURN p $$)as (p agtype); + p +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex]::path +(1 row) + +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name: "Dave"})-[]->()-[]->(a {name: "Dave"}) RETURN p $$)as (p agtype); + p +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex]::path +(1 row) + +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name: "John"})-[]->()-[]->(a {name: "John"}) RETURN p $$)as (p agtype); + p +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex]::path +(1 row) + +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name: "Dave"})-[]->()-[]->(a) RETURN p $$)as (p agtype); + p +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex]::path +(1 row) + +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name: "John"})-[]->()-[]->(a) RETURN p $$)as (p agtype); + p +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex, {"id": 4785074604081155, "label": "knows", "end_id": 281474976710667, "start_id": 281474976710668, "properties": {}}::edge, {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex, {"id": 4785074604081156, "label": "knows", "end_id": 281474976710668, "start_id": 281474976710667, "properties": {}}::edge, {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex]::path +(1 row) + +-- these are illegal and should fail +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b]->(a) RETURN p $$)as (p agtype); +ERROR: duplicate edge variable 'b' within a clause +LINE 1: ...ROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b]->(a) R... + ^ +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b:knows]->(a) RETURN p $$)as (p agtype); +ERROR: duplicate edge variable 'b' within a clause +LINE 1: ...ROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b:knows]-... + ^ +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b:knows]->(a) RETURN p $$)as (p agtype); +ERROR: duplicate edge variable 'b' within a clause +LINE 1: ...pher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b:knows]-... + ^ +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b]->(a) RETURN p $$)as (p agtype); +ERROR: duplicate edge variable 'b' within a clause +LINE 1: ...pher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b]->(a) R... + ^ -- -- Clean up -- diff --git a/regress/sql/cypher_match.sql b/regress/sql/cypher_match.sql index f08f8dfb0..b05e79c52 100644 --- a/regress/sql/cypher_match.sql +++ b/regress/sql/cypher_match.sql @@ -271,17 +271,27 @@ EXECUTE property_ps(agtype_build_map('props', -- need a following RETURN clause (should fail) SELECT * FROM cypher('cypher_match', $$MATCH (n:v)$$) AS (a agtype); ---Invalid Variables +--invalid variable reuse, these should fail SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]-()-[]-(a:v1) RETURN a $$) AS (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a)-[]-(a:v2)-[]-(a) RETURN a +$$) AS (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a)-[]-(a:v1) RETURN a +$$) AS (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a)-[]-(a)-[]-(a:v1) RETURN a +$$) AS (a agtype); +--Valid variable reuse, although why would you want to do it this way? SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)-[]-()-[a]-() RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ - MATCH (a:v1)-[]-()-[]-(a {id:'will_fail'}) RETURN a + MATCH (a:v1)-[]-()-[]-(a {id:'will_not_fail'}) RETURN a $$) AS (a agtype); --Incorrect Labels @@ -750,20 +760,19 @@ SELECT * FROM cypher('cypher_match', $$ SELECT * FROM cypher('cypher_match', $$ MATCH (a) WHERE exists(a.name) SET a.age = 4 RETURN a $$) as (a agtype); - SELECT * FROM cypher('cypher_match', $$ MATCH (a),(b) WHERE a.age = 4 AND a.name = "T" AND b.age = 6 RETURN a,b $$) as (a agtype, b agtype); SELECT * FROM cypher('cypher_match', $$ - MATCH (a),(b) WHERE a.age = 4 AND a.name = "T" AND b.age = 6 CREATE + MATCH (a),(b) WHERE a.age = 4 AND a.name = "T" AND b.age = 6 CREATE (a)-[:knows {relationship: "friends", years: 3}]->(b) $$) as (r agtype); SELECT * FROM cypher('cypher_match', $$ - MATCH (a),(b) WHERE a.age = 4 AND a.name = "orphan" AND b.age = 6 CREATE + MATCH (a),(b) WHERE a.age = 4 AND a.name = "orphan" AND b.age = 6 CREATE (a)-[:knows {relationship: "enemies", years: 4}]->(b) $$) as (r agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[r]-(b) RETURN r $$) as (r agtype); --- check reuse of 'a' +-- check reuse of 'a' clause-to-clause - vertices SELECT * FROM cypher('cypher_match', $$ MATCH (a {age:4}) RETURN a $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ @@ -790,7 +799,7 @@ SELECT * FROM cypher('cypher_match', $$ SELECT * FROM cypher('cypher_match', $$ MATCH (a) WHERE exists(a.age) AND NOT exists(a.name) RETURN a $$) as (a agtype); --- check reuse of 'r' +-- check reuse of 'r' clause-to-clause - edges SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r]-() RETURN r $$) as (r agtype); SELECT * FROM cypher('cypher_match', $$ @@ -807,6 +816,23 @@ SELECT * FROM cypher('cypher_match', $$ SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r {relationship:"enemies"}]-() MATCH ()-[r {relationship:"friends"}]-() RETURN r $$) as (r agtype); +-- check reuse within clause - vertices +SELECT * FROM cypher('cypher_match', $$ CREATE (u {name: "Dave"})-[:knows]->({name: "John"})-[:knows]->(u) RETURN u $$) as (u agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=(u)-[]-()-[]-(u) RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=(u)-[]->()-[]->(u) RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[]->()-[]->(a {name: "Dave"}) RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[]->()-[]->(a {name: "John"}) RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name: "Dave"})-[]->()-[]->(a {name: "Dave"}) RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name: "John"})-[]->()-[]->(a {name: "John"}) RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name: "Dave"})-[]->()-[]->(a) RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name: "John"})-[]->()-[]->(a) RETURN p $$)as (p agtype); + +-- these are illegal and should fail +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b]->(a) RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b:knows]->(a) RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b:knows]->(a) RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b]->(a) RETURN p $$)as (p agtype); + -- -- Clean up -- diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 01b336057..ad876d8c3 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -4352,20 +4352,29 @@ static Expr *transform_cypher_edge(cypher_parsestate *cpstate, transform_entity *entity = find_variable(cpstate, rel->name); /* - * TODO: openCypher allows a variable to be used before it - * is properly declared. This logic is not satifactory - * for that and must be better developed. + * If the variable already exists, verify that it is for an edge. + * You cannot have the same edge repeated in a path. + * You cannot have an variable that is for a vertex. */ - if (entity != NULL && - (entity->type != ENT_EDGE || - !IS_DEFAULT_LABEL_EDGE(rel->label) || - rel->props)) + if (entity != NULL) { - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("variable %s already exists", rel->name), - parser_errposition(pstate, rel->location))); + if (entity->type == ENT_EDGE) + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("duplicate edge variable '%s' within a clause", + rel->name), + parser_errposition(pstate, rel->location))); + } + if (entity->type == ENT_VERTEX) + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("variable '%s' is for a vertex", rel->name), + parser_errposition(pstate, rel->location))); + } } + return te->expr; } } @@ -4444,7 +4453,7 @@ static Expr *transform_cypher_node(cypher_parsestate *cpstate, * segmentation faults, and other errors. * * Update: Nonexistent and mismatched labels now return a NULL value to - * prevent segmentation faults, and other errors. We can also consider + * prevent segmentation faults, and other errors. We can also consider * if an all-purpose label would be useful. */ node->label = NULL; @@ -4501,22 +4510,37 @@ static Expr *transform_cypher_node(cypher_parsestate *cpstate, { transform_entity *entity = find_variable(cpstate, node->name); - /* - * TODO: openCypher allows a variable to be used before it - * is properly declared. This logic is not satifactory - * for that and must be better developed. - */ - if (entity != NULL && - (entity->type != ENT_VERTEX || - !IS_DEFAULT_LABEL_VERTEX(node->label) || - node->props)) + /* If the variable already exists, verify that it is for a vertex */ + if (entity != NULL && (entity->type != ENT_VERTEX)) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("variable %s already exists", node->name), + errmsg("variable '%s' is for a edge", node->name), parser_errposition(pstate, node->location))); } + /* + * If the variable already exists, verify that any label specified + * is of the same name or scope. Reject those that aren't. + */ + if (entity != NULL) + { + cypher_node *cnode = (cypher_node *)entity->entity.node; + + if (cnode != NULL && + node != NULL && + /* allow node using a default label against resolved var */ + pg_strcasecmp(node->label, AG_DEFAULT_LABEL_VERTEX) != 0 && + /* allow labels with the same name */ + pg_strcasecmp(cnode->label, node->label) != 0) + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("multiple labels for variable '%s' are not supported", node->name), + parser_errposition(pstate, node->location))); + } + } + return te->expr; } } From b7fc3898afad218d2f7809b998896b1c3aef58a0 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Wed, 22 Mar 2023 22:16:48 +0500 Subject: [PATCH 149/191] Update CIs to pull age image from corresponding pg version tag (#757) - Since PG11 and master should be able to use the same files, check has been included in CIs to pull the correct image based on the branch from which the CI triggered. --- .github/workflows/go-driver.yml | 26 ++++++++++++++++--- .github/workflows/jdbc-driver.yaml | 20 +++++++++++++- .github/workflows/nodejs-driver.yaml | 20 +++++++++++++- .github/workflows/python-driver.yaml | 21 ++++++++++++++- drivers/docker-compose.yml | 2 +- .../apache/age/jdbc/BaseDockerizedTest.java | 7 ++++- 6 files changed, 87 insertions(+), 9 deletions(-) diff --git a/.github/workflows/go-driver.yml b/.github/workflows/go-driver.yml index fbf2cec99..21be683d6 100644 --- a/.github/workflows/go-driver.yml +++ b/.github/workflows/go-driver.yml @@ -2,10 +2,10 @@ name: Go Driver Tests on: push: - branches: [ "master", PG11 ] + branches: [ "master", "PG11" ] pull_request: - branches: [ "master", PG11 ] + branches: [ "master", "PG11" ] jobs: build: @@ -19,9 +19,27 @@ jobs: steps: - uses: actions/checkout@v3 - + + - name: Set tag based on branch + run: | + if [[ "$GITHUB_EVENT_NAME" == "push" ]]; then + if [[ "$GITHUB_REF" == "refs/heads/master" ]]; then + echo "TAG=latest" >> $GITHUB_ENV + elif [[ "$GITHUB_REF" == "refs/heads/PG11" ]]; then + echo "TAG=PG11_latest" >> $GITHUB_ENV + fi + elif [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then + if [[ "$GITHUB_BASE_REF" == "master" ]]; then + echo "TAG=latest" >> $GITHUB_ENV + elif [[ "$GITHUB_BASE_REF" == "PG11" ]]; then + echo "TAG=PG11_latest" >> $GITHUB_ENV + fi + fi + - name: Run apache/age docker image - run: docker-compose up -d + run: | + export TAG=$TAG + docker-compose up -d - name: Set up Go uses: actions/setup-go@v3 diff --git a/.github/workflows/jdbc-driver.yaml b/.github/workflows/jdbc-driver.yaml index 0946bdc3b..c8035b235 100644 --- a/.github/workflows/jdbc-driver.yaml +++ b/.github/workflows/jdbc-driver.yaml @@ -28,5 +28,23 @@ jobs: distribution: ${{ matrix.distributions }} java-version: '17' + - name: Set tag based on branch + run: | + if [[ "$GITHUB_EVENT_NAME" == "push" ]]; then + if [[ "$GITHUB_REF" == "refs/heads/master" ]]; then + echo "TAG=latest" >> $GITHUB_ENV + elif [[ "$GITHUB_REF" == "refs/heads/PG11" ]]; then + echo "TAG=PG11_latest" >> $GITHUB_ENV + fi + elif [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then + if [[ "$GITHUB_BASE_REF" == "master" ]]; then + echo "TAG=latest" >> $GITHUB_ENV + elif [[ "$GITHUB_BASE_REF" == "PG11" ]]; then + echo "TAG=PG11_latest" >> $GITHUB_ENV + fi + fi + - name: Build and Test - run: gradle build \ No newline at end of file + run: | + export TAG=$TAG + gradle build \ No newline at end of file diff --git a/.github/workflows/nodejs-driver.yaml b/.github/workflows/nodejs-driver.yaml index f812e2c33..55dccae58 100644 --- a/.github/workflows/nodejs-driver.yaml +++ b/.github/workflows/nodejs-driver.yaml @@ -18,8 +18,26 @@ jobs: steps: - uses: actions/checkout@v3 + - name: Set tag based on branch + run: | + if [[ "$GITHUB_EVENT_NAME" == "push" ]]; then + if [[ "$GITHUB_REF" == "refs/heads/master" ]]; then + echo "TAG=latest" >> $GITHUB_ENV + elif [[ "$GITHUB_REF" == "refs/heads/PG11" ]]; then + echo "TAG=PG11_latest" >> $GITHUB_ENV + fi + elif [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then + if [[ "$GITHUB_BASE_REF" == "master" ]]; then + echo "TAG=latest" >> $GITHUB_ENV + elif [[ "$GITHUB_BASE_REF" == "PG11" ]]; then + echo "TAG=PG11_latest" >> $GITHUB_ENV + fi + fi + - name: Run apache/age docker image - run: docker-compose up -d + run: | + export TAG=$TAG + docker-compose up -d - name: Set up Node uses: actions/setup-node@v3 diff --git a/.github/workflows/python-driver.yaml b/.github/workflows/python-driver.yaml index 720e8c22f..a7ef9741d 100644 --- a/.github/workflows/python-driver.yaml +++ b/.github/workflows/python-driver.yaml @@ -19,7 +19,26 @@ jobs: - uses: actions/checkout@v3 - name: Run apache/age docker image - run: docker-compose up -d + - name: Set tag based on branch + run: | + if [[ "$GITHUB_EVENT_NAME" == "push" ]]; then + if [[ "$GITHUB_REF" == "refs/heads/master" ]]; then + echo "TAG=latest" >> $GITHUB_ENV + elif [[ "$GITHUB_REF" == "refs/heads/PG11" ]]; then + echo "TAG=PG11_latest" >> $GITHUB_ENV + fi + elif [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then + if [[ "$GITHUB_BASE_REF" == "master" ]]; then + echo "TAG=latest" >> $GITHUB_ENV + elif [[ "$GITHUB_BASE_REF" == "PG11" ]]; then + echo "TAG=PG11_latest" >> $GITHUB_ENV + fi + fi + + - name: Run apache/age docker image + run: | + export TAG=$TAG + docker-compose up -d - name: Set up python uses: actions/setup-python@v4 diff --git a/drivers/docker-compose.yml b/drivers/docker-compose.yml index 8bdf00318..1716d227b 100644 --- a/drivers/docker-compose.yml +++ b/drivers/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.3" services: db: - image: apache/age:latest + image: apache/age:${TAG} environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=agens diff --git a/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/BaseDockerizedTest.java b/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/BaseDockerizedTest.java index 8e6aea460..2a71a4624 100644 --- a/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/BaseDockerizedTest.java +++ b/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/BaseDockerizedTest.java @@ -50,8 +50,13 @@ public void afterAll() throws Exception { @BeforeAll public void beforeAll() throws Exception { String CORRECT_DB_PASSWORDS = "postgres"; + String imageTag = System.getenv("TAG"); + + if (imageTag == null) { + imageTag = "latest"; + } agensGraphContainer = new GenericContainer<>(DockerImageName - .parse("apache/age:latest")) + .parse("apache/age:" + imageTag)) .withEnv("POSTGRES_PASSWORD", CORRECT_DB_PASSWORDS) .withExposedPorts(5432); agensGraphContainer.start(); From 86d3b825440d1d3585003b298936a4f9ab501df9 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Thu, 23 Mar 2023 00:46:13 +0500 Subject: [PATCH 150/191] Fix python driver CI (#760) - Removed duplicate line which was introduced by mistake and was failing this CI. --- .github/workflows/python-driver.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/python-driver.yaml b/.github/workflows/python-driver.yaml index a7ef9741d..2f06eb7b8 100644 --- a/.github/workflows/python-driver.yaml +++ b/.github/workflows/python-driver.yaml @@ -18,7 +18,6 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Run apache/age docker image - name: Set tag based on branch run: | if [[ "$GITHUB_EVENT_NAME" == "push" ]]; then From a84c0392ffcfe63ecbc70ca4b45f1f0c3de28f7d Mon Sep 17 00:00:00 2001 From: Dehowe Feng <8065116+dehowef@users.noreply.github.com> Date: Fri, 24 Mar 2023 01:12:09 +0900 Subject: [PATCH 151/191] Include invalid labels in reused variables. (#751) (#762) Fixed a segmentation fault edge case regarding invalid labels being used in a repeated variable. --- regress/expected/cypher_match.out | 6 ++++++ regress/sql/cypher_match.sql | 3 +++ src/backend/parser/cypher_clause.c | 7 +++++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index 0e5964067..d1c58c1f2 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -527,6 +527,12 @@ $$) AS (a agtype); ERROR: multiple labels for variable 'a' are not supported LINE 2: MATCH (a)-[]-(a)-[]-(a:v1) RETURN a ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH (a)-[]-(a)-[]-(a:invalid_label) RETURN a +$$) AS (a agtype); +ERROR: multiple labels for variable 'a' are not supported +LINE 2: MATCH (a)-[]-(a)-[]-(a:invalid_label) RETURN a + ^ --Valid variable reuse, although why would you want to do it this way? SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)-[]-()-[a]-() RETURN a diff --git a/regress/sql/cypher_match.sql b/regress/sql/cypher_match.sql index b05e79c52..2d9c5758e 100644 --- a/regress/sql/cypher_match.sql +++ b/regress/sql/cypher_match.sql @@ -284,6 +284,9 @@ $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]-(a)-[]-(a:v1) RETURN a $$) AS (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a)-[]-(a)-[]-(a:invalid_label) RETURN a +$$) AS (a agtype); --Valid variable reuse, although why would you want to do it this way? SELECT * FROM cypher('cypher_match', $$ diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index ad876d8c3..4c2b10ebb 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -4527,12 +4527,15 @@ static Expr *transform_cypher_node(cypher_parsestate *cpstate, { cypher_node *cnode = (cypher_node *)entity->entity.node; - if (cnode != NULL && + + + if (!node->label || + (cnode != NULL && node != NULL && /* allow node using a default label against resolved var */ pg_strcasecmp(node->label, AG_DEFAULT_LABEL_VERTEX) != 0 && /* allow labels with the same name */ - pg_strcasecmp(cnode->label, node->label) != 0) + pg_strcasecmp(cnode->label, node->label) != 0)) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), From 467e207a58f12f2cfbe284e7b98225d7c3064bd1 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Thu, 30 Mar 2023 20:53:20 +0500 Subject: [PATCH 152/191] Update readme and version for python driver (#780) - Removed external links from readme. - Updated version to 1.0.0 --- drivers/python/README.md | 7 ------- drivers/python/age/VERSION.py | 4 ++-- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/drivers/python/README.md b/drivers/python/README.md index e82e770fc..a38a4cde1 100644 --- a/drivers/python/README.md +++ b/drivers/python/README.md @@ -31,17 +31,10 @@ python -m unittest -v test_agtypes.py python setup.py install ``` -### Install from PyPi - -``` -pip install apache-age-python -``` - ### For more information about [Apache AGE](https://age.apache.org/) * Apache Age : https://age.apache.org/ * Github : https://github.com/apache/age * Document : https://age.apache.org/age-manual/master/index.html -* apache-age-python GitHub : https://github.com/rhizome-ai/apache-age-python ### Check AGE loaded on your PostgreSQL Connect to your containerized Postgres instance and then run the following commands: diff --git a/drivers/python/age/VERSION.py b/drivers/python/age/VERSION.py index 8a631b405..3b014ea5b 100644 --- a/drivers/python/age/VERSION.py +++ b/drivers/python/age/VERSION.py @@ -15,8 +15,8 @@ -VER_MAJOR = 0 +VER_MAJOR = 1 VER_MINOR = 0 -VER_MICRO = 3 +VER_MICRO = 0 VERSION = '.'.join([str(VER_MAJOR),str(VER_MINOR),str(VER_MICRO)]) From 871bcd32f873872ac117babe02739ccded2ca495 Mon Sep 17 00:00:00 2001 From: Panagiotis Foliadis Date: Thu, 20 Apr 2023 01:51:03 +0300 Subject: [PATCH 153/191] Fixed typos mainly in comments (#750) The spell-checking was done with the tool "cspell". It would be nice if an automated spell-checking routine could be implemented in our CI workflows. Signed-off-by: Panagiotis Foliadis --- src/backend/executor/cypher_create.c | 2 +- src/backend/executor/cypher_set.c | 2 +- src/backend/parser/cypher_clause.c | 4 ++-- src/backend/parser/cypher_item.c | 2 +- src/backend/utils/adt/age_vle.c | 2 +- src/backend/utils/adt/agtype.c | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/backend/executor/cypher_create.c b/src/backend/executor/cypher_create.c index 7a03efd3d..e1b9ec89d 100644 --- a/src/backend/executor/cypher_create.c +++ b/src/backend/executor/cypher_create.c @@ -107,7 +107,7 @@ static void begin_cypher_create(CustomScanState *node, EState *estate, if (!CYPHER_TARGET_NODE_INSERT_ENTITY(cypher_node->flags)) continue; - // Open relation and aquire a row exclusive lock. + // Open relation and acquire a row exclusive lock. rel = heap_open(cypher_node->relid, RowExclusiveLock); // Initialize resultRelInfo for the vertex diff --git a/src/backend/executor/cypher_set.c b/src/backend/executor/cypher_set.c index 4c81faf5c..5bd7b41b7 100644 --- a/src/backend/executor/cypher_set.c +++ b/src/backend/executor/cypher_set.c @@ -241,7 +241,7 @@ static agtype_value *replace_entity_in_path(agtype_value *path, elem = &path->val.array.elems[i]; - // something unexpected happended, throw an error. + // something unexpected happened, throw an error. if (elem->type != AGTV_VERTEX && elem->type != AGTV_EDGE) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 4c2b10ebb..deec381ea 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -1700,7 +1700,7 @@ cypher_update_information *transform_cypher_set_item_list( ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg( - "SET clause doesnt not support updating maps or lists in a property"), + "SET clause doesn't not support updating maps or lists in a property"), parser_errposition(pstate, set_item->location))); } @@ -5548,7 +5548,7 @@ Query *cypher_parse_sub_analyze(Node *parseTree, * for one tuple the path exists (or there is multiple paths that exist and all * paths must be emitted) and for another the path does not exist. This is * similar to OPTIONAL MATCH, however with the added feature of creating the - * path if not there, rather than just emiting NULL. + * path if not there, rather than just emitting NULL. */ static Query *transform_cypher_merge(cypher_parsestate *cpstate, cypher_clause *clause) diff --git a/src/backend/parser/cypher_item.c b/src/backend/parser/cypher_item.c index c90073b7c..6eabb60e7 100644 --- a/src/backend/parser/cypher_item.c +++ b/src/backend/parser/cypher_item.c @@ -112,7 +112,7 @@ List *transform_cypher_item_list(cypher_parsestate *cpstate, List *item_list, target_list = lappend(target_list, te); /* - * Did the tranformed item contain an aggregate function? If it didn't, + * Did the transformed item contain an aggregate function? If it didn't, * add it to the potential group_clause. If it did, flag that we found * an aggregate in an expression */ diff --git a/src/backend/utils/adt/age_vle.c b/src/backend/utils/adt/age_vle.c index f86a9e9b7..6654a6458 100644 --- a/src/backend/utils/adt/age_vle.c +++ b/src/backend/utils/adt/age_vle.c @@ -500,7 +500,7 @@ static VLE_local_context *build_local_vle_context(FunctionCallInfo fcinfo, /* * Get the VLE grammar node id, if it exists. Remember, we overload the - * age_vle function, for now, for backwards compatability + * age_vle function, for now, for backwards compatibility */ if (PG_NARGS() == 8) { diff --git a/src/backend/utils/adt/agtype.c b/src/backend/utils/adt/agtype.c index cba3316b2..388725b49 100644 --- a/src/backend/utils/adt/agtype.c +++ b/src/backend/utils/adt/agtype.c @@ -1991,7 +1991,7 @@ Datum _agtype_build_path(PG_FUNCTION_ARGS) /* initialize the result */ memset(&result, 0, sizeof(agtype_in_state)); - /* push in the begining of the agtype array */ + /* push in the beginning of the agtype array */ result.res = push_agtype_value(&result.parse_state, WAGT_BEGIN_ARRAY, NULL); /* loop through the path components */ From f35f343a11c275001f506c18d3b70baaff557d4d Mon Sep 17 00:00:00 2001 From: Arunabh Das Date: Fri, 21 Apr 2023 02:06:16 +0800 Subject: [PATCH 154/191] ADD: Generation of Parser & Lexer AND installer (#714) --- .github/workflows/go-driver.yml | 10 + drivers/golang/README.md | 6 + drivers/golang/age/builder.go | 2 +- drivers/golang/age/mapper.go | 2 +- drivers/golang/go.mod | 5 +- drivers/golang/go.sum | 14 +- drivers/golang/install.bat | 85 ++ drivers/golang/install.sh | 141 ++ drivers/golang/parser/README.md | 13 - drivers/golang/parser/age_base_listener.go | 88 -- drivers/golang/parser/age_base_visitor.go | 59 - drivers/golang/parser/age_lexer.go | 212 --- drivers/golang/parser/age_listener.go | 76 -- drivers/golang/parser/age_parser.go | 1375 -------------------- drivers/golang/parser/age_visitor.go | 52 - drivers/golang/parser/generate.go | 3 + drivers/golang/parser/generate.sh | 12 + 17 files changed, 272 insertions(+), 1883 deletions(-) create mode 100644 drivers/golang/install.bat create mode 100755 drivers/golang/install.sh delete mode 100644 drivers/golang/parser/README.md delete mode 100644 drivers/golang/parser/age_base_listener.go delete mode 100644 drivers/golang/parser/age_base_visitor.go delete mode 100644 drivers/golang/parser/age_lexer.go delete mode 100644 drivers/golang/parser/age_listener.go delete mode 100644 drivers/golang/parser/age_parser.go delete mode 100644 drivers/golang/parser/age_visitor.go create mode 100644 drivers/golang/parser/generate.go create mode 100755 drivers/golang/parser/generate.sh diff --git a/.github/workflows/go-driver.yml b/.github/workflows/go-driver.yml index 21be683d6..581b479a5 100644 --- a/.github/workflows/go-driver.yml +++ b/.github/workflows/go-driver.yml @@ -13,6 +13,7 @@ jobs: strategy: matrix: go-version: [ '1.18', '1.19' ] + distributions: ['zulu', 'temurin', 'microsoft'] defaults: run: working-directory: drivers/golang/age/ @@ -45,6 +46,15 @@ jobs: uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} + + - name: Set up Java + uses: actions/setup-java@v3 + with: + distribution: ${{ matrix.distributions }} + java-version: '17' + + - name: Generate + run: go generate ./../... - name: Build run: go build -v ./... diff --git a/drivers/golang/README.md b/drivers/golang/README.md index 367031000..89bd899f3 100644 --- a/drivers/golang/README.md +++ b/drivers/golang/README.md @@ -10,6 +10,12 @@ AGType parser and driver support for [Apache AGE](https://age.apache.org/), grap * over Go 1.18 / 1.19 * This module runs on golang standard api [database/sql](https://golang.org/pkg/database/sql/) and [antlr4-python3](https://github.com/antlr/antlr4/tree/master/runtime/Go/antlr) +### Installation (From source) +Run (Windows): install.bat +Run (Linux & OSX): +``` +sh install.sh +``` ### Go get ``` diff --git a/drivers/golang/age/builder.go b/drivers/golang/age/builder.go index be1c4bbb1..73bae7018 100644 --- a/drivers/golang/age/builder.go +++ b/drivers/golang/age/builder.go @@ -25,7 +25,7 @@ import ( "strconv" "strings" - "github.com/antlr/antlr4/runtime/Go/antlr" + "github.com/antlr/antlr4/runtime/Go/antlr/v4" "github.com/apache/age/drivers/golang/parser" ) diff --git a/drivers/golang/age/mapper.go b/drivers/golang/age/mapper.go index 5857b1331..987d3c94d 100644 --- a/drivers/golang/age/mapper.go +++ b/drivers/golang/age/mapper.go @@ -23,7 +23,7 @@ import ( "reflect" "strings" - "github.com/antlr/antlr4/runtime/Go/antlr" + "github.com/antlr/antlr4/runtime/Go/antlr/v4" "github.com/apache/age/drivers/golang/parser" ) diff --git a/drivers/golang/go.mod b/drivers/golang/go.mod index a6bd74bd6..a0774e756 100644 --- a/drivers/golang/go.mod +++ b/drivers/golang/go.mod @@ -22,13 +22,14 @@ module github.com/apache/age/drivers/golang go 1.19 require ( - github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210521184019-c5ad59b459ec - github.com/lib/pq v1.10.2 + github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1 + github.com/lib/pq v1.10.7 github.com/stretchr/testify v1.7.0 ) require ( github.com/davecgh/go-spew v1.1.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect ) diff --git a/drivers/golang/go.sum b/drivers/golang/go.sum index 89d1775ed..79dc4cecd 100644 --- a/drivers/golang/go.sum +++ b/drivers/golang/go.sum @@ -1,14 +1,20 @@ -github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210521184019-c5ad59b459ec h1:EEyRvzmpEUZ+I8WmD5cw/vY8EqhambkOqy5iFr0908A= -github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210521184019-c5ad59b459ec/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= +github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230219212500-1f9a474cc2dc h1:ikxgKfnYm4kXCOohe1uCkVFwZcABDZbVsqginko+GY8= +github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230219212500-1f9a474cc2dc/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= +github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1 h1:X8MJ0fnN5FPdcGF5Ij2/OW+HgiJrRg3AfHAx1PJtIzM= +github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230321174746-8dcc6526cfb1/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/lib/pq v1.10.2 h1:AqzbZs4ZoCBp+GtejcpCpcxM3zlSMx29dXbUSeVtJb8= -github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= +github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +golang.org/x/exp v0.0.0-20230223210539-50820d90acfd h1:wtFuj4DoOcAdb82Zh2PI90xiaqgp7maYA7KxjQXVtkY= +golang.org/x/exp v0.0.0-20230223210539-50820d90acfd/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug= +golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= diff --git a/drivers/golang/install.bat b/drivers/golang/install.bat new file mode 100644 index 000000000..fc2baddbf --- /dev/null +++ b/drivers/golang/install.bat @@ -0,0 +1,85 @@ +@echo off + +rem Install Java Development Kit (JDK) +echo Installing JDK... +if not exist "%ProgramFiles%\Java\jdk-19\" ( + mkdir C:\temp + cd C:\temp + powershell Invoke-WebRequest -Uri "https://download.oracle.com/java/19/archive/jdk-19.0.2_windows-x64_bin.exe" -OutFile jdk-19.0.2_windows-x64_bin.exe + start /wait jdk-19.0.2_windows-x64_bin.exe /s ADDLOCAL="ToolsFeature" /s + del /f jdk-19.0.2_windows-x64_bin.exe + setx /M JAVA_HOME "C:\Program Files\Java\jdk-19.0.2" + setx /M PATH "%PATH%;%JAVA_HOME%\bin" +) else ( + echo JDK already installed. +) + +rem Install Apache Maven +echo Installing Apache Maven... +if not exist "%ProgramFiles%\Apache Maven\apache-maven-3.9.0\" ( + mkdir C:\temp + cd C:\temp + powershell Invoke-WebRequest -Uri "https://dlcdn.apache.org/maven/maven-3/3.9.0/binaries/apache-maven-3.9.0-bin.zip" -OutFile apache-maven-3.9.0-bin.zip + powershell Expand-Archive apache-maven-3.9.0-bin.zip -DestinationPath \"%ProgramFiles%\Apache Maven\" + del /f apache-maven-3.9.0-bin.zip + setx /M PATH "%PATH%;%ProgramFiles%\Apache Maven\apache-maven-3.9.0-bin\bin" +) else ( + echo Apache Maven already installed. +) + +rem Download and install ANTLR +echo Downloading ANTLR... +if not exist "%ProgramFiles%\ANTLR" ( + mkdir "%ProgramFiles%\ANTLR" + cd "%ProgramFiles%\ANTLR" + powershell Invoke-WebRequest -Uri "https://www.antlr.org/download/antlr-4.11.1-complete.jar" -OutFile "antlr-4.11.1-complete.jar" + setx /M PATH "%PATH%;%ProgramFiles%\ANTLR\" + setx /M CLASSPATH ".;%ProgramFiles%\ANTLR\antlr-4.11.1-complete.jar;%CLASSPATH%" +) + +echo ANTLR installation complete. + +rem Checking Compatablity for Golang +echo Checking if current version of Golang >= Go 1.18..... +set "minimum_version=1.18" +set "installed_version=" +set "download_url=https://go.dev/dl/go1.19.7.windows-amd64.msi" + +:: Check if Go is installed and get its version +set "go_path=" +for %%i in (go.exe) do set "go_path=%%~$PATH:i" +if defined go_path ( + for /f "tokens=3" %%v in ('go version 2^>^&1') do set "installed_version=%%v" +) + +:: If Go is not installed or the version is less than 1.18, prompt the user to install a new version +if not defined installed_version ( + echo installing Go + :: Download and install the latest version of Go + powershell -Command "& {Invoke-WebRequest -Uri "%download_url%" -OutFile '%TEMP%\go-minimum-version.msi'}" + start /wait msiexec /i "%TEMP%\go-minimum-version.msi" + for /f "tokens=3" %%v in ('go version 2^>^&1') do set "installed_version=%%v" +) else if "%installed_version%" lss "%minimum_version%" ( + set /p "install_new_version=Go version %minimum_version% or higher is required. Would you like to install the latest version? (y/n)" + if /i "%install_new_version%"=="y" ( + :: Download and install the latest version of Go + powershell -Command "& {Invoke-WebRequest -Uri "%download_url%" -OutFile '%TEMP%\go-minimum-version.msi'}" + start /wait msiexec /i "%TEMP%\go-minimum_version.msi" + for /f "tokens=3" %%v in ('go version 2^>^&1') do set "installed_version=%%v" + ) else ( + echo Please update Go version before installing driver. + goto skip + ) +) + +rem Installing Driver +echo --^> Generating ANTLR parser ^& lexer ^for Golang% +java org.antlr.v4.Tool -Dlanguage=Go -visitor Age.g4 -o parser/ +echo --^> Installing Driver +go get -u ./... +goto end +:skip +echo Aborted +:end +pause +endlocal \ No newline at end of file diff --git a/drivers/golang/install.sh b/drivers/golang/install.sh new file mode 100755 index 000000000..5fbc377f2 --- /dev/null +++ b/drivers/golang/install.sh @@ -0,0 +1,141 @@ +#!/bin/sh + +os=$(uname) +arch=$(uname -m) + +java=$(java -version 2>&1 | head -n 1 | cut -d ' ' -f 3 | cut -d '.' -f 1 | cut -d '"' -f 2) +# Check JDK version +echo "Checking for JDK..." +if ! java -version >/dev/null 2>&1 || [ $java -lt 11 ]; then + echo "JDK not found or less than version 11, would you like to install? ()" + echo "Y/N ->" + read answer + if [ "$answer" = y ] || [ "$answer" = Y ]; then + echo "Installing..." + if [[ "$os" == "Darwin" ]]; then + cd /tmp + if [[ "$arch" == "x86_64" ]]; then + curl "https://download.oracle.com/java/20/latest/jdk-20_macos-x64_bin.dmg" -o jdk-20_bin.dmg + elif [[ "$arch" == "arm64" ]]; then + curl "https://download.oracle.com/java/20/latest/jdk-20_macos-aarch64_bin.dmg" -o jdk-20_bin.dmg + fi + hdiutil mount jdk-20_bin.dmg + # sudo installer -pkg "/Volumes/JDK 20/JDK 20.pkg" -target "/" + sudo open -w "/Volumes/JDK 20/JDK 20.pkg" + hdiutil unmount "/Volumes/JDK 20" + rm jdk-20_bin.dmg + + elif [[ "$os" == "Linux" ]]; then + mkdir -p ~/tmp/jdk20 + cd ~/tmp/jdk20 + if [[ "$arch" == "x86_64" ]]; then + curl "https://download.oracle.com/java/20/latest/jdk-20_linux-x64_bin.tar.gz" -o jdk-20_bin.tar.gz + elif [[ "$arch" == "arm64" ]]; then + curl "https://download.oracle.com/java/20/latest/jdk-20_linux-aarch64_bin.tar.gz" -o jdk-20_bin.tar.gz + fi + sudo tar zxvf jdk-20_bin.tar.gz -C /usr/local/ + cd ~/ + rm -rf ~/tmp/jdk20/ + fi + echo "JDK installation complete." + else + echo "Please install JDK >= 11.0.16" + exit 0 + fi +else + echo "JDK already installed." +fi + +antlr=$(/usr/local/jdk-20/bin/jar xf /usr/local/antlr/antlr-*-complete.jar META-INF/MANIFEST.MF >/dev/null 2>&1 && grep 'Implementation-Version' META-INF/MANIFEST.MF | cut -d ' ' -f 2 && rm -rf META-INF) +# Check ANTLR installation and version +echo "Checking for ANTLR..." +check_antlr () { + if [ ! -z $antlr ]; then + if ([ "$(echo $antlr | cut -d '.' -f 1)" -lt 4 ] && [ "$(echo $antlr | cut -d '.' -f 2)" -lt 11 ] && [ "$(echo $antlr | cut -d '.' -f 3)" -lt 1 ]); then + return 0 + else + return 1 + fi + else + return 0 + fi +} + +if check_antlr; then + echo "ANTLR not found in Default Location or less than version 4.11.1, would you like to Install?" + echo "(If installed in other location, please edit the location inside the shell script before running)" + echo "Y/N ->" + read answer + if [ "$answer" = y ] || [ "$answer" = Y ]; then + mkdir -p ~/tmp/antlr4.11.1 + cd ~/tmp/antlr4.11.1 + curl -LO "https://www.antlr.org/download/antlr-4.11.1-complete.jar" + sudo mkdir -p /usr/local/antlr + sudo mv ~/tmp/antlr4.11.1/antlr-4.11.1-complete.jar /usr/local/antlr/antlr-4.11.1-complete.jar + + echo 'export CLASSPATH=".:/usr/local/antlr/antlr-4.11.1-complete.jar"' >>~/.bashrc + . ~/.bashrc + echo "ANTLR installation complete." + else + echo "Please install ANTLR >= 4.11.1" + exit 0 + fi + # +else + echo "ANTLR already installed." +fi + +# Check Go installation and version +echo "Checking for Go..." +if ! command -v go >/dev/null 2>&1 || { [ $(go version | grep -o -E '[0-9]+\.[0-9]+' | head -n 1 | cut -d '.' -f 1) -lt 1 ] && [ $(go version | grep -o -E '[0-9]+\.[0-9]+' | head -n 1 | cut -d '.' -f 2) -lt 19 ]; }; then + echo "Go not installed or version is less than 1.19, would you like to install?" + echo "Y/N ->" + read answer + if [ "$answer" = y ] || [ "$answer" = Y ]; then + if [[ "$os" == "Darwin" ]]; then + cd /tmp + if [[ "$arch" == "x86_64" ]]; then + curl "https://go.dev/dl/go1.20.2.darwin-amd64.pkg" -o go1.20.2.pkg + elif [[ "$arch" == "arm64" ]]; then + curl "https://go.dev/dl/go1.20.2.darwin-arm64.pkg" -o go1.20.2.pkg + fi + + #sudo installer -pkg "go1.20.2.pkg" -target "/" + sudo open -w golang.pkg + + elif [[ "$os" == "Linux" ]]; then + mdkir -p ~/tmp/go1.20.2 + cd ~/tmp/go1.20.2 + if [[ "$arch" == "x86_64" ]]; then + curl "https://go.dev/dl/go1.20.2.linux-amd64.tar.gz" -o go1.20.2.tar.gz + elif [[ "$arch" == "arm64" ]]; then + curl "https://go.dev/dl/go1.20.2.linux-arm64.tar.gz" -o go1.20.2.tar.gz + fi + + if command -v go >/dev/null 2>&1; then + rm -rf /usr/local/go + fi + sudo tar -C /usr/local -xzf go1.20.2.linux-amd64.tar.gz + + if ! [[ ":$PATH:" == *":/usr/local/go/bin:"* ]]; then + export PATH=$PATH:/usr/local/go/bin + fi + fi + echo "Go installation complete" + else + echo "Please install Go >= 1.19" + exit 0 + fi +else + echo "Go already installed." +fi + + + +echo "Generating Parser & Lexer..." +java -Xmx500M -cp "/usr/local/lib/antlr-4.11.1-complete.jar:$CLASSPATH" org.antlr.v4.Tool -Dlanguage=Go -visitor Age.g4 + +echo "Installing Driver..." +go get -u ./... +echo "Successfully Installed Driver!" +exit 0 diff --git a/drivers/golang/parser/README.md b/drivers/golang/parser/README.md deleted file mode 100644 index a70eede38..000000000 --- a/drivers/golang/parser/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# ANTLR4 Go Query Result data parser generation rules for apache-age-go -Go driver for Apache AGE, graph extension for PostgreSQL. - - -### Build -#### 1) Generate query result data parser with ANTLR4 -``` -# prerequisites : -# - java over 8 -# - download ANTLR4 from https://www.antlr.org/download/antlr-4.9.2-complete.jar -# - java -cp antlr-4.9.2-complete.jar org.antlr.v4.Tool -Dlanguage=Go -visitor Age.g4 -``` - diff --git a/drivers/golang/parser/age_base_listener.go b/drivers/golang/parser/age_base_listener.go deleted file mode 100644 index 009707d6d..000000000 --- a/drivers/golang/parser/age_base_listener.go +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -// Code generated from Age.g4 by ANTLR 4.9.2. DO NOT EDIT. - -package parser // Age - -import "github.com/antlr/antlr4/runtime/Go/antlr" - -// BaseAgeListener is a complete listener for a parse tree produced by AgeParser. -type BaseAgeListener struct{} - -var _ AgeListener = &BaseAgeListener{} - -// VisitTerminal is called when a terminal node is visited. -func (s *BaseAgeListener) VisitTerminal(node antlr.TerminalNode) {} - -// VisitErrorNode is called when an error node is visited. -func (s *BaseAgeListener) VisitErrorNode(node antlr.ErrorNode) {} - -// EnterEveryRule is called when any rule is entered. -func (s *BaseAgeListener) EnterEveryRule(ctx antlr.ParserRuleContext) {} - -// ExitEveryRule is called when any rule is exited. -func (s *BaseAgeListener) ExitEveryRule(ctx antlr.ParserRuleContext) {} - -// EnterAgeout is called when production ageout is entered. -func (s *BaseAgeListener) EnterAgeout(ctx *AgeoutContext) {} - -// ExitAgeout is called when production ageout is exited. -func (s *BaseAgeListener) ExitAgeout(ctx *AgeoutContext) {} - -// EnterVertex is called when production vertex is entered. -func (s *BaseAgeListener) EnterVertex(ctx *VertexContext) {} - -// ExitVertex is called when production vertex is exited. -func (s *BaseAgeListener) ExitVertex(ctx *VertexContext) {} - -// EnterEdge is called when production edge is entered. -func (s *BaseAgeListener) EnterEdge(ctx *EdgeContext) {} - -// ExitEdge is called when production edge is exited. -func (s *BaseAgeListener) ExitEdge(ctx *EdgeContext) {} - -// EnterPath is called when production path is entered. -func (s *BaseAgeListener) EnterPath(ctx *PathContext) {} - -// ExitPath is called when production path is exited. -func (s *BaseAgeListener) ExitPath(ctx *PathContext) {} - -// EnterValue is called when production value is entered. -func (s *BaseAgeListener) EnterValue(ctx *ValueContext) {} - -// ExitValue is called when production value is exited. -func (s *BaseAgeListener) ExitValue(ctx *ValueContext) {} - -// EnterProperties is called when production properties is entered. -func (s *BaseAgeListener) EnterProperties(ctx *PropertiesContext) {} - -// ExitProperties is called when production properties is exited. -func (s *BaseAgeListener) ExitProperties(ctx *PropertiesContext) {} - -// EnterPair is called when production pair is entered. -func (s *BaseAgeListener) EnterPair(ctx *PairContext) {} - -// ExitPair is called when production pair is exited. -func (s *BaseAgeListener) ExitPair(ctx *PairContext) {} - -// EnterArr is called when production arr is entered. -func (s *BaseAgeListener) EnterArr(ctx *ArrContext) {} - -// ExitArr is called when production arr is exited. -func (s *BaseAgeListener) ExitArr(ctx *ArrContext) {} diff --git a/drivers/golang/parser/age_base_visitor.go b/drivers/golang/parser/age_base_visitor.go deleted file mode 100644 index 42d59464a..000000000 --- a/drivers/golang/parser/age_base_visitor.go +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -// Code generated from Age.g4 by ANTLR 4.9.2. DO NOT EDIT. - -package parser // Age - -import "github.com/antlr/antlr4/runtime/Go/antlr" - -type BaseAgeVisitor struct { - *antlr.BaseParseTreeVisitor -} - -func (v *BaseAgeVisitor) VisitAgeout(ctx *AgeoutContext) interface{} { - return v.VisitChildren(ctx) -} - -func (v *BaseAgeVisitor) VisitVertex(ctx *VertexContext) interface{} { - return v.VisitChildren(ctx) -} - -func (v *BaseAgeVisitor) VisitEdge(ctx *EdgeContext) interface{} { - return v.VisitChildren(ctx) -} - -func (v *BaseAgeVisitor) VisitPath(ctx *PathContext) interface{} { - return v.VisitChildren(ctx) -} - -func (v *BaseAgeVisitor) VisitValue(ctx *ValueContext) interface{} { - return v.VisitChildren(ctx) -} - -func (v *BaseAgeVisitor) VisitProperties(ctx *PropertiesContext) interface{} { - return v.VisitChildren(ctx) -} - -func (v *BaseAgeVisitor) VisitPair(ctx *PairContext) interface{} { - return v.VisitChildren(ctx) -} - -func (v *BaseAgeVisitor) VisitArr(ctx *ArrContext) interface{} { - return v.VisitChildren(ctx) -} diff --git a/drivers/golang/parser/age_lexer.go b/drivers/golang/parser/age_lexer.go deleted file mode 100644 index fface8327..000000000 --- a/drivers/golang/parser/age_lexer.go +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -// Code generated from Age.g4 by ANTLR 4.9.2. DO NOT EDIT. - -package parser - -import ( - "fmt" - "unicode" - - "github.com/antlr/antlr4/runtime/Go/antlr" -) - -// Suppress unused import error -var _ = fmt.Printf -var _ = unicode.IsLetter - -var serializedLexerAtn = []uint16{ - 3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 19, 212, - 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, - 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, - 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, - 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, - 9, 23, 4, 24, 9, 24, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, - 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, - 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, - 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, - 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 7, 12, 98, 10, 12, 12, 12, 14, 12, - 101, 11, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, - 13, 3, 13, 3, 13, 5, 13, 114, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, - 3, 15, 3, 15, 3, 15, 5, 15, 124, 10, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, - 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 5, 19, 137, 10, 19, 3, 19, - 3, 19, 3, 19, 6, 19, 142, 10, 19, 13, 19, 14, 19, 143, 5, 19, 146, 10, - 19, 3, 19, 5, 19, 149, 10, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, - 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, - 20, 3, 20, 3, 20, 3, 20, 5, 20, 171, 10, 20, 3, 21, 5, 21, 174, 10, 21, - 3, 21, 3, 21, 3, 21, 6, 21, 179, 10, 21, 13, 21, 14, 21, 180, 5, 21, 183, - 10, 21, 3, 21, 5, 21, 186, 10, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 7, - 22, 193, 10, 22, 12, 22, 14, 22, 196, 11, 22, 5, 22, 198, 10, 22, 3, 23, - 3, 23, 5, 23, 202, 10, 23, 3, 23, 3, 23, 3, 24, 6, 24, 207, 10, 24, 13, - 24, 14, 24, 208, 3, 24, 3, 24, 2, 2, 25, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, - 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 2, 31, - 2, 33, 2, 35, 2, 37, 16, 39, 17, 41, 18, 43, 2, 45, 2, 47, 19, 3, 2, 10, - 10, 2, 36, 36, 49, 49, 94, 94, 100, 100, 104, 104, 112, 112, 116, 116, - 118, 118, 5, 2, 50, 59, 67, 72, 99, 104, 5, 2, 2, 33, 36, 36, 94, 94, 3, - 2, 50, 59, 3, 2, 51, 59, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, - 5, 2, 11, 12, 15, 15, 34, 34, 2, 223, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, - 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, - 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, - 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 37, - 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 3, - 49, 3, 2, 2, 2, 5, 51, 3, 2, 2, 2, 7, 53, 3, 2, 2, 2, 9, 55, 3, 2, 2, 2, - 11, 57, 3, 2, 2, 2, 13, 59, 3, 2, 2, 2, 15, 61, 3, 2, 2, 2, 17, 70, 3, - 2, 2, 2, 19, 77, 3, 2, 2, 2, 21, 84, 3, 2, 2, 2, 23, 94, 3, 2, 2, 2, 25, - 113, 3, 2, 2, 2, 27, 115, 3, 2, 2, 2, 29, 120, 3, 2, 2, 2, 31, 125, 3, - 2, 2, 2, 33, 131, 3, 2, 2, 2, 35, 133, 3, 2, 2, 2, 37, 136, 3, 2, 2, 2, - 39, 170, 3, 2, 2, 2, 41, 173, 3, 2, 2, 2, 43, 197, 3, 2, 2, 2, 45, 199, - 3, 2, 2, 2, 47, 206, 3, 2, 2, 2, 49, 50, 7, 93, 2, 2, 50, 4, 3, 2, 2, 2, - 51, 52, 7, 46, 2, 2, 52, 6, 3, 2, 2, 2, 53, 54, 7, 95, 2, 2, 54, 8, 3, - 2, 2, 2, 55, 56, 7, 125, 2, 2, 56, 10, 3, 2, 2, 2, 57, 58, 7, 127, 2, 2, - 58, 12, 3, 2, 2, 2, 59, 60, 7, 60, 2, 2, 60, 14, 3, 2, 2, 2, 61, 62, 7, - 60, 2, 2, 62, 63, 7, 60, 2, 2, 63, 64, 7, 120, 2, 2, 64, 65, 7, 103, 2, - 2, 65, 66, 7, 116, 2, 2, 66, 67, 7, 118, 2, 2, 67, 68, 7, 103, 2, 2, 68, - 69, 7, 122, 2, 2, 69, 16, 3, 2, 2, 2, 70, 71, 7, 60, 2, 2, 71, 72, 7, 60, - 2, 2, 72, 73, 7, 103, 2, 2, 73, 74, 7, 102, 2, 2, 74, 75, 7, 105, 2, 2, - 75, 76, 7, 103, 2, 2, 76, 18, 3, 2, 2, 2, 77, 78, 7, 60, 2, 2, 78, 79, - 7, 60, 2, 2, 79, 80, 7, 114, 2, 2, 80, 81, 7, 99, 2, 2, 81, 82, 7, 118, - 2, 2, 82, 83, 7, 106, 2, 2, 83, 20, 3, 2, 2, 2, 84, 85, 7, 60, 2, 2, 85, - 86, 7, 60, 2, 2, 86, 87, 7, 112, 2, 2, 87, 88, 7, 119, 2, 2, 88, 89, 7, - 111, 2, 2, 89, 90, 7, 103, 2, 2, 90, 91, 7, 116, 2, 2, 91, 92, 7, 107, - 2, 2, 92, 93, 7, 101, 2, 2, 93, 22, 3, 2, 2, 2, 94, 99, 7, 36, 2, 2, 95, - 98, 5, 29, 15, 2, 96, 98, 5, 35, 18, 2, 97, 95, 3, 2, 2, 2, 97, 96, 3, - 2, 2, 2, 98, 101, 3, 2, 2, 2, 99, 97, 3, 2, 2, 2, 99, 100, 3, 2, 2, 2, - 100, 102, 3, 2, 2, 2, 101, 99, 3, 2, 2, 2, 102, 103, 7, 36, 2, 2, 103, - 24, 3, 2, 2, 2, 104, 105, 7, 118, 2, 2, 105, 106, 7, 116, 2, 2, 106, 107, - 7, 119, 2, 2, 107, 114, 7, 103, 2, 2, 108, 109, 7, 104, 2, 2, 109, 110, - 7, 99, 2, 2, 110, 111, 7, 110, 2, 2, 111, 112, 7, 117, 2, 2, 112, 114, - 7, 103, 2, 2, 113, 104, 3, 2, 2, 2, 113, 108, 3, 2, 2, 2, 114, 26, 3, 2, - 2, 2, 115, 116, 7, 112, 2, 2, 116, 117, 7, 119, 2, 2, 117, 118, 7, 110, - 2, 2, 118, 119, 7, 110, 2, 2, 119, 28, 3, 2, 2, 2, 120, 123, 7, 94, 2, - 2, 121, 124, 9, 2, 2, 2, 122, 124, 5, 31, 16, 2, 123, 121, 3, 2, 2, 2, - 123, 122, 3, 2, 2, 2, 124, 30, 3, 2, 2, 2, 125, 126, 7, 119, 2, 2, 126, - 127, 5, 33, 17, 2, 127, 128, 5, 33, 17, 2, 128, 129, 5, 33, 17, 2, 129, - 130, 5, 33, 17, 2, 130, 32, 3, 2, 2, 2, 131, 132, 9, 3, 2, 2, 132, 34, - 3, 2, 2, 2, 133, 134, 10, 4, 2, 2, 134, 36, 3, 2, 2, 2, 135, 137, 7, 47, - 2, 2, 136, 135, 3, 2, 2, 2, 136, 137, 3, 2, 2, 2, 137, 138, 3, 2, 2, 2, - 138, 145, 5, 43, 22, 2, 139, 141, 7, 48, 2, 2, 140, 142, 9, 5, 2, 2, 141, - 140, 3, 2, 2, 2, 142, 143, 3, 2, 2, 2, 143, 141, 3, 2, 2, 2, 143, 144, - 3, 2, 2, 2, 144, 146, 3, 2, 2, 2, 145, 139, 3, 2, 2, 2, 145, 146, 3, 2, - 2, 2, 146, 148, 3, 2, 2, 2, 147, 149, 5, 45, 23, 2, 148, 147, 3, 2, 2, - 2, 148, 149, 3, 2, 2, 2, 149, 38, 3, 2, 2, 2, 150, 151, 7, 80, 2, 2, 151, - 152, 7, 99, 2, 2, 152, 171, 7, 80, 2, 2, 153, 154, 7, 47, 2, 2, 154, 155, - 7, 75, 2, 2, 155, 156, 7, 112, 2, 2, 156, 157, 7, 104, 2, 2, 157, 158, - 7, 107, 2, 2, 158, 159, 7, 112, 2, 2, 159, 160, 7, 107, 2, 2, 160, 161, - 7, 118, 2, 2, 161, 171, 7, 123, 2, 2, 162, 163, 7, 75, 2, 2, 163, 164, - 7, 112, 2, 2, 164, 165, 7, 104, 2, 2, 165, 166, 7, 107, 2, 2, 166, 167, - 7, 112, 2, 2, 167, 168, 7, 107, 2, 2, 168, 169, 7, 118, 2, 2, 169, 171, - 7, 123, 2, 2, 170, 150, 3, 2, 2, 2, 170, 153, 3, 2, 2, 2, 170, 162, 3, - 2, 2, 2, 171, 40, 3, 2, 2, 2, 172, 174, 7, 47, 2, 2, 173, 172, 3, 2, 2, - 2, 173, 174, 3, 2, 2, 2, 174, 175, 3, 2, 2, 2, 175, 182, 5, 43, 22, 2, - 176, 178, 7, 48, 2, 2, 177, 179, 9, 5, 2, 2, 178, 177, 3, 2, 2, 2, 179, - 180, 3, 2, 2, 2, 180, 178, 3, 2, 2, 2, 180, 181, 3, 2, 2, 2, 181, 183, - 3, 2, 2, 2, 182, 176, 3, 2, 2, 2, 182, 183, 3, 2, 2, 2, 183, 185, 3, 2, - 2, 2, 184, 186, 5, 45, 23, 2, 185, 184, 3, 2, 2, 2, 185, 186, 3, 2, 2, - 2, 186, 187, 3, 2, 2, 2, 187, 188, 5, 21, 11, 2, 188, 42, 3, 2, 2, 2, 189, - 198, 7, 50, 2, 2, 190, 194, 9, 6, 2, 2, 191, 193, 9, 5, 2, 2, 192, 191, - 3, 2, 2, 2, 193, 196, 3, 2, 2, 2, 194, 192, 3, 2, 2, 2, 194, 195, 3, 2, - 2, 2, 195, 198, 3, 2, 2, 2, 196, 194, 3, 2, 2, 2, 197, 189, 3, 2, 2, 2, - 197, 190, 3, 2, 2, 2, 198, 44, 3, 2, 2, 2, 199, 201, 9, 7, 2, 2, 200, 202, - 9, 8, 2, 2, 201, 200, 3, 2, 2, 2, 201, 202, 3, 2, 2, 2, 202, 203, 3, 2, - 2, 2, 203, 204, 5, 43, 22, 2, 204, 46, 3, 2, 2, 2, 205, 207, 9, 9, 2, 2, - 206, 205, 3, 2, 2, 2, 207, 208, 3, 2, 2, 2, 208, 206, 3, 2, 2, 2, 208, - 209, 3, 2, 2, 2, 209, 210, 3, 2, 2, 2, 210, 211, 8, 24, 2, 2, 211, 48, - 3, 2, 2, 2, 20, 2, 97, 99, 113, 123, 136, 143, 145, 148, 170, 173, 180, - 182, 185, 194, 197, 201, 208, 3, 8, 2, 2, -} - -var lexerChannelNames = []string{ - "DEFAULT_TOKEN_CHANNEL", "HIDDEN", -} - -var lexerModeNames = []string{ - "DEFAULT_MODE", -} - -var lexerLiteralNames = []string{ - "", "'['", "','", "']'", "'{'", "'}'", "':'", "'::vertex'", "'::edge'", - "'::path'", "'::numeric'", "", "", "'null'", -} - -var lexerSymbolicNames = []string{ - "", "", "", "", "", "", "", "KW_VERTEX", "KW_EDGE", "KW_PATH", "KW_NUMERIC", - "STRING", "BOOL", "NULL", "NUMBER", "FLOAT_EXPR", "NUMERIC", "WS", -} - -var lexerRuleNames = []string{ - "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "KW_VERTEX", "KW_EDGE", - "KW_PATH", "KW_NUMERIC", "STRING", "BOOL", "NULL", "ESC", "UNICODE", "HEX", - "SAFECODEPOINT", "NUMBER", "FLOAT_EXPR", "NUMERIC", "INT", "EXP", "WS", -} - -type AgeLexer struct { - *antlr.BaseLexer - channelNames []string - modeNames []string - // TODO: EOF string -} - -// NewAgeLexer produces a new lexer instance for the optional input antlr.CharStream. -// -// The *AgeLexer instance produced may be reused by calling the SetInputStream method. -// The initial lexer configuration is expensive to construct, and the object is not thread-safe; -// however, if used within a Golang sync.Pool, the construction cost amortizes well and the -// objects can be used in a thread-safe manner. -func NewAgeLexer(input antlr.CharStream) *AgeLexer { - l := new(AgeLexer) - lexerDeserializer := antlr.NewATNDeserializer(nil) - lexerAtn := lexerDeserializer.DeserializeFromUInt16(serializedLexerAtn) - lexerDecisionToDFA := make([]*antlr.DFA, len(lexerAtn.DecisionToState)) - for index, ds := range lexerAtn.DecisionToState { - lexerDecisionToDFA[index] = antlr.NewDFA(ds, index) - } - l.BaseLexer = antlr.NewBaseLexer(input) - l.Interpreter = antlr.NewLexerATNSimulator(l, lexerAtn, lexerDecisionToDFA, antlr.NewPredictionContextCache()) - - l.channelNames = lexerChannelNames - l.modeNames = lexerModeNames - l.RuleNames = lexerRuleNames - l.LiteralNames = lexerLiteralNames - l.SymbolicNames = lexerSymbolicNames - l.GrammarFileName = "Age.g4" - // TODO: l.EOF = antlr.TokenEOF - - return l -} - -// AgeLexer tokens. -const ( - AgeLexerT__0 = 1 - AgeLexerT__1 = 2 - AgeLexerT__2 = 3 - AgeLexerT__3 = 4 - AgeLexerT__4 = 5 - AgeLexerT__5 = 6 - AgeLexerKW_VERTEX = 7 - AgeLexerKW_EDGE = 8 - AgeLexerKW_PATH = 9 - AgeLexerKW_NUMERIC = 10 - AgeLexerSTRING = 11 - AgeLexerBOOL = 12 - AgeLexerNULL = 13 - AgeLexerNUMBER = 14 - AgeLexerFLOAT_EXPR = 15 - AgeLexerNUMERIC = 16 - AgeLexerWS = 17 -) diff --git a/drivers/golang/parser/age_listener.go b/drivers/golang/parser/age_listener.go deleted file mode 100644 index fdb06ce60..000000000 --- a/drivers/golang/parser/age_listener.go +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -// Code generated from Age.g4 by ANTLR 4.9.2. DO NOT EDIT. - -package parser // Age - -import "github.com/antlr/antlr4/runtime/Go/antlr" - -// AgeListener is a complete listener for a parse tree produced by AgeParser. -type AgeListener interface { - antlr.ParseTreeListener - - // EnterAgeout is called when entering the ageout production. - EnterAgeout(c *AgeoutContext) - - // EnterVertex is called when entering the vertex production. - EnterVertex(c *VertexContext) - - // EnterEdge is called when entering the edge production. - EnterEdge(c *EdgeContext) - - // EnterPath is called when entering the path production. - EnterPath(c *PathContext) - - // EnterValue is called when entering the value production. - EnterValue(c *ValueContext) - - // EnterProperties is called when entering the properties production. - EnterProperties(c *PropertiesContext) - - // EnterPair is called when entering the pair production. - EnterPair(c *PairContext) - - // EnterArr is called when entering the arr production. - EnterArr(c *ArrContext) - - // ExitAgeout is called when exiting the ageout production. - ExitAgeout(c *AgeoutContext) - - // ExitVertex is called when exiting the vertex production. - ExitVertex(c *VertexContext) - - // ExitEdge is called when exiting the edge production. - ExitEdge(c *EdgeContext) - - // ExitPath is called when exiting the path production. - ExitPath(c *PathContext) - - // ExitValue is called when exiting the value production. - ExitValue(c *ValueContext) - - // ExitProperties is called when exiting the properties production. - ExitProperties(c *PropertiesContext) - - // ExitPair is called when exiting the pair production. - ExitPair(c *PairContext) - - // ExitArr is called when exiting the arr production. - ExitArr(c *ArrContext) -} diff --git a/drivers/golang/parser/age_parser.go b/drivers/golang/parser/age_parser.go deleted file mode 100644 index 4b8a91f3c..000000000 --- a/drivers/golang/parser/age_parser.go +++ /dev/null @@ -1,1375 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -// Code generated from Age.g4 by ANTLR 4.9.2. DO NOT EDIT. - -package parser // Age - -import ( - "fmt" - "reflect" - "strconv" - - "github.com/antlr/antlr4/runtime/Go/antlr" -) - -// Suppress unused import errors -var _ = fmt.Printf -var _ = reflect.Copy -var _ = strconv.Itoa - -var parserATN = []uint16{ - 3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 19, 90, 4, - 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, - 8, 9, 8, 4, 9, 9, 9, 3, 2, 3, 2, 3, 2, 3, 2, 5, 2, 23, 10, 2, 3, 3, 3, - 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, - 5, 38, 10, 5, 12, 5, 14, 5, 41, 11, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, - 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 54, 10, 6, 3, 7, 3, 7, 3, 7, 3, - 7, 7, 7, 60, 10, 7, 12, 7, 14, 7, 63, 11, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, - 7, 69, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 79, - 10, 9, 12, 9, 14, 9, 82, 11, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 88, 10, 9, - 3, 9, 2, 2, 10, 2, 4, 6, 8, 10, 12, 14, 16, 2, 2, 2, 96, 2, 22, 3, 2, 2, - 2, 4, 24, 3, 2, 2, 2, 6, 27, 3, 2, 2, 2, 8, 30, 3, 2, 2, 2, 10, 53, 3, - 2, 2, 2, 12, 68, 3, 2, 2, 2, 14, 70, 3, 2, 2, 2, 16, 87, 3, 2, 2, 2, 18, - 23, 5, 10, 6, 2, 19, 23, 5, 4, 3, 2, 20, 23, 5, 6, 4, 2, 21, 23, 5, 8, - 5, 2, 22, 18, 3, 2, 2, 2, 22, 19, 3, 2, 2, 2, 22, 20, 3, 2, 2, 2, 22, 21, - 3, 2, 2, 2, 23, 3, 3, 2, 2, 2, 24, 25, 5, 12, 7, 2, 25, 26, 7, 9, 2, 2, - 26, 5, 3, 2, 2, 2, 27, 28, 5, 12, 7, 2, 28, 29, 7, 10, 2, 2, 29, 7, 3, - 2, 2, 2, 30, 31, 7, 3, 2, 2, 31, 39, 5, 4, 3, 2, 32, 33, 7, 4, 2, 2, 33, - 34, 5, 6, 4, 2, 34, 35, 7, 4, 2, 2, 35, 36, 5, 4, 3, 2, 36, 38, 3, 2, 2, - 2, 37, 32, 3, 2, 2, 2, 38, 41, 3, 2, 2, 2, 39, 37, 3, 2, 2, 2, 39, 40, - 3, 2, 2, 2, 40, 42, 3, 2, 2, 2, 41, 39, 3, 2, 2, 2, 42, 43, 7, 5, 2, 2, - 43, 44, 7, 11, 2, 2, 44, 9, 3, 2, 2, 2, 45, 54, 7, 13, 2, 2, 46, 54, 7, - 16, 2, 2, 47, 54, 7, 18, 2, 2, 48, 54, 7, 17, 2, 2, 49, 54, 7, 14, 2, 2, - 50, 54, 7, 15, 2, 2, 51, 54, 5, 12, 7, 2, 52, 54, 5, 16, 9, 2, 53, 45, - 3, 2, 2, 2, 53, 46, 3, 2, 2, 2, 53, 47, 3, 2, 2, 2, 53, 48, 3, 2, 2, 2, - 53, 49, 3, 2, 2, 2, 53, 50, 3, 2, 2, 2, 53, 51, 3, 2, 2, 2, 53, 52, 3, - 2, 2, 2, 54, 11, 3, 2, 2, 2, 55, 56, 7, 6, 2, 2, 56, 61, 5, 14, 8, 2, 57, - 58, 7, 4, 2, 2, 58, 60, 5, 14, 8, 2, 59, 57, 3, 2, 2, 2, 60, 63, 3, 2, - 2, 2, 61, 59, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 64, 3, 2, 2, 2, 63, 61, - 3, 2, 2, 2, 64, 65, 7, 7, 2, 2, 65, 69, 3, 2, 2, 2, 66, 67, 7, 6, 2, 2, - 67, 69, 7, 7, 2, 2, 68, 55, 3, 2, 2, 2, 68, 66, 3, 2, 2, 2, 69, 13, 3, - 2, 2, 2, 70, 71, 7, 13, 2, 2, 71, 72, 7, 8, 2, 2, 72, 73, 5, 10, 6, 2, - 73, 15, 3, 2, 2, 2, 74, 75, 7, 3, 2, 2, 75, 80, 5, 10, 6, 2, 76, 77, 7, - 4, 2, 2, 77, 79, 5, 10, 6, 2, 78, 76, 3, 2, 2, 2, 79, 82, 3, 2, 2, 2, 80, - 78, 3, 2, 2, 2, 80, 81, 3, 2, 2, 2, 81, 83, 3, 2, 2, 2, 82, 80, 3, 2, 2, - 2, 83, 84, 7, 5, 2, 2, 84, 88, 3, 2, 2, 2, 85, 86, 7, 3, 2, 2, 86, 88, - 7, 5, 2, 2, 87, 74, 3, 2, 2, 2, 87, 85, 3, 2, 2, 2, 88, 17, 3, 2, 2, 2, - 9, 22, 39, 53, 61, 68, 80, 87, -} -var literalNames = []string{ - "", "'['", "','", "']'", "'{'", "'}'", "':'", "'::vertex'", "'::edge'", - "'::path'", "'::numeric'", "", "", "'null'", -} -var symbolicNames = []string{ - "", "", "", "", "", "", "", "KW_VERTEX", "KW_EDGE", "KW_PATH", "KW_NUMERIC", - "STRING", "BOOL", "NULL", "NUMBER", "FLOAT_EXPR", "NUMERIC", "WS", -} - -var ruleNames = []string{ - "ageout", "vertex", "edge", "path", "value", "properties", "pair", "arr", -} - -type AgeParser struct { - *antlr.BaseParser -} - -// NewAgeParser produces a new parser instance for the optional input antlr.TokenStream. -// -// The *AgeParser instance produced may be reused by calling the SetInputStream method. -// The initial parser configuration is expensive to construct, and the object is not thread-safe; -// however, if used within a Golang sync.Pool, the construction cost amortizes well and the -// objects can be used in a thread-safe manner. -func NewAgeParser(input antlr.TokenStream) *AgeParser { - this := new(AgeParser) - deserializer := antlr.NewATNDeserializer(nil) - deserializedATN := deserializer.DeserializeFromUInt16(parserATN) - decisionToDFA := make([]*antlr.DFA, len(deserializedATN.DecisionToState)) - for index, ds := range deserializedATN.DecisionToState { - decisionToDFA[index] = antlr.NewDFA(ds, index) - } - this.BaseParser = antlr.NewBaseParser(input) - - this.Interpreter = antlr.NewParserATNSimulator(this, deserializedATN, decisionToDFA, antlr.NewPredictionContextCache()) - this.RuleNames = ruleNames - this.LiteralNames = literalNames - this.SymbolicNames = symbolicNames - this.GrammarFileName = "Age.g4" - - return this -} - -// AgeParser tokens. -const ( - AgeParserEOF = antlr.TokenEOF - AgeParserT__0 = 1 - AgeParserT__1 = 2 - AgeParserT__2 = 3 - AgeParserT__3 = 4 - AgeParserT__4 = 5 - AgeParserT__5 = 6 - AgeParserKW_VERTEX = 7 - AgeParserKW_EDGE = 8 - AgeParserKW_PATH = 9 - AgeParserKW_NUMERIC = 10 - AgeParserSTRING = 11 - AgeParserBOOL = 12 - AgeParserNULL = 13 - AgeParserNUMBER = 14 - AgeParserFLOAT_EXPR = 15 - AgeParserNUMERIC = 16 - AgeParserWS = 17 -) - -// AgeParser rules. -const ( - AgeParserRULE_ageout = 0 - AgeParserRULE_vertex = 1 - AgeParserRULE_edge = 2 - AgeParserRULE_path = 3 - AgeParserRULE_value = 4 - AgeParserRULE_properties = 5 - AgeParserRULE_pair = 6 - AgeParserRULE_arr = 7 -) - -// IAgeoutContext is an interface to support dynamic dispatch. -type IAgeoutContext interface { - antlr.ParserRuleContext - - // GetParser returns the parser. - GetParser() antlr.Parser - - // IsAgeoutContext differentiates from other interfaces. - IsAgeoutContext() -} - -type AgeoutContext struct { - *antlr.BaseParserRuleContext - parser antlr.Parser -} - -func NewEmptyAgeoutContext() *AgeoutContext { - var p = new(AgeoutContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) - p.RuleIndex = AgeParserRULE_ageout - return p -} - -func (*AgeoutContext) IsAgeoutContext() {} - -func NewAgeoutContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *AgeoutContext { - var p = new(AgeoutContext) - - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) - - p.parser = parser - p.RuleIndex = AgeParserRULE_ageout - - return p -} - -func (s *AgeoutContext) GetParser() antlr.Parser { return s.parser } - -func (s *AgeoutContext) Value() IValueContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IValueContext)(nil)).Elem(), 0) - - if t == nil { - return nil - } - - return t.(IValueContext) -} - -func (s *AgeoutContext) Vertex() IVertexContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IVertexContext)(nil)).Elem(), 0) - - if t == nil { - return nil - } - - return t.(IVertexContext) -} - -func (s *AgeoutContext) Edge() IEdgeContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IEdgeContext)(nil)).Elem(), 0) - - if t == nil { - return nil - } - - return t.(IEdgeContext) -} - -func (s *AgeoutContext) Path() IPathContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IPathContext)(nil)).Elem(), 0) - - if t == nil { - return nil - } - - return t.(IPathContext) -} - -func (s *AgeoutContext) GetRuleContext() antlr.RuleContext { - return s -} - -func (s *AgeoutContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { - return antlr.TreesStringTree(s, ruleNames, recog) -} - -func (s *AgeoutContext) EnterRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(AgeListener); ok { - listenerT.EnterAgeout(s) - } -} - -func (s *AgeoutContext) ExitRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(AgeListener); ok { - listenerT.ExitAgeout(s) - } -} - -func (s *AgeoutContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { - switch t := visitor.(type) { - case AgeVisitor: - return t.VisitAgeout(s) - - default: - return t.VisitChildren(s) - } -} - -func (p *AgeParser) Ageout() (localctx IAgeoutContext) { - localctx = NewAgeoutContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 0, AgeParserRULE_ageout) - - defer func() { - p.ExitRule() - }() - - defer func() { - if err := recover(); err != nil { - if v, ok := err.(antlr.RecognitionException); ok { - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - } else { - panic(err) - } - } - }() - - p.SetState(20) - p.GetErrorHandler().Sync(p) - switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 0, p.GetParserRuleContext()) { - case 1: - p.EnterOuterAlt(localctx, 1) - { - p.SetState(16) - p.Value() - } - - case 2: - p.EnterOuterAlt(localctx, 2) - { - p.SetState(17) - p.Vertex() - } - - case 3: - p.EnterOuterAlt(localctx, 3) - { - p.SetState(18) - p.Edge() - } - - case 4: - p.EnterOuterAlt(localctx, 4) - { - p.SetState(19) - p.Path() - } - - } - - return localctx -} - -// IVertexContext is an interface to support dynamic dispatch. -type IVertexContext interface { - antlr.ParserRuleContext - - // GetParser returns the parser. - GetParser() antlr.Parser - - // IsVertexContext differentiates from other interfaces. - IsVertexContext() -} - -type VertexContext struct { - *antlr.BaseParserRuleContext - parser antlr.Parser -} - -func NewEmptyVertexContext() *VertexContext { - var p = new(VertexContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) - p.RuleIndex = AgeParserRULE_vertex - return p -} - -func (*VertexContext) IsVertexContext() {} - -func NewVertexContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *VertexContext { - var p = new(VertexContext) - - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) - - p.parser = parser - p.RuleIndex = AgeParserRULE_vertex - - return p -} - -func (s *VertexContext) GetParser() antlr.Parser { return s.parser } - -func (s *VertexContext) Properties() IPropertiesContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IPropertiesContext)(nil)).Elem(), 0) - - if t == nil { - return nil - } - - return t.(IPropertiesContext) -} - -func (s *VertexContext) KW_VERTEX() antlr.TerminalNode { - return s.GetToken(AgeParserKW_VERTEX, 0) -} - -func (s *VertexContext) GetRuleContext() antlr.RuleContext { - return s -} - -func (s *VertexContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { - return antlr.TreesStringTree(s, ruleNames, recog) -} - -func (s *VertexContext) EnterRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(AgeListener); ok { - listenerT.EnterVertex(s) - } -} - -func (s *VertexContext) ExitRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(AgeListener); ok { - listenerT.ExitVertex(s) - } -} - -func (s *VertexContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { - switch t := visitor.(type) { - case AgeVisitor: - return t.VisitVertex(s) - - default: - return t.VisitChildren(s) - } -} - -func (p *AgeParser) Vertex() (localctx IVertexContext) { - localctx = NewVertexContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 2, AgeParserRULE_vertex) - - defer func() { - p.ExitRule() - }() - - defer func() { - if err := recover(); err != nil { - if v, ok := err.(antlr.RecognitionException); ok { - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - } else { - panic(err) - } - } - }() - - p.EnterOuterAlt(localctx, 1) - { - p.SetState(22) - p.Properties() - } - { - p.SetState(23) - p.Match(AgeParserKW_VERTEX) - } - - return localctx -} - -// IEdgeContext is an interface to support dynamic dispatch. -type IEdgeContext interface { - antlr.ParserRuleContext - - // GetParser returns the parser. - GetParser() antlr.Parser - - // IsEdgeContext differentiates from other interfaces. - IsEdgeContext() -} - -type EdgeContext struct { - *antlr.BaseParserRuleContext - parser antlr.Parser -} - -func NewEmptyEdgeContext() *EdgeContext { - var p = new(EdgeContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) - p.RuleIndex = AgeParserRULE_edge - return p -} - -func (*EdgeContext) IsEdgeContext() {} - -func NewEdgeContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *EdgeContext { - var p = new(EdgeContext) - - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) - - p.parser = parser - p.RuleIndex = AgeParserRULE_edge - - return p -} - -func (s *EdgeContext) GetParser() antlr.Parser { return s.parser } - -func (s *EdgeContext) Properties() IPropertiesContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IPropertiesContext)(nil)).Elem(), 0) - - if t == nil { - return nil - } - - return t.(IPropertiesContext) -} - -func (s *EdgeContext) KW_EDGE() antlr.TerminalNode { - return s.GetToken(AgeParserKW_EDGE, 0) -} - -func (s *EdgeContext) GetRuleContext() antlr.RuleContext { - return s -} - -func (s *EdgeContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { - return antlr.TreesStringTree(s, ruleNames, recog) -} - -func (s *EdgeContext) EnterRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(AgeListener); ok { - listenerT.EnterEdge(s) - } -} - -func (s *EdgeContext) ExitRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(AgeListener); ok { - listenerT.ExitEdge(s) - } -} - -func (s *EdgeContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { - switch t := visitor.(type) { - case AgeVisitor: - return t.VisitEdge(s) - - default: - return t.VisitChildren(s) - } -} - -func (p *AgeParser) Edge() (localctx IEdgeContext) { - localctx = NewEdgeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 4, AgeParserRULE_edge) - - defer func() { - p.ExitRule() - }() - - defer func() { - if err := recover(); err != nil { - if v, ok := err.(antlr.RecognitionException); ok { - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - } else { - panic(err) - } - } - }() - - p.EnterOuterAlt(localctx, 1) - { - p.SetState(25) - p.Properties() - } - { - p.SetState(26) - p.Match(AgeParserKW_EDGE) - } - - return localctx -} - -// IPathContext is an interface to support dynamic dispatch. -type IPathContext interface { - antlr.ParserRuleContext - - // GetParser returns the parser. - GetParser() antlr.Parser - - // IsPathContext differentiates from other interfaces. - IsPathContext() -} - -type PathContext struct { - *antlr.BaseParserRuleContext - parser antlr.Parser -} - -func NewEmptyPathContext() *PathContext { - var p = new(PathContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) - p.RuleIndex = AgeParserRULE_path - return p -} - -func (*PathContext) IsPathContext() {} - -func NewPathContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *PathContext { - var p = new(PathContext) - - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) - - p.parser = parser - p.RuleIndex = AgeParserRULE_path - - return p -} - -func (s *PathContext) GetParser() antlr.Parser { return s.parser } - -func (s *PathContext) AllVertex() []IVertexContext { - var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IVertexContext)(nil)).Elem()) - var tst = make([]IVertexContext, len(ts)) - - for i, t := range ts { - if t != nil { - tst[i] = t.(IVertexContext) - } - } - - return tst -} - -func (s *PathContext) Vertex(i int) IVertexContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IVertexContext)(nil)).Elem(), i) - - if t == nil { - return nil - } - - return t.(IVertexContext) -} - -func (s *PathContext) KW_PATH() antlr.TerminalNode { - return s.GetToken(AgeParserKW_PATH, 0) -} - -func (s *PathContext) AllEdge() []IEdgeContext { - var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IEdgeContext)(nil)).Elem()) - var tst = make([]IEdgeContext, len(ts)) - - for i, t := range ts { - if t != nil { - tst[i] = t.(IEdgeContext) - } - } - - return tst -} - -func (s *PathContext) Edge(i int) IEdgeContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IEdgeContext)(nil)).Elem(), i) - - if t == nil { - return nil - } - - return t.(IEdgeContext) -} - -func (s *PathContext) GetRuleContext() antlr.RuleContext { - return s -} - -func (s *PathContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { - return antlr.TreesStringTree(s, ruleNames, recog) -} - -func (s *PathContext) EnterRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(AgeListener); ok { - listenerT.EnterPath(s) - } -} - -func (s *PathContext) ExitRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(AgeListener); ok { - listenerT.ExitPath(s) - } -} - -func (s *PathContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { - switch t := visitor.(type) { - case AgeVisitor: - return t.VisitPath(s) - - default: - return t.VisitChildren(s) - } -} - -func (p *AgeParser) Path() (localctx IPathContext) { - localctx = NewPathContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 6, AgeParserRULE_path) - var _la int - - defer func() { - p.ExitRule() - }() - - defer func() { - if err := recover(); err != nil { - if v, ok := err.(antlr.RecognitionException); ok { - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - } else { - panic(err) - } - } - }() - - p.EnterOuterAlt(localctx, 1) - { - p.SetState(28) - p.Match(AgeParserT__0) - } - { - p.SetState(29) - p.Vertex() - } - p.SetState(37) - p.GetErrorHandler().Sync(p) - _la = p.GetTokenStream().LA(1) - - for _la == AgeParserT__1 { - { - p.SetState(30) - p.Match(AgeParserT__1) - } - { - p.SetState(31) - p.Edge() - } - { - p.SetState(32) - p.Match(AgeParserT__1) - } - { - p.SetState(33) - p.Vertex() - } - - p.SetState(39) - p.GetErrorHandler().Sync(p) - _la = p.GetTokenStream().LA(1) - } - { - p.SetState(40) - p.Match(AgeParserT__2) - } - { - p.SetState(41) - p.Match(AgeParserKW_PATH) - } - - return localctx -} - -// IValueContext is an interface to support dynamic dispatch. -type IValueContext interface { - antlr.ParserRuleContext - - // GetParser returns the parser. - GetParser() antlr.Parser - - // IsValueContext differentiates from other interfaces. - IsValueContext() -} - -type ValueContext struct { - *antlr.BaseParserRuleContext - parser antlr.Parser -} - -func NewEmptyValueContext() *ValueContext { - var p = new(ValueContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) - p.RuleIndex = AgeParserRULE_value - return p -} - -func (*ValueContext) IsValueContext() {} - -func NewValueContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ValueContext { - var p = new(ValueContext) - - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) - - p.parser = parser - p.RuleIndex = AgeParserRULE_value - - return p -} - -func (s *ValueContext) GetParser() antlr.Parser { return s.parser } - -func (s *ValueContext) STRING() antlr.TerminalNode { - return s.GetToken(AgeParserSTRING, 0) -} - -func (s *ValueContext) NUMBER() antlr.TerminalNode { - return s.GetToken(AgeParserNUMBER, 0) -} - -func (s *ValueContext) NUMERIC() antlr.TerminalNode { - return s.GetToken(AgeParserNUMERIC, 0) -} - -func (s *ValueContext) FLOAT_EXPR() antlr.TerminalNode { - return s.GetToken(AgeParserFLOAT_EXPR, 0) -} - -func (s *ValueContext) BOOL() antlr.TerminalNode { - return s.GetToken(AgeParserBOOL, 0) -} - -func (s *ValueContext) NULL() antlr.TerminalNode { - return s.GetToken(AgeParserNULL, 0) -} - -func (s *ValueContext) Properties() IPropertiesContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IPropertiesContext)(nil)).Elem(), 0) - - if t == nil { - return nil - } - - return t.(IPropertiesContext) -} - -func (s *ValueContext) Arr() IArrContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IArrContext)(nil)).Elem(), 0) - - if t == nil { - return nil - } - - return t.(IArrContext) -} - -func (s *ValueContext) GetRuleContext() antlr.RuleContext { - return s -} - -func (s *ValueContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { - return antlr.TreesStringTree(s, ruleNames, recog) -} - -func (s *ValueContext) EnterRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(AgeListener); ok { - listenerT.EnterValue(s) - } -} - -func (s *ValueContext) ExitRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(AgeListener); ok { - listenerT.ExitValue(s) - } -} - -func (s *ValueContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { - switch t := visitor.(type) { - case AgeVisitor: - return t.VisitValue(s) - - default: - return t.VisitChildren(s) - } -} - -func (p *AgeParser) Value() (localctx IValueContext) { - localctx = NewValueContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 8, AgeParserRULE_value) - - defer func() { - p.ExitRule() - }() - - defer func() { - if err := recover(); err != nil { - if v, ok := err.(antlr.RecognitionException); ok { - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - } else { - panic(err) - } - } - }() - - p.SetState(51) - p.GetErrorHandler().Sync(p) - - switch p.GetTokenStream().LA(1) { - case AgeParserSTRING: - p.EnterOuterAlt(localctx, 1) - { - p.SetState(43) - p.Match(AgeParserSTRING) - } - - case AgeParserNUMBER: - p.EnterOuterAlt(localctx, 2) - { - p.SetState(44) - p.Match(AgeParserNUMBER) - } - - case AgeParserNUMERIC: - p.EnterOuterAlt(localctx, 3) - { - p.SetState(45) - p.Match(AgeParserNUMERIC) - } - - case AgeParserFLOAT_EXPR: - p.EnterOuterAlt(localctx, 4) - { - p.SetState(46) - p.Match(AgeParserFLOAT_EXPR) - } - - case AgeParserBOOL: - p.EnterOuterAlt(localctx, 5) - { - p.SetState(47) - p.Match(AgeParserBOOL) - } - - case AgeParserNULL: - p.EnterOuterAlt(localctx, 6) - { - p.SetState(48) - p.Match(AgeParserNULL) - } - - case AgeParserT__3: - p.EnterOuterAlt(localctx, 7) - { - p.SetState(49) - p.Properties() - } - - case AgeParserT__0: - p.EnterOuterAlt(localctx, 8) - { - p.SetState(50) - p.Arr() - } - - default: - panic(antlr.NewNoViableAltException(p, nil, nil, nil, nil, nil)) - } - - return localctx -} - -// IPropertiesContext is an interface to support dynamic dispatch. -type IPropertiesContext interface { - antlr.ParserRuleContext - - // GetParser returns the parser. - GetParser() antlr.Parser - - // IsPropertiesContext differentiates from other interfaces. - IsPropertiesContext() -} - -type PropertiesContext struct { - *antlr.BaseParserRuleContext - parser antlr.Parser -} - -func NewEmptyPropertiesContext() *PropertiesContext { - var p = new(PropertiesContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) - p.RuleIndex = AgeParserRULE_properties - return p -} - -func (*PropertiesContext) IsPropertiesContext() {} - -func NewPropertiesContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *PropertiesContext { - var p = new(PropertiesContext) - - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) - - p.parser = parser - p.RuleIndex = AgeParserRULE_properties - - return p -} - -func (s *PropertiesContext) GetParser() antlr.Parser { return s.parser } - -func (s *PropertiesContext) AllPair() []IPairContext { - var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IPairContext)(nil)).Elem()) - var tst = make([]IPairContext, len(ts)) - - for i, t := range ts { - if t != nil { - tst[i] = t.(IPairContext) - } - } - - return tst -} - -func (s *PropertiesContext) Pair(i int) IPairContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IPairContext)(nil)).Elem(), i) - - if t == nil { - return nil - } - - return t.(IPairContext) -} - -func (s *PropertiesContext) GetRuleContext() antlr.RuleContext { - return s -} - -func (s *PropertiesContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { - return antlr.TreesStringTree(s, ruleNames, recog) -} - -func (s *PropertiesContext) EnterRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(AgeListener); ok { - listenerT.EnterProperties(s) - } -} - -func (s *PropertiesContext) ExitRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(AgeListener); ok { - listenerT.ExitProperties(s) - } -} - -func (s *PropertiesContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { - switch t := visitor.(type) { - case AgeVisitor: - return t.VisitProperties(s) - - default: - return t.VisitChildren(s) - } -} - -func (p *AgeParser) Properties() (localctx IPropertiesContext) { - localctx = NewPropertiesContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 10, AgeParserRULE_properties) - var _la int - - defer func() { - p.ExitRule() - }() - - defer func() { - if err := recover(); err != nil { - if v, ok := err.(antlr.RecognitionException); ok { - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - } else { - panic(err) - } - } - }() - - p.SetState(66) - p.GetErrorHandler().Sync(p) - switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 4, p.GetParserRuleContext()) { - case 1: - p.EnterOuterAlt(localctx, 1) - { - p.SetState(53) - p.Match(AgeParserT__3) - } - { - p.SetState(54) - p.Pair() - } - p.SetState(59) - p.GetErrorHandler().Sync(p) - _la = p.GetTokenStream().LA(1) - - for _la == AgeParserT__1 { - { - p.SetState(55) - p.Match(AgeParserT__1) - } - { - p.SetState(56) - p.Pair() - } - - p.SetState(61) - p.GetErrorHandler().Sync(p) - _la = p.GetTokenStream().LA(1) - } - { - p.SetState(62) - p.Match(AgeParserT__4) - } - - case 2: - p.EnterOuterAlt(localctx, 2) - { - p.SetState(64) - p.Match(AgeParserT__3) - } - { - p.SetState(65) - p.Match(AgeParserT__4) - } - - } - - return localctx -} - -// IPairContext is an interface to support dynamic dispatch. -type IPairContext interface { - antlr.ParserRuleContext - - // GetParser returns the parser. - GetParser() antlr.Parser - - // IsPairContext differentiates from other interfaces. - IsPairContext() -} - -type PairContext struct { - *antlr.BaseParserRuleContext - parser antlr.Parser -} - -func NewEmptyPairContext() *PairContext { - var p = new(PairContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) - p.RuleIndex = AgeParserRULE_pair - return p -} - -func (*PairContext) IsPairContext() {} - -func NewPairContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *PairContext { - var p = new(PairContext) - - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) - - p.parser = parser - p.RuleIndex = AgeParserRULE_pair - - return p -} - -func (s *PairContext) GetParser() antlr.Parser { return s.parser } - -func (s *PairContext) STRING() antlr.TerminalNode { - return s.GetToken(AgeParserSTRING, 0) -} - -func (s *PairContext) Value() IValueContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IValueContext)(nil)).Elem(), 0) - - if t == nil { - return nil - } - - return t.(IValueContext) -} - -func (s *PairContext) GetRuleContext() antlr.RuleContext { - return s -} - -func (s *PairContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { - return antlr.TreesStringTree(s, ruleNames, recog) -} - -func (s *PairContext) EnterRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(AgeListener); ok { - listenerT.EnterPair(s) - } -} - -func (s *PairContext) ExitRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(AgeListener); ok { - listenerT.ExitPair(s) - } -} - -func (s *PairContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { - switch t := visitor.(type) { - case AgeVisitor: - return t.VisitPair(s) - - default: - return t.VisitChildren(s) - } -} - -func (p *AgeParser) Pair() (localctx IPairContext) { - localctx = NewPairContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 12, AgeParserRULE_pair) - - defer func() { - p.ExitRule() - }() - - defer func() { - if err := recover(); err != nil { - if v, ok := err.(antlr.RecognitionException); ok { - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - } else { - panic(err) - } - } - }() - - p.EnterOuterAlt(localctx, 1) - { - p.SetState(68) - p.Match(AgeParserSTRING) - } - { - p.SetState(69) - p.Match(AgeParserT__5) - } - { - p.SetState(70) - p.Value() - } - - return localctx -} - -// IArrContext is an interface to support dynamic dispatch. -type IArrContext interface { - antlr.ParserRuleContext - - // GetParser returns the parser. - GetParser() antlr.Parser - - // IsArrContext differentiates from other interfaces. - IsArrContext() -} - -type ArrContext struct { - *antlr.BaseParserRuleContext - parser antlr.Parser -} - -func NewEmptyArrContext() *ArrContext { - var p = new(ArrContext) - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(nil, -1) - p.RuleIndex = AgeParserRULE_arr - return p -} - -func (*ArrContext) IsArrContext() {} - -func NewArrContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ArrContext { - var p = new(ArrContext) - - p.BaseParserRuleContext = antlr.NewBaseParserRuleContext(parent, invokingState) - - p.parser = parser - p.RuleIndex = AgeParserRULE_arr - - return p -} - -func (s *ArrContext) GetParser() antlr.Parser { return s.parser } - -func (s *ArrContext) AllValue() []IValueContext { - var ts = s.GetTypedRuleContexts(reflect.TypeOf((*IValueContext)(nil)).Elem()) - var tst = make([]IValueContext, len(ts)) - - for i, t := range ts { - if t != nil { - tst[i] = t.(IValueContext) - } - } - - return tst -} - -func (s *ArrContext) Value(i int) IValueContext { - var t = s.GetTypedRuleContext(reflect.TypeOf((*IValueContext)(nil)).Elem(), i) - - if t == nil { - return nil - } - - return t.(IValueContext) -} - -func (s *ArrContext) GetRuleContext() antlr.RuleContext { - return s -} - -func (s *ArrContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { - return antlr.TreesStringTree(s, ruleNames, recog) -} - -func (s *ArrContext) EnterRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(AgeListener); ok { - listenerT.EnterArr(s) - } -} - -func (s *ArrContext) ExitRule(listener antlr.ParseTreeListener) { - if listenerT, ok := listener.(AgeListener); ok { - listenerT.ExitArr(s) - } -} - -func (s *ArrContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { - switch t := visitor.(type) { - case AgeVisitor: - return t.VisitArr(s) - - default: - return t.VisitChildren(s) - } -} - -func (p *AgeParser) Arr() (localctx IArrContext) { - localctx = NewArrContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 14, AgeParserRULE_arr) - var _la int - - defer func() { - p.ExitRule() - }() - - defer func() { - if err := recover(); err != nil { - if v, ok := err.(antlr.RecognitionException); ok { - localctx.SetException(v) - p.GetErrorHandler().ReportError(p, v) - p.GetErrorHandler().Recover(p, v) - } else { - panic(err) - } - } - }() - - p.SetState(85) - p.GetErrorHandler().Sync(p) - switch p.GetInterpreter().AdaptivePredict(p.GetTokenStream(), 6, p.GetParserRuleContext()) { - case 1: - p.EnterOuterAlt(localctx, 1) - { - p.SetState(72) - p.Match(AgeParserT__0) - } - { - p.SetState(73) - p.Value() - } - p.SetState(78) - p.GetErrorHandler().Sync(p) - _la = p.GetTokenStream().LA(1) - - for _la == AgeParserT__1 { - { - p.SetState(74) - p.Match(AgeParserT__1) - } - { - p.SetState(75) - p.Value() - } - - p.SetState(80) - p.GetErrorHandler().Sync(p) - _la = p.GetTokenStream().LA(1) - } - { - p.SetState(81) - p.Match(AgeParserT__2) - } - - case 2: - p.EnterOuterAlt(localctx, 2) - { - p.SetState(83) - p.Match(AgeParserT__0) - } - { - p.SetState(84) - p.Match(AgeParserT__2) - } - - } - - return localctx -} diff --git a/drivers/golang/parser/age_visitor.go b/drivers/golang/parser/age_visitor.go deleted file mode 100644 index 06bdc25ac..000000000 --- a/drivers/golang/parser/age_visitor.go +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -// Code generated from Age.g4 by ANTLR 4.9.2. DO NOT EDIT. - -package parser // Age - -import "github.com/antlr/antlr4/runtime/Go/antlr" - -// A complete Visitor for a parse tree produced by AgeParser. -type AgeVisitor interface { - antlr.ParseTreeVisitor - - // Visit a parse tree produced by AgeParser#ageout. - VisitAgeout(ctx *AgeoutContext) interface{} - - // Visit a parse tree produced by AgeParser#vertex. - VisitVertex(ctx *VertexContext) interface{} - - // Visit a parse tree produced by AgeParser#edge. - VisitEdge(ctx *EdgeContext) interface{} - - // Visit a parse tree produced by AgeParser#path. - VisitPath(ctx *PathContext) interface{} - - // Visit a parse tree produced by AgeParser#value. - VisitValue(ctx *ValueContext) interface{} - - // Visit a parse tree produced by AgeParser#properties. - VisitProperties(ctx *PropertiesContext) interface{} - - // Visit a parse tree produced by AgeParser#pair. - VisitPair(ctx *PairContext) interface{} - - // Visit a parse tree produced by AgeParser#arr. - VisitArr(ctx *ArrContext) interface{} -} diff --git a/drivers/golang/parser/generate.go b/drivers/golang/parser/generate.go new file mode 100644 index 000000000..9da7fbc6a --- /dev/null +++ b/drivers/golang/parser/generate.go @@ -0,0 +1,3 @@ +package parser + +//go:generate ./generate.sh diff --git a/drivers/golang/parser/generate.sh b/drivers/golang/parser/generate.sh new file mode 100755 index 000000000..e45501b4e --- /dev/null +++ b/drivers/golang/parser/generate.sh @@ -0,0 +1,12 @@ +#!/bin/sh +GRAMMAR_LOC="$(dirname $(pwd))/parser" + +mkdir -p ~/tmp/antlr +cd ~/tmp/antlr +curl -LO "https://www.antlr.org/download/antlr-4.11.1-complete.jar" +echo "ANTLR installation complete." + +echo "Generating Parser & Lexer..." +java -Xmx500M -cp "$HOME/tmp/antlr/antlr-4.11.1-complete.jar:$HOME/tmp/antlr/antlr-4.11.1-complete.jar" org.antlr.v4.Tool -Dlanguage=Go -visitor $GRAMMAR_LOC/Age.g4 +exit 0 + From 581937532923a1e34376ae30118d8858b8432da2 Mon Sep 17 00:00:00 2001 From: Moontasir Mahmood <53787290+Munmud@users.noreply.github.com> Date: Fri, 21 Apr 2023 00:57:41 +0600 Subject: [PATCH 155/191] Add optional argument for python driver unitTest (#814) --- .github/workflows/python-driver.yaml | 2 +- drivers/python/README.md | 11 +++++- drivers/python/test_age_py.py | 51 ++++++++++++++++++++++++---- 3 files changed, 55 insertions(+), 9 deletions(-) diff --git a/.github/workflows/python-driver.yaml b/.github/workflows/python-driver.yaml index 2f06eb7b8..92e1a48a5 100644 --- a/.github/workflows/python-driver.yaml +++ b/.github/workflows/python-driver.yaml @@ -55,5 +55,5 @@ jobs: - name: Test run: | - python -m unittest -v test_age_py.py + python test_age_py.py -db "postgres" -u "postgres" -pass "agens" python -m unittest -v test_agtypes.py diff --git a/drivers/python/README.md b/drivers/python/README.md index a38a4cde1..30c343b96 100644 --- a/drivers/python/README.md +++ b/drivers/python/README.md @@ -22,7 +22,16 @@ pip install -r requirements.txt ### Test ``` -python -m unittest -v test_age_py.py +python test_age_py.py \ +-host "127.0.0.1" \ +-db "postgres" \ +-u "postgres" \ +-pass "agens" \ +-port 5432 \ +-gn "test_graph" +``` + +``` python -m unittest -v test_agtypes.py ``` diff --git a/drivers/python/test_age_py.py b/drivers/python/test_age_py.py index dfc5fe237..bf9ece1e9 100644 --- a/drivers/python/test_age_py.py +++ b/drivers/python/test_age_py.py @@ -17,19 +17,20 @@ import unittest import decimal import age +import argparse DSN = "host=127.0.0.1 port=5432 dbname=postgres user=postgres password=agens" -TEST_HOST = "127.0.0.1" -TEST_PORT = 5432 -TEST_DB = "postgres" -TEST_USER = "postgres" -TEST_PASSWORD = "agens" -TEST_GRAPH_NAME = "test_graph" class TestAgeBasic(unittest.TestCase): ag = None def setUp(self): print("Connecting to Test Graph.....") + TEST_DB = self.args.database + TEST_USER = self.args.user + TEST_PASSWORD = self.args.password + TEST_PORT = self.args.port + TEST_HOST = self.args.host + TEST_GRAPH_NAME = self.args.graphName self.ag = age.connect(graph=TEST_GRAPH_NAME, host=TEST_HOST, port=TEST_PORT, dbname=TEST_DB, user=TEST_USER, password=TEST_PASSWORD) @@ -281,4 +282,40 @@ def testCollect(self): self.assertEqual(3,len(collected)) if __name__ == '__main__': - unittest.main() \ No newline at end of file + parser = argparse.ArgumentParser() + + parser.add_argument('-host', + '--host', + help='Optional Host Name. Default Host is "127.0.0.1" ', + default="127.0.0.1") + parser.add_argument('-port', + '--port', + help='Optional Port Number. Default port no is 5432', + default=5432) + parser.add_argument('-db', + '--database', + help='Required Database Name', + required=True) + parser.add_argument('-u', + '--user', + help='Required Username Name', + required=True) + parser.add_argument('-pass', + '--password', + help='Required Password for authentication', + required=True) + parser.add_argument('-gn', + '--graphName', + help='Optional Graph Name to be created. Default graphName is "test_graph"', + default="test_graph") + + args = parser.parse_args() + suite = unittest.TestSuite() + suite.addTest(TestAgeBasic('testExec')) + suite.addTest(TestAgeBasic('testQuery')) + suite.addTest(TestAgeBasic('testChangeData')) + suite.addTest(TestAgeBasic('testCypher')) + suite.addTest(TestAgeBasic('testMultipleEdges')) + suite.addTest(TestAgeBasic('testCollect')) + TestAgeBasic.args = args + unittest.TextTestRunner().run(suite) \ No newline at end of file From 3120bcb22d2bf7f6d08bb671776b5aaa660868ae Mon Sep 17 00:00:00 2001 From: Ken Woon Date: Thu, 20 Apr 2023 12:08:38 -0700 Subject: [PATCH 156/191] Update README.md (#727) Fixed inconsistent format in 'Quick Start' code block using 'MATCH' clause. --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2ae335130..2eb4a1150 100644 --- a/README.md +++ b/README.md @@ -247,9 +247,10 @@ $$) as (v agtype); To query the graph, you can use the MATCH clause. ```bash -SELECT * FROM cypher('graph_name', $$ -MATCH (v) -RETURN v +SELECT * +FROM cypher('graph_name', $$ + MATCH (v) + RETURN v $$) as (v agtype); ``` From 2c8a0bc8b1cac571fcb2cc3d709fe6431f6c1c35 Mon Sep 17 00:00:00 2001 From: Zainab-Saad <105385638+Zainab-Saad@users.noreply.github.com> Date: Tue, 25 Apr 2023 00:24:31 +0500 Subject: [PATCH 157/191] Update Quickstart section (#731) Modify explanation Update PR Removed the redundant statement --- README.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2eb4a1150..d4e325aa1 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@
-Since AGE is based on the powerful PostgreSQL RDBMS, it is robust and fully featured. AGE is optimized for handling complex connected graph data. It provides plenty of robust databases features essential to the database environment, including ACID transactions, multi-version concurrency control (MVCC), stored procedure, triggers, constraints, sophisticated monitoring, and a flexible data model (JSON). Users with a relational background who require graph data analytics can use this extension with minimal effort because they can use existing data without having to go through migration. +Since AGE is based on the powerful PostgreSQL RDBMS, it is robust and fully featured. AGE is optimized for handling complex connected graph data. It provides plenty of robust databases features essential to the database environment, including ACID transactions, multi-version concurrency control (MVCC), stored procedure, triggers, constraints, sophisticated monitoring, and a flexible data model (JSON). Users with a relational database background who require graph data analytics can use this extension with minimal effort because they can use existing data without having to go through migration. There is a strong need for cohesive, easy-to-implement multi-model databases. As an extension of PostgreSQL, AGE supports all the functionalities and features of PostgreSQL while also offering a graph model to boot. @@ -79,7 +79,7 @@ There is a strong need for cohesive, easy-to-implement multi-model databases. As Apache AGE is : - **Powerful**: adds graph database support to the already popular PostgreSQL database: PostgreSQL is used by organizations including Apple, Spotify, and NASA. -- **Flexible**: allows you to perform openCypher queries, which makes complex queries much easier to write. It also enables multiple graphs at the same time. +- **Flexible**: allows you to perform openCypher queries, which makes complex queries much easier to write. It also enables querying multiple graphs at the same time. - **Intelligent**: allows you to perform graph queries that are the basis for many next-level web services such as fraud detection, master data management, product recommendations, identity and relationship management, experience personalization, knowledge management, and more.

  Features

@@ -244,6 +244,15 @@ FROM cypher('graph_name', $$ $$) as (v agtype); ``` +To create a single vertex with label and properties, use the CREATE clause. + +```bash +SELECT * +FROM cypher('graph_name', $$ + CREATE (:label {property:value}) +$$) as (v agtype); +``` + To query the graph, you can use the MATCH clause. ```bash From 2e3f8388c2d2ba9b5ce076a5e1d53ae7952cb0f1 Mon Sep 17 00:00:00 2001 From: mohayu22 <113895061+mohayu22@users.noreply.github.com> Date: Tue, 25 Apr 2023 04:51:23 +0500 Subject: [PATCH 158/191] Introduce age_pi and age_rand functions and related updates (#823) * Added SQL for creating age_rand and age_pi functions -IMMUTABLE flag was used for age_pi but not for age_rand * Added regression tests -Updated previous regression tests -Added new regression tests for age_rand and age_pi -For rand, n.i < 1 AND n.i >= 0 logic is used which would return true to pass. * Added output for regression tests -Updated previous regression tests -Added new tests for age_rand and age_pi -For rand, n.i < 1 AND n.i >= 0 logic is used which would return true to pass. * Updated previous regres tests for pi() and rand() -Changed pg_catalog to ag_catalog -Changes pi and rand to age_pi and age_rand * C implementation for age_rand and age_pi -The C implementation uses the postgre drandom and dpi functions, which are located in the float.c file. -The DirectFunctionCall1 macro is used to call these functions. -The float return value of these functions is then converted to agtype. * Removed lines from cypher_gram.y that are no more needed -In cypher_gram.c, function node (fnode) is created for both age functions and those that directly mapped to postgres functions. -However, after adding age_rand and age_pi functions, the code related to mapped functions random and pi is removed. --- age--1.2.0.sql | 13 +++++++++++++ regress/expected/cypher_set.out | 17 +++++++++++++++++ regress/expected/expr.out | 4 ++-- regress/sql/cypher_set.sql | 4 ++++ src/backend/parser/cypher_gram.y | 6 +----- src/backend/utils/adt/agtype.c | 32 ++++++++++++++++++++++++++++++++ 6 files changed, 69 insertions(+), 7 deletions(-) diff --git a/age--1.2.0.sql b/age--1.2.0.sql index c8d7ecd0b..6588eb1d9 100644 --- a/age--1.2.0.sql +++ b/age--1.2.0.sql @@ -3782,6 +3782,19 @@ IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; +CREATE FUNCTION ag_catalog.age_pi() +RETURNS agtype +LANGUAGE c +IMMUTABLE +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + +CREATE FUNCTION ag_catalog.age_rand() +RETURNS agtype +LANGUAGE c +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + CREATE FUNCTION ag_catalog.age_exp(variadic "any") RETURNS agtype LANGUAGE c diff --git a/regress/expected/cypher_set.out b/regress/expected/cypher_set.out index fbc4b631d..adb2d28c3 100644 --- a/regress/expected/cypher_set.out +++ b/regress/expected/cypher_set.out @@ -92,6 +92,23 @@ SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 3, "j": 5}}::vertex (3 rows) +--Test assigning properties to rand() and pi() +SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = rand() RETURN n.i < 1 AND n.i >= 0$$) AS (a agtype); + a +------ + true + true + true +(3 rows) + +SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = pi() RETURN n$$) AS (a agtype); + a +------------------------------------------------------------------------------------------------------ + {"id": 844424930131969, "label": "v", "properties": {"i": 3.14159265358979}}::vertex + {"id": 844424930131971, "label": "v", "properties": {"i": 3.14159265358979}}::vertex + {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 3.14159265358979, "j": 5}}::vertex +(3 rows) + --Handle Inheritance SELECT * FROM cypher('cypher_set', $$CREATE ()$$) AS (a agtype); a diff --git a/regress/expected/expr.out b/regress/expected/expr.out index 7064356a6..316ab203b 100644 --- a/regress/expected/expr.out +++ b/regress/expected/expr.out @@ -4320,14 +4320,14 @@ $$) AS (results agtype); SELECT * FROM cypher('expr', $$ RETURN pi(null) $$) AS (results agtype); -ERROR: function pg_catalog.pi(agtype) does not exist +ERROR: function ag_catalog.age_pi(agtype) does not exist LINE 2: RETURN pi(null) ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. SELECT * FROM cypher('expr', $$ RETURN pi(1) $$) AS (results agtype); -ERROR: function pg_catalog.pi(agtype) does not exist +ERROR: function ag_catalog.age_pi(agtype) does not exist LINE 2: RETURN pi(1) ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. diff --git a/regress/sql/cypher_set.sql b/regress/sql/cypher_set.sql index a2b36a0a3..205cf804c 100644 --- a/regress/sql/cypher_set.sql +++ b/regress/sql/cypher_set.sql @@ -38,6 +38,10 @@ SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = 3 RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); +--Test assigning properties to rand() and pi() +SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = rand() RETURN n.i < 1 AND n.i >= 0$$) AS (a agtype); +SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = pi() RETURN n$$) AS (a agtype); + --Handle Inheritance SELECT * FROM cypher('cypher_set', $$CREATE ()$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = 3 RETURN n$$) AS (a agtype); diff --git a/src/backend/parser/cypher_gram.y b/src/backend/parser/cypher_gram.y index 84eb957a1..6e1246794 100644 --- a/src/backend/parser/cypher_gram.y +++ b/src/backend/parser/cypher_gram.y @@ -2139,11 +2139,7 @@ static Node *make_function_expr(List *func_name, List *exprs, int location) * functions. We may want to find a better way to do this, as there * could be many. */ - if (pg_strcasecmp(name, "rand") == 0) - funcname = SystemFuncName("random"); - else if (pg_strcasecmp(name, "pi") == 0) - funcname = SystemFuncName("pi"); - else if (pg_strcasecmp(name, "count") == 0) + if (pg_strcasecmp(name, "count") == 0) funcname = SystemFuncName("count"); else /* diff --git a/src/backend/utils/adt/agtype.c b/src/backend/utils/adt/agtype.c index 388725b49..bc5260d1b 100644 --- a/src/backend/utils/adt/agtype.c +++ b/src/backend/utils/adt/agtype.c @@ -8197,6 +8197,38 @@ Datum age_e(PG_FUNCTION_ARGS) PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); } +PG_FUNCTION_INFO_V1(age_pi); + +Datum age_pi(PG_FUNCTION_ARGS) +{ + agtype_value agtv_result; + float8 float_result; + + float_result = DatumGetFloat8(DirectFunctionCall1(dpi, 0)); + + /* build the result */ + agtv_result.type = AGTV_FLOAT; + agtv_result.val.float_value = float_result; + + PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); +} + +PG_FUNCTION_INFO_V1(age_rand); + +Datum age_rand(PG_FUNCTION_ARGS) +{ + agtype_value agtv_result; + float8 float_result; + + float_result = DatumGetFloat8(DirectFunctionCall1(drandom, 0)); + + /* build the result */ + agtv_result.type = AGTV_FLOAT; + agtv_result.val.float_value = float_result; + + PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); +} + PG_FUNCTION_INFO_V1(age_exp); Datum age_exp(PG_FUNCTION_ARGS) From 083f683cd0e75efd6edb9c1ba729dab38a526581 Mon Sep 17 00:00:00 2001 From: safi50 <63853856+safi50@users.noreply.github.com> Date: Tue, 25 Apr 2023 04:53:34 +0500 Subject: [PATCH 159/191] Updated test_age_py - Added missing assert statements to tests - Gave titles to tests (#833) --- drivers/python/test_age_py.py | 107 ++++++++++++++++++++++++---------- 1 file changed, 77 insertions(+), 30 deletions(-) diff --git a/drivers/python/test_age_py.py b/drivers/python/test_age_py.py index bf9ece1e9..1be2f04b7 100644 --- a/drivers/python/test_age_py.py +++ b/drivers/python/test_age_py.py @@ -41,35 +41,47 @@ def tearDown(self): self.ag.close() def testExec(self): + + print("\n---------------------------------------------------") + print("Test 1: Checking single and multi column Returns.....") + print("---------------------------------------------------\n") + ag = self.ag # Create and Return single column cursor = ag.execCypher("CREATE (n:Person {name: %s, title: 'Developer'}) RETURN n", params=('Andy',)) for row in cursor: - print(Vertex, type(row[0])) + print("Vertex: %s , Type: %s " % (Vertex, type(row[0]))) # Create and Return multi columns cursor = ag.execCypher("CREATE (n:Person {name: %s, title: %s}) RETURN id(n), n.name", cols=['id','name'], params=('Jack','Manager')) row = cursor.fetchone() - print(row[0], row[1]) + print("Id: %s , Name: %s" % (row[0], row[1])) self.assertEqual(int, type(row[0])) ag.commit() + print("\nTest 1 Successful....") + def testQuery(self): + + print("\n--------------------------------------------------") + print("Test 2: Testing CREATE and query relationships....." ) + print("--------------------------------------------------\n") + ag = self.ag ag.execCypher("CREATE (n:Person {name: %s}) ", params=('Jack',)) ag.execCypher("CREATE (n:Person {name: %s}) ", params=('Andy',)) ag.execCypher("CREATE (n:Person {name: %s}) ", params=('Smith',)) - ag.execCypher("MATCH (a:Person), (b:Person) WHERE a.name = 'Andy' AND b.name = 'Jack' CREATE (a)-[r:workWith {weight: 3}]->(b)") + ag.execCypher("MATCH (a:Person), (b:Person) WHERE a.name = 'Andy' AND b.name = 'Jack' CREATE (a)-[r:worksWith {weight: 3}]->(b)") ag.execCypher("""MATCH (a:Person), (b:Person) WHERE a.name = %s AND b.name = %s - CREATE p=((a)-[r:workWith]->(b)) """, params=('Jack', 'Smith',)) + CREATE p=((a)-[r:worksWith]->(b)) """, params=('Jack', 'Smith',)) ag.commit() - cursor = ag.execCypher("MATCH p=()-[:workWith]-() RETURN p") + cursor = ag.execCypher("MATCH p=()-[:worksWith]-() RETURN p") for row in cursor: path = row[0] print("START:", path[0]) @@ -82,10 +94,18 @@ def testQuery(self): edgel = row[1] edgew = row[2] end = row[3] - print(start["name"] , edgel, edgew, end["name"]) - + print("Relationship: %s %s %s. Edge weight: %s" % (start["name"] , edgel,end["name"], edgew)) + #Assert that the weight of the edge is greater than 2 + self.assertEqual(edgew > 2, True) + print("\nTest 2 Successful...") + def testChangeData(self): + + print("\n-------------------------------------------------------") + print("Test 3: Testing changes in data using SET and REMOVE.....") + print("-------------------------------------------------------\n") + ag = self.ag # Create Vertices # Commit automatically @@ -116,7 +136,7 @@ def testChangeData(self): row = cursor.fetchone() vertex = row[0] for row in cursor: - print("SET bigNum: ", vertex) + print("SET bigNum: ", vertex['bigNum']) bigNum1 = vertex["bigNum"] @@ -134,17 +154,25 @@ def testChangeData(self): cursor = ag.execCypher("MATCH (n:Person {name: %s}) REMOVE n.title RETURN n", params=('Smith',)) for row in cursor: print("REMOVE Prop title: ", row[0]) + #Assert that the title property is removed + self.assertIsNone(row[0].properties.get('title')) + print("\nTest 3 Successful....") # You must commit explicitly ag.commit() def testCypher(self): + + print("\n--------------------------") + print("Test 4: Testing Cypher.....") + print("--------------------------\n") + ag = self.ag with ag.connection.cursor() as cursor: try : - ag.cypher(cursor, "CREATE (n:Person {name: %s}) ", params=('Jone',)) + ag.cypher(cursor, "CREATE (n:Person {name: %s}) ", params=('Joe',)) ag.cypher(cursor, "CREATE (n:Person {name: %s}) ", params=('Jack',)) ag.cypher(cursor, "CREATE (n:Person {name: %s}) ", params=('Andy',)) ag.cypher(cursor, "CREATE (n:Person {name: %s}) ", params=('Smith',)) @@ -158,9 +186,9 @@ def testCypher(self): with ag.connection.cursor() as cursor: try :# Create Edges - ag.cypher(cursor,"MATCH (a:Person), (b:Person) WHERE a.name = 'Joe' AND b.name = 'Smith' CREATE (a)-[r:workWith {weight: 3}]->(b)") - ag.cypher(cursor,"MATCH (a:Person), (b:Person) WHERE a.name = 'Andy' AND b.name = 'Tom' CREATE (a)-[r:workWith {weight: 1}]->(b)") - ag.cypher(cursor,"MATCH (a:Person {name: 'Jack'}), (b:Person {name: 'Andy'}) CREATE (a)-[r:workWith {weight: 5}]->(b)") + ag.cypher(cursor,"MATCH (a:Person), (b:Person) WHERE a.name = 'Joe' AND b.name = 'Smith' CREATE (a)-[r:worksWith {weight: 3}]->(b)") + ag.cypher(cursor,"MATCH (a:Person), (b:Person) WHERE a.name = 'Andy' AND b.name = 'Tom' CREATE (a)-[r:worksWith {weight: 1}]->(b)") + ag.cypher(cursor,"MATCH (a:Person {name: 'Jack'}), (b:Person {name: 'Andy'}) CREATE (a)-[r:worksWith {weight: 5}]->(b)") # You must commit explicitly ag.commit() @@ -172,22 +200,30 @@ def testCypher(self): # With Params cursor = ag.execCypher("""MATCH (a:Person), (b:Person) WHERE a.name = %s AND b.name = %s - CREATE p=((a)-[r:workWith]->(b)) RETURN p""", + CREATE p=((a)-[r:worksWith]->(b)) RETURN p""", params=('Andy', 'Smith',)) for row in cursor: - print(row[0]) + print("CREATED EDGE: %s" % row[0]) cursor = ag.execCypher("""MATCH (a:Person {name: 'Joe'}), (b:Person {name: 'Jack'}) - CREATE p=((a)-[r:workWith {weight: 5}]->(b)) + CREATE p=((a)-[r:worksWith {weight: 5}]->(b)) RETURN p """) for row in cursor: - print(row[0]) + print("CREATED EDGE WITH PROPERTIES: %s" % row[0]) + self.assertEqual(row[0][1].properties['weight'], 5) + + print("\nTest 4 Successful...") def testMultipleEdges(self): + + print("\n------------------------------------") + print("Test 5: Testing Multiple Edges.....") + print("------------------------------------\n") + ag = self.ag with ag.connection.cursor() as cursor: try : @@ -219,23 +255,33 @@ def testMultipleEdges(self): RETURN p""") count = 0 + output = [] for row in cursor: path = row[0] - indent = "" for e in path: if e.gtype == age.TP_VERTEX: - print(indent, e.label, e["name"]) + output.append(e.label + " " + e["name"]) elif e.gtype == age.TP_EDGE: - print(indent, e.label, e["value"], e["unit"]) + output.append("---- (distance " + str(e["value"]) + " " + e["unit"] + ") --->") else: - print(indent, "Unknown element.", e) + output.append("Unknown element. " + str(e)) count += 1 - indent += " >" + formatted_output = " ".join(output) + print("PATH WITH MULTIPLE EDGES: %s" % formatted_output) self.assertEqual(5,count) + print("\nTest 5 Successful...") + + + def testCollect(self): + + print("\n--------------------------") + print("Test 6: Testing COLLECT.....") + print("--------------------------\n") + ag = self.ag with ag.connection.cursor() as cursor: @@ -254,9 +300,9 @@ def testCollect(self): with ag.connection.cursor() as cursor: try :# Create Edges - ag.cypher(cursor,"MATCH (a:Person), (b:Person) WHERE a.name = 'Joe' AND b.name = 'Smith' CREATE (a)-[r:workWith {weight: 3}]->(b)") - ag.cypher(cursor,"MATCH (a:Person), (b:Person) WHERE a.name = 'Joe' AND b.name = 'Tom' CREATE (a)-[r:workWith {weight: 1}]->(b)") - ag.cypher(cursor,"MATCH (a:Person {name: 'Joe'}), (b:Person {name: 'Andy'}) CREATE (a)-[r:workWith {weight: 5}]->(b)") + ag.cypher(cursor,"MATCH (a:Person), (b:Person) WHERE a.name = 'Joe' AND b.name = 'Smith' CREATE (a)-[r:worksWith {weight: 3}]->(b)") + ag.cypher(cursor,"MATCH (a:Person), (b:Person) WHERE a.name = 'Joe' AND b.name = 'Tom' CREATE (a)-[r:worksWith {weight: 1}]->(b)") + ag.cypher(cursor,"MATCH (a:Person {name: 'Joe'}), (b:Person {name: 'Andy'}) CREATE (a)-[r:worksWith {weight: 5}]->(b)") # You must commit explicitly ag.commit() @@ -264,22 +310,23 @@ def testCollect(self): print(ex) ag.rollback() - print(" - COLLECT 1 --------") + print(" -------- TESTING COLLECT #1 --------") with ag.connection.cursor() as cursor: - ag.cypher(cursor, "MATCH (a)-[:workWith]->(c) WITH a as V, COLLECT(c) as CV RETURN V.name, CV", cols=["V","CV"]) + ag.cypher(cursor, "MATCH (a)-[:worksWith]->(c) WITH a as V, COLLECT(c) as CV RETURN V.name, CV", cols=["V","CV"]) for row in cursor: nm = row[0] collected = row[1] - print(nm, "workWith", [i["name"] for i in collected]) + print(nm, "worksWith", [i["name"] for i in collected]) self.assertEqual(3,len(collected)) - print(" - COLLECT 2 --------") - for row in ag.execCypher("MATCH (a)-[:workWith]->(c) WITH a as V, COLLECT(c) as CV RETURN V.name, CV", cols=["V1","CV"]): + print(" -------- TESTING COLLECT #2 --------") + for row in ag.execCypher("MATCH (a)-[:worksWith]->(c) WITH a as V, COLLECT(c) as CV RETURN V.name, CV", cols=["V1","CV"]): nm = row[0] collected = row[1] - print(nm, "workWith", [i["name"] for i in collected]) + print(nm, "worksWith", [i["name"] for i in collected]) self.assertEqual(3,len(collected)) + print("\nTest 6 Successful...") if __name__ == '__main__': parser = argparse.ArgumentParser() From 9188a645a35feebd012749af8b6d1022ffd4d056 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Tue, 25 Apr 2023 22:41:24 +0500 Subject: [PATCH 160/191] Fix reuse of variable with label constraint (#840) - Reuse of variable with label constraint in concurrent MATCH clauses now errors out instead of giving incorrect results. --- regress/expected/cypher_match.out | 32 ++++++++++++++++++++---------- regress/sql/cypher_match.sql | 14 +++++++++---- src/backend/parser/cypher_clause.c | 11 ++++------ 3 files changed, 36 insertions(+), 21 deletions(-) diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index d1c58c1f2..63c623a9e 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -510,29 +510,41 @@ ERROR: multiple labels for variable 'a' are not supported LINE 2: MATCH (a)-[]-()-[]-(a:v1) RETURN a ^ SELECT * FROM cypher('cypher_match', $$ - MATCH (a)-[]-(a:v2)-[]-(a) RETURN a + MATCH (a)-[]-(a:v2)-[]-(a) RETURN a $$) AS (a agtype); ERROR: multiple labels for variable 'a' are not supported -LINE 2: MATCH (a)-[]-(a:v2)-[]-(a) RETURN a +LINE 2: MATCH (a)-[]-(a:v2)-[]-(a) RETURN a + ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH (a)-[]-(a:v1) RETURN a +$$) AS (a agtype); +ERROR: multiple labels for variable 'a' are not supported +LINE 2: MATCH (a)-[]-(a:v1) RETURN a + ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH (a)-[]-(a)-[]-(a:v1) RETURN a +$$) AS (a agtype); +ERROR: multiple labels for variable 'a' are not supported +LINE 2: MATCH (a)-[]-(a)-[]-(a:v1) RETURN a ^ SELECT * FROM cypher('cypher_match', $$ - MATCH (a)-[]-(a:v1) RETURN a + MATCH (a)-[]-(a)-[]-(a:invalid_label) RETURN a $$) AS (a agtype); ERROR: multiple labels for variable 'a' are not supported -LINE 2: MATCH (a)-[]-(a:v1) RETURN a +LINE 2: MATCH (a)-[]-(a)-[]-(a:invalid_label) RETURN a ^ SELECT * FROM cypher('cypher_match', $$ - MATCH (a)-[]-(a)-[]-(a:v1) RETURN a + MATCH (a) MATCH (a:v1) RETURN a $$) AS (a agtype); ERROR: multiple labels for variable 'a' are not supported -LINE 2: MATCH (a)-[]-(a)-[]-(a:v1) RETURN a - ^ +LINE 2: MATCH (a) MATCH (a:v1) RETURN a + ^ SELECT * FROM cypher('cypher_match', $$ - MATCH (a)-[]-(a)-[]-(a:invalid_label) RETURN a + MATCH (a) MATCH (a:invalid_label) RETURN a $$) AS (a agtype); ERROR: multiple labels for variable 'a' are not supported -LINE 2: MATCH (a)-[]-(a)-[]-(a:invalid_label) RETURN a - ^ +LINE 2: MATCH (a) MATCH (a:invalid_label) RETURN a + ^ --Valid variable reuse, although why would you want to do it this way? SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)-[]-()-[a]-() RETURN a diff --git a/regress/sql/cypher_match.sql b/regress/sql/cypher_match.sql index 2d9c5758e..2205c9e89 100644 --- a/regress/sql/cypher_match.sql +++ b/regress/sql/cypher_match.sql @@ -276,16 +276,22 @@ SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]-()-[]-(a:v1) RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ - MATCH (a)-[]-(a:v2)-[]-(a) RETURN a + MATCH (a)-[]-(a:v2)-[]-(a) RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ - MATCH (a)-[]-(a:v1) RETURN a + MATCH (a)-[]-(a:v1) RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ - MATCH (a)-[]-(a)-[]-(a:v1) RETURN a + MATCH (a)-[]-(a)-[]-(a:v1) RETURN a $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ - MATCH (a)-[]-(a)-[]-(a:invalid_label) RETURN a + MATCH (a)-[]-(a)-[]-(a:invalid_label) RETURN a +$$) AS (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) MATCH (a:v1) RETURN a +$$) AS (a agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (a) MATCH (a:invalid_label) RETURN a $$) AS (a agtype); --Valid variable reuse, although why would you want to do it this way? diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index deec381ea..b6640e8ea 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -4501,11 +4501,6 @@ static Expr *transform_cypher_node(cypher_parsestate *cpstate, /* also search for the variable from a previous transforms */ expr = colNameToVar(pstate, node->name, false, node->location); - if (expr != NULL) - { - return (Expr*)expr; - } - if (te != NULL) { transform_entity *entity = find_variable(cpstate, node->name); @@ -4527,8 +4522,6 @@ static Expr *transform_cypher_node(cypher_parsestate *cpstate, { cypher_node *cnode = (cypher_node *)entity->entity.node; - - if (!node->label || (cnode != NULL && node != NULL && @@ -4546,6 +4539,10 @@ static Expr *transform_cypher_node(cypher_parsestate *cpstate, return te->expr; } + else if (expr != NULL) + { + return (Expr*)expr; + } } else { From 3182b6190d3b755da4cf4c6e05cabbb86d36380e Mon Sep 17 00:00:00 2001 From: rrrohamed Date: Wed, 26 Apr 2023 19:52:46 +0200 Subject: [PATCH 161/191] Fixed indentation of vertexExp (#850) - Remove a space before vertexExp that led to unexpected identination --- drivers/python/samples/apache-age-agtypes.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/python/samples/apache-age-agtypes.ipynb b/drivers/python/samples/apache-age-agtypes.ipynb index 232c4d7e4..141ff3f4b 100644 --- a/drivers/python/samples/apache-age-agtypes.ipynb +++ b/drivers/python/samples/apache-age-agtypes.ipynb @@ -62,7 +62,7 @@ "metadata": {}, "outputs": [], "source": [ - " vertexExp = '''{\"id\": 2251799813685425, \"label\": \"Person\", \n", + "vertexExp = '''{\"id\": 2251799813685425, \"label\": \"Person\", \n", " \"properties\": {\"name\": \"Smith\", \"numInt\":123, \"numFloat\": 384.23424, \n", " \"bigInt\":123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789::numeric, \n", " \"bigFloat\":123456789123456789123456789123456789.12345::numeric, \n", From 19c05ae570ea43026a77ab3b5253d5efff8214d7 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Thu, 27 Apr 2023 03:52:49 +0500 Subject: [PATCH 162/191] Update jdbc driver and workflows (#861) * Update jdbc and go driver workflows - Removed reduntant setup for java environment in go driver workflow. - Removed builds for microsoft and tumerin distros from jdbc driver workflow. * Update jdbc driver dependencies and tests - Updated jdbc dependencies to latest. - Changed AgtypeStatementTest to create connection one time for all tests in this class instead of making and breaking connection for each test. 'beforeEach' and 'afterEach' was resulting in connection failure occasionaly. --- .github/workflows/go-driver.yml | 10 ++-------- .github/workflows/jdbc-driver.yaml | 10 +++------- drivers/jdbc/lib/build.gradle.kts | 18 +++++++++--------- .../apache/age/jdbc/AgtypeStatementTest.java | 13 ++++++++----- .../apache/age/jdbc/BaseDockerizedTest.java | 10 +++++++--- 5 files changed, 29 insertions(+), 32 deletions(-) diff --git a/.github/workflows/go-driver.yml b/.github/workflows/go-driver.yml index 581b479a5..f60ae8029 100644 --- a/.github/workflows/go-driver.yml +++ b/.github/workflows/go-driver.yml @@ -13,7 +13,7 @@ jobs: strategy: matrix: go-version: [ '1.18', '1.19' ] - distributions: ['zulu', 'temurin', 'microsoft'] + defaults: run: working-directory: drivers/golang/age/ @@ -47,12 +47,6 @@ jobs: with: go-version: ${{ matrix.go-version }} - - name: Set up Java - uses: actions/setup-java@v3 - with: - distribution: ${{ matrix.distributions }} - java-version: '17' - - name: Generate run: go generate ./../... @@ -60,4 +54,4 @@ jobs: run: go build -v ./... - name: Test - run: go test . -v + run: go test . -v \ No newline at end of file diff --git a/.github/workflows/jdbc-driver.yaml b/.github/workflows/jdbc-driver.yaml index c8035b235..c4037382d 100644 --- a/.github/workflows/jdbc-driver.yaml +++ b/.github/workflows/jdbc-driver.yaml @@ -10,22 +10,18 @@ on: jobs: build: runs-on: ubuntu-latest - - strategy: - matrix: - distributions: ['zulu', 'temurin', 'microsoft'] - + defaults: run: working-directory: drivers/jdbc steps: - uses: actions/checkout@v3 - + - name: Set up Java uses: actions/setup-java@v3 with: - distribution: ${{ matrix.distributions }} + distribution: 'zulu' java-version: '17' - name: Set tag based on branch diff --git a/drivers/jdbc/lib/build.gradle.kts b/drivers/jdbc/lib/build.gradle.kts index 5e2d0f27b..15662e7ce 100644 --- a/drivers/jdbc/lib/build.gradle.kts +++ b/drivers/jdbc/lib/build.gradle.kts @@ -30,18 +30,18 @@ repositories { } dependencies { - implementation("org.postgresql:postgresql:42.2.20") - api("org.apache.commons:commons-text:1.9") - antlr("org.antlr:antlr4:4.9.2") + implementation("org.postgresql:postgresql:42.6.0") + api("org.apache.commons:commons-text:1.10.0") + antlr("org.antlr:antlr4:4.12.0") - testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.1") + testImplementation("org.junit.jupiter:junit-jupiter-api:5.9.3") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine") - testImplementation("org.testcontainers:testcontainers:1.15.3") - testImplementation("org.postgresql:postgresql:42.2.20") + testImplementation("org.testcontainers:testcontainers:1.18.0") + testImplementation("org.postgresql:postgresql:42.6.0") - testImplementation("org.slf4j:slf4j-api:1.7.5") - testImplementation("org.slf4j:slf4j-simple:1.7.5") + testImplementation("org.slf4j:slf4j-api:2.0.7") + testImplementation("org.slf4j:slf4j-simple:2.0.7") } tasks.generateGrammarSource { @@ -68,4 +68,4 @@ tasks.test { showCauses = true showStackTraces = true } -} +} \ No newline at end of file diff --git a/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/AgtypeStatementTest.java b/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/AgtypeStatementTest.java index e160ef394..74be24608 100644 --- a/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/AgtypeStatementTest.java +++ b/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/AgtypeStatementTest.java @@ -29,11 +29,14 @@ import org.apache.age.jdbc.base.Agtype; import org.apache.age.jdbc.base.AgtypeFactory; import org.apache.age.jdbc.base.InvalidAgtypeException; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.postgresql.jdbc.PgConnection; +import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.TestInstance.Lifecycle; +@TestInstance(Lifecycle.PER_CLASS) /** * Tests the different combinations that are possible when running Statements and Prepared * Statements with the AgType and shows how the JDBC needs to be setup to convert values to the @@ -43,12 +46,12 @@ class AgtypeStatementTest { BaseDockerizedTest baseDockerizedTest = new BaseDockerizedTest(); - @BeforeEach + @BeforeAll public void setup() throws Exception { baseDockerizedTest.beforeAll(); } - @AfterEach + @AfterAll void tearDown() throws Exception { baseDockerizedTest.afterAll(); } @@ -199,4 +202,4 @@ private void runPreparedStatementString(PgConnection conn) throws SQLException, assertEquals(1, returnedAgtype.getInt()); } -} +} \ No newline at end of file diff --git a/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/BaseDockerizedTest.java b/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/BaseDockerizedTest.java index 2a71a4624..2ed48a735 100644 --- a/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/BaseDockerizedTest.java +++ b/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/BaseDockerizedTest.java @@ -65,9 +65,13 @@ public void beforeAll() throws Exception { String jdbcUrl = String .format("jdbc:postgresql://%s:%d/%s", "localhost", mappedPort, "postgres"); - connection = DriverManager.getConnection(jdbcUrl, "postgres", CORRECT_DB_PASSWORDS) - .unwrap(PgConnection.class); - connection.addDataType("agtype", Agtype.class); + try { + this.connection = DriverManager.getConnection(jdbcUrl, "postgres", CORRECT_DB_PASSWORDS) + .unwrap(PgConnection.class); + this.connection.addDataType("agtype", Agtype.class); + } catch (Exception e) { + System.out.println(e); + } try (Statement statement = connection.createStatement()) { statement.execute("CREATE EXTENSION IF NOT EXISTS age;"); statement.execute("LOAD 'age'"); From d0323f96ddd19a5bb203b449f892591200d680b9 Mon Sep 17 00:00:00 2001 From: Zainab-Saad <105385638+Zainab-Saad@users.noreply.github.com> Date: Thu, 27 Apr 2023 05:55:13 +0500 Subject: [PATCH 163/191] Cast bool to pg_bigint (#827) * Modify agtype.c - Make changes in the conditional statements to implement the casting functionality * Modify agtype.sql and agtype.out - Add regression tests only in the agtype_to_int8 function * Fix&Add regression tests in expr.sql and test results in expr.out and agtype.out - Add more regression tests and remove some regression tests that test the casting from bool to pg_bigint inside the cypher queries --- regress/expected/agtype.out | 15 +++++++++++++++ regress/expected/expr.out | 20 ++++++++++++++++---- regress/sql/agtype.sql | 6 ++++++ regress/sql/expr.sql | 10 +++++++--- src/backend/utils/adt/agtype.c | 6 +++++- 5 files changed, 49 insertions(+), 8 deletions(-) diff --git a/regress/expected/agtype.out b/regress/expected/agtype.out index 2d53f3c3d..03e1a6562 100644 --- a/regress/expected/agtype.out +++ b/regress/expected/agtype.out @@ -2123,6 +2123,21 @@ SELECT bool_to_agtype(true) <> bool_to_agtype(false); t (1 row) +-- +-- Test boolean to pg_bigint cast +-- +SELECT agtype_to_int8(agtype_in('true')); + agtype_to_int8 +---------------- + 1 +(1 row) + +SELECT agtype_to_int8(agtype_in('false')); + agtype_to_int8 +---------------- + 0 +(1 row) + -- -- Test agtype to int[] -- diff --git a/regress/expected/expr.out b/regress/expected/expr.out index 316ab203b..645ab96a6 100644 --- a/regress/expected/expr.out +++ b/regress/expected/expr.out @@ -1139,6 +1139,14 @@ $$) AS (i bigint); 1 (1 row) +SELECT * FROM cypher('type_coercion', $$ + RETURN true +$$) AS (i bigint); + i +--- + 1 +(1 row) + --Invalid String Format SELECT * FROM cypher('type_coercion', $$ RETURN '1.0' @@ -1154,10 +1162,6 @@ SELECT * FROM cypher('type_coercion', $$ $$) AS (i int); ERROR: integer out of range --Invalid types -SELECT * FROM cypher('type_coercion', $$ - RETURN true -$$) AS (i bigint); -ERROR: cannot cast agtype boolean to type int SELECT * FROM cypher('type_coercion', $$ RETURN {key: 1} $$) AS (i bigint); @@ -5816,6 +5820,14 @@ SELECT * FROM cypher('opt_forms', $$MATCH (u)-->()<--(v) RETURN *$$) AS (col1 ag (2 rows) -- Added typecasts ::pg_bigint and ::pg_float8 +SELECT * FROM cypher('expr', $$ +RETURN true::pg_bigint +$$) AS (result agtype); + result +-------- + 1 +(1 row) + SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt(pg_catalog.sqrt(pg_catalog.sqrt(256::pg_bigint))) $$) as (result agtype); diff --git a/regress/sql/agtype.sql b/regress/sql/agtype.sql index 958172ffa..6aa039320 100644 --- a/regress/sql/agtype.sql +++ b/regress/sql/agtype.sql @@ -540,6 +540,12 @@ SELECT bool_to_agtype(null); SELECT bool_to_agtype(true) = bool_to_agtype(true); SELECT bool_to_agtype(true) <> bool_to_agtype(false); +-- +-- Test boolean to pg_bigint cast +-- +SELECT agtype_to_int8(agtype_in('true')); +SELECT agtype_to_int8(agtype_in('false')); + -- -- Test agtype to int[] -- diff --git a/regress/sql/expr.sql b/regress/sql/expr.sql index 7fe904fdb..da1167083 100644 --- a/regress/sql/expr.sql +++ b/regress/sql/expr.sql @@ -514,6 +514,10 @@ SELECT * FROM cypher('type_coercion', $$ RETURN '1' $$) AS (i bigint); +SELECT * FROM cypher('type_coercion', $$ + RETURN true +$$) AS (i bigint); + --Invalid String Format SELECT * FROM cypher('type_coercion', $$ RETURN '1.0' @@ -529,9 +533,6 @@ SELECT * FROM cypher('type_coercion', $$ $$) AS (i int); --Invalid types -SELECT * FROM cypher('type_coercion', $$ - RETURN true -$$) AS (i bigint); SELECT * FROM cypher('type_coercion', $$ RETURN {key: 1} @@ -2345,6 +2346,9 @@ SELECT * FROM cypher('opt_forms', $$MATCH (u) CREATE (u)-[:edge]->() RETURN *$$) SELECT * FROM cypher('opt_forms', $$MATCH (u)-->()<--(v) RETURN *$$) AS (col1 agtype, col2 agtype); -- Added typecasts ::pg_bigint and ::pg_float8 +SELECT * FROM cypher('expr', $$ +RETURN true::pg_bigint +$$) AS (result agtype); SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt(pg_catalog.sqrt(pg_catalog.sqrt(256::pg_bigint))) $$) as (result agtype); diff --git a/src/backend/utils/adt/agtype.c b/src/backend/utils/adt/agtype.c index bc5260d1b..8ca893c8c 100644 --- a/src/backend/utils/adt/agtype.c +++ b/src/backend/utils/adt/agtype.c @@ -2605,7 +2605,8 @@ Datum agtype_to_int8(PG_FUNCTION_ARGS) (agtv.type != AGTV_FLOAT && agtv.type != AGTV_INTEGER && agtv.type != AGTV_NUMERIC && - agtv.type != AGTV_STRING)) + agtv.type != AGTV_STRING && + agtv.type != AGTV_BOOL)) cannot_cast_agtype_value(agtv.type, "int"); PG_FREE_IF_COPY(agtype_in, 0); @@ -2621,6 +2622,9 @@ Datum agtype_to_int8(PG_FUNCTION_ARGS) else if (agtv.type == AGTV_STRING) result = DatumGetInt64(DirectFunctionCall1(int8in, CStringGetDatum(agtv.val.string.val))); + else if(agtv.type == AGTV_BOOL) + result = DatumGetInt64(DirectFunctionCall1(bool_int4, + BoolGetDatum(agtv.val.boolean))); else elog(ERROR, "invalid agtype type: %d", (int)agtv.type); From a4858440c2f9768026d6d042cedd6b2f1d07cd7e Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Wed, 3 May 2023 22:40:20 +0500 Subject: [PATCH 164/191] 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 988dff3c2..f2bc0696e 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 6cd4207ea..df0666ffd 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 f0bc9c8c7..50436d752 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); From ffa0f76cf256600c4940081512aa41cf0b9548ac Mon Sep 17 00:00:00 2001 From: Ken Woon Date: Wed, 3 May 2023 11:11:39 -0700 Subject: [PATCH 165/191] Updated README.md; Grammar correction (#742) --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d4e325aa1..927299499 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@
-Since AGE is based on the powerful PostgreSQL RDBMS, it is robust and fully featured. AGE is optimized for handling complex connected graph data. It provides plenty of robust databases features essential to the database environment, including ACID transactions, multi-version concurrency control (MVCC), stored procedure, triggers, constraints, sophisticated monitoring, and a flexible data model (JSON). Users with a relational database background who require graph data analytics can use this extension with minimal effort because they can use existing data without having to go through migration. +Since AGE is based on the powerful PostgreSQL RDBMS, it is robust and fully featured. AGE is optimized for handling complex connected graph data. It provides plenty of robust database features essential to the database environment, including ACID transactions, multi-version concurrency control (MVCC), stored procedure, triggers, constraints, sophisticated monitoring, and a flexible data model (JSON). Users with a relational database background who require graph data analytics can use this extension with minimal effort because they can use existing data without going through migration. There is a strong need for cohesive, easy-to-implement multi-model databases. As an extension of PostgreSQL, AGE supports all the functionalities and features of PostgreSQL while also offering a graph model to boot. @@ -304,7 +304,7 @@ $$) as (e agtype);

  Language Specific Drivers

-Starting with Apache AGE is very simple. You can easily select your platform and incorporate the relevant SDK into your code. +Starting with Apache AGE is very simple. You can easily select your platform and incorporate the relevant SDK into your code.

@@ -367,4 +367,4 @@ You can also get help from these videos. You can improve ongoing efforts or initiate new ones by sending pull requests to [this repository](https://github.com/apache/age). Also, you can learn from the code review process, how to merge pull requests, and from code style compliance to documentation by visiting the [Apache AGE official site - Developer Guidelines](https://age.apache.org/contribution/guide). -Send all your comments and inquiries to the user mailing list, users@age.apache.org. +Send all your comments and inquiries to the user mailing list, users@age.apache.org. \ No newline at end of file From b0c9e9c09ba09db7cefeb848514cabc31f163bca Mon Sep 17 00:00:00 2001 From: mohayu22 <113895061+mohayu22@users.noreply.github.com> Date: Thu, 4 May 2023 00:24:55 +0500 Subject: [PATCH 166/191] Moved create_empty_agtype out of loops (#888) To avoid repeated calls inside the loop, "create_empty_agtype" was declared outside the loop and its output was assigned to the "props" variable which is then used inside the loop. --- src/backend/utils/graph_generation.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/backend/utils/graph_generation.c b/src/backend/utils/graph_generation.c index e1a363440..466a8726e 100644 --- a/src/backend/utils/graph_generation.c +++ b/src/backend/utils/graph_generation.c @@ -195,12 +195,13 @@ Datum create_complete_graph(PG_FUNCTION_ARGS) vtx_seq_id = get_relname_relid(vtx_seq_name_str, nsp_id); edge_seq_id = get_relname_relid(edge_seq_name_str, nsp_id); + props = create_empty_agtype(); + /* Creating vertices*/ for (i=(int64)1;i<=no_vertices;i++) { vid = nextval_internal(vtx_seq_id, true); object_graph_id = make_graphid(vtx_label_id, vid); - props = create_empty_agtype(); insert_vertex_simple(graph_id,vtx_name_str,object_graph_id,props); } @@ -218,9 +219,7 @@ Datum create_complete_graph(PG_FUNCTION_ARGS) start_vertex_graph_id = make_graphid(vtx_label_id, start_vid); end_vertex_graph_id = make_graphid(vtx_label_id, end_vid); - - props = create_empty_agtype(); - + insert_edge_simple(graph_id, edge_name_str, object_graph_id, start_vertex_graph_id, end_vertex_graph_id, props); From e8322ea3ffa6388348fb2d03927d85fb6f79063b Mon Sep 17 00:00:00 2001 From: Fahad Zaheer <52493343+FahadZaheerfzr@users.noreply.github.com> Date: Tue, 9 May 2023 02:38:09 +0500 Subject: [PATCH 167/191] Updated the module import statement for python driver sample (#900) --- drivers/python/samples/apache-age-note.ipynb | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/python/samples/apache-age-note.ipynb b/drivers/python/samples/apache-age-note.ipynb index 44b15b43e..59c25bc5b 100644 --- a/drivers/python/samples/apache-age-note.ipynb +++ b/drivers/python/samples/apache-age-note.ipynb @@ -1,6 +1,7 @@ { "cells": [ { + "attachments": {}, "cell_type": "markdown", "id": "722ec93e-b87c-43d0-9c54-61b30933d892", "metadata": {}, @@ -42,7 +43,7 @@ "outputs": [], "source": [ "import age\n", - "from age.gen.ageParser import *\n", + "from age.gen.AgtypeParser import *\n", "\n", "GRAPH_NAME = \"test_graph\"\n", "DSN = \"host=172.17.0.2 port=5432 dbname=postgres user=postgres password=agens\"\n", @@ -51,6 +52,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "96bbaf49-e774-4939-8fe9-f179ac9addc9", "metadata": {}, @@ -92,6 +94,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "0f15bc37-4b19-4204-af93-757b07e7e9f9", "metadata": {}, @@ -168,6 +171,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "cf0f16c8-07d0-49b9-ba4f-3f9044cac9e7", "metadata": {}, @@ -264,6 +268,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "0a8606b5-8583-49f9-aa39-a1ac3e90d542", "metadata": {}, @@ -347,6 +352,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "2615465d-9cff-4e67-9935-21344df4574c", "metadata": {}, @@ -571,6 +577,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "22690e1d-f258-4f2f-87b2-4f5b0a7f4574", "metadata": {}, @@ -624,6 +631,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "ac4d3e0e-0101-40cd-bc9a-59386a1e4485", "metadata": {}, @@ -695,6 +703,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "f502e0db-a603-4eb9-90e8-dac2c9edd1d4", "metadata": {}, @@ -758,6 +767,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "8ce0a003-b038-4334-9de8-111569549040", "metadata": {}, From b50a5cf8263c0ab4b6bbfa1169596ed6ec149a97 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Tue, 9 May 2023 02:59:31 +0500 Subject: [PATCH 168/191] Fix issue #898 - Crash on property access of node in same MATCH (#903) - Transformed entity was not added in cpstate entities before tranforming props due to which self referencing props were not resolving. Added them to cpstate before transforming props. - Added test cases. --- regress/expected/cypher_match.out | 55 ++++++++++++++++++++++++++++++ regress/sql/cypher_match.sql | 13 +++++++ src/backend/parser/cypher_clause.c | 17 ++++++--- 3 files changed, 80 insertions(+), 5 deletions(-) diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index 63c623a9e..e322a3b74 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -1786,6 +1786,61 @@ SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b]->(a) RETUR ERROR: duplicate edge variable 'b' within a clause LINE 1: ...pher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b]->(a) R... ^ +-- +-- self referencing property constraints (issue #898) +-- +SELECT * FROM cypher('cypher_match', $$ MATCH (a {name:a.name}) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710660, "label": "", "properties": {"age": 4, "name": "F"}}::vertex + {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex + {"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex + {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex + {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex +(5 rows) + +SELECT * FROM cypher('cypher_match', $$ MATCH (a {name:a.name, age:a.age}) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710660, "label": "", "properties": {"age": 4, "name": "F"}}::vertex + {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex + {"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex +(3 rows) + +SELECT * FROM cypher('cypher_match', $$ MATCH (a {name:a.name}) MATCH (a {age:a.age}) RETURN a $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710660, "label": "", "properties": {"age": 4, "name": "F"}}::vertex + {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex + {"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex +(3 rows) + +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[u {relationship: u.relationship}]->(b) RETURN p $$) as (a agtype); + a +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex, {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge, {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex]::path + [{"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex, {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge, {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex]::path +(2 rows) + +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[u {relationship: u.relationship, years: u.years}]->(b) RETURN p $$) as (a agtype); + a +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex, {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge, {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex]::path + [{"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex, {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge, {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex]::path +(2 rows) + +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name:a.name})-[u {relationship: u.relationship}]->(b {age:b.age}) RETURN p $$) as (a agtype); + a +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex, {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge, {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex]::path + [{"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex, {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge, {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex]::path +(2 rows) + +SELECT * FROM cypher('cypher_match', $$ CREATE () WITH * MATCH (x{n0:x.n1}) RETURN 0 $$) as (a agtype); + a +--- +(0 rows) + -- -- Clean up -- diff --git a/regress/sql/cypher_match.sql b/regress/sql/cypher_match.sql index 2205c9e89..751935768 100644 --- a/regress/sql/cypher_match.sql +++ b/regress/sql/cypher_match.sql @@ -842,6 +842,19 @@ SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b:knows]->(a) RETUR SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b:knows]->(a) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b]->(a) RETURN p $$)as (p agtype); +-- +-- self referencing property constraints (issue #898) +-- +SELECT * FROM cypher('cypher_match', $$ MATCH (a {name:a.name}) RETURN a $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH (a {name:a.name, age:a.age}) RETURN a $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH (a {name:a.name}) MATCH (a {age:a.age}) RETURN a $$) as (a agtype); + +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[u {relationship: u.relationship}]->(b) RETURN p $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[u {relationship: u.relationship, years: u.years}]->(b) RETURN p $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name:a.name})-[u {relationship: u.relationship}]->(b {age:b.age}) RETURN p $$) as (a agtype); + +SELECT * FROM cypher('cypher_match', $$ CREATE () WITH * MATCH (x{n0:x.n1}) RETURN 0 $$) as (a agtype); + -- -- Clean up -- diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index b6640e8ea..285ef3187 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -3819,6 +3819,13 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, entity = make_transform_entity(cpstate, ENT_VERTEX, (Node *)node, expr); + /* + * We want to add tranformed entity to entities before tranforming props + * so that props referncing currently transformed entity can be resolved. + */ + cpstate->entities = lappend(cpstate->entities, entity); + entities = lappend(entities, entity); + /* transform the properties if they exist */ if (node->props) { @@ -3886,9 +3893,6 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, lappend(cpstate->property_constraint_quals, n); } - cpstate->entities = lappend(cpstate->entities, entity); - entities = lappend(entities, entity); - prev_entity = entity; } /* odd increments of i are edges */ @@ -3935,7 +3939,12 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, entity = make_transform_entity(cpstate, ENT_EDGE, (Node *)rel, expr); + /* + * We want to add tranformed entity to entities before tranforming props + * so that props referncing currently transformed entity can be resolved. + */ cpstate->entities = lappend(cpstate->entities, entity); + entities = lappend(entities, entity); if (rel->props) { @@ -4001,8 +4010,6 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, lappend(cpstate->property_constraint_quals, r); } - entities = lappend(entities, entity); - prev_entity = entity; } /* if we have a VLE edge */ From 68e7524becdebe36e83952049b43b0d04015a0aa Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Tue, 9 May 2023 07:53:21 -0700 Subject: [PATCH 169/191] Fix SET bug, issue #899 (#904) --- age--1.2.0.sql | 17 +++-- regress/expected/cypher_set.out | 20 ++++++ regress/sql/cypher_set.sql | 12 ++++ src/backend/parser/cypher_clause.c | 2 +- src/backend/utils/adt/agtype.c | 106 +++++++++++++++++++++++++++++ 5 files changed, 147 insertions(+), 10 deletions(-) diff --git a/age--1.2.0.sql b/age--1.2.0.sql index 6588eb1d9..72e96e97c 100644 --- a/age--1.2.0.sql +++ b/age--1.2.0.sql @@ -3158,15 +3158,14 @@ AS 'MODULE_PATHNAME'; -- functions we need. Wrap the function with this to -- prevent that from happening -- -CREATE FUNCTION ag_catalog.agtype_volatile_wrapper(agt agtype) -RETURNS agtype AS $return_value$ -BEGIN - RETURN agt; -END; -$return_value$ LANGUAGE plpgsql + +CREATE FUNCTION ag_catalog.agtype_volatile_wrapper("any") +RETURNS agtype +LANGUAGE c VOLATILE CALLED ON NULL INPUT -PARALLEL SAFE; +PARALLEL SAFE +AS 'MODULE_PATHNAME'; -- -- agtype - list literal (`[expr, ...]`) @@ -4203,8 +4202,8 @@ CALLED ON NULL INPUT PARALLEL SAFE AS 'MODULE_PATHNAME'; -CREATE FUNCTION ag_catalog.age_create_barbell_graph(graph_name name, - graph_size int, +CREATE FUNCTION ag_catalog.age_create_barbell_graph(graph_name name, + graph_size int, bridge_size int, node_label name = NULL, node_properties agtype = NULL, diff --git a/regress/expected/cypher_set.out b/regress/expected/cypher_set.out index adb2d28c3..2caea9373 100644 --- a/regress/expected/cypher_set.out +++ b/regress/expected/cypher_set.out @@ -806,6 +806,26 @@ $$) AS (p agtype); {"id": 2251799813685249, "label": "Robert", "properties": {"age": 47, "city": "London", "name": "Rob"}}::vertex (1 row) +-- +-- Check passing mismatched types with SET +-- Issue 899 +-- +SELECT * FROM cypher('cypher_set_1', $$ + CREATE (x) SET x.n0 = (true OR true) RETURN x +$$) AS (p agtype); + p +-------------------------------------------------------------------------- + {"id": 281474976710657, "label": "", "properties": {"n0": true}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_set_1', $$ + CREATE (x) SET x.n0 = (true OR false), x.n1 = (false AND false), x.n2 = (false = false) RETURN x +$$) AS (p agtype); + p +--------------------------------------------------------------------------------------------------- + {"id": 281474976710658, "label": "", "properties": {"n0": true, "n1": false, "n2": true}}::vertex +(1 row) + -- -- Clean up -- diff --git a/regress/sql/cypher_set.sql b/regress/sql/cypher_set.sql index 205cf804c..59bd0790b 100644 --- a/regress/sql/cypher_set.sql +++ b/regress/sql/cypher_set.sql @@ -275,6 +275,18 @@ SELECT * FROM cypher('cypher_set_1', $$ RETURN p $$) AS (p agtype); +-- +-- Check passing mismatched types with SET +-- Issue 899 +-- +SELECT * FROM cypher('cypher_set_1', $$ + CREATE (x) SET x.n0 = (true OR true) RETURN x +$$) AS (p agtype); + +SELECT * FROM cypher('cypher_set_1', $$ + CREATE (x) SET x.n0 = (true OR false), x.n1 = (false AND false), x.n2 = (false = false) RETURN x +$$) AS (p agtype); + -- -- Clean up -- diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 285ef3187..98233b9e9 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -5457,7 +5457,7 @@ static Expr *add_volatile_wrapper(Expr *node) { Oid oid; - oid = get_ag_func_oid("agtype_volatile_wrapper", 1, AGTYPEOID); + oid = get_ag_func_oid("agtype_volatile_wrapper", 1, ANYOID); return (Expr *)makeFuncExpr(oid, AGTYPEOID, list_make1(node), InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); diff --git a/src/backend/utils/adt/agtype.c b/src/backend/utils/adt/agtype.c index 8ca893c8c..d00acc3ff 100644 --- a/src/backend/utils/adt/agtype.c +++ b/src/backend/utils/adt/agtype.c @@ -10145,3 +10145,109 @@ Datum age_unnest(PG_FUNCTION_ARGS) PG_RETURN_NULL(); } + +/* + * Volatile wrapper replacement. The previous version was PL/SQL + * and could only handle AGTYPE input and returned AGTYPE output. + * This version will create the appropriate AGTYPE based off of + * the input type. + */ +PG_FUNCTION_INFO_V1(agtype_volatile_wrapper); + +Datum agtype_volatile_wrapper(PG_FUNCTION_ARGS) +{ + int nargs = PG_NARGS(); + Oid type = InvalidOid; + bool isnull = PG_ARGISNULL(0); + + /* check for null and pass it through */ + if (isnull) + { + PG_RETURN_NULL(); + } + + /* check for more than one argument */ + if (nargs > 1) + { + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("agtype_volatile_wrapper: too many args"))); + + } + + /* get the type of the input argument */ + type = get_fn_expr_argtype(fcinfo->flinfo, 0); + + /* if it is NOT an AGTYPE, we need convert it to one, if possible */ + if (type != AGTYPEOID) + { + agtype_value agtv_result; + Datum arg = PG_GETARG_DATUM(0); + + /* check for PG types that easily translate to AGTYPE */ + if (type == BOOLOID) + { + agtv_result.type = AGTV_BOOL; + agtv_result.val.boolean = DatumGetBool(arg); + } + else if (type == INT2OID || type == INT4OID || type == INT8OID) + { + agtv_result.type = AGTV_INTEGER; + + if (type == INT8OID) + { + agtv_result.val.int_value = DatumGetInt64(arg); + } + else if (type == INT4OID) + { + agtv_result.val.int_value = (int64) DatumGetInt32(arg); + } + else if (type == INT4OID) + { + agtv_result.val.int_value = (int64) DatumGetInt16(arg); + } + } + else if (type == FLOAT4OID || type == FLOAT8OID) + { + agtv_result.type = AGTV_FLOAT; + + if (type == FLOAT8OID) + { + agtv_result.val.float_value = DatumGetFloat8(arg); + } + else if (type == FLOAT4OID) + { + agtv_result.val.float_value = (float8) DatumGetFloat4(arg); + } + } + else if (type == NUMERICOID) + { + agtv_result.type = AGTV_NUMERIC; + agtv_result.val.numeric = DatumGetNumeric(arg); + } + else if (type == CSTRINGOID) + { + agtv_result.type = AGTV_STRING; + agtv_result.val.string.val = DatumGetCString(arg); + agtv_result.val.string.len = strlen(agtv_result.val.string.val); + } + else if (type == TEXTOID) + { + agtv_result.type = AGTV_STRING; + agtv_result.val.string.val = text_to_cstring(DatumGetTextPP(arg)); + agtv_result.val.string.len = strlen(agtv_result.val.string.val); + } + else + { + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("agtype_volatile_wrapper: unsupported arg type"))); + } + + /* return the built result */ + PG_RETURN_POINTER(agtype_value_to_agtype(&agtv_result)); + } + + /* otherwise, just pass it through */ + PG_RETURN_POINTER(PG_GETARG_DATUM(0)); +} From 15b12d8e38fe2939c98b73103c05ef43dd1c0cf5 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Tue, 9 May 2023 20:33:56 +0500 Subject: [PATCH 170/191] Fix issue #883 - operator does not exist: @> agtype (#901) - Using '_' as a variable was conflicting with the default alias name being internally used which is also '_'. - Changed all internal aliases and var names to be prefixed with '_age_default_'. - Added grammer rule to disallow use of variables prefixed with '_age_default_' in user query. - Added corresponding test cases. --- regress/expected/cypher_match.out | 55 ++++++++++++++++++++++++++ regress/sql/cypher_match.sql | 14 +++++++ src/backend/parser/cypher_clause.c | 4 +- src/backend/parser/cypher_gram.y | 25 ++++++++++-- src/include/parser/cypher_parse_node.h | 10 ++++- 5 files changed, 101 insertions(+), 7 deletions(-) diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index e322a3b74..c7a9b3054 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -1787,6 +1787,61 @@ ERROR: duplicate edge variable 'b' within a clause LINE 1: ...pher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b]->(a) R... ^ -- +-- Default alias check (issue #883) +-- +SELECT * FROM cypher('cypher_match', $$ MATCH (_) RETURN _ $$) as (a agtype); + a +------------------------------------------------------------------------------------------ + {"id": 281474976710662, "label": "", "properties": {"i": 1, "j": 2, "k": 3}}::vertex + {"id": 281474976710663, "label": "", "properties": {"i": 1, "j": 3}}::vertex + {"id": 281474976710664, "label": "", "properties": {"i": 2, "k": 3}}::vertex + {"id": 281474976710665, "label": "", "properties": {"age": 4}}::vertex + {"id": 281474976710666, "label": "", "properties": {"age": 6}}::vertex + {"id": 281474976710660, "label": "", "properties": {"age": 4, "name": "F"}}::vertex + {"id": 281474976710661, "label": "", "properties": {"age": 4, "name": "T"}}::vertex + {"id": 281474976710659, "label": "", "properties": {"age": 3, "name": "orphan"}}::vertex + {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex + {"id": 281474976710668, "label": "", "properties": {"name": "John"}}::vertex +(10 rows) + +SELECT * FROM cypher('cypher_match', $$ MATCH () MATCH (_{name: "Dave"}) RETURN 0 $$) as (a agtype); + a +--- + 0 +(1 row) + +SELECT * FROM cypher('cypher_match', $$ MATCH () MATCH (_{name: "Dave"}) RETURN _ $$) as (a agtype); + a +------------------------------------------------------------------------------ + {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ MATCH (my_age_default_{name: "Dave"}) RETURN my_age_default_$$) as (a agtype); + a +------------------------------------------------------------------------------ + {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_match', $$ MATCH () MATCH (my_age_default_{name: "Dave"}) RETURN my_age_default_$$) as (a agtype); + a +------------------------------------------------------------------------------ + {"id": 281474976710667, "label": "", "properties": {"name": "Dave"}}::vertex +(1 row) + +-- these should fail as they are prefixed with _age_default_ which is only for internal use +SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_) RETURN _age_default_ $$) as (a agtype); +ERROR: _age_default_ is only for internal use +LINE 1: SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_... + ^ +SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_a) RETURN _age_default_a $$) as (a agtype); +ERROR: _age_default_ is only for internal use +LINE 1: SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_... + ^ +SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_whatever) RETURN 0 $$) as (a agtype); +ERROR: _age_default_ is only for internal use +LINE 1: SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_... + ^ +-- -- self referencing property constraints (issue #898) -- SELECT * FROM cypher('cypher_match', $$ MATCH (a {name:a.name}) RETURN a $$) as (a agtype); diff --git a/regress/sql/cypher_match.sql b/regress/sql/cypher_match.sql index 751935768..60931f602 100644 --- a/regress/sql/cypher_match.sql +++ b/regress/sql/cypher_match.sql @@ -842,6 +842,20 @@ SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b:knows]->(a) RETUR SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b:knows]->(a) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b]->(a) RETURN p $$)as (p agtype); +-- +-- Default alias check (issue #883) +-- +SELECT * FROM cypher('cypher_match', $$ MATCH (_) RETURN _ $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH () MATCH (_{name: "Dave"}) RETURN 0 $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH () MATCH (_{name: "Dave"}) RETURN _ $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH (my_age_default_{name: "Dave"}) RETURN my_age_default_$$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH () MATCH (my_age_default_{name: "Dave"}) RETURN my_age_default_$$) as (a agtype); + +-- these should fail as they are prefixed with _age_default_ which is only for internal use +SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_) RETURN _age_default_ $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_a) RETURN _age_default_a $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_whatever) RETURN 0 $$) as (a agtype); + -- -- self referencing property constraints (issue #898) -- diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 98233b9e9..ad8821a22 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -273,8 +273,8 @@ static Query *transform_cypher_call_subquery(cypher_parsestate *cpstate, cypher_clause *clause); // transform -#define PREV_CYPHER_CLAUSE_ALIAS "_" -#define CYPHER_OPT_RIGHT_ALIAS "_R" +#define PREV_CYPHER_CLAUSE_ALIAS AGE_DEFAULT_ALIAS_PREFIX"previous_cypher_clause" +#define CYPHER_OPT_RIGHT_ALIAS AGE_DEFAULT_ALIAS_PREFIX"cypher_optional_right" #define transform_prev_cypher_clause(cpstate, prev_clause, add_rte_to_query) \ transform_cypher_clause_as_subquery(cpstate, transform_cypher_clause, \ prev_clause, NULL, add_rte_to_query) diff --git a/src/backend/parser/cypher_gram.y b/src/backend/parser/cypher_gram.y index 6e1246794..5f8dc2d8b 100644 --- a/src/backend/parser/cypher_gram.y +++ b/src/backend/parser/cypher_gram.y @@ -32,6 +32,7 @@ #include "nodes/cypher_nodes.h" #include "parser/ag_scanner.h" #include "parser/cypher_gram.h" +#include "parser/cypher_parse_node.h" // override the default action for locations #define YYLLOC_DEFAULT(current, rhs, n) \ @@ -183,8 +184,11 @@ %{ // +// internal alias check +static bool has_internal_default_prefix(char *str); + // unique name generation -#define UNIQUE_NAME_NULL_PREFIX "_unique_null_prefix" +#define UNIQUE_NAME_NULL_PREFIX AGE_DEFAULT_PREFIX"unique_null_prefix" static char *create_unique_name(char *prefix_name); static unsigned long get_a_unique_number(void); @@ -1827,6 +1831,15 @@ property_key_name: var_name: symbolic_name + { + if (has_internal_default_prefix($1)) + { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("%s is only for internal use", AGE_DEFAULT_PREFIX), + ag_scanner_errposition(@1, scanner))); + } + } ; var_name_opt: @@ -2199,6 +2212,12 @@ static char *create_unique_name(char *prefix_name) return name; } +/* function to check if given string has internal alias as prefix */ +static bool has_internal_default_prefix(char *str) +{ + return strncmp(AGE_DEFAULT_PREFIX, str, strlen(AGE_DEFAULT_PREFIX)) == 0; +} + /* function to return a unique unsigned long number */ static unsigned long get_a_unique_number(void) { @@ -2411,7 +2430,7 @@ static cypher_relationship *build_VLE_relation(List *left_arg, (cnl->name == NULL && cnr->label != NULL) || (cnl->name == NULL && cnr->props != NULL)) { - cnl->name = create_unique_name("_vle_function_start_var"); + cnl->name = create_unique_name(AGE_DEFAULT_PREFIX"vle_function_start_var"); } /* add in the start vertex as a ColumnRef if necessary */ @@ -2443,7 +2462,7 @@ static cypher_relationship *build_VLE_relation(List *left_arg, if (cnr->name == NULL && (cnr->label != NULL || cnr->props != NULL)) { - cnr->name = create_unique_name("_vle_function_end_var"); + cnr->name = create_unique_name(AGE_DEFAULT_PREFIX"vle_function_end_var"); } /* * We need a NULL for the target vertex in the VLE match to diff --git a/src/include/parser/cypher_parse_node.h b/src/include/parser/cypher_parse_node.h index 5b6cc695a..c0d33f887 100644 --- a/src/include/parser/cypher_parse_node.h +++ b/src/include/parser/cypher_parse_node.h @@ -25,8 +25,14 @@ #include "nodes/cypher_nodes.h" -#define AGE_DEFAULT_ALIAS_PREFIX "_age_default_alias_" -#define AGE_DEFAULT_VARNAME_PREFIX "_age_varname_" +/* + * Every internal alias or variable name should be prefixed + * with AGE_DEFAULT_PREFIX. Grammer restricts variables + * prefixed with _age_default_ in user query to be used. + */ +#define AGE_DEFAULT_PREFIX "_age_default_" +#define AGE_DEFAULT_ALIAS_PREFIX AGE_DEFAULT_PREFIX"alias_" +#define AGE_DEFAULT_VARNAME_PREFIX AGE_DEFAULT_PREFIX"varname_" typedef struct cypher_parsestate { From 87f860151fc17f7d124ddf3f409f2b24acd928de Mon Sep 17 00:00:00 2001 From: Zainab Saad <105385638+Zainab-Saad@users.noreply.github.com> Date: Wed, 10 May 2023 22:33:42 +0500 Subject: [PATCH 171/191] Typecast bool to integer and vice versa (#905) * Typecast boolean to integer - Modify agtype_typecast_int and agtype_to_int4 in agtype.c * Add regression tests for typecast boolean to integer - Add regression tests: sql script, expected results in agtype.sql, agtype.out - Add regression tests: sql script, expected results in expr.sql, expr.out * Typecast integer to boolean - Modify transform_cypher_typecast in cypher_expr.c - Modify agtype_to_bool in agtype.c * Add regression tests for typecast integer to boolean - Add/Modify regression tests in agtype.sql, agtype.out - Add/Modify regression tests in expr.sql, expr.out * Add regression tests for edge cases - Add regression tests in expr.sql, expr.out - These regression tests check the edge cases for typecasting * Add regression tests for edge cases - II - Add regression tests in agtype.sql, agtype.out - Add edge cases for agtype_to_int4 * Fix & Add regression tests - Fix comments in agtype.sql, agtype.out - Add regression test for edge case --- regress/expected/agtype.out | 57 ++++++++++++++++++++++++++- regress/expected/expr.out | 67 ++++++++++++++++++++++++++++++++ regress/sql/agtype.sql | 20 +++++++++- regress/sql/expr.sql | 39 +++++++++++++++++++ src/backend/parser/cypher_expr.c | 6 +++ src/backend/utils/adt/agtype.c | 36 ++++++++++++++++- 6 files changed, 220 insertions(+), 5 deletions(-) diff --git a/regress/expected/agtype.out b/regress/expected/agtype.out index 03e1a6562..236e610b6 100644 --- a/regress/expected/agtype.out +++ b/regress/expected/agtype.out @@ -2077,11 +2077,15 @@ SELECT agtype_to_bool(agtype_in('false')); f (1 row) +SELECT agtype_to_bool(agtype_in('1')); + agtype_to_bool +---------------- + t +(1 row) + -- These should all fail SELECT agtype_to_bool(agtype_in('null')); ERROR: cannot cast agtype null to type boolean -SELECT agtype_to_bool(agtype_in('1')); -ERROR: cannot cast agtype integer to type boolean SELECT agtype_to_bool(agtype_in('1.0')); ERROR: cannot cast agtype float to type boolean SELECT agtype_to_bool(agtype_in('"string"')); @@ -2138,6 +2142,55 @@ SELECT agtype_to_int8(agtype_in('false')); 0 (1 row) +-- +-- Test boolean to integer cast +-- +SELECT agtype_to_int4(agtype_in('true')); + agtype_to_int4 +---------------- + 1 +(1 row) + +SELECT agtype_to_int4(agtype_in('false')); + agtype_to_int4 +---------------- + 0 +(1 row) + +SELECT agtype_to_int4(agtype_in('null')); + agtype_to_int4 +---------------- + +(1 row) + +-- +-- Test agtype to integer cast +-- +SELECT agtype_to_int4(agtype_in('1')); + agtype_to_int4 +---------------- + 1 +(1 row) + +SELECT agtype_to_int4(agtype_in('1.45')); + agtype_to_int4 +---------------- + 1 +(1 row) + +SELECT agtype_to_int4(agtype_in('1.444::numeric')); + agtype_to_int4 +---------------- + 1 +(1 row) + +-- These should all fail +SELECT agtype_to_int4(agtype_in('"string"')); +ERROR: invalid input syntax for integer: "string" +SELECT agtype_to_int4(agtype_in('[1, 2, 3]')); +ERROR: cannot cast agtype array to type int +SELECT agtype_to_int4(agtype_in('{"int":1}')); +ERROR: cannot cast agtype object to type int -- -- Test agtype to int[] -- diff --git a/regress/expected/expr.out b/regress/expected/expr.out index 645ab96a6..8ba6e391c 100644 --- a/regress/expected/expr.out +++ b/regress/expected/expr.out @@ -1147,6 +1147,25 @@ $$) AS (i bigint); 1 (1 row) +SELECT * FROM cypher('type_coercion', $$ + RETURN true +$$) AS (i int); + i +--- + 1 +(1 row) + +-- +-- Coerce to Postgres bool/boolean type +-- +SELECT * FROM cypher('type_coercion', $$ + RETURN 1 +$$) AS (i bool); + i +--- + t +(1 row) + --Invalid String Format SELECT * FROM cypher('type_coercion', $$ RETURN '1.0' @@ -1252,6 +1271,22 @@ $$) AS r(result agtype); 3 (1 row) +SELECT * FROM cypher('expr', $$ +RETURN true::int +$$) AS r(result agtype); + result +-------- + 1 +(1 row) + +SELECT * FROM cypher('expr', $$ +RETURN false::int +$$) AS r(result agtype); + result +-------- + 0 +(1 row) + SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1.0, pie: 3.1415927, e: 2::numeric}, 2, null][1].one)::int $$) AS r(result agtype); @@ -1335,6 +1370,38 @@ SELECT * FROM cypher('expr', $$ RETURN 'infinity'::float::int $$) AS r(result agtype); ERROR: bigint out of range +SELECT * FROM cypher('expr', $$ +RETURN ''::int +$$) AS r(result agtype); +ERROR: invalid input syntax for integer: "" +SELECT * FROM cypher('expr', $$ +RETURN 'falze'::int +$$) AS r(result agtype); +ERROR: invalid input syntax for integer: "falze" +-- +-- Test from an agtype value to agtype int +-- +SELECT * FROM cypher('expr', $$ +RETURN 0::bool +$$) AS r(result agtype); + result +-------- + false +(1 row) + +-- these should fail +SELECT * FROM cypher('expr', $$ +RETURN 1.23::bool +$$) AS r(result agtype); +ERROR: cannot cast agtype float to type boolean +SELECT * FROM cypher('expr', $$ +RETURN ''::bool +$$) AS r(result agtype); +ERROR: cannot cast agtype string to type boolean +SELECT * FROM cypher('expr', $$ +RETURN 'falze'::bool +$$) AS r(result agtype); +ERROR: cannot cast agtype string to type boolean -- Test from an agtype value to an agtype numeric -- SELECT * FROM cypher('expr', $$ diff --git a/regress/sql/agtype.sql b/regress/sql/agtype.sql index 6aa039320..16e14f65f 100644 --- a/regress/sql/agtype.sql +++ b/regress/sql/agtype.sql @@ -523,9 +523,9 @@ SELECT agtype_in('true') < '1::numeric'; -- SELECT agtype_to_bool(agtype_in('true')); SELECT agtype_to_bool(agtype_in('false')); +SELECT agtype_to_bool(agtype_in('1')); -- These should all fail SELECT agtype_to_bool(agtype_in('null')); -SELECT agtype_to_bool(agtype_in('1')); SELECT agtype_to_bool(agtype_in('1.0')); SELECT agtype_to_bool(agtype_in('"string"')); SELECT agtype_to_bool(agtype_in('[1,2,3]')); @@ -546,6 +546,24 @@ SELECT bool_to_agtype(true) <> bool_to_agtype(false); SELECT agtype_to_int8(agtype_in('true')); SELECT agtype_to_int8(agtype_in('false')); +-- +-- Test boolean to integer cast +-- +SELECT agtype_to_int4(agtype_in('true')); +SELECT agtype_to_int4(agtype_in('false')); +SELECT agtype_to_int4(agtype_in('null')); + +-- +-- Test agtype to integer cast +-- +SELECT agtype_to_int4(agtype_in('1')); +SELECT agtype_to_int4(agtype_in('1.45')); +SELECT agtype_to_int4(agtype_in('1.444::numeric')); +-- These should all fail +SELECT agtype_to_int4(agtype_in('"string"')); +SELECT agtype_to_int4(agtype_in('[1, 2, 3]')); +SELECT agtype_to_int4(agtype_in('{"int":1}')); + -- -- Test agtype to int[] -- diff --git a/regress/sql/expr.sql b/regress/sql/expr.sql index da1167083..f1dc84ee8 100644 --- a/regress/sql/expr.sql +++ b/regress/sql/expr.sql @@ -518,6 +518,17 @@ SELECT * FROM cypher('type_coercion', $$ RETURN true $$) AS (i bigint); +SELECT * FROM cypher('type_coercion', $$ + RETURN true +$$) AS (i int); + +-- +-- Coerce to Postgres bool/boolean type +-- +SELECT * FROM cypher('type_coercion', $$ + RETURN 1 +$$) AS (i bool); + --Invalid String Format SELECT * FROM cypher('type_coercion', $$ RETURN '1.0' @@ -585,6 +596,12 @@ SELECT * FROM cypher('expr', $$ RETURN 2.71::numeric::int $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ +RETURN true::int +$$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ +RETURN false::int +$$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ RETURN ([0, {one: 1.0, pie: 3.1415927, e: 2::numeric}, 2, null][1].one)::int $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ @@ -620,7 +637,29 @@ $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN 'infinity'::float::int $$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ +RETURN ''::int +$$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ +RETURN 'falze'::int +$$) AS r(result agtype); +-- +-- Test from an agtype value to agtype int +-- +SELECT * FROM cypher('expr', $$ +RETURN 0::bool +$$) AS r(result agtype); +-- these should fail +SELECT * FROM cypher('expr', $$ +RETURN 1.23::bool +$$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ +RETURN ''::bool +$$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ +RETURN 'falze'::bool +$$) AS r(result agtype); -- Test from an agtype value to an agtype numeric -- SELECT * FROM cypher('expr', $$ diff --git a/src/backend/parser/cypher_expr.c b/src/backend/parser/cypher_expr.c index 50436d752..dcda2251c 100644 --- a/src/backend/parser/cypher_expr.c +++ b/src/backend/parser/cypher_expr.c @@ -62,6 +62,7 @@ #define FUNC_AGTYPE_TYPECAST_INT "agtype_typecast_int" #define FUNC_AGTYPE_TYPECAST_PG_FLOAT8 "agtype_to_float8" #define FUNC_AGTYPE_TYPECAST_PG_BIGINT "agtype_to_int8" +#define FUNC_AGTYPE_TYPECAST_BOOL "agtype_to_bool" static Node *transform_cypher_expr_recurse(cypher_parsestate *cpstate, Node *expr); @@ -955,6 +956,11 @@ static Node *transform_cypher_typecast(cypher_parsestate *cpstate, { fname = lappend(fname, makeString(FUNC_AGTYPE_TYPECAST_PG_BIGINT)); } + else if ((pg_strcasecmp(ctypecast->typecast, "bool") == 0 || + pg_strcasecmp(ctypecast->typecast, "boolean") == 0)) + { + fname = lappend(fname, makeString(FUNC_AGTYPE_TYPECAST_BOOL)); + } /* if none was found, error out */ else { diff --git a/src/backend/utils/adt/agtype.c b/src/backend/utils/adt/agtype.c index d00acc3ff..3a5d8ef94 100644 --- a/src/backend/utils/adt/agtype.c +++ b/src/backend/utils/adt/agtype.c @@ -2575,8 +2575,10 @@ Datum agtype_to_bool(PG_FUNCTION_ARGS) agtype_value agtv; if (!agtype_extract_scalar(&agtype_in->root, &agtv) || - agtv.type != AGTV_BOOL) + (agtv.type != AGTV_BOOL && agtv.type != AGTV_INTEGER)) + { cannot_cast_agtype_value(agtv.type, "boolean"); + } PG_FREE_IF_COPY(agtype_in, 0); @@ -2648,31 +2650,51 @@ Datum agtype_to_int4(PG_FUNCTION_ARGS) /* Return null if arg_agt is null. This covers SQL and Agtype NULLS */ if (arg_agt == NULL) + { PG_RETURN_NULL(); + } if (!agtype_extract_scalar(&arg_agt->root, &agtv) || (agtv.type != AGTV_FLOAT && agtv.type != AGTV_INTEGER && agtv.type != AGTV_NUMERIC && - agtv.type != AGTV_STRING)) + agtv.type != AGTV_STRING && + agtv.type != AGTV_BOOL)) + { cannot_cast_agtype_value(agtv.type, "int"); + } PG_FREE_IF_COPY(agtype_in, 0); if (agtv.type == AGTV_INTEGER) + { result = DatumGetInt32(DirectFunctionCall1(int84, Int64GetDatum(agtv.val.int_value))); + } else if (agtv.type == AGTV_FLOAT) + { result = DatumGetInt32(DirectFunctionCall1(dtoi4, Float8GetDatum(agtv.val.float_value))); + } else if (agtv.type == AGTV_NUMERIC) + { result = DatumGetInt32(DirectFunctionCall1(numeric_int4, NumericGetDatum(agtv.val.numeric))); + } else if (agtv.type == AGTV_STRING) + { result = DatumGetInt32(DirectFunctionCall1(int4in, CStringGetDatum(agtv.val.string.val))); + } + else if (agtv.type == AGTV_BOOL) + { + result = DatumGetInt64(DirectFunctionCall1(bool_int4, + BoolGetDatum(agtv.val.boolean))); + } else + { elog(ERROR, "invalid agtype type: %d", (int)agtv.type); + } PG_RETURN_INT32(result); } @@ -4003,20 +4025,26 @@ Datum agtype_typecast_int(PG_FUNCTION_ARGS) /* Return null if arg_agt is null. This covers SQL and Agtype NULLS */ if (arg_agt == NULL) + { PG_RETURN_NULL(); + } /* check that we have a scalar value */ if (!AGT_ROOT_IS_SCALAR(arg_agt)) + { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("typecast argument must be a scalar value"))); + } /* get the arg parameter */ arg_value = get_ith_agtype_value_from_container(&arg_agt->root, 0); /* check for agtype null */ if (arg_value->type == AGTV_NULL) + { PG_RETURN_NULL(); + } /* the input type drives the casting */ switch(arg_value->type) @@ -4032,6 +4060,10 @@ Datum agtype_typecast_int(PG_FUNCTION_ARGS) d = DirectFunctionCall1(numeric_int8, NumericGetDatum(arg_value->val.numeric)); break; + case AGTV_BOOL: + d = DirectFunctionCall1(bool_int4, + BoolGetDatum(arg_value->val.boolean)); + break; case AGTV_STRING: /* we need a null terminated string */ string = (char *) palloc0(sizeof(char)*arg_value->val.string.len + 1); From a43002ae39132781c535031d426d04bc5464851e Mon Sep 17 00:00:00 2001 From: mohayu22 <113895061+mohayu22@users.noreply.github.com> Date: Wed, 10 May 2023 23:25:54 +0500 Subject: [PATCH 172/191] Added string to pg_float8 typecasting (#895) * Added case for AGTV_STRING -Made changes to agtype_to_float8 -Modified if condition to check for AGTV_STRING -Added code for typecasting string to pg_float8 * Added and modified regression tests -Modified a test to return value instead of failing -Added new test to check string to pg_flaot8 typecasting * Added braces around code blocks Added braces {} around code blocks to keep up with standards. --- regress/expected/expr.out | 157 ++++++++++++++++++++++++++++++++- regress/sql/expr.sql | 69 ++++++++++++++- src/backend/utils/adt/agtype.c | 20 ++++- 3 files changed, 236 insertions(+), 10 deletions(-) diff --git a/regress/expected/expr.out b/regress/expected/expr.out index 8ba6e391c..9d0f9e068 100644 --- a/regress/expected/expr.out +++ b/regress/expected/expr.out @@ -1734,6 +1734,143 @@ SELECT agtype_in('[NaN, {"e": 2.718281::numeric, "one": Infinity, "pie": 3.14159 [NaN, {"e": 2.718281::numeric, "one": Infinity, "pie": 3.1415927}, 2::numeric, null] (1 row) +-- +-- Test typecast ::pg_float8 +-- +SELECT * FROM cypher('expr', $$ +RETURN 0::pg_float8 +$$) AS r(result agtype); + result +-------- + 0.0 +(1 row) + +SELECT * FROM cypher('expr', $$ +RETURN '2.71'::pg_float8 +$$) AS r(result agtype); + result +-------- + 2.71 +(1 row) + +SELECT * FROM cypher('expr', $$ +RETURN 2.71::pg_float8 +$$) AS r(result agtype); + result +-------- + 2.71 +(1 row) + +SELECT * FROM cypher('expr', $$ +RETURN ([0, {one: 1, pie: 3.1415927, e: 2::numeric}, 2, null][1].one)::pg_float8 +$$) AS r(result agtype); + result +-------- + 1.0 +(1 row) + +SELECT * FROM cypher('expr', $$ +RETURN ([0, {one: 1::pg_float8, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].one) +$$) AS r(result agtype); + result +-------- + 1.0 +(1 row) + +SELECT * FROM cypher('expr', $$ +RETURN ([0, {one: 1::pg_float8, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].one)::float +$$) AS r(result agtype); + result +-------- + 1.0 +(1 row) + +SELECT * FROM cypher('expr', $$ +RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2, null][3])::pg_float8 +$$) AS r(result agtype); + result +-------- + +(1 row) + +SELECT * FROM cypher('expr', $$ +RETURN (['NaN'::pg_float8, {one: 'inf'::pg_float8, pie: 3.1415927, e: 2.718281::numeric}, 2::numeric, null]) +$$) AS r(result agtype); + result +-------------------------------------------------------------------------------------- + [NaN, {"e": 2.718281::numeric, "one": Infinity, "pie": 3.1415927}, 2::numeric, null] +(1 row) + +SELECT * FROM cypher('expr', $$ +RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].e)::pg_float8 +$$) AS r(result agtype); + result +---------- + 2.718281 +(1 row) + +-- test NaN, Infinity and -Infinity +SELECT * FROM cypher('expr', $$ +RETURN 'NaN'::pg_float8 +$$) AS r(result agtype); + result +-------- + NaN +(1 row) + +SELECT * FROM cypher('expr', $$ +RETURN 'inf'::pg_float8 +$$) AS r(result agtype); + result +---------- + Infinity +(1 row) + +SELECT * FROM cypher('expr', $$ +RETURN '-inf'::pg_float8 +$$) AS r(result agtype); + result +----------- + -Infinity +(1 row) + +SELECT * FROM cypher('expr', $$ +RETURN 'infinity'::pg_float8 +$$) AS r(result agtype); + result +---------- + Infinity +(1 row) + +SELECT * FROM cypher('expr', $$ +RETURN '-infinity'::pg_float8 +$$) AS r(result agtype); + result +----------- + -Infinity +(1 row) + +SELECT * FROM cypher('expr', $$ +RETURN null::pg_float8 +$$) AS r(result agtype); + result +-------- + +(1 row) + +-- these should fail +SELECT * FROM cypher('expr', $$ +RETURN ''::pg_float8 +$$) AS r(result agtype); +ERROR: invalid input syntax for type double precision: "" +SELECT * FROM cypher('expr', $$ +RETURN '2:71'::pg_float8 +$$) AS r(result agtype); +ERROR: invalid input syntax for type double precision: "2:71" +SELECT * FROM cypher('expr', $$ +RETURN 'infi'::pg_float8 +$$) AS r(result agtype); +ERROR: invalid input syntax for type double precision: "infi" -- -- Test typecast :: transform and execution logic for object (vertex & edge) -- @@ -5066,6 +5203,14 @@ $$) as (result agtype); 5.0 (1 row) +SELECT * from cypher('expr', $$ + RETURN pg_catalog.sqrt("25"::pg_float8) +$$) as (result agtype); + result +-------- + 5.0 +(1 row) + SELECT * from cypher('expr', $$ RETURN ag_catalog.age_sqrt(25) $$) as (result agtype); @@ -5091,10 +5236,6 @@ ERROR: function pg_catalog.sqrt() does not exist LINE 2: RETURN pg_catalog.sqrt() ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. -SELECT * from cypher('expr', $$ - RETURN pg_catalog.sqrt("1"::pg_float8) -$$) as (result agtype); -ERROR: cannot cast agtype string to type float SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt(-1::pg_float8) $$) as (result agtype); @@ -5895,6 +6036,14 @@ $$) AS (result agtype); 1 (1 row) +SELECT * FROM cypher('expr', $$ +RETURN "1.0"::pg_float8 +$$) AS (result agtype); + result +-------- + 1.0 +(1 row) + SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt(pg_catalog.sqrt(pg_catalog.sqrt(256::pg_bigint))) $$) as (result agtype); diff --git a/regress/sql/expr.sql b/regress/sql/expr.sql index f1dc84ee8..0559b0da1 100644 --- a/regress/sql/expr.sql +++ b/regress/sql/expr.sql @@ -789,6 +789,66 @@ RETURN (['NaN'::float, {one: 'inf'::float, pie: 3.1415927, e: 2.718281::numeric} $$) AS r(result agtype); SELECT agtype_in('[NaN, {"e": 2.718281::numeric, "one": Infinity, "pie": 3.1415927}, 2::numeric, null]'); +-- +-- Test typecast ::pg_float8 +-- +SELECT * FROM cypher('expr', $$ +RETURN 0::pg_float8 +$$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ +RETURN '2.71'::pg_float8 +$$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ +RETURN 2.71::pg_float8 +$$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ +RETURN ([0, {one: 1, pie: 3.1415927, e: 2::numeric}, 2, null][1].one)::pg_float8 +$$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ +RETURN ([0, {one: 1::pg_float8, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].one) +$$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ +RETURN ([0, {one: 1::pg_float8, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].one)::float +$$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ +RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2, null][3])::pg_float8 +$$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ +RETURN (['NaN'::pg_float8, {one: 'inf'::pg_float8, pie: 3.1415927, e: 2.718281::numeric}, 2::numeric, null]) +$$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ +RETURN ([0, {one: 1, pie: 3.1415927, e: 2.718281::numeric}, 2, null][1].e)::pg_float8 +$$) AS r(result agtype); +-- test NaN, Infinity and -Infinity +SELECT * FROM cypher('expr', $$ +RETURN 'NaN'::pg_float8 +$$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ +RETURN 'inf'::pg_float8 +$$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ +RETURN '-inf'::pg_float8 +$$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ +RETURN 'infinity'::pg_float8 +$$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ +RETURN '-infinity'::pg_float8 +$$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ +RETURN null::pg_float8 +$$) AS r(result agtype); +-- these should fail +SELECT * FROM cypher('expr', $$ +RETURN ''::pg_float8 +$$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ +RETURN '2:71'::pg_float8 +$$) AS r(result agtype); +SELECT * FROM cypher('expr', $$ +RETURN 'infi'::pg_float8 +$$) AS r(result agtype); + -- -- Test typecast :: transform and execution logic for object (vertex & edge) -- @@ -2139,6 +2199,9 @@ $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt(25::pg_float8) $$) as (result agtype); +SELECT * from cypher('expr', $$ + RETURN pg_catalog.sqrt("25"::pg_float8) +$$) as (result agtype); SELECT * from cypher('expr', $$ RETURN ag_catalog.age_sqrt(25) $$) as (result agtype); @@ -2150,9 +2213,6 @@ $$) as (result agtype); SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt() $$) as (result agtype); -SELECT * from cypher('expr', $$ - RETURN pg_catalog.sqrt("1"::pg_float8) -$$) as (result agtype); SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt(-1::pg_float8) $$) as (result agtype); @@ -2388,6 +2448,9 @@ SELECT * FROM cypher('opt_forms', $$MATCH (u)-->()<--(v) RETURN *$$) AS (col1 ag SELECT * FROM cypher('expr', $$ RETURN true::pg_bigint $$) AS (result agtype); +SELECT * FROM cypher('expr', $$ +RETURN "1.0"::pg_float8 +$$) AS (result agtype); SELECT * from cypher('expr', $$ RETURN pg_catalog.sqrt(pg_catalog.sqrt(pg_catalog.sqrt(256::pg_bigint))) $$) as (result agtype); diff --git a/src/backend/utils/adt/agtype.c b/src/backend/utils/adt/agtype.c index 3a5d8ef94..9f234fd20 100644 --- a/src/backend/utils/adt/agtype.c +++ b/src/backend/utils/adt/agtype.c @@ -2759,13 +2759,18 @@ Datum agtype_to_float8(PG_FUNCTION_ARGS) if (!agtype_extract_scalar(&agtype_in->root, &agtv) || (agtv.type != AGTV_FLOAT && agtv.type != AGTV_INTEGER && - agtv.type != AGTV_NUMERIC)) + agtv.type != AGTV_NUMERIC && + agtv.type != AGTV_STRING)) + { cannot_cast_agtype_value(agtv.type, "float"); - + } + PG_FREE_IF_COPY(agtype_in, 0); if (agtv.type == AGTV_FLOAT) + { result = agtv.val.float_value; + } else if (agtv.type == AGTV_INTEGER) { /* @@ -2786,11 +2791,20 @@ Datum agtype_to_float8(PG_FUNCTION_ARGS) errmsg("cannot cast to float8, integer value out of range"))); } else if (agtv.type == AGTV_NUMERIC) + { result = DatumGetFloat8(DirectFunctionCall1(numeric_float8, NumericGetDatum(agtv.val.numeric))); + } + else if (agtv.type == AGTV_STRING) + { + result = DatumGetFloat8(DirectFunctionCall1(float8in, + CStringGetDatum(agtv.val.string.val))); + } else + { elog(ERROR, "invalid agtype type: %d", (int)agtv.type); - + } + PG_RETURN_FLOAT8(result); } From e31f47040b1ee20a14115694a32ee8502c92d66e Mon Sep 17 00:00:00 2001 From: Moontasir Mahmood <53787290+Munmud@users.noreply.github.com> Date: Tue, 16 May 2023 03:47:54 +0600 Subject: [PATCH 173/191] Changed author name and email (#922) --- drivers/python/setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/python/setup.py b/drivers/python/setup.py index 4565dc5d5..0b48b8726 100644 --- a/drivers/python/setup.py +++ b/drivers/python/setup.py @@ -25,8 +25,8 @@ description = 'Python driver support for Apache AGE', long_description=long_description, long_description_content_type="text/markdown", - author = 'rhizome', - author_email = 'rhizome.ai@gmail.com', + author = 'Apache AGE', + author_email = 'dev-subscribe@age.apache.org', url = 'https://github.com/apache/age', license = 'Apache2.0', install_requires = [ 'psycopg2', 'antlr4-python3-runtime==4.11.1'], From 52bfe9b026528872c5ddc3c5581f15f3fd14ff62 Mon Sep 17 00:00:00 2001 From: Zainab Saad <105385638+Zainab-Saad@users.noreply.github.com> Date: Tue, 16 May 2023 04:40:02 +0500 Subject: [PATCH 174/191] Remove implicit casting from int to bool (#923) - Fixed&Added code to deal an edge case where integers could be used as operands for logical operations due to implicit casting - Fixed&Added relevant regression tests --- age--1.2.0.sql | 7 +++ regress/expected/agtype.out | 8 +-- regress/expected/expr.out | 94 +++++++++++++++++++++++++++----- regress/sql/agtype.sql | 2 +- regress/sql/expr.sql | 71 +++++++++++++++++++++--- src/backend/parser/cypher_expr.c | 2 +- src/backend/utils/adt/agtype.c | 64 +++++++++++++++++++++- 7 files changed, 218 insertions(+), 30 deletions(-) diff --git a/age--1.2.0.sql b/age--1.2.0.sql index 72e96e97c..6d8730f9b 100644 --- a/age--1.2.0.sql +++ b/age--1.2.0.sql @@ -4039,6 +4039,13 @@ IMMUTABLE PARALLEL SAFE AS 'MODULE_PATHNAME'; +CREATE FUNCTION ag_catalog.agtype_typecast_bool(variadic "any") +RETURNS agtype +LANGUAGE c +IMMUTABLE +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + CREATE FUNCTION ag_catalog.agtype_typecast_vertex(variadic "any") RETURNS agtype LANGUAGE c diff --git a/regress/expected/agtype.out b/regress/expected/agtype.out index 236e610b6..b368141a1 100644 --- a/regress/expected/agtype.out +++ b/regress/expected/agtype.out @@ -2077,13 +2077,9 @@ SELECT agtype_to_bool(agtype_in('false')); f (1 row) -SELECT agtype_to_bool(agtype_in('1')); - agtype_to_bool ----------------- - t -(1 row) - -- These should all fail +SELECT agtype_to_bool(agtype_in('1')); +ERROR: cannot cast agtype integer to type boolean SELECT agtype_to_bool(agtype_in('null')); ERROR: cannot cast agtype null to type boolean SELECT agtype_to_bool(agtype_in('1.0')); diff --git a/regress/expected/expr.out b/regress/expected/expr.out index 9d0f9e068..91bc70fec 100644 --- a/regress/expected/expr.out +++ b/regress/expected/expr.out @@ -898,6 +898,79 @@ $$) AS r(result boolean); f (1 row) +SELECT * FROM cypher('expr', $$ +RETURN false OR 1::bool +$$) AS (result boolean); + result +-------- + t +(1 row) + +SELECT * FROM cypher('expr', $$ +RETURN false AND NOT 1::bool +$$) AS (result boolean); + result +-------- + f +(1 row) + +SELECT * FROM cypher('expr', $$ +RETURN NOT 1::bool::int::bool +$$) AS (result boolean); + result +-------- + f +(1 row) + +-- Invalid operands for AND, OR, NOT, XOR +SELECT * FROM cypher('expr', $$ +RETURN 1 AND true +$$) AS r(result boolean); +ERROR: cannot cast agtype integer to type boolean +SELECT * FROM cypher('expr', $$ +RETURN true AND 0 +$$) AS r(result boolean); +ERROR: cannot cast agtype integer to type boolean +SELECT * FROM cypher('expr', $$ +RETURN false OR 1 +$$) AS r(result boolean); +ERROR: cannot cast agtype integer to type boolean +SELECT * FROM cypher('expr', $$ +RETURN 0 OR true +$$) AS r(result boolean); +ERROR: cannot cast agtype integer to type boolean +SELECT * FROM cypher('expr', $$ +RETURN NOT 1 +$$) AS r(result boolean); +ERROR: cannot cast agtype integer to type boolean +SELECT * FROM cypher('expr', $$ +RETURN true XOR 0 +$$) AS r(result boolean); +ERROR: cannot cast agtype integer to type boolean +SELECT * FROM cypher('expr', $$ +RETURN 1 XOR 0 +$$) AS r(result boolean); +ERROR: cannot cast agtype integer to type boolean +SELECT * FROM cypher('expr', $$ +RETURN NOT ((1 OR 0) AND (0 OR 1)) +$$) AS r(result boolean); +ERROR: cannot cast agtype integer to type boolean +SELECT * FROM cypher('expr', $$ +RETURN 1.0 AND true +$$) AS (result agtype); +ERROR: cannot cast agtype float to type boolean +SELECT * FROM cypher('expr', $$ +RETURN false OR 'string' +$$) AS (result agtype); +ERROR: cannot cast agtype string to type boolean +SELECT * FROM cypher('expr', $$ +RETURN false XOR 1::numeric +$$) AS (result agtype); +ERROR: cannot cast agtype numeric to type boolean +SELECT * FROM cypher('expr', $$ +RETURN false OR 1::bool::int +$$) AS (result boolean); +ERROR: cannot cast agtype integer to type boolean -- -- Test indirection transform logic for object.property, object["property"], -- and array[element] @@ -1155,17 +1228,6 @@ $$) AS (i int); 1 (1 row) --- --- Coerce to Postgres bool/boolean type --- -SELECT * FROM cypher('type_coercion', $$ - RETURN 1 -$$) AS (i bool); - i ---- - t -(1 row) - --Invalid String Format SELECT * FROM cypher('type_coercion', $$ RETURN '1.0' @@ -1189,6 +1251,10 @@ SELECT * FROM cypher('type_coercion', $$ RETURN [1] $$) AS (i bigint); ERROR: cannot cast agtype array to type int +SELECT * FROM cypher('type_coercion', $$ + RETURN 1 +$$) AS (i bool); +ERROR: cannot cast agtype integer to type boolean SELECT * FROM cypher('type_coercion', $$CREATE ()-[:edge]->()$$) AS (result agtype); result -------- @@ -1393,15 +1459,15 @@ $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ RETURN 1.23::bool $$) AS r(result agtype); -ERROR: cannot cast agtype float to type boolean +ERROR: typecast expression must be an integer or a boolean SELECT * FROM cypher('expr', $$ RETURN ''::bool $$) AS r(result agtype); -ERROR: cannot cast agtype string to type boolean +ERROR: typecast expression must be an integer or a boolean SELECT * FROM cypher('expr', $$ RETURN 'falze'::bool $$) AS r(result agtype); -ERROR: cannot cast agtype string to type boolean +ERROR: typecast expression must be an integer or a boolean -- Test from an agtype value to an agtype numeric -- SELECT * FROM cypher('expr', $$ diff --git a/regress/sql/agtype.sql b/regress/sql/agtype.sql index 16e14f65f..d772cde14 100644 --- a/regress/sql/agtype.sql +++ b/regress/sql/agtype.sql @@ -523,8 +523,8 @@ SELECT agtype_in('true') < '1::numeric'; -- SELECT agtype_to_bool(agtype_in('true')); SELECT agtype_to_bool(agtype_in('false')); -SELECT agtype_to_bool(agtype_in('1')); -- These should all fail +SELECT agtype_to_bool(agtype_in('1')); SELECT agtype_to_bool(agtype_in('null')); SELECT agtype_to_bool(agtype_in('1.0')); SELECT agtype_to_bool(agtype_in('"string"')); diff --git a/regress/sql/expr.sql b/regress/sql/expr.sql index 0559b0da1..456f38c81 100644 --- a/regress/sql/expr.sql +++ b/regress/sql/expr.sql @@ -393,6 +393,66 @@ SELECT * FROM cypher('expr', $$ RETURN false XOR false $$) AS r(result boolean); +SELECT * FROM cypher('expr', $$ +RETURN false OR 1::bool +$$) AS (result boolean); + +SELECT * FROM cypher('expr', $$ +RETURN false AND NOT 1::bool +$$) AS (result boolean); + +SELECT * FROM cypher('expr', $$ +RETURN NOT 1::bool::int::bool +$$) AS (result boolean); + +-- Invalid operands for AND, OR, NOT, XOR +SELECT * FROM cypher('expr', $$ +RETURN 1 AND true +$$) AS r(result boolean); + +SELECT * FROM cypher('expr', $$ +RETURN true AND 0 +$$) AS r(result boolean); + +SELECT * FROM cypher('expr', $$ +RETURN false OR 1 +$$) AS r(result boolean); + +SELECT * FROM cypher('expr', $$ +RETURN 0 OR true +$$) AS r(result boolean); + +SELECT * FROM cypher('expr', $$ +RETURN NOT 1 +$$) AS r(result boolean); + +SELECT * FROM cypher('expr', $$ +RETURN true XOR 0 +$$) AS r(result boolean); + +SELECT * FROM cypher('expr', $$ +RETURN 1 XOR 0 +$$) AS r(result boolean); + +SELECT * FROM cypher('expr', $$ +RETURN NOT ((1 OR 0) AND (0 OR 1)) +$$) AS r(result boolean); + +SELECT * FROM cypher('expr', $$ +RETURN 1.0 AND true +$$) AS (result agtype); + +SELECT * FROM cypher('expr', $$ +RETURN false OR 'string' +$$) AS (result agtype); + +SELECT * FROM cypher('expr', $$ +RETURN false XOR 1::numeric +$$) AS (result agtype); + +SELECT * FROM cypher('expr', $$ +RETURN false OR 1::bool::int +$$) AS (result boolean); -- -- Test indirection transform logic for object.property, object["property"], -- and array[element] @@ -522,13 +582,6 @@ SELECT * FROM cypher('type_coercion', $$ RETURN true $$) AS (i int); --- --- Coerce to Postgres bool/boolean type --- -SELECT * FROM cypher('type_coercion', $$ - RETURN 1 -$$) AS (i bool); - --Invalid String Format SELECT * FROM cypher('type_coercion', $$ RETURN '1.0' @@ -553,6 +606,10 @@ SELECT * FROM cypher('type_coercion', $$ RETURN [1] $$) AS (i bigint); +SELECT * FROM cypher('type_coercion', $$ + RETURN 1 +$$) AS (i bool); + SELECT * FROM cypher('type_coercion', $$CREATE ()-[:edge]->()$$) AS (result agtype); SELECT * FROM cypher('type_coercion', $$ MATCH (v) diff --git a/src/backend/parser/cypher_expr.c b/src/backend/parser/cypher_expr.c index dcda2251c..afb695a37 100644 --- a/src/backend/parser/cypher_expr.c +++ b/src/backend/parser/cypher_expr.c @@ -62,7 +62,7 @@ #define FUNC_AGTYPE_TYPECAST_INT "agtype_typecast_int" #define FUNC_AGTYPE_TYPECAST_PG_FLOAT8 "agtype_to_float8" #define FUNC_AGTYPE_TYPECAST_PG_BIGINT "agtype_to_int8" -#define FUNC_AGTYPE_TYPECAST_BOOL "agtype_to_bool" +#define FUNC_AGTYPE_TYPECAST_BOOL "agtype_typecast_bool" static Node *transform_cypher_expr_recurse(cypher_parsestate *cpstate, Node *expr); diff --git a/src/backend/utils/adt/agtype.c b/src/backend/utils/adt/agtype.c index 9f234fd20..898f3d8a1 100644 --- a/src/backend/utils/adt/agtype.c +++ b/src/backend/utils/adt/agtype.c @@ -2575,7 +2575,7 @@ Datum agtype_to_bool(PG_FUNCTION_ARGS) agtype_value agtv; if (!agtype_extract_scalar(&agtype_in->root, &agtv) || - (agtv.type != AGTV_BOOL && agtv.type != AGTV_INTEGER)) + agtv.type != AGTV_BOOL) { cannot_cast_agtype_value(agtv.type, "boolean"); } @@ -4105,6 +4105,68 @@ Datum agtype_typecast_int(PG_FUNCTION_ARGS) PG_RETURN_POINTER(agtype_value_to_agtype(&result_value)); } +PG_FUNCTION_INFO_V1(agtype_typecast_bool); +/* + * Execute function to typecast an agtype to an agtype bool + */ +Datum agtype_typecast_bool(PG_FUNCTION_ARGS) +{ + agtype *arg_agt; + agtype_value *arg_value; + agtype_value result_value; + Datum d; + + /* get the agtype equivalence of any convertable input type */ + arg_agt = get_one_agtype_from_variadic_args(fcinfo, 0, 1); + + /* Return null if arg_agt is null. This covers SQL and Agtype NULLS */ + if (arg_agt == NULL) + { + PG_RETURN_NULL(); + } + + /* check that we have a scalar value */ + if (!AGT_ROOT_IS_SCALAR(arg_agt)) + { + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("typecast argument must be a scalar value"))); + } + + /* get the arg parameter */ + arg_value = get_ith_agtype_value_from_container(&arg_agt->root, 0); + + /* check for agtype null */ + if (arg_value->type == AGTV_NULL) + { + PG_RETURN_NULL(); + } + + /* the input type drives the casting */ + switch(arg_value->type) + { + case AGTV_BOOL: + PG_RETURN_POINTER(agtype_value_to_agtype(arg_value)); + break; + case AGTV_INTEGER: + d = DirectFunctionCall1(int4_bool, + Int64GetDatum(arg_value->val.int_value)); + break; + /* what was given doesn't cast to a bool */ + default: + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("typecast expression must be an integer or a boolean"))); + break; + } + + /* set the result type and return our result */ + result_value.type = AGTV_BOOL; + result_value.val.boolean = DatumGetBool(d); + + PG_RETURN_POINTER(agtype_value_to_agtype(&result_value)); +} + PG_FUNCTION_INFO_V1(agtype_typecast_float); /* * Execute function to typecast an agtype to an agtype float From 9df285addeb6a9f8ef06246d244b732b62b641cf Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Thu, 18 May 2023 15:00:14 -0700 Subject: [PATCH 175/191] Fix multiple label name usage in reused variables (#916) Fixed an issue with clauses and chained clauses reusing variables with a different label name attached. Now they are disallowed. A variable can only have one label. Added logic to pass variable label names into the nodes and edges that reference them. This is only for the nodes and edges that don't specify a label name and that reference already defined variables. This makes it easier to verify that the nodes or edges are using the correct label names. Fixed the function prototypes make_vertex_expr and make_edge_expr as they were not using the passed char *label parameter. Added and adjusted regression tests. --- regress/expected/cypher_match.out | 288 +++++++++++++++++++++-- regress/sql/cypher_match.sql | 122 +++++++++- src/backend/parser/cypher_clause.c | 361 +++++++++++++++++++---------- src/backend/parser/cypher_gram.y | 3 + src/include/nodes/cypher_nodes.h | 2 + 5 files changed, 629 insertions(+), 147 deletions(-) diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index c7a9b3054..1f97ef49b 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -545,13 +545,282 @@ $$) AS (a agtype); ERROR: multiple labels for variable 'a' are not supported LINE 2: MATCH (a) MATCH (a:invalid_label) RETURN a ^ ---Valid variable reuse, although why would you want to do it this way? SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)-[]-()-[a]-() RETURN a $$) AS (a agtype); ERROR: variable 'a' is for a vertex LINE 2: MATCH (a:v1)-[]-()-[a]-() RETURN a ^ +-- valid variable reuse for edge labels across clauses +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0]->() MATCH ()-[r0]->() RETURN r0 +$$) AS (r0 agtype); + r0 +--------------------------------------------------------------------------------------------------------------------------- + {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge + {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge + {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge + {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge + {"id": 2533274790395905, "label": "e3", "end_id": 2251799813685250, "start_id": 2251799813685251, "properties": {}}::edge + {"id": 2533274790395906, "label": "e3", "end_id": 2251799813685250, "start_id": 2251799813685249, "properties": {}}::edge +(6 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e1]->() MATCH ()-[r0:e1]->() RETURN r0 +$$) AS (r0 agtype); + r0 +--------------------------------------------------------------------------------------------------------------------------- + {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge + {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge +(2 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e2]->() MATCH ()-[r0:e2]->() RETURN r0 +$$) AS (r0 agtype); + r0 +--------------------------------------------------------------------------------------------------------------------------- + {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge + {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge +(2 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e1]->()-[r1]->() RETURN r0,r1 +$$) AS (r0 agtype, r1 agtype); + r0 | r1 +---------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------- + {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge | {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge +(1 row) + +SELECT * FROM cypher('cypher_match', $$ + MATCH p0=()-[:e1]->() MATCH p1=()-[:e2]->() RETURN p1 +$$) AS (p1 agtype); + p1 +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path + [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex]::path + [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex]::path + [{"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex, {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge, {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex]::path +(4 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e1]->()-[r1]->() MATCH ()-[r0:e1]->()-[r1]->() RETURN r0,r1 +$$) AS (r0 agtype, r1 agtype); + r0 | r1 +---------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------- + {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge | {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge +(1 row) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[]->() MATCH ()-[r1:e2]->() RETURN r1 +$$) AS (r1 agtype); + r1 +--------------------------------------------------------------------------------------------------------------------------- + {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge + {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge + {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge + {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge + {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge + {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge + {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge + {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge + {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge + {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge + {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge + {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge +(12 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e1]->() MATCH ()-[r1:e2]->() RETURN r0,r1 +$$) AS (r0 agtype, r1 agtype); + r0 | r1 +---------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------- + {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge | {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge + {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge | {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge + {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge | {"id": 1970324836974593, "label": "e2", "end_id": 1688849860263939, "start_id": 1688849860263938, "properties": {}}::edge + {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge | {"id": 1970324836974594, "label": "e2", "end_id": 1688849860263937, "start_id": 1688849860263938, "properties": {}}::edge +(4 rows) + +-- valid variable reuse for vertex labels across clauses +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:invalid), (r1:invalid) return r1 +$$) AS (r1 agtype); + r1 +---- +(0 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1), (r1) return r1 +$$) AS (r1 agtype); + r1 +------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 281474976710657, "label": "", "properties": {"int_key": 1, "map_key": {"key": "value"}, "list_key": [1, 2, 3], "float_key": 3.14, "string_key": "test"}}::vertex + {"id": 281474976710658, "label": "", "properties": {"lst": [1, null, 3.14, "string", {"key": "value"}, []]}}::vertex + {"id": 844424930131969, "label": "v", "properties": {}}::vertex + {"id": 844424930131970, "label": "v", "properties": {"i": 0}}::vertex + {"id": 844424930131971, "label": "v", "properties": {"i": 1}}::vertex + {"id": 1125899906842625, "label": "v1", "properties": {"id": "initial"}}::vertex + {"id": 1125899906842626, "label": "v1", "properties": {"id": "middle"}}::vertex + {"id": 1125899906842627, "label": "v1", "properties": {"id": "end"}}::vertex + {"id": 1688849860263937, "label": "v2", "properties": {"id": "initial"}}::vertex + {"id": 1688849860263938, "label": "v2", "properties": {"id": "middle"}}::vertex + {"id": 1688849860263939, "label": "v2", "properties": {"id": "end"}}::vertex + {"id": 2251799813685249, "label": "v3", "properties": {"id": "initial"}}::vertex + {"id": 2251799813685250, "label": "v3", "properties": {"id": "middle"}}::vertex + {"id": 2251799813685251, "label": "v3", "properties": {"id": "end"}}::vertex +(14 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:invalid), (r1) return r1 +$$) AS (r1 agtype); + r1 +---- +(0 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:invalid), (r1), (r1), (r1:invalid) return r1 +$$) AS (r1 agtype); + r1 +---- +(0 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:invalid)-[]->(r1)-[]->(r1:invalid)-[]->(r1) return r1 +$$) AS (r1 agtype); + r1 +---- +(0 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:invalid)-[]->()-[]->()-[]->(r1:invalid) return r1 +$$) AS (r1 agtype); + r1 +---- +(0 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e1]->()-[r1]->() MATCH ()-[r0:e1]->()-[r0]->() RETURN r0 +$$) AS (r0 agtype); + r0 +---- +(0 rows) + +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e1]->() MATCH ()-[r0]->() RETURN r0 +$$) AS (r0 agtype); + r0 +--------------------------------------------------------------------------------------------------------------------------- + {"id": 1407374883553281, "label": "e1", "end_id": 1125899906842627, "start_id": 1125899906842626, "properties": {}}::edge + {"id": 1407374883553282, "label": "e1", "end_id": 1125899906842626, "start_id": 1125899906842625, "properties": {}}::edge +(2 rows) + +-- invalid variable reuse for vertex +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:invalid)-[]->(r1)-[]->(r1)-[]->(r1:invalids) return r1 +$$) AS (r1 agtype); +ERROR: multiple labels for variable 'r1' are not supported +LINE 2: MATCH (r1:invalid)-[]->(r1)-[]->(r1)-[]->(r1:invali... + ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:invalid)-[]->(r1)-[]->(r1)-[]->(r1)-[r1]->() return r1 +$$) AS (r1 agtype); +ERROR: variable 'r1' is for a vertex +LINE 2: ... MATCH (r1:invalid)-[]->(r1)-[]->(r1)-[]->(r1)-[r1]->() r... + ^ +-- invalid variable reuse for labels across clauses +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:e1), (r1:e2) return r1 +$$) AS (r1 agtype); +ERROR: multiple labels for variable 'r1' are not supported +LINE 2: MATCH (r1:e1), (r1:e2) return r1 + ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:invalid), (r1:e2) return r1 +$$) AS (r1 agtype); +ERROR: multiple labels for variable 'r1' are not supported +LINE 2: MATCH (r1:invalid), (r1:e2) return r1 + ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:e1), (r1:invalid) return r1 +$$) AS (r1 agtype); +ERROR: multiple labels for variable 'r1' are not supported +LINE 2: MATCH (r1:e1), (r1:invalid) return r1 + ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:e1), (r1), (r1:invalid) return r1 +$$) AS (r1 agtype); +ERROR: multiple labels for variable 'r1' are not supported +LINE 2: MATCH (r1:e1), (r1), (r1:invalid) return r1 + ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH (r0)-[r0]->() MATCH ()-[]->() RETURN r0 +$$) AS (r0 agtype); +ERROR: variable 'r0' is for a vertex +LINE 2: MATCH (r0)-[r0]->() MATCH ()-[]->() RETURN r0 + ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH (r0)-[]->() MATCH ()-[r0]->() RETURN r0 +$$) AS (r0 agtype); +ERROR: variable 'r0' is for a vertex +LINE 2: MATCH (r0)-[]->() MATCH ()-[r0]->() RETURN r0 + ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0]->() MATCH ()-[]->(r0) RETURN r0 +$$) AS (r0 agtype); +ERROR: variable 'r0' is for a edge +LINE 2: MATCH ()-[r0]->() MATCH ()-[]->(r0) RETURN r0 + ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e1]->() MATCH ()-[r0:e2]->() RETURN r0 +$$) AS (r0 agtype); +ERROR: multiple labels for variable 'r0' are not supported +LINE 2: MATCH ()-[r0:e1]->() MATCH ()-[r0:e2]->() RETURN r0 + ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0]->() MATCH ()-[r0:e2]->() RETURN r0 +$$) AS (r0 agtype); +ERROR: multiple labels for variable 'r0' are not supported +LINE 2: MATCH ()-[r0]->() MATCH ()-[r0:e2]->() RETURN r0 + ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e1]->() MATCH ()-[r0:e2]->() RETURN r0 +$$) AS (r0 agtype); +ERROR: multiple labels for variable 'r0' are not supported +LINE 2: MATCH ()-[r0:e1]->() MATCH ()-[r0:e2]->() RETURN r0 + ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e1]->()-[r0]->() MATCH ()-[r0:e2]->() RETURN r0 +$$) AS (r0 agtype); +ERROR: duplicate edge variable 'r0' within a clause +LINE 2: MATCH ()-[r0:e1]->()-[r0]->() MATCH ()-[r0:e2]->() R... + ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e1]->()-[r1]->() MATCH ()-[r1:e1]->()-[r0]->() RETURN r0 +$$) AS (r0 agtype); +ERROR: multiple labels for variable 'r1' are not supported +LINE 2: MATCH ()-[r0:e1]->()-[r1]->() MATCH ()-[r1:e1]->()-[... + ^ +-- Labels that don't exist but do match +SELECT * FROM cypher('cypher_match', $$ + MATCH (r0)-[r1:related]->() MATCH ()-[r1:related]->() RETURN r0 +$$) AS (r0 agtype); + r0 +---- +(0 rows) + +-- Labels that don't exist and don't match +SELECT * FROM cypher('cypher_match', $$ + MATCH (r0)-[r1]->() MATCH ()-[r1:related]->() RETURN r0 +$$) AS (r0 agtype); +ERROR: multiple labels for variable 'r1' are not supported +LINE 2: MATCH (r0)-[r1]->() MATCH ()-[r1:related]->() RETURN... + ^ +SELECT * FROM cypher('cypher_match', $$ + MATCH (r0)-[r1:related]->() MATCH ()-[r1:relateds]->() RETURN r0 +$$) AS (r0 agtype); +ERROR: multiple labels for variable 'r1' are not supported +LINE 2: MATCH (r0)-[r1:related]->() MATCH ()-[r1:relateds]->... + ^ +--Valid variable reuse, although why would you want to do it this way? SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)-[]-()-[]-(a {id:'will_not_fail'}) RETURN a $$) AS (a agtype); @@ -726,15 +995,6 @@ AS (u agtype, e agtype, v agtype); {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex | {"id": 3096224743817217, "label": "self", "end_id": 2814749767106561, "start_id": 2814749767106561, "properties": {}}::edge | {"id": 2814749767106561, "label": "loop", "properties": {"id": "initial"}}::vertex (1 row) --- Exists checks for a loop. There should be none because of edge uniqueness --- requirement. -SELECT * FROM cypher('cypher_match', - $$MATCH (u)-[e]->(v) WHERE EXISTS((u)-[e]->(u)-[e]->(u)) RETURN u, e, v $$) -AS (u agtype, e agtype, v agtype); - u | e | v ----+---+--- -(0 rows) - -- Multiple exists SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((u)) AND EXISTS((v)) RETURN u, e, v $$) @@ -1770,14 +2030,14 @@ SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name: "John"})-[]->()-[]->(a (1 row) -- these are illegal and should fail -SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b]->(a) RETURN p $$)as (p agtype); -ERROR: duplicate edge variable 'b' within a clause -LINE 1: ...ROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b]->(a) R... - ^ SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b:knows]->(a) RETURN p $$)as (p agtype); ERROR: duplicate edge variable 'b' within a clause LINE 1: ...ROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b:knows]-... ^ +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b]->(a) RETURN p $$)as (p agtype); +ERROR: duplicate edge variable 'b' within a clause +LINE 1: ...ROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b]->(a) R... + ^ SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b:knows]->(a) RETURN p $$)as (p agtype); ERROR: duplicate edge variable 'b' within a clause LINE 1: ...pher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b:knows]-... diff --git a/regress/sql/cypher_match.sql b/regress/sql/cypher_match.sql index 60931f602..6829d16f5 100644 --- a/regress/sql/cypher_match.sql +++ b/regress/sql/cypher_match.sql @@ -293,12 +293,122 @@ $$) AS (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (a) MATCH (a:invalid_label) RETURN a $$) AS (a agtype); - ---Valid variable reuse, although why would you want to do it this way? SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)-[]-()-[a]-() RETURN a $$) AS (a agtype); +-- valid variable reuse for edge labels across clauses +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0]->() MATCH ()-[r0]->() RETURN r0 +$$) AS (r0 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e1]->() MATCH ()-[r0:e1]->() RETURN r0 +$$) AS (r0 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e2]->() MATCH ()-[r0:e2]->() RETURN r0 +$$) AS (r0 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e1]->()-[r1]->() RETURN r0,r1 +$$) AS (r0 agtype, r1 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH p0=()-[:e1]->() MATCH p1=()-[:e2]->() RETURN p1 +$$) AS (p1 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e1]->()-[r1]->() MATCH ()-[r0:e1]->()-[r1]->() RETURN r0,r1 +$$) AS (r0 agtype, r1 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[]->() MATCH ()-[r1:e2]->() RETURN r1 +$$) AS (r1 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e1]->() MATCH ()-[r1:e2]->() RETURN r0,r1 +$$) AS (r0 agtype, r1 agtype); + +-- valid variable reuse for vertex labels across clauses +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:invalid), (r1:invalid) return r1 +$$) AS (r1 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1), (r1) return r1 +$$) AS (r1 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:invalid), (r1) return r1 +$$) AS (r1 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:invalid), (r1), (r1), (r1:invalid) return r1 +$$) AS (r1 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:invalid)-[]->(r1)-[]->(r1:invalid)-[]->(r1) return r1 +$$) AS (r1 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:invalid)-[]->()-[]->()-[]->(r1:invalid) return r1 +$$) AS (r1 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e1]->()-[r1]->() MATCH ()-[r0:e1]->()-[r0]->() RETURN r0 +$$) AS (r0 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e1]->() MATCH ()-[r0]->() RETURN r0 +$$) AS (r0 agtype); + +-- invalid variable reuse for vertex +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:invalid)-[]->(r1)-[]->(r1)-[]->(r1:invalids) return r1 +$$) AS (r1 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:invalid)-[]->(r1)-[]->(r1)-[]->(r1)-[r1]->() return r1 +$$) AS (r1 agtype); + +-- invalid variable reuse for labels across clauses +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:e1), (r1:e2) return r1 +$$) AS (r1 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:invalid), (r1:e2) return r1 +$$) AS (r1 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:e1), (r1:invalid) return r1 +$$) AS (r1 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (r1:e1), (r1), (r1:invalid) return r1 +$$) AS (r1 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (r0)-[r0]->() MATCH ()-[]->() RETURN r0 +$$) AS (r0 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (r0)-[]->() MATCH ()-[r0]->() RETURN r0 +$$) AS (r0 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0]->() MATCH ()-[]->(r0) RETURN r0 +$$) AS (r0 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e1]->() MATCH ()-[r0:e2]->() RETURN r0 +$$) AS (r0 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0]->() MATCH ()-[r0:e2]->() RETURN r0 +$$) AS (r0 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e1]->() MATCH ()-[r0:e2]->() RETURN r0 +$$) AS (r0 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e1]->()-[r0]->() MATCH ()-[r0:e2]->() RETURN r0 +$$) AS (r0 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH ()-[r0:e1]->()-[r1]->() MATCH ()-[r1:e1]->()-[r0]->() RETURN r0 +$$) AS (r0 agtype); + +-- Labels that don't exist but do match +SELECT * FROM cypher('cypher_match', $$ + MATCH (r0)-[r1:related]->() MATCH ()-[r1:related]->() RETURN r0 +$$) AS (r0 agtype); + +-- Labels that don't exist and don't match +SELECT * FROM cypher('cypher_match', $$ + MATCH (r0)-[r1]->() MATCH ()-[r1:related]->() RETURN r0 +$$) AS (r0 agtype); +SELECT * FROM cypher('cypher_match', $$ + MATCH (r0)-[r1:related]->() MATCH ()-[r1:relateds]->() RETURN r0 +$$) AS (r0 agtype); + +--Valid variable reuse, although why would you want to do it this way? SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)-[]-()-[]-(a {id:'will_not_fail'}) RETURN a $$) AS (a agtype); @@ -376,12 +486,6 @@ SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((v)-[e]->(v)) RETURN u, e, v $$) AS (u agtype, e agtype, v agtype); --- Exists checks for a loop. There should be none because of edge uniqueness --- requirement. -SELECT * FROM cypher('cypher_match', - $$MATCH (u)-[e]->(v) WHERE EXISTS((u)-[e]->(u)-[e]->(u)) RETURN u, e, v $$) -AS (u agtype, e agtype, v agtype); - -- Multiple exists SELECT * FROM cypher('cypher_match', $$MATCH (u)-[e]->(v) WHERE EXISTS((u)) AND EXISTS((v)) RETURN u, e, v $$) @@ -837,8 +941,8 @@ SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name: "Dave"})-[]->()-[]->(a SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name: "John"})-[]->()-[]->(a) RETURN p $$)as (p agtype); -- these are illegal and should fail -SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b]->(a) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b:knows]->(a) RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b]->(a) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b:knows]->(a) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b]->(a) RETURN p $$)as (p agtype); diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index ad8821a22..18cf3c633 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -133,10 +133,8 @@ static Expr *transform_cypher_edge(cypher_parsestate *cpstate, static Expr *transform_cypher_node(cypher_parsestate *cpstate, cypher_node *node, List **target_list, bool output_node, bool valid_label); -static Node *make_vertex_expr(cypher_parsestate *cpstate, RangeTblEntry *rte, - char *label); -static Node *make_edge_expr(cypher_parsestate *cpstate, RangeTblEntry *rte, - char *label); +static Node *make_vertex_expr(cypher_parsestate *cpstate, RangeTblEntry *rte); +static Node *make_edge_expr(cypher_parsestate *cpstate, RangeTblEntry *rte); static Node *make_qual(cypher_parsestate *cpstate, transform_entity *entity, char *name); static TargetEntry * @@ -3819,13 +3817,13 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, entity = make_transform_entity(cpstate, ENT_VERTEX, (Node *)node, expr); - /* + /* * We want to add tranformed entity to entities before tranforming props * so that props referncing currently transformed entity can be resolved. */ cpstate->entities = lappend(cpstate->entities, entity); entities = lappend(entities, entity); - + /* transform the properties if they exist */ if (node->props) { @@ -3939,7 +3937,7 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, entity = make_transform_entity(cpstate, ENT_EDGE, (Node *)rel, expr); - /* + /* * We want to add tranformed entity to entities before tranforming props * so that props referncing currently transformed entity can be resolved. */ @@ -4284,40 +4282,135 @@ static Expr *transform_cypher_edge(cypher_parsestate *cpstate, bool valid_label) { ParseState *pstate = (ParseState *)cpstate; - char *schema_name; - char *rel_name; - RangeVar *label_range_var; - Alias *alias; - RangeTblEntry *rte; - int resno; - TargetEntry *te; - Expr *expr; + char *schema_name = NULL; + char *rel_name = NULL; + RangeVar *label_range_var = NULL; + Alias *alias = NULL; + RangeTblEntry *rte = NULL; + int resno = -1; + TargetEntry *te = NULL; + transform_entity *entity = NULL; + cypher_relationship *cr = NULL; + Node *expr = NULL; + bool refs_var = false; - if (!rel->label) + /* + * If we have an edge name, get any potential variable or column + * references. Additionally, verify that they are for edges. + */ + if (rel->name != NULL) { - rel->label = AG_DEFAULT_LABEL_EDGE; + te = findTarget(*target_list, rel->name); + entity = find_variable(cpstate, rel->name); + expr = colNameToVar(pstate, rel->name, false, rel->location); + + /* + * If we have a valid entity and te for this rel name, go ahead and get + * the cypher relationship as we will need this for later and flag that + * we have a variable reference. + */ + if (te != NULL && entity != NULL) + { + cr = (cypher_relationship *)entity->entity.rel; + refs_var = true; + } + + /* If the variable already exists, verify that it is for an edge */ + if (refs_var && entity->type != ENT_EDGE) + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("variable '%s' is for a vertex", rel->name), + parser_errposition(pstate, rel->location))); + } } - else if(!valid_label) + + /* + * If we do not have a label for this edge, we either need to find one + * from a referenced variable or we need to set it to the default label. + */ + if (rel->label == NULL) + { + /* if there is a variable for this rel name */ + if (refs_var) + { + /* + * If the referenced var has a non NULL label, copy it. This is + * usually the case when it uses a variable that is already defined. + * Fx - + * + * MATCH (u:people)-[e:knows]->(v:people), (v)-[e]->(u) RETURN e + * MATCH (u:people)-[]->()-[]->(u) RETURN u + * + * We copy it so that we know what label it is referencing. + */ + if (cr->parsed_label != NULL) + { + rel->parsed_label = cr->parsed_label; + rel->label = cr->label; + } + else + { + rel->label = AG_DEFAULT_LABEL_EDGE; + } + } + /* otherwise, just give it the default label */ + else + { + rel->label = AG_DEFAULT_LABEL_EDGE; + } + } + /* if we do have a label, is it valid */ + else if (!valid_label) { /* * XXX: Need to determine proper rules, for when label does not exist - * or is for an edge. Maybe labels and edges should share names, like + * or is for an vertex. Maybe labels and edges should share names, like * in openCypher. But these are stand in errors, to prevent * segmentation faults, and other errors. * * Update: Nonexistent and mismatched labels now return a NULL value to - * prevent segmentation faults, and other errors. We can also consider + * prevent segmentation faults, and other errors. We can also consider * if an all-purpose label would be useful. */ rel->label = NULL; + } + /* + * Variables for edges are not allowed to be used multiple times within the + * same clause. + */ + if (expr == NULL && refs_var) + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("duplicate edge variable '%s' within a clause", + rel->name), + parser_errposition(pstate, rel->location))); } - if (rel->name != NULL) + /* + * If this edge uses a variable that already exists, verify that the label + * names are the same. + */ + if (refs_var && + (cr->parsed_label != NULL || rel->parsed_label != NULL) && + (cr->parsed_label == NULL || rel->parsed_label == NULL || + (pg_strcasecmp(cr->parsed_label, rel->parsed_label) != 0))) { - TargetEntry *te; - Node *expr; + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("multiple labels for variable '%s' are not supported", + rel->name), + parser_errposition(pstate, rel->location))); + } + /* + * Now we need to do a few checks and either return the existing var or + * or build a new edge. + */ + if (rel->name != NULL) + { /* * If we are in a WHERE clause transform, we don't want to create new * variables, we want to use the existing ones. So, error if otherwise. @@ -4330,11 +4423,12 @@ static Expr *transform_cypher_edge(cypher_parsestate *cpstate, * If expr_kind is WHERE, the expressions are in the parent's * parent's parsestate, due to the way we transform sublinks. */ - transform_entity *entity = find_variable(parent_cpstate, rel->name); + transform_entity *tentity = find_variable(parent_cpstate, + rel->name); - if (entity != NULL) + if (tentity != NULL) { - return get_relative_expr(entity, 2); + return get_relative_expr(tentity, 2); } else { @@ -4345,47 +4439,20 @@ static Expr *transform_cypher_edge(cypher_parsestate *cpstate, } } - te = findTarget(*target_list, rel->name); - /* also search for a variable from a previous transform */ - expr = colNameToVar(pstate, rel->name, false, rel->location); - - if (expr != NULL) + /* if this vertex is referencing an existing te var, return its expr */ + if (refs_var) { - return (Expr*)expr; + return te->expr; } - if (te != NULL) + /* if this vertex is referencing an existing col var, return its expr */ + if (expr != NULL) { - transform_entity *entity = find_variable(cpstate, rel->name); - - /* - * If the variable already exists, verify that it is for an edge. - * You cannot have the same edge repeated in a path. - * You cannot have an variable that is for a vertex. - */ - if (entity != NULL) - { - if (entity->type == ENT_EDGE) - { - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("duplicate edge variable '%s' within a clause", - rel->name), - parser_errposition(pstate, rel->location))); - } - if (entity->type == ENT_VERTEX) - { - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("variable '%s' is for a vertex", rel->name), - parser_errposition(pstate, rel->location))); - } - } - - return te->expr; + return (Expr *)expr; } } + /* if we aren't using a variable, build the edge */ if (!rel->name) { rel->name = get_next_default_alias(cpstate); @@ -4417,20 +4484,20 @@ static Expr *transform_cypher_edge(cypher_parsestate *cpstate, if (valid_label) { - expr = (Expr *)make_edge_expr(cpstate, rte, rel->label); + expr = make_edge_expr(cpstate, rte); } else { - expr = (Expr*)makeNullConst(AGTYPEOID, -1, InvalidOid); + expr = (Node *)makeNullConst(AGTYPEOID, -1, InvalidOid); } if (rel->name) { - te = makeTargetEntry(expr, resno, rel->name, false); + te = makeTargetEntry((Expr *)expr, resno, rel->name, false); *target_list = lappend(*target_list, te); } - return expr; + return (Expr *)expr; } static Expr *transform_cypher_node(cypher_parsestate *cpstate, @@ -4438,19 +4505,80 @@ static Expr *transform_cypher_node(cypher_parsestate *cpstate, bool output_node, bool valid_label) { ParseState *pstate = (ParseState *)cpstate; - char *schema_name; - char *rel_name; - RangeVar *label_range_var; - Alias *alias; - RangeTblEntry *rte; - int resno; - TargetEntry *te; - Expr *expr; + char *schema_name = NULL; + char *rel_name = NULL; + RangeVar *label_range_var = NULL; + Alias *alias = NULL; + RangeTblEntry *rte = NULL; + int resno = -1; + TargetEntry *te = NULL; + Expr *expr = NULL; + transform_entity *entity = NULL; + cypher_node *cn = NULL; + bool refs_var = false; - if (!node->label) + /* if we have a node name, get any potential variable references */ + if (node->name != NULL) { - node->label = AG_DEFAULT_LABEL_VERTEX; + te = findTarget(*target_list, node->name); + entity = find_variable(cpstate, node->name); + + /* + * If we have a valid entity and te for this rel name, go ahead and get + * the cypher relationship as we will need this for later and flag that + * we have a variable reference. + */ + if (te != NULL && entity != NULL) + { + cn = (cypher_node *)entity->entity.node; + refs_var = true; + } + + /* If the variable already exists, verify that it is for a vertex */ + if (refs_var && entity->type != ENT_VERTEX) + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("variable '%s' is for a edge", node->name), + parser_errposition(pstate, node->location))); + } } + + /* + * If we do not have a label for this vertex, we either need to find one + * from a referenced variable or we need to set it to the default label. + */ + if (node->label == NULL) + { + if (refs_var) + { + /* + * If the referenced var has a non NULL label, copy it. This is + * usually the case when it uses a variable that is already defined. + * Fx - + * + * MATCH (u:people)-[e:knows]->(v:people), (v)-[e]->(u) RETURN e + * MATCH (u:people)-[]->()-[]->(u) RETURN u + * + * We copy it so that we know what label it is referencing. + */ + if (cn->parsed_label != NULL) + { + node->parsed_label = cn->parsed_label; + node->label = cn->label; + } + else + { + node->label = AG_DEFAULT_LABEL_VERTEX; + } + } + /* otherwise, just give it the default label */ + else + { + node->label = AG_DEFAULT_LABEL_VERTEX; + } + } + /* if we do have a label, is it valid */ else if (!valid_label) { /* @@ -4464,18 +4592,37 @@ static Expr *transform_cypher_node(cypher_parsestate *cpstate, * if an all-purpose label would be useful. */ node->label = NULL; + } + /* + * If this vertex uses a variable that already exists, verify that the label + * being used is of the same name. + */ + if (refs_var && + (cn->parsed_label != NULL || node->parsed_label != NULL) && + (cn->parsed_label == NULL || node->parsed_label == NULL || + (pg_strcasecmp(cn->parsed_label, node->parsed_label) != 0))) + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("multiple labels for variable '%s' are not supported", + node->name), + parser_errposition(pstate, node->location))); } + /* if it is not an output node, just return null */ if (!output_node) { return NULL; } + /* + * Now we need to do a few checks and either return the existing var or + * or build a new vertex. + */ if (node->name != NULL) { - TargetEntry *te; - Node *expr; + Node *expr = NULL; /* * If we are in a WHERE clause transform, we don't want to create new @@ -4489,11 +4636,12 @@ static Expr *transform_cypher_node(cypher_parsestate *cpstate, * If expr_kind is WHERE, the expressions are in the parent's * parent's parsestate, due to the way we transform sublinks. */ - transform_entity *entity = find_variable(parent_cpstate, node->name); + transform_entity *tentity = NULL; - if (entity != NULL) + tentity = find_variable(parent_cpstate, node->name); + if (tentity != NULL) { - return get_relative_expr(entity, 2); + return get_relative_expr(tentity, 2); } else { @@ -4504,49 +4652,15 @@ static Expr *transform_cypher_node(cypher_parsestate *cpstate, } } - te = findTarget(*target_list, node->name); - /* also search for the variable from a previous transforms */ - expr = colNameToVar(pstate, node->name, false, node->location); - - if (te != NULL) + /* if this vertex is referencing an existing te var, return its expr */ + if (refs_var) { - transform_entity *entity = find_variable(cpstate, node->name); - - /* If the variable already exists, verify that it is for a vertex */ - if (entity != NULL && (entity->type != ENT_VERTEX)) - { - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("variable '%s' is for a edge", node->name), - parser_errposition(pstate, node->location))); - } - - /* - * If the variable already exists, verify that any label specified - * is of the same name or scope. Reject those that aren't. - */ - if (entity != NULL) - { - cypher_node *cnode = (cypher_node *)entity->entity.node; - - if (!node->label || - (cnode != NULL && - node != NULL && - /* allow node using a default label against resolved var */ - pg_strcasecmp(node->label, AG_DEFAULT_LABEL_VERTEX) != 0 && - /* allow labels with the same name */ - pg_strcasecmp(cnode->label, node->label) != 0)) - { - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("multiple labels for variable '%s' are not supported", node->name), - parser_errposition(pstate, node->location))); - } - } - return te->expr; } - else if (expr != NULL) + + /* if this vertex is referencing an existing col var, return its expr */ + expr = colNameToVar(pstate, node->name, false, node->location); + if (expr != NULL) { return (Expr*)expr; } @@ -4556,6 +4670,7 @@ static Expr *transform_cypher_node(cypher_parsestate *cpstate, node->name = get_next_default_alias(cpstate); } + /* now build a new vertex */ schema_name = get_graph_namespace_name(cpstate->graph_name); if (valid_label) @@ -4582,7 +4697,7 @@ static Expr *transform_cypher_node(cypher_parsestate *cpstate, if (valid_label) { - expr = (Expr *)make_vertex_expr(cpstate, rte, node->label); + expr = (Expr *)make_vertex_expr(cpstate, rte); } else { @@ -4596,8 +4711,7 @@ static Expr *transform_cypher_node(cypher_parsestate *cpstate, return expr; } -static Node *make_edge_expr(cypher_parsestate *cpstate, RangeTblEntry *rte, - char *label) +static Node *make_edge_expr(cypher_parsestate *cpstate, RangeTblEntry *rte) { ParseState *pstate = (ParseState *)cpstate; Oid label_name_func_oid; @@ -4645,8 +4759,7 @@ static Node *make_edge_expr(cypher_parsestate *cpstate, RangeTblEntry *rte, return (Node *)func_expr; } -static Node *make_vertex_expr(cypher_parsestate *cpstate, RangeTblEntry *rte, - char *label) +static Node *make_vertex_expr(cypher_parsestate *cpstate, RangeTblEntry *rte) { ParseState *pstate = (ParseState *)cpstate; Oid label_name_func_oid; diff --git a/src/backend/parser/cypher_gram.y b/src/backend/parser/cypher_gram.y index 5f8dc2d8b..4fb599a73 100644 --- a/src/backend/parser/cypher_gram.y +++ b/src/backend/parser/cypher_gram.y @@ -1180,6 +1180,7 @@ path_node: n = make_ag_node(cypher_node); n->name = $2; n->label = $3; + n->parsed_label = $3; n->props = $4; n->location = @1; @@ -1225,6 +1226,7 @@ path_relationship_body: n = make_ag_node(cypher_relationship); n->name = $2; n->label = $3; + n->parsed_label = $3; n->varlen = $4; n->props = $5; @@ -1238,6 +1240,7 @@ path_relationship_body: n = make_ag_node(cypher_relationship); n->name = NULL; n->label = NULL; + n->parsed_label = NULL; n->varlen = NULL; n->props = NULL; diff --git a/src/include/nodes/cypher_nodes.h b/src/include/nodes/cypher_nodes.h index afe3127ee..d6d8c02dd 100644 --- a/src/include/nodes/cypher_nodes.h +++ b/src/include/nodes/cypher_nodes.h @@ -142,6 +142,7 @@ typedef struct cypher_node ExtensibleNode extensible; char *name; char *label; + char *parsed_label; Node *props; // map or parameter int location; } cypher_node; @@ -159,6 +160,7 @@ typedef struct cypher_relationship ExtensibleNode extensible; char *name; char *label; + char *parsed_label; Node *props; // map or parameter Node *varlen; // variable length relationships (A_Indices) cypher_rel_dir dir; From ca7e1748b1778f3574020683fef4152bf76687bf Mon Sep 17 00:00:00 2001 From: Dehowe Feng <8065116+dehowef@users.noreply.github.com> Date: Fri, 19 May 2023 10:45:26 -0700 Subject: [PATCH 176/191] Fix CASE and boolean typecasting in WHEN... THEN (#914) Addresses issue #875. Simple fix in casting logic to allow CASE statements to handle boolean logic in the THEN statement. Added related regression tests. --- regress/expected/expr.out | 35 ++++++++++++++++++++++++++++++++ regress/sql/expr.sql | 17 ++++++++++++++++ src/backend/parser/cypher_expr.c | 17 ++++++++++++++-- 3 files changed, 67 insertions(+), 2 deletions(-) diff --git a/regress/expected/expr.out b/regress/expected/expr.out index 91bc70fec..36dd84714 100644 --- a/regress/expected/expr.out +++ b/regress/expected/expr.out @@ -5974,6 +5974,41 @@ SELECT * FROM cypher('case_statement', $$CREATE ({i: {}, j: {i:1}})$$) AS (resul -------- (0 rows) +--standalone case & edge cases +--base case +SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN true THEN true END) $$) as (a agtype); + a +------ + true +(1 row) + +--should return 1 empty row +SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN false THEN true END) $$) as (a agtype); + a +--- + +(1 row) + +--should return 'false' +SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN true THEN false END) $$) as (a agtype); + a +------- + false +(1 row) + +--invalid case (WHEN should be boolean) +SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN 1 THEN 'fail' END) $$) as (a agtype); +ERROR: cannot cast agtype integer to type boolean +-- booleans + logic gates +SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN true THEN (true AND true) END) $$) as (a agtype); + a +------ + true +(1 row) + +-- invalid mixed logic gate +SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN true THEN (true AND 1) END) $$) as (a agtype); +ERROR: cannot cast agtype integer to type boolean --CASE WHEN condition THEN result END SELECT * FROM cypher('case_statement', $$ MATCH (n) diff --git a/regress/sql/expr.sql b/regress/sql/expr.sql index 456f38c81..4623f1c70 100644 --- a/regress/sql/expr.sql +++ b/regress/sql/expr.sql @@ -2462,6 +2462,23 @@ SELECT * FROM cypher('case_statement', $$CREATE ({i: true, j: false})$$) AS (res SELECT * FROM cypher('case_statement', $$CREATE ({i: [], j: [0,1,2]})$$) AS (result agtype); SELECT * FROM cypher('case_statement', $$CREATE ({i: {}, j: {i:1}})$$) AS (result agtype); +--standalone case & edge cases +--base case +SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN true THEN true END) $$) as (a agtype); +--should return 1 empty row +SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN false THEN true END) $$) as (a agtype); +--should return 'false' +SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN true THEN false END) $$) as (a agtype); +--invalid case (WHEN should be boolean) +SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN 1 THEN 'fail' END) $$) as (a agtype); + +-- booleans + logic gates +SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN true THEN (true AND true) END) $$) as (a agtype); +-- invalid mixed logic gate +SELECT * FROM cypher('case_statement', $$ RETURN (CASE WHEN true THEN (true AND 1) END) $$) as (a agtype); + + + --CASE WHEN condition THEN result END SELECT * FROM cypher('case_statement', $$ MATCH (n) diff --git a/src/backend/parser/cypher_expr.c b/src/backend/parser/cypher_expr.c index afb695a37..b476e0b03 100644 --- a/src/backend/parser/cypher_expr.c +++ b/src/backend/parser/cypher_expr.c @@ -1125,7 +1125,7 @@ static Node *transform_CoalesceExpr(cypher_parsestate *cpstate, CoalesceExpr /* * Code borrowed from PG's transformCaseExpr and updated for AGE */ -static Node *transform_CaseExpr(cypher_parsestate *cpstate,CaseExpr +static Node *transform_CaseExpr(cypher_parsestate *cpstate, CaseExpr *cexpr) { ParseState *pstate = &cpstate->pstate; @@ -1210,7 +1210,20 @@ static Node *transform_CaseExpr(cypher_parsestate *cpstate,CaseExpr resultexprs = lcons(newcexpr->defresult, resultexprs); - ptype = select_common_type(pstate, resultexprs, "CASE", NULL); + /* + * we pass a NULL context to select_common_type because the common types can + * only be AGTYPEOID or BOOLOID. If it returns invalidoid, we know there is a + * boolean involved. + */ + ptype = select_common_type(pstate, resultexprs, NULL, NULL); + + //InvalidOid shows that there is a boolean in the result expr. + if (ptype == InvalidOid) + { + //we manually set the type to boolean here to handle the bool casting. + ptype = BOOLOID; + } + Assert(OidIsValid(ptype)); newcexpr->casetype = ptype; /* casecollid will be set by parse_collate.c */ From b7a28a19c16c20f05005bfdce7a39d8ef9bd23f1 Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Wed, 19 Apr 2023 17:55:45 -0700 Subject: [PATCH 177/191] Update file for PG11 AGE release to 1.3.0 modified: Makefile modified: README.md modified: RELEASE new file: age--1.2.0--1.3.0.sql renamed: age--1.2.0.sql -> age--1.3.0.sql modified: age.control --- Makefile | 2 +- README.md | 8 ++-- RELEASE | 70 +++++++++++++------------------- age--1.2.0--1.3.0.sql | 61 ++++++++++++++++++++++++++++ age--1.2.0.sql => age--1.3.0.sql | 0 age.control | 2 +- 6 files changed, 95 insertions(+), 48 deletions(-) create mode 100644 age--1.2.0--1.3.0.sql rename age--1.2.0.sql => age--1.3.0.sql (100%) diff --git a/Makefile b/Makefile index 4b60c7c77..e9be9cda8 100644 --- a/Makefile +++ b/Makefile @@ -73,7 +73,7 @@ OBJS = src/backend/age.o \ EXTENSION = age -DATA = age--1.2.0.sql +DATA = age--1.3.0.sql # sorted in dependency order REGRESS = scan \ diff --git a/README.md b/README.md index 927299499..28979e1f7 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@   - +   @@ -131,7 +131,7 @@ Apache AGE is intended to be simple to install and run. It can be installed with  Install PosgtreSQL -You will need to install an AGE compatible version of Postgres, for now AGE supports Postgres 11 and 12. Supporting the latest versions is on AGE roadmap. +You will need to install an AGE compatible version of Postgres, for now AGE supports Postgres 11, 12 & 13. Supporting the latest versions is on AGE roadmap.

 Install From Package Manager @@ -158,7 +158,7 @@ You can download the Postgres Clone the github repository or download thedownload an official release. -Run the pg_config utility and check the version of PostgreSQL. Currently, only PostgreSQL versions 11 & 12 are supported. If you have any other version of Postgres, you will need to install PostgreSQL version 11 & 12. +Run the pg_config utility and check the version of PostgreSQL. Currently, only PostgreSQL versions 11, 12 & 13 are supported. If you have any other version of Postgres, you will need to install PostgreSQL version 11, 12 or 13.
```bash @@ -367,4 +367,4 @@ You can also get help from these videos. You can improve ongoing efforts or initiate new ones by sending pull requests to [this repository](https://github.com/apache/age). Also, you can learn from the code review process, how to merge pull requests, and from code style compliance to documentation by visiting the [Apache AGE official site - Developer Guidelines](https://age.apache.org/contribution/guide). -Send all your comments and inquiries to the user mailing list, users@age.apache.org. \ No newline at end of file +Send all your comments and inquiries to the user mailing list, users@age.apache.org. diff --git a/RELEASE b/RELEASE index d648e27ee..027b7034b 100644 --- a/RELEASE +++ b/RELEASE @@ -15,47 +15,33 @@ # specific language governing permissions and limitations # under the License. -Release Notes for Apache AGE release v1.2.0 +Release Notes for Apache AGE release v1.3.0 -Apache AGE 1.2.0 - Release Notes - - NOTE: Due to additions to core tables, there is no upgrade path from the - previous version. - - Fix Python driver (#388). - Patch to apply PR (#203) - typos and incorrect hash init. - Update SET clause to support assigning a map (#468). - Fix WHERE clause wrong Expr bug (#339). - Fix multiple typos (#470). - Updated the volatility category (from STABLE to IMMUTABLE) of multiple functions. - Graph naming convention now aligns with Cypher spec. (#349). - Fixed README typos (#436). - Create graph instruction fixed (#414). - Readme added for JDBC driver (#383). - Regression tests added (#341). - Regression tests added (#336). - Updated Python driver Readme for clarity. - Fixed compare_agtype_scalar to only return 1, 0, or -1. - Created complete graph function (#342). - Fix Travis CI warning messages. - Updated Golang version to 1.19 (#373). - Fixed NULL pointer on name compare (#376). - Multiple updates to the README.md file. - Implemented CI testing for Golang Driver (#372). - Modify the Python driver's parameterization. - Added license header to new files that it was missing from. - Modify the Golang driver's usage of parameterization. - Added the ability to pass PostgreSQL parameters to the cypher function (specifically for drivers). - Use Debian Buster base image (#243). - Updated the CONTRIBUTING.md file (#348). - Invalid labels now return NULL instead of erroring out. - Removed incubating from overlooked files. - Fixed Golang driver module. - Removed DISCLAIMER file. - Fixed bug in delete_global_graphs. - Fixed EXPLAIN to allow for nested cypher commands. - Fixed bug with Call, YIELD clause ignores WHERE. - Graph names with empty string '' are now disallowed (#251). - Implement CALL YIELD for cypher functions. - Update NOTICE file. +Apache AGE 1.3.0 - Release Notes + Add additional comments for create_graph function. (#582) + Optimize age_exists function. (#586) + Implement plus-equal operator in SET clause. (#638) + Implement CI test for python driver. (#587) + Move from travis CI to github actions for build. (#673) + Update all driver CIs to Github actions. + Fix build warnings. + Fix golang driver workflow (#563) + Updated Readme for drivers folder. (#642) + Removed async from function definitions. (#680) + Barbell graph generation (#648) and Barbell regress tests. (#708) + Updated Python Driver ANTLR 4.9.3 -> 4.11.1 (#706) + Modify docker url for JDBC driver tests (#716) + Fix WITH ignoring WHERE clause. (#646) + Implement isEmpty() predicate function. (#710) + Fix cypher function input argument checks. (#718) + Fix Issue 693 - server termination from return exists(path). (#721) + Update regression tests for cypher_with. (#725) + Fix issue 733 - create_complete_graph() terminates the server. (#734) + Prevent MATCH from following OPTIONAL MATCH. (#740) + Fix property constraints against resolved variables. (#724) (#751) (#701) (#747) + Include invalid labels in reused variables. (#751) (#762) + Remove check for scalar agtypes in unwind. (#736) + Update PG11 CI workflows. + Update readme and version for python driver. (#780) + Update README.md diff --git a/age--1.2.0--1.3.0.sql b/age--1.2.0--1.3.0.sql new file mode 100644 index 000000000..d06214c5c --- /dev/null +++ b/age--1.2.0--1.3.0.sql @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +-- complain if script is sourced in psql, rather than via CREATE EXTENSION +\echo Use "ALTER EXTENSION age UPDATE TO '1.3.0'" to load this file. \quit + +CREATE FUNCTION ag_catalog.agtype_build_map_nonull(VARIADIC "any") +RETURNS agtype +LANGUAGE c +STABLE +CALLED ON NULL INPUT +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + +CREATE FUNCTION ag_catalog.age_isempty(agtype) +RETURNS boolean +LANGUAGE c +IMMUTABLE +RETURNS NULL ON NULL INPUT +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + +CREATE OR REPLACE FUNCTION ag_catalog.age_unnest(agtype) +RETURNS SETOF agtype +LANGUAGE c +IMMUTABLE +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + +CREATE FUNCTION ag_catalog.age_create_barbell_graph(graph_name name, + graph_size int, + bridge_size int, + node_label name = NULL, + node_properties agtype = NULL, + edge_label name = NULL, + edge_properties agtype = NULL) +RETURNS void +LANGUAGE c +CALLED ON NULL INPUT +PARALLEL SAFE +AS 'MODULE_PATHNAME'; + +-- +-- End +-- diff --git a/age--1.2.0.sql b/age--1.3.0.sql similarity index 100% rename from age--1.2.0.sql rename to age--1.3.0.sql diff --git a/age.control b/age.control index ca11e5db1..e746aa836 100644 --- a/age.control +++ b/age.control @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. -default_version = '1.2.0' +default_version = '1.3.0' comment = 'AGE database extension' module_pathname = '$libdir/age' From 27d437506e7e1c15c8a3d11228fa85ab1b77e8e4 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Thu, 1 Jun 2023 20:19:03 +0500 Subject: [PATCH 178/191] Fix issue #876 - column reference "_age_default_alias_0" is ambiguous (#931) - The problem was with get_next_default_alias function which was not generating unique aliases. - Every clause transformed as a subquery has its own cpstate which is being freed after it is tranformed. The root cpstate is the one that has the default_alias_number initialized. So we need to reach the root cpstate to get the next correct default alias number. - This change also fixed some previously incorrect results. - Added additional regression tests. --- regress/expected/cypher_match.out | 24 ++++++++++++-- regress/expected/cypher_merge.out | 43 ++++++++++++++------------ regress/sql/cypher_match.sql | 4 +++ regress/sql/cypher_merge.sql | 1 - src/backend/parser/cypher_parse_node.c | 13 ++++++++ 5 files changed, 61 insertions(+), 24 deletions(-) diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index 1f97ef49b..da5e45122 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -1931,7 +1931,9 @@ SELECT * FROM cypher('cypher_match', $$ ----------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge -(2 rows) + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge +(4 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r {years:3, relationship: "friends"}]-() RETURN r $$) as (r agtype); @@ -1947,7 +1949,9 @@ SELECT * FROM cypher('cypher_match', $$ ----------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge -(2 rows) + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge + {"id": 4785074604081153, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710661, "properties": {"years": 3, "relationship": "friends"}}::edge +(4 rows) --mismatch year #, should return nothing SELECT * FROM cypher('cypher_match', $$ @@ -1962,7 +1966,9 @@ SELECT * FROM cypher('cypher_match', $$ ----------------------------------------------------------------------------------------------------------------------------------------------------------------- {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge -(2 rows) + {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge + {"id": 4785074604081154, "label": "knows", "end_id": 281474976710666, "start_id": 281474976710659, "properties": {"years": 4, "relationship": "enemies"}}::edge +(4 rows) SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r {relationship:"enemies"}]-() MATCH ()-[r {relationship:"friends"}]-() RETURN r $$) as (r agtype); @@ -2101,6 +2107,18 @@ SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_whatever) RETURN 0 $ ERROR: _age_default_ is only for internal use LINE 1: SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_... ^ +-- issue 876 +SELECT * FROM cypher('cypher_match', $$ MATCH ({name: "Dave"}) MATCH ({name: "Dave"}) MATCH ({name: "Dave"}) RETURN 0 $$) as (a agtype); + a +--- + 0 +(1 row) + +SELECT * FROM cypher('cypher_match', $$MATCH ({n0:0}) MATCH ()-[]->() MATCH ({n1:0})-[]-() RETURN 0 AS n2$$) as (a agtype); + a +--- +(0 rows) + -- -- self referencing property constraints (issue #898) -- diff --git a/regress/expected/cypher_merge.out b/regress/expected/cypher_merge.out index f2bc0696e..c4310ef6a 100644 --- a/regress/expected/cypher_merge.out +++ b/regress/expected/cypher_merge.out @@ -496,17 +496,20 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtyp /* * test 17: - * XXX: Incorrect Output. To FIX */ --test query SELECT * FROM cypher('cypher_merge', $$CREATE (n) MERGE (n)-[:e]->() $$) AS (a agtype); -ERROR: end_id() argument must resolve to a scalar value ---validate created correctly -SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[:e]->() RETURN p$$) AS (p agtype); - p + a --- (0 rows) +--validate created correctly +SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[:e]->() RETURN p$$) AS (p agtype); + p +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 281474976710689, "label": "", "properties": {}}::vertex, {"id": 844424930131982, "label": "e", "end_id": 281474976710690, "start_id": 281474976710689, "properties": {}}::edge, {"id": 281474976710690, "label": "", "properties": {}}::vertex]::path +(1 row) + --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a @@ -526,7 +529,7 @@ SELECT * FROM cypher('cypher_merge', $$CREATE (n {i : 1}) SET n.i = 2 MERGE ({i: SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------------- - {"id": 281474976710690, "label": "", "properties": {"i": 2}}::vertex + {"id": 281474976710691, "label": "", "properties": {"i": 2}}::vertex (1 row) --clean up @@ -548,7 +551,7 @@ SELECT * FROM cypher('cypher_merge', $$CREATE (n {i : 1}) SET n.i = 2 WITH n as SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------------- - {"id": 281474976710691, "label": "", "properties": {"i": 2}}::vertex + {"id": 281474976710692, "label": "", "properties": {"i": 2}}::vertex (1 row) --clean up @@ -576,7 +579,7 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n {i : 1}) SET n.i = 2 WITH n as a SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------------- - {"id": 281474976710692, "label": "", "properties": {"i": 2}}::vertex + {"id": 281474976710693, "label": "", "properties": {"i": 2}}::vertex (1 row) --clean up @@ -601,7 +604,7 @@ ERROR: vertex assigned to variable n was deleted SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------------- - {"id": 281474976710693, "label": "", "properties": {"i": 1}}::vertex + {"id": 281474976710694, "label": "", "properties": {"i": 1}}::vertex (1 row) --clean up @@ -679,7 +682,7 @@ SELECT * FROM cypher('cypher_merge', $$MERGE ()-[:e]-()$$) AS (a agtype); SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710694, "label": "", "properties": {}}::vertex, {"id": 844424930131982, "label": "e", "end_id": 281474976710695, "start_id": 281474976710694, "properties": {}}::edge, {"id": 281474976710695, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710695, "label": "", "properties": {}}::vertex, {"id": 844424930131983, "label": "e", "end_id": 281474976710696, "start_id": 281474976710695, "properties": {}}::edge, {"id": 281474976710696, "label": "", "properties": {}}::vertex]::path (1 row) --clean up @@ -694,14 +697,14 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtyp SELECT * FROM cypher('cypher_merge', $$MERGE (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------- - {"id": 281474976710696, "label": "", "properties": {}}::vertex + {"id": 281474976710697, "label": "", "properties": {}}::vertex (1 row) --validate SELECT * FROM cypher('cypher_merge', $$MATCH (a) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------- - {"id": 281474976710696, "label": "", "properties": {}}::vertex + {"id": 281474976710697, "label": "", "properties": {}}::vertex (1 row) --clean up @@ -716,14 +719,14 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtyp SELECT * FROM cypher('cypher_merge', $$MERGE p=()-[:e]-() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710697, "label": "", "properties": {}}::vertex, {"id": 844424930131983, "label": "e", "end_id": 281474976710698, "start_id": 281474976710697, "properties": {}}::edge, {"id": 281474976710698, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710698, "label": "", "properties": {}}::vertex, {"id": 844424930131984, "label": "e", "end_id": 281474976710699, "start_id": 281474976710698, "properties": {}}::edge, {"id": 281474976710699, "label": "", "properties": {}}::vertex]::path (1 row) --validate SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710697, "label": "", "properties": {}}::vertex, {"id": 844424930131983, "label": "e", "end_id": 281474976710698, "start_id": 281474976710697, "properties": {}}::edge, {"id": 281474976710698, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710698, "label": "", "properties": {}}::vertex, {"id": 844424930131984, "label": "e", "end_id": 281474976710699, "start_id": 281474976710698, "properties": {}}::edge, {"id": 281474976710699, "label": "", "properties": {}}::vertex]::path (1 row) --clean up @@ -738,14 +741,14 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtyp SELECT * FROM cypher('cypher_merge', $$MERGE (a)-[:e]-(b) RETURN a$$) AS (a agtype); a ---------------------------------------------------------------- - {"id": 281474976710699, "label": "", "properties": {}}::vertex + {"id": 281474976710700, "label": "", "properties": {}}::vertex (1 row) --validate SELECT * FROM cypher('cypher_merge', $$MATCH p=()-[]->() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710699, "label": "", "properties": {}}::vertex, {"id": 844424930131984, "label": "e", "end_id": 281474976710700, "start_id": 281474976710699, "properties": {}}::edge, {"id": 281474976710700, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710700, "label": "", "properties": {}}::vertex, {"id": 844424930131985, "label": "e", "end_id": 281474976710701, "start_id": 281474976710700, "properties": {}}::edge, {"id": 281474976710701, "label": "", "properties": {}}::vertex]::path (1 row) --clean up @@ -760,14 +763,14 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtyp SELECT * FROM cypher('cypher_merge', $$CREATE p=()-[:e]->() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710701, "label": "", "properties": {}}::vertex, {"id": 844424930131985, "label": "e", "end_id": 281474976710702, "start_id": 281474976710701, "properties": {}}::edge, {"id": 281474976710702, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710702, "label": "", "properties": {}}::vertex, {"id": 844424930131986, "label": "e", "end_id": 281474976710703, "start_id": 281474976710702, "properties": {}}::edge, {"id": 281474976710703, "label": "", "properties": {}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_merge', $$MERGE p=()-[:e]-() RETURN p$$) AS (a agtype); a --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710701, "label": "", "properties": {}}::vertex, {"id": 844424930131985, "label": "e", "end_id": 281474976710702, "start_id": 281474976710701, "properties": {}}::edge, {"id": 281474976710702, "label": "", "properties": {}}::vertex]::path - [{"id": 281474976710702, "label": "", "properties": {}}::vertex, {"id": 844424930131985, "label": "e", "end_id": 281474976710702, "start_id": 281474976710701, "properties": {}}::edge, {"id": 281474976710701, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710702, "label": "", "properties": {}}::vertex, {"id": 844424930131986, "label": "e", "end_id": 281474976710703, "start_id": 281474976710702, "properties": {}}::edge, {"id": 281474976710703, "label": "", "properties": {}}::vertex]::path + [{"id": 281474976710703, "label": "", "properties": {}}::vertex, {"id": 844424930131986, "label": "e", "end_id": 281474976710703, "start_id": 281474976710702, "properties": {}}::edge, {"id": 281474976710702, "label": "", "properties": {}}::vertex]::path (2 rows) --clean up @@ -812,7 +815,7 @@ ERROR: Existing variable m cannot be NULL in MERGE clause SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (a agtype); a ---------------------------------------------------------------- - {"id": 281474976710703, "label": "", "properties": {}}::vertex + {"id": 281474976710704, "label": "", "properties": {}}::vertex (1 row) -- diff --git a/regress/sql/cypher_match.sql b/regress/sql/cypher_match.sql index 6829d16f5..ffd554615 100644 --- a/regress/sql/cypher_match.sql +++ b/regress/sql/cypher_match.sql @@ -960,6 +960,10 @@ SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_) RETURN _age_defaul SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_a) RETURN _age_default_a $$) as (a agtype); SELECT * FROM cypher('cypher_match', $$ MATCH (_age_default_whatever) RETURN 0 $$) as (a agtype); +-- issue 876 +SELECT * FROM cypher('cypher_match', $$ MATCH ({name: "Dave"}) MATCH ({name: "Dave"}) MATCH ({name: "Dave"}) RETURN 0 $$) as (a agtype); +SELECT * FROM cypher('cypher_match', $$MATCH ({n0:0}) MATCH ()-[]->() MATCH ({n1:0})-[]-() RETURN 0 AS n2$$) as (a agtype); + -- -- self referencing property constraints (issue #898) -- diff --git a/regress/sql/cypher_merge.sql b/regress/sql/cypher_merge.sql index df0666ffd..9d04364fc 100644 --- a/regress/sql/cypher_merge.sql +++ b/regress/sql/cypher_merge.sql @@ -278,7 +278,6 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtyp /* * test 17: - * XXX: Incorrect Output. To FIX */ --test query diff --git a/src/backend/parser/cypher_parse_node.c b/src/backend/parser/cypher_parse_node.c index 269dd3c8c..d0d2cade5 100644 --- a/src/backend/parser/cypher_parse_node.c +++ b/src/backend/parser/cypher_parse_node.c @@ -131,9 +131,22 @@ RangeTblEntry *find_rte(cypher_parsestate *cpstate, char *varname) */ char *get_next_default_alias(cypher_parsestate *cpstate) { + ParseState *pstate = (ParseState *)cpstate; + cypher_parsestate *parent_cpstate = (cypher_parsestate *)pstate->parentParseState; char *alias_name; int nlen = 0; + /* + * Every clause transformed as a subquery has its own cpstate which is being + * freed after it is tranformed. The root cpstate is the one that has the + * default alias number initialized. So we need to reach the root cpstate to + * get the next correct default alias number. + */ + if (parent_cpstate) + { + return get_next_default_alias(parent_cpstate); + } + /* get the length of the combinded string */ nlen = snprintf(NULL, 0, "%s%d", AGE_DEFAULT_ALIAS_PREFIX, cpstate->default_alias_num); From 9d06d50cd0a1d5b2ad1bd8ffa6dab6c516ffd155 Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Thu, 1 Jun 2023 09:02:32 -0700 Subject: [PATCH 179/191] Fix MERGE crashes due to incorrect label type (#957) --- src/backend/nodes/cypher_outfuncs.c | 2 ++ src/backend/parser/cypher_clause.c | 48 ++++++++++++++++++++++++++--- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/src/backend/nodes/cypher_outfuncs.c b/src/backend/nodes/cypher_outfuncs.c index b73f29f25..d7fc791b0 100644 --- a/src/backend/nodes/cypher_outfuncs.c +++ b/src/backend/nodes/cypher_outfuncs.c @@ -204,6 +204,7 @@ void out_cypher_node(StringInfo str, const ExtensibleNode *node) WRITE_STRING_FIELD(name); WRITE_STRING_FIELD(label); + WRITE_STRING_FIELD(parsed_label); WRITE_NODE_FIELD(props); WRITE_LOCATION_FIELD(location); } @@ -215,6 +216,7 @@ void out_cypher_relationship(StringInfo str, const ExtensibleNode *node) WRITE_STRING_FIELD(name); WRITE_STRING_FIELD(label); + WRITE_STRING_FIELD(parsed_label); WRITE_NODE_FIELD(props); WRITE_NODE_FIELD(varlen); WRITE_ENUM_FIELD(dir, cypher_rel_dir); diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 18cf3c633..493206c30 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -307,7 +307,6 @@ static ParseNamespaceItem *create_namespace_item(RangeTblEntry *rte, bool p_rel_ bool p_lateral_ok); static List *make_target_list_from_join(ParseState *pstate, RangeTblEntry *rte); -static Expr *add_volatile_wrapper(Expr *node); static FuncExpr *make_clause_func_expr(char *function_name, Node *clause_information); /* for VLE support */ @@ -5165,6 +5164,9 @@ transform_create_cypher_node(cypher_parsestate *cpstate, List **target_list, } /* + * TODO A function called get_ should NOT modify the contents of what + * it gets. This needs to be fixed. + * * Returns the resno for the TargetEntry with the resname equal to the name * passed. Returns -1 otherwise. */ @@ -5570,6 +5572,12 @@ static Expr *add_volatile_wrapper(Expr *node) { Oid oid; + /* if the passed Expr node is NULL it will cause a crash, so notify us */ + if (node == NULL) + { + ereport(ERROR, (errmsg_internal("add_volatile_wrapper: NULL expr"))); + } + oid = get_ag_func_oid("agtype_volatile_wrapper", 1, ANYOID); return (Expr *)makeFuncExpr(oid, AGTYPEOID, list_make1(node), InvalidOid, @@ -5581,10 +5589,10 @@ static Expr *add_volatile_wrapper(Expr *node) * Modified entry point for recursively analyzing a sub-statement in union. */ Query *cypher_parse_sub_analyze_union(cypher_clause *clause, - cypher_parsestate *cpstate, - CommonTableExpr *parentCTE, - bool locked_from_parent, - bool resolve_unknowns) + cypher_parsestate *cpstate, + CommonTableExpr *parentCTE, + bool locked_from_parent, + bool resolve_unknowns) { cypher_parsestate *state = make_cypher_parsestate(cpstate); Query *query; @@ -6079,6 +6087,21 @@ transform_merge_cypher_edge(cypher_parsestate *cpstate, List **target_list, rv = makeRangeVar(cpstate->graph_name, edge->label, -1); label_relation = parserOpenTable(&cpstate->pstate, rv, RowExclusiveLock); + /* + * TODO + * It is possible for a vertex label to be retrieved, instead of an edge, + * due to the above logic. So, we need to check if it is a vertex label. + * This whole section needs to be fixed because it could be a relation that + * isn't either and has the correct number of columns. However, for now, + * we just check the number of columns. + */ + if (label_relation->rd_att->natts == 2) // TODO temporarily hardcoded + { + ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("Expecting edge label, found existing vertex label"), + parser_errposition(&cpstate->pstate, edge->location))); + } + // Store the relid rel->relid = RelationGetRelid(label_relation); @@ -6184,6 +6207,21 @@ transform_merge_cypher_node(cypher_parsestate *cpstate, List **target_list, rv = makeRangeVar(cpstate->graph_name, node->label, -1); label_relation = parserOpenTable(&cpstate->pstate, rv, RowExclusiveLock); + /* + * TODO + * It is possible for an edge label to be retrieved, instead of a vertex, + * due to the above logic. So, we need to check if it is an edge label. + * This whole section needs to be fixed because it could be a relation that + * isn't either and has the correct number of columns. However, for now, + * we just check the number of columns. + */ + if (label_relation->rd_att->natts == 4) // TODO temporarily hardcoded + { + ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("Expecting vertex label, found existing edge label"), + parser_errposition(&cpstate->pstate, node->location))); + } + // Store the relid rel->relid = RelationGetRelid(label_relation); From 5d9017b216f2bbe77bb49f9faf2d82027cc9d233 Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Thu, 1 Jun 2023 15:39:25 -0700 Subject: [PATCH 180/191] Fix memory leaks in MERGE (merge_edge & merge_vertex) (#958) Fixed memory leaks in MERGE. Specifically in the merge_edge and merge_vertex functions. These functions will now throw error messages rather than attempt to store values in the wrong locations. Additionally, added some code to make it easier to debug the source of an incorrect tuple position. Fixed bad regression tests. Updated code formatting. --- regress/expected/cypher_merge.out | 15 +++- regress/sql/cypher_merge.sql | 2 +- src/backend/executor/cypher_merge.c | 119 ++++++++++++++++++---------- src/backend/utils/adt/agtype.c | 38 +++++---- 4 files changed, 112 insertions(+), 62 deletions(-) diff --git a/regress/expected/cypher_merge.out b/regress/expected/cypher_merge.out index c4310ef6a..9699794ec 100644 --- a/regress/expected/cypher_merge.out +++ b/regress/expected/cypher_merge.out @@ -371,12 +371,19 @@ SELECT * FROM cypher('cypher_merge', $$MERGE ()-[:e]->()-[:e]->()$$) AS (a agtyp --validate created correctly --Returns 3. One for the data setup and 2 for the longer path in MERGE -SELECT count(*) FROM cypher('cypher_merge', $$MATCH p=()-[e:e]->() RETURN p$$) AS (p agtype) +SELECT count(*) FROM cypher('cypher_merge', $$MATCH p=()-[e:e]->() RETURN p$$) AS (p agtype); + count +------- + 3 +(1 row) + -- Returns 1, the path created in MERGE SELECT count(*) FROM cypher('cypher_merge', $$MATCH p=()-[:e]->()-[]->() RETURN p$$) AS (p agtype); -ERROR: syntax error at or near "SELECT" -LINE 3: SELECT count(*) FROM cypher('cypher_merge', $$MATCH p=()-[:e... - ^ + count +------- + 1 +(1 row) + -- 5 vertices total should have been created SELECT count(*) FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype); count diff --git a/regress/sql/cypher_merge.sql b/regress/sql/cypher_merge.sql index 9d04364fc..8c127f637 100644 --- a/regress/sql/cypher_merge.sql +++ b/regress/sql/cypher_merge.sql @@ -204,7 +204,7 @@ SELECT * FROM cypher('cypher_merge', $$MERGE ()-[:e]->()-[:e]->()$$) AS (a agtyp --validate created correctly --Returns 3. One for the data setup and 2 for the longer path in MERGE -SELECT count(*) FROM cypher('cypher_merge', $$MATCH p=()-[e:e]->() RETURN p$$) AS (p agtype) +SELECT count(*) FROM cypher('cypher_merge', $$MATCH p=()-[e:e]->() RETURN p$$) AS (p agtype); -- Returns 1, the path created in MERGE SELECT count(*) FROM cypher('cypher_merge', $$MATCH p=()-[:e]->()-[]->() RETURN p$$) AS (p agtype); diff --git a/src/backend/executor/cypher_merge.c b/src/backend/executor/cypher_merge.c index 2502c977b..b0247d01f 100644 --- a/src/backend/executor/cypher_merge.c +++ b/src/backend/executor/cypher_merge.c @@ -60,14 +60,8 @@ const CustomExecMethods cypher_merge_exec_methods = {MERGE_SCAN_STATE_NAME, exec_cypher_merge, end_cypher_merge, rescan_cypher_merge, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL}; + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL}; /* * Initializes the MERGE Execution Node at the begginning of the execution @@ -78,8 +72,8 @@ static void begin_cypher_merge(CustomScanState *node, EState *estate, { cypher_merge_custom_scan_state *css = (cypher_merge_custom_scan_state *)node; - ListCell *lc; - Plan *subplan; + ListCell *lc = NULL; + Plan *subplan = NULL; Assert(list_length(css->cs->custom_plans) == 1); @@ -87,6 +81,7 @@ static void begin_cypher_merge(CustomScanState *node, EState *estate, subplan = linitial(css->cs->custom_plans); node->ss.ps.lefttree = ExecInitNode(subplan, estate, eflags); + /* TODO is this necessary? Removing it seems to not have an impact */ ExecAssignExprContext(estate, &node->ss.ps); ExecInitScanTupleSlot(estate, &node->ss, @@ -111,7 +106,7 @@ static void begin_cypher_merge(CustomScanState *node, EState *estate, { cypher_target_node *cypher_node = (cypher_target_node *)lfirst(lc); - Relation rel; + Relation rel = NULL; /* * This entity is references an entity that is already declared. Either @@ -149,8 +144,8 @@ static void begin_cypher_merge(CustomScanState *node, EState *estate, if (cypher_node->prop_expr != NULL) { - cypher_node->prop_expr_state = - ExecInitExpr(cypher_node->prop_expr, (PlanState *)node); + cypher_node->prop_expr_state = ExecInitExpr(cypher_node->prop_expr, + (PlanState *)node); } } @@ -162,7 +157,9 @@ static void begin_cypher_merge(CustomScanState *node, EState *estate, * that have modified the command id. */ if (estate->es_output_cid == 0) + { estate->es_output_cid = estate->es_snapshot->curcid; + } /* store the currentCommandId for this instance */ css->base_currentCommandId = GetCurrentCommandId(false); @@ -179,7 +176,7 @@ static bool check_path(cypher_merge_custom_scan_state *css, TupleTableSlot *slot) { cypher_create_path *path = css->path; - ListCell *lc; + ListCell *lc = NULL; foreach(lc, path->target_nodes) { @@ -249,7 +246,7 @@ static void process_simple_merge(CustomScanState *node) cypher_merge_custom_scan_state *css = (cypher_merge_custom_scan_state *)node; EState *estate = css->css.ss.ps.state; - TupleTableSlot *slot; + TupleTableSlot *slot = NULL; /*Process the subtree first */ Decrement_Estate_CommandId(estate) @@ -305,7 +302,7 @@ static TupleTableSlot *exec_cypher_merge(CustomScanState *node) (cypher_merge_custom_scan_state *)node; EState *estate = css->css.ss.ps.state; ExprContext *econtext = css->css.ss.ps.ps_ExprContext; - TupleTableSlot *slot; + TupleTableSlot *slot = NULL; bool terminal = CYPHER_CLAUSE_IS_TERMINAL(css->flags); /* @@ -462,7 +459,7 @@ static TupleTableSlot *exec_cypher_merge(CustomScanState *node) */ ExprContext *econtext = node->ss.ps.ps_ExprContext; SubqueryScanState *sss = (SubqueryScanState *)node->ss.ps.lefttree; - HeapTuple heap_tuple; + HeapTuple heap_tuple = NULL; /* * Our child execution node is always a subquery. If not there @@ -514,7 +511,8 @@ static TupleTableSlot *exec_cypher_merge(CustomScanState *node) econtext->ecxt_scantuple->tts_isnull); // store the heap tuple - ExecStoreTuple(heap_tuple, econtext->ecxt_scantuple, InvalidBuffer, false); + ExecStoreTuple(heap_tuple, econtext->ecxt_scantuple, InvalidBuffer, + false); /* * make the subquery's projection scan slot be the tuple table we @@ -545,7 +543,7 @@ static void end_cypher_merge(CustomScanState *node) cypher_merge_custom_scan_state *css = (cypher_merge_custom_scan_state *)node; cypher_create_path *path = css->path; - ListCell *lc; + ListCell *lc = NULL; // increment the command counter CommandCounterIncrement(); @@ -554,11 +552,12 @@ static void end_cypher_merge(CustomScanState *node) foreach (lc, path->target_nodes) { - cypher_target_node *cypher_node = - (cypher_target_node *)lfirst(lc); + cypher_target_node *cypher_node = (cypher_target_node *)lfirst(lc); if (!CYPHER_TARGET_NODE_INSERT_ENTITY(cypher_node->flags)) + { continue; + } // close all indices for the node ExecCloseIndices(cypher_node->resultRelInfo); @@ -576,9 +575,10 @@ static void end_cypher_merge(CustomScanState *node) */ static void rescan_cypher_merge(CustomScanState *node) { - ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cypher merge clause cannot be rescaned"), - errhint("its unsafe to use joins in a query with a Cypher MERGE clause"))); + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cypher merge clause cannot be rescaned"), + errhint("its unsafe to use joins in a query with a Cypher MERGE clause"))); } /* @@ -591,8 +591,8 @@ Node *create_cypher_merge_plan_state(CustomScan *cscan) cypher_merge_custom_scan_state *cypher_css = palloc0(sizeof(cypher_merge_custom_scan_state)); cypher_merge_information *merge_information; - char *serialized_data; - Const *c; + char *serialized_data = NULL; + Const *c = NULL; cypher_css->cs = cscan; @@ -643,6 +643,7 @@ static Datum merge_vertex(cypher_merge_custom_scan_state *css, { ResultRelInfo *old_estate_es_result_relation_info = NULL; Datum prop; + /* * Set estate's result relation to the vertex's result * relation. @@ -723,8 +724,7 @@ static Datum merge_vertex(cypher_merge_custom_scan_state *css, Datum result; /* make the vertex agtype */ - result = make_vertex( - id, CStringGetDatum(node->label_name), prop); + result = make_vertex(id, CStringGetDatum(node->label_name), prop); /* append to the path list */ if (CYPHER_TARGET_NODE_IN_PATH(node->flags)) @@ -739,19 +739,36 @@ static Datum merge_vertex(cypher_merge_custom_scan_state *css, */ if (CYPHER_TARGET_NODE_IS_VARIABLE(node->flags)) { - scanTupleSlot->tts_values[node->tuple_position - 1] = result; - scanTupleSlot->tts_isnull[node->tuple_position - 1] = false; + bool debug = false; + int tuple_position = node->tuple_position - 1; + + /* + * Generate an error message if the tuple position is + * out-of-bounds and allow for debugging. + */ + if (!debug && (tuple_position >= + scanTupleSlot->tts_tupleDescriptor->natts)) + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("merge_vertex: invalid tuple position"))); + + } + + /* store the result */ + scanTupleSlot->tts_values[tuple_position] = result; + scanTupleSlot->tts_isnull[tuple_position] = false; } } } else { - agtype *a; + agtype *a = NULL; Datum d; - agtype_value *v; - agtype_value *id_value; - TupleTableSlot *scantuple; - PlanState *ps; + agtype_value *v = NULL; + agtype_value *id_value = NULL; + TupleTableSlot *scantuple = NULL; + PlanState *ps = NULL; ps = css->css.ss.ps.lefttree; scantuple = ps->ps_ExprContext->ecxt_scantuple; @@ -759,9 +776,9 @@ static Datum merge_vertex(cypher_merge_custom_scan_state *css, if (scantuple->tts_isnull[node->tuple_position - 1]) { ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("Existing variable %s cannot be NULL in MERGE clause", - node->variable_name))); + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("Existing variable %s cannot be NULL in MERGE clause", + node->variable_name))); } /* get the vertex agtype in the scanTupleSlot */ @@ -772,9 +789,11 @@ static Datum merge_vertex(cypher_merge_custom_scan_state *css, v = get_ith_agtype_value_from_container(&a->root, 0); if (v->type != AGTV_VERTEX) + { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("agtype must resolve to a vertex"))); + } /* extract the id agtype field */ id_value = GET_AGTYPE_VALUE_OBJECT_VALUE(v, "id"); @@ -922,8 +941,8 @@ static void merge_edge(cypher_merge_custom_scan_state *css, { Datum result; - result = make_edge( - id, start_id, end_id, CStringGetDatum(node->label_name), prop); + result = make_edge(id, start_id, end_id, + CStringGetDatum(node->label_name), prop); // add the Datum to the list of entities for creating the path variable if (CYPHER_TARGET_NODE_IN_PATH(node->flags)) @@ -936,9 +955,25 @@ static void merge_edge(cypher_merge_custom_scan_state *css, if (CYPHER_TARGET_NODE_IS_VARIABLE(node->flags)) { TupleTableSlot *scantuple = econtext->ecxt_scantuple; + bool debug = false; + int tuple_position = node->tuple_position - 1; + + /* + * Generate an error message if the tuple position is + * out-of-bounds and allow for debugging. + */ + if (!debug && (tuple_position >= + scantuple->tts_tupleDescriptor->natts)) + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("merge_edge: invalid tuple position"))); + + } - scantuple->tts_values[node->tuple_position - 1] = result; - scantuple->tts_isnull[node->tuple_position - 1] = false; + /* store the result */ + scantuple->tts_values[tuple_position] = result; + scantuple->tts_isnull[tuple_position] = false; } } } diff --git a/src/backend/utils/adt/agtype.c b/src/backend/utils/adt/agtype.c index 898f3d8a1..6559d7801 100644 --- a/src/backend/utils/adt/agtype.c +++ b/src/backend/utils/adt/agtype.c @@ -2179,9 +2179,11 @@ Datum _agtype_build_vertex(PG_FUNCTION_ARGS) string_to_agtype_value("id")); if (fcinfo->argnull[0]) + { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_agtype_build_vertex() graphid cannot be NULL"))); + } id = AG_GETARG_GRAPHID(0); result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, @@ -2192,8 +2194,10 @@ Datum _agtype_build_vertex(PG_FUNCTION_ARGS) string_to_agtype_value("label")); if (fcinfo->argnull[1]) + { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_agtype_build_vertex() label cannot be NULL"))); + } result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, @@ -2216,11 +2220,11 @@ Datum _agtype_build_vertex(PG_FUNCTION_ARGS) agtype *properties = AG_GET_ARG_AGTYPE_P(2); if (!AGT_ROOT_IS_OBJECT(properties)) - ereport( - ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg( - "_agtype_build_vertex() properties argument must be an object"))); + { + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("_agtype_build_vertex() properties argument must be an object"))); + } add_agtype((Datum)properties, false, &result, AGTYPEOID, false); } @@ -2234,11 +2238,7 @@ Datum _agtype_build_vertex(PG_FUNCTION_ARGS) Datum make_vertex(Datum id, Datum label, Datum properties) { - return DirectFunctionCall3(_agtype_build_vertex, - id, - label, - properties); - + return DirectFunctionCall3(_agtype_build_vertex, id, label, properties); } PG_FUNCTION_INFO_V1(_agtype_build_edge); @@ -2261,9 +2261,11 @@ Datum _agtype_build_edge(PG_FUNCTION_ARGS) string_to_agtype_value("id")); if (fcinfo->argnull[0]) + { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_agtype_build_edge() graphid cannot be NULL"))); + } id = AG_GETARG_GRAPHID(0); result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, @@ -2274,8 +2276,10 @@ Datum _agtype_build_edge(PG_FUNCTION_ARGS) string_to_agtype_value("label")); if (fcinfo->argnull[3]) + { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_agtype_build_vertex() label cannot be NULL"))); + } result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, @@ -2286,9 +2290,11 @@ Datum _agtype_build_edge(PG_FUNCTION_ARGS) string_to_agtype_value("end_id")); if (fcinfo->argnull[2]) + { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_agtype_build_edge() endid cannot be NULL"))); + } end_id = AG_GETARG_GRAPHID(2); result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, @@ -2299,9 +2305,11 @@ Datum _agtype_build_edge(PG_FUNCTION_ARGS) string_to_agtype_value("start_id")); if (fcinfo->argnull[1]) + { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_agtype_build_edge() startid cannot be NULL"))); + } start_id = AG_GETARG_GRAPHID(1); result.res = push_agtype_value(&result.parse_state, WAGT_VALUE, @@ -2324,11 +2332,11 @@ Datum _agtype_build_edge(PG_FUNCTION_ARGS) agtype *properties = AG_GET_ARG_AGTYPE_P(4); if (!AGT_ROOT_IS_OBJECT(properties)) - ereport( - ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg( - "_agtype_build_edge() properties argument must be an object"))); + { + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("_agtype_build_edge() properties argument must be an object"))); + } add_agtype((Datum)properties, false, &result, AGTYPEOID, false); } From 69c275e21d20984d8399fafe57c9ece630bdf88b Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Mon, 5 Jun 2023 16:11:58 -0700 Subject: [PATCH 181/191] Fix complex MERGE causes crash (#897) (#961) Fixed the complex MERGE crash, which was due to storing variables in tuple positions that did not exist. This happened on MERGE commands where there wasn't a RETURN clause. Added logic to catch these and handle appropriately. Meaning, discarding the variable results, instead of storing them. Fixing this issue has highlighted the need to fix variable reuse in the MERGE transform itself. This is because MERGE preprocesses the path before handing it off to anything else. Added regression tests. --- regress/expected/cypher_merge.out | 54 ++++++++++++++++++++- regress/sql/cypher_merge.sql | 16 +++++++ src/backend/executor/cypher_merge.c | 74 ++++++++++++++++++----------- 3 files changed, 114 insertions(+), 30 deletions(-) diff --git a/regress/expected/cypher_merge.out b/regress/expected/cypher_merge.out index 9699794ec..ecfc0c1d1 100644 --- a/regress/expected/cypher_merge.out +++ b/regress/expected/cypher_merge.out @@ -901,6 +901,53 @@ SELECT * FROM cypher('cypher_merge', $$ MATCH (n:node) RETURN n $$) AS (n agtype {"id": 2533274790395907, "label": "node", "properties": {"age": 23, "name": "Lisa", "gender": "Female"}}::vertex (2 rows) +-- +-- Complex MERGE w/wo RETURN values +-- +-- These should each create a path, if it doesn't already exist. +-- TODO Until the issue with variable reuse of 'x' in MERGE is corrected, +-- these commands will each create a new path. +SELECT * FROM cypher('cypher_merge', $$ MERGE ()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) $$) AS (x agtype); + x +--- +(0 rows) + +SELECT * FROM cypher('cypher_merge', $$ MERGE ()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) RETURN x $$) AS (x agtype); + x +------------------------------------------------------------------ + {"id": 3096224743817220, "label": "C", "properties": {}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_merge', $$ MERGE p=()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) $$) AS (p agtype); + p +--- +(0 rows) + +SELECT * FROM cypher('cypher_merge', $$ MERGE p=()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) RETURN p $$) AS (p agtype); + p +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 281474976710708, "label": "", "properties": {}}::vertex, {"id": 2814749767106564, "label": "B", "end_id": 3096224743817223, "start_id": 281474976710708, "properties": {}}::edge, {"id": 3096224743817223, "label": "C", "properties": {}}::vertex, {"id": 3377699720527876, "label": "E", "end_id": 3096224743817224, "start_id": 3096224743817223, "properties": {}}::edge, {"id": 3096224743817224, "label": "C", "properties": {}}::vertex, {"id": 3659174697238532, "label": "F", "end_id": 3096224743817224, "start_id": 3940649673949188, "properties": {}}::edge, {"id": 3940649673949188, "label": "I", "properties": {}}::vertex]::path +(1 row) + +SELECT * FROM cypher('cypher_merge', $$ MERGE p=()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) RETURN p $$) AS (p agtype); + p +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 281474976710709, "label": "", "properties": {}}::vertex, {"id": 2814749767106565, "label": "B", "end_id": 3096224743817225, "start_id": 281474976710709, "properties": {}}::edge, {"id": 3096224743817225, "label": "C", "properties": {}}::vertex, {"id": 3377699720527877, "label": "E", "end_id": 3096224743817226, "start_id": 3096224743817225, "properties": {}}::edge, {"id": 3096224743817226, "label": "C", "properties": {}}::vertex, {"id": 3659174697238533, "label": "F", "end_id": 3096224743817226, "start_id": 3940649673949189, "properties": {}}::edge, {"id": 3940649673949189, "label": "I", "properties": {}}::vertex]::path +(1 row) + +-- TODO This should only return 1 row, as the path should already exist. +-- However, we need to fix the variable reuse in MERGE. Until then, +-- this will always return 5 rows due to 'x' above not being the same node. +SELECT * FROM cypher('cypher_merge', $$ MATCH p=()-[:B]->(:C)-[:E]->(:C)<-[:F]-(:I) RETURN p $$) AS (p agtype); + p +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 281474976710705, "label": "", "properties": {}}::vertex, {"id": 2814749767106561, "label": "B", "end_id": 3096224743817217, "start_id": 281474976710705, "properties": {}}::edge, {"id": 3096224743817217, "label": "C", "properties": {}}::vertex, {"id": 3377699720527873, "label": "E", "end_id": 3096224743817218, "start_id": 3096224743817217, "properties": {}}::edge, {"id": 3096224743817218, "label": "C", "properties": {}}::vertex, {"id": 3659174697238529, "label": "F", "end_id": 3096224743817218, "start_id": 3940649673949185, "properties": {}}::edge, {"id": 3940649673949185, "label": "I", "properties": {}}::vertex]::path + [{"id": 281474976710706, "label": "", "properties": {}}::vertex, {"id": 2814749767106562, "label": "B", "end_id": 3096224743817219, "start_id": 281474976710706, "properties": {}}::edge, {"id": 3096224743817219, "label": "C", "properties": {}}::vertex, {"id": 3377699720527874, "label": "E", "end_id": 3096224743817220, "start_id": 3096224743817219, "properties": {}}::edge, {"id": 3096224743817220, "label": "C", "properties": {}}::vertex, {"id": 3659174697238530, "label": "F", "end_id": 3096224743817220, "start_id": 3940649673949186, "properties": {}}::edge, {"id": 3940649673949186, "label": "I", "properties": {}}::vertex]::path + [{"id": 281474976710707, "label": "", "properties": {}}::vertex, {"id": 2814749767106563, "label": "B", "end_id": 3096224743817221, "start_id": 281474976710707, "properties": {}}::edge, {"id": 3096224743817221, "label": "C", "properties": {}}::vertex, {"id": 3377699720527875, "label": "E", "end_id": 3096224743817222, "start_id": 3096224743817221, "properties": {}}::edge, {"id": 3096224743817222, "label": "C", "properties": {}}::vertex, {"id": 3659174697238531, "label": "F", "end_id": 3096224743817222, "start_id": 3940649673949187, "properties": {}}::edge, {"id": 3940649673949187, "label": "I", "properties": {}}::vertex]::path + [{"id": 281474976710708, "label": "", "properties": {}}::vertex, {"id": 2814749767106564, "label": "B", "end_id": 3096224743817223, "start_id": 281474976710708, "properties": {}}::edge, {"id": 3096224743817223, "label": "C", "properties": {}}::vertex, {"id": 3377699720527876, "label": "E", "end_id": 3096224743817224, "start_id": 3096224743817223, "properties": {}}::edge, {"id": 3096224743817224, "label": "C", "properties": {}}::vertex, {"id": 3659174697238532, "label": "F", "end_id": 3096224743817224, "start_id": 3940649673949188, "properties": {}}::edge, {"id": 3940649673949188, "label": "I", "properties": {}}::vertex]::path + [{"id": 281474976710709, "label": "", "properties": {}}::vertex, {"id": 2814749767106565, "label": "B", "end_id": 3096224743817225, "start_id": 281474976710709, "properties": {}}::edge, {"id": 3096224743817225, "label": "C", "properties": {}}::vertex, {"id": 3377699720527877, "label": "E", "end_id": 3096224743817226, "start_id": 3096224743817225, "properties": {}}::edge, {"id": 3096224743817226, "label": "C", "properties": {}}::vertex, {"id": 3659174697238533, "label": "F", "end_id": 3096224743817226, "start_id": 3940649673949189, "properties": {}}::edge, {"id": 3940649673949189, "label": "I", "properties": {}}::vertex]::path +(5 rows) + --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a @@ -911,7 +958,7 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtyp * Clean up graph */ SELECT drop_graph('cypher_merge', true); -NOTICE: drop cascades to 9 other objects +NOTICE: drop cascades to 14 other objects DETAIL: drop cascades to table cypher_merge._ag_label_vertex drop cascades to table cypher_merge._ag_label_edge drop cascades to table cypher_merge.e @@ -921,6 +968,11 @@ drop cascades to table cypher_merge."Person" drop cascades to table cypher_merge."City" drop cascades to table cypher_merge."BORN_IN" drop cascades to table cypher_merge.node +drop cascades to table cypher_merge."B" +drop cascades to table cypher_merge."C" +drop cascades to table cypher_merge."E" +drop cascades to table cypher_merge."F" +drop cascades to table cypher_merge."I" NOTICE: graph "cypher_merge" has been dropped drop_graph ------------ diff --git a/regress/sql/cypher_merge.sql b/regress/sql/cypher_merge.sql index 8c127f637..1fe3ed707 100644 --- a/regress/sql/cypher_merge.sql +++ b/regress/sql/cypher_merge.sql @@ -479,6 +479,22 @@ SELECT * FROM cypher('cypher_merge', $$ MATCH (n:node) RETURN n $$) AS (n agtype SELECT * FROM cypher('cypher_merge', $$ MERGE (n:node {name: 'Jason'}) SET n.name = 'Lisa', n.age = 23, n.gender = 'Female' RETURN n $$) AS (n agtype); SELECT * FROM cypher('cypher_merge', $$ MATCH (n:node) RETURN n $$) AS (n agtype); +-- +-- Complex MERGE w/wo RETURN values +-- +-- These should each create a path, if it doesn't already exist. +-- TODO Until the issue with variable reuse of 'x' in MERGE is corrected, +-- these commands will each create a new path. +SELECT * FROM cypher('cypher_merge', $$ MERGE ()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) $$) AS (x agtype); +SELECT * FROM cypher('cypher_merge', $$ MERGE ()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) RETURN x $$) AS (x agtype); +SELECT * FROM cypher('cypher_merge', $$ MERGE p=()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) $$) AS (p agtype); +SELECT * FROM cypher('cypher_merge', $$ MERGE p=()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) RETURN p $$) AS (p agtype); +SELECT * FROM cypher('cypher_merge', $$ MERGE p=()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) RETURN p $$) AS (p agtype); +-- TODO This should only return 1 row, as the path should already exist. +-- However, we need to fix the variable reuse in MERGE. Until then, +-- this will always return 5 rows due to 'x' above not being the same node. +SELECT * FROM cypher('cypher_merge', $$ MATCH p=()-[:B]->(:C)-[:E]->(:C)<-[:F]-(:I) RETURN p $$) AS (p agtype); + --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); diff --git a/src/backend/executor/cypher_merge.c b/src/backend/executor/cypher_merge.c index b0247d01f..b42408b75 100644 --- a/src/backend/executor/cypher_merge.c +++ b/src/backend/executor/cypher_merge.c @@ -230,11 +230,27 @@ static void process_path(cypher_merge_custom_scan_state *css) ExprContext *econtext = css->css.ss.ps.ps_ExprContext; TupleTableSlot *scantuple = econtext->ecxt_scantuple; Datum result; + int tuple_position = path->path_attr_num - 1; + bool debug_flag = false; - result = make_path(css->path_values); + /* + * We need to make sure that the tuple_position is within the + * boundaries of the tuple's number of attributes. Otherwise, it + * will corrupt memory. The cases where it doesn't fit within are + * usually due to a variable that is specified but there isn't a RETURN + * clause. In these cases we just don't bother to store the + * value. + */ + if (!debug_flag && + (tuple_position < scantuple->tts_tupleDescriptor->natts || + scantuple->tts_tupleDescriptor->natts != 1)) + { + result = make_path(css->path_values); - scantuple->tts_values[path->path_attr_num - 1] = result; - scantuple->tts_isnull[path->path_attr_num - 1] = false; + /* store the result */ + scantuple->tts_values[tuple_position] = result; + scantuple->tts_isnull[tuple_position] = false; + } } } @@ -739,25 +755,25 @@ static Datum merge_vertex(cypher_merge_custom_scan_state *css, */ if (CYPHER_TARGET_NODE_IS_VARIABLE(node->flags)) { - bool debug = false; + bool debug_flag = false; int tuple_position = node->tuple_position - 1; /* - * Generate an error message if the tuple position is - * out-of-bounds and allow for debugging. + * We need to make sure that the tuple_position is within the + * boundaries of the tuple's number of attributes. Otherwise, it + * will corrupt memory. The cases where it doesn't fall within + * are usually due to a variable that is specified but there + * isn't a RETURN clause. In these cases we just don't bother to + * store the value. */ - if (!debug && (tuple_position >= - scanTupleSlot->tts_tupleDescriptor->natts)) + if (!debug_flag && + (tuple_position < scanTupleSlot->tts_tupleDescriptor->natts || + scanTupleSlot->tts_tupleDescriptor->natts != 1)) { - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("merge_vertex: invalid tuple position"))); - + /* store the result */ + scanTupleSlot->tts_values[tuple_position] = result; + scanTupleSlot->tts_isnull[tuple_position] = false; } - - /* store the result */ - scanTupleSlot->tts_values[tuple_position] = result; - scanTupleSlot->tts_isnull[tuple_position] = false; } } } @@ -955,25 +971,25 @@ static void merge_edge(cypher_merge_custom_scan_state *css, if (CYPHER_TARGET_NODE_IS_VARIABLE(node->flags)) { TupleTableSlot *scantuple = econtext->ecxt_scantuple; - bool debug = false; + bool debug_flag = false; int tuple_position = node->tuple_position - 1; /* - * Generate an error message if the tuple position is - * out-of-bounds and allow for debugging. + * We need to make sure that the tuple_position is within the + * boundaries of the tuple's number of attributes. Otherwise, it + * will corrupt memory. The cases where it doesn't fall within are + * usually due to a variable that is specified but there isn't a + * RETURN clause. In these cases we just don't bother to store the + * value. */ - if (!debug && (tuple_position >= - scantuple->tts_tupleDescriptor->natts)) + if (!debug_flag && + (tuple_position < scantuple->tts_tupleDescriptor->natts || + scantuple->tts_tupleDescriptor->natts != 1)) { - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("merge_edge: invalid tuple position"))); - + /* store the result */ + scantuple->tts_values[tuple_position] = result; + scantuple->tts_isnull[tuple_position] = false; } - - /* store the result */ - scantuple->tts_values[tuple_position] = result; - scantuple->tts_isnull[tuple_position] = false; } } } From e22c5ac82c8a25034f8c8bfbdaf4a6d8409693b0 Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Fri, 9 Jun 2023 21:22:59 +0500 Subject: [PATCH 182/191] Fix issue #975 Invalid reuse of variables in CREATE clause (#977) - Added checks for invalid use of variables in create clause. - Fixed error position of path and node variables. - Added regression tests. --- regress/expected/cypher_create.out | 144 +++++++++++++++++++++++++++-- regress/expected/cypher_match.out | 30 +++--- regress/sql/cypher_create.sql | 86 +++++++++++++++++ src/backend/parser/cypher_clause.c | 84 +++++++++++++---- src/backend/parser/cypher_gram.y | 3 +- 5 files changed, 307 insertions(+), 40 deletions(-) diff --git a/regress/expected/cypher_create.out b/regress/expected/cypher_create.out index 7cac75e35..8bef1d05e 100644 --- a/regress/expected/cypher_create.out +++ b/regress/expected/cypher_create.out @@ -499,8 +499,8 @@ SELECT * FROM cypher('cypher_create', $$ CREATE (a {test:1})-[:e_var]->() $$) as (a agtype); ERROR: previously declared nodes in a create clause cannot have properties -LINE 1: SELECT * FROM cypher('cypher_create', $$ - ^ +LINE 4: CREATE (a {test:1})-[:e_var]->() + ^ -- Var 'a' cannot change labels SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var) @@ -508,16 +508,16 @@ SELECT * FROM cypher('cypher_create', $$ CREATE (a:new_label)-[:e_var]->() $$) as (a agtype); ERROR: previously declared variables cannot have a label -LINE 1: SELECT * FROM cypher('cypher_create', $$ - ^ +LINE 4: CREATE (a:new_label)-[:e_var]->() + ^ SELECT * FROM cypher('cypher_create', $$ MATCH (a:n_var)-[b]-() WHERE a.name = 'Node A' CREATE (a)-[b:e_var]->() $$) as (a agtype); ERROR: variable b already exists -LINE 1: SELECT * FROM cypher('cypher_create', $$ - ^ +LINE 4: CREATE (a)-[b:e_var]->() + ^ -- A valid single vertex path SELECT * FROM cypher('cypher_create', $$ CREATE p=(a) @@ -578,7 +578,7 @@ SELECT * FROM cypher('cypher_create', $$ $$) as (a agtype); ERROR: label existing_elabel is for edges, not vertices LINE 2: CREATE (a:existing_elabel { id: 5}) - ^ + ^ -- -- check the cypher CREATE clause inside an INSERT INTO -- @@ -641,12 +641,137 @@ SELECT * FROM cypher('cypher_create', $$ MATCH (a:Part) RETURN a $$) as (a agtyp END; -- +-- variable reuse +-- +-- Valid variable reuse +SELECT * FROM cypher('cypher_create', $$ + CREATE (p)-[a:new]->(p) + RETURN p,a,p +$$) as (n1 agtype, e agtype, n2 agtype); + n1 | e | n2 +----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------- + {"id": 281474976710681, "label": "", "properties": {}}::vertex | {"id": 3940649673949185, "label": "new", "end_id": 281474976710681, "start_id": 281474976710681, "properties": {}}::edge | {"id": 281474976710681, "label": "", "properties": {}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_create', $$ + CREATE (p:node)-[e:new]->(p) + RETURN p,e,p +$$) as (n1 agtype, e agtype, n2 agtype); + n1 | e | n2 +---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------- + {"id": 4222124650659841, "label": "node", "properties": {}}::vertex | {"id": 3940649673949186, "label": "new", "end_id": 4222124650659841, "start_id": 4222124650659841, "properties": {}}::edge | {"id": 4222124650659841, "label": "node", "properties": {}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_create', $$ + CREATE (p) + CREATE (p)-[a:new]->(p) + RETURN p,a,p +$$) as (n1 agtype, e agtype, n2 agtype); + n1 | e | n2 +----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------- + {"id": 281474976710682, "label": "", "properties": {}}::vertex | {"id": 3940649673949187, "label": "new", "end_id": 281474976710682, "start_id": 281474976710682, "properties": {}}::edge | {"id": 281474976710682, "label": "", "properties": {}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_create', $$ + CREATE (p:n1) + CREATE (p)-[a:new]->(p) + RETURN p,a,p +$$) as (n1 agtype, e agtype, n2 agtype); + n1 | e | n2 +-------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------- + {"id": 4503599627370497, "label": "n1", "properties": {}}::vertex | {"id": 3940649673949188, "label": "new", "end_id": 4503599627370497, "start_id": 4503599627370497, "properties": {}}::edge | {"id": 4503599627370497, "label": "n1", "properties": {}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_create', $$ + MATCH (p:node) + CREATE (p)-[a:new]->(p) + RETURN p,a,p +$$) as (n1 agtype, e agtype, n2 agtype); + n1 | e | n2 +---------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------- + {"id": 4222124650659841, "label": "node", "properties": {}}::vertex | {"id": 3940649673949189, "label": "new", "end_id": 4222124650659841, "start_id": 4222124650659841, "properties": {}}::edge | {"id": 4222124650659841, "label": "node", "properties": {}}::vertex +(1 row) + +-- Invalid variable reuse +SELECT * FROM cypher('cypher_create', $$ + CREATE (p)-[a:new]->(p {n0:'n1'}) +$$) as (a agtype); +ERROR: previously declared nodes in a create clause cannot have properties +LINE 2: CREATE (p)-[a:new]->(p {n0:'n1'}) + ^ +SELECT * FROM cypher('cypher_create', $$ + CREATE (p:n0)-[a:new]->(p:n1) +$$) as (a agtype); +ERROR: previously declared variables cannot have a label +LINE 2: CREATE (p:n0)-[a:new]->(p:n1) + ^ +SELECT * FROM cypher('cypher_create', $$ + CREATE p=(p) +$$) as (a agtype); +ERROR: variable "p" already exists +LINE 2: CREATE p=(p) + ^ +SELECT * FROM cypher('cypher_create', $$ + CREATE p=() CREATE (p) +$$) as (a agtype); +ERROR: agtype must resolve to a vertex +SELECT * FROM cypher('cypher_create', $$ + CREATE p=(a)-[p:b]->(a) +$$) as (a agtype); +ERROR: variable "p" already exists +LINE 2: CREATE p=(a)-[p:b]->(a) + ^ +SELECT * FROM cypher('cypher_create', $$ + CREATE p=(a)-[:new]->(p) +$$) as (a agtype); +ERROR: variable "p" already exists +LINE 2: CREATE p=(a)-[:new]->(p) + ^ +SELECT * FROM cypher('cypher_create', $$ + MATCH (p) CREATE p=() +$$) as (a agtype); +ERROR: variable "p" already exists +LINE 2: MATCH (p) CREATE p=() + ^ +SELECT * FROM cypher('cypher_create', $$ + MATCH (p) CREATE p=(p) +$$) as (a agtype); +ERROR: variable "p" already exists +LINE 2: MATCH (p) CREATE p=(p) + ^ +SELECT * FROM cypher('cypher_create', $$ + MATCH (p) CREATE (a)-[p:b]->(a) +$$) as (a agtype); +ERROR: variable p already exists +LINE 2: MATCH (p) CREATE (a)-[p:b]->(a) + ^ +SELECT * FROM cypher('cypher_create', $$ + CREATE (a)-[e:new]->(p)-[e]->(a) +$$) as (a agtype); +ERROR: relationships must be specify a label in CREATE. +LINE 2: CREATE (a)-[e:new]->(p)-[e]->(a) + ^ +SELECT * FROM cypher('cypher_create', $$ + CREATE (a)-[e:new]->(p) + CREATE (p)-[e:new]->(a) +$$) as (a agtype); +ERROR: variable e already exists +LINE 3: CREATE (p)-[e:new]->(a) + ^ +SELECT * FROM cypher('cypher_create', $$ + MATCH (a)-[e:new]->(p) + CREATE (p)-[e:new]->(a) +$$) as (a agtype); +ERROR: variable e already exists +LINE 3: CREATE (p)-[e:new]->(a) + ^ +-- -- Clean up -- DROP TABLE simple_path; DROP FUNCTION create_test; SELECT drop_graph('cypher_create', true); -NOTICE: drop cascades to 13 other objects +NOTICE: drop cascades to 16 other objects DETAIL: drop cascades to table cypher_create._ag_label_vertex drop cascades to table cypher_create._ag_label_edge drop cascades to table cypher_create.v @@ -660,6 +785,9 @@ drop cascades to table cypher_create.existing_vlabel drop cascades to table cypher_create.existing_elabel drop cascades to table cypher_create.knows drop cascades to table cypher_create."Part" +drop cascades to table cypher_create.new +drop cascades to table cypher_create.node +drop cascades to table cypher_create.n1 NOTICE: graph "cypher_create" has been dropped drop_graph ------------ diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index da5e45122..50eebeb43 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -508,43 +508,43 @@ SELECT * FROM cypher('cypher_match', $$ $$) AS (a agtype); ERROR: multiple labels for variable 'a' are not supported LINE 2: MATCH (a)-[]-()-[]-(a:v1) RETURN a - ^ + ^ SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]-(a:v2)-[]-(a) RETURN a $$) AS (a agtype); ERROR: multiple labels for variable 'a' are not supported LINE 2: MATCH (a)-[]-(a:v2)-[]-(a) RETURN a - ^ + ^ SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]-(a:v1) RETURN a $$) AS (a agtype); ERROR: multiple labels for variable 'a' are not supported LINE 2: MATCH (a)-[]-(a:v1) RETURN a - ^ + ^ SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]-(a)-[]-(a:v1) RETURN a $$) AS (a agtype); ERROR: multiple labels for variable 'a' are not supported LINE 2: MATCH (a)-[]-(a)-[]-(a:v1) RETURN a - ^ + ^ SELECT * FROM cypher('cypher_match', $$ MATCH (a)-[]-(a)-[]-(a:invalid_label) RETURN a $$) AS (a agtype); ERROR: multiple labels for variable 'a' are not supported LINE 2: MATCH (a)-[]-(a)-[]-(a:invalid_label) RETURN a - ^ + ^ SELECT * FROM cypher('cypher_match', $$ MATCH (a) MATCH (a:v1) RETURN a $$) AS (a agtype); ERROR: multiple labels for variable 'a' are not supported LINE 2: MATCH (a) MATCH (a:v1) RETURN a - ^ + ^ SELECT * FROM cypher('cypher_match', $$ MATCH (a) MATCH (a:invalid_label) RETURN a $$) AS (a agtype); ERROR: multiple labels for variable 'a' are not supported LINE 2: MATCH (a) MATCH (a:invalid_label) RETURN a - ^ + ^ SELECT * FROM cypher('cypher_match', $$ MATCH (a:v1)-[]-()-[a]-() RETURN a $$) AS (a agtype); @@ -718,8 +718,8 @@ SELECT * FROM cypher('cypher_match', $$ MATCH (r1:invalid)-[]->(r1)-[]->(r1)-[]->(r1:invalids) return r1 $$) AS (r1 agtype); ERROR: multiple labels for variable 'r1' are not supported -LINE 2: MATCH (r1:invalid)-[]->(r1)-[]->(r1)-[]->(r1:invali... - ^ +LINE 2: ... MATCH (r1:invalid)-[]->(r1)-[]->(r1)-[]->(r1:invalid... + ^ SELECT * FROM cypher('cypher_match', $$ MATCH (r1:invalid)-[]->(r1)-[]->(r1)-[]->(r1)-[r1]->() return r1 $$) AS (r1 agtype); @@ -732,25 +732,25 @@ SELECT * FROM cypher('cypher_match', $$ $$) AS (r1 agtype); ERROR: multiple labels for variable 'r1' are not supported LINE 2: MATCH (r1:e1), (r1:e2) return r1 - ^ + ^ SELECT * FROM cypher('cypher_match', $$ MATCH (r1:invalid), (r1:e2) return r1 $$) AS (r1 agtype); ERROR: multiple labels for variable 'r1' are not supported LINE 2: MATCH (r1:invalid), (r1:e2) return r1 - ^ + ^ SELECT * FROM cypher('cypher_match', $$ MATCH (r1:e1), (r1:invalid) return r1 $$) AS (r1 agtype); ERROR: multiple labels for variable 'r1' are not supported LINE 2: MATCH (r1:e1), (r1:invalid) return r1 - ^ + ^ SELECT * FROM cypher('cypher_match', $$ MATCH (r1:e1), (r1), (r1:invalid) return r1 $$) AS (r1 agtype); ERROR: multiple labels for variable 'r1' are not supported LINE 2: MATCH (r1:e1), (r1), (r1:invalid) return r1 - ^ + ^ SELECT * FROM cypher('cypher_match', $$ MATCH (r0)-[r0]->() MATCH ()-[]->() RETURN r0 $$) AS (r0 agtype); @@ -768,7 +768,7 @@ SELECT * FROM cypher('cypher_match', $$ $$) AS (r0 agtype); ERROR: variable 'r0' is for a edge LINE 2: MATCH ()-[r0]->() MATCH ()-[]->(r0) RETURN r0 - ^ + ^ SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0:e1]->() MATCH ()-[r0:e2]->() RETURN r0 $$) AS (r0 agtype); @@ -1083,7 +1083,7 @@ SELECT * FROM cypher('cypher_match', AS (u agtype, e agtype, v agtype); ERROR: variable `x` does not exist LINE 2: $$MATCH (u)-[e]->(v) WHERE EXISTS((u)-[e]->(x)) RETURN u, e... - ^ + ^ -- -- Tests for EXISTS(property) -- diff --git a/regress/sql/cypher_create.sql b/regress/sql/cypher_create.sql index 5934dcb18..dd9506982 100644 --- a/regress/sql/cypher_create.sql +++ b/regress/sql/cypher_create.sql @@ -299,6 +299,92 @@ SELECT * FROM cypher('cypher_create', $$ CREATE (a:Part {part_num: '673'}) $$) a SELECT * FROM cypher('cypher_create', $$ MATCH (a:Part) RETURN a $$) as (a agtype); END; +-- +-- variable reuse +-- + +-- Valid variable reuse + +SELECT * FROM cypher('cypher_create', $$ + CREATE (p)-[a:new]->(p) + RETURN p,a,p +$$) as (n1 agtype, e agtype, n2 agtype); + +SELECT * FROM cypher('cypher_create', $$ + CREATE (p:node)-[e:new]->(p) + RETURN p,e,p +$$) as (n1 agtype, e agtype, n2 agtype); + +SELECT * FROM cypher('cypher_create', $$ + CREATE (p) + CREATE (p)-[a:new]->(p) + RETURN p,a,p +$$) as (n1 agtype, e agtype, n2 agtype); + +SELECT * FROM cypher('cypher_create', $$ + CREATE (p:n1) + CREATE (p)-[a:new]->(p) + RETURN p,a,p +$$) as (n1 agtype, e agtype, n2 agtype); + +SELECT * FROM cypher('cypher_create', $$ + MATCH (p:node) + CREATE (p)-[a:new]->(p) + RETURN p,a,p +$$) as (n1 agtype, e agtype, n2 agtype); + +-- Invalid variable reuse + +SELECT * FROM cypher('cypher_create', $$ + CREATE (p)-[a:new]->(p {n0:'n1'}) +$$) as (a agtype); + +SELECT * FROM cypher('cypher_create', $$ + CREATE (p:n0)-[a:new]->(p:n1) +$$) as (a agtype); + +SELECT * FROM cypher('cypher_create', $$ + CREATE p=(p) +$$) as (a agtype); + +SELECT * FROM cypher('cypher_create', $$ + CREATE p=() CREATE (p) +$$) as (a agtype); + +SELECT * FROM cypher('cypher_create', $$ + CREATE p=(a)-[p:b]->(a) +$$) as (a agtype); + +SELECT * FROM cypher('cypher_create', $$ + CREATE p=(a)-[:new]->(p) +$$) as (a agtype); + +SELECT * FROM cypher('cypher_create', $$ + MATCH (p) CREATE p=() +$$) as (a agtype); + +SELECT * FROM cypher('cypher_create', $$ + MATCH (p) CREATE p=(p) +$$) as (a agtype); + +SELECT * FROM cypher('cypher_create', $$ + MATCH (p) CREATE (a)-[p:b]->(a) +$$) as (a agtype); + +SELECT * FROM cypher('cypher_create', $$ + CREATE (a)-[e:new]->(p)-[e]->(a) +$$) as (a agtype); + +SELECT * FROM cypher('cypher_create', $$ + CREATE (a)-[e:new]->(p) + CREATE (p)-[e:new]->(a) +$$) as (a agtype); + +SELECT * FROM cypher('cypher_create', $$ + MATCH (a)-[e:new]->(p) + CREATE (p)-[e:new]->(a) +$$) as (a agtype); + -- -- Clean up -- diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 493206c30..910104bcf 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -4893,6 +4893,18 @@ transform_cypher_create_path(cypher_parsestate *cpstate, List **target_list, ccp->path_attr_num = InvalidAttrNumber; + if (in_path) + { + if (findTarget(*target_list, path->var_name) != NULL) + { + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_ALIAS), + errmsg("variable \"%s\" already exists", + path->var_name), + parser_errposition(pstate, path->location))); + } + } + foreach (lc, path->path) { if (is_ag_node(lfirst(lc), cypher_node)) @@ -4904,7 +4916,18 @@ transform_cypher_create_path(cypher_parsestate *cpstate, List **target_list, transform_create_cypher_node(cpstate, target_list, node); if (in_path) + { + if (node->name && strcmp(node->name, path->var_name) == 0) + { + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_ALIAS), + errmsg("variable \"%s\" already exists", + path->var_name), + parser_errposition(pstate, path->location))); + } rel->flags |= CYPHER_TARGET_NODE_IN_PATH_VAR; + } + transformed_path = lappend(transformed_path, rel); @@ -4922,7 +4945,17 @@ transform_cypher_create_path(cypher_parsestate *cpstate, List **target_list, transform_create_cypher_edge(cpstate, target_list, edge); if (in_path) + { + if (edge->name && strcmp(edge->name, path->var_name) == 0) + { + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_ALIAS), + errmsg("variable \"%s\" already exists", + path->var_name), + parser_errposition(pstate, path->location))); + } rel->flags |= CYPHER_TARGET_NODE_IN_PATH_VAR; + } transformed_path = lappend(transformed_path, rel); @@ -4934,7 +4967,7 @@ transform_cypher_create_path(cypher_parsestate *cpstate, List **target_list, else { ereport(ERROR, - (errmsg_internal("unrecognized node in create pattern"))); + (errmsg_internal("unrecognized node in create pattern"))); } } @@ -4982,10 +5015,7 @@ transform_create_cypher_edge(cypher_parsestate *cpstate, List **target_list, if (edge->label) { - label_cache_data *lcd = - search_label_name_graph_cache(edge->label, cpstate->graph_oid); - - if (lcd && lcd->kind != LABEL_KIND_EDGE) + if (get_label_kind(edge->label, cpstate->graph_oid) == LABEL_KIND_VERTEX) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), @@ -5005,11 +5035,16 @@ transform_create_cypher_edge(cypher_parsestate *cpstate, List **target_list, * Variables can be declared in a CREATE clause, but not used if * it already exists. */ - if (variable_exists(cpstate, edge->name)) + transform_entity *entity; + + entity = find_variable(cpstate, edge->name); + + if ((entity && entity->type != ENT_EDGE) || variable_exists(cpstate, edge->name)) { - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("variable %s already exists", edge->name))); + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("variable %s already exists", edge->name), + parser_errposition(pstate, edge->location))); } rel->variable_name = edge->name; @@ -5122,10 +5157,7 @@ transform_create_cypher_node(cypher_parsestate *cpstate, List **target_list, if (node->label) { - label_cache_data *lcd = - search_label_name_graph_cache(node->label, cpstate->graph_oid); - - if (lcd && lcd->kind != LABEL_KIND_VERTEX) + if (get_label_kind(node->label, cpstate->graph_oid) == LABEL_KIND_EDGE) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("label %s is for edges, not vertices", @@ -5142,9 +5174,16 @@ transform_create_cypher_node(cypher_parsestate *cpstate, List **target_list, { transform_entity *entity; + TargetEntry *te = findTarget(*target_list, node->name); entity = find_variable(cpstate, node->name); - if (entity) + /* + * If we find an entity as well as a target Entry with same name, + * that means that the variable is either vertex, edge or vle. + * but if we find a target entry but not an entity that means + * that the variable can be other than vertex, edge or vle e.g path. + */ + if (entity && te) { if (entity->type != ENT_VERTEX) { @@ -5157,6 +5196,16 @@ transform_create_cypher_node(cypher_parsestate *cpstate, List **target_list, return transform_create_cypher_existing_node(cpstate, target_list, entity->declared_in_current_clause, node); } + else if (te) + { + /* + * Here we are not sure if the te is a vertex, path or something + * else. So we will let it pass and the execution stage will catch + * the error if variable was not vertex. + */ + return transform_create_cypher_existing_node(cpstate, target_list, + te, node); + } } // otherwise transform the target node as a new node @@ -5197,6 +5246,7 @@ static cypher_target_node *transform_create_cypher_existing_node( cypher_node *node) { cypher_target_node *rel = make_ag_node(cypher_target_node); + ParseState *pstate = (ParseState *)cpstate; rel->type = LABEL_KIND_VERTEX; rel->flags = CYPHER_TARGET_NODE_FLAG_NONE; @@ -5208,13 +5258,15 @@ static cypher_target_node *transform_create_cypher_existing_node( { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("previously declared nodes in a create clause cannot have properties"))); + errmsg("previously declared nodes in a create clause cannot have properties"), + parser_errposition(pstate, node->location))); } if (node->label) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("previously declared variables cannot have a label"))); + errmsg("previously declared variables cannot have a label"), + parser_errposition(pstate, node->location))); } /* * When the variable is declared in the same clause this vertex is a part of diff --git a/src/backend/parser/cypher_gram.y b/src/backend/parser/cypher_gram.y index 4fb599a73..2fd057d6e 100644 --- a/src/backend/parser/cypher_gram.y +++ b/src/backend/parser/cypher_gram.y @@ -1115,6 +1115,7 @@ path: p = (cypher_path *)$3; p->var_name = $1; + p->location = @1; $$ = (Node *)p; } @@ -1182,7 +1183,7 @@ path_node: n->label = $3; n->parsed_label = $3; n->props = $4; - n->location = @1; + n->location = @2; $$ = (Node *)n; } From 9c3033147112f227bd42b62daa1a8f643d8f0481 Mon Sep 17 00:00:00 2001 From: Moontasir Mahmood <53787290+Munmud@users.noreply.github.com> Date: Fri, 16 Jun 2023 05:59:57 +0600 Subject: [PATCH 183/191] Modified test_agtypes to view useful testing message (#992) --- drivers/python/test_agtypes.py | 74 +++++++++++++++++----------------- 1 file changed, 38 insertions(+), 36 deletions(-) diff --git a/drivers/python/test_agtypes.py b/drivers/python/test_agtypes.py index e6a6d2cc4..69bbbc298 100644 --- a/drivers/python/test_agtypes.py +++ b/drivers/python/test_agtypes.py @@ -15,8 +15,9 @@ import unittest from decimal import Decimal -import math -import age +import math +import age + class TestAgtype(unittest.TestCase): resultHandler = None @@ -24,21 +25,23 @@ class TestAgtype(unittest.TestCase): def __init__(self, methodName: str) -> None: super().__init__(methodName=methodName) self.resultHandler = age.newResultHandler() - + def parse(self, exp): - return self.resultHandler.parse(exp) + return self.resultHandler.parse(exp) def test_scalar(self): - mapStr = '{"name": "Smith", "num":123, "yn":true, "bigInt":123456789123456789123456789123456789::numeric}' - arrStr = '["name", "Smith", "num", 123, "yn", true, 123456789123456789123456789123456789.8888::numeric]' - strStr = '"abcd"' - intStr = '1234' - floatStr = '1234.56789' - floatStr2 = '6.45161290322581e+46' - numericStr1 = '12345678901234567890123456789123456789.789::numeric' - numericStr2 = '12345678901234567890123456789123456789::numeric' - boolStr = 'true' - nullStr = '' + print("\nTesting Scalar Value Parsing. Result : ", end='') + + mapStr = '{"name": "Smith", "num":123, "yn":true, "bigInt":123456789123456789123456789123456789::numeric}' + arrStr = '["name", "Smith", "num", 123, "yn", true, 123456789123456789123456789123456789.8888::numeric]' + strStr = '"abcd"' + intStr = '1234' + floatStr = '1234.56789' + floatStr2 = '6.45161290322581e+46' + numericStr1 = '12345678901234567890123456789123456789.789::numeric' + numericStr2 = '12345678901234567890123456789123456789::numeric' + boolStr = 'true' + nullStr = '' nanStr = "NaN" infpStr = "Infinity" infnStr = "-Infinity" @@ -57,34 +60,27 @@ def test_scalar(self): infpVal = self.parse(infpStr) infnVal = self.parse(infnStr) - print("map", type(mapVal), mapVal) - print("arr", type(arrVal), arrVal) - print("str", type(str), str) - print("intVal", type(intVal), intVal) - print("floatVal", type(floatVal), floatVal) - print("floatVal", type(floatVal2), floatVal2) - print("bigFloat", type(bigFloat), bigFloat) - print("bigInt", type(bigInt), bigInt) - print("bool", type(boolVal), boolVal) - print("null", type(nullVal), nullVal) - print("nanVal", type(nanVal), nanVal) - print("infpVal", type(infpVal), infpVal) - print("infnVal", type(infnVal), infnVal) - - self.assertEqual(mapVal, {'name': 'Smith', 'num': 123, 'yn': True, 'bigInt': Decimal('123456789123456789123456789123456789')}) - self.assertEqual(arrVal, ["name", "Smith", "num", 123, "yn", True, Decimal("123456789123456789123456789123456789.8888")] ) + self.assertEqual(mapVal, {'name': 'Smith', 'num': 123, 'yn': True, 'bigInt': Decimal( + '123456789123456789123456789123456789')}) + self.assertEqual(arrVal, ["name", "Smith", "num", 123, "yn", True, Decimal( + "123456789123456789123456789123456789.8888")]) self.assertEqual(str, "abcd") self.assertEqual(intVal, 1234) self.assertEqual(floatVal, 1234.56789) self.assertEqual(floatVal2, 6.45161290322581e+46) - self.assertEqual(bigFloat, Decimal("12345678901234567890123456789123456789.789")) - self.assertEqual(bigInt, Decimal("12345678901234567890123456789123456789")) + self.assertEqual(bigFloat, Decimal( + "12345678901234567890123456789123456789.789")) + self.assertEqual(bigInt, Decimal( + "12345678901234567890123456789123456789")) self.assertEqual(boolVal, True) self.assertTrue(math.isnan(nanVal)) self.assertTrue(math.isinf(infpVal)) self.assertTrue(math.isinf(infnVal)) def test_vertex(self): + + print("\nTesting vertex Parsing. Result : ", end='') + vertexExp = '''{"id": 2251799813685425, "label": "Person", "properties": {"name": "Smith", "numInt":123, "numFloat": 384.23424, "bigInt":123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789::numeric, @@ -97,12 +93,17 @@ def test_vertex(self): self.assertEqual(vertex["name"], "Smith") self.assertEqual(vertex["numInt"], 123) self.assertEqual(vertex["numFloat"], 384.23424) - self.assertEqual(vertex["bigInt"], Decimal("123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789")) - self.assertEqual(vertex["bigFloat"], Decimal("123456789123456789123456789123456789.12345")) + self.assertEqual(vertex["bigInt"], Decimal( + "123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789")) + self.assertEqual(vertex["bigFloat"], Decimal( + "123456789123456789123456789123456789.12345")) self.assertEqual(vertex["yn"], True) self.assertEqual(vertex["nullVal"], None) def test_path(self): + + print("\nTesting Path Parsing. Result : ", end='') + pathExp = '''[{"id": 2251799813685425, "label": "Person", "properties": {"name": "Smith"}}::vertex, {"id": 2533274790396576, "label": "workWith", "end_id": 2251799813685425, "start_id": 2251799813685424, "properties": {"weight": 3, "bigFloat":123456789123456789123456789.12345::numeric}}::edge, @@ -119,7 +120,8 @@ def test_path(self): self.assertEqual(edge.id, 2533274790396576) self.assertEqual(edge.label, "workWith") self.assertEqual(edge["weight"], 3) - self.assertEqual(edge["bigFloat"], Decimal("123456789123456789123456789.12345")) + self.assertEqual(edge["bigFloat"], Decimal( + "123456789123456789123456789.12345")) self.assertEqual(vertexEnd.id, 2251799813685424) self.assertEqual(vertexEnd.label, "Person") @@ -127,4 +129,4 @@ def test_path(self): if __name__ == '__main__': - unittest.main() \ No newline at end of file + unittest.main() From 986f478740c4631b9033a42e5d355a6dfb96910c Mon Sep 17 00:00:00 2001 From: Fahad Zaheer <52493343+FahadZaheerfzr@users.noreply.github.com> Date: Fri, 16 Jun 2023 05:07:52 +0500 Subject: [PATCH 184/191] Added License in Python Driver README.md (#956) --- drivers/python/README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/python/README.md b/drivers/python/README.md index 30c343b96..c069f15ec 100644 --- a/drivers/python/README.md +++ b/drivers/python/README.md @@ -1,3 +1,19 @@ +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at +http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. + + # AGE AGType parser and driver support for Python AGType parser and driver support for [Apache AGE](https://age.apache.org/), graph extension for PostgreSQL. From 1c29317aef614d361ef27b5d7f87f45aa0dd6e16 Mon Sep 17 00:00:00 2001 From: Rahimullah Shaheen <77001466+RahimullahShaheen@users.noreply.github.com> Date: Tue, 20 Jun 2023 03:43:53 +0500 Subject: [PATCH 185/191] Made changes to the readme.md file i.e. Aligned logo and modified titles (#976) Co-authored-by: John Gemignani --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 28979e1f7..c6e14e4d8 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@

- + @@ -56,7 +56,7 @@
-

  What is Apache AGE?

+

  What is Apache AGE?

[Apache AGE](https://age.apache.org/#) is an extension for PostgreSQL that enables users to leverage a graph database on top of the existing relational databases. AGE is an acronym for A Graph Extension and is inspired by Bitnine's AgensGraph, a multi-model database fork of PostgreSQL. The basic principle of the project is to create a single storage that handles both the relational and graph data model so that the users can use the standard ANSI SQL along with openCypher, one of the most popular graph query languages today.
@@ -134,7 +134,7 @@ Apache AGE is intended to be simple to install and run. It can be installed with You will need to install an AGE compatible version of Postgres, for now AGE supports Postgres 11, 12 & 13. Supporting the latest versions is on AGE roadmap.

- Install From Package Manager + Installation via Package Manager

You can use a
package management that your OS provides to download AGE. @@ -146,7 +146,7 @@ sudo apt install postgresql ```

- Install From Source Code + Installation From Source Code

You can download the Postgres source code and install your own instance of Postgres. You can read instructions on how to install from source code for different versions on the official Postgres Website. @@ -156,7 +156,7 @@ You can download the Postgres

 Install AGE on Linux and MacOS

-Clone the
github repository or download thedownload an official release. +Clone the github repository or download the download an official release. Run the pg_config utility and check the version of PostgreSQL. Currently, only PostgreSQL versions 11, 12 & 13 are supported. If you have any other version of Postgres, you will need to install PostgreSQL version 11, 12 or 13.
@@ -332,7 +332,7 @@ Starting with Apache AGE is very simple. You can easily select your platform and Join the AGE community for help, questions, discussions, and contributions. - Check our [website](https://age.apache.org/) -- Chat live with us on [Discord](https://discord.com/invite/NMsBs9X8Ss/) +- Join the Live Chat on [Discord](https://discord.com/invite/NMsBs9X8Ss/) - Follow us on [Twitter](https://twitter.com/apache_age?s=20&t=7Hu8Txk4vjvuEp-ryakacg) - Subscribe to our developer mailing list by sending an email to dev-subscribe@age.apache.org - Subscribe to our user mailing list by sending an email to users-subscribe@age.apache.org From 75a0e436749bd759e09d919c1e40a19a7160899d Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Tue, 20 Jun 2023 13:12:55 -0700 Subject: [PATCH 186/191] Fix MERGE variable reuse (#997) Fixed the MERGE clause to allow for correct variable reuse in both the transform and execution phase. Fixed an incorrect usage in MATCH where a variable was compared with pg_strcasecmp instead of strcmp. Refactored some of the code using the volatile wrapper. Verified and corrected old regression tests that were in error. Added regression tests. --- regress/expected/cypher_match.out | 9 + regress/expected/cypher_merge.out | 160 +++++++++++++++-- regress/sql/cypher_match.sql | 4 + regress/sql/cypher_merge.sql | 41 ++++- src/backend/executor/cypher_create.c | 28 ++- src/backend/executor/cypher_merge.c | 25 ++- src/backend/parser/cypher_clause.c | 257 ++++++++++++++++++++++++--- 7 files changed, 466 insertions(+), 58 deletions(-) diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index 50eebeb43..aaf462272 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -2174,6 +2174,15 @@ SELECT * FROM cypher('cypher_match', $$ CREATE () WITH * MATCH (x{n0:x.n1}) RETU --- (0 rows) +-- these should fail due to multiple labels for a variable +SELECT * FROM cypher('cypher_match', $$ MATCH p=(x)-[]->(x:R) RETURN p, x $$) AS (p agtype, x agtype); +ERROR: multiple labels for variable 'x' are not supported +LINE 1: ...* FROM cypher('cypher_match', $$ MATCH p=(x)-[]->(x:R) RETUR... + ^ +SELECT * FROM cypher('cypher_match', $$ MATCH p=(x:r)-[]->(x:R) RETURN p, x $$) AS (p agtype, x agtype); +ERROR: multiple labels for variable 'x' are not supported +LINE 1: ...FROM cypher('cypher_match', $$ MATCH p=(x:r)-[]->(x:R) RETUR... + ^ -- -- Clean up -- diff --git a/regress/expected/cypher_merge.out b/regress/expected/cypher_merge.out index ecfc0c1d1..ab99aebea 100644 --- a/regress/expected/cypher_merge.out +++ b/regress/expected/cypher_merge.out @@ -904,9 +904,7 @@ SELECT * FROM cypher('cypher_merge', $$ MATCH (n:node) RETURN n $$) AS (n agtype -- -- Complex MERGE w/wo RETURN values -- --- These should each create a path, if it doesn't already exist. --- TODO Until the issue with variable reuse of 'x' in MERGE is corrected, --- these commands will each create a new path. +-- The first one should create a path, the others should just return parts of it. SELECT * FROM cypher('cypher_merge', $$ MERGE ()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) $$) AS (x agtype); x --- @@ -915,7 +913,7 @@ SELECT * FROM cypher('cypher_merge', $$ MERGE ()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]- SELECT * FROM cypher('cypher_merge', $$ MERGE ()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) RETURN x $$) AS (x agtype); x ------------------------------------------------------------------ - {"id": 3096224743817220, "label": "C", "properties": {}}::vertex + {"id": 3096224743817217, "label": "C", "properties": {}}::vertex (1 row) SELECT * FROM cypher('cypher_merge', $$ MERGE p=()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) $$) AS (p agtype); @@ -926,28 +924,154 @@ SELECT * FROM cypher('cypher_merge', $$ MERGE p=()-[:B]->(x:C)-[:E]->(x:C)<-[f:F SELECT * FROM cypher('cypher_merge', $$ MERGE p=()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) RETURN p $$) AS (p agtype); p ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710708, "label": "", "properties": {}}::vertex, {"id": 2814749767106564, "label": "B", "end_id": 3096224743817223, "start_id": 281474976710708, "properties": {}}::edge, {"id": 3096224743817223, "label": "C", "properties": {}}::vertex, {"id": 3377699720527876, "label": "E", "end_id": 3096224743817224, "start_id": 3096224743817223, "properties": {}}::edge, {"id": 3096224743817224, "label": "C", "properties": {}}::vertex, {"id": 3659174697238532, "label": "F", "end_id": 3096224743817224, "start_id": 3940649673949188, "properties": {}}::edge, {"id": 3940649673949188, "label": "I", "properties": {}}::vertex]::path + [{"id": 281474976710705, "label": "", "properties": {}}::vertex, {"id": 2814749767106561, "label": "B", "end_id": 3096224743817217, "start_id": 281474976710705, "properties": {}}::edge, {"id": 3096224743817217, "label": "C", "properties": {}}::vertex, {"id": 3377699720527873, "label": "E", "end_id": 3096224743817217, "start_id": 3096224743817217, "properties": {}}::edge, {"id": 3096224743817217, "label": "C", "properties": {}}::vertex, {"id": 3659174697238529, "label": "F", "end_id": 3096224743817217, "start_id": 3940649673949185, "properties": {}}::edge, {"id": 3940649673949185, "label": "I", "properties": {}}::vertex]::path (1 row) SELECT * FROM cypher('cypher_merge', $$ MERGE p=()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) RETURN p $$) AS (p agtype); p ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710709, "label": "", "properties": {}}::vertex, {"id": 2814749767106565, "label": "B", "end_id": 3096224743817225, "start_id": 281474976710709, "properties": {}}::edge, {"id": 3096224743817225, "label": "C", "properties": {}}::vertex, {"id": 3377699720527877, "label": "E", "end_id": 3096224743817226, "start_id": 3096224743817225, "properties": {}}::edge, {"id": 3096224743817226, "label": "C", "properties": {}}::vertex, {"id": 3659174697238533, "label": "F", "end_id": 3096224743817226, "start_id": 3940649673949189, "properties": {}}::edge, {"id": 3940649673949189, "label": "I", "properties": {}}::vertex]::path + [{"id": 281474976710705, "label": "", "properties": {}}::vertex, {"id": 2814749767106561, "label": "B", "end_id": 3096224743817217, "start_id": 281474976710705, "properties": {}}::edge, {"id": 3096224743817217, "label": "C", "properties": {}}::vertex, {"id": 3377699720527873, "label": "E", "end_id": 3096224743817217, "start_id": 3096224743817217, "properties": {}}::edge, {"id": 3096224743817217, "label": "C", "properties": {}}::vertex, {"id": 3659174697238529, "label": "F", "end_id": 3096224743817217, "start_id": 3940649673949185, "properties": {}}::edge, {"id": 3940649673949185, "label": "I", "properties": {}}::vertex]::path (1 row) --- TODO This should only return 1 row, as the path should already exist. --- However, we need to fix the variable reuse in MERGE. Until then, --- this will always return 5 rows due to 'x' above not being the same node. +-- This should only return 1 row, as the path should already exist. SELECT * FROM cypher('cypher_merge', $$ MATCH p=()-[:B]->(:C)-[:E]->(:C)<-[:F]-(:I) RETURN p $$) AS (p agtype); p ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [{"id": 281474976710705, "label": "", "properties": {}}::vertex, {"id": 2814749767106561, "label": "B", "end_id": 3096224743817217, "start_id": 281474976710705, "properties": {}}::edge, {"id": 3096224743817217, "label": "C", "properties": {}}::vertex, {"id": 3377699720527873, "label": "E", "end_id": 3096224743817218, "start_id": 3096224743817217, "properties": {}}::edge, {"id": 3096224743817218, "label": "C", "properties": {}}::vertex, {"id": 3659174697238529, "label": "F", "end_id": 3096224743817218, "start_id": 3940649673949185, "properties": {}}::edge, {"id": 3940649673949185, "label": "I", "properties": {}}::vertex]::path - [{"id": 281474976710706, "label": "", "properties": {}}::vertex, {"id": 2814749767106562, "label": "B", "end_id": 3096224743817219, "start_id": 281474976710706, "properties": {}}::edge, {"id": 3096224743817219, "label": "C", "properties": {}}::vertex, {"id": 3377699720527874, "label": "E", "end_id": 3096224743817220, "start_id": 3096224743817219, "properties": {}}::edge, {"id": 3096224743817220, "label": "C", "properties": {}}::vertex, {"id": 3659174697238530, "label": "F", "end_id": 3096224743817220, "start_id": 3940649673949186, "properties": {}}::edge, {"id": 3940649673949186, "label": "I", "properties": {}}::vertex]::path - [{"id": 281474976710707, "label": "", "properties": {}}::vertex, {"id": 2814749767106563, "label": "B", "end_id": 3096224743817221, "start_id": 281474976710707, "properties": {}}::edge, {"id": 3096224743817221, "label": "C", "properties": {}}::vertex, {"id": 3377699720527875, "label": "E", "end_id": 3096224743817222, "start_id": 3096224743817221, "properties": {}}::edge, {"id": 3096224743817222, "label": "C", "properties": {}}::vertex, {"id": 3659174697238531, "label": "F", "end_id": 3096224743817222, "start_id": 3940649673949187, "properties": {}}::edge, {"id": 3940649673949187, "label": "I", "properties": {}}::vertex]::path - [{"id": 281474976710708, "label": "", "properties": {}}::vertex, {"id": 2814749767106564, "label": "B", "end_id": 3096224743817223, "start_id": 281474976710708, "properties": {}}::edge, {"id": 3096224743817223, "label": "C", "properties": {}}::vertex, {"id": 3377699720527876, "label": "E", "end_id": 3096224743817224, "start_id": 3096224743817223, "properties": {}}::edge, {"id": 3096224743817224, "label": "C", "properties": {}}::vertex, {"id": 3659174697238532, "label": "F", "end_id": 3096224743817224, "start_id": 3940649673949188, "properties": {}}::edge, {"id": 3940649673949188, "label": "I", "properties": {}}::vertex]::path - [{"id": 281474976710709, "label": "", "properties": {}}::vertex, {"id": 2814749767106565, "label": "B", "end_id": 3096224743817225, "start_id": 281474976710709, "properties": {}}::edge, {"id": 3096224743817225, "label": "C", "properties": {}}::vertex, {"id": 3377699720527877, "label": "E", "end_id": 3096224743817226, "start_id": 3096224743817225, "properties": {}}::edge, {"id": 3096224743817226, "label": "C", "properties": {}}::vertex, {"id": 3659174697238533, "label": "F", "end_id": 3096224743817226, "start_id": 3940649673949189, "properties": {}}::edge, {"id": 3940649673949189, "label": "I", "properties": {}}::vertex]::path -(5 rows) + [{"id": 281474976710705, "label": "", "properties": {}}::vertex, {"id": 2814749767106561, "label": "B", "end_id": 3096224743817217, "start_id": 281474976710705, "properties": {}}::edge, {"id": 3096224743817217, "label": "C", "properties": {}}::vertex, {"id": 3377699720527873, "label": "E", "end_id": 3096224743817217, "start_id": 3096224743817217, "properties": {}}::edge, {"id": 3096224743817217, "label": "C", "properties": {}}::vertex, {"id": 3659174697238529, "label": "F", "end_id": 3096224743817217, "start_id": 3940649673949185, "properties": {}}::edge, {"id": 3940649673949185, "label": "I", "properties": {}}::vertex]::path +(1 row) + +-- test variable reuse in MERGE - the first MERGE of each group should create, +-- the second MERGE shouldn't. +SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:P)-[:E]->(x:P) RETURN p, x $$) AS (p agtype, x agtype); + p | x +---+--- +(0 rows) + +SELECT * FROM cypher('cypher_merge', $$ MERGE (x:P)-[:E]->(x:P) $$) AS (x agtype); + x +--- +(0 rows) + +SELECT * FROM cypher('cypher_merge', $$ MERGE (x:P)-[:E]->(x) $$) AS (x agtype); + x +--- +(0 rows) + +SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:P)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); + p | x +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------ + [{"id": 4222124650659841, "label": "P", "properties": {}}::vertex, {"id": 3377699720527874, "label": "E", "end_id": 4222124650659841, "start_id": 4222124650659841, "properties": {}}::edge, {"id": 4222124650659841, "label": "P", "properties": {}}::vertex]::path | {"id": 4222124650659841, "label": "P", "properties": {}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:Q)-[:E]->(x:Q) RETURN p, x $$) AS (p agtype, x agtype); + p | x +---+--- +(0 rows) + +SELECT * FROM cypher('cypher_merge', $$ MERGE (x:Q)-[:E]->(x) $$) AS (x agtype); + x +--- +(0 rows) + +SELECT * FROM cypher('cypher_merge', $$ MERGE (x:Q)-[:E]->(x:Q) $$) AS (x agtype); + x +--- +(0 rows) + +SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:Q)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); + p | x +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------ + [{"id": 4503599627370497, "label": "Q", "properties": {}}::vertex, {"id": 3377699720527875, "label": "E", "end_id": 4503599627370497, "start_id": 4503599627370497, "properties": {}}::edge, {"id": 4503599627370497, "label": "Q", "properties": {}}::vertex]::path | {"id": 4503599627370497, "label": "Q", "properties": {}}::vertex +(1 row) +SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:R)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); + p | x +---+--- +(0 rows) + +SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:R)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); + p | x +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------ + [{"id": 4785074604081153, "label": "R", "properties": {}}::vertex, {"id": 3377699720527876, "label": "E", "end_id": 4785074604081153, "start_id": 4785074604081153, "properties": {}}::edge, {"id": 4785074604081153, "label": "R", "properties": {}}::vertex]::path | {"id": 4785074604081153, "label": "R", "properties": {}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:R)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); + p | x +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------ + [{"id": 4785074604081153, "label": "R", "properties": {}}::vertex, {"id": 3377699720527876, "label": "E", "end_id": 4785074604081153, "start_id": 4785074604081153, "properties": {}}::edge, {"id": 4785074604081153, "label": "R", "properties": {}}::vertex]::path | {"id": 4785074604081153, "label": "R", "properties": {}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:R)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); + p | x +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------ + [{"id": 4785074604081153, "label": "R", "properties": {}}::vertex, {"id": 3377699720527876, "label": "E", "end_id": 4785074604081153, "start_id": 4785074604081153, "properties": {}}::edge, {"id": 4785074604081153, "label": "R", "properties": {}}::vertex]::path | {"id": 4785074604081153, "label": "R", "properties": {}}::vertex +(1 row) + +-- should return 4 rows +SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); + p | x +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------ + [{"id": 3096224743817217, "label": "C", "properties": {}}::vertex, {"id": 3377699720527873, "label": "E", "end_id": 3096224743817217, "start_id": 3096224743817217, "properties": {}}::edge, {"id": 3096224743817217, "label": "C", "properties": {}}::vertex]::path | {"id": 3096224743817217, "label": "C", "properties": {}}::vertex + [{"id": 4222124650659841, "label": "P", "properties": {}}::vertex, {"id": 3377699720527874, "label": "E", "end_id": 4222124650659841, "start_id": 4222124650659841, "properties": {}}::edge, {"id": 4222124650659841, "label": "P", "properties": {}}::vertex]::path | {"id": 4222124650659841, "label": "P", "properties": {}}::vertex + [{"id": 4503599627370497, "label": "Q", "properties": {}}::vertex, {"id": 3377699720527875, "label": "E", "end_id": 4503599627370497, "start_id": 4503599627370497, "properties": {}}::edge, {"id": 4503599627370497, "label": "Q", "properties": {}}::vertex]::path | {"id": 4503599627370497, "label": "Q", "properties": {}}::vertex + [{"id": 4785074604081153, "label": "R", "properties": {}}::vertex, {"id": 3377699720527876, "label": "E", "end_id": 4785074604081153, "start_id": 4785074604081153, "properties": {}}::edge, {"id": 4785074604081153, "label": "R", "properties": {}}::vertex]::path | {"id": 4785074604081153, "label": "R", "properties": {}}::vertex +(4 rows) + +-- should create 1 row +SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x)-[:E1]->(x) RETURN p, x $$) AS (p agtype, x agtype); + p | x +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------- + [{"id": 281474976710706, "label": "", "properties": {}}::vertex, {"id": 5066549580791809, "label": "E1", "end_id": 281474976710706, "start_id": 281474976710706, "properties": {}}::edge, {"id": 281474976710706, "label": "", "properties": {}}::vertex]::path | {"id": 281474976710706, "label": "", "properties": {}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x)-[:E1]->(x) RETURN p, x $$) AS (p agtype, x agtype); + p | x +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------- + [{"id": 281474976710706, "label": "", "properties": {}}::vertex, {"id": 5066549580791809, "label": "E1", "end_id": 281474976710706, "start_id": 281474976710706, "properties": {}}::edge, {"id": 281474976710706, "label": "", "properties": {}}::vertex]::path | {"id": 281474976710706, "label": "", "properties": {}}::vertex +(1 row) + +-- the following should fail due to multiple labels +SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x)-[:E]->(x:R) RETURN p, x $$) AS (p agtype, x agtype); +ERROR: multiple labels for variable 'x' are not supported +LINE 1: ...FROM cypher('cypher_merge', $$ MERGE p=(x)-[:E]->(x:R) RETUR... + ^ +SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:r)-[:E]->(x:R) RETURN p, x $$) AS (p agtype, x agtype); +ERROR: multiple labels for variable 'x' are not supported +LINE 1: ...OM cypher('cypher_merge', $$ MERGE p=(x:r)-[:E]->(x:R) RETUR... + ^ +SELECT * FROM cypher('cypher_merge', $$ MERGE (x)-[:E]->(x:R) $$) AS (x agtype); +ERROR: multiple labels for variable 'x' are not supported +LINE 1: ...* FROM cypher('cypher_merge', $$ MERGE (x)-[:E]->(x:R) $$) A... + ^ +SELECT * FROM cypher('cypher_merge', $$ MERGE (x:r)-[:E]->(x:R) $$) AS (x agtype); +ERROR: multiple labels for variable 'x' are not supported +LINE 1: ...FROM cypher('cypher_merge', $$ MERGE (x:r)-[:E]->(x:R) $$) A... + ^ +-- the following should fail due to reuse issues +SELECT * FROM cypher('cypher_merge', $$ MERGE (x:r)-[y:E]->(x)-[y]->(x) $$) AS (x agtype); +ERROR: a duplicate edge variable "y" is not permitted within a path +LINE 1: ... cypher('cypher_merge', $$ MERGE (x:r)-[y:E]->(x)-[y]->(x) $... + ^ +SELECT * FROM cypher('cypher_merge', $$ MERGE (x:r)-[y:E]->(x)-[x]->(y) $$) AS (x agtype); +ERROR: variable "x" is for an vertex +LINE 1: ... cypher('cypher_merge', $$ MERGE (x:r)-[y:E]->(x)-[x]->(y) $... + ^ +SELECT * FROM cypher('cypher_merge', $$ MERGE (x:r)-[y:E]->(x)-[z:E]->(y) $$) AS (x agtype); +ERROR: variable "y" is for a edge +LINE 1: ...'cypher_merge', $$ MERGE (x:r)-[y:E]->(x)-[z:E]->(y) $$) AS ... + ^ +SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:r)-[y:E]->(x)-[p]->(x) $$) AS (x agtype); +ERROR: variable "p" is for a path +LINE 1: ...ypher('cypher_merge', $$ MERGE p=(x:r)-[y:E]->(x)-[p]->(x) $... + ^ +SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:r)-[y:E]->(x)-[p:E]->(x) $$) AS (x agtype); +ERROR: variable "p" is for a path +LINE 1: ...ypher('cypher_merge', $$ MERGE p=(x:r)-[y:E]->(x)-[p:E]->(x)... + ^ +SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:r)-[y:E]->(p)-[x]->(y) $$) AS (x agtype); +ERROR: variable "p" is for a path +LINE 1: ...M cypher('cypher_merge', $$ MERGE p=(x:r)-[y:E]->(p)-[x]->(y... + ^ --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); a @@ -958,7 +1082,7 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtyp * Clean up graph */ SELECT drop_graph('cypher_merge', true); -NOTICE: drop cascades to 14 other objects +NOTICE: drop cascades to 18 other objects DETAIL: drop cascades to table cypher_merge._ag_label_vertex drop cascades to table cypher_merge._ag_label_edge drop cascades to table cypher_merge.e @@ -973,6 +1097,10 @@ drop cascades to table cypher_merge."C" drop cascades to table cypher_merge."E" drop cascades to table cypher_merge."F" drop cascades to table cypher_merge."I" +drop cascades to table cypher_merge."P" +drop cascades to table cypher_merge."Q" +drop cascades to table cypher_merge."R" +drop cascades to table cypher_merge."E1" NOTICE: graph "cypher_merge" has been dropped drop_graph ------------ diff --git a/regress/sql/cypher_match.sql b/regress/sql/cypher_match.sql index ffd554615..4228d82b3 100644 --- a/regress/sql/cypher_match.sql +++ b/regress/sql/cypher_match.sql @@ -977,6 +977,10 @@ SELECT * FROM cypher('cypher_match', $$ MATCH p=(a {name:a.name})-[u {relationsh SELECT * FROM cypher('cypher_match', $$ CREATE () WITH * MATCH (x{n0:x.n1}) RETURN 0 $$) as (a agtype); +-- these should fail due to multiple labels for a variable +SELECT * FROM cypher('cypher_match', $$ MATCH p=(x)-[]->(x:R) RETURN p, x $$) AS (p agtype, x agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=(x:r)-[]->(x:R) RETURN p, x $$) AS (p agtype, x agtype); + -- -- Clean up -- diff --git a/regress/sql/cypher_merge.sql b/regress/sql/cypher_merge.sql index 1fe3ed707..81c679c5a 100644 --- a/regress/sql/cypher_merge.sql +++ b/regress/sql/cypher_merge.sql @@ -482,19 +482,48 @@ SELECT * FROM cypher('cypher_merge', $$ MATCH (n:node) RETURN n $$) AS (n agtype -- -- Complex MERGE w/wo RETURN values -- --- These should each create a path, if it doesn't already exist. --- TODO Until the issue with variable reuse of 'x' in MERGE is corrected, --- these commands will each create a new path. +-- The first one should create a path, the others should just return parts of it. SELECT * FROM cypher('cypher_merge', $$ MERGE ()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) $$) AS (x agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE ()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) RETURN x $$) AS (x agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE p=()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) $$) AS (p agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE p=()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) RETURN p $$) AS (p agtype); SELECT * FROM cypher('cypher_merge', $$ MERGE p=()-[:B]->(x:C)-[:E]->(x:C)<-[f:F]-(y:I) RETURN p $$) AS (p agtype); --- TODO This should only return 1 row, as the path should already exist. --- However, we need to fix the variable reuse in MERGE. Until then, --- this will always return 5 rows due to 'x' above not being the same node. + +-- This should only return 1 row, as the path should already exist. SELECT * FROM cypher('cypher_merge', $$ MATCH p=()-[:B]->(:C)-[:E]->(:C)<-[:F]-(:I) RETURN p $$) AS (p agtype); +-- test variable reuse in MERGE - the first MERGE of each group should create, +-- the second MERGE shouldn't. +SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:P)-[:E]->(x:P) RETURN p, x $$) AS (p agtype, x agtype); +SELECT * FROM cypher('cypher_merge', $$ MERGE (x:P)-[:E]->(x:P) $$) AS (x agtype); +SELECT * FROM cypher('cypher_merge', $$ MERGE (x:P)-[:E]->(x) $$) AS (x agtype); +SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:P)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); +SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:Q)-[:E]->(x:Q) RETURN p, x $$) AS (p agtype, x agtype); +SELECT * FROM cypher('cypher_merge', $$ MERGE (x:Q)-[:E]->(x) $$) AS (x agtype); +SELECT * FROM cypher('cypher_merge', $$ MERGE (x:Q)-[:E]->(x:Q) $$) AS (x agtype); +SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:Q)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); +SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:R)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); +SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:R)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); +SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:R)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); +SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x:R)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); +-- should return 4 rows +SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x)-[:E]->(x) RETURN p, x $$) AS (p agtype, x agtype); +-- should create 1 row +SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x)-[:E1]->(x) RETURN p, x $$) AS (p agtype, x agtype); +SELECT * FROM cypher('cypher_merge', $$ MATCH p=(x)-[:E1]->(x) RETURN p, x $$) AS (p agtype, x agtype); +-- the following should fail due to multiple labels +SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x)-[:E]->(x:R) RETURN p, x $$) AS (p agtype, x agtype); +SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:r)-[:E]->(x:R) RETURN p, x $$) AS (p agtype, x agtype); +SELECT * FROM cypher('cypher_merge', $$ MERGE (x)-[:E]->(x:R) $$) AS (x agtype); +SELECT * FROM cypher('cypher_merge', $$ MERGE (x:r)-[:E]->(x:R) $$) AS (x agtype); +-- the following should fail due to reuse issues +SELECT * FROM cypher('cypher_merge', $$ MERGE (x:r)-[y:E]->(x)-[y]->(x) $$) AS (x agtype); +SELECT * FROM cypher('cypher_merge', $$ MERGE (x:r)-[y:E]->(x)-[x]->(y) $$) AS (x agtype); +SELECT * FROM cypher('cypher_merge', $$ MERGE (x:r)-[y:E]->(x)-[z:E]->(y) $$) AS (x agtype); +SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:r)-[y:E]->(x)-[p]->(x) $$) AS (x agtype); +SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:r)-[y:E]->(x)-[p:E]->(x) $$) AS (x agtype); +SELECT * FROM cypher('cypher_merge', $$ MERGE p=(x:r)-[y:E]->(p)-[x]->(y) $$) AS (x agtype); + --clean up SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); diff --git a/src/backend/executor/cypher_create.c b/src/backend/executor/cypher_create.c index e1b9ec89d..083ddd50c 100644 --- a/src/backend/executor/cypher_create.c +++ b/src/backend/executor/cypher_create.c @@ -129,6 +129,12 @@ static void begin_cypher_create(CustomScanState *node, EState *estate, cypher_node->id_expr_state = ExecInitExpr(cypher_node->id_expr, (PlanState *)node); } + + if (cypher_node->prop_expr != NULL) + { + cypher_node->prop_expr_state = ExecInitExpr(cypher_node->prop_expr, + (PlanState *)node); + } } } @@ -140,7 +146,9 @@ static void begin_cypher_create(CustomScanState *node, EState *estate, * that have modified the command id. */ if (estate->es_output_cid == 0) + { estate->es_output_cid = estate->es_snapshot->curcid; + } Increment_Estate_CommandId(estate); } @@ -210,15 +218,19 @@ static TupleTableSlot *exec_cypher_create(CustomScanState *node) Decrement_Estate_CommandId(estate) slot = ExecProcNode(node->ss.ps.lefttree); Increment_Estate_CommandId(estate) + /* break when there are no tuples */ if (TupIsNull(slot)) { break; } + /* setup the scantuple that the process_pattern needs */ econtext->ecxt_scantuple = node->ss.ps.lefttree->ps_ProjInfo->pi_exprContext->ecxt_scantuple; + process_pattern(css); + /* * This may not be necessary. If we have an empty pattern, nothing was * inserted and the current command Id was not used. So, only flag it @@ -230,6 +242,7 @@ static TupleTableSlot *exec_cypher_create(CustomScanState *node) used = true; } } while (terminal); + /* * If the current command Id wasn't used, nothing was inserted and we're * done. @@ -238,8 +251,10 @@ static TupleTableSlot *exec_cypher_create(CustomScanState *node) { return NULL; } + /* update the current command Id */ CommandCounterIncrement(); + /* if this was a terminal CREATE just return NULL */ if (terminal) { @@ -256,19 +271,25 @@ static void end_cypher_create(CustomScanState *node) (cypher_create_custom_scan_state *)node; ListCell *lc; + // increment the command counter + CommandCounterIncrement(); + ExecEndNode(node->ss.ps.lefttree); foreach (lc, css->pattern) { cypher_create_path *path = lfirst(lc); ListCell *lc2; + foreach (lc2, path->target_nodes) { cypher_target_node *cypher_node = (cypher_target_node *)lfirst(lc2); if (!CYPHER_TARGET_NODE_INSERT_ENTITY(cypher_node->flags)) + { continue; + } // close all indices for the node ExecCloseIndices(cypher_node->resultRelInfo); @@ -506,8 +527,7 @@ static Datum create_vertex(cypher_create_custom_scan_state *css, scantuple = ps->ps_ExprContext->ecxt_scantuple; // make the vertex agtype - result = make_vertex( - id, CStringGetDatum(node->label_name), + result = make_vertex(id, CStringGetDatum(node->label_name), PointerGetDatum(scanTupleSlot->tts_values[node->prop_attr_num])); // append to the path list @@ -546,9 +566,11 @@ static Datum create_vertex(cypher_create_custom_scan_state *css, v = get_ith_agtype_value_from_container(&a->root, 0); if (v->type != AGTV_VERTEX) + { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("agtype must resolve to a vertex"))); + } // extract the id agtype field id_value = GET_AGTYPE_VALUE_OBJECT_VALUE(v, "id"); @@ -570,10 +592,12 @@ static Datum create_vertex(cypher_create_custom_scan_state *css, if (!SAFE_TO_SKIP_EXISTENCE_CHECK(node->flags)) { if (!entity_exists(estate, css->graph_oid, DATUM_GET_GRAPHID(id))) + { ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("vertex assigned to variable %s was deleted", node->variable_name))); + } } if (CYPHER_TARGET_NODE_IN_PATH(node->flags)) diff --git a/src/backend/executor/cypher_merge.c b/src/backend/executor/cypher_merge.c index b42408b75..67112dd0b 100644 --- a/src/backend/executor/cypher_merge.c +++ b/src/backend/executor/cypher_merge.c @@ -198,27 +198,25 @@ static bool check_path(cypher_merge_custom_scan_state *css, */ if (slot->tts_isnull[node->tuple_position - 1]) { + return true; } } - } - return false; } static void process_path(cypher_merge_custom_scan_state *css) { cypher_create_path *path = css->path; - ListCell *lc = list_head(path->target_nodes); /* * Create the first vertex. The create_vertex function will * create the rest of the path, if necessary. */ - merge_vertex(css, lfirst(lc), lnext(lc)); + merge_vertex(css, lfirst(lc), lnext(lc)); /* * If this path is a variable, take the list that was accumulated @@ -272,9 +270,13 @@ static void process_simple_merge(CustomScanState *node) if (TupIsNull(slot)) { ExprContext *econtext = node->ss.ps.ps_ExprContext; + SubqueryScanState *sss = (SubqueryScanState *)node->ss.ps.lefttree; + + /* our child execution node should be a subquery */ + Assert(IsA(sss, SubqueryScanState)); /* setup the scantuple that the process_path needs */ - econtext->ecxt_scantuple = node->ss.ps.lefttree->ps_ResultTupleSlot; + econtext->ecxt_scantuple = sss->ss.ss_ScanTupleSlot; econtext->ecxt_scantuple->tts_isempty = false; process_path(css); @@ -334,7 +336,7 @@ static TupleTableSlot *exec_cypher_merge(CustomScanState *node) /* * Case 1: MERGE is not the first clause in the cypher query. * - * For this case, we need to process all tuples give to us by the + * For this case, we need to process all tuples given to us by the * previous clause. When we receive a tuple from the previous clause: * check to see if the left lateral join found the pattern already. If * it did, we don't need to create the pattern. If the lateral join did @@ -377,7 +379,6 @@ static TupleTableSlot *exec_cypher_merge(CustomScanState *node) return NULL; } - //return ExecProject(node->ss.ps.ps_ProjInfo); econtext->ecxt_scantuple = ExecProject(node->ss.ps.lefttree->ps_ProjInfo); return ExecProject(node->ss.ps.ps_ProjInfo); @@ -783,13 +784,9 @@ static Datum merge_vertex(cypher_merge_custom_scan_state *css, Datum d; agtype_value *v = NULL; agtype_value *id_value = NULL; - TupleTableSlot *scantuple = NULL; - PlanState *ps = NULL; - - ps = css->css.ss.ps.lefttree; - scantuple = ps->ps_ExprContext->ecxt_scantuple; - if (scantuple->tts_isnull[node->tuple_position - 1]) + /* check that the variable isn't NULL */ + if (scanTupleSlot->tts_isnull[node->tuple_position - 1]) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), @@ -798,7 +795,7 @@ static Datum merge_vertex(cypher_merge_custom_scan_state *css, } /* get the vertex agtype in the scanTupleSlot */ - d = scantuple->tts_values[node->tuple_position - 1]; + d = scanTupleSlot->tts_values[node->tuple_position - 1]; a = DATUM_GET_AGTYPE_P(d); /* Convert to an agtype value */ diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 910104bcf..8697729df 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -193,6 +193,7 @@ static Expr *cypher_create_properties(cypher_parsestate *cpstate, enum transform_entity_type type); static Expr *add_volatile_wrapper(Expr *node); static bool variable_exists(cypher_parsestate *cpstate, char *name); +static void add_volatile_wrapper_to_target_entry(List *target_list, int resno); static int get_target_entry_resno(List *target_list, char *name); static void handle_prev_clause(cypher_parsestate *cpstate, Query *query, cypher_clause *clause, bool first_rte); @@ -263,6 +264,9 @@ static cypher_clause *convert_merge_to_match(cypher_merge *merge); static void transform_cypher_merge_mark_tuple_position(List *target_list, cypher_create_path *path); +static cypher_target_node *get_referenced_variable(ParseState *pstate, + Node *node, + List *transformed_path); //call...[yield] static Query *transform_cypher_call_stmt(cypher_parsestate *cpstate, @@ -1393,7 +1397,6 @@ static List *transform_cypher_delete_item_list(cypher_parsestate *cpstate, } resno = get_target_entry_resno(query->targetList, val->val.str); - if (resno == -1) { ereport(ERROR, @@ -1403,6 +1406,8 @@ static List *transform_cypher_delete_item_list(cypher_parsestate *cpstate, parser_errposition(pstate, col->location))); } + add_volatile_wrapper_to_target_entry(query->targetList, resno); + pos = makeInteger(resno); item->var_name = val->val.str; @@ -1551,9 +1556,9 @@ cypher_update_information *transform_cypher_remove_item_list( variable_name = variable_node->val.str; item->var_name = variable_name; + item->entity_position = get_target_entry_resno(query->targetList, variable_name); - if (item->entity_position == -1) { ereport(ERROR, @@ -1563,6 +1568,9 @@ cypher_update_information *transform_cypher_remove_item_list( parser_errposition(pstate, set_item->location))); } + add_volatile_wrapper_to_target_entry(query->targetList, + item->entity_position); + // extract property name if (list_length(ind->indirection) != 1) { @@ -1726,9 +1734,9 @@ cypher_update_information *transform_cypher_set_item_list( variable_name = variable_node->val.str; item->var_name = variable_name; + item->entity_position = get_target_entry_resno(query->targetList, variable_name); - if (item->entity_position == -1) { ereport(ERROR, @@ -1738,6 +1746,9 @@ cypher_update_information *transform_cypher_set_item_list( parser_errposition(pstate, set_item->location))); } + add_volatile_wrapper_to_target_entry(query->targetList, + item->entity_position); + // set keep_null property if (is_ag_node(set_item->expr, cypher_map)) { @@ -4395,7 +4406,7 @@ static Expr *transform_cypher_edge(cypher_parsestate *cpstate, if (refs_var && (cr->parsed_label != NULL || rel->parsed_label != NULL) && (cr->parsed_label == NULL || rel->parsed_label == NULL || - (pg_strcasecmp(cr->parsed_label, rel->parsed_label) != 0))) + (strcmp(cr->parsed_label, rel->parsed_label) != 0))) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), @@ -4600,7 +4611,7 @@ static Expr *transform_cypher_node(cypher_parsestate *cpstate, if (refs_var && (cn->parsed_label != NULL || node->parsed_label != NULL) && (cn->parsed_label == NULL || node->parsed_label == NULL || - (pg_strcasecmp(cn->parsed_label, node->parsed_label) != 0))) + (strcmp(cn->parsed_label, node->parsed_label) != 0))) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), @@ -4927,7 +4938,6 @@ transform_cypher_create_path(cypher_parsestate *cpstate, List **target_list, } rel->flags |= CYPHER_TARGET_NODE_IN_PATH_VAR; } - transformed_path = lappend(transformed_path, rel); @@ -5213,9 +5223,6 @@ transform_create_cypher_node(cypher_parsestate *cpstate, List **target_list, } /* - * TODO A function called get_ should NOT modify the contents of what - * it gets. This needs to be fixed. - * * Returns the resno for the TargetEntry with the resname equal to the name * passed. Returns -1 otherwise. */ @@ -5228,7 +5235,6 @@ static int get_target_entry_resno(List *target_list, char *name) TargetEntry *te = (TargetEntry *)lfirst(lc); if (!strcmp(te->resname, name)) { - te->expr = add_volatile_wrapper(te->expr); return te->resno; } } @@ -5236,6 +5242,32 @@ static int get_target_entry_resno(List *target_list, char *name) return -1; } +/* adds the volatile wrapper to the specified target entry */ +static void add_volatile_wrapper_to_target_entry(List *target_list, int resno) +{ + ListCell *lc; + + Assert(target_list != NULL); + Assert(resno >= 0); + + /* find the resource */ + foreach (lc, target_list) + { + TargetEntry *te = (TargetEntry *)lfirst(lc); + if (te->resno == resno) + { + /* wrap it */ + te->expr = add_volatile_wrapper(te->expr); + return; + } + } + + /* if we didn't find anything, there was a problem */ + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("add_volatile_wrapper_to_target_entry: resno not found"))); +} + /* * Transform logic for a previously declared variable in a CREATE clause. * All we need from the variable node is its id, and whether we can skip @@ -5253,7 +5285,6 @@ static cypher_target_node *transform_create_cypher_existing_node( rel->resultRelInfo = NULL; rel->variable_name = node->name; - if (node->props) { ereport(ERROR, @@ -5283,6 +5314,8 @@ static cypher_target_node *transform_create_cypher_existing_node( */ rel->tuple_position = get_target_entry_resno(*target_list, node->name); + add_volatile_wrapper_to_target_entry(*target_list, rel->tuple_position); + return rel; } @@ -5632,6 +5665,12 @@ static Expr *add_volatile_wrapper(Expr *node) oid = get_ag_func_oid("agtype_volatile_wrapper", 1, ANYOID); + /* if the passed Expr node is already wrapped, just return it */ + if (IsA(node, FuncExpr) && oid == ((FuncExpr*)node)->funcid) + { + return node; + } + return (Expr *)makeFuncExpr(oid, AGTYPEOID, list_make1(node), InvalidOid, InvalidOid, COERCE_EXPLICIT_CALL); } @@ -5766,7 +5805,10 @@ static Query *transform_cypher_merge(cypher_parsestate *cpstate, else { // make the merge node into a match node - cypher_clause *merge_clause_as_match = convert_merge_to_match(self); + + // TODO this is called above and appears redundant but needs to be + // looked into + //cypher_clause *merge_clause_as_match = convert_merge_to_match(self); /* * Create the metadata needed for creating missing paths. @@ -5867,7 +5909,7 @@ transform_merge_make_lateral_join(cypher_parsestate *cpstate, Query *query, * transform the previous clause */ j->larg = transform_clause_for_join(cpstate, clause->prev, &l_rte, - &l_nsitem, l_alias); + &l_nsitem, l_alias); pstate->p_namespace = lappend(pstate->p_namespace, l_nsitem); /* @@ -5995,6 +6037,134 @@ transform_cypher_merge_mark_tuple_position(List *target_list, } } +/* + * Helper function to return a shallow copy of an existing, already transformed, + * matching variable. The copy returned will be flagged as such. If none are + * found, it will return NULL. If it finds a mismatched type, it will error + * stating that. + */ +static cypher_target_node *get_referenced_variable(ParseState *pstate, + Node *node, + List *transformed_path) +{ + ListCell *lc = NULL; + char *node_name = NULL; + char *node_label = NULL; + char node_type = 0; + int node_loc = -1; + + /* passed node should only be a vertex or an edge */ + Assert(is_ag_node(node, cypher_node) || + is_ag_node(node, cypher_relationship)); + + /* set up our search based on our input type */ + if (is_ag_node(node, cypher_node)) + { + node_name = ((cypher_node *)node)->name; + node_label = ((cypher_node *)node)->label; + node_loc = ((cypher_node *)node)->location; + node_type = 'v'; + } + else + { + node_name = ((cypher_relationship *)node)->name; + node_label = ((cypher_relationship *)node)->label; + node_loc = ((cypher_relationship *)node)->location; + node_type = 'e'; + } + + /* look through the list of previously transformed nodes and edges */ + foreach (lc, transformed_path) + { + cypher_target_node *ctn = NULL; + bool is_name = false; + bool is_label = false; + + /* list items should be of type cypher_target_node */ + Assert(is_ag_node(lfirst(lc), cypher_target_node)); + ctn = lfirst(lc); + + /* do they have names? if so, do they match? */ + is_name = (node_name == NULL || ctn->variable_name == NULL) ? + false : strcmp(node_name, ctn->variable_name) == 0; + + /* do they have labels? if so, do they match? */ + is_label = (ctn->label_name != NULL) ? + ((node_label == NULL) ? true : strcmp(ctn->label_name, node_label) == 0) + : false; + + /* if the types don't match, error or skip */ + if (node_type != ctn->type) + { + /* is the name a match, generate an error. otherwise, skip it. */ + if (is_name) + { + if (node_type == 'v') + { + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("variable \"%s\" is for a edge", + node_name), + parser_errposition(pstate, node_loc))); + } + else + { + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("variable \"%s\" is for an vertex", + node_name), + parser_errposition(pstate, node_loc))); + } + } + else + { + continue; + } + } + + if (is_name && !is_label) + { + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("multiple labels for variable '%s' are not supported", + node_name), + parser_errposition(pstate, node_loc))); + } + + /* + * If this is a match, make a shallow copy of it, modify the copy to be + * flagged as a previously declared variable, and then return it. + */ + if (is_name && is_label) + { + cypher_target_node *_cpy = make_ag_node(cypher_target_node); + + /* make a shallow copy */ + _cpy->type = ctn->type; + _cpy->flags = ctn->flags; + _cpy->dir = ctn->dir; + _cpy->id_expr = ctn->id_expr; + _cpy->id_expr_state = ctn->id_expr_state; + _cpy->prop_expr = ctn->prop_expr; + _cpy->prop_expr_state = ctn->prop_expr_state; + _cpy->prop_attr_num = ctn->prop_attr_num; + _cpy->resultRelInfo = ctn->resultRelInfo; + _cpy->elemTupleSlot = ctn->elemTupleSlot; + _cpy->relid = ctn->relid; + _cpy->label_name = ctn->label_name; + _cpy->variable_name = ctn->variable_name; + _cpy->tuple_position = ctn->tuple_position; + + /* set it to a declared variable */ + _cpy->flags &= 0xfffffffe; + _cpy->flags |= EXISTING_VARIABLE_DECLARED_SAME_CLAUSE; + + return _cpy; + } + } + return NULL; +} + /* * Creates the target nodes for a merge path. If MERGE has a path that doesn't * exist then in the MERGE clause we act like a CREATE clause. This function @@ -6004,6 +6174,7 @@ static cypher_create_path * transform_cypher_merge_path(cypher_parsestate *cpstate, List **target_list, cypher_path *path) { + ParseState *pstate = (ParseState *)cpstate; ListCell *lc; List *transformed_path = NIL; cypher_create_path *ccp = make_ag_node(cypher_create_path); @@ -6016,9 +6187,30 @@ transform_cypher_merge_path(cypher_parsestate *cpstate, List **target_list, if (is_ag_node(lfirst(lc), cypher_node)) { cypher_node *node = lfirst(lc); + cypher_target_node *rel = NULL; - cypher_target_node *rel = - transform_merge_cypher_node(cpstate, target_list, node); + if (path->var_name != NULL && node->name != NULL && + strcmp(path->var_name, node->name) == 0) + { + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("variable \"%s\" is for a path", node->name), + parser_errposition(pstate, node->location))); + } + + /* + * If the variable was already transformed, get a referenced copy of + * it. This copy will make sure the executor phase doesn't create a + * new node from it. + */ + rel = get_referenced_variable(pstate, (Node *)node, + transformed_path); + + /* if there wasn't a transformed variable, transform the node */ + if (rel == NULL) + { + rel = transform_merge_cypher_node(cpstate, target_list, node); + } if (in_path) { @@ -6029,10 +6221,37 @@ transform_cypher_merge_path(cypher_parsestate *cpstate, List **target_list, } else if (is_ag_node(lfirst(lc), cypher_relationship)) { - cypher_relationship *edge = lfirst(lc); + cypher_relationship *edge = NULL; + cypher_target_node *rel = NULL; - cypher_target_node *rel = - transform_merge_cypher_edge(cpstate, target_list, edge); + edge = lfirst(lc); + + if (path->var_name != NULL && edge->name != NULL && + strcmp(path->var_name, edge->name) == 0) + { + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("variable \"%s\" is for a path", edge->name), + parser_errposition(pstate, edge->location))); + } + + /* + * Get a referenced edge variable. This should not happen as edges + * can not be duplicated within a path. + */ + rel = get_referenced_variable(pstate, (Node *)edge, + transformed_path); + if (rel != NULL) + { + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("a duplicate edge variable \"%s\" is not permitted within a path", + edge->name), + parser_errposition(pstate, edge->location))); + } + + /* transform the edge */ + rel = transform_merge_cypher_edge(cpstate, target_list, edge); if (in_path) { @@ -6189,10 +6408,8 @@ transform_merge_cypher_node(cypher_parsestate *cpstate, List **target_list, if (node->name != NULL) { - transform_entity *entity = find_transform_entity(cpstate, node->name, ENT_VERTEX); - /* * the vertex was previously declared, we do not need to do any setup * to create the node. From 6e314e872408b027658377d02d4304f5d55108d8 Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Wed, 21 Jun 2023 16:33:11 -0700 Subject: [PATCH 187/191] Fix issue #989: Impossible to create array with > 100 items (#1001) Fixed issue 989: Impossible to create an object with an array field of more than 100 elements. This issue is due to the function agtype_build_list taking elements as arguments. As the elements can be anything, expressions too, they need to be processed by the transform phase and resolved in the execution phase. As PG has a limitation of 100 function arguments, this restricts the size of arrays built through agtype_build_list. The fix was to break up large lists into segments of 100 items or less and then use the concatenation operator to join them in the execution phase. Added regression tests (thanks Taha!). --- regress/expected/expr.out | 160 ++++++++++++++++++++++++++++++- regress/sql/expr.sql | 81 ++++++++++++++++ src/backend/parser/cypher_expr.c | 107 +++++++++++++++++---- 3 files changed, 330 insertions(+), 18 deletions(-) diff --git a/regress/expected/expr.out b/regress/expected/expr.out index 36dd84714..4768a6992 100644 --- a/regress/expected/expr.out +++ b/regress/expected/expr.out @@ -6528,6 +6528,161 @@ SELECT * from cypher('list', $$RETURN labels(NULL)$$) as (Labels agtype); -- should return an error SELECT * from cypher('list', $$RETURN labels("string")$$) as (Labels agtype); ERROR: labels() argument must be a vertex +-- Issue 989: Impossible to create an object with an array field of more than +-- 100 elements. +SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [] }) RETURN any_vertex $$) AS (u agtype); + u +------------------------------------------------------------------------------------------- + {"id": 1688849860263937, "label": "test_label", "properties": {"largeArray": []}}::vertex +(1 row) + +SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0] }) RETURN any_vertex $$) AS (u agtype); + u +-------------------------------------------------------------------------------------------- + {"id": 1688849860263938, "label": "test_label", "properties": {"largeArray": [0]}}::vertex +(1 row) + +SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] }) RETURN any_vertex $$) AS (u agtype); + u +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 1688849860263939, "label": "test_label", "properties": {"largeArray": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]}}::vertex +(1 row) + +SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100] }) RETURN any_vertex $$) AS (u agtype); + u +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 1688849860263940, "label": "test_label", "properties": {"largeArray": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]}}::vertex +(1 row) + +SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] }) RETURN any_vertex $$) AS (u agtype); + u +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 1688849860263941, "label": "test_label", "properties": {"largeArray": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]}}::vertex +(1 row) + +SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] }) RETURN any_vertex $$) AS (u agtype); + u +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 1688849860263942, "label": "test_label", "properties": {"largeArray": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]}}::vertex +(1 row) + +SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] }) RETURN any_vertex $$) AS (u agtype); + u +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 1688849860263943, "label": "test_label", "properties": {"largeArray": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]}}::vertex +(1 row) + +-- should return 7 rows with counts: 0, 1, 100, 101, 200, 400, 800 +SELECT * FROM cypher('list', $$ MATCH (u:test_label) RETURN size(u.largeArray) $$) AS (u agtype); + u +----- + 0 + 1 + 100 + 101 + 200 + 400 + 800 +(7 rows) + +-- nested cases +SELECT * FROM cypher('list',$$ CREATE (n:xyz {array:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20,21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20,21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100], 100]}) return n $$) as (a agtype); + a +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 1970324836974593, "label": "xyz", "properties": {"array": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], 100]}}::vertex +(1 row) + +SELECT * FROM cypher('list',$$ MATCH (n:xyz) CREATE (m:xyz {array:[0,1,2,3,n.array,5,6,7,8,9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20,21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100]}) return m $$) as (a agtype); + a +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 1970324836974594, "label": "xyz", "properties": {"array": [0, 1, 2, 3, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], 100], 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]}}::vertex +(1 row) + +SELECT * FROM cypher('list',$$ MATCH (n:xyz) CREATE (m:xyz {array:[n.array,[n.array,[n.array]]]}) return m $$) as (a agtype); + a +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 1970324836974595, "label": "xyz", "properties": {"array": [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], 100], [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], 100], [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], 100]]]]}}::vertex + {"id": 1970324836974596, "label": "xyz", "properties": {"array": [[0, 1, 2, 3, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], 100], 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], [[0, 1, 2, 3, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], 100], 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], [[0, 1, 2, 3, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], 100], 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]]]]}}::vertex +(2 rows) + +-- SET +SELECT * FROM cypher('list',$$ CREATE (n:xyz)-[e:KNOWS {array:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20,21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100]}]->(m:xyz) $$) as (a agtype); + a +--- +(0 rows) + +SELECT * FROM cypher('list',$$ MATCH p=(n:xyz)-[e]->() SET n.array=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20,21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100] return n,e $$) as (a agtype, b agtype); + a | b +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 1970324836974597, "label": "xyz", "properties": {"array": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]}}::vertex | {"id": 2251799813685249, "label": "KNOWS", "end_id": 1970324836974598, "start_id": 1970324836974597, "properties": {"array": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]}}::edge +(1 row) + +SELECT * FROM cypher('list',$$ MATCH p=(n:xyz)-[e]->() SET n.array=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20,21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + e.array, 100] return n,e $$) as (a agtype, b agtype); + a | b +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 1970324836974597, "label": "xyz", "properties": {"array": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100], 100]}}::vertex | {"id": 2251799813685249, "label": "KNOWS", "end_id": 1970324836974598, "start_id": 1970324836974597, "properties": {"array": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]}}::edge +(1 row) + -- -- Cleanup -- @@ -6662,12 +6817,15 @@ NOTICE: graph "keys" has been dropped (1 row) SELECT * FROM drop_graph('list', true); -NOTICE: drop cascades to 5 other objects +NOTICE: drop cascades to 8 other objects DETAIL: drop cascades to table list._ag_label_vertex drop cascades to table list._ag_label_edge drop cascades to table list.knows drop cascades to table list."People" drop cascades to table list."Cars" +drop cascades to table list.test_label +drop cascades to table list.xyz +drop cascades to table list."KNOWS" NOTICE: graph "list" has been dropped drop_graph ------------ diff --git a/regress/sql/expr.sql b/regress/sql/expr.sql index 4623f1c70..9f91426b5 100644 --- a/regress/sql/expr.sql +++ b/regress/sql/expr.sql @@ -2627,6 +2627,87 @@ SELECT * from cypher('list', $$MATCH (u) RETURN labels(u), u$$) as (Labels agtyp SELECT * from cypher('list', $$RETURN labels(NULL)$$) as (Labels agtype); -- should return an error SELECT * from cypher('list', $$RETURN labels("string")$$) as (Labels agtype); + +-- Issue 989: Impossible to create an object with an array field of more than +-- 100 elements. +SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [] }) RETURN any_vertex $$) AS (u agtype); +SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0] }) RETURN any_vertex $$) AS (u agtype); +SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] }) RETURN any_vertex $$) AS (u agtype); +SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100] }) RETURN any_vertex $$) AS (u agtype); +SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] }) RETURN any_vertex $$) AS (u agtype); +SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] }) RETURN any_vertex $$) AS (u agtype); +SELECT * FROM cypher('list', $$ CREATE (any_vertex: test_label { `largeArray`: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] }) RETURN any_vertex $$) AS (u agtype); +-- should return 7 rows with counts: 0, 1, 100, 101, 200, 400, 800 +SELECT * FROM cypher('list', $$ MATCH (u:test_label) RETURN size(u.largeArray) $$) AS (u agtype); +-- nested cases +SELECT * FROM cypher('list',$$ CREATE (n:xyz {array:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20,21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20,21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100], 100]}) return n $$) as (a agtype); +SELECT * FROM cypher('list',$$ MATCH (n:xyz) CREATE (m:xyz {array:[0,1,2,3,n.array,5,6,7,8,9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20,21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100]}) return m $$) as (a agtype); +SELECT * FROM cypher('list',$$ MATCH (n:xyz) CREATE (m:xyz {array:[n.array,[n.array,[n.array]]]}) return m $$) as (a agtype); +-- SET +SELECT * FROM cypher('list',$$ CREATE (n:xyz)-[e:KNOWS {array:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20,21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100]}]->(m:xyz) $$) as (a agtype); +SELECT * FROM cypher('list',$$ MATCH p=(n:xyz)-[e]->() SET n.array=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20,21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100] return n,e $$) as (a agtype, b agtype); +SELECT * FROM cypher('list',$$ MATCH p=(n:xyz)-[e]->() SET n.array=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20,21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + e.array, 100] return n,e $$) as (a agtype, b agtype); + -- -- Cleanup -- diff --git a/src/backend/parser/cypher_expr.c b/src/backend/parser/cypher_expr.c index b476e0b03..644eea328 100644 --- a/src/backend/parser/cypher_expr.c +++ b/src/backend/parser/cypher_expr.c @@ -655,35 +655,108 @@ static Node *transform_cypher_map(cypher_parsestate *cpstate, cypher_map *cm) return (Node *)fexpr; } +/* + * Helper function to transform a cypher list into an agtype list. The function + * will use agtype_add to concatenate lists when the number of parameters + * exceeds 100, a PG limitation. + */ static Node *transform_cypher_list(cypher_parsestate *cpstate, cypher_list *cl) { - List *newelems = NIL; - ListCell *le; - FuncExpr *fexpr; - Oid func_oid; - - foreach (le, cl->elems) + List *abl_args = NIL; + ListCell *le = NULL; + FuncExpr *aa_lhs_arg = NULL; + FuncExpr *fexpr = NULL; + Oid abl_func_oid = InvalidOid; + Oid aa_func_oid = InvalidOid; + int nelems = 0; + int i = 0; + + /* determine which build function we need */ + nelems = list_length(cl->elems); + if (nelems == 0) { - Node *newv; - - newv = transform_cypher_expr_recurse(cpstate, lfirst(le)); - - newelems = lappend(newelems, newv); + abl_func_oid = get_ag_func_oid("agtype_build_list", 0); + } + else + { + abl_func_oid = get_ag_func_oid("agtype_build_list", 1, ANYOID); } - if (list_length(newelems) == 0) + /* get the concat function oid, if necessary */ + if (nelems > 100) { - func_oid = get_ag_func_oid("agtype_build_list", 0); + aa_func_oid = get_ag_func_oid("agtype_add", 2, AGTYPEOID, AGTYPEOID); } - else + + /* iterate through the list of elements */ + foreach (le, cl->elems) { - func_oid = get_ag_func_oid("agtype_build_list", 1, ANYOID); + Node *texpr = NULL; + + /* transform the argument */ + texpr = transform_cypher_expr_recurse(cpstate, lfirst(le)); + + /* + * If we have more than 100 elements we will need to add in the list + * concatenation function. + */ + if (i >= 100) + { + /* build the list function node argument for concatenate */ + fexpr = makeFuncExpr(abl_func_oid, AGTYPEOID, abl_args, InvalidOid, + InvalidOid, COERCE_EXPLICIT_CALL); + fexpr->location = cl->location; + + /* initial case, set up for concatenating 2 lists */ + if (aa_lhs_arg == NULL) + { + aa_lhs_arg = fexpr; + } + /* + * For every other case, concatenate the list on to the previous + * concatenate operation. + */ + else + { + List *aa_args = list_make2(aa_lhs_arg, fexpr); + + fexpr = makeFuncExpr(aa_func_oid, AGTYPEOID, aa_args, + InvalidOid, InvalidOid, + COERCE_EXPLICIT_CALL); + fexpr->location = cl->location; + + /* set the lhs to the concatenation operation */ + aa_lhs_arg = fexpr; + } + + /* reset */ + abl_args = NIL; + i = 0; + fexpr = NULL; + } + + /* now add the latest transformed expression to the list */ + abl_args = lappend(abl_args, texpr); + i++; } - fexpr = makeFuncExpr(func_oid, AGTYPEOID, newelems, InvalidOid, InvalidOid, - COERCE_EXPLICIT_CALL); + /* now build the final list function */ + fexpr = makeFuncExpr(abl_func_oid, AGTYPEOID, abl_args, InvalidOid, + InvalidOid, COERCE_EXPLICIT_CALL); fexpr->location = cl->location; + /* + * If there was a previous concatenation or list function, build a final + * concatenation function node + */ + if (aa_lhs_arg != NULL) + { + List *aa_args = list_make2(aa_lhs_arg, fexpr); + + fexpr = makeFuncExpr(aa_func_oid, AGTYPEOID, aa_args, InvalidOid, + InvalidOid, COERCE_EXPLICIT_CALL); + } + return (Node *)fexpr; } From 0ab0ebb869164b15b9da80c5f6c60cdeb15a563c Mon Sep 17 00:00:00 2001 From: Muhammad Taha Naveed Date: Thu, 22 Jun 2023 23:38:37 +0500 Subject: [PATCH 188/191] Fix issue #1002 Invalid reuse of variables in MATCH clause (#1003) * Fix invalid reuse of variables in MATCH - Added checks for invalid reuse of variables, mainly path and VLE. - Added regression tests. * Fix invalid reuse of variables in MATCH (VLE) --- regress/expected/cypher_match.out | 54 ++++++++++++- regress/expected/cypher_vle.out | 53 ++++++++++++ regress/sql/cypher_match.sql | 15 ++++ regress/sql/cypher_vle.sql | 15 ++++ src/backend/parser/cypher_clause.c | 126 ++++++++++++++++++++++++++--- 5 files changed, 253 insertions(+), 10 deletions(-) diff --git a/regress/expected/cypher_match.out b/regress/expected/cypher_match.out index aaf462272..a207cabff 100644 --- a/regress/expected/cypher_match.out +++ b/regress/expected/cypher_match.out @@ -766,7 +766,7 @@ LINE 2: MATCH (r0)-[]->() MATCH ()-[r0]->() RETURN r0 SELECT * FROM cypher('cypher_match', $$ MATCH ()-[r0]->() MATCH ()-[]->(r0) RETURN r0 $$) AS (r0 agtype); -ERROR: variable 'r0' is for a edge +ERROR: variable 'r0' is for an edge LINE 2: MATCH ()-[r0]->() MATCH ()-[]->(r0) RETURN r0 ^ SELECT * FROM cypher('cypher_match', $$ @@ -2052,6 +2052,58 @@ SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b]->(a) RETUR ERROR: duplicate edge variable 'b' within a clause LINE 1: ...pher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b]->(a) R... ^ +SELECT * FROM cypher('cypher_match', $$ MATCH p=(p) RETURN p $$)as (p agtype); +ERROR: variable "p" is for a path +LINE 1: SELECT * FROM cypher('cypher_match', $$ MATCH p=(p) RETURN p... + ^ +SELECT * FROM cypher('cypher_match', $$ MATCH p=(p)-[]->() RETURN p $$)as (p agtype); +ERROR: variable "p" is for a path +LINE 1: SELECT * FROM cypher('cypher_match', $$ MATCH p=(p)-[]->() R... + ^ +SELECT * FROM cypher('cypher_match', $$ MATCH p=()-[p]->() RETURN p $$)as (p agtype); +ERROR: variable "p" is for a path +LINE 1: ...ELECT * FROM cypher('cypher_match', $$ MATCH p=()-[p]->() RE... + ^ +SELECT * FROM cypher('cypher_match', $$ MATCH p=() MATCH (p) RETURN p $$)as (p agtype); +ERROR: variable 'p' already exists +LINE 1: ... FROM cypher('cypher_match', $$ MATCH p=() MATCH (p) RETURN ... + ^ +SELECT * FROM cypher('cypher_match', $$ MATCH p=() MATCH (p)-[]->() RETURN p $$)as (p agtype); +ERROR: variable 'p' already exists +LINE 1: ... FROM cypher('cypher_match', $$ MATCH p=() MATCH (p)-[]->() ... + ^ +SELECT * FROM cypher('cypher_match', $$ MATCH p=() MATCH ()-[p]->() RETURN p $$)as (p agtype); +ERROR: variable 'p' already exists +LINE 1: ...ROM cypher('cypher_match', $$ MATCH p=() MATCH ()-[p]->() RE... + ^ +SELECT * FROM cypher('cypher_match', $$ MATCH (p) MATCH p=() RETURN p $$)as (p agtype); +ERROR: variable "p" already exists +LINE 1: ... * FROM cypher('cypher_match', $$ MATCH (p) MATCH p=() RETUR... + ^ +SELECT * FROM cypher('cypher_match', $$ MATCH ()-[p]->() MATCH p=() RETURN p $$)as (p agtype); +ERROR: variable "p" already exists +LINE 1: ... cypher('cypher_match', $$ MATCH ()-[p]->() MATCH p=() RETUR... + ^ +SELECT * FROM cypher('cypher_match', $$ MATCH ()-[p *]-()-[p]-() RETURN 0 $$)as (p agtype); +ERROR: variable 'p' is for a VLE edge +LINE 1: ... FROM cypher('cypher_match', $$ MATCH ()-[p *]-()-[p]-() RET... + ^ +SELECT * FROM cypher('cypher_match', $$ CREATE (p) WITH p MATCH p=() RETURN p $$)as (p agtype); +ERROR: variable "p" already exists +LINE 1: ...cypher('cypher_match', $$ CREATE (p) WITH p MATCH p=() RETUR... + ^ +SELECT * FROM cypher('cypher_match', $$ CREATE p=() WITH p MATCH (p) RETURN p $$)as (p agtype); +ERROR: variable 'p' already exists +LINE 1: ...pher('cypher_match', $$ CREATE p=() WITH p MATCH (p) RETURN ... + ^ +SELECT * FROM cypher('cypher_match', $$ CREATE ()-[p:knows]->() WITH p MATCH p=() RETURN p $$)as (p agtype); +ERROR: variable "p" already exists +LINE 1: ...r_match', $$ CREATE ()-[p:knows]->() WITH p MATCH p=() RETUR... + ^ +SELECT * FROM cypher('cypher_match', $$ CREATE p=() WITH p MATCH ()-[p]->() RETURN p $$)as (p agtype); +ERROR: variable 'p' already exists +LINE 1: ...er('cypher_match', $$ CREATE p=() WITH p MATCH ()-[p]->() RE... + ^ -- -- Default alias check (issue #883) -- diff --git a/regress/expected/cypher_vle.out b/regress/expected/cypher_vle.out index 5f8f922c2..e153ce972 100644 --- a/regress/expected/cypher_vle.out +++ b/regress/expected/cypher_vle.out @@ -761,6 +761,59 @@ NOTICE: graph "mygraph" has been dropped (1 row) +-- invalid reuse of VLE +SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p]-()-[p *]-() RETURN p $$)as (p agtype); +ERROR: variable 'p' is for an edge +LINE 1: ...CT * FROM cypher('cypher_vle', $$ MATCH ()-[p]-()-[p *]-() R... + ^ +SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-()-[p]-() RETURN p $$)as (p agtype); +ERROR: variable 'p' is for a VLE edge +LINE 1: ... * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-()-[p]-() RET... + ^ +SELECT * FROM cypher('cypher_vle', $$ MATCH (p)-[p *]-() RETURN p $$)as (p agtype); +ERROR: variable 'p' is for a vertex +LINE 1: SELECT * FROM cypher('cypher_vle', $$ MATCH (p)-[p *]-() RET... + ^ +SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-(p) RETURN p $$)as (p agtype); +ERROR: variable 'p' is for a VLE edge +LINE 1: ...CT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-(p) RETURN ... + ^ +SELECT * FROM cypher('cypher_vle', $$ MATCH p=()-[p *]-() RETURN p $$)as (p agtype); +ERROR: variable "p" is for a path +LINE 1: SELECT * FROM cypher('cypher_vle', $$ MATCH p=()-[p *]-() RE... + ^ +SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-()-[p *]-() RETURN p $$)as (p agtype); +ERROR: duplicate variable 'p' +LINE 1: ... * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-()-[p *]-() R... + ^ +SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p]-() MATCH ()-[p *]-() RETURN p $$)as (p agtype); +ERROR: variable 'p' is for an edge +LINE 1: ... cypher('cypher_vle', $$ MATCH ()-[p]-() MATCH ()-[p *]-() R... + ^ +SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH ()-[p]-() RETURN p $$)as (p agtype); +ERROR: variable 'p' is for a VLE edge +LINE 1: ...ypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH ()-[p]-() RET... + ^ +SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH ()-[p *]-() RETURN p $$)as (p agtype); +ERROR: duplicate variable 'p' +LINE 1: ...ypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH ()-[p *]-() R... + ^ +SELECT * FROM cypher('cypher_vle', $$ MATCH (p) MATCH ()-[p *]-() RETURN p $$)as (p agtype); +ERROR: variable 'p' is for a vertex +LINE 1: ...* FROM cypher('cypher_vle', $$ MATCH (p) MATCH ()-[p *]-() R... + ^ +SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH (p) RETURN p $$)as (p agtype); +ERROR: variable 'p' is for a VLE edge +LINE 1: ... cypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH (p) RETURN ... + ^ +SELECT * FROM cypher('cypher_vle', $$ MATCH p=() MATCH ()-[p *]-() RETURN p $$)as (p agtype); +ERROR: variable 'p' already exists +LINE 1: ... FROM cypher('cypher_vle', $$ MATCH p=() MATCH ()-[p *]-() R... + ^ +SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH p=() RETURN p $$)as (p agtype); +ERROR: variable "p" already exists +LINE 1: ...M cypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH p=() RETUR... + ^ -- -- Clean up -- diff --git a/regress/sql/cypher_match.sql b/regress/sql/cypher_match.sql index 4228d82b3..fb6508423 100644 --- a/regress/sql/cypher_match.sql +++ b/regress/sql/cypher_match.sql @@ -945,6 +945,21 @@ SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b:knows]->(a) RETUR SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b]->()-[b]->(a) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b:knows]->(a) RETURN p $$)as (p agtype); SELECT * FROM cypher('cypher_match', $$ MATCH p=(a)-[b:knows]->()-[b]->(a) RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=(p) RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=(p)-[]->() RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=()-[p]->() RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=() MATCH (p) RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=() MATCH (p)-[]->() RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH p=() MATCH ()-[p]->() RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH (p) MATCH p=() RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH ()-[p]->() MATCH p=() RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ MATCH ()-[p *]-()-[p]-() RETURN 0 $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ CREATE (p) WITH p MATCH p=() RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ CREATE p=() WITH p MATCH (p) RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ CREATE ()-[p:knows]->() WITH p MATCH p=() RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_match', $$ CREATE p=() WITH p MATCH ()-[p]->() RETURN p $$)as (p agtype); + + -- -- Default alias check (issue #883) diff --git a/regress/sql/cypher_vle.sql b/regress/sql/cypher_vle.sql index 468135eeb..13cf05944 100644 --- a/regress/sql/cypher_vle.sql +++ b/regress/sql/cypher_vle.sql @@ -290,6 +290,21 @@ DROP FUNCTION show_list_use_vle; SELECT drop_graph('mygraph', true); +-- invalid reuse of VLE +SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p]-()-[p *]-() RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-()-[p]-() RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_vle', $$ MATCH (p)-[p *]-() RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-(p) RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_vle', $$ MATCH p=()-[p *]-() RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-()-[p *]-() RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p]-() MATCH ()-[p *]-() RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH ()-[p]-() RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH ()-[p *]-() RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_vle', $$ MATCH (p) MATCH ()-[p *]-() RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH (p) RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_vle', $$ MATCH p=() MATCH ()-[p *]-() RETURN p $$)as (p agtype); +SELECT * FROM cypher('cypher_vle', $$ MATCH ()-[p *]-() MATCH p=() RETURN p $$)as (p agtype); + -- -- Clean up -- diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 8697729df..4737600c8 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -3559,6 +3559,7 @@ static Node *create_property_constraints(cypher_parsestate *cpstate, static List *transform_match_path(cypher_parsestate *cpstate, Query *query, cypher_path *path) { + ParseState *pstate = (ParseState *)cpstate; List *qual = NIL; List *entities = NIL; FuncCall *duplicate_edge_qual; @@ -3572,6 +3573,15 @@ static List *transform_match_path(cypher_parsestate *cpstate, Query *query, { TargetEntry *path_te; + if (findTarget(query->targetList, path->var_name) != NULL) + { + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_ALIAS), + errmsg("variable \"%s\" already exists", + path->var_name), + parser_errposition(pstate, path->location))); + } + path_te = transform_match_create_path_variable(cpstate, path, entities); query->targetList = lappend(query->targetList, path_te); @@ -3649,13 +3659,51 @@ static transform_entity *transform_VLE_edge_entity(cypher_parsestate *cpstate, /* * If we have a variable name (rel name), make the target entry. Otherwise, - * there isn't a reason to create one. + * there isn't a reason to create one. Additionally, verify that it is not + * reused. */ if (rel->name != NULL) { FuncExpr *fexpr; List *args = list_make1(var); Oid func_oid = InvalidOid; + transform_entity *entity = NULL; + + te = findTarget(query->targetList, rel->name); + entity = find_variable(cpstate, rel->name); + + /* If the variable already exists, error out */ + if (te && entity) + { + if (entity->type == ENT_VERTEX) + { + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_ALIAS), + errmsg("variable '%s' is for a vertex", rel->name), + parser_errposition(pstate, rel->location))); + } + else if (entity->type == ENT_EDGE) + { + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_ALIAS), + errmsg("variable '%s' is for an edge", rel->name), + parser_errposition(pstate, rel->location))); + } + else + { + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_ALIAS), + errmsg("duplicate variable '%s'", rel->name), + parser_errposition(pstate, rel->location))); + } + } + else if (te && !entity) + { + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_ALIAS), + errmsg("variable '%s' already exists", rel->name), + parser_errposition(pstate, rel->location))); + } /* * Get the oid for the materialize function that returns a list of @@ -3803,11 +3851,22 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, */ if (node->name != NULL) { + Node *expr; + + if (path->var_name && strcmp(node->name, path->var_name) == 0) + { + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_ALIAS), + errmsg("variable \"%s\" is for a path", + node->name), + parser_errposition(pstate, node->location))); + } + /* * Checks the previous clauses to see if the variable already * exists. */ - Node *expr = colNameToVar(pstate, node->name, false, + expr = colNameToVar(pstate, node->name, false, node->location); if (expr != NULL) { @@ -3910,6 +3969,16 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, rel = lfirst(lc); + if (rel->name && path->var_name && + strcmp(rel->name, path->var_name) == 0) + { + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_ALIAS), + errmsg("variable \"%s\" is for a path", + rel->name), + parser_errposition(pstate, rel->location))); + } + /* * There are 2 edge cases - 1) a regular edge and 2) a VLE edge. * A VLE edge is not added like a regular edge - it is a function. @@ -4326,11 +4395,29 @@ static Expr *transform_cypher_edge(cypher_parsestate *cpstate, } /* If the variable already exists, verify that it is for an edge */ - if (refs_var && entity->type != ENT_EDGE) + if (refs_var) + { + if (entity->type == ENT_VERTEX) + { + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_ALIAS), + errmsg("variable '%s' is for a vertex", rel->name), + parser_errposition(pstate, rel->location))); + } + else if (entity->type == ENT_VLE_EDGE) + { + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_ALIAS), + errmsg("variable '%s' is for a VLE edge", rel->name), + parser_errposition(pstate, rel->location))); + } + } + + else if (te && !entity) { ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("variable '%s' is for a vertex", rel->name), + (errcode(ERRCODE_DUPLICATE_ALIAS), + errmsg("variable '%s' already exists", rel->name), parser_errposition(pstate, rel->location))); } } @@ -4393,7 +4480,7 @@ static Expr *transform_cypher_edge(cypher_parsestate *cpstate, if (expr == NULL && refs_var) { ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + (errcode(ERRCODE_DUPLICATE_ALIAS), errmsg("duplicate edge variable '%s' within a clause", rel->name), parser_errposition(pstate, rel->location))); @@ -4545,11 +4632,32 @@ static Expr *transform_cypher_node(cypher_parsestate *cpstate, } /* If the variable already exists, verify that it is for a vertex */ - if (refs_var && entity->type != ENT_VERTEX) + if (refs_var) + { + if (entity->type == ENT_EDGE) + { + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_ALIAS), + errmsg("variable '%s' is for an edge", node->name), + parser_errposition(pstate, node->location))); + } + else if (entity->type == ENT_VLE_EDGE) + { + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_ALIAS), + errmsg("variable '%s' is for a VLE edge", node->name), + parser_errposition(pstate, node->location))); + } + } + + /* If their is a te but no entity, it implies that their is + * some variable that exists but not an edge,vle or a vertex + */ + else if (te && !entity) { ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("variable '%s' is for a edge", node->name), + (errcode(ERRCODE_DUPLICATE_ALIAS), + errmsg("variable '%s' already exists", node->name), parser_errposition(pstate, node->location))); } } From d3a3bd5d0c3dd632588ef88c7d1e450cbfa9d14b Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Mon, 26 Jun 2023 20:35:28 -0400 Subject: [PATCH 189/191] Fix misspellings in many AGE files (#985) Corrects misspellings identified by the - [check-spelling action](https://github.com/marketplace/actions/check-spelling). The misspellings were reported at - https://github.com/jsoref/age/actions/runs/5251076994#summary-14208871240 --- CONTRIBUTING.md | 2 +- README.md | 2 +- RELEASE | 2 +- drivers/README | 2 +- drivers/golang/README.md | 2 +- drivers/golang/install.bat | 2 +- drivers/golang/install.sh | 2 +- drivers/jdbc/README.md | 2 +- drivers/nodejs/README.md | 2 +- drivers/python/README.md | 4 ++-- drivers/python/age/age.py | 4 ++-- regress/expected/age_global_graph.out | 4 ++-- regress/expected/cypher_call.out | 2 +- regress/expected/cypher_create.out | 2 +- regress/expected/cypher_delete.out | 6 +++--- regress/expected/cypher_merge.out | 4 ++-- regress/expected/cypher_set.out | 4 ++-- regress/expected/expr.out | 16 +++++++-------- regress/expected/index.out | 2 +- regress/sql/age_global_graph.sql | 4 ++-- regress/sql/cypher_call.sql | 2 +- regress/sql/cypher_delete.sql | 6 +++--- regress/sql/cypher_merge.sql | 4 ++-- regress/sql/cypher_set.sql | 4 ++-- regress/sql/expr.sql | 14 ++++++------- regress/sql/index.sql | 2 +- src/backend/commands/label_commands.c | 4 ++-- src/backend/executor/cypher_create.c | 2 +- src/backend/executor/cypher_delete.c | 4 ++-- src/backend/executor/cypher_merge.c | 8 ++++---- src/backend/executor/cypher_set.c | 2 +- src/backend/nodes/cypher_readfuncs.c | 4 ++-- src/backend/optimizer/cypher_paths.c | 8 ++++---- src/backend/parser/cypher_clause.c | 26 ++++++++++++------------ src/backend/parser/cypher_expr.c | 12 +++++------ src/backend/parser/cypher_gram.y | 4 ++-- src/backend/parser/cypher_parse_node.c | 4 ++-- src/backend/parser/cypher_parser.c | 2 +- src/backend/utils/adt/age_global_graph.c | 4 ++-- src/backend/utils/adt/age_vle.c | 4 ++-- src/backend/utils/adt/agtype.c | 10 ++++----- src/backend/utils/adt/agtype_util.c | 2 +- src/backend/utils/graph_generation.c | 2 +- src/include/nodes/cypher_readfuncs.h | 2 +- src/include/utils/age_global_graph.h | 2 +- 45 files changed, 104 insertions(+), 104 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d13839179..69eab0548 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -20,7 +20,7 @@ We strongly recommend you to subscribe the mailing lists, join the Apache AGE Di ## Pull Requests -Changes to AGE source code are proposed, reviewed, and committed via Github pull requests (described in Code Convention). Pull requests are a great way to get your ideas into this repository. Anyone can view and comment on active changes here. Reviewing others' changes are a good way to learn how the change process works and gain exposure to activity in various parts of the code. You can help by reviewing the changes, asking questions, or pointing out issues as simple as typos. +Changes to AGE source code are proposed, reviewed, and committed via GitHub pull requests (described in Code Convention). Pull requests are a great way to get your ideas into this repository. Anyone can view and comment on active changes here. Reviewing others' changes are a good way to learn how the change process works and gain exposure to activity in various parts of the code. You can help by reviewing the changes, asking questions, or pointing out issues as simple as typos. ## Documentation Changes diff --git a/README.md b/README.md index c6e14e4d8..f376c1bdd 100644 --- a/README.md +++ b/README.md @@ -128,7 +128,7 @@ sudo apt-get install build-essential libreadline-dev zlib1g-dev flex bison Apache AGE is intended to be simple to install and run. It can be installed with Docker and other traditional ways.

- Install PosgtreSQL + Install PostgreSQL

You will need to install an AGE compatible version of Postgres, for now AGE supports Postgres 11, 12 & 13. Supporting the latest versions is on AGE roadmap. diff --git a/RELEASE b/RELEASE index 027b7034b..7707ed1b4 100644 --- a/RELEASE +++ b/RELEASE @@ -24,7 +24,7 @@ Apache AGE 1.3.0 - Release Notes Implement plus-equal operator in SET clause. (#638) Implement CI test for python driver. (#587) Move from travis CI to github actions for build. (#673) - Update all driver CIs to Github actions. + Update all driver CIs to GitHub actions. Fix build warnings. Fix golang driver workflow (#563) Updated Readme for drivers folder. (#642) diff --git a/drivers/README b/drivers/README index 19f34d8b5..b890537f6 100644 --- a/drivers/README +++ b/drivers/README @@ -19,5 +19,5 @@ This folder contains drivers for specific languages ### For more information about [Apache AGE](https://age.apache.org/) * Apache Age : https://age.apache.org/ -* Github : https://github.com/apache/age +* GitHub : https://github.com/apache/age * Document : https://age.apache.org/age-manual/master/index.html diff --git a/drivers/golang/README.md b/drivers/golang/README.md index 89bd899f3..b4adc6646 100644 --- a/drivers/golang/README.md +++ b/drivers/golang/README.md @@ -31,7 +31,7 @@ Check [latest version](https://github.com/apache/age/releases) ### For more information about [Apache AGE](https://age.apache.org/) * Apache Age : https://age.apache.org/ -* Github : https://github.com/apache/age +* GitHub : https://github.com/apache/age * Document : https://age.apache.org/docs/ ### Check AGE loaded on your PostgreSQL diff --git a/drivers/golang/install.bat b/drivers/golang/install.bat index fc2baddbf..dbf032e56 100644 --- a/drivers/golang/install.bat +++ b/drivers/golang/install.bat @@ -39,7 +39,7 @@ if not exist "%ProgramFiles%\ANTLR" ( echo ANTLR installation complete. -rem Checking Compatablity for Golang +rem Checking Compatibility for Golang echo Checking if current version of Golang >= Go 1.18..... set "minimum_version=1.18" set "installed_version=" diff --git a/drivers/golang/install.sh b/drivers/golang/install.sh index 5fbc377f2..8cd1a7d80 100755 --- a/drivers/golang/install.sh +++ b/drivers/golang/install.sh @@ -104,7 +104,7 @@ if ! command -v go >/dev/null 2>&1 || { [ $(go version | grep -o -E '[0-9]+\.[0- sudo open -w golang.pkg elif [[ "$os" == "Linux" ]]; then - mdkir -p ~/tmp/go1.20.2 + mkdir -p ~/tmp/go1.20.2 cd ~/tmp/go1.20.2 if [[ "$arch" == "x86_64" ]]; then curl "https://go.dev/dl/go1.20.2.linux-amd64.tar.gz" -o go1.20.2.tar.gz diff --git a/drivers/jdbc/README.md b/drivers/jdbc/README.md index d22373030..c4369de0e 100644 --- a/drivers/jdbc/README.md +++ b/drivers/jdbc/README.md @@ -94,5 +94,5 @@ Vertex : Country, Props : {name=US} ## For more information about [Apache AGE](https://age.apache.org/) - Apache Age : [https://age.apache.org/](https://age.apache.org/) -- Github : [https://github.com/apache/age](https://github.com/apache/age) +- GitHub : [https://github.com/apache/age](https://github.com/apache/age) - Document : [https://age.apache.org/age-manual/master/index.html](https://age.apache.org/age-manual/master/index.html) diff --git a/drivers/nodejs/README.md b/drivers/nodejs/README.md index c15632200..283010cc6 100644 --- a/drivers/nodejs/README.md +++ b/drivers/nodejs/README.md @@ -48,5 +48,5 @@ const results: QueryResultRow = await client?.query(` ``` ### For more information about [Apache AGE](https://age.apache.org/) * Apache Age : https://age.apache.org/ -* Github : https://github.com/apache/age +* GitHub : https://github.com/apache/age * Document : https://age.apache.org/age-manual/master/index.html diff --git a/drivers/python/README.md b/drivers/python/README.md index c069f15ec..61430629d 100644 --- a/drivers/python/README.md +++ b/drivers/python/README.md @@ -19,7 +19,7 @@ AGType parser and driver support for [Apache AGE](https://age.apache.org/), grap ### Features * Unmarshal AGE result data(AGType) to Vertex, Edge, Path -* Cypher query support for Psycopg2 PostreSQL driver (enables to use cypher queries directly) +* Cypher query support for Psycopg2 PostgreSQL driver (enables to use cypher queries directly) ### Prerequisites * over Python 3.9 @@ -58,7 +58,7 @@ python setup.py install ### For more information about [Apache AGE](https://age.apache.org/) * Apache Age : https://age.apache.org/ -* Github : https://github.com/apache/age +* GitHub : https://github.com/apache/age * Document : https://age.apache.org/age-manual/master/index.html ### Check AGE loaded on your PostgreSQL diff --git a/drivers/python/age/age.py b/drivers/python/age/age.py index 7ba4a27f7..98b99bb71 100644 --- a/drivers/python/age/age.py +++ b/drivers/python/age/age.py @@ -113,7 +113,7 @@ def execCypher(conn:ext.connection, graphName:str, cypherStmt:str, cols:list=Non raise _EXCEPTION_NoConnection cursor = conn.cursor() - #clean up the string for mogrificiation + #clean up the string for mogrification cypherStmt = cypherStmt.replace("\n", "") cypherStmt = cypherStmt.replace("\t", "") cypher = str(cursor.mogrify(cypherStmt, params)) @@ -146,7 +146,7 @@ def execCypher(conn:ext.connection, graphName:str, cypherStmt:str, cols:list=Non def cypher(cursor:ext.cursor, graphName:str, cypherStmt:str, cols:list=None, params:tuple=None) -> ext.cursor : - #clean up the string for mogrificiation + #clean up the string for mogrification cypherStmt = cypherStmt.replace("\n", "") cypherStmt = cypherStmt.replace("\t", "") cypher = str(cursor.mogrify(cypherStmt, params)) diff --git a/regress/expected/age_global_graph.out b/regress/expected/age_global_graph.out index b98a370d9..73377b314 100644 --- a/regress/expected/age_global_graph.out +++ b/regress/expected/age_global_graph.out @@ -93,7 +93,7 @@ SELECT * FROM cypher('ag_graph_1', $$ RETURN delete_global_graphs('ag_graph_1') (1 row) -- delete ag_graph_3's context --- should return true(succeed) beacuse the previous commands should not delete the 3rd graph's context +-- should return true(succeed) because the previous commands should not delete the 3rd graph's context SELECT * FROM cypher('ag_graph_3', $$ RETURN delete_global_graphs('ag_graph_3') $$) AS (result agtype); result -------- @@ -120,7 +120,7 @@ SELECT * FROM cypher('ag_graph_3', $$ RETURN delete_global_graphs('ag_graph_3') false (1 row) ---- delete unitialized graph context +--- delete uninitialized graph context --- should throw exception graph "ag_graph_4" does not exist SELECT * FROM cypher('ag_graph_4', $$ RETURN delete_global_graphs('ag_graph_4') $$) AS (result agtype); ERROR: graph "ag_graph_4" does not exist diff --git a/regress/expected/cypher_call.out b/regress/expected/cypher_call.out index a7862b5d0..f7e45a050 100644 --- a/regress/expected/cypher_call.out +++ b/regress/expected/cypher_call.out @@ -75,7 +75,7 @@ SELECT * FROM cypher('cypher_call', $$CALL call_stmt_test.add_agtype(1,2)$$) as 3 (1 row) -/* non-existent schema should fail */ +/* nonexistent schema should fail */ SELECT * FROM cypher('cypher_call', $$CALL ag_catalog.add_agtype(1,2)$$) as (sqrt agtype); ERROR: function ag_catalog.add_agtype(agtype, agtype) does not exist LINE 2: ...cypher('cypher_call', $$CALL ag_catalog.add_agtype(1,2)$$) a... diff --git a/regress/expected/cypher_create.out b/regress/expected/cypher_create.out index 8bef1d05e..9e5b1a240 100644 --- a/regress/expected/cypher_create.out +++ b/regress/expected/cypher_create.out @@ -538,7 +538,7 @@ cypher('cypher_create', $$ CREATE (b) RETURN b $$) as t(b agtype); -ERROR: cypher create clause cannot be rescaned +ERROR: cypher create clause cannot be rescanned HINT: its unsafe to use joins in a query with a Cypher CREATE clause -- column definition list for CREATE clause must contain a single agtype -- attribute diff --git a/regress/expected/cypher_delete.out b/regress/expected/cypher_delete.out index 8760a4881..d7d198261 100644 --- a/regress/expected/cypher_delete.out +++ b/regress/expected/cypher_delete.out @@ -84,7 +84,7 @@ SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n RETURN n$$) AS (a agty {"id": 844424930131973, "label": "v", "properties": {}}::vertex (2 rows) ---Test 4: DETACH DELECT a vertex +--Test 4: DETACH DELETE a vertex SELECT * FROM cypher('cypher_delete', $$CREATE (:v)-[:e]->(:v)$$) AS (a agtype); a --- @@ -103,7 +103,7 @@ SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); {"id": 844424930131975, "label": "v", "properties": {}}::vertex (1 row) ---Test 4: DETACH DELECT two vertices tied to the same edge +--Test 4: DETACH DELETE two vertices tied to the same edge SELECT * FROM cypher('cypher_delete', $$CREATE (:v)-[:e]->(:v)$$) AS (a agtype); a --- @@ -115,7 +115,7 @@ SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->(n2) DETACH DELETE n1, n2 {"id": 1125899906842627, "label": "e", "end_id": 844424930131977, "start_id": 844424930131976, "properties": {}}::edge (1 row) ---Test 4: DETACH DELECT a vertex +--Test 4: DETACH DELETE a vertex SELECT * FROM cypher('cypher_delete', $$CREATE (:v)-[:e]->(:v)$$) AS (a agtype); a --- diff --git a/regress/expected/cypher_merge.out b/regress/expected/cypher_merge.out index ab99aebea..2d6c2ef08 100644 --- a/regress/expected/cypher_merge.out +++ b/regress/expected/cypher_merge.out @@ -132,7 +132,7 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtyp (0 rows) /* - * test 5: Prev clause has results, path does not exist (differnt property name) + * test 5: Prev clause has results, path does not exist (different property name) */ --data setup SELECT * FROM cypher('cypher_merge', $$CREATE ({i: "Hello Merge"}) $$) AS (a agtype); @@ -398,7 +398,7 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtyp (0 rows) /* - * test 13: edge doesn't exists (differnt label), using MATCH + * test 13: edge doesn't exists (different label), using MATCH */ -- setup SELECT * FROM cypher('cypher_merge', $$CREATE ()-[:e]->() $$) AS (a agtype); diff --git a/regress/expected/cypher_set.out b/regress/expected/cypher_set.out index 2caea9373..dd575d6a3 100644 --- a/regress/expected/cypher_set.out +++ b/regress/expected/cypher_set.out @@ -358,7 +358,7 @@ SELECT set_test(); (10 rows) -- --- Updating multiple fieds +-- Updating multiple fields -- SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = 3, n.j = 5 RETURN n $$) AS (a agtype); a @@ -768,7 +768,7 @@ $$) AS (p agtype); {"id": 1970324836974593, "label": "Juan", "properties": {}}::vertex (1 row) --- test assigning non-map to an enitity +-- test assigning non-map to an entity SELECT * FROM cypher('cypher_set_1', $$ MATCH (p {name: 'Peter'}) SET p = "Peter" diff --git a/regress/expected/expr.out b/regress/expected/expr.out index 4768a6992..1dfcba9db 100644 --- a/regress/expected/expr.out +++ b/regress/expected/expr.out @@ -1147,7 +1147,7 @@ $$) AS r(result agtype); (3 rows) -- ---Coearce to Postgres 3 int types (smallint, int, bigint) +--Coerce to Postgres 3 int types (smallint, int, bigint) -- SELECT create_graph('type_coercion'); NOTICE: graph "type_coercion" has been created @@ -1441,9 +1441,9 @@ RETURN ''::int $$) AS r(result agtype); ERROR: invalid input syntax for integer: "" SELECT * FROM cypher('expr', $$ -RETURN 'falze'::int +RETURN 'false_'::int $$) AS r(result agtype); -ERROR: invalid input syntax for integer: "falze" +ERROR: invalid input syntax for integer: "false_" -- -- Test from an agtype value to agtype int -- @@ -1465,7 +1465,7 @@ RETURN ''::bool $$) AS r(result agtype); ERROR: typecast expression must be an integer or a boolean SELECT * FROM cypher('expr', $$ -RETURN 'falze'::bool +RETURN 'false_'::bool $$) AS r(result agtype); ERROR: typecast expression must be an integer or a boolean -- Test from an agtype value to an agtype numeric @@ -2791,7 +2791,7 @@ $$) AS (toBoolean agtype); -- should return null SELECT * FROM cypher('expr', $$ - RETURN toBoolean("falze") + RETURN toBoolean("false_") $$) AS (toBoolean agtype); toboolean ----------- @@ -2861,7 +2861,7 @@ $$) AS (toFloat agtype); -- should return null SELECT * FROM cypher('expr', $$ - RETURN toFloat("falze") + RETURN toFloat("false_") $$) AS (toFloat agtype); tofloat --------- @@ -2931,7 +2931,7 @@ $$) AS (toInteger agtype); -- should return null SELECT * FROM cypher('expr', $$ - RETURN toInteger("falze") + RETURN toInteger("false_") $$) AS (toInteger agtype); tointeger ----------- @@ -5679,7 +5679,7 @@ SELECT * FROM cypher('UCSC', $$ RETURN collect(5) $$) AS (result agtype); [5] (1 row) --- should return an empty aray +-- should return an empty array SELECT * FROM cypher('UCSC', $$ RETURN collect(NULL) $$) AS (empty agtype); empty ------- diff --git a/regress/expected/index.out b/regress/expected/index.out index c4f9012b3..f911900ab 100644 --- a/regress/expected/index.out +++ b/regress/expected/index.out @@ -254,7 +254,7 @@ SELECT * FROM cypher('cypher_index', $$ (us)<-[:has_city]-(:City {city_id: 3, name:"Los Angeles", west_coast: true, country_code:"US"}), (us)<-[:has_city]-(:City {city_id: 4, name:"Seattle", west_coast: true, country_code:"US"}), (ca)<-[:has_city]-(:City {city_id: 5, name:"Vancouver", west_coast: true, country_code:"CA"}), - (ca)<-[:has_city]-(:City {city_id: 6, name:"Toroto", west_coast: false, country_code:"CA"}), + (ca)<-[:has_city]-(:City {city_id: 6, name:"Toronto", west_coast: false, country_code:"CA"}), (ca)<-[:has_city]-(:City {city_id: 7, name:"Montreal", west_coast: false, country_code:"CA"}), (mx)<-[:has_city]-(:City {city_id: 8, name:"Mexico City", west_coast: false, country_code:"MX"}), (mx)<-[:has_city]-(:City {city_id: 9, name:"Monterrey", west_coast: false, country_code:"MX"}), diff --git a/regress/sql/age_global_graph.sql b/regress/sql/age_global_graph.sql index 13b81a9ed..badc0b5b2 100644 --- a/regress/sql/age_global_graph.sql +++ b/regress/sql/age_global_graph.sql @@ -37,7 +37,7 @@ SELECT * FROM cypher('ag_graph_2', $$ RETURN delete_global_graphs('ag_graph_2') SELECT * FROM cypher('ag_graph_1', $$ RETURN delete_global_graphs('ag_graph_1') $$) AS (result agtype); -- delete ag_graph_3's context --- should return true(succeed) beacuse the previous commands should not delete the 3rd graph's context +-- should return true(succeed) because the previous commands should not delete the 3rd graph's context SELECT * FROM cypher('ag_graph_3', $$ RETURN delete_global_graphs('ag_graph_3') $$) AS (result agtype); -- delete all graphs' context again @@ -46,7 +46,7 @@ SELECT * FROM cypher('ag_graph_2', $$ RETURN delete_global_graphs('ag_graph_2') SELECT * FROM cypher('ag_graph_1', $$ RETURN delete_global_graphs('ag_graph_1') $$) AS (result agtype); SELECT * FROM cypher('ag_graph_3', $$ RETURN delete_global_graphs('ag_graph_3') $$) AS (result agtype); ---- delete unitialized graph context +--- delete uninitialized graph context --- should throw exception graph "ag_graph_4" does not exist SELECT * FROM cypher('ag_graph_4', $$ RETURN delete_global_graphs('ag_graph_4') $$) AS (result agtype); diff --git a/regress/sql/cypher_call.sql b/regress/sql/cypher_call.sql index 9f600a96f..992948c19 100644 --- a/regress/sql/cypher_call.sql +++ b/regress/sql/cypher_call.sql @@ -49,7 +49,7 @@ SELECT * FROM cypher('cypher_call', $$CALL sqrt(64) YIELD squirt$$) as (sqrt agt /* qualified name */ SELECT * FROM cypher('cypher_call', $$CALL call_stmt_test.add_agtype(1,2)$$) as (sqrt agtype); -/* non-existent schema should fail */ +/* nonexistent schema should fail */ SELECT * FROM cypher('cypher_call', $$CALL ag_catalog.add_agtype(1,2)$$) as (sqrt agtype); /* CALL YIELD WHERE, should fail */ diff --git a/regress/sql/cypher_delete.sql b/regress/sql/cypher_delete.sql index 05accc5b2..38d911683 100644 --- a/regress/sql/cypher_delete.sql +++ b/regress/sql/cypher_delete.sql @@ -43,18 +43,18 @@ SELECT * FROM cypher('cypher_delete', $$MATCH()-[e]->() DELETE e RETURN e$$) AS --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) DELETE n RETURN n$$) AS (a agtype); ---Test 4: DETACH DELECT a vertex +--Test 4: DETACH DELETE a vertex SELECT * FROM cypher('cypher_delete', $$CREATE (:v)-[:e]->(:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->(n2) DETACH DELETE n1 RETURN e$$) AS (a agtype); --Cleanup SELECT * FROM cypher('cypher_delete', $$MATCH(n) RETURN n$$) AS (a agtype); ---Test 4: DETACH DELECT two vertices tied to the same edge +--Test 4: DETACH DELETE two vertices tied to the same edge SELECT * FROM cypher('cypher_delete', $$CREATE (:v)-[:e]->(:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->(n2) DETACH DELETE n1, n2 RETURN e$$) AS (a agtype); ---Test 4: DETACH DELECT a vertex +--Test 4: DETACH DELETE a vertex SELECT * FROM cypher('cypher_delete', $$CREATE (:v)-[:e]->(:v)$$) AS (a agtype); SELECT * FROM cypher('cypher_delete', $$MATCH(n1)-[e]->(n2) DETACH DELETE n1, n2 RETURN e$$) AS (a agtype); diff --git a/regress/sql/cypher_merge.sql b/regress/sql/cypher_merge.sql index 81c679c5a..9d2a11d67 100644 --- a/regress/sql/cypher_merge.sql +++ b/regress/sql/cypher_merge.sql @@ -80,7 +80,7 @@ SELECT * FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype); SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* - * test 5: Prev clause has results, path does not exist (differnt property name) + * test 5: Prev clause has results, path does not exist (different property name) */ --data setup SELECT * FROM cypher('cypher_merge', $$CREATE ({i: "Hello Merge"}) $$) AS (a agtype); @@ -216,7 +216,7 @@ SELECT count(*) FROM cypher('cypher_merge', $$MATCH (n) RETURN n$$) AS (n agtype SELECT * FROM cypher('cypher_merge', $$MATCH (n) DETACH DELETE n $$) AS (a agtype); /* - * test 13: edge doesn't exists (differnt label), using MATCH + * test 13: edge doesn't exists (different label), using MATCH */ -- setup SELECT * FROM cypher('cypher_merge', $$CREATE ()-[:e]->() $$) AS (a agtype); diff --git a/regress/sql/cypher_set.sql b/regress/sql/cypher_set.sql index 59bd0790b..69dea2e4b 100644 --- a/regress/sql/cypher_set.sql +++ b/regress/sql/cypher_set.sql @@ -126,7 +126,7 @@ SELECT set_test(); SELECT set_test(); -- --- Updating multiple fieds +-- Updating multiple fields -- SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = 3, n.j = 5 RETURN n $$) AS (a agtype); @@ -247,7 +247,7 @@ SELECT * FROM cypher('cypher_set_1', $$ RETURN p $$) AS (p agtype); --- test assigning non-map to an enitity +-- test assigning non-map to an entity SELECT * FROM cypher('cypher_set_1', $$ MATCH (p {name: 'Peter'}) SET p = "Peter" diff --git a/regress/sql/expr.sql b/regress/sql/expr.sql index 9f91426b5..186cc6fc6 100644 --- a/regress/sql/expr.sql +++ b/regress/sql/expr.sql @@ -543,7 +543,7 @@ MATCH (n:Person) WHERE n.name =~ 'J.*' RETURN n $$) AS r(result agtype); -- ---Coearce to Postgres 3 int types (smallint, int, bigint) +--Coerce to Postgres 3 int types (smallint, int, bigint) -- SELECT create_graph('type_coercion'); SELECT * FROM cypher('type_coercion', $$ @@ -698,7 +698,7 @@ SELECT * FROM cypher('expr', $$ RETURN ''::int $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ -RETURN 'falze'::int +RETURN 'false_'::int $$) AS r(result agtype); -- -- Test from an agtype value to agtype int @@ -715,7 +715,7 @@ SELECT * FROM cypher('expr', $$ RETURN ''::bool $$) AS r(result agtype); SELECT * FROM cypher('expr', $$ -RETURN 'falze'::bool +RETURN 'false_'::bool $$) AS r(result agtype); -- Test from an agtype value to an agtype numeric -- @@ -1256,7 +1256,7 @@ SELECT * FROM cypher('expr', $$ $$) AS (toBoolean agtype); -- should return null SELECT * FROM cypher('expr', $$ - RETURN toBoolean("falze") + RETURN toBoolean("false_") $$) AS (toBoolean agtype); SELECT * FROM cypher('expr', $$ RETURN toBoolean(null) @@ -1286,7 +1286,7 @@ SELECT * FROM cypher('expr', $$ $$) AS (toFloat agtype); -- should return null SELECT * FROM cypher('expr', $$ - RETURN toFloat("falze") + RETURN toFloat("false_") $$) AS (toFloat agtype); SELECT * FROM cypher('expr', $$ RETURN toFloat(null) @@ -1316,7 +1316,7 @@ SELECT * FROM cypher('expr', $$ $$) AS (toInteger agtype); -- should return null SELECT * FROM cypher('expr', $$ - RETURN toInteger("falze") + RETURN toInteger("false_") $$) AS (toInteger agtype); SELECT * FROM cypher('expr', $$ RETURN toInteger(null) @@ -2385,7 +2385,7 @@ AS (gpa1 agtype, gpa2 agtype); SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN collect(u.zip), collect(u.zip) $$) AS (zip1 agtype, zip2 agtype); SELECT * FROM cypher('UCSC', $$ RETURN collect(5) $$) AS (result agtype); --- should return an empty aray +-- should return an empty array SELECT * FROM cypher('UCSC', $$ RETURN collect(NULL) $$) AS (empty agtype); SELECT * FROM cypher('UCSC', $$ MATCH (u) WHERE u.name =~ "doesn't exist" RETURN collect(u.name) $$) AS (name agtype); diff --git a/regress/sql/index.sql b/regress/sql/index.sql index 95322082d..aac1dc40e 100644 --- a/regress/sql/index.sql +++ b/regress/sql/index.sql @@ -159,7 +159,7 @@ SELECT * FROM cypher('cypher_index', $$ (us)<-[:has_city]-(:City {city_id: 3, name:"Los Angeles", west_coast: true, country_code:"US"}), (us)<-[:has_city]-(:City {city_id: 4, name:"Seattle", west_coast: true, country_code:"US"}), (ca)<-[:has_city]-(:City {city_id: 5, name:"Vancouver", west_coast: true, country_code:"CA"}), - (ca)<-[:has_city]-(:City {city_id: 6, name:"Toroto", west_coast: false, country_code:"CA"}), + (ca)<-[:has_city]-(:City {city_id: 6, name:"Toronto", west_coast: false, country_code:"CA"}), (ca)<-[:has_city]-(:City {city_id: 7, name:"Montreal", west_coast: false, country_code:"CA"}), (mx)<-[:has_city]-(:City {city_id: 8, name:"Mexico City", west_coast: false, country_code:"MX"}), (mx)<-[:has_city]-(:City {city_id: 9, name:"Monterrey", west_coast: false, country_code:"MX"}), diff --git a/src/backend/commands/label_commands.c b/src/backend/commands/label_commands.c index f1a0f9edc..b696e9637 100644 --- a/src/backend/commands/label_commands.c +++ b/src/backend/commands/label_commands.c @@ -538,7 +538,7 @@ static FuncCall *build_id_default_func_expr(char *graph_name, char *label_name, nextval_func = makeFuncCall(nextval_func_name, nextval_func_args, -1); /* - * Build a node that contructs the graphid from the label id function + * Build a node that constructs the graphid from the label id function * and the next val function for the given sequence. */ graphid_func_name = list_make2(makeString("ag_catalog"), @@ -805,7 +805,7 @@ static void remove_relation(List *qname) rel->schemaname, rel->relname))); } - // concurent is false + // concurrent is false ObjectAddressSet(address, RelationRelationId, rel_oid); diff --git a/src/backend/executor/cypher_create.c b/src/backend/executor/cypher_create.c index 083ddd50c..bf349e8ac 100644 --- a/src/backend/executor/cypher_create.c +++ b/src/backend/executor/cypher_create.c @@ -304,7 +304,7 @@ static void end_cypher_create(CustomScanState *node) static void rescan_cypher_create(CustomScanState *node) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cypher create clause cannot be rescaned"), + errmsg("cypher create clause cannot be rescanned"), errhint("its unsafe to use joins in a query with a Cypher CREATE clause"))); } diff --git a/src/backend/executor/cypher_delete.c b/src/backend/executor/cypher_delete.c index 9344a8657..866432d6b 100644 --- a/src/backend/executor/cypher_delete.c +++ b/src/backend/executor/cypher_delete.c @@ -212,7 +212,7 @@ static void rescan_cypher_delete(CustomScanState *node) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cypher DELETE clause cannot be rescaned"), + errmsg("cypher DELETE clause cannot be rescanned"), errhint("its unsafe to use joins in a query with a Cypher DELETE clause"))); } @@ -484,7 +484,7 @@ static void find_connected_edges(CustomScanState *node, char *graph_name, * any edges attached to it. * * XXX: If we implement an on-disc graph storage system. Such as - * an adjacency matrix, the performace of this check can be massively + * an adjacency matrix, the performance of this check can be massively * improved. However, right now we have to scan every edge to see if * one has this vertex as a start or end vertex. */ diff --git a/src/backend/executor/cypher_merge.c b/src/backend/executor/cypher_merge.c index 67112dd0b..0ac49761d 100644 --- a/src/backend/executor/cypher_merge.c +++ b/src/backend/executor/cypher_merge.c @@ -64,7 +64,7 @@ const CustomExecMethods cypher_merge_exec_methods = {MERGE_SCAN_STATE_NAME, NULL, NULL, NULL, NULL}; /* - * Initializes the MERGE Execution Node at the begginning of the execution + * Initializes the MERGE Execution Node at the beginning of the execution * phase. */ static void begin_cypher_merge(CustomScanState *node, EState *estate, @@ -308,7 +308,7 @@ static void mark_tts_isnull(TupleTableSlot *slot) /* * Function that is called mid-execution. This function will call * its subtree in the execution tree, and depending on the results - * create the new path, and depending on the the context of the MERGE + * create the new path, and depending on the context of the MERGE * within the query pass data to the parent execution node. * * Returns a TupleTableSlot with the next tuple to it parent or @@ -491,7 +491,7 @@ static TupleTableSlot *exec_cypher_merge(CustomScanState *node) Assert(css->found_a_path == false); /* - * This block of sub-case 1 should only be executued once. To + * This block of sub-case 1 should only be executed once. To * create the single path if the path does not exist. If we find * ourselves here again, the internal state of the MERGE execution * node was incorrectly altered. @@ -594,7 +594,7 @@ static void rescan_cypher_merge(CustomScanState *node) { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cypher merge clause cannot be rescaned"), + errmsg("cypher merge clause cannot be rescanned"), errhint("its unsafe to use joins in a query with a Cypher MERGE clause"))); } diff --git a/src/backend/executor/cypher_set.c b/src/backend/executor/cypher_set.c index 5bd7b41b7..6afa2c8a3 100644 --- a/src/backend/executor/cypher_set.c +++ b/src/backend/executor/cypher_set.c @@ -633,7 +633,7 @@ static void rescan_cypher_set(CustomScanState *node) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cypher %s clause cannot be rescaned", + errmsg("cypher %s clause cannot be rescanned", clause_name), errhint("its unsafe to use joins in a query with a Cypher %s clause", clause_name))); } diff --git a/src/backend/nodes/cypher_readfuncs.c b/src/backend/nodes/cypher_readfuncs.c index a74e89683..7ae64b899 100644 --- a/src/backend/nodes/cypher_readfuncs.c +++ b/src/backend/nodes/cypher_readfuncs.c @@ -36,11 +36,11 @@ int length; /* - * The READ_*_FIELD defines first skips the :fildname token (key) part of the string + * The READ_*_FIELD defines first skips the :fldname token (key) part of the string * and then converts the next token (value) to the correct data type. * * pg_strtok will split the passed string by whitespace, skipping whitespace in - * strings. We do not setup pg_strtok. That is for the the caller to do. By default + * strings. We do not setup pg_strtok. That is for the caller to do. By default * that is the responsibility of Postgres' nodeRead function. We assume that was setup * correctly. */ diff --git a/src/backend/optimizer/cypher_paths.c b/src/backend/optimizer/cypher_paths.c index b1ac6938a..0cb537ae3 100644 --- a/src/backend/optimizer/cypher_paths.c +++ b/src/backend/optimizer/cypher_paths.c @@ -148,7 +148,7 @@ static void handle_cypher_delete_clause(PlannerInfo *root, RelOptInfo *rel, cp = create_cypher_delete_path(root, rel, custom_private); - // Discard any pre-existing paths + // Discard any preexisting paths rel->pathlist = NIL; rel->partial_pathlist = NIL; @@ -176,7 +176,7 @@ static void handle_cypher_create_clause(PlannerInfo *root, RelOptInfo *rel, cp = create_cypher_create_path(root, rel, custom_private); - // Discard any pre-existing paths, they should be under the cp path + // Discard any preexisting paths, they should be under the cp path rel->pathlist = NIL; rel->partial_pathlist = NIL; @@ -201,7 +201,7 @@ static void handle_cypher_set_clause(PlannerInfo *root, RelOptInfo *rel, cp = create_cypher_set_path(root, rel, custom_private); - // Discard any pre-existing paths + // Discard any preexisting paths rel->pathlist = NIL; rel->partial_pathlist = NIL; @@ -225,7 +225,7 @@ static void handle_cypher_merge_clause(PlannerInfo *root, RelOptInfo *rel, cp = create_cypher_merge_path(root, rel, custom_private); - // Discard any pre-existing paths + // Discard any preexisting paths rel->pathlist = NIL; rel->partial_pathlist = NIL; diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 4737600c8..26de52a66 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -805,7 +805,7 @@ transform_cypher_union_tree(cypher_parsestate *cpstate, cypher_clause *clause, /* * If we find ourselves processing a recursive CTE here something - * went horribly wrong. That is an SQL contruct with no parallel in + * went horribly wrong. That is an SQL construct with no parallel in * cypher. */ if (isTopLevel && @@ -1523,7 +1523,7 @@ cypher_update_information *transform_cypher_remove_item_list( { ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("REMOVE clause does not support adding propereties from maps"), + errmsg("REMOVE clause does not support adding properties from maps"), parser_errposition(pstate, set_item->location))); } set_item->is_add = false; @@ -2961,7 +2961,7 @@ static void transform_match_pattern(cypher_parsestate *cpstate, Query *query, { /* * coerce the WHERE clause to a boolean before AND with the property - * contraints, otherwise there could be evaluation issues. + * constraints, otherwise there could be evaluation issues. */ where_qual = (Expr *)coerce_to_boolean(pstate, (Node *)where_qual, "WHERE"); @@ -3141,7 +3141,7 @@ static List *make_join_condition_for_edge(cypher_parsestate *cpstate, * When the previous node is not in the join tree, but there is a vle * edge before that join, then we need to compare this vle's start node * against the previous vle's end node. No need to check the next edge, - * because that would be redundent. + * because that would be redundant. */ if (!prev_node->in_join_tree && prev_edge != NULL && @@ -3500,9 +3500,9 @@ static A_Expr *filter_vertices_on_label_id(cypher_parsestate *cpstate, } /* - * Creates the Contains operator to process property contraints for a vertex/ + * Creates the Contains operator to process property constraints for a vertex/ * edge in a MATCH clause. creates the agtype @> with the entity's properties - * on the right and the contraints in the MATCH clause on the left. + * on the right and the constraints in the MATCH clause on the left. */ static Node *create_property_constraints(cypher_parsestate *cpstate, transform_entity *entity, @@ -3887,8 +3887,8 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, expr); /* - * We want to add tranformed entity to entities before tranforming props - * so that props referncing currently transformed entity can be resolved. + * We want to add transformed entity to entities before transforming props + * so that props referencing currently transformed entity can be resolved. */ cpstate->entities = lappend(cpstate->entities, entity); entities = lappend(entities, entity); @@ -4017,8 +4017,8 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, expr); /* - * We want to add tranformed entity to entities before tranforming props - * so that props referncing currently transformed entity can be resolved. + * We want to add transformed entity to entities before transforming props + * so that props referencing currently transformed entity can be resolved. */ cpstate->entities = lappend(cpstate->entities, entity); entities = lappend(entities, entity); @@ -4096,7 +4096,7 @@ static List *transform_match_entities(cypher_parsestate *cpstate, Query *query, /* * Check to see if the previous node was originally created - * in a predecessing clause. If it was, then remove the id field + * in a preceding clause. If it was, then remove the id field * from the column ref. Just reference the agtype vertex * variable that the prev clause created and the vle will handle * extracting the id. @@ -5759,7 +5759,7 @@ static TargetEntry *findTarget(List *targetList, char *resname) /* * Wrap the expression with a volatile function, to prevent the optimizer from - * elimating the expression. + * eliminating the expression. */ static Expr *add_volatile_wrapper(Expr *node) { @@ -5851,7 +5851,7 @@ Query *cypher_parse_sub_analyze(Node *parseTree, * The second query will be for the path that this MERGE clause defines. The * two subqueries will be joined together using a LATERAL LEFT JOIN with the * previous query on the left and the MERGE path subquery on the right. Like - * case 1 the targetList will have all the decalred variables and a FuncExpr + * case 1 the targetList will have all the declared variables and a FuncExpr * that represents the MERGE clause with its needed metadata information, that * will be caught in the planner phase and converted into a path. * diff --git a/src/backend/parser/cypher_expr.c b/src/backend/parser/cypher_expr.c index 644eea328..16346a698 100644 --- a/src/backend/parser/cypher_expr.c +++ b/src/backend/parser/cypher_expr.c @@ -153,15 +153,15 @@ static Node *transform_cypher_expr_recurse(cypher_parsestate *cpstate, case T_NullTest: { NullTest *n = (NullTest *)expr; - NullTest *tranformed_expr = makeNode(NullTest); + NullTest *transformed_expr = makeNode(NullTest); - tranformed_expr->arg = (Expr *)transform_cypher_expr_recurse(cpstate, + transformed_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; + transformed_expr->nulltesttype = n->nulltesttype; + transformed_expr->argisrow = type_is_rowtype(exprType((Node *)transformed_expr->arg)); + transformed_expr->location = n->location; - return (Node *) tranformed_expr; + return (Node *) transformed_expr; } case T_CaseExpr: return transform_CaseExpr(cpstate, (CaseExpr *) expr); diff --git a/src/backend/parser/cypher_gram.y b/src/backend/parser/cypher_gram.y index 2fd057d6e..901cb6a28 100644 --- a/src/backend/parser/cypher_gram.y +++ b/src/backend/parser/cypher_gram.y @@ -1443,7 +1443,7 @@ expr: } /* * This is a catch all grammar rule that allows us to avoid some - * shift/reduce errors between expression indirection rules by colapsing + * shift/reduce errors between expression indirection rules by collapsing * those rules into one generic rule. We can then inspect the expressions to * decide what specific rule needs to be applied and then construct the * required result. @@ -2198,7 +2198,7 @@ static char *create_unique_name(char *prefix_name) prefix = prefix_name; } - /* get the length of the combinded string */ + /* get the length of the combined string */ nlen = snprintf(NULL, 0, "%s_%lu", prefix, unique_number); /* allocate the space */ diff --git a/src/backend/parser/cypher_parse_node.c b/src/backend/parser/cypher_parse_node.c index d0d2cade5..307ad5be0 100644 --- a/src/backend/parser/cypher_parse_node.c +++ b/src/backend/parser/cypher_parse_node.c @@ -138,7 +138,7 @@ char *get_next_default_alias(cypher_parsestate *cpstate) /* * Every clause transformed as a subquery has its own cpstate which is being - * freed after it is tranformed. The root cpstate is the one that has the + * freed after it is transformed. The root cpstate is the one that has the * default alias number initialized. So we need to reach the root cpstate to * get the next correct default alias number. */ @@ -147,7 +147,7 @@ char *get_next_default_alias(cypher_parsestate *cpstate) return get_next_default_alias(parent_cpstate); } - /* get the length of the combinded string */ + /* get the length of the combined string */ nlen = snprintf(NULL, 0, "%s%d", AGE_DEFAULT_ALIAS_PREFIX, cpstate->default_alias_num); diff --git a/src/backend/parser/cypher_parser.c b/src/backend/parser/cypher_parser.c index 8dd53df26..ae06c9c11 100644 --- a/src/backend/parser/cypher_parser.c +++ b/src/backend/parser/cypher_parser.c @@ -145,7 +145,7 @@ List *parse_cypher(const char *s) return NIL; /* - * Append the extra node node regardless of its value. Currently the extra + * Append the extra node regardless of its value. Currently the extra * node is only used by EXPLAIN */ return lappend(extra.result, extra.extra); diff --git a/src/backend/utils/adt/age_global_graph.c b/src/backend/utils/adt/age_global_graph.c index c18f9c935..6868bb434 100644 --- a/src/backend/utils/adt/age_global_graph.c +++ b/src/backend/utils/adt/age_global_graph.c @@ -41,7 +41,7 @@ /* internal data structures implementation */ -/* vertex entry for the vertex_hastable */ +/* vertex entry for the vertex_hashtable */ typedef struct vertex_entry { graphid vertex_id; /* vertex id, it is also the hash key */ @@ -110,7 +110,7 @@ static bool insert_vertex_entry(GRAPH_global_context *ggctx, graphid vertex_id, /* * Helper function to determine validity of the passed GRAPH_global_context. - * This is based off of the current active snaphot, to see if the graph could + * This is based off of the current active snapshot, to see if the graph could * have been modified. Ideally, we should find a way to more accurately know * whether the particular graph was modified. */ diff --git a/src/backend/utils/adt/age_vle.c b/src/backend/utils/adt/age_vle.c index 6654a6458..ca4876db0 100644 --- a/src/backend/utils/adt/age_vle.c +++ b/src/backend/utils/adt/age_vle.c @@ -164,7 +164,7 @@ static VLE_local_context *get_cached_VLE_local_context(int64 vle_grammar_node_id /* * Clear (unlink) the previous context's next pointer, if needed. - * Also clear prev as we are at the end of avaiable cached contexts + * Also clear prev as we are at the end of available cached contexts * and just purging them off. Remember, this forms a loop that will * exit the while after purging. */ @@ -421,7 +421,7 @@ static void free_VLE_local_context(VLE_local_context *vlelctx) /* * We need to free the contents of our stacks if the context is not dirty. * These stacks are created in a more volatile memory context. If the - * process was interupted, they will be garbage collected by PG. The only + * process was interrupted, they will be garbage collected by PG. The only * time we will ever clean them here is if the cache isn't being used. */ if (vlelctx->is_dirty == false) diff --git a/src/backend/utils/adt/agtype.c b/src/backend/utils/adt/agtype.c index 6559d7801..c8a88d9ee 100644 --- a/src/backend/utils/adt/agtype.c +++ b/src/backend/utils/adt/agtype.c @@ -3934,7 +3934,7 @@ Datum agtype_hash_cmp(PG_FUNCTION_ARGS) PG_RETURN_INT16(hash); } -// Comparision function for btree Indexes +// Comparison function for btree Indexes PG_FUNCTION_INFO_V1(agtype_btree_cmp); Datum agtype_btree_cmp(PG_FUNCTION_ARGS) @@ -8598,10 +8598,10 @@ agtype_value *alter_property_value(agtype_value *properties, char *var_name, tok = agtype_iterator_next(&it, r, true); /* - * If the the new agtype is scalar, push the agtype_value to the + * If the new agtype is scalar, push the agtype_value to the * parse state. If the agtype is an object or array convert the * agtype to a binary agtype_value to pass to the parse_state. - * This will save uncessary deserialization and serialization + * This will save unnecessary deserialization and serialization * logic from running. */ if (AGTYPE_CONTAINER_IS_SCALAR(&new_v->root)) @@ -8636,10 +8636,10 @@ agtype_value *alter_property_value(agtype_value *properties, char *var_name, &parse_state, WAGT_KEY, key); /* - * If the the new agtype is scalar, push the agtype_value to the + * If the new agtype is scalar, push the agtype_value to the * parse state. If the agtype is an object or array convert the * agtype to a binary agtype_value to pass to the parse_state. - * This will save uncessary deserialization and serialization + * This will save unnecessary deserialization and serialization * logic from running. */ if (AGTYPE_CONTAINER_IS_SCALAR(&new_v->root)) diff --git a/src/backend/utils/adt/agtype_util.c b/src/backend/utils/adt/agtype_util.c index 222ba13e7..8b270e039 100644 --- a/src/backend/utils/adt/agtype_util.c +++ b/src/backend/utils/adt/agtype_util.c @@ -192,7 +192,7 @@ uint32 get_agtype_length(const agtype_container *agtc, int index) } /* - * Helper function to generate the sort priorty of a type. Larger + * Helper function to generate the sort priority of a type. Larger * numbers have higher priority. */ static int get_type_sort_priority(enum agtype_value_type type) diff --git a/src/backend/utils/graph_generation.c b/src/backend/utils/graph_generation.c index 466a8726e..436b703e0 100644 --- a/src/backend/utils/graph_generation.c +++ b/src/backend/utils/graph_generation.c @@ -239,7 +239,7 @@ PG_FUNCTION_INFO_V1(age_create_barbell_graph); * n int, * vertex_label_name Name DEFAULT = NULL, * vertex_properties agtype DEFAULT = NULL, - * edge_label_name Name DEAULT = NULL, + * edge_label_name Name DEFAULT = NULL, * edge_properties agtype DEFAULT = NULL) * Input: * diff --git a/src/include/nodes/cypher_readfuncs.h b/src/include/nodes/cypher_readfuncs.h index e3bb97a33..9ae4e2d9f 100644 --- a/src/include/nodes/cypher_readfuncs.h +++ b/src/include/nodes/cypher_readfuncs.h @@ -32,7 +32,7 @@ * * All functions are dependent on the pg_strtok function. We do not - * setup pg_strtok. That is for the the caller to do. By default that + * setup pg_strtok. That is for the caller to do. By default that * is the responsibility of Postgres' nodeRead function. We assume * that was setup correctly. */ diff --git a/src/include/utils/age_global_graph.h b/src/include/utils/age_global_graph.h index daa1e5139..17e15ffb7 100644 --- a/src/include/utils/age_global_graph.h +++ b/src/include/utils/age_global_graph.h @@ -29,7 +29,7 @@ * age_global_graph.c */ -/* vertex entry for the vertex_hastable */ +/* vertex entry for the vertex_hashtable */ typedef struct vertex_entry vertex_entry; /* edge entry for the edge_hashtable */ From 88ead70e9bdc8961c25717890433df5cb0acd967 Mon Sep 17 00:00:00 2001 From: Bhaskar Sharma Date: Thu, 29 Jun 2023 03:13:22 +0200 Subject: [PATCH 190/191] [AGE agtype_util.c] Fix issue #870 regarding orderability and added regression tests (#994) Fixed issue #870 Odd behavior in context of orderability of different agtypes. Implemented the solution suggested here: https://github.com/apache/age/issues/870#issuecomment-1545592359 Clearance given here: https://github.com/apache/age/issues/870#issuecomment-1579189313 -Added regression tests for both comparibility and orderability --- regress/expected/agtype.out | 80 ++++++++++++++++++++++++++++- regress/sql/agtype.sql | 11 +++- src/backend/utils/adt/agtype_util.c | 48 ++++++++++++++--- 3 files changed, 130 insertions(+), 9 deletions(-) diff --git a/regress/expected/agtype.out b/regress/expected/agtype.out index b368141a1..49d227846 100644 --- a/regress/expected/agtype.out +++ b/regress/expected/agtype.out @@ -1523,7 +1523,7 @@ SELECT agtype_in('{"bool":true}') < agtype_in('{"bool":true, "null": null}'); (1 row) -- Comparisons between types --- Object < List < String < Boolean < Integer = Float = Numeric < Null +-- Path < Edge < Vertex < Object < List < String < Boolean < Integer = Float = Numeric < Null SELECT agtype_in('1') < agtype_in('null'); ?column? ---------- @@ -1590,6 +1590,24 @@ SELECT agtype_in('{"bool":true, "integer":1}') < agtype_in('{"bool":true, "integ t (1 row) +SELECT agtype_in('{"id":0, "label": "v", "properties":{"i":0}}::vertex') < agtype_in('{"bool":true, "i":0}'); + ?column? +---------- + t +(1 row) + +SELECT agtype_in('{"id":2, "start_id":0, "end_id":1, "label": "e", "properties":{"i":0}}::edge') < agtype_in('{"id":0, "label": "v", "properties":{"i":0}}::vertex'); + ?column? +---------- + t +(1 row) + +SELECT agtype_in('[{"id": 0, "label": "v", "properties": {"i": 0}}::vertex, {"id": 2, "start_id": 0, "end_id": 1, "label": "e", "properties": {"i": 0}}::edge, {"id": 1, "label": "v", "properties": {"i": 0}}::vertex]::path') < agtype_in('{"id":2, "start_id":0, "end_id":1, "label": "e", "properties":{"i":0}}::edge'); + ?column? +---------- + t +(1 row) + SELECT agtype_in('1::numeric') < agtype_in('null'); ?column? ---------- @@ -1602,6 +1620,66 @@ SELECT agtype_in('true') < agtype_in('1::numeric'); t (1 row) +-- Testing orderability between types +SELECT * FROM create_graph('orderability_graph'); +NOTICE: graph "orderability_graph" has been created + create_graph +-------------- + +(1 row) + +SELECT * FROM cypher('orderability_graph', $$ CREATE (:vertex {prop: null}), (:vertex {prop: 1}), (:vertex {prop: 1.01}),(:vertex {prop: true}), (:vertex {prop:"string"}),(:vertex {prop:"string_2"}), (:vertex {prop:[1, 2, 3]}), (:vertex {prop:[1, 2, 3, 4, 5]}), (:vertex {prop:{bool:true, i:0}}), (:vertex {prop:{bool:true, i:null}}), (:vertex {prop: {id:0, label: "v", properties:{i:0}}::vertex}), (:vertex {prop: {id: 2, start_id: 0, end_id: 1, label: "e", properties: {i: 0}}::edge}), (:vertex {prop: [{id: 0, label: "v", properties: {i: 0}}::vertex, {id: 2, start_id: 0, end_id: 1, label: "e", properties: {i: 0}}::edge, {id: 1, label: "v", properties: {i: 0}}::vertex]::path}) $$) AS (x agtype); + x +--- +(0 rows) + +SELECT * FROM cypher('orderability_graph', $$ MATCH (n) RETURN n ORDER BY n.prop $$) AS (sorted agtype); + sorted +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 844424930131981, "label": "vertex", "properties": {"prop": [{"id": 0, "label": "v", "properties": {"i": 0}}::vertex, {"id": 2, "label": "e", "end_id": 1, "start_id": 0, "properties": {"i": 0}}::edge, {"id": 1, "label": "v", "properties": {"i": 0}}::vertex]::path}}::vertex + {"id": 844424930131980, "label": "vertex", "properties": {"prop": {"id": 2, "label": "e", "end_id": 1, "start_id": 0, "properties": {"i": 0}}::edge}}::vertex + {"id": 844424930131979, "label": "vertex", "properties": {"prop": {"id": 0, "label": "v", "properties": {"i": 0}}::vertex}}::vertex + {"id": 844424930131978, "label": "vertex", "properties": {"prop": {"bool": true}}}::vertex + {"id": 844424930131977, "label": "vertex", "properties": {"prop": {"i": 0, "bool": true}}}::vertex + {"id": 844424930131975, "label": "vertex", "properties": {"prop": [1, 2, 3]}}::vertex + {"id": 844424930131976, "label": "vertex", "properties": {"prop": [1, 2, 3, 4, 5]}}::vertex + {"id": 844424930131973, "label": "vertex", "properties": {"prop": "string"}}::vertex + {"id": 844424930131974, "label": "vertex", "properties": {"prop": "string_2"}}::vertex + {"id": 844424930131972, "label": "vertex", "properties": {"prop": true}}::vertex + {"id": 844424930131970, "label": "vertex", "properties": {"prop": 1}}::vertex + {"id": 844424930131971, "label": "vertex", "properties": {"prop": 1.01}}::vertex + {"id": 844424930131969, "label": "vertex", "properties": {}}::vertex +(13 rows) + +SELECT * FROM cypher('orderability_graph', $$ MATCH (n) RETURN n ORDER BY n.prop DESC $$) AS (sorted agtype); + sorted +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "vertex", "properties": {}}::vertex + {"id": 844424930131971, "label": "vertex", "properties": {"prop": 1.01}}::vertex + {"id": 844424930131970, "label": "vertex", "properties": {"prop": 1}}::vertex + {"id": 844424930131972, "label": "vertex", "properties": {"prop": true}}::vertex + {"id": 844424930131974, "label": "vertex", "properties": {"prop": "string_2"}}::vertex + {"id": 844424930131973, "label": "vertex", "properties": {"prop": "string"}}::vertex + {"id": 844424930131976, "label": "vertex", "properties": {"prop": [1, 2, 3, 4, 5]}}::vertex + {"id": 844424930131975, "label": "vertex", "properties": {"prop": [1, 2, 3]}}::vertex + {"id": 844424930131977, "label": "vertex", "properties": {"prop": {"i": 0, "bool": true}}}::vertex + {"id": 844424930131978, "label": "vertex", "properties": {"prop": {"bool": true}}}::vertex + {"id": 844424930131979, "label": "vertex", "properties": {"prop": {"id": 0, "label": "v", "properties": {"i": 0}}::vertex}}::vertex + {"id": 844424930131980, "label": "vertex", "properties": {"prop": {"id": 2, "label": "e", "end_id": 1, "start_id": 0, "properties": {"i": 0}}::edge}}::vertex + {"id": 844424930131981, "label": "vertex", "properties": {"prop": [{"id": 0, "label": "v", "properties": {"i": 0}}::vertex, {"id": 2, "label": "e", "end_id": 1, "start_id": 0, "properties": {"i": 0}}::edge, {"id": 1, "label": "v", "properties": {"i": 0}}::vertex]::path}}::vertex +(13 rows) + +SELECT * FROM drop_graph('orderability_graph', true); +NOTICE: drop cascades to 3 other objects +DETAIL: drop cascades to table orderability_graph._ag_label_vertex +drop cascades to table orderability_graph._ag_label_edge +drop cascades to table orderability_graph.vertex +NOTICE: graph "orderability_graph" has been dropped + drop_graph +------------ + +(1 row) + -- -- Test overloaded agytype any comparison operators =, <>, <, >, <=, >=, -- diff --git a/regress/sql/agtype.sql b/regress/sql/agtype.sql index d772cde14..e3bef554b 100644 --- a/regress/sql/agtype.sql +++ b/regress/sql/agtype.sql @@ -403,7 +403,7 @@ SELECT agtype_in('{"bool":true, "null": null}') = agtype_in('{"null":null, "bool SELECT agtype_in('{"bool":true}') < agtype_in('{"bool":true, "null": null}'); -- Comparisons between types --- Object < List < String < Boolean < Integer = Float = Numeric < Null +-- Path < Edge < Vertex < Object < List < String < Boolean < Integer = Float = Numeric < Null SELECT agtype_in('1') < agtype_in('null'); SELECT agtype_in('NaN') < agtype_in('null'); SELECT agtype_in('Infinity') < agtype_in('null'); @@ -415,8 +415,17 @@ SELECT agtype_in('[1,3,5,7,9,11]') < agtype_in('"string"'); SELECT agtype_in('{"bool":true, "integer":1}') < agtype_in('[1,3,5,7,9,11]'); SELECT agtype_in('[1, "string"]') < agtype_in('[1, 1]'); SELECT agtype_in('{"bool":true, "integer":1}') < agtype_in('{"bool":true, "integer":null}'); +SELECT agtype_in('{"id":0, "label": "v", "properties":{"i":0}}::vertex') < agtype_in('{"bool":true, "i":0}'); +SELECT agtype_in('{"id":2, "start_id":0, "end_id":1, "label": "e", "properties":{"i":0}}::edge') < agtype_in('{"id":0, "label": "v", "properties":{"i":0}}::vertex'); +SELECT agtype_in('[{"id": 0, "label": "v", "properties": {"i": 0}}::vertex, {"id": 2, "start_id": 0, "end_id": 1, "label": "e", "properties": {"i": 0}}::edge, {"id": 1, "label": "v", "properties": {"i": 0}}::vertex]::path') < agtype_in('{"id":2, "start_id":0, "end_id":1, "label": "e", "properties":{"i":0}}::edge'); SELECT agtype_in('1::numeric') < agtype_in('null'); SELECT agtype_in('true') < agtype_in('1::numeric'); +-- Testing orderability between types +SELECT * FROM create_graph('orderability_graph'); +SELECT * FROM cypher('orderability_graph', $$ CREATE (:vertex {prop: null}), (:vertex {prop: 1}), (:vertex {prop: 1.01}),(:vertex {prop: true}), (:vertex {prop:"string"}),(:vertex {prop:"string_2"}), (:vertex {prop:[1, 2, 3]}), (:vertex {prop:[1, 2, 3, 4, 5]}), (:vertex {prop:{bool:true, i:0}}), (:vertex {prop:{bool:true, i:null}}), (:vertex {prop: {id:0, label: "v", properties:{i:0}}::vertex}), (:vertex {prop: {id: 2, start_id: 0, end_id: 1, label: "e", properties: {i: 0}}::edge}), (:vertex {prop: [{id: 0, label: "v", properties: {i: 0}}::vertex, {id: 2, start_id: 0, end_id: 1, label: "e", properties: {i: 0}}::edge, {id: 1, label: "v", properties: {i: 0}}::vertex]::path}) $$) AS (x agtype); +SELECT * FROM cypher('orderability_graph', $$ MATCH (n) RETURN n ORDER BY n.prop $$) AS (sorted agtype); +SELECT * FROM cypher('orderability_graph', $$ MATCH (n) RETURN n ORDER BY n.prop DESC $$) AS (sorted agtype); +SELECT * FROM drop_graph('orderability_graph', true); -- -- Test overloaded agytype any comparison operators =, <>, <, >, <=, >=, diff --git a/src/backend/utils/adt/agtype_util.c b/src/backend/utils/adt/agtype_util.c index 8b270e039..e7ba21421 100644 --- a/src/backend/utils/adt/agtype_util.c +++ b/src/backend/utils/adt/agtype_util.c @@ -197,20 +197,42 @@ uint32 get_agtype_length(const agtype_container *agtc, int index) */ static int get_type_sort_priority(enum agtype_value_type type) { - if (type == AGTV_OBJECT) + if (type == AGTV_PATH) + { return 0; - if (type == AGTV_VERTEX) + } + if (type == AGTV_EDGE) + { return 1; - if (type == AGTV_ARRAY) + } + if (type == AGTV_VERTEX) + { return 2; - if (type == AGTV_STRING) + } + if (type == AGTV_OBJECT) + { return 3; - if (type == AGTV_BOOL) + } + if (type == AGTV_ARRAY) + { return 4; - if (type == AGTV_NUMERIC || type == AGTV_INTEGER || type == AGTV_FLOAT) + } + if (type == AGTV_STRING) + { return 5; - if (type == AGTV_NULL) + } + if (type == AGTV_BOOL) + { return 6; + } + if (type == AGTV_NUMERIC || type == AGTV_INTEGER || type == AGTV_FLOAT) + { + return 7; + } + if (type == AGTV_NULL) + { + return 8; + } return -1; } @@ -356,6 +378,18 @@ int compare_agtype_containers_orderability(agtype_container *a, break; } + /* Correction step because AGTV_ARRAY might be there just because of the container type */ + /* Case 1: left side is assigned to an array, right is an object */ + if(va.type == AGTV_ARRAY && vb.type == AGTV_OBJECT) + { + ra = agtype_iterator_next(&ita, &va, false); + } + /* Case 2: left side is an object, right side is assigned to an array */ + else if(va.type == AGTV_OBJECT && vb.type == AGTV_ARRAY) + { + rb = agtype_iterator_next(&itb, &vb, false); + } + Assert(va.type != vb.type); Assert(va.type != AGTV_BINARY); Assert(vb.type != AGTV_BINARY); From c075703f9f36f3d663a69370d79eb10553eb15e2 Mon Sep 17 00:00:00 2001 From: John Gemignani Date: Fri, 7 Jul 2023 10:02:49 -0700 Subject: [PATCH 191/191] Merge branch PG12 (version 1.3.0) into the master branch. (#1015) Merge PG12 version 1.3.0 into the master branch PR 1015 contains the merge of the branch PG12 (version 1.3.0) into the master branch. This will fold in all of the changes that are specific to the branch PG12 and future branches. As the master branch is already ahead of version 1.3.0, it will also create a master branch that is on PostgreSQL 12 and completely up-to-date. PG11 is already completely up-to-date. Note: Effective as of the merge of this PR, the master branch will be on PostgreSQL 12. * Post merge corrections and modifications On branch master_PG12 modified the following files to correct whitespace, typos, duplicates, and clarity - modified: src/backend/executor/cypher_set.c modified: src/backend/parser/cypher_clause.c modified: src/backend/utils/adt/agtype.c modified: src/backend/utils/adt/graphid.c modified: age--1.3.0.sql modified: regress/expected/catalog.out modified: regress/sql/catalog.sql modified: src/backend/nodes/cypher_readfuncs.c modified: src/include/nodes/cypher_nodes.h modified: src/backend/catalog/ag_graph.c modified: src/backend/executor/cypher_create.c modified: src/backend/executor/cypher_merge.c modified: src/backend/utils/adt/graphid.c modified: src/backend/utils/graph_generation.c modified: src/backend/commands/label_commands.c modified: src/backend/parser/cypher_analyze.c modified: src/backend/utils/load/ag_load_edges.c modified: src/backend/utils/load/ag_load_labels.c These files were modified from specifying PG12 specifically to specifying the master. Mostly related to the CI work flow - modified: .github/workflows/installcheck.yaml modified: META.json modified: drivers/docker-compose.yml modified: drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/BaseDockerizedTest.java renamed: .github/workflows/installcheck.yml -> .github/workflows/installcheck.yaml For work specific to PG12 branch and PG11 to 12 - Co-authored-by: John Gemignani Co-authored-by: Shoaib Co-authored-by: Alex Kwak Co-authored-by: Ibrar Ahmad Co-authored-by: Josh Innis Co-authored-by: eyab Co-authored-by: Dehowe Feng Co-authored-by: jbiz805 <49049733+jbiz805@users.noreply.github.com> Co-authored-by: Rafsun Masud Co-authored-by: Utkarsh Kansal Co-authored-by: Dehowe Feng <8065116+dehowef@users.noreply.github.com> Co-authored-by: Muhammad Taha Naveed --- .github/workflows/go-driver.yml | 20 +- .github/workflows/installcheck.yaml | 32 +- .github/workflows/jdbc-driver.yaml | 19 +- .github/workflows/nodejs-driver.yaml | 20 +- .github/workflows/python-driver.yaml | 20 +- .gitignore | 3 +- CONTRIBUTING.md | 2 +- Dockerfile | 11 +- META.json | 45 ++ Makefile | 12 +- NOTICE | 2 +- README.md | 10 +- RELEASE | 74 ++-- age--0.6.0--0.7.0.sql | 197 --------- age--0.7.0--1.0.0.sql | 52 --- ...-0.5.0--0.6.0.sql => age--1.1.0--1.1.1.sql | 27 +- age--1.3.0.sql | 18 +- drivers/docker-compose.yml | 2 +- drivers/jdbc/lib/build.gradle.kts | 2 +- .../apache/age/jdbc/AgtypeStatementTest.java | 2 +- drivers/python/age/age.py | 23 +- drivers/python/age/exceptions.py | 137 +++--- drivers/python/test_age_py.py | 2 +- regress/expected/agtype.out | 3 +- regress/expected/catalog.out | 12 +- regress/expected/cypher_call.out | 4 +- regress/expected/cypher_set.out | 103 ++++- regress/expected/expr.out | 13 +- regress/expected/scan.out | 1 + regress/sql/agtype.sql | 1 + regress/sql/catalog.sql | 8 +- regress/sql/cypher_call.sql | 6 +- regress/sql/cypher_set.sql | 41 ++ regress/sql/expr.sql | 1 + regress/sql/scan.sql | 1 + src/backend/catalog/ag_graph.c | 32 +- src/backend/catalog/ag_label.c | 92 ++-- src/backend/commands/graph_commands.c | 20 +- src/backend/commands/label_commands.c | 25 +- src/backend/executor/cypher_create.c | 19 +- src/backend/executor/cypher_delete.c | 92 ++-- src/backend/executor/cypher_merge.c | 34 +- src/backend/executor/cypher_set.c | 105 +++-- src/backend/executor/cypher_utils.c | 29 +- src/backend/nodes/cypher_outfuncs.c | 6 +- src/backend/nodes/cypher_readfuncs.c | 36 +- src/backend/optimizer/cypher_createplan.c | 3 - src/backend/optimizer/cypher_pathnode.c | 1 - src/backend/optimizer/cypher_paths.c | 3 - src/backend/parser/ag_scanner.l | 8 +- src/backend/parser/cypher_analyze.c | 3 +- src/backend/parser/cypher_clause.c | 26 +- src/backend/parser/cypher_expr.c | 1 + src/backend/parser/cypher_keywords.c | 73 +--- src/backend/parser/cypher_parse_agg.c | 10 +- src/backend/parser/cypher_parser.c | 12 +- src/backend/utils/adt/ag_float8_supp.c | 1 + src/backend/utils/adt/age_global_graph.c | 39 +- src/backend/utils/adt/age_vle.c | 2 + src/backend/utils/adt/agtype.c | 159 +++---- src/backend/utils/adt/agtype_gin.c | 1 + src/backend/utils/adt/graphid.c | 5 +- src/backend/utils/ag_func.c | 8 +- src/backend/utils/cache/ag_cache.c | 410 +++++++----------- src/backend/utils/graph_generation.c | 127 +++--- src/backend/utils/load/ag_load_edges.c | 21 +- src/backend/utils/load/ag_load_labels.c | 6 +- src/backend/utils/load/age_load.c | 101 ++--- src/backend/utils/load/libcsv.c | 18 +- src/include/catalog/ag_graph.h | 11 +- src/include/catalog/ag_label.h | 22 +- src/include/commands/label_commands.h | 5 +- src/include/executor/cypher_utils.h | 3 + src/include/nodes/cypher_nodes.h | 12 +- src/include/optimizer/cypher_createplan.h | 1 - src/include/optimizer/cypher_pathnode.h | 1 - src/include/parser/.gitignore | 1 + src/include/parser/cypher_keywords.h | 7 +- src/include/parser/cypher_kwlist.h | 48 ++ src/include/parser/cypher_parse_node.h | 2 +- src/include/utils/ag_cache.h | 3 +- src/include/utils/age_graphid_ds.h | 2 + src/include/utils/agtype.h | 3 +- src/include/utils/graphid.h | 1 + src/include/utils/load/ag_load_edges.h | 9 +- src/include/utils/load/ag_load_labels.h | 10 +- src/include/utils/load/age_load.h | 6 +- tools/PerfectHash.pm | 399 +++++++++++++++++ tools/gen_keywordlist.pl | 221 ++++++++++ 89 files changed, 1850 insertions(+), 1371 deletions(-) create mode 100644 META.json delete mode 100644 age--0.6.0--0.7.0.sql delete mode 100644 age--0.7.0--1.0.0.sql rename age--0.5.0--0.6.0.sql => age--1.1.0--1.1.1.sql (58%) create mode 100644 src/include/parser/cypher_kwlist.h create mode 100644 tools/PerfectHash.pm create mode 100755 tools/gen_keywordlist.pl diff --git a/.github/workflows/go-driver.yml b/.github/workflows/go-driver.yml index f60ae8029..afba9cbe6 100644 --- a/.github/workflows/go-driver.yml +++ b/.github/workflows/go-driver.yml @@ -2,10 +2,10 @@ name: Go Driver Tests on: push: - branches: [ "master", "PG11" ] + branches: [ "master", "PG12" ] pull_request: - branches: [ "master", "PG11" ] + branches: [ "master", "PG12" ] jobs: build: @@ -17,7 +17,7 @@ jobs: defaults: run: working-directory: drivers/golang/age/ - + steps: - uses: actions/checkout@v3 @@ -26,17 +26,17 @@ jobs: if [[ "$GITHUB_EVENT_NAME" == "push" ]]; then if [[ "$GITHUB_REF" == "refs/heads/master" ]]; then echo "TAG=latest" >> $GITHUB_ENV - elif [[ "$GITHUB_REF" == "refs/heads/PG11" ]]; then - echo "TAG=PG11_latest" >> $GITHUB_ENV + elif [[ "$GITHUB_REF" == "refs/heads/PG12" ]]; then + echo "TAG=PG12_latest" >> $GITHUB_ENV fi elif [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then if [[ "$GITHUB_BASE_REF" == "master" ]]; then echo "TAG=latest" >> $GITHUB_ENV - elif [[ "$GITHUB_BASE_REF" == "PG11" ]]; then - echo "TAG=PG11_latest" >> $GITHUB_ENV + elif [[ "$GITHUB_BASE_REF" == "PG12" ]]; then + echo "TAG=PG12_latest" >> $GITHUB_ENV fi fi - + - name: Run apache/age docker image run: | export TAG=$TAG @@ -46,7 +46,7 @@ jobs: uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} - + - name: Generate run: go generate ./../... @@ -54,4 +54,4 @@ jobs: run: go build -v ./... - name: Test - run: go test . -v \ No newline at end of file + run: go test . -v diff --git a/.github/workflows/installcheck.yaml b/.github/workflows/installcheck.yaml index b18921f21..c35979cd5 100644 --- a/.github/workflows/installcheck.yaml +++ b/.github/workflows/installcheck.yaml @@ -2,32 +2,32 @@ name: Build / Regression on: push: - branches: [ 'master', 'PG11' ] + branches: [ 'master', 'PG12' ] pull_request: - branches: [ 'master', 'PG11' ] + branches: [ 'master', 'PG12' ] jobs: build: runs-on: ubuntu-latest steps: - - name: Get latest commit id of PostgreSQL 11 + - name: Get latest commit id of PostgreSQL 12 run: | - echo "PG_COMMIT_HASH=$(git ls-remote git://git.postgresql.org/git/postgresql.git refs/heads/REL_11_STABLE | awk '{print $1}')" >> $GITHUB_ENV + echo "PG_COMMIT_HASH=$(git ls-remote git://git.postgresql.org/git/postgresql.git refs/heads/REL_12_STABLE | awk '{print $1}')" >> $GITHUB_ENV - - name: Cache PostgreSQL 11 + - name: Cache PostgreSQL 12 uses: actions/cache@v3 - id: pg11cache + id: pg12cache with: - path: ~/pg11 - key: ${{ runner.os }}-v1-pg11-${{ env.PG_COMMIT_HASH }} + path: ~/pg12 + key: ${{ runner.os }}-v1-pg12-${{ env.PG_COMMIT_HASH }} - - name: Install PostgreSQL 11 - if: steps.pg11cache.outputs.cache-hit != 'true' + - name: Install PostgreSQL 12 + if: steps.pg12cache.outputs.cache-hit != 'true' run: | - git clone --depth 1 --branch REL_11_STABLE git://git.postgresql.org/git/postgresql.git ~/pg11source - cd ~/pg11source - ./configure --prefix=$HOME/pg11 CFLAGS="-std=gnu99 -ggdb -O0" --enable-cassert + git clone --depth 1 --branch REL_12_STABLE git://git.postgresql.org/git/postgresql.git ~/pg12source + cd ~/pg12source + ./configure --prefix=$HOME/pg12 CFLAGS="-std=gnu99 -ggdb -O0" --enable-cassert make install -j$(nproc) > /dev/null - uses: actions/checkout@v3 @@ -35,14 +35,14 @@ jobs: - name: Build id: build run: | - make PG_CONFIG=$HOME/pg11/bin/pg_config install -j$(nproc) + make PG_CONFIG=$HOME/pg12/bin/pg_config install -j$(nproc) - name: Regression tests id: regression_tests run: | - make PG_CONFIG=$HOME/pg11/bin/pg_config installcheck + make PG_CONFIG=$HOME/pg12/bin/pg_config installcheck continue-on-error: true - + - name: Dump regression test errors if: steps.regression_tests.outcome != 'success' run: | diff --git a/.github/workflows/jdbc-driver.yaml b/.github/workflows/jdbc-driver.yaml index c4037382d..d76ce6faa 100644 --- a/.github/workflows/jdbc-driver.yaml +++ b/.github/workflows/jdbc-driver.yaml @@ -2,22 +2,21 @@ name: JDBC Driver Tests on: push: - branches: [ "master", "PG11" ] - + branches: [ "master", "PG12" ] + pull_request: - branches: [ "master", "PG11" ] + branches: [ "master", "PG12" ] jobs: build: runs-on: ubuntu-latest - defaults: run: working-directory: drivers/jdbc steps: - uses: actions/checkout@v3 - + - name: Set up Java uses: actions/setup-java@v3 with: @@ -29,18 +28,18 @@ jobs: if [[ "$GITHUB_EVENT_NAME" == "push" ]]; then if [[ "$GITHUB_REF" == "refs/heads/master" ]]; then echo "TAG=latest" >> $GITHUB_ENV - elif [[ "$GITHUB_REF" == "refs/heads/PG11" ]]; then - echo "TAG=PG11_latest" >> $GITHUB_ENV + elif [[ "$GITHUB_REF" == "refs/heads/PG12" ]]; then + echo "TAG=PG12_latest" >> $GITHUB_ENV fi elif [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then if [[ "$GITHUB_BASE_REF" == "master" ]]; then echo "TAG=latest" >> $GITHUB_ENV - elif [[ "$GITHUB_BASE_REF" == "PG11" ]]; then - echo "TAG=PG11_latest" >> $GITHUB_ENV + elif [[ "$GITHUB_BASE_REF" == "PG12" ]]; then + echo "TAG=PG12_latest" >> $GITHUB_ENV fi fi - name: Build and Test run: | export TAG=$TAG - gradle build \ No newline at end of file + gradle build diff --git a/.github/workflows/nodejs-driver.yaml b/.github/workflows/nodejs-driver.yaml index 55dccae58..b2a4e0ea9 100644 --- a/.github/workflows/nodejs-driver.yaml +++ b/.github/workflows/nodejs-driver.yaml @@ -2,10 +2,10 @@ name: Nodejs Driver Tests on: push: - branches: [ "master", "PG11" ] + branches: [ "master", "PG12" ] pull_request: - branches: [ "master", "PG11" ] + branches: [ "master", "PG12" ] jobs: build: @@ -14,26 +14,26 @@ jobs: defaults: run: working-directory: drivers/nodejs/ - + steps: - uses: actions/checkout@v3 - + - name: Set tag based on branch run: | if [[ "$GITHUB_EVENT_NAME" == "push" ]]; then if [[ "$GITHUB_REF" == "refs/heads/master" ]]; then echo "TAG=latest" >> $GITHUB_ENV - elif [[ "$GITHUB_REF" == "refs/heads/PG11" ]]; then - echo "TAG=PG11_latest" >> $GITHUB_ENV + elif [[ "$GITHUB_REF" == "refs/heads/PG12" ]]; then + echo "TAG=PG12_latest" >> $GITHUB_ENV fi elif [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then if [[ "$GITHUB_BASE_REF" == "master" ]]; then echo "TAG=latest" >> $GITHUB_ENV - elif [[ "$GITHUB_BASE_REF" == "PG11" ]]; then - echo "TAG=PG11_latest" >> $GITHUB_ENV + elif [[ "$GITHUB_BASE_REF" == "PG12" ]]; then + echo "TAG=PG12_latest" >> $GITHUB_ENV fi fi - + - name: Run apache/age docker image run: | export TAG=$TAG @@ -51,4 +51,4 @@ jobs: run: npm run build - name: Test - run: npm test \ No newline at end of file + run: npm test diff --git a/.github/workflows/python-driver.yaml b/.github/workflows/python-driver.yaml index 92e1a48a5..df3ed71be 100644 --- a/.github/workflows/python-driver.yaml +++ b/.github/workflows/python-driver.yaml @@ -2,10 +2,10 @@ name: Python Driver Tests on: push: - branches: [ "master", "PG11" ] - + branches: [ "master", "PG12" ] + pull_request: - branches: [ "master", "PG11" ] + branches: [ "master", "PG12" ] jobs: build: @@ -14,26 +14,26 @@ jobs: defaults: run: working-directory: drivers/python - + steps: - uses: actions/checkout@v3 - + - name: Set tag based on branch run: | if [[ "$GITHUB_EVENT_NAME" == "push" ]]; then if [[ "$GITHUB_REF" == "refs/heads/master" ]]; then echo "TAG=latest" >> $GITHUB_ENV - elif [[ "$GITHUB_REF" == "refs/heads/PG11" ]]; then - echo "TAG=PG11_latest" >> $GITHUB_ENV + elif [[ "$GITHUB_REF" == "refs/heads/PG12" ]]; then + echo "TAG=PG12_latest" >> $GITHUB_ENV fi elif [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then if [[ "$GITHUB_BASE_REF" == "master" ]]; then echo "TAG=latest" >> $GITHUB_ENV - elif [[ "$GITHUB_BASE_REF" == "PG11" ]]; then - echo "TAG=PG11_latest" >> $GITHUB_ENV + elif [[ "$GITHUB_BASE_REF" == "PG12" ]]; then + echo "TAG=PG12_latest" >> $GITHUB_ENV fi fi - + - name: Run apache/age docker image run: | export TAG=$TAG diff --git a/.gitignore b/.gitignore index 660286b03..ac4fd622b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,8 @@ *.o *.so -.gitignore build.sh .idea .deps .DS_Store *.tokens -*.interp \ No newline at end of file +*.interp diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 69eab0548..d13839179 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -20,7 +20,7 @@ We strongly recommend you to subscribe the mailing lists, join the Apache AGE Di ## Pull Requests -Changes to AGE source code are proposed, reviewed, and committed via GitHub pull requests (described in Code Convention). Pull requests are a great way to get your ideas into this repository. Anyone can view and comment on active changes here. Reviewing others' changes are a good way to learn how the change process works and gain exposure to activity in various parts of the code. You can help by reviewing the changes, asking questions, or pointing out issues as simple as typos. +Changes to AGE source code are proposed, reviewed, and committed via Github pull requests (described in Code Convention). Pull requests are a great way to get your ideas into this repository. Anyone can view and comment on active changes here. Reviewing others' changes are a good way to learn how the change process works and gain exposure to activity in various parts of the code. You can help by reviewing the changes, asking questions, or pointing out issues as simple as typos. ## Documentation Changes diff --git a/Dockerfile b/Dockerfile index 11d882b2e..24e1e2d9c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,18 +16,17 @@ # limitations under the License. # +FROM postgres:12 -FROM postgres:11-buster - -RUN apt-get update +RUN apt-get update RUN apt-get install --assume-yes --no-install-recommends --no-install-suggests \ bison \ build-essential \ flex \ - postgresql-server-dev-11 + postgresql-server-dev-12 -COPY . /age -RUN cd /age && make install +COPY . /age +RUN cd /age && make install COPY docker-entrypoint-initdb.d/00-create-extension-age.sql /docker-entrypoint-initdb.d/00-create-extension-age.sql diff --git a/META.json b/META.json new file mode 100644 index 000000000..96f74022f --- /dev/null +++ b/META.json @@ -0,0 +1,45 @@ +{ + "name": "ApacheAGE", + "abstract": "Apache AGE is a PostgreSQL Extension that provides graph database functionality", + "description": "Apache AGE is a PostgreSQL Extension that provides graph database functionality. AGE is an acronym for A Graph Extension, and is inspired by Bitnine's fork of PostgreSQL 10, AgensGraph, which is a multi-model database. The goal of the project is to create single storage that can handle both relational and graph model data so that users can use standard ANSI SQL along with openCypher, the Graph query language. A graph consists of a set of vertices (also called nodes) and edges, where each individual vertex and edge possesses a map of properties. A vertex is the basic object of a graph, that can exist independently of everything else in the graph. An edge creates a directed connection between two vertices. A graph database is simply composed of vertices and edges. This type of database is useful when the meaning is in the relationships between the data. Relational databases can easily handle direct relationships, but indirect relationships are more difficult to deal with in relational databases. A graph database stores relationship information as a first-class entity. Apache AGE gives you the best of both worlds, simultaneously.", + "version": "1.3.0", + "maintainer": [ + "users@age.apache.org" + ], + "license": "apache_2_0", + "provides": { + "ApacheAGE": { + "abstract": "Apache AGE is a PostgreSQL Extension that provides graph database functionality", + "file": "age--1.3.0.sql", + "docfile": "README.md", + "version": "1.3.0" + } + }, + "prereqs": { + "runtime": { + "requires": { + "PostgreSQL": "12.0.0" + } + } + }, + "resources": { + "homepage": "https://github.com/apache/age/tree/master", + "bugtracker": { + "web": "https://github.com/apache/age/issues" + }, + "repository": { + "url": "https://github.com/apache/age.git", + "web": "https://github.com/apache/age", + "type": "git" + } + }, + "generated_by": "users@age.apache.org", + "meta-spec": { + "version": "1.0.0", + "url": "http://pgxn.org/meta/spec.txt" + }, + "tags": [ + "graphdb", + "graph-database" + ] +} diff --git a/Makefile b/Makefile index e9be9cda8..759078fb2 100644 --- a/Makefile +++ b/Makefile @@ -108,15 +108,23 @@ ag_regress_dir = $(srcdir)/regress REGRESS_OPTS = --load-extension=age --inputdir=$(ag_regress_dir) --outputdir=$(ag_regress_dir) --temp-instance=$(ag_regress_dir)/instance --port=61958 --encoding=UTF-8 ag_regress_out = instance/ log/ results/ regression.* -EXTRA_CLEAN = $(addprefix $(ag_regress_dir)/, $(ag_regress_out)) src/backend/parser/cypher_gram.c src/include/parser/cypher_gram_def.h +EXTRA_CLEAN = $(addprefix $(ag_regress_dir)/, $(ag_regress_out)) src/backend/parser/cypher_gram.c src/include/parser/cypher_gram_def.h src/include/parser/cypher_kwlist_d.h + +GEN_KEYWORDLIST = $(PERL) -I ./tools/ ./tools/gen_keywordlist.pl +GEN_KEYWORDLIST_DEPS = ./tools/gen_keywordlist.pl tools/PerfectHash.pm ag_include_dir = $(srcdir)/src/include PG_CPPFLAGS = -I$(ag_include_dir) -I$(ag_include_dir)/parser -PG_CONFIG = pg_config +PG_CONFIG ?= pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) +src/backend/parser/cypher_keywords.o: src/include/parser/cypher_kwlist_d.h + +src/include/parser/cypher_kwlist_d.h: src/include/parser/cypher_kwlist.h $(GEN_KEYWORDLIST_DEPS) + $(GEN_KEYWORDLIST) --extern --varname CypherKeyword --output src/include/parser $< + src/include/parser/cypher_gram_def.h: src/backend/parser/cypher_gram.c src/backend/parser/cypher_gram.c: BISONFLAGS += --defines=src/include/parser/cypher_gram_def.h diff --git a/NOTICE b/NOTICE index 40ce5ef8a..a93fb0d3b 100644 --- a/NOTICE +++ b/NOTICE @@ -1,5 +1,5 @@ Apache AGE -Copyright 2022 The Apache Software Foundation. +Copyright 2023 The Apache Software Foundation. This product includes software developed at The Apache Software Foundation (http://www.apache.org/). diff --git a/README.md b/README.md index f376c1bdd..de3a898a9 100644 --- a/README.md +++ b/README.md @@ -33,9 +33,9 @@   - - - + + +   @@ -56,7 +56,7 @@
-

  What is Apache AGE?

+

  What is Apache AGE?

[Apache AGE](https://age.apache.org/#) is an extension for PostgreSQL that enables users to leverage a graph database on top of the existing relational databases. AGE is an acronym for A Graph Extension and is inspired by Bitnine's AgensGraph, a multi-model database fork of PostgreSQL. The basic principle of the project is to create a single storage that handles both the relational and graph data model so that the users can use the standard ANSI SQL along with openCypher, one of the most popular graph query languages today.
@@ -158,7 +158,7 @@ You can
download the Postgres Clone the github repository or download the download an official release. -Run the pg_config utility and check the version of PostgreSQL. Currently, only PostgreSQL versions 11, 12 & 13 are supported. If you have any other version of Postgres, you will need to install PostgreSQL version 11, 12 or 13. +Run the pg_config utility and check the version of PostgreSQL. Currently, only PostgreSQL versions 11, 12, & 13 are supported. If you have any other version of Postgres, you will need to install PostgreSQL version 11, 12, or 13.
```bash diff --git a/RELEASE b/RELEASE index 7707ed1b4..cb6f0de25 100644 --- a/RELEASE +++ b/RELEASE @@ -15,33 +15,53 @@ # specific language governing permissions and limitations # under the License. -Release Notes for Apache AGE release v1.3.0 +Release Notes for Apache AGE release v1.3.0 for PG 12 Apache AGE 1.3.0 - Release Notes - Add additional comments for create_graph function. (#582) - Optimize age_exists function. (#586) - Implement plus-equal operator in SET clause. (#638) - Implement CI test for python driver. (#587) - Move from travis CI to github actions for build. (#673) - Update all driver CIs to GitHub actions. - Fix build warnings. - Fix golang driver workflow (#563) - Updated Readme for drivers folder. (#642) - Removed async from function definitions. (#680) - Barbell graph generation (#648) and Barbell regress tests. (#708) - Updated Python Driver ANTLR 4.9.3 -> 4.11.1 (#706) - Modify docker url for JDBC driver tests (#716) - Fix WITH ignoring WHERE clause. (#646) - Implement isEmpty() predicate function. (#710) - Fix cypher function input argument checks. (#718) - Fix Issue 693 - server termination from return exists(path). (#721) - Update regression tests for cypher_with. (#725) - Fix issue 733 - create_complete_graph() terminates the server. (#734) - Prevent MATCH from following OPTIONAL MATCH. (#740) - Fix property constraints against resolved variables. (#724) (#751) (#701) (#747) - Include invalid labels in reused variables. (#751) (#762) - Remove check for scalar agtypes in unwind. (#736) - Update PG11 CI workflows. - Update readme and version for python driver. (#780) - Update README.md +NOTE: Due to additions to core tables, there is no upgrade path from the + previous version. + +Implement CALL ...[YIELD] for cypher functions. (#630) +Graph names with the empty string '' are no more allowed. (#251) +Fix typos at multiple locations. (#470) +Fix Bug with CALL... [YIELD], clause ignores WHERE. +Fix EXPLAIN to allow for nested cypher commands. +Fix delete_global_graphs and add regression tests. (#336) +Invalid labels now return NULL. +Update CONTRIBUTING.md (#348) +Fix null pointer on name compare. (#376) +Fix Travis CI warning messages. +Additional regression tests added for age_global_graph. (#341) +Readme Added for AGE-JDBC-Driver. (#383) +Updated volitility categories for many functions. +Fix issue 339 - entities in WHERE clause have wrong Expr. (#391) +Create complete graph function. (#342) (#662) +Fix issue 317: Graph naming convention. (#349) +Update SET clause to support assigning a map to a variable. (#468) +Patch to address PR 203 that appears to be inactive. (#671) +Add additional comments for create_graph function. (#582) +Optimize age_exists function. (#586) +Implement plus-equal operator in SET clause. (#638) +Implement CI test for python driver. (#587) +Move from travis CI to github actions for build. (#673) +Update all driver CIs to Github actions. +Fix build warnings. +Updated Readme for drivers folder. (#642) +Removed async from function definitions. (#680) +Barbell graph generation (#648) and Barbell regress tests. (#708) +UPDATED Python Driver ANTLR 4.9.3 -> 4.11.1 (#706) +Fix WITH ignoring WHERE clause. (#646) +Implement isEmpty() predicate function. (#710) +Fix cypher function input argument checks. (#718) +Fix Issue 693 - server termination from return exists(path). (#721) +Update regression tests for cypher_with. (#725) +Fix issue 733 - create_complete_graph() terminates the server. (#734) +Prevent MATCH from following OPTIONAL MATCH. (#740) +Fix property constraints against resolved variables. (#724) (#751) (#701) (#747) +Include invalid labels in reused variables. (#751) (#762) +Fix update_entity_tuple to use correct CommandId. (#769) +Remove check for scalar agtypes in unwind. (#736) +Update PG12 CI workflows. (#776) +Update readme and version for python driver. (#780) +Update README.md diff --git a/age--0.6.0--0.7.0.sql b/age--0.6.0--0.7.0.sql deleted file mode 100644 index cdbaf4406..000000000 --- a/age--0.6.0--0.7.0.sql +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - --- complain if script is sourced in psql, rather than via CREATE EXTENSION -\echo Use "ALTER EXTENSION age UPDATE TO '0.7.0'" to load this file. \quit - -CREATE FUNCTION ag_catalog.create_vlabel(graph_name name, label_name name) - RETURNS void - LANGUAGE c -AS 'MODULE_PATHNAME'; - -CREATE FUNCTION ag_catalog.create_elabel(graph_name name, label_name name) - RETURNS void - LANGUAGE c -AS 'MODULE_PATHNAME'; - --- binary I/O functions -CREATE FUNCTION ag_catalog.graphid_send(graphid) -RETURNS bytea -LANGUAGE c -IMMUTABLE -RETURNS NULL ON NULL INPUT -PARALLEL SAFE -AS 'MODULE_PATHNAME'; - -CREATE FUNCTION ag_catalog.graphid_recv(internal) -RETURNS graphid -LANGUAGE c -IMMUTABLE -RETURNS NULL ON NULL INPUT -PARALLEL SAFE -AS 'MODULE_PATHNAME'; - -UPDATE pg_type SET -typsend = 'ag_catalog.graphid_send', -typreceive = 'ag_catalog.graphid_recv' -WHERE typname = 'graphid'; - --- binary I/O functions -CREATE FUNCTION ag_catalog.agtype_send(agtype) -RETURNS bytea -LANGUAGE c -IMMUTABLE -RETURNS NULL ON NULL INPUT -PARALLEL SAFE -AS 'MODULE_PATHNAME'; - -CREATE FUNCTION ag_catalog.agtype_recv(internal) -RETURNS agtype -LANGUAGE c -IMMUTABLE -RETURNS NULL ON NULL INPUT -PARALLEL SAFE -AS 'MODULE_PATHNAME'; - -UPDATE pg_type SET -typsend = 'ag_catalog.agtype_send', -typreceive = 'ag_catalog.agtype_recv' -WHERE typname = 'agtype'; - --- agtype -> int4[] -CREATE FUNCTION ag_catalog.agtype_to_int4_array(variadic "any") - RETURNS int[] - LANGUAGE c - STABLE -RETURNS NULL ON NULL INPUT -PARALLEL SAFE -AS 'MODULE_PATHNAME'; - -CREATE CAST (agtype AS int[]) - WITH FUNCTION ag_catalog.agtype_to_int4_array(variadic "any"); - -CREATE FUNCTION ag_catalog.age_eq_tilde(agtype, agtype) -RETURNS agtype -LANGUAGE c -STABLE -PARALLEL SAFE -AS 'MODULE_PATHNAME'; - -CREATE OR REPLACE FUNCTION ag_catalog.age_vle(IN agtype, IN agtype, IN agtype, - IN agtype, IN agtype, IN agtype, - IN agtype, OUT edges agtype) -RETURNS SETOF agtype -LANGUAGE C -STABLE -CALLED ON NULL INPUT -PARALLEL UNSAFE -- might be safe -AS 'MODULE_PATHNAME'; - --- function to build an edge for a VLE match -CREATE FUNCTION ag_catalog.age_build_vle_match_edge(agtype, agtype) -RETURNS agtype -LANGUAGE C -STABLE -PARALLEL SAFE -AS 'MODULE_PATHNAME'; - --- function to match a terminal vle edge -CREATE FUNCTION ag_catalog.age_match_vle_terminal_edge(agtype, agtype, agtype) -RETURNS boolean -LANGUAGE C -STABLE -CALLED ON NULL INPUT -PARALLEL SAFE -AS 'MODULE_PATHNAME'; - --- function to create an AGTV_PATH from a VLE_path_container -CREATE FUNCTION ag_catalog.age_materialize_vle_path(agtype) -RETURNS agtype -LANGUAGE C -STABLE -RETURNS NULL ON NULL INPUT -PARALLEL SAFE -AS 'MODULE_PATHNAME'; - --- function to create an AGTV_ARRAY of edges from a VLE_path_container -CREATE FUNCTION ag_catalog.age_materialize_vle_edges(agtype) -RETURNS agtype -LANGUAGE C -STABLE -RETURNS NULL ON NULL INPUT -PARALLEL SAFE -AS 'MODULE_PATHNAME'; - -CREATE FUNCTION ag_catalog.age_match_vle_edge_to_id_qual(agtype, agtype, agtype) -RETURNS boolean -LANGUAGE C -STABLE -RETURNS NULL ON NULL INPUT -PARALLEL SAFE -AS 'MODULE_PATHNAME'; - -CREATE FUNCTION ag_catalog.age_match_two_vle_edges(agtype, agtype) -RETURNS boolean -LANGUAGE C -STABLE -RETURNS NULL ON NULL INPUT -PARALLEL SAFE -AS 'MODULE_PATHNAME'; - --- list functions -CREATE FUNCTION ag_catalog.age_keys(agtype) -RETURNS agtype -LANGUAGE c -STABLE -PARALLEL SAFE -AS 'MODULE_PATHNAME'; - -CREATE FUNCTION ag_catalog.age_labels(agtype) -RETURNS agtype -LANGUAGE c -STABLE -RETURNS NULL ON NULL INPUT -PARALLEL SAFE -AS 'MODULE_PATHNAME'; - -CREATE FUNCTION ag_catalog.age_nodes(agtype) -RETURNS agtype -LANGUAGE c -STABLE -RETURNS NULL ON NULL INPUT -PARALLEL SAFE -AS 'MODULE_PATHNAME'; - -CREATE FUNCTION ag_catalog.age_relationships(agtype) -RETURNS agtype -LANGUAGE c -STABLE -PARALLEL SAFE -AS 'MODULE_PATHNAME'; - -CREATE FUNCTION ag_catalog.age_range(variadic "any") -RETURNS agtype -LANGUAGE c -STABLE -PARALLEL SAFE -AS 'MODULE_PATHNAME'; - --- --- End --- diff --git a/age--0.7.0--1.0.0.sql b/age--0.7.0--1.0.0.sql deleted file mode 100644 index 59d3bff82..000000000 --- a/age--0.7.0--1.0.0.sql +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - --- complain if script is sourced in psql, rather than via CREATE EXTENSION -\echo Use "ALTER EXTENSION age UPDATE TO '1.0.0'" to load this file. \quit - -CREATE FUNCTION ag_catalog.load_labels_from_file(graph_name name, - label_name name, - file_path text, - id_field_exists bool default true) - RETURNS void - LANGUAGE c - AS 'MODULE_PATHNAME'; - -CREATE FUNCTION ag_catalog.load_edges_from_file(graph_name name, - label_name name, - file_path text) - RETURNS void - LANGUAGE c - AS 'MODULE_PATHNAME'; - -CREATE FUNCTION ag_catalog._cypher_merge_clause(internal) -RETURNS void -LANGUAGE c -AS 'MODULE_PATHNAME'; - -CREATE FUNCTION ag_catalog.age_unnest(agtype, block_types boolean = false) - RETURNS SETOF agtype - LANGUAGE c - STABLE -PARALLEL SAFE -AS 'MODULE_PATHNAME'; - --- --- End --- diff --git a/age--0.5.0--0.6.0.sql b/age--1.1.0--1.1.1.sql similarity index 58% rename from age--0.5.0--0.6.0.sql rename to age--1.1.0--1.1.1.sql index dbe620f13..e4ec742dd 100644 --- a/age--0.5.0--0.6.0.sql +++ b/age--1.1.0--1.1.1.sql @@ -17,18 +17,21 @@ * under the License. */ --- complain if script is sourced in psql, rather than via CREATE EXTENSION -\echo Use "ALTER EXTENSION age UPDATE TO '0.6.0'" to load this file. \quit +-- complain if script is sourced in psql, rather than via ALTER EXTENSION +\echo Use "ALTER EXTENSION age UPDATE TO '1.1.1'" to load this file. \quit -CREATE OR REPLACE FUNCTION ag_catalog.age_vle(IN agtype, IN agtype, IN agtype, - IN agtype, IN agtype, IN agtype, - IN agtype, OUT edges agtype) -RETURNS SETOF agtype -LANGUAGE C -IMMUTABLE -STRICT +-- add in new age_prepare_cypher function +CREATE FUNCTION ag_catalog.age_prepare_cypher(cstring, cstring) +RETURNS boolean +LANGUAGE c +STABLE +PARALLEL SAFE AS 'MODULE_PATHNAME'; --- --- End --- +-- modify the param defaults for cypher function +CREATE OR REPLACE FUNCTION ag_catalog.cypher(graph_name name = NULL, + query_string cstring = NULL, + params agtype = NULL) +RETURNS SETOF record +LANGUAGE c +AS 'MODULE_PATHNAME'; diff --git a/age--1.3.0.sql b/age--1.3.0.sql index 6d8730f9b..b364ad3e7 100644 --- a/age--1.3.0.sql +++ b/age--1.3.0.sql @@ -25,15 +25,16 @@ -- CREATE TABLE ag_graph ( + graphid oid NOT NULL, name name NOT NULL, namespace regnamespace NOT NULL -) WITH (OIDS); +); + +CREATE UNIQUE INDEX ag_graph_graphid_index ON ag_graph USING btree (graphid); -- include content of the ag_graph table into the pg_dump output SELECT pg_catalog.pg_extension_config_dump('ag_graph', ''); -CREATE UNIQUE INDEX ag_graph_oid_index ON ag_graph USING btree (oid); - CREATE UNIQUE INDEX ag_graph_name_index ON ag_graph USING btree (name); CREATE UNIQUE INDEX ag_graph_namespace_index @@ -51,19 +52,20 @@ CREATE TABLE ag_label ( id label_id, kind label_kind, relation regclass NOT NULL, - seq_name name NOT NULL -) WITH (OIDS); + seq_name name NOT NULL, + CONSTRAINT fk_graph_oid + FOREIGN KEY(graph) + REFERENCES ag_graph(graphid) +); -- include content of the ag_label table into the pg_dump output SELECT pg_catalog.pg_extension_config_dump('ag_label', ''); -CREATE UNIQUE INDEX ag_label_oid_index ON ag_label USING btree (oid); - CREATE UNIQUE INDEX ag_label_name_graph_index ON ag_label USING btree (name, graph); -CREATE UNIQUE INDEX ag_label_graph_id_index +CREATE UNIQUE INDEX ag_label_graph_oid_index ON ag_label USING btree (graph, id); diff --git a/drivers/docker-compose.yml b/drivers/docker-compose.yml index 1716d227b..45ab86a39 100644 --- a/drivers/docker-compose.yml +++ b/drivers/docker-compose.yml @@ -7,4 +7,4 @@ services: - POSTGRES_PASSWORD=agens - POSTGRES_DB=postgres ports: - - 5432:5432 \ No newline at end of file + - 5432:5432 diff --git a/drivers/jdbc/lib/build.gradle.kts b/drivers/jdbc/lib/build.gradle.kts index 15662e7ce..2ba529ec1 100644 --- a/drivers/jdbc/lib/build.gradle.kts +++ b/drivers/jdbc/lib/build.gradle.kts @@ -68,4 +68,4 @@ tasks.test { showCauses = true showStackTraces = true } -} \ No newline at end of file +} diff --git a/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/AgtypeStatementTest.java b/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/AgtypeStatementTest.java index 74be24608..97e424a70 100644 --- a/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/AgtypeStatementTest.java +++ b/drivers/jdbc/lib/src/test/java/org/apache/age/jdbc/AgtypeStatementTest.java @@ -202,4 +202,4 @@ private void runPreparedStatementString(PgConnection conn) throws SQLException, assertEquals(1, returnedAgtype.getInt()); } -} \ No newline at end of file +} diff --git a/drivers/python/age/age.py b/drivers/python/age/age.py index 98b99bb71..40ad0c21e 100644 --- a/drivers/python/age/age.py +++ b/drivers/python/age/age.py @@ -58,7 +58,7 @@ def deleteGraph(conn:ext.connection, graphName:str): with conn.cursor() as cursor: cursor.execute(sql.SQL("SELECT drop_graph({graphName}, true);").format(graphName=sql.Literal(graphName))) conn.commit() - + def buildCypher(graphName:str, cypherStmt:str, columns:list) ->str: if graphName == None: @@ -91,7 +91,7 @@ def execSql(conn:ext.connection, stmt:str, commit:bool=False, params:tuple=None) cursor.execute(stmt, params) if commit: conn.commit() - + return cursor except SyntaxError as cause: conn.rollback() @@ -105,8 +105,8 @@ def querySql(conn:ext.connection, stmt:str, params:tuple=None) -> ext.cursor : return execSql(conn, stmt, False, params) # Execute cypher statement and return cursor. -# If cypher statement changes data (create, set, remove), -# You must commit session(ag.commit()) +# If cypher statement changes data (create, set, remove), +# You must commit session(ag.commit()) # (Otherwise the execution cannot make any effect.) def execCypher(conn:ext.connection, graphName:str, cypherStmt:str, cols:list=None, params:tuple=None) -> ext.cursor : if conn == None or conn.closed: @@ -120,7 +120,7 @@ def execCypher(conn:ext.connection, graphName:str, cypherStmt:str, cols:list=Non cypher = cypher[2:len(cypher)-1] preparedStmt = "SELECT * FROM age_prepare_cypher({graphName},{cypherStmt})" - + cursor = conn.cursor() try: cursor.execute(sql.SQL(preparedStmt).format(graphName=sql.Literal(graphName),cypherStmt=sql.Literal(cypher))) @@ -190,10 +190,10 @@ def setGraph(self, graph:str): def commit(self): self.connection.commit() - + def rollback(self): self.connection.rollback() - + def execCypher(self, cypherStmt:str, cols:list=None, params:tuple=None) -> ext.cursor : return execCypher(self.connection, self.graphName, cypherStmt, cols=cols, params=params) @@ -202,8 +202,8 @@ def cypher(self, cursor:ext.cursor, cypherStmt:str, cols:list=None, params:tuple # def execSql(self, stmt:str, commit:bool=False, params:tuple=None) -> ext.cursor : # return execSql(self.connection, stmt, commit, params) - - + + # def execCypher(self, cypherStmt:str, commit:bool=False, params:tuple=None) -> ext.cursor : # return execCypher(self.connection, self.graphName, cypherStmt, commit, params) @@ -211,7 +211,4 @@ def cypher(self, cursor:ext.cursor, cypherStmt:str, cols:list=None, params:tuple # return execCypherWithReturn(self.connection, self.graphName, cypherStmt, columns, params) # def queryCypher(self, cypherStmt:str, columns:list=None , params:tuple=None) -> ext.cursor : - # return queryCypher(self.connection, self.graphName, cypherStmt, columns, params) - - - + # return queryCypher(self.connection, self.graphName, cypherStmt, columns, params) diff --git a/drivers/python/age/exceptions.py b/drivers/python/age/exceptions.py index cee9cc3be..8c46e8e99 100644 --- a/drivers/python/age/exceptions.py +++ b/drivers/python/age/exceptions.py @@ -1,70 +1,67 @@ - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -from psycopg2.errors import * - -class AgeNotSet(Exception): - def __init__(self, name): - self.name = name - - def __repr__(self) : - return 'AGE extension is not set.' - -class GraphNotFound(Exception): - def __init__(self, name): - self.name = name - - def __repr__(self) : - return 'Graph[' + self.name + '] does not exist.' - - -class GraphAlreadyExists(Exception): - def __init__(self, name): - self.name = name - - def __repr__(self) : - return 'Graph[' + self.name + '] already exists.' - - -class GraphNotSet(Exception): - def __repr__(self) : - return 'Graph name is not set.' - - -class NoConnection(Exception): - def __repr__(self) : - return 'No Connection' - -class NoCursor(Exception): - def __repr__(self) : - return 'No Cursor' - -class SqlExecutionError(Exception): - def __init__(self, msg, cause): - self.msg = msg - self.cause = cause - super().__init__(msg, cause) - - def __repr__(self) : - return 'SqlExecution [' + self.msg + ']' - -class AGTypeError(Exception): - def __init__(self, msg, cause): - self.msg = msg - self.cause = cause - super().__init__(msg, cause) - - +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +from psycopg2.errors import * + +class AgeNotSet(Exception): + def __init__(self, name): + self.name = name + + def __repr__(self) : + return 'AGE extension is not set.' + +class GraphNotFound(Exception): + def __init__(self, name): + self.name = name + + def __repr__(self) : + return 'Graph[' + self.name + '] does not exist.' + + +class GraphAlreadyExists(Exception): + def __init__(self, name): + self.name = name + + def __repr__(self) : + return 'Graph[' + self.name + '] already exists.' + + +class GraphNotSet(Exception): + def __repr__(self) : + return 'Graph name is not set.' + + +class NoConnection(Exception): + def __repr__(self) : + return 'No Connection' + +class NoCursor(Exception): + def __repr__(self) : + return 'No Cursor' + +class SqlExecutionError(Exception): + def __init__(self, msg, cause): + self.msg = msg + self.cause = cause + super().__init__(msg, cause) + + def __repr__(self) : + return 'SqlExecution [' + self.msg + ']' + +class AGTypeError(Exception): + def __init__(self, msg, cause): + self.msg = msg + self.cause = cause + super().__init__(msg, cause) diff --git a/drivers/python/test_age_py.py b/drivers/python/test_age_py.py index 1be2f04b7..99c8d0857 100644 --- a/drivers/python/test_age_py.py +++ b/drivers/python/test_age_py.py @@ -365,4 +365,4 @@ def testCollect(self): suite.addTest(TestAgeBasic('testMultipleEdges')) suite.addTest(TestAgeBasic('testCollect')) TestAgeBasic.args = args - unittest.TextTestRunner().run(suite) \ No newline at end of file + unittest.TextTestRunner().run(suite) diff --git a/regress/expected/agtype.out b/regress/expected/agtype.out index 49d227846..65cca0e4c 100644 --- a/regress/expected/agtype.out +++ b/regress/expected/agtype.out @@ -23,6 +23,7 @@ -- Load extension and set path -- LOAD 'age'; +SET extra_float_digits = 0; SET search_path TO ag_catalog; -- -- Create a table using the AGTYPE type @@ -2260,7 +2261,7 @@ SELECT agtype_to_int4(agtype_in('1.444::numeric')); -- These should all fail SELECT agtype_to_int4(agtype_in('"string"')); -ERROR: invalid input syntax for integer: "string" +ERROR: invalid input syntax for type integer: "string" SELECT agtype_to_int4(agtype_in('[1, 2, 3]')); ERROR: cannot cast agtype array to type int SELECT agtype_to_int4(agtype_in('{"int":1}')); diff --git a/regress/expected/catalog.out b/regress/expected/catalog.out index 240ff17b4..bc7b9434a 100644 --- a/regress/expected/catalog.out +++ b/regress/expected/catalog.out @@ -28,7 +28,7 @@ NOTICE: graph "graph" has been created (1 row) -SELECT * FROM ag_graph WHERE name = 'graph'; +SELECT name, namespace FROM ag_graph WHERE name = 'graph'; name | namespace -------+----------- graph | graph @@ -121,7 +121,7 @@ NOTICE: graph "GraphB" has been created (1 row) -- Show GraphA's construction to verify case is preserved. -SELECT * FROM ag_graph WHERE name = 'GraphA'; +SELECT name, namespace FROM ag_graph WHERE name = 'GraphA'; name | namespace --------+----------- GraphA | "GraphA" @@ -142,7 +142,7 @@ NOTICE: graph "GraphA" renamed to "GraphX" (1 row) -- Show GraphX's construction to verify case is preserved. -SELECT * FROM ag_graph WHERE name = 'GraphX'; +SELECT name, namespace FROM ag_graph WHERE name = 'GraphX'; name | namespace --------+----------- GraphX | "GraphX" @@ -155,14 +155,14 @@ SELECT nspname FROM pg_namespace WHERE nspname = 'GraphX'; (1 row) -- Verify there isn't a graph GraphA anymore. -SELECT * FROM ag_graph WHERE name = 'GraphA'; +SELECT name, namespace FROM ag_graph WHERE name = 'GraphA'; name | namespace ------+----------- (0 rows) SELECT * FROM pg_namespace WHERE nspname = 'GraphA'; - nspname | nspowner | nspacl ----------+----------+-------- + oid | nspname | nspowner | nspacl +-----+---------+----------+-------- (0 rows) -- Sanity check that graphx does not exist - should return 0. diff --git a/regress/expected/cypher_call.out b/regress/expected/cypher_call.out index f7e45a050..8c5c5fca7 100644 --- a/regress/expected/cypher_call.out +++ b/regress/expected/cypher_call.out @@ -41,8 +41,8 @@ CREATE FUNCTION call_stmt_test.add_agtype(agtype, agtype) RETURNS agtype LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL INPUT; -/* - * CALL (solo) +/* + * CALL (solo) */ SELECT * FROM cypher('cypher_call', $$CALL sqrt(64)$$) as (sqrt agtype); sqrt diff --git a/regress/expected/cypher_set.out b/regress/expected/cypher_set.out index dd575d6a3..0310ae015 100644 --- a/regress/expected/cypher_set.out +++ b/regress/expected/cypher_set.out @@ -102,11 +102,11 @@ SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = rand() RETURN n.i < 1 A (3 rows) SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = pi() RETURN n$$) AS (a agtype); - a ------------------------------------------------------------------------------------------------------- - {"id": 844424930131969, "label": "v", "properties": {"i": 3.14159265358979}}::vertex - {"id": 844424930131971, "label": "v", "properties": {"i": 3.14159265358979}}::vertex - {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 3.14159265358979, "j": 5}}::vertex + a +------------------------------------------------------------------------------------------------------- + {"id": 844424930131969, "label": "v", "properties": {"i": 3.141592653589793}}::vertex + {"id": 844424930131971, "label": "v", "properties": {"i": 3.141592653589793}}::vertex + {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 3.141592653589793, "j": 5}}::vertex (3 rows) --Handle Inheritance @@ -182,6 +182,29 @@ $$) AS (a agtype); {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "y": 50, "z": 99}}::vertex (1 row) +SELECT * FROM cypher('cypher_set', $$ + MATCH (n {j: 5}) + SET n.y = 53 + SET n.y = 50 + SET n.z = 99 + SET n.arr = [n.y, n.z] + RETURN n +$$) AS (a agtype); + a +--------------------------------------------------------------------------------------------------------------------------- + {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "y": 50, "z": 99, "arr": [50, 99]}}::vertex +(1 row) + +SELECT * FROM cypher('cypher_set', $$ + MATCH (n {j: 5}) + REMOVE n.arr + RETURN n +$$) AS (a agtype); + a +---------------------------------------------------------------------------------------------------------- + {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "y": 50, "z": 99}}::vertex +(1 row) + SELECT * FROM cypher('cypher_set', $$ MATCH (n {j: 5}) RETURN n @@ -238,6 +261,46 @@ $$) AS (a agtype); {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "y": 2, "z": 99}}::vertex (2 rows) +-- Test that SET works with nodes(path) and relationships(path) +SELECT * FROM cypher('cypher_set', $$ + MATCH p=(n)-[e:e {j:34}]->() + WITH nodes(p) AS ns + WITH ns[0] AS n + SET n.k = 99 + SET n.k = 999 + RETURN n +$$) AS (a agtype); + a +------------------------------------------------------------------------------------------------------------------- + {"id": 281474976710658, "label": "", "properties": {"k": 999, "y": 1}}::vertex + {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "k": 999, "y": 2, "z": 99}}::vertex +(2 rows) + +SELECT * FROM cypher('cypher_set', $$ + MATCH p=(n)-[e:e {j:34}]->() + WITH relationships(p) AS rs + WITH rs[0] AS r + SET r.l = 99 + SET r.l = 999 + RETURN r +$$) AS (a agtype); + a +-------------------------------------------------------------------------------------------------------------------------------------------------- + {"id": 1125899906842630, "label": "e", "end_id": 281474976710659, "start_id": 281474976710658, "properties": {"j": 34, "l": 999, "y": 99}}::edge + {"id": 1125899906842629, "label": "e", "end_id": 844424930131970, "start_id": 844424930131970, "properties": {"j": 34, "l": 999}}::edge +(2 rows) + +SELECT * FROM cypher('cypher_set', $$ + MATCH p=(n)-[e:e {j:34}]->() + REMOVE n.k, e.l + RETURN p +$$) AS (a agtype); + a +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + [{"id": 281474976710658, "label": "", "properties": {"y": 1}}::vertex, {"id": 1125899906842630, "label": "e", "end_id": 281474976710659, "start_id": 281474976710658, "properties": {"j": 34, "y": 99}}::edge, {"id": 281474976710659, "label": "", "properties": {"y": 2}}::vertex]::path + [{"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "y": 2, "z": 99}}::vertex, {"id": 1125899906842629, "label": "e", "end_id": 844424930131970, "start_id": 844424930131970, "properties": {"j": 34}}::edge, {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 50, "j": 5, "y": 2, "z": 99}}::vertex]::path +(2 rows) + SELECT * FROM cypher('cypher_set', $$MATCH (n)-[]->(n) SET n.y = 99 RETURN n$$) AS (a agtype); a ---------------------------------------------------------------------------------------------------------- @@ -263,9 +326,9 @@ EXECUTE p_1; {"id": 281474976710659, "label": "", "properties": {"i": 3, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": 3, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": 3, "t": 150}}::vertex - {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 3, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": 3, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 3, "t": 150}}::vertex + {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 3, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": 3, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": 3, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": 3, "k": 10}}::vertex @@ -278,9 +341,9 @@ EXECUTE p_1; {"id": 281474976710659, "label": "", "properties": {"i": 3, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": 3, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": 3, "t": 150}}::vertex - {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 3, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": 3, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 3, "t": 150}}::vertex + {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 3, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": 3, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": 3, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": 3, "k": 10}}::vertex @@ -294,9 +357,9 @@ EXECUTE p_2('{"var_name": 4}'); {"id": 281474976710659, "label": "", "properties": {"i": 4, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": 4, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": 4, "t": 150}}::vertex - {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 4, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": 4, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 4, "t": 150}}::vertex + {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 4, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": 4, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": 4, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": 4, "k": 10}}::vertex @@ -309,9 +372,9 @@ EXECUTE p_2('{"var_name": 6}'); {"id": 281474976710659, "label": "", "properties": {"i": 6, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": 6, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": 6, "t": 150}}::vertex - {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 6, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": 6, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 6, "t": 150}}::vertex + {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 6, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": 6, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": 6, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": 6, "k": 10}}::vertex @@ -333,9 +396,9 @@ SELECT set_test(); {"id": 281474976710659, "label": "", "properties": {"i": 7, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": 7, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": 7, "t": 150}}::vertex - {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 7, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": 7, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 7, "t": 150}}::vertex + {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 7, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": 7, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": 7, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": 7, "k": 10}}::vertex @@ -348,9 +411,9 @@ SELECT set_test(); {"id": 281474976710659, "label": "", "properties": {"i": 7, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": 7, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": 7, "t": 150}}::vertex - {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 7, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": 7, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 7, "t": 150}}::vertex + {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 7, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": 7, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": 7, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": 7, "k": 10}}::vertex @@ -366,9 +429,9 @@ SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = 3, n.j = 5 RETURN n $$) {"id": 281474976710659, "label": "", "properties": {"i": 3, "j": 5, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": 3, "j": 5, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": 3, "j": 5, "t": 150}}::vertex - {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 3, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": 3, "j": 5, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": 3, "j": 5, "t": 150}}::vertex + {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": 3, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": 3, "j": 5, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": 3, "j": 5, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": 3, "j": 5, "k": 10}}::vertex @@ -517,9 +580,9 @@ SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = [3, 'test', [1, 2, 3], {"id": 281474976710659, "label": "", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150}}::vertex - {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150}}::vertex + {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "k": 10}}::vertex @@ -535,9 +598,9 @@ SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); {"id": 281474976710659, "label": "", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150}}::vertex - {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150}}::vertex + {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": [3, "test", [1, 2, 3], {"id": 1}, 1.0, 1::numeric], "j": 5, "k": 10}}::vertex @@ -567,9 +630,9 @@ SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = [] RETURN n$$) AS (a ag {"id": 281474976710659, "label": "", "properties": {"i": [], "j": 5, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": [], "j": 5, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": [], "j": 5, "t": 150}}::vertex - {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": [], "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": [], "j": 5, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": [], "j": 5, "t": 150}}::vertex + {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": [], "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": [], "j": 5, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": [], "j": 5, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": [], "j": 5, "k": 10}}::vertex @@ -585,9 +648,9 @@ SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); {"id": 281474976710659, "label": "", "properties": {"i": [], "j": 5, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": [], "j": 5, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": [], "j": 5, "t": 150}}::vertex - {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": [], "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": [], "j": 5, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": [], "j": 5, "t": 150}}::vertex + {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": [], "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": [], "j": 5, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": [], "j": 5, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": [], "j": 5, "k": 10}}::vertex @@ -604,9 +667,9 @@ SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = {prop1: 3, prop2:'test' {"id": 281474976710659, "label": "", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150}}::vertex - {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150}}::vertex + {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "k": 10}}::vertex @@ -622,9 +685,9 @@ SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); {"id": 281474976710659, "label": "", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150}}::vertex - {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150}}::vertex + {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": {"prop1": 3, "prop2": "test", "prop3": [1, 2, 3], "prop4": {"id": 1}, "prop5": 1.0, "prop6": 1::numeric}, "j": 5, "k": 10}}::vertex @@ -654,9 +717,9 @@ SELECT * FROM cypher('cypher_set', $$MATCH (n) SET n.i = {} RETURN n$$) AS (a ag {"id": 281474976710659, "label": "", "properties": {"i": {}, "j": 5, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": {}, "j": 5, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": {}, "j": 5, "t": 150}}::vertex - {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": {}, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": {}, "j": 5, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": {}, "j": 5, "t": 150}}::vertex + {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": {}, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": {}, "j": 5, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": {}, "j": 5, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": {}, "j": 5, "k": 10}}::vertex @@ -672,9 +735,9 @@ SELECT * FROM cypher('cypher_set', $$MATCH (n) RETURN n$$) AS (a agtype); {"id": 281474976710659, "label": "", "properties": {"i": {}, "j": 5, "y": 2}}::vertex {"id": 281474976710658, "label": "", "properties": {"i": {}, "j": 5, "t": 150, "y": 1}}::vertex {"id": 281474976710657, "label": "", "properties": {"i": {}, "j": 5, "t": 150}}::vertex - {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": {}, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 844424930131969, "label": "v", "properties": {"i": {}, "j": 5, "t": 150}}::vertex {"id": 844424930131971, "label": "v", "properties": {"i": {}, "j": 5, "t": 150}}::vertex + {"id": 844424930131970, "label": "v", "properties": {"a": 0, "i": {}, "j": 5, "t": 150, "y": 99, "z": 99}}::vertex {"id": 1407374883553281, "label": "other_v", "properties": {"i": {}, "j": 5, "k": 10}}::vertex {"id": 1407374883553282, "label": "other_v", "properties": {"i": {}, "j": 5, "k": 10}}::vertex {"id": 1407374883553283, "label": "other_v", "properties": {"i": {}, "j": 5, "k": 10}}::vertex diff --git a/regress/expected/expr.out b/regress/expected/expr.out index 1dfcba9db..37c7849b0 100644 --- a/regress/expected/expr.out +++ b/regress/expected/expr.out @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ +SET extra_float_digits = 0; LOAD 'age'; SET search_path TO ag_catalog; SELECT * FROM create_graph('expr'); @@ -1232,7 +1233,7 @@ $$) AS (i int); SELECT * FROM cypher('type_coercion', $$ RETURN '1.0' $$) AS (i bigint); -ERROR: invalid input syntax for integer: "1.0" +ERROR: invalid input syntax for type bigint: "1.0" -- Casting to ints that will cause overflow SELECT * FROM cypher('type_coercion', $$ RETURN 10000000000000000000 @@ -1417,11 +1418,11 @@ SELECT agtype_in('null::int'); SELECT * FROM cypher('expr', $$ RETURN '0.0'::int $$) AS r(result agtype); -ERROR: invalid input syntax for integer: "0.0" +ERROR: invalid input syntax for type bigint: "0.0" SELECT * FROM cypher('expr', $$ RETURN '1.5'::int $$) AS r(result agtype); -ERROR: invalid input syntax for integer: "1.5" +ERROR: invalid input syntax for type bigint: "1.5" SELECT * FROM cypher('graph_name', $$ RETURN "15555555555555555555555555555"::int $$) AS (string_result agtype); @@ -1439,11 +1440,11 @@ ERROR: bigint out of range SELECT * FROM cypher('expr', $$ RETURN ''::int $$) AS r(result agtype); -ERROR: invalid input syntax for integer: "" +ERROR: invalid input syntax for type bigint: "" SELECT * FROM cypher('expr', $$ RETURN 'false_'::int $$) AS r(result agtype); -ERROR: invalid input syntax for integer: "false_" +ERROR: invalid input syntax for type bigint: "false_" -- -- Test from an agtype value to agtype int -- @@ -5580,7 +5581,7 @@ SELECT * FROM cypher('UCSC', $$ MATCH (u) RETURN stDev(u.gpa), stDevP(u.gpa) $$) AS (stDev agtype, stDevP agtype); stdev | stdevp -------------------+------------------- - 0.549566929066705 | 0.508800109100231 + 0.549566929066706 | 0.508800109100232 (1 row) -- should return 0 diff --git a/regress/expected/scan.out b/regress/expected/scan.out index af82dbf22..d96d80049 100644 --- a/regress/expected/scan.out +++ b/regress/expected/scan.out @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ +SET extra_float_digits = 0; LOAD 'age'; SET search_path TO ag_catalog; SELECT create_graph('scan'); diff --git a/regress/sql/agtype.sql b/regress/sql/agtype.sql index e3bef554b..3fb81d01e 100644 --- a/regress/sql/agtype.sql +++ b/regress/sql/agtype.sql @@ -25,6 +25,7 @@ -- Load extension and set path -- LOAD 'age'; +SET extra_float_digits = 0; SET search_path TO ag_catalog; -- diff --git a/regress/sql/catalog.sql b/regress/sql/catalog.sql index 363ac66b9..96c63e47a 100644 --- a/regress/sql/catalog.sql +++ b/regress/sql/catalog.sql @@ -25,7 +25,7 @@ SET search_path TO ag_catalog; -- SELECT create_graph('graph'); -SELECT * FROM ag_graph WHERE name = 'graph'; +SELECT name, namespace FROM ag_graph WHERE name = 'graph'; -- create a label to test drop_label() SELECT * FROM cypher('graph', $$CREATE (:l)$$) AS r(a agtype); @@ -62,18 +62,18 @@ SELECT create_graph('GraphA'); SELECT create_graph('GraphB'); -- Show GraphA's construction to verify case is preserved. -SELECT * FROM ag_graph WHERE name = 'GraphA'; +SELECT name, namespace FROM ag_graph WHERE name = 'GraphA'; SELECT nspname FROM pg_namespace WHERE nspname = 'GraphA'; -- Rename GraphA to GraphX. SELECT alter_graph('GraphA', 'RENAME', 'GraphX'); -- Show GraphX's construction to verify case is preserved. -SELECT * FROM ag_graph WHERE name = 'GraphX'; +SELECT name, namespace FROM ag_graph WHERE name = 'GraphX'; SELECT nspname FROM pg_namespace WHERE nspname = 'GraphX'; -- Verify there isn't a graph GraphA anymore. -SELECT * FROM ag_graph WHERE name = 'GraphA'; +SELECT name, namespace FROM ag_graph WHERE name = 'GraphA'; SELECT * FROM pg_namespace WHERE nspname = 'GraphA'; -- Sanity check that graphx does not exist - should return 0. diff --git a/regress/sql/cypher_call.sql b/regress/sql/cypher_call.sql index 992948c19..236b0e7ae 100644 --- a/regress/sql/cypher_call.sql +++ b/regress/sql/cypher_call.sql @@ -35,8 +35,8 @@ CREATE FUNCTION call_stmt_test.add_agtype(agtype, agtype) RETURNS agtype IMMUTABLE RETURNS NULL ON NULL INPUT; -/* - * CALL (solo) +/* + * CALL (solo) */ SELECT * FROM cypher('cypher_call', $$CALL sqrt(64)$$) as (sqrt agtype); @@ -106,4 +106,4 @@ SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt AS sqrt1 CALL sq SELECT * FROM cypher('cypher_call', $$ CALL sqrt(64) YIELD sqrt CALL agtype_sum(2,2) YIELD agtype_sum AS sqrt RETURN sqrt, sqrt $$) as (a agtype, b agtype); DROP SCHEMA call_stmt_test CASCADE; -SELECT drop_graph('cypher_call', true); \ No newline at end of file +SELECT drop_graph('cypher_call', true); diff --git a/regress/sql/cypher_set.sql b/regress/sql/cypher_set.sql index 69dea2e4b..484cbff7d 100644 --- a/regress/sql/cypher_set.sql +++ b/regress/sql/cypher_set.sql @@ -62,6 +62,21 @@ SELECT * FROM cypher('cypher_set', $$ RETURN n $$) AS (a agtype); +SELECT * FROM cypher('cypher_set', $$ + MATCH (n {j: 5}) + SET n.y = 53 + SET n.y = 50 + SET n.z = 99 + SET n.arr = [n.y, n.z] + RETURN n +$$) AS (a agtype); + +SELECT * FROM cypher('cypher_set', $$ + MATCH (n {j: 5}) + REMOVE n.arr + RETURN n +$$) AS (a agtype); + SELECT * FROM cypher('cypher_set', $$ MATCH (n {j: 5}) RETURN n @@ -96,6 +111,32 @@ SELECT * FROM cypher('cypher_set', $$ RETURN n $$) AS (a agtype); +-- Test that SET works with nodes(path) and relationships(path) + +SELECT * FROM cypher('cypher_set', $$ + MATCH p=(n)-[e:e {j:34}]->() + WITH nodes(p) AS ns + WITH ns[0] AS n + SET n.k = 99 + SET n.k = 999 + RETURN n +$$) AS (a agtype); + +SELECT * FROM cypher('cypher_set', $$ + MATCH p=(n)-[e:e {j:34}]->() + WITH relationships(p) AS rs + WITH rs[0] AS r + SET r.l = 99 + SET r.l = 999 + RETURN r +$$) AS (a agtype); + +SELECT * FROM cypher('cypher_set', $$ + MATCH p=(n)-[e:e {j:34}]->() + REMOVE n.k, e.l + RETURN p +$$) AS (a agtype); + SELECT * FROM cypher('cypher_set', $$MATCH (n)-[]->(n) SET n.y = 99 RETURN n$$) AS (a agtype); SELECT * FROM cypher('cypher_set', $$MATCH (n) MATCH (n)-[]->(m) SET n.t = 150 RETURN n$$) AS (a agtype); diff --git a/regress/sql/expr.sql b/regress/sql/expr.sql index 186cc6fc6..c9547e332 100644 --- a/regress/sql/expr.sql +++ b/regress/sql/expr.sql @@ -17,6 +17,7 @@ * under the License. */ +SET extra_float_digits = 0; LOAD 'age'; SET search_path TO ag_catalog; diff --git a/regress/sql/scan.sql b/regress/sql/scan.sql index 97804e5c7..840a822f2 100644 --- a/regress/sql/scan.sql +++ b/regress/sql/scan.sql @@ -17,6 +17,7 @@ * under the License. */ +SET extra_float_digits = 0; LOAD 'age'; SET search_path TO ag_catalog; diff --git a/src/backend/catalog/ag_graph.c b/src/backend/catalog/ag_graph.c index c1e53d6ab..f4a0d7213 100644 --- a/src/backend/catalog/ag_graph.c +++ b/src/backend/catalog/ag_graph.c @@ -26,9 +26,11 @@ #include "access/skey.h" #include "access/stratnum.h" #include "catalog/indexing.h" +#include "catalog/namespace.h" +#include "nodes/makefuncs.h" #include "storage/lockdefs.h" -#include "utils/builtins.h" #include "utils/fmgroids.h" +#include "utils/fmgrprotos.h" #include "utils/lsyscache.h" #include "utils/rel.h" #include "utils/relcache.h" @@ -39,36 +41,36 @@ static Oid get_graph_namespace(const char *graph_name); // INSERT INTO ag_catalog.ag_graph VALUES (graph_name, nsp_id) -Oid insert_graph(const Name graph_name, const Oid nsp_id) +void insert_graph(const Name graph_name, const Oid nsp_id) { Datum values[Natts_ag_graph]; bool nulls[Natts_ag_graph]; Relation ag_graph; HeapTuple tuple; - Oid graph_oid; + AssertArg(graph_name); AssertArg(OidIsValid(nsp_id)); + ag_graph = table_open(ag_graph_relation_id(), RowExclusiveLock); + values[Anum_ag_graph_oid - 1] = ObjectIdGetDatum(nsp_id); + nulls[Anum_ag_graph_oid - 1] = false; + values[Anum_ag_graph_name - 1] = NameGetDatum(graph_name); nulls[Anum_ag_graph_name - 1] = false; values[Anum_ag_graph_namespace - 1] = ObjectIdGetDatum(nsp_id); nulls[Anum_ag_graph_namespace - 1] = false; - ag_graph = heap_open(ag_graph_relation_id(), RowExclusiveLock); - tuple = heap_form_tuple(RelationGetDescr(ag_graph), values, nulls); /* * CatalogTupleInsert() is originally for PostgreSQL's catalog. However, * it is used at here for convenience. */ - graph_oid = CatalogTupleInsert(ag_graph, tuple); - - heap_close(ag_graph, RowExclusiveLock); + CatalogTupleInsert(ag_graph, tuple); - return graph_oid; + table_close(ag_graph, RowExclusiveLock); } // DELETE FROM ag_catalog.ag_graph WHERE name = graph_name @@ -82,7 +84,7 @@ void delete_graph(const Name graph_name) ScanKeyInit(&scan_keys[0], Anum_ag_graph_name, BTEqualStrategyNumber, F_NAMEEQ, NameGetDatum(graph_name)); - ag_graph = heap_open(ag_graph_relation_id(), RowExclusiveLock); + ag_graph = table_open(ag_graph_relation_id(), RowExclusiveLock); scan_desc = systable_beginscan(ag_graph, ag_graph_name_index_id(), true, NULL, 1, scan_keys); @@ -97,7 +99,7 @@ void delete_graph(const Name graph_name) CatalogTupleDelete(ag_graph, &tuple->t_self); systable_endscan(scan_desc); - heap_close(ag_graph, RowExclusiveLock); + table_close(ag_graph, RowExclusiveLock); } // Function updates graph name in ag_graph table. @@ -116,7 +118,7 @@ void update_graph_name(const Name graph_name, const Name new_name) ScanKeyInit(&scan_keys[0], Anum_ag_graph_name, BTEqualStrategyNumber, F_NAMEEQ, NameGetDatum(graph_name)); - ag_graph = heap_open(ag_graph_relation_id(), RowExclusiveLock); + ag_graph = table_open(ag_graph_relation_id(), RowExclusiveLock); scan_desc = systable_beginscan(ag_graph, ag_graph_name_index_id(), true, NULL, 1, scan_keys); @@ -146,7 +148,7 @@ void update_graph_name(const Name graph_name, const Name new_name) // end scan and close ag_graph systable_endscan(scan_desc); - heap_close(ag_graph, RowExclusiveLock); + table_close(ag_graph, RowExclusiveLock); } Oid get_graph_oid(const char *graph_name) @@ -155,9 +157,13 @@ Oid get_graph_oid(const char *graph_name) cache_data = search_graph_name_cache(graph_name); if (cache_data) + { return cache_data->oid; + } else + { return InvalidOid; + } } static Oid get_graph_namespace(const char *graph_name) diff --git a/src/backend/catalog/ag_label.c b/src/backend/catalog/ag_label.c index 41a11abef..9cd892356 100644 --- a/src/backend/catalog/ag_label.c +++ b/src/backend/catalog/ag_label.c @@ -26,6 +26,7 @@ #include "access/skey.h" #include "access/stratnum.h" #include "catalog/indexing.h" +#include "catalog/namespace.h" #include "fmgr.h" #include "nodes/execnodes.h" #include "nodes/makefuncs.h" @@ -43,10 +44,13 @@ #include "utils/ag_cache.h" #include "utils/graphid.h" -// INSERT INTO ag_catalog.ag_label -// VALUES (label_name, label_graph, label_id, label_kind, label_relation, seq_name) -Oid insert_label(const char *label_name, Oid label_graph, int32 label_id, - char label_kind, Oid label_relation, const char *seq_name) +/* + * INSERT INTO ag_catalog.ag_label + * VALUES (label_name, label_graph, label_id, label_kind, + * label_relation, seq_name) + */ +void insert_label(const char *label_name, Oid graph_oid, int32 label_id, + char label_kind, Oid label_relation, const char *seq_name) { NameData label_name_data; NameData seq_name_data; @@ -54,25 +58,25 @@ Oid insert_label(const char *label_name, Oid label_graph, int32 label_id, bool nulls[Natts_ag_label]; Relation ag_label; HeapTuple tuple; - Oid label_oid; /* * NOTE: Is it better to make use of label_id and label_kind domain types * than to use assert to check label_id and label_kind are valid? */ AssertArg(label_name); - AssertArg(OidIsValid(label_graph)); AssertArg(label_id_is_valid(label_id)); AssertArg(label_kind == LABEL_KIND_VERTEX || label_kind == LABEL_KIND_EDGE); AssertArg(OidIsValid(label_relation)); AssertArg(seq_name); + ag_label = table_open(ag_label_relation_id(), RowExclusiveLock); + namestrcpy(&label_name_data, label_name); values[Anum_ag_label_name - 1] = NameGetDatum(&label_name_data); nulls[Anum_ag_label_name - 1] = false; - values[Anum_ag_label_graph - 1] = ObjectIdGetDatum(label_graph); + values[Anum_ag_label_graph - 1] = ObjectIdGetDatum(graph_oid); nulls[Anum_ag_label_graph - 1] = false; values[Anum_ag_label_id - 1] = Int32GetDatum(label_id); @@ -88,19 +92,15 @@ Oid insert_label(const char *label_name, Oid label_graph, int32 label_id, values[Anum_ag_label_seq_name - 1] = NameGetDatum(&seq_name_data); nulls[Anum_ag_label_seq_name - 1] = false; - ag_label = heap_open(ag_label_relation_id(), RowExclusiveLock); - tuple = heap_form_tuple(RelationGetDescr(ag_label), values, nulls); /* * CatalogTupleInsert() is originally for PostgreSQL's catalog. However, * it is used at here for convenience. */ - label_oid = CatalogTupleInsert(ag_label, tuple); - - heap_close(ag_label, RowExclusiveLock); + CatalogTupleInsert(ag_label, tuple); - return label_oid; + table_close(ag_label, RowExclusiveLock); } // DELETE FROM ag_catalog.ag_label WHERE relation = relation @@ -114,7 +114,7 @@ void delete_label(Oid relation) ScanKeyInit(&scan_keys[0], Anum_ag_label_relation, BTEqualStrategyNumber, F_OIDEQ, ObjectIdGetDatum(relation)); - ag_label = heap_open(ag_label_relation_id(), RowExclusiveLock); + ag_label = table_open(ag_label_relation_id(), RowExclusiveLock); scan_desc = systable_beginscan(ag_label, ag_label_relation_index_id(), true, NULL, 1, scan_keys); @@ -129,45 +129,34 @@ void delete_label(Oid relation) CatalogTupleDelete(ag_label, &tuple->t_self); systable_endscan(scan_desc); - heap_close(ag_label, RowExclusiveLock); + table_close(ag_label, RowExclusiveLock); } -Oid get_label_oid(const char *label_name, Oid label_graph) +int32 get_label_id(const char *label_name, Oid graph_oid) { label_cache_data *cache_data; - cache_data = search_label_name_graph_cache(label_name, label_graph); - if (cache_data) - return cache_data->oid; - else - return InvalidOid; -} - -int32 get_label_id(const char *label_name, Oid label_graph) -{ - label_cache_data *cache_data; - - cache_data = search_label_name_graph_cache(label_name, label_graph); + cache_data = search_label_name_graph_cache(label_name, graph_oid); if (cache_data) return cache_data->id; else return INVALID_LABEL_ID; } -Oid get_label_relation(const char *label_name, Oid label_graph) +Oid get_label_relation(const char *label_name, Oid graph_oid) { label_cache_data *cache_data; - cache_data = search_label_name_graph_cache(label_name, label_graph); + cache_data = search_label_name_graph_cache(label_name, graph_oid); if (cache_data) return cache_data->relation; else return InvalidOid; } -char *get_label_relation_name(const char *label_name, Oid label_graph) +char *get_label_relation_name(const char *label_name, Oid graph_oid) { - return get_rel_name(get_label_relation(label_name, label_graph)); + return get_rel_name(get_label_relation(label_name, graph_oid)); } char get_label_kind(const char *label_name, Oid label_graph) @@ -206,7 +195,7 @@ Datum _label_name(PG_FUNCTION_ARGS) label_id = (int32)(((uint64)AG_GETARG_GRAPHID(1)) >> ENTRY_ID_BITS); - label_cache = search_label_graph_id_cache(graph, label_id); + label_cache = search_label_graph_oid_cache(graph, label_id); label_name = NameStr(label_cache->name); @@ -243,23 +232,23 @@ PG_FUNCTION_INFO_V1(_extract_label_id); Datum _extract_label_id(PG_FUNCTION_ARGS) { - graphid graph_id; + graphid graph_oid; if (PG_ARGISNULL(0)) { ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), - errmsg("graph_id must not be null"))); + errmsg("graph_oid must not be null"))); } - graph_id = AG_GETARG_GRAPHID(0); + graph_oid = AG_GETARG_GRAPHID(0); - PG_RETURN_INT32(get_graphid_label_id(graph_id)); + PG_RETURN_INT32(get_graphid_label_id(graph_oid)); } -bool label_id_exists(Oid label_graph, int32 label_id) +bool label_id_exists(Oid graph_oid, int32 label_id) { label_cache_data *cache_data; - cache_data = search_label_graph_id_cache(label_graph, label_id); + cache_data = search_label_graph_oid_cache(graph_oid, label_id); if (cache_data) return true; else @@ -288,15 +277,16 @@ RangeVar *get_label_range_var(char *graph_name, Oid graph_oid, * XXX: We may want to use the cache system for this function, * however the cache system currently requires us to know the * name of the label we want. - */ + */ List *get_all_edge_labels_per_graph(EState *estate, Oid graph_oid) { List *labels = NIL; ScanKeyData scan_keys[2]; Relation ag_label; - HeapScanDesc scan_desc; + TableScanDesc scan_desc; HeapTuple tuple; TupleTableSlot *slot; + ResultRelInfo *resultRelInfo; // setup scan keys to get all edges for the given graph oid ScanKeyInit(&scan_keys[1], Anum_ag_label_graph, BTEqualStrategyNumber, @@ -305,11 +295,15 @@ List *get_all_edge_labels_per_graph(EState *estate, Oid graph_oid) F_CHAREQ, CharGetDatum(LABEL_TYPE_EDGE)); // setup the table to be scanned - ag_label = heap_open(ag_label_relation_id(), RowExclusiveLock); - scan_desc = heap_beginscan(ag_label, estate->es_snapshot, 2, scan_keys); + ag_label = table_open(ag_label_relation_id(), RowExclusiveLock); + scan_desc = table_beginscan(ag_label, estate->es_snapshot, 2, scan_keys); - slot = ExecInitExtraTupleSlot(estate, - RelationGetDescr(ag_label)); + resultRelInfo = create_entity_result_rel_info(estate, "ag_catalog", + "ag_label"); + + slot = ExecInitExtraTupleSlot( + estate, RelationGetDescr(resultRelInfo->ri_RelationDesc), + &TTSOpsHeapTuple); // scan through the results and get all the label names. while(true) @@ -324,7 +318,7 @@ List *get_all_edge_labels_per_graph(EState *estate, Oid graph_oid) if (!HeapTupleIsValid(tuple)) break; - ExecStoreTuple(tuple, slot, InvalidBuffer, false); + ExecStoreHeapTuple(tuple, slot, false); datum = slot_getattr(slot, Anum_ag_label_name, &isNull); label = DatumGetName(datum); @@ -332,8 +326,10 @@ List *get_all_edge_labels_per_graph(EState *estate, Oid graph_oid) labels = lappend(labels, label); } - heap_endscan(scan_desc); - heap_close(ag_label, RowExclusiveLock); + table_endscan(scan_desc); + + destroy_entity_result_rel_info(resultRelInfo); + table_close(resultRelInfo->ri_RelationDesc, RowExclusiveLock); return labels; } diff --git a/src/backend/commands/graph_commands.c b/src/backend/commands/graph_commands.c index 4216652bc..7df40b948 100644 --- a/src/backend/commands/graph_commands.c +++ b/src/backend/commands/graph_commands.c @@ -19,9 +19,9 @@ #include "postgres.h" -#include "access/xact.h" #include "access/genam.h" #include "access/heapam.h" +#include "access/xact.h" #include "catalog/dependency.h" #include "catalog/objectaddress.h" #include "commands/defrem.h" @@ -35,9 +35,8 @@ #include "nodes/pg_list.h" #include "nodes/value.h" #include "parser/parser.h" -#include "utils/fmgroids.h" -#include "utils/relcache.h" #include "utils/rel.h" +#include "utils/relcache.h" #include "catalog/ag_graph.h" #include "catalog/ag_label.h" @@ -182,9 +181,8 @@ Datum drop_graph(PG_FUNCTION_ARGS) graph_name_str = NameStr(*graph_name); if (!graph_exists(graph_name_str)) { - ereport(ERROR, - (errcode(ERRCODE_UNDEFINED_SCHEMA), - errmsg("graph \"%s\" does not exist", graph_name_str))); + ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), + errmsg("graph \"%s\" does not exist", graph_name_str))); } drop_schema_for_graph(graph_name_str, cascade); @@ -367,11 +365,11 @@ List *get_graphnames(void) List *graphnames = NIL; char *str; - ag_graph = heap_open(ag_graph_relation_id(), RowExclusiveLock); + ag_graph = table_open(ag_graph_relation_id(), RowExclusiveLock); scan_desc = systable_beginscan(ag_graph, ag_graph_name_index_id(), true, NULL, 0, NULL); - slot = MakeTupleTableSlot(RelationGetDescr(ag_graph)); + slot = MakeTupleTableSlot(RelationGetDescr(ag_graph), &TTSOpsHeapTuple); for (;;) { @@ -380,17 +378,17 @@ List *get_graphnames(void) break; ExecClearTuple(slot); - ExecStoreTuple(tuple, slot, InvalidBuffer, false); + ExecStoreHeapTuple(tuple, slot, false); slot_getallattrs(slot); - str = DatumGetCString(slot->tts_values[0]); + str = DatumGetCString(slot->tts_values[Anum_ag_graph_name - 1]); graphnames = lappend(graphnames, str); } ExecDropSingleTupleTableSlot(slot); systable_endscan(scan_desc); - heap_close(ag_graph, RowExclusiveLock); + table_close(ag_graph, RowExclusiveLock); return graphnames; } diff --git a/src/backend/commands/label_commands.c b/src/backend/commands/label_commands.c index b696e9637..39e9dce37 100644 --- a/src/backend/commands/label_commands.c +++ b/src/backend/commands/label_commands.c @@ -260,8 +260,8 @@ Datum create_elabel(PG_FUNCTION_ARGS) * new table and sequence. Returns the oid from the new tuple in * ag_catalog.ag_label. */ -Oid create_label(char *graph_name, char *label_name, char label_type, - List *parents) +void create_label(char *graph_name, char *label_name, char label_type, + List *parents) { graph_cache_data *cache_data; Oid graph_oid; @@ -272,7 +272,12 @@ Oid create_label(char *graph_name, char *label_name, char label_type, RangeVar *seq_range_var; int32 label_id; Oid relation_id; - Oid label_oid; + + if (!is_valid_label(label_name, label_type)) + { + ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), + errmsg("label name is invalid"))); + } if (!is_valid_label(label_name, label_type)) { @@ -314,12 +319,10 @@ Oid create_label(char *graph_name, char *label_name, char label_type, // get a new "id" for the new label label_id = get_new_label_id(graph_oid, nsp_id); - label_oid = insert_label(label_name, graph_oid, label_id, label_type, - relation_id,seq_name); + insert_label(label_name, graph_oid, label_id, label_type, + relation_id, seq_name); CommandCounterIncrement(); - - return label_oid; } // CREATE TABLE `schema_name`.`rel_name` ( @@ -684,13 +687,15 @@ static int32 get_new_label_id(Oid graph_oid, Oid nsp_id) for (cnt = LABEL_ID_MIN; cnt <= LABEL_ID_MAX; cnt++) { - int64 label_id; + int32 label_id; // the data type of the sequence is integer (int4) - label_id = nextval_internal(seq_id, true); + label_id = (int32) nextval_internal(seq_id, true); Assert(label_id_is_valid(label_id)); if (!label_id_exists(graph_oid, label_id)) - return (int32)label_id; + { + return (int32) label_id; + } } ereport(ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), diff --git a/src/backend/executor/cypher_create.c b/src/backend/executor/cypher_create.c index bf349e8ac..4b4810924 100644 --- a/src/backend/executor/cypher_create.c +++ b/src/backend/executor/cypher_create.c @@ -19,6 +19,7 @@ #include "postgres.h" +#include "access/heapam.h" #include "access/htup_details.h" #include "access/xact.h" #include "executor/tuptable.h" @@ -26,17 +27,14 @@ #include "nodes/extensible.h" #include "nodes/nodes.h" #include "nodes/plannodes.h" -#include "parser/parse_relation.h" #include "rewrite/rewriteHandler.h" #include "utils/rel.h" -#include "utils/tqual.h" #include "catalog/ag_label.h" #include "executor/cypher_executor.h" #include "executor/cypher_utils.h" #include "nodes/cypher_nodes.h" #include "utils/agtype.h" -#include "utils/ag_cache.h" #include "utils/graphid.h" static void begin_cypher_create(CustomScanState *node, EState *estate, @@ -85,7 +83,8 @@ static void begin_cypher_create(CustomScanState *node, EState *estate, ExecAssignExprContext(estate, &node->ss.ps); ExecInitScanTupleSlot(estate, &node->ss, - ExecGetResultType(node->ss.ps.lefttree)); + ExecGetResultType(node->ss.ps.lefttree), + &TTSOpsHeapTuple); if (!CYPHER_CLAUSE_IS_TERMINAL(css->flags)) { @@ -108,7 +107,7 @@ static void begin_cypher_create(CustomScanState *node, EState *estate, continue; // Open relation and acquire a row exclusive lock. - rel = heap_open(cypher_node->relid, RowExclusiveLock); + rel = table_open(cypher_node->relid, RowExclusiveLock); // Initialize resultRelInfo for the vertex cypher_node->resultRelInfo = makeNode(ResultRelInfo); @@ -120,9 +119,8 @@ static void begin_cypher_create(CustomScanState *node, EState *estate, ExecOpenIndices(cypher_node->resultRelInfo, false); // Setup the relation's tuple slot - cypher_node->elemTupleSlot = ExecInitExtraTupleSlot( - estate, - RelationGetDescr(cypher_node->resultRelInfo->ri_RelationDesc)); + cypher_node->elemTupleSlot = table_slot_create( + rel, &estate->es_tupleTable); if (cypher_node->id_expr != NULL) { @@ -295,8 +293,8 @@ static void end_cypher_create(CustomScanState *node) ExecCloseIndices(cypher_node->resultRelInfo); // close the relation itself - heap_close(cypher_node->resultRelInfo->ri_RelationDesc, - RowExclusiveLock); + table_close(cypher_node->resultRelInfo->ri_RelationDesc, + RowExclusiveLock); } } } @@ -446,6 +444,7 @@ static void create_edge(cypher_create_custom_scan_state *css, prev_path = lappend(prev_path, DatumGetPointer(result)); css->path_values = list_concat(prev_path, css->path_values); } + if (CYPHER_TARGET_NODE_IS_VARIABLE(node->flags)) { scantuple->tts_values[node->tuple_position - 1] = result; diff --git a/src/backend/executor/cypher_delete.c b/src/backend/executor/cypher_delete.c index 866432d6b..a83003607 100644 --- a/src/backend/executor/cypher_delete.c +++ b/src/backend/executor/cypher_delete.c @@ -19,27 +19,23 @@ #include "postgres.h" -#include "access/sysattr.h" +#include "access/heapam.h" #include "access/htup_details.h" #include "access/multixact.h" +#include "access/table.h" #include "access/xact.h" -#include "storage/bufmgr.h" #include "executor/tuptable.h" #include "nodes/execnodes.h" #include "nodes/extensible.h" #include "nodes/nodes.h" #include "nodes/plannodes.h" #include "parser/parsetree.h" -#include "parser/parse_relation.h" -#include "rewrite/rewriteHandler.h" +#include "storage/bufmgr.h" #include "utils/rel.h" -#include "utils/tqual.h" #include "catalog/ag_label.h" -#include "commands/label_commands.h" #include "executor/cypher_executor.h" #include "executor/cypher_utils.h" -#include "parser/cypher_parse_node.h" #include "nodes/cypher_nodes.h" #include "utils/agtype.h" #include "utils/graphid.h" @@ -99,7 +95,8 @@ static void begin_cypher_delete(CustomScanState *node, EState *estate, // setup scan tuple slot and projection info ExecInitScanTupleSlot(estate, &node->ss, - ExecGetResultType(node->ss.ps.lefttree)); + ExecGetResultType(node->ss.ps.lefttree), + &TTSOpsHeapTuple); if (!CYPHER_CLAUSE_IS_TERMINAL(css->flags)) { @@ -284,9 +281,9 @@ static void delete_entity(EState *estate, ResultRelInfo *resultRelInfo, { ResultRelInfo *saved_resultRelInfo; LockTupleMode lockmode; - HeapUpdateFailureData hufd; - HTSU_Result lock_result; - HTSU_Result delete_result; + TM_FailureData hufd; + TM_Result lock_result; + TM_Result delete_result; Buffer buffer; // Find the physical tuple, this variable is coming from @@ -303,11 +300,11 @@ static void delete_entity(EState *estate, ResultRelInfo *resultRelInfo, * It is possible the entity may have already been deleted. If the tuple * can be deleted, the lock result will be HeapTupleMayBeUpdated. If the * tuple was already deleted by this DELETE clause, the result would be - * HeapTupleSelfUpdated, if the result was deleted by a previous delete - * clause, the result will HeapTupleInvisible. Throw an error if any + * TM_SelfModified, if the result was deleted by a previous delete + * clause, the result will TM_Invisible. Throw an error if any * other result was returned. */ - if (lock_result == HeapTupleMayBeUpdated) + if (lock_result == TM_Ok) { delete_result = heap_delete(resultRelInfo->ri_RelationDesc, &tuple->t_self, GetCurrentCommandId(true), @@ -320,30 +317,32 @@ static void delete_entity(EState *estate, ResultRelInfo *resultRelInfo, */ switch (delete_result) { - case HeapTupleMayBeUpdated: - break; - case HeapTupleSelfUpdated: - ereport(ERROR, - (errcode(ERRCODE_INTERNAL_ERROR), - errmsg("deleting the same entity more than once cannot happen"))); - /* ereport never gets here */ - break; - case HeapTupleUpdated: - ereport(ERROR, - (errcode(ERRCODE_T_R_SERIALIZATION_FAILURE), - errmsg("could not serialize access due to concurrent update"))); - /* ereport never gets here */ - break; - default: - elog(ERROR, "Entity failed to be update"); - /* elog never gets here */ - break; + case TM_Ok: + break; + case TM_SelfModified: + ereport( + ERROR, + (errcode(ERRCODE_INTERNAL_ERROR), + errmsg( + "deleting the same entity more than once cannot happen"))); + /* ereport never gets here */ + break; + case TM_Updated: + ereport( + ERROR, + (errcode(ERRCODE_T_R_SERIALIZATION_FAILURE), + errmsg("could not serialize access due to concurrent update"))); + /* ereport never gets here */ + break; + default: + elog(ERROR, "Entity failed to be update"); + /* elog never gets here */ + break; } /* increment the command counter */ CommandCounterIncrement(); } - else if (lock_result != HeapTupleInvisible && - lock_result != HeapTupleSelfUpdated) + else if (lock_result != TM_Invisible && lock_result != TM_SelfModified) { ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR), @@ -374,7 +373,7 @@ static void process_delete_list(CustomScanState *node) cypher_delete_item *item; agtype_value *original_entity_value, *id, *label; ScanKeyData scan_keys[1]; - HeapScanDesc scan_desc; + TableScanDesc scan_desc; ResultRelInfo *resultRelInfo; HeapTuple heap_tuple; char *label_name; @@ -424,8 +423,8 @@ static void process_delete_list(CustomScanState *node) /* * Setup the scan description, with the correct snapshot and scan keys. */ - scan_desc = heap_beginscan(resultRelInfo->ri_RelationDesc, - estate->es_snapshot, 1, scan_keys); + scan_desc = table_beginscan(resultRelInfo->ri_RelationDesc, + estate->es_snapshot, 1, scan_keys); /* Retrieve the tuple. */ heap_tuple = heap_getnext(scan_desc, ForwardScanDirection); @@ -437,7 +436,7 @@ static void process_delete_list(CustomScanState *node) */ if (!HeapTupleIsValid(heap_tuple)) { - heap_endscan(scan_desc); + table_endscan(scan_desc); destroy_entity_result_rel_info(resultRelInfo); continue; @@ -459,7 +458,7 @@ static void process_delete_list(CustomScanState *node) delete_entity(estate, resultRelInfo, heap_tuple); /* Close the scan and the relation. */ - heap_endscan(scan_desc); + table_endscan(scan_desc); destroy_entity_result_rel_info(resultRelInfo); } } @@ -492,18 +491,19 @@ static void find_connected_edges(CustomScanState *node, char *graph_name, { char *label_name = lfirst(lc); ResultRelInfo *resultRelInfo; - HeapScanDesc scan_desc; + TableScanDesc scan_desc; HeapTuple tuple; TupleTableSlot *slot; resultRelInfo = create_entity_result_rel_info(estate, graph_name, label_name); - scan_desc = heap_beginscan(resultRelInfo->ri_RelationDesc, - estate->es_snapshot, 0, NULL); + scan_desc = table_beginscan(resultRelInfo->ri_RelationDesc, + estate->es_snapshot, 0, NULL); - slot = ExecInitExtraTupleSlot(estate, - RelationGetDescr(resultRelInfo->ri_RelationDesc)); + slot = ExecInitExtraTupleSlot( + estate, RelationGetDescr(resultRelInfo->ri_RelationDesc), + &TTSOpsHeapTuple); // scan the table while(true) @@ -517,7 +517,7 @@ static void find_connected_edges(CustomScanState *node, char *graph_name, if (!HeapTupleIsValid(tuple)) break; - ExecStoreTuple(tuple, slot, InvalidBuffer, false); + ExecStoreHeapTuple(tuple, slot, false); startid = GRAPHID_GET_DATUM(slot_getattr(slot, Anum_ag_label_edge_table_start_id, &isNull)); endid = GRAPHID_GET_DATUM(slot_getattr(slot, Anum_ag_label_edge_table_end_id, &isNull)); @@ -540,7 +540,7 @@ static void find_connected_edges(CustomScanState *node, char *graph_name, } } - heap_endscan(scan_desc); + table_endscan(scan_desc); destroy_entity_result_rel_info(resultRelInfo); } diff --git a/src/backend/executor/cypher_merge.c b/src/backend/executor/cypher_merge.c index 0ac49761d..c386e6524 100644 --- a/src/backend/executor/cypher_merge.c +++ b/src/backend/executor/cypher_merge.c @@ -20,23 +20,20 @@ #include "postgres.h" #include "access/htup_details.h" +#include "access/table.h" #include "access/xact.h" #include "executor/tuptable.h" #include "nodes/execnodes.h" #include "nodes/extensible.h" #include "nodes/nodes.h" #include "nodes/plannodes.h" -#include "parser/parse_relation.h" -#include "rewrite/rewriteHandler.h" #include "utils/rel.h" -#include "utils/tqual.h" #include "catalog/ag_label.h" #include "executor/cypher_executor.h" #include "executor/cypher_utils.h" #include "nodes/cypher_nodes.h" #include "utils/agtype.h" -#include "utils/ag_cache.h" #include "utils/graphid.h" static void begin_cypher_merge(CustomScanState *node, EState *estate, @@ -85,7 +82,8 @@ static void begin_cypher_merge(CustomScanState *node, EState *estate, ExecAssignExprContext(estate, &node->ss.ps); ExecInitScanTupleSlot(estate, &node->ss, - ExecGetResultType(node->ss.ps.lefttree)); + ExecGetResultType(node->ss.ps.lefttree), + &TTSOpsVirtual); /* * When MERGE is not the last clause in a cypher query. Setup projection @@ -120,7 +118,7 @@ static void begin_cypher_merge(CustomScanState *node, EState *estate, } // Open relation and acquire a row exclusive lock. - rel = heap_open(cypher_node->relid, RowExclusiveLock); + rel = table_open(cypher_node->relid, RowExclusiveLock); // Initialize resultRelInfo for the vertex cypher_node->resultRelInfo = makeNode(ResultRelInfo); @@ -134,7 +132,8 @@ static void begin_cypher_merge(CustomScanState *node, EState *estate, // Setup the relation's tuple slot cypher_node->elemTupleSlot = ExecInitExtraTupleSlot( estate, - RelationGetDescr(cypher_node->resultRelInfo->ri_RelationDesc)); + RelationGetDescr(cypher_node->resultRelInfo->ri_RelationDesc), + &TTSOpsHeapTuple); if (cypher_node->id_expr != NULL) { @@ -277,7 +276,6 @@ static void process_simple_merge(CustomScanState *node) /* setup the scantuple that the process_path needs */ econtext->ecxt_scantuple = sss->ss.ss_ScanTupleSlot; - econtext->ecxt_scantuple->tts_isempty = false; process_path(css); } @@ -476,7 +474,6 @@ static TupleTableSlot *exec_cypher_merge(CustomScanState *node) */ ExprContext *econtext = node->ss.ps.ps_ExprContext; SubqueryScanState *sss = (SubqueryScanState *)node->ss.ps.lefttree; - HeapTuple heap_tuple = NULL; /* * Our child execution node is always a subquery. If not there @@ -503,8 +500,8 @@ static TupleTableSlot *exec_cypher_merge(CustomScanState *node) * it. */ ExecInitScanTupleSlot(estate, &sss->ss, - ExecGetResultType(sss->subplan)); - + ExecGetResultType(sss->subplan), + &TTSOpsVirtual); /* setup the scantuple that the process_path needs */ econtext->ecxt_scantuple = sss->ss.ss_ScanTupleSlot; @@ -521,15 +518,8 @@ static TupleTableSlot *exec_cypher_merge(CustomScanState *node) */ mark_tts_isnull(econtext->ecxt_scantuple); - // create the physical heap tuple - heap_tuple = heap_form_tuple( - econtext->ecxt_scantuple->tts_tupleDescriptor, - econtext->ecxt_scantuple->tts_values, - econtext->ecxt_scantuple->tts_isnull); - - // store the heap tuple - ExecStoreTuple(heap_tuple, econtext->ecxt_scantuple, InvalidBuffer, - false); + // store the heap tuble + ExecStoreVirtualTuple(econtext->ecxt_scantuple); /* * make the subquery's projection scan slot be the tuple table we @@ -580,8 +570,8 @@ static void end_cypher_merge(CustomScanState *node) ExecCloseIndices(cypher_node->resultRelInfo); // close the relation itself - heap_close(cypher_node->resultRelInfo->ri_RelationDesc, - RowExclusiveLock); + table_close(cypher_node->resultRelInfo->ri_RelationDesc, + RowExclusiveLock); } } diff --git a/src/backend/executor/cypher_set.c b/src/backend/executor/cypher_set.c index 6afa2c8a3..7a8ec9b30 100644 --- a/src/backend/executor/cypher_set.c +++ b/src/backend/executor/cypher_set.c @@ -19,25 +19,20 @@ #include "postgres.h" -#include "access/sysattr.h" +#include "access/heapam.h" #include "access/htup_details.h" #include "access/xact.h" -#include "storage/bufmgr.h" #include "executor/tuptable.h" #include "nodes/execnodes.h" #include "nodes/extensible.h" #include "nodes/nodes.h" #include "nodes/plannodes.h" -#include "parser/parsetree.h" -#include "parser/parse_relation.h" #include "rewrite/rewriteHandler.h" +#include "storage/bufmgr.h" #include "utils/rel.h" -#include "catalog/ag_label.h" -#include "commands/label_commands.h" #include "executor/cypher_executor.h" #include "executor/cypher_utils.h" -#include "parser/cypher_parse_node.h" #include "nodes/cypher_nodes.h" #include "utils/agtype.h" #include "utils/graphid.h" @@ -82,7 +77,8 @@ static void begin_cypher_set(CustomScanState *node, EState *estate, ExecAssignExprContext(estate, &node->ss.ps); ExecInitScanTupleSlot(estate, &node->ss, - ExecGetResultType(node->ss.ps.lefttree)); + ExecGetResultType(node->ss.ps.lefttree), + &TTSOpsHeapTuple); if (!CYPHER_CLAUSE_IS_TERMINAL(css->flags)) { @@ -112,11 +108,12 @@ static HeapTuple update_entity_tuple(ResultRelInfo *resultRelInfo, { HeapTuple tuple = NULL; LockTupleMode lockmode; - HeapUpdateFailureData hufd; - HTSU_Result lock_result; - HTSU_Result update_result; + TM_FailureData hufd; + TM_Result lock_result; Buffer buffer; - + bool update_indexes; + TM_Result result; + CommandId cid = GetCurrentCommandId(true); ResultRelInfo *saved_resultRelInfo = estate->es_result_relation_info; estate->es_result_relation_info = resultRelInfo; @@ -126,10 +123,11 @@ static HeapTuple update_entity_tuple(ResultRelInfo *resultRelInfo, GetCurrentCommandId(false), lockmode, LockWaitBlock, false, &buffer, &hufd); - if (lock_result == HeapTupleMayBeUpdated) + if (lock_result == TM_Ok) { + ExecOpenIndices(resultRelInfo, false); ExecStoreVirtualTuple(elemTupleSlot); - tuple = ExecMaterializeSlot(elemTupleSlot); + tuple = ExecFetchSlotHeapTuple(elemTupleSlot, true, NULL); tuple->t_self = old_tuple->t_self; // Check the constraints of the tuple @@ -139,26 +137,57 @@ static HeapTuple update_entity_tuple(ResultRelInfo *resultRelInfo, ExecConstraints(resultRelInfo, elemTupleSlot, estate); } - // Insert the tuple normally - update_result = heap_update(resultRelInfo->ri_RelationDesc, - &(tuple->t_self), tuple, - GetCurrentCommandId(true), - estate->es_crosscheck_snapshot, true, &hufd, - &lockmode); + result = table_tuple_update(resultRelInfo->ri_RelationDesc, + &tuple->t_self, elemTupleSlot, + cid, estate->es_snapshot, + estate->es_crosscheck_snapshot, + true /* wait for commit */ , + &hufd, &lockmode, &update_indexes); + + if (result == TM_SelfModified) + { + if (hufd.cmax != cid) + { + ereport(ERROR, + (errcode(ERRCODE_TRIGGERED_DATA_CHANGE_VIOLATION), + errmsg("tuple to be updated was already modified"))); + } + + ExecCloseIndices(resultRelInfo); + estate->es_result_relation_info = saved_resultRelInfo; + + return tuple; + } - if (update_result != HeapTupleMayBeUpdated) + if (result != TM_Ok) { ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR), - errmsg("Entity failed to be updated: %i", update_result))); + errmsg("Entity failed to be updated: %i", result))); } // Insert index entries for the tuple - if (resultRelInfo->ri_NumIndices > 0) + if (resultRelInfo->ri_NumIndices > 0 && update_indexes) { - ExecInsertIndexTuples(elemTupleSlot, &(tuple->t_self), estate, - false, NULL, NIL); + ExecInsertIndexTuples(elemTupleSlot, estate, false, NULL, NIL); } + + ExecCloseIndices(resultRelInfo); } + else if (lock_result == TM_SelfModified) + { + if (hufd.cmax != cid) + { + ereport(ERROR, + (errcode(ERRCODE_TRIGGERED_DATA_CHANGE_VIOLATION), + errmsg("tuple to be updated was already modified"))); + } + } + else + { + ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR), + errmsg("Entity failed to be updated: %i", lock_result))); + } + ReleaseBuffer(buffer); estate->es_result_relation_info = saved_resultRelInfo; @@ -376,13 +405,14 @@ static void process_update_list(CustomScanState *node) TupleTableSlot *slot; ResultRelInfo *resultRelInfo; ScanKeyData scan_keys[1]; - HeapScanDesc scan_desc; + TableScanDesc scan_desc; bool remove_property; char *label_name; cypher_update_item *update_item; Datum new_entity; HeapTuple heap_tuple; char *clause_name = css->set_list->clause_name; + int cid; update_item = (cypher_update_item *)lfirst(lc); @@ -418,8 +448,8 @@ static void process_update_list(CustomScanState *node) /* get the id and label for later */ id = GET_AGTYPE_VALUE_OBJECT_VALUE(original_entity_value, "id"); label = GET_AGTYPE_VALUE_OBJECT_VALUE(original_entity_value, "label"); - label_name = pnstrdup(label->val.string.val, label->val.string.len); + label_name = pnstrdup(label->val.string.val, label->val.string.len); /* get the properties we need to update */ original_properties = GET_AGTYPE_VALUE_OBJECT_VALUE(original_entity_value, "properties"); @@ -478,11 +508,12 @@ static void process_update_list(CustomScanState *node) } } - resultRelInfo = create_entity_result_rel_info(estate, - css->set_list->graph_name, - label_name); + resultRelInfo = create_entity_result_rel_info( + estate, css->set_list->graph_name, label_name); - slot = ExecInitExtraTupleSlot(estate, RelationGetDescr(resultRelInfo->ri_RelationDesc)); + slot = ExecInitExtraTupleSlot( + estate, RelationGetDescr(resultRelInfo->ri_RelationDesc), + &TTSOpsHeapTuple); /* * Now that we have the updated properties, create a either a vertex or @@ -533,6 +564,9 @@ static void process_update_list(CustomScanState *node) * If the last update index for the entity is equal to the current loop * index, then update this tuple. */ + cid = estate->es_snapshot->curcid; + estate->es_snapshot->curcid = GetCurrentCommandId(false); + if (luindex[update_item->entity_position - 1] == lidx) { /* @@ -545,8 +579,8 @@ static void process_update_list(CustomScanState *node) * Setup the scan description, with the correct snapshot and scan * keys. */ - scan_desc = heap_beginscan(resultRelInfo->ri_RelationDesc, - estate->es_snapshot, 1, scan_keys); + scan_desc = table_beginscan(resultRelInfo->ri_RelationDesc, + estate->es_snapshot, 1, scan_keys); /* Retrieve the tuple. */ heap_tuple = heap_getnext(scan_desc, ForwardScanDirection); @@ -560,12 +594,13 @@ static void process_update_list(CustomScanState *node) heap_tuple); } /* close the ScanDescription */ - heap_endscan(scan_desc); + table_endscan(scan_desc); } + estate->es_snapshot->curcid = cid; /* close relation */ ExecCloseIndices(resultRelInfo); - heap_close(resultRelInfo->ri_RelationDesc, RowExclusiveLock); + table_close(resultRelInfo->ri_RelationDesc, RowExclusiveLock); /* increment loop index */ lidx++; diff --git a/src/backend/executor/cypher_utils.c b/src/backend/executor/cypher_utils.c index 3558fe696..7b92fbc61 100644 --- a/src/backend/executor/cypher_utils.c +++ b/src/backend/executor/cypher_utils.c @@ -27,7 +27,9 @@ #include "access/htup_details.h" #include "access/sysattr.h" #include "access/xact.h" +#include "access/heapam.h" #include "access/multixact.h" +#include "access/xact.h" #include "nodes/extensible.h" #include "nodes/makefuncs.h" #include "nodes/nodes.h" @@ -44,6 +46,7 @@ #include "executor/cypher_utils.h" #include "utils/agtype.h" #include "utils/ag_cache.h" +#include "utils/agtype.h" #include "utils/graphid.h" /* @@ -92,7 +95,7 @@ void destroy_entity_result_rel_info(ResultRelInfo *result_rel_info) ExecCloseIndices(result_rel_info); // close the rel - heap_close(result_rel_info->ri_RelationDesc, RowExclusiveLock); + table_close(result_rel_info->ri_RelationDesc, RowExclusiveLock); } TupleTableSlot *populate_vertex_tts( @@ -171,7 +174,7 @@ bool entity_exists(EState *estate, Oid graph_oid, graphid id) { label_cache_data *label; ScanKeyData scan_keys[1]; - HeapScanDesc scan_desc; + TableScanDesc scan_desc; HeapTuple tuple; Relation rel; bool result = true; @@ -180,14 +183,14 @@ bool entity_exists(EState *estate, Oid graph_oid, graphid id) * Extract the label id from the graph id and get the table name * the entity is part of. */ - label = search_label_graph_id_cache(graph_oid, GET_LABEL_ID(id)); + label = search_label_graph_oid_cache(graph_oid, GET_LABEL_ID(id)); // Setup the scan key to be the graphid ScanKeyInit(&scan_keys[0], 1, BTEqualStrategyNumber, F_GRAPHIDEQ, GRAPHID_GET_DATUM(id)); - rel = heap_open(label->relation, RowExclusiveLock); - scan_desc = heap_beginscan(rel, estate->es_snapshot, 1, scan_keys); + rel = table_open(label->relation, RowExclusiveLock); + scan_desc = table_beginscan(rel, estate->es_snapshot, 1, scan_keys); tuple = heap_getnext(scan_desc, ForwardScanDirection); @@ -200,8 +203,8 @@ bool entity_exists(EState *estate, Oid graph_oid, graphid id) result = false; } - heap_endscan(scan_desc); - heap_close(rel, RowExclusiveLock); + table_endscan(scan_desc); + table_close(rel, RowExclusiveLock); return result; } @@ -235,7 +238,7 @@ HeapTuple insert_entity_tuple_cid(ResultRelInfo *resultRelInfo, HeapTuple tuple = NULL; ExecStoreVirtualTuple(elemTupleSlot); - tuple = ExecMaterializeSlot(elemTupleSlot); + tuple = ExecFetchSlotHeapTuple(elemTupleSlot, true, NULL); /* Check the constraints of the tuple */ tuple->t_tableOid = RelationGetRelid(resultRelInfo->ri_RelationDesc); @@ -244,14 +247,14 @@ HeapTuple insert_entity_tuple_cid(ResultRelInfo *resultRelInfo, ExecConstraints(resultRelInfo, elemTupleSlot, estate); } - /* Insert the tuple using the passed in cid */ - heap_insert(resultRelInfo->ri_RelationDesc, tuple, cid, 0, NULL); + // Insert the tuple normally + table_tuple_insert(resultRelInfo->ri_RelationDesc, elemTupleSlot, + GetCurrentCommandId(true), 0, NULL); - /* Insert index entries for the tuple */ + // Insert index entries for the tuple if (resultRelInfo->ri_NumIndices > 0) { - ExecInsertIndexTuples(elemTupleSlot, &(tuple->t_self), estate, false, - NULL, NIL); + ExecInsertIndexTuples(elemTupleSlot, estate, false, NULL, NIL); } return tuple; diff --git a/src/backend/nodes/cypher_outfuncs.c b/src/backend/nodes/cypher_outfuncs.c index d7fc791b0..4053a399c 100644 --- a/src/backend/nodes/cypher_outfuncs.c +++ b/src/backend/nodes/cypher_outfuncs.c @@ -316,7 +316,7 @@ void out_cypher_create_target_nodes(StringInfo str, const ExtensibleNode *node) WRITE_NODE_FIELD(paths); WRITE_INT32_FIELD(flags); - WRITE_OID_FIELD(graph_oid); + WRITE_INT32_FIELD(graph_oid); } // serialization function for the cypher_create_path ExtensibleNode. @@ -384,7 +384,7 @@ void out_cypher_delete_information(StringInfo str, const ExtensibleNode *node) WRITE_NODE_FIELD(delete_items); WRITE_INT32_FIELD(flags); WRITE_STRING_FIELD(graph_name); - WRITE_OID_FIELD(graph_oid); + WRITE_INT32_FIELD(graph_oid); WRITE_BOOL_FIELD(detach); } @@ -403,7 +403,7 @@ void out_cypher_merge_information(StringInfo str, const ExtensibleNode *node) DEFINE_AG_NODE(cypher_merge_information); WRITE_INT32_FIELD(flags); - WRITE_OID_FIELD(graph_oid); + WRITE_INT32_FIELD(graph_oid); WRITE_INT32_FIELD(merge_function_attr); WRITE_NODE_FIELD(path); } diff --git a/src/backend/nodes/cypher_readfuncs.c b/src/backend/nodes/cypher_readfuncs.c index 7ae64b899..89cedd577 100644 --- a/src/backend/nodes/cypher_readfuncs.c +++ b/src/backend/nodes/cypher_readfuncs.c @@ -29,11 +29,19 @@ * * Macros for declaring appropriate local variables. */ -// Declare the extensible node and local fields for the pg_strtok +/* A few guys need only local_node */ +#define READ_LOCALS_NO_FIELDS(nodeTypeName) \ + nodeTypeName *local_node = (nodeTypeName *) node + +/* And a few guys need only the pg_strtok support fields */ +#define READ_TEMP_LOCALS() \ + const char *token; \ + int length + +/* ... but most need both */ #define READ_LOCALS(nodeTypeName) \ - nodeTypeName *local_node = (nodeTypeName *)node; \ - char *token; \ - int length; + READ_LOCALS_NO_FIELDS(nodeTypeName); \ + READ_TEMP_LOCALS() /* * The READ_*_FIELD defines first skips the :fldname token (key) part of the string @@ -49,7 +57,7 @@ #define READ_INT_FIELD(fldname) \ token = pg_strtok(&length); \ token = pg_strtok(&length); \ - local_node->fldname = atoi(token) + local_node->fldname = strtol(token, 0, 10) // Read an unsigned integer field (anything written as ":fldname %u") #define READ_UINT_FIELD(fldname) \ @@ -85,7 +93,7 @@ #define READ_ENUM_FIELD(fldname, enumtype) \ token = pg_strtok(&length); \ token = pg_strtok(&length); \ - local_node->fldname = (enumtype) atoi(token) + local_node->fldname = (enumtype) strtol(token, 0, 10) // Read a float field #define READ_FLOAT_FIELD(fldname) \ @@ -178,8 +186,8 @@ void read_cypher_create_target_nodes(struct ExtensibleNode *node) READ_LOCALS(cypher_create_target_nodes); READ_NODE_FIELD(paths); - READ_INT_FIELD(flags); - READ_OID_FIELD(graph_oid); + READ_UINT_FIELD(flags); + READ_UINT_FIELD(graph_oid); } /* @@ -204,7 +212,7 @@ void read_cypher_target_node(struct ExtensibleNode *node) READ_LOCALS(cypher_target_node); READ_CHAR_FIELD(type); - READ_INT_FIELD(flags); + READ_UINT_FIELD(flags); READ_ENUM_FIELD(dir, cypher_rel_dir); READ_NODE_FIELD(id_expr); READ_NODE_FIELD(id_expr_state); @@ -228,7 +236,7 @@ void read_cypher_update_information(struct ExtensibleNode *node) READ_LOCALS(cypher_update_information); READ_NODE_FIELD(set_items); - READ_INT_FIELD(flags); + READ_UINT_FIELD(flags); READ_INT_FIELD(tuple_position); READ_STRING_FIELD(graph_name); READ_STRING_FIELD(clause_name); @@ -260,9 +268,9 @@ void read_cypher_delete_information(struct ExtensibleNode *node) READ_LOCALS(cypher_delete_information); READ_NODE_FIELD(delete_items); - READ_INT_FIELD(flags); + READ_UINT_FIELD(flags); READ_STRING_FIELD(graph_name); - READ_OID_FIELD(graph_oid); + READ_UINT_FIELD(graph_oid); READ_BOOL_FIELD(detach); } @@ -286,8 +294,8 @@ void read_cypher_merge_information(struct ExtensibleNode *node) { READ_LOCALS(cypher_merge_information); - READ_INT_FIELD(flags); - READ_OID_FIELD(graph_oid); + READ_UINT_FIELD(flags); + READ_UINT_FIELD(graph_oid); READ_INT_FIELD(merge_function_attr); READ_NODE_FIELD(path); } diff --git a/src/backend/optimizer/cypher_createplan.c b/src/backend/optimizer/cypher_createplan.c index 9e0863423..c6480d154 100644 --- a/src/backend/optimizer/cypher_createplan.c +++ b/src/backend/optimizer/cypher_createplan.c @@ -19,13 +19,10 @@ #include "postgres.h" -#include "access/sysattr.h" -#include "catalog/pg_type_d.h" #include "nodes/extensible.h" #include "nodes/nodes.h" #include "nodes/pg_list.h" #include "nodes/plannodes.h" -#include "nodes/relation.h" #include "executor/cypher_executor.h" #include "optimizer/cypher_createplan.h" diff --git a/src/backend/optimizer/cypher_pathnode.c b/src/backend/optimizer/cypher_pathnode.c index 4e04b752c..cdd0b0635 100644 --- a/src/backend/optimizer/cypher_pathnode.c +++ b/src/backend/optimizer/cypher_pathnode.c @@ -22,7 +22,6 @@ #include "nodes/extensible.h" #include "nodes/nodes.h" #include "nodes/pg_list.h" -#include "nodes/relation.h" #include "optimizer/cypher_createplan.h" #include "optimizer/cypher_pathnode.h" diff --git a/src/backend/optimizer/cypher_paths.c b/src/backend/optimizer/cypher_paths.c index 0cb537ae3..151abfa43 100644 --- a/src/backend/optimizer/cypher_paths.c +++ b/src/backend/optimizer/cypher_paths.c @@ -19,11 +19,8 @@ #include "postgres.h" -#include "access/sysattr.h" -#include "catalog/pg_type_d.h" #include "nodes/parsenodes.h" #include "nodes/primnodes.h" -#include "nodes/relation.h" #include "optimizer/pathnode.h" #include "optimizer/paths.h" diff --git a/src/backend/parser/ag_scanner.l b/src/backend/parser/ag_scanner.l index 3bab06157..68b15a22c 100644 --- a/src/backend/parser/ag_scanner.l +++ b/src/backend/parser/ag_scanner.l @@ -316,6 +316,7 @@ static int _scan_errposition(const int location, const ag_yy_extra *extra); * and is the same with "ag_scanner_t". */ #define YY_DECL ag_token ag_scanner_next_token(yyscan_t yyscanner) +#define NDIGITS_PER_REMAINDER 9 %} %% @@ -902,7 +903,6 @@ static void _numstr_to_decimal(const char *numstr, const int base, strbuf *sb) */ const uint64 divisor = 1000000000; const int ndivisions = 3; - const int ndigits_per_remainder = 9; int ndigits; int nwords; @@ -1048,11 +1048,11 @@ static void _numstr_to_decimal(const char *numstr, const int base, strbuf *sb) // convert the collected remainders to a string, starting from the last one for (i = nremainders - 1; i >= 0; i--) { - char buf[ndigits_per_remainder]; + char buf[NDIGITS_PER_REMAINDER]; int buf_i; uint32 tmp; - buf_i = ndigits_per_remainder; + buf_i = NDIGITS_PER_REMAINDER; for (tmp = remainders[i]; tmp > 0; tmp /= 10) buf[--buf_i] = '0' + (char)(tmp % 10); @@ -1064,7 +1064,7 @@ static void _numstr_to_decimal(const char *numstr, const int base, strbuf *sb) buf[--buf_i] = '0'; } - strbuf_append_buf(sb, &buf[buf_i], ndigits_per_remainder - buf_i); + strbuf_append_buf(sb, &buf[buf_i], NDIGITS_PER_REMAINDER - buf_i); } pfree(remainders); diff --git a/src/backend/parser/cypher_analyze.c b/src/backend/parser/cypher_analyze.c index 425b1167b..874585103 100644 --- a/src/backend/parser/cypher_analyze.c +++ b/src/backend/parser/cypher_analyze.c @@ -32,7 +32,6 @@ #include "parser/parse_node.h" #include "parser/parse_relation.h" #include "parser/parse_target.h" -#include "parser/parsetree.h" #include "utils/builtins.h" #include "catalog/ag_graph.h" @@ -212,7 +211,7 @@ static bool convert_cypher_walker(Node *node, ParseState *pstate) * QTW_IGNORE_JOINALIASES * We are not interested in this. */ - flags = QTW_EXAMINE_RTES | QTW_IGNORE_RT_SUBQUERIES | + flags = QTW_EXAMINE_RTES_BEFORE | QTW_IGNORE_RT_SUBQUERIES | QTW_IGNORE_JOINALIASES; /* recurse on query */ diff --git a/src/backend/parser/cypher_clause.c b/src/backend/parser/cypher_clause.c index 26de52a66..f14c49986 100644 --- a/src/backend/parser/cypher_clause.c +++ b/src/backend/parser/cypher_clause.c @@ -25,6 +25,7 @@ #include "postgres.h" #include "access/sysattr.h" +#include "access/heapam.h" #include "catalog/pg_type_d.h" #include "miscadmin.h" #include "nodes/makefuncs.h" @@ -33,7 +34,7 @@ #include "nodes/parsenodes.h" #include "nodes/pg_list.h" #include "nodes/primnodes.h" -#include "optimizer/var.h" +#include "optimizer/optimizer.h" #include "parser/parse_clause.h" #include "parser/parse_coerce.h" #include "parser/parse_collate.h" @@ -85,6 +86,14 @@ #define AGE_VARNAME_ID AGE_DEFAULT_VARNAME_PREFIX"id" #define AGE_VARNAME_SET_CLAUSE AGE_DEFAULT_VARNAME_PREFIX"set_clause" +/* + * In the transformation stage, we need to track + * where a variable came from. When moving between + * clauses, Postgres parsestate and Query data structures + * are insufficient for some of the information we + * need. + */ + /* * Rules to determine if a node must be included: * @@ -270,9 +279,9 @@ static cypher_target_node *get_referenced_variable(ParseState *pstate, //call...[yield] static Query *transform_cypher_call_stmt(cypher_parsestate *cpstate, - cypher_clause *clause); + cypher_clause *clause); static Query *transform_cypher_call_subquery(cypher_parsestate *cpstate, - cypher_clause *clause); + cypher_clause *clause); // transform #define PREV_CYPHER_CLAUSE_ALIAS AGE_DEFAULT_ALIAS_PREFIX"previous_cypher_clause" @@ -1704,8 +1713,7 @@ cypher_update_information *transform_cypher_set_item_list( ereport( ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg( - "SET clause doesn't not support updating maps or lists in a property"), + errmsg("SET clause doesn't not support updating maps or lists in a property"), parser_errposition(pstate, set_item->location))); } @@ -5219,7 +5227,7 @@ transform_create_cypher_edge(cypher_parsestate *cpstate, List **target_list, rel->relid = RelationGetRelid(label_relation); rte = addRangeTableEntryForRelation((ParseState *)cpstate, label_relation, - NULL, false, false); + AccessShareLock, NULL, false, false); rte->requiredPerms = ACL_INSERT; // Build Id expression, always use the default logic @@ -5488,7 +5496,7 @@ transform_create_cypher_new_node(cypher_parsestate *cpstate, rel->relid = RelationGetRelid(label_relation); rte = addRangeTableEntryForRelation((ParseState *)cpstate, label_relation, - NULL, false, false); + AccessShareLock, NULL, false, false); rte->requiredPerms = ACL_INSERT; // id @@ -6485,7 +6493,7 @@ transform_merge_cypher_edge(cypher_parsestate *cpstate, List **target_list, rel->relid = RelationGetRelid(label_relation); rte = addRangeTableEntryForRelation((ParseState *)cpstate, label_relation, - NULL, false, false); + AccessShareLock, NULL, false, false); rte->requiredPerms = ACL_INSERT; // Build Id expression, always use the default logic @@ -6603,7 +6611,7 @@ transform_merge_cypher_node(cypher_parsestate *cpstate, List **target_list, rel->relid = RelationGetRelid(label_relation); rte = addRangeTableEntryForRelation((ParseState *)cpstate, label_relation, - NULL, false, false); + AccessShareLock, NULL, false, false); rte->requiredPerms = ACL_INSERT; // id diff --git a/src/backend/parser/cypher_expr.c b/src/backend/parser/cypher_expr.c index 16346a698..62f7efde2 100644 --- a/src/backend/parser/cypher_expr.c +++ b/src/backend/parser/cypher_expr.c @@ -41,6 +41,7 @@ #include "parser/parse_oper.h" #include "parser/parse_relation.h" #include "utils/builtins.h" +#include "utils/float.h" #include "utils/int8.h" #include "utils/lsyscache.h" #include "utils/syscache.h" diff --git a/src/backend/parser/cypher_keywords.c b/src/backend/parser/cypher_keywords.c index 5ed120288..cd4082260 100644 --- a/src/backend/parser/cypher_keywords.c +++ b/src/backend/parser/cypher_keywords.c @@ -33,63 +33,27 @@ #include "funcapi.h" #include "parser/cypher_gram.h" +#include "parser/cypher_kwlist_d.h" /* * This list must be sorted by ASCII name, because binary search is used to * locate entries. */ -const ScanKeyword cypher_keywords[] = { - {"all", ALL, RESERVED_KEYWORD}, - {"analyze", ANALYZE, RESERVED_KEYWORD}, - {"and", AND, RESERVED_KEYWORD}, - {"as", AS, RESERVED_KEYWORD}, - {"asc", ASC, RESERVED_KEYWORD}, - {"ascending", ASCENDING, RESERVED_KEYWORD}, - {"by", BY, RESERVED_KEYWORD}, - {"call", CALL, RESERVED_KEYWORD}, - {"case", CASE, RESERVED_KEYWORD}, - {"coalesce", COALESCE, RESERVED_KEYWORD}, - {"contains", CONTAINS, RESERVED_KEYWORD}, - {"create", CREATE, RESERVED_KEYWORD}, - {"delete", DELETE, RESERVED_KEYWORD}, - {"desc", DESC, RESERVED_KEYWORD}, - {"descending", DESCENDING, RESERVED_KEYWORD}, - {"detach", DETACH, RESERVED_KEYWORD}, - {"distinct", DISTINCT, RESERVED_KEYWORD}, - {"else", ELSE, RESERVED_KEYWORD}, - {"end", END_P, RESERVED_KEYWORD}, - {"ends", ENDS, RESERVED_KEYWORD}, - {"exists", EXISTS, RESERVED_KEYWORD}, - {"explain", EXPLAIN, RESERVED_KEYWORD}, - {"false", FALSE_P, RESERVED_KEYWORD}, - {"in", IN, RESERVED_KEYWORD}, - {"is", IS, RESERVED_KEYWORD}, - {"limit", LIMIT, RESERVED_KEYWORD}, - {"match", MATCH, RESERVED_KEYWORD}, - {"merge", MERGE, RESERVED_KEYWORD}, - {"not", NOT, RESERVED_KEYWORD}, - {"null", NULL_P, RESERVED_KEYWORD}, - {"optional", OPTIONAL, RESERVED_KEYWORD}, - {"or", OR, RESERVED_KEYWORD}, - {"order", ORDER, RESERVED_KEYWORD}, - {"remove", REMOVE, RESERVED_KEYWORD}, - {"return", RETURN, RESERVED_KEYWORD}, - {"set", SET, RESERVED_KEYWORD}, - {"skip", SKIP, RESERVED_KEYWORD}, - {"starts", STARTS, RESERVED_KEYWORD}, - {"then", THEN, RESERVED_KEYWORD}, - {"true", TRUE_P, RESERVED_KEYWORD}, - {"union", UNION, RESERVED_KEYWORD}, - {"unwind", UNWIND, RESERVED_KEYWORD}, - {"verbose", VERBOSE, RESERVED_KEYWORD}, - {"when", WHEN, RESERVED_KEYWORD}, - {"where", WHERE, RESERVED_KEYWORD}, - {"with", WITH, RESERVED_KEYWORD}, - {"xor", XOR, RESERVED_KEYWORD}, - {"yield", YIELD, RESERVED_KEYWORD} +#define PG_KEYWORD(kwname, value, category) value, + +const uint16 CypherKeywordTokens[] = { +#include "parser/cypher_kwlist.h" +}; + +#undef PG_KEYWORD + +#define PG_KEYWORD(kwname, value, category) category, + +const uint16 CypherKeywordCategories[] = { +#include "parser/cypher_kwlist.h" }; -const int num_cypher_keywords = lengthof(cypher_keywords); +#undef PG_KEYWORD PG_FUNCTION_INFO_V1(get_cypher_keywords); @@ -106,7 +70,7 @@ Datum get_cypher_keywords(PG_FUNCTION_ARGS) func_ctx = SRF_FIRSTCALL_INIT(); old_mem_ctx = MemoryContextSwitchTo(func_ctx->multi_call_memory_ctx); - tup_desc = CreateTemplateTupleDesc(3, false); + tup_desc = CreateTemplateTupleDesc(3); TupleDescInitEntry(tup_desc, (AttrNumber)1, "word", TEXTOID, -1, 0); TupleDescInitEntry(tup_desc, (AttrNumber)2, "catcode", CHAROID, -1, 0); TupleDescInitEntry(tup_desc, (AttrNumber)3, "catdesc", TEXTOID, -1, 0); @@ -118,15 +82,16 @@ Datum get_cypher_keywords(PG_FUNCTION_ARGS) func_ctx = SRF_PERCALL_SETUP(); - if (func_ctx->call_cntr < num_cypher_keywords) + if (func_ctx->call_cntr < CypherKeyword.num_keywords) { char *values[3]; HeapTuple tuple; // cast-away-const is ugly but alternatives aren't much better - values[0] = (char *)cypher_keywords[func_ctx->call_cntr].name; + values[0] = (char *) GetScanKeyword((int) func_ctx->call_cntr, + &CypherKeyword); - switch (cypher_keywords[func_ctx->call_cntr].category) + switch (CypherKeywordCategories[func_ctx->call_cntr]) { case UNRESERVED_KEYWORD: values[1] = "U"; diff --git a/src/backend/parser/cypher_parse_agg.c b/src/backend/parser/cypher_parse_agg.c index b5654e778..8fdb71d3e 100644 --- a/src/backend/parser/cypher_parse_agg.c +++ b/src/backend/parser/cypher_parse_agg.c @@ -27,7 +27,7 @@ #include "catalog/pg_constraint.h" #include "nodes/nodeFuncs.h" #include "optimizer/tlist.h" -#include "optimizer/var.h" +#include "optimizer/optimizer.h" #include "parser/cypher_parse_agg.h" #include "parser/parsetree.h" #include "rewrite/rewriteManip.h" @@ -192,7 +192,7 @@ void parse_check_aggregates(ParseState *pstate, Query *qry) root->planner_cxt = CurrentMemoryContext; root->hasJoinRTEs = true; - groupClauses = (List *) flatten_join_alias_vars(root, + groupClauses = (List *) flatten_join_alias_vars((Query*)root, (Node *) groupClauses); } @@ -236,7 +236,7 @@ void parse_check_aggregates(ParseState *pstate, Query *qry) finalize_grouping_exprs(clause, pstate, qry, groupClauses, root, have_non_var_grouping); if (hasJoinRTEs) - clause = flatten_join_alias_vars(root, clause); + clause = flatten_join_alias_vars((Query*)root, clause); check_ungrouped_columns(clause, pstate, qry, groupClauses, groupClauseCommonVars, have_non_var_grouping, &func_grouped_rels); @@ -245,7 +245,7 @@ void parse_check_aggregates(ParseState *pstate, Query *qry) finalize_grouping_exprs(clause, pstate, qry, groupClauses, root, have_non_var_grouping); if (hasJoinRTEs) - clause = flatten_join_alias_vars(root, clause); + clause = flatten_join_alias_vars((Query*)root, clause); check_ungrouped_columns(clause, pstate, qry, groupClauses, groupClauseCommonVars, have_non_var_grouping, &func_grouped_rels); @@ -562,7 +562,7 @@ static bool finalize_grouping_exprs_walker(Node *node, Index ref = 0; if (context->root) - expr = flatten_join_alias_vars(context->root, expr); + expr = flatten_join_alias_vars((Query*)context->root, expr); /* * Each expression must match a grouping entry at the current diff --git a/src/backend/parser/cypher_parser.c b/src/backend/parser/cypher_parser.c index ae06c9c11..c6a95d398 100644 --- a/src/backend/parser/cypher_parser.c +++ b/src/backend/parser/cypher_parser.c @@ -19,7 +19,6 @@ #include "postgres.h" -#include "common/keywords.h" #include "nodes/pg_list.h" #include "parser/scansup.h" @@ -67,20 +66,19 @@ int cypher_yylex(YYSTYPE *lvalp, YYLTYPE *llocp, ag_scanner_t scanner) break; case AG_TOKEN_IDENTIFIER: { - const ScanKeyword *keyword; + int kwnum; char *ident; - keyword = ScanKeywordLookup(token.value.s, cypher_keywords, - num_cypher_keywords); - if (keyword) + kwnum = ScanKeywordLookup(token.value.s, &CypherKeyword); + if (kwnum >= 0) { /* * use token.value.s instead of keyword->name to preserve * case sensitivity */ - lvalp->keyword = token.value.s; + lvalp->keyword = GetScanKeyword(kwnum, &CypherKeyword); *llocp = token.location; - return keyword->value; + return CypherKeywordTokens[kwnum]; } ident = pstrdup(token.value.s); diff --git a/src/backend/utils/adt/ag_float8_supp.c b/src/backend/utils/adt/ag_float8_supp.c index 286f074ef..450fdc07a 100644 --- a/src/backend/utils/adt/ag_float8_supp.c +++ b/src/backend/utils/adt/ag_float8_supp.c @@ -27,6 +27,7 @@ #include +#include "utils/float.h" #include "utils/builtins.h" #include "utils/ag_float8_supp.h" diff --git a/src/backend/utils/adt/age_global_graph.c b/src/backend/utils/adt/age_global_graph.c index 6868bb434..b2b34455a 100644 --- a/src/backend/utils/adt/age_global_graph.c +++ b/src/backend/utils/adt/age_global_graph.c @@ -19,14 +19,23 @@ #include "postgres.h" +#include "access/heapam.h" +#include "access/relscan.h" +#include "access/skey.h" +#include "access/table.h" +#include "access/tableam.h" #include "catalog/namespace.h" +#include "commands/label_commands.h" #include "utils/lsyscache.h" #include "utils/memutils.h" #include "utils/rel.h" #include "utils/snapmgr.h" #include "commands/label_commands.h" +#include "catalog/ag_graph.h" +#include "catalog/ag_label.h" #include "utils/age_global_graph.h" +#include "utils/age_graphid_ds.h" #include "utils/agtype.h" #include "catalog/ag_graph.h" #include "catalog/ag_label.h" @@ -189,7 +198,7 @@ static List *get_ag_labels_names(Snapshot snapshot, Oid graph_oid, List *labels = NIL; ScanKeyData scan_keys[2]; Relation ag_label; - HeapScanDesc scan_desc; + TableScanDesc scan_desc; HeapTuple tuple; TupleDesc tupdesc; @@ -203,8 +212,8 @@ static List *get_ag_labels_names(Snapshot snapshot, Oid graph_oid, F_CHAREQ, CharGetDatum(label_type)); /* setup the table to be scanned, ag_label in this case */ - ag_label = heap_open(ag_label_relation_id(), ShareLock); - scan_desc = heap_beginscan(ag_label, snapshot, 2, scan_keys); + ag_label = table_open(ag_label_relation_id(), ShareLock); + scan_desc = table_beginscan(ag_label, snapshot, 2, scan_keys); /* get the tupdesc - we don't need to release this one */ tupdesc = RelationGetDescr(ag_label); @@ -228,8 +237,8 @@ static List *get_ag_labels_names(Snapshot snapshot, Oid graph_oid, } /* close up scan */ - heap_endscan(scan_desc); - heap_close(ag_label, ShareLock); + table_endscan(scan_desc); + table_close(ag_label, ShareLock); return labels; } @@ -399,7 +408,7 @@ static void load_vertex_hashtable(GRAPH_global_context *ggctx) foreach (lc, vertex_label_names) { Relation graph_vertex_label; - HeapScanDesc scan_desc; + TableScanDesc scan_desc; HeapTuple tuple; char *vertex_label_name; Oid vertex_label_table_oid; @@ -411,8 +420,8 @@ static void load_vertex_hashtable(GRAPH_global_context *ggctx) vertex_label_table_oid = get_relname_relid(vertex_label_name, graph_namespace_oid); /* open the relation (table) and begin the scan */ - graph_vertex_label = heap_open(vertex_label_table_oid, ShareLock); - scan_desc = heap_beginscan(graph_vertex_label, snapshot, 0, NULL); + graph_vertex_label = table_open(vertex_label_table_oid, ShareLock); + scan_desc = table_beginscan(graph_vertex_label, snapshot, 0, NULL); /* get the tupdesc - we don't need to release this one */ tupdesc = RelationGetDescr(graph_vertex_label); /* bail if the number of columns differs */ @@ -452,8 +461,8 @@ static void load_vertex_hashtable(GRAPH_global_context *ggctx) } /* end the scan and close the relation */ - heap_endscan(scan_desc); - heap_close(graph_vertex_label, ShareLock); + table_endscan(scan_desc); + table_close(graph_vertex_label, ShareLock); } } @@ -498,7 +507,7 @@ static void load_edge_hashtable(GRAPH_global_context *ggctx) foreach (lc, edge_label_names) { Relation graph_edge_label; - HeapScanDesc scan_desc; + TableScanDesc scan_desc; HeapTuple tuple; char *edge_label_name; Oid edge_label_table_oid; @@ -510,8 +519,8 @@ static void load_edge_hashtable(GRAPH_global_context *ggctx) edge_label_table_oid = get_relname_relid(edge_label_name, graph_namespace_oid); /* open the relation (table) and begin the scan */ - graph_edge_label = heap_open(edge_label_table_oid, ShareLock); - scan_desc = heap_beginscan(graph_edge_label, snapshot, 0, NULL); + graph_edge_label = table_open(edge_label_table_oid, ShareLock); + scan_desc = table_beginscan(graph_edge_label, snapshot, 0, NULL); /* get the tupdesc - we don't need to release this one */ tupdesc = RelationGetDescr(graph_edge_label); /* bail if the number of columns differs */ @@ -573,8 +582,8 @@ static void load_edge_hashtable(GRAPH_global_context *ggctx) } /* end the scan and close the relation */ - heap_endscan(scan_desc); - heap_close(graph_edge_label, ShareLock); + table_endscan(scan_desc); + table_close(graph_edge_label, ShareLock); } } diff --git a/src/backend/utils/adt/age_vle.c b/src/backend/utils/adt/age_vle.c index ca4876db0..bb154e3ae 100644 --- a/src/backend/utils/adt/age_vle.c +++ b/src/backend/utils/adt/age_vle.c @@ -19,6 +19,8 @@ #include "postgres.h" +#include "access/heapam.h" +#include "catalog/namespace.h" #include "catalog/pg_type.h" #include "funcapi.h" #include "utils/lsyscache.h" diff --git a/src/backend/utils/adt/agtype.c b/src/backend/utils/adt/agtype.c index c8a88d9ee..43c1b205b 100644 --- a/src/backend/utils/adt/agtype.c +++ b/src/backend/utils/adt/agtype.c @@ -32,8 +32,15 @@ #include +#include "access/genam.h" +#include "access/heapam.h" +#include "access/skey.h" +#include "access/table.h" +#include "access/tableam.h" #include "access/htup_details.h" #include "catalog/namespace.h" +#include "catalog/pg_collation.h" +#include "catalog/pg_operator.h" #include "catalog/pg_type.h" #include "catalog/pg_aggregate_d.h" #include "catalog/pg_collation_d.h" @@ -45,6 +52,7 @@ #include "parser/parse_coerce.h" #include "nodes/pg_list.h" #include "utils/builtins.h" +#include "utils/float.h" #include "utils/fmgroids.h" #include "utils/int8.h" #include "utils/lsyscache.h" @@ -151,25 +159,25 @@ static bool is_array_path(agtype_value *agtv); /* graph entity retrieval */ static Datum get_vertex(const char *graph, const char *vertex_label, int64 graphid); -static char *get_label_name(const char *graph_name, int64 graph_id); +static char *get_label_name(const char *graph_name, graphid element_graphid); static float8 get_float_compatible_arg(Datum arg, Oid type, char *funcname, bool *is_null); static Numeric get_numeric_compatible_arg(Datum arg, Oid type, char *funcname, - bool *is_null, - enum agtype_value_type *ag_type); + bool *is_null, + enum agtype_value_type *ag_type); agtype *get_one_agtype_from_variadic_args(FunctionCallInfo fcinfo, - int variadic_offset, - int expected_nargs); + int variadic_offset, + int expected_nargs); static int64 get_int64_from_int_datums(Datum d, Oid type, char *funcname, bool *is_agnull); static agtype_iterator *get_next_object_key(agtype_iterator *it, - agtype_container *agtc, - agtype_value *key); + agtype_container *agtc, + agtype_value *key); static agtype_iterator *get_next_list_element(agtype_iterator *it, - agtype_container *agtc, - agtype_value *elem); + agtype_container *agtc, + agtype_value *elem); static int extract_variadic_args_min(FunctionCallInfo fcinfo, int variadic_start, bool convert_unknown, Datum **args, Oid **types, bool **nulls, @@ -186,7 +194,8 @@ Oid get_AGTYPEOID(void) { if (g_AGTYPEOID == InvalidOid) { - g_AGTYPEOID = GetSysCacheOid2(TYPENAMENSP, CStringGetDatum("agtype"), + g_AGTYPEOID = GetSysCacheOid2(TYPENAMENSP, Anum_pg_type_oid, + CStringGetDatum("agtype"), ObjectIdGetDatum(ag_catalog_namespace_id())); } @@ -198,7 +207,7 @@ Oid get_AGTYPEARRAYOID(void) { if (g_AGTYPEARRAYOID == InvalidOid) { - g_AGTYPEARRAYOID = GetSysCacheOid2(TYPENAMENSP, + g_AGTYPEARRAYOID = GetSysCacheOid2(TYPENAMENSP,Anum_pg_type_oid, CStringGetDatum("_agtype"), ObjectIdGetDatum(ag_catalog_namespace_id())); } @@ -2178,7 +2187,7 @@ Datum _agtype_build_vertex(PG_FUNCTION_ARGS) result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("id")); - if (fcinfo->argnull[0]) + if (fcinfo->args[0].isnull) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), @@ -2193,7 +2202,7 @@ Datum _agtype_build_vertex(PG_FUNCTION_ARGS) result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("label")); - if (fcinfo->argnull[1]) + if (fcinfo->args[1].isnull) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_agtype_build_vertex() label cannot be NULL"))); @@ -2208,7 +2217,7 @@ Datum _agtype_build_vertex(PG_FUNCTION_ARGS) string_to_agtype_value("properties")); //if the properties object is null, push an empty object - if (fcinfo->argnull[2]) + if (fcinfo->args[2].isnull) { result.res = push_agtype_value(&result.parse_state, WAGT_BEGIN_OBJECT, NULL); @@ -2260,7 +2269,7 @@ Datum _agtype_build_edge(PG_FUNCTION_ARGS) result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("id")); - if (fcinfo->argnull[0]) + if (fcinfo->args[0].isnull) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), @@ -2275,7 +2284,7 @@ Datum _agtype_build_edge(PG_FUNCTION_ARGS) result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("label")); - if (fcinfo->argnull[3]) + if (fcinfo->args[3].isnull) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("_agtype_build_vertex() label cannot be NULL"))); @@ -2289,7 +2298,7 @@ Datum _agtype_build_edge(PG_FUNCTION_ARGS) result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("end_id")); - if (fcinfo->argnull[2]) + if (fcinfo->args[2].isnull) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), @@ -2304,7 +2313,7 @@ Datum _agtype_build_edge(PG_FUNCTION_ARGS) result.res = push_agtype_value(&result.parse_state, WAGT_KEY, string_to_agtype_value("start_id")); - if (fcinfo->argnull[1]) + if (fcinfo->args[1].isnull) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), @@ -2320,7 +2329,7 @@ Datum _agtype_build_edge(PG_FUNCTION_ARGS) string_to_agtype_value("properties")); /* if the properties object is null, push an empty object */ - if (fcinfo->argnull[4]) + if (fcinfo->args[4].isnull) { result.res = push_agtype_value(&result.parse_state, WAGT_BEGIN_OBJECT, NULL); @@ -2633,7 +2642,7 @@ Datum agtype_to_int8(PG_FUNCTION_ARGS) result = DatumGetInt64(DirectFunctionCall1(int8in, CStringGetDatum(agtv.val.string.val))); else if(agtv.type == AGTV_BOOL) - result = DatumGetInt64(DirectFunctionCall1(bool_int4, + result = DatumGetInt64(DirectFunctionCall1(bool_int4, BoolGetDatum(agtv.val.boolean))); else elog(ERROR, "invalid agtype type: %d", (int)agtv.type); @@ -2658,7 +2667,7 @@ Datum agtype_to_int4(PG_FUNCTION_ARGS) /* Return null if arg_agt is null. This covers SQL and Agtype NULLS */ if (arg_agt == NULL) - { + { PG_RETURN_NULL(); } @@ -2668,39 +2677,39 @@ Datum agtype_to_int4(PG_FUNCTION_ARGS) agtv.type != AGTV_NUMERIC && agtv.type != AGTV_STRING && agtv.type != AGTV_BOOL)) - { + { cannot_cast_agtype_value(agtv.type, "int"); } PG_FREE_IF_COPY(agtype_in, 0); if (agtv.type == AGTV_INTEGER) - { + { result = DatumGetInt32(DirectFunctionCall1(int84, Int64GetDatum(agtv.val.int_value))); } else if (agtv.type == AGTV_FLOAT) - { + { result = DatumGetInt32(DirectFunctionCall1(dtoi4, Float8GetDatum(agtv.val.float_value))); } else if (agtv.type == AGTV_NUMERIC) - { + { result = DatumGetInt32(DirectFunctionCall1(numeric_int4, NumericGetDatum(agtv.val.numeric))); } else if (agtv.type == AGTV_STRING) - { + { result = DatumGetInt32(DirectFunctionCall1(int4in, CStringGetDatum(agtv.val.string.val))); } else if (agtv.type == AGTV_BOOL) - { - result = DatumGetInt64(DirectFunctionCall1(bool_int4, + { + result = DatumGetInt64(DirectFunctionCall1(bool_int4, BoolGetDatum(agtv.val.boolean))); } else - { + { elog(ERROR, "invalid agtype type: %d", (int)agtv.type); } @@ -2772,7 +2781,7 @@ Datum agtype_to_float8(PG_FUNCTION_ARGS) { cannot_cast_agtype_value(agtv.type, "float"); } - + PG_FREE_IF_COPY(agtype_in, 0); if (agtv.type == AGTV_FLOAT) @@ -2799,7 +2808,7 @@ Datum agtype_to_float8(PG_FUNCTION_ARGS) errmsg("cannot cast to float8, integer value out of range"))); } else if (agtv.type == AGTV_NUMERIC) - { + { result = DatumGetFloat8(DirectFunctionCall1(numeric_float8, NumericGetDatum(agtv.val.numeric))); } @@ -2809,10 +2818,10 @@ Datum agtype_to_float8(PG_FUNCTION_ARGS) CStringGetDatum(agtv.val.string.val))); } else - { + { elog(ERROR, "invalid agtype type: %d", (int)agtv.type); } - + PG_RETURN_FLOAT8(result); } @@ -4047,13 +4056,13 @@ Datum agtype_typecast_int(PG_FUNCTION_ARGS) /* Return null if arg_agt is null. This covers SQL and Agtype NULLS */ if (arg_agt == NULL) - { + { PG_RETURN_NULL(); } /* check that we have a scalar value */ if (!AGT_ROOT_IS_SCALAR(arg_agt)) - { + { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("typecast argument must be a scalar value"))); @@ -4064,7 +4073,7 @@ Datum agtype_typecast_int(PG_FUNCTION_ARGS) /* check for agtype null */ if (arg_value->type == AGTV_NULL) - { + { PG_RETURN_NULL(); } @@ -4083,7 +4092,7 @@ Datum agtype_typecast_int(PG_FUNCTION_ARGS) NumericGetDatum(arg_value->val.numeric)); break; case AGTV_BOOL: - d = DirectFunctionCall1(bool_int4, + d = DirectFunctionCall1(bool_int4, BoolGetDatum(arg_value->val.boolean)); break; case AGTV_STRING: @@ -4129,13 +4138,13 @@ Datum agtype_typecast_bool(PG_FUNCTION_ARGS) /* Return null if arg_agt is null. This covers SQL and Agtype NULLS */ if (arg_agt == NULL) - { + { PG_RETURN_NULL(); } /* check that we have a scalar value */ if (!AGT_ROOT_IS_SCALAR(arg_agt)) - { + { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("typecast argument must be a scalar value"))); @@ -4146,7 +4155,7 @@ Datum agtype_typecast_bool(PG_FUNCTION_ARGS) /* check for agtype null */ if (arg_value->type == AGTV_NULL) - { + { PG_RETURN_NULL(); } @@ -4657,11 +4666,11 @@ Datum column_get_datum(TupleDesc tupdesc, HeapTuple tuple, int column, } /* - * Function to retrieve a label name, given the graph name and graphid. The - * function returns a pointer to a duplicated string that needs to be freed - * when you are finished using it. + * Function to retrieve a label name, given the graph name and graphid of the + * node or edge. The function returns a pointer to a duplicated string that + * needs to be freed when you are finished using it. */ -static char *get_label_name(const char *graph_name, int64 graphid) +static char *get_label_name(const char *graph_name, graphid element_graphid) { ScanKeyData scan_keys[2]; Relation ag_label; @@ -4669,48 +4678,49 @@ static char *get_label_name(const char *graph_name, int64 graphid) HeapTuple tuple; TupleDesc tupdesc; char *result = NULL; - - Oid graphoid = get_graph_oid(graph_name); + bool column_is_null = false; + Oid graph_oid = get_graph_oid(graph_name); + int32 label_id = get_graphid_label_id(element_graphid); /* scankey for first match in ag_label, column 2, graphoid, BTEQ, OidEQ */ ScanKeyInit(&scan_keys[0], Anum_ag_label_graph, BTEqualStrategyNumber, - F_OIDEQ, ObjectIdGetDatum(graphoid)); + F_OIDEQ, ObjectIdGetDatum(graph_oid)); /* scankey for second match in ag_label, column 3, label id, BTEQ, Int4EQ */ ScanKeyInit(&scan_keys[1], Anum_ag_label_id, BTEqualStrategyNumber, - F_INT4EQ, Int32GetDatum(get_graphid_label_id(graphid))); + F_INT4EQ, Int32GetDatum(label_id)); - ag_label = heap_open(ag_relation_id("ag_label", "table"), ShareLock); - scan_desc = systable_beginscan(ag_label, - ag_relation_id("ag_label_graph_id_index", - "index"), true, NULL, 2, - scan_keys); + ag_label = table_open(ag_label_relation_id(), ShareLock); + scan_desc = systable_beginscan(ag_label, ag_label_graph_oid_index_id(), true, + NULL, 2, scan_keys); tuple = systable_getnext(scan_desc); if (!HeapTupleIsValid(tuple)) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_SCHEMA), - errmsg("graphid %lu does not exist", graphid))); + errmsg("graphid %lu does not exist", element_graphid))); } /* get the tupdesc - we don't need to release this one */ tupdesc = RelationGetDescr(ag_label); /* bail if the number of columns differs */ - if (tupdesc->natts != 6) + if (tupdesc->natts != Natts_ag_label) + { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_TABLE), errmsg("Invalid number of attributes for ag_catalog.ag_label"))); + } /* get the label name */ - result = NameStr(*DatumGetName(column_get_datum(tupdesc, tuple, 0, "name", - NAMEOID, true))); + result = NameStr(*DatumGetName(heap_getattr(tuple, Anum_ag_label_name, + tupdesc, &column_is_null))); /* duplicate it */ result = strdup(result); /* end the scan and close the relation */ systable_endscan(scan_desc); - heap_close(ag_label, ShareLock); + table_close(ag_label, ShareLock); return result; } @@ -4720,7 +4730,7 @@ static Datum get_vertex(const char *graph, const char *vertex_label, { ScanKeyData scan_keys[1]; Relation graph_vertex_label; - HeapScanDesc scan_desc; + TableScanDesc scan_desc; HeapTuple tuple; TupleDesc tupdesc; Datum id, properties, result; @@ -4738,8 +4748,8 @@ static Datum get_vertex(const char *graph, const char *vertex_label, Int64GetDatum(graphid)); /* open the relation (table), begin the scan, and get the tuple */ - graph_vertex_label = heap_open(vertex_label_table_oid, ShareLock); - scan_desc = heap_beginscan(graph_vertex_label, snapshot, 1, scan_keys); + graph_vertex_label = table_open(vertex_label_table_oid, ShareLock); + scan_desc = table_beginscan(graph_vertex_label, snapshot, 1, scan_keys); tuple = heap_getnext(scan_desc, ForwardScanDirection); /* bail if the tuple isn't valid */ @@ -4768,8 +4778,8 @@ static Datum get_vertex(const char *graph, const char *vertex_label, result = DirectFunctionCall3(_agtype_build_vertex, id, CStringGetDatum(vertex_label), properties); /* end the scan and close the relation */ - heap_endscan(scan_desc); - heap_close(graph_vertex_label, ShareLock); + table_endscan(scan_desc); + table_close(graph_vertex_label, ShareLock); /* return the vertex datum */ return result; } @@ -4783,7 +4793,7 @@ Datum age_startnode(PG_FUNCTION_ARGS) agtype_value *agtv_value = NULL; char *graph_name = NULL; char *label_name = NULL; - graphid graph_id; + graphid start_id; Datum result; /* we need the graph name */ @@ -4825,14 +4835,14 @@ Datum age_startnode(PG_FUNCTION_ARGS) /* it must not be null and must be an integer */ Assert(agtv_value != NULL); Assert(agtv_value->type = AGTV_INTEGER); - graph_id = agtv_value->val.int_value; + start_id = agtv_value->val.int_value; /* get the label */ - label_name = get_label_name(graph_name, graph_id); + label_name = get_label_name(graph_name, start_id); /* it must not be null and must be a string */ Assert(label_name != NULL); - result = get_vertex(graph_name, label_name, graph_id); + result = get_vertex(graph_name, label_name, start_id); free(label_name); @@ -4848,7 +4858,7 @@ Datum age_endnode(PG_FUNCTION_ARGS) agtype_value *agtv_value = NULL; char *graph_name = NULL; char *label_name = NULL; - graphid graph_id; + graphid end_id; Datum result; /* we need the graph name */ @@ -4890,14 +4900,14 @@ Datum age_endnode(PG_FUNCTION_ARGS) /* it must not be null and must be an integer */ Assert(agtv_value != NULL); Assert(agtv_value->type = AGTV_INTEGER); - graph_id = agtv_value->val.int_value; + end_id = agtv_value->val.int_value; /* get the label */ - label_name = get_label_name(graph_name, graph_id); + label_name = get_label_name(graph_name, end_id); /* it must not be null and must be a string */ Assert(label_name != NULL); - result = get_vertex(graph_name, label_name, graph_id); + result = get_vertex(graph_name, label_name, end_id); free(label_name); @@ -7167,10 +7177,9 @@ Datum age_replace(PG_FUNCTION_ARGS) * We need the strings as a text strings so that we can let PG deal with * multibyte characters in the string. */ - text_result = DatumGetTextPP(DirectFunctionCall3(replace_text, - PointerGetDatum(text_string), - PointerGetDatum(text_search), - PointerGetDatum(text_replace))); + text_result = DatumGetTextPP(DirectFunctionCall3Coll( + replace_text, C_COLLATION_OID, PointerGetDatum(text_string), + PointerGetDatum(text_search), PointerGetDatum(text_replace))); /* convert it back to a cstring */ string = text_to_cstring(text_result); diff --git a/src/backend/utils/adt/agtype_gin.c b/src/backend/utils/adt/agtype_gin.c index 669935c21..9a9adc9b9 100644 --- a/src/backend/utils/adt/agtype_gin.c +++ b/src/backend/utils/adt/agtype_gin.c @@ -33,6 +33,7 @@ #include "access/stratnum.h" #include "catalog/pg_collation.h" #include "catalog/pg_type.h" +#include "utils/float.h" #include "utils/builtins.h" #include "utils/varlena.h" diff --git a/src/backend/utils/adt/graphid.c b/src/backend/utils/adt/graphid.c index bd65b957e..2060fc66e 100644 --- a/src/backend/utils/adt/graphid.c +++ b/src/backend/utils/adt/graphid.c @@ -36,7 +36,8 @@ Oid get_GRAPHIDOID(void) { if (g_GRAPHIDOID == InvalidOid) { - g_GRAPHIDOID = GetSysCacheOid2(TYPENAMENSP, CStringGetDatum("graphid"), + g_GRAPHIDOID = GetSysCacheOid2(TYPENAMENSP, Anum_pg_type_oid, + CStringGetDatum("graphid"), ObjectIdGetDatum(ag_catalog_namespace_id())); } @@ -48,7 +49,7 @@ Oid get_GRAPHIDARRAYOID(void) { if (g_GRAPHIDARRAYOID == InvalidOid) { - g_GRAPHIDARRAYOID = GetSysCacheOid2(TYPENAMENSP, + g_GRAPHIDARRAYOID = GetSysCacheOid2(TYPENAMENSP, Anum_pg_type_oid, CStringGetDatum("_graphid"), ObjectIdGetDatum(ag_catalog_namespace_id())); } diff --git a/src/backend/utils/ag_func.c b/src/backend/utils/ag_func.c index cbd2167e2..35a03464b 100644 --- a/src/backend/utils/ag_func.c +++ b/src/backend/utils/ag_func.c @@ -27,7 +27,6 @@ #include "access/htup.h" #include "access/htup_details.h" #include "catalog/pg_proc.h" -#include "fmgr.h" #include "utils/builtins.h" #include "utils/lsyscache.h" #include "utils/syscache.h" @@ -54,6 +53,7 @@ bool is_oid_ag_func(Oid func_oid, const char *func_name) ReleaseSysCache(proctup); return false; } + nspid = proc->pronamespace; ReleaseSysCache(proctup); @@ -81,7 +81,8 @@ Oid get_ag_func_oid(const char *func_name, const int nargs, ...) arg_types = buildoidvector(oids, nargs); - func_oid = GetSysCacheOid3(PROCNAMEARGSNSP, CStringGetDatum(func_name), + func_oid = GetSysCacheOid3(PROCNAMEARGSNSP, Anum_pg_proc_oid, + CStringGetDatum(func_name), PointerGetDatum(arg_types), ObjectIdGetDatum(ag_catalog_namespace_id())); if (!OidIsValid(func_oid)) @@ -111,7 +112,8 @@ Oid get_pg_func_oid(const char *func_name, const int nargs, ...) arg_types = buildoidvector(oids, nargs); - func_oid = GetSysCacheOid3(PROCNAMEARGSNSP, CStringGetDatum(func_name), + func_oid = GetSysCacheOid3(PROCNAMEARGSNSP, Anum_pg_proc_oid, + CStringGetDatum(func_name), PointerGetDatum(arg_types), ObjectIdGetDatum(pg_catalog_namespace_id())); if (!OidIsValid(func_oid)) diff --git a/src/backend/utils/cache/ag_cache.c b/src/backend/utils/cache/ag_cache.c index 6501476c6..4fd4d13e5 100644 --- a/src/backend/utils/cache/ag_cache.c +++ b/src/backend/utils/cache/ag_cache.c @@ -26,8 +26,8 @@ #include "access/htup_details.h" #include "access/skey.h" #include "access/stratnum.h" -#include "access/sysattr.h" #include "access/tupdesc.h" +#include "catalog/pg_collation.h" #include "fmgr.h" #include "storage/lockdefs.h" #include "utils/builtins.h" @@ -69,17 +69,17 @@ typedef struct label_name_graph_cache_entry label_cache_data data; } label_name_graph_cache_entry; -typedef struct label_graph_id_cache_key +typedef struct label_graph_oid_cache_key { Oid graph; int32 id; -} label_graph_id_cache_key; +} label_graph_oid_cache_key; -typedef struct label_graph_id_cache_entry +typedef struct label_graph_oid_cache_entry { - label_graph_id_cache_key key; // hash key + label_graph_oid_cache_key key; // hash key label_cache_data data; -} label_graph_id_cache_entry; +} label_graph_oid_cache_entry; typedef struct label_relation_cache_entry { @@ -107,17 +107,13 @@ static ScanKeyData graph_name_scan_keys[1]; static HTAB *graph_namespace_cache_hash = NULL; static ScanKeyData graph_namespace_scan_keys[1]; -// ag_label.oid -static HTAB *label_oid_cache_hash = NULL; -static ScanKeyData label_oid_scan_keys[1]; - // ag_label.name, ag_label.graph static HTAB *label_name_graph_cache_hash = NULL; static ScanKeyData label_name_graph_scan_keys[2]; // ag_label.graph, ag_label.id -static HTAB *label_graph_id_cache_hash = NULL; -static ScanKeyData label_graph_id_scan_keys[2]; +static HTAB *label_graph_oid_cache_hash = NULL; +static ScanKeyData label_graph_oid_scan_keys[2]; // ag_label.relation static HTAB *label_relation_cache_hash = NULL; @@ -152,38 +148,35 @@ static void fill_graph_cache_data(graph_cache_data *cache_data, // ag_label static void initialize_label_caches(void); static void create_label_caches(void); -static void create_label_oid_cache(void); static void create_label_name_graph_cache(void); -static void create_label_graph_id_cache(void); +static void create_label_graph_oid_cache(void); static void create_label_relation_cache(void); static void create_label_seq_name_graph_cache(void); static void invalidate_label_caches(Datum arg, Oid relid); -static void invalidate_label_oid_cache(Oid relid); -static void flush_label_oid_cache(void); static void invalidate_label_name_graph_cache(Oid relid); static void flush_label_name_graph_cache(void); -static void invalidate_label_graph_id_cache(Oid relid); -static void flush_label_graph_id_cache(void); +static void invalidate_label_graph_oid_cache(Oid relid); +static void flush_label_graph_oid_cache(void); static void invalidate_label_relation_cache(Oid relid); static void flush_label_relation_cache(void); static void invalidate_label_seq_name_graph_cache(Oid relid); static void flush_label_seq_name_graph_cache(void); -static label_cache_data *search_label_oid_cache_miss(Oid oid); static label_cache_data *search_label_name_graph_cache_miss(Name name, Oid graph); static void *label_name_graph_cache_hash_search(Name name, Oid graph, HASHACTION action, bool *found); -static label_cache_data *search_label_graph_id_cache_miss(Oid graph, int32 id); -static void *label_graph_id_cache_hash_search(Oid graph, int32 id, - HASHACTION action, bool *found); +static label_cache_data *search_label_graph_oid_cache_miss(Oid graph, + uint32 id); +static void *label_graph_oid_cache_hash_search(uint32 graph, int32 id, + HASHACTION action, bool *found); static label_cache_data *search_label_relation_cache_miss(Oid relation); static label_cache_data *search_label_seq_name_graph_cache_miss(Name name, - Oid graph); + Oid graph); static void *label_seq_name_graph_cache_hash_search(Name name, Oid graph, - HASHACTION action, - bool *found); + HASHACTION action, + bool *found); static void fill_label_cache_data(label_cache_data *cache_data, HeapTuple tuple, TupleDesc tuple_desc); @@ -193,11 +186,13 @@ static void initialize_caches(void) static bool initialized = false; if (initialized) + { return; - + } if (!CacheMemoryContext) + { CreateCacheMemoryContext(); - + } initialize_graph_caches(); initialize_label_caches(); @@ -211,7 +206,7 @@ static void ag_cache_scan_key_init(ScanKey entry, AttrNumber attno, entry->sk_attno = attno; entry->sk_strategy = BTEqualStrategyNumber; entry->sk_subtype = InvalidOid; - entry->sk_collation = InvalidOid; + entry->sk_collation = C_COLLATION_OID; fmgr_info_cxt(func, &entry->sk_func, CacheMemoryContext); entry->sk_argument = (Datum)0; } @@ -316,12 +311,15 @@ static void flush_graph_name_cache(void) entry = hash_seq_search(&hash_seq); if (!entry) + { break; - + } removed = hash_search(graph_name_cache_hash, &entry->name, HASH_REMOVE, NULL); if (!removed) + { ereport(ERROR, (errmsg_internal("graph (name) cache corrupted"))); + } } } @@ -337,7 +335,9 @@ static void flush_graph_namespace_cache(void) entry = hash_seq_search(&hash_seq); if (!entry) + { break; + } removed = hash_search(graph_namespace_cache_hash, &entry->namespace, HASH_REMOVE, NULL); @@ -361,7 +361,9 @@ graph_cache_data *search_graph_name_cache(const char *name) namestrcpy(&name_key, name); entry = hash_search(graph_name_cache_hash, &name_key, HASH_FIND, NULL); if (entry) + { return &entry->data; + } return search_graph_name_cache_miss(&name_key); } @@ -379,11 +381,11 @@ static graph_cache_data *search_graph_name_cache_miss(Name name) scan_keys[0].sk_argument = NameGetDatum(name); /* - * Calling heap_open() might call AcceptInvalidationMessage() and that + * Calling table_open() might call AcceptInvalidationMessage() and that * might flush the graph caches. This is OK because this function is called * when the desired entry is not in the cache. */ - ag_graph = heap_open(ag_graph_relation_id(), AccessShareLock); + ag_graph = table_open(ag_graph_relation_id(), AccessShareLock); scan_desc = systable_beginscan(ag_graph, ag_graph_name_index_id(), true, NULL, 1, scan_keys); @@ -392,7 +394,7 @@ static graph_cache_data *search_graph_name_cache_miss(Name name) if (!HeapTupleIsValid(tuple)) { systable_endscan(scan_desc); - heap_close(ag_graph, AccessShareLock); + table_close(ag_graph, AccessShareLock); return NULL; } @@ -405,7 +407,7 @@ static graph_cache_data *search_graph_name_cache_miss(Name name) fill_graph_cache_data(&entry->data, tuple, RelationGetDescr(ag_graph)); systable_endscan(scan_desc); - heap_close(ag_graph, AccessShareLock); + table_close(ag_graph, AccessShareLock); return &entry->data; } @@ -419,7 +421,9 @@ graph_cache_data *search_graph_namespace_cache(Oid namespace) entry = hash_search(graph_namespace_cache_hash, &namespace, HASH_FIND, NULL); if (entry) + { return &entry->data; + } return search_graph_namespace_cache_miss(namespace); } @@ -438,11 +442,11 @@ static graph_cache_data *search_graph_namespace_cache_miss(Oid namespace) scan_keys[0].sk_argument = ObjectIdGetDatum(namespace); /* - * Calling heap_open() might call AcceptInvalidationMessage() and that + * Calling table_open() might call AcceptInvalidationMessage() and that * might flush the graph caches. This is OK because this function is called * when the desired entry is not in the cache. */ - ag_graph = heap_open(ag_graph_relation_id(), AccessShareLock); + ag_graph = table_open(ag_graph_relation_id(), AccessShareLock); scan_desc = systable_beginscan(ag_graph, ag_graph_namespace_index_id(), true, NULL, 1, scan_keys); @@ -452,7 +456,7 @@ static graph_cache_data *search_graph_namespace_cache_miss(Oid namespace) if (!HeapTupleIsValid(tuple)) { systable_endscan(scan_desc); - heap_close(ag_graph, AccessShareLock); + table_close(ag_graph, AccessShareLock); return NULL; } @@ -466,7 +470,7 @@ static graph_cache_data *search_graph_namespace_cache_miss(Oid namespace) fill_graph_cache_data(&entry->data, tuple, RelationGetDescr(ag_graph)); systable_endscan(scan_desc); - heap_close(ag_graph, AccessShareLock); + table_close(ag_graph, AccessShareLock); return &entry->data; } @@ -477,8 +481,8 @@ static void fill_graph_cache_data(graph_cache_data *cache_data, bool is_null; Datum value; - // ag_graph.oid - value = heap_getattr(tuple, ObjectIdAttributeNumber, tuple_desc, &is_null); + // ag_graph.id + value = heap_getattr(tuple, Anum_ag_graph_oid, tuple_desc, &is_null); Assert(!is_null); cache_data->oid = DatumGetObjectId(value); // ag_graph.name @@ -493,20 +497,16 @@ static void fill_graph_cache_data(graph_cache_data *cache_data, static void initialize_label_caches(void) { - // ag_label.oid - ag_cache_scan_key_init(&label_oid_scan_keys[0], ObjectIdAttributeNumber, - F_OIDEQ); - // ag_label.name, ag_label.graph ag_cache_scan_key_init(&label_name_graph_scan_keys[0], Anum_ag_label_name, F_NAMEEQ); ag_cache_scan_key_init(&label_name_graph_scan_keys[1], Anum_ag_label_graph, - F_OIDEQ); + F_INT4EQ); // ag_label.graph, ag_label.id - ag_cache_scan_key_init(&label_graph_id_scan_keys[0], Anum_ag_label_graph, - F_OIDEQ); - ag_cache_scan_key_init(&label_graph_id_scan_keys[1], Anum_ag_label_id, + ag_cache_scan_key_init(&label_graph_oid_scan_keys[0], Anum_ag_label_graph, + F_INT4EQ); + ag_cache_scan_key_init(&label_graph_oid_scan_keys[1], Anum_ag_label_id, F_INT4EQ); // ag_label.relation @@ -519,6 +519,12 @@ static void initialize_label_caches(void) ag_cache_scan_key_init(&label_seq_name_graph_scan_keys[1], Anum_ag_label_graph, F_OIDEQ); + // ag_label.seq_name, ag_label.graph + ag_cache_scan_key_init(&label_seq_name_graph_scan_keys[0], + Anum_ag_label_seq_name, F_NAMEEQ); + ag_cache_scan_key_init(&label_seq_name_graph_scan_keys[1], + Anum_ag_label_graph, F_OIDEQ); + create_label_caches(); /* @@ -534,32 +540,10 @@ static void create_label_caches(void) * All the hash tables are created using their dedicated memory contexts * which are under TopMemoryContext. */ - create_label_oid_cache(); create_label_name_graph_cache(); - create_label_graph_id_cache(); + create_label_graph_oid_cache(); create_label_relation_cache(); create_label_seq_name_graph_cache(); - -} - -static void create_label_oid_cache(void) -{ - HASHCTL hash_ctl; - - /* - * Use label_cache_data itself since it has oid field as its first field - * that is the key for this hash. - */ - MemSet(&hash_ctl, 0, sizeof(hash_ctl)); - hash_ctl.keysize = sizeof(Oid); - hash_ctl.entrysize = sizeof(label_cache_data); - - /* - * Please see the comment of hash_create() for the nelem value 16 here. - * HASH_BLOBS flag is set because the size of the key is sizeof(uint32). - */ - label_oid_cache_hash = hash_create("ag_label (oid) cache", 16, &hash_ctl, - HASH_ELEM | HASH_BLOBS); } static void create_label_name_graph_cache(void) @@ -579,21 +563,21 @@ static void create_label_name_graph_cache(void) HASH_ELEM | HASH_BLOBS); } -static void create_label_graph_id_cache(void) +static void create_label_graph_oid_cache(void) { HASHCTL hash_ctl; MemSet(&hash_ctl, 0, sizeof(hash_ctl)); - hash_ctl.keysize = sizeof(label_graph_id_cache_key); - hash_ctl.entrysize = sizeof(label_graph_id_cache_entry); + hash_ctl.keysize = sizeof(label_graph_oid_cache_key); + hash_ctl.entrysize = sizeof(label_graph_oid_cache_entry); /* * Please see the comment of hash_create() for the nelem value 16 here. * HASH_BLOBS flag is set because the key for this hash is fixed-size. */ - label_graph_id_cache_hash = hash_create("ag_label (graph, id) cache", 16, - &hash_ctl, - HASH_ELEM | HASH_BLOBS); + label_graph_oid_cache_hash = hash_create("ag_label (graph, id) cache", 16, + &hash_ctl, + HASH_ELEM | HASH_BLOBS); } static void create_label_relation_cache(void) @@ -625,8 +609,8 @@ static void create_label_seq_name_graph_cache(void) * HASH_BLOBS flag is set because the key for this hash is fixed-size. */ label_seq_name_graph_cache_hash = hash_create("ag_label (seq_name, graph) cache", - 16, &hash_ctl, - HASH_ELEM | HASH_BLOBS); + 16, &hash_ctl, + HASH_ELEM | HASH_BLOBS); } static void invalidate_label_caches(Datum arg, Oid relid) @@ -637,77 +621,20 @@ static void invalidate_label_caches(Datum arg, Oid relid) if (OidIsValid(relid)) { - invalidate_label_oid_cache(relid); invalidate_label_name_graph_cache(relid); - invalidate_label_graph_id_cache(relid); + invalidate_label_graph_oid_cache(relid); invalidate_label_relation_cache(relid); invalidate_label_seq_name_graph_cache(relid); } else { - flush_label_oid_cache(); flush_label_name_graph_cache(); - flush_label_graph_id_cache(); + flush_label_graph_oid_cache(); flush_label_relation_cache(); flush_label_seq_name_graph_cache(); } } -static void invalidate_label_oid_cache(Oid relid) -{ - HASH_SEQ_STATUS hash_seq; - - hash_seq_init(&hash_seq, label_oid_cache_hash); - for (;;) - { - label_cache_data *entry; - void *removed; - - entry = hash_seq_search(&hash_seq); - if (!entry) - break; - - if (entry->relation != relid) - continue; - - removed = hash_search(label_oid_cache_hash, &entry->oid, HASH_REMOVE, - NULL); - hash_seq_term(&hash_seq); - - if (!removed) - { - ereport(ERROR, - (errmsg_internal("label (oid) cache corrupted"))); - } - - break; - } -} - -static void flush_label_oid_cache(void) -{ - HASH_SEQ_STATUS hash_seq; - - hash_seq_init(&hash_seq, label_oid_cache_hash); - for (;;) - { - label_cache_data *entry; - void *removed; - - entry = hash_seq_search(&hash_seq); - if (!entry) - break; - - removed = hash_search(label_oid_cache_hash, &entry->oid, HASH_REMOVE, - NULL); - if (!removed) - { - ereport(ERROR, - (errmsg_internal("label (oid) cache corrupted"))); - } - } -} - static void invalidate_label_name_graph_cache(Oid relid) { HASH_SEQ_STATUS hash_seq; @@ -720,11 +647,13 @@ static void invalidate_label_name_graph_cache(Oid relid) entry = hash_seq_search(&hash_seq); if (!entry) + { break; - + } if (entry->data.relation != relid) + { continue; - + } removed = hash_search(label_name_graph_cache_hash, &entry->key, HASH_REMOVE, NULL); hash_seq_term(&hash_seq); @@ -751,8 +680,9 @@ static void flush_label_name_graph_cache(void) entry = hash_seq_search(&hash_seq); if (!entry) + { break; - + } removed = hash_search(label_name_graph_cache_hash, &entry->key, HASH_REMOVE, NULL); if (!removed) @@ -763,24 +693,26 @@ static void flush_label_name_graph_cache(void) } } -static void invalidate_label_graph_id_cache(Oid relid) +static void invalidate_label_graph_oid_cache(Oid relid) { HASH_SEQ_STATUS hash_seq; - hash_seq_init(&hash_seq, label_graph_id_cache_hash); + hash_seq_init(&hash_seq, label_graph_oid_cache_hash); for (;;) { - label_graph_id_cache_entry *entry; + label_graph_oid_cache_entry *entry; void *removed; entry = hash_seq_search(&hash_seq); if (!entry) + { break; - + } if (entry->data.relation != relid) + { continue; - - removed = hash_search(label_graph_id_cache_hash, &entry->key, + } + removed = hash_search(label_graph_oid_cache_hash, &entry->key, HASH_REMOVE, NULL); hash_seq_term(&hash_seq); @@ -794,21 +726,22 @@ static void invalidate_label_graph_id_cache(Oid relid) } } -static void flush_label_graph_id_cache(void) +static void flush_label_graph_oid_cache(void) { HASH_SEQ_STATUS hash_seq; - hash_seq_init(&hash_seq, label_graph_id_cache_hash); + hash_seq_init(&hash_seq, label_graph_oid_cache_hash); for (;;) { - label_graph_id_cache_entry *entry; + label_graph_oid_cache_entry *entry; void *removed; entry = hash_seq_search(&hash_seq); if (!entry) + { break; - - removed = hash_search(label_graph_id_cache_hash, &entry->key, + } + removed = hash_search(label_graph_oid_cache_hash, &entry->key, HASH_REMOVE, NULL); if (!removed) { @@ -825,12 +758,15 @@ static void invalidate_label_relation_cache(Oid relid) entry = hash_search(label_relation_cache_hash, &relid, HASH_FIND, NULL); if (!entry) + { return; - + } removed = hash_search(label_relation_cache_hash, &relid, HASH_REMOVE, NULL); if (!removed) + { ereport(ERROR, (errmsg_internal("label (namespace) cache corrupted"))); + } } static void flush_label_relation_cache(void) @@ -845,8 +781,9 @@ static void flush_label_relation_cache(void) entry = hash_seq_search(&hash_seq); if (!entry) + { break; - + } removed = hash_search(label_relation_cache_hash, &entry->relation, HASH_REMOVE, NULL); if (!removed) @@ -869,11 +806,13 @@ static void invalidate_label_seq_name_graph_cache(Oid relid) entry = hash_seq_search(&hash_seq); if (!entry) + { break; - + } if (entry->data.relation != relid) + { continue; - + } removed = hash_search(label_seq_name_graph_cache_hash, &entry->key, HASH_REMOVE, NULL); hash_seq_term(&hash_seq); @@ -900,8 +839,9 @@ static void flush_label_seq_name_graph_cache(void) entry = hash_seq_search(&hash_seq); if (!entry) + { break; - + } removed = hash_search(label_seq_name_graph_cache_hash, &entry->key, HASH_REMOVE, NULL); if (!removed) @@ -912,72 +852,12 @@ static void flush_label_seq_name_graph_cache(void) } } -label_cache_data *search_label_oid_cache(Oid oid) -{ - label_cache_data *entry; - - initialize_caches(); - - entry = hash_search(label_oid_cache_hash, &oid, HASH_FIND, NULL); - if (entry) - return entry; - - return search_label_oid_cache_miss(oid); -} - -static label_cache_data *search_label_oid_cache_miss(Oid oid) -{ - ScanKeyData scan_keys[1]; - Relation ag_label; - SysScanDesc scan_desc; - HeapTuple tuple; - bool found; - label_cache_data *entry; - - memcpy(scan_keys, label_oid_scan_keys, sizeof(label_oid_scan_keys)); - scan_keys[0].sk_argument = ObjectIdGetDatum(oid); - - /* - * Calling heap_open() might call AcceptInvalidationMessage() and that - * might invalidate the label caches. This is OK because this function is - * called when the desired entry is not in the cache. - */ - ag_label = heap_open(ag_label_relation_id(), AccessShareLock); - scan_desc = systable_beginscan(ag_label, ag_label_oid_index_id(), true, - NULL, 1, scan_keys); - - // don't need to loop over scan_desc because ag_label_oid_index is UNIQUE - tuple = systable_getnext(scan_desc); - if (!HeapTupleIsValid(tuple)) - { - systable_endscan(scan_desc); - heap_close(ag_label, AccessShareLock); - - return NULL; - } - - // get a new entry - entry = hash_search(label_oid_cache_hash, &oid, HASH_ENTER, &found); - Assert(!found); // no concurrent update on label_oid_cache_hash - - // fill the new entry with the retrieved tuple - fill_label_cache_data(entry, tuple, RelationGetDescr(ag_label)); - // make sure that the oid field is the same with the hash key(oid) - Assert(entry->oid == oid); - - systable_endscan(scan_desc); - heap_close(ag_label, AccessShareLock); - - return entry; -} - label_cache_data *search_label_name_graph_cache(const char *name, Oid graph) { NameData name_key; label_name_graph_cache_entry *entry; AssertArg(name); - AssertArg(OidIsValid(graph)); initialize_caches(); @@ -985,8 +865,9 @@ label_cache_data *search_label_name_graph_cache(const char *name, Oid graph) entry = label_name_graph_cache_hash_search(&name_key, graph, HASH_FIND, NULL); if (entry) + { return &entry->data; - + } return search_label_name_graph_cache_miss(&name_key, graph); } @@ -1006,11 +887,11 @@ static label_cache_data *search_label_name_graph_cache_miss(Name name, scan_keys[1].sk_argument = ObjectIdGetDatum(graph); /* - * Calling heap_open() might call AcceptInvalidationMessage() and that + * Calling table_open() might call AcceptInvalidationMessage() and that * might invalidate the label caches. This is OK because this function is * called when the desired entry is not in the cache. */ - ag_label = heap_open(ag_label_relation_id(), AccessShareLock); + ag_label = table_open(ag_label_relation_id(), AccessShareLock); scan_desc = systable_beginscan(ag_label, ag_label_name_graph_index_id(), true, NULL, 2, scan_keys); @@ -1022,7 +903,7 @@ static label_cache_data *search_label_name_graph_cache_miss(Name name, if (!HeapTupleIsValid(tuple)) { systable_endscan(scan_desc); - heap_close(ag_label, AccessShareLock); + table_close(ag_label, AccessShareLock); return NULL; } @@ -1036,7 +917,7 @@ static label_cache_data *search_label_name_graph_cache_miss(Name name, fill_label_cache_data(&entry->data, tuple, RelationGetDescr(ag_label)); systable_endscan(scan_desc); - heap_close(ag_label, AccessShareLock); + table_close(ag_label, AccessShareLock); return &entry->data; } @@ -1053,81 +934,81 @@ static void *label_name_graph_cache_hash_search(Name name, Oid graph, return hash_search(label_name_graph_cache_hash, &key, action, found); } -label_cache_data *search_label_graph_id_cache(Oid graph, int32 id) +label_cache_data *search_label_graph_oid_cache(uint32 graph_oid, int32 id) { - label_graph_id_cache_entry *entry; + label_graph_oid_cache_entry *entry; - AssertArg(OidIsValid(graph)); AssertArg(label_id_is_valid(id)); initialize_caches(); - entry = label_graph_id_cache_hash_search(graph, id, HASH_FIND, NULL); + entry = label_graph_oid_cache_hash_search(graph_oid, id, HASH_FIND, NULL); if (entry) + { return &entry->data; - - return search_label_graph_id_cache_miss(graph, id); + } + return search_label_graph_oid_cache_miss(graph_oid, id); } -static label_cache_data *search_label_graph_id_cache_miss(Oid graph, int32 id) +static label_cache_data *search_label_graph_oid_cache_miss(Oid graph, uint32 id) { ScanKeyData scan_keys[2]; Relation ag_label; SysScanDesc scan_desc; HeapTuple tuple; bool found; - label_graph_id_cache_entry *entry; + label_graph_oid_cache_entry *entry; - memcpy(scan_keys, label_graph_id_scan_keys, - sizeof(label_graph_id_scan_keys)); + memcpy(scan_keys, label_graph_oid_scan_keys, + sizeof(label_graph_oid_scan_keys)); scan_keys[0].sk_argument = ObjectIdGetDatum(graph); scan_keys[1].sk_argument = Int32GetDatum(id); /* - * Calling heap_open() might call AcceptInvalidationMessage() and that + * Calling table_open() might call AcceptInvalidationMessage() and that * might invalidate the label caches. This is OK because this function is * called when the desired entry is not in the cache. */ - ag_label = heap_open(ag_label_relation_id(), AccessShareLock); - scan_desc = systable_beginscan(ag_label, ag_label_graph_id_index_id(), - true, NULL, 2, scan_keys); + ag_label = table_open(ag_label_relation_id(), AccessShareLock); + scan_desc = systable_beginscan(ag_label, ag_label_graph_oid_index_id(), true, + NULL, 2, scan_keys); /* - * don't need to loop over scan_desc because ag_label_graph_id_index is + * don't need to loop over scan_desc because ag_label_graph_oid_index is * UNIQUE */ tuple = systable_getnext(scan_desc); if (!HeapTupleIsValid(tuple)) { systable_endscan(scan_desc); - heap_close(ag_label, AccessShareLock); + table_close(ag_label, AccessShareLock); return NULL; } // get a new entry - entry = label_graph_id_cache_hash_search(graph, id, HASH_ENTER, &found); - Assert(!found); // no concurrent update on label_graph_id_cache_hash + entry = label_graph_oid_cache_hash_search(graph, id, HASH_ENTER, &found); + Assert(!found); // no concurrent update on label_graph_oid_cache_hash // fill the new entry with the retrieved tuple fill_label_cache_data(&entry->data, tuple, RelationGetDescr(ag_label)); systable_endscan(scan_desc); - heap_close(ag_label, AccessShareLock); + table_close(ag_label, AccessShareLock); return &entry->data; } -static void *label_graph_id_cache_hash_search(Oid graph, int32 id, - HASHACTION action, bool *found) +static void *label_graph_oid_cache_hash_search(uint32 graph, int32 id, + HASHACTION action, bool *found) { - label_graph_id_cache_key key; + label_graph_oid_cache_key key; - // initialize the hash key for label_graph_id_cache_hash + // initialize the hash key for label_graph_oid_cache_hash key.graph = graph; key.id = id; - return hash_search(label_graph_id_cache_hash, &key, action, found); + return hash_search(label_graph_oid_cache_hash, &key, action, found); } label_cache_data *search_label_relation_cache(Oid relation) @@ -1138,8 +1019,9 @@ label_cache_data *search_label_relation_cache(Oid relation) entry = hash_search(label_relation_cache_hash, &relation, HASH_FIND, NULL); if (entry) + { return &entry->data; - + } return search_label_relation_cache_miss(relation); } @@ -1157,13 +1039,13 @@ static label_cache_data *search_label_relation_cache_miss(Oid relation) scan_keys[0].sk_argument = ObjectIdGetDatum(relation); /* - * Calling heap_open() might call AcceptInvalidationMessage() and that + * Calling table_open() might call AcceptInvalidationMessage() and that * might invalidate the label caches. This is OK because this function is * called when the desired entry is not in the cache. */ - ag_label = heap_open(ag_label_relation_id(), AccessShareLock); - scan_desc = systable_beginscan(ag_label, ag_label_relation_index_id(), - true, NULL, 1, scan_keys); + ag_label = table_open(ag_label_relation_id(), AccessShareLock); + scan_desc = systable_beginscan(ag_label, ag_label_relation_index_id(), true, + NULL, 1, scan_keys); // don't need to loop over scan_desc because ag_label_relation_index is // UNIQUE @@ -1171,7 +1053,7 @@ static label_cache_data *search_label_relation_cache_miss(Oid relation) if (!HeapTupleIsValid(tuple)) { systable_endscan(scan_desc); - heap_close(ag_label, AccessShareLock); + table_close(ag_label, AccessShareLock); return NULL; } @@ -1185,7 +1067,7 @@ static label_cache_data *search_label_relation_cache_miss(Oid relation) fill_label_cache_data(entry, tuple, RelationGetDescr(ag_label)); systable_endscan(scan_desc); - heap_close(ag_label, AccessShareLock); + table_close(ag_label, AccessShareLock); return entry; } @@ -1202,15 +1084,16 @@ label_cache_data *search_label_seq_name_graph_cache(const char *name, Oid graph) namestrcpy(&name_key, name); entry = label_seq_name_graph_cache_hash_search(&name_key, graph, HASH_FIND, - NULL); + NULL); if (entry) + { return &entry->data; - + } return search_label_seq_name_graph_cache_miss(&name_key, graph); } static label_cache_data *search_label_seq_name_graph_cache_miss(Name name, - Oid graph) + Oid graph) { ScanKeyData scan_keys[2]; Relation ag_label; @@ -1225,11 +1108,11 @@ static label_cache_data *search_label_seq_name_graph_cache_miss(Name name, scan_keys[1].sk_argument = ObjectIdGetDatum(graph); /* - * Calling heap_open() might call AcceptInvalidationMessage() and that + * Calling table_open() might call AcceptInvalidationMessage() and that * might invalidate the label caches. This is OK because this function is * called when the desired entry is not in the cache. */ - ag_label = heap_open(ag_label_relation_id(), AccessShareLock); + ag_label = table_open(ag_label_relation_id(), AccessShareLock); scan_desc = systable_beginscan(ag_label, ag_label_seq_name_graph_index_id(), true, NULL, 2, scan_keys); @@ -1241,27 +1124,28 @@ static label_cache_data *search_label_seq_name_graph_cache_miss(Name name, if (!HeapTupleIsValid(tuple)) { systable_endscan(scan_desc); - heap_close(ag_label, AccessShareLock); + table_close(ag_label, AccessShareLock); return NULL; } // get a new entry entry = label_seq_name_graph_cache_hash_search(name, graph, HASH_ENTER, - &found); + &found); Assert(!found); // no concurrent update on label_seq_name_graph_cache_hash // fill the new entry with the retrieved tuple fill_label_cache_data(&entry->data, tuple, RelationGetDescr(ag_label)); systable_endscan(scan_desc); - heap_close(ag_label, AccessShareLock); + table_close(ag_label, AccessShareLock); return &entry->data; } static void *label_seq_name_graph_cache_hash_search(Name name, Oid graph, - HASHACTION action, bool *found) + HASHACTION action, + bool *found) { label_seq_name_graph_cache_key key; @@ -1278,10 +1162,6 @@ static void fill_label_cache_data(label_cache_data *cache_data, bool is_null; Datum value; - // ag_label.oid - value = heap_getattr(tuple, ObjectIdAttributeNumber, tuple_desc, &is_null); - Assert(!is_null); - cache_data->oid = DatumGetObjectId(value); // ag_label.name value = heap_getattr(tuple, Anum_ag_label_name, tuple_desc, &is_null); Assert(!is_null); diff --git a/src/backend/utils/graph_generation.c b/src/backend/utils/graph_generation.c index 436b703e0..7033c9bc9 100644 --- a/src/backend/utils/graph_generation.c +++ b/src/backend/utils/graph_generation.c @@ -49,23 +49,23 @@ #include "utils/load/ag_load_labels.h" -int64 get_nextval_internal(graph_cache_data* graph_cache, +int64 get_nextval_internal(graph_cache_data* graph_cache, label_cache_data* label_cache); /* * Auxiliary function to get the next internal value in the graph, * so a new object (node or edge) graph id can be composed. */ -int64 get_nextval_internal(graph_cache_data* graph_cache, - label_cache_data* label_cache) +int64 get_nextval_internal(graph_cache_data* graph_cache, + label_cache_data* label_cache) { Oid obj_seq_id; char* label_seq_name_str; label_seq_name_str = NameStr(label_cache->seq_name); - obj_seq_id = get_relname_relid(label_seq_name_str, + obj_seq_id = get_relname_relid(label_seq_name_str, graph_cache->namespace); - + return nextval_internal(obj_seq_id, true); } @@ -77,8 +77,8 @@ PG_FUNCTION_INFO_V1(create_complete_graph); */ Datum create_complete_graph(PG_FUNCTION_ARGS) -{ - Oid graph_id; +{ + Oid graph_oid; Name graph_name; int64 no_vertices; @@ -112,7 +112,7 @@ Datum create_complete_graph(PG_FUNCTION_ARGS) Name edge_seq_name; char *edge_seq_name_str; - int64 lid; + int64 lid; if (PG_ARGISNULL(0)) { @@ -123,16 +123,15 @@ Datum create_complete_graph(PG_FUNCTION_ARGS) if (PG_ARGISNULL(1)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("number of nodes can not be NULL"))); + errmsg("number of nodes can not be NULL"))); } - + if (PG_ARGISNULL(2)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("edge label can not be NULL"))); + errmsg("edge label can not be NULL"))); } - graph_name = PG_GETARG_NAME(0); no_vertices = (int64) PG_GETARG_INT64(1); edge_label_name = PG_GETARG_NAME(2); @@ -146,7 +145,7 @@ Datum create_complete_graph(PG_FUNCTION_ARGS) { vtx_label_name = PG_GETARG_NAME(3); vtx_name_str = NameStr(*vtx_label_name); - + // Check if vertex and edge label are same if (strcmp(vtx_name_str, edge_name_str) == 0) { @@ -160,30 +159,32 @@ Datum create_complete_graph(PG_FUNCTION_ARGS) DirectFunctionCall1(create_graph, CStringGetDatum(graph_name)); } - graph_id = get_graph_oid(graph_name_str); + graph_oid = get_graph_oid(graph_name_str); - - if (!PG_ARGISNULL(3)) { // Check if label with the input name already exists - if (!label_exists(vtx_name_str, graph_id)) + if (!label_exists(vtx_name_str, graph_oid)) { - DirectFunctionCall2(create_vlabel, CStringGetDatum(graph_name), CStringGetDatum(vtx_label_name)); + DirectFunctionCall2(create_vlabel, + CStringGetDatum(graph_name), + CStringGetDatum(vtx_label_name)); } } - if (!label_exists(edge_name_str, graph_id)) + if (!label_exists(edge_name_str, graph_oid)) { - DirectFunctionCall2(create_elabel, CStringGetDatum(graph_name), CStringGetDatum(edge_label_name)); + DirectFunctionCall2(create_elabel, + CStringGetDatum(graph_name), + CStringGetDatum(edge_label_name)); } - vtx_label_id = get_label_id(vtx_name_str, graph_id); - edge_label_id = get_label_id(edge_name_str, graph_id); + vtx_label_id = get_label_id(vtx_name_str, graph_oid); + edge_label_id = get_label_id(edge_name_str, graph_oid); graph_cache = search_graph_name_cache(graph_name_str); - vertex_cache = search_label_name_graph_cache(vtx_name_str,graph_id); - edge_cache = search_label_name_graph_cache(edge_name_str,graph_id); + vertex_cache = search_label_name_graph_cache(vtx_name_str, graph_oid); + edge_cache = search_label_name_graph_cache(edge_name_str, graph_oid); nsp_id = graph_cache->namespace; vtx_seq_name = &(vertex_cache->seq_name); @@ -195,34 +196,34 @@ Datum create_complete_graph(PG_FUNCTION_ARGS) vtx_seq_id = get_relname_relid(vtx_seq_name_str, nsp_id); edge_seq_id = get_relname_relid(edge_seq_name_str, nsp_id); - props = create_empty_agtype(); - + props = create_empty_agtype(); + /* Creating vertices*/ - for (i=(int64)1;i<=no_vertices;i++) - { + for (i=(int64)1; i<=no_vertices; i++) + { vid = nextval_internal(vtx_seq_id, true); object_graph_id = make_graphid(vtx_label_id, vid); - insert_vertex_simple(graph_id,vtx_name_str,object_graph_id,props); + insert_vertex_simple(graph_oid, vtx_name_str, object_graph_id, props); } lid = vid; - + /* Creating edges*/ - for (i = 1;i<=no_vertices-1;i++) - { + for (i = 1; i<=no_vertices-1; i++) + { start_vid = lid-no_vertices+i; - for(j=i+1;j<=no_vertices;j++) - { + for(j=i+1; j<=no_vertices; j++) + { end_vid = lid-no_vertices+j; eid = nextval_internal(edge_seq_id, true); object_graph_id = make_graphid(edge_label_id, eid); start_vertex_graph_id = make_graphid(vtx_label_id, start_vid); end_vertex_graph_id = make_graphid(vtx_label_id, end_vid); - - insert_edge_simple(graph_id, edge_name_str, - object_graph_id, start_vertex_graph_id, - end_vertex_graph_id, props); + + insert_edge_simple(graph_oid, edge_name_str, object_graph_id, + start_vertex_graph_id, end_vertex_graph_id, + props); } } PG_RETURN_VOID(); @@ -231,18 +232,18 @@ Datum create_complete_graph(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(age_create_barbell_graph); -/* +/* * The barbell graph is two complete graphs connected by a bridge path * Syntax: * ag_catalog.age_create_barbell_graph(graph_name Name, * m int, - * n int, + * n int, * vertex_label_name Name DEFAULT = NULL, * vertex_properties agtype DEFAULT = NULL, * edge_label_name Name DEFAULT = NULL, * edge_properties agtype DEFAULT = NULL) * Input: - * + * * graph_name - Name of the graph to be created. * m - number of vertices in one complete graph. * n - number of vertices in the bridge path. @@ -250,11 +251,11 @@ PG_FUNCTION_INFO_V1(age_create_barbell_graph); * vertex_properties - Property values to assign each vertex. Default is NULL * edge_label_name - Name of the label to assign each edge to. * edge_properties - Property values to assign each edge. Default is NULL - * + * * https://en.wikipedia.org/wiki/Barbell_graph */ -Datum age_create_barbell_graph(PG_FUNCTION_ARGS) +Datum age_create_barbell_graph(PG_FUNCTION_ARGS) { FunctionCallInfo arguments; Oid graph_oid; @@ -270,7 +271,7 @@ Datum age_create_barbell_graph(PG_FUNCTION_ARGS) Name edge_label_name; int32 edge_label_id; char* edge_label_str; - + graphid object_graph_id; graphid start_node_graph_id; graphid end_node_graph_id; @@ -282,13 +283,14 @@ Datum age_create_barbell_graph(PG_FUNCTION_ARGS) arguments = fcinfo; - // Checking for possible NULL arguments + // Checking for possible NULL arguments // Name graph_name if (PG_ARGISNULL(0)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Graph name cannot be NULL"))); } + graph_name = PG_GETARG_NAME(0); graph_name_str = NameStr(*graph_name); @@ -298,11 +300,11 @@ Datum age_create_barbell_graph(PG_FUNCTION_ARGS) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Graph size cannot be NULL or lower than 3"))); } - + /* * int64 bridge_size: currently only stays at zero. * to do: implement bridge with variable number of nodes. - */ + */ if (PG_ARGISNULL(2) || PG_GETARG_INT32(2) < 0 ) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), @@ -310,37 +312,36 @@ Datum age_create_barbell_graph(PG_FUNCTION_ARGS) } // node label: if null, gets default label, which is "_ag_label_vertex" - if (PG_ARGISNULL(3)) + if (PG_ARGISNULL(3)) { namestrcpy(node_label_name, AG_DEFAULT_LABEL_VERTEX); } - else + else { node_label_name = PG_GETARG_NAME(3); } node_label_str = NameStr(*node_label_name); - /* - * Name edge_label - */ + /* Name edge_label */ if (PG_ARGISNULL(5)) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("edge label can not be NULL"))); } + edge_label_name = PG_GETARG_NAME(5); edge_label_str = NameStr(*edge_label_name); // create two separate complete graphs - DirectFunctionCall4(create_complete_graph, arguments->arg[0], - arguments->arg[1], - arguments->arg[5], - arguments->arg[3]); - DirectFunctionCall4(create_complete_graph, arguments->arg[0], - arguments->arg[1], - arguments->arg[5], - arguments->arg[3]); + DirectFunctionCall4(create_complete_graph, arguments->args[0].value, + arguments->args[1].value, + arguments->args[5].value, + arguments->args[3].value); + DirectFunctionCall4(create_complete_graph, arguments->args[0].value, + arguments->args[1].value, + arguments->args[5].value, + arguments->args[3].value); graph_oid = get_graph_oid(graph_name_str); node_label_id = get_label_id(node_label_str, graph_oid); @@ -349,13 +350,13 @@ Datum age_create_barbell_graph(PG_FUNCTION_ARGS) /* * Fetching caches to get next values for graph id's, and access nodes * to be connected with edges. - */ + */ graph_cache = search_graph_name_cache(graph_name_str); edge_cache = search_label_name_graph_cache(edge_label_str,graph_oid); // connect a node from each graph start_node_index = 1; // first created node, from the first complete graph - end_node_index = arguments->arg[1]*2; // last created node, second graph + end_node_index = arguments->args[1].value*2; // last created node, second graph // next index to be assigned to a node or edge nextval = get_nextval_internal(graph_cache, edge_cache); @@ -370,6 +371,6 @@ Datum age_create_barbell_graph(PG_FUNCTION_ARGS) insert_edge_simple(graph_oid, edge_label_str, object_graph_id, start_node_graph_id, end_node_graph_id, properties); - + PG_RETURN_VOID(); } diff --git a/src/backend/utils/load/ag_load_edges.c b/src/backend/utils/load/ag_load_edges.c index 419f0097e..ac4a6775f 100644 --- a/src/backend/utils/load/ag_load_edges.c +++ b/src/backend/utils/load/ag_load_edges.c @@ -17,16 +17,11 @@ * under the License. */ -#include -#include -#include -#include -#include +#include "postgres.h" -#include "utils/load/csv.h" #include "utils/load/ag_load_edges.h" #include "utils/load/age_load.h" - +#include "utils/load/csv.h" void edge_field_cb(void *field, size_t field_len, void *data) { @@ -86,7 +81,7 @@ void edge_row_cb(int delim __attribute__((unused)), void *data) cr->header_len = (size_t* )malloc(sizeof(size_t *) * cr->cur_field); cr->header = malloc((sizeof (char*) * cr->cur_field)); - for ( i = 0; icur_field; i++) + for (i = 0; icur_field; i++) { cr->header_len[i] = cr->fields_len[i]; cr->header[i] = strndup(cr->fields[i], cr->header_len[i]); @@ -97,9 +92,9 @@ void edge_row_cb(int delim __attribute__((unused)), void *data) object_graph_id = make_graphid(cr->object_id, (int64)cr->row); start_id_int = strtol(cr->fields[0], NULL, 10); - start_vertex_type_id = get_label_id(cr->fields[1], cr->graph_id); + start_vertex_type_id = get_label_id(cr->fields[1], cr->graph_oid); end_id_int = strtol(cr->fields[2], NULL, 10); - end_vertex_type_id = get_label_id(cr->fields[3], cr->graph_id); + end_vertex_type_id = get_label_id(cr->fields[3], cr->graph_oid); start_vertex_graph_id = make_graphid(start_vertex_type_id, start_id_int); end_vertex_graph_id = make_graphid(end_vertex_type_id, end_id_int); @@ -107,7 +102,7 @@ void edge_row_cb(int delim __attribute__((unused)), void *data) props = create_agtype_from_list_i(cr->header, cr->fields, n_fields, 3); - insert_edge_simple(cr->graph_id, cr->object_name, + insert_edge_simple(cr->graph_oid, cr->object_name, object_graph_id, start_vertex_graph_id, end_vertex_graph_id, props); @@ -155,7 +150,7 @@ static int is_term(unsigned char c) int create_edges_from_csv_file(char *file_path, char *graph_name, - Oid graph_id, + Oid graph_oid, char *object_name, int object_id ) { @@ -191,7 +186,7 @@ int create_edges_from_csv_file(char *file_path, cr.header_row_length = 0; cr.curr_row_length = 0; cr.graph_name = graph_name; - cr.graph_id = graph_id; + cr.graph_oid = graph_oid; cr.object_name = object_name; cr.object_id = object_id; diff --git a/src/backend/utils/load/ag_load_labels.c b/src/backend/utils/load/ag_load_labels.c index c0ddf69bb..27e502815 100644 --- a/src/backend/utils/load/ag_load_labels.c +++ b/src/backend/utils/load/ag_load_labels.c @@ -135,7 +135,7 @@ void vertex_row_cb(int delim __attribute__((unused)), void *data) props = create_agtype_from_list(cr->header, cr->fields, n_fields, label_id_int); - insert_vertex_simple(cr->graph_id, cr->object_name, + insert_vertex_simple(cr->graph_oid, cr->object_name, object_graph_id, props); } @@ -183,7 +183,7 @@ static int is_term(unsigned char c) int create_labels_from_csv_file(char *file_path, char *graph_name, - Oid graph_id, + Oid graph_oid, char *object_name, int object_id, bool id_field_exists) @@ -221,7 +221,7 @@ int create_labels_from_csv_file(char *file_path, cr.header_row_length = 0; cr.curr_row_length = 0; cr.graph_name = graph_name; - cr.graph_id = graph_id; + cr.graph_oid = graph_oid; cr.object_name = object_name; cr.object_id = object_id; cr.id_field_exists = id_field_exists; diff --git a/src/backend/utils/load/age_load.c b/src/backend/utils/load/age_load.c index d9819a301..bc64db325 100644 --- a/src/backend/utils/load/age_load.c +++ b/src/backend/utils/load/age_load.c @@ -21,67 +21,45 @@ #include "access/heapam.h" #include "access/xact.h" -#include "catalog/dependency.h" -#include "catalog/namespace.h" -#include "catalog/objectaddress.h" -#include "catalog/pg_class_d.h" -#include "commands/defrem.h" -#include "commands/sequence.h" -#include "commands/tablecmds.h" -#include "miscadmin.h" -#include "nodes/makefuncs.h" -#include "nodes/nodes.h" -#include "nodes/parsenodes.h" -#include "nodes/pg_list.h" -#include "nodes/plannodes.h" -#include "nodes/primnodes.h" -#include "nodes/value.h" #include "parser/parse_node.h" -#include "parser/parser.h" #include "storage/lockdefs.h" #include "tcop/dest.h" -#include "tcop/utility.h" -#include "utils/acl.h" #include "utils/builtins.h" -#include "utils/inval.h" #include "utils/lsyscache.h" #include "utils/rel.h" #include "catalog/ag_graph.h" #include "catalog/ag_label.h" -#include "commands/label_commands.h" -#include "utils/ag_cache.h" #include "utils/agtype.h" #include "utils/graphid.h" -#include "utils/load/age_load.h" -#include "utils/load/ag_load_labels.h" #include "utils/load/ag_load_edges.h" +#include "utils/load/ag_load_labels.h" +#include "utils/load/age_load.h" -agtype* create_empty_agtype(void) +agtype *create_empty_agtype(void) { agtype_in_state result; memset(&result, 0, sizeof(agtype_in_state)); - result.res = push_agtype_value(&result.parse_state, - WAGT_BEGIN_OBJECT, NULL); - result.res = push_agtype_value(&result.parse_state, - WAGT_END_OBJECT, NULL); + result.res = push_agtype_value(&result.parse_state, WAGT_BEGIN_OBJECT, + NULL); + result.res = push_agtype_value(&result.parse_state, WAGT_END_OBJECT, NULL); return agtype_value_to_agtype(result.res); } -agtype* create_agtype_from_list(char **header, char **fields, - size_t fields_len, int64 vertex_id) +agtype *create_agtype_from_list(char **header, char **fields, size_t fields_len, + int64 vertex_id) { agtype_in_state result; int i; memset(&result, 0, sizeof(agtype_in_state)); - result.res = push_agtype_value(&result.parse_state, - WAGT_BEGIN_OBJECT, NULL); + result.res = push_agtype_value(&result.parse_state, WAGT_BEGIN_OBJECT, + NULL); result.res = push_agtype_value(&result.parse_state, WAGT_KEY, @@ -117,12 +95,13 @@ agtype* create_agtype_from_list_i(char **header, char **fields, { return create_empty_agtype(); } + memset(&result, 0, sizeof(agtype_in_state)); - result.res = push_agtype_value(&result.parse_state, - WAGT_BEGIN_OBJECT, NULL); + result.res = push_agtype_value(&result.parse_state, WAGT_BEGIN_OBJECT, + NULL); - for (i = start_index; iis_space = f; } - + void csv_set_term_func(struct csv_parser *p, int (*f)(unsigned char)) { @@ -259,7 +259,7 @@ csv_set_realloc_func(struct csv_parser *p, void *(*f)(void *, size_t)) /* Set the realloc function used to increase buffer size */ if (p && f) p->realloc_func = f; } - + void csv_set_free_func(struct csv_parser *p, void (*f)(void *)) { @@ -282,7 +282,7 @@ csv_get_buffer_size(const struct csv_parser *p) return p->entry_size; return 0; } - + static int csv_increase_buffer(struct csv_parser *p) { @@ -291,10 +291,10 @@ csv_increase_buffer(struct csv_parser *p) if (p == NULL) return 0; if (p->realloc_func == NULL) return 0; - - /* Increase the size of the entry buffer. Attempt to increase size by + + /* Increase the size of the entry buffer. Attempt to increase size by * p->blk_size, if this is larger than SIZE_MAX try to increase current - * buffer size to SIZE_MAX. If allocation fails, try to allocate halve + * buffer size to SIZE_MAX. If allocation fails, try to allocate halve * the size and try again until successful or increment size is zero. */ @@ -321,7 +321,7 @@ csv_increase_buffer(struct csv_parser *p) p->entry_size += to_add; return 0; } - + size_t csv_parse(struct csv_parser *p, const void *s, size_t len, void (*cb1)(void *, size_t, void *), void (*cb2)(int c, void *), void *data) { @@ -342,7 +342,7 @@ csv_parse(struct csv_parser *p, const void *s, size_t len, void (*cb1)(void *, s if (!p->entry_buf && pos < len) { /* Buffer hasn't been allocated yet and len > 0 */ - if (csv_increase_buffer(p) != 0) { + if (csv_increase_buffer(p) != 0) { p->quoted = quoted, p->pstate = pstate, p->spaces = spaces, p->entry_pos = entry_pos; return pos; } @@ -367,7 +367,7 @@ csv_parse(struct csv_parser *p, const void *s, size_t len, void (*cb1)(void *, s } else if (is_term ? is_term(c) : c == CSV_CR || c == CSV_LF) { /* Carriage Return or Line Feed */ if (pstate == FIELD_NOT_BEGUN) { SUBMIT_FIELD(p); - SUBMIT_ROW(p, c); + SUBMIT_ROW(p, c); } else { /* ROW_NOT_BEGUN */ /* Don't submit empty rows by default */ if (p->options & CSV_REPALL_NL) { diff --git a/src/include/catalog/ag_graph.h b/src/include/catalog/ag_graph.h index 98932023f..3704f9c01 100644 --- a/src/include/catalog/ag_graph.h +++ b/src/include/catalog/ag_graph.h @@ -24,21 +24,22 @@ #include "catalog/ag_catalog.h" -#define Anum_ag_graph_name 1 -#define Anum_ag_graph_namespace 2 +#define Anum_ag_graph_oid 1 +#define Anum_ag_graph_name 2 +#define Anum_ag_graph_namespace 3 -#define Natts_ag_graph 2 +#define Natts_ag_graph 3 #define ag_graph_relation_id() ag_relation_id("ag_graph", "table") #define ag_graph_name_index_id() ag_relation_id("ag_graph_name_index", "index") #define ag_graph_namespace_index_id() \ ag_relation_id("ag_graph_namespace_index", "index") -Oid insert_graph(const Name graph_name, const Oid nsp_id); +void insert_graph(const Name graph_name, const Oid nsp_id); void delete_graph(const Name graph_name); void update_graph_name(const Name graph_name, const Name new_name); -Oid get_graph_oid(const char *graph_name); +uint32 get_graph_oid(const char *graph_name); char *get_graph_namespace_name(const char *graph_name); List *get_graphnames(void); diff --git a/src/include/catalog/ag_label.h b/src/include/catalog/ag_label.h index 39ab5c975..e1e90f3f8 100644 --- a/src/include/catalog/ag_label.h +++ b/src/include/catalog/ag_label.h @@ -55,11 +55,10 @@ #define Natts_ag_label 6 #define ag_label_relation_id() ag_relation_id("ag_label", "table") -#define ag_label_oid_index_id() ag_relation_id("ag_label_oid_index", "index") #define ag_label_name_graph_index_id() \ ag_relation_id("ag_label_name_graph_index", "index") -#define ag_label_graph_id_index_id() \ - ag_relation_id("ag_label_graph_id_index", "index") +#define ag_label_graph_oid_index_id() \ + ag_relation_id("ag_label_graph_oid_index", "index") #define ag_label_relation_index_id() \ ag_relation_id("ag_label_relation_index", "index") #define ag_label_seq_name_graph_index_id() \ @@ -70,22 +69,23 @@ #define LABEL_KIND_VERTEX 'v' #define LABEL_KIND_EDGE 'e' -Oid insert_label(const char *label_name, Oid label_graph, int32 label_id, - char label_kind, Oid label_relation, const char *seq_name); +void insert_label(const char *label_name, Oid graph_oid, int32 label_id, + char label_kind, Oid label_relation, const char *seq_name); void delete_label(Oid relation); +int32 get_label_id(const char *label_name, Oid graph_oid); +Oid get_label_relation(const char *label_name, Oid graph_oid); +char *get_label_relation_name(const char *label_name, Oid graph_oid); Oid get_label_oid(const char *label_name, Oid label_graph); -int32 get_label_id(const char *label_name, Oid label_graph); -Oid get_label_relation(const char *label_name, Oid label_graph); -char *get_label_relation_name(const char *label_name, Oid label_graph); char get_label_kind(const char *label_name, Oid label_graph); -bool label_id_exists(Oid label_graph, int32 label_id); -RangeVar *get_label_range_var(char *graph_name, Oid graph_oid, char *label_name); +bool label_id_exists(Oid graph_oid, int32 label_id); +RangeVar *get_label_range_var(char *graph_name, Oid graph_oid, + char *label_name); List *get_all_edge_labels_per_graph(EState *estate, Oid graph_oid); #define label_exists(label_name, label_graph) \ - OidIsValid(get_label_oid(label_name, label_graph)) + OidIsValid(get_label_id(label_name, label_graph)) #endif diff --git a/src/include/commands/label_commands.h b/src/include/commands/label_commands.h index 711a56453..6bbc814cc 100644 --- a/src/include/commands/label_commands.h +++ b/src/include/commands/label_commands.h @@ -54,12 +54,11 @@ #define IS_AG_DEFAULT_LABEL(x) \ (IS_DEFAULT_LABEL_EDGE(x) || IS_DEFAULT_LABEL_VERTEX(x)) +void create_label(char *graph_name, char *label_name, char label_type, + List *parents); Datum create_vlabel(PG_FUNCTION_ARGS); Datum create_elabel(PG_FUNCTION_ARGS); -Oid create_label(char *graph_name, char *label_name, char label_type, - List *parents); - #endif diff --git a/src/include/executor/cypher_utils.h b/src/include/executor/cypher_utils.h index 469b729bb..58dd8fa9c 100644 --- a/src/include/executor/cypher_utils.h +++ b/src/include/executor/cypher_utils.h @@ -20,6 +20,9 @@ #ifndef AG_CYPHER_UTILS_H #define AG_CYPHER_UTILS_H +#include "access/heapam.h" +#include "access/table.h" +#include "access/tableam.h" #include "nodes/execnodes.h" #include "nodes/extensible.h" #include "nodes/nodes.h" diff --git a/src/include/nodes/cypher_nodes.h b/src/include/nodes/cypher_nodes.h index d6d8c02dd..64318eb5d 100644 --- a/src/include/nodes/cypher_nodes.h +++ b/src/include/nodes/cypher_nodes.h @@ -228,7 +228,7 @@ typedef struct cypher_create_target_nodes ExtensibleNode extensible; List *paths; uint32 flags; - Oid graph_oid; + uint32 graph_oid; } cypher_create_target_nodes; typedef struct cypher_create_path @@ -362,7 +362,7 @@ typedef struct cypher_update_information { ExtensibleNode extensible; List *set_items; - int flags; + uint32 flags; AttrNumber tuple_position; char *graph_name; char *clause_name; @@ -384,9 +384,9 @@ typedef struct cypher_delete_information { ExtensibleNode extensible; List *delete_items; - int flags; + uint32 flags; char *graph_name; - Oid graph_oid; + uint32 graph_oid; bool detach; } cypher_delete_information; @@ -400,8 +400,8 @@ typedef struct cypher_delete_item typedef struct cypher_merge_information { ExtensibleNode extensible; - int flags; - Oid graph_oid; + uint32 flags; + uint32 graph_oid; AttrNumber merge_function_attr; cypher_create_path *path; } cypher_merge_information; diff --git a/src/include/optimizer/cypher_createplan.h b/src/include/optimizer/cypher_createplan.h index 50a86e158..e42e20b71 100644 --- a/src/include/optimizer/cypher_createplan.h +++ b/src/include/optimizer/cypher_createplan.h @@ -22,7 +22,6 @@ #include "nodes/pg_list.h" #include "nodes/plannodes.h" -#include "nodes/relation.h" Plan *plan_cypher_create_path(PlannerInfo *root, RelOptInfo *rel, CustomPath *best_path, List *tlist, diff --git a/src/include/optimizer/cypher_pathnode.h b/src/include/optimizer/cypher_pathnode.h index 638268b7e..22404f259 100644 --- a/src/include/optimizer/cypher_pathnode.h +++ b/src/include/optimizer/cypher_pathnode.h @@ -21,7 +21,6 @@ #define AG_CYPHER_PATHNODE_H #include "nodes/pg_list.h" -#include "nodes/relation.h" #define CREATE_PATH_NAME "Cypher Create" #define SET_PATH_NAME "Cypher Set" diff --git a/src/include/parser/.gitignore b/src/include/parser/.gitignore index 891bb4cb1..a9f39a00c 100644 --- a/src/include/parser/.gitignore +++ b/src/include/parser/.gitignore @@ -1 +1,2 @@ cypher_gram_def.h +cypher_kwlist_d.h diff --git a/src/include/parser/cypher_keywords.h b/src/include/parser/cypher_keywords.h index 8d1bbb426..d578dba8d 100644 --- a/src/include/parser/cypher_keywords.h +++ b/src/include/parser/cypher_keywords.h @@ -20,9 +20,10 @@ #ifndef AG_KEYWORDS_H #define AG_KEYWORDS_H -#include "common/keywords.h" +#include "common/kwlookup.h" -extern const ScanKeyword cypher_keywords[]; -extern const int num_cypher_keywords; +extern const ScanKeywordList CypherKeyword; +extern const uint16 CypherKeywordTokens[]; +extern const uint16 CypherKeywordCategories[]; #endif diff --git a/src/include/parser/cypher_kwlist.h b/src/include/parser/cypher_kwlist.h new file mode 100644 index 000000000..d15a0e34a --- /dev/null +++ b/src/include/parser/cypher_kwlist.h @@ -0,0 +1,48 @@ +PG_KEYWORD("all", ALL, RESERVED_KEYWORD) +PG_KEYWORD("analyze", ANALYZE, RESERVED_KEYWORD) +PG_KEYWORD("and", AND, RESERVED_KEYWORD) +PG_KEYWORD("as", AS, RESERVED_KEYWORD) +PG_KEYWORD("asc", ASC, RESERVED_KEYWORD) +PG_KEYWORD("ascending", ASCENDING, RESERVED_KEYWORD) +PG_KEYWORD("by", BY, RESERVED_KEYWORD) +PG_KEYWORD("call", CALL, RESERVED_KEYWORD) +PG_KEYWORD("case", CASE, RESERVED_KEYWORD) +PG_KEYWORD("coalesce", COALESCE, RESERVED_KEYWORD) +PG_KEYWORD("contains", CONTAINS, RESERVED_KEYWORD) +PG_KEYWORD("create", CREATE, RESERVED_KEYWORD) +PG_KEYWORD("delete", DELETE, RESERVED_KEYWORD) +PG_KEYWORD("desc", DESC, RESERVED_KEYWORD) +PG_KEYWORD("descending", DESCENDING, RESERVED_KEYWORD) +PG_KEYWORD("detach", DETACH, RESERVED_KEYWORD) +PG_KEYWORD("distinct", DISTINCT, RESERVED_KEYWORD) +PG_KEYWORD("else", ELSE, RESERVED_KEYWORD) +PG_KEYWORD("end", END_P, RESERVED_KEYWORD) +PG_KEYWORD("ends", ENDS, RESERVED_KEYWORD) +PG_KEYWORD("exists", EXISTS, RESERVED_KEYWORD) +PG_KEYWORD("explain", EXPLAIN, RESERVED_KEYWORD) +PG_KEYWORD("false", FALSE_P, RESERVED_KEYWORD) +PG_KEYWORD("in", IN, RESERVED_KEYWORD) +PG_KEYWORD("is", IS, RESERVED_KEYWORD) +PG_KEYWORD("limit", LIMIT, RESERVED_KEYWORD) +PG_KEYWORD("match", MATCH, RESERVED_KEYWORD) +PG_KEYWORD("merge", MERGE, RESERVED_KEYWORD) +PG_KEYWORD("not", NOT, RESERVED_KEYWORD) +PG_KEYWORD("null", NULL_P, RESERVED_KEYWORD) +PG_KEYWORD("optional", OPTIONAL, RESERVED_KEYWORD) +PG_KEYWORD("or", OR, RESERVED_KEYWORD) +PG_KEYWORD("order", ORDER, RESERVED_KEYWORD) +PG_KEYWORD("remove", REMOVE, RESERVED_KEYWORD) +PG_KEYWORD("return", RETURN, RESERVED_KEYWORD) +PG_KEYWORD("set", SET, RESERVED_KEYWORD) +PG_KEYWORD("skip", SKIP, RESERVED_KEYWORD) +PG_KEYWORD("starts", STARTS, RESERVED_KEYWORD) +PG_KEYWORD("then", THEN, RESERVED_KEYWORD) +PG_KEYWORD("true", TRUE_P, RESERVED_KEYWORD) +PG_KEYWORD("union", UNION, RESERVED_KEYWORD) +PG_KEYWORD("unwind", UNWIND, RESERVED_KEYWORD) +PG_KEYWORD("verbose", VERBOSE, RESERVED_KEYWORD) +PG_KEYWORD("when", WHEN, RESERVED_KEYWORD) +PG_KEYWORD("where", WHERE, RESERVED_KEYWORD) +PG_KEYWORD("with", WITH, RESERVED_KEYWORD) +PG_KEYWORD("xor", XOR, RESERVED_KEYWORD) +PG_KEYWORD("yield", YIELD, RESERVED_KEYWORD) \ No newline at end of file diff --git a/src/include/parser/cypher_parse_node.h b/src/include/parser/cypher_parse_node.h index c0d33f887..5a9720d7e 100644 --- a/src/include/parser/cypher_parse_node.h +++ b/src/include/parser/cypher_parse_node.h @@ -38,7 +38,7 @@ typedef struct cypher_parsestate { ParseState pstate; char *graph_name; - Oid graph_oid; + uint32 graph_oid; Param *params; int default_alias_num; List *entities; diff --git a/src/include/utils/ag_cache.h b/src/include/utils/ag_cache.h index a368c26ba..8775da08f 100644 --- a/src/include/utils/ag_cache.h +++ b/src/include/utils/ag_cache.h @@ -33,7 +33,6 @@ typedef struct graph_cache_data // label_cache_data contains the same fields that ag_label catalog table has typedef struct label_cache_data { - Oid oid; NameData name; Oid graph; int32 id; @@ -47,7 +46,7 @@ graph_cache_data *search_graph_name_cache(const char *name); graph_cache_data *search_graph_namespace_cache(Oid namespace); label_cache_data *search_label_oid_cache(Oid oid); label_cache_data *search_label_name_graph_cache(const char *name, Oid graph); -label_cache_data *search_label_graph_id_cache(Oid graph, int32 id); +label_cache_data *search_label_graph_oid_cache(Oid graph, int32 id); label_cache_data *search_label_relation_cache(Oid relation); label_cache_data *search_label_seq_name_graph_cache(const char *name, Oid graph); diff --git a/src/include/utils/age_graphid_ds.h b/src/include/utils/age_graphid_ds.h index cfacfc1db..ea9dabdc3 100644 --- a/src/include/utils/age_graphid_ds.h +++ b/src/include/utils/age_graphid_ds.h @@ -20,6 +20,8 @@ #ifndef AG_AGE_GRAPHID_DS_H #define AG_AGE_GRAPHID_DS_H +#include "utils/graphid.h" + #define IS_GRAPHID_STACK_EMPTY(stack) \ get_stack_size(stack) == 0 #define PEEK_GRAPHID_STACK(stack) \ diff --git a/src/include/utils/agtype.h b/src/include/utils/agtype.h index 4433ef533..d8975f16f 100644 --- a/src/include/utils/agtype.h +++ b/src/include/utils/agtype.h @@ -31,8 +31,8 @@ #ifndef AG_AGTYPE_H #define AG_AGTYPE_H -#include "fmgr.h" #include "access/htup_details.h" +#include "fmgr.h" #include "lib/stringinfo.h" #include "nodes/pg_list.h" #include "utils/array.h" @@ -40,6 +40,7 @@ #include "utils/syscache.h" #include "catalog/ag_namespace.h" +#include "catalog/pg_type.h" #include "utils/graphid.h" /* Tokens used when sequentially processing an agtype value */ diff --git a/src/include/utils/graphid.h b/src/include/utils/graphid.h index 103977785..999661cf2 100644 --- a/src/include/utils/graphid.h +++ b/src/include/utils/graphid.h @@ -27,6 +27,7 @@ #include "utils/syscache.h" #include "catalog/ag_namespace.h" +#include "catalog/pg_type.h" typedef int64 graphid; #define F_GRAPHIDEQ F_INT8EQ diff --git a/src/include/utils/load/ag_load_edges.h b/src/include/utils/load/ag_load_edges.h index eb5463ed8..3f4ffa8f9 100644 --- a/src/include/utils/load/ag_load_edges.h +++ b/src/include/utils/load/ag_load_edges.h @@ -20,11 +20,10 @@ #ifndef AG_LOAD_EDGES_H #define AG_LOAD_EDGES_H - -#include -#include #include +#include #include +#include #include @@ -80,7 +79,7 @@ typedef struct { size_t header_row_length; size_t curr_row_length; char *graph_name; - Oid graph_id; + Oid graph_oid; char *object_name; int object_id; char *start_vertex; @@ -92,7 +91,7 @@ typedef struct { void edge_field_cb(void *field, size_t field_len, void *data); void edge_row_cb(int delim __attribute__((unused)), void *data); -int create_edges_from_csv_file(char *file_path, char *graph_name, Oid graph_id, +int create_edges_from_csv_file(char *file_path, char *graph_name, Oid graph_oid, char *object_name, int object_id ); #endif //AG_LOAD_EDGES_H diff --git a/src/include/utils/load/ag_load_labels.h b/src/include/utils/load/ag_load_labels.h index 5689c23db..8bf24c246 100644 --- a/src/include/utils/load/ag_load_labels.h +++ b/src/include/utils/load/ag_load_labels.h @@ -21,11 +21,10 @@ #ifndef AG_LOAD_LABELS_H #define AG_LOAD_LABELS_H - -#include -#include #include +#include #include +#include #include #include "postgres.h" @@ -65,7 +64,6 @@ #include "utils/agtype.h" #include "utils/graphid.h" - #define AGE_VERTIX 1 #define AGE_EDGE 2 @@ -89,7 +87,7 @@ typedef struct { size_t header_row_length; size_t curr_row_length; char *graph_name; - Oid graph_id; + Oid graph_oid; char *object_name; int object_id; bool id_field_exists; @@ -99,7 +97,7 @@ typedef struct { void vertex_field_cb(void *field, size_t field_len, void *data); void vertex_row_cb(int delim __attribute__((unused)), void *data); -int create_labels_from_csv_file(char *file_path, char *graph_name, Oid graph_id, +int create_labels_from_csv_file(char *file_path, char *graph_name, Oid graph_oid, char *object_name, int object_id, bool id_field_exists); diff --git a/src/include/utils/load/age_load.h b/src/include/utils/load/age_load.h index 49eff48de..9034ee133 100644 --- a/src/include/utils/load/age_load.h +++ b/src/include/utils/load/age_load.h @@ -63,9 +63,9 @@ agtype* create_agtype_from_list(char **header, char **fields, size_t fields_len, int64 vertex_id); agtype* create_agtype_from_list_i(char **header, char **fields, size_t fields_len, size_t start_index); -void insert_vertex_simple(Oid graph_id, char* label_name, graphid vertex_id, - agtype* vertex_properties); -void insert_edge_simple(Oid graph_id, char* label_name, graphid edge_id, +void insert_vertex_simple(Oid graph_oid, char *label_name, graphid vertex_id, + agtype *vertex_properties); +void insert_edge_simple(Oid graph_oid, char *label_name, graphid edge_id, graphid start_id, graphid end_id, agtype* end_properties); diff --git a/tools/PerfectHash.pm b/tools/PerfectHash.pm new file mode 100644 index 000000000..5a04f7e95 --- /dev/null +++ b/tools/PerfectHash.pm @@ -0,0 +1,399 @@ +# +# For PostgreSQL Database Management System: +# (formerly known as Postgres, then as Postgres95) +# +# Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group +# +# Portions Copyright (c) 1994, The Regents of the University of California +# +# Permission to use, copy, modify, and distribute this software and its documentation for any purpose, +# without fee, and without a written agreement is hereby granted, provided that the above copyright notice +# and this paragraph and the following two paragraphs appear in all copies. +# +# IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, +# INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, +# ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY +# OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +# +# THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA +# HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +# +#---------------------------------------------------------------------- +# +# PerfectHash.pm +# Perl module that constructs minimal perfect hash functions +# +# This code constructs a minimal perfect hash function for the given +# set of keys, using an algorithm described in +# "An optimal algorithm for generating minimal perfect hash functions" +# by Czech, Havas and Majewski in Information Processing Letters, +# 43(5):256-264, October 1992. +# This implementation is loosely based on NetBSD's "nbperf", +# which was written by Joerg Sonnenberger. +# +# The resulting hash function is perfect in the sense that if the presented +# key is one of the original set, it will return the key's index in the set +# (in range 0..N-1). However, the caller must still verify the match, +# as false positives are possible. Also, the hash function may return +# values that are out of range (negative or >= N), due to summing unrelated +# hashtable entries. This indicates that the presented key is definitely +# not in the set. +# +# +# Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group +# Portions Copyright (c) 1994, Regents of the University of California +# +# src/tools/PerfectHash.pm +# +#---------------------------------------------------------------------- + +package PerfectHash; + +use strict; +use warnings; + + +# At runtime, we'll compute two simple hash functions of the input key, +# and use them to index into a mapping table. The hash functions are just +# multiply-and-add in uint32 arithmetic, with different multipliers and +# initial seeds. All the complexity in this module is concerned with +# selecting hash parameters that will work and building the mapping table. + +# We support making case-insensitive hash functions, though this only +# works for a strict-ASCII interpretation of case insensitivity, +# ie, A-Z maps onto a-z and nothing else. +my $case_fold = 0; + + +# +# Construct a C function implementing a perfect hash for the given keys. +# The C function definition is returned as a string. +# +# The keys should be passed as an array reference. They can be any set +# of Perl strings; it is caller's responsibility that there not be any +# duplicates. (Note that the "strings" can be binary data, but hashing +# e.g. OIDs has endianness hazards that callers must overcome.) +# +# The name to use for the function is specified as the second argument. +# It will be a global function by default, but the caller may prepend +# "static " to the result string if it wants a static function. +# +# Additional options can be specified as keyword-style arguments: +# +# case_fold => bool +# If specified as true, the hash function is case-insensitive, for the +# limited idea of case-insensitivity explained above. +# +# fixed_key_length => N +# If specified, all keys are assumed to have length N bytes, and the +# hash function signature will be just "int f(const void *key)" +# rather than "int f(const void *key, size_t keylen)". +# +sub generate_hash_function +{ + my ($keys_ref, $funcname, %options) = @_; + + # It's not worth passing this around as a parameter; just use a global. + $case_fold = $options{case_fold} || 0; + + # Try different hash function parameters until we find a set that works + # for these keys. The multipliers are chosen to be primes that are cheap + # to calculate via shift-and-add, so don't change them without care. + # (Commonly, random seeds are tried, but we want reproducible results + # from this program so we don't do that.) + my $hash_mult1 = 31; + my $hash_mult2; + my $hash_seed1; + my $hash_seed2; + my @subresult; + FIND_PARAMS: + foreach (127, 257, 521, 1033, 2053) + { + $hash_mult2 = $_; # "foreach $hash_mult2" doesn't work + for ($hash_seed1 = 0; $hash_seed1 < 10; $hash_seed1++) + { + for ($hash_seed2 = 0; $hash_seed2 < 10; $hash_seed2++) + { + @subresult = _construct_hash_table( + $keys_ref, $hash_mult1, $hash_mult2, + $hash_seed1, $hash_seed2); + last FIND_PARAMS if @subresult; + } + } + } + + # Choke if we couldn't find a workable set of parameters. + die "failed to generate perfect hash" if !@subresult; + + # Extract info from _construct_hash_table's result array. + my $elemtype = $subresult[0]; + my @hashtab = @{ $subresult[1] }; + my $nhash = scalar(@hashtab); + + # OK, construct the hash function definition including the hash table. + my $f = ''; + $f .= sprintf "int\n"; + if (defined $options{fixed_key_length}) + { + $f .= sprintf "%s(const void *key)\n{\n", $funcname; + } + else + { + $f .= sprintf "%s(const void *key, size_t keylen)\n{\n", $funcname; + } + $f .= sprintf "\tstatic const %s h[%d] = {\n", $elemtype, $nhash; + for (my $i = 0; $i < $nhash; $i++) + { + $f .= sprintf "%s%6d,%s", + ($i % 8 == 0 ? "\t\t" : " "), + $hashtab[$i], + ($i % 8 == 7 ? "\n" : ""); + } + $f .= sprintf "\n" if ($nhash % 8 != 0); + $f .= sprintf "\t};\n\n"; + $f .= sprintf "\tconst unsigned char *k = (const unsigned char *) key;\n"; + $f .= sprintf "\tsize_t\t\tkeylen = %d;\n", $options{fixed_key_length} + if (defined $options{fixed_key_length}); + $f .= sprintf "\tuint32\t\ta = %d;\n", $hash_seed1; + $f .= sprintf "\tuint32\t\tb = %d;\n\n", $hash_seed2; + $f .= sprintf "\twhile (keylen--)\n\t{\n"; + $f .= sprintf "\t\tunsigned char c = *k++"; + $f .= sprintf " | 0x20" if $case_fold; # see comment below + $f .= sprintf ";\n\n"; + $f .= sprintf "\t\ta = a * %d + c;\n", $hash_mult1; + $f .= sprintf "\t\tb = b * %d + c;\n", $hash_mult2; + $f .= sprintf "\t}\n"; + $f .= sprintf "\treturn h[a %% %d] + h[b %% %d];\n", $nhash, $nhash; + $f .= sprintf "}\n"; + + return $f; +} + + +# Calculate a hash function as the run-time code will do. +# +# If we are making a case-insensitive hash function, we implement that +# by OR'ing 0x20 into each byte of the key. This correctly transforms +# upper-case ASCII into lower-case ASCII, while not changing digits or +# dollar signs. (It does change '_', as well as other characters not +# likely to appear in keywords; this has little effect on the hash's +# ability to discriminate keywords.) +sub _calc_hash +{ + my ($key, $mult, $seed) = @_; + + my $result = $seed; + for my $c (split //, $key) + { + my $cn = ord($c); + $cn |= 0x20 if $case_fold; + $result = ($result * $mult + $cn) % 4294967296; + } + return $result; +} + + +# Attempt to construct a mapping table for a minimal perfect hash function +# for the given keys, using the specified hash parameters. +# +# Returns an array containing the mapping table element type name as the +# first element, and a ref to an array of the table values as the second. +# +# Returns an empty array on failure; then caller should choose different +# hash parameter(s) and try again. +sub _construct_hash_table +{ + my ($keys_ref, $hash_mult1, $hash_mult2, $hash_seed1, $hash_seed2) = @_; + my @keys = @{$keys_ref}; + + # This algorithm is based on a graph whose edges correspond to the + # keys and whose vertices correspond to entries of the mapping table. + # A key's edge links the two vertices whose indexes are the outputs of + # the two hash functions for that key. For K keys, the mapping + # table must have at least 2*K+1 entries, guaranteeing that there's at + # least one unused entry. (In principle, larger mapping tables make it + # easier to find a workable hash and increase the number of inputs that + # can be rejected due to touching unused hashtable entries. In practice, + # neither effect seems strong enough to justify using a larger table.) + my $nedges = scalar @keys; # number of edges + my $nverts = 2 * $nedges + 1; # number of vertices + + # However, it would be very bad if $nverts were exactly equal to either + # $hash_mult1 or $hash_mult2: effectively, that hash function would be + # sensitive to only the last byte of each key. Cases where $nverts is a + # multiple of either multiplier likewise lose information. (But $nverts + # can't actually divide them, if they've been intelligently chosen as + # primes.) We can avoid such problems by adjusting the table size. + while ($nverts % $hash_mult1 == 0 + || $nverts % $hash_mult2 == 0) + { + $nverts++; + } + + # Initialize the array of edges. + my @E = (); + foreach my $kw (@keys) + { + # Calculate hashes for this key. + # The hashes are immediately reduced modulo the mapping table size. + my $hash1 = _calc_hash($kw, $hash_mult1, $hash_seed1) % $nverts; + my $hash2 = _calc_hash($kw, $hash_mult2, $hash_seed2) % $nverts; + + # If the two hashes are the same for any key, we have to fail + # since this edge would itself form a cycle in the graph. + return () if $hash1 == $hash2; + + # Add the edge for this key. + push @E, { left => $hash1, right => $hash2 }; + } + + # Initialize the array of vertices, giving them all empty lists + # of associated edges. (The lists will be hashes of edge numbers.) + my @V = (); + for (my $v = 0; $v < $nverts; $v++) + { + push @V, { edges => {} }; + } + + # Insert each edge in the lists of edges connected to its vertices. + for (my $e = 0; $e < $nedges; $e++) + { + my $v = $E[$e]{left}; + $V[$v]{edges}->{$e} = 1; + + $v = $E[$e]{right}; + $V[$v]{edges}->{$e} = 1; + } + + # Now we attempt to prove the graph acyclic. + # A cycle-free graph is either empty or has some vertex of degree 1. + # Removing the edge attached to that vertex doesn't change this property, + # so doing that repeatedly will reduce the size of the graph. + # If the graph is empty at the end of the process, it was acyclic. + # We track the order of edge removal so that the next phase can process + # them in reverse order of removal. + my @output_order = (); + + # Consider each vertex as a possible starting point for edge-removal. + for (my $startv = 0; $startv < $nverts; $startv++) + { + my $v = $startv; + + # If vertex v is of degree 1 (i.e. exactly 1 edge connects to it), + # remove that edge, and then consider the edge's other vertex to see + # if it is now of degree 1. The inner loop repeats until reaching a + # vertex not of degree 1. + while (scalar(keys(%{ $V[$v]{edges} })) == 1) + { + # Unlink its only edge. + my $e = (keys(%{ $V[$v]{edges} }))[0]; + delete($V[$v]{edges}->{$e}); + + # Unlink the edge from its other vertex, too. + my $v2 = $E[$e]{left}; + $v2 = $E[$e]{right} if ($v2 == $v); + delete($V[$v2]{edges}->{$e}); + + # Push e onto the front of the output-order list. + unshift @output_order, $e; + + # Consider v2 on next iteration of inner loop. + $v = $v2; + } + } + + # We succeeded only if all edges were removed from the graph. + return () if (scalar(@output_order) != $nedges); + + # OK, build the hash table of size $nverts. + my @hashtab = (0) x $nverts; + # We need a "visited" flag array in this step, too. + my @visited = (0) x $nverts; + + # The goal is that for any key, the sum of the hash table entries for + # its first and second hash values is the desired output (i.e., the key + # number). By assigning hash table values in the selected edge order, + # we can guarantee that that's true. This works because the edge first + # removed from the graph (and hence last to be visited here) must have + # at least one vertex it shared with no other edge; hence it will have at + # least one vertex (hashtable entry) still unvisited when we reach it here, + # and we can assign that unvisited entry a value that makes the sum come + # out as we wish. By induction, the same holds for all the other edges. + foreach my $e (@output_order) + { + my $l = $E[$e]{left}; + my $r = $E[$e]{right}; + if (!$visited[$l]) + { + # $hashtab[$r] might be zero, or some previously assigned value. + $hashtab[$l] = $e - $hashtab[$r]; + } + else + { + die "oops, doubly used hashtab entry" if $visited[$r]; + # $hashtab[$l] might be zero, or some previously assigned value. + $hashtab[$r] = $e - $hashtab[$l]; + } + # Now freeze both of these hashtab entries. + $visited[$l] = 1; + $visited[$r] = 1; + } + + # Detect range of values needed in hash table. + my $hmin = $nedges; + my $hmax = 0; + for (my $v = 0; $v < $nverts; $v++) + { + $hmin = $hashtab[$v] if $hashtab[$v] < $hmin; + $hmax = $hashtab[$v] if $hashtab[$v] > $hmax; + } + + # Choose width of hashtable entries. In addition to the actual values, + # we need to be able to store a flag for unused entries, and we wish to + # have the property that adding any other entry value to the flag gives + # an out-of-range result (>= $nedges). + my $elemtype; + my $unused_flag; + + if ( $hmin >= -0x7F + && $hmax <= 0x7F + && $hmin + 0x7F >= $nedges) + { + # int8 will work + $elemtype = 'int8'; + $unused_flag = 0x7F; + } + elsif ($hmin >= -0x7FFF + && $hmax <= 0x7FFF + && $hmin + 0x7FFF >= $nedges) + { + # int16 will work + $elemtype = 'int16'; + $unused_flag = 0x7FFF; + } + elsif ($hmin >= -0x7FFFFFFF + && $hmax <= 0x7FFFFFFF + && $hmin + 0x3FFFFFFF >= $nedges) + { + # int32 will work + $elemtype = 'int32'; + $unused_flag = 0x3FFFFFFF; + } + else + { + die "hash table values too wide"; + } + + # Set any unvisited hashtable entries to $unused_flag. + for (my $v = 0; $v < $nverts; $v++) + { + $hashtab[$v] = $unused_flag if !$visited[$v]; + } + + return ($elemtype, \@hashtab); +} + +1; diff --git a/tools/gen_keywordlist.pl b/tools/gen_keywordlist.pl new file mode 100755 index 000000000..499300433 --- /dev/null +++ b/tools/gen_keywordlist.pl @@ -0,0 +1,221 @@ +# +# For PostgreSQL Database Management System: +# (formerly known as Postgres, then as Postgres95) +# +# Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group +# +# Portions Copyright (c) 1994, The Regents of the University of California +# +# Permission to use, copy, modify, and distribute this software and its documentation for any purpose, +# without fee, and without a written agreement is hereby granted, provided that the above copyright notice +# and this paragraph and the following two paragraphs appear in all copies. +# +# IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, +# INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, +# ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY +# OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +# +# THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA +# HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +# +#---------------------------------------------------------------------- +# +# gen_keywordlist.pl +# Perl script that transforms a list of keywords into a ScanKeywordList +# data structure that can be passed to ScanKeywordLookup(). +# +# The input is a C header file containing a series of macro calls +# PG_KEYWORD("keyword", ...) +# Lines not starting with PG_KEYWORD are ignored. The keywords are +# implicitly numbered 0..N-1 in order of appearance in the header file. +# Currently, the keywords are required to appear in ASCII order. +# +# The output is a C header file that defines a "const ScanKeywordList" +# variable named according to the -v switch ("ScanKeywords" by default). +# The variable is marked "static" unless the -e switch is given. +# +# ScanKeywordList uses hash-based lookup, so this script also selects +# a minimal perfect hash function for the keyword set, and emits a +# static hash function that is referenced in the ScanKeywordList struct. +# The hash function is case-insensitive unless --no-case-fold is specified. +# Note that case folding works correctly only for all-ASCII keywords! +# +# +# Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group +# Portions Copyright (c) 1994, Regents of the University of California +# +# src/tools/gen_keywordlist.pl +# +#---------------------------------------------------------------------- + + +use strict; +use warnings; +use Getopt::Long; + +use FindBin; +use lib $FindBin::RealBin; + +use PerfectHash; + +my $output_path = ''; +my $extern = 0; +my $case_fold = 1; +my $varname = 'ScanKeywords'; + +GetOptions( + 'output:s' => \$output_path, + 'extern' => \$extern, + 'case-fold!' => \$case_fold, + 'varname:s' => \$varname) || usage(); + +my $kw_input_file = shift @ARGV || die "No input file.\n"; + +# Make sure output_path ends in a slash if needed. +if ($output_path ne '' && substr($output_path, -1) ne '/') +{ + $output_path .= '/'; +} + +$kw_input_file =~ /(\w+)\.h$/ + || die "Input file must be named something.h.\n"; +my $base_filename = $1 . '_d'; +my $kw_def_file = $output_path . $base_filename . '.h'; + +open(my $kif, '<', $kw_input_file) || die "$kw_input_file: $!\n"; +open(my $kwdef, '>', $kw_def_file) || die "$kw_def_file: $!\n"; + +# Opening boilerplate for keyword definition header. +printf $kwdef <) +{ + if (/^PG_KEYWORD\("(\w+)"/) + { + push @keywords, $1; + } +} + +# When being case-insensitive, insist that the input be all-lower-case. +if ($case_fold) +{ + foreach my $kw (@keywords) + { + die qq|The keyword "$kw" is not lower-case in $kw_input_file\n| + if ($kw ne lc $kw); + } +} + +# Error out if the keyword names are not in ASCII order. +# +# While this isn't really necessary with hash-based lookup, it's still +# helpful because it provides a cheap way to reject duplicate keywords. +# Also, insisting on sorted order ensures that code that scans the keyword +# table linearly will see the keywords in a canonical order. +for my $i (0 .. $#keywords - 1) +{ + die + qq|The keyword "$keywords[$i + 1]" is out of order in $kw_input_file\n| + if ($keywords[$i] cmp $keywords[ $i + 1 ]) >= 0; +} + +# Emit the string containing all the keywords. + +printf $kwdef qq|static const char %s_kw_string[] =\n\t"|, $varname; +print $kwdef join qq|\\0"\n\t"|, @keywords; +print $kwdef qq|";\n\n|; + +# Emit an array of numerical offsets which will be used to index into the +# keyword string. Also determine max keyword length. + +printf $kwdef "static const uint16 %s_kw_offsets[] = {\n", $varname; + +my $offset = 0; +my $max_len = 0; +foreach my $name (@keywords) +{ + my $this_length = length($name); + + print $kwdef "\t$offset,\n"; + + # Calculate the cumulative offset of the next keyword, + # taking into account the null terminator. + $offset += $this_length + 1; + + # Update max keyword length. + $max_len = $this_length if $max_len < $this_length; +} + +print $kwdef "};\n\n"; + +# Emit a macro defining the number of keywords. +# (In some places it's useful to have access to that as a constant.) + +printf $kwdef "#define %s_NUM_KEYWORDS %d\n\n", uc $varname, scalar @keywords; + +# Emit the definition of the hash function. + +my $funcname = $varname . "_hash_func"; + +my $f = PerfectHash::generate_hash_function(\@keywords, $funcname, + case_fold => $case_fold); + +printf $kwdef qq|static %s\n|, $f; + +# Emit the struct that wraps all this lookup info into one variable. + +printf $kwdef "static " if !$extern; +printf $kwdef "const ScanKeywordList %s = {\n", $varname; +printf $kwdef qq|\t%s_kw_string,\n|, $varname; +printf $kwdef qq|\t%s_kw_offsets,\n|, $varname; +printf $kwdef qq|\t%s,\n|, $funcname; +printf $kwdef qq|\t%s_NUM_KEYWORDS,\n|, uc $varname; +printf $kwdef qq|\t%d\n|, $max_len; +printf $kwdef "};\n\n"; + +printf $kwdef "#endif\t\t\t\t\t\t\t/* %s_H */\n", uc $base_filename; + + +sub usage +{ + die <] [--varname/-v ] [--extern/-e] [--[no-]case-fold] input_file + --output Output directory (default '.') + --varname Name for ScanKeywordList variable (default 'ScanKeywords') + --extern Allow the ScanKeywordList variable to be globally visible + --no-case-fold Keyword matching is to be case-sensitive + +gen_keywordlist.pl transforms a list of keywords into a ScanKeywordList. +The output filename is derived from the input file by inserting _d, +for example kwlist_d.h is produced from kwlist.h. +EOM +}

o66x^;ciXnilAP(Z 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 JvxZ>EqUM)^4VL+=5w$H_?ITV)lVbd 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

*r}@apn6k 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ⓈqJ% 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