aharpervc opened a new issue, #1800:
URL: https://github.com/apache/datafusion-sqlparser-rs/issues/1800

   It would be extremely useful if this library was able to properly parse 
multiple statements, particularly in a object definition body, without 
requiring semi-colons which are optional for SQL Server.
   
   ---
   
   The following otherwise valid SQL fails parsing (MSSQL dialect):
   
   ```mssql
   create or alter procedure test()
   as
   begin
       declare @x bit = 1
   
       if @x = 1
       begin
           select 1
       end
   end
   ```
   
   The error is at the `if @x = 1` line:
   
   ```
   end of statement, found: if
   ```
   
   The problem appears to be related to parsing multiple statements in the 
object definition body. The parsing concludes successfully if the code is 
changed to `declare @x bit = 1;` with a semi-colon.
   
   There's also the similar case of two top level statements:
   
   ```mssql
   declare @x bit = 1
   
   if @x = 1
   begin
       select 1
   end
   ```
   
   The API I was using was parse_sql:
   
   ```rust
   static DIALECT: sqlparser::dialect::MsSqlDialect = 
sqlparser::dialect::MsSqlDialect {};
   let sql_text = ...
   
   let mut statements = Parser::parse_sql(&DIALECT, sql_text.as_str())?; // 
error: end of statement, found: if
   ```
   
   There's a workaround for the multiple top level statements scenario, but 
that won't work for the stored procedure example:
   
   ```rust
   fn parse_all_statements(sql_text: &str) -> Result<Vec<Statement>, Box<dyn 
std::error::Error>> {
       let mut parser = Parser::new(&DIALECT)
           .try_with_sql(&sql_text)?;
   
       let mut statements = Vec::new();
   
       loop {
           if let Token::EOF = parser.peek_token_ref().token {
               break;
           }
   
           statements.push(parser.parse_statement()?);
   
           while let Token::SemiColon = parser.peek_token_ref().token {
               parser.advance_token();
           }
       }
   
       return Ok(statements);
   }
   ```
   
   ---
   
   follow up from: 
https://github.com/apache/datafusion-sqlparser-rs/pull/1791#issuecomment-2784202219


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org
For additional commands, e-mail: github-h...@datafusion.apache.org

Reply via email to