Commit 7de47221 authored by Sam Saffron's avatar Sam Saffron

amended massive test so it is not hackey ... pulled latest from Rob

parent a09dcbd8
...@@ -66,14 +66,18 @@ public static List<dynamic> ToExpandoList(this IDataReader rdr) ...@@ -66,14 +66,18 @@ public static List<dynamic> ToExpandoList(this IDataReader rdr)
var result = new List<dynamic>(); var result = new List<dynamic>();
while (rdr.Read()) while (rdr.Read())
{ {
dynamic e = new ExpandoObject(); result.Add(rdr.RecordToExpando());
var d = e as IDictionary<string, object>;
for (int i = 0; i < rdr.FieldCount; i++)
d.Add(rdr.GetName(i), rdr[i]);
result.Add(e);
} }
return result; return result;
} }
public static dynamic RecordToExpando(this IDataReader rdr)
{
dynamic e = new ExpandoObject();
var d = e as IDictionary<string, object>;
for (int i = 0; i < rdr.FieldCount; i++)
d.Add(rdr.GetName(i), rdr[i]);
return e;
}
/// <summary> /// <summary>
/// Turns the object into an ExpandoObject /// Turns the object into an ExpandoObject
/// </summary> /// </summary>
...@@ -113,32 +117,28 @@ public class DynamicModel ...@@ -113,32 +117,28 @@ public class DynamicModel
DbProviderFactory _factory; DbProviderFactory _factory;
string _connectionString; string _connectionString;
public DynamicModel(string connectionString = "", string tableName = "", string primaryKeyField = "") public DynamicModel(string connectionStringName = "", string tableName = "", string primaryKeyField = "")
{ {
_factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
/*
TableName = tableName == "" ? this.GetType().Name : tableName; TableName = tableName == "" ? this.GetType().Name : tableName;
PrimaryKeyField = string.IsNullOrEmpty(primaryKeyField) ? "ID" : primaryKeyField; PrimaryKeyField = string.IsNullOrEmpty(primaryKeyField) ? "ID" : primaryKeyField;
if (connectionStringName == "")
connectionStringName = ConfigurationManager.ConnectionStrings[0].Name;
var _providerName = "System.Data.SqlClient"; var _providerName = "System.Data.SqlClient";
if (ConfigurationManager.ConnectionStrings[connectionStringName] != null)
_factory = DbProviderFactories.GetFactory(_providerName); {
_connectionString = connectionString; if (!string.IsNullOrEmpty(ConfigurationManager.ConnectionStrings[connectionStringName].ProviderName))
} _providerName = ConfigurationManager.ConnectionStrings[connectionStringName].ProviderName;
}
public virtual List<dynamic> QueryHacked(string sql, DbConnection connection, params object[] args) else
{
List<dynamic> list = new List<dynamic>();
using(var rdr = CreateCommand(sql, connection, args).ExecuteReader(CommandBehavior.Default))
while (rdr.Read())
{ {
var e = new ExpandoObject(); throw new InvalidOperationException("Can't find a connection string with the name '" + connectionStringName + "'");
var d = e as IDictionary<string, object>;
for (var i = 0; i < rdr.FieldCount; i++)
d.Add(rdr.GetName(i), rdr[i]);
list.Add(e);
} }
return list; _factory = DbProviderFactories.GetFactory(_providerName);
_connectionString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
*/
} }
/// <summary> /// <summary>
/// Enumerates the reader yielding the result - thanks to Jeroen Haegebaert /// Enumerates the reader yielding the result - thanks to Jeroen Haegebaert
/// </summary> /// </summary>
...@@ -146,23 +146,23 @@ public virtual IEnumerable<dynamic> Query(string sql, params object[] args) ...@@ -146,23 +146,23 @@ public virtual IEnumerable<dynamic> Query(string sql, params object[] args)
{ {
using (var conn = OpenConnection()) using (var conn = OpenConnection())
{ {
var rdr = CreateCommand(sql, conn, args).ExecuteReader(CommandBehavior.CloseConnection); var rdr = CreateCommand(sql, conn, args).ExecuteReader();
while (rdr.Read()) while (rdr.Read())
{ {
var e = new ExpandoObject(); yield return rdr.RecordToExpando(); ;
var d = e as IDictionary<string, object>;
for (var i = 0; i < rdr.FieldCount; i++)
d.Add(rdr.GetName(i), rdr[i]);
yield return e;
} }
} }
} }
/// <summary> public virtual IEnumerable<dynamic> Query(string sql, DbConnection connection, params object[] args)
/// Runs a query against the database
/// </summary>
public virtual IList<dynamic> Fetch(string sql, params object[] args)
{ {
return Query(sql, args).ToList<dynamic>(); using (var rdr = CreateCommand(sql, connection, args).ExecuteReader())
{
while (rdr.Read())
{
yield return rdr.RecordToExpando(); ;
}
}
} }
/// <summary> /// <summary>
/// Returns a single result /// Returns a single result
...@@ -181,8 +181,7 @@ public virtual object Scalar(string sql, params object[] args) ...@@ -181,8 +181,7 @@ public virtual object Scalar(string sql, params object[] args)
/// </summary> /// </summary>
DbCommand CreateCommand(string sql, DbConnection conn, params object[] args) DbCommand CreateCommand(string sql, DbConnection conn, params object[] args)
{ {
DbCommand result = null; var result = _factory.CreateCommand();
result = _factory.CreateCommand();
result.Connection = conn; result.Connection = conn;
result.CommandText = sql; result.CommandText = sql;
if (args.Length > 0) if (args.Length > 0)
...@@ -194,10 +193,10 @@ DbCommand CreateCommand(string sql, DbConnection conn, params object[] args) ...@@ -194,10 +193,10 @@ DbCommand CreateCommand(string sql, DbConnection conn, params object[] args)
/// </summary> /// </summary>
public virtual DbConnection OpenConnection() public virtual DbConnection OpenConnection()
{ {
var conn = _factory.CreateConnection(); var result = _factory.CreateConnection();
conn.ConnectionString = _connectionString; result.ConnectionString = _connectionString;
conn.Open(); result.Open();
return conn; return result;
} }
/// <summary> /// <summary>
/// Builds a set of Insert and Update commands based on the passed-on objects. /// Builds a set of Insert and Update commands based on the passed-on objects.
...@@ -436,7 +435,8 @@ public virtual dynamic Paged(string where = "", string orderBy = "", string colu ...@@ -436,7 +435,8 @@ public virtual dynamic Paged(string where = "", string orderBy = "", string colu
public virtual dynamic Single(object key, string columns = "*") public virtual dynamic Single(object key, string columns = "*")
{ {
var sql = string.Format("SELECT {0} FROM {1} WHERE {2} = @0", columns, TableName, PrimaryKeyField); var sql = string.Format("SELECT {0} FROM {1} WHERE {2} = @0", columns, TableName, PrimaryKeyField);
return Fetch(sql, key).FirstOrDefault(); var items = Query(sql, key).ToList();
return items.FirstOrDefault();
} }
} }
} }
\ No newline at end of file
...@@ -94,13 +94,9 @@ public void Run(int iterations) ...@@ -94,13 +94,9 @@ public void Run(int iterations)
tests.Add(id => mapperConnection2.ExecuteMapperQuery("select * from Posts where Id = @Id", new { Id = id }).ToList(), "Dynamic Mapper Query"); tests.Add(id => mapperConnection2.ExecuteMapperQuery("select * from Posts where Id = @Id", new { Id = id }).ToList(), "Dynamic Mapper Query");
var massiveConnection = new DynamicModel(Program.connectionString); var massiveModel = new DynamicModel(Program.connectionString);
tests.Add(id => massiveConnection.Query("select * from Posts where Id = @0", id).ToList(), "Dynamic Massive ORM Query"); var massiveConnection = Program.GetOpenConnection();
tests.Add(id => massiveModel.Query("select * from Posts where Id = @0", massiveConnection, id).ToList(), "Dynamic Massive ORM Query");
// Massive was hacked a bit to support an open connection, the intention is to add this to the API at some point
var massiveConnection2 = new DynamicModel(Program.connectionString);
var hackedConnection = Program.GetOpenConnection();
tests.Add(id => massiveConnection.QueryHacked("select * from Posts where Id = @0", hackedConnection , id).ToList(), "Dynamic Massive ORM Query (hacked)");
// HAND CODED // HAND CODED
......
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