blob: 8562d1b6bc28ffab2637842710e5f0ac04e5646d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
<@pp.dropOutputFile />
<#list vv.modes as mode>
<#list vv.types as type>
<#list type.minor as minor>
<#assign className="${mode.prefix}${minor.class}Holder" />
<@pp.changeOutputFile name="/org/apache/drill/exec/expr/holders/${className}.java" />
<#include "/@includes/license.ftl" />
package org.apache.drill.exec.expr.holders;
<#include "/@includes/vv_imports.ftl" />
/*
* This class is generated using freemarker and the ${.template_name} template.
*/
<#if minor.class.contains("Decimal") && !minor.class.contains("VarDecimal")>
/**
* Old decimal types are deprecated. Please use {@link VarDecimalHolder} holder instead.
*/
@Deprecated
</#if>
public final class ${className} implements ValueHolder {
<#if minor.class.contains("Decimal")>
@Deprecated
</#if>
public static final MajorType TYPE = Types.${mode.name?lower_case}(MinorType.${minor.class?upper_case});
<#if mode.name == "Repeated">
/** The first index (inclusive) into the Vector. **/
public int start;
/** The last index (exclusive) into the Vector. **/
public int end;
/** The Vector holding the actual values. **/
public ${minor.class}Vector vector;
public FieldReader reader;
<#else>
public static final int WIDTH = ${type.width};
<#if mode.name == "Optional">public int isSet;</#if>
<#assign fields = minor.fields!type.fields />
<#list fields as field>
public ${field.type} ${field.name};
</#list>
<#if minor.class.startsWith("Decimal")>
public static final int maxPrecision = ${minor.maxPrecisionDigits};
<#if minor.class.startsWith("Decimal28") || minor.class.startsWith("Decimal38")>
public static final int nDecimalDigits = ${minor.nDecimalDigits};
public static int getInteger(int index, int start, DrillBuf buffer) {
int value = buffer.getInt(start + (index * 4));
if (index == 0) {
/* the first byte contains sign bit, return value without it */
<#if minor.class.endsWith("Sparse")>
value = (value & 0x7FFFFFFF);
<#elseif minor.class.endsWith("Dense")>
value = (value & 0x0000007F);
</#if>
}
return value;
}
public static void setInteger(int index, int value, int start, DrillBuf buffer) {
buffer.setInt(start + (index * 4), value);
}
public static void setSign(boolean sign, int start, DrillBuf buffer) {
// Set MSB to 1 if sign is negative
if (sign == true) {
int value = getInteger(0, start, buffer);
setInteger(0, (value | 0x80000000), start, buffer);
}
}
public static boolean getSign(int start, DrillBuf buffer) {
return ((buffer.getInt(start) & 0x80000000) != 0);
}
</#if></#if>
@Deprecated
public int hashCode() {
throw new UnsupportedOperationException();
}
/*
* Reason for deprecation is that ValueHolders are potential scalar replacements
* and hence we don't want any methods to be invoked on them.
*/
@Deprecated
public String toString() {
throw new UnsupportedOperationException();
}
</#if>
}
</#list>
</#list>
</#list>