51
51
*/
52
52
public class HyperGraph extends AbstractRelNode {
53
53
54
- private List <RelNode > inputs ;
54
+ private final List <RelNode > inputs ;
55
55
56
- private List <HyperEdge > edges ;
56
+ @ SuppressWarnings ("HidingField" )
57
+ private final RelDataType rowType ;
58
+
59
+ private final List <HyperEdge > edges ;
57
60
58
61
// 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 ;
60
63
61
- private HashMap <Long , BitSet > complexEdgesMap ;
64
+ private final HashMap <Long , BitSet > complexEdgesMap ;
62
65
63
66
// 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 ;
65
68
66
69
protected HyperGraph (RelOptCluster cluster ,
67
70
RelTraitSet traitSet ,
68
71
List <RelNode > inputs ,
69
72
List <HyperEdge > edges ,
70
73
RelDataType rowType ) {
71
74
super (cluster , traitSet );
72
- checkArgument (rowType != null );
73
75
this .inputs = inputs ;
74
76
this .edges = edges ;
75
77
this .rowType = rowType ;
@@ -87,7 +89,6 @@ protected HyperGraph(RelOptCluster cluster,
87
89
HashMap <Long , BitSet > complexEdgesMap ,
88
90
HashMap <Long , BitSet > overlapEdgesMap ) {
89
91
super (cluster , traitSet );
90
- checkArgument (rowType != null );
91
92
this .inputs = inputs ;
92
93
this .edges = edges ;
93
94
this .rowType = rowType ;
@@ -173,14 +174,14 @@ public List<HyperEdge> connectCsgCmp(long csg, long cmp) {
173
174
checkArgument (simpleEdgesMap .containsKey (cmp ));
174
175
List <HyperEdge > connectedEdges = new ArrayList <>();
175
176
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 () ));
179
180
180
181
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 () ));
184
185
185
186
connectedEdgesBitmap .and (cmpEdgesBitmap );
186
187
connectedEdgesBitmap .stream ()
@@ -224,16 +225,16 @@ public void updateEdgesForUnion(long subset1, long subset2) {
224
225
}
225
226
226
227
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 () ));
229
230
230
231
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 () ));
233
234
234
235
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 () ));
237
238
238
239
// the overlaps edge that belongs to subset1/subset2
239
240
// may be complex edge for subset1 union subset2
0 commit comments