public AbstractIndexPlanGenerator(IndexCallContext indexContext, RexNode indexCondition, RexNode remainderCondition, RexBuilder builder, PlannerSettings settings) { super(indexContext.getCall()); this.origProject = indexContext.getLowerProject(); this.origScan = indexContext.getScan(); this.upperProject = indexContext.getUpperProject(); this.indexCondition = indexCondition; this.remainderCondition = remainderCondition; this.indexContext = indexContext; this.builder = builder; this.settings = settings; }
int idx = collation.getFieldIndex(); DrillProjectRelBase oneProject; if (indexContext.getUpperProject() != null && indexContext.getLowerProject() != null) { LogicalExpression expr = RexToExpression.toDrill(parserContext, indexContext.getLowerProject(), indexContext.getScan(), indexContext.getUpperProject().getProjects().get(idx)); indexContext.getSortExprs().add(expr); oneProject = (indexContext.getUpperProject() != null)? indexContext.getUpperProject() : indexContext.getLowerProject(); if (oneProject != null) { LogicalExpression expr = RexToExpression.toDrill(parserContext, null, indexContext.getScan(),
if (indexContext.getFilter() != null && indexContext.getUpperProject() == null) { if (!isFullQuery(indexContext)) { return false; if (indexContext.getUpperProject() != null) { if (indexContext.getLowerProject() == null) { for (RexNode rex : indexContext.getUpperProject().getProjects()) { LogicalExpression expr = RexToExpression.toDrill(parserContext, null, indexContext.getScan(), rex); exprs.add(expr); for (RexNode rex : indexContext.getUpperProject().getProjects()) { LogicalExpression expr = RexToExpression.toDrill(parserContext, indexContext.getLowerProject(), indexContext.getScan(), rex); exprs.add(expr);
private boolean buildAndCheckCollation(IndexProperties indexProps) { IndexDescriptor indexDesc = indexProps.getIndexDesc(); FunctionalIndexInfo functionInfo = indexDesc.getFunctionalInfo(); RelCollation inputCollation; // for the purpose of collation we can assume that a covering index scan would provide // the collation property that would be relevant for non-covering as well ScanPrel indexScanPrel = IndexPlanUtils.buildCoveringIndexScan(indexContext.getScan(), indexDesc.getIndexGroupScan(), indexContext, indexDesc); inputCollation = indexScanPrel.getTraitSet().getTrait(RelCollationTraitDef.INSTANCE); // we don't create collation for Filter because it will inherit the child's collation if (indexContext.hasLowerProject()) { inputCollation = IndexPlanUtils.buildCollationProject(indexContext.getLowerProject().getProjects(), null, indexContext.getScan(), functionInfo,indexContext); } if (indexContext.hasUpperProject()) { inputCollation = IndexPlanUtils.buildCollationProject(indexContext.getUpperProject().getProjects(), indexContext.getLowerProject(), indexContext.getScan(), functionInfo, indexContext); } if ((inputCollation != null) && (inputCollation.satisfies(indexContext.getCollation()))) { return true; } return false; }