Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit f89b543

Browse files
committed
Make bool sql expressions consistent with and without joined tables
1 parent 954d8b7 commit f89b543

File tree

2 files changed

+56
-7
lines changed

2 files changed

+56
-7
lines changed

src/ServiceStack.OrmLite/Expressions/SqlExpression.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1185,12 +1185,11 @@ protected string RemoveQuoteFromAlias(string exp)
11851185

11861186
protected bool IsFieldName(object quotedExp)
11871187
{
1188-
FieldDefinition fd =
1189-
modelDef.FieldDefinitions.
1190-
FirstOrDefault(x =>
1191-
DialectProvider.
1192-
GetQuotedColumnName(x.FieldName) == quotedExp.ToString());
1193-
return (fd != default(FieldDefinition));
1188+
var fieldExpr = quotedExp.ToString().StripTablePrefixes();
1189+
var fieldNames = modelDef.FieldDefinitions.Map(x =>
1190+
DialectProvider.GetQuotedColumnName(x.FieldName));
1191+
1192+
return fieldNames.Any(x => x == fieldExpr);
11941193
}
11951194

11961195
protected object GetTrueExpression()

tests/ServiceStack.OrmLite.Tests/Expression/SqlExpressionTests.cs

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,8 @@ public void Can_OrderBy_Fields_with_different_sort_directions()
286286
db.DropAndCreateTable<LetterStat>();
287287

288288
var insertedIds = new List<long>();
289-
"A,B,B,C,C,C,D,D,E".Split(',').Each(letter => {
289+
"A,B,B,C,C,C,D,D,E".Split(',').Each(letter =>
290+
{
290291
insertedIds.Add(db.Insert(new LetterFrequency { Letter = letter }, selectIdentity: true));
291292
});
292293

@@ -344,5 +345,54 @@ public void Can_select_limit_on_Table_with_References()
344345
Assert.That(results[0].Orders.Count, Is.EqualTo(2));
345346
}
346347
}
348+
349+
public class TableA
350+
{
351+
public int Id { get; set; }
352+
public bool Bool { get; set; }
353+
}
354+
355+
public class TableB
356+
{
357+
public int Id { get; set; }
358+
public int TableAId { get; set; }
359+
}
360+
361+
[Test]
362+
public void Can_query_bools()
363+
{
364+
using (var db = OpenDbConnection())
365+
{
366+
db.DropAndCreateTable<TableA>();
367+
db.DropAndCreateTable<TableB>();
368+
369+
db.Insert(new TableA { Id = 1, Bool = false });
370+
db.Insert(new TableB { Id = 1, TableAId = 1 });
371+
372+
var q = db.From<TableA>()
373+
.LeftJoin<TableB>((a, b) => a.Id == b.Id)
374+
.Where(a => !a.Bool);
375+
376+
var result = db.Single(q);
377+
db.GetLastSql().Print();
378+
Assert.That(result.Id, Is.EqualTo(1));
379+
380+
q = db.From<TableA>()
381+
.Where(a => !a.Bool)
382+
.LeftJoin<TableB>((a, b) => a.Id == b.Id);
383+
384+
result = db.Single(q);
385+
db.GetLastSql().Print();
386+
Assert.That(result.Id, Is.EqualTo(1));
387+
388+
389+
q = db.From<TableA>()
390+
.Where(a => !a.Bool);
391+
392+
result = db.Single(q);
393+
db.GetLastSql().Print();
394+
Assert.That(result.Id, Is.EqualTo(1));
395+
}
396+
}
347397
}
348398
}

0 commit comments

Comments
 (0)