2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
18 package org
.apache
.arrow
.vector
;
20 import java
.util
.Iterator
;
21 import java
.util
.List
;
23 import org
.apache
.arrow
.memory
.ArrowBuf
;
24 import org
.apache
.arrow
.memory
.BufferAllocator
;
25 import org
.apache
.arrow
.memory
.OutOfMemoryException
;
26 import org
.apache
.arrow
.util
.Preconditions
;
27 import org
.apache
.arrow
.vector
.compare
.VectorVisitor
;
28 import org
.apache
.arrow
.vector
.complex
.reader
.FieldReader
;
29 import org
.apache
.arrow
.vector
.ipc
.message
.ArrowFieldNode
;
30 import org
.apache
.arrow
.vector
.types
.Types
.MinorType
;
31 import org
.apache
.arrow
.vector
.types
.pojo
.Field
;
32 import org
.apache
.arrow
.vector
.util
.CallBack
;
33 import org
.apache
.arrow
.vector
.util
.TransferPair
;
36 * A vector that wraps an underlying vector, used to help implement extension types.
37 * @param <T> The wrapped vector type.
39 public abstract class ExtensionTypeVector
<T
extends ValueVector
& FieldVector
> extends BaseValueVector
implements
42 private final T underlyingVector
;
43 private final String name
;
46 * Instantiate an extension type vector.
47 * @param name name of the vector
48 * @param allocator allocator for memory management
49 * @param underlyingVector underlying filed vector
51 public ExtensionTypeVector(String name
, BufferAllocator allocator
, T underlyingVector
) {
53 Preconditions
.checkNotNull(underlyingVector
, "underlyingVector can not be null.");
55 this.underlyingVector
= underlyingVector
;
59 * Instantiate an extension type vector.
60 * @param field field materialized by this vector.
61 * @param allocator allocator for memory management
62 * @param underlyingVector underlying filed vector
64 public ExtensionTypeVector(Field field
, BufferAllocator allocator
, T underlyingVector
) {
65 this(field
.getName(), allocator
, underlyingVector
);
69 public String
getName() {
73 /** Get the underlying vector. */
74 public T
getUnderlyingVector() {
75 return underlyingVector
;
79 public void allocateNew() throws OutOfMemoryException
{
80 this.underlyingVector
.allocateNew();
84 public boolean allocateNewSafe() {
85 return this.underlyingVector
.allocateNewSafe();
89 public void reAlloc() {
90 this.underlyingVector
.reAlloc();
94 public void setInitialCapacity(int numRecords
) {
95 this.underlyingVector
.setInitialCapacity(numRecords
);
99 public int getValueCapacity() {
100 return this.underlyingVector
.getValueCapacity();
104 public void reset() {
105 this.underlyingVector
.reset();
109 public Field
getField() {
110 return this.underlyingVector
.getField();
114 public MinorType
getMinorType() {
115 return MinorType
.EXTENSIONTYPE
;
119 public TransferPair
getTransferPair(String ref
, BufferAllocator allocator
) {
120 return underlyingVector
.getTransferPair(ref
, allocator
);
124 public TransferPair
getTransferPair(String ref
, BufferAllocator allocator
, CallBack callBack
) {
125 return underlyingVector
.getTransferPair(ref
, allocator
, callBack
);
129 public TransferPair
makeTransferPair(ValueVector target
) {
130 return underlyingVector
.makeTransferPair(target
);
134 public FieldReader
getReader() {
135 return underlyingVector
.getReader();
139 public int getBufferSize() {
140 return underlyingVector
.getBufferSize();
144 public int getBufferSizeFor(int valueCount
) {
145 return underlyingVector
.getBufferSizeFor(valueCount
);
149 public ArrowBuf
[] getBuffers(boolean clear
) {
150 return underlyingVector
.getBuffers(clear
);
154 public ArrowBuf
getValidityBuffer() {
155 return underlyingVector
.getValidityBuffer();
159 public ArrowBuf
getDataBuffer() {
160 return underlyingVector
.getDataBuffer();
164 public ArrowBuf
getOffsetBuffer() {
165 return underlyingVector
.getOffsetBuffer();
169 public int getValueCount() {
170 return underlyingVector
.getValueCount();
174 public void setValueCount(int valueCount
) {
175 underlyingVector
.setValueCount(valueCount
);
179 * Get the extension object at the specified index.
181 * <p>Generally, this should access the underlying vector and construct the corresponding Java object from the raw
185 public abstract Object
getObject(int index
);
188 public int getNullCount() {
189 return underlyingVector
.getNullCount();
193 public boolean isNull(int index
) {
194 return underlyingVector
.isNull(index
);
198 public void initializeChildrenFromFields(List
<Field
> children
) {
199 underlyingVector
.initializeChildrenFromFields(children
);
203 public List
<FieldVector
> getChildrenFromFields() {
204 return underlyingVector
.getChildrenFromFields();
208 public void loadFieldBuffers(ArrowFieldNode fieldNode
, List
<ArrowBuf
> ownBuffers
) {
209 underlyingVector
.loadFieldBuffers(fieldNode
, ownBuffers
);
213 public List
<ArrowBuf
> getFieldBuffers() {
214 return underlyingVector
.getFieldBuffers();
218 * Get the inner vectors.
220 * @deprecated This API will be removed as the current implementations no longer support inner vectors.
222 * @return the inner vectors for this field as defined by the TypeLayout
226 public List
<BufferBacked
> getFieldInnerVectors() {
227 return underlyingVector
.getFieldInnerVectors();
231 public long getValidityBufferAddress() {
232 return underlyingVector
.getValidityBufferAddress();
236 public long getDataBufferAddress() {
237 return underlyingVector
.getDataBufferAddress();
241 public long getOffsetBufferAddress() {
242 return underlyingVector
.getOffsetBufferAddress();
246 public void clear() {
247 underlyingVector
.clear();
251 public void close() {
252 underlyingVector
.close();
256 public TransferPair
getTransferPair(BufferAllocator allocator
) {
257 return underlyingVector
.getTransferPair(allocator
);
261 public Iterator
<ValueVector
> iterator() {
262 return underlyingVector
.iterator();
266 public BufferAllocator
getAllocator() {
267 return underlyingVector
.getAllocator();
271 public <OUT
, IN
> OUT
accept(VectorVisitor
<OUT
, IN
> visitor
, IN value
) {
272 return visitor
.visit(this, value
);