8b91a4a0d66ac62a53d27b4edb288da2382318bf
[hive.git] / ql / src / gen / vectorization / ExpressionTemplates / TimestampColumnArithmeticDateScalar.txt
1 /**
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements.  See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership.  The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License.  You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19 package org.apache.hadoop.hive.ql.exec.vector.expressions.gen;
20
21 import java.sql.Timestamp;
22
23 import org.apache.hadoop.hive.common.type.HiveIntervalDayTime;
24 import org.apache.hadoop.hive.ql.exec.vector.expressions.VectorExpression;
25 import org.apache.hadoop.hive.ql.exec.vector.TimestampColumnVector;
26 import org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch;
27 import org.apache.hadoop.hive.ql.exec.vector.expressions.NullUtil;
28 import org.apache.hadoop.hive.ql.exec.vector.VectorExpressionDescriptor;
29 import org.apache.hadoop.hive.ql.exec.vector.*;
30 import org.apache.hadoop.hive.ql.util.DateTimeMath;
31 import org.apache.hadoop.hive.serde2.io.DateWritable;
32
33 /**
34  * Generated from template TimestampColumnArithmeticDateScalar.txt, which covers binary arithmetic
35  * expressions between a column and a scalar.
36  */
37 public class <ClassName> extends VectorExpression {
38
39   private static final long serialVersionUID = 1L;
40
41   private int colNum;
42   private Timestamp value;
43   private int outputColumn;
44   private DateTimeMath dtm = new DateTimeMath();
45
46   public <ClassName>(int colNum, long value, int outputColumn) {
47     this.colNum = colNum;
48     this.value = new Timestamp(0);
49     this.value.setTime(DateWritable.daysToMillis((int) value));
50     this.outputColumn = outputColumn;
51   }
52
53   public <ClassName>() {
54   }
55
56   @Override
57   public void evaluate(VectorizedRowBatch batch) {
58
59     if (childExpressions != null) {
60       super.evaluateChildren(batch);
61     }
62
63      // Input #1 is type <OperandType1>.
64     <InputColumnVectorType1> inputColVector1 = (<InputColumnVectorType1>) batch.cols[colNum];
65
66     // Output is type <ReturnType>.
67     <OutputColumnVectorType> outputColVector = (<OutputColumnVectorType>) batch.cols[outputColumn];
68
69     int[] sel = batch.selected;
70     boolean[] inputIsNull = inputColVector1.isNull;
71     boolean[] outputIsNull = outputColVector.isNull;
72     outputColVector.noNulls = inputColVector1.noNulls;
73     outputColVector.isRepeating = inputColVector1.isRepeating;
74     int n = batch.size;
75
76     // return immediately if batch is empty
77     if (n == 0) {
78       return;
79     }
80
81     if (inputColVector1.isRepeating) {
82       dtm.<OperatorMethod>(
83           inputColVector1.asScratch<CamelOperandType1>(0), value, outputColVector.getScratch<CamelReturnType>());
84       outputColVector.setFromScratch<CamelReturnType>(0);
85       // Even if there are no nulls, we always copy over entry 0. Simplifies code.
86       outputIsNull[0] = inputIsNull[0];
87     } else if (inputColVector1.noNulls) {
88       if (batch.selectedInUse) {
89         for(int j = 0; j != n; j++) {
90           int i = sel[j];
91           dtm.<OperatorMethod>(
92               inputColVector1.asScratch<CamelOperandType1>(i), value, outputColVector.getScratch<CamelReturnType>());
93           outputColVector.setFromScratch<CamelReturnType>(i);
94         }
95       } else {
96         for(int i = 0; i != n; i++) {
97           dtm.<OperatorMethod>(
98               inputColVector1.asScratch<CamelOperandType1>(i), value, outputColVector.getScratch<CamelReturnType>());
99           outputColVector.setFromScratch<CamelReturnType>(i);
100         }
101       }
102     } else /* there are nulls */ {
103       if (batch.selectedInUse) {
104         for(int j = 0; j != n; j++) {
105           int i = sel[j];
106           dtm.<OperatorMethod>(
107               inputColVector1.asScratch<CamelOperandType1>(i), value, outputColVector.getScratch<CamelReturnType>());
108           outputColVector.setFromScratch<CamelReturnType>(i);
109           outputIsNull[i] = inputIsNull[i];
110         }
111       } else {
112         for(int i = 0; i != n; i++) {
113           dtm.<OperatorMethod>(
114               inputColVector1.asScratch<CamelOperandType1>(i), value, outputColVector.getScratch<CamelReturnType>());
115           outputColVector.setFromScratch<CamelReturnType>(i);
116         }
117         System.arraycopy(inputIsNull, 0, outputIsNull, 0, n);
118       }
119     }
120
121     NullUtil.setNullOutputEntriesColScalar(outputColVector, batch.selectedInUse, sel, n);
122   }
123
124   @Override
125   public int getOutputColumn() {
126     return outputColumn;
127   }
128
129   @Override
130   public String getOutputType() {
131     return "<ReturnType>";
132   }
133
134   @Override
135   public VectorExpressionDescriptor.Descriptor getDescriptor() {
136     return (new VectorExpressionDescriptor.Builder())
137         .setMode(
138             VectorExpressionDescriptor.Mode.PROJECTION)
139         .setNumArguments(2)
140         .setArgumentTypes(
141             VectorExpressionDescriptor.ArgumentType.getType("<OperandType1>"),
142             VectorExpressionDescriptor.ArgumentType.getType("date"))
143         .setInputExpressionTypes(
144             VectorExpressionDescriptor.InputExpressionType.COLUMN,
145             VectorExpressionDescriptor.InputExpressionType.SCALAR).build();
146   }
147 }