public SqlStatement VisitSqlStatement (SqlStatement sqlStatement, SqlExpressionContext expressionContext)
{
ArgumentUtility.CheckNotNull ("sqlStatement", sqlStatement);
if (expressionContext == SqlExpressionContext.PredicateRequired)
throw new InvalidOperationException ("A SqlStatement cannot be used as a predicate.");
var statementBuilder = new SqlStatementBuilder (sqlStatement);
var newSelectProjection = _stage.ApplyContext (sqlStatement.SelectProjection, expressionContext, _mappingResolutionContext);
statementBuilder.SelectProjection = newSelectProjection;
statementBuilder.RecalculateDataInfo (sqlStatement.SelectProjection);
var newSqlStatement = statementBuilder.GetSqlStatement();
return newSqlStatement.Equals (sqlStatement) ? sqlStatement : newSqlStatement;
}