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
@ -1,10 +1,46 @@ |
|||||||
CFLAGS = -g
|
ifndef PGDIR |
||||||
|
PGDIR= ../..
|
||||||
|
PGDIR=/data/build/postgresql-7.0beta3
|
||||||
|
endif |
||||||
|
|
||||||
varbit: vartest.o varbit.o |
SRCDIR= $(PGDIR)/src
|
||||||
$(CC) $(CFLAGS) -o $@ $^
|
|
||||||
|
|
||||||
varbit.o: varbit.c varbit.h |
include $(SRCDIR)/Makefile.global |
||||||
vartest.o: vartest.c varbit.h |
|
||||||
|
TARGETS= varbit.sql varbit$(DLSUFFIX)
|
||||||
|
# vartest
|
||||||
|
SOURCE= varbit.c varbit_glue.c
|
||||||
|
OBJ= $(SOURCE:.c=.o)
|
||||||
|
CFLAGS += -g
|
||||||
|
|
||||||
|
all: $(TARGETS) |
||||||
|
|
||||||
|
varbit$(DLSUFFIX): $(OBJ) |
||||||
|
$(CC) $(CFLAGS) -shared -o varbit$(DLSUFFIX) $(SOURCE) $(CLIBS)
|
||||||
|
|
||||||
|
vartest: varbit.o vartest.o |
||||||
|
$(CC) -o $@ varbit.o vartest.o
|
||||||
|
|
||||||
|
install: |
||||||
|
$(MAKE) all
|
||||||
|
cp -p varbit$(DLSUFFIX) $(LIBDIR)/contrib
|
||||||
|
chmod 555 $(LIBDIR)/contrib/varbit$(DLSUFFIX)
|
||||||
|
|
||||||
|
%.sql: %.source |
||||||
|
echo $(SRCDIR)
|
||||||
|
if [ -z "$$USER" ]; then USER=$$LOGNAME; fi; \
|
||||||
|
if [ -z "$$USER" ]; then USER=`whoami`; fi; \
|
||||||
|
if [ -z "$$USER" ]; then echo 'Cannot deduce $$USER.'; exit 1; fi; \
|
||||||
|
rm -f $@; \
|
||||||
|
C=`pwd`; \
|
||||||
|
O=$C; \
|
||||||
|
if [ -d ${LIBDIR}/contrib ]; then O=${LIBDIR}/contrib; else \
|
||||||
|
echo "contrib directory does not exist."; fi; \
|
||||||
|
sed -e "s:_CWD_:$$C:g" \
|
||||||
|
-e "s:_OBJWD_:$$O:g" \
|
||||||
|
-e "s:_DLSUFFIX_:$(DLSUFFIX):g" \
|
||||||
|
-e "s/_USER_/$$USER/g" < $< > $@
|
||||||
|
|
||||||
clean: |
clean: |
||||||
rm -f *.o varbit
|
rm -f $(TARGETS) varbit.o
|
||||||
|
|
||||||
|
@ -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