Commit 38b3f224 authored by Sam Saffron's avatar Sam Saffron

allow for lists of DbString in a 'IN' clause

parent d9306233
...@@ -1147,6 +1147,7 @@ public static void PackListParameters(IDbCommand command, string namePrefix, obj ...@@ -1147,6 +1147,7 @@ public static void PackListParameters(IDbCommand command, string namePrefix, obj
if (list != null) if (list != null)
{ {
bool isString = value is IEnumerable<string>; bool isString = value is IEnumerable<string>;
bool isDbString = value is IEnumerable<DbString>;
foreach (var item in list) foreach (var item in list)
{ {
count++; count++;
...@@ -1161,7 +1162,15 @@ public static void PackListParameters(IDbCommand command, string namePrefix, obj ...@@ -1161,7 +1162,15 @@ public static void PackListParameters(IDbCommand command, string namePrefix, obj
listParam.Size = -1; listParam.Size = -1;
} }
} }
command.Parameters.Add(listParam); if (isDbString && item as DbString != null)
{
var str = item as DbString;
str.AddParameter(command, listParam.ParameterName);
}
else
{
command.Parameters.Add(listParam);
}
} }
if (count == 0) if (count == 0)
...@@ -1197,7 +1206,6 @@ private static IEnumerable<PropertyInfo> FilterParameters(IEnumerable<PropertyIn ...@@ -1197,7 +1206,6 @@ private static IEnumerable<PropertyInfo> FilterParameters(IEnumerable<PropertyIn
{ {
Type type = identity.parametersType; Type type = identity.parametersType;
bool filterParams = identity.commandType.GetValueOrDefault(CommandType.Text) == CommandType.Text; bool filterParams = identity.commandType.GetValueOrDefault(CommandType.Text) == CommandType.Text;
var dm = new DynamicMethod(string.Format("ParamInfo{0}", Guid.NewGuid()), null, new[] { typeof(IDbCommand), typeof(object) }, type, true); var dm = new DynamicMethod(string.Format("ParamInfo{0}", Guid.NewGuid()), null, new[] { typeof(IDbCommand), typeof(object) }, type, true);
var il = dm.GetILGenerator(); var il = dm.GetILGenerator();
......
...@@ -17,6 +17,15 @@ class Tests ...@@ -17,6 +17,15 @@ class Tests
SqlConnection connection = Program.GetOpenConnection(); SqlConnection connection = Program.GetOpenConnection();
public void TestListOfAnsiStrings()
{
var results = connection.Query<string>("select * from (select 'a' str union select 'b' union select 'c') X where str in @strings",
new { strings = new[] { new DbString { IsAnsi = true, Value = "a" }, new DbString { IsAnsi = true, Value = "b" } } }).ToList();
results[0].IsEqualTo("a");
results[1].IsEqualTo("b");
}
public void TestNullableGuidSupport() public void TestNullableGuidSupport()
{ {
var guid = connection.Query<Guid?>("select null").First(); var guid = connection.Query<Guid?>("select null").First();
......
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