mirror of https://github.com/postgres/postgres
here is an updated version of the bit type with a bugfix and all the necessa ry SQL functions defined. This should replace what is currently in contrib. I'd appreciate any comments on what is there. Kind regards, AdriaanREL7_0_PATCHES
parent
5454b37921
commit
51cfdae50f
@ -0,0 +1,29 @@ |
|||||||
|
create table bit_example (a bits, b bits); |
||||||
|
copy bit_example from stdin; |
||||||
|
X0F X10 |
||||||
|
X1F X11 |
||||||
|
X2F X12 |
||||||
|
X3F X13 |
||||||
|
X8F X04 |
||||||
|
X000F X0010 |
||||||
|
X0123 XFFFF |
||||||
|
X2468 X2468 |
||||||
|
XFA50 X05AF |
||||||
|
X12345 XFFF |
||||||
|
\. |
||||||
|
|
||||||
|
select a,b,a||b as "a||b", bitsubstr(a,4,4) as "sub(a,4,4)", |
||||||
|
bitsubstr(b,2,4) as "sub(b,2,4)", |
||||||
|
bitsubstr(b,5,5) as "sub(b,5,5)" |
||||||
|
from bit_example; |
||||||
|
select a,b,~a as "~ a",~b as "~ b",a & b as "a & b", |
||||||
|
a|b as "a | b", a^b as "a ^ b" from bit_example; |
||||||
|
select a,b,a<b as "a<b",a<=b as "a<=b",a=b as "a=b", |
||||||
|
a>=b as "a>=b",a>b as "a>b",a<=>b as "a<=>b" from bit_example; |
||||||
|
select a,a<<4 as "a<<4",b,b>>2 as "b>>2" from bit_example; |
||||||
|
select a,b,a||b as "a||b", bitsubstr(a,4,4) as "sub(a,4,4)", |
||||||
|
bitsubstr(b,2,4) as "sub(b,2,4)", |
||||||
|
bitsubstr(b,5,5) as "sub(b,5,5)" |
||||||
|
from bit_example; |
||||||
|
|
||||||
|
drop table bit_example; |
@ -0,0 +1,36 @@ |
|||||||
|
DROP FUNCTION biteq(bits,bits); |
||||||
|
DROP OPERATOR = (bits,bits); |
||||||
|
DROP FUNCTION bitne(bits,bits); |
||||||
|
DROP OPERATOR <> (bits,bits); |
||||||
|
DROP FUNCTION bitlt(bits,bits); |
||||||
|
DROP OPERATOR < (bits,bits); |
||||||
|
DROP FUNCTION bitle(bits,bits); |
||||||
|
DROP OPERATOR <= (bits,bits); |
||||||
|
DROP FUNCTION bitgt(bits,bits); |
||||||
|
DROP OPERATOR > (bits,bits); |
||||||
|
DROP FUNCTION bitge(bits,bits); |
||||||
|
DROP OPERATOR >= (bits,bits); |
||||||
|
DROP FUNCTION bitcmp(bits,bits); |
||||||
|
DROP OPERATOR <=> (bits,bits); |
||||||
|
|
||||||
|
DROP FUNCTION bitor(bits,bits); |
||||||
|
DROP OPERATOR | (bits,bits); |
||||||
|
DROP FUNCTION bitand(bits,bits); |
||||||
|
DROP OPERATOR & (bits,bits); |
||||||
|
DROP FUNCTION bitxor(bits,bits); |
||||||
|
DROP OPERATOR ^ (bits,bits); |
||||||
|
DROP FUNCTION bitnot(bits); |
||||||
|
DROP OPERATOR ~ (none,bits); |
||||||
|
|
||||||
|
DROP FUNCTION bitshiftleft(bits,int4); |
||||||
|
DROP OPERATOR << (bits,int4); |
||||||
|
DROP FUNCTION bitshiftright(bits,int4); |
||||||
|
DROP OPERATOR >> (bits,int4); |
||||||
|
|
||||||
|
DROP FUNCTION bitsubstr(bits,integer,integer); |
||||||
|
DROP OPERATOR || (bits,bits); |
||||||
|
DROP FUNCTION bitcat(bits,bits); |
||||||
|
|
||||||
|
DROP FUNCTION varbit_in(opaque); |
||||||
|
DROP FUNCTION varbit_out(opaque); |
||||||
|
DROP TYPE bits; |
@ -0,0 +1,171 @@ |
|||||||
|
LOAD '_OBJWD_/varbit.so'; |
||||||
|
|
||||||
|
CREATE FUNCTION varbit_in(opaque) |
||||||
|
RETURNS bit |
||||||
|
AS '_OBJWD_/varbit.so' |
||||||
|
LANGUAGE 'c'; |
||||||
|
|
||||||
|
CREATE FUNCTION varbit_out(opaque) |
||||||
|
RETURNS opaque |
||||||
|
AS '_OBJWD_/varbit.so' |
||||||
|
LANGUAGE 'c'; |
||||||
|
|
||||||
|
CREATE TYPE bits ( |
||||||
|
internallength = -1, |
||||||
|
input = varbit_in, |
||||||
|
output = varbit_out |
||||||
|
); |
||||||
|
|
||||||
|
CREATE FUNCTION bitcat(bits,bits) RETURNS bits |
||||||
|
AS '_OBJWD_/varbit.so' |
||||||
|
LANGUAGE 'C'; |
||||||
|
|
||||||
|
CREATE OPERATOR || ( |
||||||
|
leftarg = bits, |
||||||
|
rightarg = bits, |
||||||
|
procedure = bitcat |
||||||
|
); |
||||||
|
|
||||||
|
CREATE FUNCTION bitsubstr(bits,integer,integer) RETURNS bits |
||||||
|
AS '_OBJWD_/varbit.so' |
||||||
|
LANGUAGE 'C'; |
||||||
|
|
||||||
|
CREATE FUNCTION biteq(bits,bits) RETURNS bool |
||||||
|
AS '_OBJWD_/varbit.so' |
||||||
|
LANGUAGE 'C'; |
||||||
|
|
||||||
|
CREATE OPERATOR = ( |
||||||
|
leftarg = bits, |
||||||
|
rightarg = bits, |
||||||
|
procedure = biteq, |
||||||
|
negator = <>, |
||||||
|
commutator = = |
||||||
|
); |
||||||
|
|
||||||
|
CREATE FUNCTION bitne(bits,bits) RETURNS bool |
||||||
|
AS '_OBJWD_/varbit.so' |
||||||
|
LANGUAGE 'C'; |
||||||
|
|
||||||
|
CREATE OPERATOR <> ( |
||||||
|
leftarg = bits, |
||||||
|
rightarg = bits, |
||||||
|
procedure = bitne, |
||||||
|
negator = =, |
||||||
|
commutator = <> |
||||||
|
); |
||||||
|
|
||||||
|
CREATE FUNCTION bitlt(bits,bits) RETURNS bool |
||||||
|
AS '_OBJWD_/varbit.so' |
||||||
|
LANGUAGE 'C'; |
||||||
|
|
||||||
|
CREATE OPERATOR < ( |
||||||
|
leftarg = bits, |
||||||
|
rightarg = bits, |
||||||
|
procedure = bitlt |
||||||
|
); |
||||||
|
|
||||||
|
CREATE FUNCTION bitle(bits,bits) RETURNS bool |
||||||
|
AS '_OBJWD_/varbit.so' |
||||||
|
LANGUAGE 'C'; |
||||||
|
|
||||||
|
CREATE OPERATOR <= ( |
||||||
|
leftarg = bits, |
||||||
|
rightarg = bits, |
||||||
|
procedure = bitle |
||||||
|
); |
||||||
|
|
||||||
|
CREATE FUNCTION bitgt(bits,bits) RETURNS bool |
||||||
|
AS '_OBJWD_/varbit.so' |
||||||
|
LANGUAGE 'C'; |
||||||
|
|
||||||
|
CREATE OPERATOR > ( |
||||||
|
leftarg = bits, |
||||||
|
rightarg = bits, |
||||||
|
procedure = bitgt, |
||||||
|
negator = <=, |
||||||
|
commutator = < |
||||||
|
); |
||||||
|
|
||||||
|
CREATE FUNCTION bitge(bits,bits) RETURNS bool |
||||||
|
as '_OBJWD_/varbit.so' |
||||||
|
language 'C'; |
||||||
|
|
||||||
|
CREATE OPERATOR >= ( |
||||||
|
leftarg = bits, |
||||||
|
rightarg = bits, |
||||||
|
procedure = bitge, |
||||||
|
negator = <, |
||||||
|
commutator = <= |
||||||
|
); |
||||||
|
|
||||||
|
CREATE FUNCTION bitcmp(bits,bits) RETURNS int4 |
||||||
|
AS '_OBJWD_/varbit.so' |
||||||
|
LANGUAGE 'C'; |
||||||
|
|
||||||
|
CREATE OPERATOR <=> ( |
||||||
|
leftarg = bits, |
||||||
|
rightarg = bits, |
||||||
|
procedure = bitcmp |
||||||
|
); |
||||||
|
|
||||||
|
CREATE FUNCTION bitor(bits,bits) RETURNS bits |
||||||
|
AS '_OBJWD_/varbit.so' |
||||||
|
LANGUAGE 'C'; |
||||||
|
|
||||||
|
CREATE OPERATOR | ( |
||||||
|
leftarg = bits, |
||||||
|
rightarg = bits, |
||||||
|
procedure = bitor, |
||||||
|
commutator = | |
||||||
|
); |
||||||
|
|
||||||
|
CREATE FUNCTION bitand(bits,bits) RETURNS bits |
||||||
|
AS '_OBJWD_/varbit.so' |
||||||
|
LANGUAGE 'C'; |
||||||
|
|
||||||
|
CREATE OPERATOR & ( |
||||||
|
leftarg = bits, |
||||||
|
rightarg = bits, |
||||||
|
procedure = bitand, |
||||||
|
commutator = & |
||||||
|
); |
||||||
|
|
||||||
|
|
||||||
|
CREATE FUNCTION bitxor(bits,bits) RETURNS bits |
||||||
|
AS '_OBJWD_/varbit.so' |
||||||
|
LANGUAGE 'C'; |
||||||
|
|
||||||
|
CREATE OPERATOR ^ ( |
||||||
|
leftarg = bits, |
||||||
|
rightarg = bits, |
||||||
|
procedure = bitxor |
||||||
|
); |
||||||
|
|
||||||
|
CREATE FUNCTION bitnot(bits) RETURNS bits |
||||||
|
AS '_OBJWD_/varbit.so' |
||||||
|
LANGUAGE 'C'; |
||||||
|
|
||||||
|
CREATE OPERATOR ~ ( |
||||||
|
rightarg = bits, |
||||||
|
procedure = bitnot |
||||||
|
); |
||||||
|
|
||||||
|
CREATE FUNCTION bitshiftleft(bits,int4) RETURNS bits |
||||||
|
AS '_OBJWD_/varbit.so' |
||||||
|
LANGUAGE 'C'; |
||||||
|
|
||||||
|
CREATE OPERATOR << ( |
||||||
|
leftarg = bits, |
||||||
|
rightarg = int4, |
||||||
|
procedure = bitshiftleft |
||||||
|
); |
||||||
|
|
||||||
|
CREATE FUNCTION bitshiftright(bits,int4) RETURNS bits |
||||||
|
AS '_OBJWD_/varbit.so' |
||||||
|
LANGUAGE 'C'; |
||||||
|
|
||||||
|
CREATE OPERATOR >> ( |
||||||
|
leftarg = bits, |
||||||
|
rightarg = int4, |
||||||
|
procedure = bitshiftright |
||||||
|
); |
@ -0,0 +1,22 @@ |
|||||||
|
/* Glue file to use varbit before it is properly integrated with postgres */ |
||||||
|
|
||||||
|
#include "varbit.h" |
||||||
|
|
||||||
|
bits8 * varbit_in (char * s); |
||||||
|
char * varbit_out (bits8 *s); |
||||||
|
|
||||||
|
bits8 * |
||||||
|
varbit_in (char * s) { |
||||||
|
return varbitin (s, 0, -1); |
||||||
|
} |
||||||
|
|
||||||
|
/*char *
|
||||||
|
varbit_out (bits8 *s) { |
||||||
|
return zpbitout(s); |
||||||
|
} |
||||||
|
*/ |
||||||
|
|
||||||
|
char *
|
||||||
|
varbit_out (bits8 *s) { |
||||||
|
return zpbitsout(s); |
||||||
|
} |
Binary file not shown.
Loading…
Reference in new issue