23#include "utils/fmgroids.h"
107 jointype, sjinfo,
true);
137 varRelid, jointype, sjinfo,
154 jointype, sjinfo, rel,
195 if (rinfo->pseudoconstant)
219 ok = (rinfo->num_base_rels == 1) &&
221 rinfo->right_relids) ||
224 rinfo->left_relids)));
294 varRelid, jointype, sjinfo);
386 jointype, sjinfo, rel,
456 if (!
rqelem->have_lobound)
458 rqelem->have_lobound =
true;
476 if (!
rqelem->have_hibound)
478 rqelem->have_hibound =
true;
502 rqelem->have_lobound =
true;
503 rqelem->have_hibound =
false;
508 rqelem->have_lobound =
false;
509 rqelem->have_hibound =
true;
597 else if (sjinfo ==
NULL)
621 return (rinfo->num_base_rels > 1);
674 jointype, sjinfo,
true);
710 if (rinfo->pseudoconstant)
728 rinfo->num_base_rels == 0 ||
729 (rinfo->num_base_rels == 1 &&
735 if (rinfo->norm_selec >= 0)
736 return rinfo->norm_selec;
740 if (rinfo->outer_selec >= 0)
741 return rinfo->outer_selec;
752 clause = (
Node *) rinfo->orclause;
765 if (
var->varlevelsup == 0 &&
766 (varRelid == 0 || varRelid == (
int)
var->varno))
777 s1 = con->constisnull ? 0.0 :
790 s1 = con->constisnull ? 0.0 :
906 ((
NullTest *) clause)->nulltesttype,
928 if (
crel->tuples > 0)
967 rinfo->norm_selec =
s1;
969 rinfo->outer_selec =
s1;
972#ifdef SELECTIVITY_DEBUG
bool bms_is_member(int x, const Bitmapset *a)
bool bms_get_singleton_member(const Bitmapset *a, int *member)
int NumRelids(PlannerInfo *root, Node *clause)
bool is_pseudo_constant_clause(Node *clause)
Node * estimate_expression_value(PlannerInfo *root, Node *node)
bool is_pseudo_constant_clause_relids(Node *clause, Relids relids)
static void addRangeClause(RangeQueryClause **rqlist, Node *clause, bool varonleft, bool isLTsel, Selectivity s2)
static RelOptInfo * find_single_rel_for_clauses(PlannerInfo *root, List *clauses)
Selectivity clause_selectivity_ext(PlannerInfo *root, Node *clause, int varRelid, JoinType jointype, SpecialJoinInfo *sjinfo, bool use_extended_stats)
Selectivity clauselist_selectivity(PlannerInfo *root, List *clauses, int varRelid, JoinType jointype, SpecialJoinInfo *sjinfo)
Selectivity clauselist_selectivity_ext(PlannerInfo *root, List *clauses, int varRelid, JoinType jointype, SpecialJoinInfo *sjinfo, bool use_extended_stats)
static bool treat_as_join_clause(PlannerInfo *root, Node *clause, RestrictInfo *rinfo, int varRelid, SpecialJoinInfo *sjinfo)
static Selectivity clauselist_selectivity_or(PlannerInfo *root, List *clauses, int varRelid, JoinType jointype, SpecialJoinInfo *sjinfo, bool use_extended_stats)
Selectivity clause_selectivity(PlannerInfo *root, Node *clause, int varRelid, JoinType jointype, SpecialJoinInfo *sjinfo)
bool equal(const void *a, const void *b)
Selectivity statext_clauselist_selectivity(PlannerInfo *root, List *clauses, int varRelid, JoinType jointype, SpecialJoinInfo *sjinfo, RelOptInfo *rel, Bitmapset **estimatedclauses, bool is_or)
#define palloc_object(type)
RegProcedure get_oprrest(Oid opno)
void pfree(void *pointer)
static bool is_andclause(const void *clause)
static bool is_orclause(const void *clause)
static Node * get_rightop(const void *clause)
static bool is_opclause(const void *clause)
static bool is_funcclause(const void *clause)
static bool is_notclause(const void *clause)
static Expr * get_notclausearg(const void *notclause)
static Node * get_leftop(const void *clause)
#define IsA(nodeptr, _type_)
static int list_length(const List *l)
Selectivity restriction_selectivity(PlannerInfo *root, Oid operatorid, List *args, Oid inputcollid, int varRelid)
Selectivity join_selectivity(PlannerInfo *root, Oid operatorid, List *args, Oid inputcollid, JoinType jointype, SpecialJoinInfo *sjinfo)
Selectivity function_selectivity(PlannerInfo *root, Oid funcid, List *args, Oid inputcollid, bool is_join, int varRelid, JoinType jointype, SpecialJoinInfo *sjinfo)
static bool DatumGetBool(Datum X)
RelOptInfo * find_base_rel(PlannerInfo *root, int relid)
Selectivity booltestsel(PlannerInfo *root, BoolTestType booltesttype, Node *arg, int varRelid, JoinType jointype, SpecialJoinInfo *sjinfo)
Selectivity nulltestsel(PlannerInfo *root, NullTestType nulltesttype, Node *arg, int varRelid, JoinType jointype, SpecialJoinInfo *sjinfo)
Selectivity boolvarsel(PlannerInfo *root, Node *arg, int varRelid)
Selectivity scalararraysel(PlannerInfo *root, ScalarArrayOpExpr *clause, bool is_join_clause, int varRelid, JoinType jointype, SpecialJoinInfo *sjinfo)
Selectivity rowcomparesel(PlannerInfo *root, RowCompareExpr *clause, int varRelid, JoinType jointype, SpecialJoinInfo *sjinfo)
#define DEFAULT_RANGE_INEQ_SEL
struct RangeQueryClause * next