From d190e69e18a73e15b3a7f49973d3c1c7e812b237 Mon Sep 17 00:00:00 2001 From: LucaCappelletti94 Date: Wed, 11 Nov 2026 22:45:53 +0100 Subject: [PATCH] PostgreSQL: Support `CONVERSION` members in `ALTER EXTENSION` --- fuzz/fuzz_seeds/postgres_alter_extension.sql | 1 + src/ast/ddl.rs | 3 +++ src/keywords.rs | 1 + src/parser/mod.rs | 4 ++++ tests/sqlparser_postgres.rs | 2 ++ 5 files changed, 11 insertions(+) diff --git a/fuzz/fuzz_seeds/postgres_alter_extension.sql b/fuzz/fuzz_seeds/postgres_alter_extension.sql index 7c3d0680ce..867a079c74 100644 --- a/fuzz/fuzz_seeds/postgres_alter_extension.sql +++ b/fuzz/fuzz_seeds/postgres_alter_extension.sql @@ -13,3 +13,4 @@ ALTER EXTENSION citext DROP EVENT TRIGGER trg; ALTER EXTENSION citext ADD FOREIGN DATA WRAPPER fdw; ALTER EXTENSION citext DROP SERVER srv; ALTER EXTENSION citext ADD COLLATION public.coll; +ALTER EXTENSION citext DROP CONVERSION public.conv; diff --git a/src/ast/ddl.rs b/src/ast/ddl.rs index 9ca7ed2ffe..8c7bd76c0d 100644 --- a/src/ast/ddl.rs +++ b/src/ast/ddl.rs @@ -4930,6 +4930,8 @@ pub enum AlterExtensionMember { AccessMethod(Ident), /// `COLLATION object_name` Collation(ObjectName), + /// `CONVERSION object_name` + Conversion(ObjectName), /// `EVENT TRIGGER object_name` EventTrigger(Ident), /// `FOREIGN DATA WRAPPER object_name` @@ -4981,6 +4983,7 @@ impl fmt::Display for AlterExtensionMember { match self { AlterExtensionMember::AccessMethod(name) => write!(f, "ACCESS METHOD {name}"), AlterExtensionMember::Collation(name) => write!(f, "COLLATION {name}"), + AlterExtensionMember::Conversion(name) => write!(f, "CONVERSION {name}"), AlterExtensionMember::EventTrigger(name) => write!(f, "EVENT TRIGGER {name}"), AlterExtensionMember::ForeignDataWrapper(name) => { write!(f, "FOREIGN DATA WRAPPER {name}") diff --git a/src/keywords.rs b/src/keywords.rs index f6b0c1deee..6ed7eb6014 100644 --- a/src/keywords.rs +++ b/src/keywords.rs @@ -264,6 +264,7 @@ define_keywords!( CONTACT, CONTAINS, CONTINUE, + CONVERSION, CONVERT, COPY, COPY_OPTIONS, diff --git a/src/parser/mod.rs b/src/parser/mod.rs index ff67abc641..c75111f887 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -12545,6 +12545,10 @@ impl<'a> Parser<'a> { Ok(AlterExtensionMember::Collation( self.parse_object_name(false)?, )) + } else if self.parse_keyword(Keyword::CONVERSION) { + Ok(AlterExtensionMember::Conversion( + self.parse_object_name(false)?, + )) } else if self.parse_keywords(&[Keyword::EVENT, Keyword::TRIGGER]) { Ok(AlterExtensionMember::EventTrigger(self.parse_identifier()?)) } else if self.parse_keywords(&[Keyword::FOREIGN, Keyword::DATA, Keyword::WRAPPER]) { diff --git a/tests/sqlparser_postgres.rs b/tests/sqlparser_postgres.rs index 2a5db79891..bdcc35c0b0 100644 --- a/tests/sqlparser_postgres.rs +++ b/tests/sqlparser_postgres.rs @@ -13531,6 +13531,7 @@ fn alter_extension_member_round_trip_forms(action: &str) { format!("ALTER EXTENSION ext_name {action} ACCESS METHOD btree"), format!("ALTER EXTENSION ext_name {action} COLLATION en_US"), format!("ALTER EXTENSION ext_name {action} COLLATION schema.en_US"), + format!("ALTER EXTENSION ext_name {action} CONVERSION conv"), format!("ALTER EXTENSION ext_name {action} EVENT TRIGGER trg"), format!("ALTER EXTENSION ext_name {action} FOREIGN DATA WRAPPER fdw"), format!("ALTER EXTENSION ext_name {action} FOREIGN TABLE ft"), @@ -13721,6 +13722,7 @@ fn parse_alter_extension_add_member() { for member in [ "ACCESS METHOD", "COLLATION", + "CONVERSION", "EVENT TRIGGER", "FOREIGN DATA WRAPPER", "FOREIGN TABLE",