Skip to content

Commit d2598da

Browse files
committed
Fix parsing of :: cast after parenthesized DEFAULT expression
1 parent 6060a11 commit d2598da

2 files changed

Lines changed: 15 additions & 1 deletion

File tree

src/parser/mod.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9002,7 +9002,15 @@ impl<'a> Parser<'a> {
90029002
/// [ColumnOption::NotNull].
90039003
fn parse_column_option_expr(&mut self) -> Result<Expr, ParserError> {
90049004
if self.peek_token_ref().token == Token::LParen {
9005-
let expr: Expr = self.with_state(ParserState::Normal, |p| p.parse_prefix())?;
9005+
let mut expr = self.with_state(ParserState::Normal, |p| p.parse_prefix())?;
9006+
expr = self.parse_compound_expr(expr, vec![])?;
9007+
loop {
9008+
let next_precedence = self.get_next_precedence()?;
9009+
if next_precedence == 0 || self.peek_token_ref().token == Token::Period {
9010+
break;
9011+
}
9012+
expr = self.parse_infix(expr, next_precedence)?;
9013+
}
90069014
Ok(expr)
90079015
} else {
90089016
Ok(self.parse_expr()?)

tests/sqlparser_postgres.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,12 @@ fn parse_create_table_with_defaults() {
512512
}
513513
}
514514

515+
#[test]
516+
fn parse_default_expr_parenthesized_then_cast() {
517+
// Infix operators like :: after parenthesized expression in DEFAULT
518+
pg().verified_stmt("CREATE TABLE t (c TEXT DEFAULT (foo())::TEXT)");
519+
}
520+
515521
#[test]
516522
fn parse_create_table_from_pg_dump() {
517523
let sql = "CREATE TABLE public.customer (

0 commit comments

Comments
 (0)