Skip to content

Commit 52500aa

Browse files
committed
Added column aliasing.
1 parent dda23d1 commit 52500aa

5 files changed

Lines changed: 57 additions & 11 deletions

File tree

Simple.Data.Ado/QueryBuilder.cs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,21 +105,32 @@ private string GetColumnsClause(Table table)
105105
?
106106
"COUNT(*)"
107107
:
108-
string.Join(",", GetColumnsToSelect(table).Select(c => string.Format("{0}.{1}", c.Item1.QualifiedName, c.Item2.QuotedName)));
108+
string.Join(",", GetColumnsToSelect(table)
109+
.Select(c => FormatColumnClause(c.Item1, c.Item2, c.Item3)));
109110
}
110111

111-
private IEnumerable<Tuple<Table,Column>> GetColumnsToSelect(Table table)
112+
private IEnumerable<Tuple<Table,Column,string>> GetColumnsToSelect(Table table)
112113
{
113114
if (_query.Columns.Any())
114115
{
115116
return from c in _query.Columns
116117
let t = _schema.FindTable(c.GetOwner().GetName())
117-
select Tuple.Create(t, t.FindColumn(c.GetName()));
118+
select Tuple.Create(t, t.FindColumn(c.GetName()), c.Alias);
118119
}
119120
else
120121
{
121-
return table.Columns.Select(c => Tuple.Create(table, c));
122+
const string nullString = null;
123+
return table.Columns.Select(c => Tuple.Create(table, c, nullString));
122124
}
123125
}
126+
127+
private string FormatColumnClause(Table table, Column column, string alias)
128+
{
129+
if (alias == null)
130+
return string.Format("{0}.{1}", table.QualifiedName, column.QuotedName);
131+
else
132+
return string.Format("{0}.{1} AS {2}", table.QualifiedName, column.QuotedName,
133+
_schema.QuoteObjectName(alias));
134+
}
124135
}
125136
}

Simple.Data.BehaviourTest/QueryTest.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,15 @@ public void SpecifyingColumnsShouldRestrictSelect()
3535
GeneratedSqlIs("select [dbo].[users].[name],[dbo].[users].[password] from [dbo].[users]");
3636
}
3737

38+
[Test]
39+
public void SpecifyingColumnWithAliasShouldAddAsClause()
40+
{
41+
_db.Users.All()
42+
.Select(_db.Users.Name, _db.Users.Password.As("SuperSecretPassword"))
43+
.ToList();
44+
GeneratedSqlIs("select [dbo].[users].[name],[dbo].[users].[password] as [supersecretpassword] from [dbo].[users]");
45+
}
46+
3847
[Test]
3948
public void SpecifyingColumnsFromOtherTablesShouldAddJoin()
4049
{

Simple.Data.SqlTest/QueryTest.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,14 @@ public void ExistsByInvalidValueShouldReturnTrue()
6565
Assert.AreEqual(false, db.Users.ExistsByName("Peter Kay"));
6666
}
6767

68+
[Test]
69+
public void ColumnAliasShouldChangeDynamicPropertyName()
70+
{
71+
var db = DatabaseHelper.Open();
72+
var actual = db.Users.QueryById(1).Select(db.Users.Name.As("Alias")).First();
73+
Assert.AreEqual("Bob", actual.Alias);
74+
}
75+
6876
[Test]
6977
public void ShouldSelectFromOneToTen()
7078
{

Simple.Data/DynamicReference.cs

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,35 @@ public class DynamicReference : DynamicObject, IEquatable<DynamicReference>
1616
private readonly string _name;
1717
private readonly DynamicReference _owner;
1818
private readonly DataStrategy _dataStrategy;
19+
private readonly string _alias;
1920

20-
internal DynamicReference(string name)
21+
internal DynamicReference(string name) : this(name, null, null, null)
2122
{
22-
_name = name;
2323
}
2424

25-
internal DynamicReference(string name, DynamicReference owner)
25+
internal DynamicReference(string name, DynamicReference owner) : this(name, owner, null, null)
26+
{
27+
}
28+
29+
internal DynamicReference(string name, DataStrategy dataStrategy) : this(name, null, dataStrategy, null)
30+
{
31+
}
32+
33+
internal DynamicReference(string name, DynamicReference owner, DataStrategy dataStrategy) : this(name, owner, dataStrategy, null)
2634
{
27-
_name = name;
28-
_owner = owner;
2935
}
3036

31-
internal DynamicReference(string name, DataStrategy dataStrategy)
37+
internal DynamicReference(string name, DynamicReference owner, DataStrategy dataStrategy, string alias)
3238
{
3339
_name = name;
40+
_owner = owner;
3441
_dataStrategy = dataStrategy;
42+
_alias = alias;
43+
}
44+
45+
public string Alias
46+
{
47+
get { return _alias; }
3548
}
3649

3750
/// <summary>
@@ -57,6 +70,11 @@ public string GetName()
5770
return _name;
5871
}
5972

73+
public DynamicReference As(string alias)
74+
{
75+
return new DynamicReference(_name, _owner, _dataStrategy, alias);
76+
}
77+
6078
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
6179
{
6280
if (_dataStrategy != null)

Simple.Data/SimpleQuery.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ private SimpleQuery(SimpleQuery source,
4848

4949
public IEnumerable<DynamicReference> Columns
5050
{
51-
get { return _columns; }
51+
get { return _columns ?? Enumerable.Empty<DynamicReference>(); }
5252
}
5353

5454
public int? TakeCount

0 commit comments

Comments
 (0)