diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2019-02-14 10:51:59 -0500 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2019-02-14 10:51:59 -0500 |
commit | 49fa99e54ec0ded180b52a4a14e543702d53e8c9 (patch) | |
tree | 64af70fc403c2354c5b05106d2afb5bb465142ad /src/include | |
parent | 109de05cbb034b032cd60f50708716c8ff0afdf2 (diff) |
Move pattern selectivity code from selfuncs.c to like_support.c.
While at it, refactor patternsel() a bit so that it can be used from
the LIKE/regex planner support functions as well. This makes the
planner able to deal equally well with either operator or function
syntax for these operations. I'm not excited about that as a feature
in itself, but it provides a nice model for extensions to follow if
they want such behavior for their operations.
This change localizes the use of pattern_fixed_prefix() and
make_greater_string() so that they no longer need be exported.
(We might get pushback from extensions about that, perhaps,
in which case I'd be inclined to re-export them in a new header
file like_support.h.)
This reduces the bulk of selfuncs.c a fair amount, removing ~1370
lines or about one-sixth of that file; it's still too big, but this
is progress.
Discussion: https://postgr.es/m/24537.1550093915@sss.pgh.pa.us
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/utils/selfuncs.h | 33 |
1 files changed, 10 insertions, 23 deletions
diff --git a/src/include/utils/selfuncs.h b/src/include/utils/selfuncs.h index 087b56f917e..8829889f9f5 100644 --- a/src/include/utils/selfuncs.h +++ b/src/include/utils/selfuncs.h @@ -15,7 +15,6 @@ #ifndef SELFUNCS_H #define SELFUNCS_H -#include "fmgr.h" #include "access/htup.h" #include "nodes/pathnodes.h" @@ -85,20 +84,6 @@ typedef struct VariableStatData } while(0) -typedef enum -{ - Pattern_Type_Like, - Pattern_Type_Like_IC, - Pattern_Type_Regex, - Pattern_Type_Regex_IC, - Pattern_Type_Prefix -} Pattern_Type; - -typedef enum -{ - Pattern_Prefix_None, Pattern_Prefix_Partial, Pattern_Prefix_Exact -} Pattern_Prefix_Status; - /* * deconstruct_indexquals is a simple function to examine the indexquals * attached to a proposed IndexPath. It returns a list of IndexQualInfo @@ -175,14 +160,16 @@ extern double histogram_selectivity(VariableStatData *vardata, FmgrInfo *opproc, Datum constval, bool varonleft, int min_hist_size, int n_skip, int *hist_size); - -extern Pattern_Prefix_Status pattern_fixed_prefix(Const *patt, - Pattern_Type ptype, - Oid collation, - Const **prefix, - Selectivity *rest_selec); -extern Const *make_greater_string(const Const *str_const, FmgrInfo *ltproc, - Oid collation); +extern double ineq_histogram_selectivity(PlannerInfo *root, + VariableStatData *vardata, + FmgrInfo *opproc, bool isgt, bool iseq, + Datum constval, Oid consttype); +extern double var_eq_const(VariableStatData *vardata, Oid oproid, + Datum constval, bool constisnull, + bool varonleft, bool negate); +extern double var_eq_non_const(VariableStatData *vardata, Oid oproid, + Node *other, + bool varonleft, bool negate); extern Selectivity boolvarsel(PlannerInfo *root, Node *arg, int varRelid); extern Selectivity booltestsel(PlannerInfo *root, BoolTestType booltesttype, |