Skip to content

Commit c62182e

Browse files
committed
[CALCITE-6846] fix code style
1 parent 658371b commit c62182e

File tree

3 files changed

+45
-37
lines changed

3 files changed

+45
-37
lines changed

core/src/main/java/org/apache/calcite/rel/rules/DpHyp.java

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717
package org.apache.calcite.rel.rules;
1818

19+
import org.apache.calcite.plan.RelOptCost;
1920
import org.apache.calcite.rel.RelNode;
2021
import org.apache.calcite.rel.core.JoinRelType;
2122
import org.apache.calcite.rel.metadata.RelMetadataQuery;
@@ -27,8 +28,6 @@
2728
import java.util.HashMap;
2829
import java.util.List;
2930

30-
import static com.google.common.base.Preconditions.checkArgument;
31-
3231
/**
3332
* The core process of dphyp enumeration algorithm.
3433
*/
@@ -127,10 +126,12 @@ private void enumerateCmpRec(long csg, long cmp, long forbidden) {
127126
}
128127

129128
private void emitCsgCmp(long csg, long cmp, List<HyperEdge> edges) {
130-
checkArgument(dpTable.containsKey(csg));
131-
checkArgument(dpTable.containsKey(cmp));
132129
RelNode child1 = dpTable.get(csg);
133130
RelNode child2 = dpTable.get(cmp);
131+
if (child1 == null || child2 == null) {
132+
throw new IllegalArgumentException(
133+
"csg and cmp were not enumerated in the previous dp process");
134+
}
134135

135136
JoinRelType joinType = hyperGraph.extractJoinType(edges);
136137
if (joinType == null) {
@@ -150,18 +151,13 @@ private void emitCsgCmp(long csg, long cmp, List<HyperEdge> edges) {
150151
.push(child1)
151152
.join(joinType, joinCond2)
152153
.build();
153-
RelNode winPlan = mq.getCumulativeCost(newPlan1).isLt(mq.getCumulativeCost(newPlan2))
154-
? newPlan1
155-
: newPlan2;
154+
RelNode winPlan = chooseBetterPlan(newPlan1, newPlan2);
156155

157-
if (!dpTable.containsKey(csg | cmp)) {
158-
dpTable.put(csg | cmp, winPlan);
159-
} else {
160-
RelNode oriPlan = dpTable.get(csg | cmp);
161-
if (mq.getCumulativeCost(winPlan).isLt(mq.getCumulativeCost(oriPlan))) {
162-
dpTable.put(csg | cmp, winPlan);
163-
}
156+
RelNode oriPlan = dpTable.get(csg | cmp);
157+
if (oriPlan != null) {
158+
winPlan = chooseBetterPlan(winPlan, oriPlan);
164159
}
160+
dpTable.put(csg | cmp, winPlan);
165161
}
166162

167163
public @Nullable RelNode getBestPlan() {
@@ -170,4 +166,14 @@ private void emitCsgCmp(long csg, long cmp, List<HyperEdge> edges) {
170166
return dpTable.get(wholeGraph);
171167
}
172168

169+
private RelNode chooseBetterPlan(RelNode plan1, RelNode plan2) {
170+
RelOptCost cost1 = mq.getCumulativeCost(plan1);
171+
RelOptCost cost2 = mq.getCumulativeCost(plan2);
172+
if (cost1 == null || cost2 == null) {
173+
return plan1;
174+
} else {
175+
return cost1.isLt(cost2) ? plan1 : plan2;
176+
}
177+
}
178+
173179
}

core/src/main/java/org/apache/calcite/rel/rules/HyperGraph.java

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -51,25 +51,27 @@
5151
*/
5252
public class HyperGraph extends AbstractRelNode {
5353

54-
private List<RelNode> inputs;
54+
private final List<RelNode> inputs;
5555

56-
private List<HyperEdge> edges;
56+
@SuppressWarnings("HidingField")
57+
private final RelDataType rowType;
58+
59+
private final List<HyperEdge> edges;
5760

5861
// key is the bitmap for inputs, value is the hyper edge bitmap in edges
59-
private HashMap<Long, BitSet> simpleEdgesMap;
62+
private final HashMap<Long, BitSet> simpleEdgesMap;
6063

61-
private HashMap<Long, BitSet> complexEdgesMap;
64+
private final HashMap<Long, BitSet> complexEdgesMap;
6265

6366
// node bitmap overlaps edge's leftNodeBits or rightNodeBits, but does not completely cover
64-
private HashMap<Long, BitSet> overlapEdgesMap;
67+
private final HashMap<Long, BitSet> overlapEdgesMap;
6568

6669
protected HyperGraph(RelOptCluster cluster,
6770
RelTraitSet traitSet,
6871
List<RelNode> inputs,
6972
List<HyperEdge> edges,
7073
RelDataType rowType) {
7174
super(cluster, traitSet);
72-
checkArgument(rowType != null);
7375
this.inputs = inputs;
7476
this.edges = edges;
7577
this.rowType = rowType;
@@ -87,7 +89,6 @@ protected HyperGraph(RelOptCluster cluster,
8789
HashMap<Long, BitSet> complexEdgesMap,
8890
HashMap<Long, BitSet> overlapEdgesMap) {
8991
super(cluster, traitSet);
90-
checkArgument(rowType != null);
9192
this.inputs = inputs;
9293
this.edges = edges;
9394
this.rowType = rowType;
@@ -173,14 +174,14 @@ public List<HyperEdge> connectCsgCmp(long csg, long cmp) {
173174
checkArgument(simpleEdgesMap.containsKey(cmp));
174175
List<HyperEdge> connectedEdges = new ArrayList<>();
175176
BitSet connectedEdgesBitmap = new BitSet();
176-
connectedEdgesBitmap.or(simpleEdgesMap.get(csg));
177-
connectedEdgesBitmap.or(complexEdgesMap.get(csg));
178-
connectedEdgesBitmap.or(overlapEdgesMap.get(csg));
177+
connectedEdgesBitmap.or(simpleEdgesMap.getOrDefault(csg, new BitSet()));
178+
connectedEdgesBitmap.or(complexEdgesMap.getOrDefault(csg, new BitSet()));
179+
connectedEdgesBitmap.or(overlapEdgesMap.getOrDefault(csg, new BitSet()));
179180

180181
BitSet cmpEdgesBitmap = new BitSet();
181-
cmpEdgesBitmap.or(simpleEdgesMap.get(cmp));
182-
cmpEdgesBitmap.or(complexEdgesMap.get(cmp));
183-
cmpEdgesBitmap.or(overlapEdgesMap.get(cmp));
182+
cmpEdgesBitmap.or(simpleEdgesMap.getOrDefault(cmp, new BitSet()));
183+
cmpEdgesBitmap.or(complexEdgesMap.getOrDefault(cmp, new BitSet()));
184+
cmpEdgesBitmap.or(overlapEdgesMap.getOrDefault(cmp, new BitSet()));
184185

185186
connectedEdgesBitmap.and(cmpEdgesBitmap);
186187
connectedEdgesBitmap.stream()
@@ -224,16 +225,16 @@ public void updateEdgesForUnion(long subset1, long subset2) {
224225
}
225226

226227
BitSet unionSimpleBitSet = new BitSet();
227-
unionSimpleBitSet.or(simpleEdgesMap.get(subset1));
228-
unionSimpleBitSet.or(simpleEdgesMap.get(subset2));
228+
unionSimpleBitSet.or(simpleEdgesMap.getOrDefault(subset1, new BitSet()));
229+
unionSimpleBitSet.or(simpleEdgesMap.getOrDefault(subset2, new BitSet()));
229230

230231
BitSet unionComplexBitSet = new BitSet();
231-
unionComplexBitSet.or(complexEdgesMap.get(subset1));
232-
unionComplexBitSet.or(complexEdgesMap.get(subset2));
232+
unionComplexBitSet.or(complexEdgesMap.getOrDefault(subset1, new BitSet()));
233+
unionComplexBitSet.or(complexEdgesMap.getOrDefault(subset2, new BitSet()));
233234

234235
BitSet unionOverlapBitSet = new BitSet();
235-
unionOverlapBitSet.or(overlapEdgesMap.get(subset1));
236-
unionOverlapBitSet.or(overlapEdgesMap.get(subset2));
236+
unionOverlapBitSet.or(overlapEdgesMap.getOrDefault(subset1, new BitSet()));
237+
unionOverlapBitSet.or(overlapEdgesMap.getOrDefault(subset2, new BitSet()));
237238

238239
// the overlaps edge that belongs to subset1/subset2
239240
// may be complex edge for subset1 union subset2

core/src/main/java/org/apache/calcite/rel/rules/JoinToHyperGraphRule.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@
3535
import java.util.List;
3636
import java.util.stream.Collectors;
3737

38-
import static com.google.common.base.Preconditions.checkArgument;
39-
4038
/** Rule that flattens a tree of {@link LogicalJoin}s
4139
* into a single {@link HyperGraph} with N inputs.
4240
*
@@ -120,8 +118,11 @@ protected JoinToHyperGraphRule(Config config) {
120118

121119
RexVisitorImpl visitor = new RexVisitorImpl<Void>(true) {
122120
@Override public Void visitInputRef(RexInputRef inputRef) {
123-
checkArgument(fieldIndexToNodeIndexMap.containsKey(inputRef.getIndex()));
124-
int nodeIndex = fieldIndexToNodeIndexMap.get(inputRef.getIndex());
121+
Integer nodeIndex = fieldIndexToNodeIndexMap.get(inputRef.getIndex());
122+
if (nodeIndex == null) {
123+
throw new IllegalArgumentException("RexInputRef refers a dummy field: "
124+
+ inputRef + ", rowType is: " + origJoin.getRowType());
125+
}
125126
if (nodeIndex < leftNodeCount) {
126127
leftRefs.add(nodeIndex);
127128
} else {

0 commit comments

Comments
 (0)