This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -46,9 +46,9 @@ namespace DynamORM.Builders.Extensions
|
||||
if (func == null)
|
||||
throw new ArgumentNullException("Function cannot be null.");
|
||||
|
||||
using (var parser = DynamicParser.Parse(func))
|
||||
using (DynamicParser parser = DynamicParser.Parse(func))
|
||||
{
|
||||
var result = parser.Result;
|
||||
object result = parser.Result;
|
||||
|
||||
// If the expression result is string.
|
||||
if (result is string)
|
||||
@@ -58,7 +58,7 @@ namespace DynamORM.Builders.Extensions
|
||||
else if (result is DynamicParser.Node)
|
||||
{
|
||||
// Or if it resolves to a dynamic node
|
||||
var node = (DynamicParser.Node)result;
|
||||
DynamicParser.Node node = (DynamicParser.Node)result;
|
||||
|
||||
string owner = null;
|
||||
string main = null;
|
||||
@@ -89,7 +89,7 @@ namespace DynamORM.Builders.Extensions
|
||||
{
|
||||
if (owner == null && main == null)
|
||||
{
|
||||
var invoke = (DynamicParser.Node.Invoke)node;
|
||||
DynamicParser.Node.Invoke invoke = (DynamicParser.Node.Invoke)node;
|
||||
|
||||
if (invoke.Arguments.Length == 1 && invoke.Arguments[0] is Type)
|
||||
return builder.Table((Type)invoke.Arguments[0]);
|
||||
@@ -117,12 +117,12 @@ namespace DynamORM.Builders.Extensions
|
||||
|
||||
internal static T Table<T>(this T builder, string tableName, Dictionary<string, DynamicSchemaColumn> schema = null) where T : DynamicModifyBuilder
|
||||
{
|
||||
var tuple = tableName.Validated("Table Name").SplitSomethingAndAlias();
|
||||
Tuple<string, string> tuple = tableName.Validated("Table Name").SplitSomethingAndAlias();
|
||||
|
||||
if (!string.IsNullOrEmpty(tuple.Item2))
|
||||
throw new ArgumentException(string.Format("Can not use aliases in INSERT steatement. ({0})", tableName), "tableName");
|
||||
|
||||
var parts = tuple.Item1.Split('.');
|
||||
string[] parts = tuple.Item1.Split('.');
|
||||
|
||||
if (parts.Length > 2)
|
||||
throw new ArgumentException(string.Format("Table name can consist only from name or owner and name. ({0})", tableName), "tableName");
|
||||
@@ -143,7 +143,7 @@ namespace DynamORM.Builders.Extensions
|
||||
if (type.IsAnonymous())
|
||||
throw new InvalidOperationException(string.Format("Cant assign anonymous type as a table ({0}).", type.FullName));
|
||||
|
||||
var mapper = DynamicMapperCache.GetMapper(type);
|
||||
DynamicTypeMap mapper = DynamicMapperCache.GetMapper(type);
|
||||
|
||||
if (mapper == null)
|
||||
throw new InvalidOperationException("Cant assign unmapable type as a table.");
|
||||
|
||||
@@ -51,12 +51,12 @@ namespace DynamORM.Builders.Extensions
|
||||
{
|
||||
if (func == null) throw new ArgumentNullException("Array of functions cannot be null.");
|
||||
|
||||
using (var parser = DynamicParser.Parse(func))
|
||||
using (DynamicParser parser = DynamicParser.Parse(func))
|
||||
{
|
||||
string condition = null;
|
||||
bool and = true;
|
||||
|
||||
var result = parser.Result;
|
||||
object result = parser.Result;
|
||||
if (result is string)
|
||||
{
|
||||
condition = (string)result;
|
||||
@@ -76,8 +76,8 @@ namespace DynamORM.Builders.Extensions
|
||||
// Intercepting the 'x => x.And()' and 'x => x.Or()' virtual methods...
|
||||
if (result is DynamicParser.Node.Method && ((DynamicParser.Node.Method)result).Host is DynamicParser.Node.Argument)
|
||||
{
|
||||
var node = (DynamicParser.Node.Method)result;
|
||||
var name = node.Name.ToUpper();
|
||||
DynamicParser.Node.Method node = (DynamicParser.Node.Method)result;
|
||||
string name = node.Name.ToUpper();
|
||||
if (name == "AND" || name == "OR")
|
||||
{
|
||||
object[] args = ((DynamicParser.Node.Method)node).Arguments;
|
||||
@@ -166,7 +166,7 @@ namespace DynamORM.Builders.Extensions
|
||||
{
|
||||
if (value is DynamicColumn)
|
||||
{
|
||||
var v = (DynamicColumn)value;
|
||||
DynamicColumn v = (DynamicColumn)value;
|
||||
|
||||
if (string.IsNullOrEmpty(v.ColumnName))
|
||||
v.ColumnName = column;
|
||||
@@ -206,11 +206,11 @@ namespace DynamORM.Builders.Extensions
|
||||
return builder;
|
||||
}
|
||||
|
||||
var dict = conditions.ToDictionary();
|
||||
var mapper = DynamicMapperCache.GetMapper(conditions.GetType());
|
||||
var table = dict.TryGetValue("_table").NullOr(x => x.ToString(), string.Empty);
|
||||
IDictionary<string, object> dict = conditions.ToDictionary();
|
||||
DynamicTypeMap mapper = DynamicMapperCache.GetMapper(conditions.GetType());
|
||||
string table = dict.TryGetValue("_table").NullOr(x => x.ToString(), string.Empty);
|
||||
|
||||
foreach (var condition in dict)
|
||||
foreach (KeyValuePair<string, object> condition in dict)
|
||||
{
|
||||
if (mapper.Ignored.Contains(condition.Key) || condition.Key == "_table")
|
||||
continue;
|
||||
|
||||
@@ -62,7 +62,7 @@ namespace DynamORM.Builders.Implementation
|
||||
/// <remarks>This method must be override by derived classes.</remarks>
|
||||
public override string CommandText()
|
||||
{
|
||||
var info = Tables.Single();
|
||||
ITableInfo info = Tables.Single();
|
||||
return string.Format("DELETE FROM {0}{1}{2}{3}",
|
||||
string.IsNullOrEmpty(info.Owner) ? string.Empty : string.Format("{0}.", Database.DecorateName(info.Owner)),
|
||||
Database.DecorateName(info.Name),
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using DynamORM.Helpers.Dynamics;
|
||||
using DynamORM.Mapper;
|
||||
@@ -66,7 +67,7 @@ namespace DynamORM.Builders.Implementation
|
||||
/// <remarks>This method must be override by derived classes.</remarks>
|
||||
public override string CommandText()
|
||||
{
|
||||
var info = Tables.Single();
|
||||
ITableInfo info = Tables.Single();
|
||||
return string.Format("INSERT INTO {0}{1} ({2}) VALUES ({3})",
|
||||
string.IsNullOrEmpty(info.Owner) ? string.Empty : string.Format("{0}.", Database.DecorateName(info.Owner)),
|
||||
Database.DecorateName(info.Name), _columns, _values);
|
||||
@@ -91,7 +92,7 @@ namespace DynamORM.Builders.Implementation
|
||||
int index = InsertFunc(-1, fn);
|
||||
|
||||
if (func != null)
|
||||
foreach (var f in func)
|
||||
foreach (Func<dynamic, object> f in func)
|
||||
index = InsertFunc(index, f);
|
||||
|
||||
return this;
|
||||
@@ -104,9 +105,9 @@ namespace DynamORM.Builders.Implementation
|
||||
if (f == null)
|
||||
throw new ArgumentNullException(string.Format("Specification #{0} cannot be null.", index));
|
||||
|
||||
using (var parser = DynamicParser.Parse(f))
|
||||
using (DynamicParser parser = DynamicParser.Parse(f))
|
||||
{
|
||||
var result = parser.Result;
|
||||
object result = parser.Result;
|
||||
if (result == null)
|
||||
throw new ArgumentException(string.Format("Specification #{0} resolves to null.", index));
|
||||
|
||||
@@ -117,7 +118,7 @@ namespace DynamORM.Builders.Implementation
|
||||
// When 'x => x.Table.Column = value' or 'x => x.Column = value'...
|
||||
if (result is DynamicParser.Node.SetMember)
|
||||
{
|
||||
var node = (DynamicParser.Node.SetMember)result;
|
||||
DynamicParser.Node.SetMember node = (DynamicParser.Node.SetMember)result;
|
||||
|
||||
DynamicSchemaColumn? col = GetColumnFromSchema(node.Name);
|
||||
main = Database.DecorateName(node.Name);
|
||||
@@ -134,7 +135,7 @@ namespace DynamORM.Builders.Implementation
|
||||
}
|
||||
|
||||
// Other specifications are considered invalid...
|
||||
var err = string.Format("Specification '{0}' is invalid.", result);
|
||||
string err = string.Format("Specification '{0}' is invalid.", result);
|
||||
str = Parse(result);
|
||||
if (str.Contains("=")) err += " May have you used a '==' instead of a '=' operator?";
|
||||
throw new ArgumentException(err);
|
||||
@@ -149,7 +150,7 @@ namespace DynamORM.Builders.Implementation
|
||||
{
|
||||
if (value is DynamicColumn)
|
||||
{
|
||||
var v = (DynamicColumn)value;
|
||||
DynamicColumn v = (DynamicColumn)value;
|
||||
|
||||
if (string.IsNullOrEmpty(v.ColumnName))
|
||||
v.ColumnName = column;
|
||||
@@ -171,7 +172,7 @@ namespace DynamORM.Builders.Implementation
|
||||
{
|
||||
if (o is DynamicColumn)
|
||||
{
|
||||
var column = (DynamicColumn)o;
|
||||
DynamicColumn column = (DynamicColumn)o;
|
||||
DynamicSchemaColumn? col = column.Schema ?? GetColumnFromSchema(column.ColumnName);
|
||||
|
||||
string main = FixObjectName(column.ColumnName, onlyColumn: true);
|
||||
@@ -183,23 +184,23 @@ namespace DynamORM.Builders.Implementation
|
||||
return this;
|
||||
}
|
||||
|
||||
var dict = o.ToDictionary();
|
||||
var mapper = DynamicMapperCache.GetMapper(o.GetType());
|
||||
IDictionary<string, object> dict = o.ToDictionary();
|
||||
DynamicTypeMap mapper = DynamicMapperCache.GetMapper(o.GetType());
|
||||
|
||||
if (mapper != null)
|
||||
{
|
||||
foreach (var con in dict)
|
||||
foreach (KeyValuePair<string, object> con in dict)
|
||||
if (!mapper.Ignored.Contains(con.Key))
|
||||
{
|
||||
var colName = mapper.PropertyMap.TryGetValue(con.Key) ?? con.Key;
|
||||
var propMap = mapper.ColumnsMap.TryGetValue(colName.ToLower());
|
||||
string colName = mapper.PropertyMap.TryGetValue(con.Key) ?? con.Key;
|
||||
DynamicPropertyInvoker propMap = mapper.ColumnsMap.TryGetValue(colName.ToLower());
|
||||
|
||||
if (propMap == null || propMap.Column == null || !propMap.Column.IsNoInsert)
|
||||
Insert(colName, con.Value);
|
||||
}
|
||||
}
|
||||
else
|
||||
foreach (var con in dict)
|
||||
foreach (KeyValuePair<string, object> con in dict)
|
||||
Insert(con.Key, con.Value);
|
||||
|
||||
return this;
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System.Data;
|
||||
using DynamORM.Builders.Extensions;
|
||||
|
||||
namespace DynamORM.Builders.Implementation
|
||||
@@ -59,8 +60,8 @@ namespace DynamORM.Builders.Implementation
|
||||
/// <returns>Result of an execution..</returns>
|
||||
public virtual int Execute()
|
||||
{
|
||||
using (var con = Database.Open())
|
||||
using (var cmd = con.CreateCommand())
|
||||
using (IDbConnection con = Database.Open())
|
||||
using (IDbCommand cmd = con.CreateCommand())
|
||||
{
|
||||
return cmd
|
||||
.SetCommand(this)
|
||||
|
||||
@@ -97,7 +97,7 @@ namespace DynamORM.Builders.Implementation
|
||||
public TableInfo(DynamicDatabase db, Type type, string alias = null, string owner = null)
|
||||
: this()
|
||||
{
|
||||
var mapper = DynamicMapperCache.GetMapper(type);
|
||||
DynamicTypeMap mapper = DynamicMapperCache.GetMapper(type);
|
||||
|
||||
Name = mapper.Table == null || string.IsNullOrEmpty(mapper.Table.Name) ?
|
||||
mapper.Type.Name : mapper.Table.Name;
|
||||
@@ -371,7 +371,7 @@ namespace DynamORM.Builders.Implementation
|
||||
// If node is a delegate, parse it to create the logical tree...
|
||||
if (node is Delegate)
|
||||
{
|
||||
using (var p = DynamicParser.Parse((Delegate)node))
|
||||
using (DynamicParser p = DynamicParser.Parse((Delegate)node))
|
||||
node = p.Result;
|
||||
|
||||
return Parse(node, ref columnSchema, pars, rawstr, decorate: decorate); // Intercept containers as in (x => "string")
|
||||
@@ -409,7 +409,7 @@ namespace DynamORM.Builders.Implementation
|
||||
throw new InvalidOperationException(string.Format("The parameters in this command '{0}' cannot be added to a null collection.", node.Parameters));
|
||||
|
||||
// Copy parameters to new comand
|
||||
foreach (var parameter in node.Parameters)
|
||||
foreach (KeyValuePair<string, IParameter> parameter in node.Parameters)
|
||||
pars.Add(parameter.Key, parameter.Value);
|
||||
|
||||
return string.Format("({0})", str);
|
||||
@@ -574,11 +574,11 @@ namespace DynamORM.Builders.Implementation
|
||||
if (node.Arguments.Length > 2)
|
||||
throw new ArgumentException("BETWEEN method expects at most two arguments: " + node.Arguments.Sketch());
|
||||
|
||||
var arguments = node.Arguments;
|
||||
object[] arguments = node.Arguments;
|
||||
|
||||
if (arguments.Length == 1 && (arguments[0] is IEnumerable<object> || arguments[0] is Array) && !(arguments[0] is byte[]))
|
||||
{
|
||||
var vals = arguments[0] as IEnumerable<object>;
|
||||
IEnumerable<object> vals = arguments[0] as IEnumerable<object>;
|
||||
|
||||
if (vals == null && arguments[0] is Array)
|
||||
vals = ((Array)arguments[0]).Cast<object>() as IEnumerable<object>;
|
||||
@@ -599,20 +599,20 @@ namespace DynamORM.Builders.Implementation
|
||||
|
||||
bool firstParam = true;
|
||||
StringBuilder sbin = new StringBuilder();
|
||||
foreach (var arg in node.Arguments)
|
||||
foreach (object arg in node.Arguments)
|
||||
{
|
||||
if (!firstParam)
|
||||
sbin.Append(", ");
|
||||
|
||||
if ((arg is IEnumerable<object> || arg is Array) && !(arg is byte[]))
|
||||
{
|
||||
var vals = arg as IEnumerable<object>;
|
||||
IEnumerable<object> vals = arg as IEnumerable<object>;
|
||||
|
||||
if (vals == null && arg is Array)
|
||||
vals = ((Array)arg).Cast<object>() as IEnumerable<object>;
|
||||
|
||||
if (vals != null)
|
||||
foreach (var val in vals)
|
||||
foreach (object val in vals)
|
||||
{
|
||||
if (!firstParam)
|
||||
sbin.Append(", ");
|
||||
@@ -729,7 +729,7 @@ namespace DynamORM.Builders.Implementation
|
||||
bool wellKnownName = VirtualMode && node is String && ((String)node).StartsWith("[$") && ((String)node).EndsWith("]") && ((String)node).Length > 4;
|
||||
|
||||
// If we have a list of parameters to store it, let's parametrize it
|
||||
var par = new Parameter()
|
||||
Parameter par = new Parameter()
|
||||
{
|
||||
Name = wellKnownName ? ((String)node).Substring(2, ((String)node).Length - 3) : Guid.NewGuid().ToString(),
|
||||
Value = wellKnownName ? null : node,
|
||||
@@ -801,7 +801,7 @@ namespace DynamORM.Builders.Implementation
|
||||
|
||||
private string FixObjectNamePrivate(string f, bool onlyColumn = false)
|
||||
{
|
||||
var objects = f.Split('.')
|
||||
IEnumerable<string> objects = f.Split('.')
|
||||
.Select(x => Database.StripName(x));
|
||||
|
||||
if (onlyColumn || objects.Count() == 1)
|
||||
@@ -821,11 +821,11 @@ namespace DynamORM.Builders.Implementation
|
||||
//// return null;
|
||||
|
||||
// First we need to get real column name and it's owner if exist.
|
||||
var parts = colName.Split('.');
|
||||
string[] parts = colName.Split('.');
|
||||
for (int i = 0; i < parts.Length; i++)
|
||||
parts[i] = Database.StripName(parts[i]);
|
||||
|
||||
var columnName = parts.Last();
|
||||
string columnName = parts.Last();
|
||||
|
||||
// Get table name from mapper
|
||||
string tableName = table;
|
||||
@@ -842,7 +842,7 @@ namespace DynamORM.Builders.Implementation
|
||||
}
|
||||
|
||||
// Try to get table info from cache
|
||||
var tableInfo = !string.IsNullOrEmpty(tableName) ?
|
||||
ITableInfo tableInfo = !string.IsNullOrEmpty(tableName) ?
|
||||
Tables.FirstOrDefault(x => !string.IsNullOrEmpty(x.Alias) && x.Alias.ToLower() == tableName) ??
|
||||
Tables.FirstOrDefault(x => x.Name.ToLower() == tableName.ToLower()) ?? Tables.FirstOrDefault() :
|
||||
this is DynamicModifyBuilder ? Tables.FirstOrDefault() : null;
|
||||
@@ -873,7 +873,7 @@ namespace DynamORM.Builders.Implementation
|
||||
|
||||
if (Parameters != null)
|
||||
{
|
||||
foreach (var p in Parameters)
|
||||
foreach (KeyValuePair<string, IParameter> p in Parameters)
|
||||
p.Value.Dispose();
|
||||
|
||||
Parameters.Clear();
|
||||
@@ -882,7 +882,7 @@ namespace DynamORM.Builders.Implementation
|
||||
|
||||
if (Tables != null)
|
||||
{
|
||||
foreach (var t in Tables)
|
||||
foreach (ITableInfo t in Tables)
|
||||
t.Dispose();
|
||||
|
||||
Tables.Clear();
|
||||
|
||||
@@ -100,48 +100,6 @@ namespace DynamORM.Builders.Implementation
|
||||
|
||||
#region Execution
|
||||
|
||||
/*/// <summary>Execute this builder.</summary>
|
||||
|
||||
/// <returns>Enumerator of objects expanded from query.</returns>
|
||||
public virtual IEnumerator<dynamic> GetEnumerator()
|
||||
{
|
||||
using (var con = Database.Open())
|
||||
using (var cmd = con.CreateCommand())
|
||||
{
|
||||
using (var rdr = cmd
|
||||
.SetCommand(this)
|
||||
.ExecuteReader())
|
||||
while (rdr.Read())
|
||||
{
|
||||
dynamic val = null;
|
||||
|
||||
// Work around to avoid yield being in try...catchblock:
|
||||
// http://stackoverflow.com/questions/346365/why-cant-yield-return-appear-inside-a-try-block-with-a-catch
|
||||
try
|
||||
{
|
||||
val = rdr.RowToDynamic();
|
||||
}
|
||||
catch (ArgumentException argex)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
cmd.Dump(sb);
|
||||
|
||||
throw new ArgumentException(string.Format("{0}{1}{2}", argex.Message, Environment.NewLine, sb),
|
||||
argex.InnerException.NullOr(a => a, argex));
|
||||
}
|
||||
|
||||
yield return val;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Execute this builder.</summary>
|
||||
/// <returns>Enumerator of objects expanded from query.</returns>
|
||||
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
|
||||
{
|
||||
return GetEnumerator();
|
||||
}*/
|
||||
|
||||
/// <summary>Execute this builder.</summary>
|
||||
/// <returns>Enumerator of objects expanded from query.</returns>
|
||||
public virtual IEnumerable<dynamic> Execute()
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using DynamORM.Builders.Extensions;
|
||||
using DynamORM.Helpers.Dynamics;
|
||||
@@ -57,7 +58,7 @@ namespace DynamORM.Builders.Implementation
|
||||
/// <remarks>This method must be override by derived classes.</remarks>
|
||||
public override string CommandText()
|
||||
{
|
||||
var info = Tables.Single();
|
||||
ITableInfo info = Tables.Single();
|
||||
return string.Format("UPDATE {0}{1} SET {2}{3}{4}",
|
||||
string.IsNullOrEmpty(info.Owner) ? string.Empty : string.Format("{0}.", Database.DecorateName(info.Owner)),
|
||||
Database.DecorateName(info.Name), _columns,
|
||||
@@ -93,7 +94,7 @@ namespace DynamORM.Builders.Implementation
|
||||
{
|
||||
if (conditions is DynamicColumn)
|
||||
{
|
||||
var column = (DynamicColumn)conditions;
|
||||
DynamicColumn column = (DynamicColumn)conditions;
|
||||
|
||||
DynamicSchemaColumn? col = column.Schema ?? GetColumnFromSchema(column.ColumnName);
|
||||
|
||||
@@ -108,10 +109,10 @@ namespace DynamORM.Builders.Implementation
|
||||
return this;
|
||||
}
|
||||
|
||||
var dict = conditions.ToDictionary();
|
||||
var mapper = DynamicMapperCache.GetMapper(conditions.GetType());
|
||||
IDictionary<string, object> dict = conditions.ToDictionary();
|
||||
DynamicTypeMap mapper = DynamicMapperCache.GetMapper(conditions.GetType());
|
||||
|
||||
foreach (var con in dict)
|
||||
foreach (KeyValuePair<string, object> con in dict)
|
||||
{
|
||||
if (mapper.Ignored.Contains(con.Key))
|
||||
continue;
|
||||
@@ -134,7 +135,7 @@ namespace DynamORM.Builders.Implementation
|
||||
}
|
||||
}
|
||||
|
||||
var propMap = mapper.ColumnsMap.TryGetValue(colName.ToLower());
|
||||
DynamicPropertyInvoker propMap = mapper.ColumnsMap.TryGetValue(colName.ToLower());
|
||||
if (propMap == null || propMap.Column == null || !propMap.Column.IsNoUpdate)
|
||||
Values(colName, con.Value);
|
||||
}
|
||||
@@ -160,7 +161,7 @@ namespace DynamORM.Builders.Implementation
|
||||
throw new ArgumentNullException("Array of specifications cannot be null.");
|
||||
|
||||
int index = -1;
|
||||
foreach (var f in func)
|
||||
foreach (Func<dynamic, object> f in func)
|
||||
{
|
||||
index++;
|
||||
if (f == null)
|
||||
@@ -168,7 +169,7 @@ namespace DynamORM.Builders.Implementation
|
||||
|
||||
object result = null;
|
||||
|
||||
using (var p = DynamicParser.Parse(f))
|
||||
using (DynamicParser p = DynamicParser.Parse(f))
|
||||
result = p.Result;
|
||||
|
||||
if (result == null)
|
||||
@@ -181,7 +182,7 @@ namespace DynamORM.Builders.Implementation
|
||||
// When 'x => x.Table.Column = value' or 'x => x.Column = value'...
|
||||
if (result is DynamicParser.Node.SetMember)
|
||||
{
|
||||
var node = (DynamicParser.Node.SetMember)result;
|
||||
DynamicParser.Node.SetMember node = (DynamicParser.Node.SetMember)result;
|
||||
|
||||
DynamicSchemaColumn? col = GetColumnFromSchema(node.Name);
|
||||
main = Database.DecorateName(node.Name);
|
||||
@@ -198,7 +199,7 @@ namespace DynamORM.Builders.Implementation
|
||||
}
|
||||
|
||||
// Other specifications are considered invalid...
|
||||
var err = string.Format("Specification '{0}' is invalid.", result);
|
||||
string err = string.Format("Specification '{0}' is invalid.", result);
|
||||
str = Parse(result);
|
||||
if (str.Contains("=")) err += " May have you used a '==' instead of a '=' operator?";
|
||||
throw new ArgumentException(err);
|
||||
@@ -215,7 +216,7 @@ namespace DynamORM.Builders.Implementation
|
||||
{
|
||||
if (value is DynamicColumn)
|
||||
{
|
||||
var v = (DynamicColumn)value;
|
||||
DynamicColumn v = (DynamicColumn)value;
|
||||
|
||||
if (string.IsNullOrEmpty(v.ColumnName))
|
||||
v.ColumnName = column;
|
||||
@@ -237,29 +238,29 @@ namespace DynamORM.Builders.Implementation
|
||||
{
|
||||
if (o is DynamicColumn)
|
||||
{
|
||||
var column = (DynamicColumn)o;
|
||||
DynamicColumn column = (DynamicColumn)o;
|
||||
DynamicSchemaColumn? col = column.Schema ?? GetColumnFromSchema(column.ColumnName);
|
||||
|
||||
string main = FixObjectName(column.ColumnName, onlyColumn: true);
|
||||
string value = Parse(column.Value, ref col, pars: Parameters, nulls: true);
|
||||
|
||||
var str = string.Format("{0} = {1}", main, value);
|
||||
string str = string.Format("{0} = {1}", main, value);
|
||||
_columns = _columns == null ? str : string.Format("{0}, {1}", _columns, str);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
var dict = o.ToDictionary();
|
||||
var mapper = DynamicMapperCache.GetMapper(o.GetType());
|
||||
IDictionary<string, object> dict = o.ToDictionary();
|
||||
DynamicTypeMap mapper = DynamicMapperCache.GetMapper(o.GetType());
|
||||
|
||||
if (mapper != null)
|
||||
{
|
||||
foreach (var con in dict)
|
||||
foreach (KeyValuePair<string, object> con in dict)
|
||||
if (!mapper.Ignored.Contains(con.Key))
|
||||
Values(mapper.PropertyMap.TryGetValue(con.Key) ?? con.Key, con.Value);
|
||||
}
|
||||
else
|
||||
foreach (var con in dict)
|
||||
foreach (KeyValuePair<string, object> con in dict)
|
||||
Values(con.Key, con.Value);
|
||||
|
||||
return this;
|
||||
|
||||
@@ -390,7 +390,7 @@ namespace DynamORM
|
||||
public static DynamicColumn ParseSelectColumn(string column)
|
||||
{
|
||||
// Split column description
|
||||
var parts = column.Split(':');
|
||||
string[] parts = column.Split(':');
|
||||
|
||||
if (parts.Length > 0)
|
||||
{
|
||||
@@ -416,7 +416,7 @@ namespace DynamORM
|
||||
public static DynamicColumn ParseOrderByColumn(string column)
|
||||
{
|
||||
// Split column description
|
||||
var parts = column.Split(':');
|
||||
string[] parts = column.Split(':');
|
||||
|
||||
if (parts.Length > 0)
|
||||
{
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using DynamORM.Helpers;
|
||||
|
||||
@@ -267,7 +268,7 @@ namespace DynamORM
|
||||
{
|
||||
if (_con != null)
|
||||
{
|
||||
var pool = _db.CommandsPool.TryGetValue(_con.Connection);
|
||||
List<IDbCommand> pool = _db.CommandsPool.TryGetValue(_con.Connection);
|
||||
|
||||
if (pool != null && pool.Contains(this))
|
||||
pool.Remove(this);
|
||||
|
||||
@@ -122,6 +122,10 @@ namespace DynamORM
|
||||
/// dump commands to console or not.</summary>
|
||||
public bool DumpCommands { get; set; }
|
||||
|
||||
/// <summary>Gets or sets the dump command delegate.</summary>
|
||||
/// <value>The dump command delegate.</value>
|
||||
public Action<IDbCommand, string> DumpCommandDelegate { get; set; }
|
||||
|
||||
/// <summary>Initializes a new instance of the <see cref="DynamicDatabase" /> class.</summary>
|
||||
/// <param name="provider">Database provider by name.</param>
|
||||
/// <param name="connectionString">Connection string to provided database.</param>
|
||||
@@ -245,7 +249,7 @@ namespace DynamORM
|
||||
/// <param name="dynamicTable">Disposed dynamic table.</param>
|
||||
internal void RemoveFromCache(DynamicTable dynamicTable)
|
||||
{
|
||||
foreach (var item in TablesCache.Where(kvp => kvp.Value == dynamicTable).ToList())
|
||||
foreach (KeyValuePair<string, DynamicTable> item in TablesCache.Where(kvp => kvp.Value == dynamicTable).ToList())
|
||||
TablesCache.Remove(item.Key);
|
||||
}
|
||||
|
||||
@@ -341,27 +345,27 @@ namespace DynamORM
|
||||
public virtual int Insert<T>(IEnumerable<T> e) where T : class
|
||||
{
|
||||
int affected = 0;
|
||||
var mapper = DynamicMapperCache.GetMapper(typeof(T));
|
||||
DynamicTypeMap mapper = DynamicMapperCache.GetMapper(typeof(T));
|
||||
|
||||
if (mapper != null)
|
||||
{
|
||||
using (var con = Open())
|
||||
using (var tra = con.BeginTransaction())
|
||||
using (var cmd = con.CreateCommand())
|
||||
using (IDbConnection con = Open())
|
||||
using (IDbTransaction tra = con.BeginTransaction())
|
||||
using (IDbCommand cmd = con.CreateCommand())
|
||||
{
|
||||
try
|
||||
{
|
||||
var parameters = new Dictionary<IDbDataParameter, DynamicPropertyInvoker>();
|
||||
Dictionary<IDbDataParameter, DynamicPropertyInvoker> parameters = new Dictionary<IDbDataParameter, DynamicPropertyInvoker>();
|
||||
|
||||
if (!string.IsNullOrEmpty(mapper.InsertCommandText))
|
||||
{
|
||||
cmd.CommandText = mapper.InsertCommandText;
|
||||
|
||||
foreach (var col in mapper.ColumnsMap.Values
|
||||
foreach (DynamicPropertyInvoker col in mapper.ColumnsMap.Values
|
||||
.Where(di => !di.Ignore && di.InsertCommandParameter != null)
|
||||
.OrderBy(di => di.InsertCommandParameter.Ordinal))
|
||||
{
|
||||
var para = cmd.CreateParameter();
|
||||
IDbDataParameter para = cmd.CreateParameter();
|
||||
para.ParameterName = col.InsertCommandParameter.Name;
|
||||
para.DbType = col.InsertCommandParameter.Type;
|
||||
cmd.Parameters.Add(para);
|
||||
@@ -372,9 +376,9 @@ namespace DynamORM
|
||||
else
|
||||
PrepareBatchInsert<T>(mapper, cmd, parameters);
|
||||
|
||||
foreach (var o in e)
|
||||
foreach (T o in e)
|
||||
{
|
||||
foreach (var m in parameters)
|
||||
foreach (KeyValuePair<IDbDataParameter, DynamicPropertyInvoker> m in parameters)
|
||||
m.Key.Value = m.Value.Get(o);
|
||||
|
||||
affected += cmd.ExecuteNonQuery();
|
||||
@@ -389,7 +393,7 @@ namespace DynamORM
|
||||
|
||||
affected = 0;
|
||||
|
||||
var problematicCommand = new StringBuilder();
|
||||
StringBuilder problematicCommand = new StringBuilder();
|
||||
cmd.Dump(problematicCommand);
|
||||
|
||||
throw new InvalidOperationException(problematicCommand.ToString(), ex);
|
||||
@@ -439,27 +443,27 @@ namespace DynamORM
|
||||
public virtual int Update<T>(IEnumerable<T> e) where T : class
|
||||
{
|
||||
int affected = 0;
|
||||
var mapper = DynamicMapperCache.GetMapper(typeof(T));
|
||||
DynamicTypeMap mapper = DynamicMapperCache.GetMapper(typeof(T));
|
||||
|
||||
if (mapper != null)
|
||||
{
|
||||
using (var con = Open())
|
||||
using (var tra = con.BeginTransaction())
|
||||
using (var cmd = con.CreateCommand())
|
||||
using (IDbConnection con = Open())
|
||||
using (IDbTransaction tra = con.BeginTransaction())
|
||||
using (IDbCommand cmd = con.CreateCommand())
|
||||
{
|
||||
try
|
||||
{
|
||||
var parameters = new Dictionary<IDbDataParameter, DynamicPropertyInvoker>();
|
||||
Dictionary<IDbDataParameter, DynamicPropertyInvoker> parameters = new Dictionary<IDbDataParameter, DynamicPropertyInvoker>();
|
||||
|
||||
if (!string.IsNullOrEmpty(mapper.UpdateCommandText))
|
||||
{
|
||||
cmd.CommandText = mapper.UpdateCommandText;
|
||||
|
||||
foreach (var col in mapper.ColumnsMap.Values
|
||||
foreach (DynamicPropertyInvoker col in mapper.ColumnsMap.Values
|
||||
.Where(di => !di.Ignore && di.UpdateCommandParameter != null)
|
||||
.OrderBy(di => di.UpdateCommandParameter.Ordinal))
|
||||
{
|
||||
var para = cmd.CreateParameter();
|
||||
IDbDataParameter para = cmd.CreateParameter();
|
||||
para.ParameterName = col.UpdateCommandParameter.Name;
|
||||
para.DbType = col.UpdateCommandParameter.Type;
|
||||
cmd.Parameters.Add(para);
|
||||
@@ -470,9 +474,9 @@ namespace DynamORM
|
||||
else
|
||||
PrepareBatchUpdate<T>(mapper, cmd, parameters);
|
||||
|
||||
foreach (var o in e)
|
||||
foreach (T o in e)
|
||||
{
|
||||
foreach (var m in parameters)
|
||||
foreach (KeyValuePair<IDbDataParameter, DynamicPropertyInvoker> m in parameters)
|
||||
m.Key.Value = m.Value.Get(o);
|
||||
|
||||
affected += cmd.ExecuteNonQuery();
|
||||
@@ -487,7 +491,7 @@ namespace DynamORM
|
||||
|
||||
affected = 0;
|
||||
|
||||
var problematicCommand = new StringBuilder();
|
||||
StringBuilder problematicCommand = new StringBuilder();
|
||||
cmd.Dump(problematicCommand);
|
||||
|
||||
throw new InvalidOperationException(problematicCommand.ToString(), ex);
|
||||
@@ -505,30 +509,30 @@ namespace DynamORM
|
||||
public virtual int UpdateOrInsert<T>(IEnumerable<T> e) where T : class
|
||||
{
|
||||
int affected = 0;
|
||||
var mapper = DynamicMapperCache.GetMapper(typeof(T));
|
||||
DynamicTypeMap mapper = DynamicMapperCache.GetMapper(typeof(T));
|
||||
|
||||
if (mapper != null)
|
||||
{
|
||||
using (var con = Open())
|
||||
using (var tra = con.BeginTransaction())
|
||||
using (var cmdUp = con.CreateCommand())
|
||||
using (var cmdIn = con.CreateCommand())
|
||||
using (IDbConnection con = Open())
|
||||
using (IDbTransaction tra = con.BeginTransaction())
|
||||
using (IDbCommand cmdUp = con.CreateCommand())
|
||||
using (IDbCommand cmdIn = con.CreateCommand())
|
||||
{
|
||||
try
|
||||
{
|
||||
#region Update
|
||||
|
||||
var parametersUp = new Dictionary<IDbDataParameter, DynamicPropertyInvoker>();
|
||||
Dictionary<IDbDataParameter, DynamicPropertyInvoker> parametersUp = new Dictionary<IDbDataParameter, DynamicPropertyInvoker>();
|
||||
|
||||
if (!string.IsNullOrEmpty(mapper.UpdateCommandText))
|
||||
{
|
||||
cmdUp.CommandText = mapper.UpdateCommandText;
|
||||
|
||||
foreach (var col in mapper.ColumnsMap.Values
|
||||
foreach (DynamicPropertyInvoker col in mapper.ColumnsMap.Values
|
||||
.Where(di => !di.Ignore && di.UpdateCommandParameter != null)
|
||||
.OrderBy(di => di.UpdateCommandParameter.Ordinal))
|
||||
{
|
||||
var para = cmdUp.CreateParameter();
|
||||
IDbDataParameter para = cmdUp.CreateParameter();
|
||||
para.ParameterName = col.UpdateCommandParameter.Name;
|
||||
para.DbType = col.UpdateCommandParameter.Type;
|
||||
cmdUp.Parameters.Add(para);
|
||||
@@ -543,17 +547,17 @@ namespace DynamORM
|
||||
|
||||
#region Insert
|
||||
|
||||
var parametersIn = new Dictionary<IDbDataParameter, DynamicPropertyInvoker>();
|
||||
Dictionary<IDbDataParameter, DynamicPropertyInvoker> parametersIn = new Dictionary<IDbDataParameter, DynamicPropertyInvoker>();
|
||||
|
||||
if (!string.IsNullOrEmpty(mapper.InsertCommandText))
|
||||
{
|
||||
cmdIn.CommandText = mapper.InsertCommandText;
|
||||
|
||||
foreach (var col in mapper.ColumnsMap.Values
|
||||
foreach (DynamicPropertyInvoker col in mapper.ColumnsMap.Values
|
||||
.Where(di => !di.Ignore && di.InsertCommandParameter != null)
|
||||
.OrderBy(di => di.InsertCommandParameter.Ordinal))
|
||||
{
|
||||
var para = cmdIn.CreateParameter();
|
||||
IDbDataParameter para = cmdIn.CreateParameter();
|
||||
para.ParameterName = col.InsertCommandParameter.Name;
|
||||
para.DbType = col.InsertCommandParameter.Type;
|
||||
cmdIn.Parameters.Add(para);
|
||||
@@ -566,15 +570,15 @@ namespace DynamORM
|
||||
|
||||
#endregion Insert
|
||||
|
||||
foreach (var o in e)
|
||||
foreach (T o in e)
|
||||
{
|
||||
foreach (var m in parametersUp)
|
||||
foreach (KeyValuePair<IDbDataParameter, DynamicPropertyInvoker> m in parametersUp)
|
||||
m.Key.Value = m.Value.Get(o);
|
||||
|
||||
int a = cmdUp.ExecuteNonQuery();
|
||||
if (a == 0)
|
||||
{
|
||||
foreach (var m in parametersIn)
|
||||
foreach (KeyValuePair<IDbDataParameter, DynamicPropertyInvoker> m in parametersIn)
|
||||
m.Key.Value = m.Value.Get(o);
|
||||
|
||||
a = cmdIn.ExecuteNonQuery();
|
||||
@@ -592,7 +596,7 @@ namespace DynamORM
|
||||
|
||||
affected = 0;
|
||||
|
||||
var problematicCommand = new StringBuilder();
|
||||
StringBuilder problematicCommand = new StringBuilder();
|
||||
cmdUp.Dump(problematicCommand);
|
||||
|
||||
throw new InvalidOperationException(problematicCommand.ToString(), ex);
|
||||
@@ -634,27 +638,27 @@ namespace DynamORM
|
||||
public virtual int Delete<T>(IEnumerable<T> e) where T : class
|
||||
{
|
||||
int affected = 0;
|
||||
var mapper = DynamicMapperCache.GetMapper(typeof(T));
|
||||
DynamicTypeMap mapper = DynamicMapperCache.GetMapper(typeof(T));
|
||||
|
||||
if (mapper != null)
|
||||
{
|
||||
using (var con = Open())
|
||||
using (var tra = con.BeginTransaction())
|
||||
using (var cmd = con.CreateCommand())
|
||||
using (IDbConnection con = Open())
|
||||
using (IDbTransaction tra = con.BeginTransaction())
|
||||
using (IDbCommand cmd = con.CreateCommand())
|
||||
{
|
||||
try
|
||||
{
|
||||
var parameters = new Dictionary<IDbDataParameter, DynamicPropertyInvoker>();
|
||||
Dictionary<IDbDataParameter, DynamicPropertyInvoker> parameters = new Dictionary<IDbDataParameter, DynamicPropertyInvoker>();
|
||||
|
||||
if (!string.IsNullOrEmpty(mapper.DeleteCommandText))
|
||||
{
|
||||
cmd.CommandText = mapper.DeleteCommandText;
|
||||
|
||||
foreach (var col in mapper.ColumnsMap.Values
|
||||
foreach (DynamicPropertyInvoker col in mapper.ColumnsMap.Values
|
||||
.Where(di => !di.Ignore && di.DeleteCommandParameter != null)
|
||||
.OrderBy(di => di.DeleteCommandParameter.Ordinal))
|
||||
{
|
||||
var para = cmd.CreateParameter();
|
||||
IDbDataParameter para = cmd.CreateParameter();
|
||||
para.ParameterName = col.DeleteCommandParameter.Name;
|
||||
para.DbType = col.DeleteCommandParameter.Type;
|
||||
cmd.Parameters.Add(para);
|
||||
@@ -665,9 +669,9 @@ namespace DynamORM
|
||||
else
|
||||
PrepareBatchDelete<T>(mapper, cmd, parameters);
|
||||
|
||||
foreach (var o in e)
|
||||
foreach (T o in e)
|
||||
{
|
||||
foreach (var m in parameters)
|
||||
foreach (KeyValuePair<IDbDataParameter, DynamicPropertyInvoker> m in parameters)
|
||||
m.Key.Value = m.Value.Get(o);
|
||||
|
||||
affected += cmd.ExecuteNonQuery();
|
||||
@@ -682,7 +686,7 @@ namespace DynamORM
|
||||
|
||||
affected = 0;
|
||||
|
||||
var problematicCommand = new StringBuilder();
|
||||
StringBuilder problematicCommand = new StringBuilder();
|
||||
cmd.Dump(problematicCommand);
|
||||
|
||||
throw new InvalidOperationException(problematicCommand.ToString(), ex);
|
||||
@@ -696,11 +700,11 @@ namespace DynamORM
|
||||
private void PrepareBatchInsert<T>(DynamicTypeMap mapper, IDbCommand cmd, Dictionary<IDbDataParameter, DynamicPropertyInvoker> parameters)
|
||||
{
|
||||
DynamicPropertyInvoker currentprop = null;
|
||||
var temp = new Dictionary<string, DynamicPropertyInvoker>();
|
||||
var schema = this.GetSchema<T>();
|
||||
Dictionary<string, DynamicPropertyInvoker> temp = new Dictionary<string, DynamicPropertyInvoker>();
|
||||
Dictionary<string, DynamicSchemaColumn> schema = this.GetSchema<T>();
|
||||
int ord = 0;
|
||||
|
||||
var ib = Insert<T>()
|
||||
IDynamicInsertQueryBuilder ib = Insert<T>()
|
||||
.SetVirtualMode(true)
|
||||
.CreateTemporaryParameterAction(p => temp[p.Name] = currentprop)
|
||||
.CreateParameterAction((p, cp) =>
|
||||
@@ -714,10 +718,10 @@ namespace DynamORM
|
||||
};
|
||||
});
|
||||
|
||||
foreach (var prop in mapper.PropertyMap)
|
||||
foreach (KeyValuePair<string, string> prop in mapper.PropertyMap)
|
||||
if (!mapper.Ignored.Contains(prop.Key))
|
||||
{
|
||||
var col = mapper.PropertyMap.TryGetValue(prop.Key) ?? prop.Key;
|
||||
string col = mapper.PropertyMap.TryGetValue(prop.Key) ?? prop.Key;
|
||||
currentprop = mapper.ColumnsMap.TryGetValue(col.ToLower());
|
||||
|
||||
if (currentprop.Ignore || (currentprop.Column != null && currentprop.Column.IsNoInsert))
|
||||
@@ -743,11 +747,11 @@ namespace DynamORM
|
||||
private void PrepareBatchUpdate<T>(DynamicTypeMap mapper, IDbCommand cmd, Dictionary<IDbDataParameter, DynamicPropertyInvoker> parameters)
|
||||
{
|
||||
DynamicPropertyInvoker currentprop = null;
|
||||
var temp = new Dictionary<string, DynamicPropertyInvoker>();
|
||||
var schema = this.GetSchema<T>();
|
||||
Dictionary<string, DynamicPropertyInvoker> temp = new Dictionary<string, DynamicPropertyInvoker>();
|
||||
Dictionary<string, DynamicSchemaColumn> schema = this.GetSchema<T>();
|
||||
int ord = 0;
|
||||
|
||||
var ib = Update<T>()
|
||||
IDynamicUpdateQueryBuilder ib = Update<T>()
|
||||
.SetVirtualMode(true)
|
||||
.CreateTemporaryParameterAction(p => temp[p.Name] = currentprop)
|
||||
.CreateParameterAction((p, cp) =>
|
||||
@@ -761,10 +765,10 @@ namespace DynamORM
|
||||
};
|
||||
});
|
||||
|
||||
foreach (var prop in mapper.PropertyMap)
|
||||
foreach (KeyValuePair<string, string> prop in mapper.PropertyMap)
|
||||
if (!mapper.Ignored.Contains(prop.Key))
|
||||
{
|
||||
var col = mapper.PropertyMap.TryGetValue(prop.Key) ?? prop.Key;
|
||||
string col = mapper.PropertyMap.TryGetValue(prop.Key) ?? prop.Key;
|
||||
currentprop = mapper.ColumnsMap.TryGetValue(col.ToLower());
|
||||
|
||||
if (currentprop.Ignore)
|
||||
@@ -772,7 +776,7 @@ namespace DynamORM
|
||||
|
||||
if (currentprop.Get != null)
|
||||
{
|
||||
var colS = schema == null ? null : schema.TryGetNullable(col.ToLower());
|
||||
DynamicSchemaColumn? colS = schema == null ? null : schema.TryGetNullable(col.ToLower());
|
||||
|
||||
if (colS.HasValue)
|
||||
{
|
||||
@@ -816,11 +820,11 @@ namespace DynamORM
|
||||
private void PrepareBatchDelete<T>(DynamicTypeMap mapper, IDbCommand cmd, Dictionary<IDbDataParameter, DynamicPropertyInvoker> parameters)
|
||||
{
|
||||
DynamicPropertyInvoker currentprop = null;
|
||||
var temp = new Dictionary<string, DynamicPropertyInvoker>();
|
||||
var schema = this.GetSchema<T>();
|
||||
Dictionary<string, DynamicPropertyInvoker> temp = new Dictionary<string, DynamicPropertyInvoker>();
|
||||
Dictionary<string, DynamicSchemaColumn> schema = this.GetSchema<T>();
|
||||
int ord = 0;
|
||||
|
||||
var ib = Delete<T>()
|
||||
IDynamicDeleteQueryBuilder ib = Delete<T>()
|
||||
.SetVirtualMode(true)
|
||||
.CreateTemporaryParameterAction(p => temp[p.Name] = currentprop)
|
||||
.CreateParameterAction((p, cp) =>
|
||||
@@ -834,10 +838,10 @@ namespace DynamORM
|
||||
};
|
||||
});
|
||||
|
||||
foreach (var prop in mapper.PropertyMap)
|
||||
foreach (KeyValuePair<string, string> prop in mapper.PropertyMap)
|
||||
if (!mapper.Ignored.Contains(prop.Key))
|
||||
{
|
||||
var col = mapper.PropertyMap.TryGetValue(prop.Key) ?? prop.Key;
|
||||
string col = mapper.PropertyMap.TryGetValue(prop.Key) ?? prop.Key;
|
||||
currentprop = mapper.ColumnsMap.TryGetValue(col.ToLower());
|
||||
|
||||
if (currentprop.Ignore)
|
||||
@@ -845,7 +849,7 @@ namespace DynamORM
|
||||
|
||||
if (currentprop.Get != null)
|
||||
{
|
||||
var colS = schema == null ? null : schema.TryGetNullable(col.ToLower());
|
||||
DynamicSchemaColumn? colS = schema == null ? null : schema.TryGetNullable(col.ToLower());
|
||||
|
||||
if (colS != null)
|
||||
{
|
||||
@@ -898,8 +902,8 @@ namespace DynamORM
|
||||
if ((Options & DynamicDatabaseOptions.SupportStoredProcedures) != DynamicDatabaseOptions.SupportStoredProcedures)
|
||||
throw new InvalidOperationException("Database connection desn't support stored procedures.");
|
||||
|
||||
using (var con = Open())
|
||||
using (var cmd = con.CreateCommand())
|
||||
using (IDbConnection con = Open())
|
||||
using (IDbCommand cmd = con.CreateCommand())
|
||||
{
|
||||
return cmd
|
||||
.SetCommand(CommandType.StoredProcedure, procName)
|
||||
@@ -917,8 +921,8 @@ namespace DynamORM
|
||||
if ((Options & DynamicDatabaseOptions.SupportStoredProcedures) != DynamicDatabaseOptions.SupportStoredProcedures)
|
||||
throw new InvalidOperationException("Database connection desn't support stored procedures.");
|
||||
|
||||
using (var con = Open())
|
||||
using (var cmd = con.CreateCommand())
|
||||
using (IDbConnection con = Open())
|
||||
using (IDbCommand cmd = con.CreateCommand())
|
||||
{
|
||||
return cmd
|
||||
.SetCommand(CommandType.StoredProcedure, procName)
|
||||
@@ -936,8 +940,8 @@ namespace DynamORM
|
||||
if ((Options & DynamicDatabaseOptions.SupportStoredProcedures) != DynamicDatabaseOptions.SupportStoredProcedures)
|
||||
throw new InvalidOperationException("Database connection desn't support stored procedures.");
|
||||
|
||||
using (var con = Open())
|
||||
using (var cmd = con.CreateCommand())
|
||||
using (IDbConnection con = Open())
|
||||
using (IDbCommand cmd = con.CreateCommand())
|
||||
{
|
||||
return cmd
|
||||
.SetCommand(CommandType.StoredProcedure, procName)
|
||||
@@ -958,8 +962,8 @@ namespace DynamORM
|
||||
/// <returns>Number of affected rows.</returns>
|
||||
public virtual int Execute(string sql, params object[] args)
|
||||
{
|
||||
using (var con = Open())
|
||||
using (var cmd = con.CreateCommand())
|
||||
using (IDbConnection con = Open())
|
||||
using (IDbCommand cmd = con.CreateCommand())
|
||||
{
|
||||
return cmd
|
||||
.SetCommand(sql).AddParameters(this, args)
|
||||
@@ -972,8 +976,8 @@ namespace DynamORM
|
||||
/// <returns>Number of affected rows.</returns>
|
||||
public virtual int Execute(IDynamicQueryBuilder builder)
|
||||
{
|
||||
using (var con = Open())
|
||||
using (var cmd = con.CreateCommand())
|
||||
using (IDbConnection con = Open())
|
||||
using (IDbCommand cmd = con.CreateCommand())
|
||||
{
|
||||
return cmd
|
||||
.SetCommand(builder)
|
||||
@@ -988,19 +992,15 @@ namespace DynamORM
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
using (var con = Open())
|
||||
using (IDbConnection con = Open())
|
||||
{
|
||||
using (var trans = con.BeginTransaction())
|
||||
using (IDbTransaction trans = con.BeginTransaction())
|
||||
{
|
||||
foreach (var builder in builders)
|
||||
{
|
||||
using (var cmd = con.CreateCommand())
|
||||
{
|
||||
foreach (IDynamicQueryBuilder builder in builders)
|
||||
using (IDbCommand cmd = con.CreateCommand())
|
||||
ret += cmd
|
||||
.SetCommand(builder)
|
||||
.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
|
||||
trans.Commit();
|
||||
}
|
||||
@@ -1021,8 +1021,8 @@ namespace DynamORM
|
||||
/// <returns>Result of a query.</returns>
|
||||
public virtual object Scalar(string sql, params object[] args)
|
||||
{
|
||||
using (var con = Open())
|
||||
using (var cmd = con.CreateCommand())
|
||||
using (IDbConnection con = Open())
|
||||
using (IDbCommand cmd = con.CreateCommand())
|
||||
{
|
||||
return cmd
|
||||
.SetCommand(sql).AddParameters(this, args)
|
||||
@@ -1035,8 +1035,8 @@ namespace DynamORM
|
||||
/// <returns>Result of a query.</returns>
|
||||
public virtual object Scalar(IDynamicQueryBuilder builder)
|
||||
{
|
||||
using (var con = Open())
|
||||
using (var cmd = con.CreateCommand())
|
||||
using (IDbConnection con = Open())
|
||||
using (IDbCommand cmd = con.CreateCommand())
|
||||
{
|
||||
return cmd
|
||||
.SetCommand(builder)
|
||||
@@ -1055,8 +1055,8 @@ namespace DynamORM
|
||||
/// <returns>Result of a query.</returns>
|
||||
public virtual T ScalarAs<T>(string sql, params object[] args)
|
||||
{
|
||||
using (var con = Open())
|
||||
using (var cmd = con.CreateCommand())
|
||||
using (IDbConnection con = Open())
|
||||
using (IDbCommand cmd = con.CreateCommand())
|
||||
{
|
||||
return cmd
|
||||
.SetCommand(sql).AddParameters(this, args)
|
||||
@@ -1071,8 +1071,8 @@ namespace DynamORM
|
||||
/// <returns>Result of a query.</returns>
|
||||
public virtual T ScalarAs<T>(IDynamicQueryBuilder builder, T defaultValue = default(T))
|
||||
{
|
||||
using (var con = Open())
|
||||
using (var cmd = con.CreateCommand())
|
||||
using (IDbConnection con = Open())
|
||||
using (IDbCommand cmd = con.CreateCommand())
|
||||
{
|
||||
return cmd
|
||||
.SetCommand(builder)
|
||||
@@ -1094,9 +1094,9 @@ namespace DynamORM
|
||||
/// <returns>Enumerator of objects expanded from query.</returns>
|
||||
public virtual IEnumerable<dynamic> Query(string sql, params object[] args)
|
||||
{
|
||||
using (var con = Open())
|
||||
using (var cmd = con.CreateCommand())
|
||||
using (var rdr = cmd
|
||||
using (IDbConnection con = Open())
|
||||
using (IDbCommand cmd = con.CreateCommand())
|
||||
using (IDataReader rdr = cmd
|
||||
.SetCommand(sql)
|
||||
.AddParameters(this, args)
|
||||
.ExecuteReader())
|
||||
@@ -1112,7 +1112,7 @@ namespace DynamORM
|
||||
}
|
||||
catch (ArgumentException argex)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
StringBuilder sb = new StringBuilder();
|
||||
cmd.Dump(sb);
|
||||
|
||||
throw new ArgumentException(string.Format("{0}{1}{2}", argex.Message, Environment.NewLine, sb),
|
||||
@@ -1128,9 +1128,9 @@ namespace DynamORM
|
||||
/// <returns>Enumerator of objects expanded from query.</returns>
|
||||
public virtual IEnumerable<dynamic> Query(IDynamicQueryBuilder builder)
|
||||
{
|
||||
using (var con = Open())
|
||||
using (var cmd = con.CreateCommand())
|
||||
using (var rdr = cmd
|
||||
using (IDbConnection con = Open())
|
||||
using (IDbCommand cmd = con.CreateCommand())
|
||||
using (IDataReader rdr = cmd
|
||||
.SetCommand(builder)
|
||||
.ExecuteReader())
|
||||
while (rdr.Read())
|
||||
@@ -1145,7 +1145,7 @@ namespace DynamORM
|
||||
}
|
||||
catch (ArgumentException argex)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
StringBuilder sb = new StringBuilder();
|
||||
cmd.Dump(sb);
|
||||
|
||||
throw new ArgumentException(string.Format("{0}{1}{2}", argex.Message, Environment.NewLine, sb),
|
||||
@@ -1165,8 +1165,8 @@ namespace DynamORM
|
||||
/// <returns>Query schema.</returns>
|
||||
public Dictionary<string, DynamicSchemaColumn> GetQuerySchema(IDynamicSelectQueryBuilder builder)
|
||||
{
|
||||
using (var con = Open())
|
||||
using (var cmd = con.CreateCommand().SetCommand(builder))
|
||||
using (IDbConnection con = Open())
|
||||
using (IDbCommand cmd = con.CreateCommand().SetCommand(builder))
|
||||
return ReadSchema(cmd)
|
||||
.Distinct()
|
||||
.ToDictionary(k => k.Name.ToLower(), k => k);
|
||||
@@ -1178,8 +1178,8 @@ namespace DynamORM
|
||||
/// <returns>Query schema.</returns>
|
||||
public Dictionary<string, DynamicSchemaColumn> GetQuerySchema(string sql, params object[] args)
|
||||
{
|
||||
using (var con = Open())
|
||||
using (var cmd = con.CreateCommand().SetCommand(sql, args))
|
||||
using (IDbConnection con = Open())
|
||||
using (IDbCommand cmd = con.CreateCommand().SetCommand(sql, args))
|
||||
return ReadSchema(cmd)
|
||||
.Distinct()
|
||||
.ToDictionary(k => k.Name.ToLower(), k => k);
|
||||
@@ -1273,7 +1273,7 @@ namespace DynamORM
|
||||
{
|
||||
lock (SyncLock)
|
||||
{
|
||||
foreach (var s in Schema)
|
||||
foreach (KeyValuePair<string, Dictionary<string, DynamicSchemaColumn>> s in Schema)
|
||||
if (s.Value != null)
|
||||
s.Value.Clear();
|
||||
|
||||
@@ -1288,8 +1288,8 @@ namespace DynamORM
|
||||
/// If your database doesn't get those values in upper case (like most of the databases) you should override this method.</returns>
|
||||
protected virtual IList<DynamicSchemaColumn> ReadSchema(string table, string owner)
|
||||
{
|
||||
using (var con = Open())
|
||||
using (var cmd = con.CreateCommand()
|
||||
using (IDbConnection con = Open())
|
||||
using (IDbCommand cmd = con.CreateCommand()
|
||||
.SetCommand(string.Format("SELECT * FROM {0}{1} WHERE 1 = 0",
|
||||
!string.IsNullOrEmpty(owner) ? string.Format("{0}.", DecorateName(owner)) : string.Empty,
|
||||
DecorateName(table))))
|
||||
@@ -1303,11 +1303,11 @@ namespace DynamORM
|
||||
/// If your database doesn't get those values in upper case (like most of the databases) you should override this method.</returns>
|
||||
protected virtual IEnumerable<DynamicSchemaColumn> ReadSchema(IDbCommand cmd)
|
||||
{
|
||||
using (var rdr = cmd.ExecuteReader(CommandBehavior.SchemaOnly | CommandBehavior.KeyInfo))
|
||||
using (var st = rdr.GetSchemaTable())
|
||||
using (IDataReader rdr = cmd.ExecuteReader(CommandBehavior.SchemaOnly | CommandBehavior.KeyInfo))
|
||||
using (DataTable st = rdr.GetSchemaTable())
|
||||
foreach (DataRow col in st.Rows)
|
||||
{
|
||||
var c = col.RowToDynamicUpper();
|
||||
dynamic c = col.RowToDynamicUpper();
|
||||
|
||||
yield return new DynamicSchemaColumn
|
||||
{
|
||||
@@ -1508,7 +1508,10 @@ namespace DynamORM
|
||||
/// <param name="cmd">The command to dump.</param>
|
||||
public virtual void DumpCommand(IDbCommand cmd)
|
||||
{
|
||||
cmd.Dump(Console.Out);
|
||||
if (DumpCommandDelegate != null)
|
||||
DumpCommandDelegate(cmd, cmd.DumpToString());
|
||||
else
|
||||
cmd.Dump(Console.Out);
|
||||
}
|
||||
|
||||
#endregion Decorators
|
||||
@@ -1572,7 +1575,7 @@ namespace DynamORM
|
||||
// Close all commands
|
||||
if (CommandsPool.ContainsKey(connection))
|
||||
{
|
||||
var tmp = CommandsPool[connection].ToList();
|
||||
List<IDbCommand> tmp = CommandsPool[connection].ToList();
|
||||
tmp.ForEach(cmd => cmd.Dispose());
|
||||
|
||||
CommandsPool[connection].Clear();
|
||||
@@ -1633,7 +1636,7 @@ namespace DynamORM
|
||||
|
||||
return _tempConn.BeginTransaction(null, null, () =>
|
||||
{
|
||||
var t = TransactionPool.TryGetValue(_tempConn.Connection);
|
||||
Stack<IDbTransaction> t = TransactionPool.TryGetValue(_tempConn.Connection);
|
||||
|
||||
if (t == null | t.Count == 0)
|
||||
{
|
||||
@@ -1653,7 +1656,7 @@ namespace DynamORM
|
||||
|
||||
return _tempConn.BeginTransaction(il, null, () =>
|
||||
{
|
||||
var t = TransactionPool.TryGetValue(_tempConn.Connection);
|
||||
Stack<IDbTransaction> t = TransactionPool.TryGetValue(_tempConn.Connection);
|
||||
|
||||
if (t == null | t.Count == 0)
|
||||
{
|
||||
@@ -1673,7 +1676,7 @@ namespace DynamORM
|
||||
|
||||
return _tempConn.BeginTransaction(null, custom, () =>
|
||||
{
|
||||
var t = TransactionPool.TryGetValue(_tempConn.Connection);
|
||||
Stack<IDbTransaction> t = TransactionPool.TryGetValue(_tempConn.Connection);
|
||||
|
||||
if (t == null | t.Count == 0)
|
||||
{
|
||||
@@ -1692,7 +1695,7 @@ namespace DynamORM
|
||||
public void Dispose()
|
||||
{
|
||||
#if !DYNAMORM_OMMIT_OLDSYNTAX
|
||||
var tables = TablesCache.Values.ToList();
|
||||
List<DynamicTable> tables = TablesCache.Values.ToList();
|
||||
TablesCache.Clear();
|
||||
|
||||
tables.ForEach(t => t.Dispose());
|
||||
@@ -1700,12 +1703,12 @@ namespace DynamORM
|
||||
tables = null;
|
||||
#endif
|
||||
|
||||
foreach (var con in TransactionPool)
|
||||
foreach (KeyValuePair<IDbConnection, Stack<IDbTransaction>> con in TransactionPool)
|
||||
{
|
||||
// Close all commands
|
||||
if (CommandsPool.ContainsKey(con.Key))
|
||||
{
|
||||
var tmp = CommandsPool[con.Key].ToList();
|
||||
List<IDbCommand> tmp = CommandsPool[con.Key].ToList();
|
||||
tmp.ForEach(cmd => cmd.Dispose());
|
||||
|
||||
CommandsPool[con.Key].Clear();
|
||||
|
||||
@@ -209,7 +209,7 @@ namespace DynamORM
|
||||
public static IDbCommand AddParameters(this IDbCommand cmd, DynamicDatabase database, params object[] args)
|
||||
{
|
||||
if (args != null && args.Count() > 0)
|
||||
foreach (var item in args)
|
||||
foreach (object item in args)
|
||||
cmd.AddParameter(database, item);
|
||||
|
||||
return cmd;
|
||||
@@ -223,7 +223,7 @@ namespace DynamORM
|
||||
public static IDbCommand AddParameters(this IDbCommand cmd, DynamicDatabase database, ExpandoObject args)
|
||||
{
|
||||
if (args != null && args.Count() > 0)
|
||||
foreach (var item in args.ToDictionary())
|
||||
foreach (KeyValuePair<string, object> item in args.ToDictionary())
|
||||
cmd.AddParameter(database, item.Key, item.Value);
|
||||
|
||||
return cmd;
|
||||
@@ -237,7 +237,7 @@ namespace DynamORM
|
||||
public static IDbCommand AddParameters(this IDbCommand cmd, DynamicDatabase database, DynamicExpando args)
|
||||
{
|
||||
if (args != null && args.Count() > 0)
|
||||
foreach (var item in args.ToDictionary())
|
||||
foreach (KeyValuePair<string, object> item in args.ToDictionary())
|
||||
cmd.AddParameter(database, item.Key, item.Value);
|
||||
|
||||
return cmd;
|
||||
@@ -261,7 +261,7 @@ namespace DynamORM
|
||||
/// <returns>Returns edited <see cref="System.Data.IDbCommand"/> instance.</returns>
|
||||
public static IDbCommand AddParameter(this IDbCommand cmd, DynamicDatabase database, string name, object item)
|
||||
{
|
||||
var p = cmd.CreateParameter();
|
||||
IDbDataParameter p = cmd.CreateParameter();
|
||||
p.ParameterName = name;
|
||||
|
||||
if (item == null || item == DBNull.Value)
|
||||
@@ -294,7 +294,7 @@ namespace DynamORM
|
||||
/// <returns>Returns edited <see cref="System.Data.IDbCommand"/> instance.</returns>
|
||||
public static IDbCommand AddParameter(this IDbCommand cmd, IDynamicQueryBuilder builder, DynamicSchemaColumn? col, object value)
|
||||
{
|
||||
var p = cmd.CreateParameter();
|
||||
IDbDataParameter p = cmd.CreateParameter();
|
||||
p.ParameterName = builder.Database.GetParameterName(cmd.Parameters.Count);
|
||||
|
||||
if (col.HasValue)
|
||||
@@ -339,10 +339,10 @@ namespace DynamORM
|
||||
/// <returns>Returns edited <see cref="System.Data.IDbCommand"/> instance.</returns>
|
||||
public static IDbCommand AddParameter(this IDbCommand cmd, IDynamicQueryBuilder builder, DynamicColumn item)
|
||||
{
|
||||
var p = cmd.CreateParameter();
|
||||
IDbDataParameter p = cmd.CreateParameter();
|
||||
p.ParameterName = builder.Database.GetParameterName(cmd.Parameters.Count);
|
||||
|
||||
var col = item.Schema ?? (builder as DynamicQueryBuilder)
|
||||
DynamicSchemaColumn? col = item.Schema ?? (builder as DynamicQueryBuilder)
|
||||
.NullOr(b => b.GetColumnFromSchema(item.ColumnName),
|
||||
builder.Tables.FirstOrDefault()
|
||||
.NullOr(t => t.Schema
|
||||
@@ -679,7 +679,7 @@ namespace DynamORM
|
||||
ret = (T)o;
|
||||
else
|
||||
{
|
||||
var method = typeof(T).GetMethod(
|
||||
MethodInfo method = typeof(T).GetMethod(
|
||||
"TryParse",
|
||||
new Type[]
|
||||
{
|
||||
@@ -711,7 +711,7 @@ namespace DynamORM
|
||||
{
|
||||
using (IDataReader reader = command.ExecuteReader())
|
||||
{
|
||||
var method = typeof(T).GetMethod(
|
||||
MethodInfo method = typeof(T).GetMethod(
|
||||
"TryParse",
|
||||
new[]
|
||||
{
|
||||
@@ -733,16 +733,25 @@ namespace DynamORM
|
||||
{
|
||||
if (handler != null)
|
||||
ret = o.ToString().TryParseDefault<T>(defaultValue, handler);
|
||||
else if (o is IConvertible && typeof(T).GetInterfaces().Any(i => i == typeof(IConvertible)))
|
||||
ret = (T)Convert.ChangeType(o, typeof(T));
|
||||
else if (typeof(T) == typeof(Guid))
|
||||
{
|
||||
if (o.GetType() == typeof(byte[]))
|
||||
ret = (T)(object)new Guid((byte[])o);
|
||||
else
|
||||
ret = (T)(object)Guid.Parse(o.ToString());
|
||||
}
|
||||
else if (typeof(T) == typeof(string))
|
||||
ret = (T)(o.ToString() as object);
|
||||
else if (typeof(T) == typeof(object))
|
||||
ret = (T)o;
|
||||
else if (method != null)
|
||||
ret = o.ToString().TryParseDefault<T>(defaultValue, delegate(string v, out T r)
|
||||
{
|
||||
r = defaultValue;
|
||||
return (bool)method.Invoke(null, new object[] { v, r });
|
||||
});
|
||||
else if (typeof(T) == typeof(string))
|
||||
ret = (T)(o.ToString() as object);
|
||||
else if (typeof(T) == typeof(object))
|
||||
ret = (T)o;
|
||||
else
|
||||
throw new InvalidOperationException("Provided type can't be parsed using generic approach.");
|
||||
}
|
||||
@@ -762,7 +771,7 @@ namespace DynamORM
|
||||
/// <returns>Returns dumped <see cref="System.Data.IDbCommand"/> instance in string form.</returns>
|
||||
public static string DumpToString(this IDbCommand command)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
StringBuilder sb = new StringBuilder();
|
||||
command.Dump(sb);
|
||||
return sb.ToString();
|
||||
}
|
||||
@@ -932,7 +941,7 @@ namespace DynamORM
|
||||
/// <returns>This instance to permit chaining.</returns>
|
||||
public static T SubQuery<T>(this T b, Action<T, IDynamicSelectQueryBuilder> subquery) where T : IDynamicQueryBuilder
|
||||
{
|
||||
var sub = b.SubQuery();
|
||||
IDynamicSelectQueryBuilder sub = b.SubQuery();
|
||||
|
||||
subquery(b, sub);
|
||||
|
||||
@@ -950,7 +959,7 @@ namespace DynamORM
|
||||
/// <returns>This instance to permit chaining.</returns>
|
||||
public static T SubQuery<T>(this T b, Action<T, IDynamicSelectQueryBuilder> subquery, Func<dynamic, object> fn, params Func<dynamic, object>[] func) where T : IDynamicQueryBuilder
|
||||
{
|
||||
var sub = b.SubQuery(fn, func);
|
||||
IDynamicSelectQueryBuilder sub = b.SubQuery(fn, func);
|
||||
|
||||
subquery(b, sub);
|
||||
|
||||
@@ -968,7 +977,7 @@ namespace DynamORM
|
||||
/// <returns>List of things.</returns>
|
||||
public static List<dynamic> ToList(this IDataReader r)
|
||||
{
|
||||
var result = new List<dynamic>();
|
||||
List<dynamic> result = new List<dynamic>();
|
||||
|
||||
while (r.Read())
|
||||
result.Add(r.RowToDynamic());
|
||||
@@ -981,10 +990,10 @@ namespace DynamORM
|
||||
/// <returns>Converted dictionary.</returns>
|
||||
public static dynamic ToDynamic(this IDictionary<string, object> d)
|
||||
{
|
||||
var result = new DynamicExpando();
|
||||
var dict = (IDictionary<string, object>)result;
|
||||
DynamicExpando result = new DynamicExpando();
|
||||
IDictionary<string, object> dict = (IDictionary<string, object>)result;
|
||||
|
||||
foreach (var prop in d)
|
||||
foreach (KeyValuePair<string, object> prop in d)
|
||||
dict.Add(prop.Key, prop.Value);
|
||||
|
||||
return result;
|
||||
@@ -995,10 +1004,10 @@ namespace DynamORM
|
||||
/// <returns>Converted dictionary.</returns>
|
||||
public static dynamic ToExpando(this IDictionary<string, object> d)
|
||||
{
|
||||
var result = new ExpandoObject();
|
||||
var dict = (IDictionary<string, object>)result;
|
||||
ExpandoObject result = new ExpandoObject();
|
||||
IDictionary<string, object> dict = (IDictionary<string, object>)result;
|
||||
|
||||
foreach (var prop in d)
|
||||
foreach (KeyValuePair<string, object> prop in d)
|
||||
dict.Add(prop.Key, prop.Value);
|
||||
|
||||
return result;
|
||||
@@ -1009,13 +1018,13 @@ namespace DynamORM
|
||||
/// <returns>Converted object.</returns>
|
||||
public static dynamic ToDynamic(this object o)
|
||||
{
|
||||
var ot = o.GetType();
|
||||
Type ot = o.GetType();
|
||||
|
||||
if (ot == typeof(DynamicExpando) || ot == typeof(ExpandoObject))
|
||||
return o;
|
||||
|
||||
var result = new DynamicExpando();
|
||||
var dict = (IDictionary<string, object>)result;
|
||||
DynamicExpando result = new DynamicExpando();
|
||||
IDictionary<string, object> dict = (IDictionary<string, object>)result;
|
||||
|
||||
if (o is IDictionary<string, object>)
|
||||
((IDictionary<string, object>)o)
|
||||
@@ -1023,7 +1032,7 @@ namespace DynamORM
|
||||
.ForEach(kvp => dict.Add(kvp.Key, kvp.Value));
|
||||
else if (ot == typeof(NameValueCollection) || ot.IsSubclassOf(typeof(NameValueCollection)))
|
||||
{
|
||||
var nameValue = (NameValueCollection)o;
|
||||
NameValueCollection nameValue = (NameValueCollection)o;
|
||||
nameValue.Cast<string>()
|
||||
.Select(key => new KeyValuePair<string, object>(key, nameValue[key]))
|
||||
.ToList()
|
||||
@@ -1031,19 +1040,19 @@ namespace DynamORM
|
||||
}
|
||||
else
|
||||
{
|
||||
var mapper = DynamicMapperCache.GetMapper(ot);
|
||||
DynamicTypeMap mapper = DynamicMapperCache.GetMapper(ot);
|
||||
|
||||
if (mapper != null)
|
||||
{
|
||||
foreach (var item in mapper.ColumnsMap.Values)
|
||||
foreach (DynamicPropertyInvoker item in mapper.ColumnsMap.Values)
|
||||
if (item.Get != null)
|
||||
dict.Add(item.Name, item.Get(o));
|
||||
}
|
||||
else
|
||||
{
|
||||
var props = ot.GetProperties();
|
||||
PropertyInfo[] props = ot.GetProperties();
|
||||
|
||||
foreach (var item in props)
|
||||
foreach (PropertyInfo item in props)
|
||||
if (item.CanRead)
|
||||
dict.Add(item.Name, item.GetValue(o, null));
|
||||
}
|
||||
@@ -1057,13 +1066,13 @@ namespace DynamORM
|
||||
/// <returns>Converted object.</returns>
|
||||
public static dynamic ToExpando(this object o)
|
||||
{
|
||||
var ot = o.GetType();
|
||||
Type ot = o.GetType();
|
||||
|
||||
if (ot == typeof(ExpandoObject) || ot == typeof(DynamicExpando))
|
||||
return o;
|
||||
|
||||
var result = new ExpandoObject();
|
||||
var dict = (IDictionary<string, object>)result;
|
||||
ExpandoObject result = new ExpandoObject();
|
||||
IDictionary<string, object> dict = (IDictionary<string, object>)result;
|
||||
|
||||
if (o is IDictionary<string, object>)
|
||||
((IDictionary<string, object>)o)
|
||||
@@ -1071,7 +1080,7 @@ namespace DynamORM
|
||||
.ForEach(kvp => dict.Add(kvp.Key, kvp.Value));
|
||||
else if (ot == typeof(NameValueCollection) || ot.IsSubclassOf(typeof(NameValueCollection)))
|
||||
{
|
||||
var nameValue = (NameValueCollection)o;
|
||||
NameValueCollection nameValue = (NameValueCollection)o;
|
||||
nameValue.Cast<string>()
|
||||
.Select(key => new KeyValuePair<string, object>(key, nameValue[key]))
|
||||
.ToList()
|
||||
@@ -1079,19 +1088,19 @@ namespace DynamORM
|
||||
}
|
||||
else
|
||||
{
|
||||
var mapper = DynamicMapperCache.GetMapper(ot);
|
||||
DynamicTypeMap mapper = DynamicMapperCache.GetMapper(ot);
|
||||
|
||||
if (mapper != null)
|
||||
{
|
||||
foreach (var item in mapper.ColumnsMap.Values)
|
||||
foreach (DynamicPropertyInvoker item in mapper.ColumnsMap.Values)
|
||||
if (item.Get != null)
|
||||
dict.Add(item.Name, item.Get(o));
|
||||
}
|
||||
else
|
||||
{
|
||||
var props = ot.GetProperties();
|
||||
PropertyInfo[] props = ot.GetProperties();
|
||||
|
||||
foreach (var item in props)
|
||||
foreach (PropertyInfo item in props)
|
||||
if (item.CanRead)
|
||||
dict.Add(item.Name, item.GetValue(o, null));
|
||||
}
|
||||
@@ -1179,7 +1188,7 @@ namespace DynamORM
|
||||
public static dynamic RowToDynamic(this IDataReader r)
|
||||
{
|
||||
dynamic e = new DynamicExpando();
|
||||
var d = e as IDictionary<string, object>;
|
||||
IDictionary<string, object> d = e as IDictionary<string, object>;
|
||||
|
||||
int c = r.FieldCount;
|
||||
for (int i = 0; i < c; i++)
|
||||
@@ -1202,7 +1211,7 @@ namespace DynamORM
|
||||
public static dynamic RowToExpando(this IDataReader r)
|
||||
{
|
||||
dynamic e = new ExpandoObject();
|
||||
var d = e as IDictionary<string, object>;
|
||||
IDictionary<string, object> d = e as IDictionary<string, object>;
|
||||
|
||||
int c = r.FieldCount;
|
||||
for (int i = 0; i < c; i++)
|
||||
@@ -1331,7 +1340,7 @@ namespace DynamORM
|
||||
/// provided <see cref="System.Data.DbType"/>.</returns>
|
||||
public static Type ToType(this DbType dbt)
|
||||
{
|
||||
foreach (var tdbt in TypeMap)
|
||||
foreach (KeyValuePair<Type, DbType> tdbt in TypeMap)
|
||||
if (tdbt.Value == dbt)
|
||||
return tdbt.Key;
|
||||
|
||||
@@ -1414,12 +1423,12 @@ namespace DynamORM
|
||||
/// <returns>Enumerator of specified type.</returns>
|
||||
public static IEnumerable<T> MapEnumerable<T>(this IEnumerable<object> enumerable)
|
||||
{
|
||||
var mapper = DynamicMapperCache.GetMapper<T>();
|
||||
DynamicTypeMap mapper = DynamicMapperCache.GetMapper<T>();
|
||||
|
||||
if (mapper == null)
|
||||
throw new InvalidOperationException("Type can't be mapped for unknown reason.");
|
||||
|
||||
foreach (var item in enumerable)
|
||||
foreach (object item in enumerable)
|
||||
yield return (T)mapper.Create(item);
|
||||
}
|
||||
|
||||
@@ -1429,7 +1438,7 @@ namespace DynamORM
|
||||
/// <returns>Item of specified type.</returns>
|
||||
public static T Map<T>(this object item)
|
||||
{
|
||||
var mapper = DynamicMapperCache.GetMapper<T>();
|
||||
DynamicTypeMap mapper = DynamicMapperCache.GetMapper<T>();
|
||||
|
||||
if (mapper == null)
|
||||
throw new InvalidOperationException("Type can't be mapped for unknown reason.");
|
||||
@@ -1444,7 +1453,7 @@ namespace DynamORM
|
||||
/// <returns>Filled item.</returns>
|
||||
public static T Fill<T>(this T item, object source)
|
||||
{
|
||||
var mapper = DynamicMapperCache.GetMapper<T>();
|
||||
DynamicTypeMap mapper = DynamicMapperCache.GetMapper<T>();
|
||||
|
||||
if (mapper == null)
|
||||
throw new InvalidOperationException("Type can't be mapped for unknown reason.");
|
||||
@@ -1460,12 +1469,12 @@ namespace DynamORM
|
||||
/// <returns>Enumerator of specified type.</returns>
|
||||
public static IEnumerable<object> MapEnumerable(this IEnumerable<object> enumerable, Type type)
|
||||
{
|
||||
var mapper = DynamicMapperCache.GetMapper(type);
|
||||
DynamicTypeMap mapper = DynamicMapperCache.GetMapper(type);
|
||||
|
||||
if (mapper == null)
|
||||
throw new InvalidOperationException("Type can't be mapped for unknown reason.");
|
||||
|
||||
foreach (var item in enumerable)
|
||||
foreach (object item in enumerable)
|
||||
yield return mapper.Create(item);
|
||||
}
|
||||
|
||||
@@ -1475,7 +1484,7 @@ namespace DynamORM
|
||||
/// <returns>Item of specified type.</returns>
|
||||
public static object Map(this object item, Type type)
|
||||
{
|
||||
var mapper = DynamicMapperCache.GetMapper(type);
|
||||
DynamicTypeMap mapper = DynamicMapperCache.GetMapper(type);
|
||||
|
||||
if (mapper == null)
|
||||
throw new InvalidOperationException("Type can't be mapped for unknown reason.");
|
||||
|
||||
@@ -267,7 +267,7 @@ namespace DynamORM
|
||||
Database = database;
|
||||
TableType = type;
|
||||
|
||||
var mapper = DynamicMapperCache.GetMapper(type);
|
||||
DynamicTypeMap mapper = DynamicMapperCache.GetMapper(type);
|
||||
|
||||
if (mapper != null)
|
||||
{
|
||||
@@ -293,11 +293,11 @@ namespace DynamORM
|
||||
|
||||
if (keys == null && TableType != null)
|
||||
{
|
||||
var mapper = DynamicMapperCache.GetMapper(TableType);
|
||||
DynamicTypeMap mapper = DynamicMapperCache.GetMapper(TableType);
|
||||
|
||||
if (mapper != null)
|
||||
{
|
||||
var k = mapper.ColumnsMap.Where(p => p.Value.Column != null && p.Value.Column.IsKey).Select(p => p.Key);
|
||||
IEnumerable<string> k = mapper.ColumnsMap.Where(p => p.Value.Column != null && p.Value.Column.IsKey).Select(p => p.Key);
|
||||
if (k.Count() > 0)
|
||||
keys = k.ToArray();
|
||||
}
|
||||
@@ -361,9 +361,9 @@ namespace DynamORM
|
||||
/// <returns>New <see cref="DynamicSelectQueryBuilder"/> instance.</returns>
|
||||
public virtual IDynamicSelectQueryBuilder Query()
|
||||
{
|
||||
var builder = new DynamicSelectQueryBuilder(this.Database);
|
||||
IDynamicSelectQueryBuilder builder = new DynamicSelectQueryBuilder(this.Database);
|
||||
|
||||
var name = this.FullName;
|
||||
string name = this.FullName;
|
||||
if (!string.IsNullOrEmpty(name))
|
||||
builder.From(x => name);
|
||||
|
||||
@@ -575,16 +575,16 @@ namespace DynamORM
|
||||
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
|
||||
{
|
||||
// parse the method
|
||||
var info = binder.CallInfo;
|
||||
CallInfo info = binder.CallInfo;
|
||||
|
||||
// Get generic types
|
||||
var types = binder.GetGenericTypeArguments();
|
||||
IList<Type> types = binder.GetGenericTypeArguments();
|
||||
|
||||
// accepting named args only... SKEET!
|
||||
if (info.ArgumentNames.Count != args.Length)
|
||||
throw new InvalidOperationException("Please use named arguments for this type of query - the column name, orderby, columns, etc");
|
||||
|
||||
var op = binder.Name;
|
||||
string op = binder.Name;
|
||||
|
||||
// Avoid strange things
|
||||
if (!_allowedCommands.Contains(op))
|
||||
@@ -614,7 +614,7 @@ namespace DynamORM
|
||||
|
||||
private object DynamicInsert(object[] args, CallInfo info, IList<Type> types)
|
||||
{
|
||||
var builder = new DynamicInsertQueryBuilder(this.Database);
|
||||
DynamicInsertQueryBuilder builder = new DynamicInsertQueryBuilder(this.Database);
|
||||
|
||||
if (types != null && types.Count == 1)
|
||||
HandleTypeArgument<DynamicInsertQueryBuilder>(null, info, ref types, builder, 0);
|
||||
@@ -627,8 +627,8 @@ namespace DynamORM
|
||||
{
|
||||
for (int i = 0; i < args.Length; i++)
|
||||
{
|
||||
var fullName = info.ArgumentNames[i];
|
||||
var name = fullName.ToLower();
|
||||
string fullName = info.ArgumentNames[i];
|
||||
string name = fullName.ToLower();
|
||||
|
||||
switch (name)
|
||||
{
|
||||
@@ -661,7 +661,7 @@ namespace DynamORM
|
||||
|
||||
private object DynamicUpdate(object[] args, CallInfo info, IList<Type> types)
|
||||
{
|
||||
var builder = new DynamicUpdateQueryBuilder(this.Database);
|
||||
DynamicUpdateQueryBuilder builder = new DynamicUpdateQueryBuilder(this.Database);
|
||||
|
||||
if (types != null && types.Count == 1)
|
||||
HandleTypeArgument<DynamicUpdateQueryBuilder>(null, info, ref types, builder, 0);
|
||||
@@ -674,8 +674,8 @@ namespace DynamORM
|
||||
{
|
||||
for (int i = 0; i < args.Length; i++)
|
||||
{
|
||||
var fullName = info.ArgumentNames[i];
|
||||
var name = fullName.ToLower();
|
||||
string fullName = info.ArgumentNames[i];
|
||||
string name = fullName.ToLower();
|
||||
|
||||
switch (name)
|
||||
{
|
||||
@@ -716,7 +716,7 @@ namespace DynamORM
|
||||
|
||||
private object DynamicDelete(object[] args, CallInfo info, IList<Type> types)
|
||||
{
|
||||
var builder = new DynamicDeleteQueryBuilder(this.Database);
|
||||
DynamicDeleteQueryBuilder builder = new DynamicDeleteQueryBuilder(this.Database);
|
||||
|
||||
if (types != null && types.Count == 1)
|
||||
HandleTypeArgument<DynamicDeleteQueryBuilder>(null, info, ref types, builder, 0);
|
||||
@@ -729,8 +729,8 @@ namespace DynamORM
|
||||
{
|
||||
for (int i = 0; i < args.Length; i++)
|
||||
{
|
||||
var fullName = info.ArgumentNames[i];
|
||||
var name = fullName.ToLower();
|
||||
string fullName = info.ArgumentNames[i];
|
||||
string name = fullName.ToLower();
|
||||
|
||||
switch (name)
|
||||
{
|
||||
@@ -768,7 +768,7 @@ namespace DynamORM
|
||||
private object DynamicQuery(object[] args, CallInfo info, string op, IList<Type> types)
|
||||
{
|
||||
object result;
|
||||
var builder = new DynamicSelectQueryBuilder(this.Database);
|
||||
DynamicSelectQueryBuilder builder = new DynamicSelectQueryBuilder(this.Database);
|
||||
|
||||
if (types != null && types.Count == 1)
|
||||
HandleTypeArgument<DynamicSelectQueryBuilder>(null, info, ref types, builder, 0);
|
||||
@@ -781,8 +781,8 @@ namespace DynamORM
|
||||
{
|
||||
for (int i = 0; i < args.Length; i++)
|
||||
{
|
||||
var fullName = info.ArgumentNames[i];
|
||||
var name = fullName.ToLower();
|
||||
string fullName = info.ArgumentNames[i];
|
||||
string name = fullName.ToLower();
|
||||
|
||||
// TODO: Make this nicer
|
||||
switch (name)
|
||||
@@ -813,14 +813,14 @@ namespace DynamORM
|
||||
|
||||
case "columns":
|
||||
{
|
||||
var agregate = (op == "Sum" || op == "Max" || op == "Min" || op == "Avg" || op == "Count") ?
|
||||
string agregate = (op == "Sum" || op == "Max" || op == "Min" || op == "Avg" || op == "Count") ?
|
||||
op.ToUpper() : null;
|
||||
|
||||
if (args[i] is string || args[i] is string[])
|
||||
builder.SelectColumn((args[i] as String).NullOr(s => s.Split(','), args[i] as String[])
|
||||
.Select(c =>
|
||||
{
|
||||
var col = DynamicColumn.ParseSelectColumn(c);
|
||||
DynamicColumn col = DynamicColumn.ParseSelectColumn(c);
|
||||
if (string.IsNullOrEmpty(col.Aggregate))
|
||||
col.Aggregate = agregate;
|
||||
|
||||
@@ -886,17 +886,9 @@ namespace DynamORM
|
||||
else
|
||||
{
|
||||
// build the SQL
|
||||
var justOne = op == "First" || op == "Last" || op == "Get" || op == "Single";
|
||||
bool justOne = op == "First" || op == "Last" || op == "Get" || op == "Single";
|
||||
|
||||
// Be sure to sort by DESC on selected columns
|
||||
/*if (op == "Last")
|
||||
{
|
||||
if (builder.Order.Count > 0)
|
||||
foreach (var o in builder.Order)
|
||||
o.Order = o.Order == DynamicColumn.SortOrder.Desc ?
|
||||
DynamicColumn.SortOrder.Asc : DynamicColumn.SortOrder.Desc;
|
||||
}*/
|
||||
|
||||
if (justOne && !(op == "Last"))
|
||||
{
|
||||
if ((Database.Options & DynamicDatabaseOptions.SupportLimitOffset) == DynamicDatabaseOptions.SupportLimitOffset)
|
||||
|
||||
@@ -27,8 +27,11 @@
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using DynamORM.Helpers;
|
||||
|
||||
namespace DynamORM
|
||||
@@ -66,7 +69,7 @@ namespace DynamORM
|
||||
{
|
||||
if (customParams != null)
|
||||
{
|
||||
var mi = _con.Connection.GetType().GetMethods().Where(m => m.GetParameters().Count() == 1 && m.GetParameters().First().ParameterType == customParams.GetType()).FirstOrDefault();
|
||||
MethodInfo mi = _con.Connection.GetType().GetMethods().Where(m => m.GetParameters().Count() == 1 && m.GetParameters().First().ParameterType == customParams.GetType()).FirstOrDefault();
|
||||
if (mi != null)
|
||||
_db.TransactionPool[_con.Connection].Push((IDbTransaction)mi.Invoke(_con.Connection, new object[] { customParams, }));
|
||||
else
|
||||
@@ -90,7 +93,7 @@ namespace DynamORM
|
||||
{
|
||||
if (_operational)
|
||||
{
|
||||
var t = _db.TransactionPool.TryGetValue(_con.Connection);
|
||||
Stack<IDbTransaction> t = _db.TransactionPool.TryGetValue(_con.Connection);
|
||||
|
||||
if (t != null && t.Count > 0)
|
||||
{
|
||||
@@ -114,7 +117,7 @@ namespace DynamORM
|
||||
{
|
||||
if (_operational)
|
||||
{
|
||||
var t = _db.TransactionPool.TryGetValue(_con.Connection);
|
||||
Stack<IDbTransaction> t = _db.TransactionPool.TryGetValue(_con.Connection);
|
||||
|
||||
if (t != null && t.Count > 0)
|
||||
{
|
||||
|
||||
@@ -91,13 +91,13 @@ namespace DynamORM.Helpers
|
||||
int firstCount;
|
||||
int secondCount;
|
||||
|
||||
var firstElementCounts = GetElementCounts(first, out firstCount);
|
||||
var secondElementCounts = GetElementCounts(second, out secondCount);
|
||||
Dictionary<T, int> firstElementCounts = GetElementCounts(first, out firstCount);
|
||||
Dictionary<T, int> secondElementCounts = GetElementCounts(second, out secondCount);
|
||||
|
||||
if (firstCount != secondCount)
|
||||
return true;
|
||||
|
||||
foreach (var kvp in firstElementCounts)
|
||||
foreach (KeyValuePair<T, int> kvp in firstElementCounts)
|
||||
if (kvp.Value != (secondElementCounts.TryGetNullable(kvp.Key) ?? 0))
|
||||
return true;
|
||||
|
||||
@@ -106,7 +106,7 @@ namespace DynamORM.Helpers
|
||||
|
||||
private static Dictionary<T, int> GetElementCounts(IEnumerable<T> enumerable, out int nullCount)
|
||||
{
|
||||
var dictionary = new Dictionary<T, int>();
|
||||
Dictionary<T, int> dictionary = new Dictionary<T, int>();
|
||||
nullCount = 0;
|
||||
|
||||
foreach (T element in enumerable)
|
||||
|
||||
@@ -33,6 +33,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Dynamic;
|
||||
using System.Linq.Expressions;
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Text;
|
||||
@@ -77,12 +78,12 @@ namespace DynamORM.Helpers.Dynamics
|
||||
// Func was cool but caused memory leaks
|
||||
private DynamicMetaObject GetBinder(Node node)
|
||||
{
|
||||
var o = (Node)this.Value;
|
||||
Node o = (Node)this.Value;
|
||||
node.Parser = o.Parser;
|
||||
o.Parser.Last = node;
|
||||
|
||||
var p = Expression.Variable(typeof(Node), "ret");
|
||||
var exp = Expression.Block(new ParameterExpression[] { p }, Expression.Assign(p, Expression.Constant(node)));
|
||||
ParameterExpression p = Expression.Variable(typeof(Node), "ret");
|
||||
BlockExpression exp = Expression.Block(new ParameterExpression[] { p }, Expression.Assign(p, Expression.Constant(node)));
|
||||
|
||||
return new MetaNode(exp, this.Restrictions, node);
|
||||
}
|
||||
@@ -187,8 +188,8 @@ namespace DynamORM.Helpers.Dynamics
|
||||
/// </returns>
|
||||
public override DynamicMetaObject BindUnaryOperation(UnaryOperationBinder binder)
|
||||
{
|
||||
var o = (Node)this.Value;
|
||||
var node = new Unary(o, binder.Operation) { Parser = o.Parser };
|
||||
Node o = (Node)this.Value;
|
||||
Unary node = new Unary(o, binder.Operation) { Parser = o.Parser };
|
||||
o.Parser.Last = node;
|
||||
|
||||
// If operation is 'IsTrue' or 'IsFalse', we will return false to keep the engine working...
|
||||
@@ -196,8 +197,8 @@ namespace DynamORM.Helpers.Dynamics
|
||||
if (binder.Operation == ExpressionType.IsTrue) ret = (object)false;
|
||||
if (binder.Operation == ExpressionType.IsFalse) ret = (object)false;
|
||||
|
||||
var p = Expression.Variable(ret.GetType(), "ret"); // the type is now obtained from "ret"
|
||||
var exp = Expression.Block(
|
||||
ParameterExpression p = Expression.Variable(ret.GetType(), "ret"); // the type is now obtained from "ret"
|
||||
BlockExpression exp = Expression.Block(
|
||||
new ParameterExpression[] { p },
|
||||
Expression.Assign(p, Expression.Constant(ret))); // the expression is now obtained from "ret"
|
||||
|
||||
@@ -213,8 +214,8 @@ namespace DynamORM.Helpers.Dynamics
|
||||
/// </returns>
|
||||
public override DynamicMetaObject BindConvert(ConvertBinder binder)
|
||||
{
|
||||
var o = (Node)this.Value;
|
||||
var node = new Convert(o, binder.ReturnType) { Parser = o.Parser };
|
||||
Node o = (Node)this.Value;
|
||||
Convert node = new Convert(o, binder.ReturnType) { Parser = o.Parser };
|
||||
o.Parser.Last = node;
|
||||
|
||||
// Reducing the object to return if this is an assignment node...
|
||||
@@ -249,8 +250,8 @@ namespace DynamORM.Helpers.Dynamics
|
||||
}
|
||||
}
|
||||
|
||||
var p = Expression.Variable(binder.ReturnType, "ret");
|
||||
var exp = Expression.Block(
|
||||
ParameterExpression p = Expression.Variable(binder.ReturnType, "ret");
|
||||
BlockExpression exp = Expression.Block(
|
||||
new ParameterExpression[] { p },
|
||||
Expression.Assign(p, Expression.Constant(ret, binder.ReturnType))); // specifying binder.ReturnType
|
||||
|
||||
@@ -1102,7 +1103,7 @@ namespace DynamORM.Helpers.Dynamics
|
||||
if (!IsDisposed && _arguments != null)
|
||||
list.AddRange(_arguments);
|
||||
|
||||
foreach (var arg in list)
|
||||
foreach (Node.Argument arg in list)
|
||||
yield return arg;
|
||||
|
||||
list.Clear();
|
||||
@@ -1134,13 +1135,13 @@ namespace DynamORM.Helpers.Dynamics
|
||||
{
|
||||
// I know this can be almost a one liner
|
||||
// but it causes memory leaks when so.
|
||||
var pars = f.Method.GetParameters();
|
||||
foreach (var p in pars)
|
||||
ParameterInfo[] pars = f.Method.GetParameters();
|
||||
foreach (ParameterInfo p in pars)
|
||||
{
|
||||
var attrs = p.GetCustomAttributes(typeof(DynamicAttribute), true).Length;
|
||||
int attrs = p.GetCustomAttributes(typeof(DynamicAttribute), true).Length;
|
||||
if (attrs != 0)
|
||||
{
|
||||
var par = new Node.Argument(p.Name) { Parser = this };
|
||||
Node.Argument par = new Node.Argument(p.Name) { Parser = this };
|
||||
this._arguments.Add(par);
|
||||
}
|
||||
else
|
||||
@@ -1176,7 +1177,7 @@ namespace DynamORM.Helpers.Dynamics
|
||||
|
||||
if (_arguments != null)
|
||||
{
|
||||
foreach (var arg in _arguments)
|
||||
foreach (Node.Argument arg in _arguments)
|
||||
{
|
||||
if (!first) sb.Append(", "); else first = false;
|
||||
sb.Append(arg);
|
||||
|
||||
@@ -59,7 +59,7 @@ namespace DynamORM.Helpers.Dynamics
|
||||
_proxy = proxiedObject;
|
||||
_type = typeof(T);
|
||||
|
||||
var mapper = Mapper.DynamicMapperCache.GetMapper<T>();
|
||||
DynamicTypeMap mapper = Mapper.DynamicMapperCache.GetMapper<T>();
|
||||
|
||||
_properties = mapper
|
||||
.ColumnsMap
|
||||
@@ -146,7 +146,7 @@ namespace DynamORM.Helpers.Dynamics
|
||||
{
|
||||
try
|
||||
{
|
||||
var prop = _properties.TryGetValue(binder.Name);
|
||||
DynamicPropertyInvoker prop = _properties.TryGetValue(binder.Name);
|
||||
|
||||
result = prop.NullOr(p => p.Get.NullOr(g => g(_proxy), null), null);
|
||||
|
||||
@@ -181,7 +181,7 @@ namespace DynamORM.Helpers.Dynamics
|
||||
{
|
||||
try
|
||||
{
|
||||
var prop = _properties.TryGetValue(binder.Name);
|
||||
DynamicPropertyInvoker prop = _properties.TryGetValue(binder.Name);
|
||||
|
||||
if (prop != null && prop.Setter != null)
|
||||
{
|
||||
@@ -278,18 +278,17 @@ namespace DynamORM.Helpers.Dynamics
|
||||
{
|
||||
if (type.IsInterface)
|
||||
{
|
||||
var members = new List<MemberInfo>();
|
||||
|
||||
var considered = new List<Type>();
|
||||
var queue = new Queue<Type>();
|
||||
List<MemberInfo> members = new List<MemberInfo>();
|
||||
List<Type> considered = new List<Type>();
|
||||
Queue<Type> queue = new Queue<Type>();
|
||||
|
||||
considered.Add(type);
|
||||
queue.Enqueue(type);
|
||||
|
||||
while (queue.Count > 0)
|
||||
{
|
||||
var subType = queue.Dequeue();
|
||||
foreach (var subInterface in subType.GetInterfaces())
|
||||
Type subType = queue.Dequeue();
|
||||
foreach (Type subInterface in subType.GetInterfaces())
|
||||
{
|
||||
if (considered.Contains(subInterface)) continue;
|
||||
|
||||
@@ -297,12 +296,12 @@ namespace DynamORM.Helpers.Dynamics
|
||||
queue.Enqueue(subInterface);
|
||||
}
|
||||
|
||||
var typeProperties = subType.GetMembers(
|
||||
MemberInfo[] typeProperties = subType.GetMembers(
|
||||
BindingFlags.FlattenHierarchy
|
||||
| BindingFlags.Public
|
||||
| BindingFlags.Instance);
|
||||
|
||||
var newPropertyInfos = typeProperties
|
||||
IEnumerable<MemberInfo> newPropertyInfos = typeProperties
|
||||
.Where(x => !members.Contains(x));
|
||||
|
||||
members.InsertRange(0, newPropertyInfos);
|
||||
|
||||
@@ -61,7 +61,7 @@ namespace DynamORM.Helpers
|
||||
// HACK: Creating binders assuming types are correct... this may fail.
|
||||
if (IsMono)
|
||||
{
|
||||
var binderType = typeof(Microsoft.CSharp.RuntimeBinder.RuntimeBinderException).Assembly.GetType("Microsoft.CSharp.RuntimeBinder.CSharpInvokeMemberBinder");
|
||||
Type binderType = typeof(Microsoft.CSharp.RuntimeBinder.RuntimeBinderException).Assembly.GetType("Microsoft.CSharp.RuntimeBinder.CSharpInvokeMemberBinder");
|
||||
|
||||
if (binderType != null)
|
||||
{
|
||||
@@ -76,16 +76,16 @@ namespace DynamORM.Helpers
|
||||
}
|
||||
else
|
||||
{
|
||||
var inter = typeof(Microsoft.CSharp.RuntimeBinder.RuntimeBinderException).Assembly.GetType("Microsoft.CSharp.RuntimeBinder.ICSharpInvokeOrInvokeMemberBinder");
|
||||
Type inter = typeof(Microsoft.CSharp.RuntimeBinder.RuntimeBinderException).Assembly.GetType("Microsoft.CSharp.RuntimeBinder.ICSharpInvokeOrInvokeMemberBinder");
|
||||
|
||||
if (inter != null)
|
||||
{
|
||||
var prop = inter.GetProperty("TypeArguments");
|
||||
PropertyInfo prop = inter.GetProperty("TypeArguments");
|
||||
|
||||
if (!prop.CanRead)
|
||||
return null;
|
||||
|
||||
var objParm = Expression.Parameter(typeof(InvokeMemberBinder), "o");
|
||||
ParameterExpression objParm = Expression.Parameter(typeof(InvokeMemberBinder), "o");
|
||||
|
||||
return Expression.Lambda<Func<InvokeMemberBinder, IList<Type>>>(
|
||||
Expression.TypeAs(
|
||||
@@ -121,7 +121,7 @@ namespace DynamORM.Helpers
|
||||
// In mono this is trivial.
|
||||
|
||||
// First we get field info.
|
||||
var field = binder.GetType().GetField("typeArguments", BindingFlags.Instance |
|
||||
FieldInfo field = binder.GetType().GetField("typeArguments", BindingFlags.Instance |
|
||||
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);
|
||||
|
||||
// If this was a success get and return it's value
|
||||
@@ -134,12 +134,12 @@ namespace DynamORM.Helpers
|
||||
// In this case, we need more aerobic :D
|
||||
|
||||
// First, get the interface
|
||||
var inter = binder.GetType().GetInterface("Microsoft.CSharp.RuntimeBinder.ICSharpInvokeOrInvokeMemberBinder");
|
||||
Type inter = binder.GetType().GetInterface("Microsoft.CSharp.RuntimeBinder.ICSharpInvokeOrInvokeMemberBinder");
|
||||
|
||||
if (inter != null)
|
||||
{
|
||||
// Now get property.
|
||||
var prop = inter.GetProperty("TypeArguments");
|
||||
PropertyInfo prop = inter.GetProperty("TypeArguments");
|
||||
|
||||
// If we have a property, return it's value
|
||||
if (prop != null)
|
||||
|
||||
@@ -146,7 +146,7 @@ namespace DynamORM.Helpers
|
||||
|
||||
if (props.Length != 0)
|
||||
{
|
||||
foreach (var prop in props)
|
||||
foreach (PropertyInfo prop in props)
|
||||
{
|
||||
if (!first) sb.Append(", "); else first = false;
|
||||
sb.AppendFormat("{0}='{1}'", prop.Name, prop.GetValue(obj, null).Sketch());
|
||||
@@ -156,7 +156,7 @@ namespace DynamORM.Helpers
|
||||
{
|
||||
if (infos.Length != 0)
|
||||
{
|
||||
foreach (var info in infos)
|
||||
foreach (FieldInfo info in infos)
|
||||
{
|
||||
if (!first) sb.Append(", "); else first = false;
|
||||
sb.AppendFormat("{0}='{1}'", info.Name, info.GetValue(obj).Sketch());
|
||||
|
||||
@@ -71,7 +71,7 @@ namespace DynamORM.Mapper
|
||||
Name = property.Name;
|
||||
Type = property.PropertyType;
|
||||
|
||||
var ignore = property.GetCustomAttributes(typeof(IgnoreAttribute), false);
|
||||
object[] ignore = property.GetCustomAttributes(typeof(IgnoreAttribute), false);
|
||||
|
||||
Ignore = ignore != null && ignore.Length > 0;
|
||||
|
||||
@@ -89,7 +89,7 @@ namespace DynamORM.Mapper
|
||||
if (!property.CanRead)
|
||||
return null;
|
||||
|
||||
var objParm = Expression.Parameter(typeof(object), "o");
|
||||
ParameterExpression objParm = Expression.Parameter(typeof(object), "o");
|
||||
|
||||
return Expression.Lambda<Func<object, object>>(
|
||||
Expression.Convert(
|
||||
@@ -104,8 +104,8 @@ namespace DynamORM.Mapper
|
||||
if (!property.CanWrite)
|
||||
return null;
|
||||
|
||||
var objParm = Expression.Parameter(typeof(object), "o");
|
||||
var valueParm = Expression.Parameter(typeof(object), "value");
|
||||
ParameterExpression objParm = Expression.Parameter(typeof(object), "o");
|
||||
ParameterExpression valueParm = Expression.Parameter(typeof(object), "value");
|
||||
|
||||
return Expression.Lambda<Action<object, object>>(
|
||||
Expression.Assign(
|
||||
|
||||
@@ -63,7 +63,7 @@ namespace DynamORM.Mapper
|
||||
{
|
||||
Type = type;
|
||||
|
||||
var attr = type.GetCustomAttributes(typeof(TableAttribute), false);
|
||||
object[] attr = type.GetCustomAttributes(typeof(TableAttribute), false);
|
||||
|
||||
if (attr != null && attr.Length > 0)
|
||||
Table = (TableAttribute)attr[0];
|
||||
@@ -74,22 +74,22 @@ namespace DynamORM.Mapper
|
||||
|
||||
private void CreateColumnAndPropertyMap()
|
||||
{
|
||||
var columnMap = new Dictionary<string, DynamicPropertyInvoker>();
|
||||
var propertyMap = new Dictionary<string, string>();
|
||||
var ignored = new List<string>();
|
||||
Dictionary<string, DynamicPropertyInvoker> columnMap = new Dictionary<string, DynamicPropertyInvoker>();
|
||||
Dictionary<string, string> propertyMap = new Dictionary<string, string>();
|
||||
List<string> ignored = new List<string>();
|
||||
|
||||
foreach (var pi in GetAllMembers(Type).Where(x => x is PropertyInfo).Cast<PropertyInfo>())
|
||||
foreach (PropertyInfo pi in GetAllMembers(Type).Where(x => x is PropertyInfo).Cast<PropertyInfo>())
|
||||
{
|
||||
ColumnAttribute attr = null;
|
||||
|
||||
var attrs = pi.GetCustomAttributes(typeof(ColumnAttribute), true);
|
||||
object[] attrs = pi.GetCustomAttributes(typeof(ColumnAttribute), true);
|
||||
|
||||
if (attrs != null && attrs.Length > 0)
|
||||
attr = (ColumnAttribute)attrs[0];
|
||||
|
||||
string col = attr == null || string.IsNullOrEmpty(attr.Name) ? pi.Name : attr.Name;
|
||||
|
||||
var val = new DynamicPropertyInvoker(pi, attr);
|
||||
DynamicPropertyInvoker val = new DynamicPropertyInvoker(pi, attr);
|
||||
columnMap.Add(col.ToLower(), val);
|
||||
|
||||
propertyMap.Add(pi.Name, col);
|
||||
@@ -128,7 +128,7 @@ namespace DynamORM.Mapper
|
||||
{
|
||||
DynamicPropertyInvoker dpi = null;
|
||||
|
||||
foreach (var item in source.ToDictionary())
|
||||
foreach (KeyValuePair<string, object> item in source.ToDictionary())
|
||||
{
|
||||
if (ColumnsMap.TryGetValue(item.Key.ToLower(), out dpi) && item.Value != null)
|
||||
if (dpi.Setter != null)
|
||||
@@ -142,18 +142,17 @@ namespace DynamORM.Mapper
|
||||
{
|
||||
if (type.IsInterface)
|
||||
{
|
||||
var members = new List<MemberInfo>();
|
||||
|
||||
var considered = new List<Type>();
|
||||
var queue = new Queue<Type>();
|
||||
List<MemberInfo> members = new List<MemberInfo>();
|
||||
List<Type> considered = new List<Type>();
|
||||
Queue<Type> queue = new Queue<Type>();
|
||||
|
||||
considered.Add(type);
|
||||
queue.Enqueue(type);
|
||||
|
||||
while (queue.Count > 0)
|
||||
{
|
||||
var subType = queue.Dequeue();
|
||||
foreach (var subInterface in subType.GetInterfaces())
|
||||
Type subType = queue.Dequeue();
|
||||
foreach (Type subInterface in subType.GetInterfaces())
|
||||
{
|
||||
if (considered.Contains(subInterface)) continue;
|
||||
|
||||
@@ -161,12 +160,12 @@ namespace DynamORM.Mapper
|
||||
queue.Enqueue(subInterface);
|
||||
}
|
||||
|
||||
var typeProperties = subType.GetMembers(
|
||||
MemberInfo[] typeProperties = subType.GetMembers(
|
||||
BindingFlags.FlattenHierarchy
|
||||
| BindingFlags.Public
|
||||
| BindingFlags.Instance);
|
||||
|
||||
var newPropertyInfos = typeProperties
|
||||
IEnumerable<MemberInfo> newPropertyInfos = typeProperties
|
||||
.Where(x => !members.Contains(x));
|
||||
|
||||
members.InsertRange(0, newPropertyInfos);
|
||||
|
||||
Reference in New Issue
Block a user