4fb5035b8180e11c42f2bec0ed525fb6a2884020
[hive.git] / ql / src / gen / vectorization / ExpressionTemplates / FilterStringGroupScalarCompareStringGroupColumnBase.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.nio.charset.StandardCharsets;
22
23 import org.apache.hadoop.hive.ql.exec.vector.expressions.VectorExpression;
24 import org.apache.hadoop.hive.ql.exec.vector.expressions.StringExpr;
25 import org.apache.hadoop.hive.ql.exec.vector.BytesColumnVector;
26 import org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch;
27 import org.apache.hadoop.hive.ql.exec.vector.VectorExpressionDescriptor;
28
29 /**
30  * This is a generated class to evaluate a <OperatorSymbol> comparison on a vector of strings.
31  * Do not edit the generated code directly. 
32  */
33 public abstract class <ClassName> extends VectorExpression {
34
35   private static final long serialVersionUID = 1L;
36
37   protected int colNum;
38   protected byte[] value;
39
40   public <ClassName>() {
41   }
42
43   @Override
44   public void evaluate(VectorizedRowBatch batch) {
45     if (childExpressions != null) {
46       super.evaluateChildren(batch);
47     }
48     BytesColumnVector inputColVector = (BytesColumnVector) batch.cols[colNum];
49     int[] sel = batch.selected;
50     boolean[] nullPos = inputColVector.isNull;
51     int n = batch.size;
52     byte[][] vector = inputColVector.vector;
53     int[] length = inputColVector.length;
54     int[] start = inputColVector.start;
55     
56
57     // return immediately if batch is empty
58     if (n == 0) {
59       return;
60     }
61     
62     if (inputColVector.noNulls) {
63       if (inputColVector.isRepeating) {
64       
65         // All must be selected otherwise size would be zero. Repeating property will not change.
66         if (!(<CompareOrEqual>(value, 0, value.length, vector[0], start[0], length[0])<OptionalCompare>)) {
67
68           //Entire batch is filtered out.
69           batch.size = 0;
70         }
71       } else if (batch.selectedInUse) {
72         int newSize = 0;
73         for(int j=0; j != n; j++) {
74           int i = sel[j];
75           if (<CompareOrEqual>(value, 0, value.length, vector[i], start[i], length[i])<OptionalCompare>) {
76             sel[newSize++] = i;
77           }
78         }
79         batch.size = newSize;
80       } else {
81         int newSize = 0;
82         for(int i = 0; i != n; i++) {
83           if (<CompareOrEqual>(value, 0, value.length, vector[i], start[i], length[i])<OptionalCompare>) {
84             sel[newSize++] = i;
85           }
86         }
87         if (newSize < n) {
88           batch.size = newSize;
89           batch.selectedInUse = true;
90         }
91       }
92     } else {
93       if (inputColVector.isRepeating) {
94       
95         // All must be selected otherwise size would be zero. Repeating property will not change.
96         if (!nullPos[0]) {
97           if (!(<CompareOrEqual>(value, 0, value.length, vector[0], start[0], length[0])<OptionalCompare>)) {
98
99             //Entire batch is filtered out.
100             batch.size = 0;
101           }
102         } else {
103           batch.size = 0;
104         }
105       } else if (batch.selectedInUse) {
106         int newSize = 0;
107         for(int j=0; j != n; j++) {
108           int i = sel[j];
109           if (!nullPos[i]) {
110            if (<CompareOrEqual>(value, 0, value.length, vector[i], start[i], length[i])<OptionalCompare>) {
111              sel[newSize++] = i;
112            }
113           }
114         }
115         
116         //Change the selected vector
117         batch.size = newSize;
118       } else {
119         int newSize = 0;
120         for(int i = 0; i != n; i++) {
121           if (!nullPos[i]) {
122             if (<CompareOrEqual>(value, 0, value.length, vector[i], start[i], length[i])<OptionalCompare>) {
123               sel[newSize++] = i;
124             }
125           }
126         }
127         if (newSize < n) {
128           batch.size = newSize;
129           batch.selectedInUse = true;
130         }
131       }
132     }
133   }
134
135   @Override
136   public int getOutputColumn() {
137     return -1;
138   }
139
140   @Override
141   public String getOutputType() {
142     return "boolean";
143   }
144   
145   public int getColNum() {
146     return colNum;
147   }
148
149   public void setColNum(int colNum) {
150     this.colNum = colNum;
151   }
152
153   public byte[] getValue() {
154     return value;
155   }
156
157   public void setValue(byte[] value) {
158     this.value = value;
159   }
160
161   @Override
162   public String vectorExpressionParameters() {
163     return "val " + new String(value, StandardCharsets.UTF_8) + ", col " + + colNum;
164   }
165
166 }