Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 2f48a9c

Browse files
committed
Add support for CustomInsert,CustomUpdate attributes
1 parent 9fe24ea commit 2f48a9c

File tree

14 files changed

+141
-36
lines changed

14 files changed

+141
-36
lines changed

src/ServiceStack.OrmLite.Firebird/Firebird4OrmLiteDialectProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ public override void PrepareParameterizedInsertStatement<T>(IDbCommand cmd, ICol
214214
}
215215
else
216216
{
217-
sbColumnValues.Append(this.GetParam(SanitizeFieldNameForParamName(fieldDef.FieldName)));
217+
sbColumnValues.Append(this.GetParam(SanitizeFieldNameForParamName(fieldDef.FieldName),fieldDef.CustomInsert));
218218
AddParameter(cmd, fieldDef);
219219
}
220220
}

src/ServiceStack.OrmLite.Firebird/FirebirdOrmLiteDialectProvider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ public override void PrepareParameterizedInsertStatement<T>(IDbCommand cmd, ICol
240240
}
241241
else
242242
{
243-
sbColumnValues.Append(this.GetParam(SanitizeFieldNameForParamName(fieldDef.FieldName)));
243+
sbColumnValues.Append(this.GetParam(SanitizeFieldNameForParamName(fieldDef.FieldName),fieldDef.CustomInsert));
244244
AddParameter(cmd, fieldDef);
245245
}
246246
}
@@ -297,7 +297,7 @@ public override void PrepareUpdateRowStatement(IDbCommand dbCmd, object objWithP
297297
sql
298298
.Append(GetQuotedColumnName(fieldDef.FieldName))
299299
.Append("=")
300-
.Append(this.AddUpdateParam(dbCmd, fieldDef.GetValue(objWithProperties), fieldDef).ParameterName);
300+
.Append(this.GetUpdateParam(dbCmd, fieldDef.GetValue(objWithProperties), fieldDef));
301301
}
302302

303303
var strFilter = StringBuilderCacheAlt.ReturnAndFree(sqlFilter);

src/ServiceStack.OrmLite.Oracle/OracleOrmLiteDialectProvider.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ public override void PrepareParameterizedInsertStatement<T>(IDbCommand dbCommand
312312
try
313313
{
314314
sbColumnNames.Append(GetQuotedColumnName(fieldDef.FieldName));
315-
sbColumnValues.Append(this.GetParam(SanitizeFieldNameForParamName(fieldDef.FieldName)));
315+
sbColumnValues.Append(this.GetParam(SanitizeFieldNameForParamName(fieldDef.FieldName),fieldDef.CustomInsert));
316316

317317
AddParameter(dbCommand, fieldDef);
318318
}
@@ -419,9 +419,9 @@ public override string ToInsertRowStatement(IDbCommand dbCommand, object objWith
419419

420420
try
421421
{
422-
sbColumnNames.Append(string.Format("{0}", GetQuotedColumnName(fieldDef.FieldName)));
422+
sbColumnNames.Append($"{GetQuotedColumnName(fieldDef.FieldName)}");
423423
if (!string.IsNullOrEmpty(fieldDef.Sequence) && dbCommand == null)
424-
sbColumnValues.Append(string.Format(":{0}", fieldDef.Name));
424+
sbColumnValues.Append($":{fieldDef.Name}");
425425
else
426426
sbColumnValues.Append(fieldDef.GetQuotedValue(objWithProperties));
427427
}
@@ -476,7 +476,7 @@ public override void PrepareUpdateRowStatement(IDbCommand dbCmd, object objWithP
476476
sql
477477
.Append(GetQuotedColumnName(fieldDef.FieldName))
478478
.Append("=")
479-
.Append(this.AddUpdateParam(dbCmd, fieldDef.GetValue(objWithProperties), fieldDef).ParameterName);
479+
.Append(this.GetUpdateParam(dbCmd, fieldDef.GetValue(objWithProperties), fieldDef));
480480
}
481481

482482
var strFilter = StringBuilderCacheAlt.ReturnAndFree(sqlFilter);

src/ServiceStack.OrmLite.PostgreSQL/PostgreSQLDialectProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ public override void PrepareParameterizedInsertStatement<T>(IDbCommand cmd, ICol
317317
{
318318
sbColumnNames.Append(GetQuotedColumnName(fieldDef.FieldName));
319319

320-
sbColumnValues.Append(this.GetParam(SanitizeFieldNameForParamName(fieldDef.FieldName)));
320+
sbColumnValues.Append(this.GetParam(SanitizeFieldNameForParamName(fieldDef.FieldName),fieldDef.CustomInsert));
321321
AddParameter(cmd, fieldDef);
322322
}
323323
catch (Exception ex)

src/ServiceStack.OrmLite.SqlServer/SqlServerExpression.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,10 @@ internal static void PrepareSqlServerUpdateStatement<T>(IDbCommand dbCmd, SqlExp
9393
if (setFields.Length > 0)
9494
setFields.Append(", ");
9595

96-
var param = dialectProvider.AddUpdateParam(dbCmd, value, fieldDef);
9796
setFields
9897
.Append(dialectProvider.GetQuotedColumnName(fieldDef.FieldName))
9998
.Append("=")
100-
.Append(param.ParameterName);
99+
.Append(dialectProvider.GetUpdateParam(dbCmd, value, fieldDef));
101100
}
102101

103102
var strFields = StringBuilderCache.ReturnAndFree(setFields);

src/ServiceStack.OrmLite.SqlServer/SqlServerOrmLiteDialectProvider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@ public override void PrepareParameterizedInsertStatement<T>(IDbCommand cmd, ICol
443443
}
444444
else
445445
{
446-
sbColumnValues.Append(this.GetParam(SanitizeFieldNameForParamName(fieldDef.FieldName)));
446+
sbColumnValues.Append(this.GetParam(SanitizeFieldNameForParamName(fieldDef.FieldName),fieldDef.CustomInsert));
447447
AddParameter(cmd, fieldDef);
448448
}
449449
}
@@ -505,7 +505,7 @@ public override void PrepareInsertRowStatement<T>(IDbCommand dbCmd, Dictionary<s
505505
try
506506
{
507507
sbColumnNames.Append(GetQuotedColumnName(fieldDef.FieldName));
508-
sbColumnValues.Append(this.AddUpdateParam(dbCmd, value, fieldDef).ParameterName);
508+
sbColumnValues.Append(this.GetInsertParam(dbCmd, value, fieldDef));
509509
}
510510
catch (Exception ex)
511511
{

src/ServiceStack.OrmLite.VistaDB/VistaDBExpression.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,10 @@ public override void PrepareUpdateStatement(IDbCommand dbCmd, T item, bool exclu
3131
if (setFields.Length > 0)
3232
setFields.Append(", ");
3333

34-
var param = DialectProvider.AddUpdateParam(dbCmd, value, fieldDef);
3534
setFields
3635
.Append(DialectProvider.GetQuotedColumnName(fieldDef.FieldName))
3736
.Append("=")
38-
.Append(param.ParameterName);
37+
.Append(DialectProvider.GetUpdateParam(dbCmd, value, fieldDef));
3938
}
4039

4140
var strFields = StringBuilderCache.ReturnAndFree(setFields);

src/ServiceStack.OrmLite/Expressions/SqlExpression.cs

Lines changed: 45 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -521,20 +521,18 @@ public virtual SqlExpression<T> AddCondition(string condition, string sqlFilter,
521521
return AppendToWhere(condition, FormatFilter(sqlFilter.SqlVerifyFragment(), filterParams));
522522
}
523523

524-
public virtual SqlExpression<T> Where(Expression<Func<T, bool>> predicate)
525-
{
526-
return AppendToWhere("AND", predicate);
527-
}
524+
public virtual SqlExpression<T> Where(Expression<Func<T, bool>> predicate) => AppendToWhere("AND", predicate);
525+
public virtual SqlExpression<T> Where(Expression<Func<T, bool>> predicate, params object[] filterParams) =>
526+
AppendToWhere("AND", predicate, filterParams);
528527

529-
public virtual SqlExpression<T> And(Expression<Func<T, bool>> predicate)
530-
{
531-
return AppendToWhere("AND", predicate);
532-
}
528+
public virtual SqlExpression<T> And(Expression<Func<T, bool>> predicate) => AppendToWhere("AND", predicate);
529+
public virtual SqlExpression<T> And(Expression<Func<T, bool>> predicate, params object[] filterParams) =>
530+
AppendToWhere("AND", predicate, filterParams);
533531

534-
public virtual SqlExpression<T> Or(Expression<Func<T, bool>> predicate)
535-
{
536-
return AppendToWhere("OR", predicate);
537-
}
532+
public virtual SqlExpression<T> Or(Expression<Func<T, bool>> predicate) => AppendToWhere("OR", predicate);
533+
534+
public virtual SqlExpression<T> Or(Expression<Func<T, bool>> predicate, params object[] filterParams) =>
535+
AppendToWhere("OR", predicate, filterParams);
538536

539537
private LambdaExpression originalLambda;
540538

@@ -545,6 +543,18 @@ void Reset(string sep = " ", bool useFieldName = true)
545543
this.originalLambda = null;
546544
}
547545

546+
protected SqlExpression<T> AppendToWhere(string condition, Expression predicate, object[] filterParams)
547+
{
548+
if (predicate == null)
549+
return this;
550+
551+
Reset();
552+
553+
var newExpr = WhereExpressionToString(Visit(predicate));
554+
var formatExpr = FormatFilter(newExpr, filterParams);
555+
return AppendToWhere(condition, formatExpr);
556+
}
557+
548558
protected SqlExpression<T> AppendToWhere(string condition, Expression predicate)
549559
{
550560
if (predicate == null)
@@ -1326,7 +1336,7 @@ public virtual void PrepareUpdateStatement(IDbCommand dbCmd, T item, bool exclud
13261336
setFields
13271337
.Append(DialectProvider.GetQuotedColumnName(fieldDef.FieldName))
13281338
.Append("=")
1329-
.Append(DialectProvider.AddUpdateParam(dbCmd, value, fieldDef).ParameterName);
1339+
.Append(DialectProvider.GetUpdateParam(dbCmd, value, fieldDef));
13301340
}
13311341

13321342
if (setFields.Length == 0)
@@ -1368,7 +1378,7 @@ public virtual void PrepareUpdateStatement(IDbCommand dbCmd, Dictionary<string,
13681378
setFields
13691379
.Append(DialectProvider.GetQuotedColumnName(fieldDef.FieldName))
13701380
.Append("=")
1371-
.Append(DialectProvider.AddUpdateParam(dbCmd, value, fieldDef).ParameterName);
1381+
.Append(DialectProvider.GetUpdateParam(dbCmd, value, fieldDef));
13721382
}
13731383

13741384
if (setFields.Length == 0)
@@ -3177,6 +3187,27 @@ public static IDbDataParameter AddParam(this IOrmLiteDialectProvider dialectProv
31773187
return parameter;
31783188
}
31793189

3190+
public static string GetInsertParam(this IOrmLiteDialectProvider dialectProvider,
3191+
IDbCommand dbCmd,
3192+
object value,
3193+
FieldDefinition fieldDef)
3194+
{
3195+
var p = dialectProvider.AddUpdateParam(dbCmd, value, fieldDef);
3196+
return fieldDef.CustomInsert != null
3197+
? string.Format(fieldDef.CustomInsert, p.ParameterName)
3198+
: p.ParameterName;
3199+
}
3200+
3201+
public static string GetUpdateParam(this IOrmLiteDialectProvider dialectProvider,
3202+
IDbCommand dbCmd,
3203+
object value,
3204+
FieldDefinition fieldDef)
3205+
{
3206+
var p = dialectProvider.AddUpdateParam(dbCmd, value, fieldDef);
3207+
return fieldDef.CustomUpdate != null
3208+
? string.Format(fieldDef.CustomUpdate, p.ParameterName)
3209+
: p.ParameterName;
3210+
}
31803211
}
31813212
}
31823213

src/ServiceStack.OrmLite/Expressions/WriteExpressionCommandExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ internal static bool PrepareUpdateAnonSql<T>(this IDbCommand dbCmd, IOrmLiteDial
327327
sql
328328
.Append(dialectProvider.GetQuotedColumnName(fieldDef.FieldName))
329329
.Append("=")
330-
.Append(dialectProvider.AddUpdateParam(dbCmd, value, fieldDef).ParameterName);
330+
.Append(dialectProvider.GetUpdateParam(dbCmd, value, fieldDef));
331331
}
332332

333333
dbCmd.CommandText = $"UPDATE {dialectProvider.GetQuotedTableName(modelDef)} " +

src/ServiceStack.OrmLite/FieldDefinition.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ public string GetQuotedValue(object fromInstance, IOrmLiteDialectProvider dialec
116116
public string ComputeExpression { get; set; }
117117

118118
public string CustomSelect { get; set; }
119+
public string CustomInsert { get; set; }
120+
public string CustomUpdate { get; set; }
119121

120122
public bool RequiresAlias => Alias != null || CustomSelect != null;
121123

0 commit comments

Comments
 (0)