Skip to content

Commit d59810b

Browse files
tianchen92Pindikura Ravindra
authored andcommitted
ARROW-6211: [Java] Remove dependency on RangeEqualsVisitor from ValueVector interface
Related to [ARROW-6211](https://issues.apache.org/jira/browse/ARROW-6211). This is a follow-up from #4933 public interface VectorVisitor<OUT, IN, EX extends Exception> {..} n ValueVector : public <OUT, IN, EX extends Exception> OUT accept(VectorVisitor<OUT, IN, EX> visitor, IN value) throws EX; Closes #5091 from tianchen92/ARROW-6211 and squashes the following commits: 15a5231 <tianchen> fix bce258e <tianchen> add equals in RangeEqualsVisitor dbaa81f <tianchen> ARROW-6211: Remove dependency on RangeEqualsVisitor from ValueVector interface Authored-by: tianchen <niki.lj@alibaba-inc.com> Signed-off-by: Pindikura Ravindra <ravindra@dremio.com>
1 parent 36bd667 commit d59810b

File tree

15 files changed

+146
-79
lines changed

15 files changed

+146
-79
lines changed

java/vector/src/main/codegen/templates/UnionVector.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.apache.arrow.memory.ReferenceManager;
2121
import org.apache.arrow.util.Preconditions;
2222
import org.apache.arrow.vector.ValueVector;
23+
import org.apache.arrow.vector.compare.VectorVisitor;
2324
import org.apache.arrow.vector.types.UnionMode;
2425
import org.apache.arrow.vector.compare.RangeEqualsVisitor;
2526
import org.apache.arrow.vector.types.pojo.FieldType;
@@ -38,7 +39,7 @@
3839
import java.util.ArrayList;
3940
import java.util.Collections;
4041
import java.util.Iterator;
41-
import org.apache.arrow.vector.compare.RangeEqualsVisitor;
42+
import org.apache.arrow.vector.compare.VectorVisitor;
4243
import org.apache.arrow.vector.complex.impl.ComplexCopier;
4344
import org.apache.arrow.vector.util.CallBack;
4445
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
@@ -678,7 +679,7 @@ public int hashCode(int index) {
678679
}
679680

680681
@Override
681-
public boolean accept(RangeEqualsVisitor visitor) {
682-
return visitor.visit(this);
682+
public <OUT, IN> OUT accept(VectorVisitor<OUT, IN> visitor, IN value) {
683+
return visitor.visit(this, value);
683684
}
684685
}

java/vector/src/main/java/org/apache/arrow/vector/BaseFixedWidthVector.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import org.apache.arrow.memory.util.ArrowBufPointer;
2727
import org.apache.arrow.memory.util.ByteFunctionHelpers;
2828
import org.apache.arrow.util.Preconditions;
29-
import org.apache.arrow.vector.compare.RangeEqualsVisitor;
29+
import org.apache.arrow.vector.compare.VectorVisitor;
3030
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
3131
import org.apache.arrow.vector.types.pojo.Field;
3232
import org.apache.arrow.vector.util.CallBack;
@@ -885,7 +885,8 @@ public int hashCode(int index) {
885885
}
886886

887887
@Override
888-
public boolean accept(RangeEqualsVisitor visitor) {
889-
return visitor.visit(this);
888+
public <OUT, IN> OUT accept(VectorVisitor<OUT, IN> visitor, IN value) {
889+
return visitor.visit(this, value);
890890
}
891+
891892
}

java/vector/src/main/java/org/apache/arrow/vector/BaseVariableWidthVector.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import org.apache.arrow.memory.util.ArrowBufPointer;
2929
import org.apache.arrow.memory.util.ByteFunctionHelpers;
3030
import org.apache.arrow.util.Preconditions;
31-
import org.apache.arrow.vector.compare.RangeEqualsVisitor;
31+
import org.apache.arrow.vector.compare.VectorVisitor;
3232
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
3333
import org.apache.arrow.vector.types.pojo.Field;
3434
import org.apache.arrow.vector.util.CallBack;
@@ -1368,7 +1368,7 @@ public int hashCode(int index) {
13681368
}
13691369

13701370
@Override
1371-
public boolean accept(RangeEqualsVisitor visitor) {
1372-
return visitor.visit(this);
1371+
public <OUT, IN> OUT accept(VectorVisitor<OUT, IN> visitor, IN value) {
1372+
return visitor.visit(this, value);
13731373
}
13741374
}

java/vector/src/main/java/org/apache/arrow/vector/ExtensionTypeVector.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
import org.apache.arrow.memory.BufferAllocator;
2424
import org.apache.arrow.memory.OutOfMemoryException;
25-
import org.apache.arrow.vector.compare.RangeEqualsVisitor;
25+
import org.apache.arrow.vector.compare.VectorVisitor;
2626
import org.apache.arrow.vector.complex.reader.FieldReader;
2727
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
2828
import org.apache.arrow.vector.types.Types.MinorType;
@@ -259,7 +259,7 @@ public BufferAllocator getAllocator() {
259259
}
260260

261261
@Override
262-
public boolean accept(RangeEqualsVisitor visitor) {
263-
return getUnderlyingVector().accept(visitor);
262+
public <OUT, IN> OUT accept(VectorVisitor<OUT, IN> visitor, IN value) {
263+
return getUnderlyingVector().accept(visitor, value);
264264
}
265265
}

java/vector/src/main/java/org/apache/arrow/vector/ValueVector.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
import org.apache.arrow.memory.BufferAllocator;
2323
import org.apache.arrow.memory.OutOfMemoryException;
24-
import org.apache.arrow.vector.compare.RangeEqualsVisitor;
24+
import org.apache.arrow.vector.compare.VectorVisitor;
2525
import org.apache.arrow.vector.complex.reader.FieldReader;
2626
import org.apache.arrow.vector.types.Types.MinorType;
2727
import org.apache.arrow.vector.types.pojo.Field;
@@ -266,9 +266,9 @@ public interface ValueVector extends Closeable, Iterable<ValueVector> {
266266
void copyFromSafe(int fromIndex, int thisIndex, ValueVector from);
267267

268268
/**
269-
* Compare range values in this vector and vector in visitor.
270-
* @param visitor visitor which holds the vector to compare.
271-
* @return true if equals, otherwise false.
269+
* Accept a generic {@link VectorVisitor} and return the result.
270+
* @param <OUT> the output result type.
271+
* @param <IN> the input data together with visitor.
272272
*/
273-
boolean accept(RangeEqualsVisitor visitor);
273+
<OUT, IN> OUT accept(VectorVisitor<OUT, IN> visitor, IN value);
274274
}

java/vector/src/main/java/org/apache/arrow/vector/ZeroVector.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
import org.apache.arrow.memory.BufferAllocator;
2727
import org.apache.arrow.memory.OutOfMemoryException;
28-
import org.apache.arrow.vector.compare.RangeEqualsVisitor;
28+
import org.apache.arrow.vector.compare.VectorVisitor;
2929
import org.apache.arrow.vector.complex.impl.NullReader;
3030
import org.apache.arrow.vector.complex.reader.FieldReader;
3131
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
@@ -252,17 +252,17 @@ public int hashCode(int index) {
252252
}
253253

254254
@Override
255-
public void copyFrom(int fromIndex, int thisIndex, ValueVector from) {
256-
throw new UnsupportedOperationException();
255+
public <OUT, IN> OUT accept(VectorVisitor<OUT, IN> visitor, IN value) {
256+
return visitor.visit(this, value);
257257
}
258258

259259
@Override
260-
public void copyFromSafe(int fromIndex, int thisIndex, ValueVector from) {
260+
public void copyFrom(int fromIndex, int thisIndex, ValueVector from) {
261261
throw new UnsupportedOperationException();
262262
}
263263

264264
@Override
265-
public boolean accept(RangeEqualsVisitor visitor) {
266-
return visitor.visit(this);
265+
public void copyFromSafe(int fromIndex, int thisIndex, ValueVector from) {
266+
throw new UnsupportedOperationException();
267267
}
268268
}

java/vector/src/main/java/org/apache/arrow/vector/compare/RangeEqualsVisitor.java

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
/**
3636
* Visitor to compare a range of values for vectors.
3737
*/
38-
public class RangeEqualsVisitor {
38+
public class RangeEqualsVisitor implements VectorVisitor<Boolean, Void> {
3939

4040
protected final ValueVector right;
4141
protected int leftStart;
@@ -84,31 +84,45 @@ private boolean validate(ValueVector left) {
8484
return true;
8585
}
8686

87-
public boolean visit(BaseFixedWidthVector left) {
87+
/**
88+
* Check range equals without passing IN param in VectorVisitor.
89+
*/
90+
public boolean equals(ValueVector left) {
91+
return left.accept(this, null);
92+
}
93+
94+
@Override
95+
public Boolean visit(BaseFixedWidthVector left, Void value) {
8896
return validate(left) && compareBaseFixedWidthVectors(left);
8997
}
9098

91-
public boolean visit(BaseVariableWidthVector left) {
99+
@Override
100+
public Boolean visit(BaseVariableWidthVector left, Void value) {
92101
return validate(left) && compareBaseVariableWidthVectors(left);
93102
}
94103

95-
public boolean visit(ListVector left) {
104+
@Override
105+
public Boolean visit(ListVector left, Void value) {
96106
return validate(left) && compareListVectors(left);
97107
}
98108

99-
public boolean visit(FixedSizeListVector left) {
109+
@Override
110+
public Boolean visit(FixedSizeListVector left, Void value) {
100111
return validate(left) && compareFixedSizeListVectors(left);
101112
}
102113

103-
public boolean visit(NonNullableStructVector left) {
114+
@Override
115+
public Boolean visit(NonNullableStructVector left, Void value) {
104116
return validate(left) && compareStructVectors(left);
105117
}
106118

107-
public boolean visit(UnionVector left) {
119+
@Override
120+
public Boolean visit(UnionVector left, Void value) {
108121
return validate(left) && compareUnionVectors(left);
109122
}
110123

111-
public boolean visit(ZeroVector left) {
124+
@Override
125+
public Boolean visit(ZeroVector left, Void value) {
112126
return validate(left);
113127
}
114128

@@ -133,7 +147,7 @@ protected boolean compareUnionVectors(UnionVector left) {
133147
for (int k = 0; k < leftChildren.size(); k++) {
134148
RangeEqualsVisitor visitor = new RangeEqualsVisitor(rightChildren.get(k),
135149
leftStart, rightStart, length);
136-
if (!leftChildren.get(k).accept(visitor)) {
150+
if (!leftChildren.get(k).accept(visitor, null)) {
137151
return false;
138152
}
139153
}
@@ -151,7 +165,7 @@ protected boolean compareStructVectors(NonNullableStructVector left) {
151165
for (String name : left.getChildFieldNames()) {
152166
RangeEqualsVisitor visitor = new RangeEqualsVisitor(rightVector.getChild(name),
153167
leftStart, rightStart, length);
154-
if (!left.getChild(name).accept(visitor)) {
168+
if (!left.getChild(name).accept(visitor, null)) {
155169
return false;
156170
}
157171
}
@@ -249,7 +263,7 @@ protected boolean compareListVectors(ListVector left) {
249263
ValueVector rightDataVector = ((ListVector)right).getDataVector();
250264

251265
if (!leftDataVector.accept(new RangeEqualsVisitor(rightDataVector, startIndexLeft,
252-
startIndexRight, (endIndexLeft - startIndexLeft)))) {
266+
startIndexRight, (endIndexLeft - startIndexLeft)), null)) {
253267
return false;
254268
}
255269
}
@@ -289,7 +303,7 @@ protected boolean compareFixedSizeListVectors(FixedSizeListVector left) {
289303
ValueVector rightDataVector = ((FixedSizeListVector)right).getDataVector();
290304

291305
if (!leftDataVector.accept(new RangeEqualsVisitor(rightDataVector, startIndexLeft, startIndexRight,
292-
(endIndexLeft - startIndexLeft)))) {
306+
(endIndexLeft - startIndexLeft)), null)) {
293307
return false;
294308
}
295309
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package org.apache.arrow.vector.compare;
19+
20+
import org.apache.arrow.vector.BaseFixedWidthVector;
21+
import org.apache.arrow.vector.BaseVariableWidthVector;
22+
import org.apache.arrow.vector.ZeroVector;
23+
import org.apache.arrow.vector.complex.FixedSizeListVector;
24+
import org.apache.arrow.vector.complex.ListVector;
25+
import org.apache.arrow.vector.complex.NonNullableStructVector;
26+
import org.apache.arrow.vector.complex.UnionVector;
27+
28+
/**
29+
* Generic visitor to visit a {@link org.apache.arrow.vector.ValueVector}.
30+
* @param <OUT> the output result type.
31+
* @param <IN> the input data together with visitor.
32+
*/
33+
public interface VectorVisitor<OUT, IN> {
34+
35+
OUT visit(BaseFixedWidthVector left, IN value);
36+
37+
OUT visit(BaseVariableWidthVector left, IN value);
38+
39+
OUT visit(ListVector left, IN value);
40+
41+
OUT visit(FixedSizeListVector left, IN value);
42+
43+
OUT visit(NonNullableStructVector left, IN value);
44+
45+
OUT visit(UnionVector left, IN value);
46+
47+
OUT visit(ZeroVector left, IN value);
48+
}

java/vector/src/main/java/org/apache/arrow/vector/complex/FixedSizeListVector.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
import org.apache.arrow.vector.FieldVector;
4040
import org.apache.arrow.vector.ValueVector;
4141
import org.apache.arrow.vector.ZeroVector;
42-
import org.apache.arrow.vector.compare.RangeEqualsVisitor;
42+
import org.apache.arrow.vector.compare.VectorVisitor;
4343
import org.apache.arrow.vector.complex.impl.UnionFixedSizeListReader;
4444
import org.apache.arrow.vector.complex.impl.UnionFixedSizeListWriter;
4545
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
@@ -539,8 +539,8 @@ public int hashCode(int index) {
539539
}
540540

541541
@Override
542-
public boolean accept(RangeEqualsVisitor visitor) {
543-
return visitor.visit(this);
542+
public <OUT, IN> OUT accept(VectorVisitor<OUT, IN> visitor, IN value) {
543+
return visitor.visit(this, value);
544544
}
545545

546546
private class TransferImpl implements TransferPair {

java/vector/src/main/java/org/apache/arrow/vector/complex/ListVector.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
import org.apache.arrow.vector.FieldVector;
3737
import org.apache.arrow.vector.ValueVector;
3838
import org.apache.arrow.vector.ZeroVector;
39-
import org.apache.arrow.vector.compare.RangeEqualsVisitor;
39+
import org.apache.arrow.vector.compare.VectorVisitor;
4040
import org.apache.arrow.vector.complex.impl.ComplexCopier;
4141
import org.apache.arrow.vector.complex.impl.UnionListReader;
4242
import org.apache.arrow.vector.complex.impl.UnionListWriter;
@@ -431,6 +431,11 @@ public int hashCode(int index) {
431431
return hash;
432432
}
433433

434+
@Override
435+
public <OUT, IN> OUT accept(VectorVisitor<OUT, IN> visitor, IN value) {
436+
return visitor.visit(this, value);
437+
}
438+
434439
private class TransferImpl implements TransferPair {
435440

436441
ListVector to;
@@ -824,9 +829,4 @@ public void setLastSet(int value) {
824829
public int getLastSet() {
825830
return lastSet;
826831
}
827-
828-
@Override
829-
public boolean accept(RangeEqualsVisitor visitor) {
830-
return visitor.visit(this);
831-
}
832832
}

0 commit comments

Comments
 (0)