aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/adt/selfuncs.c28
-rw-r--r--src/include/utils/selfuncs.h5
2 files changed, 17 insertions, 16 deletions
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
index 17817c0ef3e..082089b9f11 100644
--- a/src/backend/utils/adt/selfuncs.c
+++ b/src/backend/utils/adt/selfuncs.c
@@ -15,7 +15,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/adt/selfuncs.c,v 1.202 2006/04/27 00:46:58 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/selfuncs.c,v 1.203 2006/04/27 17:52:40 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -420,7 +420,7 @@ scalarineqsel(PlannerInfo *root, Oid operator, bool isgt,
* to the result selectivity. Also add up the total fraction represented
* by MCV entries.
*/
- mcv_selec = mcv_selectivity(vardata, &opproc, constval,
+ mcv_selec = mcv_selectivity(vardata, &opproc, constval, true,
&sumcommon);
/*
@@ -460,16 +460,17 @@ scalarineqsel(PlannerInfo *root, Oid operator, bool isgt,
* mcv_selectivity - Examine the MCV list for scalarineqsel
*
* Determine the fraction of the variable's MCV population that satisfies
- * the predicate (VAR OP CONST), as well as the fraction of the total column
- * population represented by the MCV list. This code will work for any
- * boolean-returning predicate operator.
+ * the predicate (VAR OP CONST), or (CONST OP VAR) if !varonleft. Also
+ * compute the fraction of the total column population represented by the MCV
+ * list. This code will work for any boolean-returning predicate operator.
*
* The function result is the MCV selectivity, and the fraction of the
* total population is returned into *sumcommonp. Zeroes are returned
* if there is no MCV list.
*/
double
-mcv_selectivity(VariableStatData *vardata, FmgrInfo *opproc, Datum constval,
+mcv_selectivity(VariableStatData *vardata, FmgrInfo *opproc,
+ Datum constval, bool varonleft,
double *sumcommonp)
{
double mcv_selec,
@@ -483,11 +484,6 @@ mcv_selectivity(VariableStatData *vardata, FmgrInfo *opproc, Datum constval,
mcv_selec = 0.0;
sumcommon = 0.0;
- /*
- * If we have most-common-values info, add up the fractions of the MCV
- * entries that satisfy MCV OP CONST. Also add up the total fraction
- * represented by MCV entries.
- */
if (HeapTupleIsValid(vardata->statsTuple) &&
get_attstatsslot(vardata->statsTuple,
vardata->atttype, vardata->atttypmod,
@@ -497,9 +493,13 @@ mcv_selectivity(VariableStatData *vardata, FmgrInfo *opproc, Datum constval,
{
for (i = 0; i < nvalues; i++)
{
- if (DatumGetBool(FunctionCall2(opproc,
+ if (varonleft ?
+ DatumGetBool(FunctionCall2(opproc,
values[i],
- constval)))
+ constval)) :
+ DatumGetBool(FunctionCall2(opproc,
+ constval,
+ values[i])))
mcv_selec += numbers[i];
sumcommon += numbers[i];
}
@@ -1018,7 +1018,7 @@ patternsel(PG_FUNCTION_ARGS, Pattern_Type ptype)
* represented by MCV entries.
*/
fmgr_info(get_opcode(operator), &opproc);
- mcv_selec = mcv_selectivity(&vardata, &opproc, constval,
+ mcv_selec = mcv_selectivity(&vardata, &opproc, constval, true,
&sumcommon);
/*
diff --git a/src/include/utils/selfuncs.h b/src/include/utils/selfuncs.h
index 9ba11c99ae5..723ae07092d 100644
--- a/src/include/utils/selfuncs.h
+++ b/src/include/utils/selfuncs.h
@@ -8,7 +8,7 @@
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/utils/selfuncs.h,v 1.31 2006/04/27 00:46:59 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/utils/selfuncs.h,v 1.32 2006/04/27 17:52:40 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -108,7 +108,8 @@ extern void get_join_variables(PlannerInfo *root, List *args,
VariableStatData *vardata2);
extern double get_variable_numdistinct(VariableStatData *vardata);
extern double mcv_selectivity(VariableStatData *vardata, FmgrInfo *opproc,
- Datum constval, double *sumcommonp);
+ Datum constval, bool varonleft,
+ double *sumcommonp);
extern Pattern_Prefix_Status pattern_fixed_prefix(Const *patt,
Pattern_Type ptype,