From 3a20b0e7b6dae48cd6be1257e9017663f1402b91 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Sat, 28 Mar 2015 15:11:53 +0200 Subject: Add index-only scan support to inet GiST opclass. Andreas Karlsson --- src/backend/utils/adt/network_gist.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src/backend/utils/adt/network_gist.c') 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 @@ -587,6 +587,33 @@ inet_gist_decompress(PG_FUNCTION_ARGS) PG_RETURN_POINTER(entry); } +/* + * 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 * -- cgit v1.2.3