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

Commit 4a5a74c

Browse files
committed
Use Schema in SqlExpressions
1 parent b7bdf80 commit 4a5a74c

File tree

5 files changed

+81
-9
lines changed

5 files changed

+81
-9
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,17 +107,17 @@ private SqlExpression<T> InternalJoin(string joinType,
107107
}
108108

109109
sqlExpr = "\n({0}.{1} = {2}.{3})".Fmt(
110-
SqlTable(parentDef.ModelName),
110+
DialectProvider.GetQuotedTableName(parentDef),
111111
SqlColumn(parentDef.PrimaryKey.FieldName),
112-
SqlTable(childDef.ModelName),
112+
DialectProvider.GetQuotedTableName(childDef),
113113
SqlColumn(refField.FieldName));
114114
}
115115

116116
var joinDef = tableDefs.Contains(targetDef) && !tableDefs.Contains(sourceDef)
117117
? sourceDef
118118
: targetDef;
119119

120-
sbJoin.Append(" {0} {1} ".Fmt(joinType, SqlTable(joinDef.ModelName)));
120+
sbJoin.Append(" {0} {1} ".Fmt(joinType, SqlTable(joinDef)));
121121
sbJoin.Append(" ON ");
122122
sbJoin.Append(sqlExpr);
123123

@@ -155,7 +155,7 @@ public string SelectInto<TModel>()
155155
sbSelect.Append(", ");
156156

157157
sbSelect.AppendFormat("{0}.{1}",
158-
SqlTable(tableDef.ModelName),
158+
SqlTable(tableDef),
159159
tableFieldDef.GetQuotedName(DialectProvider));
160160
break;
161161
}

src/ServiceStack.OrmLite/Expressions/SqlExpression.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -597,9 +597,9 @@ public virtual SqlExpression<T> Insert()
597597
return this;
598598
}
599599

600-
public string SqlTable(string tableName)
600+
public string SqlTable(ModelDefinition modelDef)
601601
{
602-
return DialectProvider.GetQuotedTableName(tableName);
602+
return DialectProvider.GetQuotedTableName(modelDef);
603603
}
604604

605605
public string SqlColumn(string columnName)
@@ -1174,7 +1174,7 @@ protected virtual string GetQuotedColumnName(ModelDefinition tableDef, string me
11741174
: memberName;
11751175

11761176
return PrefixFieldWithTableName
1177-
? DialectProvider.GetQuotedColumnName(tableDef.ModelName, fieldName)
1177+
? DialectProvider.GetQuotedColumnName(tableDef, fieldName)
11781178
: DialectProvider.GetQuotedColumnName(fieldName);
11791179
}
11801180
return memberName;

src/ServiceStack.OrmLite/OrmLiteDialectProviderExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ public static string GetQuotedColumnName(this IOrmLiteDialectProvider dialect,
4242
}
4343

4444
public static string GetQuotedColumnName(this IOrmLiteDialectProvider dialect,
45-
string tableName, string fieldName)
45+
ModelDefinition tableDef, string fieldName)
4646
{
47-
return dialect.GetQuotedTableName(tableName) +
47+
return dialect.GetQuotedTableName(tableDef) +
4848
"." +
4949
dialect.GetQuotedColumnName(fieldName);
5050
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
using NUnit.Framework;
2+
using ServiceStack.DataAnnotations;
3+
using ServiceStack.Logging;
4+
5+
namespace ServiceStack.OrmLite.Tests.Issues
6+
{
7+
[TestFixture]
8+
public class SchemaTests : OrmLiteTestBase
9+
{
10+
public SchemaTests()
11+
{
12+
Dialect = Dialect.Sqlite; //Other DB Providers needs creating out-of-band
13+
}
14+
15+
[Schema("Schema")]
16+
public class SchemaTable1
17+
{
18+
public int Id { get; set; }
19+
20+
public int SchemaTable2Id { get; set; }
21+
22+
[Reference]
23+
public SchemaTable2 Child { get; set; }
24+
}
25+
26+
[Schema("Schema")]
27+
public class SchemaTable2
28+
{
29+
[AutoIncrement]
30+
public int Id { get; set; }
31+
32+
public string Name { get; set; }
33+
}
34+
35+
[Test]
36+
public void Can_join_on_table_with_schemas()
37+
{
38+
LogManager.LogFactory = new ConsoleLogFactory(debugEnabled: true);
39+
40+
using (var db = OpenDbConnection())
41+
{
42+
db.DropAndCreateTable<SchemaTable1>();
43+
db.DropAndCreateTable<SchemaTable2>();
44+
45+
db.Save(new SchemaTable1
46+
{
47+
Id = 1,
48+
Child = new SchemaTable2 { Name = "Foo" }
49+
}, references:true);
50+
51+
db.Save(new SchemaTable1
52+
{
53+
Id = 2,
54+
Child = new SchemaTable2 { Name = "Bar" }
55+
}, references: true);
56+
57+
var rows = db.Select<SchemaTable1>(q => q.Join<SchemaTable2>());
58+
Assert.That(rows.Count, Is.EqualTo(2));
59+
rows = db.Select<SchemaTable1>(q => q.Join<SchemaTable2>()
60+
.Where<SchemaTable2>(x => x.Name == "Foo"));
61+
Assert.That(rows.Count, Is.EqualTo(1));
62+
63+
rows = db.Select<SchemaTable1>(q => q.LeftJoin<SchemaTable2>());
64+
Assert.That(rows.Count, Is.EqualTo(2));
65+
rows = db.Select<SchemaTable1>(q => q.LeftJoin<SchemaTable2>()
66+
.Where<SchemaTable2>(x => x.Name == "Foo"));
67+
Assert.That(rows.Count, Is.EqualTo(1));
68+
}
69+
}
70+
}
71+
}

tests/ServiceStack.OrmLite.Tests/ServiceStack.OrmLite.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@
127127
<Compile Include="Expression\SelectExpressionTests.cs" />
128128
<Compile Include="Issues\MismatchSchemaTests.cs" />
129129
<Compile Include="Issues\MultithreadingIssueTests.cs" />
130+
<Compile Include="Issues\SchemaTests.cs" />
130131
<Compile Include="Issues\SelectIntoTests.cs" />
131132
<Compile Include="LicenseUsageTests.cs" />
132133
<Compile Include="LoadReferencesJoinTests.cs" />

0 commit comments

Comments
 (0)