A previously-added compiler optimization has been updated and now produces different results in some situations.
In projects created prior to SP04 where a filter operation is performed in conjunction with a retention policy (that is, a KEEP clause), the previously-added optimization would, in some cases, produce the same output regardless of whether the retention policy was specified on the input to the filter (that is, the unnamed window) or on the result of the filter.
CREATE OUTPUT WINDOW ODSTR1 PRIMARY KEY DEDUCED AS SELECT trd.TradeId, trd.Symbol, trd.Price FROM Trades trd KEEP 6 ROWS WHERE trd.Symbol like '%B%';and
CREATE OUTPUT WINDOW ODSTR1 PRIMARY KEY DEDUCED KEEP 6 ROWS AS SELECT trd.TradeId, trd.Symbol, trd.Price FROM Trades trd WHERE trd.Symbol like '%B%';
Previously, the retention was performed on the results of the filter regardless of whether the retention was specified on the source or in the result of the filter. With the behavior change introduced in SP04, in the first case, the retention policy is first applied on the source before the filter is performed; in the second case, the filter is performed first before applying the retention policy on the filtered results.
You will only see this change in behavior with an older project if you recompile the project in SP04; if you continue running the project without recompiling, it will behave as it did before.