strongduanmu commented on issue #13091:
URL: 
https://github.com/apache/shardingsphere/issues/13091#issuecomment-1208856986

   Missing conversion is LogicalUnion[convention: NONE -> ENUMERABLE].
   
   ```
   [ERROR] 2022-08-09 10:53:43.303 [main] o.a.s.t.i.f.watcher.ITWatcher - Error 
case: assertExecuteQuery[jdbc: db -> H2 -> Literal -> SELECT order_id_sharding 
AS order_id, user_id, status FROM t_order_federate_sharding WHERE 
order_id_sharding = ? UNION ALL SELECT order_id, user_id, status FROM 
t_order_item_federate_sharding WHERE user_id = ?], message: 
org.apache.calcite.plan.RelOptPlanner$CannotPlanException: There are not enough 
rules to produce a node with desired properties: convention=ENUMERABLE, sort=[].
   Missing conversion is LogicalUnion[convention: NONE -> ENUMERABLE]
   There is 1 empty subset: rel#6136:RelSubset#4.ENUMERABLE.[], the relevant 
part of the original plan is as follows
   6134:LogicalUnion(all=[true])
     6129:LogicalCalc(subset=[rel#6130:RelSubset#1.NONE.[]], 
expr#0..2=[{inputs}], expr#3=[CAST($t0):INTEGER], expr#4=[1010], expr#5=[=($t3, 
$t4)], proj#0..2=[{exprs}], $condition=[$t5])
       6101:LogicalTableScan(subset=[rel#6128:RelSubset#0.NONE.[]], 
table=[[logic_db, t_order_federate_sharding]])
     6132:LogicalCalc(subset=[rel#6133:RelSubset#3.NONE.[]], 
expr#0..4=[{inputs}], expr#5=[CAST($t2):INTEGER], expr#6=[10], expr#7=[=($t5, 
$t6)], order_id=[$t1], user_id=[$t2], status=[$t3], $condition=[$t7])
       6105:LogicalTableScan(subset=[rel#6131:RelSubset#2.NONE.[]], 
table=[[logic_db, t_order_item_federate_sharding]])
   
   Root: rel#6136:RelSubset#4.ENUMERABLE.[]
   Original rel:
   LogicalUnion(subset=[rel#6136:RelSubset#4.ENUMERABLE.[]], all=[true]): 
rowcount = 30.0, cumulative cost = {30.0 rows, 30.0 cpu, 0.0 io}, id = 6134
     LogicalCalc(subset=[rel#6130:RelSubset#1.NONE.[]], expr#0..2=[{inputs}], 
expr#3=[CAST($t0):INTEGER], expr#4=[1010], expr#5=[=($t3, $t4)], 
proj#0..2=[{exprs}], $condition=[$t5]): rowcount = 15.0, cumulative cost = 
{15.0 rows, 1000.0 cpu, 0.0 io}, id = 6129
       LogicalTableScan(subset=[rel#6128:RelSubset#0.NONE.[]], 
table=[[logic_db, t_order_federate_sharding]]): rowcount = 100.0, cumulative 
cost = {100.0 rows, 101.0 cpu, 0.0 io}, id = 6101
     LogicalCalc(subset=[rel#6133:RelSubset#3.NONE.[]], expr#0..4=[{inputs}], 
expr#5=[CAST($t2):INTEGER], expr#6=[10], expr#7=[=($t5, $t6)], order_id=[$t1], 
user_id=[$t2], status=[$t3], $condition=[$t7]): rowcount = 15.0, cumulative 
cost = {15.0 rows, 1200.0 cpu, 0.0 io}, id = 6132
       LogicalTableScan(subset=[rel#6131:RelSubset#2.NONE.[]], 
table=[[logic_db, t_order_item_federate_sharding]]): rowcount = 100.0, 
cumulative cost = {100.0 rows, 101.0 cpu, 0.0 io}, id = 6105
   
   Sets:
   Set#0, type: RecordType(JavaType(class java.lang.Integer) order_id_sharding, 
JavaType(class java.lang.Integer) user_id, JavaType(class java.lang.String) 
status)
        rel#6128:RelSubset#0.NONE.[], best=null
                rel#6101:LogicalTableScan.NONE.[](table=[logic_db, 
t_order_federate_sharding]), rowcount=100.0, cumulative cost={inf}
        rel#6139:RelSubset#0.ENUMERABLE.[], best=rel#6138
                rel#6138:EnumerableTableScan.ENUMERABLE.[](table=[logic_db, 
t_order_federate_sharding]), rowcount=100.0, cumulative cost={100.0 rows, 101.0 
cpu, 0.0 io}
   Set#1, type: RecordType(JavaType(class java.lang.Integer) order_id_sharding, 
JavaType(class java.lang.Integer) user_id, JavaType(class java.lang.String) 
status)
        rel#6130:RelSubset#1.NONE.[], best=null
                
rel#6129:LogicalCalc.NONE.[](input=RelSubset#6128,expr#0..2={inputs},expr#3=CAST($t0):INTEGER,expr#4=1010,expr#5==($t3,
 $t4),proj#0..2={exprs},$condition=$t5), rowcount=15.0, cumulative cost={inf}
        rel#6141:RelSubset#1.ENUMERABLE.[], best=rel#6140
                
rel#6140:EnumerableCalc.ENUMERABLE.[](input=RelSubset#6139,expr#0..2={inputs},expr#3=CAST($t0):INTEGER,expr#4=1010,expr#5==($t3,
 $t4),proj#0..2={exprs},$condition=$t5), rowcount=15.0, cumulative cost={115.0 
rows, 1101.0 cpu, 0.0 io}
   Set#2, type: RecordType(JavaType(class java.lang.Integer) item_id, 
JavaType(class java.lang.Integer) order_id, JavaType(class java.lang.Integer) 
user_id, JavaType(class java.lang.String) status, JavaType(class 
java.lang.String) remarks)
        rel#6131:RelSubset#2.NONE.[], best=null
                rel#6105:LogicalTableScan.NONE.[](table=[logic_db, 
t_order_item_federate_sharding]), rowcount=100.0, cumulative cost={inf}
        rel#6143:RelSubset#2.ENUMERABLE.[], best=rel#6142
                rel#6142:EnumerableTableScan.ENUMERABLE.[](table=[logic_db, 
t_order_item_federate_sharding]), rowcount=100.0, cumulative cost={100.0 rows, 
101.0 cpu, 0.0 io}
   Set#3, type: RecordType(JavaType(class java.lang.Integer) order_id, 
JavaType(class java.lang.Integer) user_id, JavaType(class java.lang.String) 
status)
        rel#6133:RelSubset#3.NONE.[], best=null
                
rel#6132:LogicalCalc.NONE.[](input=RelSubset#6131,expr#0..4={inputs},expr#5=CAST($t2):INTEGER,expr#6=10,expr#7==($t5,
 $t6),0=$t1,1=$t2,2=$t3,$condition=$t7), rowcount=15.0, cumulative cost={inf}
        rel#6145:RelSubset#3.ENUMERABLE.[], best=rel#6144
                
rel#6144:EnumerableCalc.ENUMERABLE.[](input=RelSubset#6143,expr#0..4={inputs},expr#5=CAST($t2):INTEGER,expr#6=10,expr#7==($t5,
 $t6),0=$t1,1=$t2,2=$t3,$condition=$t7), rowcount=15.0, cumulative cost={115.0 
rows, 1301.0 cpu, 0.0 io}
   Set#4, type: RecordType(JavaType(class java.lang.Integer) order_id_sharding, 
JavaType(class java.lang.Integer) user_id, VARCHAR status)
        rel#6135:RelSubset#4.NONE.[], best=null
                
rel#6134:LogicalUnion.NONE.[](input#0=RelSubset#6130,input#1=RelSubset#6133,all=true),
 rowcount=30.0, cumulative cost={inf}
        rel#6136:RelSubset#4.ENUMERABLE.[], best=null
                
rel#6137:AbstractConverter.ENUMERABLE.[](input=RelSubset#6135,convention=ENUMERABLE,sort=[]),
 rowcount=30.0, cumulative cost={inf}
   
   Graphviz:
   digraph G {
        root [style=filled,label="Root"];
        subgraph cluster0{
                label="Set 0 RecordType(JavaType(class java.lang.Integer) 
order_id_sharding, JavaType(class java.lang.Integer) user_id, JavaType(class 
java.lang.String) status)";
                rel6101 [label="rel#6101:LogicalTableScan\ntable=[logic_db, 
t_order_federate_sharding]\nrows=100.0, cost={inf}",shape=box]
                rel6138 [label="rel#6138:EnumerableTableScan\ntable=[logic_db, 
t_order_federate_sharding]\nrows=100.0, cost={100.0 rows, 101.0 cpu, 0.0 
io}",color=blue,shape=box]
                subset6128 [label="rel#6128:RelSubset#0.NONE.[]"]
                subset6139 [label="rel#6139:RelSubset#0.ENUMERABLE.[]"]
        }
        subgraph cluster1{
                label="Set 1 RecordType(JavaType(class java.lang.Integer) 
order_id_sharding, JavaType(class java.lang.Integer) user_id, JavaType(class 
java.lang.String) status)";
                rel6129 
[label="rel#6129:LogicalCalc\ninput=RelSubset#6128,expr#0..2={inputs},expr#3=CAST($t0):INTEGER,expr#4=1010,expr#5==($t3,
 $t4),proj#0..2={exprs},$condition=$t5\nrows=15.0, cost={inf}",shape=box]
                rel6140 
[label="rel#6140:EnumerableCalc\ninput=RelSubset#6139,expr#0..2={inputs},expr#3=CAST($t0):INTEGER,expr#4=1010,expr#5==($t3,
 $t4),proj#0..2={exprs},$condition=$t5\nrows=15.0, cost={115.0 rows, 1101.0 
cpu, 0.0 io}",color=blue,shape=box]
                subset6130 [label="rel#6130:RelSubset#1.NONE.[]"]
                subset6141 [label="rel#6141:RelSubset#1.ENUMERABLE.[]"]
        }
        subgraph cluster2{
                label="Set 2 RecordType(JavaType(class java.lang.Integer) 
item_id, JavaType(class java.lang.Integer) order_id, JavaType(class 
java.lang.Integer) user_id, JavaType(class java.lang.String) status, 
JavaType(class java.lang.String) remarks)";
                rel6105 [label="rel#6105:LogicalTableScan\ntable=[logic_db, 
t_order_item_federate_sharding]\nrows=100.0, cost={inf}",shape=box]
                rel6142 [label="rel#6142:EnumerableTableScan\ntable=[logic_db, 
t_order_item_federate_sharding]\nrows=100.0, cost={100.0 rows, 101.0 cpu, 0.0 
io}",color=blue,shape=box]
                subset6131 [label="rel#6131:RelSubset#2.NONE.[]"]
                subset6143 [label="rel#6143:RelSubset#2.ENUMERABLE.[]"]
        }
        subgraph cluster3{
                label="Set 3 RecordType(JavaType(class java.lang.Integer) 
order_id, JavaType(class java.lang.Integer) user_id, JavaType(class 
java.lang.String) status)";
                rel6132 
[label="rel#6132:LogicalCalc\ninput=RelSubset#6131,expr#0..4={inputs},expr#5=CAST($t2):INTEGER,expr#6=10,expr#7==($t5,
 $t6),0=$t1,1=$t2,2=$t3,$condition=$t7\nrows=15.0, cost={inf}",shape=box]
                rel6144 
[label="rel#6144:EnumerableCalc\ninput=RelSubset#6143,expr#0..4={inputs},expr#5=CAST($t2):INTEGER,expr#6=10,expr#7==($t5,
 $t6),0=$t1,1=$t2,2=$t3,$condition=$t7\nrows=15.0, cost={115.0 rows, 1301.0 
cpu, 0.0 io}",color=blue,shape=box]
                subset6133 [label="rel#6133:RelSubset#3.NONE.[]"]
                subset6145 [label="rel#6145:RelSubset#3.ENUMERABLE.[]"]
        }
        subgraph cluster4{
                label="Set 4 RecordType(JavaType(class java.lang.Integer) 
order_id_sharding, JavaType(class java.lang.Integer) user_id, VARCHAR status)";
                rel6134 
[label="rel#6134:LogicalUnion\ninput#0=RelSubset#6130,input#1=RelSubset#6133,all=true\nrows=30.0,
 cost={inf}",shape=box]
                rel6137 
[label="rel#6137:AbstractConverter\ninput=RelSubset#6135,convention=ENUMERABLE,sort=[]\nrows=30.0,
 cost={inf}",shape=box]
                subset6135 [label="rel#6135:RelSubset#4.NONE.[]"]
                subset6136 
[label="rel#6136:RelSubset#4.ENUMERABLE.[]",color=red]
        }
        root -> subset6136;
        subset6128 -> rel6101;
        subset6139 -> rel6138[color=blue];
        subset6130 -> rel6129; rel6129 -> subset6128;
        subset6141 -> rel6140[color=blue]; rel6140 -> subset6139[color=blue];
        subset6131 -> rel6105;
        subset6143 -> rel6142[color=blue];
        subset6133 -> rel6132; rel6132 -> subset6131;
        subset6145 -> rel6144[color=blue]; rel6144 -> subset6143[color=blue];
        subset6135 -> rel6134; rel6134 -> subset6130[label="0"]; rel6134 -> 
subset6133[label="1"];
        subset6136 -> rel6137; rel6137 -> subset6135;
   }
        at 
org.apache.calcite.plan.volcano.RelSubset$CheapestPlanReplacer.visit(RelSubset.java:709)
        at 
org.apache.calcite.plan.volcano.RelSubset.buildCheapestPlan(RelSubset.java:390)
        at 
org.apache.calcite.plan.volcano.VolcanoPlanner.findBestExp(VolcanoPlanner.java:533)
        at 
org.apache.shardingsphere.infra.federation.optimizer.ShardingSphereOptimizer.optimizeWithCBO(ShardingSphereOptimizer.java:65)
        at 
org.apache.shardingsphere.infra.federation.optimizer.ShardingSphereOptimizer.optimize(ShardingSphereOptimizer.java:51)
        at 
org.apache.shardingsphere.infra.federation.executor.advanced.AdvancedFederationExecutor.execute(AdvancedFederationExecutor.java:122)
        at 
org.apache.shardingsphere.infra.federation.executor.advanced.AdvancedFederationExecutor.executeQuery(AdvancedFederationExecutor.java:102)
        at 
org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSphereStatement.executeFederationQuery(ShardingSphereStatement.java:223)
        at 
org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSphereStatement.executeQuery(ShardingSphereStatement.java:167)
        at 
org.apache.shardingsphere.test.integration.engine.dql.GeneralDQLIT.assertExecuteQueryForStatement(GeneralDQLIT.java:68)
        at 
org.apache.shardingsphere.test.integration.engine.dql.GeneralDQLIT.assertExecuteQuery(GeneralDQLIT.java:58)
        at jdk.internal.reflect.GeneratedMethodAccessor62.invoke(Unknown Source)
        at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at 
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
        at 
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at 
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
        at 
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at 
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
        at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
        at org.junit.rules.RunRules.evaluate(RunRules.java:20)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
        at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
        at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.junit.runners.Suite.runChild(Suite.java:128)
        at org.junit.runners.Suite.runChild(Suite.java:27)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        at 
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.junit.runners.Suite.runChild(Suite.java:128)
        at org.junit.runners.Suite.runChild(Suite.java:27)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
        at 
com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
        at 
com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
        at 
com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
        at 
com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
        at 
com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
        at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to