This function should return an estimation of the number of rows returned by a query involving an overlap check ( it's the restrict function for the && operator )
It can make use (if available) of the statistics collected by the geometry analyzer function.
2231 VariableStatData vardata;
2237 float8 selectivity = 0;
2240 POSTGIS_DEBUGF(2,
"%s: entered function", __func__);
2242 if (!get_restriction_variable(root,
args, varRelid, &vardata, &other, &varonleft))
2244 POSTGIS_DEBUGF(2,
"%s: could not find vardata", __func__);
2248 if (!IsA(other, Const))
2250 ReleaseVariableStats(vardata);
2251 POSTGIS_DEBUGF(2,
"%s: no constant argument, returning default selectivity %g", __func__,
DEFAULT_ND_SEL);
2255 otherConst = (Const*)other;
2256 if ((!otherConst) || otherConst->constisnull)
2258 ReleaseVariableStats(vardata);
2259 POSTGIS_DEBUGF(2,
"%s: constant argument is NULL", __func__);
2263 if (!gserialized_datum_get_gbox_p(otherConst->constvalue, &search_box))
2265 ReleaseVariableStats(vardata);
2266 POSTGIS_DEBUGF(2,
"%s: search box is EMPTY", __func__);
2270 if (!vardata.statsTuple)
2272 POSTGIS_DEBUGF(1,
"%s: no statistics available on table. Empty? Need to ANALYZE?", __func__);
2277 ReleaseVariableStats(vardata);
static float8 estimate_selectivity(const GBOX *box, const ND_STATS *nd_stats, int mode)
This function returns an estimate of the selectivity of a search GBOX by looking at data in the ND_ST...
#define DEFAULT_ND_SEL
Default geometry selectivity factor.
static ND_STATS * pg_nd_stats_from_tuple(HeapTuple stats_tuple, int mode)
N-dimensional statistics structure.