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

Commit 0d8f429

Browse files
committed
Convert SQL Server-specific JoinWithHint to generic Join overload with joinFormat
1 parent dcd80f0 commit 0d8f429

File tree

6 files changed

+56
-89
lines changed

6 files changed

+56
-89
lines changed

src/ServiceStack.OrmLite.SqlServer/ServiceStack.OrmLite.SqlServer.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@
103103
<Compile Include="SqlServerDialect.cs" />
104104
<Compile Include="SqlServerExpression.cs" />
105105
<Compile Include="Properties\AssemblyInfo.cs" />
106-
<Compile Include="SqlServerExpressionExtensions.cs" />
107106
<Compile Include="SqlServerOrmLiteDialectProvider.cs" />
108107
<Compile Include="SqlServerTableHint.cs" />
109108
</ItemGroup>

src/ServiceStack.OrmLite.SqlServer/SqlServerExpression.cs

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -29,33 +29,6 @@ public override SqlExpression<T> OrderByRandom()
2929
return base.OrderBy("NEWID()");
3030
}
3131

32-
public SqlExpression<T> JoinWithHint<Target>(Expression<Func<T, Target, bool>> joinExpr, string joinTableHint)
33-
{
34-
if (joinTableHint == null)
35-
{
36-
throw new ArgumentNullException("joinTableHint");
37-
}
38-
return InternalJoin("INNER JOIN", joinExpr, joinTableHint);
39-
}
40-
41-
public SqlExpression<T> LeftJoinWithHint<Target>(Expression<Func<T, Target, bool>> joinExpr, string joinTableHint)
42-
{
43-
if (joinTableHint == null)
44-
{
45-
throw new ArgumentNullException("joinTableHint");
46-
}
47-
return InternalJoin("LEFT JOIN", joinExpr, joinTableHint);
48-
}
49-
50-
public SqlExpression<T> RightJoinWithHint<Target>(Expression<Func<T, Target, bool>> joinExpr, string joinTableHint)
51-
{
52-
if (joinTableHint == null)
53-
{
54-
throw new ArgumentNullException("joinTableHint");
55-
}
56-
return InternalJoin("RIGHT JOIN", joinExpr, joinTableHint);
57-
}
58-
5932
protected override void ConvertToPlaceholderAndParameter(ref object right)
6033
{
6134
var paramName = Params.Count.ToString();

src/ServiceStack.OrmLite.SqlServer/SqlServerExpressionExtensions.cs

Lines changed: 0 additions & 35 deletions
This file was deleted.
Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,11 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Linq;
4-
using System.Text;
5-
using ServiceStack.DataAnnotations;
6-
7-
namespace ServiceStack.OrmLite.SqlServer
1+
namespace ServiceStack.OrmLite.SqlServer
82
{
93
public class SqlServerTableHint
104
{
11-
public const string ReadUncommitted = "WITH (READUNCOMMITTED)";
12-
public const string ReadCommitted = "WITH (READCOMMITTED)";
13-
public const string ReadPast = "WITH (READPAST)";
14-
public const string Serializable = "WITH (SERIALIZABLE)";
15-
public const string RepeatableRead = "WITH (REPEATABLEREAD)";
5+
public const string ReadUncommitted = "{0} WITH (READUNCOMMITTED) {1}";
6+
public const string ReadCommitted = "{0} WITH (READCOMMITTED) {1}";
7+
public const string ReadPast = "{0} WITH (READPAST) {1}";
8+
public const string Serializable = "{0} WITH (SERIALIZABLE) {1}";
9+
public const string RepeatableRead = "{0} WITH (REPEATABLEREAD) {1}";
1610
}
1711
}

src/ServiceStack.OrmLite.SqlServerTests/UseCase/JoinWithHintUseCase.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using NUnit.Framework;
88
using ServiceStack.DataAnnotations;
99
using ServiceStack.OrmLite.SqlServer;
10+
using ServiceStack.Text;
1011

1112
namespace ServiceStack.OrmLite.SqlServerTests.UseCase
1213
{
@@ -68,9 +69,10 @@ public void can_join_with_readuncommitted()
6869
InitTables(db);
6970

7071
var join = db.From<Car>()
71-
.JoinWithHint<Car, CarType>((l, r) => l.CarId == r.CarId, SqlServerTableHint.ReadUncommitted);
72+
.Join<Car, CarType>((l, r) => l.CarId == r.CarId, SqlServerTableHint.ReadUncommitted);
7273

7374
var selectStatement = join.ToSelectStatement();
75+
selectStatement.Print();
7476

7577
var data = db.Select<CarTypeJoin>(join);
7678

src/ServiceStack.OrmLite/Expressions/SqlExpression.Join.cs

Lines changed: 47 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,24 @@ public SqlExpression<T> Join<Target>(Expression<Func<T, Target, bool>> joinExpr
2121
return InternalJoin("INNER JOIN", joinExpr);
2222
}
2323

24+
public SqlExpression<T> Join<Target>(Expression<Func<T, Target, bool>> joinExpr, string joinFormat)
25+
{
26+
if (joinFormat == null)
27+
throw new ArgumentNullException("joinFormat");
28+
29+
return InternalJoin("INNER JOIN", joinExpr, joinFormat);
30+
}
31+
2432
public SqlExpression<T> Join<Source, Target>(Expression<Func<Source, Target, bool>> joinExpr = null)
2533
{
2634
return InternalJoin("INNER JOIN", joinExpr);
2735
}
2836

37+
public SqlExpression<T> Join<Source, Target>(Expression<Func<Source, Target, bool>> joinExpr, string joinFormat)
38+
{
39+
return InternalJoin("INNER JOIN", joinExpr, joinFormat);
40+
}
41+
2942
public SqlExpression<T> Join(Type sourceType, Type targetType, Expression joinExpr = null)
3043
{
3144
return InternalJoin("INNER JOIN", joinExpr, sourceType.GetModelDefinition(), targetType.GetModelDefinition());
@@ -36,11 +49,24 @@ public SqlExpression<T> LeftJoin<Target>(Expression<Func<T, Target, bool>> joinE
3649
return InternalJoin("LEFT JOIN", joinExpr);
3750
}
3851

52+
public SqlExpression<T> LeftJoin<Target>(Expression<Func<T, Target, bool>> joinExpr, string joinFormat)
53+
{
54+
if (joinFormat == null)
55+
throw new ArgumentNullException("joinFormat");
56+
57+
return InternalJoin("LEFT JOIN", joinExpr, joinFormat);
58+
}
59+
3960
public SqlExpression<T> LeftJoin<Source, Target>(Expression<Func<Source, Target, bool>> joinExpr = null)
4061
{
4162
return InternalJoin("LEFT JOIN", joinExpr);
4263
}
4364

65+
public SqlExpression<T> LeftJoin<Source, Target>(Expression<Func<Source, Target, bool>> joinExpr, string joinFormat)
66+
{
67+
return InternalJoin("LEFT JOIN", joinExpr, joinFormat);
68+
}
69+
4470
public SqlExpression<T> LeftJoin(Type sourceType, Type targetType, Expression joinExpr = null)
4571
{
4672
return InternalJoin("LEFT JOIN", joinExpr, sourceType.GetModelDefinition(), targetType.GetModelDefinition());
@@ -51,11 +77,24 @@ public SqlExpression<T> RightJoin<Target>(Expression<Func<T, Target, bool>> join
5177
return InternalJoin("RIGHT JOIN", joinExpr);
5278
}
5379

80+
public SqlExpression<T> RightJoin<Target>(Expression<Func<T, Target, bool>> joinExpr, string joinFormat)
81+
{
82+
if (joinFormat == null)
83+
throw new ArgumentNullException("joinFormat");
84+
85+
return InternalJoin("RIGHT JOIN", joinExpr, joinFormat);
86+
}
87+
5488
public SqlExpression<T> RightJoin<Source, Target>(Expression<Func<Source, Target, bool>> joinExpr = null)
5589
{
5690
return InternalJoin("RIGHT JOIN", joinExpr);
5791
}
5892

93+
public SqlExpression<T> RightJoin<Source, Target>(Expression<Func<Source, Target, bool>> joinExpr, string joinFormat)
94+
{
95+
return InternalJoin("RIGHT JOIN", joinExpr, joinFormat);
96+
}
97+
5998
public SqlExpression<T> FullJoin<Target>(Expression<Func<T, Target, bool>> joinExpr = null)
6099
{
61100
return InternalJoin("FULL JOIN", joinExpr);
@@ -76,12 +115,12 @@ public SqlExpression<T> CrossJoin<Source, Target>(Expression<Func<Source, Target
76115
return InternalJoin("CROSS JOIN", joinExpr);
77116
}
78117

79-
protected SqlExpression<T> InternalJoin<Source, Target>(string joinType, Expression<Func<Source, Target, bool>> joinExpr, string customJoinModifier = null)
118+
protected SqlExpression<T> InternalJoin<Source, Target>(string joinType, Expression<Func<Source, Target, bool>> joinExpr, string joinFormat = null)
80119
{
81120
var sourceDef = typeof(Source).GetModelDefinition();
82121
var targetDef = typeof(Target).GetModelDefinition();
83122

84-
return InternalJoin(joinType, joinExpr, sourceDef, targetDef, customJoinModifier);
123+
return InternalJoin(joinType, joinExpr, sourceDef, targetDef, joinFormat);
85124
}
86125

87126
private string InternalCreateSqlFromExpression(Expression joinExpr, bool isCrossJoin)
@@ -125,7 +164,7 @@ public SqlExpression<T> CustomJoin(string joinString)
125164
return this;
126165
}
127166

128-
private SqlExpression<T> InternalJoin(string joinType, Expression joinExpr, ModelDefinition sourceDef, ModelDefinition targetDef, string customJoinModifier = null)
167+
private SqlExpression<T> InternalJoin(string joinType, Expression joinExpr, ModelDefinition sourceDef, ModelDefinition targetDef, string joinFormat = null)
129168
{
130169
PrefixFieldWithTableName = true;
131170

@@ -145,17 +184,12 @@ private SqlExpression<T> InternalJoin(string joinType, Expression joinExpr, Mode
145184
: InternalCreateSqlFromDefinitions(sourceDef, targetDef, isCrossJoin);
146185

147186
var joinDef = tableDefs.Contains(targetDef) && !tableDefs.Contains(sourceDef)
148-
? sourceDef
149-
: targetDef;
187+
? sourceDef
188+
: targetDef;
150189

151-
if (customJoinModifier != null)
152-
{
153-
FromExpression += " {0} {1} {2} {3}".Fmt(joinType, SqlTable(joinDef), customJoinModifier, sqlExpr);
154-
}
155-
else
156-
{
157-
FromExpression += " {0} {1} {2}".Fmt(joinType, SqlTable(joinDef), sqlExpr);
158-
}
190+
FromExpression += joinFormat != null
191+
? " {0} {1}".Fmt(joinType, string.Format(joinFormat, SqlTable(joinDef), sqlExpr))
192+
: " {0} {1} {2}".Fmt(joinType, SqlTable(joinDef), sqlExpr);
159193

160194
return this;
161195
}

0 commit comments

Comments
 (0)