@Nonnull
    public static List<JetSqlRow> evaluate(
            @Nullable Expression<Boolean> predicate,
            @Nullable List<Expression<?>> projection,
            @Nonnull Stream<JetSqlRow> rows,
            @Nonnull ExpressionEvalContext context
    ) {
        return rows
                .map(row -> evaluate(predicate, projection, row, context))
                .filter(Objects::nonNull)
                .collect(Collectors.toList());
    }
@Test
    public void test_evaluate() {
        List<Object[]> rows = asList(new Object[]{0, "a"}, new Object[]{1, "b"});

        List<JetSqlRow> evaluated = ExpressionUtil.evaluate(null, null, rows.stream().map(v -> new JetSqlRow(TEST_SS, v)), createExpressionEvalContext());

        assertThat(toList(evaluated, JetSqlRow::getValues)).containsExactlyElementsOf(rows);
    }