Skip to content

Commit

Permalink
Make every QueryComponent a SqlExpression
Browse files Browse the repository at this point in the history
  • Loading branch information
weelink committed Jun 26, 2019
1 parent 6bccbcf commit 923b23b
Show file tree
Hide file tree
Showing 14 changed files with 35 additions and 90 deletions.
1 change: 1 addition & 0 deletions src/FluentSQL/Modelling/SqlExpression.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
// ReSharper disable UnusedParameter.Global

namespace FluentSQL.Modelling
{
Expand Down
2 changes: 1 addition & 1 deletion src/FluentSQL/Modelling/Table.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
/// <summary>
/// Represents a table.
/// </summary>
public abstract class Table
public abstract class Table : SqlExpression<Table>
{
}
}
5 changes: 3 additions & 2 deletions src/FluentSQL/Query.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using FluentSQL.Compilation;
using FluentSQL.Modelling;

namespace FluentSQL
{
Expand All @@ -9,7 +10,7 @@ namespace FluentSQL
/// <typeparam name="TParameters">
/// The parameters required for executing this query.
/// </typeparam>
public class Query<TParameters, TQueryResult> where TParameters : new()
public class Query<TParameters, TQueryResult> : SqlExpression<TQueryResult> where TParameters : new()
{
/// <summary>
/// Create a new query.
Expand All @@ -27,7 +28,7 @@ internal Query(CompilationResult compilationResult)
/// The compiled query to execute.
/// </summary>
/// <typeparam name="TQueryResult">The result type.</typeparam>
public class Query<TQueryResult>
public class Query<TQueryResult> : SqlExpression<TQueryResult>
{
/// <summary>
/// Create a new query.
Expand Down
19 changes: 15 additions & 4 deletions src/FluentSQL/Querying/QueryComponent.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace FluentSQL.Querying
using FluentSQL.Modelling;

namespace FluentSQL.Querying
{
/// <summary>
/// A component of a query.
Expand All @@ -7,11 +9,20 @@
/// The parameters required for executing the query.
/// </typeparam>
/// <typeparam name="TQueryResult">The result type of the query.</typeparam>
public interface QueryComponent<TParameters, TQueryResult> where TParameters : new()
public abstract class QueryComponent<TParameters, TQueryResult> : SqlExpression<TQueryResult> where TParameters : new()
{
/// <summary>
/// Gets the underlying <see cref="QueryContext{TParameters, TQueryResult} " />.
/// Create a new <see cref="QueryComponent{TParameters, TQueryResult}" />.
/// </summary>
QueryContext<TParameters, TQueryResult> QueryContext { get; }
/// <param name="queryContext">The underlying <see cref="QueryContext{TParameters, TQueryResult}" />.</param>
protected QueryComponent(QueryContext<TParameters, TQueryResult> queryContext)
{
QueryContext = queryContext;
}

/// <summary>
/// Gets the underlying <see cref="QueryContext{TParameters, TQueryResult}" />.
/// </summary>
internal QueryContext<TParameters, TQueryResult> QueryContext { get; }
}
}
11 changes: 1 addition & 10 deletions src/FluentSQL/Querying/Statements/Distinct.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,9 @@
/// </summary>
/// <param name="queryContext">The <see cref="QueryContext{TParameters, TResult}" />.</param>
internal Distinct(QueryContext<TParameters, TQueryResult> queryContext)
: base(queryContext)
{
QueryContext = queryContext;

QueryContext.Modifiers.Add(this);
}

/// <inheritdoc />
QueryContext<TParameters, TQueryResult> QueryComponent<TParameters, TQueryResult>.QueryContext
{
get { return QueryContext; }
}

private QueryContext<TParameters, TQueryResult> QueryContext { get; }
}
}
9 changes: 1 addition & 8 deletions src/FluentSQL/Querying/Statements/From.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,20 +23,13 @@ namespace FluentSQL.Querying.Statements
/// <param name="queryContext">The <see cref="QueryContext{TParameters, TResult}" />.</param>
/// <param name="expression">The expression for selecting <typeparamref name="TTable" />.</param>
internal From(QueryContext<TParameters, TQueryResult> queryContext, Expression<Func<TTable>> expression)
: base(queryContext)
{
QueryContext = queryContext;
Expression = expression;

QueryContext.FromComponents.Add(this);
}

/// <inheritdoc />
QueryContext<TParameters, TQueryResult> QueryComponent<TParameters, TQueryResult>.QueryContext
{
get { return QueryContext; }
}

private QueryContext<TParameters, TQueryResult> QueryContext { get; }
private Expression<Func<TTable>> Expression { get; }
}
}
11 changes: 2 additions & 9 deletions src/FluentSQL/Querying/Statements/GroupBy.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,13 @@ public class GroupBy<TParameters, TQueryResult, TSqlExpression> :
/// <param name="queryContext">The <see cref="QueryContext{TParameters, TResult}" />.</param>
/// <param name="expression">The <see cref="Expression{TDelegate}" /> to select.</param>
internal GroupBy(QueryContext<TParameters, TQueryResult> queryContext, Expression<Func<TSqlExpression>> expression)
: base(queryContext)
{
QueryContext = queryContext;
Expression = expression;

queryContext.GroupByComponents.Add(this);
QueryContext.GroupByComponents.Add(this);
}

/// <inheritdoc />
QueryContext<TParameters, TQueryResult> QueryComponent<TParameters, TQueryResult>.QueryContext
{
get { return QueryContext; }
}

private QueryContext<TParameters, TQueryResult> QueryContext { get; }
private Expression<Func<TSqlExpression>> Expression { get; }
}
}
11 changes: 2 additions & 9 deletions src/FluentSQL/Querying/Statements/Join.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@ namespace FluentSQL.Querying.Statements
/// The <see cref="Expression{TDelegate}">Expression&lt;Func&lt;TTable&gt;&gt;</see> that selects the child to join with.
/// </param>
protected Join(QueryContext<TParameters, TQueryResult> queryContext, Expression<Func<TTable>> child)
: base(queryContext)
{
QueryContext = queryContext;
Child = child;

queryContext.JoinComponents.Add(this);
QueryContext.JoinComponents.Add(this);
}

/// <summary>
Expand Down Expand Up @@ -56,13 +56,6 @@ public Join<TParameters, TQueryResult, TTable> On(Expression<Func<TTable, bool>>
return this;
}

/// <inheritdoc />
QueryContext<TParameters, TQueryResult> QueryComponent<TParameters, TQueryResult>.QueryContext
{
get { return QueryContext; }
}

private QueryContext<TParameters, TQueryResult> QueryContext { get; }
private Expression<Func<TTable>> Child { get; }
private Expression<Func<bool>> ImplicitTableExpression { get; set; }
private Expression<Func<TTable, bool>> ExplicitTableExpression { get; set; }
Expand Down
9 changes: 1 addition & 8 deletions src/FluentSQL/Querying/Statements/Limit.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,13 @@ namespace FluentSQL.Querying.Statements
/// <param name="queryContext">The <see cref="QueryContext{TParameters, TResult}" />.</param>
/// <param name="count">The number of rows.</param>
internal Limit(QueryContext<TParameters, TQueryResult> queryContext, int count)
: base(queryContext)
{
QueryContext = queryContext;
Count = count;

QueryContext.Modifiers.Add(this);
}

/// <inheritdoc />
QueryContext<TParameters, TQueryResult> QueryComponent<TParameters, TQueryResult>.QueryContext
{
get { return QueryContext; }
}

private QueryContext<TParameters, TQueryResult> QueryContext { get; }
private int Count { get; }
}
}
11 changes: 2 additions & 9 deletions src/FluentSQL/Querying/Statements/OrderBy.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ public class OrderBy<TParameters, TQueryResult, TSqlExpression> :
/// The <see cref="Expression{TDelegate}">Expression&lt;Func&lt;TSqlExpression&gt;&gt;</see> to select.
/// </param>
internal OrderBy(QueryContext<TParameters, TQueryResult> queryContext, Expression<Func<TSqlExpression>> expression)
: base(queryContext)
{
QueryContext = queryContext;
Expression = expression;

queryContext.OrderByComponents.Add(this);
QueryContext.OrderByComponents.Add(this);
}

/// <summary>
Expand All @@ -46,13 +46,6 @@ public OrderBy<TParameters, TQueryResult, TSqlExpression> Descending
get { return this; }
}

/// <inheritdoc />
QueryContext<TParameters, TQueryResult> QueryComponent<TParameters, TQueryResult>.QueryContext
{
get { return QueryContext; }
}

private QueryContext<TParameters, TQueryResult> QueryContext { get; }
private Expression<Func<TSqlExpression>> Expression { get; }
}
}
11 changes: 2 additions & 9 deletions src/FluentSQL/Querying/Statements/Select.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ public class Select<TParameters, TQueryResult, TSqlExpression> :
/// The <see cref="Expression{TDelegate}">Expression&lt;Func&lt;TSqlExpression&gt;&gt;</see> to select.
/// </param>
internal Select(QueryContext<TParameters, TQueryResult> queryContext, Expression<Func<TSqlExpression>> expression)
: base(queryContext)
{
QueryContext = queryContext;
Expression = expression;

queryContext.SelectComponents.Add(this);
QueryContext.SelectComponents.Add(this);
}

/// <summary>
Expand All @@ -53,13 +53,6 @@ public Select<TParameters, TQueryResult, TSqlExpression> As(Expression<Func<TQue
return this;
}

/// <inheritdoc />
QueryContext<TParameters, TQueryResult> QueryComponent<TParameters, TQueryResult>.QueryContext
{
get { return QueryContext; }
}

private QueryContext<TParameters, TQueryResult> QueryContext { get; }
private Expression<Func<TSqlExpression>> Expression { get; }
private Alias Alias { get; set; }
}
Expand Down
7 changes: 1 addition & 6 deletions src/FluentSQL/Querying/Statements/Union.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,12 @@ public class Union<TParameters1, TParameters2, TQueryResult> : QueryComponent<TP
/// <param name="first">The first query.</param>
/// <param name="second">The second query.</param>
internal Union(QueryComponent<TParameters1, TQueryResult> first, QueryComponent<TParameters2, TQueryResult> second)
: base(first.QueryContext)
{
First = first;
Second = second;
}

/// <inheritdoc />
QueryContext<TParameters1, TQueryResult> QueryComponent<TParameters1, TQueryResult>.QueryContext
{
get { return First.QueryContext; }
}

private QueryComponent<TParameters1, TQueryResult> First { get; }
private QueryComponent<TParameters2, TQueryResult> Second { get; }
}
Expand Down
7 changes: 1 addition & 6 deletions src/FluentSQL/Querying/Statements/UnionAll.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,12 @@ public class UnionAll<TParameters1, TParameters2, TQueryResult> : QueryComponent
/// <param name="first">The first query.</param>
/// <param name="second">The second query.</param>
internal UnionAll(QueryComponent<TParameters1, TQueryResult> first, QueryComponent<TParameters2, TQueryResult> second)
: base(first.QueryContext)
{
First = first;
Second = second;
}

/// <inheritdoc />
QueryContext<TParameters1, TQueryResult> QueryComponent<TParameters1, TQueryResult>.QueryContext
{
get { return First.QueryContext; }
}

private QueryComponent<TParameters1, TQueryResult> First { get; }
private QueryComponent<TParameters2, TQueryResult> Second { get; }
}
Expand Down
11 changes: 2 additions & 9 deletions src/FluentSQL/Querying/Statements/Where.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,13 @@ namespace FluentSQL.Querying.Statements
/// <param name="queryContext">The <see cref="QueryContext{TParameters, TResult}" />.</param>
/// <param name="expression">The expression that represents the condition.</param>
internal Where(QueryContext<TParameters, TQueryResult> queryContext, Expression<Func<TParameters, bool>> expression)
: base(queryContext)
{
QueryContext = queryContext;
Expression = expression;

queryContext.WhereComponents.Add(this);
QueryContext.WhereComponents.Add(this);
}

/// <inheritdoc />
QueryContext<TParameters, TQueryResult> QueryComponent<TParameters, TQueryResult>.QueryContext
{
get { return QueryContext; }
}

private QueryContext<TParameters, TQueryResult> QueryContext { get; }
private Expression<Func<TParameters, bool>> Expression { get; }
}
}

0 comments on commit 923b23b

Please sign in to comment.