private RelRoot expandView(RelOptTable.ToRelContext preparingStmt, RelDataType rowType, String queryString) { try { RelRoot root = preparingStmt.expandView(rowType, queryString, schemaPath, viewPath); root = root.withRel(RelOptUtil.createCastRel(root.rel, rowType, true)); return root; } catch (Exception e) { throw new RuntimeException("Error while parsing view definition: " + queryString, e); } } }
private RelRoot expandView(RelOptTable.ToRelContext context, RelDataType rowType, String queryString) { try { final RelRoot root = context.expandView(rowType, queryString, schemaPath, viewPath); 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); } } }
@Override public RelNode toRel(ToRelContext context, RelOptTable relOptTable) { ViewExpansionContext.ViewExpansionToken token = null; try { RelDataType rowType = relOptTable.getRowType(); RelNode rel; if (viewExpansionContext.isImpersonationEnabled()) { token = viewExpansionContext.reserveViewExpansionToken(viewOwner); rel = context.expandView(rowType, view.getSql(), token.getSchemaTree(), view.getWorkspaceSchemaPath()).rel; } else { rel = context.expandView(rowType, view.getSql(), view.getWorkspaceSchemaPath(), ImmutableList.<String>of()).rel; } // If the View's field list is not "*", create a cast. if (!view.isDynamic() && !view.hasStar()) { rel = RelOptUtil.createCastRel(rel, rowType, true); } return rel; } finally { if (token != null) { token.release(); } } }