Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Not A Bug
-
None
-
None
-
None
Description
v_emp:'s sql : select * from emp where empid>10.
Problem 1:
When I use calcite view (as in the blow, v_emp is a view ), it occurs such problem, why ?(The test SQL is
”select empid from v_emp where v_emp.empid in(select empid from emp where empid=1)”
)
-------------------------------------------------------
My Config is blow, since I have set CaseSensitive is false.
final FrameworkConfig fromworkConfig = Frameworks.newConfigBuilder().parserConfig(SqlParser.configBuilder().setCaseSensitive(false).build()).defaultSchema(rootSchema).traitDefs(ConventionTraitDef.INSTANCE, RelDistributionTraitDef.INSTANCE).build();
Problem 2:
when I use view, how I can get RelDataType? Thanks a lot.
public class MyViewTable extends AbstractTable implements TranslatableTable {
private final String vName;
private final String viewSql;
public MyViewTable (String vName, String viewSql)
{ super(); this.vName = vName; this.viewSql = viewSql; }public String getVName()
{ return vName; }@Override
public RelNode toRel(RelOptTable.ToRelContext context, RelOptTable relOptTable)
@Override
public RelDataType getRowType(final RelDataTypeFactory typeFactory) {
return ???
}
@Override
public Schema.TableType getJdbcTableType()
private RelRoot expandView(RelOptTable.ToRelContext context, RelDataType rowType, String queryString) {
try {
final RelRoot root = context.expandView(rowType, queryString, null, null);
final RelNode rel = RelOptUtil.createCastRel(root.rel, rowType, true);
// Expand any views
final RelNode rel2 = rel.accept(new RelShuttleImpl() {
@Override
public RelNode visit(TableScan scan) {
final RelOptTable table = scan.getTable();
final TranslatableTable translatableTable = table.unwrap(TranslatableTable.class);
if (translatableTable != null)
return super.visit(scan);
}
});
return root.withRel(rel2);
} catch (Exception e)
}
}