Commit af1d9f6f authored by Marc Gravell's avatar Marc Gravell

Merge pull request #124 from AndrewMSpencer/master

Inclusive/Exclusive Where Clauses and Intersect
parents fea7ea2a 04513790
...@@ -14,6 +14,7 @@ class Clause ...@@ -14,6 +14,7 @@ class Clause
{ {
public string Sql { get; set; } public string Sql { get; set; }
public object Parameters { get; set; } public object Parameters { get; set; }
public bool IsInclusive { get; set; }
} }
class Clauses : List<Clause> class Clauses : List<Clause>
...@@ -35,7 +36,18 @@ public string ResolveClauses(DynamicParameters p) ...@@ -35,7 +36,18 @@ public string ResolveClauses(DynamicParameters p)
{ {
p.AddDynamicParams(item.Parameters); p.AddDynamicParams(item.Parameters);
} }
return prefix + string.Join(joiner, this.Select(c => c.Sql)) + postfix; return this.Any(a => a.IsInclusive)
? prefix +
string.Join(joiner,
this.Where(a => !a.IsInclusive)
.Select(c => c.Sql)
.Union(new[]
{
" ( " +
string.Join(" OR ", this.Where(a => a.IsInclusive).Select(c => c.Sql).ToArray()) +
" ) "
})) + postfix
: prefix + string.Join(joiner, this.Select(c => c.Sql)) + postfix;
} }
} }
...@@ -94,7 +106,7 @@ public Template AddTemplate(string sql, dynamic parameters = null) ...@@ -94,7 +106,7 @@ public Template AddTemplate(string sql, dynamic parameters = null)
return new Template(this, sql, parameters); return new Template(this, sql, parameters);
} }
void AddClause(string name, string sql, object parameters, string joiner, string prefix = "", string postfix = "") void AddClause(string name, string sql, object parameters, string joiner, string prefix = "", string postfix = "", bool IsInclusive = false)
{ {
Clauses clauses; Clauses clauses;
if (!data.TryGetValue(name, out clauses)) if (!data.TryGetValue(name, out clauses))
...@@ -106,6 +118,12 @@ void AddClause(string name, string sql, object parameters, string joiner, string ...@@ -106,6 +118,12 @@ void AddClause(string name, string sql, object parameters, string joiner, string
seq++; seq++;
} }
public SqlBuilder Intersect(string sql, dynamic parameters = null)
{
AddClause("intersect", sql, parameters, joiner: "\nINTERSECT\n ", prefix: "\n ", postfix: "\n");
return this;
}
public SqlBuilder InnerJoin(string sql, dynamic parameters = null) public SqlBuilder InnerJoin(string sql, dynamic parameters = null)
{ {
AddClause("innerjoin", sql, parameters, joiner: "\nINNER JOIN ", prefix: "\nINNER JOIN ", postfix: "\n"); AddClause("innerjoin", sql, parameters, joiner: "\nINNER JOIN ", prefix: "\nINNER JOIN ", postfix: "\n");
...@@ -130,6 +148,12 @@ public SqlBuilder Where(string sql, dynamic parameters = null) ...@@ -130,6 +148,12 @@ public SqlBuilder Where(string sql, dynamic parameters = null)
return this; return this;
} }
public SqlBuilder OrWhere(string sql, dynamic parameters = null)
{
AddClause("where", sql, parameters, " AND ", prefix: "WHERE ", postfix: "\n", IsInclusive: true);
return this;
}
public SqlBuilder OrderBy(string sql, dynamic parameters = null) public SqlBuilder OrderBy(string sql, dynamic parameters = null)
{ {
AddClause("orderby", sql, parameters, " , ", prefix: "ORDER BY ", postfix: "\n"); AddClause("orderby", sql, parameters, " , ", prefix: "ORDER BY ", postfix: "\n");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment