Skip to content

Commit dfd280f

Browse files
committed
GH-37705: [Java] Extra input methods for VarChar writers
Add write() methods for Text and String types. Ensure these methods are part of the writer interfaces and not just the Impls.
1 parent 2895af4 commit dfd280f

File tree

3 files changed

+88
-17
lines changed

3 files changed

+88
-17
lines changed

java/vector/src/main/codegen/templates/AbstractFieldWriter.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,16 @@ public void write(${name}Holder holder) {
142142
}
143143
</#if>
144144

145+
<#if minor.class?ends_with("VarChar")>
146+
public void write${minor.class}(${friendlyType} value) {
147+
fail("${name}");
148+
}
149+
150+
public void write${minor.class}(String value) {
151+
fail("${name}");
152+
}
153+
</#if>
154+
145155
</#list></#list>
146156

147157
public void writeNull() {

java/vector/src/main/codegen/templates/ComplexWriters.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,11 +120,18 @@ public void write(Nullable${minor.class}Holder h) {
120120
}
121121
</#if>
122122
123-
<#if minor.class == "VarChar">
123+
<#if minor.class?ends_with("VarChar")>
124+
@Override
124125
public void write${minor.class}(${friendlyType} value) {
125126
vector.setSafe(idx(), value);
126127
vector.setValueCount(idx()+1);
127128
}
129+
130+
@Override
131+
public void write${minor.class}(String value) {
132+
vector.setSafe(idx(), new Text(value));
133+
vector.setValueCount(idx()+1);
134+
}
128135
</#if>
129136
130137
<#if minor.class?starts_with("Decimal")>
@@ -256,6 +263,11 @@ public interface ${eName}Writer extends BaseWriter {
256263
public void writeTo${minor.class}(ByteBuffer value, int offset, int length);
257264
</#if>
258265
266+
<#if minor.class?ends_with("VarChar")>
267+
public void write${minor.class}(${friendlyType} value);
268+
269+
public void write${minor.class}(String value);
270+
</#if>
259271
}
260272

261273
</#list>

java/vector/src/test/java/org/apache/arrow/vector/complex/writer/TestSimpleWriter.java

Lines changed: 65 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,14 @@
2222
import org.apache.arrow.memory.BufferAllocator;
2323
import org.apache.arrow.memory.RootAllocator;
2424
import org.apache.arrow.vector.LargeVarBinaryVector;
25+
import org.apache.arrow.vector.LargeVarCharVector;
2526
import org.apache.arrow.vector.VarBinaryVector;
27+
import org.apache.arrow.vector.VarCharVector;
2628
import org.apache.arrow.vector.complex.impl.LargeVarBinaryWriterImpl;
29+
import org.apache.arrow.vector.complex.impl.LargeVarCharWriterImpl;
2730
import org.apache.arrow.vector.complex.impl.VarBinaryWriterImpl;
31+
import org.apache.arrow.vector.complex.impl.VarCharWriterImpl;
32+
import org.apache.arrow.vector.util.Text;
2833
import org.junit.After;
2934
import org.junit.Assert;
3035
import org.junit.Before;
@@ -45,9 +50,9 @@ public void terminate() throws Exception {
4550
}
4651

4752
@Test
48-
public void testWriteByteArrayToVarBinary() {
53+
public void testWriteByteArrayToVarBinary() throws Exception {
4954
try (VarBinaryVector vector = new VarBinaryVector("test", allocator);
50-
VarBinaryWriterImpl writer = new VarBinaryWriterImpl(vector)) {
55+
VarBinaryWriter writer = new VarBinaryWriterImpl(vector)) {
5156
byte[] input = new byte[] { 0x01, 0x02 };
5257
writer.writeToVarBinary(input);
5358
byte[] result = vector.get(0);
@@ -56,9 +61,9 @@ public void testWriteByteArrayToVarBinary() {
5661
}
5762

5863
@Test
59-
public void testWriteByteArrayWithOffsetToVarBinary() {
64+
public void testWriteByteArrayWithOffsetToVarBinary() throws Exception {
6065
try (VarBinaryVector vector = new VarBinaryVector("test", allocator);
61-
VarBinaryWriterImpl writer = new VarBinaryWriterImpl(vector)) {
66+
VarBinaryWriter writer = new VarBinaryWriterImpl(vector)) {
6267
byte[] input = new byte[] { 0x01, 0x02 };
6368
writer.writeToVarBinary(input, 1, 1);
6469
byte[] result = vector.get(0);
@@ -67,9 +72,9 @@ public void testWriteByteArrayWithOffsetToVarBinary() {
6772
}
6873

6974
@Test
70-
public void testWriteByteBufferToVarBinary() {
75+
public void testWriteByteBufferToVarBinary() throws Exception {
7176
try (VarBinaryVector vector = new VarBinaryVector("test", allocator);
72-
VarBinaryWriterImpl writer = new VarBinaryWriterImpl(vector)) {
77+
VarBinaryWriter writer = new VarBinaryWriterImpl(vector)) {
7378
byte[] input = new byte[] { 0x01, 0x02 };
7479
ByteBuffer buffer = ByteBuffer.wrap(input);
7580
writer.writeToVarBinary(buffer);
@@ -79,9 +84,9 @@ public void testWriteByteBufferToVarBinary() {
7984
}
8085

8186
@Test
82-
public void testWriteByteBufferWithOffsetToVarBinary() {
87+
public void testWriteByteBufferWithOffsetToVarBinary() throws Exception {
8388
try (VarBinaryVector vector = new VarBinaryVector("test", allocator);
84-
VarBinaryWriterImpl writer = new VarBinaryWriterImpl(vector)) {
89+
VarBinaryWriter writer = new VarBinaryWriterImpl(vector)) {
8590
byte[] input = new byte[] { 0x01, 0x02 };
8691
ByteBuffer buffer = ByteBuffer.wrap(input);
8792
writer.writeToVarBinary(buffer, 1, 1);
@@ -91,9 +96,9 @@ public void testWriteByteBufferWithOffsetToVarBinary() {
9196
}
9297

9398
@Test
94-
public void testWriteByteArrayToLargeVarBinary() {
99+
public void testWriteByteArrayToLargeVarBinary() throws Exception {
95100
try (LargeVarBinaryVector vector = new LargeVarBinaryVector("test", allocator);
96-
LargeVarBinaryWriterImpl writer = new LargeVarBinaryWriterImpl(vector)) {
101+
LargeVarBinaryWriter writer = new LargeVarBinaryWriterImpl(vector)) {
97102
byte[] input = new byte[] { 0x01, 0x02 };
98103
writer.writeToLargeVarBinary(input);
99104
byte[] result = vector.get(0);
@@ -102,9 +107,9 @@ public void testWriteByteArrayToLargeVarBinary() {
102107
}
103108

104109
@Test
105-
public void testWriteByteArrayWithOffsetToLargeVarBinary() {
110+
public void testWriteByteArrayWithOffsetToLargeVarBinary() throws Exception {
106111
try (LargeVarBinaryVector vector = new LargeVarBinaryVector("test", allocator);
107-
LargeVarBinaryWriterImpl writer = new LargeVarBinaryWriterImpl(vector)) {
112+
LargeVarBinaryWriter writer = new LargeVarBinaryWriterImpl(vector)) {
108113
byte[] input = new byte[] { 0x01, 0x02 };
109114
writer.writeToLargeVarBinary(input, 1, 1);
110115
byte[] result = vector.get(0);
@@ -113,9 +118,9 @@ public void testWriteByteArrayWithOffsetToLargeVarBinary() {
113118
}
114119

115120
@Test
116-
public void testWriteByteBufferToLargeVarBinary() {
121+
public void testWriteByteBufferToLargeVarBinary() throws Exception {
117122
try (LargeVarBinaryVector vector = new LargeVarBinaryVector("test", allocator);
118-
LargeVarBinaryWriterImpl writer = new LargeVarBinaryWriterImpl(vector)) {
123+
LargeVarBinaryWriter writer = new LargeVarBinaryWriterImpl(vector)) {
119124
byte[] input = new byte[] { 0x01, 0x02 };
120125
ByteBuffer buffer = ByteBuffer.wrap(input);
121126
writer.writeToLargeVarBinary(buffer);
@@ -125,14 +130,58 @@ public void testWriteByteBufferToLargeVarBinary() {
125130
}
126131

127132
@Test
128-
public void testWriteByteBufferWithOffsetToLargeVarBinary() {
133+
public void testWriteByteBufferWithOffsetToLargeVarBinary() throws Exception {
129134
try (LargeVarBinaryVector vector = new LargeVarBinaryVector("test", allocator);
130-
LargeVarBinaryWriterImpl writer = new LargeVarBinaryWriterImpl(vector)) {
135+
LargeVarBinaryWriter writer = new LargeVarBinaryWriterImpl(vector)) {
131136
byte[] input = new byte[] { 0x01, 0x02 };
132137
ByteBuffer buffer = ByteBuffer.wrap(input);
133138
writer.writeToLargeVarBinary(buffer, 1, 1);
134139
byte[] result = vector.get(0);
135140
Assert.assertArrayEquals(new byte[] { 0x02 }, result);
136141
}
137142
}
143+
144+
@Test
145+
public void testWriteStringToVarChar() throws Exception {
146+
try (VarCharVector vector = new VarCharVector("test", allocator);
147+
VarCharWriter writer = new VarCharWriterImpl(vector)) {
148+
String input = "testInput";
149+
writer.writeVarChar(input);
150+
String result = vector.getObject(0).toString();
151+
Assert.assertEquals(input, result);
152+
}
153+
}
154+
155+
@Test
156+
public void testWriteTextToVarChar() throws Exception {
157+
try (VarCharVector vector = new VarCharVector("test", allocator);
158+
VarCharWriter writer = new VarCharWriterImpl(vector)) {
159+
String input = "testInput";
160+
writer.writeVarChar(new Text(input));
161+
String result = vector.getObject(0).toString();
162+
Assert.assertEquals(input, result);
163+
}
164+
}
165+
166+
@Test
167+
public void testWriteStringToLargeVarChar() throws Exception {
168+
try (LargeVarCharVector vector = new LargeVarCharVector("test", allocator);
169+
LargeVarCharWriter writer = new LargeVarCharWriterImpl(vector)) {
170+
String input = "testInput";
171+
writer.writeLargeVarChar(input);
172+
String result = vector.getObject(0).toString();
173+
Assert.assertEquals(input, result);
174+
}
175+
}
176+
177+
@Test
178+
public void testWriteTextToLargeVarChar() throws Exception {
179+
try (LargeVarCharVector vector = new LargeVarCharVector("test", allocator);
180+
LargeVarCharWriter writer = new LargeVarCharWriterImpl(vector)) {
181+
String input = "testInput";
182+
writer.writeLargeVarChar(new Text(input));
183+
String result = vector.getObject(0).toString();
184+
Assert.assertEquals(input, result);
185+
}
186+
}
138187
}

0 commit comments

Comments
 (0)