project.getRowType()); if (ProjectRemoveRule.isTrivial(newProj) &&
/** * Creates a ProjectRemoveRule. * * @param relBuilderFactory Builder for relational expressions */ public ProjectRemoveRule(RelBuilderFactory relBuilderFactory) { // Create a specialized operand to detect non-matches early. This keeps // the rule queue short. super(operandJ(Project.class, null, ProjectRemoveRule::isTrivial, any()), relBuilderFactory, null); }
/** * Returns the child of a project if the project is trivial, otherwise * the project itself. */ public static RelNode strip(Project project) { return isTrivial(project) ? project.getInput() : project; }
/** * Creates a ProjectRemoveRule. * * @param relBuilderFactory Builder for relational expressions */ public ProjectRemoveRule(RelBuilderFactory relBuilderFactory) { // Create a specialized operand to detect non-matches early. This keeps // the rule queue short. super(operandJ(Project.class, null, ProjectRemoveRule::isTrivial, any()), relBuilderFactory, null); }
/** * Returns the child of a project if the project is trivial, otherwise * the project itself. */ public static RelNode strip(Project project) { return isTrivial(project) ? project.getInput() : project; }
public static boolean isTrivialProject(Project project, boolean useNamesInIdentityProjCalc) { if (!useNamesInIdentityProjCalc) { return ProjectRemoveRule.isTrivial(project); } else { return containIdentity(project.getProjects(), project.getRowType(), project.getInput().getRowType()); } }
public static boolean isTrivialProject(Project project, boolean useNamesInIdentityProjCalc) { if (!useNamesInIdentityProjCalc) { return ProjectRemoveRule.isTrivial(project); } else { return containIdentity(project.getProjects(), project.getRowType(), project.getInput().getRowType()); } }
proj.getRowType()); if (ProjectRemoveRule.isTrivial(newProj)) { call.transformTo(newScan); } else {
public void onMatch(RelOptRuleCall call) { Project project = call.rel(0); assert isTrivial(project); RelNode stripped = project.getInput(); if (stripped instanceof Project) { // Rename columns of child projection if desired field names are given. Project childProject = (Project) stripped; stripped = childProject.copy(childProject.getTraitSet(), childProject.getInput(), childProject.getProjects(), project.getRowType()); } RelNode child = call.getPlanner().register(stripped, project); call.transformTo(child); }
public void onMatch(RelOptRuleCall call) { Project project = call.rel(0); assert isTrivial(project); RelNode stripped = project.getInput(); if (stripped instanceof Project) { // Rename columns of child projection if desired field names are given. Project childProject = (Project) stripped; stripped = childProject.copy(childProject.getTraitSet(), childProject.getInput(), childProject.getProjects(), project.getRowType()); } RelNode child = call.getPlanner().register(stripped, project); call.transformTo(child); }
if (ProjectRemoveRule.isTrivial(newProj)) { return (Prel) child; } else {
@Override public void onMatch(RelOptRuleCall call) { final Project proj = call.rel(0); final ScanCrel scan = call.rel(1); ProjectPushInfo columnInfo = PrelUtil.getColumns(scan.getRowType(), proj.getProjects()); // get TableBase, either wrapped in RelOptTable, or TranslatableTable. TableBase table = scan.getTable().unwrap(TableBase.class); if (columnInfo == null || columnInfo.isStarQuery()) { return; } ScanCrel newScan = scan.cloneWithProject(columnInfo.columns); List<RexNode> newProjects = Lists.newArrayList(); for (RexNode n : proj.getChildExps()) { newProjects.add(n.accept(columnInfo.getInputRewriter())); } final RelBuilder relBuilder = relBuilderFactory.create(proj.getCluster(), null); relBuilder.push(newScan); relBuilder.project(newProjects, proj.getRowType().getFieldNames()); final RelNode newProj = relBuilder.build(); if (newProj instanceof Project && ProjectRemoveRule.isTrivial((Project) newProj) && newScan.getRowType().getFullTypeString().equals(newProj.getRowType().getFullTypeString())) { call.transformTo(newScan); } else { if(newScan.getProjectedColumns().equals(scan.getProjectedColumns())) { // no point in doing a pushdown that doesn't change anything. return; } call.transformTo(newProj); } }
projectRel.getRowType()); if (ProjectRemoveRule.isTrivial(newProject)) { call.transformTo(newScan); } else {
if (ProjectRemoveRule.isTrivial(newProj)) { return (Prel) child; } else {
project.getRowType()); if (ProjectRemoveRule.isTrivial(newTopProj)) { call.transformTo(newLogicalWindow); } else {
project.getRowType()); if (ProjectRemoveRule.isTrivial(newTopProj)) { call.transformTo(newLogicalWindow); } else {
project.getRowType()); if (ProjectRemoveRule.isTrivial(newProject)) { call.transformTo(newScan); } else {
project.getRowType()); if (ProjectRemoveRule.isTrivial(newProj) &&