diff --git a/fuzz/fuzz_seeds/postgres_alter_extension.sql b/fuzz/fuzz_seeds/postgres_alter_extension.sql index 4c6cee2443..dcc5b31d7f 100644 --- a/fuzz/fuzz_seeds/postgres_alter_extension.sql +++ b/fuzz/fuzz_seeds/postgres_alter_extension.sql @@ -21,3 +21,4 @@ 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; +ALTER EXTENSION citext ADD PUBLICATION pub; diff --git a/src/ast/ddl.rs b/src/ast/ddl.rs index 5749c3a2ef..b9150c566d 100644 --- a/src/ast/ddl.rs +++ b/src/ast/ddl.rs @@ -4957,6 +4957,8 @@ pub enum AlterExtensionMember { }, /// `MATERIALIZED VIEW object_name` MaterializedView(ObjectName), + /// `PUBLICATION object_name` + Publication(Ident), /// `SCHEMA object_name` Schema(Ident), /// `SEQUENCE object_name` @@ -5018,6 +5020,7 @@ impl fmt::Display for AlterExtensionMember { } } AlterExtensionMember::MaterializedView(name) => write!(f, "MATERIALIZED VIEW {name}"), + AlterExtensionMember::Publication(name) => write!(f, "PUBLICATION {name}"), AlterExtensionMember::Schema(name) => write!(f, "SCHEMA {name}"), AlterExtensionMember::Sequence(name) => write!(f, "SEQUENCE {name}"), AlterExtensionMember::Server(name) => write!(f, "SERVER {name}"), diff --git a/src/keywords.rs b/src/keywords.rs index 6ed7eb6014..9e6cf5562b 100644 --- a/src/keywords.rs +++ b/src/keywords.rs @@ -856,6 +856,7 @@ define_keywords!( PROGRAM, PROJECTION, PUBLIC, + PUBLICATION, PURCHASE, PURGE, PUT, diff --git a/src/parser/mod.rs b/src/parser/mod.rs index bbf4e1d60d..8a7e5e824a 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -12579,6 +12579,8 @@ impl<'a> Parser<'a> { Ok(AlterExtensionMember::MaterializedView( self.parse_object_name(false)?, )) + } else if self.parse_keyword(Keyword::PUBLICATION) { + Ok(AlterExtensionMember::Publication(self.parse_identifier()?)) } else if self.parse_keyword(Keyword::SCHEMA) { Ok(AlterExtensionMember::Schema(self.parse_identifier()?)) } else if self.parse_keyword(Keyword::SEQUENCE) { diff --git a/tests/sqlparser_postgres.rs b/tests/sqlparser_postgres.rs index 86814d30c2..a3dd1a78b3 100644 --- a/tests/sqlparser_postgres.rs +++ b/tests/sqlparser_postgres.rs @@ -13542,6 +13542,7 @@ fn alter_extension_member_round_trip_forms(action: &str) { 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"), + format!("ALTER EXTENSION ext_name {action} PUBLICATION pub"), format!("ALTER EXTENSION ext_name {action} SCHEMA schema_name"), format!("ALTER EXTENSION ext_name {action} SEQUENCE seq"), format!("ALTER EXTENSION ext_name {action} SERVER srv"), @@ -13739,6 +13740,7 @@ fn parse_alter_extension_add_member() { "LANGUAGE", "MATERIALIZED VIEW", "PROCEDURAL LANGUAGE", + "PUBLICATION", "SCHEMA", "SEQUENCE", "SERVER",