Represents an 'INSERT' database query.
Inheritance: DbQueryExpression
        /// <summary>
        /// Translates the <paramref name="insertExpression"/> into a string representation.
        /// </summary>
        /// <param name="insertExpression">The <see cref="DbInsertExpression"/> to translate.</param>
        /// <returns><see cref="DbExpression"/></returns>
        protected virtual DbExpression VisitInsertExpression(DbInsertExpression insertExpression)
        {
            var targetExpression  = Visit(insertExpression.Target);
            var fromExpression    = Visit(insertExpression.FromExpression);
            var valuesExpression  = Visit(insertExpression.Values);
            var columnsExpression = Visit(insertExpression.TargetColumns);

            if (!ReferenceEquals(targetExpression, insertExpression.Target))
            {
                insertExpression.Target = targetExpression;
            }
            if (!ReferenceEquals(fromExpression, insertExpression.FromExpression))
            {
                insertExpression.FromExpression = fromExpression;
            }
            if (!ReferenceEquals(valuesExpression, insertExpression.Values))
            {
                insertExpression.Values = valuesExpression;
            }
            if (!ReferenceEquals(columnsExpression, insertExpression.TargetColumns))
            {
                insertExpression.TargetColumns = columnsExpression;
            }
            return(insertExpression);
        }
        /// <summary>
        /// Translates the <paramref name="insertExpression"/> into a string representation.
        /// </summary>
        /// <param name="insertExpression">The <see cref="DbInsertExpression"/> to translate.</param>
        /// <returns><see cref="string"/></returns>
        protected override DbExpression VisitInsertExpression(DbInsertExpression insertExpression)
        {
            var sb = new StringBuilder();

            sb.AppendFormat("INSERT INTO {0} ", Visit(insertExpression.Target));
            if (!insertExpression.TargetColumns.IsNull())
            {
                sb.AppendFormat("({0}) ", Visit(insertExpression.TargetColumns));
            }

            if (!insertExpression.Values.IsNull())
            {
                sb.AppendFormat("VALUES({0}) ", Visit(insertExpression.Values));
            }

            return(ExpressionFactory.Sql(sb.ToString().Trim()));
        }
        /// <summary>
        /// Translates the <paramref name="insertExpression"/> into a string representation.
        /// </summary>
        /// <param name="insertExpression">The <see cref="DbInsertExpression"/> to translate.</param>
        /// <returns><see cref="string"/></returns>
        protected override DbExpression VisitInsertExpression(DbInsertExpression insertExpression)
        {
            var sb = new StringBuilder();
            sb.AppendFormat("INSERT INTO {0} ", Visit(insertExpression.Target));
            if (!insertExpression.TargetColumns.IsNull())
            {
                sb.AppendFormat("({0}) ", Visit(insertExpression.TargetColumns));
            }

            if (!insertExpression.Values.IsNull())
            {
                sb.AppendFormat("VALUES({0}) ", Visit(insertExpression.Values));
            }

            return ExpressionFactory.Sql(sb.ToString().Trim());
        }
        /// <summary>
        /// Translates the <paramref name="insertExpression"/> into a string representation.
        /// </summary>
        /// <param name="insertExpression">The <see cref="DbInsertExpression"/> to translate.</param>
        /// <returns><see cref="DbExpression"/></returns>
        protected virtual DbExpression VisitInsertExpression(DbInsertExpression insertExpression)
        {
            var targetExpression = Visit(insertExpression.Target);
            var fromExpression = Visit(insertExpression.FromExpression);
            var valuesExpression = Visit(insertExpression.Values);
            var columnsExpression = Visit(insertExpression.TargetColumns);

            if (!ReferenceEquals(targetExpression, insertExpression.Target))
                insertExpression.Target = targetExpression;
            if (!ReferenceEquals(fromExpression, insertExpression.FromExpression))
                insertExpression.FromExpression = fromExpression;
            if (!ReferenceEquals(valuesExpression, insertExpression.Values))
                insertExpression.Values = valuesExpression;
            if (!ReferenceEquals(columnsExpression, insertExpression.TargetColumns))
                insertExpression.TargetColumns = columnsExpression;
            return insertExpression;
        }