aboutsummaryrefslogtreecommitdiff
path: root/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/InsertClause.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/InsertClause.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/InsertClause.cs')
-rw-r--r--dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/InsertClause.cs77
1 files changed, 77 insertions, 0 deletions
diff --git a/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/InsertClause.cs b/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/InsertClause.cs
new file mode 100644
index 0000000..a880e66
--- /dev/null
+++ b/dropped/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/InsertClause.cs
@@ -0,0 +1,77 @@
+using System.Text;
+
+namespace CrupestApi.Commons.Crud;
+
+public class InsertItem
+{
+ /// <summary>
+ /// Null means use default value. Use <see cref="DbNullValue"/>.
+ /// </summary>
+ public InsertItem(string columnName, object? value)
+ {
+ ColumnName = columnName;
+ Value = value;
+ }
+
+ public string ColumnName { get; set; }
+ public object? Value { get; set; }
+}
+
+public interface IInsertClause : IClause
+{
+ List<InsertItem> Items { get; }
+ string GenerateColumnListSql(string? dbProviderId = null);
+ (string sql, ParamList parameters) GenerateValueListSql(string? dbProviderId = null);
+}
+
+public class InsertClause : IInsertClause
+{
+ public List<InsertItem> Items { get; } = new List<InsertItem>();
+
+ 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(string? dbProviderId = null)
+ {
+ return string.Join(", ", Items.Select(i => i.ColumnName));
+ }
+
+ public (string sql, ParamList parameters) GenerateValueListSql(string? dbProviderId = null)
+ {
+ var parameters = new ParamList();
+ var sb = new StringBuilder();
+ for (var i = 0; i < Items.Count; i++)
+ {
+ var item = Items[i];
+ var parameterName = parameters.AddRandomNameParameter(item.Value, item.ColumnName);
+ sb.Append($"@{parameterName}");
+ if (i != Items.Count - 1)
+ sb.Append(", ");
+ }
+
+ return (sb.ToString(), parameters);
+ }
+}