You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "jamie12221 (Jira)" <ji...@apache.org> on 2020/11/24 12:03:00 UTC

[jira] [Updated] (CALCITE-4047) When project exprs is empty ,it occurs org.apache.calcite.rel.rules.PushProjector.getAdjustments(java.lang.ArrayIndexOutOfBoundsException: 0)

     [ https://issues.apache.org/jira/browse/CALCITE-4047?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

jamie12221 updated CALCITE-4047:
--------------------------------
    Summary: When project exprs is empty ,it occurs org.apache.calcite.rel.rules.PushProjector.getAdjustments(java.lang.ArrayIndexOutOfBoundsException: 0)  (was: at org.apache.calcite.rel.rules.PushProjector.getAdjustments(java.lang.ArrayIndexOutOfBoundsException: 0))

> When project exprs is empty ,it occurs org.apache.calcite.rel.rules.PushProjector.getAdjustments(java.lang.ArrayIndexOutOfBoundsException: 0)
> ---------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CALCITE-4047
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4047
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.23.0
>            Reporter: jamie12221
>            Priority: Trivial
>
>  
>  
> {code:java}
>   28:LogicalUnion(all=[true])
>     21:LogicalProject
>       20:LogicalTableScan(table=[[db1]])
>     23:LogicalProject
>       22:LogicalTableScan(table=[[db2]])
>     25:LogicalProject
>       24:LogicalTableScan(table=[[db3]])
>     27:LogicalProject
>       26:LogicalTableScan(table=[[db3]])
> {code}
>  
>  
> {code:java}
> 16:32:01 T=noBindingExecutor0 [org.apache.calcite.plan.RelOptPlanner fireRule at 324]-[DEBUG] call#3: Apply rule [ProjectSetOpTransposeRule] to [rel#44:LogicalProject.NONE.[](input=HepRelVertex#43,exprs=[1]), rel#42:LogicalUnion.NONE.[](input#0=HepRelVertex#32,input#1=HepRelVertex#35,input#2=HepRelVertex#38,input#3=HepRelVertex#41,all=true)]16:32:01 T=noBindingExecutor0 [io.mycat.proxy.session.Session setLastMessage at 122]-[ERROR] java.lang.ArrayIndexOutOfBoundsException: 0 at org.apache.calcite.rel.rules.PushProjector.getAdjustments(PushProjector.java:572) at org.apache.calcite.rel.rules.ProjectSetOpTransposeRule.onMatch(ProjectSetOpTransposeRule.java:92) at org.apache.calcite.plan.AbstractRelOptPlanner.fireRule(AbstractRelOptPlanner.java:338) at org.apache.calcite.plan.hep.HepPlanner.applyRule(HepPlanner.java:540) at org.apache.calcite.plan.hep.HepPlanner.applyRules(HepPlanner.java:405) at org.apache.calcite.plan.hep.HepPlanner.executeInstruction(HepPlanner.java:270) at org.apache.calcite.plan.hep.HepInstruction$RuleCollection.execute(HepInstruction.java:74) at org.apache.calcite.plan.hep.HepPlanner.executeProgram(HepPlanner.java:201) at org.apache.calcite.plan.hep.HepPlanner.findBestExp(HepPlanner.java:188)
> {code}
>  
>  
> The test case:
> {code:java}
> public class Test {
>   /***/
>   public static class Author {
>     public final int id;
>     public final String fname;
>     public final String lname;
>     public Author(final int id, final String firstname, final String lastname) {
>       this.id = id;
>       this.fname = firstname;
>       this.lname = lastname;
>     }
>   }
>   /***/
>   public static class Book {
>     public final int id;
>     public final String title;
>     public final int year;
>     public final Author author;
>     public Book(final int id, final String title, final int year, final Author author) {
>       this.id = id;
>       this.title = title;
>       this.year = year;
>       this.author = author;
>     }
>   }
>   /***/
>   public static class BookStore {
>     public final Author[] author = new Author[]{
>         new Author(1, "Victor", "Hugo"),
>         new Author(2, "Alexandre", "Dumas")
>     };
>     public final Book[] book = new Book[]{
>         new Book(1, "Les Miserables", 1862, author[0]),
>         new Book(2, "The Hunchback of Notre-Dame", 1829, author[0]),
>         new Book(3, "The Last Day of a Condemned Man", 1829, author[0]),
>         new Book(4, "The three Musketeers", 1844, author[1]),
>         new Book(5, "The Count of Monte Cristo", 1884, author[1])
>     };
>   }
>   @org.junit.Test
>   public void example() throws Exception {
>     CalciteSchema schema = CalciteSchema.createRootSchema(true);
>     schema.add("bs", new ReflectiveSchema(new BookStore()));
>     RelDataTypeFactory typeFactory = new JavaTypeFactoryImpl();
>     Properties props = new Properties();
>     props.setProperty(CalciteConnectionProperty.CASE_SENSITIVE.camelName(), "false");
>     CalciteConnectionConfig config = new CalciteConnectionConfigImpl(props);
>     CalciteCatalogReader catalogReader = new CalciteCatalogReader(schema,
>         Collections.singletonList("bs"),
>         typeFactory, config);
>     RelOptCluster cluster = newCluster(typeFactory);
>     RelBuilder relBuilder = SqlToRelConverter.Config.DEFAULT.getRelBuilderFactory().create(cluster, catalogReader);
>     SchemaOnlyDataContext schemaOnlyDataContext = new SchemaOnlyDataContext(schema);
>     Assert.assertEquals(5, new Interpreter(schemaOnlyDataContext, relBuilder
>             .scan("Book").build()).count());
>     RelNode relNode = relBuilder
>             .scan("Book").project()
>             .scan("Book").project()
>             .scan("Book").project()
>             .union(true, 3)
>             .project(ImmutableList.of(),ImmutableList.of(),true)
>             .build();
>     HepProgramBuilder builder = new HepProgramBuilder();
>     builder.addRuleInstance(ProjectSetOpTransposeRule.INSTANCE);
>     builder.addRuleInstance(ProjectFilterTransposeRule.INSTANCE);
>     builder.addRuleInstance(ProjectJoinTransposeRule.INSTANCE);
>     builder.addRuleInstance(ProjectCorrelateTransposeRule.INSTANCE);
>     HepProgram program = builder.build();
>     HepPlanner planner = new HepPlanner(program);
>     planner.setRoot(relNode);
>     relNode = planner.findBestExp();
>     Assert.assertEquals(15, new Interpreter(schemaOnlyDataContext,relNode ).count());
>   }
>   private static RelOptCluster newCluster(RelDataTypeFactory factory) {
>     RelOptPlanner planner = new VolcanoPlanner();
>     planner.addRelTraitDef(ConventionTraitDef.INSTANCE);
>     return RelOptCluster.create(planner, new RexBuilder(factory));
>   }
>   private static final RelOptTable.ViewExpander NOOP_EXPANDER = new RelOptTable.ViewExpander() {
>     @Override public RelRoot expandView(final RelDataType rowType, final String queryString,
>         final List<String> schemaPath,
>         final List<String> viewPath) {
>       return null;
>     }
>   };
>   /**
>    * A simple data context only with schema information.
>    */
>   private static final class SchemaOnlyDataContext implements DataContext {
>     private final SchemaPlus schema;
>     SchemaOnlyDataContext(CalciteSchema calciteSchema) {
>       this.schema = calciteSchema.plus();
>     }
>     @Override public SchemaPlus getRootSchema() {
>       return schema;
>     }
>     @Override public JavaTypeFactory getTypeFactory() {
>       return  new JavaTypeFactoryImpl();
>     }
>     @Override public QueryProvider getQueryProvider() {
>       return null;
>     }
>     @Override public Object get(final String name) {
>       return null;
>     }
>   }
> }
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)