This is an automated email from the ASF dual-hosted git repository.
dehowef pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-age.git
The following commit(s) were added to refs/heads/master by this push:
new 44524b0 Add operator overload for agtype to int & float
44524b0 is described below
commit 44524b0aec0876d65ec6f8ab957a69f239b02663
Author: Dehowe Feng <[email protected]>
AuthorDate: Fri Apr 9 11:18:11 2021 -0700
Add operator overload for agtype to int & float
Overloaded comparison and arithmetic operators to handle agtype and int2,
int4, int8, float4 and float8 operations.
Removed the implicit cast to float8.
Added regression tests for all cases.
---
age--0.4.0.sql | 1879 +++++++++++++++++++++++++++++++++---
regress/expected/agtype.out | 562 ++++++++++-
regress/sql/agtype.sql | 144 ++-
src/backend/utils/adt/agtype_ops.c | 123 ++-
4 files changed, 2485 insertions(+), 223 deletions(-)
diff --git a/age--0.4.0.sql b/age--0.4.0.sql
index b336eb9..895d7d5 100644
--- a/age--0.4.0.sql
+++ b/age--0.4.0.sql
@@ -364,7 +364,7 @@ CREATE OPERATOR + (
COMMUTATOR = +
);
-CREATE FUNCTION ag_catalog.agtype_bigint_add(agtype, bigint)
+CREATE FUNCTION ag_catalog.agtype_any_add(agtype, smallint)
RETURNS agtype
LANGUAGE c
STABLE
@@ -373,231 +373,1831 @@ PARALLEL SAFE
AS 'MODULE_PATHNAME';
CREATE OPERATOR + (
- FUNCTION = ag_catalog.agtype_bigint_add,
+ FUNCTION = ag_catalog.agtype_any_add,
+ LEFTARG = agtype,
+ RIGHTARG = smallint,
+ COMMUTATOR = +
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_add(smallint, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR + (
+ FUNCTION = ag_catalog.agtype_any_add,
+ LEFTARG = smallint,
+ RIGHTARG = agtype,
+ COMMUTATOR = +
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_add(agtype, integer)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR + (
+ FUNCTION = ag_catalog.agtype_any_add,
+ LEFTARG = agtype,
+ RIGHTARG = integer,
+ COMMUTATOR = +
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_add(integer, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR + (
+ FUNCTION = ag_catalog.agtype_any_add,
+ LEFTARG = integer,
+ RIGHTARG = agtype,
+ COMMUTATOR = +
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_add(agtype, bigint)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR + (
+ FUNCTION = ag_catalog.agtype_any_add,
LEFTARG = agtype,
RIGHTARG = bigint,
COMMUTATOR = +
);
-CREATE FUNCTION ag_catalog.agtype_bigint_add(bigint, agtype)
-RETURNS agtype
+CREATE FUNCTION ag_catalog.agtype_any_add(bigint, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR + (
+ FUNCTION = ag_catalog.agtype_any_add,
+ LEFTARG = bigint,
+ RIGHTARG = agtype,
+ COMMUTATOR = +
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_add(agtype, real)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR + (
+ FUNCTION = ag_catalog.agtype_any_add,
+ LEFTARG = agtype,
+ RIGHTARG = real,
+ COMMUTATOR = +
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_add(real, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR + (
+ FUNCTION = ag_catalog.agtype_any_add,
+ LEFTARG = real,
+ RIGHTARG = agtype,
+ COMMUTATOR = +
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_add(agtype, double precision)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR + (
+ FUNCTION = ag_catalog.agtype_any_add,
+ LEFTARG = agtype,
+ RIGHTARG = double precision,
+ COMMUTATOR = +
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_add(double precision, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR + (
+ FUNCTION = ag_catalog.agtype_any_add,
+ LEFTARG = double precision,
+ RIGHTARG = agtype,
+ COMMUTATOR = +
+);
+
+CREATE FUNCTION ag_catalog.agtype_sub(agtype, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR - (
+ FUNCTION = ag_catalog.agtype_sub,
+ LEFTARG = agtype,
+ RIGHTARG = agtype
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_sub(agtype, smallint)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR - (
+ FUNCTION = ag_catalog.agtype_any_sub,
+ LEFTARG = agtype,
+ RIGHTARG = smallint
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_sub(smallint, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR - (
+ FUNCTION = ag_catalog.agtype_any_sub,
+ LEFTARG = smallint,
+ RIGHTARG = agtype
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_sub(agtype, integer)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR - (
+ FUNCTION = ag_catalog.agtype_any_sub,
+ LEFTARG = agtype,
+ RIGHTARG = integer
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_sub(integer, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR - (
+ FUNCTION = ag_catalog.agtype_any_sub,
+ LEFTARG = integer,
+ RIGHTARG = agtype
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_sub(agtype, bigint)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR - (
+ FUNCTION = ag_catalog.agtype_any_sub,
+ LEFTARG = agtype,
+ RIGHTARG = bigint
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_sub(bigint, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR - (
+ FUNCTION = ag_catalog.agtype_any_sub,
+ LEFTARG = bigint,
+ RIGHTARG = agtype
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_sub(agtype, real)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR - (
+ FUNCTION = ag_catalog.agtype_any_sub,
+ LEFTARG = agtype,
+ RIGHTARG = real
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_sub(real, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR - (
+ FUNCTION = ag_catalog.agtype_any_sub,
+ LEFTARG = real,
+ RIGHTARG = agtype
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_sub(agtype, double precision)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR - (
+ FUNCTION = ag_catalog.agtype_any_sub,
+ LEFTARG = agtype,
+ RIGHTARG = double precision
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_sub(double precision, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR - (
+ FUNCTION = ag_catalog.agtype_any_sub,
+ LEFTARG = double precision,
+ RIGHTARG = agtype
+);
+
+CREATE FUNCTION ag_catalog.agtype_neg(agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR - (
+ FUNCTION = ag_catalog.agtype_neg,
+ RIGHTARG = agtype
+);
+
+CREATE FUNCTION ag_catalog.agtype_mul(agtype, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR * (
+ FUNCTION = ag_catalog.agtype_mul,
+ LEFTARG = agtype,
+ RIGHTARG = agtype,
+ COMMUTATOR = *
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_mul(agtype, smallint)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR * (
+ FUNCTION = ag_catalog.agtype_any_mul,
+ LEFTARG = agtype,
+ RIGHTARG = smallint,
+ COMMUTATOR = *
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_mul(smallint, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR * (
+ FUNCTION = ag_catalog.agtype_any_mul,
+ LEFTARG = smallint,
+ RIGHTARG = agtype,
+ COMMUTATOR = *
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_mul(agtype, integer)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR * (
+ FUNCTION = ag_catalog.agtype_any_mul,
+ LEFTARG = agtype,
+ RIGHTARG = integer,
+ COMMUTATOR = *
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_mul(integer, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR * (
+ FUNCTION = ag_catalog.agtype_any_mul,
+ LEFTARG = integer,
+ RIGHTARG = agtype,
+ COMMUTATOR = *
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_mul(agtype, bigint)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR * (
+ FUNCTION = ag_catalog.agtype_any_mul,
+ LEFTARG = agtype,
+ RIGHTARG = bigint,
+ COMMUTATOR = *
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_mul(bigint, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR * (
+ FUNCTION = ag_catalog.agtype_any_mul,
+ LEFTARG = bigint,
+ RIGHTARG = agtype,
+ COMMUTATOR = *
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_mul(agtype, real)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR * (
+ FUNCTION = ag_catalog.agtype_any_mul,
+ LEFTARG = agtype,
+ RIGHTARG = real,
+ COMMUTATOR = *
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_mul(real, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR * (
+ FUNCTION = ag_catalog.agtype_any_mul,
+ LEFTARG = real,
+ RIGHTARG = agtype,
+ COMMUTATOR = *
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_mul(agtype, double precision)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR * (
+ FUNCTION = ag_catalog.agtype_any_mul,
+ LEFTARG = agtype,
+ RIGHTARG = double precision,
+ COMMUTATOR = *
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_mul(double precision, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR * (
+ FUNCTION = ag_catalog.agtype_any_mul,
+ LEFTARG = double precision,
+ RIGHTARG = agtype,
+ COMMUTATOR = *
+);
+
+CREATE FUNCTION ag_catalog.agtype_div(agtype, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR / (
+ FUNCTION = ag_catalog.agtype_div,
+ LEFTARG = agtype,
+ RIGHTARG = agtype
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_div(agtype, smallint)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR / (
+ FUNCTION = ag_catalog.agtype_any_div,
+ LEFTARG = agtype,
+ RIGHTARG = smallint
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_div(smallint, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR / (
+ FUNCTION = ag_catalog.agtype_any_div,
+ LEFTARG = smallint,
+ RIGHTARG = agtype
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_div(agtype, integer)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR / (
+ FUNCTION = ag_catalog.agtype_any_div,
+ LEFTARG = agtype,
+ RIGHTARG = integer
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_div(integer, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR / (
+ FUNCTION = ag_catalog.agtype_any_div,
+ LEFTARG = integer,
+ RIGHTARG = agtype
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_div(agtype, bigint)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR / (
+ FUNCTION = ag_catalog.agtype_any_div,
+ LEFTARG = agtype,
+ RIGHTARG = bigint
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_div(bigint, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR / (
+ FUNCTION = ag_catalog.agtype_any_div,
+ LEFTARG = bigint,
+ RIGHTARG = agtype
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_div(agtype, real)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR / (
+ FUNCTION = ag_catalog.agtype_any_div,
+ LEFTARG = agtype,
+ RIGHTARG = real
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_div(real, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR / (
+ FUNCTION = ag_catalog.agtype_any_div,
+ LEFTARG = real,
+ RIGHTARG = agtype
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_div(agtype, double precision)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR / (
+ FUNCTION = ag_catalog.agtype_any_div,
+ LEFTARG = agtype,
+ RIGHTARG = double precision
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_div(double precision, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR / (
+ FUNCTION = ag_catalog.agtype_any_div,
+ LEFTARG = double precision,
+ RIGHTARG = agtype
+);
+
+CREATE FUNCTION ag_catalog.agtype_mod(agtype, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR % (
+ FUNCTION = ag_catalog.agtype_mod,
+ LEFTARG = agtype,
+ RIGHTARG = agtype
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_mod(agtype, smallint)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR % (
+ FUNCTION = ag_catalog.agtype_any_mod,
+ LEFTARG = agtype,
+ RIGHTARG = smallint
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_mod(smallint, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR % (
+ FUNCTION = ag_catalog.agtype_any_mod,
+ LEFTARG = smallint,
+ RIGHTARG = agtype
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_mod(agtype, integer)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR % (
+ FUNCTION = ag_catalog.agtype_any_mod,
+ LEFTARG = agtype,
+ RIGHTARG = integer
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_mod(integer, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR % (
+ FUNCTION = ag_catalog.agtype_any_mod,
+ LEFTARG = integer,
+ RIGHTARG = agtype
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_mod(agtype, bigint)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR % (
+ FUNCTION = ag_catalog.agtype_any_mod,
+ LEFTARG = agtype,
+ RIGHTARG = bigint
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_mod(bigint, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR % (
+ FUNCTION = ag_catalog.agtype_any_mod,
+ LEFTARG = bigint,
+ RIGHTARG = agtype
+);
+
+
+CREATE FUNCTION ag_catalog.agtype_pow(agtype, agtype)
+RETURNS agtype
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR ^ (
+ FUNCTION = ag_catalog.agtype_pow,
+ LEFTARG = agtype,
+ RIGHTARG = agtype
+);
+
+--
+-- agtype - comparison operators (=, <>, <, >, <=, >=)
+--
+
+CREATE FUNCTION ag_catalog.agtype_eq(agtype, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR = (
+ FUNCTION = ag_catalog.agtype_eq,
+ LEFTARG = agtype,
+ RIGHTARG = agtype,
+ COMMUTATOR = =,
+ NEGATOR = <>,
+ RESTRICT = eqsel,
+ JOIN = eqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_eq(agtype, smallint)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR = (
+ FUNCTION = ag_catalog.agtype_any_eq,
+ LEFTARG = agtype,
+ RIGHTARG = smallint,
+ COMMUTATOR = =,
+ NEGATOR = <>,
+ RESTRICT = eqsel,
+ JOIN = eqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_eq(smallint, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR = (
+ FUNCTION = ag_catalog.agtype_any_eq,
+ LEFTARG = smallint,
+ RIGHTARG = agtype,
+ COMMUTATOR = =,
+ NEGATOR = <>,
+ RESTRICT = eqsel,
+ JOIN = eqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_eq(agtype, integer)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR = (
+ FUNCTION = ag_catalog.agtype_any_eq,
+ LEFTARG = agtype,
+ RIGHTARG = integer,
+ COMMUTATOR = =,
+ NEGATOR = <>,
+ RESTRICT = eqsel,
+ JOIN = eqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_eq(integer, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR = (
+ FUNCTION = ag_catalog.agtype_any_eq,
+ LEFTARG = integer,
+ RIGHTARG = agtype,
+ COMMUTATOR = =,
+ NEGATOR = <>,
+ RESTRICT = eqsel,
+ JOIN = eqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_eq(agtype, bigint)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR = (
+ FUNCTION = ag_catalog.agtype_any_eq,
+ LEFTARG = agtype,
+ RIGHTARG = bigint,
+ COMMUTATOR = =,
+ NEGATOR = <>,
+ RESTRICT = eqsel,
+ JOIN = eqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_eq(bigint, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR = (
+ FUNCTION = ag_catalog.agtype_any_eq,
+ LEFTARG = bigint,
+ RIGHTARG = agtype,
+ COMMUTATOR = =,
+ NEGATOR = <>,
+ RESTRICT = eqsel,
+ JOIN = eqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_eq(agtype, real)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR = (
+ FUNCTION = ag_catalog.agtype_any_eq,
+ LEFTARG = agtype,
+ RIGHTARG = real,
+ COMMUTATOR = =,
+ NEGATOR = <>,
+ RESTRICT = eqsel,
+ JOIN = eqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_eq(real, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR = (
+ FUNCTION = ag_catalog.agtype_any_eq,
+ LEFTARG = real,
+ RIGHTARG = agtype,
+ COMMUTATOR = =,
+ NEGATOR = <>,
+ RESTRICT = eqsel,
+ JOIN = eqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_eq(agtype, double precision)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR = (
+ FUNCTION = ag_catalog.agtype_any_eq,
+ LEFTARG = agtype,
+ RIGHTARG = double precision,
+ COMMUTATOR = =,
+ NEGATOR = <>,
+ RESTRICT = eqsel,
+ JOIN = eqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_eq(double precision, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR = (
+ FUNCTION = ag_catalog.agtype_any_eq,
+ LEFTARG = double precision,
+ RIGHTARG = agtype,
+ COMMUTATOR = =,
+ NEGATOR = <>,
+ RESTRICT = eqsel,
+ JOIN = eqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_ne(agtype, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR <> (
+ FUNCTION = ag_catalog.agtype_ne,
+ LEFTARG = agtype,
+ RIGHTARG = agtype,
+ COMMUTATOR = <>,
+ NEGATOR = =,
+ RESTRICT = neqsel,
+ JOIN = neqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_ne(agtype, smallint)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR <> (
+ FUNCTION = ag_catalog.agtype_any_ne,
+ LEFTARG = agtype,
+ RIGHTARG = smallint,
+ COMMUTATOR = <>,
+ NEGATOR = =,
+ RESTRICT = neqsel,
+ JOIN = neqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_ne(smallint, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR <> (
+ FUNCTION = ag_catalog.agtype_any_ne,
+ LEFTARG = smallint,
+ RIGHTARG = agtype,
+ COMMUTATOR = <>,
+ NEGATOR = =,
+ RESTRICT = neqsel,
+ JOIN = neqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_ne(agtype, integer)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR <> (
+ FUNCTION = ag_catalog.agtype_any_ne,
+ LEFTARG = agtype,
+ RIGHTARG = integer,
+ COMMUTATOR = <>,
+ NEGATOR = =,
+ RESTRICT = neqsel,
+ JOIN = neqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_ne(integer, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR <> (
+ FUNCTION = ag_catalog.agtype_any_ne,
+ LEFTARG = integer,
+ RIGHTARG = agtype,
+ COMMUTATOR = <>,
+ NEGATOR = =,
+ RESTRICT = neqsel,
+ JOIN = neqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_ne(agtype, bigint)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR <> (
+ FUNCTION = ag_catalog.agtype_any_ne,
+ LEFTARG = agtype,
+ RIGHTARG = bigint,
+ COMMUTATOR = <>,
+ NEGATOR = =,
+ RESTRICT = neqsel,
+ JOIN = neqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_ne(bigint, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR <> (
+ FUNCTION = ag_catalog.agtype_any_ne,
+ LEFTARG = bigint,
+ RIGHTARG = agtype,
+ COMMUTATOR = <>,
+ NEGATOR = =,
+ RESTRICT = neqsel,
+ JOIN = neqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_ne(agtype, real)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR <> (
+ FUNCTION = ag_catalog.agtype_any_ne,
+ LEFTARG = agtype,
+ RIGHTARG = real,
+ COMMUTATOR = <>,
+ NEGATOR = =,
+ RESTRICT = neqsel,
+ JOIN = neqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_ne(real, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR <> (
+ FUNCTION = ag_catalog.agtype_any_ne,
+ LEFTARG = real,
+ RIGHTARG = agtype,
+ COMMUTATOR = <>,
+ NEGATOR = =,
+ RESTRICT = neqsel,
+ JOIN = neqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_ne(agtype, double precision)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR <> (
+ FUNCTION = ag_catalog.agtype_any_ne,
+ LEFTARG = agtype,
+ RIGHTARG = double precision,
+ COMMUTATOR = <>,
+ NEGATOR = =,
+ RESTRICT = neqsel,
+ JOIN = neqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_ne(double precision, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR <> (
+ FUNCTION = ag_catalog.agtype_any_ne,
+ LEFTARG = double precision,
+ RIGHTARG = agtype,
+ COMMUTATOR = <>,
+ NEGATOR = =,
+ RESTRICT = neqsel,
+ JOIN = neqjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_lt(agtype, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR < (
+ FUNCTION = ag_catalog.agtype_lt,
+ LEFTARG = agtype,
+ RIGHTARG = agtype,
+ COMMUTATOR = >,
+ NEGATOR = >=,
+ RESTRICT = scalarltsel,
+ JOIN = scalarltjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_lt(agtype, smallint)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR < (
+ FUNCTION = ag_catalog.agtype_any_lt,
+ LEFTARG = agtype,
+ RIGHTARG = smallint,
+ COMMUTATOR = >,
+ NEGATOR = >=,
+ RESTRICT = scalarltsel,
+ JOIN = scalarltjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_lt(smallint, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR < (
+ FUNCTION = ag_catalog.agtype_any_lt,
+ LEFTARG = smallint,
+ RIGHTARG = agtype,
+ COMMUTATOR = >,
+ NEGATOR = >=,
+ RESTRICT = scalarltsel,
+ JOIN = scalarltjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_lt(agtype, integer)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR < (
+ FUNCTION = ag_catalog.agtype_any_lt,
+ LEFTARG = agtype,
+ RIGHTARG = integer,
+ COMMUTATOR = >,
+ NEGATOR = >=,
+ RESTRICT = scalarltsel,
+ JOIN = scalarltjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_lt(integer, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR < (
+ FUNCTION = ag_catalog.agtype_any_lt,
+ LEFTARG = integer,
+ RIGHTARG = agtype,
+ COMMUTATOR = >,
+ NEGATOR = >=,
+ RESTRICT = scalarltsel,
+ JOIN = scalarltjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_lt(agtype, bigint)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR < (
+ FUNCTION = ag_catalog.agtype_any_lt,
+ LEFTARG = agtype,
+ RIGHTARG = bigint,
+ COMMUTATOR = >,
+ NEGATOR = >=,
+ RESTRICT = scalarltsel,
+ JOIN = scalarltjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_lt(bigint, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR < (
+ FUNCTION = ag_catalog.agtype_any_lt,
+ LEFTARG = bigint,
+ RIGHTARG = agtype,
+ COMMUTATOR = >,
+ NEGATOR = >=,
+ RESTRICT = scalarltsel,
+ JOIN = scalarltjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_lt(agtype, real)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR < (
+ FUNCTION = ag_catalog.agtype_any_lt,
+ LEFTARG = agtype,
+ RIGHTARG = real,
+ COMMUTATOR = >,
+ NEGATOR = >=,
+ RESTRICT = scalarltsel,
+ JOIN = scalarltjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_lt(real, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR < (
+ FUNCTION = ag_catalog.agtype_any_lt,
+ LEFTARG = real,
+ RIGHTARG = agtype,
+ COMMUTATOR = >,
+ NEGATOR = >=,
+ RESTRICT = scalarltsel,
+ JOIN = scalarltjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_lt(agtype, double precision)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR < (
+ FUNCTION = ag_catalog.agtype_any_lt,
+ LEFTARG = agtype,
+ RIGHTARG = double precision,
+ COMMUTATOR = >,
+ NEGATOR = >=,
+ RESTRICT = scalarltsel,
+ JOIN = scalarltjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_lt(double precision, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR < (
+ FUNCTION = ag_catalog.agtype_any_lt,
+ LEFTARG = double precision,
+ RIGHTARG = agtype,
+ COMMUTATOR = >,
+ NEGATOR = >=,
+ RESTRICT = scalarltsel,
+ JOIN = scalarltjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_gt(agtype, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR > (
+ FUNCTION = ag_catalog.agtype_gt,
+ LEFTARG = agtype,
+ RIGHTARG = agtype,
+ COMMUTATOR = <,
+ NEGATOR = <=,
+ RESTRICT = scalargtsel,
+ JOIN = scalargtjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_gt(agtype, smallint)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR > (
+ FUNCTION = ag_catalog.agtype_any_gt,
+ LEFTARG = agtype,
+ RIGHTARG = smallint,
+ COMMUTATOR = <,
+ NEGATOR = <=,
+ RESTRICT = scalargtsel,
+ JOIN = scalargtjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_gt(smallint, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR > (
+ FUNCTION = ag_catalog.agtype_any_gt,
+ LEFTARG = smallint,
+ RIGHTARG = agtype,
+ COMMUTATOR = <,
+ NEGATOR = <=,
+ RESTRICT = scalargtsel,
+ JOIN = scalargtjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_gt(agtype, integer)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR > (
+ FUNCTION = ag_catalog.agtype_any_gt,
+ LEFTARG = agtype,
+ RIGHTARG = integer,
+ COMMUTATOR = <,
+ NEGATOR = <=,
+ RESTRICT = scalargtsel,
+ JOIN = scalargtjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_gt(integer, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR > (
+ FUNCTION = ag_catalog.agtype_any_gt,
+ LEFTARG = integer,
+ RIGHTARG = agtype,
+ COMMUTATOR = <,
+ NEGATOR = <=,
+ RESTRICT = scalargtsel,
+ JOIN = scalargtjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_gt(agtype, bigint)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR > (
+ FUNCTION = ag_catalog.agtype_any_gt,
+ LEFTARG = agtype,
+ RIGHTARG = bigint,
+ COMMUTATOR = <,
+ NEGATOR = <=,
+ RESTRICT = scalargtsel,
+ JOIN = scalargtjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_gt(bigint, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR > (
+ FUNCTION = ag_catalog.agtype_any_gt,
+ LEFTARG = bigint,
+ RIGHTARG = agtype,
+ COMMUTATOR = <,
+ NEGATOR = <=,
+ RESTRICT = scalargtsel,
+ JOIN = scalargtjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_gt(agtype, real)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR > (
+ FUNCTION = ag_catalog.agtype_any_gt,
+ LEFTARG = agtype,
+ RIGHTARG = real,
+ COMMUTATOR = <,
+ NEGATOR = <=,
+ RESTRICT = scalargtsel,
+ JOIN = scalargtjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_gt(real, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR > (
+ FUNCTION = ag_catalog.agtype_any_gt,
+ LEFTARG = real,
+ RIGHTARG = agtype,
+ COMMUTATOR = <,
+ NEGATOR = <=,
+ RESTRICT = scalargtsel,
+ JOIN = scalargtjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_gt(agtype, double precision)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR > (
+ FUNCTION = ag_catalog.agtype_any_gt,
+ LEFTARG = agtype,
+ RIGHTARG = double precision,
+ COMMUTATOR = <,
+ NEGATOR = <=,
+ RESTRICT = scalargtsel,
+ JOIN = scalargtjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_gt(double precision, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR > (
+ FUNCTION = ag_catalog.agtype_any_gt,
+ LEFTARG = double precision,
+ RIGHTARG = agtype,
+ COMMUTATOR = <,
+ NEGATOR = <=,
+ RESTRICT = scalargtsel,
+ JOIN = scalargtjoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_le(agtype, agtype)
+RETURNS boolean
+LANGUAGE c
+STABLE
+RETURNS NULL ON NULL INPUT
+PARALLEL SAFE
+AS 'MODULE_PATHNAME';
+
+CREATE OPERATOR <= (
+ FUNCTION = ag_catalog.agtype_le,
+ LEFTARG = agtype,
+ RIGHTARG = agtype,
+ COMMUTATOR = >=,
+ NEGATOR = >,
+ RESTRICT = scalarlesel,
+ JOIN = scalarlejoinsel
+);
+
+CREATE FUNCTION ag_catalog.agtype_any_le(agtype, smallint)
+RETURNS boolean
LANGUAGE c
STABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-CREATE OPERATOR + (
- FUNCTION = ag_catalog.agtype_bigint_add,
- LEFTARG = bigint,
- RIGHTARG = agtype,
- COMMUTATOR = +
+CREATE OPERATOR <= (
+ FUNCTION = ag_catalog.agtype_any_le,
+ LEFTARG = agtype,
+ RIGHTARG = smallint,
+ COMMUTATOR = >=,
+ NEGATOR = >,
+ RESTRICT = scalarlesel,
+ JOIN = scalarlejoinsel
);
-CREATE FUNCTION ag_catalog.agtype_sub(agtype, agtype)
-RETURNS agtype
+CREATE FUNCTION ag_catalog.agtype_any_le(smallint, agtype)
+RETURNS boolean
LANGUAGE c
STABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-CREATE OPERATOR - (
- FUNCTION = ag_catalog.agtype_sub,
- LEFTARG = agtype,
- RIGHTARG = agtype
+CREATE OPERATOR <= (
+ FUNCTION = ag_catalog.agtype_any_le,
+ LEFTARG = smallint,
+ RIGHTARG = agtype,
+ COMMUTATOR = >=,
+ NEGATOR = >,
+ RESTRICT = scalarlesel,
+ JOIN = scalarlejoinsel
);
-CREATE FUNCTION ag_catalog.agtype_bigint_sub(agtype, bigint)
-RETURNS agtype
+CREATE FUNCTION ag_catalog.agtype_any_le(agtype, integer)
+RETURNS boolean
LANGUAGE c
STABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-CREATE OPERATOR - (
- FUNCTION = ag_catalog.agtype_bigint_sub,
+CREATE OPERATOR <= (
+ FUNCTION = ag_catalog.agtype_any_le,
LEFTARG = agtype,
- RIGHTARG = bigint
+ RIGHTARG = integer,
+ COMMUTATOR = >=,
+ NEGATOR = >,
+ RESTRICT = scalarlesel,
+ JOIN = scalarlejoinsel
);
-CREATE FUNCTION ag_catalog.agtype_bigint_sub(bigint, agtype)
-RETURNS agtype
+CREATE FUNCTION ag_catalog.agtype_any_le(integer, agtype)
+RETURNS boolean
LANGUAGE c
STABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-CREATE OPERATOR - (
- FUNCTION = ag_catalog.agtype_bigint_sub,
- LEFTARG = bigint,
- RIGHTARG = agtype
+CREATE OPERATOR <= (
+ FUNCTION = ag_catalog.agtype_any_le,
+ LEFTARG = integer,
+ RIGHTARG = agtype,
+ COMMUTATOR = >=,
+ NEGATOR = >,
+ RESTRICT = scalarlesel,
+ JOIN = scalarlejoinsel
);
-CREATE FUNCTION ag_catalog.agtype_neg(agtype)
-RETURNS agtype
+CREATE FUNCTION ag_catalog.agtype_any_le(agtype, bigint)
+RETURNS boolean
LANGUAGE c
STABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-CREATE OPERATOR - (
- FUNCTION = ag_catalog.agtype_neg,
- RIGHTARG = agtype
+CREATE OPERATOR <= (
+ FUNCTION = ag_catalog.agtype_any_le,
+ LEFTARG = agtype,
+ RIGHTARG = bigint,
+ COMMUTATOR = >=,
+ NEGATOR = >,
+ RESTRICT = scalarlesel,
+ JOIN = scalarlejoinsel
);
-CREATE FUNCTION ag_catalog.agtype_mul(agtype, agtype)
-RETURNS agtype
+CREATE FUNCTION ag_catalog.agtype_any_le(bigint, agtype)
+RETURNS boolean
LANGUAGE c
STABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-CREATE OPERATOR * (
- FUNCTION = ag_catalog.agtype_mul,
- LEFTARG = agtype,
+CREATE OPERATOR <= (
+ FUNCTION = ag_catalog.agtype_any_le,
+ LEFTARG = bigint,
RIGHTARG = agtype,
- COMMUTATOR = *
+ COMMUTATOR = >=,
+ NEGATOR = >,
+ RESTRICT = scalarlesel,
+ JOIN = scalarlejoinsel
);
-CREATE FUNCTION ag_catalog.agtype_bigint_mul(agtype, bigint)
-RETURNS agtype
+CREATE FUNCTION ag_catalog.agtype_any_le(agtype, real)
+RETURNS boolean
LANGUAGE c
STABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-CREATE OPERATOR * (
- FUNCTION = ag_catalog.agtype_bigint_mul,
+CREATE OPERATOR <= (
+ FUNCTION = ag_catalog.agtype_any_le,
LEFTARG = agtype,
- RIGHTARG = bigint,
- COMMUTATOR = *
+ RIGHTARG = real,
+ COMMUTATOR = >=,
+ NEGATOR = >,
+ RESTRICT = scalarlesel,
+ JOIN = scalarlejoinsel
);
-CREATE FUNCTION ag_catalog.agtype_bigint_mul(bigint, agtype)
-RETURNS agtype
+CREATE FUNCTION ag_catalog.agtype_any_le(real, agtype)
+RETURNS boolean
LANGUAGE c
STABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-CREATE OPERATOR * (
- FUNCTION = ag_catalog.agtype_bigint_mul,
- LEFTARG = bigint,
- RIGHTARG = agtype,
- COMMUTATOR = *
+CREATE OPERATOR <= (
+ FUNCTION = ag_catalog.agtype_any_le,
+ LEFTARG = real,
+ RIGHTARG = agtype,
+ COMMUTATOR = >=,
+ NEGATOR = >,
+ RESTRICT = scalarlesel,
+ JOIN = scalarlejoinsel
);
-CREATE FUNCTION ag_catalog.agtype_div(agtype, agtype)
-RETURNS agtype
+CREATE FUNCTION ag_catalog.agtype_any_le(agtype, double precision)
+RETURNS boolean
LANGUAGE c
STABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-CREATE OPERATOR / (
- FUNCTION = ag_catalog.agtype_div,
+CREATE OPERATOR <= (
+ FUNCTION = ag_catalog.agtype_any_le,
LEFTARG = agtype,
- RIGHTARG = agtype
+ RIGHTARG = double precision,
+ COMMUTATOR = >=,
+ NEGATOR = >,
+ RESTRICT = scalarlesel,
+ JOIN = scalarlejoinsel
);
-CREATE FUNCTION ag_catalog.agtype_bigint_div(agtype, bigint)
-RETURNS agtype
+CREATE FUNCTION ag_catalog.agtype_any_le(double precision, agtype)
+RETURNS boolean
LANGUAGE c
STABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-CREATE OPERATOR / (
- FUNCTION = ag_catalog.agtype_bigint_div,
- LEFTARG = agtype,
- RIGHTARG = bigint
+CREATE OPERATOR <= (
+ FUNCTION = ag_catalog.agtype_any_le,
+ LEFTARG = double precision,
+ RIGHTARG = agtype,
+ COMMUTATOR = >=,
+ NEGATOR = >,
+ RESTRICT = scalarlesel,
+ JOIN = scalarlejoinsel
);
-CREATE FUNCTION ag_catalog.agtype_bigint_div(bigint, agtype)
-RETURNS agtype
+CREATE FUNCTION ag_catalog.agtype_ge(agtype, agtype)
+RETURNS boolean
LANGUAGE c
STABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-CREATE OPERATOR / (
- FUNCTION = ag_catalog.agtype_bigint_div,
- LEFTARG = bigint,
- RIGHTARG = agtype
+CREATE OPERATOR >= (
+ FUNCTION = ag_catalog.agtype_ge,
+ LEFTARG = agtype,
+ RIGHTARG = agtype,
+ COMMUTATOR = <=,
+ NEGATOR = <,
+ RESTRICT = scalargesel,
+ JOIN = scalargejoinsel
);
-CREATE FUNCTION ag_catalog.agtype_mod(agtype, agtype)
-RETURNS agtype
+CREATE FUNCTION ag_catalog.agtype_any_ge(agtype, smallint)
+RETURNS boolean
LANGUAGE c
STABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-CREATE OPERATOR % (
- FUNCTION = ag_catalog.agtype_mod,
+CREATE OPERATOR >= (
+ FUNCTION = ag_catalog.agtype_any_ge,
LEFTARG = agtype,
- RIGHTARG = agtype
+ RIGHTARG = smallint,
+ COMMUTATOR = <=,
+ NEGATOR = <,
+ RESTRICT = scalargesel,
+ JOIN = scalargejoinsel
);
-CREATE FUNCTION ag_catalog.agtype_bigint_mod(agtype, bigint)
-RETURNS agtype
+CREATE FUNCTION ag_catalog.agtype_any_ge(smallint, agtype)
+RETURNS boolean
LANGUAGE c
STABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-CREATE OPERATOR % (
- FUNCTION = ag_catalog.agtype_bigint_mod,
- LEFTARG = agtype,
- RIGHTARG = bigint
+CREATE OPERATOR >= (
+ FUNCTION = ag_catalog.agtype_any_ge,
+ LEFTARG = smallint,
+ RIGHTARG = agtype,
+ COMMUTATOR = <=,
+ NEGATOR = <,
+ RESTRICT = scalargesel,
+ JOIN = scalargejoinsel
);
-CREATE FUNCTION ag_catalog.agtype_bigint_mod(bigint, agtype)
-RETURNS agtype
+CREATE FUNCTION ag_catalog.agtype_any_ge(agtype, integer)
+RETURNS boolean
LANGUAGE c
STABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-CREATE OPERATOR % (
- FUNCTION = ag_catalog.agtype_bigint_mod,
- LEFTARG = bigint,
- RIGHTARG = agtype
+CREATE OPERATOR >= (
+ FUNCTION = ag_catalog.agtype_any_ge,
+ LEFTARG = agtype,
+ RIGHTARG = integer,
+ COMMUTATOR = <=,
+ NEGATOR = <,
+ RESTRICT = scalargesel,
+ JOIN = scalargejoinsel
);
-
-CREATE FUNCTION ag_catalog.agtype_pow(agtype, agtype)
-RETURNS agtype
+CREATE FUNCTION ag_catalog.agtype_any_ge(integer, agtype)
+RETURNS boolean
LANGUAGE c
STABLE
RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-CREATE OPERATOR ^ (
- FUNCTION = ag_catalog.agtype_pow,
- LEFTARG = agtype,
- RIGHTARG = agtype
+CREATE OPERATOR >= (
+ FUNCTION = ag_catalog.agtype_any_ge,
+ LEFTARG = integer,
+ RIGHTARG = agtype,
+ COMMUTATOR = <=,
+ NEGATOR = <,
+ RESTRICT = scalargesel,
+ JOIN = scalargejoinsel
);
---
--- agtype - comparison operators (=, <>, <, >, <=, >=)
---
-
-CREATE FUNCTION ag_catalog.agtype_eq(agtype, agtype)
+CREATE FUNCTION ag_catalog.agtype_any_ge(agtype, bigint)
RETURNS boolean
LANGUAGE c
STABLE
@@ -605,17 +2205,17 @@ RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-CREATE OPERATOR = (
- FUNCTION = ag_catalog.agtype_eq,
+CREATE OPERATOR >= (
+ FUNCTION = ag_catalog.agtype_any_ge,
LEFTARG = agtype,
- RIGHTARG = agtype,
- COMMUTATOR = =,
- NEGATOR = <>,
- RESTRICT = eqsel,
- JOIN = eqjoinsel
+ RIGHTARG = bigint,
+ COMMUTATOR = <=,
+ NEGATOR = <,
+ RESTRICT = scalargesel,
+ JOIN = scalargejoinsel
);
-CREATE FUNCTION ag_catalog.agtype_ne(agtype, agtype)
+CREATE FUNCTION ag_catalog.agtype_any_ge(bigint, agtype)
RETURNS boolean
LANGUAGE c
STABLE
@@ -623,17 +2223,17 @@ RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-CREATE OPERATOR <> (
- FUNCTION = ag_catalog.agtype_ne,
- LEFTARG = agtype,
+CREATE OPERATOR >= (
+ FUNCTION = ag_catalog.agtype_any_ge,
+ LEFTARG = bigint,
RIGHTARG = agtype,
- COMMUTATOR = <>,
- NEGATOR = =,
- RESTRICT = neqsel,
- JOIN = neqjoinsel
+ COMMUTATOR = <=,
+ NEGATOR = <,
+ RESTRICT = scalargesel,
+ JOIN = scalargejoinsel
);
-CREATE FUNCTION ag_catalog.agtype_lt(agtype, agtype)
+CREATE FUNCTION ag_catalog.agtype_any_ge(agtype, real)
RETURNS boolean
LANGUAGE c
STABLE
@@ -641,17 +2241,17 @@ RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-CREATE OPERATOR < (
- FUNCTION = ag_catalog.agtype_lt,
+CREATE OPERATOR >= (
+ FUNCTION = ag_catalog.agtype_any_ge,
LEFTARG = agtype,
- RIGHTARG = agtype,
- COMMUTATOR = >,
- NEGATOR = >=,
- RESTRICT = scalarltsel,
- JOIN = scalarltjoinsel
+ RIGHTARG = real,
+ COMMUTATOR = <=,
+ NEGATOR = <,
+ RESTRICT = scalargesel,
+ JOIN = scalargejoinsel
);
-CREATE FUNCTION ag_catalog.agtype_gt(agtype, agtype)
+CREATE FUNCTION ag_catalog.agtype_any_ge(real, agtype)
RETURNS boolean
LANGUAGE c
STABLE
@@ -659,17 +2259,17 @@ RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-CREATE OPERATOR > (
- FUNCTION = ag_catalog.agtype_gt,
- LEFTARG = agtype,
+CREATE OPERATOR >= (
+ FUNCTION = ag_catalog.agtype_any_ge,
+ LEFTARG = real,
RIGHTARG = agtype,
- COMMUTATOR = <,
- NEGATOR = <=,
- RESTRICT = scalargtsel,
- JOIN = scalargtjoinsel
+ COMMUTATOR = <=,
+ NEGATOR = <,
+ RESTRICT = scalargesel,
+ JOIN = scalargejoinsel
);
-CREATE FUNCTION ag_catalog.agtype_le(agtype, agtype)
+CREATE FUNCTION ag_catalog.agtype_any_ge(agtype, double precision)
RETURNS boolean
LANGUAGE c
STABLE
@@ -677,17 +2277,17 @@ RETURNS NULL ON NULL INPUT
PARALLEL SAFE
AS 'MODULE_PATHNAME';
-CREATE OPERATOR <= (
- FUNCTION = ag_catalog.agtype_le,
+CREATE OPERATOR >= (
+ FUNCTION = ag_catalog.agtype_any_ge,
LEFTARG = agtype,
- RIGHTARG = agtype,
- COMMUTATOR = >=,
- NEGATOR = >,
- RESTRICT = scalarlesel,
- JOIN = scalarlejoinsel
+ RIGHTARG = double precision,
+ COMMUTATOR = <=,
+ NEGATOR = <,
+ RESTRICT = scalargesel,
+ JOIN = scalargejoinsel
);
-CREATE FUNCTION ag_catalog.agtype_ge(agtype, agtype)
+CREATE FUNCTION ag_catalog.agtype_any_ge(double precision, agtype)
RETURNS boolean
LANGUAGE c
STABLE
@@ -696,8 +2296,8 @@ PARALLEL SAFE
AS 'MODULE_PATHNAME';
CREATE OPERATOR >= (
- FUNCTION = ag_catalog.agtype_ge,
- LEFTARG = agtype,
+ FUNCTION = ag_catalog.agtype_any_ge,
+ LEFTARG = double precision,
RIGHTARG = agtype,
COMMUTATOR = <=,
NEGATOR = <,
@@ -921,8 +2521,7 @@ PARALLEL SAFE
AS 'MODULE_PATHNAME';
CREATE CAST (agtype AS float8)
-WITH FUNCTION ag_catalog.agtype_to_float8(agtype)
-AS IMPLICIT;
+WITH FUNCTION ag_catalog.agtype_to_float8(agtype);
-- int8 -> agtype (explicit)
CREATE FUNCTION ag_catalog.int8_to_agtype(int8)
diff --git a/regress/expected/agtype.out b/regress/expected/agtype.out
index b3b113d..4701d64 100644
--- a/regress/expected/agtype.out
+++ b/regress/expected/agtype.out
@@ -394,101 +394,101 @@ SELECT agtype_pow('2.0::numeric', '-1.0::numeric');
(1 row)
--
--- Test overloaded agtype bigint mathematical operator functions
+-- Test overloaded agtype any mathematical operator functions
-- +, -, *, /, and %
--
-SELECT agtype_bigint_add('1', -1);
- agtype_bigint_add
--------------------
+SELECT agtype_any_add('1', -1);
+ agtype_any_add
+----------------
0
(1 row)
-SELECT agtype_bigint_add('1.0', -1);
- agtype_bigint_add
--------------------
+SELECT agtype_any_add('1.0', -1);
+ agtype_any_add
+----------------
0.0
(1 row)
-SELECT agtype_bigint_add('1::numeric', 1);
- agtype_bigint_add
--------------------
+SELECT agtype_any_add('1::numeric', 1);
+ agtype_any_add
+----------------
2::numeric
(1 row)
-SELECT agtype_bigint_add('1.0::numeric', 1);
- agtype_bigint_add
--------------------
+SELECT agtype_any_add('1.0::numeric', 1);
+ agtype_any_add
+----------------
2.0::numeric
(1 row)
-SELECT agtype_bigint_sub('1', -1);
- agtype_bigint_sub
--------------------
+SELECT agtype_any_sub('1', -1);
+ agtype_any_sub
+----------------
2
(1 row)
-SELECT agtype_bigint_sub('1.0', -1);
- agtype_bigint_sub
--------------------
+SELECT agtype_any_sub('1.0', -1);
+ agtype_any_sub
+----------------
2.0
(1 row)
-SELECT agtype_bigint_sub('1::numeric', 1);
- agtype_bigint_sub
--------------------
+SELECT agtype_any_sub('1::numeric', 1);
+ agtype_any_sub
+----------------
0::numeric
(1 row)
-SELECT agtype_bigint_sub('1.0::numeric', 1);
- agtype_bigint_sub
--------------------
+SELECT agtype_any_sub('1.0::numeric', 1);
+ agtype_any_sub
+----------------
0.0::numeric
(1 row)
-SELECT agtype_bigint_mul('-2', 3);
- agtype_bigint_mul
--------------------
+SELECT agtype_any_mul('-2', 3);
+ agtype_any_mul
+----------------
-6
(1 row)
-SELECT agtype_bigint_mul('2.0', -3);
- agtype_bigint_mul
--------------------
+SELECT agtype_any_mul('2.0', -3);
+ agtype_any_mul
+----------------
-6.0
(1 row)
-SELECT agtype_bigint_mul('-2::numeric', 3);
- agtype_bigint_mul
--------------------
+SELECT agtype_any_mul('-2::numeric', 3);
+ agtype_any_mul
+----------------
-6::numeric
(1 row)
-SELECT agtype_bigint_mul('-2.0::numeric', 3);
- agtype_bigint_mul
--------------------
+SELECT agtype_any_mul('-2.0::numeric', 3);
+ agtype_any_mul
+----------------
-6.0::numeric
(1 row)
-SELECT agtype_bigint_div('-4', 3);
- agtype_bigint_div
--------------------
+SELECT agtype_any_div('-4', 3);
+ agtype_any_div
+----------------
-1
(1 row)
-SELECT agtype_bigint_div('4.0', -3);
- agtype_bigint_div
+SELECT agtype_any_div('4.0', -3);
+ agtype_any_div
-------------------
-1.33333333333333
(1 row)
-SELECT agtype_bigint_div('-4::numeric', 3);
- agtype_bigint_div
+SELECT agtype_any_div('-4::numeric', 3);
+ agtype_any_div
------------------------------
-1.3333333333333333::numeric
(1 row)
-SELECT agtype_bigint_div('-4.0::numeric', 3);
- agtype_bigint_div
+SELECT agtype_any_div('-4.0::numeric', 3);
+ agtype_any_div
------------------------------
-1.3333333333333333::numeric
(1 row)
@@ -514,13 +514,13 @@ SELECT agtype_div('1::numeric', '0.0');
ERROR: division by zero
SELECT agtype_div('1::numeric', '0::numeric');
ERROR: division by zero
-SELECT agtype_bigint_div('1', 0);
+SELECT agtype_any_div('1', 0);
ERROR: division by zero
-SELECT agtype_bigint_div('1.0', 0);
+SELECT agtype_any_div('1.0', 0);
ERROR: division by zero
-SELECT agtype_bigint_div('-1::numeric', 0);
+SELECT agtype_any_div('-1::numeric', 0);
ERROR: division by zero
-SELECT agtype_bigint_div('-1.0::numeric', 0);
+SELECT agtype_any_div('-1.0::numeric', 0);
ERROR: division by zero
--
-- Should get Infinity
@@ -626,7 +626,7 @@ SELECT '3.14::numeric'::agtype + '3.14::numeric'::agtype;
(1 row)
--
--- Test overloaded bigint operators +, -, *, /, %
+-- Test overloaded agytype any operators +, -, *, /, %
--
SELECT '3'::agtype + 3;
?column?
@@ -1269,6 +1269,466 @@ SELECT agtype_in('true') < agtype_in('1::numeric');
(1 row)
--
+-- Test overloaded agytype any comparison operators =, <>, <, >, <=, >=,
+--
+-- Integer
+SELECT agtype_in('1') = 1;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') <> 2;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') <> -2;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') < 2;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') > -2;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') <= 2;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') >= -2;
+ ?column?
+----------
+ t
+(1 row)
+
+-- Float
+SELECT agtype_in('1.01') = 1.01;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1.01') <> 1.001;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1.01') <> 1.011;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1.01') < 1.011;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1.01') > 1.001;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1.01') <= 1.011;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1.01') >= 1.001;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1.01') < 'Infinity';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1.01') > '-Infinity';
+ ?column?
+----------
+ t
+(1 row)
+
+-- NaN, under ordering, is considered to be the biggest numeric value
+-- greater than positive infinity. So, greater than any other number.
+SELECT agtype_in('1.01') < 'NaN';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('NaN') > 'Infinity';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('NaN') > '-Infinity';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('NaN') = 'NaN';
+ ?column?
+----------
+ t
+(1 row)
+
+-- Mixed Integer and Float
+SELECT agtype_in('1') = 1.0;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') <> 1.001;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') <> 0.999999;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') < 1.001;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') > 0.999999;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') <= 1.001;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') >= 0.999999;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') < 'Infinity';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') > '-Infinity';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') < 'NaN';
+ ?column?
+----------
+ t
+(1 row)
+
+-- Mixed Float and Integer
+SELECT agtype_in('1.0') = 1;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1.001') <> 1;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('0.999999') <> 1;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1.001') > 1;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('0.999999') < 1;
+ ?column?
+----------
+ t
+(1 row)
+
+-- Mixed Integer and Numeric
+SELECT agtype_in('1') = 1::numeric;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') <> 2::numeric;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') <> -2::numeric;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') < 2::numeric;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') > -2::numeric;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') <= 2::numeric;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1') >= -2::numeric;
+ ?column?
+----------
+ t
+(1 row)
+
+-- Mixed Float and Numeric
+SELECT agtype_in('1.01') = 1.01::numeric;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1.01') <> 1.001::numeric;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1.01') <> 1.011::numeric;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1.01') < 1.011::numeric;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1.01') > 1.001::numeric;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1.01') <= 1.011::numeric;
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1.01') >= 1.001::numeric;
+ ?column?
+----------
+ t
+(1 row)
+
+-- Strings
+SELECT agtype_in('"a"') = '"a"';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('"a"') <> '"b"';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('"a"') < '"aa"';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('"b"') > '"aa"';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('"a"') <= '"aa"';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('"b"') >= '"aa"';
+ ?column?
+----------
+ t
+(1 row)
+
+-- Lists
+SELECT agtype_in('[0, 1, null, 2]') = '[0, 1, null, 2]';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('[0, 1, null, 2]') <> '[2, null, 1, 0]';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('[0, 1, null]') < '[0, 1, null, 2]';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('[1, 1, null, 2]') > '[0, 1, null, 2]';
+ ?column?
+----------
+ t
+(1 row)
+
+-- Objects (Maps)
+SELECT agtype_in('{"bool":true, "null": null}') = '{"null":null, "bool":true}';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('{"bool":true}') < '{"bool":true, "null": null}';
+ ?column?
+----------
+ t
+(1 row)
+
+-- Comparisons between types
+-- Object < List < String < Boolean < Integer = Float = Numeric < Null
+SELECT agtype_in('1') < 'null';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('NaN') < 'null';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('Infinity') < 'null';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('true') < '1';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('true') < 'NaN';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('true') < 'Infinity';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('"string"') < 'true';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('[1,3,5,7,9,11]') < '"string"';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('{"bool":true, "integer":1}') < '[1,3,5,7,9,11]';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('[1, "string"]') < '[1, 1]';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('{"bool":true, "integer":1}') < '{"bool":true,
"integer":null}';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('1::numeric') < 'null';
+ ?column?
+----------
+ t
+(1 row)
+
+SELECT agtype_in('true') < '1::numeric';
+ ?column?
+----------
+ t
+(1 row)
+
+--
-- Test agtype to boolean cast
--
SELECT agtype_to_bool(agtype_in('true'));
diff --git a/regress/sql/agtype.sql b/regress/sql/agtype.sql
index be1edd3..fd9c194 100644
--- a/regress/sql/agtype.sql
+++ b/regress/sql/agtype.sql
@@ -145,29 +145,29 @@ SELECT agtype_pow('2.0', '-1.0::numeric');
SELECT agtype_pow('2.0::numeric', '-1.0::numeric');
--
--- Test overloaded agtype bigint mathematical operator functions
+-- Test overloaded agtype any mathematical operator functions
-- +, -, *, /, and %
--
-SELECT agtype_bigint_add('1', -1);
-SELECT agtype_bigint_add('1.0', -1);
-SELECT agtype_bigint_add('1::numeric', 1);
-SELECT agtype_bigint_add('1.0::numeric', 1);
+SELECT agtype_any_add('1', -1);
+SELECT agtype_any_add('1.0', -1);
+SELECT agtype_any_add('1::numeric', 1);
+SELECT agtype_any_add('1.0::numeric', 1);
-SELECT agtype_bigint_sub('1', -1);
-SELECT agtype_bigint_sub('1.0', -1);
-SELECT agtype_bigint_sub('1::numeric', 1);
-SELECT agtype_bigint_sub('1.0::numeric', 1);
+SELECT agtype_any_sub('1', -1);
+SELECT agtype_any_sub('1.0', -1);
+SELECT agtype_any_sub('1::numeric', 1);
+SELECT agtype_any_sub('1.0::numeric', 1);
-SELECT agtype_bigint_mul('-2', 3);
-SELECT agtype_bigint_mul('2.0', -3);
-SELECT agtype_bigint_mul('-2::numeric', 3);
-SELECT agtype_bigint_mul('-2.0::numeric', 3);
+SELECT agtype_any_mul('-2', 3);
+SELECT agtype_any_mul('2.0', -3);
+SELECT agtype_any_mul('-2::numeric', 3);
+SELECT agtype_any_mul('-2.0::numeric', 3);
-SELECT agtype_bigint_div('-4', 3);
-SELECT agtype_bigint_div('4.0', -3);
-SELECT agtype_bigint_div('-4::numeric', 3);
-SELECT agtype_bigint_div('-4.0::numeric', 3);
+SELECT agtype_any_div('-4', 3);
+SELECT agtype_any_div('4.0', -3);
+SELECT agtype_any_div('-4::numeric', 3);
+SELECT agtype_any_div('-4.0::numeric', 3);
--
-- Should fail with divide by zero
--
@@ -181,10 +181,10 @@ SELECT agtype_div('1::numeric', '0');
SELECT agtype_div('1::numeric', '0.0');
SELECT agtype_div('1::numeric', '0::numeric');
-SELECT agtype_bigint_div('1', 0);
-SELECT agtype_bigint_div('1.0', 0);
-SELECT agtype_bigint_div('-1::numeric', 0);
-SELECT agtype_bigint_div('-1.0::numeric', 0);
+SELECT agtype_any_div('1', 0);
+SELECT agtype_any_div('1.0', 0);
+SELECT agtype_any_div('-1::numeric', 0);
+SELECT agtype_any_div('-1.0::numeric', 0);
--
-- Should get Infinity
@@ -218,7 +218,7 @@ SELECT '3.14'::agtype + '3.14::numeric'::agtype;
SELECT '3.14::numeric'::agtype + '3.14::numeric'::agtype;
--
--- Test overloaded bigint operators +, -, *, /, %
+-- Test overloaded agytype any operators +, -, *, /, %
--
SELECT '3'::agtype + 3;
@@ -357,6 +357,106 @@ SELECT agtype_in('1::numeric') < agtype_in('null');
SELECT agtype_in('true') < agtype_in('1::numeric');
--
+-- Test overloaded agytype any comparison operators =, <>, <, >, <=, >=,
+--
+-- Integer
+SELECT agtype_in('1') = 1;
+SELECT agtype_in('1') <> 2;
+SELECT agtype_in('1') <> -2;
+SELECT agtype_in('1') < 2;
+SELECT agtype_in('1') > -2;
+SELECT agtype_in('1') <= 2;
+SELECT agtype_in('1') >= -2;
+
+-- Float
+SELECT agtype_in('1.01') = 1.01;
+SELECT agtype_in('1.01') <> 1.001;
+SELECT agtype_in('1.01') <> 1.011;
+SELECT agtype_in('1.01') < 1.011;
+SELECT agtype_in('1.01') > 1.001;
+SELECT agtype_in('1.01') <= 1.011;
+SELECT agtype_in('1.01') >= 1.001;
+SELECT agtype_in('1.01') < 'Infinity';
+SELECT agtype_in('1.01') > '-Infinity';
+-- NaN, under ordering, is considered to be the biggest numeric value
+-- greater than positive infinity. So, greater than any other number.
+SELECT agtype_in('1.01') < 'NaN';
+SELECT agtype_in('NaN') > 'Infinity';
+SELECT agtype_in('NaN') > '-Infinity';
+SELECT agtype_in('NaN') = 'NaN';
+
+-- Mixed Integer and Float
+SELECT agtype_in('1') = 1.0;
+SELECT agtype_in('1') <> 1.001;
+SELECT agtype_in('1') <> 0.999999;
+SELECT agtype_in('1') < 1.001;
+SELECT agtype_in('1') > 0.999999;
+SELECT agtype_in('1') <= 1.001;
+SELECT agtype_in('1') >= 0.999999;
+SELECT agtype_in('1') < 'Infinity';
+SELECT agtype_in('1') > '-Infinity';
+SELECT agtype_in('1') < 'NaN';
+
+-- Mixed Float and Integer
+SELECT agtype_in('1.0') = 1;
+SELECT agtype_in('1.001') <> 1;
+SELECT agtype_in('0.999999') <> 1;
+SELECT agtype_in('1.001') > 1;
+SELECT agtype_in('0.999999') < 1;
+
+-- Mixed Integer and Numeric
+SELECT agtype_in('1') = 1::numeric;
+SELECT agtype_in('1') <> 2::numeric;
+SELECT agtype_in('1') <> -2::numeric;
+SELECT agtype_in('1') < 2::numeric;
+SELECT agtype_in('1') > -2::numeric;
+SELECT agtype_in('1') <= 2::numeric;
+SELECT agtype_in('1') >= -2::numeric;
+
+-- Mixed Float and Numeric
+SELECT agtype_in('1.01') = 1.01::numeric;
+SELECT agtype_in('1.01') <> 1.001::numeric;
+SELECT agtype_in('1.01') <> 1.011::numeric;
+SELECT agtype_in('1.01') < 1.011::numeric;
+SELECT agtype_in('1.01') > 1.001::numeric;
+SELECT agtype_in('1.01') <= 1.011::numeric;
+SELECT agtype_in('1.01') >= 1.001::numeric;
+
+-- Strings
+SELECT agtype_in('"a"') = '"a"';
+SELECT agtype_in('"a"') <> '"b"';
+SELECT agtype_in('"a"') < '"aa"';
+SELECT agtype_in('"b"') > '"aa"';
+SELECT agtype_in('"a"') <= '"aa"';
+SELECT agtype_in('"b"') >= '"aa"';
+
+-- Lists
+SELECT agtype_in('[0, 1, null, 2]') = '[0, 1, null, 2]';
+SELECT agtype_in('[0, 1, null, 2]') <> '[2, null, 1, 0]';
+SELECT agtype_in('[0, 1, null]') < '[0, 1, null, 2]';
+SELECT agtype_in('[1, 1, null, 2]') > '[0, 1, null, 2]';
+
+-- Objects (Maps)
+SELECT agtype_in('{"bool":true, "null": null}') = '{"null":null, "bool":true}';
+SELECT agtype_in('{"bool":true}') < '{"bool":true, "null": null}';
+
+-- Comparisons between types
+-- Object < List < String < Boolean < Integer = Float = Numeric < Null
+SELECT agtype_in('1') < 'null';
+SELECT agtype_in('NaN') < 'null';
+SELECT agtype_in('Infinity') < 'null';
+SELECT agtype_in('true') < '1';
+SELECT agtype_in('true') < 'NaN';
+SELECT agtype_in('true') < 'Infinity';
+SELECT agtype_in('"string"') < 'true';
+SELECT agtype_in('[1,3,5,7,9,11]') < '"string"';
+SELECT agtype_in('{"bool":true, "integer":1}') < '[1,3,5,7,9,11]';
+SELECT agtype_in('[1, "string"]') < '[1, 1]';
+SELECT agtype_in('{"bool":true, "integer":1}') < '{"bool":true,
"integer":null}';
+SELECT agtype_in('1::numeric') < 'null';
+SELECT agtype_in('true') < '1::numeric';
+
+--
-- Test agtype to boolean cast
--
SELECT agtype_to_bool(agtype_in('true'));
diff --git a/src/backend/utils/adt/agtype_ops.c
b/src/backend/utils/adt/agtype_ops.c
index 8d3448f..21e8e3b 100644
--- a/src/backend/utils/adt/agtype_ops.c
+++ b/src/backend/utils/adt/agtype_ops.c
@@ -235,10 +235,10 @@ Datum agtype_add(PG_FUNCTION_ARGS)
AG_RETURN_AGTYPE_P(agtype_value_to_agtype(&agtv_result));
}
-PG_FUNCTION_INFO_V1(agtype_bigint_add);
+PG_FUNCTION_INFO_V1(agtype_any_add);
/* agtype addition between bigint and agtype */
-Datum agtype_bigint_add(PG_FUNCTION_ARGS)
+Datum agtype_any_add(PG_FUNCTION_ARGS)
{
agtype *lhs;
agtype *rhs;
@@ -320,10 +320,10 @@ Datum agtype_sub(PG_FUNCTION_ARGS)
AG_RETURN_AGTYPE_P(agtype_value_to_agtype(&agtv_result));
}
-PG_FUNCTION_INFO_V1(agtype_bigint_sub);
+PG_FUNCTION_INFO_V1(agtype_any_sub);
/* agtype subtraction between bigint and agtype */
-Datum agtype_bigint_sub(PG_FUNCTION_ARGS)
+Datum agtype_any_sub(PG_FUNCTION_ARGS)
{
agtype *lhs;
agtype *rhs;
@@ -453,10 +453,10 @@ Datum agtype_mul(PG_FUNCTION_ARGS)
AG_RETURN_AGTYPE_P(agtype_value_to_agtype(&agtv_result));
}
-PG_FUNCTION_INFO_V1(agtype_bigint_mul);
+PG_FUNCTION_INFO_V1(agtype_any_mul);
/* agtype multiplication between bigint and agtype */
-Datum agtype_bigint_mul(PG_FUNCTION_ARGS)
+Datum agtype_any_mul(PG_FUNCTION_ARGS)
{
agtype *lhs;
agtype *rhs;
@@ -566,10 +566,10 @@ Datum agtype_div(PG_FUNCTION_ARGS)
AG_RETURN_AGTYPE_P(agtype_value_to_agtype(&agtv_result));
}
-PG_FUNCTION_INFO_V1(agtype_bigint_div);
+PG_FUNCTION_INFO_V1(agtype_any_div);
/* agtype division between bigint and agtype */
-Datum agtype_bigint_div(PG_FUNCTION_ARGS)
+Datum agtype_any_div(PG_FUNCTION_ARGS)
{
agtype *lhs;
agtype *rhs;
@@ -651,10 +651,10 @@ Datum agtype_mod(PG_FUNCTION_ARGS)
AG_RETURN_AGTYPE_P(agtype_value_to_agtype(&agtv_result));
}
-PG_FUNCTION_INFO_V1(agtype_bigint_mod);
+PG_FUNCTION_INFO_V1(agtype_any_mod);
/* agtype modulo between bigint and agtype */
-Datum agtype_bigint_mod(PG_FUNCTION_ARGS)
+Datum agtype_any_mod(PG_FUNCTION_ARGS)
{
agtype *lhs;
agtype *rhs;
@@ -753,6 +753,23 @@ Datum agtype_eq(PG_FUNCTION_ARGS)
PG_RETURN_BOOL(result);
}
+PG_FUNCTION_INFO_V1(agtype_any_eq);
+
+Datum agtype_any_eq(PG_FUNCTION_ARGS)
+{
+ agtype *lhs;
+ agtype *rhs;
+ Datum result;
+
+ lhs = get_one_agtype_from_variadic_args(fcinfo, 0, 2);
+ rhs = get_one_agtype_from_variadic_args(fcinfo, 1, 1);
+
+ result = DirectFunctionCall2(agtype_eq, AGTYPE_P_GET_DATUM(lhs),
+ AGTYPE_P_GET_DATUM(rhs));
+
+ PG_RETURN_BOOL(result);
+}
+
PG_FUNCTION_INFO_V1(agtype_ne);
Datum agtype_ne(PG_FUNCTION_ARGS)
@@ -770,6 +787,23 @@ Datum agtype_ne(PG_FUNCTION_ARGS)
PG_RETURN_BOOL(result);
}
+PG_FUNCTION_INFO_V1(agtype_any_ne);
+
+Datum agtype_any_ne(PG_FUNCTION_ARGS)
+{
+ agtype *lhs;
+ agtype *rhs;
+ Datum result;
+
+ lhs = get_one_agtype_from_variadic_args(fcinfo, 0, 2);
+ rhs = get_one_agtype_from_variadic_args(fcinfo, 1, 1);
+
+ result = DirectFunctionCall2(agtype_ne, AGTYPE_P_GET_DATUM(lhs),
+ AGTYPE_P_GET_DATUM(rhs));
+
+ PG_RETURN_BOOL(result);
+}
+
PG_FUNCTION_INFO_V1(agtype_lt);
Datum agtype_lt(PG_FUNCTION_ARGS)
@@ -787,6 +821,23 @@ Datum agtype_lt(PG_FUNCTION_ARGS)
PG_RETURN_BOOL(result);
}
+PG_FUNCTION_INFO_V1(agtype_any_lt);
+
+Datum agtype_any_lt(PG_FUNCTION_ARGS)
+{
+ agtype *lhs;
+ agtype *rhs;
+ Datum result;
+
+ lhs = get_one_agtype_from_variadic_args(fcinfo, 0, 2);
+ rhs = get_one_agtype_from_variadic_args(fcinfo, 1, 1);
+
+ result = DirectFunctionCall2(agtype_lt, AGTYPE_P_GET_DATUM(lhs),
+ AGTYPE_P_GET_DATUM(rhs));
+
+ PG_RETURN_BOOL(result);
+}
+
PG_FUNCTION_INFO_V1(agtype_gt);
Datum agtype_gt(PG_FUNCTION_ARGS)
@@ -804,6 +855,23 @@ Datum agtype_gt(PG_FUNCTION_ARGS)
PG_RETURN_BOOL(result);
}
+PG_FUNCTION_INFO_V1(agtype_any_gt);
+
+Datum agtype_any_gt(PG_FUNCTION_ARGS)
+{
+ agtype *lhs;
+ agtype *rhs;
+ Datum result;
+
+ lhs = get_one_agtype_from_variadic_args(fcinfo, 0, 2);
+ rhs = get_one_agtype_from_variadic_args(fcinfo, 1, 1);
+
+ result = DirectFunctionCall2(agtype_gt, AGTYPE_P_GET_DATUM(lhs),
+ AGTYPE_P_GET_DATUM(rhs));
+
+ PG_RETURN_BOOL(result);
+}
+
PG_FUNCTION_INFO_V1(agtype_le);
Datum agtype_le(PG_FUNCTION_ARGS)
@@ -821,6 +889,23 @@ Datum agtype_le(PG_FUNCTION_ARGS)
PG_RETURN_BOOL(result);
}
+PG_FUNCTION_INFO_V1(agtype_any_le);
+
+Datum agtype_any_le(PG_FUNCTION_ARGS)
+{
+ agtype *lhs;
+ agtype *rhs;
+ Datum result;
+
+ lhs = get_one_agtype_from_variadic_args(fcinfo, 0, 2);
+ rhs = get_one_agtype_from_variadic_args(fcinfo, 1, 1);
+
+ result = DirectFunctionCall2(agtype_le, AGTYPE_P_GET_DATUM(lhs),
+ AGTYPE_P_GET_DATUM(rhs));
+
+ PG_RETURN_BOOL(result);
+}
+
PG_FUNCTION_INFO_V1(agtype_ge);
Datum agtype_ge(PG_FUNCTION_ARGS)
@@ -838,6 +923,24 @@ Datum agtype_ge(PG_FUNCTION_ARGS)
PG_RETURN_BOOL(result);
}
+PG_FUNCTION_INFO_V1(agtype_any_ge);
+
+Datum agtype_any_ge(PG_FUNCTION_ARGS)
+{
+ agtype *lhs;
+ agtype *rhs;
+ Datum result;
+
+ lhs = get_one_agtype_from_variadic_args(fcinfo, 0, 2);
+ rhs = get_one_agtype_from_variadic_args(fcinfo, 1, 1);
+
+ result = DirectFunctionCall2(agtype_ge, AGTYPE_P_GET_DATUM(lhs),
+ AGTYPE_P_GET_DATUM(rhs));
+
+ PG_RETURN_BOOL(result);
+}
+
+
static agtype *agtype_concat(agtype *agt1, agtype *agt2)
{
agtype_parse_state *state = NULL;