Skip to content

Commit b51f2a0

Browse files
authored
fix: Add support for MAX for NVARCHAR (apache#1232)
1 parent 547c5cd commit b51f2a0

File tree

4 files changed

+10
-6
lines changed

4 files changed

+10
-6
lines changed

src/ast/data_type.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ pub enum DataType {
4040
/// Variable-length character type e.g. VARCHAR(10)
4141
Varchar(Option<CharacterLength>),
4242
/// Variable-length character type e.g. NVARCHAR(10)
43-
Nvarchar(Option<u64>),
43+
Nvarchar(Option<CharacterLength>),
4444
/// Uuid type
4545
Uuid,
4646
/// 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 {
238238

239239
DataType::CharVarying(size) => format_character_string_type(f, "CHAR VARYING", size),
240240
DataType::Varchar(size) => format_character_string_type(f, "VARCHAR", size),
241-
DataType::Nvarchar(size) => {
242-
format_type_with_optional_length(f, "NVARCHAR", size, false)
243-
}
241+
DataType::Nvarchar(size) => format_character_string_type(f, "NVARCHAR", size),
244242
DataType::Uuid => write!(f, "UUID"),
245243
DataType::CharacterLargeObject(size) => {
246244
format_type_with_optional_length(f, "CHARACTER LARGE OBJECT", size, false)

src/parser/mod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6451,7 +6451,9 @@ impl<'a> Parser<'a> {
64516451
}
64526452
}
64536453
Keyword::VARCHAR => Ok(DataType::Varchar(self.parse_optional_character_length()?)),
6454-
Keyword::NVARCHAR => Ok(DataType::Nvarchar(self.parse_optional_precision()?)),
6454+
Keyword::NVARCHAR => {
6455+
Ok(DataType::Nvarchar(self.parse_optional_character_length()?))
6456+
}
64556457
Keyword::CHARACTER => {
64566458
if self.parse_keyword(Keyword::VARYING) {
64576459
Ok(DataType::CharacterVarying(

tests/sqlparser_common.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2258,7 +2258,10 @@ fn parse_cast() {
22582258
&Expr::Cast {
22592259
kind: CastKind::Cast,
22602260
expr: Box::new(Expr::Identifier(Ident::new("id"))),
2261-
data_type: DataType::Nvarchar(Some(50)),
2261+
data_type: DataType::Nvarchar(Some(CharacterLength::IntegerLength {
2262+
length: 50,
2263+
unit: None,
2264+
})),
22622265
format: None,
22632266
},
22642267
expr_from_projection(only(&select.projection))

tests/sqlparser_mssql.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,7 @@ fn parse_for_json_expect_ast() {
431431
#[test]
432432
fn parse_cast_varchar_max() {
433433
ms_and_generic().verified_expr("CAST('foo' AS VARCHAR(MAX))");
434+
ms_and_generic().verified_expr("CAST('foo' AS NVARCHAR(MAX))");
434435
}
435436

436437
#[test]

0 commit comments

Comments
 (0)