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

Commit f93f345

Browse files
committed
Fixed regression caused by last commit and fixed root issue.
1. Fixed previously existing issue in construction of Update command where AppendFieldCondition was being called instead of Field = Parameter. (line 767 in OrmLiteDialectProviderBase.cs) 2. Added a new virtual AppendNullFieldCondition method to OrmLiteDialectProviderBase.cs to handle Spatial null conditions. 3. Added AppendFieldCondition and AppendNullFieldCondition overrides to SqlServer2012OrmLiteDialectProvider. 4. Made dialect provider an optional parameter in the OpenDbConnection method in the SqlServerTests.
1 parent 281b48a commit f93f345

File tree

6 files changed

+64
-12
lines changed

6 files changed

+64
-12
lines changed

src/ServiceStack.OrmLite.SqlServer/SqlServer2012OrmLiteDialectProvider.cs

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using ServiceStack.Text;
1+
using System.Data;
2+
using System.Text;
3+
using ServiceStack.Text;
24

35
namespace ServiceStack.OrmLite.SqlServer
46
{
@@ -39,5 +41,40 @@ public override string ToSelectStatement(ModelDefinition modelDef,
3941

4042
return StringBuilderCache.ReturnAndFree(sb);
4143
}
44+
45+
public override void AppendFieldCondition(StringBuilder sqlFilter, FieldDefinition fieldDef, IDbCommand cmd)
46+
{
47+
if (!isSpatialField(fieldDef))
48+
{
49+
base.AppendFieldCondition(sqlFilter, fieldDef, cmd);
50+
}
51+
else
52+
{
53+
sqlFilter
54+
.Append(GetQuotedColumnName(fieldDef.FieldName))
55+
.Append(".STEquals(")
56+
.Append(this.GetParam(SanitizeFieldNameForParamName(fieldDef.FieldName)))
57+
.Append(") = 1");
58+
59+
AddParameter(cmd, fieldDef);
60+
}
61+
}
62+
63+
public override void AppendNullFieldCondition(StringBuilder sqlFilter, FieldDefinition fieldDef)
64+
{
65+
if (!isSpatialField(fieldDef))
66+
{
67+
base.AppendNullFieldCondition(sqlFilter, fieldDef);
68+
}
69+
else
70+
{
71+
sqlFilter
72+
.Append(GetQuotedColumnName(fieldDef.FieldName))
73+
.Append(".IsNull = 1");
74+
}
75+
}
76+
77+
private bool isSpatialField(FieldDefinition fieldDef) =>
78+
fieldDef.FieldType.Name == "SqlGeography" || fieldDef.FieldType.Name == "SqlGeometry";
4279
}
4380
}

src/ServiceStack.OrmLite.SqlServerTests/Converters/ConvertersOrmLiteTestBase.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,12 @@ public void Log(string text)
4040
Console.WriteLine(text);
4141
}
4242

43-
public virtual IDbConnection OpenDbConnection(string connString = null)
43+
public virtual IDbConnection OpenDbConnection(string connString = null, IOrmLiteDialectProvider dialectProvider = null)
4444
{
45+
dialectProvider = dialectProvider ?? OrmLiteConfig.DialectProvider;
4546
connString = connString ?? ConnectionString;
46-
return connString.OpenDbConnection();
47+
48+
return new OrmLiteConnectionFactory(connString, dialectProvider).OpenDbConnection();
4749
}
4850
}
4951
}

src/ServiceStack.OrmLite.SqlServerTests/Expressions/ExpressionsTestBase.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@ public void Setup()
1616
//Avoid painful refactor to change all tests to use a using pattern
1717
private IDbConnection db;
1818

19-
public override IDbConnection OpenDbConnection(string connString = null)
19+
public override IDbConnection OpenDbConnection(string connString = null, IOrmLiteDialectProvider dialectProvider = null)
2020
{
21+
dialectProvider = dialectProvider ?? OrmLiteConfig.DialectProvider;
22+
2123
if (db != null && db.State != ConnectionState.Open)
2224
db = null;
2325

24-
return db ?? (db = base.OpenDbConnection(connString));
26+
return db ?? (db = base.OpenDbConnection(connString, dialectProvider));
2527
}
2628

2729
[TearDown]

src/ServiceStack.OrmLite.SqlServerTests/Issues/DeleteWithGeoTypesIssue.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public void Can_delete_entity_with_Geo_Type()
3434
var bar = db.Single<ModelWithGeo>(x => x.Name == "Bar");
3535
db.SqlScalar<int>(
3636
"DELETE FROM ModelWithGeo WHERE Id=@Id AND Location.STEquals(@Location) = 1",
37-
new { bar.Id, bar.Name, bar.Location });
37+
new { Id = bar.Id, Location = bar.Location });
3838

3939
Assert.That(db.Select<ModelWithGeo>().Count, Is.EqualTo(2));
4040

src/ServiceStack.OrmLite.SqlServerTests/OrmLiteTestBase.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@ public void Log(string text)
2424
Console.WriteLine(text);
2525
}
2626

27-
public virtual IDbConnection OpenDbConnection(string connString = null)
27+
public virtual IDbConnection OpenDbConnection(string connString = null, IOrmLiteDialectProvider dialectProvider = null)
2828
{
29+
dialectProvider = dialectProvider ?? OrmLiteConfig.DialectProvider;
2930
connString = connString ?? ConnectionString;
30-
return connString.OpenDbConnection();
31+
return new OrmLiteConnectionFactory(connString, dialectProvider).OpenDbConnection();
3132
}
3233
}
3334
}

src/ServiceStack.OrmLite/OrmLiteDialectProviderBase.cs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -764,7 +764,12 @@ public virtual bool PrepareParameterizedUpdateStatement<T>(IDbCommand cmd, IColl
764764
if (sql.Length > 0)
765765
sql.Append(", ");
766766

767-
AppendFieldCondition(sql, fieldDef, cmd);
767+
sql
768+
.Append(GetQuotedColumnName(fieldDef.FieldName))
769+
.Append("=")
770+
.Append(this.GetParam(SanitizeFieldNameForParamName(fieldDef.FieldName)));
771+
772+
AddParameter(cmd, fieldDef);
768773
}
769774
catch (Exception ex)
770775
{
@@ -782,6 +787,13 @@ public virtual bool PrepareParameterizedUpdateStatement<T>(IDbCommand cmd, IColl
782787
return hadRowVesion;
783788
}
784789

790+
public virtual void AppendNullFieldCondition(StringBuilder sqlFilter, FieldDefinition fieldDef)
791+
{
792+
sqlFilter
793+
.Append(GetQuotedColumnName(fieldDef.FieldName))
794+
.Append(" IS NULL");
795+
}
796+
785797
public virtual void AppendFieldCondition(StringBuilder sqlFilter, FieldDefinition fieldDef, IDbCommand cmd)
786798
{
787799
sqlFilter
@@ -827,9 +839,7 @@ public virtual bool PrepareParameterizedDeleteStatement<T>(IDbCommand cmd, IDict
827839
}
828840
else
829841
{
830-
sqlFilter
831-
.Append(GetQuotedColumnName(fieldDef.FieldName))
832-
.Append(" IS NULL");
842+
AppendNullFieldCondition(sqlFilter, fieldDef);
833843
}
834844
}
835845
catch (Exception ex)

0 commit comments

Comments
 (0)