@Override public RelOptCost computeSelfCost(RelOptPlanner planner, RelMetadataQuery mq) { double rowCount = mq.getRowCount(this); final double rightRowCount = right.estimateRowCount(mq); final double leftRowCount = left.estimateRowCount(mq); if (Double.isInfinite(leftRowCount) || Double.isInfinite(rightRowCount)) { return planner.getCostFactory().makeInfiniteCost(); } Double restartCount = mq.getRowCount(getLeft()); // RelMetadataQuery.getCumulativeCost(getRight()); does not work for // RelSubset, so we ask planner to cost-estimate right relation RelOptCost rightCost = planner.getCost(getRight(), mq); RelOptCost rescanCost = rightCost.multiplyBy(Math.max(1.0, restartCount - 1)); return planner.getCostFactory().makeCost( rowCount /* generate results */ + leftRowCount /* scan left results */, 0, 0).plus(rescanCost); } }
@Override public RelOptCost computeSelfCost(RelOptPlanner planner, RelMetadataQuery mq) { double rowCount = mq.getRowCount(this); final double rightRowCount = right.estimateRowCount(mq); final double leftRowCount = left.estimateRowCount(mq); if (Double.isInfinite(leftRowCount) || Double.isInfinite(rightRowCount)) { return planner.getCostFactory().makeInfiniteCost(); } Double restartCount = mq.getRowCount(getLeft()); // RelMetadataQuery.getCumulativeCost(getRight()); does not work for // RelSubset, so we ask planner to cost-estimate right relation RelOptCost rightCost = planner.getCost(getRight(), mq); RelOptCost rescanCost = rightCost.multiplyBy(Math.max(1.0, restartCount - 1)); return planner.getCostFactory().makeCost( rowCount /* generate results */ + leftRowCount /* scan left results */, 0, 0).plus(rescanCost); } }
corrRel.getLeft().getRowType().getFieldList(); List<RelDataTypeField> rightFields = corrRel.getRight().getRowType().getFieldList(); nFields = leftFields.size(); SemiJoinType joinType = corrRel.getJoinType();
corrRel.getLeft().getRowType().getFieldList(); List<RelDataTypeField> rightFields = corrRel.getRight().getRowType().getFieldList(); nFields = leftFields.size(); SemiJoinType joinType = corrRel.getJoinType();
final ImmutableBitSet rightColumns = leftAndRightColumns.right; final RelNode left = rel.getLeft(); final RelNode right = rel.getRight();
final ImmutableBitSet rightColumns = leftAndRightColumns.right; final RelNode left = rel.getLeft(); final RelNode right = rel.getRight();
relBuilder.push(corr.getLeft()).filter(leftFilters).build(); final RelNode rightRel = relBuilder.push(corr.getRight()).filter(rightFilters).build();
relBuilder.push(corr.getLeft()).filter(leftFilters).build(); final RelNode rightRel = relBuilder.push(corr.getRight()).filter(rightFilters).build();
RelNode rightProjRel = pushProject.createProjectRefsAndExprs( corr.getRight(), true, true);
RelNode rightProjRel = pushProject.createProjectRefsAndExprs( corr.getRight(), true, true);
final Correlate correlate = (Correlate) rel; final MutableRel left = toMutable(correlate.getLeft()); final MutableRel right = toMutable(correlate.getRight()); return MutableCorrelate.of(correlate.getRowType(), left, right, correlate.getCorrelationId(), correlate.getRequiredColumns(),
final Correlate correlate = (Correlate) rel; final MutableRel left = toMutable(correlate.getLeft()); final MutableRel right = toMutable(correlate.getRight()); return MutableCorrelate.of(correlate.getRowType(), left, right, correlate.getCorrelationId(), correlate.getRequiredColumns(),