Skip to content

Commit 9227902

Browse files
dfa1claude
andcommitted
refactor: add VarBinArray.getString() and use it everywhere
Replace all `new String(va.getBytes(i), StandardCharsets.UTF_8)` call sites with the new convenience method. Remove now-unused imports. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 6adc421 commit 9227902

8 files changed

Lines changed: 19 additions & 17 deletions

File tree

cli/src/main/java/io/github/dfa1/vortex/cli/FilterCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ private static int compareValue(Array arr, long rowIdx, Comparable<?> value) {
142142
case FloatArray fa -> compareDouble(fa.getFloat(rowIdx), value);
143143
case BoolArray ba -> Boolean.compare(ba.getBoolean(rowIdx), (Boolean) value);
144144
case VarBinArray va -> {
145-
String v = new String(va.getBytes(rowIdx), StandardCharsets.UTF_8);
145+
String v = va.getString(rowIdx);
146146
yield v.compareTo((String) value);
147147
}
148148
default -> throw new IllegalArgumentException(

core/src/main/java/io/github/dfa1/vortex/core/array/VarBinArray.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import java.lang.foreign.MemorySegment;
1010
import java.lang.foreign.ValueLayout;
11+
import java.nio.charset.StandardCharsets;
1112
import java.util.function.IntConsumer;
1213

1314
/// Concrete [Array] for variable-length binary / UTF-8 string columns.
@@ -130,6 +131,10 @@ public byte[] getBytes(long i) {
130131
return out;
131132
}
132133

134+
public String getString(long i) {
135+
return new String(getBytes(i), StandardCharsets.UTF_8);
136+
}
137+
133138
public int getByteLength(long i) {
134139
if (dictCodesSegs != null) {
135140
long code = dictReadCode(i);

core/src/test/java/io/github/dfa1/vortex/core/array/VarBinArrayTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ void getBytes_returnsCorrectBytes() {
4747
VarBinArray sut = of("hello", "world");
4848

4949
// When / Then
50-
assertThat(new String(sut.getBytes(0), StandardCharsets.UTF_8)).isEqualTo("hello");
51-
assertThat(new String(sut.getBytes(1), StandardCharsets.UTF_8)).isEqualTo("world");
50+
assertThat(sut.getString(0)).isEqualTo("hello");
51+
assertThat(sut.getString(1)).isEqualTo("world");
5252
}
5353

5454
@Test
@@ -125,9 +125,9 @@ void getBytes_resolvesViaDict() {
125125
VarBinArray sut = ofDict(new String[]{"foo", "bar"}, new int[]{1, 0, 1});
126126

127127
// When / Then
128-
assertThat(new String(sut.getBytes(0), StandardCharsets.UTF_8)).isEqualTo("bar");
129-
assertThat(new String(sut.getBytes(1), StandardCharsets.UTF_8)).isEqualTo("foo");
130-
assertThat(new String(sut.getBytes(2), StandardCharsets.UTF_8)).isEqualTo("bar");
128+
assertThat(sut.getString(0)).isEqualTo("bar");
129+
assertThat(sut.getString(1)).isEqualTo("foo");
130+
assertThat(sut.getString(2)).isEqualTo("bar");
131131
}
132132

133133
@Test

core/src/test/java/io/github/dfa1/vortex/encoding/DictEncodingTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import java.lang.foreign.MemorySegment;
1414
import java.lang.foreign.ValueLayout;
1515
import java.nio.ByteOrder;
16-
import java.nio.charset.StandardCharsets;
1716
import java.util.stream.Stream;
1817

1918
import static org.assertj.core.api.Assertions.assertThat;
@@ -107,7 +106,7 @@ void encodeDecode_utf8_isLossless(String name, String[] data) {
107106
VarBinArray arr = (VarBinArray) result;
108107
assertThat(arr.length()).isEqualTo(data.length);
109108
for (int i = 0; i < data.length; i++) {
110-
String actual = new String(arr.getBytes(i), StandardCharsets.UTF_8);
109+
String actual = arr.getString(i);
111110
assertThat(actual).as("index %d", i).isEqualTo(data[i]);
112111
}
113112
}

core/src/test/java/io/github/dfa1/vortex/encoding/SparseEncodingTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,9 +308,9 @@ void decode_utf8_withPatches_writesStringsAtIndices() {
308308
VarBinArray varBin = (VarBinArray) result;
309309
assertThat(varBin.length()).isEqualTo(5L);
310310
assertThat(varBin.getByteLength(0)).isZero();
311-
assertThat(new String(varBin.getBytes(1))).isEqualTo("hi");
311+
assertThat(varBin.getString(1)).isEqualTo("hi");
312312
assertThat(varBin.getByteLength(2)).isZero();
313-
assertThat(new String(varBin.getBytes(3))).isEqualTo("bye");
313+
assertThat(varBin.getString(3)).isEqualTo("bye");
314314
assertThat(varBin.getByteLength(4)).isZero();
315315
}
316316

core/src/test/java/io/github/dfa1/vortex/encoding/VarBinViewEncodingTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ void decode_roundtrip_returnsAllStrings(String name, String[] values) {
9191
assertThat(result.length()).isEqualTo(n);
9292
for (int i = 0; i < values.length; i++) {
9393
VarBinArray varBinArray = (VarBinArray) result;
94-
String decoded = new String(varBinArray.getBytes(i), StandardCharsets.UTF_8);
94+
String decoded = varBinArray.getString(i);
9595
assertThat(decoded).as("index %d", i).isEqualTo(values[i]);
9696
}
9797
}

csv/src/main/java/io/github/dfa1/vortex/csv/CsvExporter.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import java.io.FilterWriter;
2121
import java.io.IOException;
2222
import java.io.Writer;
23-
import java.nio.charset.StandardCharsets;
2423
import java.nio.file.Path;
2524
import java.util.List;
2625

@@ -112,7 +111,7 @@ private static String cellValue(Array arr, long rowIdx) {
112111
case DoubleArray da -> Double.toString(da.getDouble(rowIdx));
113112
case FloatArray fa -> Float.toString(fa.getFloat(rowIdx));
114113
case BoolArray ba -> Boolean.toString(ba.getBoolean(rowIdx));
115-
case VarBinArray va -> new String(va.getBytes(rowIdx), StandardCharsets.UTF_8);
114+
case VarBinArray va -> va.getString(rowIdx);
116115
default -> throw new VortexException(
117116
"unsupported array type for CSV export: " + arr.getClass().getSimpleName());
118117
};

csv/src/test/java/io/github/dfa1/vortex/csv/CsvImporterTest.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import org.junit.jupiter.api.Test;
1313
import org.junit.jupiter.api.io.TempDir;
1414

15-
import java.nio.charset.StandardCharsets;
1615
import java.nio.file.Files;
1716
import java.nio.file.Path;
1817

@@ -48,8 +47,8 @@ void infersTypedColumnsAndRoundTrips(@TempDir Path tmp) throws Exception {
4847
assertThat(ids.getLong(0)).isEqualTo(1L);
4948
assertThat(ids.getLong(1)).isEqualTo(2L);
5049
VarBinArray names = chunk.column("name");
51-
assertThat(new String(names.getBytes(0), StandardCharsets.UTF_8)).isEqualTo("Alice");
52-
assertThat(new String(names.getBytes(1), StandardCharsets.UTF_8)).isEqualTo("Bob");
50+
assertThat(names.getString(0)).isEqualTo("Alice");
51+
assertThat(names.getString(1)).isEqualTo("Bob");
5352
}
5453
}
5554
}
@@ -110,7 +109,7 @@ void respectsSchemaOverride(@TempDir Path tmp) throws Exception {
110109
assertThat(iter.hasNext()).isTrue();
111110
ScanResult chunk = iter.next();
112111
VarBinArray values = chunk.column("value");
113-
assertThat(new String(values.getBytes(0), StandardCharsets.UTF_8)).isEqualTo("42");
112+
assertThat(values.getString(0)).isEqualTo("42");
114113
}
115114
}
116115
}

0 commit comments

Comments
 (0)