use of org.apache.hadoop.hive.ql.exec.vector.DecimalColumnVector in project hive by apache.
the class TestVectorArithmeticExpressions method testDecimalColDivideDecimalColumn.
@Test
public void testDecimalColDivideDecimalColumn() throws HiveException {
VectorizedRowBatch b = getVectorizedRowBatch3DecimalCols();
DecimalColumnVector in1 = (DecimalColumnVector) b.cols[1];
for (int i = 0; i < 3; i++) {
in1.vector[i].set(HiveDecimal.create("0.50"));
}
VectorExpression expr = new DecimalColDivideDecimalColumn(0, 1, 2);
expr.evaluate(b);
DecimalColumnVector r = (DecimalColumnVector) b.cols[2];
// all divides are by 0.50 so the result column is 2 times col 0.
assertTrue(r.vector[0].getHiveDecimal().equals(HiveDecimal.create("2.4")));
assertTrue(r.vector[1].getHiveDecimal().equals(HiveDecimal.create("-6.6")));
assertTrue(r.vector[2].getHiveDecimal().equals(HiveDecimal.create("0")));
// test null on left
b.cols[0].noNulls = false;
b.cols[0].isNull[0] = true;
expr.evaluate(b);
assertFalse(r.noNulls);
assertTrue(r.isNull[0]);
// test null on right
b = getVectorizedRowBatch3DecimalCols();
b.cols[1].noNulls = false;
b.cols[1].isNull[0] = true;
r = (DecimalColumnVector) b.cols[2];
expr.evaluate(b);
assertFalse(r.noNulls);
assertTrue(r.isNull[0]);
// test null on both sides
b = getVectorizedRowBatch3DecimalCols();
b.cols[0].noNulls = false;
b.cols[0].isNull[0] = true;
b.cols[1].noNulls = false;
b.cols[1].isNull[0] = true;
expr.evaluate(b);
assertFalse(r.noNulls);
assertTrue(r.isNull[0]);
assertFalse(r.isNull[1]);
assertFalse(r.isNull[2]);
// test repeating on left
b = getVectorizedRowBatch3DecimalCols();
b.cols[0].isRepeating = true;
expr.evaluate(b);
r = (DecimalColumnVector) b.cols[2];
assertTrue(r.vector[2].getHiveDecimal().equals(HiveDecimal.create("1.2")));
// test repeating on right
b = getVectorizedRowBatch3DecimalCols();
b.cols[1].isRepeating = true;
expr.evaluate(b);
r = (DecimalColumnVector) b.cols[2];
assertTrue(r.vector[2].getHiveDecimal().equals(HiveDecimal.create("0")));
// test both repeating
b = getVectorizedRowBatch3DecimalCols();
b.cols[0].isRepeating = true;
b.cols[1].isRepeating = true;
expr.evaluate(b);
r = (DecimalColumnVector) b.cols[2];
assertTrue(r.isRepeating);
assertTrue(r.vector[0].getHiveDecimal().equals(HiveDecimal.create("1.2")));
// test zero-divide to show it results in NULL
b = getVectorizedRowBatch3DecimalCols();
((DecimalColumnVector) b.cols[1]).vector[0].set(HiveDecimal.create("0"));
expr.evaluate(b);
r = (DecimalColumnVector) b.cols[2];
assertFalse(r.noNulls);
assertTrue(r.isNull[0]);
}
use of org.apache.hadoop.hive.ql.exec.vector.DecimalColumnVector in project hive by apache.
the class TestVectorArithmeticExpressions method testDecimalColSubtractDecimalColumn.
// Spot check decimal column-column subtract
@Test
public void testDecimalColSubtractDecimalColumn() throws HiveException {
VectorizedRowBatch b = getVectorizedRowBatch3DecimalCols();
VectorExpression expr = new DecimalColSubtractDecimalColumn(0, 1, 2);
DecimalColumnVector r = (DecimalColumnVector) b.cols[2];
// test without nulls
expr.evaluate(b);
assertTrue(r.vector[0].getHiveDecimal().equals(HiveDecimal.create("0.20")));
assertTrue(r.vector[1].getHiveDecimal().equals(HiveDecimal.create("-4.30")));
assertTrue(r.vector[2].getHiveDecimal().equals(HiveDecimal.create("-1.00")));
// test that underflow produces NULL
b = getVectorizedRowBatch3DecimalCols();
DecimalColumnVector c0 = (DecimalColumnVector) b.cols[0];
// set to min possible value
c0.vector[0].set(HiveDecimal.create("-9999999999999999.99"));
r = (DecimalColumnVector) b.cols[2];
// will cause underflow for result at position 0, must yield NULL
expr.evaluate(b);
assertTrue(!r.noNulls && r.isNull[0]);
}
use of org.apache.hadoop.hive.ql.exec.vector.DecimalColumnVector in project hive by apache.
the class TestVectorArithmeticExpressions method testDecimalScalarModuloDecimalColumn.
// Spot check decimal scalar-column modulo
@Test
public void testDecimalScalarModuloDecimalColumn() throws HiveException {
VectorizedRowBatch b = getVectorizedRowBatch3DecimalCols();
HiveDecimal d = HiveDecimal.create("2.00");
VectorExpression expr = new DecimalScalarModuloDecimalColumn(d, 0, 2);
// test without nulls
expr.evaluate(b);
DecimalColumnVector r = (DecimalColumnVector) b.cols[2];
assertTrue(r.vector[0].getHiveDecimal().equals(HiveDecimal.create("0.80")));
assertTrue(r.vector[1].getHiveDecimal().equals(HiveDecimal.create("2.00")));
// entry 2 will be null due to zero-divide
assertFalse(r.noNulls);
assertTrue(r.isNull[2]);
// try again with some different data values
DecimalColumnVector in = (DecimalColumnVector) b.cols[0];
expr = new DecimalScalarModuloDecimalColumn(d, 0, 2);
in.vector[0].set(HiveDecimal.create("0.50"));
in.vector[1].set(HiveDecimal.create("0.80"));
in.vector[2].set(HiveDecimal.create("0.70"));
expr.evaluate(b);
assertTrue(r.vector[0].getHiveDecimal().equals(HiveDecimal.create("0.00")));
assertTrue(r.vector[1].getHiveDecimal().equals(HiveDecimal.create("0.40")));
assertTrue(r.vector[2].getHiveDecimal().equals(HiveDecimal.create("0.60")));
}
use of org.apache.hadoop.hive.ql.exec.vector.DecimalColumnVector in project hive by apache.
the class TestVectorArithmeticExpressions method testDecimalColMultiplyDecimalColumn.
// Spot check decimal column-column multiply
@Test
public void testDecimalColMultiplyDecimalColumn() throws HiveException {
VectorizedRowBatch b = getVectorizedRowBatch3DecimalCols();
VectorExpression expr = new DecimalColMultiplyDecimalColumn(0, 1, 2);
DecimalColumnVector r = (DecimalColumnVector) b.cols[2];
// test without nulls
expr.evaluate(b);
assertTrue(r.vector[0].getHiveDecimal().equals(HiveDecimal.create("1.20")));
assertTrue(r.vector[1].getHiveDecimal().equals(HiveDecimal.create("-3.30")));
assertTrue(r.vector[2].getHiveDecimal().equals(HiveDecimal.create("0.00")));
// test that underflow produces NULL
b = getVectorizedRowBatch3DecimalCols();
DecimalColumnVector c0 = (DecimalColumnVector) b.cols[0];
// set to max possible value
c0.vector[0].set(HiveDecimal.create("9999999999999999.99"));
DecimalColumnVector c1 = (DecimalColumnVector) b.cols[1];
c1.vector[0].set(HiveDecimal.create("2.00"));
r = (DecimalColumnVector) b.cols[2];
// will cause overflow for result at position 0, must yield NULL
expr.evaluate(b);
assertTrue(!r.noNulls && r.isNull[0]);
}
use of org.apache.hadoop.hive.ql.exec.vector.DecimalColumnVector in project hive by apache.
the class TestVectorArithmeticExpressions method getVectorizedRowBatch3DecimalCols.
// Make a decimal batch with three columns, including two for inputs and one for the result.
private VectorizedRowBatch getVectorizedRowBatch3DecimalCols() {
VectorizedRowBatch b = new VectorizedRowBatch(3);
DecimalColumnVector v0, v1;
b.cols[0] = v0 = new DecimalColumnVector(18, 2);
b.cols[1] = v1 = new DecimalColumnVector(18, 2);
b.cols[2] = new DecimalColumnVector(18, 2);
v0.vector[0].set(HiveDecimal.create("1.20"));
v0.vector[1].set(HiveDecimal.create("-3.30"));
v0.vector[2].set(HiveDecimal.create("0"));
v1.vector[0].set(HiveDecimal.create("1.00"));
v1.vector[1].set(HiveDecimal.create("1.00"));
v1.vector[2].set(HiveDecimal.create("1.00"));
b.size = 3;
return b;
}
Aggregations