On Tue, Mar 4, 2025 at 8:46 AM Peter Eisentraut <pe...@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