From b51f61529b8bb7ba2f1e9622a69fd524f6ae5495 Mon Sep 17 00:00:00 2001 From: liyafan82 Date: Mon, 1 Jul 2019 16:37:18 +0800 Subject: [PATCH] [FLINK-12879][Table SQL / Runtime] Restore the logic for writing string This reverts commit a938dd7ea39a694cb2bd74ac9467c8f9fe67f878. --- .../dataformat/AbstractBinaryWriter.java | 25 +++---------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/flink-table/flink-table-runtime-blink/src/main/java/org/apache/flink/table/dataformat/AbstractBinaryWriter.java b/flink-table/flink-table-runtime-blink/src/main/java/org/apache/flink/table/dataformat/AbstractBinaryWriter.java index 957b4aec452a3..5a6ba55e7f6f0 100644 --- a/flink-table/flink-table-runtime-blink/src/main/java/org/apache/flink/table/dataformat/AbstractBinaryWriter.java +++ b/flink-table/flink-table-runtime-blink/src/main/java/org/apache/flink/table/dataformat/AbstractBinaryWriter.java @@ -78,7 +78,9 @@ public void writeString(int pos, BinaryString input) { } else { int len = input.getSizeInBytes(); if (len <= MAX_FIX_PART_DATA_SIZE) { - writeBytesToFixLenPart(segment, getFieldOffset(pos), input.getSegments(), input.getOffset(), len); + byte[] bytes = SegmentsUtil.allocateReuseBytes(len); + SegmentsUtil.copyToBytes(input.getSegments(), input.getOffset(), bytes, 0, len); + writeBytesToFixLenPart(segment, getFieldOffset(pos), bytes, len); } else { writeSegmentsToVarLenPart(pos, input.getSegments(), input.getOffset(), len); } @@ -300,27 +302,6 @@ private static void writeBytesToFixLenPart( segment.putLong(fieldOffset, offsetAndSize); } - private static void writeBytesToFixLenPart( - MemorySegment segment, int fieldOffset, MemorySegment[] srcSegments, int srcOffset, int len) { - long firstByte = len | 0x80; // first bit is 1, other bits is len - long sevenBytes = 0L; // real data - if (BinaryRow.LITTLE_ENDIAN) { - for (int i = 0; i < len; i++) { - byte b = SegmentsUtil.getByte(srcSegments, srcOffset + i); - sevenBytes |= ((0x00000000000000FFL & b) << (i * 8L)); - } - } else { - for (int i = 0; i < len; i++) { - byte b = SegmentsUtil.getByte(srcSegments, srcOffset + i); - sevenBytes |= ((0x00000000000000FFL & b) << ((6 - i) * 8L)); - } - } - - final long offsetAndSize = (firstByte << 56) | sevenBytes; - - segment.putLong(fieldOffset, offsetAndSize); - } - /** * OutputView for write Generic. */