Add a planner support function for starts_with().
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 17 Nov 2021 21:54:12 +0000 (16:54 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 17 Nov 2021 21:54:12 +0000 (16:54 -0500)
commita148f8bc04b9980f019ea0d4b89311cf0bdc22b7
tree58867cab7541cf8f150fd5ac4135233ef4b653e3
parent248c3a937dd018a72095f407cff727c9f08db0c1
Add a planner support function for starts_with().

This fills in some gaps in planner support for starts_with() and
the equivalent ^@ operator:

* A condition such as "textcol ^@ constant" can now use a regular
btree index, not only an SP-GiST index, so long as the index's
collation is C.  (This works just like "textcol LIKE 'foo%'".)

* "starts_with(textcol, constant)" can be optimized the same as
"textcol ^@ constant".

* Fixed-prefix LIKE and regex patterns are now more like starts_with()
in another way: if you apply one to an SPGiST-indexed column, you'll
get an index condition using ^@ rather than two index conditions with
>= and <.

Per a complaint from Shay Rojansky.  Patch by me; thanks to
Nathan Bossart for review.

Discussion: https://postgr.es/m/232599.1633800229@sss.pgh.pa.us
src/backend/utils/adt/like_support.c
src/include/catalog/catversion.h
src/include/catalog/pg_operator.dat
src/include/catalog/pg_proc.dat
src/test/regress/expected/create_index_spgist.out
src/test/regress/sql/create_index_spgist.sql