From 5d0f7490d3ed0b74867aabc9399a8af4310d3db2 Mon Sep 17 00:00:00 2001 From: LouisXu Date: Wed, 3 Jul 2019 14:26:23 +0800 Subject: [PATCH] [FLINK-13073][table-blink-runtime] BinaryRow in Blink runtime has wrong FIRST_BYTE_ZERO mask This closes #8961 --- .../apache/flink/table/dataformat/BinaryRow.java | 2 +- .../flink/table/dataformat/BinaryRowTest.java | 13 +++++-------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/flink-table/flink-table-runtime-blink/src/main/java/org/apache/flink/table/dataformat/BinaryRow.java b/flink-table/flink-table-runtime-blink/src/main/java/org/apache/flink/table/dataformat/BinaryRow.java index 4f8e9ee2c4374..358b1fc2af57e 100644 --- a/flink-table/flink-table-runtime-blink/src/main/java/org/apache/flink/table/dataformat/BinaryRow.java +++ b/flink-table/flink-table-runtime-blink/src/main/java/org/apache/flink/table/dataformat/BinaryRow.java @@ -55,7 +55,7 @@ public final class BinaryRow extends BinaryFormat implements BaseRow { public static final boolean LITTLE_ENDIAN = (ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN); - private static final long FIRST_BYTE_ZERO = LITTLE_ENDIAN ? 0xFFF0 : 0x0FFF; + private static final long FIRST_BYTE_ZERO = LITTLE_ENDIAN ? ~0xFFL : ~(0xFFL << 56L); public static final int HEADER_SIZE_IN_BITS = 8; public static int calculateBitSetWidthInBytes(int arity) { diff --git a/flink-table/flink-table-runtime-blink/src/test/java/org/apache/flink/table/dataformat/BinaryRowTest.java b/flink-table/flink-table-runtime-blink/src/test/java/org/apache/flink/table/dataformat/BinaryRowTest.java index 2b88c2554fe2a..0be17ddf22995 100644 --- a/flink-table/flink-table-runtime-blink/src/test/java/org/apache/flink/table/dataformat/BinaryRowTest.java +++ b/flink-table/flink-table-runtime-blink/src/test/java/org/apache/flink/table/dataformat/BinaryRowTest.java @@ -289,16 +289,13 @@ public void anyNullTest() throws IOException { assertTrue(row.anyNull()); } - { - BinaryRow row = new BinaryRow(80); + int numFields = 80; + for (int i = 0; i < numFields; i++) { + BinaryRow row = new BinaryRow(numFields); BinaryRowWriter writer = new BinaryRowWriter(row); + row.setHeader((byte) 17); assertFalse(row.anyNull()); - - writer.setNullAt(3); - assertTrue(row.anyNull()); - - writer = new BinaryRowWriter(row); - writer.setNullAt(65); + writer.setNullAt(i); assertTrue(row.anyNull()); } }