Skip to content

Commit

Permalink
Fix bugs with odd types and ToScalarOrDefault
Browse files Browse the repository at this point in the history
  • Loading branch information
markrendle committed Jun 10, 2011
1 parent 5b46c93 commit bbcf28b
Show file tree
Hide file tree
Showing 12 changed files with 46 additions and 11 deletions.
11 changes: 11 additions & 0 deletions NugetPackAll.cmd
@@ -0,0 +1,11 @@
cd Simple.Data
call NugetPack.cmd
cd ..\Simple.Data.Ado
call NugetPack.cmd
cd ..\Simple.Data.Mocking
call NugetPack.cmd
cd ..\Simple.Data.SqlCe40
call NugetPack.cmd
cd ..\Simple.Data.SqlServer
call NugetPack.cmd
cd ..
7 changes: 1 addition & 6 deletions Simple.Data.Ado/CommandBuilder.cs
Expand Up @@ -185,13 +185,8 @@ private static IDbDataParameter CreateSingleParameter(object value, IDbCommand c
var parameter = command.CreateParameter();
parameter.ParameterName = name;
parameter.DbType = dbType;
parameter.Value = GetTheDataParameterValue(value);
parameter.Value = CommandHelper.FixObjectType(value);
return parameter;
}

private static object GetTheDataParameterValue(object value)
{
return value ?? DBNull.Value;
}
}
}
2 changes: 1 addition & 1 deletion Simple.Data.Ado/CommandHelper.cs
Expand Up @@ -71,7 +71,7 @@ private static void PrepareCommand(CommandBuilder commandBuilder, IDbCommand com
}
}

private static object FixObjectType(object value)
public static object FixObjectType(object value)
{
if (value == null) return DBNull.Value;
if (TypeHelper.IsKnownType(value.GetType())) return value;
Expand Down
1 change: 1 addition & 0 deletions Simple.Data.Ado/NugetPack.cmd
@@ -0,0 +1 @@
..\nuget\nuget pack -sym Simple.Data.Ado.csproj
1 change: 1 addition & 0 deletions Simple.Data.Mocking/NugetPack.cmd
@@ -0,0 +1 @@
..\nuget\nuget pack -sym Simple.Data.Mocking.csproj
1 change: 1 addition & 0 deletions Simple.Data.SqlCe40/NugetPack.cmd
@@ -0,0 +1 @@
..\nuget\nuget pack -sym Simple.Data.SqlCe40.csproj
1 change: 1 addition & 0 deletions Simple.Data.SqlServer/NugetPack.cmd
@@ -0,0 +1 @@
..\nuget\nuget pack -sym Simple.Data.SqlServer.csproj
10 changes: 10 additions & 0 deletions Simple.Data.SqlTest/ConversionTests.cs
Expand Up @@ -25,6 +25,16 @@ public void WeirdTypeGetsConvertedToInt()
Assert.AreEqual(1, user.Id);
}

[Test]
public void WeirdTypeUsedInQueryGetsConvertedToInt()
{
var weirdValue = new WeirdType(1);
var db = DatabaseHelper.Open();
var user = db.Users.QueryById(weirdValue).FirstOrDefault();
Assert.IsNotNull(user);
Assert.AreEqual(1, user.Id);
}

[Test]
public void InsertingWeirdTypesFromExpando()
{
Expand Down
14 changes: 14 additions & 0 deletions Simple.Data.SqlTest/QueryTest.cs
Expand Up @@ -126,5 +126,19 @@ public void ShouldDirectlyQueryDetailTable()
Assert.IsNotNull(order);
Assert.AreEqual(1, order.OrderId);
}

[Test]
public void ShouldReturnNullWhenNoRowFound()
{
var db = DatabaseHelper.Open();
string name = db.Customers
.Query()
.Select(db.Customers.Name)
.Where(db.Customers.CustomerId == 0) // There is no CustomerId 0
.OrderByName()
.Take(1) // Should return only one record no matter what
.ToScalarOrDefault<string>();
Assert.IsNull(name);
}
}
}
Binary file modified Simple.Data.sln.docstates
Binary file not shown.
1 change: 1 addition & 0 deletions Simple.Data/NugetPack.cmd
@@ -0,0 +1 @@
..\nuget\nuget pack -sym Simple.Data.csproj
8 changes: 4 additions & 4 deletions Simple.Data/SimpleQuery.cs
Expand Up @@ -264,13 +264,13 @@ public dynamic ToScalar()
public dynamic ToScalarOrDefault()
{
var data = _adapter.RunQuery(this).ToArray();
if (data.Length != 1)
if (data.Length == 0)
{
throw new SimpleDataException("Query returned multiple rows; cannot return scalar value.");
return null;
}
if (data[0].Count == 0)
if (data.Length != 1)
{
return null;
throw new SimpleDataException("Query returned multiple rows; cannot return scalar value.");
}
if (data[0].Count > 1)
{
Expand Down

0 comments on commit bbcf28b

Please sign in to comment.