[ 
https://issues.apache.org/jira/browse/ARROW-1780?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16434162#comment-16434162
 ] 

ASF GitHub Bot commented on ARROW-1780:
---------------------------------------

laurentgo commented on a change in pull request #1759: ARROW-1780 - [WIP] JDBC 
Adapter to convert Relational Data objects to Arrow Data Format Vector Objects
URL: https://github.com/apache/arrow/pull/1759#discussion_r180253328
 
 

 ##########
 File path: 
java/adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowUtils.java
 ##########
 @@ -200,144 +226,206 @@ public static void jdbcToArrowVectors(ResultSet rs, 
VectorSchemaRoot root) throw
                 switch (rsmd.getColumnType(i)) {
                     case Types.BOOLEAN:
                     case Types.BIT:
-                        BitVector bitVector = (BitVector) 
root.getVector(columnName);
-                        bitVector.setSafe(rowCount, rs.getBoolean(i)? 1: 0);
-                        bitVector.setValueCount(rowCount + 1);
+                        updateVector((BitVector)root.getVector(columnName),
+                                rs.getBoolean(i), rowCount);
                         break;
                     case Types.TINYINT:
-                        TinyIntVector tinyIntVector = 
(TinyIntVector)root.getVector(columnName);
-                        tinyIntVector.setSafe(rowCount, rs.getInt(i));
-                        tinyIntVector.setValueCount(rowCount + 1);
+                        updateVector((TinyIntVector)root.getVector(columnName),
+                                rs.getInt(i), rowCount);
                         break;
                     case Types.SMALLINT:
-                        SmallIntVector smallIntVector = 
(SmallIntVector)root.getVector(columnName);
-                        smallIntVector.setSafe(rowCount, rs.getInt(i));
-                        smallIntVector.setValueCount(rowCount + 1);
+                        
updateVector((SmallIntVector)root.getVector(columnName),
+                                rs.getInt(i), rowCount);
                         break;
                     case Types.INTEGER:
-                        IntVector intVector = 
(IntVector)root.getVector(columnName);
-                        intVector.setSafe(rowCount, rs.getInt(i));
-                        intVector.setValueCount(rowCount + 1);
+                        updateVector((IntVector)root.getVector(columnName),
+                                rs.getInt(i), rowCount);
                         break;
                     case Types.BIGINT:
-                        BigIntVector bigIntVector = 
(BigIntVector)root.getVector(columnName);
-                        bigIntVector.setSafe(rowCount, rs.getInt(i));
-                        bigIntVector.setValueCount(rowCount + 1);
+                        updateVector((BigIntVector)root.getVector(columnName),
+                                rs.getInt(i), rowCount);
                         break;
                     case Types.NUMERIC:
                     case Types.DECIMAL:
-                        DecimalVector decimalVector = 
(DecimalVector)root.getVector(columnName);
-                        decimalVector.setSafe(rowCount, rs.getBigDecimal(i));
-                        decimalVector.setValueCount(rowCount + 1);
+                        updateVector((DecimalVector)root.getVector(columnName),
+                                rs.getBigDecimal(i), rowCount);
                         break;
                     case Types.REAL:
                     case Types.FLOAT:
-                        Float4Vector float4Vector = 
(Float4Vector)root.getVector(columnName);
-                        float4Vector.setSafe(rowCount, rs.getFloat(i));
-                        float4Vector.setValueCount(rowCount + 1);
+                        updateVector((Float4Vector)root.getVector(columnName),
+                                rs.getFloat(i), rowCount);
                         break;
                     case Types.DOUBLE:
-                        Float8Vector float8Vector = 
(Float8Vector)root.getVector(columnName);
-                        float8Vector.setSafe(rowCount, rs.getDouble(i));
-                        float8Vector.setValueCount(rowCount + 1);
+                        updateVector((Float8Vector)root.getVector(columnName),
+                                rs.getDouble(i), rowCount);
                         break;
                     case Types.CHAR:
                     case Types.NCHAR:
                     case Types.VARCHAR:
                     case Types.NVARCHAR:
                     case Types.LONGVARCHAR:
                     case Types.LONGNVARCHAR:
-                        VarCharVector varcharVector = 
(VarCharVector)root.getVector(columnName);
-                        String value = rs.getString(i) != null ? 
rs.getString(i) : "";
-                        varcharVector.setIndexDefined(rowCount);
-                        varcharVector.setValueLengthSafe(rowCount, 
value.length());
-                        varcharVector.setSafe(rowCount, 
value.getBytes(Charset.forName("UTF-8")), 0, value.length());
-                        varcharVector.setValueCount(rowCount + 1);
+                        updateVector((VarCharVector)root.getVector(columnName),
+                                rs.getString(i), rowCount);
                         break;
                     case Types.DATE:
-                        Date date = rs.getDate(i);
-                        DateMilliVector dateMilliVector = (DateMilliVector) 
root.getVector(columnName);
-                        dateMilliVector.setValueCount(rowCount + 1);
-                        if (date != null) {
-                            dateMilliVector.setSafe(rowCount, 
rs.getDate(i).getTime());
-                        } else {
-                            dateMilliVector.setNull(rowCount);
-                        }
+                        updateVector((DateMilliVector) 
root.getVector(columnName),
+                                rs.getDate(i), rowCount);
                         break;
                     case Types.TIME:
-                        Time time = rs.getTime(i);
-                        TimeMilliVector timeMilliVector = 
(TimeMilliVector)root.getVector(columnName);
-                        timeMilliVector.setValueCount(rowCount + 1);
-                        if (time != null) {
-                            timeMilliVector.setSafe(rowCount, (int) 
rs.getTime(i).getTime());
-                        } else {
-                            timeMilliVector.setNull(rowCount);
-                        }
-
+                        updateVector((TimeMilliVector) 
root.getVector(columnName),
+                                rs.getTime(i), rowCount);
                         break;
                     case Types.TIMESTAMP:
-                        // timezone is null
-                        Timestamp timestamp = rs.getTimestamp(i);
-                        TimeStampVector timeStampVector = 
(TimeStampVector)root.getVector(columnName);
-                        timeStampVector.setValueCount(rowCount + 1);
-                        if (timestamp != null) {
-                            timeStampVector.setSafe(rowCount, 
timestamp.getTime());
-                        } else {
-                            timeStampVector.setNull(rowCount);
-                        }
+                        
updateVector((TimeStampVector)root.getVector(columnName),
+                                rs.getTimestamp(i), rowCount);
                         break;
                     case Types.BINARY:
                     case Types.VARBINARY:
                     case Types.LONGVARBINARY:
-                        VarBinaryVector varBinaryVector = 
(VarBinaryVector)root.getVector(columnName);;
-                        varBinaryVector.setValueCount(rowCount + 1);
-                        byte[] bytes = rs.getBytes(i);
-                        if (bytes != null) {
-                            varBinaryVector.setIndexDefined(rowCount);
-                            varBinaryVector.setValueLengthSafe(rowCount, 
bytes.length);
-                            varBinaryVector.setSafe(rowCount, bytes);
-                        } else {
-                            varBinaryVector.setNull(rowCount);
-                        }
+                        
updateVector((VarBinaryVector)root.getVector(columnName),
+                                rs.getBytes(i), rowCount);
                         break;
                     case Types.ARRAY:
-                        // not handled
+                        // TODO Need to handle this type
 //                    fields.add(new Field("list", FieldType.nullable(new 
ArrowType.List()), null));
                         break;
                     case Types.CLOB:
-                        VarCharVector varcharVector1 = 
(VarCharVector)root.getVector(columnName);
-                        varcharVector1.setValueCount(rowCount + 1);
-                        Clob clob = rs.getClob(i);
-                        if (clob != null) {
-                            int length = (int) clob.length();
-                            varcharVector1.setIndexDefined(rowCount);
-                            varcharVector1.setValueLengthSafe(rowCount, 
length);
-                            varcharVector1.setSafe(rowCount, 
clob.getSubString(1, length).getBytes(), 0, length);
-                        } else {
-                            varcharVector1.setNull(rowCount);
-                        }
+                        updateVector((VarCharVector)root.getVector(columnName),
+                            rs.getClob(i), rowCount);
                         break;
                     case Types.BLOB:
-                        VarBinaryVector varBinaryVector1 = 
(VarBinaryVector)root.getVector(columnName);;
-                        varBinaryVector1.setValueCount(rowCount + 1);
-                        Blob blob = rs.getBlob(i);
-                        if (blob != null) {
-                            byte[] data = blob.getBytes(0, (int) 
blob.length());
-                            varBinaryVector1.setIndexDefined(rowCount);
-                            varBinaryVector1.setValueLengthSafe(rowCount, 
(int) blob.length());
-                            varBinaryVector1.setSafe(rowCount, data);
-                        } else {
-                            varBinaryVector1.setNull(rowCount);}
-
+                        
updateVector((VarBinaryVector)root.getVector(columnName),
+                            rs.getBlob(i), rowCount);
                         break;
 
                     default:
-                        // no-op
+                        // no-op, shouldn't get here
                         break;
                 }
             }
             rowCount++;
         }
         root.setRowCount(rowCount);
     }
+
+    private static void updateVector(BitVector bitVector, boolean value, int 
rowCount) {
+        bitVector.setSafe(rowCount, value? 1: 0);
+        bitVector.setValueCount(rowCount + 1);
+    }
+
+    private static void updateVector(TinyIntVector tinyIntVector, int value, 
int rowCount) {
+        tinyIntVector.setSafe(rowCount, value);
+        tinyIntVector.setValueCount(rowCount + 1);
+    }
+
+    private static  void updateVector(SmallIntVector smallIntVector, int 
value, int rowCount) {
+        smallIntVector.setSafe(rowCount, value);
+        smallIntVector.setValueCount(rowCount + 1);
+    }
+
+    private static  void updateVector(IntVector intVector, int value, int 
rowCount) {
+        intVector.setSafe(rowCount, value);
+        intVector.setValueCount(rowCount + 1);
+    }
+
+    private static  void updateVector(BigIntVector bigIntVector, int value, 
int rowCount) {
 
 Review comment:
   value should be a `long`

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> JDBC Adapter for Apache Arrow
> -----------------------------
>
>                 Key: ARROW-1780
>                 URL: https://issues.apache.org/jira/browse/ARROW-1780
>             Project: Apache Arrow
>          Issue Type: New Feature
>            Reporter: Atul Dambalkar
>            Assignee: Atul Dambalkar
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 0.10.0
>
>
> At a high level the JDBC Adapter will allow upstream apps to query RDBMS data 
> over JDBC and get the JDBC objects converted to Arrow objects/structures. The 
> upstream utility can then work with Arrow objects/structures with usual 
> performance benefits. The utility will be very much similar to C++ 
> implementation of "Convert a vector of row-wise data into an Arrow table" as 
> described here - 
> https://arrow.apache.org/docs/cpp/md_tutorials_row_wise_conversion.html
> The utility will read data from RDBMS and covert the data into Arrow 
> objects/structures. So from that perspective this will Read data from RDBMS, 
> If the utility can push Arrow objects to RDBMS is something need to be 
> discussed and will be out of scope for this utility for now. 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to