diff --git a/AmalgamationTool/DynamORM.Amalgamation.cs b/AmalgamationTool/DynamORM.Amalgamation.cs
index 6124e23..7762576 100644
--- a/AmalgamationTool/DynamORM.Amalgamation.cs
+++ b/AmalgamationTool/DynamORM.Amalgamation.cs
@@ -7303,6 +7303,66 @@ namespace DynamORM
/// Add typed SQL DSL order by expressions.
IDynamicTypedSelectQueryBuilder OrderBySql(Func, TypedSqlOrderExpression> selector, params Func, TypedSqlOrderExpression>[] selectors);
+
+ /// Add typed SQL DSL select items using root and first joined table contexts.
+ IDynamicTypedSelectQueryBuilder SelectSql(Func, TypedTableContext, TypedSqlSelectable> selector, params Func, TypedTableContext, TypedSqlSelectable>[] selectors);
+
+ /// Add typed SQL DSL select items using root and first two joined table contexts.
+ IDynamicTypedSelectQueryBuilder SelectSql(Func, TypedTableContext, TypedTableContext, TypedSqlSelectable> selector, params Func, TypedTableContext, TypedTableContext, TypedSqlSelectable>[] selectors);
+
+ /// Add typed SQL DSL select items using root and first three joined table contexts.
+ IDynamicTypedSelectQueryBuilder SelectSql(Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlSelectable> selector, params Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlSelectable>[] selectors);
+
+ /// Add typed SQL DSL select items using root and first four joined table contexts.
+ IDynamicTypedSelectQueryBuilder SelectSql(Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlSelectable> selector, params Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlSelectable>[] selectors);
+
+ /// Add typed SQL DSL where predicate using root and first joined table contexts.
+ IDynamicTypedSelectQueryBuilder WhereSql(Func, TypedTableContext, TypedSqlPredicate> predicate);
+
+ /// Add typed SQL DSL where predicate using root and first two joined table contexts.
+ IDynamicTypedSelectQueryBuilder WhereSql(Func, TypedTableContext, TypedTableContext, TypedSqlPredicate> predicate);
+
+ /// Add typed SQL DSL where predicate using root and first three joined table contexts.
+ IDynamicTypedSelectQueryBuilder WhereSql(Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlPredicate> predicate);
+
+ /// Add typed SQL DSL where predicate using root and first four joined table contexts.
+ IDynamicTypedSelectQueryBuilder WhereSql(Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlPredicate> predicate);
+
+ /// Add typed SQL DSL having predicate using root and first joined table contexts.
+ IDynamicTypedSelectQueryBuilder HavingSql(Func, TypedTableContext, TypedSqlPredicate> predicate);
+
+ /// Add typed SQL DSL having predicate using root and first two joined table contexts.
+ IDynamicTypedSelectQueryBuilder HavingSql(Func, TypedTableContext, TypedTableContext, TypedSqlPredicate> predicate);
+
+ /// Add typed SQL DSL having predicate using root and first three joined table contexts.
+ IDynamicTypedSelectQueryBuilder HavingSql(Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlPredicate> predicate);
+
+ /// Add typed SQL DSL having predicate using root and first four joined table contexts.
+ IDynamicTypedSelectQueryBuilder HavingSql(Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlPredicate> predicate);
+
+ /// Add typed SQL DSL group-by expression using root and first joined table contexts.
+ IDynamicTypedSelectQueryBuilder GroupBySql(Func, TypedTableContext, TypedSqlExpression> selector, params Func, TypedTableContext, TypedSqlExpression>[] selectors);
+
+ /// Add typed SQL DSL group-by expression using root and first two joined table contexts.
+ IDynamicTypedSelectQueryBuilder GroupBySql(Func, TypedTableContext, TypedTableContext, TypedSqlExpression> selector, params Func, TypedTableContext, TypedTableContext, TypedSqlExpression>[] selectors);
+
+ /// Add typed SQL DSL group-by expression using root and first three joined table contexts.
+ IDynamicTypedSelectQueryBuilder GroupBySql(Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlExpression> selector, params Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlExpression>[] selectors);
+
+ /// Add typed SQL DSL group-by expression using root and first four joined table contexts.
+ IDynamicTypedSelectQueryBuilder GroupBySql(Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlExpression> selector, params Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlExpression>[] selectors);
+
+ /// Add typed SQL DSL order-by expression using root and first joined table contexts.
+ IDynamicTypedSelectQueryBuilder OrderBySql(Func, TypedTableContext, TypedSqlOrderExpression> selector, params Func, TypedTableContext, TypedSqlOrderExpression>[] selectors);
+
+ /// Add typed SQL DSL order-by expression using root and first two joined table contexts.
+ IDynamicTypedSelectQueryBuilder OrderBySql(Func, TypedTableContext, TypedTableContext, TypedSqlOrderExpression> selector, params Func, TypedTableContext, TypedTableContext, TypedSqlOrderExpression>[] selectors);
+
+ /// Add typed SQL DSL order-by expression using root and first three joined table contexts.
+ IDynamicTypedSelectQueryBuilder OrderBySql(Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlOrderExpression> selector, params Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlOrderExpression>[] selectors);
+
+ /// Add typed SQL DSL order-by expression using root and first four joined table contexts.
+ IDynamicTypedSelectQueryBuilder OrderBySql(Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlOrderExpression> selector, params Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlOrderExpression>[] selectors);
}
/// Typed update query builder for mapped entities.
/// Mapped entity type.
@@ -10869,6 +10929,11 @@ namespace DynamORM
/// Mapped entity type.
internal class DynamicTypedSelectQueryBuilder : DynamicSelectQueryBuilder, IDynamicTypedSelectQueryBuilder
{
+ private sealed class TypedJoinInfo
+ {
+ public Type ModelType { get; set; }
+ public string Alias { get; set; }
+ }
private sealed class TypedSqlRenderContext : ITypedSqlRenderContext
{
private readonly DynamicTypedSelectQueryBuilder _builder;
@@ -10916,6 +10981,7 @@ namespace DynamORM
}
}
private readonly DynamicTypeMap _mapper;
+ private readonly List _typedJoins = new List();
public DynamicTypedSelectQueryBuilder(DynamicDatabase db)
: base(db)
@@ -10977,6 +11043,7 @@ namespace DynamORM
if (!string.IsNullOrEmpty(condition))
joinExpr += string.Format(" ON {0}", condition);
+ RegisterTypedJoin(typeof(TRight), rightAlias);
AppendJoinClause(joinExpr);
return this;
}
@@ -11019,6 +11086,7 @@ namespace DynamORM
else if (!string.IsNullOrEmpty(spec.OnRawCondition))
joinExpr += string.Format(" ON {0}", spec.OnRawCondition);
+ RegisterTypedJoin(typeof(TRight), rightAlias);
AppendJoinClause(joinExpr);
return this;
}
@@ -11076,6 +11144,54 @@ namespace DynamORM
return this;
}
+ public IDynamicTypedSelectQueryBuilder SelectSql(Func, TypedTableContext, TypedSqlSelectable> selector, params Func, TypedTableContext, TypedSqlSelectable>[] selectors)
+ {
+ if (selector == null)
+ throw new ArgumentNullException("selector");
+
+ AddSelectSqlSelector(selector(GetRootContext(), GetJoinedContext(0)));
+ if (selectors != null)
+ foreach (Func, TypedTableContext, TypedSqlSelectable> item in selectors)
+ AddSelectSqlSelector(item(GetRootContext(), GetJoinedContext(0)));
+
+ return this;
+ }
+ public IDynamicTypedSelectQueryBuilder SelectSql(Func, TypedTableContext, TypedTableContext, TypedSqlSelectable> selector, params Func, TypedTableContext, TypedTableContext, TypedSqlSelectable>[] selectors)
+ {
+ if (selector == null)
+ throw new ArgumentNullException("selector");
+
+ AddSelectSqlSelector(selector(GetRootContext(), GetJoinedContext(0), GetJoinedContext(1)));
+ if (selectors != null)
+ foreach (Func, TypedTableContext, TypedTableContext, TypedSqlSelectable> item in selectors)
+ AddSelectSqlSelector(item(GetRootContext(), GetJoinedContext(0), GetJoinedContext(1)));
+
+ return this;
+ }
+ public IDynamicTypedSelectQueryBuilder SelectSql(Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlSelectable> selector, params Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlSelectable>[] selectors)
+ {
+ if (selector == null)
+ throw new ArgumentNullException("selector");
+
+ AddSelectSqlSelector(selector(GetRootContext(), GetJoinedContext(0), GetJoinedContext(1), GetJoinedContext(2)));
+ if (selectors != null)
+ foreach (Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlSelectable> item in selectors)
+ AddSelectSqlSelector(item(GetRootContext(), GetJoinedContext(0), GetJoinedContext(1), GetJoinedContext(2)));
+
+ return this;
+ }
+ public IDynamicTypedSelectQueryBuilder SelectSql(Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlSelectable> selector, params Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlSelectable>[] selectors)
+ {
+ if (selector == null)
+ throw new ArgumentNullException("selector");
+
+ AddSelectSqlSelector(selector(GetRootContext(), GetJoinedContext(0), GetJoinedContext(1), GetJoinedContext(2), GetJoinedContext(3)));
+ if (selectors != null)
+ foreach (Func, TypedTableContext, TypedTableContext, TypedTableContext, TypedTableContext, TypedSqlSelectable> item in selectors)
+ AddSelectSqlSelector(item(GetRootContext(), GetJoinedContext(0), GetJoinedContext(1), GetJoinedContext(2), GetJoinedContext(3)));
+
+ return this;
+ }
public IDynamicTypedSelectQueryBuilder GroupBy(Expression> selector, params Expression>[] selectors)
{
if (selector == null)
@@ -11105,6 +11221,54 @@ namespace DynamORM
return this;
}
+ public IDynamicTypedSelectQueryBuilder GroupBySql(Func, TypedTableContext, TypedSqlExpression> selector, params Func, TypedTableContext, TypedSqlExpression>[] selectors)
+ {
+ if (selector == null)
+ throw new ArgumentNullException("selector");
+
+ AddGroupBySqlSelector(selector(GetRootContext(), GetJoinedContext(0)));
+ if (selectors != null)
+ foreach (Func, TypedTableContext, TypedSqlExpression> item in selectors)
+ AddGroupBySqlSelector(item(GetRootContext(), GetJoinedContext(0)));
+
+ return this;
+ }
+ public IDynamicTypedSelectQueryBuilder GroupBySql(Func, TypedTableContext, TypedTableContext, TypedSqlExpression> selector, params Func, TypedTableContext, TypedTableContext, TypedSqlExpression>[] selectors)
+ {
+ if (selector == null)
+ throw new ArgumentNullException("selector");
+
+ AddGroupBySqlSelector(selector(GetRootContext(), GetJoinedContext(0), GetJoinedContext(1)));
+ if (selectors != null)
+ foreach (Func