mirror of
https://github.com/postgres/postgres.git
synced 2025-11-19 13:42:17 +03:00
Partially undo commit 94da73281.
On closer inspection, mcv.c isn't as broken for ScalarArrayOpExpr as I thought. The Var-on-right issue is real enough, but actually it does cope fine with a NULL array constant --- I was misled by an XXX comment suggesting it didn't. Undo that part of the code change, and replace the XXX comment with something less misleading.
This commit is contained in:
@@ -1740,17 +1740,24 @@ mcv_get_match_bitmap(PlannerInfo *root, List *clauses,
|
||||
if (!examine_opclause_args(expr->args, &clause_expr, &cst, &expronleft))
|
||||
elog(ERROR, "incompatible clause");
|
||||
|
||||
/* We expect Var on left and non-null constant on right */
|
||||
if (!expronleft || cst->constisnull)
|
||||
/* We expect Var on left */
|
||||
if (!expronleft)
|
||||
elog(ERROR, "incompatible clause");
|
||||
|
||||
arrayval = DatumGetArrayTypeP(cst->constvalue);
|
||||
get_typlenbyvalalign(ARR_ELEMTYPE(arrayval),
|
||||
&elmlen, &elmbyval, &elmalign);
|
||||
deconstruct_array(arrayval,
|
||||
ARR_ELEMTYPE(arrayval),
|
||||
elmlen, elmbyval, elmalign,
|
||||
&elem_values, &elem_nulls, &num_elems);
|
||||
/*
|
||||
* Deconstruct the array constant, unless it's NULL (we'll cover
|
||||
* that case below)
|
||||
*/
|
||||
if (!cst->constisnull)
|
||||
{
|
||||
arrayval = DatumGetArrayTypeP(cst->constvalue);
|
||||
get_typlenbyvalalign(ARR_ELEMTYPE(arrayval),
|
||||
&elmlen, &elmbyval, &elmalign);
|
||||
deconstruct_array(arrayval,
|
||||
ARR_ELEMTYPE(arrayval),
|
||||
elmlen, elmbyval, elmalign,
|
||||
&elem_values, &elem_nulls, &num_elems);
|
||||
}
|
||||
|
||||
/* match the attribute/expression to a dimension of the statistic */
|
||||
idx = mcv_match_expression(clause_expr, keys, exprs, &collid);
|
||||
|
||||
Reference in New Issue
Block a user