Skip to content

Commit 12d4497

Browse files
Merge pull request #116 from bruce-dunwiddie/develop
Develop
2 parents b5f684e + b76cea9 commit 12d4497

File tree

8 files changed

+46
-17
lines changed

8 files changed

+46
-17
lines changed

TSQL_Parser/TSQL_Parser/Expressions/Parsers/TSQLValueExpressionParser.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,9 @@ public TSQLExpression ParseNext(
225225
}
226226
else if (tokenizer.Current.Type.In(
227227
TSQLTokenType.Identifier,
228-
TSQLTokenType.SystemIdentifier))
228+
TSQLTokenType.SystemIdentifier,
229+
// RIGHT is a keyword, but can be used as a function call
230+
TSQLTokenType.Keyword))
229231
{
230232
// column, with or without alias, or with full explicit table name with up to 5 parts
231233

@@ -258,8 +260,7 @@ public TSQLExpression ParseNext(
258260
.ToList();
259261

260262
function.Function =
261-
identityTokens[identityTokens.Count - 1]
262-
.AsIdentifier;
263+
identityTokens[identityTokens.Count - 1];
263264

264265
if (identityTokens.Count > 1)
265266
{

TSQL_Parser/TSQL_Parser/Expressions/TSQLFunctionExpression.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public override TSQLExpressionType Type
2020

2121
public List<TSQLToken> QualifiedPath { get; internal set; }
2222

23-
public TSQLIdentifier Function { get; internal set; }
23+
public TSQLToken Function { get; internal set; }
2424

2525
public TSQLArgumentList Arguments { get; internal set; }
2626
}

TSQL_Parser/TSQL_Parser/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
// You can specify all the values or you can default the Build and Revision Numbers
3333
// by using the '*' as shown below:
3434
// [assembly: AssemblyVersion("1.0.*")]
35-
[assembly: AssemblyVersion("2.5.0.0")]
36-
[assembly: AssemblyFileVersion("2.5.0.0")]
35+
[assembly: AssemblyVersion("2.6.0.0")]
36+
[assembly: AssemblyFileVersion("2.6.0.0")]
3737

3838
[assembly: InternalsVisibleTo("Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100793625650b945744f8a2c57bc75da89cd4d2c551636aa180c3020b7a15b815c10e983e83c312eb02f131c6fcf18aaffd6c8d9af6c4353c91ca0e9206b0fb8fb7805fc07b510a47ff40705ae56977ae8893e2d247d166aa400926582840e8a5602df055762bc3479dd14c9621a77946b6e6b0a00a77204c78fb52c65121bd75ba")]

TSQL_Parser/TSQL_Parser/Push.bat

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
nuget SetApiKey %NUGET_KEY%
2-
nuget push TSQL.Parser.2.5.0.snupkg -Source https://api.nuget.org/v3/index.json
3-
nuget push TSQL.Parser.2.5.0.nupkg -Source https://api.nuget.org/v3/index.json
2+
nuget push TSQL.Parser.2.6.0.nupkg -Source https://api.nuget.org/v3/index.json
3+
nuget push TSQL.Parser.2.6.0.snupkg -Source https://api.nuget.org/v3/index.json
44
pause

TSQL_Parser/TSQL_Parser/TSQL_Parser.nuspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
<package>
33
<metadata>
44
<id>TSQL.Parser</id>
5-
<version>2.5.0</version>
5+
<version>2.6.0</version>
66
<title>TSQL.Parser</title>
77
<authors>Bruce Dunwiddie</authors>
88
<owners>shriop</owners>
99
<license type="expression">Apache-2.0</license>
1010
<projectUrl>https://github.com/bruce-dunwiddie/tsql-parser</projectUrl>
1111
<requireLicenseAcceptance>false</requireLicenseAcceptance>
1212
<description>Library for Parsing SQL Server T-SQL Scripts</description>
13-
<releaseNotes>Fixed handling of FOR XML in SELECT.</releaseNotes>
13+
<releaseNotes>Fixed parsing of function names that overlap with reserved words.</releaseNotes>
1414
<copyright>Copyright © 2022</copyright>
1515
<tags>sql parser sql-server tsql</tags>
1616
</metadata>

TSQL_Parser/TSQL_Parser/TSQL_Parser_NetStandard.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
<TargetFramework>netstandard2.0</TargetFramework>
55
<AssemblyName>TSQL_Parser</AssemblyName>
66
<RootNamespace>TSQL_Parser</RootNamespace>
7-
<Version>2.5.0.0</Version>
8-
<AssemblyVersion>2.5.0.0</AssemblyVersion>
9-
<FileVersion>2.5.0.0</FileVersion>
7+
<Version>2.6.0.0</Version>
8+
<AssemblyVersion>2.6.0.0</AssemblyVersion>
9+
<FileVersion>2.6.0.0</FileVersion>
1010
<Description>Library for Parsing SQL Server TSQL Scripts</Description>
1111
<Copyright>Copyright © 2022</Copyright>
1212
<Company />

TSQL_Parser/Tests/Clauses/SelectClauseTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ ORDER BY
245245

246246
Assert.AreEqual("GroupNumber", column.ColumnAlias.Name);
247247
Assert.AreEqual(TSQLExpressionType.Function, column.Expression.Type);
248-
Assert.AreEqual("ROW_NUMBER", column.Expression.AsFunction.Function.Name);
248+
Assert.AreEqual("ROW_NUMBER", column.Expression.AsFunction.Function.Text);
249249
}
250250
}
251251

@@ -292,7 +292,7 @@ ORDER BY
292292

293293
TSQLFunctionExpression functionExpression = column.Expression.AsFunction;
294294

295-
Assert.AreEqual("Multiply", functionExpression.Function.Name);
295+
Assert.AreEqual("Multiply", functionExpression.Function.Text);
296296
Assert.AreEqual(3, functionExpression.QualifiedPath.Count);
297297
Assert.AreEqual("Test", functionExpression.QualifiedPath[0].AsIdentifier.Name);
298298
Assert.AreEqual(".", functionExpression.QualifiedPath[1].AsCharacter.Text);

TSQL_Parser/Tests/Statements/SelectStatementTests.cs

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -712,7 +712,7 @@ public void SelectStatement_CountAlias()
712712
.Columns
713713
.Single();
714714

715-
Assert.AreEqual("COUNT", count.Expression.AsFunction.Function.Name);
715+
Assert.AreEqual("COUNT", count.Expression.AsFunction.Function.Text);
716716
Assert.AreEqual("count", count.ColumnAlias.Name);
717717
}
718718

@@ -730,7 +730,7 @@ public void SelectStatement_CountAliasWithWhitespace()
730730
.Columns
731731
.Single();
732732

733-
Assert.AreEqual("COUNT", count.Expression.AsFunction.Function.Name);
733+
Assert.AreEqual("COUNT", count.Expression.AsFunction.Function.Text);
734734
Assert.AreEqual("count", count.ColumnAlias.Name);
735735
}
736736

@@ -928,5 +928,33 @@ public void SelectStatement_Stuff()
928928

929929
Assert.AreEqual(6, innerSelect.For.Tokens.Count);
930930
}
931+
932+
[Test]
933+
public void SelectStatement_CoalesceWithInnerFunctions()
934+
{
935+
// regression test for https://github.com/bruce-dunwiddie/tsql-parser/discussions/114
936+
List<TSQLStatement> statements = TSQLStatementReader.ParseStatements(
937+
@"SELECT COALESCE(added_by, RIGHT(user, LEN(user)-5)) AS changed_by FROM my_table",
938+
includeWhitespace: false);
939+
940+
Assert.AreEqual(1, statements.Count);
941+
TSQLSelectStatement select = statements.Single().AsSelect;
942+
943+
Assert.AreEqual(21, select.Tokens.Count);
944+
945+
TSQLFunctionExpression functionExpression = select
946+
.Select
947+
.Columns[0]
948+
.Expression
949+
.AsFunction
950+
.Arguments[1]
951+
.AsFunction;
952+
953+
TSQLToken right = functionExpression
954+
.Function;
955+
956+
Assert.AreEqual("RIGHT", right.Text);
957+
Assert.IsNull(functionExpression.QualifiedPath);
958+
}
931959
}
932960
}

0 commit comments

Comments
 (0)