public virtual (SelectExpression selectExpression, bool canCache) Optimize( SelectExpression selectExpression, IReadOnlyDictionary <string, object> parametersValues) { var canCache = true; var inExpressionOptimized = new InExpressionValuesExpandingExpressionVisitor( _sqlExpressionFactory, parametersValues).Visit(selectExpression); if (!ReferenceEquals(selectExpression, inExpressionOptimized)) { canCache = false; } var nullParametersOptimized = new ParameterNullabilityBasedSqlExpressionOptimizingExpressionVisitor( _sqlExpressionFactory, _useRelationalNulls, parametersValues).Visit(inExpressionOptimized); var fromSqlParameterOptimized = new FromSqlParameterApplyingExpressionVisitor( _sqlExpressionFactory, _parameterNameGeneratorFactory.Create(), parametersValues).Visit(nullParametersOptimized); if (!ReferenceEquals(nullParametersOptimized, fromSqlParameterOptimized)) { canCache = false; } return(selectExpression : (SelectExpression)fromSqlParameterOptimized, canCache); }
public SelectExpression Optimize(SelectExpression selectExpression, IReadOnlyDictionary <string, object> parametersValues) { var query = new InExpressionValuesExpandingExpressionVisitor( _sqlExpressionFactory, parametersValues).Visit(selectExpression); query = new FromSqlParameterApplyingExpressionVisitor( _sqlExpressionFactory, _parameterNameGeneratorFactory.Create(), parametersValues).Visit(query); return((SelectExpression)query); }