Skip to content
Merged
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
8 changes: 5 additions & 3 deletions dev/tasks/java-jars/github.yml
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ jobs:
# Homebrew's python@XXX is updated without "--overwrite", it
# tries to replace /usr/local/bin/2to3 and so on and causes
# a conflict error.
brew update
# brew update
for python_package in $(brew list | grep python@); do
brew install --overwrite ${python_package}
done
Expand Down Expand Up @@ -154,8 +154,10 @@ jobs:
mkdir -p homebrew-custom/Formula
curl -o homebrew-custom/Formula/cmake.rb https://raw.githubusercontent.com/Homebrew/homebrew-core/f68532bfe5cb87474093df8a839c3818c6aa44dd/Formula/c/cmake.rb
curl -o homebrew-custom/Formula/boost.rb https://raw.githubusercontent.com/Homebrew/homebrew-core/23f9c56c5075dd56b4471e2c93f89f6400b49ddd/Formula/b/boost.rb
brew install -v ./homebrew-custom/Formula/cmake.rb
brew install -v ./homebrew-custom/Formula/boost.rb
brew tap-new local/homebrew-custom
cp ./homebrew-custom/Formula/*.rb "$(brew --repo local/homebrew-custom)/Formula/"
brew install -v local/homebrew-custom/cmake
brew install -v local/homebrew-custom/boost
brew pin cmake
brew pin boost
#
Expand Down
1 change: 1 addition & 0 deletions java/vector/src/main/codegen/includes/vv_imports.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import org.apache.arrow.vector.complex.*;
import org.apache.arrow.vector.complex.reader.*;
import org.apache.arrow.vector.complex.impl.*;
import org.apache.arrow.vector.complex.writer.*;
import org.apache.arrow.vector.complex.writer.BaseWriter.ExtensionWriter;
import org.apache.arrow.vector.complex.writer.BaseWriter.StructWriter;
import org.apache.arrow.vector.complex.writer.BaseWriter.ListWriter;
import org.apache.arrow.vector.complex.writer.BaseWriter.MapWriter;
Expand Down
21 changes: 21 additions & 0 deletions java/vector/src/main/codegen/templates/AbstractFieldReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,27 @@ public void copyAsField(String name, ${name}Writer writer) {
}

</#list></#list>

public void copyAsValue(StructWriter writer, ExtensionTypeWriterFactory writerFactory) {
fail("CopyAsValue StructWriter");
}

public void read(ExtensionHolder holder) {
fail("Extension");
}

public void read(int arrayIndex, ExtensionHolder holder) {
fail("RepeatedExtension");
}

public void copyAsValue(AbstractExtensionTypeWriter writer) {
fail("CopyAsValueExtension");
}

public void copyAsField(String name, AbstractExtensionTypeWriter writer) {
fail("CopyAsFieldExtension");
}

public FieldReader reader(String name) {
fail("reader(String name)");
return null;
Expand Down
24 changes: 13 additions & 11 deletions java/vector/src/main/codegen/templates/BaseReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

<#include "/@includes/license.ftl" />

package org.apache.arrow.vector.complex.reader;
package org.apache.arrow.vector.complex.reader;

<#include "/@includes/vv_imports.ftl" />

Expand All @@ -44,21 +44,23 @@ public interface BaseReader extends Positionable{
public interface StructReader extends BaseReader, Iterable<String>{
FieldReader reader(String name);
}

public interface RepeatedStructReader extends StructReader{
boolean next();
int size();
void copyAsValue(StructWriter writer);
void copyAsValue(StructWriter writer, ExtensionTypeWriterFactory writerFactory);
}

public interface ListReader extends BaseReader{
FieldReader reader();
FieldReader reader();
}

public interface RepeatedListReader extends ListReader{
boolean next();
int size();
void copyAsValue(ListWriter writer);
void copyAsValue(ListWriter writer, ExtensionTypeWriterFactory writerFactory);
}

public interface MapReader extends BaseReader{
Expand All @@ -69,17 +71,17 @@ public interface RepeatedMapReader extends MapReader{
boolean next();
int size();
void copyAsValue(MapWriter writer);
void copyAsValue(MapWriter writer, ExtensionTypeWriterFactory writerFactory);
}
public interface ScalarReader extends
<#list vv.types as type><#list type.minor as minor><#assign name = minor.class?cap_first /> ${name}Reader, </#list></#list>
BaseReader {}

public interface ScalarReader extends
<#list vv.types as type><#list type.minor as minor><#assign name = minor.class?cap_first /> ${name}Reader, </#list></#list>
ExtensionReader, BaseReader {}

interface ComplexReader{
StructReader rootAsStruct();
ListReader rootAsList();
boolean rootIsStruct();
boolean ok();
}
}

39 changes: 33 additions & 6 deletions java/vector/src/main/codegen/templates/ComplexCopier.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,14 @@ public class ComplexCopier {
* @param output field to write to
*/
public static void copy(FieldReader input, FieldWriter output) {
writeValue(input, output);
writeValue(input, output, null);
}

private static void writeValue(FieldReader reader, FieldWriter writer) {
public static void copy(FieldReader input, FieldWriter output, ExtensionTypeWriterFactory extensionTypeWriterFactory) {
writeValue(input, output, extensionTypeWriterFactory);
}

private static void writeValue(FieldReader reader, FieldWriter writer, ExtensionTypeWriterFactory extensionTypeWriterFactory) {
final MinorType mt = reader.getMinorType();

switch (mt) {
Expand All @@ -61,7 +65,7 @@ private static void writeValue(FieldReader reader, FieldWriter writer) {
FieldReader childReader = reader.reader();
FieldWriter childWriter = getListWriterForReader(childReader, writer);
if (childReader.isSet()) {
writeValue(childReader, childWriter);
writeValue(childReader, childWriter, extensionTypeWriterFactory);
} else {
childWriter.writeNull();
}
Expand All @@ -79,8 +83,8 @@ private static void writeValue(FieldReader reader, FieldWriter writer) {
FieldReader structReader = reader.reader();
if (structReader.isSet()) {
writer.startEntry();
writeValue(mapReader.key(), getMapWriterForReader(mapReader.key(), writer.key()));
writeValue(mapReader.value(), getMapWriterForReader(mapReader.value(), writer.value()));
writeValue(mapReader.key(), getMapWriterForReader(mapReader.key(), writer.key()), extensionTypeWriterFactory);
writeValue(mapReader.value(), getMapWriterForReader(mapReader.value(), writer.value()), extensionTypeWriterFactory);
writer.endEntry();
} else {
writer.writeNull();
Expand All @@ -99,7 +103,7 @@ private static void writeValue(FieldReader reader, FieldWriter writer) {
if (childReader.getMinorType() != Types.MinorType.NULL) {
FieldWriter childWriter = getStructWriterForReader(childReader, writer, name);
if (childReader.isSet()) {
writeValue(childReader, childWriter);
writeValue(childReader, childWriter, extensionTypeWriterFactory);
} else {
childWriter.writeNull();
}
Expand All @@ -110,6 +114,20 @@ private static void writeValue(FieldReader reader, FieldWriter writer) {
writer.writeNull();
}
break;
case EXTENSIONTYPE:
if (extensionTypeWriterFactory == null) {
throw new IllegalArgumentException("Must provide ExtensionTypeWriterFactory");
}
if (reader.isSet()) {
Object value = reader.readObject();
if (value != null) {
writer.addExtensionTypeWriterFactory(extensionTypeWriterFactory);
writer.writeExtension(value);
}
} else {
writer.writeNull();
}
break;
<#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/>
Expand Down Expand Up @@ -162,6 +180,9 @@ private static FieldWriter getStructWriterForReader(FieldReader reader, StructWr
return (FieldWriter) writer.map(name);
case LISTVIEW:
return (FieldWriter) writer.listView(name);
case EXTENSIONTYPE:
ExtensionWriter extensionWriter = writer.extension(name, reader.getField().getType());
return (FieldWriter) extensionWriter;
default:
throw new UnsupportedOperationException(reader.getMinorType().toString());
}
Expand All @@ -186,6 +207,9 @@ private static FieldWriter getListWriterForReader(FieldReader reader, ListWriter
return (FieldWriter) writer.list();
case LISTVIEW:
return (FieldWriter) writer.listView();
case EXTENSIONTYPE:
ExtensionWriter extensionWriter = writer.extension(reader.getField().getType());
return (FieldWriter) extensionWriter;
default:
throw new UnsupportedOperationException(reader.getMinorType().toString());
}
Expand All @@ -211,6 +235,9 @@ private static FieldWriter getMapWriterForReader(FieldReader reader, MapWriter w
return (FieldWriter) writer.listView();
case MAP:
return (FieldWriter) writer.map(false);
case EXTENSIONTYPE:
ExtensionWriter extensionWriter = writer.extension(reader.getField().getType());
return (FieldWriter) extensionWriter;
default:
throw new UnsupportedOperationException(reader.getMinorType().toString());
}
Expand Down
42 changes: 22 additions & 20 deletions java/vector/src/main/codegen/templates/NullReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,12 @@
*/
@SuppressWarnings("unused")
public class NullReader extends AbstractBaseReader implements FieldReader{

public static final NullReader INSTANCE = new NullReader();
public static final NullReader EMPTY_LIST_INSTANCE = new NullReader(MinorType.NULL);
public static final NullReader EMPTY_STRUCT_INSTANCE = new NullReader(MinorType.STRUCT);
private MinorType type;

private NullReader(){
super();
type = MinorType.NULL;
Expand Down Expand Up @@ -77,71 +77,73 @@ public void read(Nullable${name}Holder holder){
public void read(int arrayIndex, ${name}Holder holder){
throw new ArrayIndexOutOfBoundsException();
}

public void copyAsValue(${minor.class}Writer writer){}
public void copyAsField(String name, ${minor.class}Writer writer){}

public void read(int arrayIndex, Nullable${name}Holder holder){
throw new ArrayIndexOutOfBoundsException();
}
</#list></#list>


public void copyAsValue(StructWriter writer, ExtensionTypeWriterFactory writerFactory){}
public void read(ExtensionHolder holder) {
holder.isSet = 0;
}

public int size(){
return 0;
}

public boolean isSet(){
return false;
}

public boolean next(){
return false;
}

public RepeatedStructReader struct(){
return this;
}

public RepeatedListReader list(){
return this;
}

public StructReader struct(String name){
return this;
}

public ListReader list(String name){
return this;
}

public FieldReader reader(String name){
return this;
}

public FieldReader reader(){
return this;
}

private void fail(String name){
throw new IllegalArgumentException(String.format("You tried to read a %s type when you are using a ValueReader of type %s.", name, this.getClass().getSimpleName()));
}

<#list ["Object", "BigDecimal", "Short", "Integer", "Long", "Boolean",
"LocalDateTime", "Duration", "Period", "Double", "Float",
"Character", "Text", "String", "Byte", "byte[]", "PeriodDuration"] as friendlyType>
<#assign safeType=friendlyType />
<#if safeType=="byte[]"><#assign safeType="ByteArray" /></#if>

public ${friendlyType} read${safeType}(int arrayIndex){
return null;
}

public ${friendlyType} read${safeType}(){
return null;
}
</#list>

}



}
4 changes: 4 additions & 0 deletions java/vector/src/main/codegen/templates/PromotableWriter.java
Original file line number Diff line number Diff line change
Expand Up @@ -550,6 +550,10 @@ public void addExtensionTypeWriterFactory(ExtensionTypeWriterFactory factory) {
getWriter(MinorType.EXTENSIONTYPE).addExtensionTypeWriterFactory(factory);
}

public void addExtensionTypeWriterFactory(ExtensionTypeWriterFactory factory, ArrowType arrowType) {
getWriter(MinorType.EXTENSIONTYPE, arrowType).addExtensionTypeWriterFactory(factory);
}

@Override
public void allocate() {
getWriter().allocate();
Expand Down
10 changes: 5 additions & 5 deletions java/vector/src/main/codegen/templates/UnionListWriter.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ public class Union${listName}Writer extends AbstractFieldWriter {
private boolean inStruct = false;
private boolean listStarted = false;
private String structName;
private ArrowType extensionType;
<#if listName == "LargeList" || listName == "LargeListView">
private static final long OFFSET_WIDTH = 8;
<#else>
Expand Down Expand Up @@ -203,9 +204,9 @@ public MapWriter map(String name, boolean keysSorted) {

@Override
public ExtensionWriter extension(ArrowType arrowType) {
this.extensionType = arrowType;
return this;
}

@Override
public ExtensionWriter extension(String name, ArrowType arrowType) {
ExtensionWriter extensionWriter = writer.extension(name, arrowType);
Expand Down Expand Up @@ -339,15 +340,14 @@ public void writeExtension(Object value) {
writer.writeExtension(value);
writer.setPosition(writer.idx() + 1);
}

@Override
public void addExtensionTypeWriterFactory(ExtensionTypeWriterFactory var1) {
writer.addExtensionTypeWriterFactory(var1);
writer.addExtensionTypeWriterFactory(var1, extensionType);
}

public void write(ExtensionHolder var1) {
writer.write(var1);
writer.setPosition(writer.idx() + 1);
}

<#list vv.types as type>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import org.apache.arrow.memory.BufferAllocator;
import org.apache.arrow.memory.ReferenceManager;
import org.apache.arrow.util.Preconditions;
import org.apache.arrow.vector.complex.impl.ExtensionTypeWriterFactory;
import org.apache.arrow.vector.complex.reader.FieldReader;
import org.apache.arrow.vector.util.DataSizeRoundingUtil;
import org.apache.arrow.vector.util.TransferPair;
Expand Down Expand Up @@ -248,4 +249,16 @@ public void copyFrom(int fromIndex, int thisIndex, ValueVector from) {
public void copyFromSafe(int fromIndex, int thisIndex, ValueVector from) {
throw new UnsupportedOperationException();
}

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

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