Re: pgsql: Generalize hash and ordering support in amapi
От | Mark Dilger |
---|---|
Тема | Re: pgsql: Generalize hash and ordering support in amapi |
Дата | |
Msg-id | CAHgHdKu0xiwifh=z0oecKR9+anyJZvjRwFkDiTENWS9tz8qm_A@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: pgsql: Generalize hash and ordering support in amapi (Peter Eisentraut <peter@eisentraut.org>) |
Список | 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.)
- * 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.)
- * 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.
В списке pgsql-committers по дате отправления: