Tomas Vondra <tomas.von...@2ndquadrant.com> writes:
> Yeah, that's a bug. Will fix (not sure how yet).

You could do worse than replace this:

        ok = (NumRelids(clause) == 1) &&
            (is_pseudo_constant_clause(lsecond(expr->args)) ||
             (varonleft = false,
              is_pseudo_constant_clause(linitial(expr->args))));

with something like

        if (IsA(linitial(expr->args), Var) &&
            IsA(lsecond(expr->args), Const))
           ok = true, varonleft = true;
        else if (IsA(linitial(expr->args), Const) &&
                 IsA(lsecond(expr->args), Var))
           ok = true, varonleft = false;

Or possibly get rid of varonleft as such, and merge extraction of the
"var" and "cst" variables into this test.

BTW, I bet passing a unary-argument OpExpr also makes this code
unhappy.

                        regards, tom lane


Reply via email to