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 static com.facebook.presto.type.TypeUtils.readStructuralBlock;
import static com.facebook.presto.type.TypeUtils.buildStructuralSlice;
import static com.facebook.presto.type.TypeUtils.createBlock;
public final class ArrayFunctions
    private ArrayFunctions()
    {
    }
    @ScalarFunction(hidden = true)
    @SqlType("array<unknown>")
    public static Slice arrayConstructor()
    {
        BlockBuilder blockBuilder = new VariableWidthBlockBuilder(new BlockBuilderStatus(), 0);
        return buildStructuralSlice(blockBuilder);
    }
    @Nullable
    public static Boolean contains(@SqlType("array<bigint>"Slice slice, @SqlType(.long value)
    {
        return arrayContains(slice.value);
    }
    @Nullable
    public static Boolean contains(@SqlType("array<boolean>"Slice slice, @SqlType(.boolean value)
    {
        return arrayContains(slice.value);
    }
    @Nullable
    public static Boolean contains(@SqlType("array<double>"Slice slice, @SqlType(.double value)
    {
        return arrayContains(slice.value);
    }
    @Nullable
    public static Boolean contains(@SqlType("array<varchar>"Slice slice, @SqlType(.Slice value)
    {
        return arrayContains(slice.value);
    }
    private static Boolean arrayContains(Slice sliceType typeObject value)
    {
        Block block = readStructuralBlock(slice);
        Block valueBlock = createBlock(typevalue);
        //TODO: This could be quite slow, it should use parametric equals
        for (int i = 0; i < block.getPositionCount(); i++) {
            if (type.equalTo(blockivalueBlock, 0)) {
                return true;
            }
        }
        return false;
    }
New to GrepCode? Check out our FAQ X