diff --git a/fuzz/fuzz_seeds/postgres_alter_extension.sql b/fuzz/fuzz_seeds/postgres_alter_extension.sql index 94794655bc..4fc0e0d314 100644 --- a/fuzz/fuzz_seeds/postgres_alter_extension.sql +++ b/fuzz/fuzz_seeds/postgres_alter_extension.sql @@ -37,3 +37,4 @@ ALTER EXTENSION citext DROP OPERATOR FAMILY of USING btree; ALTER EXTENSION citext ADD CAST (int AS text); ALTER EXTENSION citext ADD TRANSFORM FOR int LANGUAGE plpgsql; ALTER EXTENSION citext DROP TYPE public.ty; +ALTER EXTENSION citext ADD DOMAIN public.dom; diff --git a/src/ast/ddl.rs b/src/ast/ddl.rs index 75ce3c306d..d6394da162 100644 --- a/src/ast/ddl.rs +++ b/src/ast/ddl.rs @@ -4947,6 +4947,8 @@ pub enum AlterExtensionMember { Conversion(ObjectName), /// `DATABASE object_name` Database(Ident), + /// `DOMAIN object_name` + Domain(DataType), /// `EVENT TRIGGER object_name` EventTrigger(Ident), /// `EXTENSION object_name` @@ -5058,6 +5060,7 @@ impl fmt::Display for AlterExtensionMember { AlterExtensionMember::Collation(name) => write!(f, "COLLATION {name}"), AlterExtensionMember::Conversion(name) => write!(f, "CONVERSION {name}"), AlterExtensionMember::Database(name) => write!(f, "DATABASE {name}"), + AlterExtensionMember::Domain(data_type) => write!(f, "DOMAIN {data_type}"), AlterExtensionMember::EventTrigger(name) => write!(f, "EVENT TRIGGER {name}"), AlterExtensionMember::Extension(name) => write!(f, "EXTENSION {name}"), AlterExtensionMember::ForeignDataWrapper(name) => { diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 78a5e5815d..04b5c89e48 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -12556,6 +12556,8 @@ impl<'a> Parser<'a> { )) } else if self.parse_keyword(Keyword::DATABASE) { Ok(AlterExtensionMember::Database(self.parse_identifier()?)) + } else if self.parse_keyword(Keyword::DOMAIN) { + Ok(AlterExtensionMember::Domain(self.parse_data_type()?)) } else if self.parse_keywords(&[Keyword::EVENT, Keyword::TRIGGER]) { Ok(AlterExtensionMember::EventTrigger(self.parse_identifier()?)) } else if self.parse_keyword(Keyword::EXTENSION) { diff --git a/tests/sqlparser_postgres.rs b/tests/sqlparser_postgres.rs index b813de3ccf..ebeb6dab49 100644 --- a/tests/sqlparser_postgres.rs +++ b/tests/sqlparser_postgres.rs @@ -13547,6 +13547,7 @@ fn alter_extension_member_round_trip_forms(action: &str) { format!("ALTER EXTENSION ext_name {action} COLLATION schema.en_US"), format!("ALTER EXTENSION ext_name {action} CONVERSION conv"), format!("ALTER EXTENSION ext_name {action} DATABASE db_name"), + format!("ALTER EXTENSION ext_name {action} DOMAIN my_domain"), format!("ALTER EXTENSION ext_name {action} EVENT TRIGGER trg"), format!("ALTER EXTENSION ext_name {action} EXTENSION other_ext"), format!("ALTER EXTENSION ext_name {action} FOREIGN DATA WRAPPER fdw"), @@ -13888,6 +13889,10 @@ fn parse_alter_extension_add_member() { "ALTER EXTENSION ext_name ADD CAST (INT AS INT", "Expected: ), found: EOF", ), + ( + "ALTER EXTENSION ext_name ADD DOMAIN", + "Expected: a data type name, found: EOF", + ), ( "ALTER EXTENSION ext_name ADD OPERATOR CLASS", "Expected: identifier, found: EOF",