public RelWriter explainTerms(RelWriter pw) { // A little adapter just to get the tuples to come out // with curly brackets instead of square brackets. Plus // more whitespace for readability. return super.explainTerms(pw) // For rel digest, include the row type since a rendered // literal may leave the type ambiguous (e.g. "null"). .itemIf("type", rowType, pw.getDetailLevel() == SqlExplainLevel.DIGEST_ATTRIBUTES) .itemIf("type", rowType.getFieldList(), pw.nest()) .itemIf("tuples", Lists.transform(tuples, Values::apply), !pw.nest()) .itemIf("tuples", tuples, pw.nest()); } }
public RelWriter explainTerms(RelWriter pw) { // A little adapter just to get the tuples to come out // with curly brackets instead of square brackets. Plus // more whitespace for readability. return super.explainTerms(pw) // For rel digest, include the row type since a rendered // literal may leave the type ambiguous (e.g. "null"). .itemIf("type", rowType, pw.getDetailLevel() == SqlExplainLevel.DIGEST_ATTRIBUTES) .itemIf("type", rowType.getFieldList(), pw.nest()) .itemIf("tuples", Lists.transform(tuples, Values::apply), !pw.nest()) .itemIf("tuples", tuples, pw.nest()); } }
public RelWriter explainTerms(RelWriter pw) { // We skip the "groups" element if it is a singleton of "group". super.explainTerms(pw) .item("group", groupSet) .itemIf("groups", groupSets, getGroupType() != Group.SIMPLE) .itemIf("indicator", indicator, indicator) .itemIf("aggs", aggCalls, pw.nest()); if (!pw.nest()) { for (Ord<AggregateCall> ord : Ord.zip(aggCalls)) { pw.item(Util.first(ord.e.name, "agg#" + ord.i), ord.e); } } return pw; }
public RelWriter explainTerms(RelWriter pw) { // We skip the "groups" element if it is a singleton of "group". super.explainTerms(pw) .item("group", groupSet) .itemIf("groups", groupSets, getGroupType() != Group.SIMPLE) .itemIf("indicator", indicator, indicator) .itemIf("aggs", aggCalls, pw.nest()); if (!pw.nest()) { for (Ord<AggregateCall> ord : Ord.zip(aggCalls)) { pw.item(Util.first(ord.e.name, "agg#" + ord.i), ord.e); } } return pw; }
@Override public RelWriter explainTerms(RelWriter pw) { super.explainTerms(pw); if (pw.nest()) { pw.item("collation", collation); } else { for (Ord<RelFieldCollation> ord : Ord.zip(collation.getFieldCollations())) { pw.item("sort" + ord.i, ord.e); } } return pw; }
@Override public RelWriter explainTerms(RelWriter pw) { super.explainTerms(pw); if (pw.nest()) { pw.item("collation", collation); } else { for (Ord<RelFieldCollation> ord : Ord.zip(collation.getFieldCollations())) { pw.item("sort" + ord.i, ord.e); } } return pw; }
public RelWriter explainTerms(RelWriter pw) { super.explainTerms(pw); assert fieldExps.size() == collation.getFieldCollations().size(); if (pw.nest()) { pw.item("collation", collation); } else { for (Ord<RexNode> ord : Ord.zip(fieldExps)) { pw.item("sort" + ord.i, ord.e); } for (Ord<RelFieldCollation> ord : Ord.zip(collation.getFieldCollations())) { pw.item("dir" + ord.i, ord.e.shortString()); } } pw.itemIf("offset", offset, offset != null); pw.itemIf("fetch", fetch, fetch != null); return pw; } }
public RelWriter explainTerms(RelWriter pw) { super.explainTerms(pw); assert fieldExps.size() == collation.getFieldCollations().size(); if (pw.nest()) { pw.item("collation", collation); } else { for (Ord<RexNode> ord : Ord.zip(fieldExps)) { pw.item("sort" + ord.i, ord.e); } for (Ord<RelFieldCollation> ord : Ord.zip(collation.getFieldCollations())) { pw.item("dir" + ord.i, ord.e.shortString()); } } pw.itemIf("offset", offset, offset != null); pw.itemIf("fetch", fetch, fetch != null); return pw; } }
public RelWriter explainTerms(RelWriter pw) { super.explainTerms(pw); if (pw.nest()) { pw.item("fields", rowType.getFieldNames()); pw.item("exprs", exps); } else { for (Ord<RelDataTypeField> field : Ord.zip(rowType.getFieldList())) { String fieldName = field.e.getName(); if (fieldName == null) { fieldName = "field#" + field.i; } pw.item(fieldName, exps.get(field.i)); } } // If we're generating a digest, include the rowtype. If two projects // differ in return type, we don't want to regard them as equivalent, // otherwise we will try to put rels of different types into the same // planner equivalence set. //CHECKSTYLE: IGNORE 2 if ((pw.getDetailLevel() == SqlExplainLevel.DIGEST_ATTRIBUTES) && false) { pw.item("type", rowType); } return pw; }
public RelWriter explainTerms(RelWriter pw) { super.explainTerms(pw); if (pw.nest()) { pw.item("fields", rowType.getFieldNames()); pw.item("exprs", exps); } else { for (Ord<RelDataTypeField> field : Ord.zip(rowType.getFieldList())) { String fieldName = field.e.getName(); if (fieldName == null) { fieldName = "field#" + field.i; } pw.item(fieldName, exps.get(field.i)); } } // If we're generating a digest, include the rowtype. If two projects // differ in return type, we don't want to regard them as equivalent, // otherwise we will try to put rels of different types into the same // planner equivalence set. //CHECKSTYLE: IGNORE 2 if ((pw.getDetailLevel() == SqlExplainLevel.DIGEST_ATTRIBUTES) && false) { pw.item("type", rowType); } return pw; }
@Override public RelWriter explainTerms(RelWriter pw) { return super.explainTerms(pw) .itemIf("type", this.rowType, pw.getDetailLevel() == SqlExplainLevel.DIGEST_ATTRIBUTES) .itemIf("type", this.rowType.getFieldList(), pw.nest()) .itemIf("tuplesCount", rowCount, pw.getDetailLevel() != SqlExplainLevel.ALL_ATTRIBUTES) .itemIf("tuples", options.asNode(), pw.getDetailLevel() == SqlExplainLevel.DIGEST_ATTRIBUTES); }