Trying to solve this problem by using a process of elimination. All works fine until the comment below is removed.
ALTER OPERATOR FAMILY box_ops USING GiST ADD OPERATOR 1 << (box,point), OPERATOR 2 &< (box,point), OPERATOR 3 && (box,point), OPERATOR 4 &> (box,point), OPERATOR 5 >> (box,point), -- OPERATOR 7 @> (box,point), OPERATOR 9 &<| (box,point), OPERATOR 10 <<| (box,point), OPERATOR 11 |>> (box,point); Ah! So operator @> is wrong. DROP OPERATOR IF EXISTS @>(box,point); CREATE OPERATOR @> ( LEFTARG = box, RIGHTARG = point, PROCEDURE = contains, COMMUTATOR = <@, RESTRICT = contsel, JOIN = contjoinsel ); No, all seems fine here. Maybe the definition of the function is incorrect CREATE OR REPLACE FUNCTION contains(box,point) RETURNS boolean LANGUAGE C IMMUTABLE STRICT AS 'contains.so', 'box_point_contains'; The C function? No it seems OK as well. What am I missing? It must be completely obvious. Someone is laughing out there. Put me out of my misery please! /* * Box contains point. box @> point. */ Datum box_point_contains(PG_FUNCTION_ARGS) { BOX *box = PG_GETARG_BOX_P(0); Point *point = PG_GETARG_POINT_P(1); int isin = point->x >= box->low.x && point->x <= box->high.x && point->y >= box->low.y && point->y <= box->high.y; PG_RETURN_BOOL(isin); } -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers