public void Parser_Parse_Query_Ordered_WithMultipleColumns() { const string text = @" SELECT * ORDER BY 1, 2 "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.OrderedQuery); enumerator.AssertNode(SyntaxKind.SelectQuery); enumerator.AssertNode(SyntaxKind.SelectClause); enumerator.AssertToken(SyntaxKind.SelectKeyword, @"SELECT"); enumerator.AssertNode(SyntaxKind.WildcardSelectColumn); enumerator.AssertToken(SyntaxKind.AsteriskToken, @"*"); enumerator.AssertToken(SyntaxKind.OrderKeyword, @"ORDER"); enumerator.AssertToken(SyntaxKind.ByKeyword, @"BY"); enumerator.AssertNode(SyntaxKind.OrderByColumn); enumerator.AssertNode(SyntaxKind.LiteralExpression); enumerator.AssertToken(SyntaxKind.NumericLiteralToken, @"1"); enumerator.AssertToken(SyntaxKind.CommaToken, @","); enumerator.AssertNode(SyntaxKind.OrderByColumn); enumerator.AssertNode(SyntaxKind.LiteralExpression); enumerator.AssertToken(SyntaxKind.NumericLiteralToken, @"2"); } }
public void Parser_Parse_Query_CommonTableExpression_WithRecursiveKeyword() { const string text = @" WITH RECURSIVE CTE AS ( SELECT * ) SELECT * "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.CommonTableExpressionQuery); enumerator.AssertToken(SyntaxKind.WithKeyword, @"WITH"); enumerator.AssertNode(SyntaxKind.CommonTableExpression); enumerator.AssertToken(SyntaxKind.RecursiveKeyword, @"RECURSIVE"); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"CTE"); enumerator.AssertToken(SyntaxKind.AsKeyword, @"AS"); enumerator.AssertToken(SyntaxKind.LeftParenthesisToken, @"("); enumerator.AssertNode(SyntaxKind.SelectQuery); enumerator.AssertNode(SyntaxKind.SelectClause); enumerator.AssertToken(SyntaxKind.SelectKeyword, @"SELECT"); enumerator.AssertNode(SyntaxKind.WildcardSelectColumn); enumerator.AssertToken(SyntaxKind.AsteriskToken, @"*"); enumerator.AssertToken(SyntaxKind.RightParenthesisToken, @")"); enumerator.AssertNode(SyntaxKind.SelectQuery); enumerator.AssertNode(SyntaxKind.SelectClause); enumerator.AssertToken(SyntaxKind.SelectKeyword, @"SELECT"); enumerator.AssertNode(SyntaxKind.WildcardSelectColumn); enumerator.AssertToken(SyntaxKind.AsteriskToken, @"*"); } }
public void Parser_Parse_Query_GroupByClause_WithMultipleColumns() { const string text = @" SELECT * FROM Employees e {GROUP BY e.Country, e.City} "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.GroupByClause); enumerator.AssertToken(SyntaxKind.GroupKeyword, @"GROUP"); enumerator.AssertToken(SyntaxKind.ByKeyword, @"BY"); enumerator.AssertNode(SyntaxKind.GroupByColumn); enumerator.AssertNode(SyntaxKind.PropertyAccessExpression); enumerator.AssertNode(SyntaxKind.NameExpression); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"e"); enumerator.AssertToken(SyntaxKind.DotToken, @"."); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"Country"); enumerator.AssertToken(SyntaxKind.CommaToken, @","); enumerator.AssertNode(SyntaxKind.GroupByColumn); enumerator.AssertNode(SyntaxKind.PropertyAccessExpression); enumerator.AssertNode(SyntaxKind.NameExpression); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"e"); enumerator.AssertToken(SyntaxKind.DotToken, @"."); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"City"); } }
public void Parser_Parse_Table_Derived_WithAsKeyword() { const string text = @" SELECT * FROM {(SELECT * FROM Employees) AS d} "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.DerivedTableReference); enumerator.AssertToken(SyntaxKind.LeftParenthesisToken, @"("); enumerator.AssertNode(SyntaxKind.SelectQuery); enumerator.AssertNode(SyntaxKind.SelectClause); enumerator.AssertToken(SyntaxKind.SelectKeyword, @"SELECT"); enumerator.AssertNode(SyntaxKind.WildcardSelectColumn); enumerator.AssertToken(SyntaxKind.AsteriskToken, @"*"); enumerator.AssertNode(SyntaxKind.FromClause); enumerator.AssertToken(SyntaxKind.FromKeyword, @"FROM"); enumerator.AssertNode(SyntaxKind.NamedTableReference); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"Employees"); enumerator.AssertToken(SyntaxKind.RightParenthesisToken, @")"); enumerator.AssertToken(SyntaxKind.AsKeyword, @"AS"); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"d"); } }
public void Parser_Parse_Table_InnerJoined_WithInnerJoinKeywords() { const string text = @" SELECT * FROM {Employees e JOIN EmployeeTerritories et ON et.EmployeeID = e.EmployeeID} "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.InnerJoinedTableReference); enumerator.AssertNode(SyntaxKind.NamedTableReference); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"Employees"); enumerator.AssertNode(SyntaxKind.Alias); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"e"); enumerator.AssertToken(SyntaxKind.JoinKeyword, @"JOIN"); enumerator.AssertNode(SyntaxKind.NamedTableReference); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"EmployeeTerritories"); enumerator.AssertNode(SyntaxKind.Alias); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"et"); enumerator.AssertToken(SyntaxKind.OnKeyword, @"ON"); enumerator.AssertNode(SyntaxKind.EqualExpression); enumerator.AssertNode(SyntaxKind.PropertyAccessExpression); enumerator.AssertNode(SyntaxKind.NameExpression); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"et"); enumerator.AssertToken(SyntaxKind.DotToken, @"."); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"EmployeeID"); enumerator.AssertToken(SyntaxKind.EqualsToken, @"="); enumerator.AssertNode(SyntaxKind.PropertyAccessExpression); enumerator.AssertNode(SyntaxKind.NameExpression); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"e"); enumerator.AssertToken(SyntaxKind.DotToken, @"."); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"EmployeeID"); } }
public void Parser_Parse_Query_WildcardSelectColumn_WithoutTableAlias() { const string text = @" SELECT {*} "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.WildcardSelectColumn); enumerator.AssertToken(SyntaxKind.AsteriskToken, @"*"); } }
public void Parser_Parse_Query_Alias_WithoutAsKeyword() { const string text = @" SELECT 1 {X} "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.Alias); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"X"); } }
public void Parser_Parse_Query_ExpressionSelectColumn_WithoutAlias() { const string text = @" SELECT {1} "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.ExpressionSelectColumn); enumerator.AssertNode(SyntaxKind.LiteralExpression); enumerator.AssertToken(SyntaxKind.NumericLiteralToken, @"1"); } }
public void Parser_Parse_Query_TopClause() { const string text = @" SELECT {TOP 10} * "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.TopClause); enumerator.AssertToken(SyntaxKind.TopKeyword, @"TOP"); enumerator.AssertToken(SyntaxKind.NumericLiteralToken, @"10"); } }
public void Parser_Parse_Table_Named_WithoutAlias() { const string text = @" SELECT * FROM {Employees} "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.NamedTableReference); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"Employees"); } }
public void Parser_Parse_Query_TopClause_WithInvalidLimit_NumericLiteral() { const string text = @" SELECT {TOP 10.3} * "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.TopClause); enumerator.AssertToken(SyntaxKind.TopKeyword, @"TOP"); enumerator.AssertToken(SyntaxKind.NumericLiteralToken, @"10.3"); enumerator.AssertDiagnostic(DiagnosticId.InvalidInteger, @"'10.3' is not a valid integer."); } }
public void Parser_Parse_Query_TopClause_WithMissingLimit() { const string text = @" SELECT {TOP }* "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.TopClause); enumerator.AssertToken(SyntaxKind.TopKeyword, @"TOP"); enumerator.AssertTokenMissing(SyntaxKind.NumericLiteralToken); enumerator.AssertDiagnostic(DiagnosticId.TokenExpected, @"Found '*' but expected '<Numeric Literal>'."); } }
public void Parser_Parse_Query_FromClause() { const string text = @" SELECT * {FROM Employees} "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.FromClause); enumerator.AssertToken(SyntaxKind.FromKeyword, @"FROM"); enumerator.AssertNode(SyntaxKind.NamedTableReference); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"Employees"); } }
public void Parser_Parse_Query_CommonTableExpressionColumnName() { const string text = @" WITH CTE ({x}, y) AS ( SELECT * ) SELECT * "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.CommonTableExpressionColumnName); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"x"); } }
public void Parser_Parse_Query_GroupByColumn() { const string text = @" SELECT * FROM Employees e GROUP BY {Country} "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.GroupByColumn); enumerator.AssertNode(SyntaxKind.NameExpression); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"Country"); } }
public void Parser_Parse_Query_OrderByColumn_WithoutModifier() { const string text = @" SELECT * FROM Employees ORDER BY {FirstName} "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.OrderByColumn); enumerator.AssertNode(SyntaxKind.NameExpression); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"FirstName"); } }
public void Parser_Parse_Query_Select_WithSelectClause() { const string text = @" SELECT 1 "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.SelectQuery); enumerator.AssertNode(SyntaxKind.SelectClause); enumerator.AssertToken(SyntaxKind.SelectKeyword, @"SELECT"); enumerator.AssertNode(SyntaxKind.ExpressionSelectColumn); enumerator.AssertNode(SyntaxKind.LiteralExpression); enumerator.AssertToken(SyntaxKind.NumericLiteralToken, @"1"); } }
public void Parser_Parse_Query_SelectClause() { const string text = @" SELECT x "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.SelectQuery); enumerator.AssertNode(SyntaxKind.SelectClause); enumerator.AssertToken(SyntaxKind.SelectKeyword, @"SELECT"); enumerator.AssertNode(SyntaxKind.ExpressionSelectColumn); enumerator.AssertNode(SyntaxKind.NameExpression); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"x"); } }
public void Parser_Parse_Query_WhereClause() { const string text = @" SELECT * FROM Employees e {WHERE TRUE} "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.WhereClause); enumerator.AssertToken(SyntaxKind.WhereKeyword, @"WHERE"); enumerator.AssertNode(SyntaxKind.LiteralExpression); enumerator.AssertToken(SyntaxKind.TrueKeyword, @"TRUE"); } }
public void Parser_Parse_Table_Parenthesized_WithNamed() { const string text = @" SELECT * FROM {(Employees)} "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.ParenthesizedTableReference); enumerator.AssertToken(SyntaxKind.LeftParenthesisToken, @"("); enumerator.AssertNode(SyntaxKind.NamedTableReference); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"Employees"); enumerator.AssertToken(SyntaxKind.RightParenthesisToken, @")"); } }
public void Parser_Parse_Query_TopClause_WithTies_WithoutWithKeyword() { const string text = @" SELECT {TOP 10 TIES} * "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.TopClause); enumerator.AssertToken(SyntaxKind.TopKeyword, @"TOP"); enumerator.AssertToken(SyntaxKind.NumericLiteralToken, @"10"); enumerator.AssertTokenMissing(SyntaxKind.WithKeyword); enumerator.AssertDiagnostic(DiagnosticId.TokenExpected, @"Found 'TIES' but expected 'WITH'."); enumerator.AssertToken(SyntaxKind.TiesKeyword, @"TIES"); } }
public void Parser_Parse_Query_HavingClause() { const string text = @" SELECT * FROM Employees e GROUP BY e.Country, e.City {HAVING TRUE} "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.HavingClause); enumerator.AssertToken(SyntaxKind.HavingKeyword, @"HAVING"); enumerator.AssertNode(SyntaxKind.LiteralExpression); enumerator.AssertToken(SyntaxKind.TrueKeyword, @"TRUE"); } }
public void Parser_Parse_Query_CommonTableExpressionColumnNameList_WithSingleColumn() { const string text = @" WITH CTE {(x)} AS ( SELECT * ) SELECT * "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.CommonTableExpressionColumnNameList); enumerator.AssertToken(SyntaxKind.LeftParenthesisToken, @"("); enumerator.AssertNode(SyntaxKind.CommonTableExpressionColumnName); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"x"); enumerator.AssertToken(SyntaxKind.RightParenthesisToken, @")"); } }
public void Parser_Parse_Query_Parenthesized() { const string text = @" (SELECT *) "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.ParenthesizedQuery); enumerator.AssertToken(SyntaxKind.LeftParenthesisToken, @"("); enumerator.AssertNode(SyntaxKind.SelectQuery); enumerator.AssertNode(SyntaxKind.SelectClause); enumerator.AssertToken(SyntaxKind.SelectKeyword, @"SELECT"); enumerator.AssertNode(SyntaxKind.WildcardSelectColumn); enumerator.AssertToken(SyntaxKind.AsteriskToken, @"*"); enumerator.AssertToken(SyntaxKind.RightParenthesisToken, @")"); } }
public void Parser_Parse_Query_SelectClause_WithTopClause() { const string text = @" SELECT TOP 10 * "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.SelectQuery); enumerator.AssertNode(SyntaxKind.SelectClause); enumerator.AssertToken(SyntaxKind.SelectKeyword, @"SELECT"); enumerator.AssertNode(SyntaxKind.TopClause); enumerator.AssertToken(SyntaxKind.TopKeyword, @"TOP"); enumerator.AssertToken(SyntaxKind.NumericLiteralToken, @"10"); enumerator.AssertNode(SyntaxKind.WildcardSelectColumn); enumerator.AssertToken(SyntaxKind.AsteriskToken, @"*"); } }
public void Parser_Parse_Table_CrossJoined() { const string text = @" SELECT * FROM {Employees CROSS JOIN EmployeeTerritories} "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.CrossJoinedTableReference); enumerator.AssertNode(SyntaxKind.NamedTableReference); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"Employees"); enumerator.AssertToken(SyntaxKind.CrossKeyword, @"CROSS"); enumerator.AssertToken(SyntaxKind.JoinKeyword, @"JOIN"); enumerator.AssertNode(SyntaxKind.NamedTableReference); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"EmployeeTerritories"); } }
public void Parser_Error_MissingIdentifier_IsInserted_IfKeywordOnNextLine() { const string text = @" SELECT {o. FROM} Orders "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.ExpressionSelectColumn); enumerator.AssertNode(SyntaxKind.PropertyAccessExpression); enumerator.AssertNode(SyntaxKind.NameExpression); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"o"); enumerator.AssertToken(SyntaxKind.DotToken, @"."); enumerator.AssertTokenMissing(SyntaxKind.IdentifierToken); enumerator.AssertDiagnostic(DiagnosticId.TokenExpected, @"Found 'FROM' but expected '<Identifier>'."); enumerator.AssertToken(SyntaxKind.FromKeyword, @"FROM"); } }
public void Parser_Parse_Query_Select_WithHavingClause() { const string text = @" SELECT * HAVING FALSE "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.SelectQuery); enumerator.AssertNode(SyntaxKind.SelectClause); enumerator.AssertToken(SyntaxKind.SelectKeyword, @"SELECT"); enumerator.AssertNode(SyntaxKind.WildcardSelectColumn); enumerator.AssertToken(SyntaxKind.AsteriskToken, @"*"); enumerator.AssertNode(SyntaxKind.HavingClause); enumerator.AssertToken(SyntaxKind.HavingKeyword, @"HAVING"); enumerator.AssertNode(SyntaxKind.LiteralExpression); enumerator.AssertToken(SyntaxKind.FalseKeyword, @"FALSE"); } }
public void Parser_Parse_Query_Select_WithFromClause() { const string text = @" SELECT * FROM Employees "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.SelectQuery); enumerator.AssertNode(SyntaxKind.SelectClause); enumerator.AssertToken(SyntaxKind.SelectKeyword, @"SELECT"); enumerator.AssertNode(SyntaxKind.WildcardSelectColumn); enumerator.AssertToken(SyntaxKind.AsteriskToken, @"*"); enumerator.AssertNode(SyntaxKind.FromClause); enumerator.AssertToken(SyntaxKind.FromKeyword, @"FROM"); enumerator.AssertNode(SyntaxKind.NamedTableReference); enumerator.AssertToken(SyntaxKind.IdentifierToken, @"Employees"); } }
public void Parser_Parse_Query_Except() { const string text = @" SELECT * EXCEPT SELECT * "; using (var enumerator = AssertingEnumerator.ForQuery(text)) { enumerator.AssertNode(SyntaxKind.ExceptQuery); enumerator.AssertNode(SyntaxKind.SelectQuery); enumerator.AssertNode(SyntaxKind.SelectClause); enumerator.AssertToken(SyntaxKind.SelectKeyword, @"SELECT"); enumerator.AssertNode(SyntaxKind.WildcardSelectColumn); enumerator.AssertToken(SyntaxKind.AsteriskToken, @"*"); enumerator.AssertToken(SyntaxKind.ExceptKeyword, @"EXCEPT"); enumerator.AssertNode(SyntaxKind.SelectQuery); enumerator.AssertNode(SyntaxKind.SelectClause); enumerator.AssertToken(SyntaxKind.SelectKeyword, @"SELECT"); enumerator.AssertNode(SyntaxKind.WildcardSelectColumn); enumerator.AssertToken(SyntaxKind.AsteriskToken, @"*"); } }