Skip to content

Commit 8e6d958

Browse files
committed
Fix decimal parameters having scale > width (#303)
1 parent c5c7ff8 commit 8e6d958

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

DuckDB.NET.Data/PreparedStatement/ClrToDuckDBConverter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ private static DuckDBValue DecimalToDuckDBValue(decimal value)
173173

174174
result += new BigInteger(decimal.Multiply(fractionalPart, (decimal)power));
175175

176-
int width = result.IsZero ? 1 : (int)Math.Floor(BigInteger.Log10(BigInteger.Abs(result))) + 1;
176+
int width = Math.Max(scale, result.IsZero ? 1 : (int)Math.Floor(BigInteger.Log10(BigInteger.Abs(result))) + 1);
177177

178178
return NativeMethods.Value.DuckDBCreateDecimal(new DuckDBDecimal((byte)width, scale, new DuckDBHugeInt(result)));
179179
}

DuckDB.NET.Test/Parameters/DecimalParameterTest.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,4 +168,21 @@ public void BindParameterWithoutTable()
168168
result.Should().BeOfType<decimal>().Subject.Should().Be(value);
169169
}
170170
}
171-
}
171+
} [Fact]
172+
public void BindParameterInComparison()
173+
{
174+
decimal[] values = [decimal.Zero, 0.00m, 123456789.987654321m, -123456789.987654321m, 1.230m, -1.23m,
175+
0.000000001m, -0.000000001m, 1000000.000000001m, -1000000.000000001m, 1.123456789012345678901m];
176+
177+
foreach (var value in values)
178+
{
179+
Command.CommandText = "SELECT 0.1 > ?;";
180+
Command.Parameters.Clear();
181+
Command.Parameters.Add(new DuckDBParameter(value));
182+
183+
var result = Command.ExecuteScalar();
184+
185+
result.Should().BeOfType<bool>();
186+
}
187+
}
188+
}

0 commit comments

Comments
 (0)