Skip to content

Commit 1646bed

Browse files
Merge pull request #477 from yankyhgoflow/grouped-filters
Grouped filters
2 parents 97e2acb + 06a1a07 commit 1646bed

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

QueryBuilder.Tests/WhereTests.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using SqlKata.Compilers;
2+
using SqlKata.Tests.Infrastructure;
3+
using Xunit;
4+
5+
namespace SqlKata.Tests
6+
{
7+
public class WhereTests : TestSupport
8+
{
9+
[Fact]
10+
public void GroupedWhereFilters()
11+
{
12+
var q = new Query("Table1")
13+
.Where(q => q.Or().Where("Column1", 10).Or().Where("Column2", 20))
14+
.Where("Column3", 30);
15+
16+
var c = Compile(q);
17+
18+
Assert.Equal(@"SELECT * FROM ""Table1"" WHERE (""Column1"" = 10 OR ""Column2"" = 20) AND ""Column3"" = 30", c[EngineCodes.PostgreSql]);
19+
}
20+
21+
[Fact]
22+
public void GroupedHavingFilters()
23+
{
24+
var q = new Query("Table1")
25+
.Having(q => q.Or().HavingRaw("SUM([Column1]) = ?", 10).Or().HavingRaw("SUM([Column2]) = ?", 20))
26+
.HavingRaw("SUM([Column3]) = ?", 30);
27+
28+
var c = Compile(q);
29+
30+
Assert.Equal(@"SELECT * FROM ""Table1"" HAVING (SUM(""Column1"") = 10 OR SUM(""Column2"") = 20) AND SUM(""Column3"") = 30", c[EngineCodes.PostgreSql]);
31+
}
32+
}
33+
}

QueryBuilder/Compilers/Compiler.Conditions.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,12 +170,14 @@ protected virtual string CompileBasicDateCondition(SqlResult ctx, BasicDateCondi
170170

171171
protected virtual string CompileNestedCondition<Q>(SqlResult ctx, NestedCondition<Q> x) where Q : BaseQuery<Q>
172172
{
173-
if (!x.Query.HasComponent("where", EngineCode))
173+
if (!(x.Query.HasComponent("where", EngineCode) || x.Query.HasComponent("having", EngineCode)))
174174
{
175175
return null;
176176
}
177177

178-
var clauses = x.Query.GetComponents<AbstractCondition>("where", EngineCode);
178+
var clause = x.Query.HasComponent("where", EngineCode) ? "where" : "having";
179+
180+
var clauses = x.Query.GetComponents<AbstractCondition>(clause, EngineCode);
179181

180182
var sql = CompileConditions(ctx, clauses);
181183

0 commit comments

Comments
 (0)