I am getting start of Calcite. I want to translate a `SqlNode` to `RelNode`, 
but fails due to assertion error of type mismatch: 
```
ref:
CHAR(1) NOT NULL
input:
CHAR(1) NOT NULL
```


The code is simple:
```
    private static final String sql = "select u.name as user_name\n" +
        "from users u\n" +
        "where u.age > 30";
```
and I am trying to parse -> validate -> convert this sql.
```
        SchemaPlus rootSchema = 
Frameworks.createRootSchema(true);
        rootSchema.add("USERS", new AbstractTable() { 
//note: add a table
            @Override
            public RelDataType getRowType(final 
RelDataTypeFactory typeFactory) {
                
RelDataTypeFactory.Builder builder = typeFactory.builder();


                builder.add("ID", new 
BasicSqlType(new RelDataTypeSystemImpl() {}, SqlTypeName.INTEGER));
                builder.add("NAME", new 
BasicSqlType(new RelDataTypeSystemImpl() {}, SqlTypeName.CHAR));
                builder.add("AGE", new 
BasicSqlType(new RelDataTypeSystemImpl() {}, SqlTypeName.INTEGER));
                return builder.build();
            }
        });


        rootSchema.add("JOBS", new AbstractTable() {
            @Override
            public RelDataType getRowType(final 
RelDataTypeFactory typeFactory) {
                
RelDataTypeFactory.Builder builder = typeFactory.builder();


                builder.add("ID", new 
BasicSqlType(new RelDataTypeSystemImpl() {}, SqlTypeName.INTEGER));
                builder.add("NAME", new 
BasicSqlType(new RelDataTypeSystemImpl() {}, SqlTypeName.CHAR));
                builder.add("COMPANY", 
new BasicSqlType(new RelDataTypeSystemImpl() {}, SqlTypeName.CHAR));
                return builder.build();
            }
        });


        FrameworkConfig frameworkConfig = 
Frameworks.newConfigBuilder()
                
.defaultSchema(rootSchema)
                .build();
        final Planner planner = 
Frameworks.getPlanner(frameworkConfig);
        SqlNode parse = planner.parse(sql);
        SqlNode validate = planner.validate(parse);
        planner.rel(validate);
```


When I running the code, line `planner.rel(validate)` gets error and says:
```
java.lang.AssertionError: type mismatch:
ref:
CHAR(1) NOT NULL
input:
CHAR(1) NOT NULL


        at org.apache.calcite.util.Litmus$1.fail(Litmus.java:31)
        at org.apache.calcite.plan.RelOptUtil.eq(RelOptUtil.java:2000)
        at org.apache.calcite.rex.RexChecker.visitInputRef(RexChecker.java:125)
        at org.apache.calcite.rex.RexChecker.visitInputRef(RexChecker.java:57)
        at org.apache.calcite.rex.RexInputRef.accept(RexInputRef.java:112)
        at org.apache.calcite.rel.core.Project.isValid(Project.java:192)
        at org.apache.calcite.rel.core.Project.<init&gt;(Project.java:83)
        at 
org.apache.calcite.rel.logical.LogicalProject.<init&gt;(LogicalProject.java:62)
        at 
org.apache.calcite.rel.logical.LogicalProject.create(LogicalProject.java:112)
        at 
org.apache.calcite.rel.logical.LogicalProject.create(LogicalProject.java:100)
        at 
org.apache.calcite.rel.core.RelFactories$ProjectFactoryImpl.createProject(RelFactories.java:158)
        at org.apache.calcite.tools.RelBuilder.project(RelBuilder.java:1414)
        at 
org.apache.calcite.tools.RelBuilder.projectNamed(RelBuilder.java:1470)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectList(SqlToRelConverter.java:3955)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:670)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:627)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3181)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:563)
        at org.apache.calcite.prepare.PlannerImpl.rel(PlannerImpl.java:254)
        at org.apache.calcite.test.MyTest.firstTest(MyTest.java:141)
```
Actually, if I do project on `user.id` or `user.age` (`INTEGER` type), 
`SqlNode` convert works fine. However, when I project on `user.name` (`CHAR` 
type), the convert throws errors.


I am working on branch-1.21.


Thanks for sharing some ideas.

Reply via email to