示例#1
0
 public override void Process(Expressions.UpdateDataExpression expression)
 {
     truncator.Truncate(expression);
     CheckColumn(expression.TableName, expression.Set.Select(x => x.Key));
     RegisterExpression <UpdateDataExpression>(expression);
     InternalProcess(Generator.Generate(expression));
 }
示例#2
0
        public override string Generate(Expressions.UpdateDataExpression expression)
        {
            var updateClauses = expression.Set.Aggregate(new StringBuilder(), (acc, newRow) =>
            {
                var accumulator = acc.Length == 0 ? string.Empty : ", ";
                return(acc.AppendFormat("{0}{1} = {2}", accumulator, Quoter.QuoteColumnName(newRow.Key), Quoter.QuoteValue(newRow.Value)));
            });

            if (expression.IsAllRows)
            {
                return(string.Format("UPDATE {0} SET {1}", Quoter.QuoteTableName(expression.TableName, expression.SchemaName), updateClauses));
            }

            var whereClauses = expression.Where.Aggregate(new StringBuilder(), (acc, rowVal) =>
            {
                var accumulator    = acc.Length == 0 ? string.Empty : " AND ";
                var clauseOperator = rowVal.Value == null || rowVal.Value == DBNull.Value ? "IS" : "=";

                return(acc.AppendFormat("{0}{1} {2} {3}", accumulator, Quoter.QuoteColumnName(rowVal.Key), clauseOperator, Quoter.QuoteValue(rowVal.Value)));
            });

            return(string.Format("UPDATE {0} SET {1} WHERE {2}", Quoter.QuoteTableName(expression.TableName, expression.SchemaName), updateClauses, whereClauses));
        }
示例#3
0
 public void Process(Expressions.UpdateDataExpression expression)
 {
     Process(Generator.Generate(expression));
 }