Select improvements and alias parsing.
Insert evolved.
This commit is contained in:
@@ -5,12 +5,17 @@ namespace DynamORM.Builders
|
||||
{
|
||||
/// <summary>Dynamic select query builder interface.</summary>
|
||||
/// <remarks>This interface it publically available. Implementation should be hidden.</remarks>
|
||||
public interface IDynamicSelectQueryBuilder : IDynamicQueryBuilder, IEnumerable<object>
|
||||
public interface IDynamicSelectQueryBuilder : IDynamicQueryBuilder ////, IEnumerable<object>
|
||||
{
|
||||
/// <summary>Execute this builder.</summary>
|
||||
/// <returns>Enumerator of objects expanded from query.</returns>
|
||||
IEnumerable<dynamic> Execute();
|
||||
|
||||
/// <summary>Execute this builder and map to given type.</summary>
|
||||
/// <typeparam name="T">Type of object to map on.</typeparam>
|
||||
/// <returns>Enumerator of objects expanded from query.</returns>
|
||||
IEnumerable<T> Execute<T>() where T : class;
|
||||
|
||||
/// <summary>Returns a single result.</summary>
|
||||
/// <returns>Result of a query.</returns>
|
||||
object Scalar();
|
||||
|
||||
@@ -913,7 +913,15 @@ namespace DynamORM
|
||||
|
||||
int c = r.FieldCount;
|
||||
for (int i = 0; i < c; i++)
|
||||
d.Add(r.GetName(i), r.IsDBNull(i) ? null : r[i]);
|
||||
try
|
||||
{
|
||||
d.Add(r.GetName(i), r.IsDBNull(i) ? null : r[i]);
|
||||
}
|
||||
catch (ArgumentException argex)
|
||||
{
|
||||
throw new ArgumentException(
|
||||
string.Format("Field '{0}' is defined more than once in a query.", r.GetName(i)), "Column name or alias", argex);
|
||||
}
|
||||
|
||||
return e;
|
||||
}
|
||||
|
||||
@@ -31,6 +31,7 @@ using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Dynamic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using DynamORM.Builders;
|
||||
using DynamORM.Builders.Extensions;
|
||||
using DynamORM.Builders.Implementation;
|
||||
@@ -340,14 +341,30 @@ namespace DynamORM
|
||||
{
|
||||
using (var con = Database.Open())
|
||||
using (var cmd = con.CreateCommand())
|
||||
{
|
||||
using (var rdr = cmd
|
||||
.SetCommand(sql)
|
||||
.AddParameters(Database, args)
|
||||
.ExecuteReader())
|
||||
while (rdr.Read())
|
||||
yield return rdr.RowToDynamic();
|
||||
}
|
||||
using (var rdr = cmd
|
||||
.SetCommand(sql, args)
|
||||
.ExecuteReader())
|
||||
while (rdr.Read())
|
||||
{
|
||||
dynamic val = null;
|
||||
|
||||
// Work around to avoid yield being in try...catch block:
|
||||
// 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>Enumerate the reader and yield the result.</summary>
|
||||
@@ -357,13 +374,30 @@ namespace DynamORM
|
||||
{
|
||||
using (var con = Database.Open())
|
||||
using (var cmd = con.CreateCommand())
|
||||
{
|
||||
using (var rdr = cmd
|
||||
.SetCommand(builder)
|
||||
.ExecuteReader())
|
||||
while (rdr.Read())
|
||||
yield return rdr.RowToDynamic();
|
||||
}
|
||||
using (var rdr = cmd
|
||||
.SetCommand(builder)
|
||||
.ExecuteReader())
|
||||
while (rdr.Read())
|
||||
{
|
||||
dynamic val = null;
|
||||
|
||||
// Work around to avoid yield being in try...catch block:
|
||||
// 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>Create new <see cref="DynamicSelectQueryBuilder"/>.</summary>
|
||||
|
||||
Reference in New Issue
Block a user