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

Commit 50dd79b

Browse files
committed
Update to add preferred API and add LoadAsync test
1 parent 259c7ce commit 50dd79b

File tree

3 files changed

+131
-5
lines changed

3 files changed

+131
-5
lines changed

src/ServiceStack.OrmLite/Support/LoadList.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,7 @@ protected void SetListChildResults(FieldDefinition fieldDef, Type refType, IList
9090
protected string GetRefSelfSql(FieldDefinition refSelf, ModelDefinition refModelDef)
9191
{
9292
//Load Self Table.RefTableId PK
93-
StringBuilder sbSelect = new StringBuilder();
94-
sbSelect.AppendFormat("{0}.{1}",
95-
dialectProvider.GetQuotedTableName(refModelDef),
96-
refSelf.GetQuotedName(dialectProvider));
97-
expr.Select(sbSelect.ToString());
93+
expr.Select(dialectProvider.GetQuotedColumnName(refModelDef, refSelf));
9894
var subSqlRef = expr.ToSelectStatement();
9995

10096
var sqlRef = "SELECT {0} FROM {1} WHERE {2} IN ({3})".Fmt(
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
using NUnit.Framework;
4+
using ServiceStack.DataAnnotations;
5+
using ServiceStack.Model;
6+
using ServiceStack.Text;
7+
8+
namespace ServiceStack.OrmLite.Tests.Issues
9+
{
10+
//[Schema("dbo")]
11+
[Alias("Project")]
12+
public class Project : IHasId<int>
13+
{
14+
[Alias("ProjectId")]
15+
[Index(Unique = true)]
16+
[AutoIncrement]
17+
public int Id { get; set; }
18+
19+
[Required]
20+
[References(typeof(Department))]
21+
public int DepartmentId { get; set; }
22+
[Reference]
23+
public Department Department { get; set; }
24+
25+
[Required]
26+
public string ProjectName { get; set; }
27+
[Required]
28+
public bool IsArchived { get; set; }
29+
[Required]
30+
public DateTime CreatedOn { get; set; }
31+
}
32+
33+
public class Department
34+
{
35+
[Alias("DepartmentId")]
36+
[Index(Unique = true)]
37+
[AutoIncrement]
38+
public int Id { get; set; }
39+
40+
public string Name { get; set; }
41+
}
42+
43+
[Alias("ProjectTask")]
44+
public class ProjectTask : IHasId<int>
45+
{
46+
[Alias("ProjectTaskId")]
47+
[Index(Unique = true)]
48+
[AutoIncrement]
49+
public int Id { get; set; }
50+
51+
[References(typeof(Project))]
52+
public int ProjectId { get; set; }
53+
[Reference]
54+
public Project Project { get; set; }
55+
56+
[Required]
57+
public string Description { get; set; }
58+
[Required]
59+
public DateTime CreatedOn { get; set; }
60+
public DateTime? FinishedOn { get; set; }
61+
[Required]
62+
public int EstimatedHours { get; set; }
63+
64+
//[References(typeof(Employee))]
65+
//public int? AssignedToId { get; set; }
66+
//[Reference]
67+
//public Employee AssignedTo { get; set; }
68+
69+
//[References(typeof(Employee))]
70+
//public int? RequestedById { get; set; }
71+
//[Reference]
72+
//public Employee RequestedBy { get; set; }
73+
74+
[References(typeof(ProjectTaskStatus))]
75+
public int? ProjectTaskStatusId { get; set; }
76+
[Reference]
77+
public ProjectTaskStatus ProjectTaskStatus { get; set; }
78+
79+
[Required]
80+
public int Priority { get; set; }
81+
[Required]
82+
public int Order { get; set; }
83+
}
84+
85+
//[Schema("dbo")]
86+
[Alias("ProjectTaskStatus")]
87+
public class ProjectTaskStatus : IHasId<int>
88+
{
89+
[Alias("ProjectTaskStatusId")]
90+
[Index(Unique = true)]
91+
[AutoIncrement]
92+
public int Id { get; set; }
93+
[Required]
94+
public string Description { get; set; }
95+
}
96+
97+
[TestFixture]
98+
public class LoadSelectAmbiguousColumnIssue : OrmLiteTestBase
99+
{
100+
[Test]
101+
public async Task Can_select_columns_with_LoadSelectAsync()
102+
{
103+
using (var db = OpenDbConnection())
104+
{
105+
db.DropTable<ProjectTask>();
106+
db.DropTable<Project>();
107+
db.DropTable<ProjectTaskStatus>();
108+
db.DropTable<Department>();
109+
110+
db.CreateTable<Department>();
111+
db.CreateTable<ProjectTaskStatus>();
112+
db.CreateTable<Project>();
113+
db.CreateTable<ProjectTask>();
114+
115+
int departmentId = 1;
116+
int statusId = 1;
117+
118+
var q = db.From<ProjectTask>()
119+
.Join<ProjectTask, Project>((pt, p) => pt.ProjectId == p.Id)
120+
.Where<Project>(p => p.DepartmentId == departmentId || departmentId == 0)
121+
.And<ProjectTask>(pt => pt.ProjectTaskStatusId == statusId || statusId == 0);
122+
123+
var tasks = await db.LoadSelectAsync(q);
124+
125+
tasks.PrintDump();
126+
}
127+
}
128+
}
129+
}

tests/ServiceStack.OrmLiteV45.Tests/ServiceStack.OrmLiteV45.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
<Compile Include="AsyncTests.cs" />
7070
<Compile Include="ApiMySqlTestsAsync.cs" />
7171
<Compile Include="CustomSqlTestsAsync.cs" />
72+
<Compile Include="Issues\LoadSelectAmbiguousColumnIssue.cs" />
7273
<Compile Include="LoadReferencesTests.cs" />
7374
<Compile Include="OrmLiteContextTests.cs" />
7475
<Compile Include="OrmLiteTestBase.cs" />

0 commit comments

Comments
 (0)