I have logged https://issues.apache.org/jira/browse/CALCITE-7420 to capture my suggestions.
> On Feb 20, 2026, at 5:21 PM, Julian Hyde <[email protected]> wrote: > > > >> On Feb 20, 2026, at 11:07 AM, Mihai Budiu <[email protected]> wrote: >> >>> We probably need a new Quidem command to fire the rules and generate the >>> before and after plans. >> >> https://issues.apache.org/jira/browse/CALCITE-6335 >> Quidem tests should allow specifying optimization passes to apply to programs >> >> This issue is implemented. > > Yes, the ‘!set rules’ command will be useful. I think we will also need > ‘!plan-before’ and ‘!plan-after’ commands, something like this: > > # Pull aggregate through union ==================== > # Tests that AggregateUnionAggregateRule can convert > # a union of two ’select distinct’ queries to a ’select distinct’ > # of a union. > !set rules "AGGREGATE_UNION_AGGREGATE" > select deptno, job > from (select deptno, job > from emp as e1 > group by deptno, job > union all > select deptno, job > from emp as e2 > group by deptno, job) > group by deptno, job; > +--------+-----------+ > | DEPTNO | JOB | > +--------+-----------+ > | 20 | CLERK | > | 30 | SALESMAN | > | 20 | MANAGER | > | 30 | MANAGER | > | 10 | MANAGER | > | 20 | ANALYST | > | 10 | PRESIDENT | > | 30 | CLERK | > | 10 | CLERK | > +--------+-----------+ > (9 rows) > > !ok > LogicalAggregate(group=[{0, 1}]) > LogicalUnion(all=[true]) > LogicalAggregate(group=[{0, 1}]) > LogicalProject(DEPTNO=[$7], JOB=[$2]) > LogicalTableScan(table=[[CATALOG, SALES, EMP]]) > LogicalAggregate(group=[{0, 1}]) > LogicalProject(DEPTNO=[$7], JOB=[$2]) > LogicalTableScan(table=[[CATALOG, SALES, EMP]]) > !plan-before > LogicalAggregate(group=[{0, 1}]) > LogicalUnion(all=[true]) > LogicalProject(DEPTNO=[$7], JOB=[$2]) > LogicalTableScan(table=[[CATALOG, SALES, EMP]]) > LogicalProject(DEPTNO=[$7], JOB=[$2]) > LogicalTableScan(table=[[CATALOG, SALES, EMP]]) > !plan-after > > Note that the !plan-before and !plan-after commands work with the previous > SQL query, and (as is the usual way in Quidem) follow their expected output. > > The information is the same as in > RelOptRulesTest.testPullAggregateThroughUnion() (and the corresponding XML > resource), just laid out in a way that works for Quidem. > > Julian >
