Example #1
0
        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");
            }
        }
Example #2
0
        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, @"*");
            }
        }
Example #3
0
        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");
            }
        }
Example #4
0
        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");
            }
        }
Example #5
0
        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");
            }
        }
Example #6
0
        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, @"*");
            }
        }
Example #7
0
        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");
            }
        }
Example #8
0
        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");
            }
        }
Example #9
0
        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");
            }
        }
Example #10
0
        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");
            }
        }
Example #11
0
        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.");
            }
        }
Example #12
0
        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>'.");
            }
        }
Example #13
0
        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");
            }
        }
Example #14
0
        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");
            }
        }
Example #15
0
        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");
            }
        }
Example #16
0
        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");
            }
        }
Example #17
0
        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");
            }
        }
Example #18
0
        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");
            }
        }
Example #19
0
        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");
            }
        }
Example #20
0
        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, @")");
            }
        }
Example #21
0
        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");
            }
        }
Example #22
0
        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");
            }
        }
Example #23
0
        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, @")");
            }
        }
Example #24
0
        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, @")");
            }
        }
Example #25
0
        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, @"*");
            }
        }
Example #26
0
        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");
            }
        }
Example #27
0
        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");
            }
        }
Example #28
0
        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");
            }
        }
Example #29
0
        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");
            }
        }
Example #30
0
        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, @"*");
            }
        }