Skip to content

Commit ca5219c

Browse files
committed
Translate >= && <= into BETWEEN in Firebird Entity Framework Core provider
1 parent 523011b commit ca5219c

File tree

1 file changed

+23
-8
lines changed

1 file changed

+23
-8
lines changed

src/FirebirdSql.EntityFrameworkCore.Firebird/Query/Internal/FbQuerySqlGenerator.cs

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -143,17 +143,25 @@ protected override Expression VisitSqlBinary(SqlBinaryExpression sqlBinaryExpres
143143
Sql.Append(")");
144144
return sqlBinaryExpression;
145145
}
146-
else
146+
else if (sqlBinaryExpression.OperatorType == ExpressionType.AndAlso)
147147
{
148-
return base.VisitSqlBinary(sqlBinaryExpression);
149-
}
148+
if (sqlBinaryExpression.Left is SqlBinaryExpression left && sqlBinaryExpression.Right is SqlBinaryExpression right)
149+
{
150+
if (left.OperatorType == ExpressionType.GreaterThanOrEqual && right.OperatorType == ExpressionType.LessThanOrEqual &&
151+
left.Left is ColumnExpression leftColumn && right.Left is ColumnExpression rightColumn &&
152+
leftColumn.Name == rightColumn.Name)
153+
{
154+
Visit(left.Left);
155+
Sql.Append(" BETWEEN ");
156+
Visit(left.Right);
157+
Sql.Append(" AND ");
158+
Visit(right.Right);
159+
return sqlBinaryExpression;
160+
}
150161

151-
void BooleanToIntegralAndVisit(SqlExpression expression)
152-
{
153-
Sql.Append("IIF(");
154-
Visit(expression);
155-
Sql.Append(", 1, 0)");
162+
}
156163
}
164+
return base.VisitSqlBinary(sqlBinaryExpression);
157165
}
158166

159167
protected override Expression VisitSqlParameter(SqlParameterExpression sqlParameterExpression)
@@ -418,4 +426,11 @@ void GenerateList<T>(IReadOnlyList<T> items, Action<T> generationAction, Action<
418426
generationAction(items[i]);
419427
}
420428
}
429+
430+
void BooleanToIntegralAndVisit(SqlExpression expression)
431+
{
432+
Sql.Append("IIF(");
433+
Visit(expression);
434+
Sql.Append(", 1, 0)");
435+
}
421436
}

0 commit comments

Comments
 (0)