diff options
author | Teodor Sigaev <teodor@sigaev.ru> | 2006-04-03 10:45:28 +0000 |
---|---|---|
committer | Teodor Sigaev <teodor@sigaev.ru> | 2006-04-03 10:45:28 +0000 |
commit | 2ba15dbfc38ab89e07fe399af4d601579f211fdb (patch) | |
tree | 658f710d5d8580f3735197638fed7f3694a67413 /contrib/intarray/_intbig_gist.c | |
parent | 1750f60ef3e730faf72ecfa7fbd7ee6ad799f293 (diff) | |
download | postgresql-2ba15dbfc38ab89e07fe399af4d601579f211fdb.tar.gz postgresql-2ba15dbfc38ab89e07fe399af4d601579f211fdb.zip |
Detoast query in g_intbig_consistent and copy query in g_int_consistent.
Minor cleanups.
Diffstat (limited to 'contrib/intarray/_intbig_gist.c')
-rw-r--r-- | contrib/intarray/_intbig_gist.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/contrib/intarray/_intbig_gist.c b/contrib/intarray/_intbig_gist.c index 07a051dd50c..dca1c7ab1b3 100644 --- a/contrib/intarray/_intbig_gist.c +++ b/contrib/intarray/_intbig_gist.c @@ -477,23 +477,28 @@ Datum g_intbig_consistent(PG_FUNCTION_ARGS) { GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0); - ArrayType *query = (ArrayType *) PG_GETARG_POINTER(1); + ArrayType *query = (ArrayType *) PG_DETOAST_DATUM(PG_GETARG_POINTER(1)); StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2); bool retval; - if (ISALLTRUE(DatumGetPointer(entry->key))) + if (ISALLTRUE(DatumGetPointer(entry->key))) { + PG_FREE_IF_COPY(query, 1); PG_RETURN_BOOL(true); + } if (strategy == BooleanSearchStrategy) { - PG_RETURN_BOOL(signconsistent((QUERYTYPE *) query, + retval = signconsistent((QUERYTYPE *) query, GETSIGN(DatumGetPointer(entry->key)), - false)); + false); + PG_FREE_IF_COPY(query, 1); + PG_RETURN_BOOL(retval); } - /* XXX what about toasted input? */ - if (ARRISVOID(query)) - return FALSE; + if (ARRISVOID(query)) { + PG_FREE_IF_COPY(query, 1); + PG_RETURN_BOOL(retval); + } switch (strategy) { @@ -572,5 +577,6 @@ g_intbig_consistent(PG_FUNCTION_ARGS) default: retval = FALSE; } + PG_FREE_IF_COPY(query, 1); PG_RETURN_BOOL(retval); } |