Skip to content

Commit

Permalink
Merge pull request #627 from linq2db/Issue88
Browse files Browse the repository at this point in the history
Fix #88
  • Loading branch information
ili committed Apr 12, 2017
2 parents ebd8896 + b9e0f80 commit 9317c02
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 5 deletions.
14 changes: 9 additions & 5 deletions Source/Linq/Builder/ExpressionBuilder.SqlBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1475,25 +1475,29 @@ Expression AddEqualTrue(Expression expr)

ISqlPredicate ConvertCompare(IBuildContext context, ExpressionType nodeType, Expression left, Expression right)
{
if (left.NodeType == ExpressionType.Convert && left.Type == typeof(int) && right.NodeType == ExpressionType.Constant)
if (left.NodeType == ExpressionType.Convert && left.Type == typeof(int) && (right.NodeType == ExpressionType.Constant || right.NodeType == ExpressionType.Convert))
{
var conv = (UnaryExpression)left;
var conv = (UnaryExpression)left;

if (conv.Operand.Type == typeof(char))
{
left = conv.Operand;
right = Expression.Constant(ConvertTo<char>.From(((ConstantExpression)right).Value));
right = right.NodeType == ExpressionType.Constant
? Expression.Constant(ConvertTo<char>.From(((ConstantExpression) right).Value))
: ((UnaryExpression) right).Operand;
}
}

if (right.NodeType == ExpressionType.Convert && right.Type == typeof(int) && left.NodeType == ExpressionType.Constant)
if (right.NodeType == ExpressionType.Convert && right.Type == typeof(int) && (left.NodeType == ExpressionType.Constant || left.NodeType == ExpressionType.Convert))
{
var conv = (UnaryExpression)right;

if (conv.Operand.Type == typeof(char))
{
right = conv.Operand;
left = Expression.Constant(ConvertTo<char>.From(((ConstantExpression)left).Value));
left = left.NodeType == ExpressionType.Constant
? Expression.Constant(ConvertTo<char>.From(((ConstantExpression) left).Value))
: ((UnaryExpression) left).Operand;
}
}

Expand Down
43 changes: 43 additions & 0 deletions Tests/Linq/Linq/IssueTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -436,6 +436,49 @@ public void Issue376(string context)
}
}


[Table("Person", IsColumnAttributeRequired = false)]
public class Person88
{
[SequenceName(ProviderName.Firebird, "PersonID")]
[Column("PersonID"), Identity, PrimaryKey] public int ID;
[NotNull] public string FirstName { get; set; }
[NotNull] public string LastName;
[Nullable] public string MiddleName;
public char Gender;
}

[Test, DataContextSource(TestProvName.SQLiteMs)]
public void Issue88(string context)
{
using (var db = GetDataContext(context))
{
var llc = db
.GetTable<Person88>()
.Where(_ => _.ID == 1 && _.Gender == 'M');

var lrc = db
.GetTable<Person88>()
.Where(_ => _.ID == 1 && 'M' == _.Gender);

var gender = 'M';
var llp = db
.GetTable<Person88>()
.Where(_ => _.ID == 1 && _.Gender == gender);

var lrp = db
.GetTable<Person88>()
.Where(_ => _.ID == 1 && gender == _.Gender);

Assert.IsNotEmpty(llc);
Assert.IsNotEmpty(lrc);
Assert.IsNotEmpty(llp);
Assert.IsNotEmpty(lrp);
}

}


[Test, DataContextSource]
public void Issue173(string context)
{
Expand Down

0 comments on commit 9317c02

Please sign in to comment.