@ScalarFunction @SqlType("array(varchar)") public static Block oldArraySort(@SqlType("array(varchar)") Block block) { List<Integer> positions = Ints.asList(new int[block.getPositionCount()]); for (int i = 0; i < block.getPositionCount(); i++) { positions.set(i, i); } positions.sort((p1, p2) -> { //TODO: This could be quite slow, it should use parametric equals return VARCHAR.compareTo(block, p1, block, p2); }); BlockBuilder blockBuilder = VARCHAR.createBlockBuilder(null, block.getPositionCount()); for (int position : positions) { VARCHAR.appendTo(block, position, blockBuilder); } return blockBuilder.build(); } }
@ScalarFunction @SqlType("array(varchar)") public static Block oldArraySort(@SqlType("array(varchar)") Block block) { List<Integer> positions = Ints.asList(new int[block.getPositionCount()]); for (int i = 0; i < block.getPositionCount(); i++) { positions.set(i, i); } positions.sort((p1, p2) -> { //TODO: This could be quite slow, it should use parametric equals return VARCHAR.compareTo(block, p1, block, p2); }); BlockBuilder blockBuilder = VARCHAR.createBlockBuilder(null, block.getPositionCount()); for (int position : positions) { VARCHAR.appendTo(block, position, blockBuilder); } return blockBuilder.build(); } }
@ScalarFunction @SqlType("array(varchar)") public static Block oldArrayDistinct(@SqlType("array(varchar)") Block array) { if (array.getPositionCount() == 0) { return array; } TypedSet typedSet = new TypedSet(VARCHAR, array.getPositionCount(), "old_array_distinct"); BlockBuilder distinctElementBlockBuilder = VARCHAR.createBlockBuilder(null, array.getPositionCount()); for (int i = 0; i < array.getPositionCount(); i++) { if (!typedSet.contains(array, i)) { typedSet.add(array, i); VARCHAR.appendTo(array, i, distinctElementBlockBuilder); } } return distinctElementBlockBuilder.build(); } }
@ScalarFunction @SqlType("array(varchar)") public static Block oldArrayDistinct(@SqlType("array(varchar)") Block array) { if (array.getPositionCount() == 0) { return array; } TypedSet typedSet = new TypedSet(VARCHAR, array.getPositionCount(), "old_array_distinct"); BlockBuilder distinctElementBlockBuilder = VARCHAR.createBlockBuilder(null, array.getPositionCount()); for (int i = 0; i < array.getPositionCount(); i++) { if (!typedSet.contains(array, i)) { typedSet.add(array, i); VARCHAR.appendTo(array, i, distinctElementBlockBuilder); } } return distinctElementBlockBuilder.build(); } }