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

Commit d483fa4

Browse files
committed
Merge pull request #429 from vla/master
support multiple DialectProvider and ExecFilter of database access
2 parents 9e71480 + 360f5a3 commit d483fa4

15 files changed

+207
-70
lines changed

src/ServiceStack.OrmLite.Firebird/FirebirdSqlExpression.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ protected override object VisitBinary(BinaryExpression b)
3939
if (left as PartialSqlString == null && right as PartialSqlString == null)
4040
{
4141
var result = Expression.Lambda(b).Compile().DynamicInvoke();
42-
return new PartialSqlString(OrmLiteConfig.DialectProvider.GetQuotedValue(result, result.GetType()));
42+
return new PartialSqlString(base.DialectProvider.GetQuotedValue(result, result.GetType()));
4343
}
4444

4545
if (left as PartialSqlString == null)
@@ -59,10 +59,10 @@ protected override object VisitBinary(BinaryExpression b)
5959
//enum value was returned by Visit(b.Right)
6060
long numvericVal;
6161
if (Int64.TryParse(right.ToString(), out numvericVal))
62-
right = OrmLiteConfig.DialectProvider.GetQuotedValue(Enum.ToObject(enumType, numvericVal).ToString(),
62+
right = base.DialectProvider.GetQuotedValue(Enum.ToObject(enumType, numvericVal).ToString(),
6363
typeof(string));
6464
else
65-
right = OrmLiteConfig.DialectProvider.GetQuotedValue(right, right.GetType());
65+
right = base.DialectProvider.GetQuotedValue(right, right.GetType());
6666
}
6767
else if (right as EnumMemberAccess != null)
6868
{
@@ -71,20 +71,20 @@ protected override object VisitBinary(BinaryExpression b)
7171
//enum value was returned by Visit(b.Left)
7272
long numvericVal;
7373
if (Int64.TryParse(left.ToString(), out numvericVal))
74-
left = OrmLiteConfig.DialectProvider.GetQuotedValue(Enum.ToObject(enumType, numvericVal).ToString(),
74+
left = base.DialectProvider.GetQuotedValue(Enum.ToObject(enumType, numvericVal).ToString(),
7575
typeof(string));
7676
else
77-
left = OrmLiteConfig.DialectProvider.GetQuotedValue(left, left.GetType());
77+
left = base.DialectProvider.GetQuotedValue(left, left.GetType());
7878
}
7979
else if (left as PartialSqlString == null && right as PartialSqlString == null)
8080
{
8181
var result = Expression.Lambda(b).Compile().DynamicInvoke();
8282
return result;
8383
}
8484
else if (left as PartialSqlString == null)
85-
left = OrmLiteConfig.DialectProvider.GetQuotedValue(left, left != null ? left.GetType() : null);
85+
left = base.DialectProvider.GetQuotedValue(left, left != null ? left.GetType() : null);
8686
else if (right as PartialSqlString == null)
87-
right = OrmLiteConfig.DialectProvider.GetQuotedValue(right, right != null ? right.GetType() : null);
87+
right = base.DialectProvider.GetQuotedValue(right, right != null ? right.GetType() : null);
8888

8989
}
9090

@@ -117,7 +117,7 @@ protected override object VisitConstant(ConstantExpression c)
117117

118118
if (c.Value is bool)
119119
{
120-
object o = OrmLiteConfig.DialectProvider.GetQuotedValue(c.Value, c.Value.GetType());
120+
object o = base.DialectProvider.GetQuotedValue(c.Value, c.Value.GetType());
121121
return new PartialSqlString(string.Format("({0}={1})", GetQuotedTrueValue(), o));
122122
}
123123

src/ServiceStack.OrmLite.SqlServer/SqlServerExpression.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ public SqlServerExpression(IOrmLiteDialectProvider dialectProvider)
1010
public override string ToUpdateStatement(T item, bool excludeDefaults = false)
1111
{
1212
var setFields = new StringBuilder();
13-
var dialectProvider = OrmLiteConfig.DialectProvider;
1413

1514
foreach (var fieldDef in ModelDef.FieldDefinitions)
1615
{
@@ -27,12 +26,12 @@ public override string ToUpdateStatement(T item, bool excludeDefaults = false)
2726
setFields.Append(", ");
2827

2928
setFields.AppendFormat("{0}={1}",
30-
dialectProvider.GetQuotedColumnName(fieldDef.FieldName),
31-
dialectProvider.GetQuotedValue(value, fieldDef.FieldType));
29+
base.DialectProvider.GetQuotedColumnName(fieldDef.FieldName),
30+
base.DialectProvider.GetQuotedValue(value, fieldDef.FieldType));
3231
}
3332

3433
return string.Format("UPDATE {0} SET {1} {2}",
35-
dialectProvider.GetQuotedTableName(ModelDef), setFields, WhereExpression);
34+
base.DialectProvider.GetQuotedTableName(ModelDef), setFields, WhereExpression);
3635
}
3736
}
3837
}

src/ServiceStack.OrmLite.SqlServer/SqlServerOrmLiteDialectProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,7 @@ public override string ToSelectStatement(ModelDefinition modelDef,
409409
throw new ApplicationException("Malformed model, no PrimaryKey defined");
410410

411411
orderByExpression = string.Format("ORDER BY {0}",
412-
OrmLiteConfig.DialectProvider.GetQuotedColumnName(modelDef, modelDef.PrimaryKey));
412+
this.GetQuotedColumnName(modelDef, modelDef.PrimaryKey));
413413
}
414414

415415
var ret = string.Format(

src/ServiceStack.OrmLite.Sqlite/SqliteExpression.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ protected override object VisitSqlMethodCall(MethodCallExpression m)
6060
{
6161
sIn.AppendFormat("{0}{1}",
6262
sIn.Length > 0 ? "," : "",
63-
OrmLiteConfig.DialectProvider.GetQuotedValue(e, e.GetType()));
63+
base.DialectProvider.GetQuotedValue(e, e.GetType()));
6464
}
6565
statement = string.Format("{0} {1} ({2})", quotedColName, m.Method.Name, sIn);
6666
break;
@@ -69,7 +69,7 @@ protected override object VisitSqlMethodCall(MethodCallExpression m)
6969
break;
7070
case "As":
7171
statement = string.Format("{0} As {1}", quotedColName,
72-
OrmLiteConfig.DialectProvider.GetQuotedColumnName(RemoveQuoteFromAlias(args[0].ToString())));
72+
base.DialectProvider.GetQuotedColumnName(RemoveQuoteFromAlias(args[0].ToString())));
7373
break;
7474
case "Sum":
7575
case "Count":

src/ServiceStack.OrmLite/Async/OrmLiteResultsFilterExtensionsAsync.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ internal static Task<int> ExecNonQueryAsync(this IDbCommand dbCmd, string sql, o
2323
if (OrmLiteConfig.ResultsFilter != null)
2424
return OrmLiteConfig.ResultsFilter.ExecuteSql(dbCmd).InTask();
2525

26-
return OrmLiteConfig.DialectProvider.ExecuteNonQueryAsync(dbCmd, token);
26+
return dbCmd.GetDialectProvider().ExecuteNonQueryAsync(dbCmd, token);
2727
}
2828

2929
internal static Task<int> ExecNonQueryAsync(this IDbCommand dbCmd, string sql, IDictionary<string, object> dict, CancellationToken token)
@@ -36,15 +36,15 @@ internal static Task<int> ExecNonQueryAsync(this IDbCommand dbCmd, string sql, I
3636
if (OrmLiteConfig.ResultsFilter != null)
3737
return OrmLiteConfig.ResultsFilter.ExecuteSql(dbCmd).InTask();
3838

39-
return OrmLiteConfig.DialectProvider.ExecuteNonQueryAsync(dbCmd, token);
39+
return dbCmd.GetDialectProvider().ExecuteNonQueryAsync(dbCmd, token);
4040
}
4141

4242
internal static Task<int> ExecNonQueryAsync(this IDbCommand dbCmd, CancellationToken token)
4343
{
4444
if (OrmLiteConfig.ResultsFilter != null)
4545
return OrmLiteConfig.ResultsFilter.ExecuteSql(dbCmd).InTask();
4646

47-
return OrmLiteConfig.DialectProvider.ExecuteNonQueryAsync(dbCmd, token);
47+
return dbCmd.GetDialectProvider().ExecuteNonQueryAsync(dbCmd, token);
4848
}
4949

5050
public static Task<List<T>> ConvertToListAsync<T>(this IDbCommand dbCmd, string sql, CancellationToken token)
@@ -136,7 +136,7 @@ public static Task<object> ScalarAsync(this IDbCommand dbCmd, string sql, Cancel
136136
if (OrmLiteConfig.ResultsFilter != null)
137137
return OrmLiteConfig.ResultsFilter.GetScalar(dbCmd).InTask();
138138

139-
return OrmLiteConfig.DialectProvider.ExecuteScalarAsync(dbCmd, token);
139+
return dbCmd.GetDialectProvider().ExecuteScalarAsync(dbCmd, token);
140140
}
141141

142142
internal static Task<long> ExecLongScalarAsync(this IDbCommand dbCmd, string sql, CancellationToken token)

src/ServiceStack.OrmLite/Async/OrmLiteUtilExtensionsAsync.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public static Task<T> ConvertToAsync<T>(this IDataReader dataReader, IOrmLiteDia
2323
var fieldDefs = ModelDefinition<T>.Definition.AllFieldDefinitionsArray;
2424
using (dataReader)
2525
{
26-
return OrmLiteConfig.DialectProvider.ReaderRead(dataReader, () =>
26+
return dialectProvider.ReaderRead(dataReader, () =>
2727
{
2828
var row = CreateInstance<T>();
2929
var indexCache = dataReader.GetIndexFieldsCache(ModelDefinition<T>.Definition);
@@ -39,7 +39,7 @@ public static Task<List<T>> ConvertToListAsync<T>(this IDataReader dataReader, I
3939
using (dataReader)
4040
{
4141
var indexCache = dataReader.GetIndexFieldsCache(ModelDefinition<T>.Definition);
42-
return OrmLiteConfig.DialectProvider.ReaderEach(dataReader, () =>
42+
return dialectProvider.ReaderEach(dataReader, () =>
4343
{
4444
var row = CreateInstance<T>();
4545
row.PopulateWithSqlReader(dialectProvider, dataReader, fieldDefs, indexCache);
@@ -55,7 +55,7 @@ public static Task<object> ConvertToAsync(this IDataReader dataReader, IOrmLiteD
5555

5656
using (dataReader)
5757
{
58-
return OrmLiteConfig.DialectProvider.ReaderRead(dataReader, () =>
58+
return dialectProvider.ReaderRead(dataReader, () =>
5959
{
6060
var row = type.CreateInstance();
6161
var indexCache = dataReader.GetIndexFieldsCache(modelDef);
@@ -73,7 +73,7 @@ public static Task<IList> ConvertToListAsync(this IDataReader dataReader, IOrmLi
7373
using (dataReader)
7474
{
7575
var indexCache = dataReader.GetIndexFieldsCache(modelDef);
76-
return OrmLiteConfig.DialectProvider.ReaderEach(dataReader, () =>
76+
return dialectProvider.ReaderEach(dataReader, () =>
7777
{
7878
var row = type.CreateInstance();
7979
row.PopulateWithSqlReader(dialectProvider, dataReader, fieldDefs, indexCache);

src/ServiceStack.OrmLite/Async/OrmLiteWriteCommandExtensionsAsync.cs

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ internal static Task<int> ExecuteSqlAsync(this IDbCommand dbCmd, string sql, Can
3333
if (OrmLiteConfig.ResultsFilter != null)
3434
return OrmLiteConfig.ResultsFilter.ExecuteSql(dbCmd).InTask();
3535

36-
return OrmLiteConfig.DialectProvider.ExecuteNonQueryAsync(dbCmd);
36+
return dbCmd.GetDialectProvider().ExecuteNonQueryAsync(dbCmd);
3737
}
3838

3939
internal static Task<int> UpdateAsync<T>(this IDbCommand dbCmd, T obj, CancellationToken token)
@@ -70,7 +70,7 @@ internal static Task<int> UpdateAllAsync<T>(this IDbCommand dbCmd, IEnumerable<T
7070
if (dbCmd.Transaction == null)
7171
dbCmd.Transaction = dbTrans = dbCmd.Connection.BeginTransaction();
7272

73-
var dialectProvider = OrmLiteConfig.DialectProvider;
73+
var dialectProvider = dbCmd.GetDialectProvider();
7474

7575
var hadRowVersion = dialectProvider.PrepareParameterizedUpdateStatement<T>(dbCmd);
7676
if (string.IsNullOrEmpty(dbCmd.CommandText))
@@ -116,18 +116,20 @@ private static Task<int> AssertRowsUpdatedAsync(IDbCommand dbCmd, bool hadRowVer
116116

117117
internal static Task<int> DeleteAsync<T>(this IDbCommand dbCmd, object anonType, CancellationToken token)
118118
{
119-
var hadRowVersion = OrmLiteConfig.DialectProvider.PrepareParameterizedDeleteStatement<T>(dbCmd, anonType.AllFields<T>());
119+
var dialectProvider = dbCmd.GetDialectProvider();
120+
var hadRowVersion = dialectProvider.PrepareParameterizedDeleteStatement<T>(dbCmd, anonType.AllFields<T>());
120121

121-
OrmLiteConfig.DialectProvider.SetParameterValues<T>(dbCmd, anonType);
122+
dialectProvider.SetParameterValues<T>(dbCmd, anonType);
122123

123124
return AssertRowsUpdatedAsync(dbCmd, hadRowVersion, token);
124125
}
125126

126127
internal static Task<int> DeleteNonDefaultsAsync<T>(this IDbCommand dbCmd, T filter, CancellationToken token)
127128
{
128-
var hadRowVersion = OrmLiteConfig.DialectProvider.PrepareParameterizedDeleteStatement<T>(dbCmd, filter.NonDefaultFields<T>());
129+
var dialectProvider = dbCmd.GetDialectProvider();
130+
var hadRowVersion = dialectProvider.PrepareParameterizedDeleteStatement<T>(dbCmd, filter.NonDefaultFields<T>());
129131

130-
OrmLiteConfig.DialectProvider.SetParameterValues<T>(dbCmd, filter);
132+
dialectProvider.SetParameterValues<T>(dbCmd, filter);
131133

132134
return AssertRowsUpdatedAsync(dbCmd, hadRowVersion, token);
133135
}
@@ -156,7 +158,7 @@ private static Task<int> DeleteAllAsync<T>(IDbCommand dbCmd, ICollection<string>
156158
if (dbCmd.Transaction == null)
157159
dbCmd.Transaction = dbTrans = dbCmd.Connection.BeginTransaction();
158160

159-
var dialectProvider = OrmLiteConfig.DialectProvider;
161+
var dialectProvider = dbCmd.GetDialectProvider();
160162
dialectProvider.PrepareParameterizedDeleteStatement<T>(dbCmd, deleteFields);
161163

162164
return objs.EachAsync((obj, i) =>
@@ -212,7 +214,8 @@ internal static Task<int> DeleteAllAsync<T>(this IDbCommand dbCmd, CancellationT
212214

213215
internal static Task<int> DeleteAllAsync(this IDbCommand dbCmd, Type tableType, CancellationToken token)
214216
{
215-
return dbCmd.ExecuteSqlAsync(OrmLiteConfig.DialectProvider.ToDeleteStatement(tableType, null), token);
217+
var dialectProvider = dbCmd.GetDialectProvider();
218+
return dbCmd.ExecuteSqlAsync(dialectProvider.ToDeleteStatement(tableType, null), token);
216219
}
217220

218221
internal static Task<int> DeleteFmtAsync<T>(this IDbCommand dbCmd, CancellationToken token, string sqlFilter, params object[] filterParams)
@@ -222,19 +225,22 @@ internal static Task<int> DeleteFmtAsync<T>(this IDbCommand dbCmd, CancellationT
222225

223226
internal static Task<int> DeleteFmtAsync(this IDbCommand dbCmd, CancellationToken token, Type tableType, string sqlFilter, params object[] filterParams)
224227
{
225-
return dbCmd.ExecuteSqlAsync(OrmLiteConfig.DialectProvider.ToDeleteStatement(tableType, sqlFilter, filterParams), token);
228+
var dialectProvider = dbCmd.GetDialectProvider();
229+
return dbCmd.ExecuteSqlAsync(dialectProvider.ToDeleteStatement(tableType, sqlFilter, filterParams), token);
226230
}
227231

228232
internal static Task<long> InsertAsync<T>(this IDbCommand dbCmd, T obj, bool selectIdentity, CancellationToken token)
229233
{
230234
if (OrmLiteConfig.InsertFilter != null)
231235
OrmLiteConfig.InsertFilter(dbCmd, obj);
232236

233-
OrmLiteConfig.DialectProvider.PrepareParameterizedInsertStatement<T>(dbCmd);
234-
OrmLiteConfig.DialectProvider.SetParameterValues<T>(dbCmd, obj);
237+
var dialectProvider = dbCmd.GetDialectProvider();
238+
239+
dialectProvider.PrepareParameterizedInsertStatement<T>(dbCmd);
240+
dialectProvider.SetParameterValues<T>(dbCmd, obj);
235241

236242
if (selectIdentity)
237-
return OrmLiteConfig.DialectProvider.InsertAndGetLastInsertIdAsync<T>(dbCmd, token);
243+
return dialectProvider.InsertAndGetLastInsertIdAsync<T>(dbCmd, token);
238244

239245
return dbCmd.ExecNonQueryAsync(token).Then(i => (long)i);
240246
}
@@ -251,7 +257,7 @@ internal static Task InsertAllAsync<T>(this IDbCommand dbCmd, IEnumerable<T> obj
251257
if (dbCmd.Transaction == null)
252258
dbCmd.Transaction = dbTrans = dbCmd.Connection.BeginTransaction();
253259

254-
var dialectProvider = OrmLiteConfig.DialectProvider;
260+
var dialectProvider = dbCmd.GetDialectProvider();
255261

256262
dialectProvider.PrepareParameterizedInsertStatement<T>(dbCmd);
257263

@@ -290,8 +296,9 @@ internal static async Task<bool> SaveAsync<T>(this IDbCommand dbCmd, T obj, Canc
290296
{
291297
if (modelDef.HasAutoIncrementId)
292298
{
299+
293300
var newId = await dbCmd.InsertAsync(obj, selectIdentity: true, token:token);
294-
var safeId = OrmLiteConfig.DialectProvider.ConvertDbValue(newId, modelDef.PrimaryKey.FieldType);
301+
var safeId = dbCmd.GetDialectProvider().ConvertDbValue(newId, modelDef.PrimaryKey.FieldType);
295302
modelDef.PrimaryKey.SetValueFn(obj, safeId);
296303
id = newId;
297304
}
@@ -339,6 +346,8 @@ internal static async Task<int> SaveAllAsync<T>(this IDbCommand dbCmd, IEnumerab
339346
if (dbCmd.Transaction == null)
340347
dbCmd.Transaction = dbTrans = dbCmd.Connection.BeginTransaction();
341348

349+
var dialectProvider = dbCmd.GetDialectProvider();
350+
342351
try
343352
{
344353
foreach (var row in saveRows)
@@ -356,7 +365,7 @@ internal static async Task<int> SaveAllAsync<T>(this IDbCommand dbCmd, IEnumerab
356365
if (modelDef.HasAutoIncrementId)
357366
{
358367
var newId = await dbCmd.InsertAsync(row, selectIdentity: true, token:token);
359-
var safeId = OrmLiteConfig.DialectProvider.ConvertDbValue(newId, modelDef.PrimaryKey.FieldType);
368+
var safeId = dialectProvider.ConvertDbValue(newId, modelDef.PrimaryKey.FieldType);
360369
modelDef.PrimaryKey.SetValueFn(row, safeId);
361370
id = newId;
362371
}
@@ -482,7 +491,8 @@ public static async Task SaveReferencesAsync<T, TRef>(this IDbCommand dbCmd, Can
482491
// Procedures
483492
internal static Task ExecuteProcedureAsync<T>(this IDbCommand dbCommand, T obj, CancellationToken token)
484493
{
485-
string sql = OrmLiteConfig.DialectProvider.ToExecuteProcedureStatement(obj);
494+
var dialectProvider = dbCommand.GetDialectProvider();
495+
string sql = dialectProvider.ToExecuteProcedureStatement(obj);
486496
dbCommand.CommandType = CommandType.StoredProcedure;
487497
return dbCommand.ExecuteSqlAsync(sql, token);
488498
}

0 commit comments

Comments
 (0)