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