Commit 4ad839b3 authored by Sam Saffron's avatar Sam Saffron

more tests and fixes

parent 1ea4eb82
...@@ -20,6 +20,14 @@ static SqlMapper() ...@@ -20,6 +20,14 @@ static SqlMapper()
typeMap[typeof(int)] = SqlDbType.Int; typeMap[typeof(int)] = SqlDbType.Int;
typeMap[typeof(int?)] = SqlDbType.Int; typeMap[typeof(int?)] = SqlDbType.Int;
typeMap[typeof(string)] = SqlDbType.NVarChar; typeMap[typeof(string)] = SqlDbType.NVarChar;
// weird ... I know see: http://msdn.microsoft.com/en-us/library/ms131092.aspx
typeMap[typeof(double)] = SqlDbType.Float;
typeMap[typeof(double?)] = SqlDbType.Float;
typeMap[typeof(bool)] = SqlDbType.Bit;
typeMap[typeof(bool?)] = SqlDbType.Bit;
typeMap[typeof(Guid)] = SqlDbType.UniqueIdentifier; typeMap[typeof(Guid)] = SqlDbType.UniqueIdentifier;
typeMap[typeof(Guid?)] = SqlDbType.UniqueIdentifier; typeMap[typeof(Guid?)] = SqlDbType.UniqueIdentifier;
typeMap[typeof(int[])] = SqlDbType.Structured; typeMap[typeof(int[])] = SqlDbType.Structured;
...@@ -106,7 +114,7 @@ public static List<T> ExecuteMapperQuery<T>(this SqlConnection cnn, string sql, ...@@ -106,7 +114,7 @@ public static List<T> ExecuteMapperQuery<T>(this SqlConnection cnn, string sql,
object oDeserializer; object oDeserializer;
if (!cachedSerializers.TryGetValue(identity, out oDeserializer)) if (!cachedSerializers.TryGetValue(identity, out oDeserializer))
{ {
if (typeof(T).IsClass) if (typeof(T).IsClass && typeof(T) != typeof(string))
{ {
oDeserializer = GetClassDeserializer<T>(reader); oDeserializer = GetClassDeserializer<T>(reader);
} }
...@@ -210,12 +218,7 @@ private static SqlDataReader GetReader<T>(SqlConnection cnn, SqlTransaction tran ...@@ -210,12 +218,7 @@ private static SqlDataReader GetReader<T>(SqlConnection cnn, SqlTransaction tran
private static object GetStructDeserializer<T>(SqlDataReader reader) private static object GetStructDeserializer<T>(SqlDataReader reader)
{ {
Func<SqlDataReader, T> deserializer = null; Func<SqlDataReader, T> deserializer = null;
var type = typeof(T); deserializer = r => (T)r.GetValue(0);
if (type == typeof(int))
{
// yuck boxing
deserializer = r => (T)(object)r.GetInt32(0);
}
return deserializer; return deserializer;
} }
......
...@@ -45,6 +45,24 @@ public void PassInIntArray() ...@@ -45,6 +45,24 @@ public void PassInIntArray()
AssertEquals(items[2], 3); AssertEquals(items[2], 3);
} }
public void TestDoubleParam()
{
AssertEquals(connection.ExecuteMapperQuery<double>("select @d", new { d = 0.1d }).First(), 0.1d);
}
public void TestBoolParam()
{
AssertEquals(connection.ExecuteMapperQuery<bool>("select @b", new { b = false }).First(), false);
}
public void TestStrings()
{
var strings = connection.ExecuteMapperQuery<string>(@"select 'a' a union select 'b'").ToList();
AssertEquals(strings[0], "a");
AssertEquals(strings[1], "b");
}
public class Dog public class Dog
{ {
public int? Age { get; set; } public int? Age { get; set; }
...@@ -61,7 +79,6 @@ public void TestIntSupportsNull() ...@@ -61,7 +79,6 @@ public void TestIntSupportsNull()
AssertEquals(dog.Count(), 1); AssertEquals(dog.Count(), 1);
AssertNull(dog.First().Age); AssertNull(dog.First().Age);
} }
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment