private void explainInputs(List<RelNode> inputs) { for (RelNode input : inputs) { input.explain(this); } }
private void explainInputs(List<RelNode> inputs) { for (RelNode input : inputs) { input.explain(this); } }
@Override public void explain(RelWriter pw) { currentRel.explain(pw); }
private List<Object> explainInputs(List<RelNode> inputs) { final List<Object> list = jsonBuilder.list(); for (RelNode input : inputs) { String id = relIdMap.get(input); if (id == null) { input.explain(this); id = previousId; } list.add(id); } return list; }
/** * Converts a relational expression to a string. */ public static String toString(final RelNode rel) { final StringWriter sw = new StringWriter(); final RelOptPlanWriter planWriter = new RelOptPlanWriter(new PrintWriter(sw)); planWriter.setIdPrefix(false); rel.explain(planWriter); return sw.toString(); }
/** * Converts a relational expression to a string. */ public static String toString( final RelNode rel, SqlExplainLevel detailLevel) { if (rel == null) { return null; } final StringWriter sw = new StringWriter(); final RelWriter planWriter = new RelWriterImpl( new PrintWriter(sw), detailLevel, false); rel.explain(planWriter); return sw.toString(); }
/** * Dumps a plan as a string. * * @param header Header to print before the plan. Ignored if the format * is XML. * @param rel Relational expression to explain. * @param asXml Whether to format as XML. * @param detailLevel Detail level. * @return Plan */ public static String dumpPlan( String header, RelNode rel, boolean asXml, SqlExplainLevel detailLevel) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); if (!header.equals("")) { pw.println(header); } RelWriter planWriter; if (asXml) { planWriter = new RelXmlWriter(pw, detailLevel); } else { planWriter = new RelWriterImpl(pw, detailLevel, false); } rel.explain(planWriter); pw.flush(); return sw.toString(); }
rel.explain(planWriter); pw.flush(); return sw.toString();
@Test public void testExplainAsXml() { String sql = "select 1 + 2, 3 from (values (true))"; final RelNode rel = tester.convertSqlToRel(sql); StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); RelXmlWriter planWriter = new RelXmlWriter(pw, SqlExplainLevel.EXPPLAN_ATTRIBUTES); rel.explain(planWriter); pw.flush(); TestUtil.assertEqualsVerbose( "<RelNode type=\"ProjectRel\">\n" + "\t<Property name=\"EXPR$0\">\n" + "\t\t+(1, 2)\t</Property>\n" + "\t<Property name=\"EXPR$1\">\n" + "\t\t3\t</Property>\n" + "\t<Inputs>\n" + "\t\t<RelNode type=\"ValuesRel\">\n" + "\t\t\t<Property name=\"tuples\">\n" + "\t\t\t\t[{ true }]\t\t\t</Property>\n" + "\t\t\t<Inputs/>\n" + "\t\t</RelNode>\n" + "\t</Inputs>\n" + "</RelNode>\n", Util.toLinux(sw.toString())); }
@Test public void testExplainAsXml() { String sql = "select 1 + 2, 3 from (values (true))"; final RelNode rel = tester.convertSqlToRel(sql); StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); RelOptXmlPlanWriter planWriter = new RelOptXmlPlanWriter(pw, SqlExplainLevel.EXPPLAN_ATTRIBUTES); rel.explain(planWriter); pw.flush(); TestUtil.assertEqualsVerbose( TestUtil.fold( "<RelNode type=\"ProjectRel\">\n" + "\t<Property name=\"EXPR$0\">\n" + "\t\t+(1, 2)\t</Property>\n" + "\t<Property name=\"EXPR$1\">\n" + "\t\t3\t</Property>\n" + "\t<Inputs>\n" + "\t\t<RelNode type=\"ValuesRel\">\n" + "\t\t\t<Property name=\"tuples\">\n" + "\t\t\t\t[{ true }]\t\t\t</Property>\n" + "\t\t\t<Inputs/>\n" + "\t\t</RelNode>\n" + "\t</Inputs>\n" + "</RelNode>\n" + ""), sw.toString()); }
spacer.add(2); for (RelNode input : rel.getInputs()) { input.explain(this);
spacer.add(2); for (RelNode input : rel.getInputs()) { input.explain(this);
spacer.add(2); for (RelNode input : inputs) { input.explain(this);
spacer.add(2); for (RelNode input : inputs) { input.explain(this);
public static void foo(RelNode rel) { rel.explain(writer); final String json = writer.asString();