Skip to content

Commit 1b5a0cb

Browse files
Formatted code
1 parent b2bdb35 commit 1b5a0cb

File tree

4 files changed

+105
-45
lines changed

4 files changed

+105
-45
lines changed

src/ast/ddl.rs

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2007,17 +2007,15 @@ pub enum UserDefinedTypeRepresentation {
20072007
attributes: Vec<UserDefinedTypeCompositeAttributeDef>,
20082008
},
20092009
/// Enum type: `CREATE TYPE name AS ENUM (labels)`
2010-
///
2010+
///
20112011
/// Note: this is PostgreSQL-specific. See <https://www.postgresql.org/docs/current/sql-createtype.html>
2012-
Enum {
2013-
labels: Vec<Ident>
2014-
},
2012+
Enum { labels: Vec<Ident> },
20152013
/// Range type: `CREATE TYPE name AS RANGE (options)`
20162014
Range {
20172015
options: Vec<UserDefinedTypeRangeOption>,
20182016
},
20192017
/// Base type (SQL definition): `CREATE TYPE name (options)`
2020-
///
2018+
///
20212019
/// Note the lack of `AS` keyword
20222020
SqlDefinition {
20232021
options: Vec<UserDefinedTypeSqlDefinitionOption>,
@@ -2234,11 +2232,15 @@ impl fmt::Display for UserDefinedTypeRangeOption {
22342232
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
22352233
match self {
22362234
UserDefinedTypeRangeOption::Subtype(dt) => write!(f, "SUBTYPE = {}", dt),
2237-
UserDefinedTypeRangeOption::SubtypeOpClass(name) => write!(f, "SUBTYPE_OPCLASS = {}", name),
2235+
UserDefinedTypeRangeOption::SubtypeOpClass(name) => {
2236+
write!(f, "SUBTYPE_OPCLASS = {}", name)
2237+
}
22382238
UserDefinedTypeRangeOption::Collation(name) => write!(f, "COLLATION = {}", name),
22392239
UserDefinedTypeRangeOption::Canonical(name) => write!(f, "CANONICAL = {}", name),
22402240
UserDefinedTypeRangeOption::SubtypeDiff(name) => write!(f, "SUBTYPE_DIFF = {}", name),
2241-
UserDefinedTypeRangeOption::MultirangeTypeName(name) => write!(f, "MULTIRANGE_TYPE_NAME = {}", name),
2241+
UserDefinedTypeRangeOption::MultirangeTypeName(name) => {
2242+
write!(f, "MULTIRANGE_TYPE_NAME = {}", name)
2243+
}
22422244
}
22432245
}
22442246
}
@@ -2315,19 +2317,31 @@ impl fmt::Display for UserDefinedTypeSqlDefinitionOption {
23152317
UserDefinedTypeSqlDefinitionOption::Receive(name) => write!(f, "RECEIVE = {}", name),
23162318
UserDefinedTypeSqlDefinitionOption::Send(name) => write!(f, "SEND = {}", name),
23172319
UserDefinedTypeSqlDefinitionOption::TypmodIn(name) => write!(f, "TYPMOD_IN = {}", name),
2318-
UserDefinedTypeSqlDefinitionOption::TypmodOut(name) => write!(f, "TYPMOD_OUT = {}", name),
2320+
UserDefinedTypeSqlDefinitionOption::TypmodOut(name) => {
2321+
write!(f, "TYPMOD_OUT = {}", name)
2322+
}
23192323
UserDefinedTypeSqlDefinitionOption::Analyze(name) => write!(f, "ANALYZE = {}", name),
2320-
UserDefinedTypeSqlDefinitionOption::Subscript(name) => write!(f, "SUBSCRIPT = {}", name),
2321-
UserDefinedTypeSqlDefinitionOption::InternalLength(len) => write!(f, "INTERNALLENGTH = {}", len),
2324+
UserDefinedTypeSqlDefinitionOption::Subscript(name) => {
2325+
write!(f, "SUBSCRIPT = {}", name)
2326+
}
2327+
UserDefinedTypeSqlDefinitionOption::InternalLength(len) => {
2328+
write!(f, "INTERNALLENGTH = {}", len)
2329+
}
23222330
UserDefinedTypeSqlDefinitionOption::PassedByValue => write!(f, "PASSEDBYVALUE"),
2323-
UserDefinedTypeSqlDefinitionOption::Alignment(align) => write!(f, "ALIGNMENT = {}", align),
2324-
UserDefinedTypeSqlDefinitionOption::Storage(storage) => write!(f, "STORAGE = {}", storage),
2331+
UserDefinedTypeSqlDefinitionOption::Alignment(align) => {
2332+
write!(f, "ALIGNMENT = {}", align)
2333+
}
2334+
UserDefinedTypeSqlDefinitionOption::Storage(storage) => {
2335+
write!(f, "STORAGE = {}", storage)
2336+
}
23252337
UserDefinedTypeSqlDefinitionOption::Like(name) => write!(f, "LIKE = {}", name),
23262338
UserDefinedTypeSqlDefinitionOption::Category(c) => write!(f, "CATEGORY = '{}'", c),
23272339
UserDefinedTypeSqlDefinitionOption::Preferred(b) => write!(f, "PREFERRED = {}", b),
23282340
UserDefinedTypeSqlDefinitionOption::Default(expr) => write!(f, "DEFAULT = {}", expr),
23292341
UserDefinedTypeSqlDefinitionOption::Element(dt) => write!(f, "ELEMENT = {}", dt),
2330-
UserDefinedTypeSqlDefinitionOption::Delimiter(s) => write!(f, "DELIMITER = '{}'", escape_single_quote_string(s)),
2342+
UserDefinedTypeSqlDefinitionOption::Delimiter(s) => {
2343+
write!(f, "DELIMITER = '{}'", escape_single_quote_string(s))
2344+
}
23312345
UserDefinedTypeSqlDefinitionOption::Collatable(b) => write!(f, "COLLATABLE = {}", b),
23322346
}
23332347
}

src/ast/mod.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@ pub use self::dcl::{
5959
AlterRoleOperation, CreateRole, ResetConfig, RoleOption, SecondaryRoles, SetConfigValue, Use,
6060
};
6161
pub use self::ddl::{
62-
AlterColumnOperation, AlterConnectorOwner, AlterIndexOperation, AlterPolicyOperation,
63-
AlterSchema, AlterSchemaOperation, AlterTable, AlterTableAlgorithm, AlterTableLock,
64-
AlterTableOperation, AlterType, AlterTypeAddValue, AlterTypeAddValuePosition,
62+
Alignment, AlterColumnOperation, AlterConnectorOwner, AlterIndexOperation,
63+
AlterPolicyOperation, AlterSchema, AlterSchemaOperation, AlterTable, AlterTableAlgorithm,
64+
AlterTableLock, AlterTableOperation, AlterType, AlterTypeAddValue, AlterTypeAddValuePosition,
6565
AlterTypeOperation, AlterTypeRename, AlterTypeRenameValue, ClusteredBy, ColumnDef,
6666
ColumnOption, ColumnOptionDef, ColumnOptions, ColumnPolicy, ColumnPolicyProperty,
6767
ConstraintCharacteristics, CreateConnector, CreateDomain, CreateExtension, CreateFunction,
@@ -71,9 +71,9 @@ pub use self::ddl::{
7171
IdentityPropertyOrder, IndexColumn, IndexOption, IndexType, KeyOrIndexDisplay, Msck,
7272
NullsDistinctOption, Owner, Partition, ProcedureParam, ReferentialAction, RenameTableNameKind,
7373
ReplicaIdentity, TagsColumnOption, TriggerObjectKind, Truncate,
74-
UserDefinedTypeCompositeAttributeDef, UserDefinedTypeInternalLength, UserDefinedTypeRangeOption,
75-
UserDefinedTypeRepresentation, UserDefinedTypeSqlDefinitionOption, UserDefinedTypeStorage,
76-
ViewColumnDef, Alignment,
74+
UserDefinedTypeCompositeAttributeDef, UserDefinedTypeInternalLength,
75+
UserDefinedTypeRangeOption, UserDefinedTypeRepresentation, UserDefinedTypeSqlDefinitionOption,
76+
UserDefinedTypeStorage, ViewColumnDef,
7777
};
7878
pub use self::dml::{Delete, Insert, Update};
7979
pub use self::operator::{BinaryOperator, UnaryOperator};

src/parser/mod.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17380,9 +17380,7 @@ impl<'a> Parser<'a> {
1738017380
// Empty composite type
1738117381
return Ok(Statement::CreateType {
1738217382
name,
17383-
representation: UserDefinedTypeRepresentation::Composite {
17384-
attributes: vec![],
17385-
},
17383+
representation: UserDefinedTypeRepresentation::Composite { attributes: vec![] },
1738617384
});
1738717385
}
1738817386

tests/sqlparser_common.rs

Lines changed: 71 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -11695,39 +11695,58 @@ fn parse_projection_trailing_comma() {
1169511695
fn parse_create_type() {
1169611696
// Test simple type declaration without AS - verify AST
1169711697
match verified_stmt("CREATE TYPE mytype") {
11698-
Statement::CreateType { name, representation } => {
11698+
Statement::CreateType {
11699+
name,
11700+
representation,
11701+
} => {
1169911702
assert_eq!(name.to_string(), "mytype");
1170011703
assert_eq!(representation, UserDefinedTypeRepresentation::None);
1170111704
}
1170211705
_ => unreachable!(),
1170311706
}
1170411707

1170511708
// Test composite type - verify AST structure
11706-
match verified_stmt("CREATE TYPE address AS (street VARCHAR(100), city TEXT COLLATE \"en_US\")") {
11707-
Statement::CreateType { name, representation } => {
11709+
match verified_stmt("CREATE TYPE address AS (street VARCHAR(100), city TEXT COLLATE \"en_US\")")
11710+
{
11711+
Statement::CreateType {
11712+
name,
11713+
representation,
11714+
} => {
1170811715
assert_eq!(name.to_string(), "address");
1170911716
match representation {
1171011717
UserDefinedTypeRepresentation::Composite { attributes } => {
1171111718
assert_eq!(attributes.len(), 2);
1171211719
assert_eq!(attributes[0].name, Ident::new("street"));
11713-
assert_eq!(attributes[0].data_type, DataType::Varchar(Some(CharacterLength::IntegerLength { length: 100, unit: None })));
11720+
assert_eq!(
11721+
attributes[0].data_type,
11722+
DataType::Varchar(Some(CharacterLength::IntegerLength {
11723+
length: 100,
11724+
unit: None
11725+
}))
11726+
);
1171411727
assert_eq!(attributes[0].collation, None);
11715-
11728+
1171611729
assert_eq!(attributes[1].name, Ident::new("city"));
1171711730
assert_eq!(attributes[1].data_type, DataType::Text);
11718-
assert_eq!(attributes[1].collation.as_ref().map(|n| n.to_string()), Some("\"en_US\"".to_string()));
11731+
assert_eq!(
11732+
attributes[1].collation.as_ref().map(|n| n.to_string()),
11733+
Some("\"en_US\"".to_string())
11734+
);
1171911735
}
1172011736
_ => unreachable!(),
1172111737
}
1172211738
}
1172311739
_ => unreachable!(),
1172411740
}
11725-
11741+
1172611742
verified_stmt("CREATE TYPE empty AS ()");
1172711743

1172811744
// Test ENUM type - verify AST
1172911745
match verified_stmt("CREATE TYPE mood AS ENUM ('happy', 'sad')") {
11730-
Statement::CreateType { name, representation } => {
11746+
Statement::CreateType {
11747+
name,
11748+
representation,
11749+
} => {
1173111750
assert_eq!(name.to_string(), "mood");
1173211751
match representation {
1173311752
UserDefinedTypeRepresentation::Enum { labels } => {
@@ -11743,53 +11762,82 @@ fn parse_create_type() {
1174311762

1174411763
// Test RANGE type - verify AST structure
1174511764
match verified_stmt("CREATE TYPE int4range AS RANGE (SUBTYPE = INTEGER, CANONICAL = fn1)") {
11746-
Statement::CreateType { name, representation } => {
11765+
Statement::CreateType {
11766+
name,
11767+
representation,
11768+
} => {
1174711769
assert_eq!(name.to_string(), "int4range");
1174811770
match representation {
1174911771
UserDefinedTypeRepresentation::Range { options } => {
1175011772
assert_eq!(options.len(), 2);
11751-
assert!(matches!(options[0], UserDefinedTypeRangeOption::Subtype(DataType::Integer(_))));
11752-
assert!(matches!(options[1], UserDefinedTypeRangeOption::Canonical(_)));
11773+
assert!(matches!(
11774+
options[0],
11775+
UserDefinedTypeRangeOption::Subtype(DataType::Integer(_))
11776+
));
11777+
assert!(matches!(
11778+
options[1],
11779+
UserDefinedTypeRangeOption::Canonical(_)
11780+
));
1175311781
}
1175411782
_ => unreachable!(),
1175511783
}
1175611784
}
1175711785
_ => unreachable!(),
1175811786
}
11759-
11787+
1176011788
verified_stmt("CREATE TYPE textrange AS RANGE (SUBTYPE = TEXT, COLLATION = \"en_US\", MULTIRANGE_TYPE_NAME = textmultirange)");
1176111789

1176211790
// Test SQL definition type - verify AST
11763-
match verified_stmt("CREATE TYPE mytype (INPUT = in_fn, OUTPUT = out_fn, INTERNALLENGTH = 16, PASSEDBYVALUE)") {
11764-
Statement::CreateType { name, representation } => {
11791+
match verified_stmt(
11792+
"CREATE TYPE mytype (INPUT = in_fn, OUTPUT = out_fn, INTERNALLENGTH = 16, PASSEDBYVALUE)",
11793+
) {
11794+
Statement::CreateType {
11795+
name,
11796+
representation,
11797+
} => {
1176511798
assert_eq!(name.to_string(), "mytype");
1176611799
match representation {
1176711800
UserDefinedTypeRepresentation::SqlDefinition { options } => {
1176811801
assert_eq!(options.len(), 4);
11769-
assert!(matches!(options[0], UserDefinedTypeSqlDefinitionOption::Input(_)));
11770-
assert!(matches!(options[1], UserDefinedTypeSqlDefinitionOption::Output(_)));
1177111802
assert!(matches!(
11772-
options[2],
11773-
UserDefinedTypeSqlDefinitionOption::InternalLength(UserDefinedTypeInternalLength::Fixed(16))
11803+
options[0],
11804+
UserDefinedTypeSqlDefinitionOption::Input(_)
11805+
));
11806+
assert!(matches!(
11807+
options[1],
11808+
UserDefinedTypeSqlDefinitionOption::Output(_)
11809+
));
11810+
assert!(matches!(
11811+
options[2],
11812+
UserDefinedTypeSqlDefinitionOption::InternalLength(
11813+
UserDefinedTypeInternalLength::Fixed(16)
11814+
)
11815+
));
11816+
assert!(matches!(
11817+
options[3],
11818+
UserDefinedTypeSqlDefinitionOption::PassedByValue
1177411819
));
11775-
assert!(matches!(options[3], UserDefinedTypeSqlDefinitionOption::PassedByValue));
1177611820
}
1177711821
_ => unreachable!(),
1177811822
}
1177911823
}
1178011824
_ => unreachable!(),
1178111825
}
11782-
11826+
1178311827
verified_stmt("CREATE TYPE mytype (INPUT = in_fn, OUTPUT = out_fn, INTERNALLENGTH = VARIABLE, STORAGE = extended)");
11784-
11828+
1178511829
// Test all storage variants
1178611830
for storage in ["plain", "external", "extended", "main"] {
11787-
verified_stmt(&format!("CREATE TYPE t (INPUT = f_in, OUTPUT = f_out, STORAGE = {storage})"));
11831+
verified_stmt(&format!(
11832+
"CREATE TYPE t (INPUT = f_in, OUTPUT = f_out, STORAGE = {storage})"
11833+
));
1178811834
}
1178911835

1179011836
// Test all alignment variants
1179111837
for align in ["char", "int2", "int4", "double"] {
11792-
verified_stmt(&format!("CREATE TYPE t (INPUT = f_in, OUTPUT = f_out, ALIGNMENT = {align})"));
11838+
verified_stmt(&format!(
11839+
"CREATE TYPE t (INPUT = f_in, OUTPUT = f_out, ALIGNMENT = {align})"
11840+
));
1179311841
}
1179411842

1179511843
// Test additional function options (PostgreSQL-specific due to ANALYZE keyword)

0 commit comments

Comments
 (0)