outputVector[0] = evaluateDate(inputColVector1, 0, vector2[0]); } else if (inputColVector1.isRepeating) { evaluateRepeatedDate(inputColVector1, vector2, outV, batch.selectedInUse, batch.selected, n); } else if (inputColVector2.isRepeating) { for (int j = 0; j != n; j++) { int i = sel[j]; outputVector[i] = evaluateDate(inputColVector1, i, repeatedNumDays); outputVector[i] = evaluateDate(inputColVector1, i, repeatedNumDays); for (int j = 0; j != n; j++) { int i = sel[j]; outputVector[i] = evaluateDate(inputColVector1, i, vector2[i]); outputVector[i] = evaluateDate(inputColVector1, i, vector2[i]); outputVector[0] = evaluateTimestamp(inputColVector1, 0, vector2[0]); } else if (inputColVector1.isRepeating) { evaluateRepeatedTimestamp(inputColVector1, vector2, outV, batch.selectedInUse, batch.selected, n); } else if (inputColVector2.isRepeating) { for (int j = 0; j != n; j++) { int i = sel[j]; outputVector[i] = evaluateTimestamp(inputColVector1, i, repeatedNumDays); outputVector[i] = evaluateTimestamp(inputColVector1, i, repeatedNumDays);
protected void evaluateRepeatedDate(ColumnVector columnVector, long[] vector2, LongColumnVector outputVector, boolean selectedInUse, int[] selected, int n) { if (columnVector.isNull[0]) { outputVector.noNulls = false; outputVector.isNull[0] = true; outputVector.isRepeating = true; return; } LongColumnVector lcv = (LongColumnVector) columnVector; long days = lcv.vector[0]; evaluateRepeatedCommon(days, vector2, outputVector, selectedInUse, selected, n); }
@Override public String vectorExpressionParameters() { return getColumnParamString(0, colNum1) + ", " + getColumnParamString(1, colNum2); }
outputVector[0] = evaluateDate(inputColVector1, 0, vector2[0]); } else if (batch.selectedInUse) { for (int j = 0; j != n; j++) { int i = sel[j]; outputVector[i] = evaluateDate(inputColVector1, i, vector2[i]); outputVector[i] = evaluateDate(inputColVector1, i, vector2[i]); outputVector[0] = evaluateTimestamp(inputColVector1, 0, vector2[0]); } else if (batch.selectedInUse) { for (int j = 0; j != n; j++) { int i = sel[j]; outputVector[i] = evaluateTimestamp(inputColVector1, i, vector2[i]); outputVector[i] = evaluateTimestamp(inputColVector1, i, vector2[i]); evaluateString((BytesColumnVector) inputColVector1, outV, 0, vector2[0]); } else if (batch.selectedInUse) { for (int j = 0; j != n; j++) { int i = sel[j]; evaluateString((BytesColumnVector) inputColVector1, outV, i, vector2[i]); evaluateString((BytesColumnVector) inputColVector1, outV, i, vector2[i]);
VectorExpression udf; if (isPositive) { udf = new VectorUDFDateAddColCol(0, 1, 2); } else { udf = new VectorUDFDateSubColCol(0, 1, 2);
outputVector[0] = evaluateDate(inputColVector1, 0, vector2[0]); outV.start[0] = 0; outV.length[0] = outputVector[0].length; for (int j = 0; j != n; j++) { int i = sel[j]; outputVector[i] = evaluateDate(inputColVector1, i, vector2[i]); outV.start[i] = 0; outV.length[i] = outputVector[0].length; outputVector[i] = evaluateDate(inputColVector1, i, vector2[i]); outV.start[i] = 0; outV.length[i] = outputVector[0].length; outputVector[0] = evaluateTimestamp(inputColVector1, 0, vector2[0]); } else if (batch.selectedInUse) { for (int j = 0; j != n; j++) { int i = sel[j]; outputVector[i] = evaluateTimestamp(inputColVector1, i, vector2[i]); outV.start[i] = 0; outV.length[i] = outputVector[0].length; outputVector[i] = evaluateTimestamp(inputColVector1, i, vector2[i]); outV.start[i] = 0; outV.length[i] = outputVector[0].length; evaluateString((BytesColumnVector) inputColVector1, inputColVector2, outV, 0); } else if (batch.selectedInUse) { for (int j = 0; j != n; j++) {
@Test public void testDateAddColCol() throws HiveException { for (PrimitiveCategory colType1 : dateTimestampStringTypes) testDateAddColCol(colType1, true); VectorExpression udf = new VectorUDFDateAddColCol(0, 1, 2); VectorizedRowBatch batch = new VectorizedRowBatch(3, 1); BytesColumnVector bcv; byte[] bytes = "error".getBytes(utf8); udf.setInputTypeInfos(new TypeInfo[] {TypeInfoFactory.stringTypeInfo, TypeInfoFactory.timestampTypeInfo}); udf.transientInit(); batch.cols[0] = new BytesColumnVector(1); batch.cols[1] = new LongColumnVector(1); batch.cols[2] = new LongColumnVector(1); bcv = (BytesColumnVector) batch.cols[0]; bcv.vector[0] = bytes; bcv.start[0] = 0; bcv.length[0] = bytes.length; udf.evaluate(batch); Assert.assertEquals(batch.cols[2].isNull[0], true); }
protected void evaluateRepeatedTimestamp(ColumnVector columnVector, long[] vector2, LongColumnVector outputVector, boolean selectedInUse, int[] selected, int n) { if (columnVector.isNull[0]) { outputVector.noNulls = false; outputVector.isNull[0] = true; outputVector.isRepeating = true; return; } TimestampColumnVector tcv = (TimestampColumnVector) columnVector; // Convert to date value (in days) long days = DateWritableV2.millisToDays(tcv.getTime(0)); evaluateRepeatedCommon(days, vector2, outputVector, selectedInUse, selected, n); }
protected void evaluateRepeatedString(BytesColumnVector inputColumnVector1, long[] vector2, LongColumnVector outputVector, boolean selectedInUse, int[] selected, int n) { if (inputColumnVector1.isNull[0]) { outputVector.noNulls = false; outputVector.isNull[0] = true; outputVector.isRepeating = true; return; } text.set( inputColumnVector1.vector[0], inputColumnVector1.start[0], inputColumnVector1.length[0]); Date date = new Date(); boolean parsed = dateParser.parseDate(text.toString(), date); if (!parsed) { outputVector.noNulls = false; outputVector.isNull[0] = true; outputVector.isRepeating = true; return; } long days = DateWritableV2.millisToDays(date.toEpochMilli()); evaluateRepeatedCommon(days, vector2, outputVector, selectedInUse, selected, n); }