diff options
author | crupest <crupest@outlook.com> | 2024-11-11 01:12:29 +0800 |
---|---|---|
committer | Yuqian Yang <crupest@crupest.life> | 2024-12-19 21:42:01 +0800 |
commit | f9aa02ec1a4c24e80a206857d4f68198bb027bb4 (patch) | |
tree | 5994f0a62733b13f9f330e3515260ae20dc4a0bd /dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs | |
parent | 7b4d49e4bbdff6ddf1f8f7e937130e700024d5e9 (diff) | |
download | crupest-f9aa02ec1a4c24e80a206857d4f68198bb027bb4.tar.gz crupest-f9aa02ec1a4c24e80a206857d4f68198bb027bb4.tar.bz2 crupest-f9aa02ec1a4c24e80a206857d4f68198bb027bb4.zip |
HALF WORK: 2024.12.19
Re-organize file structure.
Diffstat (limited to 'dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs')
-rw-r--r-- | dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs b/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs new file mode 100644 index 0000000..de5c6c3 --- /dev/null +++ b/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs @@ -0,0 +1,77 @@ +using System.Text; + +namespace CrupestApi.Commons.Crud; + +public class UpdateItem +{ + public UpdateItem(string columnName, object? value) + { + ColumnName = columnName; + Value = value; + } + + public string ColumnName { get; set; } + public object? Value { get; set; } +} + +public interface IUpdateClause : IClause +{ + List<UpdateItem> Items { get; } + (string sql, ParamList parameters) GenerateSql(); +} + +public class UpdateClause : IUpdateClause +{ + public List<UpdateItem> Items { get; } = new List<UpdateItem>(); + + public UpdateClause(IEnumerable<UpdateItem> items) + { + Items.AddRange(items); + } + + public UpdateClause(params UpdateItem[] items) + { + Items.AddRange(items); + } + + public UpdateClause Add(params UpdateItem[] items) + { + Items.AddRange(items); + return this; + } + + public UpdateClause Add(string column, object? value) + { + return Add(new UpdateItem(column, value)); + } + + public static UpdateClause Create(params UpdateItem[] items) + { + return new UpdateClause(items); + } + + public List<string> GetRelatedColumns() + { + return Items.Select(i => i.ColumnName).ToList(); + } + + public (string sql, ParamList parameters) GenerateSql() + { + var parameters = new ParamList(); + + StringBuilder result = new StringBuilder(); + + foreach (var item in Items) + { + if (result.Length > 0) + { + result.Append(", "); + } + + var parameterName = parameters.AddRandomNameParameter(item.Value, item.ColumnName); + result.Append($"{item.ColumnName} = @{parameterName}"); + } + + return (result.ToString(), parameters); + } +} |