Some fixes added during implementation of another system.
This commit is contained in:
@@ -145,6 +145,12 @@ namespace DynamORM
|
|||||||
/// <summary>Gets or sets a value indicating whether set parameters for null values.</summary>
|
/// <summary>Gets or sets a value indicating whether set parameters for null values.</summary>
|
||||||
public bool VirtualColumn { get; set; }
|
public bool VirtualColumn { get; set; }
|
||||||
|
|
||||||
|
/// <summary>Gets or sets schema representation of a column.</summary>
|
||||||
|
/// <remarks>Woraround to providers issues which sometimes pass wrong
|
||||||
|
/// data o schema. For example decimal has precission of 255 in sql
|
||||||
|
/// server.</remarks>
|
||||||
|
public DynamicSchemaColumn? Schema { get; set; }
|
||||||
|
|
||||||
#endregion Properties
|
#endregion Properties
|
||||||
|
|
||||||
#region Query creation helpers
|
#region Query creation helpers
|
||||||
@@ -297,6 +303,8 @@ namespace DynamORM
|
|||||||
|
|
||||||
#endregion Order
|
#endregion Order
|
||||||
|
|
||||||
|
#region Other
|
||||||
|
|
||||||
/// <summary>Helper method setting
|
/// <summary>Helper method setting
|
||||||
/// <see cref="DynamicColumn.ColumnName"/>
|
/// <see cref="DynamicColumn.ColumnName"/>
|
||||||
/// to provided <c>name</c>.</summary>
|
/// to provided <c>name</c>.</summary>
|
||||||
@@ -330,6 +338,44 @@ namespace DynamORM
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>Sets the begin block flag.</summary>
|
||||||
|
/// <param name="begin">If set to <c>true</c> [begin].</param>
|
||||||
|
/// <returns>Returns self.</returns>
|
||||||
|
public DynamicColumn SetBeginBlock(bool begin)
|
||||||
|
{
|
||||||
|
BeginBlock = begin;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Sets the end block flag.</summary>
|
||||||
|
/// <param name="end">If set to <c>true</c> [end].</param>
|
||||||
|
/// <returns>Returns self.</returns>
|
||||||
|
public DynamicColumn SetEndBlock(bool end)
|
||||||
|
{
|
||||||
|
EndBlock = end;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Sets the or flag.</summary>
|
||||||
|
/// <param name="or">If set to <c>true</c> [or].</param>
|
||||||
|
/// <returns>Returns self.</returns>
|
||||||
|
public DynamicColumn SetOr(bool or)
|
||||||
|
{
|
||||||
|
Or = or;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Sets the virtual column.</summary>
|
||||||
|
/// <param name="virt">If set to <c>true</c> [virt].</param>
|
||||||
|
/// <returns>Returns self.</returns>
|
||||||
|
public DynamicColumn SetVirtualColumn(bool virt)
|
||||||
|
{
|
||||||
|
VirtualColumn = virt;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Other
|
||||||
|
|
||||||
#endregion Query creation helpers
|
#endregion Query creation helpers
|
||||||
|
|
||||||
#region Parsing
|
#region Parsing
|
||||||
|
|||||||
@@ -287,7 +287,7 @@ namespace DynamORM
|
|||||||
{
|
{
|
||||||
using (var rdr = cmd
|
using (var rdr = cmd
|
||||||
.SetCommand(string.Format("SELECT * FROM {0} WHERE 1 = 0", DecorateName(table)))
|
.SetCommand(string.Format("SELECT * FROM {0} WHERE 1 = 0", DecorateName(table)))
|
||||||
.ExecuteReader(CommandBehavior.SchemaOnly))
|
.ExecuteReader(CommandBehavior.SchemaOnly | CommandBehavior.KeyInfo))
|
||||||
foreach (DataRow col in rdr.GetSchemaTable().Rows)
|
foreach (DataRow col in rdr.GetSchemaTable().Rows)
|
||||||
{
|
{
|
||||||
var c = col.RowToDynamicUpper();
|
var c = col.RowToDynamicUpper();
|
||||||
|
|||||||
@@ -213,15 +213,40 @@ namespace DynamORM
|
|||||||
return cmd;
|
return cmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>Extension method for adding in a bunch of parameters.</summary>
|
||||||
|
/// <param name="cmd">Command to handle.</param>
|
||||||
|
/// <param name="database">Database object required to get proper formatting.</param>
|
||||||
|
/// <param name="args">Items to add in an expando object.</param>
|
||||||
|
/// <returns>Returns edited <see cref="System.Data.IDbCommand"/> instance.</returns>
|
||||||
|
public static IDbCommand AddParameters(this IDbCommand cmd, DynamicDatabase database, ExpandoObject args)
|
||||||
|
{
|
||||||
|
if (args != null && args.Count() > 0)
|
||||||
|
foreach (var item in args.ToDictionary())
|
||||||
|
cmd.AddParameter(database, item.Key, item.Value);
|
||||||
|
|
||||||
|
return cmd;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>Extension for adding single parameter determining only type of object.</summary>
|
/// <summary>Extension for adding single parameter determining only type of object.</summary>
|
||||||
/// <param name="cmd">Command to handle.</param>
|
/// <param name="cmd">Command to handle.</param>
|
||||||
/// <param name="database">Database object required to get proper formatting.</param>
|
/// <param name="database">Database object required to get proper formatting.</param>
|
||||||
/// <param name="item">Items to add.</param>
|
/// <param name="item">Items to add.</param>
|
||||||
/// <returns>Returns edited <see cref="System.Data.IDbCommand"/> instance.</returns>
|
/// <returns>Returns edited <see cref="System.Data.IDbCommand"/> instance.</returns>
|
||||||
public static IDbCommand AddParameter(this IDbCommand cmd, DynamicDatabase database, object item)
|
public static IDbCommand AddParameter(this IDbCommand cmd, DynamicDatabase database, object item)
|
||||||
|
{
|
||||||
|
return cmd.AddParameter(database, database.GetParameterName(cmd.Parameters.Count), item);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Extension for adding single parameter determining only type of object.</summary>
|
||||||
|
/// <param name="cmd">Command to handle.</param>
|
||||||
|
/// <param name="database">Database object required to get proper formatting.</param>
|
||||||
|
/// <param name="name">Name of parameter.</param>
|
||||||
|
/// <param name="item">Items to add.</param>
|
||||||
|
/// <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();
|
var p = cmd.CreateParameter();
|
||||||
p.ParameterName = database.GetParameterName(cmd.Parameters.Count);
|
p.ParameterName = name;
|
||||||
|
|
||||||
if (item == null)
|
if (item == null)
|
||||||
p.Value = DBNull.Value;
|
p.Value = DBNull.Value;
|
||||||
@@ -255,7 +280,7 @@ namespace DynamORM
|
|||||||
var p = cmd.CreateParameter();
|
var p = cmd.CreateParameter();
|
||||||
p.ParameterName = builder.DynamicTable.Database.GetParameterName(cmd.Parameters.Count);
|
p.ParameterName = builder.DynamicTable.Database.GetParameterName(cmd.Parameters.Count);
|
||||||
|
|
||||||
var col = builder.Schema.TryGetNullable(item.ColumnName.ToLower());
|
var col = item.Schema ?? builder.Schema.TryGetNullable(item.ColumnName.ToLower());
|
||||||
|
|
||||||
if (col.HasValue)
|
if (col.HasValue)
|
||||||
{
|
{
|
||||||
@@ -268,6 +293,7 @@ namespace DynamORM
|
|||||||
p.Scale = col.Value.Scale;
|
p.Scale = col.Value.Scale;
|
||||||
|
|
||||||
// Quick fix - review that
|
// Quick fix - review that
|
||||||
|
// Quick fix 2 - use item.Schema in that case
|
||||||
if (p.Scale > p.Precision)
|
if (p.Scale > p.Precision)
|
||||||
p.Scale = 4;
|
p.Scale = 4;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Data;
|
||||||
using System.Dynamic;
|
using System.Dynamic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using DynamORM.Builders;
|
using DynamORM.Builders;
|
||||||
@@ -311,8 +312,8 @@ namespace DynamORM
|
|||||||
|
|
||||||
/// <summary>Enumerate the reader and yield the result.</summary>
|
/// <summary>Enumerate the reader and yield the result.</summary>
|
||||||
/// <param name="sql">Sql query containing numered parameters in format provided by
|
/// <param name="sql">Sql query containing numered parameters in format provided by
|
||||||
/// <see cref="DynamicDatabase.GetParameterName"/> methods. Also names should be formated with
|
/// <see cref="DynamicDatabase.GetParameterName(object)"/> methods. Also names should be formated with
|
||||||
/// <see cref="DecorateName.GetParameterName"/> method.</param>
|
/// <see cref="DynamicDatabase.DecorateName(string)"/> method.</param>
|
||||||
/// <param name="args">Arguments (parameters).</param>
|
/// <param name="args">Arguments (parameters).</param>
|
||||||
/// <returns>Enumerator of objects expanded from query.</returns>
|
/// <returns>Enumerator of objects expanded from query.</returns>
|
||||||
public virtual IEnumerable<dynamic> Query(string sql, params object[] args)
|
public virtual IEnumerable<dynamic> Query(string sql, params object[] args)
|
||||||
@@ -354,8 +355,8 @@ namespace DynamORM
|
|||||||
|
|
||||||
/// <summary>Returns a single result.</summary>
|
/// <summary>Returns a single result.</summary>
|
||||||
/// <param name="sql">Sql query containing numered parameters in format provided by
|
/// <param name="sql">Sql query containing numered parameters in format provided by
|
||||||
/// <see cref="DynamicDatabase.GetParameterName"/> methods. Also names should be formated with
|
/// <see cref="DynamicDatabase.GetParameterName(object)"/> methods. Also names should be formated with
|
||||||
/// <see cref="DecorateName.GetParameterName"/> method.</param>
|
/// <see cref="DynamicDatabase.DecorateName(string)"/> method.</param>
|
||||||
/// <param name="args">Arguments (parameters).</param>
|
/// <param name="args">Arguments (parameters).</param>
|
||||||
/// <returns>Result of a query.</returns>
|
/// <returns>Result of a query.</returns>
|
||||||
public virtual object Scalar(string sql, params object[] args)
|
public virtual object Scalar(string sql, params object[] args)
|
||||||
@@ -383,10 +384,28 @@ namespace DynamORM
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>Execute stored procedure.</summary>
|
||||||
|
/// <param name="procName">Name of stored procedure to execute.</param>
|
||||||
|
/// <param name="args">Arguments (parameters) in form of expando object.</param>
|
||||||
|
/// <returns>Number of affected rows.</returns>
|
||||||
|
public virtual int Procedure(string procName, ExpandoObject args = null)
|
||||||
|
{
|
||||||
|
if ((Database.Options & DynamicDatabaseOptions.SupportStoredProcedures) != DynamicDatabaseOptions.SupportStoredProcedures)
|
||||||
|
throw new InvalidOperationException("Database connection desn't support stored procedures.");
|
||||||
|
|
||||||
|
using (var con = Database.Open())
|
||||||
|
using (var cmd = con.CreateCommand())
|
||||||
|
{
|
||||||
|
return cmd
|
||||||
|
.SetCommand(CommandType.StoredProcedure, procName).AddParameters(Database, args)
|
||||||
|
.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>Execute non query.</summary>
|
/// <summary>Execute non query.</summary>
|
||||||
/// <param name="sql">Sql query containing numered parameters in format provided by
|
/// <param name="sql">Sql query containing numered parameters in format provided by
|
||||||
/// <see cref="DynamicDatabase.GetParameterName"/> methods. Also names should be formated with
|
/// <see cref="DynamicDatabase.GetParameterName(object)"/> methods. Also names should be formated with
|
||||||
/// <see cref="DecorateName.GetParameterName"/> method.</param>
|
/// <see cref="DynamicDatabase.DecorateName(string)"/> method.</param>
|
||||||
/// <param name="args">Arguments (parameters).</param>
|
/// <param name="args">Arguments (parameters).</param>
|
||||||
/// <returns>Number of affected rows.</returns>
|
/// <returns>Number of affected rows.</returns>
|
||||||
public virtual int Execute(string sql, params object[] args)
|
public virtual int Execute(string sql, params object[] args)
|
||||||
|
|||||||
Reference in New Issue
Block a user