Modified: hive/branches/vectorization/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/util/VectorizedRowGroupGenUtil.java URL: http://svn.apache.org/viewvc/hive/branches/vectorization/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/util/VectorizedRowGroupGenUtil.java?rev=1485421&r1=1485420&r2=1485421&view=diff ============================================================================== --- hive/branches/vectorization/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/util/VectorizedRowGroupGenUtil.java (original) +++ hive/branches/vectorization/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/util/VectorizedRowGroupGenUtil.java Wed May 22 21:04:35 2013 @@ -18,11 +18,18 @@ package org.apache.hadoop.hive.ql.exec.vector.util; +import java.util.Random; + +import org.apache.hadoop.hive.ql.exec.vector.DoubleColumnVector; import org.apache.hadoop.hive.ql.exec.vector.LongColumnVector; import org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch; + public class VectorizedRowGroupGenUtil { + private static final long LONG_VECTOR_NULL_VALUE = 1; + private static final double DOUBLE_VECTOR_NULL_VALUE = Double.NaN; + public static VectorizedRowBatch getVectorizedRowBatch(int size, int numCol, int seed) { VectorizedRowBatch vrg = new VectorizedRowBatch(numCol, size); for (int j = 0; j < numCol; j++) { @@ -35,4 +42,71 @@ public class VectorizedRowGroupGenUtil { vrg.size = size; return vrg; } + + public static LongColumnVector generateLongColumnVector( + boolean nulls, boolean repeating, int size, Random rand) { + LongColumnVector lcv = new LongColumnVector(size); + + lcv.noNulls = !nulls; + lcv.isRepeating = repeating; + + long repeatingValue; + do{ + repeatingValue= rand.nextLong(); + }while(repeatingValue == 0); + + int nullFrequency = generateNullFrequency(rand); + + for(int i = 0; i < size; i++) { + if(nulls && (repeating || i % nullFrequency == 0)) { + lcv.isNull[i] = true; + lcv.vector[i] = LONG_VECTOR_NULL_VALUE; + + }else { + lcv.isNull[i] = false; + lcv.vector[i] = repeating ? repeatingValue : rand.nextLong(); + if(lcv.vector[i] == 0) { + i--; + } + } + } + return lcv; + } + + public static DoubleColumnVector generateDoubleColumnVector( + boolean nulls, boolean repeating, int size, Random rand) + { + DoubleColumnVector dcv = new DoubleColumnVector(size); + + dcv.noNulls = !nulls; + dcv.isRepeating = repeating; + + double repeatingValue; + do{ + repeatingValue= rand.nextDouble(); + }while(repeatingValue == 0); + + int nullFrequency = generateNullFrequency(rand); + + for(int i = 0; i < size; i++) { + if(nulls && (repeating || i % nullFrequency == 0)) { + dcv.isNull[i] = true; + dcv.vector[i] = DOUBLE_VECTOR_NULL_VALUE; + + }else { + dcv.isNull[i] = false; + dcv.vector[i] = repeating ? repeatingValue : rand.nextDouble(); + + if(dcv.vector[i] == 0) { + i--; + } + } + } + return dcv; + } + + private static int generateNullFrequency(Random rand) { + return 60 + rand.nextInt(20); + } + }
