From d9335e86fc37dfd9d2c810ec4e03df9fa10c2b81 Mon Sep 17 00:00:00 2001 From: Amit Langote Date: Mon, 24 Mar 2025 21:17:46 +0900 Subject: [PATCH v6 1/3] Add assertion to verify derived clause has constant RHS find_derived_clause_for_ec_member() searches for a previously-derived clause that equates a non-constant EquivalenceMember to a constant. It is only called for EquivalenceClasses with ec_has_const set, and with a non-constant member as the target. The matched clause is expected to have the non-constant member on the left-hand side and the constant EquivalenceMember on the right. Assert that the RHS is indeed a constant, to catch violations of this structure and enforce assumptions made by generate_base_implied_equalities_const(). Author: Ashutosh Bapat Discussion: https://postgr.es/m/CAExHW5scMxyFRqOFE6ODmBiW2rnVBEmeEcA-p4W_CyuEikURdA@mail.gmail.com --- src/backend/optimizer/path/equivclass.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/backend/optimizer/path/equivclass.c b/src/backend/optimizer/path/equivclass.c index 0f9ecf5ee8b..493a95d26cc 100644 --- a/src/backend/optimizer/path/equivclass.c +++ b/src/backend/optimizer/path/equivclass.c @@ -2664,7 +2664,10 @@ find_derived_clause_for_ec_member(EquivalenceClass *ec, * members on the left side of derived clauses. */ if (rinfo->left_em == em) + { + Assert(rinfo->right_em->em_is_const); return rinfo; + } } return NULL; } -- 2.43.0