@@ -58,7 +58,11 @@ public RangeEqualsVisitor(ValueVector left, ValueVector right, boolean isTypeChe
5858 Preconditions .checkArgument (right != null ,
5959 "right vector cannot be null" );
6060
61- // types cannot change for a visitor instance. so, the check is done only once.
61+ // type usually checks only once unless the left vector is changed.
62+ checkType ();
63+ }
64+
65+ private void checkType () {
6266 if (!isTypeCheckNeeded ) {
6367 typeCompareResult = true ;
6468 } else if (left == right ) {
@@ -68,6 +72,17 @@ public RangeEqualsVisitor(ValueVector left, ValueVector right, boolean isTypeChe
6872 }
6973 }
7074
75+ /**
76+ * Validate the passed left vector, if it is changed, reset and check type.
77+ */
78+ protected boolean validate (ValueVector left ) {
79+ if (left != this .left ) {
80+ this .left = left ;
81+ checkType ();
82+ }
83+ return typeCompareResult ;
84+ }
85+
7186 /**
7287 * Constructs a new instance.
7388 *
@@ -79,7 +94,7 @@ public RangeEqualsVisitor(ValueVector left, ValueVector right) {
7994 }
8095
8196 /**
82- * Check range equals without passing IN param in VectorVisitor .
97+ * Check range equals.
8398 */
8499 public boolean rangeEquals (Range range ) {
85100 if (!typeCompareResult ) {
@@ -107,42 +122,59 @@ public ValueVector getRight() {
107122 return right ;
108123 }
109124
110- public boolean isTypeCheckNeeded () {
111- return isTypeCheckNeeded ;
112- }
113-
114125 @ Override
115126 public Boolean visit (BaseFixedWidthVector left , Range range ) {
127+ if (!validate (left )) {
128+ return false ;
129+ }
116130 return compareBaseFixedWidthVectors (range );
117131 }
118132
119133 @ Override
120134 public Boolean visit (BaseVariableWidthVector left , Range range ) {
135+ if (!validate (left )) {
136+ return false ;
137+ }
121138 return compareBaseVariableWidthVectors (range );
122139 }
123140
124141 @ Override
125142 public Boolean visit (ListVector left , Range range ) {
143+ if (!validate (left )) {
144+ return false ;
145+ }
126146 return compareListVectors (range );
127147 }
128148
129149 @ Override
130150 public Boolean visit (FixedSizeListVector left , Range range ) {
151+ if (!validate (left )) {
152+ return false ;
153+ }
131154 return compareFixedSizeListVectors (range );
132155 }
133156
134157 @ Override
135158 public Boolean visit (NonNullableStructVector left , Range range ) {
159+ if (!validate (left )) {
160+ return false ;
161+ }
136162 return compareStructVectors (range );
137163 }
138164
139165 @ Override
140166 public Boolean visit (UnionVector left , Range range ) {
167+ if (!validate (left )) {
168+ return false ;
169+ }
141170 return compareUnionVectors (range );
142171 }
143172
144173 @ Override
145174 public Boolean visit (ZeroVector left , Range range ) {
175+ if (!validate (left )) {
176+ return false ;
177+ }
146178 return true ;
147179 }
148180
0 commit comments