You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by om...@apache.org on 2013/05/22 23:04:35 UTC

svn commit: r1485421 [6/6] - in /hive/branches/vectorization/ql/src: java/org/apache/hadoop/hive/ql/exec/vector/expressions/templates/ test/org/apache/hadoop/hive/ql/exec/vector/expressions/gen/ test/org/apache/hadoop/hive/ql/exec/vector/util/

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);
+  }
+
 }