DBZ-8189 Return new byte array/buffer when truncating

This commit is contained in:
twthorn 2024-08-29 16:39:32 -04:00 committed by Jiri Pechanec
parent 64063a6d33
commit 9af35440d5
2 changed files with 24 additions and 3 deletions

View File

@ -6,6 +6,7 @@
package io.debezium.relational.mapping;
import java.nio.ByteBuffer;
import java.util.Arrays;
import org.apache.kafka.connect.data.SchemaBuilder;
@ -72,8 +73,7 @@ public Object convert(Object value) {
else if (value instanceof ByteBuffer) {
ByteBuffer buffer = (ByteBuffer) value;
if (buffer.limit() > maxLength) {
buffer.limit(maxLength);
return buffer.slice();
return ByteBuffer.wrap(Arrays.copyOfRange(buffer.array(), 0, maxLength));
}
}
return value;

View File

@ -48,7 +48,7 @@ public void shouldTruncateStrings() {
}
@Test
public void shouldTruncateByteBuffer() {
public void shouldTruncateByteBufferToPositiveLength() {
converter = new TruncateColumn(3).create(column);
ByteBuffer buffer5 = createBuffer(5);
ByteBuffer buffer4 = createBuffer(4);
@ -56,20 +56,41 @@ public void shouldTruncateByteBuffer() {
ByteBuffer buffer2 = createBuffer(2);
ByteBuffer buffer1 = createBuffer(1);
assertThat(converter.convert(buffer5)).isEqualTo(buffer3);
assertThat(((ByteBuffer) converter.convert(buffer5)).array()).isEqualTo(buffer3.array());
assertThat(converter.convert(buffer4)).isEqualTo(buffer3);
assertThat(((ByteBuffer) converter.convert(buffer4)).array()).isEqualTo(buffer3.array());
assertThat(converter.convert(buffer3)).isEqualTo(buffer3);
assertThat(((ByteBuffer) converter.convert(buffer3)).array()).isEqualTo(buffer3.array());
assertThat(converter.convert(buffer2)).isEqualTo(buffer2);
assertThat(((ByteBuffer) converter.convert(buffer2)).array()).isEqualTo(buffer2.array());
assertThat(converter.convert(buffer1)).isEqualTo(buffer1);
assertThat(((ByteBuffer) converter.convert(buffer1)).array()).isEqualTo(buffer1.array());
assertThat(converter.convert(null)).isNull();
}
@Test
public void shouldTruncateByteBufferToZero() {
converter = new TruncateColumn(3).create(column);
ByteBuffer buffer5 = createBuffer(5);
ByteBuffer buffer4 = createBuffer(4);
ByteBuffer buffer3 = createBuffer(3);
ByteBuffer buffer2 = createBuffer(2);
ByteBuffer buffer1 = createBuffer(1);
converter = new TruncateColumn(0).create(column);
ByteBuffer buffer0 = createBuffer(0);
assertThat(converter.convert(buffer5)).isEqualTo(buffer0);
assertThat(((ByteBuffer) converter.convert(buffer5)).array()).isEqualTo(buffer0.array());
assertThat(converter.convert(buffer4)).isEqualTo(buffer0);
assertThat(((ByteBuffer) converter.convert(buffer4)).array()).isEqualTo(buffer0.array());
assertThat(converter.convert(buffer3)).isEqualTo(buffer0);
assertThat(((ByteBuffer) converter.convert(buffer3)).array()).isEqualTo(buffer0.array());
assertThat(converter.convert(buffer2)).isEqualTo(buffer0);
assertThat(((ByteBuffer) converter.convert(buffer2)).array()).isEqualTo(buffer0.array());
assertThat(converter.convert(buffer1)).isEqualTo(buffer0);
assertThat(((ByteBuffer) converter.convert(buffer1)).array()).isEqualTo(buffer0.array());
assertThat(converter.convert(buffer0)).isEqualTo(buffer0);
assertThat(((ByteBuffer) converter.convert(buffer0)).array()).isEqualTo(buffer0.array());
assertThat(converter.convert(null)).isNull();
}