Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions java/vector/src/main/codegen/templates/UnionVector.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.apache.arrow.memory.ReferenceManager;
import org.apache.arrow.util.Preconditions;
import org.apache.arrow.vector.ValueVector;
import org.apache.arrow.vector.compare.VectorVisitor;
import org.apache.arrow.vector.types.UnionMode;
import org.apache.arrow.vector.compare.RangeEqualsVisitor;
import org.apache.arrow.vector.types.pojo.FieldType;
Expand All @@ -38,7 +39,7 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import org.apache.arrow.vector.compare.RangeEqualsVisitor;
import org.apache.arrow.vector.compare.VectorVisitor;
import org.apache.arrow.vector.complex.impl.ComplexCopier;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
Expand Down Expand Up @@ -678,7 +679,7 @@ public int hashCode(int index) {
}

@Override
public boolean accept(RangeEqualsVisitor visitor) {
return visitor.visit(this);
public <OUT, IN> OUT accept(VectorVisitor<OUT, IN> visitor, IN value) {
return visitor.visit(this, value);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
import org.apache.arrow.memory.util.ArrowBufPointer;
import org.apache.arrow.memory.util.ByteFunctionHelpers;
import org.apache.arrow.util.Preconditions;
import org.apache.arrow.vector.compare.RangeEqualsVisitor;
import org.apache.arrow.vector.compare.VectorVisitor;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.util.CallBack;
Expand Down Expand Up @@ -885,7 +885,8 @@ public int hashCode(int index) {
}

@Override
public boolean accept(RangeEqualsVisitor visitor) {
return visitor.visit(this);
public <OUT, IN> OUT accept(VectorVisitor<OUT, IN> visitor, IN value) {
return visitor.visit(this, value);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
import org.apache.arrow.memory.util.ArrowBufPointer;
import org.apache.arrow.memory.util.ByteFunctionHelpers;
import org.apache.arrow.util.Preconditions;
import org.apache.arrow.vector.compare.RangeEqualsVisitor;
import org.apache.arrow.vector.compare.VectorVisitor;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.util.CallBack;
Expand Down Expand Up @@ -1368,7 +1368,7 @@ public int hashCode(int index) {
}

@Override
public boolean accept(RangeEqualsVisitor visitor) {
return visitor.visit(this);
public <OUT, IN> OUT accept(VectorVisitor<OUT, IN> visitor, IN value) {
return visitor.visit(this, value);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

import org.apache.arrow.memory.BufferAllocator;
import org.apache.arrow.memory.OutOfMemoryException;
import org.apache.arrow.vector.compare.RangeEqualsVisitor;
import org.apache.arrow.vector.compare.VectorVisitor;
import org.apache.arrow.vector.complex.reader.FieldReader;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
import org.apache.arrow.vector.types.Types.MinorType;
Expand Down Expand Up @@ -259,7 +259,7 @@ public BufferAllocator getAllocator() {
}

@Override
public boolean accept(RangeEqualsVisitor visitor) {
return getUnderlyingVector().accept(visitor);
public <OUT, IN> OUT accept(VectorVisitor<OUT, IN> visitor, IN value) {
return getUnderlyingVector().accept(visitor, value);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

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

/**
* Compare range values in this vector and vector in visitor.
* @param visitor visitor which holds the vector to compare.
* @return true if equals, otherwise false.
* Accept a generic {@link VectorVisitor} and return the result.
* @param <OUT> the output result type.
* @param <IN> the input data together with visitor.
*/
boolean accept(RangeEqualsVisitor visitor);
<OUT, IN> OUT accept(VectorVisitor<OUT, IN> visitor, IN value);
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@

import org.apache.arrow.memory.BufferAllocator;
import org.apache.arrow.memory.OutOfMemoryException;
import org.apache.arrow.vector.compare.RangeEqualsVisitor;
import org.apache.arrow.vector.compare.VectorVisitor;
import org.apache.arrow.vector.complex.impl.NullReader;
import org.apache.arrow.vector.complex.reader.FieldReader;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
Expand Down Expand Up @@ -252,17 +252,17 @@ public int hashCode(int index) {
}

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

@Override
public void copyFromSafe(int fromIndex, int thisIndex, ValueVector from) {
public void copyFrom(int fromIndex, int thisIndex, ValueVector from) {
throw new UnsupportedOperationException();
}

@Override
public boolean accept(RangeEqualsVisitor visitor) {
return visitor.visit(this);
public void copyFromSafe(int fromIndex, int thisIndex, ValueVector from) {
throw new UnsupportedOperationException();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
/**
* Visitor to compare a range of values for vectors.
*/
public class RangeEqualsVisitor {
public class RangeEqualsVisitor implements VectorVisitor<Boolean, Void> {

protected final ValueVector right;
protected int leftStart;
Expand Down Expand Up @@ -84,31 +84,45 @@ private boolean validate(ValueVector left) {
return true;
}

public boolean visit(BaseFixedWidthVector left) {
/**
* Check range equals without passing IN param in VectorVisitor.
*/
public boolean equals(ValueVector left) {
return left.accept(this, null);
}

@Override
public Boolean visit(BaseFixedWidthVector left, Void value) {
return validate(left) && compareBaseFixedWidthVectors(left);
}

public boolean visit(BaseVariableWidthVector left) {
@Override
public Boolean visit(BaseVariableWidthVector left, Void value) {
return validate(left) && compareBaseVariableWidthVectors(left);
}

public boolean visit(ListVector left) {
@Override
public Boolean visit(ListVector left, Void value) {
return validate(left) && compareListVectors(left);
}

public boolean visit(FixedSizeListVector left) {
@Override
public Boolean visit(FixedSizeListVector left, Void value) {
return validate(left) && compareFixedSizeListVectors(left);
}

public boolean visit(NonNullableStructVector left) {
@Override
public Boolean visit(NonNullableStructVector left, Void value) {
return validate(left) && compareStructVectors(left);
}

public boolean visit(UnionVector left) {
@Override
public Boolean visit(UnionVector left, Void value) {
return validate(left) && compareUnionVectors(left);
}

public boolean visit(ZeroVector left) {
@Override
public Boolean visit(ZeroVector left, Void value) {
return validate(left);
}

Expand All @@ -133,7 +147,7 @@ protected boolean compareUnionVectors(UnionVector left) {
for (int k = 0; k < leftChildren.size(); k++) {
RangeEqualsVisitor visitor = new RangeEqualsVisitor(rightChildren.get(k),
leftStart, rightStart, length);
if (!leftChildren.get(k).accept(visitor)) {
if (!leftChildren.get(k).accept(visitor, null)) {
return false;
}
}
Expand All @@ -151,7 +165,7 @@ protected boolean compareStructVectors(NonNullableStructVector left) {
for (String name : left.getChildFieldNames()) {
RangeEqualsVisitor visitor = new RangeEqualsVisitor(rightVector.getChild(name),
leftStart, rightStart, length);
if (!left.getChild(name).accept(visitor)) {
if (!left.getChild(name).accept(visitor, null)) {
return false;
}
}
Expand Down Expand Up @@ -249,7 +263,7 @@ protected boolean compareListVectors(ListVector left) {
ValueVector rightDataVector = ((ListVector)right).getDataVector();

if (!leftDataVector.accept(new RangeEqualsVisitor(rightDataVector, startIndexLeft,
startIndexRight, (endIndexLeft - startIndexLeft)))) {
startIndexRight, (endIndexLeft - startIndexLeft)), null)) {
return false;
}
}
Expand Down Expand Up @@ -289,7 +303,7 @@ protected boolean compareFixedSizeListVectors(FixedSizeListVector left) {
ValueVector rightDataVector = ((FixedSizeListVector)right).getDataVector();

if (!leftDataVector.accept(new RangeEqualsVisitor(rightDataVector, startIndexLeft, startIndexRight,
(endIndexLeft - startIndexLeft)))) {
(endIndexLeft - startIndexLeft)), null)) {
return false;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.arrow.vector.compare;

import org.apache.arrow.vector.BaseFixedWidthVector;
import org.apache.arrow.vector.BaseVariableWidthVector;
import org.apache.arrow.vector.ZeroVector;
import org.apache.arrow.vector.complex.FixedSizeListVector;
import org.apache.arrow.vector.complex.ListVector;
import org.apache.arrow.vector.complex.NonNullableStructVector;
import org.apache.arrow.vector.complex.UnionVector;

/**
* Generic visitor to visit a {@link org.apache.arrow.vector.ValueVector}.
* @param <OUT> the output result type.
* @param <IN> the input data together with visitor.
*/
public interface VectorVisitor<OUT, IN> {

OUT visit(BaseFixedWidthVector left, IN value);

OUT visit(BaseVariableWidthVector left, IN value);

OUT visit(ListVector left, IN value);

OUT visit(FixedSizeListVector left, IN value);

OUT visit(NonNullableStructVector left, IN value);

OUT visit(UnionVector left, IN value);

OUT visit(ZeroVector left, IN value);
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
import org.apache.arrow.vector.FieldVector;
import org.apache.arrow.vector.ValueVector;
import org.apache.arrow.vector.ZeroVector;
import org.apache.arrow.vector.compare.RangeEqualsVisitor;
import org.apache.arrow.vector.compare.VectorVisitor;
import org.apache.arrow.vector.complex.impl.UnionFixedSizeListReader;
import org.apache.arrow.vector.complex.impl.UnionFixedSizeListWriter;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
Expand Down Expand Up @@ -539,8 +539,8 @@ public int hashCode(int index) {
}

@Override
public boolean accept(RangeEqualsVisitor visitor) {
return visitor.visit(this);
public <OUT, IN> OUT accept(VectorVisitor<OUT, IN> visitor, IN value) {
return visitor.visit(this, value);
}

private class TransferImpl implements TransferPair {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
import org.apache.arrow.vector.FieldVector;
import org.apache.arrow.vector.ValueVector;
import org.apache.arrow.vector.ZeroVector;
import org.apache.arrow.vector.compare.RangeEqualsVisitor;
import org.apache.arrow.vector.compare.VectorVisitor;
import org.apache.arrow.vector.complex.impl.ComplexCopier;
import org.apache.arrow.vector.complex.impl.UnionListReader;
import org.apache.arrow.vector.complex.impl.UnionListWriter;
Expand Down Expand Up @@ -431,6 +431,11 @@ public int hashCode(int index) {
return hash;
}

@Override
public <OUT, IN> OUT accept(VectorVisitor<OUT, IN> visitor, IN value) {
return visitor.visit(this, value);
}

private class TransferImpl implements TransferPair {

ListVector to;
Expand Down Expand Up @@ -824,9 +829,4 @@ public void setLastSet(int value) {
public int getLastSet() {
return lastSet;
}

@Override
public boolean accept(RangeEqualsVisitor visitor) {
return visitor.visit(this);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
import org.apache.arrow.vector.DensityAwareVector;
import org.apache.arrow.vector.FieldVector;
import org.apache.arrow.vector.ValueVector;
import org.apache.arrow.vector.compare.RangeEqualsVisitor;
import org.apache.arrow.vector.compare.VectorVisitor;
import org.apache.arrow.vector.complex.impl.SingleStructReaderImpl;
import org.apache.arrow.vector.complex.reader.FieldReader;
import org.apache.arrow.vector.holders.ComplexHolder;
Expand Down Expand Up @@ -309,8 +309,8 @@ public int hashCode(int index) {
}

@Override
public boolean accept(RangeEqualsVisitor visitor) {
return visitor.visit(this);
public <OUT, IN> OUT accept(VectorVisitor<OUT, IN> visitor, IN value) {
return visitor.visit(this, value);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,8 @@ public boolean equals(Object o) {
return false;
}
Dictionary that = (Dictionary) o;
return Objects.equals(encoding, that.encoding) && dictionary.accept(new VectorEqualsVisitor(that.dictionary));
return Objects.equals(encoding, that.encoding) &&
(new VectorEqualsVisitor(that.dictionary)).equals(dictionary);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,9 @@ public int getIndex(int indexInArray, ValueVector toEncode) {
for (DictionaryHashTable.Entry e = table[index]; e != null ; e = e.next) {
if ((e.hash == hash)) {
int dictIndex = e.index;
if (toEncode.accept(new RangeEqualsVisitor(dictionary, dictIndex, indexInArray, 1, false))) {

if (new RangeEqualsVisitor(dictionary, dictIndex, indexInArray, 1, false)
.equals(toEncode)) {
return dictIndex;
}
}
Expand Down
Loading