Skip to content

Commit ad73218

Browse files
committed
Code factorization
1 parent 50a06ac commit ad73218

1 file changed

Lines changed: 29 additions & 13 deletions

File tree

src/SqlCommandBuilder.cs

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public SqlCommandBuilder(IDbConnection connection) {
9696
var table = SqlMapper.Instance.GetTable<T>();
9797
var idColumn = table.IdentityColumn ?? throw new InvalidOperationException("The identity column could not be found.");
9898

99-
var parameter = new SqlParameter(UsePositionalParameters ? "?1" : GetParameterName(idColumn.Name), idColumn.GetValue(entity));
99+
var parameter = new SqlParameter(UsePositionalParameters ? "?1" : GetParameterName(idColumn), idColumn.GetValue(entity));
100100
var text = $"""
101101
DELETE FROM {GetTableName(table)}
102102
WHERE {QuoteIdentifier(idColumn.Name)} = {(UsePositionalParameters ? "?" : parameter.Name)}
@@ -116,7 +116,7 @@ public SqlCommandBuilder(IDbConnection connection) {
116116
var table = SqlMapper.Instance.GetTable<T>();
117117
var idColumn = table.IdentityColumn ?? throw new InvalidOperationException("The identity column could not be found.");
118118

119-
var parameter = new SqlParameter(UsePositionalParameters ? "?1" : GetParameterName(idColumn.Name), id);
119+
var parameter = new SqlParameter(UsePositionalParameters ? "?1" : GetParameterName(idColumn), id);
120120
var text = $"""
121121
SELECT 1
122122
FROM {GetTableName(table)}
@@ -145,7 +145,7 @@ SELECT 1
145145

146146
if (!fields.Contains(idColumn.Name)) fields.Add(idColumn.Name);
147147

148-
var parameter = new SqlParameter(UsePositionalParameters ? "?1" : GetParameterName(idColumn.Name), id);
148+
var parameter = new SqlParameter(UsePositionalParameters ? "?1" : GetParameterName(idColumn), id);
149149
var text = $"""
150150
SELECT {string.Join(", ", fields.Select(QuoteIdentifier))}
151151
FROM {GetTableName(table)}
@@ -169,11 +169,11 @@ SELECT 1
169169
var fields = table.Columns.Values.Where(column => column.CanRead && !column.IsComputed).ToArray();
170170
var text = $"""
171171
INSERT INTO {GetTableName(table)} ({string.Join(", ", fields.Select(field => QuoteIdentifier(field.Name)))})
172-
VALUES ({string.Join(", ", fields.Select(field => UsePositionalParameters ? "?" : GetParameterName(field.Name)))})
172+
VALUES ({string.Join(", ", fields.Select(field => UsePositionalParameters ? "?" : GetParameterName(field)))})
173173
{(SupportsReturningClause ? $"RETURNING {QuoteIdentifier(idColumn.Name)}" : $"; SELECT {LastInsertIdFunction};")}
174174
""";
175175

176-
return (text, [.. fields.Select((field, index) => (UsePositionalParameters ? $"?{index + 1}" : GetParameterName(field.Name), field.GetValue(entity)))]);
176+
return (text, [.. fields.Select((field, index) => (UsePositionalParameters ? $"?{index + 1}" : GetParameterName(field), field.GetValue(entity)))]);
177177
}
178178

179179
/// <summary>
@@ -194,13 +194,13 @@ SELECT 1
194194

195195
var text = $"""
196196
UPDATE {GetTableName(table)}
197-
SET {string.Join(", ", fields.Select(field => $"{QuoteIdentifier(field.Name)} = {(UsePositionalParameters ? "?" : GetParameterName(field.Name))}"))}
198-
WHERE {QuoteIdentifier(idColumn.Name)} = {(UsePositionalParameters ? "?" : GetParameterName(idColumn.Name))}
197+
SET {string.Join(", ", fields.Select(field => $"{QuoteIdentifier(field.Name)} = {(UsePositionalParameters ? "?" : GetParameterName(field))}"))}
198+
WHERE {QuoteIdentifier(idColumn.Name)} = {(UsePositionalParameters ? "?" : GetParameterName(idColumn))}
199199
""";
200200

201201
return (text, [
202-
.. fields.Select((field, index) => (UsePositionalParameters ? $"?{index + 1}" : GetParameterName(field.Name), field.GetValue(entity))),
203-
(GetParameterName(idColumn.Name), idColumn.GetValue(entity))
202+
.. fields.Select((field, index) => (UsePositionalParameters ? $"?{index + 1}" : GetParameterName(field), field.GetValue(entity))),
203+
(GetParameterName(idColumn), idColumn.GetValue(entity))
204204
]);
205205
}
206206

@@ -224,11 +224,27 @@ public string UnquoteIdentifier(string quotedIdentifier) {
224224
}
225225

226226
/// <summary>
227-
/// Returns the full parameter name corresponding to the specified partial parameter name.
227+
/// Returns the parameter name corresponding to the specified column.
228228
/// </summary>
229-
/// <param name="parameterName">The partial name of the parameter.</param>
230-
/// <returns>The full parameter name corresponding to the specified partial parameter name.</returns>
231-
private string GetParameterName(string parameterName) => $"{ParameterPrefix}{parameterName}";
229+
/// <param name="column">The column providing a parameter name.</param>
230+
/// <returns>The parameter name corresponding to the specified column.</returns>
231+
private string GetParameterName(DbColumnInfo column) => $"{ParameterPrefix}{column.Name}";
232+
233+
/// <summary>
234+
/// Returns the parameter value corresponding to th
235+
/// </summary>
236+
/// <typeparam name="T"></typeparam>
237+
/// <param name="column"></param>
238+
/// <param name="entity"></param>
239+
/// <returns></returns>
240+
private static object? GetParameterValue<T>(DbColumnInfo column, T entity) where T: new() {
241+
var value = column.GetValue(entity);
242+
if (!column.PropertyType.IsEnum) return column.GetValue(entity);
243+
return column.DbType switch {
244+
DbType.AnsiString or DbType.AnsiStringFixedLength or DbType.String or DbType.StringFixedLength => value?.ToString(),
245+
_ => value
246+
};
247+
}
232248

233249
/// <summary>
234250
/// Returns the fully qualified name corresponding to the specified table.

0 commit comments

Comments
 (0)