fix: Add support for MAX for NVARCHAR (#1232)

This commit is contained in:
Simon Sawert 2024-04-26 19:56:37 +02:00 committed by GitHub
parent 547c5cde14
commit b51f2a0c25
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 10 additions and 6 deletions

View file

@ -40,7 +40,7 @@ pub enum DataType {
/// Variable-length character type e.g. VARCHAR(10)
Varchar(Option<CharacterLength>),
/// Variable-length character type e.g. NVARCHAR(10)
Nvarchar(Option<u64>),
Nvarchar(Option<CharacterLength>),
/// Uuid type
Uuid,
/// Large character object with optional length e.g. CHARACTER LARGE OBJECT, CHARACTER LARGE OBJECT(1000), [standard]
@ -238,9 +238,7 @@ impl fmt::Display for DataType {
DataType::CharVarying(size) => format_character_string_type(f, "CHAR VARYING", size),
DataType::Varchar(size) => format_character_string_type(f, "VARCHAR", size),
DataType::Nvarchar(size) => {
format_type_with_optional_length(f, "NVARCHAR", size, false)
}
DataType::Nvarchar(size) => format_character_string_type(f, "NVARCHAR", size),
DataType::Uuid => write!(f, "UUID"),
DataType::CharacterLargeObject(size) => {
format_type_with_optional_length(f, "CHARACTER LARGE OBJECT", size, false)

View file

@ -6451,7 +6451,9 @@ impl<'a> Parser<'a> {
}
}
Keyword::VARCHAR => Ok(DataType::Varchar(self.parse_optional_character_length()?)),
Keyword::NVARCHAR => Ok(DataType::Nvarchar(self.parse_optional_precision()?)),
Keyword::NVARCHAR => {
Ok(DataType::Nvarchar(self.parse_optional_character_length()?))
}
Keyword::CHARACTER => {
if self.parse_keyword(Keyword::VARYING) {
Ok(DataType::CharacterVarying(

View file

@ -2258,7 +2258,10 @@ fn parse_cast() {
&Expr::Cast {
kind: CastKind::Cast,
expr: Box::new(Expr::Identifier(Ident::new("id"))),
data_type: DataType::Nvarchar(Some(50)),
data_type: DataType::Nvarchar(Some(CharacterLength::IntegerLength {
length: 50,
unit: None,
})),
format: None,
},
expr_from_projection(only(&select.projection))

View file

@ -431,6 +431,7 @@ fn parse_for_json_expect_ast() {
#[test]
fn parse_cast_varchar_max() {
ms_and_generic().verified_expr("CAST('foo' AS VARCHAR(MAX))");
ms_and_generic().verified_expr("CAST('foo' AS NVARCHAR(MAX))");
}
#[test]