Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Licensed 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.
  */
 package com.facebook.presto.operator.scalar;
 
 
 import java.util.Map;
 
 import static com.facebook.presto.metadata.FunctionRegistry.mangleFieldAccessor;
 import static com.facebook.presto.type.TypeUtils.readStructuralBlock;
 import static com.facebook.presto.type.RowType.RowField;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 
 public class RowFieldAccessor
         extends ParametricScalar
 {
     private static final Map<StringMethodHandleMETHOD_HANDLE_MAP;
 
     private final Signature signature;
     private final MethodHandle methodHandle;
 
     static {
         ImmutableMap.Builder<StringMethodHandlebuilder = ImmutableMap.builder();
         builder.put("long", Reflection.methodHandle(RowFieldAccessor.class"longAccessor"Type.classInteger.classSlice.class));
         builder.put("double", Reflection.methodHandle(RowFieldAccessor.class"doubleAccessor"Type.classInteger.classSlice.class));
         builder.put("boolean", Reflection.methodHandle(RowFieldAccessor.class"booleanAccessor"Type.classInteger.classSlice.class));
         builder.put("slice", Reflection.methodHandle(RowFieldAccessor.class"sliceAccessor"Type.classInteger.classSlice.class));
          = builder.build();
     }
 
     public RowFieldAccessor(RowType typeString fieldName)
     {
         Type returnType = null;
         int index = 0;
         for (RowField field : type.getFields()) {
             if (field.getName().equals(Optional.of(fieldName))) {
                 returnType = field.getType();
                 break;
             }
             index++;
         }
         checkNotNull(returnType"%s not found in row type %s"fieldNametype);
          = new Signature(mangleFieldAccessor(fieldName), returnType.getTypeSignature(), type.getTypeSignature());
 
         String stackType = returnType.getJavaType().getSimpleName().toLowerCase();
         checkState(.containsKey(stackType), "method handle missing for %s stack type"stackType);
          = .get(stackType).bindTo(returnType).bindTo(index);
     }
 
     @Override
     public Signature getSignature()
     {
         return ;
     }
 
     @Override
     public boolean isHidden()
     {
         return true;
     }
 
     @Override
     public boolean isDeterministic()
     {
         return true;
     }
 
     @Override
     public String getDescription()
     {
         return null;
     }
 
     @Override
     public FunctionInfo specialize(Map<StringTypetypesint arityTypeManager typeManagerFunctionRegistry functionRegistry)
    {
        checkNotNull("methodHandle is null");
        return new FunctionInfo(getDescription(), isHidden(), isDeterministic(), true, ImmutableList.of(false));
    }
    public static Long longAccessor(Type typeInteger fieldSlice row)
    {
        return type.getLong(readStructuralBlock(row), field);
    }
    public static Boolean booleanAccessor(Type typeInteger fieldSlice row)
    {
        return type.getBoolean(readStructuralBlock(row), field);
    }
    public static Double doubleAccessor(Type typeInteger fieldSlice row)
    {
        return type.getDouble(readStructuralBlock(row), field);
    }
    public static Slice sliceAccessor(Type typeInteger fieldSlice row)
    {
        return type.getSlice(readStructuralBlock(row), field);
    }
New to GrepCode? Check out our FAQ X