public override Expression VisitSqlSubStatementExpression (SqlSubStatementExpression expression)
{
var newExpression = base.VisitSqlSubStatementExpression (expression);
var newExpressionAsSqlSubStatementExpression = newExpression as SqlSubStatementExpression;
// Substatements returning a single value need to be moved to the FROM part of the SQL statement because they might return more than one column.
// Since a SqlSubStatementExpression must return a single row anyway, we can do this.
// (However, errors that would have arisen because the statement does not return exactly one row will not be found.)
if (newExpressionAsSqlSubStatementExpression != null
&& newExpressionAsSqlSubStatementExpression.SqlStatement.DataInfo is StreamedSingleValueInfo)
{
var sqlTable = newExpressionAsSqlSubStatementExpression.ConvertToSqlTable (Generator.GetUniqueIdentifier ("q"));
var sqlTableReferenceExpression = new SqlTableReferenceExpression (sqlTable);
Context.AddSqlTable (sqlTable, _sqlStatementBuilder);
return VisitExpression (sqlTableReferenceExpression);
}
return newExpression;
}
}