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

yuqi updated FLINK-9492:
------------------------
    Environment:     (was: 
{code:java}
public static void main(String[] args) {
                try {
                        SchemaPlus rootSchema = 
Frameworks.createRootSchema(true);
                        rootSchema.add("USERS", new AbstractTable() {
                                public RelDataType getRowType(final 
RelDataTypeFactory typeFactory) {
                                        RelDataTypeFactory.FieldInfoBuilder 
builder = typeFactory.builder();
                                        builder.add("ID", new BasicSqlType(new 
RelDataTypeSystemImpl() {
                                        }, SqlTypeName.INTEGER));
                                        builder.add("NAME", new 
BasicSqlType(new RelDataTypeSystemImpl() {
                                        }, SqlTypeName.CHAR));

                                        builder.add("TIME_D", new 
BasicSqlType(new RelDataTypeSystemImpl() {
                                        }, SqlTypeName.TIMESTAMP));
                                        return builder.build();
                                }
                        });

                        rootSchema.add("TABLE_RESULT", new AbstractTable() {
                                public RelDataType getRowType(final 
RelDataTypeFactory typeFactory) {
                                        RelDataTypeFactory.FieldInfoBuilder 
builder = typeFactory.builder();
                                        builder.add("ID", new BasicSqlType(new 
RelDataTypeSystemImpl() {
                                        }, SqlTypeName.INTEGER));
                                        builder.add("NAME", new 
BasicSqlType(new RelDataTypeSystemImpl() {
                                        }, SqlTypeName.CHAR));
                                        builder.add("SCORE", new 
BasicSqlType(new RelDataTypeSystemImpl() {
                                        }, SqlTypeName.INTEGER));
                                        return builder.build();
                                }
                        });
                        final FrameworkConfig config = 
Frameworks.newConfigBuilder()
                                        .parserConfig(SqlParser.Config.DEFAULT)
                                        .defaultSchema(rootSchema)
                                        .build();
                        Planner planner = Frameworks.getPlanner(config);

                        SqlNode parse1 = planner.parse("insert into 
table_result(id, name, score) select a.id as id, a.name as name, 1 from users a 
where month(a.time_d - interval '30' day) >= 2");
                        SqlNode validate = planner.validate(parse1);

                        RelRoot root = planner.rel(validate);

                        RexBuilder builder1 = 
root.rel.getCluster().getRexBuilder();
                        LogicalFilter filter = (LogicalFilter) 
root.rel.getInput(0).getInput(0);

                        //get RexCall of SqlDatetimeSubtractionOperator
                        RexCall call = (RexCall) ((RexCall) ((RexCall) 
filter.getCondition()).operands.get(0)).getOperands().get(1);

                        builder1.makeCall(call.getOperator(), 
call.getOperands());

                        HepProgramBuilder builder = new HepProgramBuilder();
                        
//builder.addRuleInstance(FilterJoinRule.FilterIntoJoinRule.FILTER_ON_JOIN);
                        //builder.addRuleInstance(FilterJoinRule.JOIN);
                        builder.addRuleCollection(Programs.RULE_SET);
                        HepPlanner hepPlanner = new HepPlanner(builder.build());
                        hepPlanner.setRoot(root.rel);
                        RelNode node = hepPlanner.findBestExp();

                        System.out.println("After-------------------->");
                        System.out.print(RelOptUtil.toString(node));

                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
{code}
)

> Failed to build RexCall with SqlDatetimeSubtractionOperator
> -----------------------------------------------------------
>
>                 Key: FLINK-9492
>                 URL: https://issues.apache.org/jira/browse/FLINK-9492
>             Project: Flink
>          Issue Type: Bug
>    Affects Versions: 1.5.0
>            Reporter: yuqi
>            Assignee: yuqi
>            Priority: Minor
>
> When use RexBuilder to build RexCall with SqlDatetimeSubtractionOperator, it 
> will throw exception.
> {code:java}
> java.lang.IndexOutOfBoundsException: index (2) must be less than size (2)
>       at 
> com.google.common.base.Preconditions.checkElementIndex(Preconditions.java:310)
>       at 
> com.google.common.base.Preconditions.checkElementIndex(Preconditions.java:293)
>       at 
> com.google.common.collect.RegularImmutableList.get(RegularImmutableList.java:67)
>       at 
> org.apache.calcite.rex.RexCallBinding.getOperandType(RexCallBinding.java:132)
>       at 
> org.apache.calcite.sql.type.OrdinalReturnTypeInference.inferReturnType(OrdinalReturnTypeInference.java:40)
>       at 
> org.apache.calcite.sql.type.SqlTypeTransformCascade.inferReturnType(SqlTypeTransformCascade.java:54)
>       at 
> org.apache.calcite.sql.SqlOperator.inferReturnType(SqlOperator.java:470)
>       at 
> org.apache.calcite.rex.RexBuilder.deriveReturnType(RexBuilder.java:274)
>       at org.apache.calcite.rex.RexBuilder.makeCall(RexBuilder.java:248)
>       at com.netease.yuqi.calcatetest.TestThree.main(TestThree.java:100)
> {code}



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

Reply via email to