Unset SK_SEARCHARRAY when inequality arrays degenerate.

Initial array-specific preprocessing in _bt_preprocess_array_keys
transforms inequality strategy SK_SEARCHARRAY scan keys into simple
scalar scan keys, whose sk_argument contains the array's most
restrictive element.  The transformed keys nevertheless retained their
SK_SEARCHARRAY markings.  This approach left it up to everybody else to
determine whether any given SK_SEARCHARRAY-marked key was an equality
strategy key (which actually has an array) or an inequality key (which
no longer has one).

Simplify things by teaching preprocessing to unset SK_SEARCHARRAY from
the flags for inequality scan keys, at the point where it already sets
the key's sk_argument to a simple scalar datum.  This makes it safe for
code that runs after array preprocessing to assume that any key marked
SK_SEARCHARRAY must be an equality key.

This also fixes a minor inconsistency: _bt_advance_array_keys's precheck
of the least significant key was skipped when that key came from a SAOP
inequality, even though we were willing to apply that optimization given
an inequality that had a scalar argument before preprocessing.

Author: Peter Geoghegan <[email protected]>
Discussion: 
https://postgr.es/m/cah2-wznnuuh-fh84d60uhmdo4ro0mio4_8dgvhxbo1yl0ew...@mail.gmail.com
Discussion: 
https://postgr.es/m/CAH2-Wznvj74CAwVydAs_Lh1hR3PGi_aN1s7BiRKE0iJYNdoixQ%40mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/1d45c5da3a0ad22b8e172da352ed25bd70a2253a

Modified Files
--------------
src/backend/access/nbtree/nbtpreprocesskeys.c | 28 ++++++++---------
src/backend/access/nbtree/nbtreadpage.c       | 45 +++++++++++++--------------
2 files changed, 36 insertions(+), 37 deletions(-)

Reply via email to