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

Commit f5ab11e

Browse files
committed
Allow ORMLite Extensions to be used without global dialect provider.
When attempting to use ORMLite extensions against and OrmLiteConnection an ArgumentNullException was thrown when calling to SqlFmt as the global provider was not set. Using SqlFmt overload that accepts the current dialect provider stops the ArgumentNullException.
1 parent 76af08e commit f5ab11e

File tree

3 files changed

+75
-7
lines changed

3 files changed

+75
-7
lines changed

src/ServiceStack.OrmLite.SqlServer/SqlServerOrmLiteDialectProvider.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,10 @@ public void EnsureUtc(bool shouldEnsureUtc)
114114
public override bool DoesTableExist(IDbCommand dbCmd, string tableName, string schema = null)
115115
{
116116
var sql = "SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = {0}"
117-
.SqlFmt(tableName);
117+
.SqlFmt(this, tableName);
118118

119119
if (schema != null)
120-
sql += " AND TABLE_SCHEMA = {0}".SqlFmt(schema);
120+
sql += " AND TABLE_SCHEMA = {0}".SqlFmt(this, schema);
121121

122122
var result = dbCmd.ExecLongScalar(sql);
123123

@@ -127,7 +127,7 @@ public override bool DoesTableExist(IDbCommand dbCmd, string tableName, string s
127127
public override bool DoesColumnExist(IDbConnection db, string columnName, string tableName, string schema = null)
128128
{
129129
var sql = "SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tableName AND COLUMN_NAME = @columnName"
130-
.SqlFmt(tableName, columnName);
130+
.SqlFmt(this, tableName, columnName);
131131

132132
if (schema != null)
133133
sql += " AND TABLE_SCHEMA = @schema";
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
using System.Configuration;
2+
using NUnit.Framework;
3+
using ServiceStack.DataAnnotations;
4+
using ServiceStack.OrmLite.SqlServer;
5+
6+
namespace ServiceStack.OrmLite.SqlServerTests
7+
{
8+
public class TypedExtensionTests
9+
{
10+
public class TestDao
11+
{
12+
[PrimaryKey]
13+
public int Id { get; set; }
14+
15+
public string Thing { get; set; }
16+
}
17+
18+
private IOrmLiteDialectProvider provider;
19+
private OrmLiteConnectionFactory factory;
20+
21+
[OneTimeSetUp]
22+
public void Setup()
23+
{
24+
provider = new SqlServer2014OrmLiteDialectProvider();
25+
factory = new OrmLiteConnectionFactory(ConfigurationManager.ConnectionStrings["testDb"].ConnectionString, provider, false);
26+
}
27+
28+
[OneTimeTearDown]
29+
public void Teardown()
30+
{
31+
OrmLiteConfig.DialectProvider = provider;
32+
33+
using (var connection = factory.OpenDbConnection())
34+
{
35+
if (connection.TableExists<TestDao>())
36+
{
37+
connection.DropTable<TestDao>();
38+
}
39+
}
40+
}
41+
42+
[Test]
43+
public void GivenAnOrmLiteTypedConnectionFactory_WhenUsingOrmLiteExtensionsAndGlobalProviderNotSet_ThenArgumentNullExceptionIsNotThrown()
44+
{
45+
using (var connection = factory.OpenDbConnection())
46+
{
47+
Assert.That(() =>
48+
{
49+
connection.CreateTableIfNotExists<TestDao>();
50+
51+
var dao = new TestDao {Id = 1, Thing = "Thing"};
52+
53+
connection.Insert(dao);
54+
connection.SingleById<TestDao>(1);
55+
56+
dao.Thing = "New Thing";
57+
58+
connection.Update(dao, d => d.Id == dao.Id);
59+
60+
connection.Delete(dao);
61+
62+
connection.DropTable<TestDao>();
63+
64+
}, Throws.Nothing);
65+
}
66+
}
67+
}
68+
}

src/ServiceStack.OrmLite/OrmLiteDialectProviderBase.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,7 @@ public virtual string ToSelectStatement(Type tableType, string sqlFilter, params
503503
&& sqlFilter.TrimStart().StartsWith(SelectStatement, StringComparison.OrdinalIgnoreCase);
504504

505505
if (isFullSelectStatement)
506-
return sqlFilter.SqlFmt(filterParams);
506+
return sqlFilter.SqlFmt(this, filterParams);
507507

508508
var modelDef = tableType.GetModelDefinition();
509509
var sql = StringBuilderCache.Allocate();
@@ -512,7 +512,7 @@ public virtual string ToSelectStatement(Type tableType, string sqlFilter, params
512512
if (string.IsNullOrEmpty(sqlFilter))
513513
return StringBuilderCache.ReturnAndFree(sql);
514514

515-
sqlFilter = sqlFilter.SqlFmt(filterParams);
515+
sqlFilter = sqlFilter.SqlFmt(this, filterParams);
516516
if (!sqlFilter.StartsWith("ORDER ", StringComparison.OrdinalIgnoreCase)
517517
&& !sqlFilter.StartsWith("LIMIT ", StringComparison.OrdinalIgnoreCase))
518518
{
@@ -1184,15 +1184,15 @@ public virtual string ToDeleteStatement(Type tableType, string sqlFilter, params
11841184
&& sqlFilter.Substring(0, deleteStatement.Length).ToUpper().Equals(deleteStatement);
11851185

11861186
if (isFullDeleteStatement)
1187-
return sqlFilter.SqlFmt(filterParams);
1187+
return sqlFilter.SqlFmt(this, filterParams);
11881188

11891189
var modelDef = tableType.GetModelDefinition();
11901190
sql.Append($"DELETE FROM {GetQuotedTableName(modelDef)}");
11911191

11921192
if (string.IsNullOrEmpty(sqlFilter))
11931193
return StringBuilderCache.ReturnAndFree(sql);
11941194

1195-
sqlFilter = sqlFilter.SqlFmt(filterParams);
1195+
sqlFilter = sqlFilter.SqlFmt(this, filterParams);
11961196
sql.Append(" WHERE ");
11971197
sql.Append(sqlFilter);
11981198

0 commit comments

Comments
 (0)