Package org.apache.calcite.sql2rel
Class RelStructuredTypeFlattener
java.lang.Object
org.apache.calcite.sql2rel.RelStructuredTypeFlattener
- All Implemented Interfaces:
ReflectiveVisitor
RelStructuredTypeFlattener removes all structured types from a tree of
relational expressions. Because it must operate globally on the tree, it is
implemented as an explicit self-contained rewrite operation instead of via
normal optimizer rules. This approach has the benefit that real optimizer and
codegen rules never have to deal with structured types.
As an example, suppose we have a structured type ST(A1 smallint, A2
bigint), a table T(c1 ST, c2 double), and a query
select t.c2, t.c1.a2 from t. After SqlToRelConverter executes, the
unflattened tree looks like:
LogicalProject(C2=[$1], A2=[$0.A2]) LogicalTableScan(table=[T])
After flattening, the resulting tree looks like
LogicalProject(C2=[$3], A2=[$2]) FtrsIndexScanRel(table=[T], index=[clustered])
The index scan produces a flattened row type (boolean, smallint,
bigint, double) (the boolean is a null indicator for c1), and the
projection picks out the desired attributes (omitting $0 and
$1 altogether). After optimization, the projection might be
pushed down into the index scan, resulting in a final tree like
FtrsIndexScanRel(table=[T], index=[clustered], projection=[3, 2])
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceMix-in interface for relational expressions that know how to flatten themselves. -
Constructor Summary
ConstructorsConstructorDescriptionRelStructuredTypeFlattener(RexBuilder rexBuilder, RelOptTable.ToRelContext toRelContext, boolean restructure) Deprecated.RelStructuredTypeFlattener(RelBuilder relBuilder, RexBuilder rexBuilder, RelOptTable.ToRelContext toRelContext, boolean restructure) -
Method Summary
Modifier and TypeMethodDescriptionprotected Ord<RelDataType>getNewFieldForOldInput(int oldOrdinal) Maps the ordinal of a field pre-flattening to the ordinal of the corresponding field post-flattening, and also returns its type.protected intgetNewForOldInput(int oldOrdinal) Maps the ordinal of a field pre-flattening to the ordinal of the corresponding field post-flattening.protected RelNodegetNewForOldRel(RelNode oldRel) voidrewriteGeneric(RelNode rel) voidrewriteRel(Collect rel) voidrewriteRel(Sample rel) voidrewriteRel(Sort rel) voidrewriteRel(TableScan rel) voidrewriteRel(Uncollect rel) voidvoidvoidrewriteRel(LogicalCalc rel) voidvoidvoidrewriteRel(LogicalFilter rel) voidvoidrewriteRel(LogicalJoin rel) voidrewriteRel(LogicalMatch rel) voidrewriteRel(LogicalMinus rel) voidrewriteRel(LogicalProject rel) voidvoidvoidvoidvoidvoidvoidrewriteRel(LogicalUnion rel) voidrewriteRel(LogicalValues rel) voidrewriteRel(LogicalChi rel) voidrewriteRel(LogicalDelta rel) voidprotected voidsetNewForOldRel(RelNode oldRel, RelNode newRel) voidupdateRelInMap(com.google.common.collect.SortedSetMultimap<RelNode, CorrelationId> mapRefRelToCorVar) voidupdateRelInMap(SortedMap<CorrelationId, LogicalCorrelate> mapCorVarToCorRel)
-
Constructor Details
-
RelStructuredTypeFlattener
@Deprecated public RelStructuredTypeFlattener(RexBuilder rexBuilder, RelOptTable.ToRelContext toRelContext, boolean restructure) Deprecated. -
RelStructuredTypeFlattener
public RelStructuredTypeFlattener(RelBuilder relBuilder, RexBuilder rexBuilder, RelOptTable.ToRelContext toRelContext, boolean restructure)
-
-
Method Details
-
updateRelInMap
public void updateRelInMap(com.google.common.collect.SortedSetMultimap<RelNode, CorrelationId> mapRefRelToCorVar) -
updateRelInMap
-
rewrite
-
setNewForOldRel
-
getNewForOldRel
-
getNewForOldInput
protected int getNewForOldInput(int oldOrdinal) Maps the ordinal of a field pre-flattening to the ordinal of the corresponding field post-flattening.- Parameters:
oldOrdinal- Pre-flattening ordinal- Returns:
- Post-flattening ordinal
-
getNewFieldForOldInput
Maps the ordinal of a field pre-flattening to the ordinal of the corresponding field post-flattening, and also returns its type.- Parameters:
oldOrdinal- Pre-flattening ordinal- Returns:
- Post-flattening ordinal and type
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteGeneric
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-
rewriteRel
-