private StateField(String name, Class<?> type, Object initialValue, String getterName, Optional<Type> sqlType) { this.name = requireNonNull(name, "name is null"); checkArgument(!name.isEmpty(), "name is empty"); this.type = requireNonNull(type, "type is null"); this.getterName = requireNonNull(getterName, "getterName is null"); this.initialValue = initialValue; checkArgument(sqlType != null, "sqlType is null"); if (sqlType.isPresent()) { checkArgument( (sqlType.get().getJavaType() == type) || ((type == byte.class) && TINYINT.equals(sqlType.get())) || ((type == int.class) && INTEGER.equals(sqlType.get())), "Stack type (%s) and provided sql type (%s) are incompatible", type.getName(), sqlType.get().getDisplayName()); } else { sqlType = sqlTypeFromStackType(type); } this.sqlType = sqlType; }
@Override protected Object getGreaterValue(Object value) { Block block = (Block) value; BlockBuilder blockBuilder = TINYINT.createBlockBuilder(null, block.getPositionCount() + 1); for (int i = 0; i < block.getPositionCount(); i++) { TINYINT.appendTo(block, i, blockBuilder); } TINYINT.writeLong(blockBuilder, 1L); return blockBuilder.build(); } }
@Override public void setField(Block block, int position) { value.set(SignedBytes.checkedCast(TinyintType.TINYINT.getLong(block, position))); rowInspector.setStructFieldData(row, field, value); } }
public static Block createTestBlock() { BlockBuilder blockBuilder = TINYINT.createBlockBuilder(null, 15); TINYINT.writeLong(blockBuilder, 111); TINYINT.writeLong(blockBuilder, 111); TINYINT.writeLong(blockBuilder, 111); TINYINT.writeLong(blockBuilder, 22); TINYINT.writeLong(blockBuilder, 22); TINYINT.writeLong(blockBuilder, 22); TINYINT.writeLong(blockBuilder, 22); TINYINT.writeLong(blockBuilder, 22); TINYINT.writeLong(blockBuilder, 33); TINYINT.writeLong(blockBuilder, 33); TINYINT.writeLong(blockBuilder, 44); return blockBuilder.build(); }
@Override public void append(JsonParser parser, BlockBuilder blockBuilder) throws IOException { Long result = currentTokenAsTinyint(parser); if (result == null) { blockBuilder.appendNull(); } else { TINYINT.writeLong(blockBuilder, result); } } }
@Override public long hash(Block block, int position) { return hash(block.getByte(position, 0)); }
@Override public BlockBuilder createBlockBuilder(BlockBuilderStatus blockBuilderStatus, int expectedEntries) { return createBlockBuilder(blockBuilderStatus, expectedEntries, Byte.BYTES); }
public static Block createTestBlock() { BlockBuilder blockBuilder = TINYINT.createBlockBuilder(null, 15); TINYINT.writeLong(blockBuilder, 111); TINYINT.writeLong(blockBuilder, 111); TINYINT.writeLong(blockBuilder, 111); TINYINT.writeLong(blockBuilder, 22); TINYINT.writeLong(blockBuilder, 22); TINYINT.writeLong(blockBuilder, 22); TINYINT.writeLong(blockBuilder, 22); TINYINT.writeLong(blockBuilder, 22); TINYINT.writeLong(blockBuilder, 33); TINYINT.writeLong(blockBuilder, 33); TINYINT.writeLong(blockBuilder, 44); return blockBuilder.build(); }
@Override public void append(JsonParser parser, BlockBuilder blockBuilder) throws IOException { Long result = currentTokenAsTinyint(parser); if (result == null) { blockBuilder.appendNull(); } else { TINYINT.writeLong(blockBuilder, result); } } }
@ScalarOperator(HASH_CODE) @SqlType(StandardTypes.BIGINT) public static long hashCode(@SqlType(StandardTypes.TINYINT) long value) { return TinyintType.hash((byte) value); }
@Test public void testPrimitiveByteSerialization() { AccumulatorStateFactory<ByteState> factory = StateCompiler.generateStateFactory(ByteState.class); AccumulatorStateSerializer<ByteState> serializer = StateCompiler.generateStateSerializer(ByteState.class); ByteState state = factory.createSingleState(); ByteState deserializedState = factory.createSingleState(); state.setByte((byte) 3); BlockBuilder builder = TINYINT.createBlockBuilder(null, 1); serializer.serialize(state, builder); Block block = builder.build(); serializer.deserialize(block, 0, deserializedState); assertEquals(deserializedState.getByte(), state.getByte()); }
private StateField(String name, Class<?> type, Object initialValue, String getterName, Optional<Type> sqlType) { this.name = requireNonNull(name, "name is null"); checkArgument(!name.isEmpty(), "name is empty"); this.type = requireNonNull(type, "type is null"); this.getterName = requireNonNull(getterName, "getterName is null"); this.initialValue = initialValue; checkArgument(sqlType != null, "sqlType is null"); if (sqlType.isPresent()) { checkArgument( (sqlType.get().getJavaType() == type) || ((type == byte.class) && TINYINT.equals(sqlType.get())) || ((type == int.class) && INTEGER.equals(sqlType.get())), "Stack type (%s) and provided sql type (%s) are incompatible", type.getName(), sqlType.get().getDisplayName()); } else { sqlType = sqlTypeFromStackType(type); } this.sqlType = sqlType; }
@Override protected Object getGreaterValue(Object value) { Block block = (Block) value; BlockBuilder blockBuilder = TINYINT.createBlockBuilder(null, block.getPositionCount() + 1); for (int i = 0; i < block.getPositionCount(); i++) { TINYINT.appendTo(block, i, blockBuilder); } TINYINT.writeLong(blockBuilder, 1L); return blockBuilder.build(); } }
return; case BYTE: TinyintType.TINYINT.writeLong(builder, ((ByteObjectInspector) inspector).get(object)); return; case SHORT:
@ScalarOperator(HASH_CODE) @SqlType(StandardTypes.BIGINT) public static long hashCode(@SqlType(StandardTypes.TINYINT) long value) { return TinyintType.hash((byte) value); }
@Test public void testPrimitiveByteSerialization() { AccumulatorStateFactory<ByteState> factory = StateCompiler.generateStateFactory(ByteState.class); AccumulatorStateSerializer<ByteState> serializer = StateCompiler.generateStateSerializer(ByteState.class); ByteState state = factory.createSingleState(); ByteState deserializedState = factory.createSingleState(); state.setByte((byte) 3); BlockBuilder builder = TINYINT.createBlockBuilder(null, 1); serializer.serialize(state, builder); Block block = builder.build(); serializer.deserialize(block, 0, deserializedState); assertEquals(deserializedState.getByte(), state.getByte()); }
@SqlType(StandardTypes.BOOLEAN) public static boolean isDistinctFrom( @BlockPosition @SqlType(value = StandardTypes.TINYINT, nativeContainerType = long.class) Block left, @BlockIndex int leftPosition, @BlockPosition @SqlType(value = StandardTypes.TINYINT, nativeContainerType = long.class) Block right, @BlockIndex int rightPosition) { if (left.isNull(leftPosition) != right.isNull(rightPosition)) { return true; } if (left.isNull(leftPosition)) { return false; } return notEqual(TINYINT.getLong(left, leftPosition), TINYINT.getLong(right, rightPosition)); } }
else if (TINYINT.equals(type)) { byte byteValue = resultSet.getByte(i); if (resultSet.wasNull()) {
@SqlType(StandardTypes.BOOLEAN) public static boolean isDistinctFrom( @BlockPosition @SqlType(value = StandardTypes.TINYINT, nativeContainerType = long.class) Block left, @BlockIndex int leftPosition, @BlockPosition @SqlType(value = StandardTypes.TINYINT, nativeContainerType = long.class) Block right, @BlockIndex int rightPosition) { if (left.isNull(leftPosition) != right.isNull(rightPosition)) { return true; } if (left.isNull(leftPosition)) { return false; } return notEqual(TINYINT.getLong(left, leftPosition), TINYINT.getLong(right, rightPosition)); } }
private static boolean convertibleToDoubleWithCast(Type type) { return type instanceof DecimalType || DoubleType.DOUBLE.equals(type) || RealType.REAL.equals(type) || BigintType.BIGINT.equals(type) || IntegerType.INTEGER.equals(type) || SmallintType.SMALLINT.equals(type) || TinyintType.TINYINT.equals(type) || BooleanType.BOOLEAN.equals(type); } }