d1474fb9e08e7ffd88a1d763a413dfc602210a2a
[hive.git] / ql / src / gen / vectorization / ExpressionTemplates / DateColumnArithmeticIntervalYearMonthScalar.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.Date;
22 import org.apache.hadoop.hive.common.type.HiveIntervalYearMonth;
23 import org.apache.hadoop.hive.ql.exec.vector.expressions.VectorExpression;
24 import org.apache.hadoop.hive.ql.exec.vector.LongColumnVector;
25 import org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch;
26 import org.apache.hadoop.hive.ql.exec.vector.expressions.NullUtil;
27 import org.apache.hadoop.hive.ql.exec.vector.VectorExpressionDescriptor;
28 import org.apache.hadoop.hive.ql.exec.vector.*;
29 import org.apache.hadoop.hive.ql.util.DateTimeMath;
30 import org.apache.hadoop.hive.serde2.io.DateWritable;
31
32 /**
33  * Generated from template DateColumnArithmeticIntervalYearMonthScalar.txt, which covers binary arithmetic
34  * expressions between a date column and a interval year month scalar.
35  */
36 public class <ClassName> extends VectorExpression {
37
38   private static final long serialVersionUID = 1L;
39
40   private int colNum;
41   private HiveIntervalYearMonth value;
42   private int outputColumn;
43   private Date scratchDate1;
44   private Date outputDate;
45   private DateTimeMath dtm = new DateTimeMath();
46
47   public <ClassName>(int colNum, long value, int outputColumn) {
48     this.colNum = colNum;
49     this.value = new HiveIntervalYearMonth((int) value);
50     this.outputColumn = outputColumn;
51     scratchDate1 = new Date(0);
52     outputDate = new Date(0);
53   }
54
55   public <ClassName>() {
56   }
57
58   @Override
59   public void evaluate(VectorizedRowBatch batch) {
60
61     if (childExpressions != null) {
62       super.evaluateChildren(batch);
63     }
64
65     // Input #1 is type date.
66     LongColumnVector inputColVector1 = (LongColumnVector) batch.cols[colNum];
67
68     // Output is type date.
69     LongColumnVector outputColVector = (LongColumnVector) batch.cols[outputColumn];
70
71     int[] sel = batch.selected;
72     boolean[] inputIsNull = inputColVector1.isNull;
73     boolean[] outputIsNull = outputColVector.isNull;
74     outputColVector.noNulls = inputColVector1.noNulls;
75     outputColVector.isRepeating = inputColVector1.isRepeating;
76     int n = batch.size;
77     long[] vector1 = inputColVector1.vector;
78     long[] outputVector = outputColVector.vector;
79
80     // return immediately if batch is empty
81     if (n == 0) {
82       return;
83     }
84
85     if (inputColVector1.isRepeating) {
86       scratchDate1.setTime(DateWritable.daysToMillis((int) vector1[0]));
87       dtm.<OperatorMethod>(
88           scratchDate1, value, outputDate);
89       outputVector[0] = DateWritable.dateToDays(outputDate);
90        // Even if there are no nulls, we always copy over entry 0. Simplifies code.
91       outputIsNull[0] = inputIsNull[0];
92     } else if (inputColVector1.noNulls) {
93       if (batch.selectedInUse) {
94         for(int j = 0; j != n; j++) {
95           int i = sel[j];
96           scratchDate1.setTime(DateWritable.daysToMillis((int) vector1[i]));
97           dtm.<OperatorMethod>(
98               scratchDate1, value, outputDate);
99           outputVector[i] = DateWritable.dateToDays(outputDate);
100         }
101       } else {
102         for(int i = 0; i != n; i++) {
103           scratchDate1.setTime(DateWritable.daysToMillis((int) vector1[i]));
104           dtm.<OperatorMethod>(
105               scratchDate1, value, outputDate);
106           outputVector[i] = DateWritable.dateToDays(outputDate);
107         }
108       }
109     } else /* there are nulls */ {
110       if (batch.selectedInUse) {
111         for(int j = 0; j != n; j++) {
112           int i = sel[j];
113           scratchDate1.setTime(DateWritable.daysToMillis((int) vector1[i]));
114           dtm.<OperatorMethod>(
115               scratchDate1, value, outputDate);
116           outputVector[i] = DateWritable.dateToDays(outputDate);
117           outputIsNull[i] = inputIsNull[i];
118         }
119       } else {
120         for(int i = 0; i != n; i++) {
121           scratchDate1.setTime(DateWritable.daysToMillis((int) vector1[i]));
122           dtm.<OperatorMethod>(
123               scratchDate1, value, outputDate);
124           outputVector[i] = DateWritable.dateToDays(outputDate);
125         }
126         System.arraycopy(inputIsNull, 0, outputIsNull, 0, n);
127       }
128     }
129
130     NullUtil.setNullOutputEntriesColScalar(outputColVector, batch.selectedInUse, sel, n);
131   }
132
133   @Override
134   public int getOutputColumn() {
135     return outputColumn;
136   }
137
138   @Override
139   public String getOutputType() {
140     return "long";
141   }
142
143   @Override
144   public VectorExpressionDescriptor.Descriptor getDescriptor() {
145     return (new VectorExpressionDescriptor.Builder())
146         .setMode(
147             VectorExpressionDescriptor.Mode.PROJECTION)
148         .setNumArguments(2)
149         .setArgumentTypes(
150             VectorExpressionDescriptor.ArgumentType.getType("date"),
151             VectorExpressionDescriptor.ArgumentType.getType("interval_year_month"))
152         .setInputExpressionTypes(
153             VectorExpressionDescriptor.InputExpressionType.COLUMN,
154             VectorExpressionDescriptor.InputExpressionType.SCALAR).build();
155   }
156 }