MuhammadTahaNaveed commented on code in PR #2303:
URL: https://github.com/apache/age/pull/2303#discussion_r3336087736
##########
sql/agtype_graphid.sql:
##########
@@ -69,14 +96,163 @@ AS 'MODULE_PATHNAME';
-- agtype - edge
--
CREATE FUNCTION ag_catalog._agtype_build_edge(graphid, graphid, graphid,
- cstring, agtype)
+ agtype, agtype)
RETURNS agtype
LANGUAGE c
IMMUTABLE
CALLED ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
+--
+-- vertex/edge to agtype cast functions
+--
+CREATE FUNCTION ag_catalog.vertex_to_agtype(vertex)
+ RETURNS agtype
+ LANGUAGE c
+ IMMUTABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE FUNCTION ag_catalog.edge_to_agtype(edge)
+ RETURNS agtype
+ LANGUAGE c
+ IMMUTABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+--
+-- Implicit casts from vertex/edge to agtype
+--
+CREATE CAST (vertex AS agtype)
+ WITH FUNCTION ag_catalog.vertex_to_agtype(vertex)
+AS IMPLICIT;
+
+CREATE CAST (edge AS agtype)
+ WITH FUNCTION ag_catalog.edge_to_agtype(edge)
+AS IMPLICIT;
+
+CREATE FUNCTION ag_catalog.vertex_to_json(vertex)
+ RETURNS json
+ LANGUAGE c
+ IMMUTABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE FUNCTION ag_catalog.edge_to_json(edge)
+ RETURNS json
+ LANGUAGE c
+ IMMUTABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE CAST (vertex AS json)
+ WITH FUNCTION ag_catalog.vertex_to_json(vertex);
+
+CREATE CAST (edge AS json)
+ WITH FUNCTION ag_catalog.edge_to_json(edge);
+
+CREATE FUNCTION ag_catalog.vertex_to_jsonb(vertex)
+ RETURNS jsonb
+ LANGUAGE c
+ IMMUTABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE FUNCTION ag_catalog.edge_to_jsonb(edge)
+ RETURNS jsonb
+ LANGUAGE c
+ IMMUTABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE CAST (vertex AS jsonb)
+ WITH FUNCTION ag_catalog.vertex_to_jsonb(vertex);
+
+CREATE CAST (edge AS jsonb)
+ WITH FUNCTION ag_catalog.edge_to_jsonb(edge);
+
+--
+-- Equality operators for vertex and edge (compare by id)
+--
+CREATE FUNCTION ag_catalog.vertex_eq(vertex, vertex)
+ RETURNS boolean
+ LANGUAGE sql
+ IMMUTABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS $$ SELECT $1.id = $2.id $$;
+
+CREATE OPERATOR = (
+ FUNCTION = ag_catalog.vertex_eq,
+ LEFTARG = vertex,
+ RIGHTARG = vertex,
+ COMMUTATOR = =,
+ NEGATOR = <>,
+ RESTRICT = eqsel,
+ JOIN = eqjoinsel
+);
Review Comment:
HASHES/MERGES are inert without a backing opclass, and vertex/edge have
none. Hash/merge joins already work because vertex_eq inlines to a.id = b.id
and uses graphid's opclass, adding the flags would just be misleading.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]