* Determines if the expression is compatible with functional dependencies
*
* Similar to dependency_is_compatible_clause, but doesn't enforce that the
- * expression is a simple Var. OTOH we check that there's at least one
- * statistics object matching the expression.
+ * expression is a simple Var. On success, return the matching statistics
+ * expression into *expr.
*/
static bool
dependency_is_compatible_expression(Node *clause, Index relid, List *statlist, Node **expr)
{
- List *vars;
ListCell *lc,
*lc2;
Node *clause_expr;
if (IsA(clause_expr, RelabelType))
clause_expr = (Node *) ((RelabelType *) clause_expr)->arg;
- vars = pull_var_clause(clause_expr, 0);
-
- foreach(lc, vars)
- {
- Var *var = (Var *) lfirst(lc);
-
- /* Ensure Var is from the correct relation */
- if (var->varno != relid)
- return false;
-
- /* We also better ensure the Var is from the current level */
- if (var->varlevelsup != 0)
- return false;
-
- /* Also ignore system attributes (we don't allow stats on those) */
- if (!AttrNumberIsForUserDefinedAttr(var->varattno))
- return false;
- }
-
/*
- * Check if we actually have a matching statistics for the expression.
- *
- * XXX Maybe this is an overkill. We'll eliminate the expressions later.
+ * Search for a matching statistics expression.
*/
foreach(lc, statlist)
{