bruce-dunwiddie / tsql-parser

Library Written in C# For Parsing SQL Server T-SQL Scripts in .Net
Apache License 2.0
318 stars 56 forks source link

ArgumentOutOfRangeException when there is a string literal immediately after SELECT keyword #132

Open svartak-cl opened 3 weeks ago

svartak-cl commented 3 weeks ago

Hello,

TSQLStatementReader.ParseStatements throws ArgumentOutOfRangeException exception when there is a string literal immediately after SELECT keyword like SELECT' '+item

Error Details: ArgumentOutOfRangeException -> Non-negative number required. Parameter name: count

   at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
   at System.Collections.Generic.List`1.GetRange(Int32 index, Int32 count)
   at TSQL.Expressions.Parsers.TSQLValueExpressionParser.ParseNext(ITSQLTokenizer tokenizer)
   at TSQL.Expressions.Parsers.TSQLValueExpressionParser.Parse(ITSQLTokenizer tokenizer)
   at TSQL.Expressions.Parsers.TSQLValueExpressionParser.ParseNext(ITSQLTokenizer tokenizer)
   at TSQL.Expressions.Parsers.TSQLValueExpressionParser.Parse(ITSQLTokenizer tokenizer)
   at TSQL.Expressions.Parsers.TSQLArgumentListParser.Parse(ITSQLTokenizer tokenizer)
   at TSQL.Expressions.Parsers.TSQLValueExpressionParser.ParseNext(ITSQLTokenizer tokenizer)
   at TSQL.Expressions.Parsers.TSQLSelectExpressionParser.Parse(ITSQLTokenizer tokenizer)
   at TSQL.Elements.Parsers.TSQLSelectColumnParser.Parse(ITSQLTokenizer tokenizer)
   at TSQL.Clauses.Parsers.TSQLSelectClauseParser.Parse(ITSQLTokenizer tokenizer)
   at TSQL.Statements.Parsers.TSQLSelectStatementParser.Parse()
   at TSQL.TSQLStatementReader.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Demo.ParseQuery(String query)

For example, the below lines of code (containing valid TSQL statement) throw this exception

string query = "SELECT STUFF((SELECT' '+item FROM pqr), 2, 3, 'ijklmn') FROM abc"; var statements = TSQLStatementReader.ParseStatements(query, useQuotedIdentifiers: true, includeWhitespace: false);

Please let me know what you think about this exception for valid TSQL statement.

Best regards

bruce-dunwiddie commented 3 weeks ago

Thank you for reporting this issue. I'll take a look.