/** Generates expressions that reference the flattened input fields from * a given row type. */ private void flattenInputs(List<RelDataTypeField> fieldList, RexNode prefix, List<Pair<RexNode, String>> flattenedExpList) { for (RelDataTypeField field : fieldList) { final RexNode ref = rexBuilder.makeFieldAccess(prefix, field.getIndex()); if (field.getType().isStruct()) { flattenInputs(field.getType().getFieldList(), ref, flattenedExpList); } else { flattenedExpList.add(Pair.of(ref, field.getName())); } } }
/** Generates expressions that reference the flattened input fields from * a given row type. */ private void flattenInputs(List<RelDataTypeField> fieldList, RexNode prefix, List<Pair<RexNode, String>> flattenedExpList) { for (RelDataTypeField field : fieldList) { final RexNode ref = rexBuilder.makeFieldAccess(prefix, field.getIndex()); if (field.getType().isStruct()) { flattenInputs(field.getType().getFieldList(), ref, flattenedExpList); } else { flattenedExpList.add(Pair.of(ref, field.getName())); } } }
public void rewriteRel(TableScan rel) { RelNode newRel = rel.getTable().toRel(toRelContext); if (!SqlTypeUtil.isFlat(rel.getRowType())) { final List<Pair<RexNode, String>> flattenedExpList = new ArrayList<>(); flattenInputs(rel.getRowType().getFieldList(), rexBuilder.makeRangeReference(newRel), flattenedExpList); newRel = relBuilder.push(newRel) .projectNamed(Pair.left(flattenedExpList), Pair.right(flattenedExpList), true) .build(); } setNewForOldRel(rel, newRel); }
public void rewriteRel(TableScan rel) { RelNode newRel = rel.getTable().toRel(toRelContext); if (!SqlTypeUtil.isFlat(rel.getRowType())) { final List<Pair<RexNode, String>> flattenedExpList = new ArrayList<>(); flattenInputs(rel.getRowType().getFieldList(), rexBuilder.makeRangeReference(newRel), flattenedExpList); newRel = relBuilder.push(newRel) .projectNamed(Pair.left(flattenedExpList), Pair.right(flattenedExpList), true) .build(); } setNewForOldRel(rel, newRel); }