Revert gincostestimate changes.
authorTeodor Sigaev
Wed, 31 Jan 2007 16:54:51 +0000 (16:54 +0000)
committerTeodor Sigaev
Wed, 31 Jan 2007 16:54:51 +0000 (16:54 +0000)
src/backend/utils/adt/selfuncs.c

index e035557ff2c3c985a2edaef0f656327fa2665c37..7908ab15167a74ddf34a705fd33458d45b027f67 100644 (file)
@@ -15,7 +15,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/utils/adt/selfuncs.c,v 1.224 2007/01/31 15:09:45 teodor Exp $
+ *   $PostgreSQL: pgsql/src/backend/utils/adt/selfuncs.c,v 1.225 2007/01/31 16:54:51 teodor Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -76,7 +76,6 @@
 #include 
 #include 
 
-#include "access/gin.h"
 #include "catalog/pg_opfamily.h"
 #include "catalog/pg_statistic.h"
 #include "catalog/pg_type.h"
@@ -5287,119 +5286,6 @@ gincostestimate(PG_FUNCTION_ARGS)
    Cost       *indexTotalCost = (Cost *) PG_GETARG_POINTER(5);
    Selectivity *indexSelectivity = (Selectivity *) PG_GETARG_POINTER(6);
    double     *indexCorrelation = (double *) PG_GETARG_POINTER(7);
-   ListCell   *l;
-   int32       nfullscan = 0;
-
-   /*
-    * GIN doesn't support full index scan.
-    * If quals require full index scan then we should
-    * return cost big as possible to forbid full index scan.
-    */
-
-   foreach(l, indexQuals)
-   {
-       RestrictInfo *rinfo = (RestrictInfo *) lfirst(l);
-       Expr       *clause;
-       Node       *leftop,
-                  *rightop,
-                  *operand;
-       Oid         extractProcOid;
-       Oid         clause_op;
-       int         strategy_op;
-       Oid         lefttype, 
-                   righttype;
-       bool        recheck;
-       int32       nentries;
-
-       /*
-        * For each clause it's needed to check operand
-        * for values to search in GIN. So, we should find 
-        * extractQuery method to get values from operand
-        */
-
-       Assert(IsA(rinfo, RestrictInfo));
-       clause = rinfo->clause;
-       Assert( IsA(clause, OpExpr) );
-       leftop = get_leftop(clause);
-       rightop = get_rightop(clause);
-       clause_op = ((OpExpr *) clause)->opno;
-
-       if (match_index_to_operand(leftop, 0 /* GiN has only one column */, index))
-       {
-           operand = rightop;
-       }
-       else if (match_index_to_operand(rightop, 0, index))
-       {
-           operand = leftop;
-           clause_op = get_commutator(clause_op);
-       }
-
-       if ( IsA(operand, RelabelType) )
-           operand = (Node *) ((RelabelType *) operand)->arg;
-
-       /*
-        * It's impossible to call extractQuery method for not yet
-        * known operand (taken from table, for example). In this
-        * case we can't do anything useful...
-        */
-       if ( !IsA(operand, Const) )
-           continue;
-
-       if (!op_in_opfamily(clause_op, index->opfamily[0]))
-           continue;
-
-       /*
-        * lefttype is a type of index column, righttype is a
-        * type of operand (query)
-        */
-       get_op_opfamily_properties( clause_op, index->opfamily[0],
-                                   &strategy_op, &lefttype, &righttype, &recheck);
-
-       /* 
-        * GIN (as GiST) always has lefttype == righttype in pg_amproc
-        * and they are equal to type Oid on which index was created/designed
-        */
-       extractProcOid = get_opfamily_proc( index->opfamily[0],
-                                           lefttype, lefttype, 
-                                           GIN_EXTRACTQUERY_PROC );
-
-       if ( !OidIsValid(extractProcOid) )
-           continue; /* should not be */
-
-       OidFunctionCall3( extractProcOid,
-                           ((Const*)operand)->constvalue,
-                           PointerGetDatum(&nentries),
-                           UInt16GetDatum(strategy_op));
-
-       if ( nentries == 0 )
-           nfullscan++;
-       else if ( nentries < 0 )
-       {
-           /*
-            * GIN_EXTRACTQUERY_PROC guarantees that nothing will be found
-            */
-           *indexStartupCost = 0;
-           *indexTotalCost = 0;
-           *indexSelectivity = 0;
-           *indexCorrelation = 0;
-           PG_RETURN_VOID();
-       }
-   }
-
-   if ( nfullscan == list_length(indexQuals) )
-   {
-       /*
-        * All quals are void and require full scan. So
-        * set max possible cost to prevent index scan.
-        */
-       *indexStartupCost = disable_cost;
-       *indexTotalCost = disable_cost;
-       *indexSelectivity = 1.0;
-       *indexCorrelation = 0;
-
-       PG_RETURN_VOID();
-   }
-
    
    genericcostestimate(root, index, indexQuals, outer_rel, 0.0,
                        indexStartupCost, indexTotalCost,