Skip to content

Commit 8315d28

Browse files
committed
DRY objectType
1 parent 262ed45 commit 8315d28

File tree

1 file changed

+121
-133
lines changed

1 file changed

+121
-133
lines changed

packages/deparser/src/deparser.ts

Lines changed: 121 additions & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)