[jira] [Commented] (CALCITE-2349) Failed to build RexCall with SqlDatetimeSubtractionOperator

2018-06-06 Thread Julian Hyde (JIRA)


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

Julian Hyde commented on CALCITE-2349:
--

There is more than one operator for "-". They are overloaded: "( - 
) " and also " - ".

> Failed to build RexCall with SqlDatetimeSubtractionOperator
> ---
>
> Key: CALCITE-2349
> URL: https://issues.apache.org/jira/browse/CALCITE-2349
> Project: Calcite
>  Issue Type: Bug
>  Components: core
>Affects Versions: 1.16.0
>Reporter: yuqi
>Assignee: Julian Hyde
>Priority: Minor
> Fix For: 1.17.0
>
> Attachments: 1.png, screenshot-1.png
>
>
> 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}
> Below is My code:
> {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 

[jira] [Commented] (CALCITE-2349) Failed to build RexCall with SqlDatetimeSubtractionOperator

2018-06-06 Thread yuqi (JIRA)


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

yuqi commented on CALCITE-2349:
---

[~julianhyde]
As the JavaDoc says:

A special operator for the subtraction of two DATETIMEs. The format of DATETIME 
subtraction is:
"("  "-"  ")" 
This operator is special since* it needs to hold the additional interval 
qualifier specification*, when in SqlCall form. *In RexNode form, it has only 
two parameters, and the return type describes the desired type of intervall*.

This may be a little puzzled.  In SqlCall it have three operands and In RexNode 
only two. However, SqlDatetimeSubtractionOperator was initialized three and the 
return type of this operator is the type of the third operand. 

So, can you help me clarify this ? thanks 



> Failed to build RexCall with SqlDatetimeSubtractionOperator
> ---
>
> Key: CALCITE-2349
> URL: https://issues.apache.org/jira/browse/CALCITE-2349
> Project: Calcite
>  Issue Type: Bug
>  Components: core
>Affects Versions: 1.16.0
>Reporter: yuqi
>Assignee: Julian Hyde
>Priority: Minor
> Fix For: 1.17.0
>
> Attachments: 1.png, screenshot-1.png
>
>
> 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}
> Below is My code:
> {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);
>   

[jira] [Commented] (CALCITE-2349) Failed to build RexCall with SqlDatetimeSubtractionOperator

2018-06-02 Thread yuqi (JIRA)


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

yuqi commented on CALCITE-2349:
---

[~julianhyde]
I'am a little confused, DateTime is not a type in calcite, but a type set, 
SqlTypeName do not contains type of DateTime


{code:java}
  public static final List DATETIME_TYPES =
  ImmutableList.of(DATE, TIME, TIME_WITH_LOCAL_TIME_ZONE,
  TIMESTAMP, TIMESTAMP_WITH_LOCAL_TIME_ZONE);
{code}

So, i can't understand why you say it only accept datetime. 

More about it,  I wonder why calcite can pass that sql, as you know field 
time_d is a timestamp 
 !screenshot-1.png! 

Value of $2 is a timestamp, if i do make call the RexBuilder.makeCall(),  the 
function will goes well.




> Failed to build RexCall with SqlDatetimeSubtractionOperator
> ---
>
> Key: CALCITE-2349
> URL: https://issues.apache.org/jira/browse/CALCITE-2349
> Project: Calcite
>  Issue Type: Bug
>  Components: core
>Affects Versions: 1.16.0
>Reporter: yuqi
>Assignee: Julian Hyde
>Priority: Minor
> Fix For: 1.17.0
>
> Attachments: 1.png, screenshot-1.png
>
>
> 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}
> Below is My code:
> {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 
> 

[jira] [Commented] (CALCITE-2349) Failed to build RexCall with SqlDatetimeSubtractionOperator

2018-06-02 Thread Julian Hyde (JIRA)


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

Julian Hyde commented on CALCITE-2349:
--

That operator is only for subtracting a datetime from a datetime.

> Failed to build RexCall with SqlDatetimeSubtractionOperator
> ---
>
> Key: CALCITE-2349
> URL: https://issues.apache.org/jira/browse/CALCITE-2349
> Project: Calcite
>  Issue Type: Bug
>  Components: core
>Affects Versions: 1.16.0
>Reporter: yuqi
>Assignee: Julian Hyde
>Priority: Minor
> Fix For: 1.17.0
>
> Attachments: 1.png
>
>
> 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}
> Below is My code:
> {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
>   

[jira] [Commented] (CALCITE-2349) Failed to build RexCall with SqlDatetimeSubtractionOperator

2018-06-01 Thread yuqi (JIRA)


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

yuqi commented on CALCITE-2349:
---

[~julianhyde]
I debug it and the number of operands of two, not three, am i wrong ? see the 
picture.
 !1.png! 


> Failed to build RexCall with SqlDatetimeSubtractionOperator
> ---
>
> Key: CALCITE-2349
> URL: https://issues.apache.org/jira/browse/CALCITE-2349
> Project: Calcite
>  Issue Type: Bug
>  Components: core
>Affects Versions: 1.16.0
>Reporter: yuqi
>Assignee: Julian Hyde
>Priority: Minor
> Fix For: 1.17.0
>
> Attachments: 1.png
>
>
> 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}
> Below is My code:
> {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 

[jira] [Commented] (CALCITE-2349) Failed to build RexCall with SqlDatetimeSubtractionOperator

2018-06-01 Thread Julian Hyde (JIRA)


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

Julian Hyde commented on CALCITE-2349:
--

You're probably supplying the wrong number of operands. {{ - 
}} has two operands. {{ -  }} has 
three. Just because you get an error it doesn't mean the bug is in Calcite's 
code.

> Failed to build RexCall with SqlDatetimeSubtractionOperator
> ---
>
> Key: CALCITE-2349
> URL: https://issues.apache.org/jira/browse/CALCITE-2349
> Project: Calcite
>  Issue Type: Bug
>  Components: core
>Affects Versions: 1.16.0
>Reporter: yuqi
>Assignee: Julian Hyde
>Priority: Minor
> Fix For: 1.17.0
>
>
> 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}
> Below is My code:
> {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);
>