[ 
https://issues.apache.org/jira/browse/CALCITE-2817?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16759123#comment-16759123
 ] 

Vladimir Sitnikov commented on CALCITE-2817:
--------------------------------------------

Another example: I've disabled EnumerableAggregateRule, and 
JdbcTest#testWithInsideWhereExists

{code:sql}select "deptno" from "hr"."emps"
where exists (
with dept2 as (select * from "hr"."depts" where "depts"."deptno" >= 
"emps"."deptno")
select 1 from dept2 where "deptno" <= "emps"."deptno") {code}

The exception is as follows:
{noformat}rel#169:Subset#10.ENUMERABLE.[]is not implementable. It means there's 
not enough rules to produce the node with desired properties
There are 4 empty subsets:
Leaf 0: rel#259:Subset#4.ENUMERABLE.[]
145:LogicalAggregate(group=[{0}])
  139:LogicalProject(subset=[rel#140:Subset#1.NONE.[]], deptno=[$1])
    82:EnumerableTableScan(subset=[rel#138:Subset#0.ENUMERABLE.[]], table=[[hr, 
emps]])

Leaf 1: rel#256:Subset#1.ENUMERABLE.[0]
139:LogicalProject(deptno=[$1])
  82:EnumerableTableScan(subset=[rel#138:Subset#0.ENUMERABLE.[]], table=[[hr, 
emps]])

Leaf 2: rel#255:Subset#8.ENUMERABLE.[0]
153:LogicalAggregate(group=[{0}])
  151:LogicalProject(subset=[rel#152:Subset#7.NONE.[]], deptno0=[$1])
    149:LogicalFilter(subset=[rel#150:Subset#6.NONE.[]], condition=[<=($0, $1)])
      147:LogicalJoin(subset=[rel#148:Subset#5.NONE.[]], condition=[>=($0, 
$1)], joinType=[inner])
        142:LogicalProject(subset=[rel#143:Subset#3.NONE.[]], deptno=[$0])
          84:EnumerableTableScan(subset=[rel#141:Subset#2.ENUMERABLE.[]], 
table=[[hr, depts]])
        145:LogicalAggregate(subset=[rel#146:Subset#4.NONE.[]], group=[{0}])
          139:LogicalProject(subset=[rel#140:Subset#1.NONE.[]], deptno=[$1])
            82:EnumerableTableScan(subset=[rel#138:Subset#0.ENUMERABLE.[]], 
table=[[hr, emps]])

Leaf 3: rel#273:Subset#8.ENUMERABLE.[]
153:LogicalAggregate(group=[{0}])
  151:LogicalProject(subset=[rel#152:Subset#7.NONE.[]], deptno0=[$1])
    149:LogicalFilter(subset=[rel#150:Subset#6.NONE.[]], condition=[<=($0, $1)])
      147:LogicalJoin(subset=[rel#148:Subset#5.NONE.[]], condition=[>=($0, 
$1)], joinType=[inner])
        142:LogicalProject(subset=[rel#143:Subset#3.NONE.[]], deptno=[$0])
          84:EnumerableTableScan(subset=[rel#141:Subset#2.ENUMERABLE.[]], 
table=[[hr, depts]])
        145:LogicalAggregate(subset=[rel#146:Subset#4.NONE.[]], group=[{0}])
          139:LogicalProject(subset=[rel#140:Subset#1.NONE.[]], deptno=[$1])
            82:EnumerableTableScan(subset=[rel#138:Subset#0.ENUMERABLE.[]], 
table=[[hr, emps]])

Root: rel#169:Subset#10.ENUMERABLE.[]
Original rel:
LogicalProject(deptno=[$0]): rowcount = 375.0, cumulative cost = {2385.0 rows, 
1728.0 cpu, 0.0 io}, id = 137
  LogicalJoin(condition=[=($0, $1)], joinType=[inner]): rowcount = 375.0, 
cumulative cost = {2010.0 rows, 1353.0 cpu, 0.0 io}, id = 136
    LogicalProject(deptno=[$1]): rowcount = 100.0, cumulative cost = {200.0 
rows, 201.0 cpu, 0.0 io}, id = 127
      EnumerableTableScan(table=[[hr, emps]]): rowcount = 100.0, cumulative 
cost = {100.0 rows, 101.0 cpu, 0.0 io}, id = 82
    LogicalAggregate(group=[{0}]): rowcount = 25.0, cumulative cost = {1435.0 
rows, 1152.0 cpu, 0.0 io}, id = 135
      LogicalProject(deptno0=[$1]): rowcount = 250.0, cumulative cost = {1410.0 
rows, 1152.0 cpu, 0.0 io}, id = 134
        LogicalFilter(condition=[<=($0, $1)]): rowcount = 250.0, cumulative 
cost = {1160.0 rows, 902.0 cpu, 0.0 io}, id = 133
          LogicalJoin(condition=[>=($0, $1)], joinType=[inner]): rowcount = 
500.0, cumulative cost = {910.0 rows, 402.0 cpu, 0.0 io}, id = 132
            LogicalProject(deptno=[$0]): rowcount = 100.0, cumulative cost = 
{200.0 rows, 201.0 cpu, 0.0 io}, id = 128
              EnumerableTableScan(table=[[hr, depts]]): rowcount = 100.0, 
cumulative cost = {100.0 rows, 101.0 cpu, 0.0 io}, id = 84
            LogicalAggregate(group=[{0}]): rowcount = 10.0, cumulative cost = 
{210.0 rows, 201.0 cpu, 0.0 io}, id = 131
              LogicalProject(deptno=[$1]): rowcount = 100.0, cumulative cost = 
{200.0 rows, 201.0 cpu, 0.0 io}, id = 130
                EnumerableTableScan(table=[[hr, emps]]): rowcount = 100.0, 
cumulative cost = {100.0 rows, 101.0 cpu, 0.0 io}, id = 82

Sets:
Set#0, type: RecordType(JavaType(int) empid, JavaType(int) deptno, 
JavaType(class java.lang.String) name, JavaType(float) salary, JavaType(class 
java.lang.Integer) commission)
        rel#138:Subset#0.ENUMERABLE.[], best=rel#82, importance=0.6561
                rel#82:EnumerableTableScan.ENUMERABLE.[](table=[hr, emps]), 
rowcount=100.0, cumulative cost={100.0 rows, 101.0 cpu, 0.0 io}
Set#1, type: RecordType(JavaType(int) deptno)
        rel#140:Subset#1.NONE.[], best=null, importance=0.7290000000000001
                rel#139:LogicalProject.NONE.[](input=RelSubset#138,deptno=$1), 
rowcount=100.0, cumulative cost={inf}
        rel#175:Subset#1.ENUMERABLE.[], best=rel#242, importance=0.6561
                
rel#242:EnumerableProject.ENUMERABLE.[](input=RelSubset#138,deptno=$1), 
rowcount=100.0, cumulative cost={200.0 rows, 201.0 cpu, 0.0 io}
        rel#256:Subset#1.ENUMERABLE.[0], best=null, importance=0.6561
Set#2, type: RecordType(JavaType(int) deptno, JavaType(class java.lang.String) 
name, RecordType(JavaType(int) empid, JavaType(int) deptno, JavaType(class 
java.lang.String) name, JavaType(float) salary, JavaType(class 
java.lang.Integer) commission) ARRAY employees, RecordType(JavaType(int) x, 
JavaType(int) y) location)
        rel#141:Subset#2.ENUMERABLE.[], best=rel#84, 
importance=0.4304672100000001
                rel#84:EnumerableTableScan.ENUMERABLE.[](table=[hr, depts]), 
rowcount=100.0, cumulative cost={100.0 rows, 101.0 cpu, 0.0 io}
Set#3, type: RecordType(JavaType(int) deptno)
        rel#143:Subset#3.NONE.[], best=null, importance=0.4782969000000001
                rel#142:LogicalProject.NONE.[](input=RelSubset#141,deptno=$0), 
rowcount=100.0, cumulative cost={inf}
        rel#241:Subset#3.ENUMERABLE.[], best=rel#240, 
importance=0.4304672100000001
                
rel#240:EnumerableProject.ENUMERABLE.[](input=RelSubset#141,deptno=$0), 
rowcount=100.0, cumulative cost={200.0 rows, 201.0 cpu, 0.0 io}
Set#4, type: RecordType(JavaType(int) deptno)
        rel#146:Subset#4.NONE.[], best=null, importance=0.4782969000000001
                
rel#145:LogicalAggregate.NONE.[](input=RelSubset#140,group={0}), rowcount=10.0, 
cumulative cost={inf}
                
rel#235:LogicalAggregate.NONE.[](input=RelSubset#138,group={1}), rowcount=10.0, 
cumulative cost={inf}
        rel#259:Subset#4.ENUMERABLE.[], best=null, importance=0.4304672100000001
Set#5, type: RecordType(JavaType(int) deptno, JavaType(int) deptno0)
        rel#148:Subset#5.NONE.[], best=null, importance=0.531441
                
rel#147:LogicalJoin.NONE.[](left=RelSubset#143,right=RelSubset#146,condition=>=($0,
 $1),joinType=inner), rowcount=500.0, cumulative cost={inf}
                
rel#205:LogicalProject.NONE.[](input=RelSubset#204,deptno=$1,deptno0=$0), 
rowcount=500.0, cumulative cost={inf}
        rel#244:Subset#5.ENUMERABLE.[], best=null, importance=0.4304672100000001
                
rel#248:EnumerableProject.ENUMERABLE.[](input=RelSubset#246,deptno=$1,deptno0=$0),
 rowcount=500.0, cumulative cost={inf}
                
rel#278:EnumerableFilter.ENUMERABLE.[](input=RelSubset#262,condition=>=($0, 
$1)), rowcount=500.0, cumulative cost={inf}
Set#6, type: RecordType(JavaType(int) deptno, JavaType(int) deptno0)
        rel#150:Subset#6.NONE.[], best=null, importance=0.5904900000000001
                
rel#149:LogicalFilter.NONE.[](input=RelSubset#148,condition=<=($0, $1)), 
rowcount=250.0, cumulative cost={inf}
                
rel#209:LogicalProject.NONE.[](input=RelSubset#208,deptno=$1,deptno0=$0), 
rowcount=250.0, cumulative cost={inf}
                
rel#220:LogicalJoin.NONE.[](left=RelSubset#143,right=RelSubset#146,condition=AND(>=($0,
 $1), <=($0, $1)),joinType=inner), rowcount=250.0, cumulative cost={inf}
                
rel#309:LogicalFilter.NONE.[](input=RelSubset#262,condition=AND(>=($0, $1), 
<=($0, $1))), rowcount=250.0, cumulative cost={inf}
        rel#188:Subset#6.ENUMERABLE.[], best=null, importance=0.5904900000000001
                
rel#247:EnumerableProject.ENUMERABLE.[](input=RelSubset#232,deptno=$1,deptno0=$0),
 rowcount=250.0, cumulative cost={inf}
                
rel#263:EnumerableFilter.ENUMERABLE.[](input=RelSubset#262,condition=AND(>=($0, 
$1), <=($0, $1))), rowcount=250.0, cumulative cost={inf}
                
rel#280:EnumerableFilter.ENUMERABLE.[](input=RelSubset#244,condition=<=($0, 
$1)), rowcount=250.0, cumulative cost={inf}
Set#7, type: RecordType(JavaType(int) deptno0)
        rel#152:Subset#7.NONE.[], best=null, importance=0.6561
                rel#151:LogicalProject.NONE.[](input=RelSubset#150,deptno0=$1), 
rowcount=250.0, cumulative cost={inf}
                rel#210:LogicalProject.NONE.[](input=RelSubset#208,deptno0=$0), 
rowcount=250.0, cumulative cost={inf}
                rel#281:LogicalProject.NONE.[](input=RelSubset#188,deptno0=$1), 
rowcount=250.0, cumulative cost={inf}
                rel#282:LogicalProject.NONE.[](input=RelSubset#232,deptno0=$0), 
rowcount=250.0, cumulative cost={inf}
        rel#176:Subset#7.ENUMERABLE.[], best=null, importance=0.9
                
rel#189:EnumerableProject.ENUMERABLE.[](input=RelSubset#188,deptno0=$1), 
rowcount=250.0, cumulative cost={inf}
                
rel#239:EnumerableProject.ENUMERABLE.[](input=RelSubset#232,deptno0=$0), 
rowcount=250.0, cumulative cost={inf}
Set#8, type: RecordType(JavaType(int) deptno0)
        rel#154:Subset#8.NONE.[], best=null, importance=0.7290000000000001
                
rel#153:LogicalAggregate.NONE.[](input=RelSubset#152,group={0}), rowcount=25.0, 
cumulative cost={inf}
                
rel#195:LogicalAggregate.NONE.[](input=RelSubset#150,group={1}), rowcount=25.0, 
cumulative cost={inf}
                
rel#229:LogicalAggregate.NONE.[](input=RelSubset#208,group={0}), rowcount=25.0, 
cumulative cost={inf}
                
rel#283:LogicalAggregate.NONE.[](input=RelSubset#232,group={0}), rowcount=25.0, 
cumulative cost={inf}
                
rel#290:LogicalAggregate.NONE.[](input=RelSubset#188,group={1}), rowcount=25.0, 
cumulative cost={inf}
        rel#255:Subset#8.ENUMERABLE.[0], best=null, importance=0.6561
        rel#273:Subset#8.ENUMERABLE.[], best=null, importance=0.6561
Set#9, type: RecordType(JavaType(int) deptno, JavaType(int) deptno0)
        rel#156:Subset#9.NONE.[], best=null, importance=0.81
                
rel#155:LogicalJoin.NONE.[](left=RelSubset#140,right=RelSubset#154,condition==($0,
 $1),joinType=inner), rowcount=375.0, cumulative cost={inf}
                
rel#184:LogicalProject.NONE.[](input=RelSubset#183,deptno=$1,deptno0=$0), 
rowcount=375.0, cumulative cost={inf}
        rel#171:Subset#9.ENUMERABLE.[], best=null, importance=0.81
                
rel#252:EnumerableProject.ENUMERABLE.[](input=RelSubset#186,deptno=$1,deptno0=$0),
 rowcount=375.0, cumulative cost={inf}
                rel#258:EnumerableMergeJoin.ENUMERABLE.[[0], 
[1]](left=RelSubset#256,right=RelSubset#255,condition==($0, 
$1),joinType=inner), rowcount=375.0, cumulative cost={inf}
                
rel#275:EnumerableJoin.ENUMERABLE.[](left=RelSubset#175,right=RelSubset#273,condition==($0,
 $1),joinType=inner), rowcount=375.0, cumulative cost={inf}
Set#10, type: RecordType(JavaType(int) deptno)
        rel#158:Subset#10.NONE.[], best=null, importance=0.9
                rel#157:LogicalProject.NONE.[](input=RelSubset#156,deptno=$0), 
rowcount=375.0, cumulative cost={inf}
                
rel#174:SemiJoin.NONE.[](left=RelSubset#140,right=RelSubset#152,condition==($0, 
$1),joinType=inner), rowcount=100.0, cumulative cost={inf}
                rel#185:LogicalProject.NONE.[](input=RelSubset#183,deptno=$1), 
rowcount=375.0, cumulative cost={inf}
                
rel#197:SemiJoin.NONE.[](left=RelSubset#140,right=RelSubset#150,condition==($0, 
$2),joinType=inner), rowcount=100.0, cumulative cost={inf}
                
rel#231:SemiJoin.NONE.[](left=RelSubset#140,right=RelSubset#208,condition==($0, 
$1),joinType=inner), rowcount=100.0, cumulative cost={inf}
                rel#250:LogicalProject.NONE.[](input=RelSubset#171,deptno=$0), 
rowcount=375.0, cumulative cost={inf}
                rel#253:LogicalProject.NONE.[](input=RelSubset#186,deptno=$1), 
rowcount=375.0, cumulative cost={inf}
                
rel#285:SemiJoin.NONE.[](left=RelSubset#140,right=RelSubset#232,condition==($0, 
$1),joinType=inner), rowcount=100.0, cumulative cost={inf}
                
rel#292:SemiJoin.NONE.[](left=RelSubset#140,right=RelSubset#188,condition==($0, 
$2),joinType=inner), rowcount=100.0, cumulative cost={inf}
        rel#169:Subset#10.ENUMERABLE.[], best=null, importance=1.0
                
rel#170:AbstractConverter.ENUMERABLE.[](input=RelSubset#158,convention=ENUMERABLE,sort=[]),
 rowcount=375.0, cumulative cost={inf}
                
rel#172:EnumerableProject.ENUMERABLE.[](input=RelSubset#171,deptno=$0), 
rowcount=375.0, cumulative cost={inf}
                
rel#177:EnumerableSemiJoin.ENUMERABLE.[](left=RelSubset#175,right=RelSubset#176,condition==($0,
 $1),joinType=inner), rowcount=100.0, cumulative cost={inf}
                
rel#187:EnumerableProject.ENUMERABLE.[](input=RelSubset#186,deptno=$1), 
rowcount=375.0, cumulative cost={inf}
                
rel#198:EnumerableSemiJoin.ENUMERABLE.[](left=RelSubset#175,right=RelSubset#188,condition==($0,
 $2),joinType=inner), rowcount=100.0, cumulative cost={inf}
                
rel#233:EnumerableSemiJoin.ENUMERABLE.[](left=RelSubset#175,right=RelSubset#232,condition==($0,
 $1),joinType=inner), rowcount=100.0, cumulative cost={inf}
Set#11, type: RecordType(JavaType(int) deptno0, JavaType(int) deptno)
        rel#183:Subset#11.NONE.[], best=null, importance=0.7290000000000001
                
rel#181:LogicalJoin.NONE.[](left=RelSubset#154,right=RelSubset#140,condition==($1,
 $0),joinType=inner), rowcount=375.0, cumulative cost={inf}
                
rel#193:LogicalProject.NONE.[](input=RelSubset#156,deptno0=$1,deptno=$0), 
rowcount=375.0, cumulative cost={inf}
        rel#186:Subset#11.ENUMERABLE.[], best=null, 
importance=0.7290000000000001
                
rel#249:EnumerableProject.ENUMERABLE.[](input=RelSubset#171,deptno0=$1,deptno=$0),
 rowcount=375.0, cumulative cost={inf}
                rel#257:EnumerableMergeJoin.ENUMERABLE.[[0], 
[1]](left=RelSubset#255,right=RelSubset#256,condition==($0, 
$1),joinType=inner), rowcount=375.0, cumulative cost={inf}
                
rel#274:EnumerableJoin.ENUMERABLE.[](left=RelSubset#273,right=RelSubset#175,condition==($0,
 $1),joinType=inner), rowcount=375.0, cumulative cost={inf}
Set#12, type: RecordType(JavaType(int) deptno, JavaType(int) deptno0)
        rel#204:Subset#12.NONE.[], best=null, importance=0.4782969000000001
                
rel#202:LogicalJoin.NONE.[](left=RelSubset#146,right=RelSubset#143,condition=>=($1,
 $0),joinType=inner), rowcount=500.0, cumulative cost={inf}
                
rel#214:LogicalProject.NONE.[](input=RelSubset#148,deptno=$1,deptno0=$0), 
rowcount=500.0, cumulative cost={inf}
        rel#246:Subset#12.ENUMERABLE.[], best=null, 
importance=0.4782969000000001
                
rel#245:EnumerableProject.ENUMERABLE.[](input=RelSubset#244,deptno=$1,deptno0=$0),
 rowcount=500.0, cumulative cost={inf}
                
rel#272:EnumerableFilter.ENUMERABLE.[](input=RelSubset#268,condition=>=($1, 
$0)), rowcount=500.0, cumulative cost={inf}
Set#13, type: RecordType(JavaType(int) deptno, JavaType(int) deptno0)
        rel#208:Subset#13.NONE.[], best=null, importance=0.531441
                
rel#206:LogicalFilter.NONE.[](input=RelSubset#204,condition=<=($1, $0)), 
rowcount=250.0, cumulative cost={inf}
                
rel#217:LogicalProject.NONE.[](input=RelSubset#150,deptno=$1,deptno0=$0), 
rowcount=250.0, cumulative cost={inf}
                
rel#219:LogicalJoin.NONE.[](left=RelSubset#146,right=RelSubset#143,condition=AND(>=($1,
 $0), <=($1, $0)),joinType=inner), rowcount=250.0, cumulative cost={inf}
                
rel#311:LogicalFilter.NONE.[](input=RelSubset#268,condition=AND(>=($1, $0), 
<=($1, $0))), rowcount=250.0, cumulative cost={inf}
        rel#232:Subset#13.ENUMERABLE.[], best=null, importance=0.531441
                
rel#243:EnumerableProject.ENUMERABLE.[](input=RelSubset#188,deptno=$1,deptno0=$0),
 rowcount=250.0, cumulative cost={inf}
                
rel#269:EnumerableFilter.ENUMERABLE.[](input=RelSubset#268,condition=AND(>=($1, 
$0), <=($1, $0))), rowcount=250.0, cumulative cost={inf}
                
rel#279:EnumerableFilter.ENUMERABLE.[](input=RelSubset#246,condition=<=($1, 
$0)), rowcount=250.0, cumulative cost={inf}
Set#14, type: RecordType(JavaType(int) deptno, JavaType(int) deptno0)
        rel#262:Subset#14.ENUMERABLE.[], best=null, importance=0.531441
                
rel#260:EnumerableJoin.ENUMERABLE.[](left=RelSubset#241,right=RelSubset#259,condition=true,joinType=inner),
 rowcount=1000.0, cumulative cost={inf}
Set#15, type: RecordType(JavaType(int) deptno, JavaType(int) deptno0)
        rel#268:Subset#15.ENUMERABLE.[], best=null, 
importance=0.4782969000000001
                
rel#266:EnumerableJoin.ENUMERABLE.[](left=RelSubset#259,right=RelSubset#241,condition=true,joinType=inner),
 rowcount=1000.0, cumulative cost={inf}

Graphviz:
digraph G {
        root [style=filled,label="Root"];
        subgraph cluster0{
                label="Set 0 RecordType(JavaType(int) empid, JavaType(int) 
deptno, JavaType(class java.lang.String) name, JavaType(float) salary, 
JavaType(class java.lang.Integer) commission)";
                rel82 [label="rel#82:EnumerableTableScan(table=[hr, 
emps])\nrows=100.0, cost={100.0 rows, 101.0 cpu, 0.0 io}",color=blue,shape=box]
                subset138 [label="rel#138:Subset#0.ENUMERABLE.[]"]
        }
        subgraph cluster1{
                label="Set 1 RecordType(JavaType(int) deptno)";
                rel139 
[label="rel#139:LogicalProject(input=RelSubset#138,deptno=$1)\nrows=100.0, 
cost={inf}",shape=box]
                rel242 
[label="rel#242:EnumerableProject(input=RelSubset#138,deptno=$1)\nrows=100.0, 
cost={200.0 rows, 201.0 cpu, 0.0 io}",color=blue,shape=box]
                subset140 [label="rel#140:Subset#1.NONE.[]"]
                subset175 [label="rel#175:Subset#1.ENUMERABLE.[]"]
                subset256 [label="rel#256:Subset#1.ENUMERABLE.[0]",color=red]
                subset175 -> subset256; }
        subgraph cluster2{
                label="Set 2 RecordType(JavaType(int) deptno, JavaType(class 
java.lang.String) name, RecordType(JavaType(int) empid, JavaType(int) deptno, 
JavaType(class java.lang.String) name, JavaType(float) salary, JavaType(class 
java.lang.Integer) commission) ARRAY employees, RecordType(JavaType(int) x, 
JavaType(int) y) location)";
                rel84 [label="rel#84:EnumerableTableScan(table=[hr, 
depts])\nrows=100.0, cost={100.0 rows, 101.0 cpu, 0.0 io}",color=blue,shape=box]
                subset141 [label="rel#141:Subset#2.ENUMERABLE.[]"]
        }
        subgraph cluster3{
                label="Set 3 RecordType(JavaType(int) deptno)";
                rel142 
[label="rel#142:LogicalProject(input=RelSubset#141,deptno=$0)\nrows=100.0, 
cost={inf}",shape=box]
                rel240 
[label="rel#240:EnumerableProject(input=RelSubset#141,deptno=$0)\nrows=100.0, 
cost={200.0 rows, 201.0 cpu, 0.0 io}",color=blue,shape=box]
                subset143 [label="rel#143:Subset#3.NONE.[]"]
                subset241 [label="rel#241:Subset#3.ENUMERABLE.[]"]
        }
        subgraph cluster4{
                label="Set 4 RecordType(JavaType(int) deptno)";
                rel145 
[label="rel#145:LogicalAggregate(input=RelSubset#140,group={0})\nrows=10.0, 
cost={inf}",shape=box]
                rel235 
[label="rel#235:LogicalAggregate(input=RelSubset#138,group={1})\nrows=10.0, 
cost={inf}",shape=box]
                subset146 [label="rel#146:Subset#4.NONE.[]"]
                subset259 [label="rel#259:Subset#4.ENUMERABLE.[]",color=red]
        }
        subgraph cluster5{
                label="Set 5 RecordType(JavaType(int) deptno, JavaType(int) 
deptno0)";
                rel147 
[label="rel#147:LogicalJoin(left=RelSubset#143,right=RelSubset#146,condition=>=($0,
 $1),joinType=inner)\nrows=500.0, cost={inf}",shape=box]
                rel205 
[label="rel#205:LogicalProject(input=RelSubset#204,deptno=$1,deptno0=$0)\nrows=500.0,
 cost={inf}",shape=box]
                rel248 
[label="rel#248:EnumerableProject(input=RelSubset#246,deptno=$1,deptno0=$0)\nrows=500.0,
 cost={inf}",shape=box]
                rel278 
[label="rel#278:EnumerableFilter(input=RelSubset#262,condition=>=($0, 
$1))\nrows=500.0, cost={inf}",shape=box]
                subset148 [label="rel#148:Subset#5.NONE.[]"]
                subset244 [label="rel#244:Subset#5.ENUMERABLE.[]"]
        }
        subgraph cluster6{
                label="Set 6 RecordType(JavaType(int) deptno, JavaType(int) 
deptno0)";
                rel149 
[label="rel#149:LogicalFilter(input=RelSubset#148,condition=<=($0, 
$1))\nrows=250.0, cost={inf}",shape=box]
                rel209 
[label="rel#209:LogicalProject(input=RelSubset#208,deptno=$1,deptno0=$0)\nrows=250.0,
 cost={inf}",shape=box]
                rel220 
[label="rel#220:LogicalJoin(left=RelSubset#143,right=RelSubset#146,condition=AND(>=($0,
 $1), <=($0, $1)),joinType=inner)\nrows=250.0, cost={inf}",shape=box]
                rel247 
[label="rel#247:EnumerableProject(input=RelSubset#232,deptno=$1,deptno0=$0)\nrows=250.0,
 cost={inf}",shape=box]
                rel263 
[label="rel#263:EnumerableFilter(input=RelSubset#262,condition=AND(>=($0, $1), 
<=($0, $1)))\nrows=250.0, cost={inf}",shape=box]
                rel280 
[label="rel#280:EnumerableFilter(input=RelSubset#244,condition=<=($0, 
$1))\nrows=250.0, cost={inf}",shape=box]
                rel309 
[label="rel#309:LogicalFilter(input=RelSubset#262,condition=AND(>=($0, $1), 
<=($0, $1)))\nrows=250.0, cost={inf}",shape=box]
                subset150 [label="rel#150:Subset#6.NONE.[]"]
                subset188 [label="rel#188:Subset#6.ENUMERABLE.[]"]
        }
        subgraph cluster7{
                label="Set 7 RecordType(JavaType(int) deptno0)";
                rel151 
[label="rel#151:LogicalProject(input=RelSubset#150,deptno0=$1)\nrows=250.0, 
cost={inf}",shape=box]
                rel189 
[label="rel#189:EnumerableProject(input=RelSubset#188,deptno0=$1)\nrows=250.0, 
cost={inf}",shape=box]
                rel210 
[label="rel#210:LogicalProject(input=RelSubset#208,deptno0=$0)\nrows=250.0, 
cost={inf}",shape=box]
                rel239 
[label="rel#239:EnumerableProject(input=RelSubset#232,deptno0=$0)\nrows=250.0, 
cost={inf}",shape=box]
                rel281 
[label="rel#281:LogicalProject(input=RelSubset#188,deptno0=$1)\nrows=250.0, 
cost={inf}",shape=box]
                rel282 
[label="rel#282:LogicalProject(input=RelSubset#232,deptno0=$0)\nrows=250.0, 
cost={inf}",shape=box]
                subset152 [label="rel#152:Subset#7.NONE.[]"]
                subset176 [label="rel#176:Subset#7.ENUMERABLE.[]"]
        }
        subgraph cluster8{
                label="Set 8 RecordType(JavaType(int) deptno0)";
                rel153 
[label="rel#153:LogicalAggregate(input=RelSubset#152,group={0})\nrows=25.0, 
cost={inf}",shape=box]
                rel195 
[label="rel#195:LogicalAggregate(input=RelSubset#150,group={1})\nrows=25.0, 
cost={inf}",shape=box]
                rel229 
[label="rel#229:LogicalAggregate(input=RelSubset#208,group={0})\nrows=25.0, 
cost={inf}",shape=box]
                rel283 
[label="rel#283:LogicalAggregate(input=RelSubset#232,group={0})\nrows=25.0, 
cost={inf}",shape=box]
                rel290 
[label="rel#290:LogicalAggregate(input=RelSubset#188,group={1})\nrows=25.0, 
cost={inf}",shape=box]
                subset154 [label="rel#154:Subset#8.NONE.[]"]
                subset255 [label="rel#255:Subset#8.ENUMERABLE.[0]",color=red]
                subset273 [label="rel#273:Subset#8.ENUMERABLE.[]",color=red]
                subset273 -> subset255; }
        subgraph cluster9{
                label="Set 9 RecordType(JavaType(int) deptno, JavaType(int) 
deptno0)";
                rel155 
[label="rel#155:LogicalJoin(left=RelSubset#140,right=RelSubset#154,condition==($0,
 $1),joinType=inner)\nrows=375.0, cost={inf}",shape=box]
                rel184 
[label="rel#184:LogicalProject(input=RelSubset#183,deptno=$1,deptno0=$0)\nrows=375.0,
 cost={inf}",shape=box]
                rel252 
[label="rel#252:EnumerableProject(input=RelSubset#186,deptno=$1,deptno0=$0)\nrows=375.0,
 cost={inf}",shape=box]
                rel258 
[label="rel#258:EnumerableMergeJoin(left=RelSubset#256,right=RelSubset#255,condition==($0,
 $1),joinType=inner)\nrows=375.0, cost={inf}",shape=box]
                rel275 
[label="rel#275:EnumerableJoin(left=RelSubset#175,right=RelSubset#273,condition==($0,
 $1),joinType=inner)\nrows=375.0, cost={inf}",shape=box]
                subset156 [label="rel#156:Subset#9.NONE.[]"]
                subset171 [label="rel#171:Subset#9.ENUMERABLE.[]"]
        }
        subgraph cluster10{
                label="Set 10 RecordType(JavaType(int) deptno)";
                rel157 
[label="rel#157:LogicalProject(input=RelSubset#156,deptno=$0)\nrows=375.0, 
cost={inf}",shape=box]
                rel170 
[label="rel#170:AbstractConverter(input=RelSubset#158,convention=ENUMERABLE,sort=[])\nrows=375.0,
 cost={inf}",shape=box]
                rel172 
[label="rel#172:EnumerableProject(input=RelSubset#171,deptno=$0)\nrows=375.0, 
cost={inf}",shape=box]
                rel174 
[label="rel#174:SemiJoin(left=RelSubset#140,right=RelSubset#152,condition==($0, 
$1),joinType=inner)\nrows=100.0, cost={inf}",shape=box]
                rel177 
[label="rel#177:EnumerableSemiJoin(left=RelSubset#175,right=RelSubset#176,condition==($0,
 $1),joinType=inner)\nrows=100.0, cost={inf}",shape=box]
                rel185 
[label="rel#185:LogicalProject(input=RelSubset#183,deptno=$1)\nrows=375.0, 
cost={inf}",shape=box]
                rel187 
[label="rel#187:EnumerableProject(input=RelSubset#186,deptno=$1)\nrows=375.0, 
cost={inf}",shape=box]
                rel197 
[label="rel#197:SemiJoin(left=RelSubset#140,right=RelSubset#150,condition==($0, 
$2),joinType=inner)\nrows=100.0, cost={inf}",shape=box]
                rel198 
[label="rel#198:EnumerableSemiJoin(left=RelSubset#175,right=RelSubset#188,condition==($0,
 $2),joinType=inner)\nrows=100.0, cost={inf}",shape=box]
                rel231 
[label="rel#231:SemiJoin(left=RelSubset#140,right=RelSubset#208,condition==($0, 
$1),joinType=inner)\nrows=100.0, cost={inf}",shape=box]
                rel233 
[label="rel#233:EnumerableSemiJoin(left=RelSubset#175,right=RelSubset#232,condition==($0,
 $1),joinType=inner)\nrows=100.0, cost={inf}",shape=box]
                rel250 
[label="rel#250:LogicalProject(input=RelSubset#171,deptno=$0)\nrows=375.0, 
cost={inf}",shape=box]
                rel253 
[label="rel#253:LogicalProject(input=RelSubset#186,deptno=$1)\nrows=375.0, 
cost={inf}",shape=box]
                rel285 
[label="rel#285:SemiJoin(left=RelSubset#140,right=RelSubset#232,condition==($0, 
$1),joinType=inner)\nrows=100.0, cost={inf}",shape=box]
                rel292 
[label="rel#292:SemiJoin(left=RelSubset#140,right=RelSubset#188,condition==($0, 
$2),joinType=inner)\nrows=100.0, cost={inf}",shape=box]
                subset158 [label="rel#158:Subset#10.NONE.[]"]
                subset169 [label="rel#169:Subset#10.ENUMERABLE.[]"]
        }
        subgraph cluster11{
                label="Set 11 RecordType(JavaType(int) deptno0, JavaType(int) 
deptno)";
                rel181 
[label="rel#181:LogicalJoin(left=RelSubset#154,right=RelSubset#140,condition==($1,
 $0),joinType=inner)\nrows=375.0, cost={inf}",shape=box]
                rel193 
[label="rel#193:LogicalProject(input=RelSubset#156,deptno0=$1,deptno=$0)\nrows=375.0,
 cost={inf}",shape=box]
                rel249 
[label="rel#249:EnumerableProject(input=RelSubset#171,deptno0=$1,deptno=$0)\nrows=375.0,
 cost={inf}",shape=box]
                rel257 
[label="rel#257:EnumerableMergeJoin(left=RelSubset#255,right=RelSubset#256,condition==($0,
 $1),joinType=inner)\nrows=375.0, cost={inf}",shape=box]
                rel274 
[label="rel#274:EnumerableJoin(left=RelSubset#273,right=RelSubset#175,condition==($0,
 $1),joinType=inner)\nrows=375.0, cost={inf}",shape=box]
                subset183 [label="rel#183:Subset#11.NONE.[]"]
                subset186 [label="rel#186:Subset#11.ENUMERABLE.[]"]
        }
        subgraph cluster12{
                label="Set 12 RecordType(JavaType(int) deptno, JavaType(int) 
deptno0)";
                rel202 
[label="rel#202:LogicalJoin(left=RelSubset#146,right=RelSubset#143,condition=>=($1,
 $0),joinType=inner)\nrows=500.0, cost={inf}",shape=box]
                rel214 
[label="rel#214:LogicalProject(input=RelSubset#148,deptno=$1,deptno0=$0)\nrows=500.0,
 cost={inf}",shape=box]
                rel245 
[label="rel#245:EnumerableProject(input=RelSubset#244,deptno=$1,deptno0=$0)\nrows=500.0,
 cost={inf}",shape=box]
                rel272 
[label="rel#272:EnumerableFilter(input=RelSubset#268,condition=>=($1, 
$0))\nrows=500.0, cost={inf}",shape=box]
                subset204 [label="rel#204:Subset#12.NONE.[]"]
                subset246 [label="rel#246:Subset#12.ENUMERABLE.[]"]
        }
        subgraph cluster13{
                label="Set 13 RecordType(JavaType(int) deptno, JavaType(int) 
deptno0)";
                rel206 
[label="rel#206:LogicalFilter(input=RelSubset#204,condition=<=($1, 
$0))\nrows=250.0, cost={inf}",shape=box]
                rel217 
[label="rel#217:LogicalProject(input=RelSubset#150,deptno=$1,deptno0=$0)\nrows=250.0,
 cost={inf}",shape=box]
                rel219 
[label="rel#219:LogicalJoin(left=RelSubset#146,right=RelSubset#143,condition=AND(>=($1,
 $0), <=($1, $0)),joinType=inner)\nrows=250.0, cost={inf}",shape=box]
                rel243 
[label="rel#243:EnumerableProject(input=RelSubset#188,deptno=$1,deptno0=$0)\nrows=250.0,
 cost={inf}",shape=box]
                rel269 
[label="rel#269:EnumerableFilter(input=RelSubset#268,condition=AND(>=($1, $0), 
<=($1, $0)))\nrows=250.0, cost={inf}",shape=box]
                rel279 
[label="rel#279:EnumerableFilter(input=RelSubset#246,condition=<=($1, 
$0))\nrows=250.0, cost={inf}",shape=box]
                rel311 
[label="rel#311:LogicalFilter(input=RelSubset#268,condition=AND(>=($1, $0), 
<=($1, $0)))\nrows=250.0, cost={inf}",shape=box]
                subset208 [label="rel#208:Subset#13.NONE.[]"]
                subset232 [label="rel#232:Subset#13.ENUMERABLE.[]"]
        }
        subgraph cluster14{
                label="Set 14 RecordType(JavaType(int) deptno, JavaType(int) 
deptno0)";
                rel260 
[label="rel#260:EnumerableJoin(left=RelSubset#241,right=RelSubset#259,condition=true,joinType=inner)\nrows=1000.0,
 cost={inf}",shape=box]
                subset262 [label="rel#262:Subset#14.ENUMERABLE.[]"]
        }
        subgraph cluster15{
                label="Set 15 RecordType(JavaType(int) deptno, JavaType(int) 
deptno0)";
                rel266 
[label="rel#266:EnumerableJoin(left=RelSubset#259,right=RelSubset#241,condition=true,joinType=inner)\nrows=1000.0,
 cost={inf}",shape=box]
                subset268 [label="rel#268:Subset#15.ENUMERABLE.[]"]
        }
        root -> subset169;
        subset138 -> rel82[color=blue];
        subset140 -> rel139; rel139 -> subset138;
        subset175 -> rel242[color=blue]; rel242 -> subset138[color=blue];
        subset141 -> rel84[color=blue];
        subset143 -> rel142; rel142 -> subset141;
        subset241 -> rel240[color=blue]; rel240 -> subset141[color=blue];
        subset146 -> rel145; rel145 -> subset140;
        subset146 -> rel235; rel235 -> subset138;
        subset148 -> rel147; rel147 -> subset143[label="0"]; rel147 -> 
subset146[label="1"];
        subset148 -> rel205; rel205 -> subset204;
        subset244 -> rel248; rel248 -> subset246;
        subset244 -> rel278; rel278 -> subset262;
        subset150 -> rel149; rel149 -> subset148;
        subset150 -> rel209; rel209 -> subset208;
        subset150 -> rel220; rel220 -> subset143[label="0"]; rel220 -> 
subset146[label="1"];
        subset188 -> rel247; rel247 -> subset232;
        subset188 -> rel263; rel263 -> subset262;
        subset188 -> rel280; rel280 -> subset244;
        subset150 -> rel309; rel309 -> subset262;
        subset152 -> rel151; rel151 -> subset150;
        subset176 -> rel189; rel189 -> subset188;
        subset152 -> rel210; rel210 -> subset208;
        subset176 -> rel239; rel239 -> subset232;
        subset152 -> rel281; rel281 -> subset188;
        subset152 -> rel282; rel282 -> subset232;
        subset154 -> rel153; rel153 -> subset152;
        subset154 -> rel195; rel195 -> subset150;
        subset154 -> rel229; rel229 -> subset208;
        subset154 -> rel283; rel283 -> subset232;
        subset154 -> rel290; rel290 -> subset188;
        subset156 -> rel155; rel155 -> subset140[label="0"]; rel155 -> 
subset154[label="1"];
        subset156 -> rel184; rel184 -> subset183;
        subset171 -> rel252; rel252 -> subset186;
        subset171 -> rel258; rel258 -> subset256[label="0"]; rel258 -> 
subset255[label="1"];
        subset171 -> rel275; rel275 -> subset175[label="0"]; rel275 -> 
subset273[label="1"];
        subset158 -> rel157; rel157 -> subset156;
        subset169 -> rel170; rel170 -> subset158;
        subset169 -> rel172; rel172 -> subset171;
        subset158 -> rel174; rel174 -> subset140[label="0"]; rel174 -> 
subset152[label="1"];
        subset169 -> rel177; rel177 -> subset175[label="0"]; rel177 -> 
subset176[label="1"];
        subset158 -> rel185; rel185 -> subset183;
        subset169 -> rel187; rel187 -> subset186;
        subset158 -> rel197; rel197 -> subset140[label="0"]; rel197 -> 
subset150[label="1"];
        subset169 -> rel198; rel198 -> subset175[label="0"]; rel198 -> 
subset188[label="1"];
        subset158 -> rel231; rel231 -> subset140[label="0"]; rel231 -> 
subset208[label="1"];
        subset169 -> rel233; rel233 -> subset175[label="0"]; rel233 -> 
subset232[label="1"];
        subset158 -> rel250; rel250 -> subset171;
        subset158 -> rel253; rel253 -> subset186;
        subset158 -> rel285; rel285 -> subset140[label="0"]; rel285 -> 
subset232[label="1"];
        subset158 -> rel292; rel292 -> subset140[label="0"]; rel292 -> 
subset188[label="1"];
        subset183 -> rel181; rel181 -> subset154[label="0"]; rel181 -> 
subset140[label="1"];
        subset183 -> rel193; rel193 -> subset156;
        subset186 -> rel249; rel249 -> subset171;
        subset186 -> rel257; rel257 -> subset255[label="0"]; rel257 -> 
subset256[label="1"];
        subset186 -> rel274; rel274 -> subset273[label="0"]; rel274 -> 
subset175[label="1"];
        subset204 -> rel202; rel202 -> subset146[label="0"]; rel202 -> 
subset143[label="1"];
        subset204 -> rel214; rel214 -> subset148;
        subset246 -> rel245; rel245 -> subset244;
        subset246 -> rel272; rel272 -> subset268;
        subset208 -> rel206; rel206 -> subset204;
        subset208 -> rel217; rel217 -> subset150;
        subset208 -> rel219; rel219 -> subset146[label="0"]; rel219 -> 
subset143[label="1"];
        subset232 -> rel243; rel243 -> subset188;
        subset232 -> rel269; rel269 -> subset268;
        subset232 -> rel279; rel279 -> subset246;
        subset208 -> rel311; rel311 -> subset268;
        subset262 -> rel260; rel260 -> subset241[label="0"]; rel260 -> 
subset259[label="1"];
        subset268 -> rel266; rel266 -> subset259[label="0"]; rel266 -> 
subset241[label="1"];
}{noformat}

> Make CannotPlanException great
> ------------------------------
>
>                 Key: CALCITE-2817
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2817
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.18.0
>            Reporter: Vladimir Sitnikov
>            Assignee: Julian Hyde
>            Priority: Major
>         Attachments: converters.png, running_rule.png, subsets.png
>
>
> 1) Empty subsets are the typical offenders for CannotPlan, so identify them 
> and print before printing the planner dump
> 2) Print Graphviz-compatible output as well so the output is easier to 
> understand
> It would probably make sense to expose leafmost empty subsets via 
> {{Set<RelSubset> CannotPlanExeption#getDeadSubsets()}}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to