Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
271 changes: 271 additions & 0 deletions age--1.6.0--y.y.y.sql
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,274 @@ CREATE FUNCTION ag_catalog._ag_enforce_edge_uniqueness4(graphid, graphid, graphi
STABLE
PARALLEL SAFE
as 'MODULE_PATHNAME';

--
-- graphid - int8 cross-type comparison operators
--
-- These allow efficient comparison of graphid with integer literals,
-- avoiding the need to convert to agtype for comparisons like id(v) > 0.
--

-- graphid vs int8 comparison functions
CREATE FUNCTION ag_catalog.graphid_eq_int8(graphid, int8)
RETURNS boolean
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';

CREATE FUNCTION ag_catalog.graphid_ne_int8(graphid, int8)
RETURNS boolean
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';

CREATE FUNCTION ag_catalog.graphid_lt_int8(graphid, int8)
RETURNS boolean
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';

CREATE FUNCTION ag_catalog.graphid_gt_int8(graphid, int8)
RETURNS boolean
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';

CREATE FUNCTION ag_catalog.graphid_le_int8(graphid, int8)
RETURNS boolean
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';

CREATE FUNCTION ag_catalog.graphid_ge_int8(graphid, int8)
RETURNS boolean
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';

-- int8 vs graphid comparison functions
CREATE FUNCTION ag_catalog.int8_eq_graphid(int8, graphid)
RETURNS boolean
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';

CREATE FUNCTION ag_catalog.int8_ne_graphid(int8, graphid)
RETURNS boolean
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';

CREATE FUNCTION ag_catalog.int8_lt_graphid(int8, graphid)
RETURNS boolean
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';

CREATE FUNCTION ag_catalog.int8_gt_graphid(int8, graphid)
RETURNS boolean
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';

CREATE FUNCTION ag_catalog.int8_le_graphid(int8, graphid)
RETURNS boolean
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';

CREATE FUNCTION ag_catalog.int8_ge_graphid(int8, graphid)
RETURNS boolean
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';

-- Cross-type operators: graphid vs int8
CREATE OPERATOR = (
FUNCTION = ag_catalog.graphid_eq_int8,
LEFTARG = graphid,
RIGHTARG = int8,
COMMUTATOR = =,
NEGATOR = <>,
RESTRICT = eqsel,
JOIN = eqjoinsel,
HASHES,
MERGES
);

CREATE OPERATOR <> (
FUNCTION = ag_catalog.graphid_ne_int8,
LEFTARG = graphid,
RIGHTARG = int8,
COMMUTATOR = <>,
NEGATOR = =,
RESTRICT = neqsel,
JOIN = neqjoinsel
);

CREATE OPERATOR < (
FUNCTION = ag_catalog.graphid_lt_int8,
LEFTARG = graphid,
RIGHTARG = int8,
COMMUTATOR = >,
NEGATOR = >=,
RESTRICT = scalarltsel,
JOIN = scalarltjoinsel
);

CREATE OPERATOR > (
FUNCTION = ag_catalog.graphid_gt_int8,
LEFTARG = graphid,
RIGHTARG = int8,
COMMUTATOR = <,
NEGATOR = <=,
RESTRICT = scalargtsel,
JOIN = scalargtjoinsel
);

CREATE OPERATOR <= (
FUNCTION = ag_catalog.graphid_le_int8,
LEFTARG = graphid,
RIGHTARG = int8,
COMMUTATOR = >=,
NEGATOR = >,
RESTRICT = scalarlesel,
JOIN = scalarlejoinsel
);

CREATE OPERATOR >= (
FUNCTION = ag_catalog.graphid_ge_int8,
LEFTARG = graphid,
RIGHTARG = int8,
COMMUTATOR = <=,
NEGATOR = <,
RESTRICT = scalargesel,
JOIN = scalargejoinsel
);

-- Cross-type operators: int8 vs graphid
CREATE OPERATOR = (
FUNCTION = ag_catalog.int8_eq_graphid,
LEFTARG = int8,
RIGHTARG = graphid,
COMMUTATOR = =,
NEGATOR = <>,
RESTRICT = eqsel,
JOIN = eqjoinsel,
HASHES,
MERGES
);

CREATE OPERATOR <> (
FUNCTION = ag_catalog.int8_ne_graphid,
LEFTARG = int8,
RIGHTARG = graphid,
COMMUTATOR = <>,
NEGATOR = =,
RESTRICT = neqsel,
JOIN = neqjoinsel
);

CREATE OPERATOR < (
FUNCTION = ag_catalog.int8_lt_graphid,
LEFTARG = int8,
RIGHTARG = graphid,
COMMUTATOR = >,
NEGATOR = >=,
RESTRICT = scalarltsel,
JOIN = scalarltjoinsel
);

CREATE OPERATOR > (
FUNCTION = ag_catalog.int8_gt_graphid,
LEFTARG = int8,
RIGHTARG = graphid,
COMMUTATOR = <,
NEGATOR = <=,
RESTRICT = scalargtsel,
JOIN = scalargtjoinsel
);

CREATE OPERATOR <= (
FUNCTION = ag_catalog.int8_le_graphid,
LEFTARG = int8,
RIGHTARG = graphid,
COMMUTATOR = >=,
NEGATOR = >,
RESTRICT = scalarlesel,
JOIN = scalarlejoinsel
);

CREATE OPERATOR >= (
FUNCTION = ag_catalog.int8_ge_graphid,
LEFTARG = int8,
RIGHTARG = graphid,
COMMUTATOR = <=,
NEGATOR = <,
RESTRICT = scalargesel,
JOIN = scalargejoinsel
);

-- Cross-type btree comparison support functions
CREATE FUNCTION ag_catalog.graphid_btree_cmp_int8(graphid, int8)
RETURNS int
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';

CREATE FUNCTION ag_catalog.int8_btree_cmp_graphid(int8, graphid)
RETURNS int
LANGUAGE c
IMMUTABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';

-- Update operator class to include cross-type operators for index scans
-- We need to drop and recreate the operator class
DROP OPERATOR CLASS IF EXISTS ag_catalog.graphid_ops USING btree CASCADE;

CREATE OPERATOR CLASS ag_catalog.graphid_ops DEFAULT FOR TYPE graphid USING btree AS
-- same-type operators (graphid vs graphid)
OPERATOR 1 < (graphid, graphid),
OPERATOR 2 <= (graphid, graphid),
OPERATOR 3 = (graphid, graphid),
OPERATOR 4 >= (graphid, graphid),
OPERATOR 5 > (graphid, graphid),
-- cross-type operators (graphid vs int8)
OPERATOR 1 < (graphid, int8),
OPERATOR 2 <= (graphid, int8),
OPERATOR 3 = (graphid, int8),
OPERATOR 4 >= (graphid, int8),
OPERATOR 5 > (graphid, int8),
-- same-type support functions
FUNCTION 1 ag_catalog.graphid_btree_cmp (graphid, graphid),
FUNCTION 2 ag_catalog.graphid_btree_sort (internal),
-- cross-type support function (graphid vs int8)
FUNCTION 1 (graphid, int8) ag_catalog.graphid_btree_cmp_int8 (graphid, int8);
Loading