aboutsummaryrefslogtreecommitdiff
path: root/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/InsertClause.cs
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-12-06 11:58:37 +0800
committercrupest <crupest@outlook.com>2022-12-20 20:32:52 +0800
commita389635f5b6e1c6033e3dec80816370d396c39c8 (patch)
tree7c43ccfb134a2fc82bacb95d4b365419981632e6 /docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/InsertClause.cs
parentbb9a81e03d0b20dcea9b75e5145dee11f87d910e (diff)
downloadcrupest-a389635f5b6e1c6033e3dec80816370d396c39c8.tar.gz
crupest-a389635f5b6e1c6033e3dec80816370d396c39c8.tar.bz2
crupest-a389635f5b6e1c6033e3dec80816370d396c39c8.zip
Develop secret api. v13
Diffstat (limited to 'docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/InsertClause.cs')
-rw-r--r--docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/InsertClause.cs88
1 files changed, 88 insertions, 0 deletions
diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/InsertClause.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/InsertClause.cs
new file mode 100644
index 0000000..35b7cc9
--- /dev/null
+++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/InsertClause.cs
@@ -0,0 +1,88 @@
+using System.Text;
+using Dapper;
+
+namespace CrupestApi.Commons.Crud;
+
+public class InsertItem
+{
+ public InsertItem(string columnName, object? value)
+ {
+ ColumnName = columnName;
+ Value = value;
+ }
+
+ public InsertItem(KeyValuePair<string, object?> pair)
+ {
+ ColumnName = pair.Key;
+ Value = pair.Value;
+ }
+
+ public string ColumnName { get; set; }
+ public object? Value { get; set; }
+
+ public static implicit operator KeyValuePair<string, object?>(InsertItem item)
+ {
+ return new(item.ColumnName, item.Value);
+ }
+
+ public static implicit operator InsertItem(KeyValuePair<string, object?> pair)
+ {
+ return new(pair);
+ }
+}
+
+public class InsertClause
+{
+ public List<InsertItem> Items { get; } = new List<InsertItem>();
+
+ public InsertClause(IEnumerable<InsertItem> items)
+ {
+ Items.AddRange(items);
+ }
+
+ public InsertClause(params InsertItem[] items)
+ {
+ Items.AddRange(items);
+ }
+
+ public InsertClause Add(params InsertItem[] items)
+ {
+ Items.AddRange(items);
+ return this;
+ }
+
+ public InsertClause Add(string column, object? value)
+ {
+ return Add(new InsertItem(column, value));
+ }
+
+ public static InsertClause Create(params InsertItem[] items)
+ {
+ return new InsertClause(items);
+ }
+
+ public List<string> GetRelatedColumns()
+ {
+ return Items.Select(i => i.ColumnName).ToList();
+ }
+
+ public string GenerateColumnListSql()
+ {
+ return string.Join(", ", Items.Select(i => i.ColumnName));
+ }
+
+ public string GenerateValueListSql(DynamicParameters parameters)
+ {
+ var sb = new StringBuilder();
+ for (var i = 0; i < Items.Count; i++)
+ {
+ var item = Items[i];
+ var parameterName = parameters.AddRandomNameParameter(item.Value);
+ sb.Append($"@{parameterName}");
+ if (i != Items.Count - 1)
+ sb.Append(", ");
+ }
+
+ return sb.ToString();
+ }
+}