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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]