diff options
author | Teodor Sigaev <teodor@sigaev.ru> | 2004-03-30 15:45:33 +0000 |
---|---|---|
committer | Teodor Sigaev <teodor@sigaev.ru> | 2004-03-30 15:45:33 +0000 |
commit | f2c064afcbfad4999d7e9ccb644a8aa99463a1ac (patch) | |
tree | a630e42b10478f1d88b637a96114945016faa2e0 /contrib/btree_gist | |
parent | 8d9a28eeefc477638cca58d0685635271eae49d6 (diff) | |
download | postgresql-f2c064afcbfad4999d7e9ccb644a8aa99463a1ac.tar.gz postgresql-f2c064afcbfad4999d7e9ccb644a8aa99463a1ac.zip |
Cleanup vectors of GISTENTRY and eliminate problem with 64-bit strict-aligned
boxes. Change interface to user-defined GiST support methods union and
picksplit. Now instead of bytea struct it used special GistEntryVector
structure.
Diffstat (limited to 'contrib/btree_gist')
-rw-r--r-- | contrib/btree_gist/btree_common.c | 6 | ||||
-rw-r--r-- | contrib/btree_gist/btree_gist.h | 2 | ||||
-rw-r--r-- | contrib/btree_gist/btree_gist.sql.in | 24 | ||||
-rw-r--r-- | contrib/btree_gist/btree_num.c.in | 10 | ||||
-rw-r--r-- | contrib/btree_gist/btree_ts.c | 10 |
5 files changed, 26 insertions, 26 deletions
diff --git a/contrib/btree_gist/btree_common.c b/contrib/btree_gist/btree_common.c index 9306076e0ae..b2353bf57be 100644 --- a/contrib/btree_gist/btree_common.c +++ b/contrib/btree_gist/btree_common.c @@ -22,14 +22,14 @@ btree_decompress(PG_FUNCTION_ARGS) ** The GiST PickSplit method */ extern GIST_SPLITVEC * -btree_picksplit(bytea *entryvec, GIST_SPLITVEC *v, BINARY_UNION bu, CMPFUNC cmp) +btree_picksplit(GistEntryVector *entryvec, GIST_SPLITVEC *v, BINARY_UNION bu, CMPFUNC cmp) { OffsetNumber i; RIX *array; OffsetNumber maxoff; int nbytes; - maxoff = ((VARSIZE(entryvec) - VARHDRSZ) / sizeof(GISTENTRY)) - 1; + maxoff = entryvec->n - 1; nbytes = (maxoff + 2) * sizeof(OffsetNumber); v->spl_left = (OffsetNumber *) palloc(nbytes); v->spl_right = (OffsetNumber *) palloc(nbytes); @@ -43,7 +43,7 @@ btree_picksplit(bytea *entryvec, GIST_SPLITVEC *v, BINARY_UNION bu, CMPFUNC cmp) for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i)) { array[i].index = i; - array[i].r = (char *) DatumGetPointer((((GISTENTRY *) (VARDATA(entryvec)))[i].key)); + array[i].r = (char *) DatumGetPointer((entryvec->vector[i].key)); } qsort((void *) &array[FirstOffsetNumber], maxoff - FirstOffsetNumber + 1, sizeof(RIX), cmp); diff --git a/contrib/btree_gist/btree_gist.h b/contrib/btree_gist/btree_gist.h index ecbabc2dbb3..08f6f1d29e2 100644 --- a/contrib/btree_gist/btree_gist.h +++ b/contrib/btree_gist/btree_gist.h @@ -21,5 +21,5 @@ typedef struct rix ** Common btree-function (for all ops) */ -extern GIST_SPLITVEC *btree_picksplit(bytea *entryvec, GIST_SPLITVEC *v, +extern GIST_SPLITVEC *btree_picksplit(GistEntryVector *entryvec, GIST_SPLITVEC *v, BINARY_UNION bu, CMPFUNC cmp); diff --git a/contrib/btree_gist/btree_gist.sql.in b/contrib/btree_gist/btree_gist.sql.in index 70db5a860da..b453d3029fe 100644 --- a/contrib/btree_gist/btree_gist.sql.in +++ b/contrib/btree_gist/btree_gist.sql.in @@ -120,7 +120,7 @@ RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE 'C'; -CREATE FUNCTION gint2_union(bytea, internal) +CREATE FUNCTION gint2_union(internal, internal) RETURNS int4 AS 'MODULE_PATHNAME' LANGUAGE 'C'; @@ -140,7 +140,7 @@ AS OPERATOR 4 >= , OPERATOR 5 > , FUNCTION 1 gint2_consistent (internal, int2, int2), - FUNCTION 2 gint2_union (bytea, internal), + FUNCTION 2 gint2_union (internal, internal), FUNCTION 3 gint2_compress (internal), FUNCTION 4 btree_decompress (internal), FUNCTION 5 gint2_penalty (internal, internal, internal), @@ -176,7 +176,7 @@ RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE 'C'; -CREATE FUNCTION gint4_union(bytea, internal) +CREATE FUNCTION gint4_union(internal, internal) RETURNS int4 AS 'MODULE_PATHNAME' LANGUAGE 'C'; @@ -196,7 +196,7 @@ AS OPERATOR 4 >= , OPERATOR 5 > , FUNCTION 1 gint4_consistent (internal, int4, int2), - FUNCTION 2 gint4_union (bytea, internal), + FUNCTION 2 gint4_union (internal, internal), FUNCTION 3 gint4_compress (internal), FUNCTION 4 btree_decompress (internal), FUNCTION 5 gint4_penalty (internal, internal, internal), @@ -232,7 +232,7 @@ RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE 'C'; -CREATE FUNCTION gint8_union(bytea, internal) +CREATE FUNCTION gint8_union(internal, internal) RETURNS int8key AS 'MODULE_PATHNAME' LANGUAGE 'C'; @@ -252,7 +252,7 @@ AS OPERATOR 4 >= , OPERATOR 5 > , FUNCTION 1 gint8_consistent (internal, int8, int2), - FUNCTION 2 gint8_union (bytea, internal), + FUNCTION 2 gint8_union (internal, internal), FUNCTION 3 gint8_compress (internal), FUNCTION 4 btree_decompress (internal), FUNCTION 5 gint8_penalty (internal, internal, internal), @@ -289,7 +289,7 @@ RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE 'C'; -CREATE FUNCTION gfloat4_union(bytea, internal) +CREATE FUNCTION gfloat4_union(internal, internal) RETURNS int4 AS 'MODULE_PATHNAME' LANGUAGE 'C'; @@ -309,7 +309,7 @@ AS OPERATOR 4 >= , OPERATOR 5 > , FUNCTION 1 gfloat4_consistent (internal, float4, int2), - FUNCTION 2 gfloat4_union (bytea, internal), + FUNCTION 2 gfloat4_union (internal, internal), FUNCTION 3 gfloat4_compress (internal), FUNCTION 4 btree_decompress (internal), FUNCTION 5 gfloat4_penalty (internal, internal, internal), @@ -348,7 +348,7 @@ RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE 'C'; -CREATE FUNCTION gfloat8_union(bytea, internal) +CREATE FUNCTION gfloat8_union(internal, internal) RETURNS int4 AS 'MODULE_PATHNAME' LANGUAGE 'C'; @@ -368,7 +368,7 @@ AS OPERATOR 4 >= , OPERATOR 5 > , FUNCTION 1 gfloat8_consistent (internal, float8, int2), - FUNCTION 2 gfloat8_union (bytea, internal), + FUNCTION 2 gfloat8_union (internal, internal), FUNCTION 3 gfloat8_compress (internal), FUNCTION 4 btree_decompress (internal), FUNCTION 5 gfloat8_penalty (internal, internal, internal), @@ -422,7 +422,7 @@ RETURNS internal AS 'MODULE_PATHNAME' LANGUAGE 'C'; -CREATE FUNCTION gts_union(bytea, internal) +CREATE FUNCTION gts_union(internal, internal) RETURNS int4 AS 'MODULE_PATHNAME' LANGUAGE 'C'; @@ -442,7 +442,7 @@ AS OPERATOR 4 >= , OPERATOR 5 > , FUNCTION 1 gts_consistent (internal, timestamp, int2), - FUNCTION 2 gts_union (bytea, internal), + FUNCTION 2 gts_union (internal, internal), FUNCTION 3 gts_compress (internal), FUNCTION 4 btree_decompress (internal), FUNCTION 5 gts_penalty (internal, internal, internal), diff --git a/contrib/btree_gist/btree_num.c.in b/contrib/btree_gist/btree_num.c.in index fd9052510fc..1852834bb04 100644 --- a/contrib/btree_gist/btree_num.c.in +++ b/contrib/btree_gist/btree_num.c.in @@ -138,22 +138,22 @@ g__BTREE_GIST_TYPE2___consistent(PG_FUNCTION_ARGS) Datum g__BTREE_GIST_TYPE2___union(PG_FUNCTION_ARGS) { - bytea *entryvec = (bytea *) PG_GETARG_POINTER(0); + GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0); int i, numranges; __BTREE_GIST_TYPE__KEY *cur, *out = palloc(sizeof(__BTREE_GIST_TYPE__KEY)); - numranges = (VARSIZE(entryvec) - VARHDRSZ) / sizeof(GISTENTRY); + numranges = entryvec->n; *(int *) PG_GETARG_POINTER(1) = sizeof(__BTREE_GIST_TYPE__KEY); - cur = (__BTREE_GIST_TYPE__KEY *) DatumGetPointer((((GISTENTRY *) (VARDATA(entryvec)))[0].key)); + cur = (__BTREE_GIST_TYPE__KEY *) DatumGetPointer((entryvec->vector[0].key)); out->lower = cur->lower; out->upper = cur->upper; for (i = 1; i < numranges; i++) { - cur = (__BTREE_GIST_TYPE__KEY *) DatumGetPointer((((GISTENTRY *) (VARDATA(entryvec)))[i].key)); + cur = (__BTREE_GIST_TYPE__KEY *) DatumGetPointer((entryvec->vector[i].key)); if (out->lower > cur->lower) out->lower = cur->lower; if (out->upper < cur->upper) @@ -180,7 +180,7 @@ Datum g__BTREE_GIST_TYPE2___picksplit(PG_FUNCTION_ARGS) { PG_RETURN_POINTER(btree_picksplit( - (bytea *) PG_GETARG_POINTER(0), + (GistEntryVector *) PG_GETARG_POINTER(0), (GIST_SPLITVEC *) PG_GETARG_POINTER(1), g__BTREE_GIST_TYPE2___binary_union, __BTREE_GIST_TYPE2__key_cmp diff --git a/contrib/btree_gist/btree_ts.c b/contrib/btree_gist/btree_ts.c index 59fdcdba5cd..658528dcb99 100644 --- a/contrib/btree_gist/btree_ts.c +++ b/contrib/btree_gist/btree_ts.c @@ -146,22 +146,22 @@ gts_consistent(PG_FUNCTION_ARGS) Datum gts_union(PG_FUNCTION_ARGS) { - bytea *entryvec = (bytea *) PG_GETARG_POINTER(0); + GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0); int i, numranges; TSKEY *cur, *out = palloc(sizeof(TSKEY)); - numranges = (VARSIZE(entryvec) - VARHDRSZ) / sizeof(GISTENTRY); + numranges = entryvec->n; *(int *) PG_GETARG_POINTER(1) = sizeof(TSKEY); - cur = (TSKEY *) DatumGetPointer((((GISTENTRY *) (VARDATA(entryvec)))[0].key)); + cur = (TSKEY *) DatumGetPointer((entryvec->vector[0].key)); out->lower = cur->lower; out->upper = cur->upper; for (i = 1; i < numranges; i++) { - cur = (TSKEY *) DatumGetPointer((((GISTENTRY *) (VARDATA(entryvec)))[i].key)); + cur = (TSKEY *) DatumGetPointer((entryvec->vector[i].key)); if (TSGT(&out->lower, &cur->lower)) out->lower = cur->lower; if (TSLT(&out->upper, &cur->upper)) @@ -204,7 +204,7 @@ Datum gts_picksplit(PG_FUNCTION_ARGS) { PG_RETURN_POINTER(btree_picksplit( - (bytea *) PG_GETARG_POINTER(0), + (GistEntryVector *) PG_GETARG_POINTER(0), (GIST_SPLITVEC *) PG_GETARG_POINTER(1), gts_binary_union, tskey_cmp |