Skip to content

Commit

Permalink
Merge fe1967f into af05d5b
Browse files Browse the repository at this point in the history
  • Loading branch information
Seddryck committed Apr 2, 2023
2 parents af05d5b + fe1967f commit 1e1430e
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 3 deletions.
5 changes: 3 additions & 2 deletions DuckDB.NET.Data/Internal/PreparedStatement.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Globalization;
using System.Numerics;
using DuckDB.NET.Data.Extensions;

Expand Down Expand Up @@ -108,8 +109,8 @@ private static void BindParameter(DuckDBPreparedStatement preparedStatement, lon
}

private static DuckDBState BindObject(DuckDBPreparedStatement preparedStatement, long index, object value)
=> BindString(preparedStatement, index, value.ToString());
=> BindString(preparedStatement, index, Convert.ToString(value, CultureInfo.InvariantCulture));

private static DuckDBState BindBoolean(DuckDBPreparedStatement preparedStatement, long index, object value)
=> NativeMethods.PreparedStatements.DuckDBBindBoolean(preparedStatement, index, (bool)value);

Expand Down
50 changes: 49 additions & 1 deletion DuckDB.NET.Test/Parameters/DecimalParameterTest.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using System;
using System.Globalization;
using System.Text.RegularExpressions;
using DuckDB.NET.Data;
using FluentAssertions;
using Xunit;
Expand All @@ -22,7 +24,7 @@ public void SimpleTest()
foreach (var value in values)
{
var command = connection.CreateCommand();
command.CommandText = $"SELECT {value};";
command.CommandText = $"SELECT {Convert.ToString(value, CultureInfo.InvariantCulture)};";
command.ExecuteNonQuery();

//var scalar = command.ExecuteScalar();
Expand Down Expand Up @@ -93,4 +95,50 @@ void DecimalTests(decimal[] values, int precision, int scale)
command.ExecuteNonQuery();
}
}

[Fact]
public void InsertSelectValueTestWithCulture()
{
var defaultCulture = System.Threading.Thread.CurrentThread.CurrentCulture;
using var connection = new DuckDBConnection("DataSource=:memory:");
connection.Open();

var command = connection.CreateCommand();
DecimalTests(new[] { "fr-fr", "en-us" }, decimal.One / 2, 38, 15);

void DecimalTests(string[] cultures, decimal value, int precision, int scale)
{
command.CommandText = $"CREATE TABLE DecimalValuesTests (key INTEGER, value decimal({precision}, {scale}))";
command.ExecuteNonQuery();

foreach (var culture in cultures)
{
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(culture);
command.CommandText = "Insert Into DecimalValuesTests (key, value) values (1, ?)";
command.Parameters.Add(new DuckDBParameter(value));
command.ExecuteNonQuery();

command.Parameters.Clear();
command.CommandText = "SELECT value from DecimalValuesTests;";

var scalar = command.ExecuteScalar();
scalar.Should().Be(value);

var reader = command.ExecuteReader();
reader.Read();

var receivedValue = reader.GetDecimal(0);
receivedValue.Should().Be(value);

reader.GetFieldType(0).Should().Be(typeof(decimal));

command.CommandText = "Delete from DecimalValuesTests";
command.ExecuteNonQuery();
}

command.CommandText = "Drop TABLE DecimalValuesTests";
command.ExecuteNonQuery();
System.Threading.Thread.CurrentThread.CurrentCulture = defaultCulture;
}
}
}

0 comments on commit 1e1430e

Please sign in to comment.