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

Commit c0ca11f

Browse files
committed
Refactor DbScripts to include useDb PageResult global to change default conn
1 parent 83ce0e7 commit c0ca11f

File tree

2 files changed

+84
-16
lines changed

2 files changed

+84
-16
lines changed

src/ServiceStack.OrmLite/DbScripts.cs

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ public class TemplateDbFilters : DbScripts {}
1111

1212
public class DbScripts : ScriptMethods
1313
{
14+
private const string DbInfo = "__dbinfo"; // Keywords.DbInfo
15+
private const string DbConnection = "__dbconnection"; // useDbConnection global
16+
1417
private IDbConnectionFactory dbFactory;
1518
public IDbConnectionFactory DbFactory
1619
{
@@ -19,22 +22,53 @@ public IDbConnectionFactory DbFactory
1922
}
2023

2124
public IDbConnection OpenDbConnection(ScriptScopeContext scope, Dictionary<string, object> options)
25+
{
26+
var dbConn = OpenDbConnectionFromOptions(options);
27+
if (dbConn != null)
28+
return dbConn;
29+
30+
if (scope.PageResult != null)
31+
{
32+
if (scope.PageResult.Args.TryGetValue(DbInfo, out var oDbInfo) && oDbInfo is ConnectionInfo dbInfo)
33+
return DbFactory.OpenDbConnection(dbInfo);
34+
35+
if (scope.PageResult.Args.TryGetValue(DbConnection, out var oDbConn) && oDbConn is Dictionary<string, object> globalDbConn)
36+
return OpenDbConnectionFromOptions(globalDbConn);
37+
}
38+
39+
return DbFactory.OpenDbConnection();
40+
}
41+
42+
public IgnoreResult useDb(ScriptScopeContext scope, Dictionary<string, object> dbConnOptions)
43+
{
44+
if (dbConnOptions != null)
45+
{
46+
if (!dbConnOptions.ContainsKey("connectionString") && !dbConnOptions.ContainsKey("namedConnection"))
47+
throw new NotSupportedException(nameof(useDb) + " requires either 'connectionString' or 'namedConnection' property");
48+
49+
scope.PageResult.Args[DbConnection] = dbConnOptions;
50+
}
51+
return IgnoreResult.Value;
52+
}
53+
54+
private IDbConnection OpenDbConnectionFromOptions(Dictionary<string, object> options)
2255
{
2356
if (options != null)
2457
{
2558
if (options.TryGetValue("connectionString", out var connectionString))
59+
{
2660
return options.TryGetValue("providerName", out var providerName)
27-
? DbFactory.OpenDbConnectionString((string)connectionString, (string)providerName)
28-
: DbFactory.OpenDbConnectionString((string)connectionString);
29-
61+
? DbFactory.OpenDbConnectionString((string) connectionString, (string) providerName)
62+
: DbFactory.OpenDbConnectionString((string) connectionString);
63+
}
64+
3065
if (options.TryGetValue("namedConnection", out var namedConnection))
31-
return DbFactory.OpenDbConnection((string)namedConnection);
66+
{
67+
return DbFactory.OpenDbConnection((string) namedConnection);
68+
}
3269
}
33-
34-
if (scope.PageResult != null && scope.PageResult.Args.TryGetValue("__dbinfo", out var oDbInfo) && oDbInfo is ConnectionInfo dbInfo) // Keywords.DbInfo
35-
return DbFactory.OpenDbConnection(dbInfo);
3670

37-
return DbFactory.OpenDbConnection();
71+
return null;
3872
}
3973

4074
T exec<T>(Func<IDbConnection, T> fn, ScriptScopeContext scope, object options)

src/ServiceStack.OrmLite/DbScriptsAsync.cs

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ public class TemplateDbFiltersAsync : DbScriptsAsync {}
1212

1313
public class DbScriptsAsync : ScriptMethods
1414
{
15+
private const string DbInfo = "__dbinfo"; // Keywords.DbInfo
16+
private const string DbConnection = "__dbconnection"; // useDbConnection global
17+
1518
private IDbConnectionFactory dbFactory;
1619
public IDbConnectionFactory DbFactory
1720
{
@@ -20,22 +23,53 @@ public IDbConnectionFactory DbFactory
2023
}
2124

2225
public async Task<IDbConnection> OpenDbConnectionAsync(ScriptScopeContext scope, Dictionary<string, object> options)
26+
{
27+
var dbConn = await OpenDbConnectionFromOptionsAsync(options);
28+
if (dbConn != null)
29+
return dbConn;
30+
31+
if (scope.PageResult != null)
32+
{
33+
if (scope.PageResult.Args.TryGetValue(DbInfo, out var oDbInfo) && oDbInfo is ConnectionInfo dbInfo)
34+
return await DbFactory.OpenDbConnectionAsync(dbInfo);
35+
36+
if (scope.PageResult.Args.TryGetValue(DbConnection, out var oDbConn) && oDbConn is Dictionary<string, object> globalDbConn)
37+
return await OpenDbConnectionFromOptionsAsync(globalDbConn);
38+
}
39+
40+
return await DbFactory.OpenAsync();
41+
}
42+
43+
public IgnoreResult useDb(ScriptScopeContext scope, Dictionary<string, object> dbConnOptions)
44+
{
45+
if (dbConnOptions != null)
46+
{
47+
if (!dbConnOptions.ContainsKey("connectionString") && !dbConnOptions.ContainsKey("namedConnection"))
48+
throw new NotSupportedException(nameof(useDb) + " requires either 'connectionString' or 'namedConnection' property");
49+
50+
scope.PageResult.Args[DbConnection] = dbConnOptions;
51+
}
52+
return IgnoreResult.Value;
53+
}
54+
55+
private async Task<IDbConnection> OpenDbConnectionFromOptionsAsync(Dictionary<string, object> options)
2356
{
2457
if (options != null)
2558
{
2659
if (options.TryGetValue("connectionString", out var connectionString))
60+
{
2761
return options.TryGetValue("providerName", out var providerName)
28-
? await DbFactory.OpenDbConnectionStringAsync((string)connectionString, (string)providerName)
29-
: await DbFactory.OpenDbConnectionStringAsync((string)connectionString);
30-
62+
? await DbFactory.OpenDbConnectionStringAsync((string) connectionString, (string) providerName)
63+
: await DbFactory.OpenDbConnectionStringAsync((string) connectionString);
64+
}
65+
3166
if (options.TryGetValue("namedConnection", out var namedConnection))
32-
return await DbFactory.OpenDbConnectionAsync((string)namedConnection);
67+
{
68+
return await DbFactory.OpenDbConnectionStringAsync((string) namedConnection);
69+
}
3370
}
34-
35-
if (scope.PageResult != null && scope.PageResult.Args.TryGetValue("__dbinfo", out var oDbInfo) && oDbInfo is ConnectionInfo dbInfo) // Keywords.DbInfo
36-
return await DbFactory.OpenDbConnectionAsync(dbInfo);
3771

38-
return await DbFactory.OpenAsync();
72+
return null;
3973
}
4074

4175
async Task<object> exec<T>(Func<IDbConnection, Task<T>> fn, ScriptScopeContext scope, object options)

0 commit comments

Comments
 (0)