@@ -485,8 +485,7 @@ rewrite_agg_tlist_mutator(Node *node, void *context)
485485 * supported — the walker/mutator handles Var and Aggref nodes at any depth.
486486 */
487487static Plan *
488- columnar_index_scan_plan_create (Agg * agg , CustomScan * cscan , List * resolved_targetlist ,
489- List * rtable )
488+ columnar_index_scan_plan_create (Agg * agg , CustomScan * cscan , List * rtable )
490489{
491490 Plan * compressed_scan_subtree = linitial (cscan -> custom_plans );
492491
@@ -518,9 +517,19 @@ columnar_index_scan_plan_create(Agg *agg, CustomScan *cscan, List *resolved_targ
518517 .next_resno = 1 ,
519518 };
520519
521- if (validate_entries_walker ((Node * ) resolved_targetlist , & validate_ctx ))
520+ Plan * childplan = agg -> plan .lefttree ;
521+ Node * resolved_targetlist =
522+ ts_resolve_outer_special_vars ((Node * ) agg -> plan .targetlist , childplan );
523+ if (validate_entries_walker (resolved_targetlist , & validate_ctx ))
522524 return NULL ;
523525
526+ if (agg -> plan .qual )
527+ {
528+ Node * resolved_qual = ts_resolve_outer_special_vars ((Node * ) agg -> plan .qual , childplan );
529+ if (validate_entries_walker (resolved_qual , & validate_ctx ))
530+ return NULL ;
531+ }
532+
524533 List * custom_scan_tlist = validate_ctx .custom_scan_tlist ;
525534 List * output_map = validate_ctx .output_map ;
526535
@@ -538,7 +547,11 @@ columnar_index_scan_plan_create(Agg *agg, CustomScan *cscan, List *resolved_targ
538547 };
539548
540549 agg -> plan .targetlist =
541- (List * ) rewrite_agg_tlist_mutator ((Node * ) agg -> plan .targetlist , & rewrite_ctx );
550+ castNode (List , rewrite_agg_tlist_mutator ((Node * ) agg -> plan .targetlist , & rewrite_ctx ));
551+
552+ if (agg -> plan .qual )
553+ agg -> plan .qual =
554+ castNode (List , rewrite_agg_tlist_mutator ((Node * ) agg -> plan .qual , & rewrite_ctx ));
542555
543556 /* Build ColumnarIndexScan CustomScan */
544557 CustomScan * columnar_index_scan = (CustomScan * ) makeNode (CustomScan );
@@ -596,10 +609,6 @@ insert_columnar_index_scan(Plan *plan, void *context)
596609 if (agg -> aggsplit != AGGSPLIT_INITIAL_SERIAL && agg -> aggsplit != AGGSPLIT_SIMPLE )
597610 return plan ;
598611
599- /* bail out on HAVING */
600- if (agg -> plan .qual != NIL )
601- return plan ;
602-
603612 Plan * childplan = agg -> plan .lefttree ;
604613
605614 /*
@@ -622,12 +631,7 @@ insert_columnar_index_scan(Plan *plan, void *context)
622631 if (!columnar_scan_has_no_vector_quals (cscan ))
623632 return plan ;
624633
625- /*
626- * Resolve OUTER_VAR references in the Agg targetlist.
627- */
628- List * resolved_targetlist = ts_resolve_outer_special_vars (agg -> plan .targetlist , childplan );
629-
630- Plan * result = columnar_index_scan_plan_create (agg , cscan , resolved_targetlist , rtable );
634+ Plan * result = columnar_index_scan_plan_create (agg , cscan , rtable );
631635 if (result == NULL )
632636 return plan ;
633637
0 commit comments