Skip to content

Commit ea1271c

Browse files
committed
Expressions can be named without the as keyword.
1 parent 00f4232 commit ea1271c

3 files changed

Lines changed: 20 additions & 3 deletions

File tree

SqlServerSimulator.Tests/SelectTests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,15 @@ public void Expression(string commandText, object value)
5959
}
6060

6161
[TestMethod]
62+
public void BareAs()
63+
{
64+
var exception = Assert.Throws<DbException>(() => new Simulation().ExecuteScalar("select as z"));
65+
Assert.AreEqual("Incorrect syntax near the keyword 'as'.", exception.Message);
66+
}
67+
68+
[TestMethod]
69+
[DataRow("select 1", "", 1)]
70+
[DataRow("select 1 c", "c", 1)]
6271
[DataRow("select 1 as c", "c", 1)]
6372
[DataRow("select 1 as [c]", "c", 1)]
6473
[DataRow("select 1 as [c]]d]", "c]d", 1)]
@@ -94,6 +103,7 @@ public void ExpressionFromTable(string commandText, int minimumRows, int uniqueR
94103
}
95104

96105
[TestMethod]
106+
[DataRow("select name c from systypes", 34, 34, "c", "image")]
97107
[DataRow("select name as c from systypes", 34, 34, "c", "image")]
98108
[DataRow("select name as c from systypes as s", 34, 34, "c", "image")]
99109
[DataRow("select systypes.name from systypes", 34, 34, "name", "image")]

SqlServerSimulator/Parser/Expression.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public static Expression Parse(ParserContext context)
102102
/// <param name="expression">The expression to wrap.</param>
103103
/// <param name="name">The name to assign.</param>
104104
/// <returns>The named expression.</returns>
105-
public static Expression AssignName(Expression expression, string name) => new NamedExpression(expression, name);
105+
public static Expression AssignName(Expression expression, Name name) => new NamedExpression(expression, name.Value);
106106

107107
/// <summary>
108108
/// Runs the expression, returning its result.

SqlServerSimulator/Parser/Selection.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ public static Selection Parse(ParserContext context, uint depth)
5959
case ReservedKeyword { Keyword: Keyword.From }:
6060
break;
6161

62+
case ReservedKeyword { Keyword: not Keyword.Null } keyword:
63+
throw SimulatedSqlException.SyntaxErrorNearKeyword(keyword);
64+
6265
case Operator { Character: ',' }:
6366
if (expressions.Count == 0)
6467
throw SimulatedSqlException.SyntaxErrorNear(context.Token);
@@ -81,14 +84,18 @@ public static Selection Parse(ParserContext context, uint depth)
8184
case Operator { Character: ',' }:
8285
continue;
8386

87+
case Name name:
88+
expressions[^1] = Expression.AssignName(expressions.Last(), name);
89+
continue;
90+
8491
case ReservedKeyword { Keyword: Keyword.As }:
85-
expressions[^1] = Expression.AssignName(expressions.Last(), context.GetNextRequired<StringToken>().Value);
92+
expressions[^1] = Expression.AssignName(expressions.Last(), context.GetNextRequired<Name>());
8693
continue;
8794

8895
case ReservedKeyword { Keyword: Keyword.From }:
8996
switch (context.GetNextRequired())
9097
{
91-
case StringToken tableName:
98+
case Name tableName:
9299
if (!context.Simulation.Tables.TryGetValue(tableName.Value, out var table) && !context.Simulation.SystemTables.Value.TryGetValue(tableName.Value, out table))
93100
throw SimulatedSqlException.InvalidObjectName(tableName);
94101

0 commit comments

Comments
 (0)