ParserError if nested explain (#781)

This commit is contained in:
Jeffrey 2022-12-29 23:55:10 +11:00 committed by GitHub
parent b93d82dfca
commit cf3fe64af6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -4686,21 +4686,24 @@ impl<'a> Parser<'a> {
format = Some(self.parse_analyze_format()?); format = Some(self.parse_analyze_format()?);
} }
if let Some(statement) = self.maybe_parse(|parser| parser.parse_statement()) { match self.maybe_parse(|parser| parser.parse_statement()) {
Ok(Statement::Explain { 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, describe_alias,
analyze, analyze,
verbose, verbose,
statement: Box::new(statement), statement: Box::new(statement),
format, format,
}) }),
} else { _ => {
let table_name = self.parse_object_name()?; let table_name = self.parse_object_name()?;
Ok(Statement::ExplainTable {
Ok(Statement::ExplainTable { describe_alias,
describe_alias, table_name,
table_name, })
}) }
} }
} }
@ -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()
))
);
}
} }