public static Block createTestBlock() { BlockBuilder blockBuilder = SMALLINT.createBlockBuilder(null, 15); SMALLINT.writeLong(blockBuilder, 1111); SMALLINT.writeLong(blockBuilder, 1111); SMALLINT.writeLong(blockBuilder, 1111); SMALLINT.writeLong(blockBuilder, 2222); SMALLINT.writeLong(blockBuilder, 2222); SMALLINT.writeLong(blockBuilder, 2222); SMALLINT.writeLong(blockBuilder, 2222); SMALLINT.writeLong(blockBuilder, 2222); SMALLINT.writeLong(blockBuilder, 3333); SMALLINT.writeLong(blockBuilder, 3333); SMALLINT.writeLong(blockBuilder, 4444); return blockBuilder.build(); }
@Override public void append(JsonParser parser, BlockBuilder blockBuilder) throws IOException { Long result = currentTokenAsInteger(parser); if (result == null) { blockBuilder.appendNull(); } else { SMALLINT.writeLong(blockBuilder, result); } } }
@ScalarFunction @SqlType("map(bigint,smallint)") public static Block hashCounts(@TypeParameter("map<bigint,smallint>") Type mapType, @SqlType(SetDigestType.NAME) Slice slice) { SetDigest digest = SetDigest.newInstance(slice); // Maybe use static BlockBuilderStatus in order avoid `new`? BlockBuilder blockBuilder = mapType.createBlockBuilder(null, 1); BlockBuilder singleMapBlockBuilder = blockBuilder.beginBlockEntry(); for (Map.Entry<Long, Short> entry : digest.getHashCounts().entrySet()) { BIGINT.writeLong(singleMapBlockBuilder, entry.getKey()); SMALLINT.writeLong(singleMapBlockBuilder, entry.getValue()); } blockBuilder.closeEntry(); return (Block) mapType.getObject(blockBuilder, 0); }
@Override protected Object getGreaterValue(Object value) { Block block = (Block) value; BlockBuilder blockBuilder = SMALLINT.createBlockBuilder(null, block.getPositionCount() + 1); for (int i = 0; i < block.getPositionCount(); i++) { SMALLINT.appendTo(block, i, blockBuilder); } SMALLINT.writeLong(blockBuilder, 1L); return blockBuilder.build(); } }
return; case SHORT: SmallintType.SMALLINT.writeLong(builder, ((ShortObjectInspector) inspector).get(object)); return; case INT: