Search in sources :

Example 1 with DrillDirectScanRel

use of org.apache.drill.exec.planner.logical.DrillDirectScanRel in project drill by apache.

the class DirectScanPrule method onMatch.

@Override
public void onMatch(RelOptRuleCall call) {
    final DrillDirectScanRel scan = call.rel(0);
    final RelTraitSet traits = scan.getTraitSet().plus(Prel.DRILL_PHYSICAL);
    final ScanPrel newScan = new ScanPrel(scan.getCluster(), traits, scan.getGroupScan(), scan.getRowType()) {

        // direct scan (no execution) => no accidental column shuffling => no reordering
        @Override
        public boolean needsFinalColumnReordering() {
            return false;
        }
    };
    call.transformTo(newScan);
}
Also used : RelTraitSet(org.apache.calcite.plan.RelTraitSet) DrillDirectScanRel(org.apache.drill.exec.planner.logical.DrillDirectScanRel)

Example 2 with DrillDirectScanRel

use of org.apache.drill.exec.planner.logical.DrillDirectScanRel in project drill by apache.

the class FindLimit0Visitor method getDirectScanRelIfFullySchemaed.

/**
   * If all field types of the given node are {@link #TYPES recognized types} and honored by execution, then this
   * method returns the tree: DrillDirectScanRel(field types). Otherwise, the method returns null.
   *
   * @param rel calcite logical rel tree
   * @return drill logical rel tree
   */
public static DrillRel getDirectScanRelIfFullySchemaed(RelNode rel) {
    final List<RelDataTypeField> fieldList = rel.getRowType().getFieldList();
    final List<TypeProtos.MajorType> columnTypes = Lists.newArrayList();
    for (final RelDataTypeField field : fieldList) {
        final SqlTypeName sqlTypeName = field.getType().getSqlTypeName();
        if (!TYPES.contains(sqlTypeName)) {
            return null;
        } else {
            final TypeProtos.MajorType.Builder builder = TypeProtos.MajorType.newBuilder().setMode(field.getType().isNullable() ? TypeProtos.DataMode.OPTIONAL : TypeProtos.DataMode.REQUIRED).setMinorType(TypeInferenceUtils.getDrillTypeFromCalciteType(sqlTypeName));
            if (TypeInferenceUtils.isScalarStringType(sqlTypeName)) {
                builder.setPrecision(field.getType().getPrecision());
            }
            columnTypes.add(builder.build());
        }
    }
    final RelTraitSet traits = rel.getTraitSet().plus(DrillRel.DRILL_LOGICAL);
    final RelDataTypeReader reader = new RelDataTypeReader(rel.getRowType().getFieldNames(), columnTypes);
    return new DrillDirectScanRel(rel.getCluster(), traits, new DirectGroupScan(reader, ScanStats.ZERO_RECORD_TABLE), rel.getRowType());
}
Also used : RelDataTypeField(org.apache.calcite.rel.type.RelDataTypeField) SqlTypeName(org.apache.calcite.sql.type.SqlTypeName) DirectGroupScan(org.apache.drill.exec.store.direct.DirectGroupScan) RelTraitSet(org.apache.calcite.plan.RelTraitSet) DrillDirectScanRel(org.apache.drill.exec.planner.logical.DrillDirectScanRel)

Aggregations

RelTraitSet (org.apache.calcite.plan.RelTraitSet)2 DrillDirectScanRel (org.apache.drill.exec.planner.logical.DrillDirectScanRel)2 RelDataTypeField (org.apache.calcite.rel.type.RelDataTypeField)1 SqlTypeName (org.apache.calcite.sql.type.SqlTypeName)1 DirectGroupScan (org.apache.drill.exec.store.direct.DirectGroupScan)1