aboutsummaryrefslogtreecommitdiff
path: root/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2024-11-11 01:12:29 +0800
committerYuqian Yang <crupest@crupest.life>2024-12-19 21:42:01 +0800
commitf9aa02ec1a4c24e80a206857d4f68198bb027bb4 (patch)
tree5994f0a62733b13f9f330e3515260ae20dc4a0bd /dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/UpdateClause.cs
parent7b4d49e4bbdff6ddf1f8f7e937130e700024d5e9 (diff)
downloadcrupest-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.cs77
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);
+ }
+}