-- $Id$ -- I/O functions. CREATE FUNCTION sig_in(cstring) RETURNS sig AS '/home/zukerman/d/pg/sig/sig', 'pg_sig_in' LANGUAGE 'C'; CREATE FUNCTION sig_in(int4) RETURNS sig AS '/home/zukerman/d/pg/sig/sig', 'pg_sig_in_int4' LANGUAGE 'C'; CREATE FUNCTION sig_in(int4[]) RETURNS sig AS '/home/zukerman/d/pg/sig/sig', 'pg_sig_in_int4arr' LANGUAGE 'C'; CREATE FUNCTION sig_out(sig) RETURNS cstring AS '/home/zukerman/d/pg/sig/sig', 'pg_sig_out' LANGUAGE 'C'; -- INTERNALLENGTH = 64 bits / 8 = 8 bytes. CREATE TYPE sig ( INTERNALLENGTH = 8, INPUT = sig_in, OUTPUT = sig_out ); -- Bit functions. CREATE FUNCTION sig_complement(sig) RETURNS sig AS '/home/zukerman/d/pg/sig/sig', 'pg_sig_complement' LANGUAGE 'C' STRICT; CREATE FUNCTION sig_union(sig, sig) RETURNS sig AS '/home/zukerman/d/pg/sig/sig', 'pg_sig_union' LANGUAGE 'C' STRICT; CREATE OPERATOR ~ ( RIGHTARG = sig, PROCEDURE = sig_complement ); CREATE OPERATOR ^ ( LEFTARG = sig, RIGHTARG = sig, PROCEDURE = sig_union, COMMUTATOR = ^ ); -- Relations. CREATE FUNCTION sig_equals(sig, sig) RETURNS boolean AS '/home/zukerman/d/pg/sig/sig', 'pg_sig_equals' LANGUAGE 'C' STRICT; CREATE FUNCTION sig_subset(sig, sig) RETURNS boolean AS '/home/zukerman/d/pg/sig/sig', 'pg_sig_subset' LANGUAGE 'C' STRICT; CREATE FUNCTION sig_superset(sig, sig) RETURNS boolean AS 'SELECT sig_subset($2,$1);' LANGUAGE 'sql' STRICT; CREATE OPERATOR ~= ( LEFTARG = sig, RIGHTARG = sig, PROCEDURE = sig_equals, COMMUTATOR = ~=, RESTRICT = eqsel, JOIN = eqjoinsel ); CREATE OPERATOR ~<= ( LEFTARG = sig, RIGHTARG = sig, PROCEDURE = sig_subset, COMMUTATOR = ~>=, RESTRICT = contsel, JOIN = contjoinsel ); CREATE OPERATOR ~>= ( LEFTARG = sig, RIGHTARG = sig, PROCEDURE = sig_superset, COMMUTATOR = ~<=, RESTRICT = contsel, JOIN = contjoinsel ); -- GiST definitions. CREATE FUNCTION g_sig_consistent(internal, internal, int2) RETURNS bool AS '/home/zukerman/d/pg/sig/sig' LANGUAGE 'C'; CREATE FUNCTION g_sig_union(bytea, internal) RETURNS internal AS '/home/zukerman/d/pg/sig/sig' LANGUAGE 'C'; CREATE FUNCTION g_sig_compress(internal) RETURNS internal AS '/home/zukerman/d/pg/sig/sig' LANGUAGE 'C'; CREATE FUNCTION g_sig_decompress(internal) RETURNS internal AS '/home/zukerman/d/pg/sig/sig' LANGUAGE 'C'; CREATE FUNCTION g_sig_penalty(internal, internal) RETURNS internal AS '/home/zukerman/d/pg/sig/sig' LANGUAGE 'C'; CREATE FUNCTION g_sig_picksplit(bytea, internal) RETURNS internal AS '/home/zukerman/d/pg/sig/sig' LANGUAGE 'C'; CREATE FUNCTION g_sig_same(internal, internal, internal) RETURNS internal AS '/home/zukerman/d/pg/sig/sig' LANGUAGE 'C'; CREATE OPERATOR CLASS sig_ops FOR TYPE sig USING gist AS OPERATOR 6 ~=, OPERATOR 7 ~>=, FUNCTION 1 g_sig_consistent (internal, internal, int2), FUNCTION 2 g_sig_union (bytea, internal), FUNCTION 3 g_sig_compress (internal), FUNCTION 4 g_sig_decompress (internal), FUNCTION 5 g_sig_penalty (internal, internal), FUNCTION 6 g_sig_picksplit (bytea, internal), FUNCTION 7 g_sig_same (internal, internal, internal); -- CREATE TABLE x (y sig); CREATE INDEX xx ON x USING gist (y sig_ops);