diff --git a/presto-main/src/main/java/com/facebook/presto/operator/scalar/ArrayJoin.java b/presto-main/src/main/java/com/facebook/presto/operator/scalar/ArrayJoin.java index 17eedb9aeacf..8811c2c1ecfc 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/scalar/ArrayJoin.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/scalar/ArrayJoin.java @@ -315,15 +315,19 @@ public static void arrayJoinProvidedBlock( Slice nullReplacement) { int numElements = arrayBlock.getPositionCount(); + boolean hasOutput = false; for (int i = 0; i < numElements; i++) { + if (arrayBlock.isNull(i) && nullReplacement == null) { + continue; + } + + if (hasOutput) { + blockBuilder.writeBytes(delimiter, 0, delimiter.length()); + } + if (arrayBlock.isNull(i)) { - if (nullReplacement != null) { - blockBuilder.writeBytes(nullReplacement, 0, nullReplacement.length()); - } - else { - continue; - } + blockBuilder.writeBytes(nullReplacement, 0, nullReplacement.length()); } else { try { @@ -337,9 +341,7 @@ public static void arrayJoinProvidedBlock( } } - if (i != numElements - 1) { - blockBuilder.writeBytes(delimiter, 0, delimiter.length()); - } + hasOutput = true; } blockBuilder.closeEntry(); diff --git a/presto-main/src/test/java/com/facebook/presto/type/TestArrayOperators.java b/presto-main/src/test/java/com/facebook/presto/type/TestArrayOperators.java index e34e8c179792..273d0edeeb53 100644 --- a/presto-main/src/test/java/com/facebook/presto/type/TestArrayOperators.java +++ b/presto-main/src/test/java/com/facebook/presto/type/TestArrayOperators.java @@ -617,6 +617,7 @@ public void testArrayJoin() assertFunction("array_join(ARRAY[1, NULL, 2], ',')", VARCHAR, "1,2"); assertFunction("ARRAY_JOIN(ARRAY [1, 2, 3], ';', 'N/A')", VARCHAR, "1;2;3"); assertFunction("ARRAY_JOIN(ARRAY [1, 2, null], ';', 'N/A')", VARCHAR, "1;2;N/A"); + assertFunction("ARRAY_JOIN(ARRAY [1, 2, null], ';')", VARCHAR, "1;2"); assertFunction("ARRAY_JOIN(ARRAY [1, 2, 3], 'x')", VARCHAR, "1x2x3"); assertFunction("ARRAY_JOIN(ARRAY [BIGINT '1', 2, 3], 'x')", VARCHAR, "1x2x3"); assertFunction("ARRAY_JOIN(ARRAY [null], '=')", VARCHAR, "");