Behavior Change in SP04

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.

For example, these two code-snippets previously produced the same results:
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.

Note: The change in behavior only applies in cases where the schema of the filtered events is not the same as the input events to the filter. When the schemas are the same, there is no change in behavior.

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.