diff options
author | Tomas Vondra <tomas.vondra@postgresql.org> | 2019-07-13 00:12:16 +0200 |
---|---|---|
committer | Tomas Vondra <tomas.vondra@postgresql.org> | 2019-07-18 11:30:12 +0200 |
commit | 42276976a1437c88fb6176fc1a876fd79a139eb0 (patch) | |
tree | 6d9a7f134784361070c3b2900915aef8ddf4c779 /src/include/statistics/extended_stats_internal.h | |
parent | 3944e855bc5bee32d99a9ba2245a026d4bafe282 (diff) |
Fix handling of opclauses in extended statistics
We expect opclauses to have exactly one Var and one Const, but the code
was checking the Const by calling is_pseudo_constant_clause() which is
incorrect - we need a proper constant.
Fixed by using plain IsA(x,Const) to check type of the node. We need to
do these checks in two places, so move it into a separate function that
can be called in both places.
Reported by Andreas Seltenreich, based on crash reported by sqlsmith.
Backpatch to v12, where this code was introduced.
Discussion: https://postgr.es/m/8736jdhbhc.fsf%40ansel.ydns.eu
Backpatch-to: 12
Diffstat (limited to 'src/include/statistics/extended_stats_internal.h')
-rw-r--r-- | src/include/statistics/extended_stats_internal.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/include/statistics/extended_stats_internal.h b/src/include/statistics/extended_stats_internal.h index 8fc541993fa..c7f01d4edc7 100644 --- a/src/include/statistics/extended_stats_internal.h +++ b/src/include/statistics/extended_stats_internal.h @@ -97,6 +97,8 @@ extern SortItem *build_sorted_items(int numrows, int *nitems, HeapTuple *rows, TupleDesc tdesc, MultiSortSupport mss, int numattrs, AttrNumber *attnums); +extern bool examine_opclause_expression(OpExpr *expr, Var **varp, + Const **cstp, bool *isgtp); extern Selectivity mcv_clauselist_selectivity(PlannerInfo *root, StatisticExtInfo *stat, |