3737 */
3838public class RangeEqualsVisitor implements VectorVisitor <Boolean , Void > {
3939
40- protected final ValueVector right ;
41- protected int leftStart ;
42- protected int rightStart ;
43- protected int length ;
40+ protected ValueVector right ;
41+ protected int leftStart = - 1 ;
42+ protected int rightStart = - 1 ;
43+ protected int length = - 1 ;
4444
4545 protected boolean typeCheckNeeded = true ;
4646
47+ /**
48+ * The default constructor.
49+ */
50+ public RangeEqualsVisitor () {
51+ }
52+
4753 /**
4854 * Constructs a new instance.
4955 */
5056 public RangeEqualsVisitor (ValueVector right , int rightStart , int leftStart , int length , boolean typeCheckNeeded ) {
51- this .leftStart = leftStart ;
52- this .rightStart = rightStart ;
53- this .right = right ;
54- this .length = length ;
55- this .typeCheckNeeded = typeCheckNeeded ;
56- Preconditions .checkArgument (length >= 0 , "length must be non negative" );
57+ set (right , rightStart , leftStart , length , typeCheckNeeded );
5758 }
5859
5960 /**
@@ -63,6 +64,18 @@ public RangeEqualsVisitor(ValueVector right, int leftStart, int rightStart, int
6364 this (right , rightStart , leftStart , length , true );
6465 }
6566
67+ /**
68+ * Sets the parameters for comparison.
69+ */
70+ public void set (ValueVector right , int rightStart , int leftStart , int length , boolean typeCheckNeeded ) {
71+ this .right = right ;
72+ this .leftStart = leftStart ;
73+ this .rightStart = rightStart ;
74+ this .length = length ;
75+ this .typeCheckNeeded = typeCheckNeeded ;
76+ Preconditions .checkArgument (length >= 0 , "length must be non negative" );
77+ }
78+
6679 /**
6780 * Do some validation work, like type check and indices check.
6881 */
@@ -81,6 +94,12 @@ protected boolean validate(ValueVector left) {
8194 Preconditions .checkArgument ((rightStart + length ) <= right .getValueCount (),
8295 "(rightStart + length) %s out of range[0, %s]." , 0 , right .getValueCount ());
8396
97+ Preconditions .checkArgument (left != null ,
98+ "left vector cannot be null" );
99+
100+ Preconditions .checkArgument (right != null ,
101+ "right vector cannot be null" );
102+
84103 return true ;
85104 }
86105
@@ -144,9 +163,10 @@ protected boolean compareUnionVectors(UnionVector left) {
144163 return false ;
145164 }
146165
166+ RangeEqualsVisitor visitor = new RangeEqualsVisitor ();
147167 for (int k = 0 ; k < leftChildren .size (); k ++) {
148- RangeEqualsVisitor visitor = new RangeEqualsVisitor (rightChildren .get (k ),
149- leftStart , rightStart , length );
168+ visitor . set (rightChildren .get (k ),
169+ rightStart , leftStart , length , true );
150170 if (!leftChildren .get (k ).accept (visitor , null )) {
151171 return false ;
152172 }
@@ -162,9 +182,10 @@ protected boolean compareStructVectors(NonNullableStructVector left) {
162182 return false ;
163183 }
164184
185+ RangeEqualsVisitor visitor = new RangeEqualsVisitor ();
165186 for (String name : left .getChildFieldNames ()) {
166- RangeEqualsVisitor visitor = new RangeEqualsVisitor (rightVector .getChild (name ),
167- leftStart , rightStart , length );
187+ visitor . set (rightVector .getChild (name ),
188+ rightStart , leftStart , length , true );
168189 if (!left .getChild (name ).accept (visitor , null )) {
169190 return false ;
170191 }
@@ -236,7 +257,7 @@ protected boolean compareBaseVariableWidthVectors(BaseVariableWidthVector left)
236257 }
237258
238259 protected boolean compareListVectors (ListVector left ) {
239-
260+ RangeEqualsVisitor visitor = new RangeEqualsVisitor ();
240261 for (int i = 0 ; i < length ; i ++) {
241262 int leftIndex = leftStart + i ;
242263 int rightIndex = rightStart + i ;
@@ -262,8 +283,8 @@ protected boolean compareListVectors(ListVector left) {
262283 ValueVector leftDataVector = left .getDataVector ();
263284 ValueVector rightDataVector = ((ListVector )right ).getDataVector ();
264285
265- if (! leftDataVector . accept ( new RangeEqualsVisitor ( rightDataVector , startIndexLeft ,
266- startIndexRight , ( endIndexLeft - startIndexLeft )) , null )) {
286+ visitor . set ( rightDataVector , startIndexRight , startIndexLeft , endIndexLeft - startIndexLeft , true );
287+ if (! leftDataVector . accept ( visitor , null )) {
267288 return false ;
268289 }
269290 }
@@ -277,6 +298,7 @@ protected boolean compareFixedSizeListVectors(FixedSizeListVector left) {
277298 return false ;
278299 }
279300
301+ RangeEqualsVisitor visitor = new RangeEqualsVisitor ();
280302 for (int i = 0 ; i < length ; i ++) {
281303 int leftIndex = leftStart + i ;
282304 int rightIndex = rightStart + i ;
@@ -302,8 +324,8 @@ protected boolean compareFixedSizeListVectors(FixedSizeListVector left) {
302324 ValueVector leftDataVector = left .getDataVector ();
303325 ValueVector rightDataVector = ((FixedSizeListVector )right ).getDataVector ();
304326
305- if (! leftDataVector . accept ( new RangeEqualsVisitor ( rightDataVector , startIndexLeft , startIndexRight ,
306- ( endIndexLeft - startIndexLeft )) , null )) {
327+ visitor . set ( rightDataVector , startIndexRight , startIndexLeft , endIndexLeft - startIndexLeft , true );
328+ if (! leftDataVector . accept ( visitor , null )) {
307329 return false ;
308330 }
309331 }
0 commit comments