mirror of
https://github.com/postgres/postgres.git
synced 2025-09-06 13:46:51 +03:00
Add prefix operator for TEXT type.
The prefix operator along with SP-GiST indexes can be used as an alternative for LIKE 'word%' commands and it doesn't have a limitation of string/prefix length as B-Tree has. Bump catalog version Author: Ildus Kurbangaliev with some editorization by me Review by: Arthur Zakirov, Alexander Korotkov, and me Discussion: https://www.postgresql.org/message-id/flat/20180202180327.222b04b3@wp.localdomain
This commit is contained in:
@@ -1488,6 +1488,16 @@ likesel(PG_FUNCTION_ARGS)
|
||||
}
|
||||
|
||||
/*
|
||||
* prefixsel - selectivity of prefix operator
|
||||
*/
|
||||
Datum
|
||||
prefixsel(PG_FUNCTION_ARGS)
|
||||
{
|
||||
PG_RETURN_FLOAT8(patternsel(fcinfo, Pattern_Type_Prefix, false));
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* iclikesel - Selectivity of ILIKE pattern match.
|
||||
*/
|
||||
Datum
|
||||
@@ -2906,6 +2916,15 @@ likejoinsel(PG_FUNCTION_ARGS)
|
||||
PG_RETURN_FLOAT8(patternjoinsel(fcinfo, Pattern_Type_Like, false));
|
||||
}
|
||||
|
||||
/*
|
||||
* prefixjoinsel - Join selectivity of prefix operator
|
||||
*/
|
||||
Datum
|
||||
prefixjoinsel(PG_FUNCTION_ARGS)
|
||||
{
|
||||
PG_RETURN_FLOAT8(patternjoinsel(fcinfo, Pattern_Type_Prefix, false));
|
||||
}
|
||||
|
||||
/*
|
||||
* iclikejoinsel - Join selectivity of ILIKE pattern match.
|
||||
*/
|
||||
@@ -5947,6 +5966,20 @@ pattern_fixed_prefix(Const *patt, Pattern_Type ptype, Oid collation,
|
||||
result = regex_fixed_prefix(patt, true, collation,
|
||||
prefix, rest_selec);
|
||||
break;
|
||||
case Pattern_Type_Prefix:
|
||||
/* Prefix type work is trivial. */
|
||||
result = Pattern_Prefix_Partial;
|
||||
*rest_selec = 1.0; /* all */
|
||||
*prefix = makeConst(patt->consttype,
|
||||
patt->consttypmod,
|
||||
patt->constcollid,
|
||||
patt->constlen,
|
||||
datumCopy(patt->constvalue,
|
||||
patt->constbyval,
|
||||
patt->constlen),
|
||||
patt->constisnull,
|
||||
patt->constbyval);
|
||||
break;
|
||||
default:
|
||||
elog(ERROR, "unrecognized ptype: %d", (int) ptype);
|
||||
result = Pattern_Prefix_None; /* keep compiler quiet */
|
||||
|
Reference in New Issue
Block a user