Search in sources :

Example 21 with SingleMapBlock

use of com.facebook.presto.common.block.SingleMapBlock in project presto by prestodb.

the class MapGenericEquality method genericEqual.

public static Boolean genericEqual(Type keyType, MethodHandle keyNativeHashCode, MethodHandle keyBlockNativeEquals, MethodHandle keyBlockHashCode, Block leftBlock, Block rightBlock, EqualityPredicate predicate) {
    if (leftBlock.getPositionCount() != rightBlock.getPositionCount()) {
        return false;
    }
    SingleMapBlock leftSingleMapLeftBlock = (SingleMapBlock) leftBlock;
    SingleMapBlock rightSingleMapBlock = (SingleMapBlock) rightBlock;
    boolean indeterminate = false;
    for (int position = 0; position < leftSingleMapLeftBlock.getPositionCount(); position += 2) {
        Object key = readNativeValue(keyType, leftBlock, position);
        int leftPosition = position + 1;
        int rightPosition;
        try {
            rightPosition = rightSingleMapBlock.seekKey(key, keyNativeHashCode, keyBlockNativeEquals, keyBlockHashCode);
        } catch (NotSupportedException e) {
            throw new PrestoException(NOT_SUPPORTED, e.getMessage(), e);
        }
        if (rightPosition == -1) {
            return false;
        }
        try {
            Boolean result = predicate.equals(leftPosition, rightPosition);
            if (result == null) {
                indeterminate = true;
            } else if (!result) {
                return false;
            }
        } catch (Throwable t) {
            throw internalError(t);
        }
    }
    if (indeterminate) {
        return null;
    }
    return true;
}
Also used : PrestoException(com.facebook.presto.spi.PrestoException) SingleMapBlock(com.facebook.presto.common.block.SingleMapBlock) NotSupportedException(com.facebook.presto.common.NotSupportedException)

Example 22 with SingleMapBlock

use of com.facebook.presto.common.block.SingleMapBlock in project presto by prestodb.

the class MapElementAtFunction method elementAt.

@UsedByGeneratedCode
public static Object elementAt(MethodHandle keyNativeHashCode, MethodHandle keyBlockNativeEquals, MethodHandle keyBlockHashCode, Type valueType, Block map, double key) {
    SingleMapBlock mapBlock = (SingleMapBlock) map;
    int valuePosition;
    try {
        valuePosition = mapBlock.seekKeyExact(key, keyNativeHashCode, keyBlockNativeEquals, keyBlockHashCode);
    } catch (NotSupportedException e) {
        throw new PrestoException(NOT_SUPPORTED, e.getMessage(), e);
    }
    if (valuePosition == -1) {
        return null;
    }
    return readNativeValue(valueType, mapBlock, valuePosition);
}
Also used : PrestoException(com.facebook.presto.spi.PrestoException) SingleMapBlock(com.facebook.presto.common.block.SingleMapBlock) NotSupportedException(com.facebook.presto.common.NotSupportedException) UsedByGeneratedCode(com.facebook.presto.annotation.UsedByGeneratedCode)

Example 23 with SingleMapBlock

use of com.facebook.presto.common.block.SingleMapBlock in project presto by prestodb.

the class MapElementAtFunction method elementAt.

@UsedByGeneratedCode
public static Object elementAt(MethodHandle keyNativeHashCode, MethodHandle keyBlockNativeEquals, MethodHandle keyBlockHashCode, Type valueType, Block map, Object key) {
    SingleMapBlock mapBlock = (SingleMapBlock) map;
    int valuePosition;
    try {
        valuePosition = mapBlock.seekKeyExact((Block) key, keyNativeHashCode, keyBlockNativeEquals, keyBlockHashCode);
    } catch (NotSupportedException e) {
        throw new PrestoException(NOT_SUPPORTED, e.getMessage(), e);
    }
    if (valuePosition == -1) {
        return null;
    }
    return readNativeValue(valueType, mapBlock, valuePosition);
}
Also used : SingleMapBlock(com.facebook.presto.common.block.SingleMapBlock) Block(com.facebook.presto.common.block.Block) PrestoException(com.facebook.presto.spi.PrestoException) SingleMapBlock(com.facebook.presto.common.block.SingleMapBlock) NotSupportedException(com.facebook.presto.common.NotSupportedException) UsedByGeneratedCode(com.facebook.presto.annotation.UsedByGeneratedCode)

Example 24 with SingleMapBlock

use of com.facebook.presto.common.block.SingleMapBlock in project presto by prestodb.

the class MapElementAtFunction method elementAt.

@UsedByGeneratedCode
public static Object elementAt(MethodHandle keyNativeHashCode, MethodHandle keyBlockNativeEquals, MethodHandle keyBlockHashCode, Type valueType, Block map, Slice key) {
    SingleMapBlock mapBlock = (SingleMapBlock) map;
    int valuePosition;
    try {
        valuePosition = mapBlock.seekKeyExact(key, keyNativeHashCode, keyBlockNativeEquals, keyBlockHashCode);
    } catch (NotSupportedException e) {
        throw new PrestoException(NOT_SUPPORTED, e.getMessage(), e);
    }
    if (valuePosition == -1) {
        return null;
    }
    return readNativeValue(valueType, mapBlock, valuePosition);
}
Also used : PrestoException(com.facebook.presto.spi.PrestoException) SingleMapBlock(com.facebook.presto.common.block.SingleMapBlock) NotSupportedException(com.facebook.presto.common.NotSupportedException) UsedByGeneratedCode(com.facebook.presto.annotation.UsedByGeneratedCode)

Example 25 with SingleMapBlock

use of com.facebook.presto.common.block.SingleMapBlock in project presto by prestodb.

the class MapType method getObjectValue.

@Override
public Object getObjectValue(SqlFunctionProperties properties, Block block, int position) {
    if (block.isNull(position)) {
        return null;
    }
    Block singleMapBlock = block.getBlock(position);
    if (!(singleMapBlock instanceof SingleMapBlock)) {
        throw new UnsupportedOperationException("Map is encoded with legacy block representation");
    }
    Map<Object, Object> map = new HashMap<>();
    for (int i = 0; i < singleMapBlock.getPositionCount(); i += 2) {
        map.put(keyType.getObjectValue(properties, singleMapBlock, i), valueType.getObjectValue(properties, singleMapBlock, i + 1));
    }
    return Collections.unmodifiableMap(map);
}
Also used : HashMap(java.util.HashMap) SingleMapBlock(com.facebook.presto.common.block.SingleMapBlock) MapBlock(com.facebook.presto.common.block.MapBlock) Block(com.facebook.presto.common.block.Block) SingleMapBlock(com.facebook.presto.common.block.SingleMapBlock)

Aggregations

SingleMapBlock (com.facebook.presto.common.block.SingleMapBlock)26 NotSupportedException (com.facebook.presto.common.NotSupportedException)12 PrestoException (com.facebook.presto.spi.PrestoException)12 UsedByGeneratedCode (com.facebook.presto.annotation.UsedByGeneratedCode)11 Test (org.testng.annotations.Test)8 MapType (com.facebook.presto.common.type.MapType)7 Block (com.facebook.presto.common.block.Block)6 MapBlock (com.facebook.presto.common.block.MapBlock)6 MapBlockBuilder (com.facebook.presto.common.block.MapBlockBuilder)6 AbstractMapBlock (com.facebook.presto.common.block.AbstractMapBlock)5 BlockBuilder (com.facebook.presto.common.block.BlockBuilder)5 HashMap (java.util.HashMap)4 Type (com.facebook.presto.common.type.Type)3 TestingEnvironment.getOperatorMethodHandle (com.facebook.presto.testing.TestingEnvironment.getOperatorMethodHandle)3 MethodHandle (java.lang.invoke.MethodHandle)3 ArrayType (com.facebook.presto.common.type.ArrayType)2 Map (java.util.Map)2 BlockAssertions.createLongDictionaryBlock (com.facebook.presto.block.BlockAssertions.createLongDictionaryBlock)1 BlockAssertions.createLongsBlock (com.facebook.presto.block.BlockAssertions.createLongsBlock)1 BlockAssertions.createRLEBlock (com.facebook.presto.block.BlockAssertions.createRLEBlock)1