/// <summary> /// Generates the text for an Update builder. /// </summary> /// <param name="item">The item to generate the text for.</param> protected internal override void VisitUpdate(UpdateBuilder item) { forCommandType(CommandType.Update).visitUpdate(item); }
/// <summary> /// Visits a Update builder. /// </summary> /// <param name="item">The item to visit.</param> protected internal virtual void VisitUpdate(UpdateBuilder item) { }
private void visitUpdate(UpdateBuilder item) { if (!item.Setters.Any()) { throw new SQLGenerationException(Resources.NoSetters); } writer.Write("UPDATE "); forSourceContext(SourceReferenceType.Declaration).visitAliasedSource(item.Table); writer.Write(" SET "); forValueContext(ValueReferenceType.Reference).join(", ", item.Setters); if (item.WhereFilterGroup.HasFilters) { writer.Write(" WHERE "); IVisitableBuilder where = item.WhereFilterGroup; where.Accept(forSubCommand().forValueContext(ValueReferenceType.Reference)); } }
private void buildSetterList(MatchResult result, UpdateBuilder builder) { MatchResult multiple = result.Matches[SqlGrammar.SetterList.Multiple.Name]; if (multiple.IsMatch) { MatchResult first = multiple.Matches[SqlGrammar.SetterList.Multiple.First]; Setter setter = buildSetter(first); builder.AddSetter(setter); MatchResult remaining = multiple.Matches[SqlGrammar.SetterList.Multiple.Remaining]; buildSetterList(remaining, builder); return; } MatchResult single = result.Matches[SqlGrammar.SetterList.Single]; if (single.IsMatch) { Setter setter = buildSetter(single); builder.AddSetter(setter); return; } throw new InvalidOperationException(); }
private ICommand buildUpdateStatement(MatchResult result) { MatchResult tableResult = result.Matches[SqlGrammar.UpdateStatement.Table]; Table table = buildTable(tableResult); string alias = null; MatchResult aliasExpressionResult = result.Matches[SqlGrammar.UpdateStatement.AliasExpression.Name]; if (aliasExpressionResult.IsMatch) { MatchResult aliasResult = aliasExpressionResult.Matches[SqlGrammar.UpdateStatement.AliasExpression.Alias]; alias = getToken(aliasResult); } UpdateBuilder builder = new UpdateBuilder(table, alias); SourceCollection collection = new SourceCollection(); collection.AddSource(builder.Table.GetSourceName(), builder.Table); scope.Push(collection); MatchResult setterListResult = result.Matches[SqlGrammar.UpdateStatement.SetterList]; buildSetterList(setterListResult, builder); MatchResult whereResult = result.Matches[SqlGrammar.UpdateStatement.Where.Name]; if (whereResult.IsMatch) { MatchResult filterListResult = whereResult.Matches[SqlGrammar.UpdateStatement.Where.FilterList]; IFilter innerFilter = buildOrFilter(filterListResult); builder.WhereFilterGroup.AddFilter(innerFilter); builder.WhereFilterGroup.Optimize(); } scope.Pop(); return builder; }
public void TestUpdate_Where() { Table table = new Table("Table"); UpdateBuilder builder = new UpdateBuilder(table); builder.AddSetter(new Setter(builder.Table.Column("Column"), new NumericLiteral(1))); builder.AddWhere(new EqualToFilter(builder.Table.Column("Column"), new NumericLiteral(2))); Formatter formatter = new Formatter(); string commandText = formatter.GetCommandText(builder); string expected = "UPDATE Table SET Column = 1 WHERE Column = 2"; Assert.AreEqual(expected, commandText, "The wrong SQL was generated."); }
public void TestUpdate_MultipleSetters() { Table table = new Table("Table"); UpdateBuilder builder = new UpdateBuilder(table); builder.AddSetter(new Setter(builder.Table.Column("Column1"), new NumericLiteral(1))); builder.AddSetter(new Setter(builder.Table.Column("Column2"), new StringLiteral("Hello"))); Formatter formatter = new Formatter(); string commandText = formatter.GetCommandText(builder); string expected = "UPDATE Table SET Column1 = 1, Column2 = 'Hello'"; Assert.AreEqual(expected, commandText, "The wrong SQL was generated."); }
public void TestUpdate_AliasedTable_WithAs() { Table table = new Table("Table"); UpdateBuilder builder = new UpdateBuilder(table, "t"); builder.AddSetter(new Setter(builder.Table.Column("Column1"), new NumericLiteral(1))); builder.AddSetter(new Setter(builder.Table.Column("Column2"), new StringLiteral("Hello"))); Formatter formatter = new Formatter(); string commandText = formatter.GetCommandText(builder, new CommandOptions() { AliasColumnSourcesUsingAs = true }); string expected = "UPDATE Table AS t SET Column1 = 1, Column2 = 'Hello'"; Assert.AreEqual(expected, commandText, "The wrong SQL was generated."); }
protected override void VisitUpdate(UpdateBuilder item) { var visitor = new UpdateRequestBuilderVisitor(Parameters, CrmMetadataProvider, Settings); IVisitableBuilder visitable = item; visitable.Accept(visitor); SetOperation(visitor.GetCommand()); }