]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Detoast query in g_intbig_consistent and copy query in g_int_consistent.
authorTeodor Sigaev <teodor@sigaev.ru>
Mon, 3 Apr 2006 10:45:28 +0000 (10:45 +0000)
committerTeodor Sigaev <teodor@sigaev.ru>
Mon, 3 Apr 2006 10:45:28 +0000 (10:45 +0000)
Minor cleanups.

contrib/intarray/_int_gist.c
contrib/intarray/_intbig_gist.c

index 2d5e82a4596ceeb68a6d98ea9b16280d684a6a98..b534a358e6b4277617fc35e81b0450ac51d47631 100644 (file)
@@ -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);
 }
 
index 07a051dd50c593e41c3ddb8ddad8ab9d17e9243c..dca1c7ab1b31997ac651224f283207fb6d8879b9 100644 (file)
@@ -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);
 }