Commit 49fa99e5 authored by Tom Lane's avatar Tom Lane

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
parent 109de05c
This diff is collapsed.
This diff is collapsed.
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
#ifndef SELFUNCS_H #ifndef SELFUNCS_H
#define SELFUNCS_H #define SELFUNCS_H
#include "fmgr.h"
#include "access/htup.h" #include "access/htup.h"
#include "nodes/pathnodes.h" #include "nodes/pathnodes.h"
...@@ -85,20 +84,6 @@ typedef struct VariableStatData ...@@ -85,20 +84,6 @@ typedef struct VariableStatData
} while(0) } 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 * deconstruct_indexquals is a simple function to examine the indexquals
* attached to a proposed IndexPath. It returns a list of IndexQualInfo * attached to a proposed IndexPath. It returns a list of IndexQualInfo
...@@ -175,14 +160,16 @@ extern double histogram_selectivity(VariableStatData *vardata, FmgrInfo *opproc, ...@@ -175,14 +160,16 @@ extern double histogram_selectivity(VariableStatData *vardata, FmgrInfo *opproc,
Datum constval, bool varonleft, Datum constval, bool varonleft,
int min_hist_size, int n_skip, int min_hist_size, int n_skip,
int *hist_size); int *hist_size);
extern double ineq_histogram_selectivity(PlannerInfo *root,
extern Pattern_Prefix_Status pattern_fixed_prefix(Const *patt, VariableStatData *vardata,
Pattern_Type ptype, FmgrInfo *opproc, bool isgt, bool iseq,
Oid collation, Datum constval, Oid consttype);
Const **prefix, extern double var_eq_const(VariableStatData *vardata, Oid oproid,
Selectivity *rest_selec); Datum constval, bool constisnull,
extern Const *make_greater_string(const Const *str_const, FmgrInfo *ltproc, bool varonleft, bool negate);
Oid collation); 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 boolvarsel(PlannerInfo *root, Node *arg, int varRelid);
extern Selectivity booltestsel(PlannerInfo *root, BoolTestType booltesttype, extern Selectivity booltestsel(PlannerInfo *root, BoolTestType booltesttype,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment