Skip to content

Commit 1c786d4

Browse files
committed
GH-110: Flight SQL JDBC related StringView components implementation
1 parent 03e0d4d commit 1c786d4

File tree

6 files changed

+35
-5
lines changed

6 files changed

+35
-5
lines changed

flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/converter/impl/BinaryViewAvaticaParameterConverter.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.apache.arrow.driver.jdbc.converter.impl;
1818

1919
import org.apache.arrow.vector.FieldVector;
20+
import org.apache.arrow.vector.ViewVarBinaryVector;
2021
import org.apache.arrow.vector.types.pojo.ArrowType;
2122
import org.apache.arrow.vector.types.pojo.Field;
2223
import org.apache.calcite.avatica.AvaticaParameter;
@@ -29,7 +30,12 @@ public BinaryViewAvaticaParameterConverter(ArrowType.BinaryView type) {}
2930

3031
@Override
3132
public boolean bindParameter(FieldVector vector, TypedValue typedValue, int index) {
32-
throw new UnsupportedOperationException("Not implemented");
33+
byte[] value = (byte[]) typedValue.toJdbc(null);
34+
if (vector instanceof ViewVarBinaryVector) {
35+
((ViewVarBinaryVector) vector).setSafe(index, value);
36+
return true;
37+
}
38+
return false;
3339
}
3440

3541
@Override

flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/converter/impl/Utf8ViewAvaticaParameterConverter.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717
package org.apache.arrow.driver.jdbc.converter.impl;
1818

1919
import org.apache.arrow.vector.FieldVector;
20+
import org.apache.arrow.vector.ViewVarCharVector;
2021
import org.apache.arrow.vector.types.pojo.ArrowType;
2122
import org.apache.arrow.vector.types.pojo.Field;
23+
import org.apache.arrow.vector.util.Text;
2224
import org.apache.calcite.avatica.AvaticaParameter;
2325
import org.apache.calcite.avatica.remote.TypedValue;
2426

@@ -29,7 +31,12 @@ public Utf8ViewAvaticaParameterConverter(ArrowType.Utf8View type) {}
2931

3032
@Override
3133
public boolean bindParameter(FieldVector vector, TypedValue typedValue, int index) {
32-
throw new UnsupportedOperationException("Utf8View not supported");
34+
String value = (String) typedValue.toLocal();
35+
if (vector instanceof ViewVarCharVector) {
36+
((ViewVarCharVector) vector).setSafe(index, new Text(value));
37+
return true;
38+
}
39+
return false;
3340
}
3441

3542
@Override

flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/utils/AvaticaParameterBinder.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.List;
2020
import org.apache.arrow.driver.jdbc.client.ArrowFlightSqlClientHandler.PreparedStatement;
2121
import org.apache.arrow.driver.jdbc.converter.impl.BinaryAvaticaParameterConverter;
22+
import org.apache.arrow.driver.jdbc.converter.impl.BinaryViewAvaticaParameterConverter;
2223
import org.apache.arrow.driver.jdbc.converter.impl.BoolAvaticaParameterConverter;
2324
import org.apache.arrow.driver.jdbc.converter.impl.DateAvaticaParameterConverter;
2425
import org.apache.arrow.driver.jdbc.converter.impl.DecimalAvaticaParameterConverter;
@@ -39,6 +40,7 @@
3940
import org.apache.arrow.driver.jdbc.converter.impl.TimestampAvaticaParameterConverter;
4041
import org.apache.arrow.driver.jdbc.converter.impl.UnionAvaticaParameterConverter;
4142
import org.apache.arrow.driver.jdbc.converter.impl.Utf8AvaticaParameterConverter;
43+
import org.apache.arrow.driver.jdbc.converter.impl.Utf8ViewAvaticaParameterConverter;
4244
import org.apache.arrow.memory.BufferAllocator;
4345
import org.apache.arrow.vector.FieldVector;
4446
import org.apache.arrow.vector.VectorSchemaRoot;
@@ -208,7 +210,7 @@ public Boolean visit(ArrowType.Utf8 type) {
208210

209211
@Override
210212
public Boolean visit(ArrowType.Utf8View type) {
211-
throw new UnsupportedOperationException("Utf8View is unsupported");
213+
return new Utf8ViewAvaticaParameterConverter(type).bindParameter(vector, typedValue, index);
212214
}
213215

214216
@Override
@@ -223,7 +225,7 @@ public Boolean visit(ArrowType.Binary type) {
223225

224226
@Override
225227
public Boolean visit(ArrowType.BinaryView type) {
226-
throw new UnsupportedOperationException("BinaryView is unsupported");
228+
return new BinaryViewAvaticaParameterConverter(type).bindParameter(vector, typedValue, index);
227229
}
228230

229231
@Override

flight/flight-sql-jdbc-core/src/main/java/org/apache/arrow/driver/jdbc/utils/SqlTypes.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,14 @@ public static int getSqlTypeIdFromArrowType(ArrowType arrowType) {
107107
}
108108
break;
109109
case Binary:
110+
case BinaryView:
110111
return Types.VARBINARY;
111112
case FixedSizeBinary:
112113
return Types.BINARY;
113114
case LargeBinary:
114115
return Types.LONGVARBINARY;
115116
case Utf8:
117+
case Utf8View:
116118
return Types.VARCHAR;
117119
case LargeUtf8:
118120
return Types.LONGVARCHAR;

flight/flight-sql-jdbc-core/src/test/java/org/apache/arrow/driver/jdbc/utils/ConvertUtilsTest.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public void testShouldConvertArrowFieldsToColumnMetaDataList() {
6161
"col1",
6262
new FieldType(
6363
true,
64-
ArrowType.Utf8.INSTANCE,
64+
ArrowType.Utf8View.INSTANCE,
6565
null,
6666
new FlightSqlColumnMetadata.Builder()
6767
.catalogName("catalog1")
@@ -78,6 +78,13 @@ public void testShouldConvertArrowFieldsToColumnMetaDataList() {
7878
.setCatalogName("catalog1")
7979
.setSchemaName("schema1")
8080
.setTableName("table1")
81+
.setColumnName("col1")
82+
.setType(
83+
Common.AvaticaType.newBuilder()
84+
.setId(SqlTypes.getSqlTypeIdFromArrowType(ArrowType.Utf8View.INSTANCE))
85+
.setName(
86+
SqlTypes.getSqlTypeNameFromArrowType(ArrowType.Utf8View.INSTANCE))
87+
.build())
8188
.build()));
8289

8390
final List<ColumnMetaData> actualColumnMetaData =
@@ -95,6 +102,8 @@ private void assertColumnMetaData(
95102
assertThat(expectedColumnMetaData.catalogName, equalTo(actualColumnMetaData.catalogName));
96103
assertThat(expectedColumnMetaData.schemaName, equalTo(actualColumnMetaData.schemaName));
97104
assertThat(expectedColumnMetaData.tableName, equalTo(actualColumnMetaData.tableName));
105+
assertThat(expectedColumnMetaData.columnName, equalTo(actualColumnMetaData.columnName));
106+
assertThat(expectedColumnMetaData.type, equalTo(actualColumnMetaData.type));
98107
assertThat(expectedColumnMetaData.readOnly, equalTo(actualColumnMetaData.readOnly));
99108
assertThat(expectedColumnMetaData.autoIncrement, equalTo(actualColumnMetaData.autoIncrement));
100109
assertThat(expectedColumnMetaData.precision, equalTo(actualColumnMetaData.precision));

flight/flight-sql-jdbc-core/src/test/java/org/apache/arrow/driver/jdbc/utils/SqlTypesTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,11 @@ public void testGetSqlTypeIdFromArrowType() {
4040

4141
assertEquals(Types.BINARY, getSqlTypeIdFromArrowType(new ArrowType.FixedSizeBinary(1024)));
4242
assertEquals(Types.VARBINARY, getSqlTypeIdFromArrowType(new ArrowType.Binary()));
43+
assertEquals(Types.VARBINARY, getSqlTypeIdFromArrowType(new ArrowType.BinaryView()));
4344
assertEquals(Types.LONGVARBINARY, getSqlTypeIdFromArrowType(new ArrowType.LargeBinary()));
4445

4546
assertEquals(Types.VARCHAR, getSqlTypeIdFromArrowType(new ArrowType.Utf8()));
47+
assertEquals(Types.VARCHAR, getSqlTypeIdFromArrowType(new ArrowType.Utf8View()));
4648
assertEquals(Types.LONGVARCHAR, getSqlTypeIdFromArrowType(new ArrowType.LargeUtf8()));
4749

4850
assertEquals(Types.DATE, getSqlTypeIdFromArrowType(new ArrowType.Date(DateUnit.MILLISECOND)));
@@ -94,9 +96,11 @@ public void testGetSqlTypeNameFromArrowType() {
9496

9597
assertEquals("BINARY", getSqlTypeNameFromArrowType(new ArrowType.FixedSizeBinary(1024)));
9698
assertEquals("VARBINARY", getSqlTypeNameFromArrowType(new ArrowType.Binary()));
99+
assertEquals("VARBINARY", getSqlTypeNameFromArrowType(new ArrowType.BinaryView()));
97100
assertEquals("LONGVARBINARY", getSqlTypeNameFromArrowType(new ArrowType.LargeBinary()));
98101

99102
assertEquals("VARCHAR", getSqlTypeNameFromArrowType(new ArrowType.Utf8()));
103+
assertEquals("VARCHAR", getSqlTypeNameFromArrowType(new ArrowType.Utf8View()));
100104
assertEquals("LONGVARCHAR", getSqlTypeNameFromArrowType(new ArrowType.LargeUtf8()));
101105

102106
assertEquals("DATE", getSqlTypeNameFromArrowType(new ArrowType.Date(DateUnit.MILLISECOND)));

0 commit comments

Comments
 (0)