summaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2019-02-14 10:51:59 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2019-02-14 10:51:59 -0500
commit49fa99e54ec0ded180b52a4a14e543702d53e8c9 (patch)
tree64af70fc403c2354c5b05106d2afb5bb465142ad /src/include
parent109de05cbb034b032cd60f50708716c8ff0afdf2 (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.h33
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,