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(-)
