Skip to content

Commit a024e35

Browse files
Merge pull request #510 from sqlkata/feature/where-boolean
Delegate where(boolean) to WhereTrue/WhereFalse methods
2 parents 4e3d2ae + 537d8bd commit a024e35

File tree

4 files changed

+70
-4
lines changed

4 files changed

+70
-4
lines changed

QueryBuilder.Tests/GeneralTests.cs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,5 +435,61 @@ public void UnsafeLiteral_Update()
435435

436436
Assert.Equal("UPDATE [Table] SET [Count] = Count + 1", c[EngineCodes.SqlServer].ToString());
437437
}
438+
439+
[Fact]
440+
public void Passing_Boolean_To_Where_Should_Call_WhereTrue_Or_WhereFalse()
441+
{
442+
var query = new Query("Table").Where("Col", true);
443+
444+
var engines = new[] {
445+
EngineCodes.SqlServer,
446+
};
447+
448+
var c = Compilers.Compile(engines, query);
449+
450+
Assert.Equal("SELECT * FROM [Table] WHERE [Col] = cast(1 as bit)", c[EngineCodes.SqlServer].ToString());
451+
}
452+
453+
[Fact]
454+
public void Passing_Boolean_False_To_Where_Should_Call_WhereTrue_Or_WhereFalse()
455+
{
456+
var query = new Query("Table").Where("Col", false);
457+
458+
var engines = new[] {
459+
EngineCodes.SqlServer,
460+
};
461+
462+
var c = Compilers.Compile(engines, query);
463+
464+
Assert.Equal("SELECT * FROM [Table] WHERE [Col] = cast(0 as bit)", c[EngineCodes.SqlServer].ToString());
465+
}
466+
467+
[Fact]
468+
public void Passing_Negative_Boolean_To_Where_Should_Call_WhereTrue_Or_WhereFalse()
469+
{
470+
var query = new Query("Table").Where("Col", "!=", true);
471+
472+
var engines = new[] {
473+
EngineCodes.SqlServer,
474+
};
475+
476+
var c = Compilers.Compile(engines, query);
477+
478+
Assert.Equal("SELECT * FROM [Table] WHERE [Col] != cast(1 as bit)", c[EngineCodes.SqlServer].ToString());
479+
}
480+
481+
[Fact]
482+
public void Passing_Negative_Boolean_False_To_Where_Should_Call_WhereTrue_Or_WhereFalse()
483+
{
484+
var query = new Query("Table").Where("Col", "!=", false);
485+
486+
var engines = new[] {
487+
EngineCodes.SqlServer,
488+
};
489+
490+
var c = Compilers.Compile(engines, query);
491+
492+
Assert.Equal("SELECT * FROM [Table] WHERE [Col] != cast(0 as bit)", c[EngineCodes.SqlServer].ToString());
493+
}
438494
}
439495
}

QueryBuilder.Tests/ParameterTypeTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ public class ParameterTypeGenerator : IEnumerable<object[]>
2525
new object[] {Convert.ToSingle("10.5", CultureInfo.InvariantCulture).ToString(), 10.5},
2626
new object[] {"-2", -2},
2727
new object[] {Convert.ToSingle("-2.8", CultureInfo.InvariantCulture).ToString(), -2.8},
28-
new object[] {"true", true},
29-
new object[] {"false", false},
30-
new object[] {"'2018-10-28 19:22:00'", new DateTime(2018, 10, 28, 19, 22, 0, DateTimeKind.Utc)},
28+
new object[] {"cast(1 as bit)", true},
29+
new object[] {"cast(0 as bit)", false},
30+
new object[] {"'2018-10-28 19:22:00'", new DateTime(2018, 10, 28, 19, 22, 0)},
3131
new object[] {"0 /* First */", EnumExample.First},
3232
new object[] {"1 /* Second */", EnumExample.Second},
3333
new object[] {"'a string'", "a string"},

QueryBuilder.Tests/SqlServer/NestedSelectTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public void SqlCompile_QueryLimitAndNestedLimit_BindingValue()
5656
// var q = new Query().From("Foo").Where("C", "c").WhereExists(n).Where("A", "a");
5757

5858
var actual = compiler.Compile(q).ToString();
59-
Assert.Contains("SELECT * FROM [Foo] WHERE [x] = true AND NOT EXISTS (SELECT 1 FROM [Bar])",
59+
Assert.Contains("SELECT * FROM [Foo] WHERE [x] = cast(1 as bit) AND NOT EXISTS (SELECT 1 FROM [Bar])",
6060
actual);
6161
// Assert.Contains("SELECT * FROM [Foo] WHERE [C] = 'c' AND EXISTS (SELECT TOP (1) 1 FROM [Bar]) AND [A] = 'a'", actual);
6262
}

QueryBuilder/Base.Where.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,16 @@ public Q Where(string column, string op, object value)
1818
return Not(op != "=").WhereNull(column);
1919
}
2020

21+
if (value is bool boolValue)
22+
{
23+
if (op != "=")
24+
{
25+
Not();
26+
}
27+
28+
return boolValue ? WhereTrue(column) : WhereFalse(column);
29+
}
30+
2131
return AddComponent("where", new BasicCondition
2232
{
2333
Column = column,

0 commit comments

Comments
 (0)