aboutsummaryrefslogtreecommitdiff
path: root/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs
diff options
context:
space:
mode:
Diffstat (limited to 'docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs')
-rw-r--r--docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs30
1 files changed, 30 insertions, 0 deletions
diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs
index 04d7f40..bf62df2 100644
--- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs
+++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs
@@ -189,4 +189,34 @@ CREATE TABLE {tableName}(
return result.ToString();
}
+
+ public string GenerateUpdateSql(WhereClause? whereClause, UpdateClause updateClause, out DynamicParameters parameters)
+ {
+ var relatedColumns = new HashSet<string>();
+ if (whereClause is not null)
+ relatedColumns.UnionWith(((IWhereClause)whereClause).GetRelatedColumns() ?? Enumerable.Empty<string>());
+ relatedColumns.UnionWith(updateClause.GetRelatedColumns());
+ foreach (var column in relatedColumns)
+ {
+ if (!ColumnNameList.Contains(column))
+ {
+ throw new ArgumentException($"Field {column} is not in the table.");
+ }
+ }
+
+ parameters = new DynamicParameters();
+
+ StringBuilder sb = new StringBuilder("UPDATE ");
+ sb.Append(TableName);
+ sb.Append(" SET ");
+ sb.Append(updateClause.GenerateSql(parameters));
+ if (whereClause is not null)
+ {
+ sb.Append(" WHERE ");
+ sb.Append(whereClause.GenerateSql(parameters));
+ }
+ sb.Append(';');
+
+ return sb.ToString();
+ }
} \ No newline at end of file