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 <pg@bowt.ie> Discussion: https://postgr.es/m/CAH2-WznnuUH-fH84d60UHmDo4rO0Mio4_8DGvhxBo1yL0EwPng@mail.gmail.com Discussion: https://postgr.es/m/CAH2-Wznvj74CAwVydAs_Lh1hR3PGi_aN1s7BiRKE0iJYNdoixQ%40mail.gmail.com
PostgreSQL Database Management System
This directory contains the source code distribution of the PostgreSQL database management system.
PostgreSQL is an advanced object-relational database management system that supports an extended subset of the SQL standard, including transactions, foreign keys, subqueries, triggers, user-defined types and functions. This distribution also contains C language bindings.
Copyright and license information can be found in the file COPYRIGHT.
General documentation about this version of PostgreSQL can be found at https://www.postgresql.org/docs/devel/. In particular, information about building PostgreSQL from the source code can be found at https://www.postgresql.org/docs/devel/installation.html.
The latest version of this software, and related software, may be obtained at https://www.postgresql.org/download/. For more information look at our web site located at https://www.postgresql.org/.