Detoast query in g_intbig_consistent and copy query in g_int_consistent
This commit is contained in:
parent
ef524d1775
commit
7f129956e1
@ -32,17 +32,19 @@ Datum
|
|||||||
g_int_consistent(PG_FUNCTION_ARGS)
|
g_int_consistent(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
|
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);
|
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
|
||||||
bool retval;
|
bool retval;
|
||||||
|
|
||||||
if (strategy == BooleanSearchStrategy)
|
if (strategy == BooleanSearchStrategy) {
|
||||||
PG_RETURN_BOOL(execconsistent((QUERYTYPE *) query,
|
retval = execconsistent((QUERYTYPE *) query,
|
||||||
(ArrayType *) DatumGetPointer(entry->key),
|
(ArrayType *) DatumGetPointer(entry->key),
|
||||||
GIST_LEAF(entry)));
|
GIST_LEAF(entry));
|
||||||
|
|
||||||
|
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 */
|
/* sort query for fast search, key is already sorted */
|
||||||
CHECKARRVALID(query);
|
CHECKARRVALID(query);
|
||||||
if (ARRISVOID(query))
|
if (ARRISVOID(query))
|
||||||
@ -82,6 +84,7 @@ g_int_consistent(PG_FUNCTION_ARGS)
|
|||||||
default:
|
default:
|
||||||
retval = FALSE;
|
retval = FALSE;
|
||||||
}
|
}
|
||||||
|
pfree( query );
|
||||||
PG_RETURN_BOOL(retval);
|
PG_RETURN_BOOL(retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -497,7 +497,7 @@ Datum
|
|||||||
g_intbig_consistent(PG_FUNCTION_ARGS)
|
g_intbig_consistent(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
|
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);
|
StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
|
||||||
bool retval;
|
bool retval;
|
||||||
|
|
||||||
@ -506,12 +506,13 @@ g_intbig_consistent(PG_FUNCTION_ARGS)
|
|||||||
|
|
||||||
if (strategy == BooleanSearchStrategy)
|
if (strategy == BooleanSearchStrategy)
|
||||||
{
|
{
|
||||||
PG_RETURN_BOOL(signconsistent((QUERYTYPE *) query,
|
retval =signconsistent((QUERYTYPE *) query,
|
||||||
GETSIGN(DatumGetPointer(entry->key)),
|
GETSIGN(DatumGetPointer(entry->key)),
|
||||||
false));
|
false);
|
||||||
|
PG_FREE_IF_COPY( query, 1 );
|
||||||
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* XXX what about toasted input? */
|
|
||||||
CHECKARRVALID(query);
|
CHECKARRVALID(query);
|
||||||
if (ARRISVOID(query))
|
if (ARRISVOID(query))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -597,5 +598,6 @@ g_intbig_consistent(PG_FUNCTION_ARGS)
|
|||||||
default:
|
default:
|
||||||
retval = FALSE;
|
retval = FALSE;
|
||||||
}
|
}
|
||||||
|
PG_FREE_IF_COPY( query, 1 );
|
||||||
PG_RETURN_BOOL(retval);
|
PG_RETURN_BOOL(retval);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user