Commit 19a5975a authored by Sam Saffron's avatar Sam Saffron

remove some of the dependency on SqlConnection and so on

parent 4aef740a
...@@ -108,13 +108,13 @@ public bool Equals(Identity other) ...@@ -108,13 +108,13 @@ public bool Equals(Identity other)
static Dictionary<Type, SqlDbType> typeMap; static Dictionary<Type, SqlDbType> typeMap;
public static List<dynamic> ExecuteMapperQuery (this SqlConnection cnn, string sql, object param = null, SqlTransaction transaction = null) public static List<dynamic> ExecuteMapperQuery (this IDbConnection cnn, string sql, object param = null, SqlTransaction transaction = null)
{ {
// TODO: get rid of casting hackery // TODO: get rid of casting hackery
return ExecuteMapperQuery<ExpandoObject>(cnn, sql, param, transaction).Select(s => s as dynamic).ToList(); return ExecuteMapperQuery<ExpandoObject>(cnn, sql, param, transaction).Select(s => s as dynamic).ToList();
} }
public static List<T> ExecuteMapperQuery<T>(this SqlConnection cnn, string sql, object param = null, SqlTransaction transaction = null) public static List<T> ExecuteMapperQuery<T>(this IDbConnection cnn, string sql, object param = null, SqlTransaction transaction = null)
{ {
var identity = new Identity(sql, typeof(T)); var identity = new Identity(sql, typeof(T));
var rval = new List<T>(); var rval = new List<T>();
...@@ -154,7 +154,7 @@ public static List<T> ExecuteMapperQuery<T>(this SqlConnection cnn, string sql, ...@@ -154,7 +154,7 @@ public static List<T> ExecuteMapperQuery<T>(this SqlConnection cnn, string sql,
cachedSerializers[identity] = oDeserializer; cachedSerializers[identity] = oDeserializer;
} }
Func<SqlDataReader, T> deserializer = (Func<SqlDataReader, T>)oDeserializer; Func<IDataReader, T> deserializer = (Func<IDataReader, T>)oDeserializer;
while (reader.Read()) while (reader.Read())
{ {
rval.Add(deserializer(reader)); rval.Add(deserializer(reader));
...@@ -166,7 +166,7 @@ public static List<T> ExecuteMapperQuery<T>(this SqlConnection cnn, string sql, ...@@ -166,7 +166,7 @@ public static List<T> ExecuteMapperQuery<T>(this SqlConnection cnn, string sql,
return rval; return rval;
} }
private static object GetDynamicDeserializer(SqlDataReader reader) private static object GetDynamicDeserializer(IDataReader reader)
{ {
List<string> colNames = new List<string>(); List<string> colNames = new List<string>();
for (int i = 0; i < reader.FieldCount; i++) for (int i = 0; i < reader.FieldCount; i++)
...@@ -174,7 +174,7 @@ private static object GetDynamicDeserializer(SqlDataReader reader) ...@@ -174,7 +174,7 @@ private static object GetDynamicDeserializer(SqlDataReader reader)
colNames.Add(reader.GetName(i)); colNames.Add(reader.GetName(i));
} }
Func<SqlDataReader, ExpandoObject> rval = Func<IDataReader, ExpandoObject> rval =
r => r =>
{ {
IDictionary<string, object> row = new ExpandoObject(); IDictionary<string, object> row = new ExpandoObject();
...@@ -228,7 +228,7 @@ private static object GetDynamicDeserializer(SqlDataReader reader) ...@@ -228,7 +228,7 @@ private static object GetDynamicDeserializer(SqlDataReader reader)
} }
private static SqlDataReader GetReader<T>(SqlConnection cnn, SqlTransaction tranaction, string sql, List<ParamInfo> paramInfo) private static IDataReader GetReader<T>(IDbConnection cnn, SqlTransaction tranaction, string sql, List<ParamInfo> paramInfo)
{ {
using (var cmd = cnn.CreateCommand()) using (var cmd = cnn.CreateCommand())
{ {
...@@ -238,7 +238,9 @@ private static SqlDataReader GetReader<T>(SqlConnection cnn, SqlTransaction tran ...@@ -238,7 +238,9 @@ private static SqlDataReader GetReader<T>(SqlConnection cnn, SqlTransaction tran
{ {
foreach (var info in paramInfo) foreach (var info in paramInfo)
{ {
var param = cmd.Parameters.Add("@" + info.Name, info.Type); var param = new SqlParameter("@" + info.Name, info.Type);
cmd.Parameters.Add(param);
param.Value = info.Val ?? DBNull.Value; param.Value = info.Val ?? DBNull.Value;
param.Direction = ParameterDirection.Input; param.Direction = ParameterDirection.Input;
if (info.Type == SqlDbType.NVarChar) if (info.Type == SqlDbType.NVarChar)
...@@ -293,16 +295,16 @@ private static SqlDataReader GetReader<T>(SqlConnection cnn, SqlTransaction tran ...@@ -293,16 +295,16 @@ private static SqlDataReader GetReader<T>(SqlConnection cnn, SqlTransaction tran
} }
private static object GetStructDeserializer<T>(SqlDataReader reader) private static object GetStructDeserializer<T>(IDataReader reader)
{ {
Func<SqlDataReader, T> deserializer = null; Func<IDataReader, T> deserializer = null;
deserializer = r => (T)r.GetValue(0); deserializer = r => (T)r.GetValue(0);
return deserializer; return deserializer;
} }
public static Func<SqlDataReader, T> GetClassDeserializer<T>(SqlDataReader reader) public static Func<IDataReader, T> GetClassDeserializer<T>(IDataReader reader)
{ {
DynamicMethod dm = new DynamicMethod("Deserialize" + Guid.NewGuid().ToString(), typeof(T), new Type[] { typeof(SqlDataReader) }, true); DynamicMethod dm = new DynamicMethod("Deserialize" + Guid.NewGuid().ToString(), typeof(T), new Type[] { typeof(IDataReader) }, true);
var il = dm.GetILGenerator(); var il = dm.GetILGenerator();
...@@ -324,7 +326,7 @@ private static object GetStructDeserializer<T>(SqlDataReader reader) ...@@ -324,7 +326,7 @@ private static object GetStructDeserializer<T>(SqlDataReader reader)
).ToList(); ).ToList();
var getItem = typeof(SqlDataReader).GetProperties(BindingFlags.Instance | BindingFlags.Public) var getItem = typeof(IDataRecord).GetProperties(BindingFlags.Instance | BindingFlags.Public)
.Where(p => p.GetIndexParameters().Any() && p.GetIndexParameters()[0].ParameterType == typeof(int)) .Where(p => p.GetIndexParameters().Any() && p.GetIndexParameters()[0].ParameterType == typeof(int))
.Select(p => p.GetGetMethod()).First(); .Select(p => p.GetGetMethod()).First();
...@@ -363,7 +365,7 @@ private static object GetStructDeserializer<T>(SqlDataReader reader) ...@@ -363,7 +365,7 @@ private static object GetStructDeserializer<T>(SqlDataReader reader)
} }
il.Emit(OpCodes.Ret); // stack is empty il.Emit(OpCodes.Ret); // stack is empty
return (Func<SqlDataReader, T>)dm.CreateDelegate(typeof(Func<SqlDataReader, T>)); return (Func<IDataReader, T>)dm.CreateDelegate(typeof(Func<IDataReader, T>));
} }
private static void EmitInt32(ILGenerator il, int value) private static void EmitInt32(ILGenerator il, int value)
......
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