@@ -195,6 +195,121 @@ export class Deparser implements DeparserVisitor {
195195 return delimiter ;
196196 }
197197
198+ /**
199+ * Maps ObjectType enum values to their corresponding SQL keywords
200+ * Used by AlterOwnerStmt, AlterObjectSchemaStmt, and other statements that need object type keywords
201+ */
202+ private getObjectTypeKeyword ( objectType : string ) : string {
203+ switch ( objectType ) {
204+ case 'OBJECT_TABLE' :
205+ return 'TABLE' ;
206+ case 'OBJECT_VIEW' :
207+ return 'VIEW' ;
208+ case 'OBJECT_INDEX' :
209+ return 'INDEX' ;
210+ case 'OBJECT_SEQUENCE' :
211+ return 'SEQUENCE' ;
212+ case 'OBJECT_FUNCTION' :
213+ return 'FUNCTION' ;
214+ case 'OBJECT_PROCEDURE' :
215+ return 'PROCEDURE' ;
216+ case 'OBJECT_SCHEMA' :
217+ return 'SCHEMA' ;
218+ case 'OBJECT_DATABASE' :
219+ return 'DATABASE' ;
220+ case 'OBJECT_DOMAIN' :
221+ return 'DOMAIN' ;
222+ case 'OBJECT_AGGREGATE' :
223+ return 'AGGREGATE' ;
224+ case 'OBJECT_CONVERSION' :
225+ return 'CONVERSION' ;
226+ case 'OBJECT_LANGUAGE' :
227+ return 'LANGUAGE' ;
228+ case 'OBJECT_OPERATOR' :
229+ return 'OPERATOR' ;
230+ case 'OBJECT_OPFAMILY' :
231+ return 'OPERATOR FAMILY' ;
232+ case 'OBJECT_OPCLASS' :
233+ return 'OPERATOR CLASS' ;
234+ case 'OBJECT_TSDICTIONARY' :
235+ return 'TEXT SEARCH DICTIONARY' ;
236+ case 'OBJECT_TSCONFIGURATION' :
237+ return 'TEXT SEARCH CONFIGURATION' ;
238+ case 'OBJECT_EVENT_TRIGGER' :
239+ return 'EVENT TRIGGER' ;
240+ case 'OBJECT_FDW' :
241+ return 'FOREIGN DATA WRAPPER' ;
242+ case 'OBJECT_FOREIGN_SERVER' :
243+ return 'SERVER' ;
244+ case 'OBJECT_TYPE' :
245+ return 'TYPE' ;
246+ case 'OBJECT_COLLATION' :
247+ return 'COLLATION' ;
248+ case 'OBJECT_PUBLICATION' :
249+ return 'PUBLICATION' ;
250+ case 'OBJECT_ACCESS_METHOD' :
251+ return 'ACCESS METHOD' ;
252+ case 'OBJECT_AMOP' :
253+ return 'OPERATOR CLASS' ;
254+ case 'OBJECT_AMPROC' :
255+ return 'OPERATOR CLASS' ;
256+ case 'OBJECT_ATTRIBUTE' :
257+ return 'ATTRIBUTE' ;
258+ case 'OBJECT_CAST' :
259+ return 'CAST' ;
260+ case 'OBJECT_COLUMN' :
261+ return 'COLUMN' ;
262+ case 'OBJECT_DEFAULT' :
263+ return 'DEFAULT' ;
264+ case 'OBJECT_DEFACL' :
265+ return 'DEFAULT PRIVILEGES' ;
266+ case 'OBJECT_DOMCONSTRAINT' :
267+ return 'DOMAIN' ;
268+ case 'OBJECT_EXTENSION' :
269+ return 'EXTENSION' ;
270+ case 'OBJECT_FOREIGN_TABLE' :
271+ return 'FOREIGN TABLE' ;
272+ case 'OBJECT_LARGEOBJECT' :
273+ return 'LARGE OBJECT' ;
274+ case 'OBJECT_MATVIEW' :
275+ return 'MATERIALIZED VIEW' ;
276+ case 'OBJECT_PARAMETER_ACL' :
277+ return 'PARAMETER' ;
278+ case 'OBJECT_POLICY' :
279+ return 'POLICY' ;
280+ case 'OBJECT_PUBLICATION_NAMESPACE' :
281+ return 'PUBLICATION' ;
282+ case 'OBJECT_PUBLICATION_REL' :
283+ return 'PUBLICATION' ;
284+ case 'OBJECT_ROLE' :
285+ return 'ROLE' ;
286+ case 'OBJECT_ROUTINE' :
287+ return 'ROUTINE' ;
288+ case 'OBJECT_RULE' :
289+ return 'RULE' ;
290+ case 'OBJECT_STATISTIC_EXT' :
291+ return 'STATISTICS' ;
292+ case 'OBJECT_SUBSCRIPTION' :
293+ return 'SUBSCRIPTION' ;
294+ case 'OBJECT_TABCONSTRAINT' :
295+ return 'CONSTRAINT' ;
296+ case 'OBJECT_TABLESPACE' :
297+ return 'TABLESPACE' ;
298+ case 'OBJECT_TRANSFORM' :
299+ return 'TRANSFORM' ;
300+ case 'OBJECT_TRIGGER' :
301+ return 'TRIGGER' ;
302+ case 'OBJECT_TSPARSER' :
303+ return 'TEXT SEARCH PARSER' ;
304+ case 'OBJECT_TSTEMPLATE' :
305+ return 'TEXT SEARCH TEMPLATE' ;
306+ case 'OBJECT_USER_MAPPING' :
307+ return 'USER MAPPING' ;
308+ default :
309+ throw new Error ( `Unsupported objectType: ${ objectType } ` ) ;
310+ }
311+ }
312+
198313 deparse ( node : Node , context ?: DeparserContext ) : string | null {
199314 if ( node == null ) {
200315 return null ;
@@ -8219,79 +8334,7 @@ export class Deparser implements DeparserVisitor {
82198334 throw new Error ( 'AlterOwnerStmt requires objectType' ) ;
82208335 }
82218336
8222- switch ( node . objectType ) {
8223- case 'OBJECT_TABLE' :
8224- output . push ( 'TABLE' ) ;
8225- break ;
8226- case 'OBJECT_VIEW' :
8227- output . push ( 'VIEW' ) ;
8228- break ;
8229- case 'OBJECT_INDEX' :
8230- output . push ( 'INDEX' ) ;
8231- break ;
8232- case 'OBJECT_SEQUENCE' :
8233- output . push ( 'SEQUENCE' ) ;
8234- break ;
8235- case 'OBJECT_FUNCTION' :
8236- output . push ( 'FUNCTION' ) ;
8237- break ;
8238- case 'OBJECT_PROCEDURE' :
8239- output . push ( 'PROCEDURE' ) ;
8240- break ;
8241- case 'OBJECT_SCHEMA' :
8242- output . push ( 'SCHEMA' ) ;
8243- break ;
8244- case 'OBJECT_DATABASE' :
8245- output . push ( 'DATABASE' ) ;
8246- break ;
8247- case 'OBJECT_DOMAIN' :
8248- output . push ( 'DOMAIN' ) ;
8249- break ;
8250- case 'OBJECT_AGGREGATE' :
8251- output . push ( 'AGGREGATE' ) ;
8252- break ;
8253- case 'OBJECT_CONVERSION' :
8254- output . push ( 'CONVERSION' ) ;
8255- break ;
8256- case 'OBJECT_LANGUAGE' :
8257- output . push ( 'LANGUAGE' ) ;
8258- break ;
8259- case 'OBJECT_OPERATOR' :
8260- output . push ( 'OPERATOR' ) ;
8261- break ;
8262- case 'OBJECT_OPFAMILY' :
8263- output . push ( 'OPERATOR FAMILY' ) ;
8264- break ;
8265- case 'OBJECT_OPCLASS' :
8266- output . push ( 'OPERATOR CLASS' ) ;
8267- break ;
8268- case 'OBJECT_TSDICTIONARY' :
8269- output . push ( 'TEXT SEARCH DICTIONARY' ) ;
8270- break ;
8271- case 'OBJECT_TSCONFIGURATION' :
8272- output . push ( 'TEXT SEARCH CONFIGURATION' ) ;
8273- break ;
8274- case 'OBJECT_EVENT_TRIGGER' :
8275- output . push ( 'EVENT TRIGGER' ) ;
8276- break ;
8277- case 'OBJECT_FDW' :
8278- output . push ( 'FOREIGN DATA WRAPPER' ) ;
8279- break ;
8280- case 'OBJECT_FOREIGN_SERVER' :
8281- output . push ( 'SERVER' ) ;
8282- break ;
8283- case 'OBJECT_TYPE' :
8284- output . push ( 'TYPE' ) ;
8285- break ;
8286- case 'OBJECT_COLLATION' :
8287- output . push ( 'COLLATION' ) ;
8288- break ;
8289- case 'OBJECT_PUBLICATION' :
8290- output . push ( 'PUBLICATION' ) ;
8291- break ;
8292- default :
8293- throw new Error ( `Unsupported AlterOwnerStmt objectType: ${ node . objectType } ` ) ;
8294- }
8337+ output . push ( this . getObjectTypeKeyword ( node . objectType ) ) ;
82958338
82968339 if ( node . relation ) {
82978340 output . push ( this . RangeVar ( node . relation , context ) ) ;
@@ -11159,66 +11202,11 @@ export class Deparser implements DeparserVisitor {
1115911202 AlterObjectSchemaStmt ( node : t . AlterObjectSchemaStmt , context : DeparserContext ) : string {
1116011203 const output : string [ ] = [ 'ALTER' ] ;
1116111204
11162- switch ( node . objectType ) {
11163- case 'OBJECT_TABLE' :
11164- output . push ( 'TABLE' ) ;
11165- break ;
11166- case 'OBJECT_VIEW' :
11167- output . push ( 'VIEW' ) ;
11168- break ;
11169- case 'OBJECT_FUNCTION' :
11170- output . push ( 'FUNCTION' ) ;
11171- break ;
11172- case 'OBJECT_TYPE' :
11173- output . push ( 'TYPE' ) ;
11174- break ;
11175- case 'OBJECT_DOMAIN' :
11176- output . push ( 'DOMAIN' ) ;
11177- break ;
11178- case 'OBJECT_SEQUENCE' :
11179- output . push ( 'SEQUENCE' ) ;
11180- break ;
11181- case 'OBJECT_OPCLASS' :
11182- output . push ( 'OPERATOR CLASS' ) ;
11183- break ;
11184- case 'OBJECT_OPFAMILY' :
11185- output . push ( 'OPERATOR FAMILY' ) ;
11186- break ;
11187- case 'OBJECT_OPERATOR' :
11188- output . push ( 'OPERATOR' ) ;
11189- break ;
11190- case 'OBJECT_TYPE' :
11191- output . push ( 'TYPE' ) ;
11192- break ;
11193- case 'OBJECT_COLLATION' :
11194- output . push ( 'COLLATION' ) ;
11195- break ;
11196- case 'OBJECT_CONVERSION' :
11197- output . push ( 'CONVERSION' ) ;
11198- break ;
11199- case 'OBJECT_TSPARSER' :
11200- output . push ( 'TEXT SEARCH PARSER' ) ;
11201- break ;
11202- case 'OBJECT_TSCONFIGURATION' :
11203- output . push ( 'TEXT SEARCH CONFIGURATION' ) ;
11204- break ;
11205- case 'OBJECT_TSTEMPLATE' :
11206- output . push ( 'TEXT SEARCH TEMPLATE' ) ;
11207- break ;
11208- case 'OBJECT_TSDICTIONARY' :
11209- output . push ( 'TEXT SEARCH DICTIONARY' ) ;
11210- break ;
11211- case 'OBJECT_AGGREGATE' :
11212- output . push ( 'AGGREGATE' ) ;
11213- break ;
11214- case 'OBJECT_FOREIGN_TABLE' :
11215- output . push ( 'FOREIGN TABLE' ) ;
11216- break ;
11217- case 'OBJECT_MATVIEW' :
11218- output . push ( 'MATERIALIZED VIEW' ) ;
11219- break ;
11220- default :
11221- output . push ( node . objectType . toString ( ) ) ;
11205+ try {
11206+ output . push ( this . getObjectTypeKeyword ( node . objectType ) ) ;
11207+ } catch {
11208+ // Fallback to objectType string if not supported
11209+ output . push ( node . objectType . toString ( ) ) ;
1122211210 }
1122311211
1122411212 if ( node . missing_ok ) {
0 commit comments