Fix of Where parameter type not set problem.
This commit is contained in:
@@ -33,30 +33,30 @@
|
|||||||
* * DYNAMORM_OMMIT_TRYPARSE - Remove TryParse helpers (also applies DYNAMORM_OMMIT_GENERICEXECUTION)
|
* * DYNAMORM_OMMIT_TRYPARSE - Remove TryParse helpers (also applies DYNAMORM_OMMIT_GENERICEXECUTION)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using DynamORM.Builders.Extensions;
|
using System;
|
||||||
using DynamORM.Builders.Implementation;
|
using System.Collections;
|
||||||
using DynamORM.Builders;
|
|
||||||
using DynamORM.Helpers.Dynamics;
|
|
||||||
using DynamORM.Helpers;
|
|
||||||
using DynamORM.Mapper;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Specialized;
|
using System.Collections.Specialized;
|
||||||
using System.Collections;
|
|
||||||
using System.Data.Common;
|
|
||||||
using System.Data;
|
using System.Data;
|
||||||
|
using System.Data.Common;
|
||||||
using System.Dynamic;
|
using System.Dynamic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq.Expressions;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Linq.Expressions;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Runtime.Serialization;
|
using System.Runtime.Serialization;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System;
|
using DynamORM.Builders;
|
||||||
|
using DynamORM.Builders.Extensions;
|
||||||
|
using DynamORM.Builders.Implementation;
|
||||||
|
using DynamORM.Helpers;
|
||||||
|
using DynamORM.Helpers.Dynamics;
|
||||||
|
using DynamORM.Mapper;
|
||||||
|
|
||||||
[module: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:FileMayOnlyContainASingleClass", Justification = "This is a generated file which generates all the necessary support classes.")]
|
[module: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:FileMayOnlyContainASingleClass", Justification = "This is a generated file which generates all the necessary support classes.")]
|
||||||
[module: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1403:FileMayOnlyContainASingleNamespace", Justification = "This is a generated file which generates all the necessary support classes.")]
|
[module: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1403:FileMayOnlyContainASingleNamespace", Justification = "This is a generated file which generates all the necessary support classes.")]
|
||||||
|
|
||||||
namespace DynamORM
|
namespace DynamORM
|
||||||
{
|
{
|
||||||
/// <summary>Small utility class to manage single columns.</summary>
|
/// <summary>Small utility class to manage single columns.</summary>
|
||||||
@@ -587,7 +587,10 @@ namespace DynamORM
|
|||||||
////_poolStamp = _db.PoolStamp;
|
////_poolStamp = _db.PoolStamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _db.DumpCommands ? _command.Dump(Console.Out) : _command;
|
if (_db.DumpCommands)
|
||||||
|
_db.DumpCommand(_command);
|
||||||
|
|
||||||
|
return _command;
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IDbCommand Members
|
#region IDbCommand Members
|
||||||
@@ -1817,6 +1820,43 @@ namespace DynamORM
|
|||||||
return schema;
|
return schema;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>Clears the schema from cache.</summary>
|
||||||
|
/// <remarks>Use this method to refresh table information.</remarks>
|
||||||
|
/// <param name="table">Name of table for which clear schema.</param>
|
||||||
|
/// <param name="owner">Owner of table for which clear schema.</param>
|
||||||
|
public void ClearSchema(string table = null, string owner = null)
|
||||||
|
{
|
||||||
|
lock (SyncLock)
|
||||||
|
if (Schema.ContainsKey(table.ToLower()))
|
||||||
|
Schema.Remove(table.ToLower());
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Clears the schema from cache.</summary>
|
||||||
|
/// <remarks>Use this method to refresh table information.</remarks>
|
||||||
|
/// <typeparam name="T">Type of table for which clear schema.</typeparam>
|
||||||
|
public void ClearSchema<T>()
|
||||||
|
{
|
||||||
|
ClearSchema(typeof(T));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Clears the schema from cache.</summary>
|
||||||
|
/// <remarks>Use this method to refresh table information.</remarks>
|
||||||
|
/// <param name="table">Type of table for which clear schema.</param>
|
||||||
|
public void ClearSchema(Type table)
|
||||||
|
{
|
||||||
|
lock (SyncLock)
|
||||||
|
if (Schema.ContainsKey(table.FullName))
|
||||||
|
Schema.Remove(table.FullName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Clears the all schemas from cache.</summary>
|
||||||
|
/// <remarks>Use this method to refresh all table information.</remarks>
|
||||||
|
public void ClearSchema()
|
||||||
|
{
|
||||||
|
lock (SyncLock)
|
||||||
|
Schema.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>Get schema describing objects from reader.</summary>
|
/// <summary>Get schema describing objects from reader.</summary>
|
||||||
/// <param name="table">Table from which extract column info.</param>
|
/// <param name="table">Table from which extract column info.</param>
|
||||||
/// <param name="owner">Owner of table from which extract column info.</param>
|
/// <param name="owner">Owner of table from which extract column info.</param>
|
||||||
@@ -2033,6 +2073,13 @@ namespace DynamORM
|
|||||||
sb.AppendFormat(_parameterFormat, parameter.ToString().Replace(" ", "_"));
|
sb.AppendFormat(_parameterFormat, parameter.ToString().Replace(" ", "_"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>Dumps the command into console output.</summary>
|
||||||
|
/// <param name="cmd">The command to dump.</param>
|
||||||
|
public virtual void DumpCommand(IDbCommand cmd)
|
||||||
|
{
|
||||||
|
cmd.Dump(Console.Out);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Decorators
|
#endregion Decorators
|
||||||
|
|
||||||
#region Connection
|
#region Connection
|
||||||
@@ -3065,7 +3112,16 @@ namespace DynamORM
|
|||||||
/// <returns>Returns instance of builder on which action is set.</returns>
|
/// <returns>Returns instance of builder on which action is set.</returns>
|
||||||
public static T CreateTemporaryParameterAction<T>(this T b, Action<IParameter> a) where T : IDynamicQueryBuilder
|
public static T CreateTemporaryParameterAction<T>(this T b, Action<IParameter> a) where T : IDynamicQueryBuilder
|
||||||
{
|
{
|
||||||
b.OnCreateTemporaryParameter = a;
|
if (a == null)
|
||||||
|
b.OnCreateTemporaryParameter = null;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (b.OnCreateTemporaryParameter == null)
|
||||||
|
b.OnCreateTemporaryParameter = new List<Action<IParameter>>();
|
||||||
|
|
||||||
|
b.OnCreateTemporaryParameter.Add(a);
|
||||||
|
}
|
||||||
|
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3076,7 +3132,16 @@ namespace DynamORM
|
|||||||
/// <returns>Returns instance of builder on which action is set.</returns>
|
/// <returns>Returns instance of builder on which action is set.</returns>
|
||||||
public static T CreateParameterAction<T>(this T b, Action<IParameter, IDbDataParameter> a) where T : IDynamicQueryBuilder
|
public static T CreateParameterAction<T>(this T b, Action<IParameter, IDbDataParameter> a) where T : IDynamicQueryBuilder
|
||||||
{
|
{
|
||||||
b.OnCreateParameter = a;
|
if (a == null)
|
||||||
|
b.OnCreateParameter = null;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (b.OnCreateParameter == null)
|
||||||
|
b.OnCreateParameter = new List<Action<IParameter, IDbDataParameter>>();
|
||||||
|
|
||||||
|
b.OnCreateParameter.Add(a);
|
||||||
|
}
|
||||||
|
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4065,7 +4130,8 @@ namespace DynamORM
|
|||||||
using (var con = Database.Open())
|
using (var con = Database.Open())
|
||||||
using (var cmd = con.CreateCommand())
|
using (var cmd = con.CreateCommand())
|
||||||
using (var rdr = cmd
|
using (var rdr = cmd
|
||||||
.SetCommand(sql, args)
|
.SetCommand(sql)
|
||||||
|
.AddParameters(Database, args)
|
||||||
.ExecuteReader())
|
.ExecuteReader())
|
||||||
while (rdr.Read())
|
while (rdr.Read())
|
||||||
{
|
{
|
||||||
@@ -4938,7 +5004,6 @@ namespace DynamORM
|
|||||||
IDynamicDeleteQueryBuilder Where(object conditions, bool schema = false);
|
IDynamicDeleteQueryBuilder Where(object conditions, bool schema = false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Dynamic insert query builder interface.</summary>
|
/// <summary>Dynamic insert query builder interface.</summary>
|
||||||
/// <remarks>This interface it publically available. Implementation should be hidden.</remarks>
|
/// <remarks>This interface it publically available. Implementation should be hidden.</remarks>
|
||||||
public interface IDynamicInsertQueryBuilder : IDynamicQueryBuilder
|
public interface IDynamicInsertQueryBuilder : IDynamicQueryBuilder
|
||||||
@@ -4970,7 +5035,6 @@ namespace DynamORM
|
|||||||
IDynamicInsertQueryBuilder Insert(object o);
|
IDynamicInsertQueryBuilder Insert(object o);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Dynamic query builder base interface.</summary>
|
/// <summary>Dynamic query builder base interface.</summary>
|
||||||
/// <remarks>This interface it publically available. Implementation should be hidden.</remarks>
|
/// <remarks>This interface it publically available. Implementation should be hidden.</remarks>
|
||||||
public interface IDynamicQueryBuilder
|
public interface IDynamicQueryBuilder
|
||||||
@@ -5002,16 +5066,15 @@ namespace DynamORM
|
|||||||
/// <remarks>This method must be override by derived classes.</remarks>
|
/// <remarks>This method must be override by derived classes.</remarks>
|
||||||
string CommandText();
|
string CommandText();
|
||||||
|
|
||||||
/// <summary>Gets or sets the on create temporary parameter action.</summary>
|
/// <summary>Gets or sets the on create temporary parameter actions.</summary>
|
||||||
/// <remarks>This is exposed to allow setting schema of column.</remarks>
|
/// <remarks>This is exposed to allow setting schema of column.</remarks>
|
||||||
Action<IParameter> OnCreateTemporaryParameter { get; set; }
|
List<Action<IParameter>> OnCreateTemporaryParameter { get; set; }
|
||||||
|
|
||||||
/// <summary>Gets or sets the on create real parameter action.</summary>
|
/// <summary>Gets or sets the on create real parameter actions.</summary>
|
||||||
/// <remarks>This is exposed to allow modification of parameter.</remarks>
|
/// <remarks>This is exposed to allow modification of parameter.</remarks>
|
||||||
Action<IParameter, IDbDataParameter> OnCreateParameter { get; set; }
|
List<Action<IParameter, IDbDataParameter>> OnCreateParameter { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Dynamic select query builder interface.</summary>
|
/// <summary>Dynamic select query builder interface.</summary>
|
||||||
/// <remarks>This interface it publically available. Implementation should be hidden.</remarks>
|
/// <remarks>This interface it publically available. Implementation should be hidden.</remarks>
|
||||||
public interface IDynamicSelectQueryBuilder : IDynamicQueryBuilder ////, IEnumerable<object>
|
public interface IDynamicSelectQueryBuilder : IDynamicQueryBuilder ////, IEnumerable<object>
|
||||||
@@ -5215,7 +5278,6 @@ namespace DynamORM
|
|||||||
#endregion Top/Limit/Offset/Distinct
|
#endregion Top/Limit/Offset/Distinct
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Dynamic update query builder interface.</summary>
|
/// <summary>Dynamic update query builder interface.</summary>
|
||||||
/// <remarks>This interface it publically available. Implementation should be hidden.</remarks>
|
/// <remarks>This interface it publically available. Implementation should be hidden.</remarks>
|
||||||
public interface IDynamicUpdateQueryBuilder : IDynamicQueryBuilder
|
public interface IDynamicUpdateQueryBuilder : IDynamicQueryBuilder
|
||||||
@@ -5306,7 +5368,6 @@ namespace DynamORM
|
|||||||
#endregion Where
|
#endregion Where
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Interface describing parameter info.</summary>
|
/// <summary>Interface describing parameter info.</summary>
|
||||||
public interface IParameter
|
public interface IParameter
|
||||||
{
|
{
|
||||||
@@ -5330,7 +5391,6 @@ namespace DynamORM
|
|||||||
DynamicSchemaColumn? Schema { get; set; }
|
DynamicSchemaColumn? Schema { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Interface describing table information.</summary>
|
/// <summary>Interface describing table information.</summary>
|
||||||
public interface ITableInfo
|
public interface ITableInfo
|
||||||
{
|
{
|
||||||
@@ -5347,7 +5407,6 @@ namespace DynamORM
|
|||||||
Dictionary<string, DynamicSchemaColumn> Schema { get; }
|
Dictionary<string, DynamicSchemaColumn> Schema { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
namespace Extensions
|
namespace Extensions
|
||||||
{
|
{
|
||||||
internal static class DynamicModifyBuilderExtensions
|
internal static class DynamicModifyBuilderExtensions
|
||||||
@@ -5471,7 +5530,6 @@ namespace DynamORM
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
internal static class DynamicWhereQueryExtensions
|
internal static class DynamicWhereQueryExtensions
|
||||||
{
|
{
|
||||||
#region Where
|
#region Where
|
||||||
@@ -5547,6 +5605,17 @@ namespace DynamORM
|
|||||||
if (column.VirtualColumn.HasValue)
|
if (column.VirtualColumn.HasValue)
|
||||||
builder.VirtualMode = column.VirtualColumn.Value;
|
builder.VirtualMode = column.VirtualColumn.Value;
|
||||||
|
|
||||||
|
Action<IParameter> modParam = (p) =>
|
||||||
|
{
|
||||||
|
if (column.Schema.HasValue)
|
||||||
|
p.Schema = column.Schema;
|
||||||
|
|
||||||
|
if (!p.Schema.HasValue)
|
||||||
|
p.Schema = column.Schema ?? builder.GetColumnFromSchema(column.ColumnName);
|
||||||
|
};
|
||||||
|
|
||||||
|
builder.CreateTemporaryParameterAction(modParam);
|
||||||
|
|
||||||
// It's kind of uglu, but... well it works.
|
// It's kind of uglu, but... well it works.
|
||||||
if (column.Or)
|
if (column.Or)
|
||||||
switch (column.Operator)
|
switch (column.Operator)
|
||||||
@@ -5579,6 +5648,7 @@ namespace DynamORM
|
|||||||
case DynamicColumn.CompareOperator.Between: builder.InternalWhere(column.BeginBlock, column.EndBlock, x => x(builder.FixObjectName(column.ColumnName)).Between(column.Value)); break;
|
case DynamicColumn.CompareOperator.Between: builder.InternalWhere(column.BeginBlock, column.EndBlock, x => x(builder.FixObjectName(column.ColumnName)).Between(column.Value)); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
builder.OnCreateTemporaryParameter.Remove(modParam);
|
||||||
builder.VirtualMode = virt;
|
builder.VirtualMode = virt;
|
||||||
|
|
||||||
return builder;
|
return builder;
|
||||||
@@ -5664,8 +5734,6 @@ namespace DynamORM
|
|||||||
|
|
||||||
#endregion Where
|
#endregion Where
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Implementation
|
namespace Implementation
|
||||||
@@ -5762,7 +5830,6 @@ namespace DynamORM
|
|||||||
#endregion Where
|
#endregion Where
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Implementation of dynamic insert query builder.</summary>
|
/// <summary>Implementation of dynamic insert query builder.</summary>
|
||||||
internal class DynamicInsertQueryBuilder : DynamicModifyBuilder, IDynamicInsertQueryBuilder
|
internal class DynamicInsertQueryBuilder : DynamicModifyBuilder, IDynamicInsertQueryBuilder
|
||||||
{
|
{
|
||||||
@@ -5848,7 +5915,7 @@ namespace DynamORM
|
|||||||
|
|
||||||
DynamicSchemaColumn? col = GetColumnFromSchema(node.Name);
|
DynamicSchemaColumn? col = GetColumnFromSchema(node.Name);
|
||||||
main = Database.DecorateName(node.Name);
|
main = Database.DecorateName(node.Name);
|
||||||
value = Parse(node.Value, pars: Parameters, nulls: true, columnSchema: col);
|
value = Parse(node.Value, ref col, pars: Parameters, nulls: true);
|
||||||
|
|
||||||
_columns = _columns == null ? main : string.Format("{0}, {1}", _columns, main);
|
_columns = _columns == null ? main : string.Format("{0}, {1}", _columns, main);
|
||||||
_values = _values == null ? value : string.Format("{0}, {1}", _values, value);
|
_values = _values == null ? value : string.Format("{0}, {1}", _values, value);
|
||||||
@@ -5902,7 +5969,7 @@ namespace DynamORM
|
|||||||
DynamicSchemaColumn? col = column.Schema ?? GetColumnFromSchema(column.ColumnName);
|
DynamicSchemaColumn? col = column.Schema ?? GetColumnFromSchema(column.ColumnName);
|
||||||
|
|
||||||
string main = FixObjectName(column.ColumnName, onlyColumn: true);
|
string main = FixObjectName(column.ColumnName, onlyColumn: true);
|
||||||
string value = Parse(column.Value, pars: Parameters, nulls: true, columnSchema: col);
|
string value = Parse(column.Value, ref col, pars: Parameters, nulls: true);
|
||||||
|
|
||||||
_columns = _columns == null ? main : string.Format("{0}, {1}", _columns, main);
|
_columns = _columns == null ? main : string.Format("{0}, {1}", _columns, main);
|
||||||
_values = _values == null ? value : string.Format("{0}, {1}", _values, value);
|
_values = _values == null ? value : string.Format("{0}, {1}", _values, value);
|
||||||
@@ -5935,7 +6002,6 @@ namespace DynamORM
|
|||||||
#endregion Insert
|
#endregion Insert
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Base query builder for insert/update/delete statements.</summary>
|
/// <summary>Base query builder for insert/update/delete statements.</summary>
|
||||||
internal abstract class DynamicModifyBuilder : DynamicQueryBuilder
|
internal abstract class DynamicModifyBuilder : DynamicQueryBuilder
|
||||||
{
|
{
|
||||||
@@ -5975,7 +6041,6 @@ namespace DynamORM
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Implementation of dynamic query builder base interface.</summary>
|
/// <summary>Implementation of dynamic query builder base interface.</summary>
|
||||||
internal abstract class DynamicQueryBuilder : IDynamicQueryBuilder
|
internal abstract class DynamicQueryBuilder : IDynamicQueryBuilder
|
||||||
{
|
{
|
||||||
@@ -6152,13 +6217,13 @@ namespace DynamORM
|
|||||||
/// <summary>Gets or sets a value indicating whether add virtual parameters.</summary>
|
/// <summary>Gets or sets a value indicating whether add virtual parameters.</summary>
|
||||||
public bool VirtualMode { get; set; }
|
public bool VirtualMode { get; set; }
|
||||||
|
|
||||||
/// <summary>Gets or sets the on create temporary parameter action.</summary>
|
/// <summary>Gets or sets the on create temporary parameter actions.</summary>
|
||||||
/// <remarks>This is exposed to allow setting schema of column.</remarks>
|
/// <remarks>This is exposed to allow setting schema of column.</remarks>
|
||||||
public Action<IParameter> OnCreateTemporaryParameter { get; set; }
|
public List<Action<IParameter>> OnCreateTemporaryParameter { get; set; }
|
||||||
|
|
||||||
/// <summary>Gets or sets the on create real parameter action.</summary>
|
/// <summary>Gets or sets the on create real parameter actions.</summary>
|
||||||
/// <remarks>This is exposed to allow modification of parameter.</remarks>
|
/// <remarks>This is exposed to allow modification of parameter.</remarks>
|
||||||
public Action<IParameter, IDbDataParameter> OnCreateParameter { get; set; }
|
public List<Action<IParameter, IDbDataParameter>> OnCreateParameter { get; set; }
|
||||||
|
|
||||||
/// <summary>Gets a value indicating whether database supports standard schema.</summary>
|
/// <summary>Gets a value indicating whether database supports standard schema.</summary>
|
||||||
public bool SupportSchema { get; private set; }
|
public bool SupportSchema { get; private set; }
|
||||||
@@ -6197,7 +6262,7 @@ namespace DynamORM
|
|||||||
(p as Parameter).Ordinal = command.Parameters.Count - 1;
|
(p as Parameter).Ordinal = command.Parameters.Count - 1;
|
||||||
|
|
||||||
if (OnCreateParameter != null)
|
if (OnCreateParameter != null)
|
||||||
OnCreateParameter(p, param);
|
OnCreateParameter.ForEach(x => x(p, param));
|
||||||
|
|
||||||
return param.ParameterName;
|
return param.ParameterName;
|
||||||
}, s);
|
}, s);
|
||||||
@@ -6219,11 +6284,32 @@ namespace DynamORM
|
|||||||
/// database. If false and the value is null, then an exception is thrown.</param>
|
/// database. If false and the value is null, then an exception is thrown.</param>
|
||||||
/// <param name="decorate">If set to <c>true</c> decorate element.</param>
|
/// <param name="decorate">If set to <c>true</c> decorate element.</param>
|
||||||
/// <param name="isMultiPart">If set parse argument as alias. This is workaround for AS method.</param>
|
/// <param name="isMultiPart">If set parse argument as alias. This is workaround for AS method.</param>
|
||||||
/// <param name="columnSchema">This parameter is used to determine type of parameter used in query.</param>
|
|
||||||
/// <returns>A string containing the result of the parsing, along with the parameters extracted in the
|
/// <returns>A string containing the result of the parsing, along with the parameters extracted in the
|
||||||
/// <paramref name="pars" /> instance if such is given.</returns>
|
/// <paramref name="pars" /> instance if such is given.</returns>
|
||||||
/// <exception cref="System.ArgumentNullException">Null nodes are not accepted.</exception>
|
/// <exception cref="System.ArgumentNullException">Null nodes are not accepted.</exception>
|
||||||
internal virtual string Parse(object node, IDictionary<string, IParameter> pars = null, bool rawstr = false, bool nulls = false, bool decorate = true, bool isMultiPart = true, DynamicSchemaColumn? columnSchema = null)
|
internal virtual string Parse(object node, IDictionary<string, IParameter> pars = null, bool rawstr = false, bool nulls = false, bool decorate = true, bool isMultiPart = true)
|
||||||
|
{
|
||||||
|
DynamicSchemaColumn? c = null;
|
||||||
|
|
||||||
|
return Parse(node, ref c, pars, rawstr, nulls, decorate, isMultiPart);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Parses the arbitrary object given and translates it into a string with the appropriate
|
||||||
|
/// syntax for the database this parser is specific to.</summary>
|
||||||
|
/// <param name="node">The object to parse and translate. It can be any arbitrary object, including null values (if
|
||||||
|
/// permitted) and dynamic lambda expressions.</param>
|
||||||
|
/// <param name="columnSchema">This parameter is used to determine type of parameter used in query.</param>
|
||||||
|
/// <param name="pars">If not null, the parameters' list where to store the parameters extracted by the parsing.</param>
|
||||||
|
/// <param name="rawstr">If true, literal (raw) string are allowed. If false and the node is a literal then, as a
|
||||||
|
/// security measure, an exception is thrown.</param>
|
||||||
|
/// <param name="nulls">True to accept null values and translate them into the appropriate syntax accepted by the
|
||||||
|
/// database. If false and the value is null, then an exception is thrown.</param>
|
||||||
|
/// <param name="decorate">If set to <c>true</c> decorate element.</param>
|
||||||
|
/// <param name="isMultiPart">If set parse argument as alias. This is workaround for AS method.</param>
|
||||||
|
/// <returns>A string containing the result of the parsing, along with the parameters extracted in the
|
||||||
|
/// <paramref name="pars" /> instance if such is given.</returns>
|
||||||
|
/// <exception cref="System.ArgumentNullException">Null nodes are not accepted.</exception>
|
||||||
|
internal virtual string Parse(object node, ref DynamicSchemaColumn? columnSchema, IDictionary<string, IParameter> pars = null, bool rawstr = false, bool nulls = false, bool decorate = true, bool isMultiPart = true)
|
||||||
{
|
{
|
||||||
// Null nodes are accepted or not depending upon the "nulls" flag...
|
// Null nodes are accepted or not depending upon the "nulls" flag...
|
||||||
if (node == null)
|
if (node == null)
|
||||||
@@ -6231,38 +6317,38 @@ namespace DynamORM
|
|||||||
if (!nulls)
|
if (!nulls)
|
||||||
throw new ArgumentNullException("node", "Null nodes are not accepted.");
|
throw new ArgumentNullException("node", "Null nodes are not accepted.");
|
||||||
|
|
||||||
return Dispatch(node, pars, decorate, columnSchema: columnSchema);
|
return Dispatch(node, ref columnSchema, pars, decorate);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Nodes that are strings are parametrized or not depending the "rawstr" flag...
|
// Nodes that are strings are parametrized or not depending the "rawstr" flag...
|
||||||
if (node is string)
|
if (node is string)
|
||||||
{
|
{
|
||||||
if (rawstr) return (string)node;
|
if (rawstr) return (string)node;
|
||||||
else return Dispatch(node, pars, decorate, columnSchema: columnSchema);
|
else return Dispatch(node, ref columnSchema, pars, decorate);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If node is a delegate, parse it to create the logical tree...
|
// If node is a delegate, parse it to create the logical tree...
|
||||||
if (node is Delegate)
|
if (node is Delegate)
|
||||||
{
|
{
|
||||||
node = DynamicParser.Parse((Delegate)node).Result;
|
node = DynamicParser.Parse((Delegate)node).Result;
|
||||||
return Parse(node, pars, rawstr, decorate: decorate, columnSchema: columnSchema); // Intercept containers as in (x => "string")
|
return Parse(node, ref columnSchema, pars, rawstr, decorate: decorate); // Intercept containers as in (x => "string")
|
||||||
}
|
}
|
||||||
|
|
||||||
return Dispatch(node, pars, decorate, isMultiPart, columnSchema);
|
return Dispatch(node, ref columnSchema, pars, decorate, isMultiPart);
|
||||||
}
|
}
|
||||||
|
|
||||||
private string Dispatch(object node, IDictionary<string, IParameter> pars = null, bool decorate = true, bool isMultiPart = true, DynamicSchemaColumn? columnSchema = null)
|
private string Dispatch(object node, ref DynamicSchemaColumn? columnSchema, IDictionary<string, IParameter> pars = null, bool decorate = true, bool isMultiPart = true)
|
||||||
{
|
{
|
||||||
if (node != null)
|
if (node != null)
|
||||||
{
|
{
|
||||||
if (node is DynamicQueryBuilder) return ParseCommand((DynamicQueryBuilder)node, pars);
|
if (node is DynamicQueryBuilder) return ParseCommand((DynamicQueryBuilder)node, pars);
|
||||||
else if (node is DynamicParser.Node.Argument) return ParseArgument((DynamicParser.Node.Argument)node, isMultiPart);
|
else if (node is DynamicParser.Node.Argument) return ParseArgument((DynamicParser.Node.Argument)node, isMultiPart);
|
||||||
else if (node is DynamicParser.Node.GetMember) return ParseGetMember((DynamicParser.Node.GetMember)node, pars, decorate, isMultiPart, columnSchema);
|
else if (node is DynamicParser.Node.GetMember) return ParseGetMember((DynamicParser.Node.GetMember)node, ref columnSchema, pars, decorate, isMultiPart);
|
||||||
else if (node is DynamicParser.Node.SetMember) return ParseSetMember((DynamicParser.Node.SetMember)node, pars, decorate, isMultiPart, columnSchema);
|
else if (node is DynamicParser.Node.SetMember) return ParseSetMember((DynamicParser.Node.SetMember)node, ref columnSchema, pars, decorate, isMultiPart);
|
||||||
else if (node is DynamicParser.Node.Unary) return ParseUnary((DynamicParser.Node.Unary)node, pars);
|
else if (node is DynamicParser.Node.Unary) return ParseUnary((DynamicParser.Node.Unary)node, pars);
|
||||||
else if (node is DynamicParser.Node.Binary) return ParseBinary((DynamicParser.Node.Binary)node, pars);
|
else if (node is DynamicParser.Node.Binary) return ParseBinary((DynamicParser.Node.Binary)node, pars);
|
||||||
else if (node is DynamicParser.Node.Method) return ParseMethod((DynamicParser.Node.Method)node, pars);
|
else if (node is DynamicParser.Node.Method) return ParseMethod((DynamicParser.Node.Method)node, pars);
|
||||||
else if (node is DynamicParser.Node.Invoke) return ParseInvoke((DynamicParser.Node.Invoke)node, pars);
|
else if (node is DynamicParser.Node.Invoke) return ParseInvoke((DynamicParser.Node.Invoke)node, ref columnSchema, pars);
|
||||||
else if (node is DynamicParser.Node.Convert) return ParseConvert((DynamicParser.Node.Convert)node, pars);
|
else if (node is DynamicParser.Node.Convert) return ParseConvert((DynamicParser.Node.Convert)node, pars);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6294,7 +6380,7 @@ namespace DynamORM
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual string ParseGetMember(DynamicParser.Node.GetMember node, IDictionary<string, IParameter> pars = null, bool decorate = true, bool isMultiPart = true, DynamicSchemaColumn? columnSchema = null)
|
protected virtual string ParseGetMember(DynamicParser.Node.GetMember node, ref DynamicSchemaColumn? columnSchema, IDictionary<string, IParameter> pars = null, bool decorate = true, bool isMultiPart = true)
|
||||||
{
|
{
|
||||||
if (node.Host is DynamicParser.Node.Argument && IsTableAlias(node.Name))
|
if (node.Host is DynamicParser.Node.Argument && IsTableAlias(node.Name))
|
||||||
{
|
{
|
||||||
@@ -6329,7 +6415,7 @@ namespace DynamORM
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual string ParseSetMember(DynamicParser.Node.SetMember node, IDictionary<string, IParameter> pars = null, bool decorate = true, bool isMultiPart = true, DynamicSchemaColumn? columnSchema = null)
|
protected virtual string ParseSetMember(DynamicParser.Node.SetMember node, ref DynamicSchemaColumn? columnSchema, IDictionary<string, IParameter> pars = null, bool decorate = true, bool isMultiPart = true)
|
||||||
{
|
{
|
||||||
if (node.Host is DynamicParser.Node.Argument && IsTableAlias(node.Name))
|
if (node.Host is DynamicParser.Node.Argument && IsTableAlias(node.Name))
|
||||||
{
|
{
|
||||||
@@ -6358,7 +6444,7 @@ namespace DynamORM
|
|||||||
|
|
||||||
columnSchema = GetColumnFromSchema(name);
|
columnSchema = GetColumnFromSchema(name);
|
||||||
|
|
||||||
string value = Parse(node.Value, pars, nulls: true, columnSchema: columnSchema);
|
string value = Parse(node.Value, ref columnSchema, pars, nulls: true);
|
||||||
return string.Format("{0} = ({1})", name, value);
|
return string.Format("{0} = ({1})", name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6409,8 +6495,8 @@ namespace DynamORM
|
|||||||
}
|
}
|
||||||
|
|
||||||
DynamicSchemaColumn? columnSchema = null;
|
DynamicSchemaColumn? columnSchema = null;
|
||||||
string left = Parse(node.Left, pars, columnSchema: columnSchema); // Not nulls: left is assumed to be an object
|
string left = Parse(node.Left, ref columnSchema, pars); // Not nulls: left is assumed to be an object
|
||||||
string right = Parse(node.Right, pars, nulls: true, columnSchema: columnSchema);
|
string right = Parse(node.Right, ref columnSchema, pars, nulls: true);
|
||||||
return string.Format("({0} {1} {2})", left, op, right);
|
return string.Format("({0} {1} {2})", left, op, right);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6559,7 +6645,7 @@ namespace DynamORM
|
|||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual string ParseInvoke(DynamicParser.Node.Invoke node, IDictionary<string, IParameter> pars = null)
|
protected virtual string ParseInvoke(DynamicParser.Node.Invoke node, ref DynamicSchemaColumn? columnSchema, IDictionary<string, IParameter> pars = null)
|
||||||
{
|
{
|
||||||
// This is used as an especial syntax to merely concatenate its arguments. It is used as a way to extend the supported syntax without the need of treating all the possible cases...
|
// This is used as an especial syntax to merely concatenate its arguments. It is used as a way to extend the supported syntax without the need of treating all the possible cases...
|
||||||
if (node.Arguments == null || node.Arguments.Length == 0)
|
if (node.Arguments == null || node.Arguments.Length == 0)
|
||||||
@@ -6569,9 +6655,14 @@ namespace DynamORM
|
|||||||
foreach (object arg in node.Arguments)
|
foreach (object arg in node.Arguments)
|
||||||
{
|
{
|
||||||
if (arg is string)
|
if (arg is string)
|
||||||
|
{
|
||||||
sb.Append((string)arg);
|
sb.Append((string)arg);
|
||||||
|
|
||||||
|
if (node.Arguments.Length == 1 && !columnSchema.HasValue)
|
||||||
|
columnSchema = GetColumnFromSchema((string)arg);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
sb.Append(Parse(arg, pars, rawstr: true, nulls: true));
|
sb.Append(Parse(arg, ref columnSchema, pars, rawstr: true, nulls: true));
|
||||||
}
|
}
|
||||||
|
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
@@ -6606,7 +6697,7 @@ namespace DynamORM
|
|||||||
|
|
||||||
// If we are adding parameter we inform external sources about this.
|
// If we are adding parameter we inform external sources about this.
|
||||||
if (OnCreateTemporaryParameter != null)
|
if (OnCreateTemporaryParameter != null)
|
||||||
OnCreateTemporaryParameter(par);
|
OnCreateTemporaryParameter.ForEach(x => x(par));
|
||||||
|
|
||||||
pars.Add(par.Name, par);
|
pars.Add(par.Name, par);
|
||||||
|
|
||||||
@@ -6683,8 +6774,8 @@ namespace DynamORM
|
|||||||
internal DynamicSchemaColumn? GetColumnFromSchema(string colName, DynamicTypeMap mapper = null, string table = null)
|
internal DynamicSchemaColumn? GetColumnFromSchema(string colName, DynamicTypeMap mapper = null, string table = null)
|
||||||
{
|
{
|
||||||
// This is tricky and will not always work unfortunetly.
|
// This is tricky and will not always work unfortunetly.
|
||||||
if (colName.ContainsAny(StringExtensions.InvalidMultipartMemberChars))
|
////if (colName.ContainsAny(StringExtensions.InvalidMultipartMemberChars))
|
||||||
return null;
|
//// return null;
|
||||||
|
|
||||||
// First we need to get real column name and it's owner if exist.
|
// First we need to get real column name and it's owner if exist.
|
||||||
var parts = colName.Split('.')
|
var parts = colName.Split('.')
|
||||||
@@ -6724,7 +6815,6 @@ namespace DynamORM
|
|||||||
#endregion Helpers
|
#endregion Helpers
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Implementation of dynamic select query builder.</summary>
|
/// <summary>Implementation of dynamic select query builder.</summary>
|
||||||
internal class DynamicSelectQueryBuilder : DynamicQueryBuilder, IDynamicSelectQueryBuilder, DynamicQueryBuilder.IQueryWithWhere
|
internal class DynamicSelectQueryBuilder : DynamicQueryBuilder, IDynamicSelectQueryBuilder, DynamicQueryBuilder.IQueryWithWhere
|
||||||
{
|
{
|
||||||
@@ -7984,7 +8074,6 @@ namespace DynamORM
|
|||||||
#endregion Helpers
|
#endregion Helpers
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Update query builder.</summary>
|
/// <summary>Update query builder.</summary>
|
||||||
internal class DynamicUpdateQueryBuilder : DynamicModifyBuilder, IDynamicUpdateQueryBuilder, DynamicQueryBuilder.IQueryWithWhere
|
internal class DynamicUpdateQueryBuilder : DynamicModifyBuilder, IDynamicUpdateQueryBuilder, DynamicQueryBuilder.IQueryWithWhere
|
||||||
{
|
{
|
||||||
@@ -8129,7 +8218,7 @@ namespace DynamORM
|
|||||||
|
|
||||||
DynamicSchemaColumn? col = GetColumnFromSchema(node.Name);
|
DynamicSchemaColumn? col = GetColumnFromSchema(node.Name);
|
||||||
main = Database.DecorateName(node.Name);
|
main = Database.DecorateName(node.Name);
|
||||||
value = Parse(node.Value, pars: Parameters, nulls: true, columnSchema: col);
|
value = Parse(node.Value, ref col, pars: Parameters, nulls: true);
|
||||||
|
|
||||||
str = string.Format("{0} = {1}", main, value);
|
str = string.Format("{0} = {1}", main, value);
|
||||||
_columns = _columns == null ? str : string.Format("{0}, {1}", _columns, str);
|
_columns = _columns == null ? str : string.Format("{0}, {1}", _columns, str);
|
||||||
@@ -8185,7 +8274,7 @@ namespace DynamORM
|
|||||||
DynamicSchemaColumn? col = column.Schema ?? GetColumnFromSchema(column.ColumnName);
|
DynamicSchemaColumn? col = column.Schema ?? GetColumnFromSchema(column.ColumnName);
|
||||||
|
|
||||||
string main = FixObjectName(column.ColumnName, onlyColumn: true);
|
string main = FixObjectName(column.ColumnName, onlyColumn: true);
|
||||||
string value = Parse(column.Value, pars: Parameters, nulls: true, columnSchema: col);
|
string value = Parse(column.Value, ref col, pars: Parameters, nulls: true);
|
||||||
|
|
||||||
var str = string.Format("{0} = {1}", main, value);
|
var str = string.Format("{0} = {1}", main, value);
|
||||||
_columns = _columns == null ? str : string.Format("{0}, {1}", _columns, str);
|
_columns = _columns == null ? str : string.Format("{0}, {1}", _columns, str);
|
||||||
@@ -8267,10 +8356,7 @@ namespace DynamORM
|
|||||||
|
|
||||||
#endregion Where
|
#endregion Where
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Helpers
|
namespace Helpers
|
||||||
@@ -8368,7 +8454,6 @@ namespace DynamORM
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Framework detection and specific implementations.</summary>
|
/// <summary>Framework detection and specific implementations.</summary>
|
||||||
public static class FrameworkTools
|
public static class FrameworkTools
|
||||||
{
|
{
|
||||||
@@ -8489,7 +8574,6 @@ namespace DynamORM
|
|||||||
#endregion GetGenericTypeArguments
|
#endregion GetGenericTypeArguments
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Extends <see cref="IDisposable"/> interface.</summary>
|
/// <summary>Extends <see cref="IDisposable"/> interface.</summary>
|
||||||
public interface IExtendedDisposable : IDisposable
|
public interface IExtendedDisposable : IDisposable
|
||||||
{
|
{
|
||||||
@@ -8502,7 +8586,6 @@ namespace DynamORM
|
|||||||
bool IsDisposed { get; }
|
bool IsDisposed { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Class containing useful string extensions.</summary>
|
/// <summary>Class containing useful string extensions.</summary>
|
||||||
internal static class StringExtensions
|
internal static class StringExtensions
|
||||||
{
|
{
|
||||||
@@ -8800,7 +8883,6 @@ namespace DynamORM
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Class contains unclassified extensions.</summary>
|
/// <summary>Class contains unclassified extensions.</summary>
|
||||||
internal static class UnclassifiedExtensions
|
internal static class UnclassifiedExtensions
|
||||||
{
|
{
|
||||||
@@ -8844,7 +8926,6 @@ namespace DynamORM
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
namespace Dynamics
|
namespace Dynamics
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -9941,7 +10022,6 @@ namespace DynamORM
|
|||||||
#endregion Implementation of IExtendedDisposable
|
#endregion Implementation of IExtendedDisposable
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Class that allows to use interfaces as dynamic objects.</summary>
|
/// <summary>Class that allows to use interfaces as dynamic objects.</summary>
|
||||||
/// <typeparam name="T">Type of class to proxy.</typeparam>
|
/// <typeparam name="T">Type of class to proxy.</typeparam>
|
||||||
/// <remarks>This is temporary solution. Which allows to use builders as a dynamic type.</remarks>
|
/// <remarks>This is temporary solution. Which allows to use builders as a dynamic type.</remarks>
|
||||||
@@ -10219,10 +10299,7 @@ namespace DynamORM
|
|||||||
return type.GetMembers(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Instance);
|
return type.GetMembers(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Instance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Mapper
|
namespace Mapper
|
||||||
@@ -10368,7 +10445,6 @@ namespace DynamORM
|
|||||||
#endregion Constructors
|
#endregion Constructors
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Class with mapper cache.</summary>
|
/// <summary>Class with mapper cache.</summary>
|
||||||
public static class DynamicMapperCache
|
public static class DynamicMapperCache
|
||||||
{
|
{
|
||||||
@@ -10410,7 +10486,6 @@ namespace DynamORM
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Dynamic property invoker.</summary>
|
/// <summary>Dynamic property invoker.</summary>
|
||||||
public class DynamicPropertyInvoker
|
public class DynamicPropertyInvoker
|
||||||
{
|
{
|
||||||
@@ -10505,7 +10580,6 @@ namespace DynamORM
|
|||||||
#endregion Type command cache
|
#endregion Type command cache
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Represents type columnMap.</summary>
|
/// <summary>Represents type columnMap.</summary>
|
||||||
public class DynamicTypeMap
|
public class DynamicTypeMap
|
||||||
{
|
{
|
||||||
@@ -10621,7 +10695,6 @@ namespace DynamORM
|
|||||||
#endregion Type command cache
|
#endregion Type command cache
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Allows to add ignore action to property.</summary>
|
/// <summary>Allows to add ignore action to property.</summary>
|
||||||
/// <remarks>Property still get's mapped from output.</remarks>
|
/// <remarks>Property still get's mapped from output.</remarks>
|
||||||
[AttributeUsage(AttributeTargets.Property)]
|
[AttributeUsage(AttributeTargets.Property)]
|
||||||
@@ -10629,7 +10702,6 @@ namespace DynamORM
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Allows to add table name to class.</summary>
|
/// <summary>Allows to add table name to class.</summary>
|
||||||
[AttributeUsage(AttributeTargets.Class)]
|
[AttributeUsage(AttributeTargets.Class)]
|
||||||
public class TableAttribute : Attribute
|
public class TableAttribute : Attribute
|
||||||
@@ -10646,9 +10718,5 @@ namespace DynamORM
|
|||||||
/// set this to true to get schema from type.</remarks>
|
/// set this to true to get schema from type.</remarks>
|
||||||
public bool Override { get; set; }
|
public bool Override { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -113,6 +113,17 @@ namespace DynamORM.Builders.Extensions
|
|||||||
if (column.VirtualColumn.HasValue)
|
if (column.VirtualColumn.HasValue)
|
||||||
builder.VirtualMode = column.VirtualColumn.Value;
|
builder.VirtualMode = column.VirtualColumn.Value;
|
||||||
|
|
||||||
|
Action<IParameter> modParam = (p) =>
|
||||||
|
{
|
||||||
|
if (column.Schema.HasValue)
|
||||||
|
p.Schema = column.Schema;
|
||||||
|
|
||||||
|
if (!p.Schema.HasValue)
|
||||||
|
p.Schema = column.Schema ?? builder.GetColumnFromSchema(column.ColumnName);
|
||||||
|
};
|
||||||
|
|
||||||
|
builder.CreateTemporaryParameterAction(modParam);
|
||||||
|
|
||||||
// It's kind of uglu, but... well it works.
|
// It's kind of uglu, but... well it works.
|
||||||
if (column.Or)
|
if (column.Or)
|
||||||
switch (column.Operator)
|
switch (column.Operator)
|
||||||
@@ -145,6 +156,7 @@ namespace DynamORM.Builders.Extensions
|
|||||||
case DynamicColumn.CompareOperator.Between: builder.InternalWhere(column.BeginBlock, column.EndBlock, x => x(builder.FixObjectName(column.ColumnName)).Between(column.Value)); break;
|
case DynamicColumn.CompareOperator.Between: builder.InternalWhere(column.BeginBlock, column.EndBlock, x => x(builder.FixObjectName(column.ColumnName)).Between(column.Value)); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
builder.OnCreateTemporaryParameter.Remove(modParam);
|
||||||
builder.VirtualMode = virt;
|
builder.VirtualMode = virt;
|
||||||
|
|
||||||
return builder;
|
return builder;
|
||||||
|
|||||||
@@ -63,12 +63,12 @@ namespace DynamORM.Builders
|
|||||||
/// <remarks>This method must be override by derived classes.</remarks>
|
/// <remarks>This method must be override by derived classes.</remarks>
|
||||||
string CommandText();
|
string CommandText();
|
||||||
|
|
||||||
/// <summary>Gets or sets the on create temporary parameter action.</summary>
|
/// <summary>Gets or sets the on create temporary parameter actions.</summary>
|
||||||
/// <remarks>This is exposed to allow setting schema of column.</remarks>
|
/// <remarks>This is exposed to allow setting schema of column.</remarks>
|
||||||
Action<IParameter> OnCreateTemporaryParameter { get; set; }
|
List<Action<IParameter>> OnCreateTemporaryParameter { get; set; }
|
||||||
|
|
||||||
/// <summary>Gets or sets the on create real parameter action.</summary>
|
/// <summary>Gets or sets the on create real parameter actions.</summary>
|
||||||
/// <remarks>This is exposed to allow modification of parameter.</remarks>
|
/// <remarks>This is exposed to allow modification of parameter.</remarks>
|
||||||
Action<IParameter, IDbDataParameter> OnCreateParameter { get; set; }
|
List<Action<IParameter, IDbDataParameter>> OnCreateParameter { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -121,7 +121,7 @@ namespace DynamORM.Builders.Implementation
|
|||||||
|
|
||||||
DynamicSchemaColumn? col = GetColumnFromSchema(node.Name);
|
DynamicSchemaColumn? col = GetColumnFromSchema(node.Name);
|
||||||
main = Database.DecorateName(node.Name);
|
main = Database.DecorateName(node.Name);
|
||||||
value = Parse(node.Value, pars: Parameters, nulls: true, columnSchema: col);
|
value = Parse(node.Value, ref col, pars: Parameters, nulls: true);
|
||||||
|
|
||||||
_columns = _columns == null ? main : string.Format("{0}, {1}", _columns, main);
|
_columns = _columns == null ? main : string.Format("{0}, {1}", _columns, main);
|
||||||
_values = _values == null ? value : string.Format("{0}, {1}", _values, value);
|
_values = _values == null ? value : string.Format("{0}, {1}", _values, value);
|
||||||
@@ -175,7 +175,7 @@ namespace DynamORM.Builders.Implementation
|
|||||||
DynamicSchemaColumn? col = column.Schema ?? GetColumnFromSchema(column.ColumnName);
|
DynamicSchemaColumn? col = column.Schema ?? GetColumnFromSchema(column.ColumnName);
|
||||||
|
|
||||||
string main = FixObjectName(column.ColumnName, onlyColumn: true);
|
string main = FixObjectName(column.ColumnName, onlyColumn: true);
|
||||||
string value = Parse(column.Value, pars: Parameters, nulls: true, columnSchema: col);
|
string value = Parse(column.Value, ref col, pars: Parameters, nulls: true);
|
||||||
|
|
||||||
_columns = _columns == null ? main : string.Format("{0}, {1}", _columns, main);
|
_columns = _columns == null ? main : string.Format("{0}, {1}", _columns, main);
|
||||||
_values = _values == null ? value : string.Format("{0}, {1}", _values, value);
|
_values = _values == null ? value : string.Format("{0}, {1}", _values, value);
|
||||||
|
|||||||
@@ -217,13 +217,13 @@ namespace DynamORM.Builders.Implementation
|
|||||||
/// <summary>Gets or sets a value indicating whether add virtual parameters.</summary>
|
/// <summary>Gets or sets a value indicating whether add virtual parameters.</summary>
|
||||||
public bool VirtualMode { get; set; }
|
public bool VirtualMode { get; set; }
|
||||||
|
|
||||||
/// <summary>Gets or sets the on create temporary parameter action.</summary>
|
/// <summary>Gets or sets the on create temporary parameter actions.</summary>
|
||||||
/// <remarks>This is exposed to allow setting schema of column.</remarks>
|
/// <remarks>This is exposed to allow setting schema of column.</remarks>
|
||||||
public Action<IParameter> OnCreateTemporaryParameter { get; set; }
|
public List<Action<IParameter>> OnCreateTemporaryParameter { get; set; }
|
||||||
|
|
||||||
/// <summary>Gets or sets the on create real parameter action.</summary>
|
/// <summary>Gets or sets the on create real parameter actions.</summary>
|
||||||
/// <remarks>This is exposed to allow modification of parameter.</remarks>
|
/// <remarks>This is exposed to allow modification of parameter.</remarks>
|
||||||
public Action<IParameter, IDbDataParameter> OnCreateParameter { get; set; }
|
public List<Action<IParameter, IDbDataParameter>> OnCreateParameter { get; set; }
|
||||||
|
|
||||||
/// <summary>Gets a value indicating whether database supports standard schema.</summary>
|
/// <summary>Gets a value indicating whether database supports standard schema.</summary>
|
||||||
public bool SupportSchema { get; private set; }
|
public bool SupportSchema { get; private set; }
|
||||||
@@ -262,7 +262,7 @@ namespace DynamORM.Builders.Implementation
|
|||||||
(p as Parameter).Ordinal = command.Parameters.Count - 1;
|
(p as Parameter).Ordinal = command.Parameters.Count - 1;
|
||||||
|
|
||||||
if (OnCreateParameter != null)
|
if (OnCreateParameter != null)
|
||||||
OnCreateParameter(p, param);
|
OnCreateParameter.ForEach(x => x(p, param));
|
||||||
|
|
||||||
return param.ParameterName;
|
return param.ParameterName;
|
||||||
}, s);
|
}, s);
|
||||||
@@ -284,11 +284,32 @@ namespace DynamORM.Builders.Implementation
|
|||||||
/// database. If false and the value is null, then an exception is thrown.</param>
|
/// database. If false and the value is null, then an exception is thrown.</param>
|
||||||
/// <param name="decorate">If set to <c>true</c> decorate element.</param>
|
/// <param name="decorate">If set to <c>true</c> decorate element.</param>
|
||||||
/// <param name="isMultiPart">If set parse argument as alias. This is workaround for AS method.</param>
|
/// <param name="isMultiPart">If set parse argument as alias. This is workaround for AS method.</param>
|
||||||
/// <param name="columnSchema">This parameter is used to determine type of parameter used in query.</param>
|
|
||||||
/// <returns>A string containing the result of the parsing, along with the parameters extracted in the
|
/// <returns>A string containing the result of the parsing, along with the parameters extracted in the
|
||||||
/// <paramref name="pars" /> instance if such is given.</returns>
|
/// <paramref name="pars" /> instance if such is given.</returns>
|
||||||
/// <exception cref="System.ArgumentNullException">Null nodes are not accepted.</exception>
|
/// <exception cref="System.ArgumentNullException">Null nodes are not accepted.</exception>
|
||||||
internal virtual string Parse(object node, IDictionary<string, IParameter> pars = null, bool rawstr = false, bool nulls = false, bool decorate = true, bool isMultiPart = true, DynamicSchemaColumn? columnSchema = null)
|
internal virtual string Parse(object node, IDictionary<string, IParameter> pars = null, bool rawstr = false, bool nulls = false, bool decorate = true, bool isMultiPart = true)
|
||||||
|
{
|
||||||
|
DynamicSchemaColumn? c = null;
|
||||||
|
|
||||||
|
return Parse(node, ref c, pars, rawstr, nulls, decorate, isMultiPart);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Parses the arbitrary object given and translates it into a string with the appropriate
|
||||||
|
/// syntax for the database this parser is specific to.</summary>
|
||||||
|
/// <param name="node">The object to parse and translate. It can be any arbitrary object, including null values (if
|
||||||
|
/// permitted) and dynamic lambda expressions.</param>
|
||||||
|
/// <param name="columnSchema">This parameter is used to determine type of parameter used in query.</param>
|
||||||
|
/// <param name="pars">If not null, the parameters' list where to store the parameters extracted by the parsing.</param>
|
||||||
|
/// <param name="rawstr">If true, literal (raw) string are allowed. If false and the node is a literal then, as a
|
||||||
|
/// security measure, an exception is thrown.</param>
|
||||||
|
/// <param name="nulls">True to accept null values and translate them into the appropriate syntax accepted by the
|
||||||
|
/// database. If false and the value is null, then an exception is thrown.</param>
|
||||||
|
/// <param name="decorate">If set to <c>true</c> decorate element.</param>
|
||||||
|
/// <param name="isMultiPart">If set parse argument as alias. This is workaround for AS method.</param>
|
||||||
|
/// <returns>A string containing the result of the parsing, along with the parameters extracted in the
|
||||||
|
/// <paramref name="pars" /> instance if such is given.</returns>
|
||||||
|
/// <exception cref="System.ArgumentNullException">Null nodes are not accepted.</exception>
|
||||||
|
internal virtual string Parse(object node, ref DynamicSchemaColumn? columnSchema, IDictionary<string, IParameter> pars = null, bool rawstr = false, bool nulls = false, bool decorate = true, bool isMultiPart = true)
|
||||||
{
|
{
|
||||||
// Null nodes are accepted or not depending upon the "nulls" flag...
|
// Null nodes are accepted or not depending upon the "nulls" flag...
|
||||||
if (node == null)
|
if (node == null)
|
||||||
@@ -296,38 +317,38 @@ namespace DynamORM.Builders.Implementation
|
|||||||
if (!nulls)
|
if (!nulls)
|
||||||
throw new ArgumentNullException("node", "Null nodes are not accepted.");
|
throw new ArgumentNullException("node", "Null nodes are not accepted.");
|
||||||
|
|
||||||
return Dispatch(node, pars, decorate, columnSchema: columnSchema);
|
return Dispatch(node, ref columnSchema, pars, decorate);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Nodes that are strings are parametrized or not depending the "rawstr" flag...
|
// Nodes that are strings are parametrized or not depending the "rawstr" flag...
|
||||||
if (node is string)
|
if (node is string)
|
||||||
{
|
{
|
||||||
if (rawstr) return (string)node;
|
if (rawstr) return (string)node;
|
||||||
else return Dispatch(node, pars, decorate, columnSchema: columnSchema);
|
else return Dispatch(node, ref columnSchema, pars, decorate);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If node is a delegate, parse it to create the logical tree...
|
// If node is a delegate, parse it to create the logical tree...
|
||||||
if (node is Delegate)
|
if (node is Delegate)
|
||||||
{
|
{
|
||||||
node = DynamicParser.Parse((Delegate)node).Result;
|
node = DynamicParser.Parse((Delegate)node).Result;
|
||||||
return Parse(node, pars, rawstr, decorate: decorate, columnSchema: columnSchema); // Intercept containers as in (x => "string")
|
return Parse(node, ref columnSchema, pars, rawstr, decorate: decorate); // Intercept containers as in (x => "string")
|
||||||
}
|
}
|
||||||
|
|
||||||
return Dispatch(node, pars, decorate, isMultiPart, columnSchema);
|
return Dispatch(node, ref columnSchema, pars, decorate, isMultiPart);
|
||||||
}
|
}
|
||||||
|
|
||||||
private string Dispatch(object node, IDictionary<string, IParameter> pars = null, bool decorate = true, bool isMultiPart = true, DynamicSchemaColumn? columnSchema = null)
|
private string Dispatch(object node, ref DynamicSchemaColumn? columnSchema, IDictionary<string, IParameter> pars = null, bool decorate = true, bool isMultiPart = true)
|
||||||
{
|
{
|
||||||
if (node != null)
|
if (node != null)
|
||||||
{
|
{
|
||||||
if (node is DynamicQueryBuilder) return ParseCommand((DynamicQueryBuilder)node, pars);
|
if (node is DynamicQueryBuilder) return ParseCommand((DynamicQueryBuilder)node, pars);
|
||||||
else if (node is DynamicParser.Node.Argument) return ParseArgument((DynamicParser.Node.Argument)node, isMultiPart);
|
else if (node is DynamicParser.Node.Argument) return ParseArgument((DynamicParser.Node.Argument)node, isMultiPart);
|
||||||
else if (node is DynamicParser.Node.GetMember) return ParseGetMember((DynamicParser.Node.GetMember)node, pars, decorate, isMultiPart, columnSchema);
|
else if (node is DynamicParser.Node.GetMember) return ParseGetMember((DynamicParser.Node.GetMember)node, ref columnSchema, pars, decorate, isMultiPart);
|
||||||
else if (node is DynamicParser.Node.SetMember) return ParseSetMember((DynamicParser.Node.SetMember)node, pars, decorate, isMultiPart, columnSchema);
|
else if (node is DynamicParser.Node.SetMember) return ParseSetMember((DynamicParser.Node.SetMember)node, ref columnSchema, pars, decorate, isMultiPart);
|
||||||
else if (node is DynamicParser.Node.Unary) return ParseUnary((DynamicParser.Node.Unary)node, pars);
|
else if (node is DynamicParser.Node.Unary) return ParseUnary((DynamicParser.Node.Unary)node, pars);
|
||||||
else if (node is DynamicParser.Node.Binary) return ParseBinary((DynamicParser.Node.Binary)node, pars);
|
else if (node is DynamicParser.Node.Binary) return ParseBinary((DynamicParser.Node.Binary)node, pars);
|
||||||
else if (node is DynamicParser.Node.Method) return ParseMethod((DynamicParser.Node.Method)node, pars);
|
else if (node is DynamicParser.Node.Method) return ParseMethod((DynamicParser.Node.Method)node, pars);
|
||||||
else if (node is DynamicParser.Node.Invoke) return ParseInvoke((DynamicParser.Node.Invoke)node, pars);
|
else if (node is DynamicParser.Node.Invoke) return ParseInvoke((DynamicParser.Node.Invoke)node, ref columnSchema, pars);
|
||||||
else if (node is DynamicParser.Node.Convert) return ParseConvert((DynamicParser.Node.Convert)node, pars);
|
else if (node is DynamicParser.Node.Convert) return ParseConvert((DynamicParser.Node.Convert)node, pars);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -359,7 +380,7 @@ namespace DynamORM.Builders.Implementation
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual string ParseGetMember(DynamicParser.Node.GetMember node, IDictionary<string, IParameter> pars = null, bool decorate = true, bool isMultiPart = true, DynamicSchemaColumn? columnSchema = null)
|
protected virtual string ParseGetMember(DynamicParser.Node.GetMember node, ref DynamicSchemaColumn? columnSchema, IDictionary<string, IParameter> pars = null, bool decorate = true, bool isMultiPart = true)
|
||||||
{
|
{
|
||||||
if (node.Host is DynamicParser.Node.Argument && IsTableAlias(node.Name))
|
if (node.Host is DynamicParser.Node.Argument && IsTableAlias(node.Name))
|
||||||
{
|
{
|
||||||
@@ -394,7 +415,7 @@ namespace DynamORM.Builders.Implementation
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual string ParseSetMember(DynamicParser.Node.SetMember node, IDictionary<string, IParameter> pars = null, bool decorate = true, bool isMultiPart = true, DynamicSchemaColumn? columnSchema = null)
|
protected virtual string ParseSetMember(DynamicParser.Node.SetMember node, ref DynamicSchemaColumn? columnSchema, IDictionary<string, IParameter> pars = null, bool decorate = true, bool isMultiPart = true)
|
||||||
{
|
{
|
||||||
if (node.Host is DynamicParser.Node.Argument && IsTableAlias(node.Name))
|
if (node.Host is DynamicParser.Node.Argument && IsTableAlias(node.Name))
|
||||||
{
|
{
|
||||||
@@ -423,7 +444,7 @@ namespace DynamORM.Builders.Implementation
|
|||||||
|
|
||||||
columnSchema = GetColumnFromSchema(name);
|
columnSchema = GetColumnFromSchema(name);
|
||||||
|
|
||||||
string value = Parse(node.Value, pars, nulls: true, columnSchema: columnSchema);
|
string value = Parse(node.Value, ref columnSchema, pars, nulls: true);
|
||||||
return string.Format("{0} = ({1})", name, value);
|
return string.Format("{0} = ({1})", name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -474,8 +495,8 @@ namespace DynamORM.Builders.Implementation
|
|||||||
}
|
}
|
||||||
|
|
||||||
DynamicSchemaColumn? columnSchema = null;
|
DynamicSchemaColumn? columnSchema = null;
|
||||||
string left = Parse(node.Left, pars, columnSchema: columnSchema); // Not nulls: left is assumed to be an object
|
string left = Parse(node.Left, ref columnSchema, pars); // Not nulls: left is assumed to be an object
|
||||||
string right = Parse(node.Right, pars, nulls: true, columnSchema: columnSchema);
|
string right = Parse(node.Right, ref columnSchema, pars, nulls: true);
|
||||||
return string.Format("({0} {1} {2})", left, op, right);
|
return string.Format("({0} {1} {2})", left, op, right);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -624,7 +645,7 @@ namespace DynamORM.Builders.Implementation
|
|||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual string ParseInvoke(DynamicParser.Node.Invoke node, IDictionary<string, IParameter> pars = null)
|
protected virtual string ParseInvoke(DynamicParser.Node.Invoke node, ref DynamicSchemaColumn? columnSchema, IDictionary<string, IParameter> pars = null)
|
||||||
{
|
{
|
||||||
// This is used as an especial syntax to merely concatenate its arguments. It is used as a way to extend the supported syntax without the need of treating all the possible cases...
|
// This is used as an especial syntax to merely concatenate its arguments. It is used as a way to extend the supported syntax without the need of treating all the possible cases...
|
||||||
if (node.Arguments == null || node.Arguments.Length == 0)
|
if (node.Arguments == null || node.Arguments.Length == 0)
|
||||||
@@ -634,9 +655,14 @@ namespace DynamORM.Builders.Implementation
|
|||||||
foreach (object arg in node.Arguments)
|
foreach (object arg in node.Arguments)
|
||||||
{
|
{
|
||||||
if (arg is string)
|
if (arg is string)
|
||||||
|
{
|
||||||
sb.Append((string)arg);
|
sb.Append((string)arg);
|
||||||
|
|
||||||
|
if (node.Arguments.Length == 1 && !columnSchema.HasValue)
|
||||||
|
columnSchema = GetColumnFromSchema((string)arg);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
sb.Append(Parse(arg, pars, rawstr: true, nulls: true));
|
sb.Append(Parse(arg, ref columnSchema, pars, rawstr: true, nulls: true));
|
||||||
}
|
}
|
||||||
|
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
@@ -671,7 +697,7 @@ namespace DynamORM.Builders.Implementation
|
|||||||
|
|
||||||
// If we are adding parameter we inform external sources about this.
|
// If we are adding parameter we inform external sources about this.
|
||||||
if (OnCreateTemporaryParameter != null)
|
if (OnCreateTemporaryParameter != null)
|
||||||
OnCreateTemporaryParameter(par);
|
OnCreateTemporaryParameter.ForEach(x => x(par));
|
||||||
|
|
||||||
pars.Add(par.Name, par);
|
pars.Add(par.Name, par);
|
||||||
|
|
||||||
@@ -748,8 +774,8 @@ namespace DynamORM.Builders.Implementation
|
|||||||
internal DynamicSchemaColumn? GetColumnFromSchema(string colName, DynamicTypeMap mapper = null, string table = null)
|
internal DynamicSchemaColumn? GetColumnFromSchema(string colName, DynamicTypeMap mapper = null, string table = null)
|
||||||
{
|
{
|
||||||
// This is tricky and will not always work unfortunetly.
|
// This is tricky and will not always work unfortunetly.
|
||||||
if (colName.ContainsAny(StringExtensions.InvalidMultipartMemberChars))
|
////if (colName.ContainsAny(StringExtensions.InvalidMultipartMemberChars))
|
||||||
return null;
|
//// return null;
|
||||||
|
|
||||||
// First we need to get real column name and it's owner if exist.
|
// First we need to get real column name and it's owner if exist.
|
||||||
var parts = colName.Split('.')
|
var parts = colName.Split('.')
|
||||||
|
|||||||
@@ -181,7 +181,7 @@ namespace DynamORM.Builders.Implementation
|
|||||||
|
|
||||||
DynamicSchemaColumn? col = GetColumnFromSchema(node.Name);
|
DynamicSchemaColumn? col = GetColumnFromSchema(node.Name);
|
||||||
main = Database.DecorateName(node.Name);
|
main = Database.DecorateName(node.Name);
|
||||||
value = Parse(node.Value, pars: Parameters, nulls: true, columnSchema: col);
|
value = Parse(node.Value, ref col, pars: Parameters, nulls: true);
|
||||||
|
|
||||||
str = string.Format("{0} = {1}", main, value);
|
str = string.Format("{0} = {1}", main, value);
|
||||||
_columns = _columns == null ? str : string.Format("{0}, {1}", _columns, str);
|
_columns = _columns == null ? str : string.Format("{0}, {1}", _columns, str);
|
||||||
@@ -237,7 +237,7 @@ namespace DynamORM.Builders.Implementation
|
|||||||
DynamicSchemaColumn? col = column.Schema ?? GetColumnFromSchema(column.ColumnName);
|
DynamicSchemaColumn? col = column.Schema ?? GetColumnFromSchema(column.ColumnName);
|
||||||
|
|
||||||
string main = FixObjectName(column.ColumnName, onlyColumn: true);
|
string main = FixObjectName(column.ColumnName, onlyColumn: true);
|
||||||
string value = Parse(column.Value, pars: Parameters, nulls: true, columnSchema: col);
|
string value = Parse(column.Value, ref col, pars: Parameters, nulls: true);
|
||||||
|
|
||||||
var str = string.Format("{0} = {1}", main, value);
|
var str = string.Format("{0} = {1}", main, value);
|
||||||
_columns = _columns == null ? str : string.Format("{0}, {1}", _columns, str);
|
_columns = _columns == null ? str : string.Format("{0}, {1}", _columns, str);
|
||||||
|
|||||||
@@ -89,7 +89,10 @@ namespace DynamORM
|
|||||||
////_poolStamp = _db.PoolStamp;
|
////_poolStamp = _db.PoolStamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _db.DumpCommands ? _command.Dump(Console.Out) : _command;
|
if (_db.DumpCommands)
|
||||||
|
_db.DumpCommand(_command);
|
||||||
|
|
||||||
|
return _command;
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IDbCommand Members
|
#region IDbCommand Members
|
||||||
|
|||||||
@@ -1187,6 +1187,13 @@ namespace DynamORM
|
|||||||
sb.AppendFormat(_parameterFormat, parameter.ToString().Replace(" ", "_"));
|
sb.AppendFormat(_parameterFormat, parameter.ToString().Replace(" ", "_"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>Dumps the command into console output.</summary>
|
||||||
|
/// <param name="cmd">The command to dump.</param>
|
||||||
|
public virtual void DumpCommand(IDbCommand cmd)
|
||||||
|
{
|
||||||
|
cmd.Dump(Console.Out);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Decorators
|
#endregion Decorators
|
||||||
|
|
||||||
#region Connection
|
#region Connection
|
||||||
|
|||||||
@@ -816,7 +816,16 @@ namespace DynamORM
|
|||||||
/// <returns>Returns instance of builder on which action is set.</returns>
|
/// <returns>Returns instance of builder on which action is set.</returns>
|
||||||
public static T CreateTemporaryParameterAction<T>(this T b, Action<IParameter> a) where T : IDynamicQueryBuilder
|
public static T CreateTemporaryParameterAction<T>(this T b, Action<IParameter> a) where T : IDynamicQueryBuilder
|
||||||
{
|
{
|
||||||
b.OnCreateTemporaryParameter = a;
|
if (a == null)
|
||||||
|
b.OnCreateTemporaryParameter = null;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (b.OnCreateTemporaryParameter == null)
|
||||||
|
b.OnCreateTemporaryParameter = new List<Action<IParameter>>();
|
||||||
|
|
||||||
|
b.OnCreateTemporaryParameter.Add(a);
|
||||||
|
}
|
||||||
|
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -827,7 +836,16 @@ namespace DynamORM
|
|||||||
/// <returns>Returns instance of builder on which action is set.</returns>
|
/// <returns>Returns instance of builder on which action is set.</returns>
|
||||||
public static T CreateParameterAction<T>(this T b, Action<IParameter, IDbDataParameter> a) where T : IDynamicQueryBuilder
|
public static T CreateParameterAction<T>(this T b, Action<IParameter, IDbDataParameter> a) where T : IDynamicQueryBuilder
|
||||||
{
|
{
|
||||||
b.OnCreateParameter = a;
|
if (a == null)
|
||||||
|
b.OnCreateParameter = null;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (b.OnCreateParameter == null)
|
||||||
|
b.OnCreateParameter = new List<Action<IParameter, IDbDataParameter>>();
|
||||||
|
|
||||||
|
b.OnCreateParameter.Add(a);
|
||||||
|
}
|
||||||
|
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -351,7 +351,8 @@ namespace DynamORM
|
|||||||
using (var con = Database.Open())
|
using (var con = Database.Open())
|
||||||
using (var cmd = con.CreateCommand())
|
using (var cmd = con.CreateCommand())
|
||||||
using (var rdr = cmd
|
using (var rdr = cmd
|
||||||
.SetCommand(sql, args)
|
.SetCommand(sql)
|
||||||
|
.AddParameters(Database, args)
|
||||||
.ExecuteReader())
|
.ExecuteReader())
|
||||||
while (rdr.Read())
|
while (rdr.Read())
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user