Skip to content

Commit

Permalink
Test PR dotnet#27291
Browse files Browse the repository at this point in the history
  • Loading branch information
bricelam committed Feb 4, 2022
1 parent 9ae9c2b commit 011e677
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/Microsoft.Data.Sqlite.Core/SqliteParameter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
4 changes: 4 additions & 0 deletions src/Microsoft.Data.Sqlite.Core/SqliteValueBinder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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 },
Expand Down
72 changes: 72 additions & 0 deletions test/Microsoft.Data.Sqlite.Tests/SqliteParameterTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
{
Expand Down Expand Up @@ -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()
{
Expand Down

0 comments on commit 011e677

Please sign in to comment.