From 011e677e3075c69a7495beb6ec14958423c9804a Mon Sep 17 00:00:00 2001 From: Brice Lambson Date: Fri, 4 Feb 2022 12:53:46 -0800 Subject: [PATCH] Test PR #27291 --- .../SqliteParameter.cs | 2 +- .../SqliteValueBinder.cs | 4 ++ .../SqliteParameterTest.cs | 72 +++++++++++++++++++ 3 files changed, 77 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.Data.Sqlite.Core/SqliteParameter.cs b/src/Microsoft.Data.Sqlite.Core/SqliteParameter.cs index 265634b0100..e71073b8300 100644 --- a/src/Microsoft.Data.Sqlite.Core/SqliteParameter.cs +++ b/src/Microsoft.Data.Sqlite.Core/SqliteParameter.cs @@ -200,7 +200,7 @@ public override void ResetDbType() public virtual void ResetSqliteType() { DbType = DbType.String; - SqliteType = SqliteType.Text; + _sqliteType = null; } internal bool Bind(sqlite3_stmt stmt) diff --git a/src/Microsoft.Data.Sqlite.Core/SqliteValueBinder.cs b/src/Microsoft.Data.Sqlite.Core/SqliteValueBinder.cs index 1d7db99249d..137a50fe080 100644 --- a/src/Microsoft.Data.Sqlite.Core/SqliteValueBinder.cs +++ b/src/Microsoft.Data.Sqlite.Core/SqliteValueBinder.cs @@ -246,6 +246,10 @@ public virtual void Bind() { typeof(char), SqliteType.Text }, { typeof(DateTime), SqliteType.Text }, { typeof(DateTimeOffset), SqliteType.Text }, +#if NET6_0_OR_GREATER + { typeof(DateOnly), SqliteType.Text }, + { typeof(TimeOnly), SqliteType.Text }, +#endif { typeof(DBNull), SqliteType.Text }, { typeof(decimal), SqliteType.Text }, { typeof(double), SqliteType.Real }, diff --git a/test/Microsoft.Data.Sqlite.Tests/SqliteParameterTest.cs b/test/Microsoft.Data.Sqlite.Tests/SqliteParameterTest.cs index 1779cad3e0b..0f695417454 100644 --- a/test/Microsoft.Data.Sqlite.Tests/SqliteParameterTest.cs +++ b/test/Microsoft.Data.Sqlite.Tests/SqliteParameterTest.cs @@ -93,6 +93,68 @@ public void SqliteType_defaults_to_text() Assert.Equal(SqliteType.Text, new SqliteParameter().SqliteType); } + [Theory] + [InlineData(false, SqliteType.Integer)] + [InlineData((byte)0, SqliteType.Integer)] + [InlineData(new byte[0], SqliteType.Blob)] + [InlineData('A', SqliteType.Text)] + [InlineData(0.0, SqliteType.Real)] + [InlineData(0f, SqliteType.Real)] + [InlineData(0, SqliteType.Integer)] + [InlineData(0L, SqliteType.Integer)] + [InlineData((sbyte)0, SqliteType.Integer)] + [InlineData((short)0, SqliteType.Integer)] + [InlineData("", SqliteType.Text)] + [InlineData(0u, SqliteType.Integer)] + [InlineData(0ul, SqliteType.Integer)] + [InlineData((ushort)0, SqliteType.Integer)] + public void SqliteType_is_inferred_from_value(object value, SqliteType expected) + { + var parameter = new SqliteParameter { Value = value }; + Assert.Equal(expected, parameter.SqliteType); + } + + [Fact] + public void SqliteType_is_inferred_from_DateTime_value() + => SqliteType_is_inferred_from_value(default(DateTime), SqliteType.Text); + + [Fact] + public void SqliteType_is_inferred_from_DateTimeOffset_value() + => SqliteType_is_inferred_from_value(default(DateTimeOffset), SqliteType.Text); + +#if NET6_0_OR_GREATER + [Fact] + public void SqliteType_is_inferred_from_DateOnly_value() + => SqliteType_is_inferred_from_value(default(DateOnly), SqliteType.Text); + + [Fact] + public void SqliteType_is_inferred_from_TimeOnly_value() + => SqliteType_is_inferred_from_value(default(TimeOnly), SqliteType.Text); +#endif + + [Fact] + public void SqliteType_is_inferred_from_DBNull() + => SqliteType_is_inferred_from_value(DBNull.Value, SqliteType.Text); + + [Fact] + public void SqliteType_is_inferred_from_decimal_value() + => SqliteType_is_inferred_from_value(0m, SqliteType.Text); + + [Fact] + public void SqliteType_is_inferred_from_Guid_value() + => SqliteType_is_inferred_from_value(default(Guid), SqliteType.Text); + + [Fact] + public void SqliteType_is_inferred_from_TimeSpan_value() + => SqliteType_is_inferred_from_value(default(TimeSpan), SqliteType.Text); + + [Fact] + public void SqliteType_overrides_inferred_value() + { + var parameter = new SqliteParameter { Value = 'A', SqliteType = SqliteType.Integer }; + Assert.Equal(SqliteType.Integer, parameter.SqliteType); + } + [Fact] public void Direction_input_by_default() { @@ -128,6 +190,16 @@ public void ResetSqliteType_works() Assert.Equal(SqliteType.Text, parameter.SqliteType); } + [Fact] + public void ResetSqliteType_works_when_value() + { + var parameter = new SqliteParameter { Value = new byte[0], SqliteType = SqliteType.Text }; + + parameter.ResetSqliteType(); + + Assert.Equal(SqliteType.Blob, parameter.SqliteType); + } + [Fact] public void Bind_requires_set_name() {