diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2000-04-16 04:41:03 +0000 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2000-04-16 04:41:03 +0000 |
| commit | 82849df6c637c09fe484ed11e1035c158f128e81 (patch) | |
| tree | ddb8f0f3af666ad331ae05498bd039d2e65e783f /src/include/utils/builtins.h | |
| parent | 8c3b52e7b2d90a35be1370a10fcf02218fa4ae99 (diff) | |
| download | postgresql-82849df6c637c09fe484ed11e1035c158f128e81.tar.gz | |
Add new selectivity estimation functions for pattern-matching operators
(LIKE and regexp matches). These are not yet referenced in pg_operator,
so by default the system will continue to use eqsel/neqsel.
Also, tweak convert_to_scalar() logic so that common prefixes of strings
are stripped off, allowing better accuracy when all strings in a table
share a common prefix.
Diffstat (limited to 'src/include/utils/builtins.h')
| -rw-r--r-- | src/include/utils/builtins.h | 68 |
1 files changed, 58 insertions, 10 deletions
diff --git a/src/include/utils/builtins.h b/src/include/utils/builtins.h index 80d91aba75..16bff65054 100644 --- a/src/include/utils/builtins.h +++ b/src/include/utils/builtins.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: builtins.h,v 1.110 2000/04/12 17:16:54 momjian Exp $ + * $Id: builtins.h,v 1.111 2000/04/16 04:41:03 tgl Exp $ * * NOTES * This should normally only be included by fmgr.h. @@ -371,15 +371,47 @@ extern char *deparse_expression(Node *expr, List *rangetables, bool forceprefix); /* selfuncs.c */ -extern float64 eqsel(Oid opid, Oid relid, AttrNumber attno, Datum value, int32 flag); -extern float64 neqsel(Oid opid, Oid relid, AttrNumber attno, Datum value, int32 flag); -extern float64 scalarltsel(Oid opid, Oid relid, AttrNumber attno, Datum value, int32 flag); -extern float64 scalargtsel(Oid opid, Oid relid, AttrNumber attno, Datum value, int32 flag); -extern float64 eqjoinsel(Oid opid, Oid relid1, AttrNumber attno1, Oid relid2, AttrNumber attno2); -extern float64 neqjoinsel(Oid opid, Oid relid1, AttrNumber attno1, Oid relid2, AttrNumber attno2); -extern float64 scalarltjoinsel(Oid opid, Oid relid1, AttrNumber attno1, Oid relid2, AttrNumber attno2); -extern float64 scalargtjoinsel(Oid opid, Oid relid1, AttrNumber attno1, Oid relid2, AttrNumber attno2); -extern bool convert_to_scalar(Datum value, Oid typid, double *scaleval); +extern float64 eqsel(Oid opid, Oid relid, AttrNumber attno, + Datum value, int32 flag); +extern float64 neqsel(Oid opid, Oid relid, AttrNumber attno, + Datum value, int32 flag); +extern float64 scalarltsel(Oid opid, Oid relid, AttrNumber attno, + Datum value, int32 flag); +extern float64 scalargtsel(Oid opid, Oid relid, AttrNumber attno, + Datum value, int32 flag); +extern float64 regexeqsel(Oid opid, Oid relid, AttrNumber attno, + Datum value, int32 flag); +extern float64 likesel(Oid opid, Oid relid, AttrNumber attno, + Datum value, int32 flag); +extern float64 icregexeqsel(Oid opid, Oid relid, AttrNumber attno, + Datum value, int32 flag); +extern float64 regexnesel(Oid opid, Oid relid, AttrNumber attno, + Datum value, int32 flag); +extern float64 nlikesel(Oid opid, Oid relid, AttrNumber attno, + Datum value, int32 flag); +extern float64 icregexnesel(Oid opid, Oid relid, AttrNumber attno, + Datum value, int32 flag); + +extern float64 eqjoinsel(Oid opid, Oid relid1, AttrNumber attno1, + Oid relid2, AttrNumber attno2); +extern float64 neqjoinsel(Oid opid, Oid relid1, AttrNumber attno1, + Oid relid2, AttrNumber attno2); +extern float64 scalarltjoinsel(Oid opid, Oid relid1, AttrNumber attno1, + Oid relid2, AttrNumber attno2); +extern float64 scalargtjoinsel(Oid opid, Oid relid1, AttrNumber attno1, + Oid relid2, AttrNumber attno2); +extern float64 regexeqjoinsel(Oid opid, Oid relid1, AttrNumber attno1, + Oid relid2, AttrNumber attno2); +extern float64 likejoinsel(Oid opid, Oid relid1, AttrNumber attno1, + Oid relid2, AttrNumber attno2); +extern float64 icregexeqjoinsel(Oid opid, Oid relid1, AttrNumber attno1, + Oid relid2, AttrNumber attno2); +extern float64 regexnejoinsel(Oid opid, Oid relid1, AttrNumber attno1, + Oid relid2, AttrNumber attno2); +extern float64 nlikejoinsel(Oid opid, Oid relid1, AttrNumber attno1, + Oid relid2, AttrNumber attno2); +extern float64 icregexnejoinsel(Oid opid, Oid relid1, AttrNumber attno1, + Oid relid2, AttrNumber attno2); extern void btcostestimate(Query *root, RelOptInfo *rel, IndexOptInfo *index, List *indexQuals, @@ -402,6 +434,22 @@ extern void gistcostestimate(Query *root, RelOptInfo *rel, Cost *indexTotalCost, Selectivity *indexSelectivity); +typedef enum +{ + Pattern_Type_Like, Pattern_Type_Regex, Pattern_Type_Regex_IC +} Pattern_Type; + +typedef enum +{ + Pattern_Prefix_None, Pattern_Prefix_Partial, Pattern_Prefix_Exact +} Pattern_Prefix_Status; + +extern Pattern_Prefix_Status pattern_fixed_prefix(char *patt, + Pattern_Type ptype, + char **prefix, + char **rest); +extern char *make_greater_string(const char *str, Oid datatype); + /* tid.c */ extern ItemPointer tidin(const char *str); extern char *tidout(ItemPointer itemPtr); |
