blob: 3da91554116a96d5c22d843dc9bd2e695911fcd3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.arrow.vector;
import java.math.BigDecimal;
import java.nio.charset.Charset;
/**
* Helper class to generate test data for Nullable fixed and variable
* width scalar vectors. Previous implementations of java vector classes
* provided generateTestData(now deprecated) API to populate the vector
* with sample data. This class should be used for that purpose.
*/
public class GenerateSampleData {
private GenerateSampleData() {}
/** Populates <code>vector</code> with <code>valueCount</code> random values. */
public static void generateTestData(final ValueVector vector, final int valueCount) {
if (vector instanceof IntVector) {
writeIntData((IntVector) vector, valueCount);
} else if (vector instanceof DecimalVector) {
writeDecimalData((DecimalVector) vector, valueCount);
} else if (vector instanceof BitVector) {
writeBooleanData((BitVector) vector, valueCount);
} else if (vector instanceof VarCharVector) {
writeVarCharData((VarCharVector) vector, valueCount);
} else if (vector instanceof VarBinaryVector) {
writeVarBinaryData((VarBinaryVector) vector, valueCount);
} else if (vector instanceof BigIntVector) {
writeBigIntData((BigIntVector) vector, valueCount);
} else if (vector instanceof Float4Vector) {
writeFloatData((Float4Vector) vector, valueCount);
} else if (vector instanceof Float8Vector) {
writeDoubleData((Float8Vector) vector, valueCount);
} else if (vector instanceof DateDayVector) {
writeDateDayData((DateDayVector) vector, valueCount);
} else if (vector instanceof DateMilliVector) {
writeDateMilliData((DateMilliVector) vector, valueCount);
} else if (vector instanceof IntervalDayVector) {
writeIntervalDayData((IntervalDayVector) vector, valueCount);
} else if (vector instanceof IntervalYearVector) {
writeIntervalYearData((IntervalYearVector) vector, valueCount);
} else if (vector instanceof SmallIntVector) {
writeSmallIntData((SmallIntVector) vector, valueCount);
} else if (vector instanceof TinyIntVector) {
writeTinyIntData((TinyIntVector) vector, valueCount);
} else if (vector instanceof TimeMicroVector) {
writeTimeMicroData((TimeMicroVector) vector, valueCount);
} else if (vector instanceof TimeMilliVector) {
writeTimeMilliData((TimeMilliVector) vector, valueCount);
} else if (vector instanceof TimeNanoVector) {
writeTimeNanoData((TimeNanoVector) vector, valueCount);
} else if (vector instanceof TimeSecVector) {
writeTimeSecData((TimeSecVector) vector, valueCount);
} else if (vector instanceof TimeStampSecVector) {
writeTimeStampData((TimeStampSecVector) vector, valueCount);
} else if (vector instanceof TimeStampMicroVector) {
writeTimeStampData((TimeStampMicroVector) vector, valueCount);
} else if (vector instanceof TimeStampMilliVector) {
writeTimeStampData((TimeStampMilliVector) vector, valueCount);
} else if (vector instanceof TimeStampNanoVector) {
writeTimeStampData((TimeStampNanoVector) vector, valueCount);
} else if (vector instanceof TimeStampSecTZVector) {
writeTimeStampData((TimeStampSecTZVector) vector, valueCount);
} else if (vector instanceof TimeStampMicroTZVector) {
writeTimeStampData((TimeStampMicroTZVector) vector, valueCount);
} else if (vector instanceof TimeStampMilliTZVector) {
writeTimeStampData((TimeStampMilliTZVector) vector, valueCount);
} else if (vector instanceof TimeStampNanoTZVector) {
writeTimeStampData((TimeStampNanoTZVector) vector, valueCount);
}
}
private static void writeTimeStampData(TimeStampVector vector, int valueCount) {
final long even = 100000;
final long odd = 200000;
for (int i = 0; i < valueCount; i++) {
if (i % 2 == 0) {
vector.setSafe(i, even);
} else {
vector.setSafe(i, odd);
}
}
vector.setValueCount(valueCount);
}
private static void writeDecimalData(DecimalVector vector, int valueCount) {
final BigDecimal even = new BigDecimal(0.0543278923);
final BigDecimal odd = new BigDecimal(2.0543278923);
for (int i = 0; i < valueCount; i++) {
if (i % 2 == 0) {
vector.setSafe(i, even);
} else {
vector.setSafe(i, odd);
}
}
vector.setValueCount(valueCount);
}
private static void writeIntData(IntVector vector, int valueCount) {
final int even = 1000;
final int odd = 2000;
for (int i = 0; i < valueCount; i++) {
if (i % 2 == 0) {
vector.setSafe(i, even);
} else {
vector.setSafe(i, odd);
}
}
vector.setValueCount(valueCount);
}
private static void writeBooleanData(BitVector vector, int valueCount) {
final int even = 0;
final int odd = 1;
for (int i = 0; i < valueCount; i++) {
if (i % 2 == 0) {
vector.setSafe(i, even);
} else {
vector.setSafe(i, odd);
}
}
vector.setValueCount(valueCount);
}
private static void writeIntervalYearData(IntervalYearVector vector, int valueCount) {
final int even = 1;
final int odd = 2;
for (int i = 0; i < valueCount; i++) {
if (i % 2 == 0) {
vector.setSafe(i, even);
} else {
vector.setSafe(i, odd);
}
}
vector.setValueCount(valueCount);
}
private static void writeIntervalDayData(IntervalDayVector vector, int valueCount) {
for (int i = 0; i < valueCount; i++) {
if (i % 2 == 0) {
vector.setSafe(i, 1, 50);
} else {
vector.setSafe(i, 2, 100);
}
}
vector.setValueCount(valueCount);
}
private static void writeTimeSecData(TimeSecVector vector, int valueCount) {
final int even = 500;
final int odd = 900;
for (int i = 0; i < valueCount; i++) {
if (i % 2 == 0) {
vector.setSafe(i, even);
} else {
vector.setSafe(i, odd);
}
}
vector.setValueCount(valueCount);
}
private static void writeTimeMilliData(TimeMilliVector vector, int valueCount) {
final int even = 1000;
final int odd = 2000;
for (int i = 0; i < valueCount; i++) {
if (i % 2 == 0) {
vector.setSafe(i, even);
} else {
vector.setSafe(i, odd);
}
}
vector.setValueCount(valueCount);
}
private static void writeTimeMicroData(TimeMicroVector vector, int valueCount) {
final long even = 1000000000;
final long odd = 2000000000;
for (int i = 0; i < valueCount; i++) {
if (i % 2 == 0) {
vector.setSafe(i, even);
} else {
vector.setSafe(i, odd);
}
}
vector.setValueCount(valueCount);
}
private static void writeTimeNanoData(TimeNanoVector vector, int valueCount) {
final long even = 1000000000;
final long odd = 2000000000;
for (int i = 0; i < valueCount; i++) {
if (i % 2 == 0) {
vector.setSafe(i, even);
} else {
vector.setSafe(i, odd);
}
}
vector.setValueCount(valueCount);
}
private static void writeDateDayData(DateDayVector vector, int valueCount) {
final int even = 1000;
final int odd = 2000;
for (int i = 0; i < valueCount; i++) {
if (i % 2 == 0) {
vector.setSafe(i, even);
} else {
vector.setSafe(i, odd);
}
}
vector.setValueCount(valueCount);
}
private static void writeDateMilliData(DateMilliVector vector, int valueCount) {
final long even = 1000000000;
final long odd = 2000000000;
for (int i = 0; i < valueCount; i++) {
if (i % 2 == 0) {
vector.setSafe(i, even);
} else {
vector.setSafe(i, odd);
}
}
vector.setValueCount(valueCount);
}
private static void writeSmallIntData(SmallIntVector vector, int valueCount) {
final short even = 10;
final short odd = 20;
for (int i = 0; i < valueCount; i++) {
if (i % 2 == 0) {
vector.setSafe(i, even);
} else {
vector.setSafe(i, odd);
}
}
vector.setValueCount(valueCount);
}
private static void writeTinyIntData(TinyIntVector vector, int valueCount) {
final byte even = 1;
final byte odd = 2;
for (int i = 0; i < valueCount; i++) {
if (i % 2 == 0) {
vector.setSafe(i, even);
} else {
vector.setSafe(i, odd);
}
}
vector.setValueCount(valueCount);
}
private static void writeBigIntData(BigIntVector vector, int valueCount) {
final long even = 1000000000;
final long odd = 2000000000;
for (int i = 0; i < valueCount; i++) {
if (i % 2 == 0) {
vector.setSafe(i, even);
} else {
vector.setSafe(i, odd);
}
}
vector.setValueCount(valueCount);
}
private static void writeFloatData(Float4Vector vector, int valueCount) {
final float even = 20.3f;
final float odd = 40.2f;
for (int i = 0; i < valueCount; i++) {
if (i % 2 == 0) {
vector.setSafe(i, even);
} else {
vector.setSafe(i, odd);
}
}
vector.setValueCount(valueCount);
}
private static void writeDoubleData(Float8Vector vector, int valueCount) {
final double even = 20.2373;
final double odd = 40.2378;
for (int i = 0; i < valueCount; i++) {
if (i % 2 == 0) {
vector.setSafe(i, even);
} else {
vector.setSafe(i, odd);
}
}
vector.setValueCount(valueCount);
}
private static void writeVarBinaryData(VarBinaryVector vector, int valueCount) {
Charset utf8Charset = Charset.forName("UTF-8");
final byte[] even = "AAAAA1".getBytes(utf8Charset);
final byte[] odd = "BBBBBBBBB2".getBytes(utf8Charset);
for (int i = 0; i < valueCount; i++) {
if (i % 2 == 0) {
vector.setSafe(i, even);
} else {
vector.setSafe(i, odd);
}
}
vector.setValueCount(valueCount);
}
private static void writeVarCharData(VarCharVector vector, int valueCount) {
Charset utf8Charset = Charset.forName("UTF-8");
final byte[] even = "AAAAA1".getBytes(utf8Charset);
final byte[] odd = "BBBBBBBBB2".getBytes(utf8Charset);
for (int i = 0; i < valueCount; i++) {
if (i % 2 == 0) {
vector.setSafe(i, even);
} else {
vector.setSafe(i, odd);
}
}
vector.setValueCount(valueCount);
}
}