@@ -516,6 +516,66 @@ CREATE OPERATOR CLASS unit_ops
516516 OPERATOR 5 > ,
517517 FUNCTION 1 unit_cmp(unit, unit);
518518
519+ -- strict comparisons
520+
521+ CREATE FUNCTION unit_strict_lt(unit, unit) RETURNS bool
522+ AS '$libdir/unit' LANGUAGE C IMMUTABLE STRICT;
523+ CREATE FUNCTION unit_strict_le(unit, unit) RETURNS bool
524+ AS '$libdir/unit' LANGUAGE C IMMUTABLE STRICT;
525+ CREATE FUNCTION unit_strict_eq(unit, unit) RETURNS bool
526+ AS '$libdir/unit' LANGUAGE C IMMUTABLE STRICT;
527+ CREATE FUNCTION unit_strict_ne(unit, unit) RETURNS bool
528+ AS '$libdir/unit' LANGUAGE C IMMUTABLE STRICT;
529+ CREATE FUNCTION unit_strict_ge(unit, unit) RETURNS bool
530+ AS '$libdir/unit' LANGUAGE C IMMUTABLE STRICT;
531+ CREATE FUNCTION unit_strict_gt(unit, unit) RETURNS bool
532+ AS '$libdir/unit' LANGUAGE C IMMUTABLE STRICT;
533+
534+ CREATE OPERATOR << (
535+ leftarg = unit, rightarg = unit, procedure = unit_strict_lt,
536+ commutator = >> , negator = >>= ,
537+ restrict = scalarltsel, join = scalarltjoinsel
538+ );
539+ CREATE OPERATOR <<= (
540+ leftarg = unit, rightarg = unit, procedure = unit_strict_le,
541+ commutator = >>= , negator = >> ,
542+ restrict = scalarltsel, join = scalarltjoinsel
543+ );
544+ CREATE OPERATOR == (
545+ leftarg = unit, rightarg = unit, procedure = unit_strict_eq,
546+ commutator = == , negator = <<>> ,
547+ restrict = eqsel, join = eqjoinsel
548+ );
549+ CREATE OPERATOR <<>> (
550+ leftarg = unit, rightarg = unit, procedure = unit_strict_ne,
551+ commutator = <<>> , negator = == ,
552+ restrict = neqsel, join = neqjoinsel
553+ );
554+ CREATE OPERATOR >>= (
555+ leftarg = unit, rightarg = unit, procedure = unit_strict_ge,
556+ commutator = <<= , negator = << ,
557+ restrict = scalargtsel, join = scalargtjoinsel
558+ );
559+ CREATE OPERATOR >> (
560+ leftarg = unit, rightarg = unit, procedure = unit_strict_gt,
561+ commutator = << , negator = <<= ,
562+ restrict = scalargtsel, join = scalargtjoinsel
563+ );
564+
565+ CREATE FUNCTION unit_strict_cmp(unit, unit)
566+ RETURNS int4
567+ AS '$libdir/unit'
568+ LANGUAGE C IMMUTABLE STRICT;
569+
570+ CREATE OPERATOR CLASS unit_strict_ops
571+ FOR TYPE unit USING btree AS
572+ OPERATOR 1 << ,
573+ OPERATOR 2 <<= ,
574+ OPERATOR 3 == ,
575+ OPERATOR 4 >>= ,
576+ OPERATOR 5 >> ,
577+ FUNCTION 1 unit_strict_cmp(unit, unit);
578+
519579-- aggregates
520580
521581CREATE AGGREGATE sum(unit)
0 commit comments