Skip to content

Commit dbaa81f

Browse files
committed
ARROW-6211: [Java] Remove dependency on RangeEqualsVisitor from ValueVector interface
1 parent e994e9c commit dbaa81f

File tree

15 files changed

+144
-77
lines changed

15 files changed

+144
-77
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: 6 additions & 1 deletion
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,12 @@ public BufferAllocator getAllocator() {
259259
}
260260

261261
@Override
262+
<<<<<<< HEAD
262263
public boolean accept(RangeEqualsVisitor visitor) {
263264
return getUnderlyingVector().accept(visitor);
265+
=======
266+
public <OUT, IN> OUT accept(VectorVisitor<OUT, IN> visitor, IN value) {
267+
return visitor.visit(getUnderlyingVector(), value);
268+
>>>>>>> ARROW-6211: [Java] Remove dependency on RangeEqualsVisitor from ValueVector interface
264269
}
265270
}

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: 19 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,38 @@ private boolean validate(ValueVector left) {
8484
return true;
8585
}
8686

87-
public boolean visit(BaseFixedWidthVector left) {
87+
@Override
88+
public Boolean visit(BaseFixedWidthVector left, Void value) {
8889
return validate(left) && compareBaseFixedWidthVectors(left);
8990
}
9091

91-
public boolean visit(BaseVariableWidthVector left) {
92+
@Override
93+
public Boolean visit(BaseVariableWidthVector left, Void value) {
9294
return validate(left) && compareBaseVariableWidthVectors(left);
9395
}
9496

95-
public boolean visit(ListVector left) {
97+
@Override
98+
public Boolean visit(ListVector left, Void value) {
9699
return validate(left) && compareListVectors(left);
97100
}
98101

99-
public boolean visit(FixedSizeListVector left) {
102+
@Override
103+
public Boolean visit(FixedSizeListVector left, Void value) {
100104
return validate(left) && compareFixedSizeListVectors(left);
101105
}
102106

103-
public boolean visit(NonNullableStructVector left) {
107+
@Override
108+
public Boolean visit(NonNullableStructVector left, Void value) {
104109
return validate(left) && compareStructVectors(left);
105110
}
106111

107-
public boolean visit(UnionVector left) {
112+
@Override
113+
public Boolean visit(UnionVector left, Void value) {
108114
return validate(left) && compareUnionVectors(left);
109115
}
110116

111-
public boolean visit(ZeroVector left) {
117+
@Override
118+
public Boolean visit(ZeroVector left, Void value) {
112119
return validate(left);
113120
}
114121

@@ -133,7 +140,7 @@ protected boolean compareUnionVectors(UnionVector left) {
133140
for (int k = 0; k < leftChildren.size(); k++) {
134141
RangeEqualsVisitor visitor = new RangeEqualsVisitor(rightChildren.get(k),
135142
leftStart, rightStart, length);
136-
if (!leftChildren.get(k).accept(visitor)) {
143+
if (!leftChildren.get(k).accept(visitor, null)) {
137144
return false;
138145
}
139146
}
@@ -151,7 +158,7 @@ protected boolean compareStructVectors(NonNullableStructVector left) {
151158
for (String name : left.getChildFieldNames()) {
152159
RangeEqualsVisitor visitor = new RangeEqualsVisitor(rightVector.getChild(name),
153160
leftStart, rightStart, length);
154-
if (!left.getChild(name).accept(visitor)) {
161+
if (!left.getChild(name).accept(visitor, null)) {
155162
return false;
156163
}
157164
}
@@ -249,7 +256,7 @@ protected boolean compareListVectors(ListVector left) {
249256
ValueVector rightDataVector = ((ListVector)right).getDataVector();
250257

251258
if (!leftDataVector.accept(new RangeEqualsVisitor(rightDataVector, startIndexLeft,
252-
startIndexRight, (endIndexLeft - startIndexLeft)))) {
259+
startIndexRight, (endIndexLeft - startIndexLeft)), null)) {
253260
return false;
254261
}
255262
}
@@ -289,7 +296,7 @@ protected boolean compareFixedSizeListVectors(FixedSizeListVector left) {
289296
ValueVector rightDataVector = ((FixedSizeListVector)right).getDataVector();
290297

291298
if (!leftDataVector.accept(new RangeEqualsVisitor(rightDataVector, startIndexLeft, startIndexRight,
292-
(endIndexLeft - startIndexLeft)))) {
299+
(endIndexLeft - startIndexLeft)), null)) {
293300
return false;
294301
}
295302
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
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.ValueVector;
23+
import org.apache.arrow.vector.ZeroVector;
24+
import org.apache.arrow.vector.complex.FixedSizeListVector;
25+
import org.apache.arrow.vector.complex.ListVector;
26+
import org.apache.arrow.vector.complex.NonNullableStructVector;
27+
import org.apache.arrow.vector.complex.UnionVector;
28+
29+
/**
30+
* Generic visitor to visit a {@link org.apache.arrow.vector.ValueVector}.
31+
* @param <OUT> the output result type.
32+
* @param <IN> the input data together with visitor.
33+
*/
34+
public interface VectorVisitor<OUT, IN> {
35+
36+
OUT visit(BaseFixedWidthVector left, IN value);
37+
38+
OUT visit(BaseVariableWidthVector left, IN value);
39+
40+
OUT visit(ListVector left, IN value);
41+
42+
OUT visit(FixedSizeListVector left, IN value);
43+
44+
OUT visit(NonNullableStructVector left, IN value);
45+
46+
OUT visit(UnionVector left, IN value);
47+
48+
OUT visit(ZeroVector left, IN value);
49+
50+
OUT visit(ValueVector left, IN value);
51+
}

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)