@@ -63,46 +63,50 @@ protected void handleField(ResultSet resultSet, StructuredRecord.Builder recordB
6363 String columnTypeName = metadata .getColumnTypeName (columnIndex );
6464 if (isUseSchema (metadata , columnIndex )) {
6565 setFieldAccordingToSchema (resultSet , recordBuilder , field , columnIndex );
66- } else if (sqlType == Types .TIMESTAMP && columnTypeName .equalsIgnoreCase ("timestamp" )) {
66+ return ;
67+ }
68+ if (sqlType == Types .TIMESTAMP && columnTypeName .equalsIgnoreCase ("timestamp" )) {
6769 Timestamp timestamp = resultSet .getTimestamp (columnIndex , DBUtils .PURE_GREGORIAN_CALENDAR );
6870 if (timestamp != null ) {
6971 ZonedDateTime zonedDateTime = OffsetDateTime .of (timestamp .toLocalDateTime (), OffsetDateTime .now ().getOffset ())
70- .atZoneSameInstant (ZoneId .of ("UTC" ));
72+ .atZoneSameInstant (ZoneId .of ("UTC" ));
7173 Schema nonNullableSchema = field .getSchema ().isNullable () ?
72- field .getSchema ().getNonNullable () : field .getSchema ();
74+ field .getSchema ().getNonNullable () : field .getSchema ();
7375 setZonedDateTimeBasedOnOuputSchema (recordBuilder , nonNullableSchema .getLogicalType (),
74- field .getName (), zonedDateTime );
76+ field .getName (), zonedDateTime );
7577 } else {
7678 recordBuilder .set (field .getName (), null );
7779 }
78- } else if (sqlType == Types .TIMESTAMP && columnTypeName .equalsIgnoreCase ("timestamptz" )) {
80+ return ;
81+ }
82+ if (sqlType == Types .TIMESTAMP && columnTypeName .equalsIgnoreCase ("timestamptz" )) {
7983 OffsetDateTime timestamp = resultSet .getObject (columnIndex , OffsetDateTime .class );
8084 if (timestamp != null ) {
8185 recordBuilder .setTimestamp (field .getName (), timestamp .atZoneSameInstant (ZoneId .of ("UTC" )));
8286 } else {
8387 recordBuilder .set (field .getName (), null );
8488 }
85- } else {
86- int columnType = metadata . getColumnType ( columnIndex );
87- if ( columnType == Types . NUMERIC ) {
88- Schema nonNullableSchema = field . getSchema (). isNullable () ?
89- field .getSchema ().getNonNullable () : field . getSchema ();
90- int precision = metadata . getPrecision ( columnIndex );
91- if ( precision == 0 && Schema . Type . STRING . equals ( nonNullableSchema . getType ())) {
92- // When output schema is set to String for precision less numbers
93- recordBuilder . set ( field . getName (), resultSet . getString ( columnIndex ));
94- } else if ( Schema . LogicalType . DECIMAL . equals ( nonNullableSchema . getLogicalType ())) {
95- BigDecimal orgValue = resultSet . getBigDecimal ( columnIndex ) ;
96- if ( orgValue != null ) {
97- BigDecimal decimalValue = new BigDecimal ( orgValue . toPlainString ())
98- . setScale (nonNullableSchema .getScale (), RoundingMode . HALF_EVEN );
99- recordBuilder . setDecimal ( field . getName (), decimalValue );
100- }
101- }
89+ return ;
90+ }
91+ int columnType = metadata . getColumnType ( columnIndex );
92+ if ( columnType == Types . NUMERIC ) {
93+ Schema nonNullableSchema = field .getSchema ().isNullable () ?
94+ field . getSchema (). getNonNullable () : field . getSchema ( );
95+ int precision = metadata . getPrecision ( columnIndex );
96+ if ( precision == 0 && Schema . Type . STRING . equals ( nonNullableSchema . getType ())) {
97+ // When output schema is set to String for precision less numbers
98+ recordBuilder . set ( field . getName (), resultSet . getString ( columnIndex ));
99+ return ;
100+ }
101+ BigDecimal orgValue = resultSet . getBigDecimal ( columnIndex );
102+ if ( Schema . LogicalType . DECIMAL . equals (nonNullableSchema .getLogicalType ()) && orgValue != null ) {
103+ BigDecimal decimalValue = new BigDecimal ( orgValue . toPlainString ())
104+ . setScale ( nonNullableSchema . getScale (), RoundingMode . HALF_EVEN );
105+ recordBuilder . setDecimal ( field . getName (), decimalValue );
102106 return ;
103107 }
104- setField (resultSet , recordBuilder , field , columnIndex , sqlType , sqlPrecision , sqlScale );
105108 }
109+ setField (resultSet , recordBuilder , field , columnIndex , sqlType , sqlPrecision , sqlScale );
106110 }
107111
108112 private void setZonedDateTimeBasedOnOuputSchema (StructuredRecord .Builder recordBuilder ,
@@ -121,12 +125,8 @@ private void setZonedDateTimeBasedOnOuputSchema(StructuredRecord.Builder recordB
121125 private static boolean isUseSchema (ResultSetMetaData metadata , int columnIndex ) throws SQLException {
122126 String columnTypeName = metadata .getColumnTypeName (columnIndex );
123127 // If the column Type Name is present in the String mapped PostgreSQL types then return true.
124- if (PostgresSchemaReader .STRING_MAPPED_POSTGRES_TYPES_NAMES .contains (columnTypeName )
125- || PostgresSchemaReader .STRING_MAPPED_POSTGRES_TYPES .contains (metadata .getColumnType (columnIndex ))) {
126- return true ;
127- }
128-
129- return false ;
128+ return (PostgresSchemaReader .STRING_MAPPED_POSTGRES_TYPES_NAMES .contains (columnTypeName )
129+ || PostgresSchemaReader .STRING_MAPPED_POSTGRES_TYPES .contains (metadata .getColumnType (columnIndex )));
130130 }
131131
132132 private Object createPGobject (String type , String value , ClassLoader classLoader ) throws SQLException {
@@ -152,16 +152,14 @@ protected void writeNonNullToDB(PreparedStatement stmt, Schema fieldSchema,
152152 if (PostgresSchemaReader .STRING_MAPPED_POSTGRES_TYPES_NAMES .contains (columnType .getTypeName ()) ||
153153 PostgresSchemaReader .STRING_MAPPED_POSTGRES_TYPES .contains (columnType .getType ())) {
154154 stmt .setObject (sqlIndex , createPGobject (columnType .getTypeName (),
155- record .get (fieldName ),
156- stmt .getClass ().getClassLoader ()));
155+ record .get (fieldName ),
156+ stmt .getClass ().getClassLoader ()));
157+ return ;
158+ }
159+ if (columnType .getType () == Types .NUMERIC && record .get (fieldName ) != null &&
160+ fieldSchema .getType () == Schema .Type .STRING ) {
161+ stmt .setBigDecimal (sqlIndex , new BigDecimal ((String ) record .get (fieldName )));
157162 return ;
158- } else if (columnType .getType () == Types .NUMERIC ) {
159- if (record .get (fieldName ) != null ) {
160- if (fieldSchema .getType () == Schema .Type .STRING ) {
161- stmt .setBigDecimal (sqlIndex , new BigDecimal ((String ) record .get (fieldName )));
162- return ;
163- }
164- }
165163 }
166164
167165 super .writeNonNullToDB (stmt , fieldSchema , fieldName , fieldIndex );
0 commit comments