diff --git a/fuzz/fuzz_seeds/postgres_alter_extension.sql b/fuzz/fuzz_seeds/postgres_alter_extension.sql index f82cba6b10..4c6cee2443 100644 --- a/fuzz/fuzz_seeds/postgres_alter_extension.sql +++ b/fuzz/fuzz_seeds/postgres_alter_extension.sql @@ -20,3 +20,4 @@ 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; +ALTER EXTENSION citext DROP INDEX public.idx; diff --git a/src/ast/ddl.rs b/src/ast/ddl.rs index e0247f7b34..5749c3a2ef 100644 --- a/src/ast/ddl.rs +++ b/src/ast/ddl.rs @@ -4946,6 +4946,8 @@ pub enum AlterExtensionMember { ForeignDataWrapper(Ident), /// `FOREIGN TABLE object_name` ForeignTable(ObjectName), + /// `INDEX object_name` + Index(ObjectName), /// `[ PROCEDURAL ] LANGUAGE object_name` Language { /// Whether the `PROCEDURAL` keyword was present. @@ -5007,6 +5009,7 @@ impl fmt::Display for AlterExtensionMember { write!(f, "FOREIGN DATA WRAPPER {name}") } AlterExtensionMember::ForeignTable(name) => write!(f, "FOREIGN TABLE {name}"), + AlterExtensionMember::Index(name) => write!(f, "INDEX {name}"), AlterExtensionMember::Language { procedural, name } => { if *procedural { write!(f, "PROCEDURAL LANGUAGE {name}") diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 9230c03ec3..bbf4e1d60d 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -12563,6 +12563,8 @@ impl<'a> Parser<'a> { Ok(AlterExtensionMember::ForeignTable( self.parse_object_name(false)?, )) + } else if self.parse_keyword(Keyword::INDEX) { + Ok(AlterExtensionMember::Index(self.parse_object_name(false)?)) } else if self.parse_keywords(&[Keyword::PROCEDURAL, Keyword::LANGUAGE]) { Ok(AlterExtensionMember::Language { procedural: true, diff --git a/tests/sqlparser_postgres.rs b/tests/sqlparser_postgres.rs index 0626ae2093..86814d30c2 100644 --- a/tests/sqlparser_postgres.rs +++ b/tests/sqlparser_postgres.rs @@ -13538,6 +13538,7 @@ fn alter_extension_member_round_trip_forms(action: &str) { 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"), + format!("ALTER EXTENSION ext_name {action} INDEX idx"), format!("ALTER EXTENSION ext_name {action} LANGUAGE plpgsql"), format!("ALTER EXTENSION ext_name {action} PROCEDURAL LANGUAGE plpgsql"), format!("ALTER EXTENSION ext_name {action} MATERIALIZED VIEW mv"), @@ -13734,6 +13735,7 @@ fn parse_alter_extension_add_member() { "EXTENSION", "FOREIGN DATA WRAPPER", "FOREIGN TABLE", + "INDEX", "LANGUAGE", "MATERIALIZED VIEW", "PROCEDURAL LANGUAGE",