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
51 changes: 39 additions & 12 deletions java/vector/src/main/codegen/templates/UnionVector.java
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,6 +17,7 @@

import io.netty.buffer.ArrowBuf;
import org.apache.arrow.memory.ReferenceManager;
import org.apache.arrow.vector.ValueVector;
import org.apache.arrow.vector.types.pojo.FieldType;

<@pp.dropOutputFile />
Expand DownExpand Up@@ -491,32 +492,35 @@ public Iterator<ValueVector> iterator() {
return vectors.iterator();
}


public Object getObject(int index) {
private ValueVector getVector(int index) {
int type = typeBuffer.getByte(index * TYPE_WIDTH);
switch (MinorType.values()[type]) {
case NULL:
return null;
case NULL:
return null;
<#list vv.types as type>
<#list type.minor as minor>
<#assign name = minor.class?cap_first />
<#assign fields = minor.fields!type.fields />
<#assign uncappedName = name?uncap_first/>
<#if !minor.typeParams?? >
case ${name?upper_case}:
return get${name}Vector().getObject(index);
case ${name?upper_case}:
return get${name}Vector();
</#if>
</#list>
</#list>
case STRUCT:
return getStruct().getObject(index);
case LIST:
return getList().getObject(index);
default:
throw new UnsupportedOperationException("Cannot support type: " + MinorType.values()[type]);
case STRUCT:
return getStruct();
case LIST:
return getList();
default:
throw new UnsupportedOperationException("Cannot support type: " + MinorType.values()[type]);
}
}

public Object getObject(int index) {
return getVector(index).getObject(index);
}

public byte[] get(int index) {
return null;
}
Expand DownExpand Up@@ -622,4 +626,27 @@ public void setType(int index, MinorType type) {
private int getTypeBufferValueCapacity() {
return typeBuffer.capacity() / TYPE_WIDTH;
}

@Override
public int hashCode(int index) {
return getVector(index).hashCode(index);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}
UnionVector that = (UnionVector) to;
ValueVector leftVector = getVector(index);
ValueVector rightVector = that.getVector(toIndex);

if (leftVector.getClass() != rightVector.getClass()) {
return false;
}
return leftVector.equals(index, rightVector, toIndex);
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -25,6 +25,7 @@
import org.apache.arrow.memory.BufferAllocator;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.OversizedAllocationException;
import org.apache.arrow.vector.util.TransferPair;
Expand DownExpand Up@@ -837,4 +838,33 @@ public void copyFromSafe(int fromIndex, int thisIndex, BaseFixedWidthVector from
handleSafe(thisIndex);
copyFrom(fromIndex, thisIndex, from);
}

@Override
public int hashCode(int index) {
int start = typeWidth * index;
int end = typeWidth * (index + 1);
return ByteFunctionHelpers.hash(this.getDataBuffer(), start, end);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

BaseFixedWidthVector that = (BaseFixedWidthVector) to;

int leftStart = typeWidth * index;
int leftEnd = typeWidth * (index + 1);

int rightStart = typeWidth * toIndex;
int rightEnd = typeWidth * (toIndex + 1);

int ret = ByteFunctionHelpers.equal(this.getDataBuffer(), leftStart, leftEnd,
that.getDataBuffer(), rightStart, rightEnd);
return ret == 1;
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -27,6 +27,7 @@
import org.apache.arrow.memory.OutOfMemoryException;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.OversizedAllocationException;
import org.apache.arrow.vector.util.TransferPair;
Expand DownExpand Up@@ -1334,4 +1335,33 @@ public void copyFromSafe(int fromIndex, int thisIndex, BaseVariableWidthVector f
}
lastSet = thisIndex;
}

@Override
public int hashCode(int index) {
final int start = getStartOffset(index);
final int end = getStartOffset(index + 1);
return ByteFunctionHelpers.hash(this.getDataBuffer(), start, end);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

BaseVariableWidthVector that = (BaseVariableWidthVector) to;

final int leftStart = getStartOffset(index);
final int leftEnd = getStartOffset(index + 1);

final int rightStart = that.getStartOffset(toIndex);
final int rightEnd = that.getStartOffset(toIndex + 1);

int ret = ByteFunctionHelpers.equal(this.getDataBuffer(), leftStart, leftEnd,
that.getDataBuffer(), rightStart, rightEnd);
return ret == 1;
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -237,4 +237,18 @@ public interface ValueVector extends Closeable, Iterable<ValueVector> {
* @return true if element is null
*/
boolean isNull(int index);

/**
* Returns hashCode of element in index.
*/
int hashCode(int index);

/**
* Check whether the element in index equals to the element in targetIndex from the target vector.
* @param index index to compare in this vector
* @param target target vector
* @param targetIndex index to compare in target vector
* @return true if equals, otherwise false.
*/
boolean equals(int index, ValueVector target, int targetIndex);
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -270,7 +270,6 @@ public void setSafe(int index, Text text) {
setSafe(index, text.getBytes(), 0, text.getLength());
}


/*----------------------------------------------------------------*
| |
| vector transfer |
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -244,4 +244,14 @@ public int getNullCount() {
public boolean isNull(int index) {
return false;
}

@Override
public int hashCode(int index) {
return 0;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
return false;
Comment thread
tianchen92 marked this conversation as resolved.
Outdated
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,6 +45,7 @@
import org.apache.arrow.vector.types.pojo.DictionaryEncoding;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.types.pojo.FieldType;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.JsonStringArrayList;
import org.apache.arrow.vector.util.OversizedAllocationException;
Expand DownExpand Up@@ -496,6 +497,37 @@ public TransferPair makeTransferPair(ValueVector target) {
return new TransferImpl((FixedSizeListVector) target);
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
}
int hash = 0;
for (int i = 0; i < listSize; i++) {
hash = ByteFunctionHelpers.comebineHash(hash, vector.hashCode(index * listSize + i));
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

FixedSizeListVector that = (FixedSizeListVector) to;

for (int i = 0; i < listSize; i++) {
if (!vector.equals(index * listSize + i, that, toIndex * listSize + i)) {
return false;
}
}
return true;
}

private class TransferImpl implements TransferPair {

FixedSizeListVector to;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -412,6 +412,49 @@ public ArrowBuf getOffsetBuffer() {
return offsetBuffer;
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
}
int hash = 0;
final int start = offsetBuffer.getInt(index * OFFSET_WIDTH);
final int end = offsetBuffer.getInt((index + 1) * OFFSET_WIDTH);
for (int i = start; i < end; i++) {
hash = 31 * vector.hashCode(i);
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

ListVector that = (ListVector) to;
final int leftStart = offsetBuffer.getInt(index * OFFSET_WIDTH);
final int leftEnd = offsetBuffer.getInt((index + 1) * OFFSET_WIDTH);

final int rightStart = that.offsetBuffer.getInt(toIndex * OFFSET_WIDTH);
final int rightEnd = that.offsetBuffer.getInt((toIndex + 1) * OFFSET_WIDTH);

if ((leftEnd - leftStart) != (rightEnd - rightStart)) {
return false;
}

for (int i = 0; i < (leftEnd - leftStart); i++) {
if (!vector.equals(leftStart + i, that.vector, rightStart + i)) {
return false;
}
}

return true;
}

private class TransferImpl implements TransferPair {

ListVector to;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -286,6 +286,56 @@ public Object getObject(int index) {
return vv;
}

@Override
public int hashCode(int index) {
int hash = 0;
for (String child : getChildFieldNames()) {
ValueVector v = getChild(child);
if (v != null && index < v.getValueCount()) {
hash += 31 * hash + v.hashCode(index);
}
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}
NonNullableStructVector that = (NonNullableStructVector) to;
List<ValueVector> leftChildrens = new ArrayList<>();
List<ValueVector> rightChildrens = new ArrayList<>();

for (String child : getChildFieldNames()) {
ValueVector v = getChild(child);
if (v != null) {
leftChildrens.add(v);
}
}

for (String child : that.getChildFieldNames()) {
ValueVector v = that.getChild(child);
if (v != null) {
rightChildrens.add(v);
}
}

if (leftChildrens.size() != rightChildrens.size()) {
return false;
}

for (int i = 0; i < leftChildrens.size(); i++) {
if (!leftChildrens.get(i).equals(index, rightChildrens.get(i), toIndex)) {
return false;
}
}
return true;
}

@Override
public boolean isNull(int index) {
return false;
Expand DownExpand Up@@ -372,4 +422,5 @@ public void initializeChildrenFromFields(List<Field> children) {
public List<FieldVector> getChildrenFromFields() {
return getChildren();
}

}
Original file line numberDiff line numberDiff line change
Expand Up@@ -479,6 +479,15 @@ public Object getObject(int index) {
}
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
} else {
return super.hashCode(index);
}
}

@Override
public void get(int index, ComplexHolder holder) {
holder.isSet = isSet(index);
Expand DownExpand Up@@ -546,4 +555,5 @@ public void setValueCount(int valueCount) {
super.setValueCount(valueCount);
this.valueCount = valueCount;
}

}
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
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
51 changes: 39 additions & 12 deletions java/vector/src/main/codegen/templates/UnionVector.java
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,6 +17,7 @@

import io.netty.buffer.ArrowBuf;
import org.apache.arrow.memory.ReferenceManager;
import org.apache.arrow.vector.ValueVector;
import org.apache.arrow.vector.types.pojo.FieldType;

<@pp.dropOutputFile />
Expand DownExpand Up@@ -491,32 +492,35 @@ public Iterator<ValueVector> iterator() {
return vectors.iterator();
}


public Object getObject(int index) {
private ValueVector getVector(int index) {
int type = typeBuffer.getByte(index * TYPE_WIDTH);
switch (MinorType.values()[type]) {
case NULL:
return null;
case NULL:
return null;
<#list vv.types as type>
<#list type.minor as minor>
<#assign name = minor.class?cap_first />
<#assign fields = minor.fields!type.fields />
<#assign uncappedName = name?uncap_first/>
<#if !minor.typeParams?? >
case ${name?upper_case}:
return get${name}Vector().getObject(index);
case ${name?upper_case}:
return get${name}Vector();
</#if>
</#list>
</#list>
case STRUCT:
return getStruct().getObject(index);
case LIST:
return getList().getObject(index);
default:
throw new UnsupportedOperationException("Cannot support type: " + MinorType.values()[type]);
case STRUCT:
return getStruct();
case LIST:
return getList();
default:
throw new UnsupportedOperationException("Cannot support type: " + MinorType.values()[type]);
}
}

public Object getObject(int index) {
return getVector(index).getObject(index);
}

public byte[] get(int index) {
return null;
}
Expand DownExpand Up@@ -622,4 +626,27 @@ public void setType(int index, MinorType type) {
private int getTypeBufferValueCapacity() {
return typeBuffer.capacity() / TYPE_WIDTH;
}

@Override
public int hashCode(int index) {
return getVector(index).hashCode(index);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}
UnionVector that = (UnionVector) to;
ValueVector leftVector = getVector(index);
ValueVector rightVector = that.getVector(toIndex);

if (leftVector.getClass() != rightVector.getClass()) {
return false;
}
return leftVector.equals(index, rightVector, toIndex);
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -25,6 +25,7 @@
import org.apache.arrow.memory.BufferAllocator;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.OversizedAllocationException;
import org.apache.arrow.vector.util.TransferPair;
Expand DownExpand Up@@ -837,4 +838,33 @@ public void copyFromSafe(int fromIndex, int thisIndex, BaseFixedWidthVector from
handleSafe(thisIndex);
copyFrom(fromIndex, thisIndex, from);
}

@Override
public int hashCode(int index) {
int start = typeWidth * index;
int end = typeWidth * (index + 1);
return ByteFunctionHelpers.hash(this.getDataBuffer(), start, end);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

BaseFixedWidthVector that = (BaseFixedWidthVector) to;

int leftStart = typeWidth * index;
int leftEnd = typeWidth * (index + 1);

int rightStart = typeWidth * toIndex;
int rightEnd = typeWidth * (toIndex + 1);

int ret = ByteFunctionHelpers.equal(this.getDataBuffer(), leftStart, leftEnd,
that.getDataBuffer(), rightStart, rightEnd);
return ret == 1;
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -27,6 +27,7 @@
import org.apache.arrow.memory.OutOfMemoryException;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.OversizedAllocationException;
import org.apache.arrow.vector.util.TransferPair;
Expand DownExpand Up@@ -1334,4 +1335,33 @@ public void copyFromSafe(int fromIndex, int thisIndex, BaseVariableWidthVector f
}
lastSet = thisIndex;
}

@Override
public int hashCode(int index) {
final int start = getStartOffset(index);
final int end = getStartOffset(index + 1);
return ByteFunctionHelpers.hash(this.getDataBuffer(), start, end);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

BaseVariableWidthVector that = (BaseVariableWidthVector) to;

final int leftStart = getStartOffset(index);
final int leftEnd = getStartOffset(index + 1);

final int rightStart = that.getStartOffset(toIndex);
final int rightEnd = that.getStartOffset(toIndex + 1);

int ret = ByteFunctionHelpers.equal(this.getDataBuffer(), leftStart, leftEnd,
that.getDataBuffer(), rightStart, rightEnd);
return ret == 1;
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -237,4 +237,18 @@ public interface ValueVector extends Closeable, Iterable<ValueVector> {
* @return true if element is null
*/
boolean isNull(int index);

/**
* Returns hashCode of element in index.
*/
int hashCode(int index);

/**
* Check whether the element in index equals to the element in targetIndex from the target vector.
* @param index index to compare in this vector
* @param target target vector
* @param targetIndex index to compare in target vector
* @return true if equals, otherwise false.
*/
boolean equals(int index, ValueVector target, int targetIndex);
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -270,7 +270,6 @@ public void setSafe(int index, Text text) {
setSafe(index, text.getBytes(), 0, text.getLength());
}


/*----------------------------------------------------------------*
| |
| vector transfer |
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -244,4 +244,14 @@ public int getNullCount() {
public boolean isNull(int index) {
return false;
}

@Override
public int hashCode(int index) {
return 0;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
return false;
Comment thread
tianchen92 marked this conversation as resolved.
Outdated
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,6 +45,7 @@
import org.apache.arrow.vector.types.pojo.DictionaryEncoding;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.types.pojo.FieldType;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.JsonStringArrayList;
import org.apache.arrow.vector.util.OversizedAllocationException;
Expand DownExpand Up@@ -496,6 +497,37 @@ public TransferPair makeTransferPair(ValueVector target) {
return new TransferImpl((FixedSizeListVector) target);
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
}
int hash = 0;
for (int i = 0; i < listSize; i++) {
hash = ByteFunctionHelpers.comebineHash(hash, vector.hashCode(index * listSize + i));
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

FixedSizeListVector that = (FixedSizeListVector) to;

for (int i = 0; i < listSize; i++) {
if (!vector.equals(index * listSize + i, that, toIndex * listSize + i)) {
return false;
}
}
return true;
}

private class TransferImpl implements TransferPair {

FixedSizeListVector to;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -412,6 +412,49 @@ public ArrowBuf getOffsetBuffer() {
return offsetBuffer;
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
}
int hash = 0;
final int start = offsetBuffer.getInt(index * OFFSET_WIDTH);
final int end = offsetBuffer.getInt((index + 1) * OFFSET_WIDTH);
for (int i = start; i < end; i++) {
hash = 31 * vector.hashCode(i);
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

ListVector that = (ListVector) to;
final int leftStart = offsetBuffer.getInt(index * OFFSET_WIDTH);
final int leftEnd = offsetBuffer.getInt((index + 1) * OFFSET_WIDTH);

final int rightStart = that.offsetBuffer.getInt(toIndex * OFFSET_WIDTH);
final int rightEnd = that.offsetBuffer.getInt((toIndex + 1) * OFFSET_WIDTH);

if ((leftEnd - leftStart) != (rightEnd - rightStart)) {
return false;
}

for (int i = 0; i < (leftEnd - leftStart); i++) {
if (!vector.equals(leftStart + i, that.vector, rightStart + i)) {
return false;
}
}

return true;
}

private class TransferImpl implements TransferPair {

ListVector to;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -286,6 +286,56 @@ public Object getObject(int index) {
return vv;
}

@Override
public int hashCode(int index) {
int hash = 0;
for (String child : getChildFieldNames()) {
ValueVector v = getChild(child);
if (v != null && index < v.getValueCount()) {
hash += 31 * hash + v.hashCode(index);
}
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}
NonNullableStructVector that = (NonNullableStructVector) to;
List<ValueVector> leftChildrens = new ArrayList<>();
List<ValueVector> rightChildrens = new ArrayList<>();

for (String child : getChildFieldNames()) {
ValueVector v = getChild(child);
if (v != null) {
leftChildrens.add(v);
}
}

for (String child : that.getChildFieldNames()) {
ValueVector v = that.getChild(child);
if (v != null) {
rightChildrens.add(v);
}
}

if (leftChildrens.size() != rightChildrens.size()) {
return false;
}

for (int i = 0; i < leftChildrens.size(); i++) {
if (!leftChildrens.get(i).equals(index, rightChildrens.get(i), toIndex)) {
return false;
}
}
return true;
}

@Override
public boolean isNull(int index) {
return false;
Expand DownExpand Up@@ -372,4 +422,5 @@ public void initializeChildrenFromFields(List<Field> children) {
public List<FieldVector> getChildrenFromFields() {
return getChildren();
}

}
Original file line numberDiff line numberDiff line change
Expand Up@@ -479,6 +479,15 @@ public Object getObject(int index) {
}
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
} else {
return super.hashCode(index);
}
}

@Override
public void get(int index, ComplexHolder holder) {
holder.isSet = isSet(index);
Expand DownExpand Up@@ -546,4 +555,5 @@ public void setValueCount(int valueCount) {
super.setValueCount(valueCount);
this.valueCount = valueCount;
}

}
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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
51 changes: 39 additions & 12 deletions java/vector/src/main/codegen/templates/UnionVector.java
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,6 +17,7 @@

import io.netty.buffer.ArrowBuf;
import org.apache.arrow.memory.ReferenceManager;
import org.apache.arrow.vector.ValueVector;
import org.apache.arrow.vector.types.pojo.FieldType;

<@pp.dropOutputFile />
Expand DownExpand Up@@ -491,32 +492,35 @@ public Iterator<ValueVector> iterator() {
return vectors.iterator();
}


public Object getObject(int index) {
private ValueVector getVector(int index) {
int type = typeBuffer.getByte(index * TYPE_WIDTH);
switch (MinorType.values()[type]) {
case NULL:
return null;
case NULL:
return null;
<#list vv.types as type>
<#list type.minor as minor>
<#assign name = minor.class?cap_first />
<#assign fields = minor.fields!type.fields />
<#assign uncappedName = name?uncap_first/>
<#if !minor.typeParams?? >
case ${name?upper_case}:
return get${name}Vector().getObject(index);
case ${name?upper_case}:
return get${name}Vector();
</#if>
</#list>
</#list>
case STRUCT:
return getStruct().getObject(index);
case LIST:
return getList().getObject(index);
default:
throw new UnsupportedOperationException("Cannot support type: " + MinorType.values()[type]);
case STRUCT:
return getStruct();
case LIST:
return getList();
default:
throw new UnsupportedOperationException("Cannot support type: " + MinorType.values()[type]);
}
}

public Object getObject(int index) {
return getVector(index).getObject(index);
}

public byte[] get(int index) {
return null;
}
Expand DownExpand Up@@ -622,4 +626,27 @@ public void setType(int index, MinorType type) {
private int getTypeBufferValueCapacity() {
return typeBuffer.capacity() / TYPE_WIDTH;
}

@Override
public int hashCode(int index) {
return getVector(index).hashCode(index);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}
UnionVector that = (UnionVector) to;
ValueVector leftVector = getVector(index);
ValueVector rightVector = that.getVector(toIndex);

if (leftVector.getClass() != rightVector.getClass()) {
return false;
}
return leftVector.equals(index, rightVector, toIndex);
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -25,6 +25,7 @@
import org.apache.arrow.memory.BufferAllocator;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.OversizedAllocationException;
import org.apache.arrow.vector.util.TransferPair;
Expand DownExpand Up@@ -837,4 +838,33 @@ public void copyFromSafe(int fromIndex, int thisIndex, BaseFixedWidthVector from
handleSafe(thisIndex);
copyFrom(fromIndex, thisIndex, from);
}

@Override
public int hashCode(int index) {
int start = typeWidth * index;
int end = typeWidth * (index + 1);
return ByteFunctionHelpers.hash(this.getDataBuffer(), start, end);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

BaseFixedWidthVector that = (BaseFixedWidthVector) to;

int leftStart = typeWidth * index;
int leftEnd = typeWidth * (index + 1);

int rightStart = typeWidth * toIndex;
int rightEnd = typeWidth * (toIndex + 1);

int ret = ByteFunctionHelpers.equal(this.getDataBuffer(), leftStart, leftEnd,
that.getDataBuffer(), rightStart, rightEnd);
return ret == 1;
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -27,6 +27,7 @@
import org.apache.arrow.memory.OutOfMemoryException;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.OversizedAllocationException;
import org.apache.arrow.vector.util.TransferPair;
Expand DownExpand Up@@ -1334,4 +1335,33 @@ public void copyFromSafe(int fromIndex, int thisIndex, BaseVariableWidthVector f
}
lastSet = thisIndex;
}

@Override
public int hashCode(int index) {
final int start = getStartOffset(index);
final int end = getStartOffset(index + 1);
return ByteFunctionHelpers.hash(this.getDataBuffer(), start, end);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

BaseVariableWidthVector that = (BaseVariableWidthVector) to;

final int leftStart = getStartOffset(index);
final int leftEnd = getStartOffset(index + 1);

final int rightStart = that.getStartOffset(toIndex);
final int rightEnd = that.getStartOffset(toIndex + 1);

int ret = ByteFunctionHelpers.equal(this.getDataBuffer(), leftStart, leftEnd,
that.getDataBuffer(), rightStart, rightEnd);
return ret == 1;
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -237,4 +237,18 @@ public interface ValueVector extends Closeable, Iterable<ValueVector> {
* @return true if element is null
*/
boolean isNull(int index);

/**
* Returns hashCode of element in index.
*/
int hashCode(int index);

/**
* Check whether the element in index equals to the element in targetIndex from the target vector.
* @param index index to compare in this vector
* @param target target vector
* @param targetIndex index to compare in target vector
* @return true if equals, otherwise false.
*/
boolean equals(int index, ValueVector target, int targetIndex);
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -270,7 +270,6 @@ public void setSafe(int index, Text text) {
setSafe(index, text.getBytes(), 0, text.getLength());
}


/*----------------------------------------------------------------*
| |
| vector transfer |
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -244,4 +244,14 @@ public int getNullCount() {
public boolean isNull(int index) {
return false;
}

@Override
public int hashCode(int index) {
return 0;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
return false;
Comment thread
tianchen92 marked this conversation as resolved.
Outdated
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,6 +45,7 @@
import org.apache.arrow.vector.types.pojo.DictionaryEncoding;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.types.pojo.FieldType;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.JsonStringArrayList;
import org.apache.arrow.vector.util.OversizedAllocationException;
Expand DownExpand Up@@ -496,6 +497,37 @@ public TransferPair makeTransferPair(ValueVector target) {
return new TransferImpl((FixedSizeListVector) target);
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
}
int hash = 0;
for (int i = 0; i < listSize; i++) {
hash = ByteFunctionHelpers.comebineHash(hash, vector.hashCode(index * listSize + i));
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

FixedSizeListVector that = (FixedSizeListVector) to;

for (int i = 0; i < listSize; i++) {
if (!vector.equals(index * listSize + i, that, toIndex * listSize + i)) {
return false;
}
}
return true;
}

private class TransferImpl implements TransferPair {

FixedSizeListVector to;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -412,6 +412,49 @@ public ArrowBuf getOffsetBuffer() {
return offsetBuffer;
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
}
int hash = 0;
final int start = offsetBuffer.getInt(index * OFFSET_WIDTH);
final int end = offsetBuffer.getInt((index + 1) * OFFSET_WIDTH);
for (int i = start; i < end; i++) {
hash = 31 * vector.hashCode(i);
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

ListVector that = (ListVector) to;
final int leftStart = offsetBuffer.getInt(index * OFFSET_WIDTH);
final int leftEnd = offsetBuffer.getInt((index + 1) * OFFSET_WIDTH);

final int rightStart = that.offsetBuffer.getInt(toIndex * OFFSET_WIDTH);
final int rightEnd = that.offsetBuffer.getInt((toIndex + 1) * OFFSET_WIDTH);

if ((leftEnd - leftStart) != (rightEnd - rightStart)) {
return false;
}

for (int i = 0; i < (leftEnd - leftStart); i++) {
if (!vector.equals(leftStart + i, that.vector, rightStart + i)) {
return false;
}
}

return true;
}

private class TransferImpl implements TransferPair {

ListVector to;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -286,6 +286,56 @@ public Object getObject(int index) {
return vv;
}

@Override
public int hashCode(int index) {
int hash = 0;
for (String child : getChildFieldNames()) {
ValueVector v = getChild(child);
if (v != null && index < v.getValueCount()) {
hash += 31 * hash + v.hashCode(index);
}
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}
NonNullableStructVector that = (NonNullableStructVector) to;
List<ValueVector> leftChildrens = new ArrayList<>();
List<ValueVector> rightChildrens = new ArrayList<>();

for (String child : getChildFieldNames()) {
ValueVector v = getChild(child);
if (v != null) {
leftChildrens.add(v);
}
}

for (String child : that.getChildFieldNames()) {
ValueVector v = that.getChild(child);
if (v != null) {
rightChildrens.add(v);
}
}

if (leftChildrens.size() != rightChildrens.size()) {
return false;
}

for (int i = 0; i < leftChildrens.size(); i++) {
if (!leftChildrens.get(i).equals(index, rightChildrens.get(i), toIndex)) {
return false;
}
}
return true;
}

@Override
public boolean isNull(int index) {
return false;
Expand DownExpand Up@@ -372,4 +422,5 @@ public void initializeChildrenFromFields(List<Field> children) {
public List<FieldVector> getChildrenFromFields() {
return getChildren();
}

}
Original file line numberDiff line numberDiff line change
Expand Up@@ -479,6 +479,15 @@ public Object getObject(int index) {
}
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
} else {
return super.hashCode(index);
}
}

@Override
public void get(int index, ComplexHolder holder) {
holder.isSet = isSet(index);
Expand DownExpand Up@@ -546,4 +555,5 @@ public void setValueCount(int valueCount) {
super.setValueCount(valueCount);
this.valueCount = valueCount;
}

}
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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
51 changes: 39 additions & 12 deletions java/vector/src/main/codegen/templates/UnionVector.java
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,6 +17,7 @@

import io.netty.buffer.ArrowBuf;
import org.apache.arrow.memory.ReferenceManager;
import org.apache.arrow.vector.ValueVector;
import org.apache.arrow.vector.types.pojo.FieldType;

<@pp.dropOutputFile />
Expand DownExpand Up@@ -491,32 +492,35 @@ public Iterator<ValueVector> iterator() {
return vectors.iterator();
}


public Object getObject(int index) {
private ValueVector getVector(int index) {
int type = typeBuffer.getByte(index * TYPE_WIDTH);
switch (MinorType.values()[type]) {
case NULL:
return null;
case NULL:
return null;
<#list vv.types as type>
<#list type.minor as minor>
<#assign name = minor.class?cap_first />
<#assign fields = minor.fields!type.fields />
<#assign uncappedName = name?uncap_first/>
<#if !minor.typeParams?? >
case ${name?upper_case}:
return get${name}Vector().getObject(index);
case ${name?upper_case}:
return get${name}Vector();
</#if>
</#list>
</#list>
case STRUCT:
return getStruct().getObject(index);
case LIST:
return getList().getObject(index);
default:
throw new UnsupportedOperationException("Cannot support type: " + MinorType.values()[type]);
case STRUCT:
return getStruct();
case LIST:
return getList();
default:
throw new UnsupportedOperationException("Cannot support type: " + MinorType.values()[type]);
}
}

public Object getObject(int index) {
return getVector(index).getObject(index);
}

public byte[] get(int index) {
return null;
}
Expand DownExpand Up@@ -622,4 +626,27 @@ public void setType(int index, MinorType type) {
private int getTypeBufferValueCapacity() {
return typeBuffer.capacity() / TYPE_WIDTH;
}

@Override
public int hashCode(int index) {
return getVector(index).hashCode(index);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}
UnionVector that = (UnionVector) to;
ValueVector leftVector = getVector(index);
ValueVector rightVector = that.getVector(toIndex);

if (leftVector.getClass() != rightVector.getClass()) {
return false;
}
return leftVector.equals(index, rightVector, toIndex);
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -25,6 +25,7 @@
import org.apache.arrow.memory.BufferAllocator;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.OversizedAllocationException;
import org.apache.arrow.vector.util.TransferPair;
Expand DownExpand Up@@ -837,4 +838,33 @@ public void copyFromSafe(int fromIndex, int thisIndex, BaseFixedWidthVector from
handleSafe(thisIndex);
copyFrom(fromIndex, thisIndex, from);
}

@Override
public int hashCode(int index) {
int start = typeWidth * index;
int end = typeWidth * (index + 1);
return ByteFunctionHelpers.hash(this.getDataBuffer(), start, end);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

BaseFixedWidthVector that = (BaseFixedWidthVector) to;

int leftStart = typeWidth * index;
int leftEnd = typeWidth * (index + 1);

int rightStart = typeWidth * toIndex;
int rightEnd = typeWidth * (toIndex + 1);

int ret = ByteFunctionHelpers.equal(this.getDataBuffer(), leftStart, leftEnd,
that.getDataBuffer(), rightStart, rightEnd);
return ret == 1;
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -27,6 +27,7 @@
import org.apache.arrow.memory.OutOfMemoryException;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.OversizedAllocationException;
import org.apache.arrow.vector.util.TransferPair;
Expand DownExpand Up@@ -1334,4 +1335,33 @@ public void copyFromSafe(int fromIndex, int thisIndex, BaseVariableWidthVector f
}
lastSet = thisIndex;
}

@Override
public int hashCode(int index) {
final int start = getStartOffset(index);
final int end = getStartOffset(index + 1);
return ByteFunctionHelpers.hash(this.getDataBuffer(), start, end);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

BaseVariableWidthVector that = (BaseVariableWidthVector) to;

final int leftStart = getStartOffset(index);
final int leftEnd = getStartOffset(index + 1);

final int rightStart = that.getStartOffset(toIndex);
final int rightEnd = that.getStartOffset(toIndex + 1);

int ret = ByteFunctionHelpers.equal(this.getDataBuffer(), leftStart, leftEnd,
that.getDataBuffer(), rightStart, rightEnd);
return ret == 1;
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -237,4 +237,18 @@ public interface ValueVector extends Closeable, Iterable<ValueVector> {
* @return true if element is null
*/
boolean isNull(int index);

/**
* Returns hashCode of element in index.
*/
int hashCode(int index);

/**
* Check whether the element in index equals to the element in targetIndex from the target vector.
* @param index index to compare in this vector
* @param target target vector
* @param targetIndex index to compare in target vector
* @return true if equals, otherwise false.
*/
boolean equals(int index, ValueVector target, int targetIndex);
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -270,7 +270,6 @@ public void setSafe(int index, Text text) {
setSafe(index, text.getBytes(), 0, text.getLength());
}


/*----------------------------------------------------------------*
| |
| vector transfer |
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -244,4 +244,14 @@ public int getNullCount() {
public boolean isNull(int index) {
return false;
}

@Override
public int hashCode(int index) {
return 0;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
return false;
Comment thread
tianchen92 marked this conversation as resolved.
Outdated
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,6 +45,7 @@
import org.apache.arrow.vector.types.pojo.DictionaryEncoding;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.types.pojo.FieldType;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.JsonStringArrayList;
import org.apache.arrow.vector.util.OversizedAllocationException;
Expand DownExpand Up@@ -496,6 +497,37 @@ public TransferPair makeTransferPair(ValueVector target) {
return new TransferImpl((FixedSizeListVector) target);
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
}
int hash = 0;
for (int i = 0; i < listSize; i++) {
hash = ByteFunctionHelpers.comebineHash(hash, vector.hashCode(index * listSize + i));
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

FixedSizeListVector that = (FixedSizeListVector) to;

for (int i = 0; i < listSize; i++) {
if (!vector.equals(index * listSize + i, that, toIndex * listSize + i)) {
return false;
}
}
return true;
}

private class TransferImpl implements TransferPair {

FixedSizeListVector to;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -412,6 +412,49 @@ public ArrowBuf getOffsetBuffer() {
return offsetBuffer;
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
}
int hash = 0;
final int start = offsetBuffer.getInt(index * OFFSET_WIDTH);
final int end = offsetBuffer.getInt((index + 1) * OFFSET_WIDTH);
for (int i = start; i < end; i++) {
hash = 31 * vector.hashCode(i);
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

ListVector that = (ListVector) to;
final int leftStart = offsetBuffer.getInt(index * OFFSET_WIDTH);
final int leftEnd = offsetBuffer.getInt((index + 1) * OFFSET_WIDTH);

final int rightStart = that.offsetBuffer.getInt(toIndex * OFFSET_WIDTH);
final int rightEnd = that.offsetBuffer.getInt((toIndex + 1) * OFFSET_WIDTH);

if ((leftEnd - leftStart) != (rightEnd - rightStart)) {
return false;
}

for (int i = 0; i < (leftEnd - leftStart); i++) {
if (!vector.equals(leftStart + i, that.vector, rightStart + i)) {
return false;
}
}

return true;
}

private class TransferImpl implements TransferPair {

ListVector to;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -286,6 +286,56 @@ public Object getObject(int index) {
return vv;
}

@Override
public int hashCode(int index) {
int hash = 0;
for (String child : getChildFieldNames()) {
ValueVector v = getChild(child);
if (v != null && index < v.getValueCount()) {
hash += 31 * hash + v.hashCode(index);
}
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}
NonNullableStructVector that = (NonNullableStructVector) to;
List<ValueVector> leftChildrens = new ArrayList<>();
List<ValueVector> rightChildrens = new ArrayList<>();

for (String child : getChildFieldNames()) {
ValueVector v = getChild(child);
if (v != null) {
leftChildrens.add(v);
}
}

for (String child : that.getChildFieldNames()) {
ValueVector v = that.getChild(child);
if (v != null) {
rightChildrens.add(v);
}
}

if (leftChildrens.size() != rightChildrens.size()) {
return false;
}

for (int i = 0; i < leftChildrens.size(); i++) {
if (!leftChildrens.get(i).equals(index, rightChildrens.get(i), toIndex)) {
return false;
}
}
return true;
}

@Override
public boolean isNull(int index) {
return false;
Expand DownExpand Up@@ -372,4 +422,5 @@ public void initializeChildrenFromFields(List<Field> children) {
public List<FieldVector> getChildrenFromFields() {
return getChildren();
}

}
Original file line numberDiff line numberDiff line change
Expand Up@@ -479,6 +479,15 @@ public Object getObject(int index) {
}
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
} else {
return super.hashCode(index);
}
}

@Override
public void get(int index, ComplexHolder holder) {
holder.isSet = isSet(index);
Expand DownExpand Up@@ -546,4 +555,5 @@ public void setValueCount(int valueCount) {
super.setValueCount(valueCount);
this.valueCount = valueCount;
}

}
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
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
51 changes: 39 additions & 12 deletions java/vector/src/main/codegen/templates/UnionVector.java
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,6 +17,7 @@

import io.netty.buffer.ArrowBuf;
import org.apache.arrow.memory.ReferenceManager;
import org.apache.arrow.vector.ValueVector;
import org.apache.arrow.vector.types.pojo.FieldType;

<@pp.dropOutputFile />
Expand DownExpand Up@@ -491,32 +492,35 @@ public Iterator<ValueVector> iterator() {
return vectors.iterator();
}


public Object getObject(int index) {
private ValueVector getVector(int index) {
int type = typeBuffer.getByte(index * TYPE_WIDTH);
switch (MinorType.values()[type]) {
case NULL:
return null;
case NULL:
return null;
<#list vv.types as type>
<#list type.minor as minor>
<#assign name = minor.class?cap_first />
<#assign fields = minor.fields!type.fields />
<#assign uncappedName = name?uncap_first/>
<#if !minor.typeParams?? >
case ${name?upper_case}:
return get${name}Vector().getObject(index);
case ${name?upper_case}:
return get${name}Vector();
</#if>
</#list>
</#list>
case STRUCT:
return getStruct().getObject(index);
case LIST:
return getList().getObject(index);
default:
throw new UnsupportedOperationException("Cannot support type: " + MinorType.values()[type]);
case STRUCT:
return getStruct();
case LIST:
return getList();
default:
throw new UnsupportedOperationException("Cannot support type: " + MinorType.values()[type]);
}
}

public Object getObject(int index) {
return getVector(index).getObject(index);
}

public byte[] get(int index) {
return null;
}
Expand DownExpand Up@@ -622,4 +626,27 @@ public void setType(int index, MinorType type) {
private int getTypeBufferValueCapacity() {
return typeBuffer.capacity() / TYPE_WIDTH;
}

@Override
public int hashCode(int index) {
return getVector(index).hashCode(index);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}
UnionVector that = (UnionVector) to;
ValueVector leftVector = getVector(index);
ValueVector rightVector = that.getVector(toIndex);

if (leftVector.getClass() != rightVector.getClass()) {
return false;
}
return leftVector.equals(index, rightVector, toIndex);
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -25,6 +25,7 @@
import org.apache.arrow.memory.BufferAllocator;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.OversizedAllocationException;
import org.apache.arrow.vector.util.TransferPair;
Expand DownExpand Up@@ -837,4 +838,33 @@ public void copyFromSafe(int fromIndex, int thisIndex, BaseFixedWidthVector from
handleSafe(thisIndex);
copyFrom(fromIndex, thisIndex, from);
}

@Override
public int hashCode(int index) {
int start = typeWidth * index;
int end = typeWidth * (index + 1);
return ByteFunctionHelpers.hash(this.getDataBuffer(), start, end);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

BaseFixedWidthVector that = (BaseFixedWidthVector) to;

int leftStart = typeWidth * index;
int leftEnd = typeWidth * (index + 1);

int rightStart = typeWidth * toIndex;
int rightEnd = typeWidth * (toIndex + 1);

int ret = ByteFunctionHelpers.equal(this.getDataBuffer(), leftStart, leftEnd,
that.getDataBuffer(), rightStart, rightEnd);
return ret == 1;
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -27,6 +27,7 @@
import org.apache.arrow.memory.OutOfMemoryException;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.OversizedAllocationException;
import org.apache.arrow.vector.util.TransferPair;
Expand DownExpand Up@@ -1334,4 +1335,33 @@ public void copyFromSafe(int fromIndex, int thisIndex, BaseVariableWidthVector f
}
lastSet = thisIndex;
}

@Override
public int hashCode(int index) {
final int start = getStartOffset(index);
final int end = getStartOffset(index + 1);
return ByteFunctionHelpers.hash(this.getDataBuffer(), start, end);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

BaseVariableWidthVector that = (BaseVariableWidthVector) to;

final int leftStart = getStartOffset(index);
final int leftEnd = getStartOffset(index + 1);

final int rightStart = that.getStartOffset(toIndex);
final int rightEnd = that.getStartOffset(toIndex + 1);

int ret = ByteFunctionHelpers.equal(this.getDataBuffer(), leftStart, leftEnd,
that.getDataBuffer(), rightStart, rightEnd);
return ret == 1;
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -237,4 +237,18 @@ public interface ValueVector extends Closeable, Iterable<ValueVector> {
* @return true if element is null
*/
boolean isNull(int index);

/**
* Returns hashCode of element in index.
*/
int hashCode(int index);

/**
* Check whether the element in index equals to the element in targetIndex from the target vector.
* @param index index to compare in this vector
* @param target target vector
* @param targetIndex index to compare in target vector
* @return true if equals, otherwise false.
*/
boolean equals(int index, ValueVector target, int targetIndex);
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -270,7 +270,6 @@ public void setSafe(int index, Text text) {
setSafe(index, text.getBytes(), 0, text.getLength());
}


/*----------------------------------------------------------------*
| |
| vector transfer |
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -244,4 +244,14 @@ public int getNullCount() {
public boolean isNull(int index) {
return false;
}

@Override
public int hashCode(int index) {
return 0;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
return false;
Comment thread
tianchen92 marked this conversation as resolved.
Outdated
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,6 +45,7 @@
import org.apache.arrow.vector.types.pojo.DictionaryEncoding;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.types.pojo.FieldType;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.JsonStringArrayList;
import org.apache.arrow.vector.util.OversizedAllocationException;
Expand DownExpand Up@@ -496,6 +497,37 @@ public TransferPair makeTransferPair(ValueVector target) {
return new TransferImpl((FixedSizeListVector) target);
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
}
int hash = 0;
for (int i = 0; i < listSize; i++) {
hash = ByteFunctionHelpers.comebineHash(hash, vector.hashCode(index * listSize + i));
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

FixedSizeListVector that = (FixedSizeListVector) to;

for (int i = 0; i < listSize; i++) {
if (!vector.equals(index * listSize + i, that, toIndex * listSize + i)) {
return false;
}
}
return true;
}

private class TransferImpl implements TransferPair {

FixedSizeListVector to;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -412,6 +412,49 @@ public ArrowBuf getOffsetBuffer() {
return offsetBuffer;
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
}
int hash = 0;
final int start = offsetBuffer.getInt(index * OFFSET_WIDTH);
final int end = offsetBuffer.getInt((index + 1) * OFFSET_WIDTH);
for (int i = start; i < end; i++) {
hash = 31 * vector.hashCode(i);
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

ListVector that = (ListVector) to;
final int leftStart = offsetBuffer.getInt(index * OFFSET_WIDTH);
final int leftEnd = offsetBuffer.getInt((index + 1) * OFFSET_WIDTH);

final int rightStart = that.offsetBuffer.getInt(toIndex * OFFSET_WIDTH);
final int rightEnd = that.offsetBuffer.getInt((toIndex + 1) * OFFSET_WIDTH);

if ((leftEnd - leftStart) != (rightEnd - rightStart)) {
return false;
}

for (int i = 0; i < (leftEnd - leftStart); i++) {
if (!vector.equals(leftStart + i, that.vector, rightStart + i)) {
return false;
}
}

return true;
}

private class TransferImpl implements TransferPair {

ListVector to;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -286,6 +286,56 @@ public Object getObject(int index) {
return vv;
}

@Override
public int hashCode(int index) {
int hash = 0;
for (String child : getChildFieldNames()) {
ValueVector v = getChild(child);
if (v != null && index < v.getValueCount()) {
hash += 31 * hash + v.hashCode(index);
}
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}
NonNullableStructVector that = (NonNullableStructVector) to;
List<ValueVector> leftChildrens = new ArrayList<>();
List<ValueVector> rightChildrens = new ArrayList<>();

for (String child : getChildFieldNames()) {
ValueVector v = getChild(child);
if (v != null) {
leftChildrens.add(v);
}
}

for (String child : that.getChildFieldNames()) {
ValueVector v = that.getChild(child);
if (v != null) {
rightChildrens.add(v);
}
}

if (leftChildrens.size() != rightChildrens.size()) {
return false;
}

for (int i = 0; i < leftChildrens.size(); i++) {
if (!leftChildrens.get(i).equals(index, rightChildrens.get(i), toIndex)) {
return false;
}
}
return true;
}

@Override
public boolean isNull(int index) {
return false;
Expand DownExpand Up@@ -372,4 +422,5 @@ public void initializeChildrenFromFields(List<Field> children) {
public List<FieldVector> getChildrenFromFields() {
return getChildren();
}

}
Original file line numberDiff line numberDiff line change
Expand Up@@ -479,6 +479,15 @@ public Object getObject(int index) {
}
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
} else {
return super.hashCode(index);
}
}

@Override
public void get(int index, ComplexHolder holder) {
holder.isSet = isSet(index);
Expand DownExpand Up@@ -546,4 +555,5 @@ public void setValueCount(int valueCount) {
super.setValueCount(valueCount);
this.valueCount = valueCount;
}

}
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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
51 changes: 39 additions & 12 deletions java/vector/src/main/codegen/templates/UnionVector.java
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,6 +17,7 @@

import io.netty.buffer.ArrowBuf;
import org.apache.arrow.memory.ReferenceManager;
import org.apache.arrow.vector.ValueVector;
import org.apache.arrow.vector.types.pojo.FieldType;

<@pp.dropOutputFile />
Expand DownExpand Up@@ -491,32 +492,35 @@ public Iterator<ValueVector> iterator() {
return vectors.iterator();
}


public Object getObject(int index) {
private ValueVector getVector(int index) {
int type = typeBuffer.getByte(index * TYPE_WIDTH);
switch (MinorType.values()[type]) {
case NULL:
return null;
case NULL:
return null;
<#list vv.types as type>
<#list type.minor as minor>
<#assign name = minor.class?cap_first />
<#assign fields = minor.fields!type.fields />
<#assign uncappedName = name?uncap_first/>
<#if !minor.typeParams?? >
case ${name?upper_case}:
return get${name}Vector().getObject(index);
case ${name?upper_case}:
return get${name}Vector();
</#if>
</#list>
</#list>
case STRUCT:
return getStruct().getObject(index);
case LIST:
return getList().getObject(index);
default:
throw new UnsupportedOperationException("Cannot support type: " + MinorType.values()[type]);
case STRUCT:
return getStruct();
case LIST:
return getList();
default:
throw new UnsupportedOperationException("Cannot support type: " + MinorType.values()[type]);
}
}

public Object getObject(int index) {
return getVector(index).getObject(index);
}

public byte[] get(int index) {
return null;
}
Expand DownExpand Up@@ -622,4 +626,27 @@ public void setType(int index, MinorType type) {
private int getTypeBufferValueCapacity() {
return typeBuffer.capacity() / TYPE_WIDTH;
}

@Override
public int hashCode(int index) {
return getVector(index).hashCode(index);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}
UnionVector that = (UnionVector) to;
ValueVector leftVector = getVector(index);
ValueVector rightVector = that.getVector(toIndex);

if (leftVector.getClass() != rightVector.getClass()) {
return false;
}
return leftVector.equals(index, rightVector, toIndex);
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -25,6 +25,7 @@
import org.apache.arrow.memory.BufferAllocator;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.OversizedAllocationException;
import org.apache.arrow.vector.util.TransferPair;
Expand DownExpand Up@@ -837,4 +838,33 @@ public void copyFromSafe(int fromIndex, int thisIndex, BaseFixedWidthVector from
handleSafe(thisIndex);
copyFrom(fromIndex, thisIndex, from);
}

@Override
public int hashCode(int index) {
int start = typeWidth * index;
int end = typeWidth * (index + 1);
return ByteFunctionHelpers.hash(this.getDataBuffer(), start, end);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

BaseFixedWidthVector that = (BaseFixedWidthVector) to;

int leftStart = typeWidth * index;
int leftEnd = typeWidth * (index + 1);

int rightStart = typeWidth * toIndex;
int rightEnd = typeWidth * (toIndex + 1);

int ret = ByteFunctionHelpers.equal(this.getDataBuffer(), leftStart, leftEnd,
that.getDataBuffer(), rightStart, rightEnd);
return ret == 1;
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -27,6 +27,7 @@
import org.apache.arrow.memory.OutOfMemoryException;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.OversizedAllocationException;
import org.apache.arrow.vector.util.TransferPair;
Expand DownExpand Up@@ -1334,4 +1335,33 @@ public void copyFromSafe(int fromIndex, int thisIndex, BaseVariableWidthVector f
}
lastSet = thisIndex;
}

@Override
public int hashCode(int index) {
final int start = getStartOffset(index);
final int end = getStartOffset(index + 1);
return ByteFunctionHelpers.hash(this.getDataBuffer(), start, end);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

BaseVariableWidthVector that = (BaseVariableWidthVector) to;

final int leftStart = getStartOffset(index);
final int leftEnd = getStartOffset(index + 1);

final int rightStart = that.getStartOffset(toIndex);
final int rightEnd = that.getStartOffset(toIndex + 1);

int ret = ByteFunctionHelpers.equal(this.getDataBuffer(), leftStart, leftEnd,
that.getDataBuffer(), rightStart, rightEnd);
return ret == 1;
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -237,4 +237,18 @@ public interface ValueVector extends Closeable, Iterable<ValueVector> {
* @return true if element is null
*/
boolean isNull(int index);

/**
* Returns hashCode of element in index.
*/
int hashCode(int index);

/**
* Check whether the element in index equals to the element in targetIndex from the target vector.
* @param index index to compare in this vector
* @param target target vector
* @param targetIndex index to compare in target vector
* @return true if equals, otherwise false.
*/
boolean equals(int index, ValueVector target, int targetIndex);
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -270,7 +270,6 @@ public void setSafe(int index, Text text) {
setSafe(index, text.getBytes(), 0, text.getLength());
}


/*----------------------------------------------------------------*
| |
| vector transfer |
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -244,4 +244,14 @@ public int getNullCount() {
public boolean isNull(int index) {
return false;
}

@Override
public int hashCode(int index) {
return 0;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
return false;
Comment thread
tianchen92 marked this conversation as resolved.
Outdated
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,6 +45,7 @@
import org.apache.arrow.vector.types.pojo.DictionaryEncoding;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.types.pojo.FieldType;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.JsonStringArrayList;
import org.apache.arrow.vector.util.OversizedAllocationException;
Expand DownExpand Up@@ -496,6 +497,37 @@ public TransferPair makeTransferPair(ValueVector target) {
return new TransferImpl((FixedSizeListVector) target);
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
}
int hash = 0;
for (int i = 0; i < listSize; i++) {
hash = ByteFunctionHelpers.comebineHash(hash, vector.hashCode(index * listSize + i));
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

FixedSizeListVector that = (FixedSizeListVector) to;

for (int i = 0; i < listSize; i++) {
if (!vector.equals(index * listSize + i, that, toIndex * listSize + i)) {
return false;
}
}
return true;
}

private class TransferImpl implements TransferPair {

FixedSizeListVector to;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -412,6 +412,49 @@ public ArrowBuf getOffsetBuffer() {
return offsetBuffer;
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
}
int hash = 0;
final int start = offsetBuffer.getInt(index * OFFSET_WIDTH);
final int end = offsetBuffer.getInt((index + 1) * OFFSET_WIDTH);
for (int i = start; i < end; i++) {
hash = 31 * vector.hashCode(i);
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

ListVector that = (ListVector) to;
final int leftStart = offsetBuffer.getInt(index * OFFSET_WIDTH);
final int leftEnd = offsetBuffer.getInt((index + 1) * OFFSET_WIDTH);

final int rightStart = that.offsetBuffer.getInt(toIndex * OFFSET_WIDTH);
final int rightEnd = that.offsetBuffer.getInt((toIndex + 1) * OFFSET_WIDTH);

if ((leftEnd - leftStart) != (rightEnd - rightStart)) {
return false;
}

for (int i = 0; i < (leftEnd - leftStart); i++) {
if (!vector.equals(leftStart + i, that.vector, rightStart + i)) {
return false;
}
}

return true;
}

private class TransferImpl implements TransferPair {

ListVector to;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -286,6 +286,56 @@ public Object getObject(int index) {
return vv;
}

@Override
public int hashCode(int index) {
int hash = 0;
for (String child : getChildFieldNames()) {
ValueVector v = getChild(child);
if (v != null && index < v.getValueCount()) {
hash += 31 * hash + v.hashCode(index);
}
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}
NonNullableStructVector that = (NonNullableStructVector) to;
List<ValueVector> leftChildrens = new ArrayList<>();
List<ValueVector> rightChildrens = new ArrayList<>();

for (String child : getChildFieldNames()) {
ValueVector v = getChild(child);
if (v != null) {
leftChildrens.add(v);
}
}

for (String child : that.getChildFieldNames()) {
ValueVector v = that.getChild(child);
if (v != null) {
rightChildrens.add(v);
}
}

if (leftChildrens.size() != rightChildrens.size()) {
return false;
}

for (int i = 0; i < leftChildrens.size(); i++) {
if (!leftChildrens.get(i).equals(index, rightChildrens.get(i), toIndex)) {
return false;
}
}
return true;
}

@Override
public boolean isNull(int index) {
return false;
Expand DownExpand Up@@ -372,4 +422,5 @@ public void initializeChildrenFromFields(List<Field> children) {
public List<FieldVector> getChildrenFromFields() {
return getChildren();
}

}
Original file line numberDiff line numberDiff line change
Expand Up@@ -479,6 +479,15 @@ public Object getObject(int index) {
}
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
} else {
return super.hashCode(index);
}
}

@Override
public void get(int index, ComplexHolder holder) {
holder.isSet = isSet(index);
Expand DownExpand Up@@ -546,4 +555,5 @@ public void setValueCount(int valueCount) {
super.setValueCount(valueCount);
this.valueCount = valueCount;
}

}
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
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
51 changes: 39 additions & 12 deletions java/vector/src/main/codegen/templates/UnionVector.java
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,6 +17,7 @@

import io.netty.buffer.ArrowBuf;
import org.apache.arrow.memory.ReferenceManager;
import org.apache.arrow.vector.ValueVector;
import org.apache.arrow.vector.types.pojo.FieldType;

<@pp.dropOutputFile />
Expand DownExpand Up@@ -491,32 +492,35 @@ public Iterator<ValueVector> iterator() {
return vectors.iterator();
}


public Object getObject(int index) {
private ValueVector getVector(int index) {
int type = typeBuffer.getByte(index * TYPE_WIDTH);
switch (MinorType.values()[type]) {
case NULL:
return null;
case NULL:
return null;
<#list vv.types as type>
<#list type.minor as minor>
<#assign name = minor.class?cap_first />
<#assign fields = minor.fields!type.fields />
<#assign uncappedName = name?uncap_first/>
<#if !minor.typeParams?? >
case ${name?upper_case}:
return get${name}Vector().getObject(index);
case ${name?upper_case}:
return get${name}Vector();
</#if>
</#list>
</#list>
case STRUCT:
return getStruct().getObject(index);
case LIST:
return getList().getObject(index);
default:
throw new UnsupportedOperationException("Cannot support type: " + MinorType.values()[type]);
case STRUCT:
return getStruct();
case LIST:
return getList();
default:
throw new UnsupportedOperationException("Cannot support type: " + MinorType.values()[type]);
}
}

public Object getObject(int index) {
return getVector(index).getObject(index);
}

public byte[] get(int index) {
return null;
}
Expand DownExpand Up@@ -622,4 +626,27 @@ public void setType(int index, MinorType type) {
private int getTypeBufferValueCapacity() {
return typeBuffer.capacity() / TYPE_WIDTH;
}

@Override
public int hashCode(int index) {
return getVector(index).hashCode(index);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}
UnionVector that = (UnionVector) to;
ValueVector leftVector = getVector(index);
ValueVector rightVector = that.getVector(toIndex);

if (leftVector.getClass() != rightVector.getClass()) {
return false;
}
return leftVector.equals(index, rightVector, toIndex);
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -25,6 +25,7 @@
import org.apache.arrow.memory.BufferAllocator;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.OversizedAllocationException;
import org.apache.arrow.vector.util.TransferPair;
Expand DownExpand Up@@ -837,4 +838,33 @@ public void copyFromSafe(int fromIndex, int thisIndex, BaseFixedWidthVector from
handleSafe(thisIndex);
copyFrom(fromIndex, thisIndex, from);
}

@Override
public int hashCode(int index) {
int start = typeWidth * index;
int end = typeWidth * (index + 1);
return ByteFunctionHelpers.hash(this.getDataBuffer(), start, end);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

BaseFixedWidthVector that = (BaseFixedWidthVector) to;

int leftStart = typeWidth * index;
int leftEnd = typeWidth * (index + 1);

int rightStart = typeWidth * toIndex;
int rightEnd = typeWidth * (toIndex + 1);

int ret = ByteFunctionHelpers.equal(this.getDataBuffer(), leftStart, leftEnd,
that.getDataBuffer(), rightStart, rightEnd);
return ret == 1;
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -27,6 +27,7 @@
import org.apache.arrow.memory.OutOfMemoryException;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.OversizedAllocationException;
import org.apache.arrow.vector.util.TransferPair;
Expand DownExpand Up@@ -1334,4 +1335,33 @@ public void copyFromSafe(int fromIndex, int thisIndex, BaseVariableWidthVector f
}
lastSet = thisIndex;
}

@Override
public int hashCode(int index) {
final int start = getStartOffset(index);
final int end = getStartOffset(index + 1);
return ByteFunctionHelpers.hash(this.getDataBuffer(), start, end);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

BaseVariableWidthVector that = (BaseVariableWidthVector) to;

final int leftStart = getStartOffset(index);
final int leftEnd = getStartOffset(index + 1);

final int rightStart = that.getStartOffset(toIndex);
final int rightEnd = that.getStartOffset(toIndex + 1);

int ret = ByteFunctionHelpers.equal(this.getDataBuffer(), leftStart, leftEnd,
that.getDataBuffer(), rightStart, rightEnd);
return ret == 1;
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -237,4 +237,18 @@ public interface ValueVector extends Closeable, Iterable<ValueVector> {
* @return true if element is null
*/
boolean isNull(int index);

/**
* Returns hashCode of element in index.
*/
int hashCode(int index);

/**
* Check whether the element in index equals to the element in targetIndex from the target vector.
* @param index index to compare in this vector
* @param target target vector
* @param targetIndex index to compare in target vector
* @return true if equals, otherwise false.
*/
boolean equals(int index, ValueVector target, int targetIndex);
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -270,7 +270,6 @@ public void setSafe(int index, Text text) {
setSafe(index, text.getBytes(), 0, text.getLength());
}


/*----------------------------------------------------------------*
| |
| vector transfer |
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -244,4 +244,14 @@ public int getNullCount() {
public boolean isNull(int index) {
return false;
}

@Override
public int hashCode(int index) {
return 0;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
return false;
Comment thread
tianchen92 marked this conversation as resolved.
Outdated
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,6 +45,7 @@
import org.apache.arrow.vector.types.pojo.DictionaryEncoding;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.types.pojo.FieldType;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.JsonStringArrayList;
import org.apache.arrow.vector.util.OversizedAllocationException;
Expand DownExpand Up@@ -496,6 +497,37 @@ public TransferPair makeTransferPair(ValueVector target) {
return new TransferImpl((FixedSizeListVector) target);
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
}
int hash = 0;
for (int i = 0; i < listSize; i++) {
hash = ByteFunctionHelpers.comebineHash(hash, vector.hashCode(index * listSize + i));
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

FixedSizeListVector that = (FixedSizeListVector) to;

for (int i = 0; i < listSize; i++) {
if (!vector.equals(index * listSize + i, that, toIndex * listSize + i)) {
return false;
}
}
return true;
}

private class TransferImpl implements TransferPair {

FixedSizeListVector to;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -412,6 +412,49 @@ public ArrowBuf getOffsetBuffer() {
return offsetBuffer;
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
}
int hash = 0;
final int start = offsetBuffer.getInt(index * OFFSET_WIDTH);
final int end = offsetBuffer.getInt((index + 1) * OFFSET_WIDTH);
for (int i = start; i < end; i++) {
hash = 31 * vector.hashCode(i);
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

ListVector that = (ListVector) to;
final int leftStart = offsetBuffer.getInt(index * OFFSET_WIDTH);
final int leftEnd = offsetBuffer.getInt((index + 1) * OFFSET_WIDTH);

final int rightStart = that.offsetBuffer.getInt(toIndex * OFFSET_WIDTH);
final int rightEnd = that.offsetBuffer.getInt((toIndex + 1) * OFFSET_WIDTH);

if ((leftEnd - leftStart) != (rightEnd - rightStart)) {
return false;
}

for (int i = 0; i < (leftEnd - leftStart); i++) {
if (!vector.equals(leftStart + i, that.vector, rightStart + i)) {
return false;
}
}

return true;
}

private class TransferImpl implements TransferPair {

ListVector to;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -286,6 +286,56 @@ public Object getObject(int index) {
return vv;
}

@Override
public int hashCode(int index) {
int hash = 0;
for (String child : getChildFieldNames()) {
ValueVector v = getChild(child);
if (v != null && index < v.getValueCount()) {
hash += 31 * hash + v.hashCode(index);
}
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}
NonNullableStructVector that = (NonNullableStructVector) to;
List<ValueVector> leftChildrens = new ArrayList<>();
List<ValueVector> rightChildrens = new ArrayList<>();

for (String child : getChildFieldNames()) {
ValueVector v = getChild(child);
if (v != null) {
leftChildrens.add(v);
}
}

for (String child : that.getChildFieldNames()) {
ValueVector v = that.getChild(child);
if (v != null) {
rightChildrens.add(v);
}
}

if (leftChildrens.size() != rightChildrens.size()) {
return false;
}

for (int i = 0; i < leftChildrens.size(); i++) {
if (!leftChildrens.get(i).equals(index, rightChildrens.get(i), toIndex)) {
return false;
}
}
return true;
}

@Override
public boolean isNull(int index) {
return false;
Expand DownExpand Up@@ -372,4 +422,5 @@ public void initializeChildrenFromFields(List<Field> children) {
public List<FieldVector> getChildrenFromFields() {
return getChildren();
}

}
Original file line numberDiff line numberDiff line change
Expand Up@@ -479,6 +479,15 @@ public Object getObject(int index) {
}
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
} else {
return super.hashCode(index);
}
}

@Override
public void get(int index, ComplexHolder holder) {
holder.isSet = isSet(index);
Expand DownExpand Up@@ -546,4 +555,5 @@ public void setValueCount(int valueCount) {
super.setValueCount(valueCount);
this.valueCount = valueCount;
}

}
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
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
51 changes: 39 additions & 12 deletions java/vector/src/main/codegen/templates/UnionVector.java
Original file line numberDiff line numberDiff line change
Expand Up@@ -17,6 +17,7 @@

import io.netty.buffer.ArrowBuf;
import org.apache.arrow.memory.ReferenceManager;
import org.apache.arrow.vector.ValueVector;
import org.apache.arrow.vector.types.pojo.FieldType;

<@pp.dropOutputFile />
Expand DownExpand Up@@ -491,32 +492,35 @@ public Iterator<ValueVector> iterator() {
return vectors.iterator();
}


public Object getObject(int index) {
private ValueVector getVector(int index) {
int type = typeBuffer.getByte(index * TYPE_WIDTH);
switch (MinorType.values()[type]) {
case NULL:
return null;
case NULL:
return null;
<#list vv.types as type>
<#list type.minor as minor>
<#assign name = minor.class?cap_first />
<#assign fields = minor.fields!type.fields />
<#assign uncappedName = name?uncap_first/>
<#if !minor.typeParams?? >
case ${name?upper_case}:
return get${name}Vector().getObject(index);
case ${name?upper_case}:
return get${name}Vector();
</#if>
</#list>
</#list>
case STRUCT:
return getStruct().getObject(index);
case LIST:
return getList().getObject(index);
default:
throw new UnsupportedOperationException("Cannot support type: " + MinorType.values()[type]);
case STRUCT:
return getStruct();
case LIST:
return getList();
default:
throw new UnsupportedOperationException("Cannot support type: " + MinorType.values()[type]);
}
}

public Object getObject(int index) {
return getVector(index).getObject(index);
}

public byte[] get(int index) {
return null;
}
Expand DownExpand Up@@ -622,4 +626,27 @@ public void setType(int index, MinorType type) {
private int getTypeBufferValueCapacity() {
return typeBuffer.capacity() / TYPE_WIDTH;
}

@Override
public int hashCode(int index) {
return getVector(index).hashCode(index);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}
UnionVector that = (UnionVector) to;
ValueVector leftVector = getVector(index);
ValueVector rightVector = that.getVector(toIndex);

if (leftVector.getClass() != rightVector.getClass()) {
return false;
}
return leftVector.equals(index, rightVector, toIndex);
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -25,6 +25,7 @@
import org.apache.arrow.memory.BufferAllocator;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.OversizedAllocationException;
import org.apache.arrow.vector.util.TransferPair;
Expand DownExpand Up@@ -837,4 +838,33 @@ public void copyFromSafe(int fromIndex, int thisIndex, BaseFixedWidthVector from
handleSafe(thisIndex);
copyFrom(fromIndex, thisIndex, from);
}

@Override
public int hashCode(int index) {
int start = typeWidth * index;
int end = typeWidth * (index + 1);
return ByteFunctionHelpers.hash(this.getDataBuffer(), start, end);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

BaseFixedWidthVector that = (BaseFixedWidthVector) to;

int leftStart = typeWidth * index;
int leftEnd = typeWidth * (index + 1);

int rightStart = typeWidth * toIndex;
int rightEnd = typeWidth * (toIndex + 1);

int ret = ByteFunctionHelpers.equal(this.getDataBuffer(), leftStart, leftEnd,
that.getDataBuffer(), rightStart, rightEnd);
return ret == 1;
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -27,6 +27,7 @@
import org.apache.arrow.memory.OutOfMemoryException;
import org.apache.arrow.vector.ipc.message.ArrowFieldNode;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.OversizedAllocationException;
import org.apache.arrow.vector.util.TransferPair;
Expand DownExpand Up@@ -1334,4 +1335,33 @@ public void copyFromSafe(int fromIndex, int thisIndex, BaseVariableWidthVector f
}
lastSet = thisIndex;
}

@Override
public int hashCode(int index) {
final int start = getStartOffset(index);
final int end = getStartOffset(index + 1);
return ByteFunctionHelpers.hash(this.getDataBuffer(), start, end);
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

BaseVariableWidthVector that = (BaseVariableWidthVector) to;

final int leftStart = getStartOffset(index);
final int leftEnd = getStartOffset(index + 1);

final int rightStart = that.getStartOffset(toIndex);
final int rightEnd = that.getStartOffset(toIndex + 1);

int ret = ByteFunctionHelpers.equal(this.getDataBuffer(), leftStart, leftEnd,
that.getDataBuffer(), rightStart, rightEnd);
return ret == 1;
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -237,4 +237,18 @@ public interface ValueVector extends Closeable, Iterable<ValueVector> {
* @return true if element is null
*/
boolean isNull(int index);

/**
* Returns hashCode of element in index.
*/
int hashCode(int index);

/**
* Check whether the element in index equals to the element in targetIndex from the target vector.
* @param index index to compare in this vector
* @param target target vector
* @param targetIndex index to compare in target vector
* @return true if equals, otherwise false.
*/
boolean equals(int index, ValueVector target, int targetIndex);
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -270,7 +270,6 @@ public void setSafe(int index, Text text) {
setSafe(index, text.getBytes(), 0, text.getLength());
}


/*----------------------------------------------------------------*
| |
| vector transfer |
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -244,4 +244,14 @@ public int getNullCount() {
public boolean isNull(int index) {
return false;
}

@Override
public int hashCode(int index) {
return 0;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
return false;
Comment thread
tianchen92 marked this conversation as resolved.
Outdated
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,6 +45,7 @@
import org.apache.arrow.vector.types.pojo.DictionaryEncoding;
import org.apache.arrow.vector.types.pojo.Field;
import org.apache.arrow.vector.types.pojo.FieldType;
import org.apache.arrow.vector.util.ByteFunctionHelpers;
import org.apache.arrow.vector.util.CallBack;
import org.apache.arrow.vector.util.JsonStringArrayList;
import org.apache.arrow.vector.util.OversizedAllocationException;
Expand DownExpand Up@@ -496,6 +497,37 @@ public TransferPair makeTransferPair(ValueVector target) {
return new TransferImpl((FixedSizeListVector) target);
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
}
int hash = 0;
for (int i = 0; i < listSize; i++) {
hash = ByteFunctionHelpers.comebineHash(hash, vector.hashCode(index * listSize + i));
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

FixedSizeListVector that = (FixedSizeListVector) to;

for (int i = 0; i < listSize; i++) {
if (!vector.equals(index * listSize + i, that, toIndex * listSize + i)) {
return false;
}
}
return true;
}

private class TransferImpl implements TransferPair {

FixedSizeListVector to;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -412,6 +412,49 @@ public ArrowBuf getOffsetBuffer() {
return offsetBuffer;
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
}
int hash = 0;
final int start = offsetBuffer.getInt(index * OFFSET_WIDTH);
final int end = offsetBuffer.getInt((index + 1) * OFFSET_WIDTH);
for (int i = start; i < end; i++) {
hash = 31 * vector.hashCode(i);
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}

ListVector that = (ListVector) to;
final int leftStart = offsetBuffer.getInt(index * OFFSET_WIDTH);
final int leftEnd = offsetBuffer.getInt((index + 1) * OFFSET_WIDTH);

final int rightStart = that.offsetBuffer.getInt(toIndex * OFFSET_WIDTH);
final int rightEnd = that.offsetBuffer.getInt((toIndex + 1) * OFFSET_WIDTH);

if ((leftEnd - leftStart) != (rightEnd - rightStart)) {
return false;
}

for (int i = 0; i < (leftEnd - leftStart); i++) {
if (!vector.equals(leftStart + i, that.vector, rightStart + i)) {
return false;
}
}

return true;
}

private class TransferImpl implements TransferPair {

ListVector to;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -286,6 +286,56 @@ public Object getObject(int index) {
return vv;
}

@Override
public int hashCode(int index) {
int hash = 0;
for (String child : getChildFieldNames()) {
ValueVector v = getChild(child);
if (v != null && index < v.getValueCount()) {
hash += 31 * hash + v.hashCode(index);
}
}
return hash;
}

@Override
public boolean equals(int index, ValueVector to, int toIndex) {
if (to == null) {
return false;
}
if (this.getClass() != to.getClass()) {
return false;
}
NonNullableStructVector that = (NonNullableStructVector) to;
List<ValueVector> leftChildrens = new ArrayList<>();
List<ValueVector> rightChildrens = new ArrayList<>();

for (String child : getChildFieldNames()) {
ValueVector v = getChild(child);
if (v != null) {
leftChildrens.add(v);
}
}

for (String child : that.getChildFieldNames()) {
ValueVector v = that.getChild(child);
if (v != null) {
rightChildrens.add(v);
}
}

if (leftChildrens.size() != rightChildrens.size()) {
return false;
}

for (int i = 0; i < leftChildrens.size(); i++) {
if (!leftChildrens.get(i).equals(index, rightChildrens.get(i), toIndex)) {
return false;
}
}
return true;
}

@Override
public boolean isNull(int index) {
return false;
Expand DownExpand Up@@ -372,4 +422,5 @@ public void initializeChildrenFromFields(List<Field> children) {
public List<FieldVector> getChildrenFromFields() {
return getChildren();
}

}
Original file line numberDiff line numberDiff line change
Expand Up@@ -479,6 +479,15 @@ public Object getObject(int index) {
}
}

@Override
public int hashCode(int index) {
if (isSet(index) == 0) {
return 0;
} else {
return super.hashCode(index);
}
}

@Override
public void get(int index, ComplexHolder holder) {
holder.isSet = isSet(index);
Expand DownExpand Up@@ -546,4 +555,5 @@ public void setValueCount(int valueCount) {
super.setValueCount(valueCount);
this.valueCount = valueCount;
}

}
Loading