1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-05 23:56:58 +03:00

Detoast query in g_intbig_consistent and copy query in g_int_consistent.

Minor cleanups.
This commit is contained in:
Teodor Sigaev 2006-04-03 09:35:35 +00:00
parent e88d84b737
commit 06e4478877
2 changed files with 20 additions and 13 deletions

View File

@ -32,20 +32,23 @@ 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 +84,7 @@ g_int_consistent(PG_FUNCTION_ARGS)
default:
retval = FALSE;
}
pfree( query );
PG_RETURN_BOOL(retval);
}

View File

@ -486,7 +486,7 @@ 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;
@ -495,14 +495,17 @@ g_intbig_consistent(PG_FUNCTION_ARGS)
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(FALSE);
}
switch (strategy)
{