Re: pgsql: Generalize hash and ordering support in amapi - Mailing list pgsql-committers

From Mark Dilger
Subject Re: pgsql: Generalize hash and ordering support in amapi
Date
Msg-id CAHgHdKu0xiwifh=z0oecKR9+anyJZvjRwFkDiTENWS9tz8qm_A@mail.gmail.com
Whole thread Raw
In response to Re: pgsql: Generalize hash and ordering support in amapi  (Peter Eisentraut <peter@eisentraut.org>)
List pgsql-committers


On Tue, Mar 4, 2025 at 8:46 AM Peter Eisentraut <peter@eisentraut.org> wrote:
On 27.02.25 23:17, Mark Dilger wrote:
> The logic in equality_ops_are_compatible() was trusting that equality
> operators found in an opfamily for btree or hash were ok, but not
> trusting operators found in opfamilies of other AMs.  Now, after the
> patch, other AMs can be marked as suitable.  That's really the core of
> what the flag means:  "Can the system trust that equality operators
> found in opfamilies of the AM are well-behaved", or something like
> that.

Yeah, what might be a good English identifier for that?

>     I also object strongly to the fact that the comments for
>     equality_ops_are_compatible and comparison_ops_are_compatible
>     were not modified:
>
>       * This is trivially true if they are the same operator.  Otherwise,
>       * we look to see if they can be found in the same btree or hash
>     opfamily.
>
>       * This is trivially true if they are the same operator.  Otherwise,
>       * we look to see if they can be found in the same btree opfamily.
>
> I agree these comments need updating.

Mark, can you suggest updated wording for those?


Yes, happily, though I think I already did, in the v21 patch set.  Here is the meat of that patch:

- * This is trivially true if they are the same operator.  Otherwise,
- * we look to see if they can be found in the same btree or hash opfamily.
- * Either finding allows us to assume that they have compatible notions
- * of equality.  (The reason we need to do these pushups is that one might
- * be a cross-type operator; for instance int24eq vs int4eq.)
+ * This is trivially true if they are the same operator.  Otherwise, we look to
+ * see if they can be found in the same opfamily of an index AM which
+ * advertises amcancrosscompare.  Either finding allows us to assume that they
+ * have compatible notions of equality.  (The reason we need to do these
+ * pushups is that one might be a cross-type operator; for instance int24eq vs
+ * int4eq.)

and

- * This is trivially true if they are the same operator.  Otherwise,
- * we look to see if they can be found in the same btree opfamily.
- * For example, '<' and '>=' ops match if they belong to the same family.
+ * This is trivially true if they are the same operator.  Otherwise, we look to
+ * see if they can be found in the same opfamily of an index AM that advertises
+ * both amcancrosscompare and amcanorder.  For example, '<' and '>=' ops match
+ * if they belong to the same family.
  *
- * (This is identical to equality_ops_are_compatible(), except that we
- * don't bother to examine hash opclasses.)
+ * (This is identical to equality_ops_are_compatible(), except that we don't
+ * bother to examine opclasses for index AMs which cannot do ordering, such as
+ * the hash index AM.)

See v21-0003-Update-syscache-code-comments.patch for the whole thing, including a commit message about why this is needed.

--

Mark Dilger
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

pgsql-committers by date:

Previous
From: Peter Eisentraut
Date:
Subject: Re: pgsql: Generalize hash and ordering support in amapi
Next
From: Tomas Vondra
Date:
Subject: pgsql: Make FP_LOCK_SLOTS_PER_BACKEND look like a function