mirror of
https://github.com/postgres/postgres.git
synced 2025-06-13 07:41:39 +03:00
Add index-only scan support to btree_gist.
inet, cidr, and timetz indexes still cannot support index-only scans, because they don't store the original unmodified value in the index, but a derived approximate value.
This commit is contained in:
@ -29,6 +29,7 @@ typedef struct
|
||||
|
||||
|
||||
PG_FUNCTION_INFO_V1(gbt_var_decompress);
|
||||
PG_FUNCTION_INFO_V1(gbt_var_fetch);
|
||||
|
||||
|
||||
Datum
|
||||
@ -301,6 +302,23 @@ gbt_var_compress(GISTENTRY *entry, const gbtree_vinfo *tinfo)
|
||||
}
|
||||
|
||||
|
||||
Datum
|
||||
gbt_var_fetch(PG_FUNCTION_ARGS)
|
||||
{
|
||||
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
|
||||
GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(PG_DETOAST_DATUM(entry->key));
|
||||
GBT_VARKEY_R r = gbt_var_key_readable(key);
|
||||
GISTENTRY *retval;
|
||||
|
||||
retval = palloc(sizeof(GISTENTRY));
|
||||
gistentryinit(*retval, PointerGetDatum(r.lower),
|
||||
entry->rel, entry->page,
|
||||
entry->offset, TRUE);
|
||||
|
||||
PG_RETURN_POINTER(retval);
|
||||
}
|
||||
|
||||
|
||||
GBT_VARKEY *
|
||||
gbt_var_union(const GistEntryVector *entryvec, int32 *size, Oid collation,
|
||||
const gbtree_vinfo *tinfo)
|
||||
|
Reference in New Issue
Block a user