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