mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
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
This commit is contained in:
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
Reference in New Issue
Block a user