Skip to content

Commit 03091a8

Browse files
author
Mike Pigott
committed
Unit tests for including result set metadata.
1 parent 72d64cc commit 03091a8

File tree

9 files changed

+115
-9
lines changed

9 files changed

+115
-9
lines changed

java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrow.java

-5
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,6 @@
6868
*/
6969
public class JdbcToArrow {
7070

71-
public static final String SQL_CATALOG_NAME_KEY = "SQL_CATALOG_NAME";
72-
public static final String SQL_TABLE_NAME_KEY = "SQL_TABLE_NAME";
73-
public static final String SQL_COLUMN_NAME_KEY = "SQL_COLUMN_NAME";
74-
public static final String SQL_TYPE_KEY = "SQL_TYPE";
75-
7671
/**
7772
* For the given SQL query, execute and fetch the data from Relational DB and convert it to Arrow objects.
7873
* This method uses the default Calendar instance with default TimeZone and Locale as returned by the JVM.

java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowUtils.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -157,10 +157,10 @@ public static Schema jdbcToArrowSchema(ResultSetMetaData rsmd, JdbcToArrowConfig
157157
final Map<String, String> metadata;
158158
if (config.getIncludeMetadata()) {
159159
metadata = new HashMap<String, String>();
160-
metadata.put(JdbcToArrow.SQL_CATALOG_NAME_KEY, rsmd.getCatalogName(i));
161-
metadata.put(JdbcToArrow.SQL_TABLE_NAME_KEY, rsmd.getTableName(i));
162-
metadata.put(JdbcToArrow.SQL_COLUMN_NAME_KEY, columnName);
163-
metadata.put(JdbcToArrow.SQL_TYPE_KEY, rsmd.getColumnTypeName(i));
160+
metadata.put(Constants.SQL_CATALOG_NAME_KEY, rsmd.getCatalogName(i));
161+
metadata.put(Constants.SQL_TABLE_NAME_KEY, rsmd.getTableName(i));
162+
metadata.put(Constants.SQL_COLUMN_NAME_KEY, columnName);
163+
metadata.put(Constants.SQL_TYPE_KEY, rsmd.getColumnTypeName(i));
164164

165165
} else {
166166
metadata = null;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package org.apache.arrow.adapter.jdbc;
19+
20+
public class Constants {
21+
22+
public static final String SQL_CATALOG_NAME_KEY = "SQL_CATALOG_NAME";
23+
public static final String SQL_TABLE_NAME_KEY = "SQL_TABLE_NAME";
24+
public static final String SQL_COLUMN_NAME_KEY = "SQL_COLUMN_NAME";
25+
public static final String SQL_TYPE_KEY = "SQL_TYPE";
26+
27+
}

java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/JdbcToArrowTestHelper.java

+29
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424

2525
import java.math.BigDecimal;
2626
import java.nio.charset.Charset;
27+
import java.sql.ResultSetMetaData;
28+
import java.sql.SQLException;
29+
import java.util.List;
30+
import java.util.Map;
2731

2832
import org.apache.arrow.vector.BaseValueVector;
2933
import org.apache.arrow.vector.BigIntVector;
@@ -41,6 +45,7 @@
4145
import org.apache.arrow.vector.VarCharVector;
4246
import org.apache.arrow.vector.VectorSchemaRoot;
4347
import org.apache.arrow.vector.types.pojo.Field;
48+
import org.apache.arrow.vector.types.pojo.Schema;
4449

4550
/**
4651
* This is a Helper class which has functionalities to read and assert the values from the given FieldVector object.
@@ -179,6 +184,30 @@ public static void assertFieldMetadataIsEmpty(VectorSchemaRoot schema) {
179184
}
180185
}
181186

187+
public static void assertFieldMetadataMatchesResultSetMetadata(ResultSetMetaData rsmd, Schema schema)
188+
throws SQLException {
189+
assertNotNull(schema);
190+
assertNotNull(schema.getFields());
191+
assertNotNull(rsmd);
192+
193+
List<Field> fields = schema.getFields();
194+
195+
assertEquals(rsmd.getColumnCount(), fields.size());
196+
197+
// Vector columns are created in the same order as ResultSet columns.
198+
for (int i = 0; i < rsmd.getColumnCount(); ++i) {
199+
Map<String, String> metadata = fields.get(i).getMetadata();
200+
201+
assertNotNull(metadata);
202+
assertEquals(4, metadata.size());
203+
204+
assertEquals(rsmd.getCatalogName(i + 1), metadata.get(Constants.SQL_CATALOG_NAME_KEY));
205+
assertEquals(rsmd.getTableName(i + 1), metadata.get(Constants.SQL_TABLE_NAME_KEY));
206+
assertEquals(rsmd.getColumnName(i + 1), metadata.get(Constants.SQL_COLUMN_NAME_KEY));
207+
assertEquals(rsmd.getColumnTypeName(i + 1), metadata.get(Constants.SQL_TYPE_KEY));
208+
}
209+
}
210+
182211
public static byte[] hexStringToByteArray(String s) {
183212
int len = s.length();
184213
byte[] data = new byte[len / 2];

java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/h2/JdbcToArrowCharSetTest.java

+11
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.io.IOException;
2424
import java.nio.charset.StandardCharsets;
2525
import java.sql.DriverManager;
26+
import java.sql.ResultSetMetaData;
2627
import java.sql.SQLException;
2728
import java.sql.Statement;
2829
import java.util.Arrays;
@@ -33,10 +34,12 @@
3334
import org.apache.arrow.adapter.jdbc.JdbcToArrow;
3435
import org.apache.arrow.adapter.jdbc.JdbcToArrowConfig;
3536
import org.apache.arrow.adapter.jdbc.JdbcToArrowTestHelper;
37+
import org.apache.arrow.adapter.jdbc.JdbcToArrowUtils;
3638
import org.apache.arrow.adapter.jdbc.Table;
3739
import org.apache.arrow.memory.RootAllocator;
3840
import org.apache.arrow.vector.VarCharVector;
3941
import org.apache.arrow.vector.VectorSchemaRoot;
42+
import org.apache.arrow.vector.types.pojo.Schema;
4043
import org.junit.Before;
4144
import org.junit.Test;
4245
import org.junit.runner.RunWith;
@@ -127,6 +130,14 @@ public void testJdbcToArroValues() throws SQLException, IOException {
127130
new JdbcToArrowConfig(new RootAllocator(Integer.MAX_VALUE), Calendar.getInstance())));
128131
}
129132

133+
@Test
134+
public void testJdbcSchemaMetadata() throws SQLException {
135+
JdbcToArrowConfig config = new JdbcToArrowConfig(new RootAllocator(0), Calendar.getInstance(), true);
136+
ResultSetMetaData rsmd = conn.createStatement().executeQuery(table.getQuery()).getMetaData();
137+
Schema schema = JdbcToArrowUtils.jdbcToArrowSchema(rsmd, config);
138+
JdbcToArrowTestHelper.assertFieldMetadataMatchesResultSetMetadata(rsmd, schema);
139+
}
140+
130141
/**
131142
* This method calls the assert methods for various DataSets.
132143
*

java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/h2/JdbcToArrowDataTypesTest.java

+11
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import static org.apache.arrow.adapter.jdbc.JdbcToArrowTestHelper.assertVarcharVectorValues;
3434

3535
import java.io.IOException;
36+
import java.sql.ResultSetMetaData;
3637
import java.sql.SQLException;
3738
import java.util.Arrays;
3839
import java.util.Calendar;
@@ -42,6 +43,7 @@
4243
import org.apache.arrow.adapter.jdbc.JdbcToArrow;
4344
import org.apache.arrow.adapter.jdbc.JdbcToArrowConfig;
4445
import org.apache.arrow.adapter.jdbc.JdbcToArrowTestHelper;
46+
import org.apache.arrow.adapter.jdbc.JdbcToArrowUtils;
4547
import org.apache.arrow.adapter.jdbc.Table;
4648
import org.apache.arrow.memory.RootAllocator;
4749
import org.apache.arrow.vector.BigIntVector;
@@ -58,6 +60,7 @@
5860
import org.apache.arrow.vector.VarBinaryVector;
5961
import org.apache.arrow.vector.VarCharVector;
6062
import org.apache.arrow.vector.VectorSchemaRoot;
63+
import org.apache.arrow.vector.types.pojo.Schema;
6164
import org.junit.Test;
6265
import org.junit.runner.RunWith;
6366
import org.junit.runners.Parameterized;
@@ -153,6 +156,14 @@ public void testJdbcToArroValues() throws SQLException, IOException {
153156
new JdbcToArrowConfig(new RootAllocator(Integer.MAX_VALUE), Calendar.getInstance())));
154157
}
155158

159+
@Test
160+
public void testJdbcSchemaMetadata() throws SQLException {
161+
JdbcToArrowConfig config = new JdbcToArrowConfig(new RootAllocator(0), Calendar.getInstance(), true);
162+
ResultSetMetaData rsmd = conn.createStatement().executeQuery(table.getQuery()).getMetaData();
163+
Schema schema = JdbcToArrowUtils.jdbcToArrowSchema(rsmd, config);
164+
JdbcToArrowTestHelper.assertFieldMetadataMatchesResultSetMetadata(rsmd, schema);
165+
}
166+
156167
/**
157168
* This method calls the assert methods for various DataSets.
158169
*

java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/h2/JdbcToArrowNullTest.java

+10
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import static org.apache.arrow.adapter.jdbc.JdbcToArrowTestHelper.assertNullValues;
2121

2222
import java.io.IOException;
23+
import java.sql.ResultSetMetaData;
2324
import java.sql.SQLException;
2425
import java.util.Arrays;
2526
import java.util.Calendar;
@@ -29,6 +30,7 @@
2930
import org.apache.arrow.adapter.jdbc.JdbcToArrow;
3031
import org.apache.arrow.adapter.jdbc.JdbcToArrowConfig;
3132
import org.apache.arrow.adapter.jdbc.JdbcToArrowTestHelper;
33+
import org.apache.arrow.adapter.jdbc.JdbcToArrowUtils;
3234
import org.apache.arrow.adapter.jdbc.Table;
3335
import org.apache.arrow.memory.RootAllocator;
3436
import org.apache.arrow.vector.BigIntVector;
@@ -45,6 +47,7 @@
4547
import org.apache.arrow.vector.VarBinaryVector;
4648
import org.apache.arrow.vector.VarCharVector;
4749
import org.apache.arrow.vector.VectorSchemaRoot;
50+
import org.apache.arrow.vector.types.pojo.Schema;
4851
import org.junit.Test;
4952
import org.junit.runner.RunWith;
5053
import org.junit.runners.Parameterized;
@@ -110,6 +113,13 @@ public void testJdbcToArroValues() throws SQLException, IOException {
110113
new JdbcToArrowConfig(new RootAllocator(Integer.MAX_VALUE), Calendar.getInstance())));
111114
}
112115

116+
@Test
117+
public void testJdbcSchemaMetadata() throws SQLException {
118+
JdbcToArrowConfig config = new JdbcToArrowConfig(new RootAllocator(0), Calendar.getInstance(), true);
119+
ResultSetMetaData rsmd = conn.createStatement().executeQuery(table.getQuery()).getMetaData();
120+
Schema schema = JdbcToArrowUtils.jdbcToArrowSchema(rsmd, config);
121+
JdbcToArrowTestHelper.assertFieldMetadataMatchesResultSetMetadata(rsmd, schema);
122+
}
113123

114124
/**
115125
* This method calls the assert methods for various DataSets.

java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/h2/JdbcToArrowTest.java

+11
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import static org.apache.arrow.adapter.jdbc.JdbcToArrowTestHelper.getLongValues;
4242

4343
import java.io.IOException;
44+
import java.sql.ResultSetMetaData;
4445
import java.sql.SQLException;
4546
import java.util.Arrays;
4647
import java.util.Calendar;
@@ -50,6 +51,7 @@
5051
import org.apache.arrow.adapter.jdbc.JdbcToArrow;
5152
import org.apache.arrow.adapter.jdbc.JdbcToArrowConfig;
5253
import org.apache.arrow.adapter.jdbc.JdbcToArrowTestHelper;
54+
import org.apache.arrow.adapter.jdbc.JdbcToArrowUtils;
5355
import org.apache.arrow.adapter.jdbc.Table;
5456
import org.apache.arrow.memory.RootAllocator;
5557
import org.apache.arrow.vector.BigIntVector;
@@ -66,6 +68,7 @@
6668
import org.apache.arrow.vector.VarBinaryVector;
6769
import org.apache.arrow.vector.VarCharVector;
6870
import org.apache.arrow.vector.VectorSchemaRoot;
71+
import org.apache.arrow.vector.types.pojo.Schema;
6972
import org.junit.Test;
7073
import org.junit.runner.RunWith;
7174
import org.junit.runners.Parameterized;
@@ -144,6 +147,14 @@ public void testJdbcToArroValues() throws SQLException, IOException {
144147
new JdbcToArrowConfig(new RootAllocator(Integer.MAX_VALUE), Calendar.getInstance())));
145148
}
146149

150+
@Test
151+
public void testJdbcSchemaMetadata() throws SQLException {
152+
JdbcToArrowConfig config = new JdbcToArrowConfig(new RootAllocator(0), Calendar.getInstance(), true);
153+
ResultSetMetaData rsmd = conn.createStatement().executeQuery(table.getQuery()).getMetaData();
154+
Schema schema = JdbcToArrowUtils.jdbcToArrowSchema(rsmd, config);
155+
JdbcToArrowTestHelper.assertFieldMetadataMatchesResultSetMetadata(rsmd, schema);
156+
}
157+
147158
/**
148159
* This method calls the assert methods for various DataSets.
149160
*

java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/h2/JdbcToArrowTimeZoneTest.java

+12
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import static org.apache.arrow.adapter.jdbc.JdbcToArrowTestHelper.assertTimeVectorValues;
2323

2424
import java.io.IOException;
25+
import java.sql.ResultSetMetaData;
2526
import java.sql.SQLException;
2627
import java.util.Arrays;
2728
import java.util.Calendar;
@@ -32,12 +33,14 @@
3233
import org.apache.arrow.adapter.jdbc.JdbcToArrow;
3334
import org.apache.arrow.adapter.jdbc.JdbcToArrowConfig;
3435
import org.apache.arrow.adapter.jdbc.JdbcToArrowTestHelper;
36+
import org.apache.arrow.adapter.jdbc.JdbcToArrowUtils;
3537
import org.apache.arrow.adapter.jdbc.Table;
3638
import org.apache.arrow.memory.RootAllocator;
3739
import org.apache.arrow.vector.DateMilliVector;
3840
import org.apache.arrow.vector.TimeMilliVector;
3941
import org.apache.arrow.vector.TimeStampVector;
4042
import org.apache.arrow.vector.VectorSchemaRoot;
43+
import org.apache.arrow.vector.types.pojo.Schema;
4144
import org.junit.Test;
4245
import org.junit.runner.RunWith;
4346
import org.junit.runners.Parameterized;
@@ -120,6 +123,15 @@ public void testJdbcToArroValues() throws SQLException, IOException {
120123
Calendar.getInstance(TimeZone.getTimeZone(table.getTimezone())))));
121124
}
122125

126+
@Test
127+
public void testJdbcSchemaMetadata() throws SQLException {
128+
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone(table.getTimezone()));
129+
JdbcToArrowConfig config = new JdbcToArrowConfig(new RootAllocator(0), calendar, true);
130+
ResultSetMetaData rsmd = conn.createStatement().executeQuery(table.getQuery()).getMetaData();
131+
Schema schema = JdbcToArrowUtils.jdbcToArrowSchema(rsmd, config);
132+
JdbcToArrowTestHelper.assertFieldMetadataMatchesResultSetMetadata(rsmd, schema);
133+
}
134+
123135
/**
124136
* This method calls the assert methods for various DataSets.
125137
*

0 commit comments

Comments
 (0)