public override DbExpression Visit(DbUpdateExpression exp)
        {
            this._sqlBuilder.Append("UPDATE ");
            this.AppendTable(exp.Table);
            this._sqlBuilder.Append(" SET ");

            bool first = true;

            foreach (var item in exp.UpdateColumns)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    this._sqlBuilder.Append(",");
                }

                this.QuoteName(item.Key.Name);
                this._sqlBuilder.Append("=");

                DbExpression valExp = DbExpressionExtension.StripInvalidConvert(item.Value);
                AmendDbInfo(item.Key, valExp);
                DbValueExpressionTransformer.Transform(valExp).Accept(this);
            }

            this.BuildWhereState(exp.Condition);

            return(exp);
        }
        public override DbExpression Visit(DbInsertExpression exp)
        {
            string separator = "";

            this._sqlBuilder.Append("INSERT INTO ");
            this.AppendTable(exp.Table);
            this._sqlBuilder.Append("(");

            separator = "";
            foreach (var item in exp.InsertColumns)
            {
                this._sqlBuilder.Append(separator);
                this.QuoteName(item.Key.Name);
                separator = ",";
            }

            this._sqlBuilder.Append(")");

            this._sqlBuilder.Append(" VALUES(");
            separator = "";
            foreach (var item in exp.InsertColumns)
            {
                this._sqlBuilder.Append(separator);

                DbExpression valExp = DbExpressionExtension.StripInvalidConvert(item.Value);
                AmendDbInfo(item.Key, valExp);
                DbValueExpressionTransformer.Transform(valExp).Accept(this);
                separator = ",";
            }

            this._sqlBuilder.Append(")");

            if (exp.Returns.Count > 0)
            {
                this._sqlBuilder.Append(" returning ");
                separator = "";
                foreach (DbColumn returnColumn in exp.Returns)
                {
                    this._sqlBuilder.Append(separator);
                    this.QuoteName(returnColumn.Name);
                    separator = ",";
                }
            }

            return(exp);
        }
 internal void AppendColumnSegment(DbColumnSegment seg)
 {
     DbValueExpressionTransformer.Transform(seg.Body).Accept(this);
     this._sqlBuilder.Append(" AS ");
     this.QuoteName(seg.Alias);
 }