private abstract static class AbstractMaterializedViewRule.MaterializedViewJoinRule extends AbstractMaterializedViewRule
AbstractMaterializedViewRule.MaterializedViewOnlyAggregateRule, AbstractMaterializedViewRule.MaterializedViewOnlyFilterRule, AbstractMaterializedViewRule.MaterializedViewOnlyJoinRule, AbstractMaterializedViewRule.MaterializedViewProjectAggregateRule, AbstractMaterializedViewRule.MaterializedViewProjectFilterRule, AbstractMaterializedViewRule.MaterializedViewProjectJoinRulefastBailOut, generateUnionRewriting, INSTANCE_AGGREGATE, INSTANCE_FILTER, INSTANCE_JOIN, INSTANCE_PROJECT_AGGREGATE, INSTANCE_PROJECT_FILTER, INSTANCE_PROJECT_JOIN, unionRewritingPullProgramdescription, operands, relBuilderFactory| Modifier | Constructor and Description |
|---|---|
protected |
MaterializedViewJoinRule(RelOptRuleOperand operand,
RelBuilderFactory relBuilderFactory,
String description,
boolean generateUnionRewriting,
HepProgram unionRewritingPullProgram,
boolean fastBailOut)
Creates a MaterializedViewJoinRule.
|
| Modifier and Type | Method and Description |
|---|---|
protected AbstractMaterializedViewRule.ViewPartialRewriting |
compensateViewPartial(RelBuilder relBuilder,
RexBuilder rexBuilder,
RelMetadataQuery mq,
RelNode input,
Project topProject,
RelNode node,
Set<RexTableInputRef.RelTableRef> queryTableRefs,
AbstractMaterializedViewRule.EquivalenceClasses queryEC,
Project topViewProject,
RelNode viewNode,
Set<RexTableInputRef.RelTableRef> viewTableRefs)
It checks whether the query can be rewritten using the view even though the
query uses additional tables.
|
protected RelNode |
createUnion(RelBuilder relBuilder,
RexBuilder rexBuilder,
RelNode topProject,
RelNode unionInputQuery,
RelNode unionInputView)
If the view will be used in a union rewriting, this method is responsible for
generating the union and any other operator needed on top of it, e.g., a Project
operator.
|
protected boolean |
isValidPlan(Project topProject,
RelNode node,
RelMetadataQuery mq) |
Pair<RelNode,RelNode> |
pushFilterToOriginalViewPlan(RelBuilder builder,
RelNode topViewProject,
RelNode viewNode,
RexNode cond)
Once we create a compensation predicate, this method is responsible for pushing
the resulting filter through the view nodes.
|
protected RelNode |
rewriteQuery(RelBuilder relBuilder,
RexBuilder rexBuilder,
RexSimplify simplify,
RelMetadataQuery mq,
RexNode compensationColumnsEquiPred,
RexNode otherCompensationPred,
Project topProject,
RelNode node,
com.google.common.collect.BiMap<RexTableInputRef.RelTableRef,RexTableInputRef.RelTableRef> viewToQueryTableMapping,
AbstractMaterializedViewRule.EquivalenceClasses viewEC,
AbstractMaterializedViewRule.EquivalenceClasses queryEC)
If the view will be used in a union rewriting, this method is responsible for
rewriting the query branch of the union using the given compensation predicate.
|
protected RelNode |
rewriteView(RelBuilder relBuilder,
RexBuilder rexBuilder,
RexSimplify simplify,
RelMetadataQuery mq,
AbstractMaterializedViewRule.MatchModality matchModality,
boolean unionRewriting,
RelNode input,
Project topProject,
RelNode node,
Project topViewProject,
RelNode viewNode,
com.google.common.collect.BiMap<RexTableInputRef.RelTableRef,RexTableInputRef.RelTableRef> queryToViewTableMapping,
AbstractMaterializedViewRule.EquivalenceClasses queryEC)
This method is responsible for rewriting the query using the given view query.
|
performany, convert, convert, convertList, convertOperand, equals, equals, getOperand, getOperands, getOutConvention, getOutTrait, hashCode, matches, none, onMatch, operand, operand, operand, operand, operand, some, toString, unorderedprotected MaterializedViewJoinRule(RelOptRuleOperand operand, RelBuilderFactory relBuilderFactory, String description, boolean generateUnionRewriting, HepProgram unionRewritingPullProgram, boolean fastBailOut)
protected boolean isValidPlan(Project topProject, RelNode node, RelMetadataQuery mq)
isValidPlan in class AbstractMaterializedViewRuleprotected AbstractMaterializedViewRule.ViewPartialRewriting compensateViewPartial(RelBuilder relBuilder, RexBuilder rexBuilder, RelMetadataQuery mq, RelNode input, Project topProject, RelNode node, Set<RexTableInputRef.RelTableRef> queryTableRefs, AbstractMaterializedViewRule.EquivalenceClasses queryEC, Project topViewProject, RelNode viewNode, Set<RexTableInputRef.RelTableRef> viewTableRefs)
AbstractMaterializedViewRuleRules implementing the method should follow different approaches depending on the operators they rewrite.
compensateViewPartial in class AbstractMaterializedViewRuleprotected RelNode rewriteQuery(RelBuilder relBuilder, RexBuilder rexBuilder, RexSimplify simplify, RelMetadataQuery mq, RexNode compensationColumnsEquiPred, RexNode otherCompensationPred, Project topProject, RelNode node, com.google.common.collect.BiMap<RexTableInputRef.RelTableRef,RexTableInputRef.RelTableRef> viewToQueryTableMapping, AbstractMaterializedViewRule.EquivalenceClasses viewEC, AbstractMaterializedViewRule.EquivalenceClasses queryEC)
AbstractMaterializedViewRuleIf a rewriting can be produced, we return that rewriting. If it cannot be produced, we will return null.
rewriteQuery in class AbstractMaterializedViewRuleprotected RelNode createUnion(RelBuilder relBuilder, RexBuilder rexBuilder, RelNode topProject, RelNode unionInputQuery, RelNode unionInputView)
AbstractMaterializedViewRulecreateUnion in class AbstractMaterializedViewRuleprotected RelNode rewriteView(RelBuilder relBuilder, RexBuilder rexBuilder, RexSimplify simplify, RelMetadataQuery mq, AbstractMaterializedViewRule.MatchModality matchModality, boolean unionRewriting, RelNode input, Project topProject, RelNode node, Project topViewProject, RelNode viewNode, com.google.common.collect.BiMap<RexTableInputRef.RelTableRef,RexTableInputRef.RelTableRef> queryToViewTableMapping, AbstractMaterializedViewRule.EquivalenceClasses queryEC)
AbstractMaterializedViewRuleThe input node is a Scan on the view table and possibly a compensation Filter on top. If a rewriting can be produced, we return that rewriting. If it cannot be produced, we will return null.
rewriteView in class AbstractMaterializedViewRulepublic Pair<RelNode,RelNode> pushFilterToOriginalViewPlan(RelBuilder builder, RelNode topViewProject, RelNode viewNode, RexNode cond)
AbstractMaterializedViewRuleThe method will return a pair of nodes: the new top project on the left and the new node on the right.
pushFilterToOriginalViewPlan in class AbstractMaterializedViewRuleCopyright © 2012–2018 The Apache Software Foundation. All rights reserved.