]> granicus.if.org Git - postgresql/commitdiff
Update contrib/pg_trgm for new GIN extractQuery API.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 9 Jan 2011 23:04:20 +0000 (18:04 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 9 Jan 2011 23:04:20 +0000 (18:04 -0500)
No actual change in functionality ... just get rid of uselessly complex
code to pass the number of keys via extra_data.

contrib/pg_trgm/trgm_gin.c

index a5a94ca6755a693532d4846e6a56082578ce03c1..2d3e35e23308fffb2053e26378ffb826f7df5fa6 100644 (file)
@@ -19,6 +19,9 @@ Datum         gin_extract_trgm(PG_FUNCTION_ARGS);
 PG_FUNCTION_INFO_V1(gin_trgm_consistent);
 Datum          gin_trgm_consistent(PG_FUNCTION_ARGS);
 
+/*
+ * This function is used as both extractValue and extractQuery
+ */
 Datum
 gin_extract_trgm(PG_FUNCTION_ARGS)
 {
@@ -26,7 +29,7 @@ gin_extract_trgm(PG_FUNCTION_ARGS)
        int32      *nentries = (int32 *) PG_GETARG_POINTER(1);
        Datum      *entries = NULL;
        TRGM       *trg;
-       int           trglen;
+       int32           trglen;
 
        *nentries = 0;
 
@@ -36,31 +39,19 @@ gin_extract_trgm(PG_FUNCTION_ARGS)
        if (trglen > 0)
        {
                trgm       *ptr;
-               int4            i = 0,
-                                       item;
+               int32           i;
 
-               *nentries = (int32) trglen;
+               *nentries = trglen;
                entries = (Datum *) palloc(sizeof(Datum) * trglen);
 
                ptr = GETARR(trg);
-               while (ptr - GETARR(trg) < ARRNELEM(trg))
+               for (i = 0; i < trglen; i++)
                {
-                       item = trgm2int(ptr);
-                       entries[i++] = Int32GetDatum(item);
+                       int32   item = trgm2int(ptr);
 
+                       entries[i] = Int32GetDatum(item);
                        ptr++;
                }
-               if (PG_NARGS() > 4)
-               {
-                       /*
-                        * Function called from query extracting
-                        */
-                       Pointer   **extra_data = (Pointer **) PG_GETARG_POINTER(4);
-
-                       *extra_data = (Pointer *) palloc0(sizeof(Pointer) * (*nentries));
-
-                       *(int32 *) (*extra_data) = trglen;
-               }
        }
 
        PG_RETURN_POINTER(entries);
@@ -70,30 +61,29 @@ Datum
 gin_trgm_consistent(PG_FUNCTION_ARGS)
 {
        bool       *check = (bool *) PG_GETARG_POINTER(0);
-
        /* StrategyNumber strategy = PG_GETARG_UINT16(1); */
        /* text    *query = PG_GETARG_TEXT_P(2); */
-       /* int32        nkeys = PG_GETARG_INT32(3); */
-       Pointer    *extra_data = (Pointer *) PG_GETARG_POINTER(4);
+       int32           nkeys = PG_GETARG_INT32(3);
+       /* Pointer    *extra_data = (Pointer *) PG_GETARG_POINTER(4); */
        bool       *recheck = (bool *) PG_GETARG_POINTER(5);
        bool            res = FALSE;
-       int4            i,
-                               trglen,
+       int32           i,
                                ntrue = 0;
 
        /* All cases served by this function are inexact */
        *recheck = true;
 
-       trglen = *(int32 *) extra_data;
-
-       for (i = 0; i < trglen; i++)
+       /* Count the matches */
+       for (i = 0; i < nkeys; i++)
+       {
                if (check[i])
                        ntrue++;
+       }
 
 #ifdef DIVUNION
-       res = (trglen == ntrue) ? true : ((((((float4) ntrue) / ((float4) (trglen - ntrue)))) >= trgm_limit) ? true : false);
+       res = (nkeys == ntrue) ? true : ((((((float4) ntrue) / ((float4) (nkeys - ntrue)))) >= trgm_limit) ? true : false);
 #else
-       res = (trglen == 0) ? false : ((((((float4) ntrue) / ((float4) trglen))) >= trgm_limit) ? true : false);
+       res = (nkeys == 0) ? false : ((((((float4) ntrue) / ((float4) nkeys))) >= trgm_limit) ? true : false);
 #endif
 
        PG_RETURN_BOOL(res);