From cd5b076e6d0550b73f8eb5c1eeee53aa724192e4 Mon Sep 17 00:00:00 2001 From: Suraiya Hameed Date: Thu, 22 Dec 2016 16:40:11 -0800 Subject: [PATCH] Fix for TVP BigDecimal precision Issue#86 --- .../com/microsoft/sqlserver/jdbc/SQLServerDataTable.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java index 3dbddfa37..82aad2c14 100644 --- a/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java +++ b/src/main/java/com/microsoft/sqlserver/jdbc/SQLServerDataTable.java @@ -161,14 +161,17 @@ public synchronized void addRow(Object... values) throws SQLServerException if(null != val) { bd = new BigDecimal(val.toString()); + // BigDecimal#precision returns number of digits in the unscaled value. + // Say, for value 0.01, it returns 1 but the precision should be 3 for SQLServer + int precision = Util.getValueLengthBaseOnJavaType(bd, JavaType.of(bd), null, null, jdbcType); if (bd.scale() > currentColumnMetadata.scale) { currentColumnMetadata.scale = bd.scale(); isColumnMetadataUpdated = true; } - if (bd.precision() > currentColumnMetadata.precision) + if (precision > currentColumnMetadata.precision) { - currentColumnMetadata.precision = bd.precision(); + currentColumnMetadata.precision = precision; isColumnMetadataUpdated = true; } if(isColumnMetadataUpdated)