]> granicus.if.org Git - postgresql/commitdiff
Detoast query in g_intbig_consistent and copy query in g_int_consistent.
authorTeodor Sigaev <teodor@sigaev.ru>
Mon, 3 Apr 2006 09:35:35 +0000 (09:35 +0000)
committerTeodor Sigaev <teodor@sigaev.ru>
Mon, 3 Apr 2006 09:35:35 +0000 (09:35 +0000)
Minor cleanups.

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

index 4f777bc40b8c24563da18051946bdf11525caaae..c812e6571ab86f68a8617575b18d81bad9b50159 100644 (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);
 }
 
index c49a2aab5349a40602c4cfd02c0ad97302dd454d..0c7f90ddd137fa73c35f423aa2a10ed915f873b9 100644 (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)
        {