From b47e1d55d67746092c82157579626ace77b8eed8 Mon Sep 17 00:00:00 2001 From: KaiGai Kohei Date: Sat, 13 Apr 2024 20:01:36 +0900 Subject: [PATCH] arrow_fdw: unable to detect stats-hint operators if expression node was rewritten to INDEX_VAR+resno form this bug is related to #747 --- src/arrow_fdw.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/arrow_fdw.c b/src/arrow_fdw.c index 42d80057..4dc8b926 100644 --- a/src/arrow_fdw.c +++ b/src/arrow_fdw.c @@ -924,12 +924,18 @@ __buildArrowStatsOper(arrowStatsHint *as_hint, var = lsecond(op->args); arg = linitial(op->args); } - /* Is it VAR ARG form? */ + /* + * Is it VAR ARG form? + * + * MEMO: expression nodes (like Var) might be rewritten to INDEX_VAR + + * resno on the custom_scan_tlist by setrefs.c, so we should reference + * Var::varnosyn and ::varattnosyn, instead of ::varno and ::varattno. + */ if (!IsA(var, Var) || !OidIsValid(opcode)) return false; - if (var->varno != scan->scanrelid) + if (var->varnosyn != scan->scanrelid) return false; - if (!bms_is_member(var->varattno, as_hint->stat_attrs)) + if (!bms_is_member(var->varattnosyn, as_hint->stat_attrs)) return false; if (contain_var_clause(arg) || contain_volatile_functions(arg))