diff options
author | Teodor Sigaev <teodor@sigaev.ru> | 2006-04-03 10:27:28 +0000 |
---|---|---|
committer | Teodor Sigaev <teodor@sigaev.ru> | 2006-04-03 10:27:28 +0000 |
commit | e314c3f53f2ff8e58f459fb3211ae87fce460be7 (patch) | |
tree | cbfe9afa0b6895fa468969d93bee836d18c968d9 /contrib/intarray/_int_gist.c | |
parent | e243ba23d3abf0c844659b87403fa9ee55340ee8 (diff) | |
download | postgresql-e314c3f53f2ff8e58f459fb3211ae87fce460be7.tar.gz postgresql-e314c3f53f2ff8e58f459fb3211ae87fce460be7.zip |
Detoast query in g_intbig_consistent and copy query in g_int_consistent.
Minor cleanups.
Diffstat (limited to 'contrib/intarray/_int_gist.c')
-rw-r--r-- | contrib/intarray/_int_gist.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/contrib/intarray/_int_gist.c b/contrib/intarray/_int_gist.c index 39c9679addd..4cae5d3e1d4 100644 --- a/contrib/intarray/_int_gist.c +++ b/contrib/intarray/_int_gist.c @@ -32,20 +32,24 @@ Datum g_int_consistent(PG_FUNCTION_ARGS) { GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0); - ArrayType *query = (ArrayType *) PG_GETARG_POINTER(1); + ArrayType *query = (ArrayType *) PG_DETOAST_DATUM_COPY(PG_GETARG_POINTER(1)); StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2); bool retval; - if (strategy == BooleanSearchStrategy) - PG_RETURN_BOOL(execconsistent((QUERYTYPE *) query, + if (strategy == BooleanSearchStrategy) { + retval =execconsistent((QUERYTYPE *) query, (ArrayType *) DatumGetPointer(entry->key), - ISLEAFKEY((ArrayType *) DatumGetPointer(entry->key)))); + ISLEAFKEY((ArrayType *) DatumGetPointer(entry->key))); + pfree( query ); + + PG_RETURN_BOOL(retval); + } - /* XXX are we sure it's safe to scribble on the query object here? */ - /* XXX what about toasted input? */ /* sort query for fast search, key is already sorted */ - if (ARRISVOID(query)) + if (ARRISVOID(query)) { + pfree( query ); PG_RETURN_BOOL(false); + } PREPAREARR(query); switch (strategy) @@ -81,6 +85,7 @@ g_int_consistent(PG_FUNCTION_ARGS) default: retval = FALSE; } + pfree( query ); PG_RETURN_BOOL(retval); } |