Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Re-allow SRFs and window functions within sub-selects within aggregates.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 27 Jun 2017 21:51:11 +0000 (17:51 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 27 Jun 2017 21:51:11 +0000 (17:51 -0400)
check_agg_arguments_walker threw an error upon seeing a SRF or window
function, but that is too aggressive: if the function is within a
sub-select then it's perfectly fine.  I broke the SRF case in commit
0436f6bde by copying the logic for window functions ... but that was
broken too, and had been since commit eaccfded9.

Repair both cases in HEAD, and the window function case back to 9.3.
9.2 gets this right.

src/backend/parser/parse_agg.c

index d2520c9c76b65cf90b9c3efc9d07cf18b4de8991..384c692e7e06a7c4ea7c13fa9ac9501f729a28e3 100644 (file)
@@ -390,7 +390,7 @@ check_agg_arguments_walker(Node *node,
        return false;
    }
    /* We can throw error on sight for a window function */
-   if (IsA(node, WindowFunc))
+   if (IsA(node, WindowFunc) && context->sublevels_up == 0)
        ereport(ERROR,
                (errcode(ERRCODE_GROUPING_ERROR),
                 errmsg("aggregate function calls cannot contain window function calls"),