Commit 1841c25f authored by Sam Saffron's avatar Sam Saffron

merge

parents 9d7e6589 1dd33c7c
...@@ -178,19 +178,22 @@ private static IEnumerable<T> QueryInternal<T>(this IDbConnection cnn, string sq ...@@ -178,19 +178,22 @@ private static IEnumerable<T> QueryInternal<T>(this IDbConnection cnn, string sq
var identity = new Identity(sql, cnn, typeof(T), param == null ? null : param.GetType()); var identity = new Identity(sql, cnn, typeof(T), param == null ? null : param.GetType());
var info = GetCacheInfo(param, identity); var info = GetCacheInfo(param, identity);
using (var reader = GetReader(cnn, transaction, sql, info.ParamReader, param)) using (var cmd = SetupCommand(cnn, transaction, sql, info.ParamReader, param))
{ {
if (info.Deserializer == null) using (var reader = cmd.ExecuteReader())
{ {
info.Deserializer = GetDeserializer<T>(identity, reader); if (info.Deserializer == null)
queryCache[identity] = info; {
} info.Deserializer = GetDeserializer<T>(identity, reader);
queryCache[identity] = info;
}
var deserializer = (Func<IDataReader,T>)info.Deserializer; var deserializer = (Func<IDataReader, T>)info.Deserializer;
while (reader.Read()) while (reader.Read())
{ {
yield return deserializer(reader); yield return deserializer(reader);
}
} }
} }
} }
...@@ -212,20 +215,22 @@ private static IEnumerable<T> QueryInternal<T>(this IDbConnection cnn, string sq ...@@ -212,20 +215,22 @@ private static IEnumerable<T> QueryInternal<T>(this IDbConnection cnn, string sq
var identity = new Identity(sql, cnn, typeof(T), param == null ? null : param.GetType()); var identity = new Identity(sql, cnn, typeof(T), param == null ? null : param.GetType());
var info = GetCacheInfo(param, identity); var info = GetCacheInfo(param, identity);
using (var reader = GetReader(cnn, transaction, sql, info.ParamReader, param)) using (var cmd = SetupCommand(cnn, transaction, sql, info.ParamReader, param))
{ {
if (info.Deserializer == null) using (var reader = cmd.ExecuteReader())
{ {
int start = 0; if (info.Deserializer == null)
int length = -1;
for (length = 1; length < reader.FieldCount; length++)
{ {
if (reader.GetName(length) == splitOn) int start = 0;
int length = -1;
for (length = 1; length < reader.FieldCount; length++)
{ {
break; if (reader.GetName(length) == splitOn)
{
break;
}
} }
}
// dynamic comes back as object ... // dynamic comes back as object ...
if (typeof(T) == typeof(object)) if (typeof(T) == typeof(object))
...@@ -246,17 +251,18 @@ private static IEnumerable<T> QueryInternal<T>(this IDbConnection cnn, string sq ...@@ -246,17 +251,18 @@ private static IEnumerable<T> QueryInternal<T>(this IDbConnection cnn, string sq
info.Deserializer2 = GetDeserializer<U>(identity, reader, start + length, returnNullIfFirstMissing: true); info.Deserializer2 = GetDeserializer<U>(identity, reader, start + length, returnNullIfFirstMissing: true);
} }
queryCache[identity] = info; queryCache[identity] = info;
} }
var deserializer = (Func<IDataReader, T>)info.Deserializer; var deserializer = (Func<IDataReader, T>) info.Deserializer;
var deserializer2 = (Func<IDataReader, U>)info.Deserializer2; var deserializer2 = (Func<IDataReader, U>) info.Deserializer2;
while (reader.Read()) while (reader.Read())
{ {
var tmp = deserializer(reader); var tmp = deserializer(reader);
map(tmp, deserializer2(reader)); map(tmp, deserializer2(reader));
yield return tmp; yield return tmp;
}
} }
} }
} }
...@@ -504,11 +510,11 @@ public static void PackListParameters(IDbCommand command, string namePrefix, obj ...@@ -504,11 +510,11 @@ public static void PackListParameters(IDbCommand command, string namePrefix, obj
return (Action<IDbCommand, object>)dm.CreateDelegate(typeof(Action<IDbCommand, object>)); return (Action<IDbCommand, object>)dm.CreateDelegate(typeof(Action<IDbCommand, object>));
} }
private static IDbCommand SetupCommand(IDbConnection cnn, IDbTransaction tranaction, string sql, Action<IDbCommand, object> paramReader, object obj) private static IDbCommand SetupCommand(IDbConnection cnn, IDbTransaction transaction, string sql, Action<IDbCommand, object> paramReader, object obj)
{ {
var cmd = cnn.CreateCommand(); var cmd = cnn.CreateCommand();
cmd.Transaction = tranaction; cmd.Transaction = transaction;
cmd.CommandText = sql; cmd.CommandText = sql;
if (paramReader != null) if (paramReader != null)
{ {
...@@ -526,15 +532,6 @@ private static int ExecuteCommand(IDbConnection cnn, IDbTransaction tranaction, ...@@ -526,15 +532,6 @@ private static int ExecuteCommand(IDbConnection cnn, IDbTransaction tranaction,
} }
} }
private static IDataReader GetReader(IDbConnection cnn, IDbTransaction tranaction, string sql, Action<IDbCommand, object> paramReader, object obj)
{
using (var cmd = SetupCommand(cnn, tranaction, sql, paramReader, obj))
{
return cmd.ExecuteReader();
}
}
private static object GetStructDeserializer<T>(IDataReader reader) private static object GetStructDeserializer<T>(IDataReader reader)
{ {
Func<IDataReader, T> deserializer = null; Func<IDataReader, T> deserializer = null;
......
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