Skip to content

Commit

Permalink
ParserError if nested explain (#781)
Browse files Browse the repository at this point in the history
  • Loading branch information
Jefffrey committed Dec 29, 2022
1 parent b93d82d commit cf3fe64
Showing 1 changed file with 25 additions and 10 deletions.
35 changes: 25 additions & 10 deletions src/parser.rs
Expand Up @@ -4686,21 +4686,24 @@ impl<'a> Parser<'a> {
format = Some(self.parse_analyze_format()?);
}

if let Some(statement) = self.maybe_parse(|parser| parser.parse_statement()) {
Ok(Statement::Explain {
match self.maybe_parse(|parser| parser.parse_statement()) {
Some(Statement::Explain { .. }) | Some(Statement::ExplainTable { .. }) => Err(
ParserError::ParserError("Explain must be root of the plan".to_string()),
),
Some(statement) => Ok(Statement::Explain {
describe_alias,
analyze,
verbose,
statement: Box::new(statement),
format,
})
} else {
let table_name = self.parse_object_name()?;

Ok(Statement::ExplainTable {
describe_alias,
table_name,
})
}),
_ => {
let table_name = self.parse_object_name()?;
Ok(Statement::ExplainTable {
describe_alias,
table_name,
})
}
}
}

Expand Down Expand Up @@ -7134,4 +7137,16 @@ mod tests {
))
);
}

#[test]
fn test_nested_explain_error() {
let sql = "EXPLAIN EXPLAIN SELECT 1";
let ast = Parser::parse_sql(&GenericDialect, sql);
assert_eq!(
ast,
Err(ParserError::ParserError(
"Explain must be root of the plan".to_string()
))
);
}
}

0 comments on commit cf3fe64

Please sign in to comment.