Skip to content

Commit

Permalink
extract fix from #2718 (#2736)
Browse files Browse the repository at this point in the history
  • Loading branch information
MaceWindu committed Dec 26, 2020
1 parent bb2cdb5 commit 0898635
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 6 deletions.
23 changes: 17 additions & 6 deletions Source/LinqToDB/Linq/Builder/ExpressionBuilder.SqlBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -900,16 +900,27 @@ public ISqlExpression ConvertToSql(IBuildContext? context, Expression expression

ISqlExpression l;
ISqlExpression r;
var ls = GetContext(context, e.Left);
if (ls?.IsExpression(e.Left, 0, RequestFor.Field).Result == true)
var shouldCheckColumn =
e.Left.Type.ToNullableUnderlying() == e.Right.Type.ToNullableUnderlying();

if (shouldCheckColumn)
{
l = ConvertToSql(context, e.Left);
r = ConvertToSql(context, e.Right, true, QueryHelper.GetColumnDescriptor(l) ?? columnDescriptor);
var ls = GetContext(context, e.Left);
if (ls?.IsExpression(e.Left, 0, RequestFor.Field).Result == true)
{
l = ConvertToSql(context, e.Left);
r = ConvertToSql(context, e.Right, true, QueryHelper.GetColumnDescriptor(l) ?? columnDescriptor);
}
else
{
r = ConvertToSql(context, e.Right, true);
l = ConvertToSql(context, e.Left, false, QueryHelper.GetColumnDescriptor(r) ?? columnDescriptor);
}
}
else
{
r = ConvertToSql(context, e.Right, true);
l = ConvertToSql(context, e.Left, false, QueryHelper.GetColumnDescriptor(r) ?? columnDescriptor);
l = ConvertToSql(context, e.Left, true, columnDescriptor);
r = ConvertToSql(context, e.Right, true, null);
}

var t = e.Type;
Expand Down
14 changes: 14 additions & 0 deletions Tests/Linq/DataProvider/OracleTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3795,5 +3795,19 @@ public sealed class Issue2504Table2
public int COLUMNC { get; set; }
}
#endregion

[Test]
public void TestDateTimeNAddTimeSpan([IncludeDataSources(true, TestProvName.AllOracle)] string context)
{
var ts = TimeSpan.FromHours(1);

using (var db = GetDataContext(context))
{
db.GetTable<AllTypes>()
.Where(_ =>
Sql.CurrentTimestamp > _.datetime2DataType + TimeSpan.FromHours(1)
).Select(x => x.ID).ToArray();
}
}
}
}

0 comments on commit 0898635

Please sign in to comment.