19
19
import java .sql .Time ;
20
20
import java .sql .Timestamp ;
21
21
import java .sql .Types ;
22
+ import java .util .Map ;
22
23
import java .util .TimeZone ;
23
24
import net .snowflake .client .core .arrow .ArrowVectorConverter ;
24
25
import net .snowflake .client .core .arrow .StructConverter ;
@@ -104,7 +105,7 @@ public class SFArrowResultSet extends SFBaseResultSet implements DataConversionC
104
105
*/
105
106
private boolean formatDateWithTimezone ;
106
107
107
- @ SnowflakeJdbcInternalApi protected Converters jsonConverters ;
108
+ @ SnowflakeJdbcInternalApi protected Converters converters ;
108
109
109
110
/**
110
111
* Constructor takes a result from the API response that we get from executing a SQL statement.
@@ -124,7 +125,7 @@ public SFArrowResultSet(
124
125
boolean sortResult )
125
126
throws SQLException {
126
127
this (resultSetSerializable , session .getTelemetryClient (), sortResult );
127
- this .jsonConverters =
128
+ this .converters =
128
129
new Converters (
129
130
resultSetSerializable .getTimeZone (),
130
131
session ,
@@ -356,6 +357,31 @@ private boolean fetchNextRowSorted() throws SnowflakeSQLException {
356
357
}
357
358
}
358
359
360
+ @ Override
361
+ @ SnowflakeJdbcInternalApi
362
+ public Converters getConverters () {
363
+ return converters ;
364
+ }
365
+
366
+ @ Override
367
+ public Date convertToDate (Object object , TimeZone tz ) throws SFException {
368
+ return converters .getStructuredTypeDateTimeConverter ().getDate ((int ) object , tz );
369
+ }
370
+
371
+ @ Override
372
+ public Time convertToTime (Object object , int scale ) throws SFException {
373
+ return converters .getStructuredTypeDateTimeConverter ().getTime ((long ) object , scale );
374
+ }
375
+
376
+ @ Override
377
+ public Timestamp convertToTimestamp (
378
+ Object object , int columnType , int columnSubType , TimeZone tz , int scale ) throws SFException {
379
+ return converters
380
+ .getStructuredTypeDateTimeConverter ()
381
+ .getTimestamp (
382
+ (JsonStringHashMap <String , Object >) object , columnType , columnSubType , tz , scale );
383
+ }
384
+
359
385
/**
360
386
* Advance to next row
361
387
*
@@ -510,7 +536,7 @@ public Object getObject(int columnIndex) throws SFException {
510
536
if (converter instanceof VarCharConverter ) {
511
537
return createJsonSqlInput (columnIndex , obj );
512
538
} else if (converter instanceof StructConverter ) {
513
- return createArrowSqlInput (columnIndex , (JsonStringHashMap <String , Object >) obj );
539
+ return createArrowSqlInput (columnIndex , (Map <String , Object >) obj );
514
540
}
515
541
}
516
542
return obj ;
@@ -522,19 +548,19 @@ private Object createJsonSqlInput(int columnIndex, Object obj) throws SFExceptio
522
548
return new JsonSqlInput (
523
549
jsonNode ,
524
550
session ,
525
- jsonConverters ,
551
+ converters ,
526
552
resultSetMetaData .getColumnMetadata ().get (columnIndex - 1 ).getFields (),
527
553
sessionTimezone );
528
554
} catch (JsonProcessingException e ) {
529
555
throw new SFException (e , ErrorCode .INVALID_STRUCT_DATA );
530
556
}
531
557
}
532
558
533
- private Object createArrowSqlInput (int columnIndex , JsonStringHashMap <String , Object > input ) {
559
+ private Object createArrowSqlInput (int columnIndex , Map <String , Object > input ) {
534
560
return new ArrowSqlInput (
535
561
input ,
536
562
session ,
537
- jsonConverters ,
563
+ converters ,
538
564
resultSetMetaData .getColumnMetadata ().get (columnIndex - 1 ).getFields ());
539
565
}
540
566
0 commit comments