diff --git a/java/adapter/jdbc/pom.xml b/java/adapter/jdbc/pom.xml
index d8dd422ec68..17d2381213a 100644
--- a/java/adapter/jdbc/pom.xml
+++ b/java/adapter/jdbc/pom.xml
@@ -1,17 +1,18 @@
+ license agreements. See the NOTICE file distributed with this work for additional
+ information regarding copyright ownership. The ASF licenses this file to
+ You under the Apache License, Version 2.0 (the "License"); you may not use
+ this file except in compliance with the License. You may obtain a copy of
+ the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+ by applicable law or agreed to in writing, software distributed under the
+ License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ OF ANY KIND, either express or implied. See the License for the specific
+ language governing permissions and limitations under the License. -->
4.0.0
+
org.apache.arrow
arrow-java-root
@@ -21,6 +22,7 @@
arrow-jdbc
Arrow JDBC Adapter
http://maven.apache.org
+
@@ -36,6 +38,7 @@
arrow-vector
${project.version}
+
com.google.guava
guava
@@ -57,82 +60,47 @@
1.4.196
test
+
com.fasterxml.jackson.dataformat
jackson-dataformat-yaml
${dep.jackson.version}
test
+
com.fasterxml.jackson.core
jackson-databind
${dep.jackson.version}
test
+
com.fasterxml.jackson.core
jackson-core
${dep.jackson.version}
test
+
com.fasterxml.jackson.core
jackson-annotations
${dep.jackson.version}
test
-
-
-
-
- org.jacoco
- jacoco-maven-plugin
- 0.8.1
-
-
-
- default-prepare-agent
-
- prepare-agent
-
-
-
- ${project.build.directory}/coverage-reports/jacoco-ut.exec
-
- surefireArgLine
-
-
-
-
- post-unit-test
- test
-
- report
-
-
-
- ${project.build.directory}/coverage-reports/jacoco-ut.exec
-
- true
- ${project.build.directory}/jacoco-ut
-
-
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
-
- UTC
-
-
- ${surefireArgLine}
-
-
-
-
-
-
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ UTC
+
+
+
+
+
+
\ No newline at end of file
diff --git a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrow.java b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrow.java
index 617cbd15339..5a7e1c77b11 100644
--- a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrow.java
+++ b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrow.java
@@ -30,6 +30,8 @@
import java.sql.Statement;
import java.sql.ResultSet;
import java.util.Calendar;
+import java.util.Locale;
+import java.util.TimeZone;
/**
* Utility class to convert JDBC objects to columnar Arrow format objects.
@@ -85,7 +87,7 @@ public static VectorSchemaRoot sqlToArrow(Connection connection, String query, B
Preconditions.checkArgument(query != null && query.length() > 0, "SQL query can not be null or empty");
Preconditions.checkNotNull(allocator, "Memory allocator object can not be null");
- return sqlToArrow(connection, query, allocator, Calendar.getInstance());
+ return sqlToArrow(connection, query, allocator, Calendar.getInstance(TimeZone.getTimeZone("UTC"), Locale.ROOT));
}
/**
@@ -121,7 +123,7 @@ public static VectorSchemaRoot sqlToArrow(Connection connection, String query, B
public static VectorSchemaRoot sqlToArrow(ResultSet resultSet) throws SQLException, IOException {
Preconditions.checkNotNull(resultSet, "JDBC ResultSet object can not be null");
- return sqlToArrow(resultSet, Calendar.getInstance());
+ return sqlToArrow(resultSet, Calendar.getInstance(TimeZone.getTimeZone("UTC"), Locale.ROOT));
}
/**
@@ -136,7 +138,7 @@ public static VectorSchemaRoot sqlToArrow(ResultSet resultSet, BaseAllocator all
Preconditions.checkNotNull(resultSet, "JDBC ResultSet object can not be null");
Preconditions.checkNotNull(allocator, "Memory Allocator object can not be null");
- return sqlToArrow(resultSet, allocator, Calendar.getInstance());
+ return sqlToArrow(resultSet, allocator, Calendar.getInstance(TimeZone.getTimeZone("UTC"), Locale.ROOT));
}
/**
diff --git a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowUtils.java b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowUtils.java
index a96e45e6bd0..e48255e313a 100644
--- a/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowUtils.java
+++ b/java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowUtils.java
@@ -304,7 +304,6 @@ public static void jdbcToArrowVectors(ResultSet rs, VectorSchemaRoot root, Calen
case Types.VARBINARY:
case Types.LONGVARBINARY:
updateVector((VarBinaryVector)root.getVector(columnName),
-// rs.getBytes(i), !rs.wasNull(), rowCount);
rs.getBinaryStream(i), !rs.wasNull(), rowCount);
break;
case Types.ARRAY:
@@ -474,7 +473,7 @@ private static void updateVector(VarBinaryVector varBinaryVector, InputStream is
if (read == -1) {
break;
}
- arrowBuf.setBytes(total, new ByteArrayInputStream(bytes, 0, read), read);
+ arrowBuf.setBytes(total, bytes, total, read);
total += read;
}
holder.end = total;
diff --git a/java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/AbstractJdbcToArrowTest.java b/java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/AbstractJdbcToArrowTest.java
index 2c76c178ea0..19438c270dd 100644
--- a/java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/AbstractJdbcToArrowTest.java
+++ b/java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/AbstractJdbcToArrowTest.java
@@ -36,7 +36,7 @@
public abstract class AbstractJdbcToArrowTest {
protected Connection conn = null;
protected Table table;
-
+
/**
* This method creates Table object after reading YAML file
* @param ymlFilePath
@@ -45,7 +45,7 @@ public abstract class AbstractJdbcToArrowTest {
*/
protected static Table getTable(String ymlFilePath, Class clss) throws IOException {
return new ObjectMapper(new YAMLFactory()).readValue(
- clss.getClassLoader().getResourceAsStream(ymlFilePath), Table.class);
+ clss.getClassLoader().getResourceAsStream(ymlFilePath), Table.class);
}
@@ -67,7 +67,7 @@ public void setUp() throws SQLException, ClassNotFoundException {
}
}
}
-
+
/**
* Clean up method to close connection after test completes
* @throws SQLException
@@ -79,7 +79,7 @@ public void destroy() throws SQLException {
conn = null;
}
}
-
+
/**
* This method returns collection of Table object for each test iteration
* @return
@@ -88,14 +88,14 @@ public void destroy() throws SQLException {
* @throws IOException
*/
public static Object[][] prepareTestData(String[] testFiles, Class clss) throws SQLException, ClassNotFoundException, IOException {
- Object[][] tableArr = new Object[testFiles.length][];
+ Object[][] tableArr = new Object[testFiles.length][];
int i = 0;
for (String testFile: testFiles) {
tableArr[i++] = new Object[]{getTable(testFile, clss)};
}
return tableArr;
}
-
+
/**
* Abstract method to implement test Functionality to test JdbcToArrow methods
* @throws SQLException
diff --git a/java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/JdbcToArrowTestHelper.java b/java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/JdbcToArrowTestHelper.java
index 37580f0f2ea..8fabc4dcdae 100644
--- a/java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/JdbcToArrowTestHelper.java
+++ b/java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/JdbcToArrowTestHelper.java
@@ -20,8 +20,6 @@
import java.math.BigDecimal;
import java.nio.charset.Charset;
-import java.util.Arrays;
-
import org.apache.arrow.vector.BaseValueVector;
import org.apache.arrow.vector.BigIntVector;
import org.apache.arrow.vector.BitVector;
@@ -36,10 +34,11 @@
import org.apache.arrow.vector.TinyIntVector;
import org.apache.arrow.vector.VarBinaryVector;
import org.apache.arrow.vector.VarCharVector;
-
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertArrayEquals;
+
/**
* This is a Helper class which has functionalities to read and assert the values from the given FieldVector object
*
@@ -50,13 +49,13 @@ public static void assertIntVectorValues(IntVector intVector, int rowCount, Inte
assertEquals(rowCount, intVector.getValueCount());
for(int j = 0; j < intVector.getValueCount(); j++) {
- assertEquals(values[j].intValue(), intVector.get(j));
+ assertEquals(values[j].intValue(), intVector.get(j));
}
}
public static void assertBooleanVectorValues(BitVector bitVector, int rowCount, Boolean[] values){
assertEquals(rowCount, bitVector.getValueCount());
-
+
for(int j = 0; j < bitVector.getValueCount(); j++){
assertEquals(values[j].booleanValue(), bitVector.get(j) == 1);
}
@@ -98,7 +97,7 @@ public static void assertDecimalVectorValues(DecimalVector decimalVector, int ro
assertEquals(rowCount, decimalVector.getValueCount());
for(int j = 0; j < decimalVector.getValueCount(); j++){
- assertNotNull(decimalVector.getObject(j));
+ assertNotNull(decimalVector.getObject(j));
assertEquals(values[j].doubleValue(), decimalVector.getObject(j).doubleValue(), 0);
}
}
@@ -123,7 +122,7 @@ public static void assertTimeVectorValues(TimeMilliVector timeMilliVector, int r
assertEquals(rowCount, timeMilliVector.getValueCount());
for(int j = 0; j < timeMilliVector.getValueCount(); j++){
- assertEquals(values[j].longValue(), timeMilliVector.get(j));
+ assertEquals(values[j].longValue(), timeMilliVector.get(j));
}
}
@@ -147,7 +146,7 @@ public static void assertVarBinaryVectorValues (VarBinaryVector varBinaryVector,
assertEquals(rowCount, varBinaryVector.getValueCount());
for(int j = 0; j < varBinaryVector.getValueCount(); j++){
- assertEquals(Arrays.hashCode(values[j]), Arrays.hashCode(varBinaryVector.get(j)));
+ assertArrayEquals(values[j], varBinaryVector.get(j));
}
}
@@ -155,15 +154,15 @@ public static void assertVarcharVectorValues(VarCharVector varCharVector, int ro
assertEquals(rowCount, varCharVector.getValueCount());
for(int j = 0; j < varCharVector.getValueCount(); j++){
- assertEquals(Arrays.hashCode(values[j]), Arrays.hashCode(varCharVector.get(j)));
+ assertArrayEquals(values[j], varCharVector.get(j));
}
}
-
+
public static void assertNullValues(BaseValueVector vector, int rowCount) {
assertEquals(rowCount, vector.getValueCount());
for(int j = 0; j < vector.getValueCount(); j++) {
- assertTrue(vector.isNull(j));
+ assertTrue(vector.isNull(j));
}
}
@@ -172,109 +171,109 @@ public static byte[] hexStringToByteArray(String s) {
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
- + Character.digit(s.charAt(i+1), 16));
+ + Character.digit(s.charAt(i+1), 16));
}
return data;
}
-
+
public static Integer [] getIntValues(String[] values, String dataType) {
- String[] dataArr= getValues(values, dataType);
- Integer [] valueArr = new Integer [dataArr.length];
- int i =0;
- for(String data : dataArr) {
- valueArr [i++] = Integer.parseInt(data);
- }
- return valueArr;
+ String[] dataArr= getValues(values, dataType);
+ Integer [] valueArr = new Integer [dataArr.length];
+ int i =0;
+ for(String data : dataArr) {
+ valueArr [i++] = Integer.parseInt(data);
+ }
+ return valueArr;
}
-
+
public static Boolean [] getBooleanValues(String[] values, String dataType) {
- String[] dataArr= getValues(values, dataType);
- Boolean [] valueArr = new Boolean [dataArr.length];
- int i =0;
- for(String data : dataArr) {
- valueArr [i++] = data.trim().equals("1");
- }
- return valueArr;
+ String[] dataArr= getValues(values, dataType);
+ Boolean [] valueArr = new Boolean [dataArr.length];
+ int i =0;
+ for(String data : dataArr) {
+ valueArr [i++] = data.trim().equals("1");
+ }
+ return valueArr;
}
public static BigDecimal [] getDecimalValues(String[] values, String dataType) {
- String[] dataArr= getValues(values, dataType);
- BigDecimal [] valueArr = new BigDecimal [dataArr.length];
- int i =0;
- for(String data : dataArr) {
- valueArr[i++] = new BigDecimal(data);
- }
- return valueArr;
+ String[] dataArr= getValues(values, dataType);
+ BigDecimal [] valueArr = new BigDecimal [dataArr.length];
+ int i =0;
+ for(String data : dataArr) {
+ valueArr[i++] = new BigDecimal(data);
+ }
+ return valueArr;
}
public static Double [] getDoubleValues(String[] values, String dataType) {
- String[] dataArr= getValues(values, dataType);
- Double [] valueArr = new Double [dataArr.length];
- int i =0;
- for(String data : dataArr) {
- valueArr [i++] = Double.parseDouble(data);
- }
- return valueArr;
+ String[] dataArr= getValues(values, dataType);
+ Double [] valueArr = new Double [dataArr.length];
+ int i =0;
+ for(String data : dataArr) {
+ valueArr [i++] = Double.parseDouble(data);
+ }
+ return valueArr;
}
-
+
public static Float [] getFloatValues(String[] values, String dataType) {
- String[] dataArr= getValues(values, dataType);
- Float [] valueArr = new Float [dataArr.length];
- int i =0;
- for(String data : dataArr) {
- valueArr [i++] = Float.parseFloat(data);
- }
- return valueArr;
+ String[] dataArr= getValues(values, dataType);
+ Float [] valueArr = new Float [dataArr.length];
+ int i =0;
+ for(String data : dataArr) {
+ valueArr [i++] = Float.parseFloat(data);
+ }
+ return valueArr;
}
-
+
public static Long [] getLongValues(String[] values, String dataType) {
- String[] dataArr= getValues(values, dataType);
- Long [] valueArr = new Long [dataArr.length];
- int i =0;
- for(String data : dataArr) {
- valueArr [i++] = Long.parseLong(data);
- }
- return valueArr;
+ String[] dataArr= getValues(values, dataType);
+ Long [] valueArr = new Long [dataArr.length];
+ int i =0;
+ for(String data : dataArr) {
+ valueArr [i++] = Long.parseLong(data);
+ }
+ return valueArr;
}
-
+
public static byte [][] getCharArray(String[] values, String dataType) {
- String[] dataArr= getValues(values, dataType);
- byte [][] valueArr = new byte [dataArr.length][];
- int i =0;
- for(String data : dataArr) {
- valueArr [i++] = data.trim().getBytes();
- }
- return valueArr;
+ String[] dataArr= getValues(values, dataType);
+ byte [][] valueArr = new byte [dataArr.length][];
+ int i =0;
+ for(String data : dataArr) {
+ valueArr [i++] = data.trim().getBytes();
+ }
+ return valueArr;
}
-
+
public static byte [][] getCharArrayWithCharSet(String[] values, String dataType, Charset charSet) {
- String[] dataArr= getValues(values, dataType);
- byte [][] valueArr = new byte [dataArr.length][];
- int i =0;
- for(String data : dataArr) {
- valueArr [i++] = data.trim().getBytes(charSet);
- }
- return valueArr;
+ String[] dataArr= getValues(values, dataType);
+ byte [][] valueArr = new byte [dataArr.length][];
+ int i =0;
+ for(String data : dataArr) {
+ valueArr [i++] = data.trim().getBytes(charSet);
+ }
+ return valueArr;
}
-
+
public static byte [][] getBinaryValues(String[] values, String dataType) {
- String[] dataArr= getValues(values, dataType);
- byte [][] valueArr = new byte [dataArr.length][];
- int i =0;
- for(String data : dataArr) {
- valueArr [i++] = hexStringToByteArray(data.trim());
- }
- return valueArr;
+ String[] dataArr= getValues(values, dataType);
+ byte [][] valueArr = new byte [dataArr.length][];
+ int i =0;
+ for(String data : dataArr) {
+ valueArr [i++] = hexStringToByteArray(data.trim());
+ }
+ return valueArr;
}
-
+
public static String [] getValues(String[] values, String dataType) {
- String value = "";
- for(String val : values) {
- if(val.startsWith(dataType)) {
- value = val.split("=")[1];
- break;
- }
- }
- return value.split(",");
+ String value = "";
+ for(String val : values) {
+ if(val.startsWith(dataType)) {
+ value = val.split("=")[1];
+ break;
+ }
+ }
+ return value.split(",");
}
}
diff --git a/java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/Table.java b/java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/Table.java
index 3c99ceb1578..b4305eb38b9 100644
--- a/java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/Table.java
+++ b/java/adapter/jdbc/src/test/java/org/apache/arrow/adapter/jdbc/Table.java
@@ -28,7 +28,6 @@
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public class Table {
-
private String name;
private String type;
private String vector;
@@ -93,6 +92,7 @@ public Integer[] getIntValues() {
}
return arr;
}
+
public Boolean[] getBoolValues() {
Boolean[] arr = new Boolean[values.length];
int i = 0;
@@ -101,6 +101,7 @@ public Boolean[] getBoolValues() {
}
return arr;
}
+
public BigDecimal[] getBigDecimalValues() {
BigDecimal[] arr = new BigDecimal[values.length];
int i = 0;
@@ -109,6 +110,7 @@ public BigDecimal[] getBigDecimalValues() {
}
return arr;
}
+
public Double[] getDoubleValues() {
Double[] arr = new Double[values.length];
int i = 0;
@@ -180,30 +182,30 @@ public void setDrop(String drop) {
}
public String getTimezone() {
- return timezone;
- }
-
- public void setTimezone(String timezone) {
- this.timezone = timezone;
- }
-
- public String[] getVectors() {
- return vectors;
- }
-
- public void setVectors(String[] vectors) {
- this.vectors = vectors;
- }
-
- public int getRowCount() {
- return rowCount;
- }
-
- public void setRowCount(int rowCount) {
- this.rowCount = rowCount;
- }
-
- private byte[][] getByteArray(String[] data) {
+ return timezone;
+ }
+
+ public void setTimezone(String timezone) {
+ this.timezone = timezone;
+ }
+
+ public String[] getVectors() {
+ return vectors;
+ }
+
+ public void setVectors(String[] vectors) {
+ this.vectors = vectors;
+ }
+
+ public int getRowCount() {
+ return rowCount;
+ }
+
+ public void setRowCount(int rowCount) {
+ this.rowCount = rowCount;
+ }
+
+ private byte[][] getByteArray(String[] data) {
byte[][] byteArr = new byte[data.length][];
for (int i = 0; i < data.length; i++) {
@@ -226,8 +228,8 @@ private static byte[] hexStringToByteArray(String s) {
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
- + Character.digit(s.charAt(i + 1), 16));
+ + Character.digit(s.charAt(i + 1), 16));
}
return data;
}
-}
+}
\ No newline at end of file