diff --git a/fuzz/fuzz_seeds/postgres_alter_extension.sql b/fuzz/fuzz_seeds/postgres_alter_extension.sql index 44eb414408..f82cba6b10 100644 --- a/fuzz/fuzz_seeds/postgres_alter_extension.sql +++ b/fuzz/fuzz_seeds/postgres_alter_extension.sql @@ -19,3 +19,4 @@ ALTER EXTENSION citext ADD TEXT SEARCH DICTIONARY public.dict; ALTER EXTENSION citext DROP TEXT SEARCH PARSER public.pgrm; ALTER EXTENSION citext ADD TEXT SEARCH TEMPLATE public.tpl; ALTER EXTENSION citext DROP DATABASE db_name; +ALTER EXTENSION citext ADD EXTENSION other_ext; diff --git a/src/ast/ddl.rs b/src/ast/ddl.rs index d46b877d91..e0247f7b34 100644 --- a/src/ast/ddl.rs +++ b/src/ast/ddl.rs @@ -4940,6 +4940,8 @@ pub enum AlterExtensionMember { Database(Ident), /// `EVENT TRIGGER object_name` EventTrigger(Ident), + /// `EXTENSION object_name` + Extension(Ident), /// `FOREIGN DATA WRAPPER object_name` ForeignDataWrapper(Ident), /// `FOREIGN TABLE object_name` @@ -5000,6 +5002,7 @@ impl fmt::Display for AlterExtensionMember { AlterExtensionMember::Conversion(name) => write!(f, "CONVERSION {name}"), AlterExtensionMember::Database(name) => write!(f, "DATABASE {name}"), AlterExtensionMember::EventTrigger(name) => write!(f, "EVENT TRIGGER {name}"), + AlterExtensionMember::Extension(name) => write!(f, "EXTENSION {name}"), AlterExtensionMember::ForeignDataWrapper(name) => { write!(f, "FOREIGN DATA WRAPPER {name}") } diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 75f077873a..9230c03ec3 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -12553,6 +12553,8 @@ impl<'a> Parser<'a> { Ok(AlterExtensionMember::Database(self.parse_identifier()?)) } else if self.parse_keywords(&[Keyword::EVENT, Keyword::TRIGGER]) { Ok(AlterExtensionMember::EventTrigger(self.parse_identifier()?)) + } else if self.parse_keyword(Keyword::EXTENSION) { + Ok(AlterExtensionMember::Extension(self.parse_identifier()?)) } else if self.parse_keywords(&[Keyword::FOREIGN, Keyword::DATA, Keyword::WRAPPER]) { Ok(AlterExtensionMember::ForeignDataWrapper( self.parse_identifier()?, diff --git a/tests/sqlparser_postgres.rs b/tests/sqlparser_postgres.rs index 4ac59bd631..0626ae2093 100644 --- a/tests/sqlparser_postgres.rs +++ b/tests/sqlparser_postgres.rs @@ -13534,6 +13534,7 @@ fn alter_extension_member_round_trip_forms(action: &str) { format!("ALTER EXTENSION ext_name {action} CONVERSION conv"), format!("ALTER EXTENSION ext_name {action} DATABASE db_name"), 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"), format!("ALTER EXTENSION ext_name {action} FOREIGN TABLE ft"), format!("ALTER EXTENSION ext_name {action} FOREIGN TABLE schema.ft"), @@ -13730,6 +13731,7 @@ fn parse_alter_extension_add_member() { "CONVERSION", "DATABASE", "EVENT TRIGGER", + "EXTENSION", "FOREIGN DATA WRAPPER", "FOREIGN TABLE", "LANGUAGE",