[ https://issues.apache.org/jira/browse/CALCITE-3304?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Danny Chan resolved CALCITE-3304. --------------------------------- Resolution: Not A Bug > SqlValidatorException when use calcite view > ------------------------------------------- > > Key: CALCITE-3304 > URL: https://issues.apache.org/jira/browse/CALCITE-3304 > Project: Calcite > Issue Type: Bug > Reporter: Water Cut Off > Priority: Major > Attachments: image-2019-08-28-19-15-23-485.png, > image-2019-08-28-19-16-22-659.png, image-2019-08-28-19-17-40-352.png > > > *{color:#00875a}v_emp:'s sql : select * from emp where empid>10.{color}* > > *{color:#de350b}Problem 1:{color}* > *{color:#de350b}When I use calcite view (as in the blow, v_emp is a view ), > it occurs such problem, why ?(The test SQL is{color}* > ”select empid from v_emp where v_emp.empid in(select empid from emp where > empid=1)” > *{color:#de350b}){color}* > !image-2019-08-28-19-17-40-352.png! > ------------------------------------------------------- > My Config is blow, since I have set *CaseSensitive is false.* > final FrameworkConfig fromworkConfig = > Frameworks.newConfigBuilder().parserConfig(SqlParser.configBuilder().{color:#de350b}*setCaseSensitive(false)*.{color}build()).defaultSchema(rootSchema).traitDefs(ConventionTraitDef.INSTANCE, > RelDistributionTraitDef.INSTANCE).build(); > > > *{color:#de350b}Problem 2:{color}* > *{color:#de350b}when I use view, how I can get RelDataType? Thanks a > lot.{color}* > > 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) > { return expandView(context, relOptTable.getRowType(), viewSql).rel; } > @Override > {color:#de350b}public RelDataType getRowType(final RelDataTypeFactory > typeFactory) {{color} > {color:#de350b} return *???*{color} > {color:#de350b} }{color} > @Override > public Schema.TableType getJdbcTableType() > { return Schema.TableType.VIEW; } > 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 translatableTable.toRel(context, table); } > return super.visit(scan); > } > }); > return root.withRel(rel2); > } catch (Exception e) > { throw new RuntimeException("Error while parsing view definition: " + > queryString, e); } > } > } > > > -- This message was sent by Atlassian Jira (v8.3.2#803003)