The default behavior in `can_be_pushed_down_impl` treats `CastExpr` as supported only by the overall shape of the child, but doesn't validate its actual children. For example `WHERE CAST(a % 2 AS BIGINT) = 0` will be pushed down, but we currently can't handle `%`. This is a symptom of a bigger drift between the different checks, conversions and operations like expression splitting.