diff options
author | Teodor Sigaev <teodor@sigaev.ru> | 2006-06-28 12:00:14 +0000 |
---|---|---|
committer | Teodor Sigaev <teodor@sigaev.ru> | 2006-06-28 12:00:14 +0000 |
commit | 1f7ef548ec2e594fa8766781c490fb5b998ea46b (patch) | |
tree | a552894bd93658d85c7136d00042c4b05e19a9a6 /contrib | |
parent | a1dc5c60bcd4c458e160bf0e355bed083a1cab57 (diff) | |
download | postgresql-1f7ef548ec2e594fa8766781c490fb5b998ea46b.tar.gz postgresql-1f7ef548ec2e594fa8766781c490fb5b998ea46b.zip |
Changes
* new split algorithm (as proposed in http://archives.postgresql.org/pgsql-hackers/2006-06/msg00254.php)
* possible call pickSplit() for second and below columns
* add spl_(l|r)datum_exists to GIST_SPLITVEC -
pickSplit should check its values to use already defined
spl_(l|r)datum for splitting. pickSplit should set
spl_(l|r)datum_exists to 'false' (if they was 'true') to
signal to caller about using spl_(l|r)datum.
* support for old pickSplit(): not very optimal
but correct split
* remove 'bytes' field from GISTENTRY: in any case size of
value is defined by it's type.
* split GIST_SPLITVEC to two structures: one for using in picksplit
and second - for internal use.
* some code refactoring
* support of subsplit to rtree opclasses
TODO: add support of subsplit to contrib modules
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/btree_gist/btree_inet.c | 2 | ||||
-rw-r--r-- | contrib/btree_gist/btree_interval.c | 4 | ||||
-rw-r--r-- | contrib/btree_gist/btree_text.c | 2 | ||||
-rw-r--r-- | contrib/btree_gist/btree_time.c | 2 | ||||
-rw-r--r-- | contrib/btree_gist/btree_ts.c | 2 | ||||
-rw-r--r-- | contrib/btree_gist/btree_utils_num.c | 2 | ||||
-rw-r--r-- | contrib/btree_gist/btree_utils_var.c | 4 | ||||
-rw-r--r-- | contrib/cube/cube.c | 6 | ||||
-rw-r--r-- | contrib/intarray/_int_gist.c | 8 | ||||
-rw-r--r-- | contrib/intarray/_intbig_gist.c | 4 | ||||
-rw-r--r-- | contrib/ltree/_ltree_gist.c | 4 | ||||
-rw-r--r-- | contrib/ltree/ltree_gist.c | 6 | ||||
-rw-r--r-- | contrib/pg_trgm/trgm_gist.c | 4 | ||||
-rw-r--r-- | contrib/seg/seg.c | 4 | ||||
-rw-r--r-- | contrib/tsearch2/gistidx.c | 8 | ||||
-rw-r--r-- | contrib/tsearch2/query_gist.c | 2 |
16 files changed, 32 insertions, 32 deletions
diff --git a/contrib/btree_gist/btree_inet.c b/contrib/btree_gist/btree_inet.c index 551368cec2e..914f4f6d5ef 100644 --- a/contrib/btree_gist/btree_inet.c +++ b/contrib/btree_gist/btree_inet.c @@ -100,7 +100,7 @@ gbt_inet_compress(PG_FUNCTION_ARGS) r->upper = r->lower; gistentryinit(*retval, PointerGetDatum(r), entry->rel, entry->page, - entry->offset, sizeof(inetKEY), FALSE); + entry->offset, FALSE); } else retval = entry; diff --git a/contrib/btree_gist/btree_interval.c b/contrib/btree_gist/btree_interval.c index b7776295a0e..6f346f94fed 100644 --- a/contrib/btree_gist/btree_interval.c +++ b/contrib/btree_gist/btree_interval.c @@ -129,7 +129,7 @@ gbt_intv_compress(PG_FUNCTION_ARGS) } gistentryinit(*retval, PointerGetDatum(r), entry->rel, entry->page, - entry->offset, 2 * INTERVALSIZE, FALSE); + entry->offset, FALSE); } PG_RETURN_POINTER(retval); @@ -153,7 +153,7 @@ gbt_intv_decompress(PG_FUNCTION_ARGS) gistentryinit(*retval, PointerGetDatum(r), entry->rel, entry->page, - entry->offset, sizeof(intvKEY), FALSE); + entry->offset, FALSE); } PG_RETURN_POINTER(retval); } diff --git a/contrib/btree_gist/btree_text.c b/contrib/btree_gist/btree_text.c index 6ab77f86ae7..fa4eb904f50 100644 --- a/contrib/btree_gist/btree_text.c +++ b/contrib/btree_gist/btree_text.c @@ -115,7 +115,7 @@ gbt_bpchar_compress(PG_FUNCTION_ARGS) gistentryinit(trim, d, entry->rel, entry->page, - entry->offset, VARSIZE(DatumGetPointer(d)), TRUE); + entry->offset, TRUE); retval = gbt_var_compress(&trim, &tinfo); } else diff --git a/contrib/btree_gist/btree_time.c b/contrib/btree_gist/btree_time.c index c6a5697af0c..379f1e0a603 100644 --- a/contrib/btree_gist/btree_time.c +++ b/contrib/btree_gist/btree_time.c @@ -137,7 +137,7 @@ gbt_timetz_compress(PG_FUNCTION_ARGS) r->lower = r->upper = tmp; gistentryinit(*retval, PointerGetDatum(r), entry->rel, entry->page, - entry->offset, sizeof(timeKEY), FALSE); + entry->offset, FALSE); } else retval = entry; diff --git a/contrib/btree_gist/btree_ts.c b/contrib/btree_gist/btree_ts.c index 9f305119d84..9a7d6505279 100644 --- a/contrib/btree_gist/btree_ts.c +++ b/contrib/btree_gist/btree_ts.c @@ -159,7 +159,7 @@ gbt_tstz_compress(PG_FUNCTION_ARGS) r->lower = r->upper = gmt; gistentryinit(*retval, PointerGetDatum(r), entry->rel, entry->page, - entry->offset, sizeof(tsKEY), FALSE); + entry->offset, FALSE); } else retval = entry; diff --git a/contrib/btree_gist/btree_utils_num.c b/contrib/btree_gist/btree_utils_num.c index 69292758f58..9798d015635 100644 --- a/contrib/btree_gist/btree_utils_num.c +++ b/contrib/btree_gist/btree_utils_num.c @@ -46,7 +46,7 @@ gbt_num_compress(GISTENTRY *retval, GISTENTRY *entry, const gbtree_ninfo * tinfo memcpy((void *) &r[tinfo->size], leaf, tinfo->size); retval = palloc(sizeof(GISTENTRY)); gistentryinit(*retval, PointerGetDatum(r), entry->rel, entry->page, - entry->offset, (2 * tinfo->size), FALSE); + entry->offset, FALSE); } else retval = entry; diff --git a/contrib/btree_gist/btree_utils_var.c b/contrib/btree_gist/btree_utils_var.c index 20a1e427f27..810ca78af9b 100644 --- a/contrib/btree_gist/btree_utils_var.c +++ b/contrib/btree_gist/btree_utils_var.c @@ -19,7 +19,7 @@ gbt_var_decompress(PG_FUNCTION_ARGS) gistentryinit(*retval, PointerGetDatum(key), entry->rel, entry->page, - entry->offset, VARSIZE(key), FALSE); + entry->offset, FALSE); PG_RETURN_POINTER(retval); } @@ -292,7 +292,7 @@ gbt_var_compress(GISTENTRY *entry, const gbtree_vinfo * tinfo) retval = palloc(sizeof(GISTENTRY)); gistentryinit(*retval, PointerGetDatum(r), entry->rel, entry->page, - entry->offset, VARSIZE(r), TRUE); + entry->offset, TRUE); } else retval = entry; diff --git a/contrib/cube/cube.c b/contrib/cube/cube.c index 944eee62b17..87ca2db7688 100644 --- a/contrib/cube/cube.c +++ b/contrib/cube/cube.c @@ -1,5 +1,5 @@ /****************************************************************************** - $PostgreSQL: pgsql/contrib/cube/cube.c,v 1.25 2006/05/30 22:12:12 tgl Exp $ + $PostgreSQL: pgsql/contrib/cube/cube.c,v 1.26 2006/06/28 11:59:59 teodor Exp $ This file contains routines that can be bound to a Postgres backend and called by the backend in the process of processing queries. The calling @@ -300,8 +300,8 @@ g_cube_picksplit(GistEntryVector *entryvec, double size_l, size_r; int nbytes; - OffsetNumber seed_1 = 0, - seed_2 = 0; + OffsetNumber seed_1 = 1, + seed_2 = 2; OffsetNumber *left, *right; OffsetNumber maxoff; diff --git a/contrib/intarray/_int_gist.c b/contrib/intarray/_int_gist.c index f82024896f2..df5ae03e54d 100644 --- a/contrib/intarray/_int_gist.c +++ b/contrib/intarray/_int_gist.c @@ -154,7 +154,7 @@ g_int_compress(PG_FUNCTION_ARGS) retval = palloc(sizeof(GISTENTRY)); gistentryinit(*retval, PointerGetDatum(r), - entry->rel, entry->page, entry->offset, VARSIZE(r), FALSE); + entry->rel, entry->page, entry->offset, FALSE); PG_RETURN_POINTER(retval); } @@ -201,7 +201,7 @@ g_int_compress(PG_FUNCTION_ARGS) r = resize_intArrayType(r, len); retval = palloc(sizeof(GISTENTRY)); gistentryinit(*retval, PointerGetDatum(r), - entry->rel, entry->page, entry->offset, VARSIZE(r), FALSE); + entry->rel, entry->page, entry->offset, FALSE); PG_RETURN_POINTER(retval); } else @@ -238,7 +238,7 @@ g_int_decompress(PG_FUNCTION_ARGS) { retval = palloc(sizeof(GISTENTRY)); gistentryinit(*retval, PointerGetDatum(in), - entry->rel, entry->page, entry->offset, VARSIZE(in), FALSE); + entry->rel, entry->page, entry->offset, FALSE); PG_RETURN_POINTER(retval); } @@ -260,7 +260,7 @@ g_int_decompress(PG_FUNCTION_ARGS) pfree(in); retval = palloc(sizeof(GISTENTRY)); gistentryinit(*retval, PointerGetDatum(r), - entry->rel, entry->page, entry->offset, VARSIZE(r), FALSE); + entry->rel, entry->page, entry->offset, FALSE); PG_RETURN_POINTER(retval); } diff --git a/contrib/intarray/_intbig_gist.c b/contrib/intarray/_intbig_gist.c index ecd949d87a2..626421f83c3 100644 --- a/contrib/intarray/_intbig_gist.c +++ b/contrib/intarray/_intbig_gist.c @@ -172,7 +172,7 @@ g_intbig_compress(PG_FUNCTION_ARGS) retval = (GISTENTRY *) palloc(sizeof(GISTENTRY)); gistentryinit(*retval, PointerGetDatum(res), entry->rel, entry->page, - entry->offset, res->len, FALSE); + entry->offset, FALSE); if (in != (ArrayType *) PG_DETOAST_DATUM(entry->key)) pfree(in); @@ -198,7 +198,7 @@ g_intbig_compress(PG_FUNCTION_ARGS) retval = (GISTENTRY *) palloc(sizeof(GISTENTRY)); gistentryinit(*retval, PointerGetDatum(res), entry->rel, entry->page, - entry->offset, res->len, FALSE); + entry->offset, FALSE); PG_RETURN_POINTER(retval); } diff --git a/contrib/ltree/_ltree_gist.c b/contrib/ltree/_ltree_gist.c index b95dc333340..285077802bb 100644 --- a/contrib/ltree/_ltree_gist.c +++ b/contrib/ltree/_ltree_gist.c @@ -108,7 +108,7 @@ _ltree_compress(PG_FUNCTION_ARGS) retval = (GISTENTRY *) palloc(sizeof(GISTENTRY)); gistentryinit(*retval, PointerGetDatum(key), entry->rel, entry->page, - entry->offset, key->len, FALSE); + entry->offset, FALSE); } else if (!LTG_ISALLTRUE(entry->key)) { @@ -130,7 +130,7 @@ _ltree_compress(PG_FUNCTION_ARGS) retval = (GISTENTRY *) palloc(sizeof(GISTENTRY)); gistentryinit(*retval, PointerGetDatum(key), entry->rel, entry->page, - entry->offset, key->len, FALSE); + entry->offset, FALSE); } PG_RETURN_POINTER(retval); } diff --git a/contrib/ltree/ltree_gist.c b/contrib/ltree/ltree_gist.c index e210117cbc7..f5214b746b1 100644 --- a/contrib/ltree/ltree_gist.c +++ b/contrib/ltree/ltree_gist.c @@ -1,7 +1,7 @@ /* * GiST support for ltree * Teodor Sigaev <teodor@stack.net> - * $PostgreSQL: pgsql/contrib/ltree/ltree_gist.c,v 1.14 2006/03/11 04:38:29 momjian Exp $ + * $PostgreSQL: pgsql/contrib/ltree/ltree_gist.c,v 1.15 2006/06/28 11:59:59 teodor Exp $ */ #include "ltree.h" @@ -81,7 +81,7 @@ ltree_compress(PG_FUNCTION_ARGS) retval = (GISTENTRY *) palloc(sizeof(GISTENTRY)); gistentryinit(*retval, PointerGetDatum(key), entry->rel, entry->page, - entry->offset, key->len, FALSE); + entry->offset, FALSE); } PG_RETURN_POINTER(retval); } @@ -98,7 +98,7 @@ ltree_decompress(PG_FUNCTION_ARGS) gistentryinit(*retval, PointerGetDatum(key), entry->rel, entry->page, - entry->offset, key->len, FALSE); + entry->offset, FALSE); PG_RETURN_POINTER(retval); } PG_RETURN_POINTER(entry); diff --git a/contrib/pg_trgm/trgm_gist.c b/contrib/pg_trgm/trgm_gist.c index 4c33a45a229..bfb92336d7d 100644 --- a/contrib/pg_trgm/trgm_gist.c +++ b/contrib/pg_trgm/trgm_gist.c @@ -103,7 +103,7 @@ gtrgm_compress(PG_FUNCTION_ARGS) retval = (GISTENTRY *) palloc(sizeof(GISTENTRY)); gistentryinit(*retval, PointerGetDatum(res), entry->rel, entry->page, - entry->offset, res->len, FALSE); + entry->offset, FALSE); } else if (ISSIGNKEY(DatumGetPointer(entry->key)) && !ISALLTRUE(DatumGetPointer(entry->key))) @@ -126,7 +126,7 @@ gtrgm_compress(PG_FUNCTION_ARGS) retval = (GISTENTRY *) palloc(sizeof(GISTENTRY)); gistentryinit(*retval, PointerGetDatum(res), entry->rel, entry->page, - entry->offset, res->len, FALSE); + entry->offset, FALSE); } PG_RETURN_POINTER(retval); } diff --git a/contrib/seg/seg.c b/contrib/seg/seg.c index 47ca1b614a5..8f0c83c298d 100644 --- a/contrib/seg/seg.c +++ b/contrib/seg/seg.c @@ -316,8 +316,8 @@ gseg_picksplit(GistEntryVector *entryvec, float size_l, size_r; int nbytes; - OffsetNumber seed_1 = 0, - seed_2 = 0; + OffsetNumber seed_1 = 1, + seed_2 = 2; OffsetNumber *left, *right; OffsetNumber maxoff; diff --git a/contrib/tsearch2/gistidx.c b/contrib/tsearch2/gistidx.c index 7cc370bf84f..5afb1a41b3b 100644 --- a/contrib/tsearch2/gistidx.c +++ b/contrib/tsearch2/gistidx.c @@ -1,4 +1,4 @@ -/* $PostgreSQL: pgsql/contrib/tsearch2/gistidx.c,v 1.13 2006/03/11 04:38:30 momjian Exp $ */ +/* $PostgreSQL: pgsql/contrib/tsearch2/gistidx.c,v 1.14 2006/06/28 12:00:06 teodor Exp $ */ #include "postgres.h" @@ -202,7 +202,7 @@ gtsvector_compress(PG_FUNCTION_ARGS) retval = (GISTENTRY *) palloc(sizeof(GISTENTRY)); gistentryinit(*retval, PointerGetDatum(res), entry->rel, entry->page, - entry->offset, res->len, FALSE); + entry->offset, FALSE); } else if (ISSIGNKEY(DatumGetPointer(entry->key)) && !ISALLTRUE(DatumGetPointer(entry->key))) @@ -225,7 +225,7 @@ gtsvector_compress(PG_FUNCTION_ARGS) retval = (GISTENTRY *) palloc(sizeof(GISTENTRY)); gistentryinit(*retval, PointerGetDatum(res), entry->rel, entry->page, - entry->offset, res->len, FALSE); + entry->offset, FALSE); } PG_RETURN_POINTER(retval); } @@ -242,7 +242,7 @@ gtsvector_decompress(PG_FUNCTION_ARGS) gistentryinit(*retval, PointerGetDatum(key), entry->rel, entry->page, - entry->offset, key->len, FALSE); + entry->offset, FALSE); PG_RETURN_POINTER(retval); } diff --git a/contrib/tsearch2/query_gist.c b/contrib/tsearch2/query_gist.c index 5941be3a55b..d0a61389d2d 100644 --- a/contrib/tsearch2/query_gist.c +++ b/contrib/tsearch2/query_gist.c @@ -164,7 +164,7 @@ gtsq_compress(PG_FUNCTION_ARGS) gistentryinit(*retval, PointerGetDatum(sign), entry->rel, entry->page, - entry->offset, sizeof(TPQTGist), FALSE); + entry->offset, FALSE); } PG_RETURN_POINTER(retval); |