Skip to content

Commit 2989ad7

Browse files
adding bit flag check ability (#293)
* adding bit flag check ability * Avoiding overriding of values Co-authored-by: Valfrid Couto <[email protected]>
1 parent a70406f commit 2989ad7

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

DapperExtensions.Test/PredicatesFixture.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,16 @@ public void In_ReturnsSetupPredicate()
147147
Assert.AreEqual("Id", predicate.PropertyName);
148148
Assert.AreEqual(values, predicate.Collection);
149149
Assert.AreEqual(false, predicate.Not);
150+
}
151+
152+
[Test]
153+
public void BitEq_ReturnsSetupPredicate()
154+
{
155+
var predicate = Predicates.Field<PredicateTestEntity>(f => f.Id, Operator.BitEq, 1, false);
156+
Assert.AreEqual("Id", predicate.PropertyName);
157+
Assert.AreEqual(Operator.BitEq, predicate.Operator);
158+
Assert.AreEqual(1, predicate.Value);
159+
Assert.AreEqual(false, predicate.Not);
150160
}
151161
}
152162

DapperExtensions/Predicate/FieldPredicate.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,17 @@ private string GetSql(ISqlGenerator sqlGenerator, IDictionary<string, object> pa
9595
return string.Format("({0} {1}IN ({2}))", columnName, Not ? "NOT " : string.Empty, GetParameterString(sqlGenerator, parameters, values));
9696
}
9797

98-
var format = (Operator == Operator.Like && Value != null && sqlGenerator.Configuration.Dialect is OracleDialect) ?
98+
string format;
99+
100+
if (Operator == Operator.BitEq && Value != null)
101+
{
102+
format = (sqlGenerator.Configuration.Dialect is OracleDialect) ? "BITAND({0}, {2}) {1} {2}" : "{0}&{2} {1} {2}";
103+
}
104+
else
105+
{
106+
format = (Operator == Operator.Like && Value != null && sqlGenerator.Configuration.Dialect is OracleDialect) ?
99107
"(upper({0}) {1} upper('%'||{2}||'%'))" : "({0} {1} {2})";
108+
}
100109

101110
return string.Format(format, columnName, GetOperatorString(), GetParameterName(sqlGenerator, parameters, parameterPropertyName, parentType));
102111
}

DapperExtensions/Predicate/PredicateEnums.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ public enum Operator
1717
/// </summary>
1818
Eq,
1919

20+
/// <summary>
21+
/// Bit Equal (flags)
22+
/// </summary>
23+
BitEq,
24+
2025
/// <summary>
2126
/// Greater than
2227
/// </summary>

0 commit comments

Comments
 (0)