mirror of
https://github.com/postgres/postgres.git
synced 2025-07-02 09:02:37 +03:00
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.
This commit is contained in:
@ -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);
|
||||
|
Reference in New Issue
Block a user