aharpervc commented on code in PR #1949:
URL:
https://github.com/apache/datafusion-sqlparser-rs/pull/1949#discussion_r2248411515
##########
src/parser/mod.rs:
##########
@@ -16464,7 +16505,28 @@ impl<'a> Parser<'a> {
/// Parse [Statement::Return]
fn parse_return(&mut self) -> Result<Statement, ParserError> {
- match self.maybe_parse(|p| p.parse_expr())? {
+ let rs = self.maybe_parse(|p| {
+ let expr = p.parse_expr()?;
+
+ match &expr {
+ Expr::Value(_)
+ | Expr::Function(_)
+ | Expr::UnaryOp { .. }
+ | Expr::BinaryOp { .. }
+ | Expr::Case { .. }
+ | Expr::Cast { .. }
+ | Expr::Convert { .. }
+ | Expr::Subquery(_) => Ok(expr),
+ // todo: how to retstrict to variables?
Review Comment:
I don't see this being about the if statement, but rather about the return
statement. The question for the parse is, given a return keyword, how many more
tokens (or similarly, which expr's) should be considered part of that
ReturnStatement? For T-SQL, there is a restricted answer to that question, but
it is somewhat awkward to express here.
> if it does support IF statements then the grammar indeed looks either
ambiguous or relying on the newline character to differentiate between the two
scenarios?
Newlines don't really help you here, I put them in the example above for
readability, but this should parse identically (and does if you run on a real
SQL Server instance):
```
CREATE OR ALTER PROCEDURE example_sp AS IF USER_NAME() = 'X' RETURN IF 1 = 2
RETURN (SELECT 1) RETURN CONVERT(INT, 123)
```
--
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]