@@ -116,46 +116,65 @@ static Object convert(Object value, Type type, Class<?> targetType) throws SQLEx
116116 }
117117 if (type .getCode () == Code .FLOAT64 ) return (Double ) value != 0d ;
118118 if (type .getCode () == Code .NUMERIC ) return !value .equals (BigDecimal .ZERO );
119+ if (type .getCode () == Code .PG_NUMERIC )
120+ return !AbstractJdbcWrapper .parseBigDecimal ((String ) value ).equals (BigDecimal .ZERO );
119121 }
120122 if (targetType .equals (BigDecimal .class )) {
121123 if (type .getCode () == Code .BOOL ) return (Boolean ) value ? BigDecimal .ONE : BigDecimal .ZERO ;
122124 if (type .getCode () == Code .INT64 || type .getCode () == Code .ENUM )
123125 return BigDecimal .valueOf ((Long ) value );
124126 if (type .getCode () == Code .NUMERIC ) return value ;
127+ if (type .getCode () == Code .PG_NUMERIC )
128+ return AbstractJdbcWrapper .parseBigDecimal ((String ) value );
125129 }
126130 if (targetType .equals (Long .class )) {
127131 if (type .getCode () == Code .BOOL ) return (Boolean ) value ? 1L : 0L ;
128132 if (type .getCode () == Code .INT64 || type .getCode () == Code .ENUM ) return value ;
129133 if (type .getCode () == Code .NUMERIC )
130- return AbstractJdbcWrapper .checkedCastToLong ((BigDecimal ) value );
134+ return AbstractJdbcWrapper .checkedCastToLong (((BigDecimal ) value ).toBigInteger ());
135+ if (type .getCode () == Code .PG_NUMERIC )
136+ return AbstractJdbcWrapper .checkedCastToLong (
137+ AbstractJdbcWrapper .parseBigDecimal ((String ) value ).toBigInteger ());
131138 }
132139 if (targetType .equals (Integer .class )) {
133140 if (type .getCode () == Code .BOOL ) return (Boolean ) value ? 1 : 0 ;
134141 if (type .getCode () == Code .INT64 || type .getCode () == Code .ENUM )
135142 return AbstractJdbcWrapper .checkedCastToInt ((Long ) value );
136143 if (type .getCode () == Code .NUMERIC )
137- return AbstractJdbcWrapper .checkedCastToInt ((BigDecimal ) value );
144+ return AbstractJdbcWrapper .checkedCastToInt (((BigDecimal ) value ).toBigInteger ());
145+ if (type .getCode () == Code .PG_NUMERIC )
146+ return AbstractJdbcWrapper .checkedCastToInt (
147+ AbstractJdbcWrapper .parseBigDecimal ((String ) value ).toBigInteger ());
138148 }
139149 if (targetType .equals (Short .class )) {
140150 if (type .getCode () == Code .BOOL ) return (Boolean ) value ? 1 : 0 ;
141151 if (type .getCode () == Code .INT64 || type .getCode () == Code .ENUM )
142152 return AbstractJdbcWrapper .checkedCastToShort ((Long ) value );
143153 if (type .getCode () == Code .NUMERIC )
144- return AbstractJdbcWrapper .checkedCastToShort ((BigDecimal ) value );
154+ return AbstractJdbcWrapper .checkedCastToShort (((BigDecimal ) value ).toBigInteger ());
155+ if (type .getCode () == Code .PG_NUMERIC )
156+ return AbstractJdbcWrapper .checkedCastToShort (
157+ AbstractJdbcWrapper .parseBigDecimal ((String ) value ).toBigInteger ());
145158 }
146159 if (targetType .equals (Byte .class )) {
147160 if (type .getCode () == Code .BOOL ) return (Boolean ) value ? 1 : 0 ;
148161 if (type .getCode () == Code .INT64 || type .getCode () == Code .ENUM )
149162 return AbstractJdbcWrapper .checkedCastToByte ((Long ) value );
150163 if (type .getCode () == Code .NUMERIC )
151- return AbstractJdbcWrapper .checkedCastToByte ((BigDecimal ) value );
164+ return AbstractJdbcWrapper .checkedCastToByte (((BigDecimal ) value ).toBigInteger ());
165+ if (type .getCode () == Code .PG_NUMERIC )
166+ return AbstractJdbcWrapper .checkedCastToByte (
167+ AbstractJdbcWrapper .parseBigDecimal ((String ) value ).toBigInteger ());
152168 }
153169 if (targetType .equals (BigInteger .class )) {
154170 if (type .getCode () == Code .BOOL ) return (Boolean ) value ? BigInteger .ONE : BigInteger .ZERO ;
155171 if (type .getCode () == Code .INT64 || type .getCode () == Code .ENUM )
156172 return BigInteger .valueOf ((Long ) value );
157173 if (type .getCode () == Code .NUMERIC )
158174 return AbstractJdbcWrapper .checkedCastToBigInteger ((BigDecimal ) value );
175+ if (type .getCode () == Code .PG_NUMERIC )
176+ return AbstractJdbcWrapper .checkedCastToBigInteger (
177+ AbstractJdbcWrapper .parseBigDecimal ((String ) value ));
159178 }
160179 if (targetType .equals (Float .class )) {
161180 if (type .getCode () == Code .BOOL )
@@ -166,6 +185,8 @@ static Object convert(Object value, Type type, Class<?> targetType) throws SQLEx
166185 if (type .getCode () == Code .FLOAT64 )
167186 return AbstractJdbcWrapper .checkedCastToFloat ((Double ) value );
168187 if (type .getCode () == Code .NUMERIC ) return ((BigDecimal ) value ).floatValue ();
188+ if (type .getCode () == Code .PG_NUMERIC )
189+ return AbstractJdbcWrapper .parseFloat ((String ) value );
169190 }
170191 if (targetType .equals (Double .class )) {
171192 if (type .getCode () == Code .BOOL )
@@ -174,6 +195,8 @@ static Object convert(Object value, Type type, Class<?> targetType) throws SQLEx
174195 return value ;
175196 }
176197 if (type .getCode () == Code .NUMERIC ) return ((BigDecimal ) value ).doubleValue ();
198+ if (type .getCode () == Code .PG_NUMERIC )
199+ return AbstractJdbcWrapper .parseDouble ((String ) value );
177200 }
178201 if (targetType .equals (java .sql .Date .class )) {
179202 if (type .getCode () == Code .DATE ) return value ;
0 commit comments