public virtual Expression VisitRawSqlDerivedTable(RawSqlDerivedTableExpression rawSqlDerivedTableExpression)
        {
            Check.NotNull(rawSqlDerivedTableExpression, nameof(rawSqlDerivedTableExpression));

            _sql.AppendLine("(");

            using (_sql.Indent())
            {
                var substitutions = new string[rawSqlDerivedTableExpression.Parameters.Length];

                for (var index = 0; index < substitutions.Length; index++)
                {
                    substitutions[index] =
                        _sqlGenerator.GenerateParameterName(
                            ParameterNameGenerator.GenerateNext());

                    _sql.AddParameter(
                        substitutions[index],
                        rawSqlDerivedTableExpression.Parameters[index]);
                }

                _sql.AppendLines(
                    // ReSharper disable once CoVariantArrayConversion
                    string.Format(rawSqlDerivedTableExpression.Sql, substitutions));
            }

            _sql.Append(") AS ")
            .Append(_sqlGenerator.DelimitIdentifier(rawSqlDerivedTableExpression.Alias));

            return(rawSqlDerivedTableExpression);
        }
        public virtual Expression VisitRawSqlDerivedTable(RawSqlDerivedTableExpression rawSqlDerivedTableExpression)
        {
            Check.NotNull(rawSqlDerivedTableExpression, nameof(rawSqlDerivedTableExpression));

            _sql.AppendLine("(");

            using (_sql.Indent())
            {
                var substitutions = new object[rawSqlDerivedTableExpression.Parameters.Count()];

                for (var index = 0; index < rawSqlDerivedTableExpression.Parameters.Count(); index++)
                {
                    var parameterName = ParameterPrefix + "p" + _rawSqlParameterIndex++;
                    var value         = rawSqlDerivedTableExpression.Parameters[index];

                    _commandParameters.Add(
                        new CommandParameter(parameterName, value, TypeMapper.GetDefaultMapping(value)));

                    substitutions[index] = parameterName;
                }

                _sql.AppendLines(string.Format(
                                     rawSqlDerivedTableExpression.Sql,
                                     substitutions));
            }

            _sql.Append(") AS ")
            .Append(DelimitIdentifier(rawSqlDerivedTableExpression.Alias));

            return(rawSqlDerivedTableExpression);
        }
        public virtual Expression VisitRawSqlDerivedTableExpression([NotNull] RawSqlDerivedTableExpression rawSqlDerivedTableExpression)
        {
            Check.NotNull(rawSqlDerivedTableExpression, nameof(rawSqlDerivedTableExpression));

            _sql.AppendLine("(");

            using (_sql.Indent())
            {
                var substitutions = new string[rawSqlDerivedTableExpression.Parameters.Count()];

                for (var index = 0; index < rawSqlDerivedTableExpression.Parameters.Count(); index++)
                {
                    var parameterName = "p" + index;

                    _parameters.Add(parameterName);
                    _parameterValues.Add(parameterName, rawSqlDerivedTableExpression.Parameters[index]);
                    substitutions[index] = ParameterPrefix + parameterName;
                }

                _sql.AppendLines(string.Format(
                                     rawSqlDerivedTableExpression.Sql,
                                     substitutions));
            }

            _sql.Append(") AS ")
            .Append(DelimitIdentifier(rawSqlDerivedTableExpression.Alias));

            return(rawSqlDerivedTableExpression);
        }