public Rule<ProjectNode> projectNodeRule()
    {
        return new PullUpExpressionInLambdaProjectNodeRule();
    }
@Test
    public void testNestedLambdaInProjection()
    {
        tester().assertThat(new PullUpExpressionInLambdaRules(getFunctionManager()).projectNodeRule())
                .setSystemProperty(PULL_EXPRESSION_FROM_LAMBDA_ENABLED, "true")
                .on(p ->
                {
                    p.variable("expr", new ArrayType(new ArrayType(BIGINT)));
                    p.variable("arr1", new ArrayType(BIGINT));
                    p.variable("arr2", new ArrayType(BIGINT));
                    return p.project(
                            Assignments.builder().put(p.variable("expr", new ArrayType(new ArrayType(BIGINT))), p.rowExpression("transform(arr1, x->transform(arr2, y->slice(arr2, 1, 10)))")).build(),
                            p.values(p.variable("arr1", new ArrayType(BIGINT)), p.variable("arr2", new ArrayType(BIGINT))));
                })
                .matches(
                        project(
                                ImmutableMap.of("expr", expression("transform(arr1, (x) -> transform(arr2, (y) -> slice))")),
                                project(

                                        ImmutableMap.of("slice", expression("slice(arr2, 1, 10)")),
                                        values("arr1", "arr2"))));
    }