forked from ThatRendle/Simple.Data
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUpdateHelper.cs
More file actions
54 lines (45 loc) · 1.93 KB
/
UpdateHelper.cs
File metadata and controls
54 lines (45 loc) · 1.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Simple.Data.Ado.Schema;
namespace Simple.Data.Ado
{
using Extensions;
internal class UpdateHelper
{
private readonly DatabaseSchema _schema;
private readonly ICommandBuilder _commandBuilder;
private readonly IExpressionFormatter _expressionFormatter;
public UpdateHelper(DatabaseSchema schema)
{
_schema = schema;
_commandBuilder = new CommandBuilder(schema);
_expressionFormatter = new ExpressionFormatter(_commandBuilder, _schema);
}
public ICommandBuilder GetUpdateCommand(string tableName, IDictionary<string, object> data, SimpleExpression criteria)
{
_commandBuilder.Append(GetUpdateClause(tableName, data));
if (criteria != null )
{
var whereStatement = _expressionFormatter.Format(criteria);
if (!string.IsNullOrEmpty(whereStatement))
_commandBuilder.Append(" where " + whereStatement);
}
return _commandBuilder;
}
private string GetUpdateClause(string tableName, IEnumerable<KeyValuePair<string, object>> data)
{
var table = _schema.FindTable(tableName);
var setClause = string.Join(", ",
data.Where(kvp => table.HasColumn(kvp.Key))
.Select(kvp => CreateColumnUpdateClause(kvp.Key, kvp.Value, table)));
return string.Format("update {0} set {1}", table.QualifiedName, setClause);
}
private string CreateColumnUpdateClause(string columnName, object value, Table table)
{
var column = table.FindColumn(columnName);
return string.Format("{0} = {1}", column.QuotedName, _commandBuilder.AddParameter(value, column).Name);
}
}
}