diff options
Diffstat (limited to 'src/backend/utils/adt/selfuncs.c')
-rw-r--r-- | src/backend/utils/adt/selfuncs.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 31cc62d68bb..875c7c524af 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.218 2007/01/05 22:19:42 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/selfuncs.c,v 1.219 2007/01/09 02:14:14 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -5101,7 +5101,7 @@ btcostestimate(PG_FUNCTION_ARGS) if (get_attstatsslot(tuple, InvalidOid, 0, STATISTIC_KIND_CORRELATION, - index->ordering[0], + index->fwdsortop[0], NULL, NULL, &numbers, &nnumbers)) { double varCorrelation; @@ -5116,6 +5116,23 @@ btcostestimate(PG_FUNCTION_ARGS) free_attstatsslot(InvalidOid, NULL, 0, numbers, nnumbers); } + else if (get_attstatsslot(tuple, InvalidOid, 0, + STATISTIC_KIND_CORRELATION, + index->revsortop[0], + NULL, NULL, &numbers, &nnumbers)) + { + double varCorrelation; + + Assert(nnumbers == 1); + varCorrelation = numbers[0]; + + if (index->ncolumns > 1) + *indexCorrelation = - varCorrelation * 0.75; + else + *indexCorrelation = - varCorrelation; + + free_attstatsslot(InvalidOid, NULL, 0, numbers, nnumbers); + } ReleaseSysCache(tuple); } |