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

Commit 76af08e

Browse files
committed
fix sql generation when params have $ chars
1 parent f1fa681 commit 76af08e

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

src/ServiceStack.OrmLite/OrmLiteDialectProviderBase.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -757,7 +757,10 @@ public virtual string MergeParamsIntoSql(string sql, IEnumerable<IDbDataParamete
757757
var quotedValue = dbParam.Value != null
758758
? GetQuotedValue(dbParam.Value, dbParam.Value.GetType())
759759
: "null";
760-
sql = Regex.Replace(sql, dbParam.ParameterName + @"(,|\s|\)|$)", quotedValue + "$1");
760+
761+
var pattern = dbParam.ParameterName + @"(,|\s|\)|$)";
762+
var replacement = quotedValue.Replace("$", "$$") + "$1";
763+
sql = Regex.Replace(sql, pattern, replacement);
761764
}
762765
return sql;
763766
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using NUnit.Framework;
2+
using ServiceStack.Common.Tests.Models;
3+
4+
namespace ServiceStack.OrmLite.Tests.Issues
5+
{
6+
public class GeneratedSqlIssues : OrmLiteTestBase
7+
{
8+
public GeneratedSqlIssues() : base(Dialect.SqlServer2012) {}
9+
10+
[Test]
11+
public void Does_generate_valid_sql_when_param_contains_dollar_char()
12+
{
13+
using (var db = OpenDbConnection())
14+
{
15+
var model = new Poco
16+
{
17+
Id = 1,
18+
Name = "Guest$"
19+
};
20+
21+
var sql = db.ToUpdateStatement(model);
22+
Assert.That(sql, Is.EqualTo("UPDATE \"Poco\" SET \"Name\"='Guest$' WHERE \"Id\"=1"));
23+
}
24+
25+
}
26+
27+
}
28+
}

0 commit comments

Comments
 (0)