diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2015-03-28 15:11:53 +0200 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2015-03-28 15:11:53 +0200 |
commit | 3a20b0e7b6dae48cd6be1257e9017663f1402b91 (patch) | |
tree | 32c7a1dde32f9486fe64a0685f9fa948e259c43c /src/backend/utils/adt/network_gist.c | |
parent | 16bbb96a2b48d0f525b7fb2f6a001b16719467a9 (diff) | |
download | postgresql-3a20b0e7b6dae48cd6be1257e9017663f1402b91.tar.gz postgresql-3a20b0e7b6dae48cd6be1257e9017663f1402b91.zip |
Add index-only scan support to inet GiST opclass.
Andreas Karlsson
Diffstat (limited to 'src/backend/utils/adt/network_gist.c')
-rw-r--r-- | src/backend/utils/adt/network_gist.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/backend/utils/adt/network_gist.c b/src/backend/utils/adt/network_gist.c index 14dd62b7719..cd2b8b19a77 100644 --- a/src/backend/utils/adt/network_gist.c +++ b/src/backend/utils/adt/network_gist.c @@ -588,6 +588,33 @@ inet_gist_decompress(PG_FUNCTION_ARGS) } /* + * The GiST fetch function + * + * Reconstruct the original inet datum from a GistInetKey. + */ +Datum +inet_gist_fetch(PG_FUNCTION_ARGS) +{ + GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0); + GistInetKey *key = DatumGetInetKeyP(entry->key); + GISTENTRY *retval; + inet *dst; + + dst = (inet *) palloc0(sizeof(inet)); + + ip_family(dst) = gk_ip_family(key); + ip_bits(dst) = gk_ip_minbits(key); + memcpy(ip_addr(dst), gk_ip_addr(key), ip_addrsize(dst)); + SET_INET_VARSIZE(dst); + + retval = palloc(sizeof(GISTENTRY)); + gistentryinit(*retval, InetPGetDatum(dst), entry->rel, entry->page, + entry->offset, FALSE); + + PG_RETURN_POINTER(retval); +} + +/* * The GiST page split penalty function * * Charge a large penalty if address family doesn't match, or a somewhat |