mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-23 03:40:41 +02:00
Get rid of deconstruct_indexquals() in favor of just iterating over the IndexClause list directly. The extra services that that function used to provide, such as hiding clause commutation and associating the right index column with each clause, are no longer useful given the new data structure. I'd originally thought that it'd provide a useful amount of abstraction by freeing callers from paying attention to the exact clause type of each indexqual, but that hope proves to have been vain, because few callers can ignore the semantic differences between different clause types. Indeed, removing it results in a net code savings, and probably some cycles shaved by not having to build an extra list-of-structs data structure. Also, export a few formerly-static support functions, with the goal of allowing extension AMs to write functionality equivalent to genericcostestimate() without pointless code duplication. Discussion: https://postgr.es/m/24586.1550106354@sss.pgh.pa.us
46 lines
1.1 KiB
C
46 lines
1.1 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* blcost.c
|
|
* Cost estimate function for bloom indexes.
|
|
*
|
|
* Copyright (c) 2016-2019, PostgreSQL Global Development Group
|
|
*
|
|
* IDENTIFICATION
|
|
* contrib/bloom/blcost.c
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#include "postgres.h"
|
|
|
|
#include "fmgr.h"
|
|
#include "utils/selfuncs.h"
|
|
|
|
#include "bloom.h"
|
|
|
|
/*
|
|
* Estimate cost of bloom index scan.
|
|
*/
|
|
void
|
|
blcostestimate(PlannerInfo *root, IndexPath *path, double loop_count,
|
|
Cost *indexStartupCost, Cost *indexTotalCost,
|
|
Selectivity *indexSelectivity, double *indexCorrelation,
|
|
double *indexPages)
|
|
{
|
|
IndexOptInfo *index = path->indexinfo;
|
|
GenericCosts costs;
|
|
|
|
MemSet(&costs, 0, sizeof(costs));
|
|
|
|
/* We have to visit all index tuples anyway */
|
|
costs.numIndexTuples = index->tuples;
|
|
|
|
/* Use generic estimate */
|
|
genericcostestimate(root, path, loop_count, &costs);
|
|
|
|
*indexStartupCost = costs.indexStartupCost;
|
|
*indexTotalCost = costs.indexTotalCost;
|
|
*indexSelectivity = costs.indexSelectivity;
|
|
*indexCorrelation = costs.indexCorrelation;
|
|
*indexPages = costs.numIndexPages;
|
|
}
|