[ 
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)

Reply via email to