diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 7be826b22d..3d96a1d714 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -12555,7 +12555,16 @@ impl<'a> Parser<'a> { self.expect_token(&Token::RParen)?; Ok(DataType::FixedString(character_length)) } - Keyword::TEXT => Ok(DataType::Text), + Keyword::TEXT => { + if let Some(modifiers) = self.parse_optional_type_modifiers()? { + Ok(DataType::Custom( + ObjectName::from(vec![Ident::new("TEXT")]), + modifiers, + )) + } else { + Ok(DataType::Text) + } + } Keyword::TINYTEXT => Ok(DataType::TinyText), Keyword::MEDIUMTEXT => Ok(DataType::MediumText), Keyword::LONGTEXT => Ok(DataType::LongText), diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs index 5a15285c3a..00937636bb 100644 --- a/tests/sqlparser_common.rs +++ b/tests/sqlparser_common.rs @@ -6586,6 +6586,24 @@ fn interval_disallow_interval_expr_double_colon() { ) } +#[test] +fn parse_text_type_modifier_double_colon_cast() { + let expr = verified_expr("ID::TEXT(16777216)"); + assert_eq!( + expr, + Expr::Cast { + kind: CastKind::DoubleColon, + expr: Box::new(Expr::Identifier(Ident::new("ID"))), + data_type: DataType::Custom( + ObjectName::from(vec![Ident::new("TEXT")]), + vec!["16777216".to_string()] + ), + array: false, + format: None, + } + ); +} + #[test] fn parse_interval_and_or_xor() { let sql = "SELECT col FROM test \