@@ -31,10 +31,12 @@ export class V13ToV14Transformer extends BaseTransformer {
3131 if ( typeof nodeData . ival === 'object' && nodeData . ival . ival !== undefined ) {
3232 transformedData . val = { Integer : { ival : nodeData . ival . ival } } ;
3333 } else if ( nodeData . ival === 0 || ( typeof nodeData . ival === 'object' && Object . keys ( nodeData . ival ) . length === 0 ) ) {
34- transformedData . val = { Integer : { ival : 0 } } ;
34+ transformedData . val = { Integer : { } } ;
35+ } else {
36+ transformedData . val = { Integer : { ival : nodeData . ival } } ;
3537 }
3638 delete transformedData . ival ;
37- } else if ( nodeData . fval !== undefined ) {
39+ } else if ( nodeData . fval !== undefined ) {
3840 const fvalStr = typeof nodeData . fval === 'object' ? nodeData . fval . fval : nodeData . fval ;
3941 transformedData . val = { Float : { str : fvalStr } } ;
4042 delete transformedData . fval ;
@@ -72,6 +74,10 @@ export class V13ToV14Transformer extends BaseTransformer {
7274 transformedData . mode = "FUNC_PARAM_DEFAULT" ;
7375 }
7476
77+ if ( transformedData . argType && typeof transformedData . argType === 'object' ) {
78+ transformedData . argType = this . transform ( transformedData . argType , context ) ;
79+ }
80+
7581 return transformedData ;
7682 }
7783
@@ -150,22 +156,13 @@ export class V13ToV14Transformer extends BaseTransformer {
150156 return transformedData ;
151157 }
152158
153- TypeName ( nodeData : any , context ?: TransformerContext ) : any {
154- const defaultResult = super . transformDefault ( { TypeName : nodeData } , 'TypeName' , nodeData , context ) ;
155- const processedData = defaultResult . TypeName ;
156-
157- if ( ! ( 'typemod' in processedData ) ) {
158- processedData . typemod = - 1 ;
159- }
160-
161- return processedData ;
162- }
159+
163160
164161 TypeCast ( nodeData : any , context ?: TransformerContext ) : any {
165162 const transformedData : any = { ...nodeData } ;
166163
167164 if ( transformedData . typeName && typeof transformedData . typeName === 'object' ) {
168- transformedData . typeName = this . TypeName ( transformedData . typeName , context ) ;
165+ transformedData . typeName = this . transform ( transformedData . typeName , context ) ;
169166 }
170167
171168 if ( transformedData . arg && typeof transformedData . arg === 'object' ) {
@@ -179,7 +176,7 @@ export class V13ToV14Transformer extends BaseTransformer {
179176 const transformedData : any = { ...nodeData } ;
180177
181178 if ( transformedData . typeName && typeof transformedData . typeName === 'object' ) {
182- transformedData . typeName = this . TypeName ( transformedData . typeName , context ) ;
179+ transformedData . typeName = this . transform ( transformedData . typeName , context ) ;
183180 }
184181
185182 if ( transformedData . constraints && Array . isArray ( transformedData . constraints ) ) {
@@ -203,23 +200,44 @@ export class V13ToV14Transformer extends BaseTransformer {
203200 }
204201
205202 protected transformDefault ( node : any , nodeType : string , nodeData : any , context ?: TransformerContext ) : any {
206- const result = super . transformDefault ( node , nodeType , nodeData , context ) ;
207- const transformedData = result [ nodeType ] ;
203+ if ( ! nodeData || typeof nodeData !== 'object' ) {
204+ return node ;
205+ }
206+
207+ if ( Array . isArray ( nodeData ) ) {
208+ return { [ nodeType ] : nodeData . map ( item => this . transform ( item , context ) ) } ;
209+ }
210+
211+ const result : any = { } ;
212+
213+ for ( const [ key , value ] of Object . entries ( nodeData ) ) {
214+ if ( Array . isArray ( value ) ) {
215+ result [ key ] = value . map ( item => this . transform ( item , context ) ) ;
216+ } else if ( value && typeof value === 'object' ) {
217+ result [ key ] = this . transform ( value , context ) ;
218+ } else {
219+ result [ key ] = value ;
220+ }
221+ }
222+
223+ if ( nodeType !== 'TypeName' ) {
224+ this . ensureCriticalFields ( result , nodeType ) ;
225+ }
208226
209- if ( ( nodeType === 'AlterTableStmt' || nodeType === 'CreateTableAsStmt' ) && transformedData && 'relkind' in transformedData ) {
210- transformedData . objtype = transformedData . relkind ;
211- delete transformedData . relkind ;
227+ if ( ( nodeType === 'AlterTableStmt' || nodeType === 'CreateTableAsStmt' ) && result && 'relkind' in result ) {
228+ result . objtype = result . relkind ;
229+ delete result . relkind ;
212230 }
213231
214- if ( nodeType === 'CreateTableAsStmt' && transformedData && transformedData . into && ! ( 'onCommit' in transformedData . into ) ) {
215- transformedData . into . onCommit = "ONCOMMIT_NOOP" ;
232+ if ( nodeType === 'CreateTableAsStmt' && result && result . into && ! ( 'onCommit' in result . into ) ) {
233+ result . into . onCommit = "ONCOMMIT_NOOP" ;
216234 }
217235
218- if ( transformedData && typeof transformedData === 'object' ) {
219- this . applyRuntimeSchemaDefaults ( nodeType , transformedData ) ;
236+ if ( result && typeof result === 'object' ) {
237+ this . applyRuntimeSchemaDefaults ( nodeType , result ) ;
220238 }
221239
222- return { [ nodeType ] : transformedData } ;
240+ return { [ nodeType ] : result } ;
223241 }
224242
225243
@@ -228,6 +246,10 @@ export class V13ToV14Transformer extends BaseTransformer {
228246 return ;
229247 }
230248
249+ protected ensureTypeNameFieldsRecursively ( obj : any ) : void {
250+ return ;
251+ }
252+
231253 private isFieldWrapped ( nodeType : string , fieldName : string , version : 13 | 14 ) : boolean {
232254 const schema = version === 13 ? pg13RuntimeSchema . runtimeSchema : pg14RuntimeSchema . runtimeSchema ;
233255 const nodeSpec = schema . find ( spec => spec . name === nodeType ) ;
@@ -252,7 +274,7 @@ export class V13ToV14Transformer extends BaseTransformer {
252274 const transformedData : any = { ...nodeData } ;
253275
254276 if ( transformedData . returnType && typeof transformedData . returnType === 'object' ) {
255- transformedData . returnType = this . TypeName ( transformedData . returnType , context ) ;
277+ transformedData . returnType = this . transform ( transformedData . returnType , context ) ;
256278 }
257279
258280 if ( transformedData . parameters && Array . isArray ( transformedData . parameters ) ) {
@@ -262,10 +284,44 @@ export class V13ToV14Transformer extends BaseTransformer {
262284 return transformedData ;
263285 }
264286
287+ TypeName ( nodeData : any , context ?: TransformerContext ) : any {
288+ const transformedData : any = { ...nodeData } ;
289+
290+ if ( transformedData . names && Array . isArray ( transformedData . names ) ) {
291+ transformedData . names = transformedData . names . map ( ( name : any ) => this . transform ( name , context ) ) ;
292+ }
293+
294+ return transformedData ;
295+ }
296+
265297 private applyRuntimeSchemaDefaults ( nodeType : string , nodeData : any ) : void {
266298 }
267299
268300 protected ensureCriticalFields ( nodeData : any , nodeType : string ) : void {
269- super . ensureCriticalFields ( nodeData , nodeType ) ;
301+ if ( ! nodeData || typeof nodeData !== 'object' ) return ;
302+
303+ if ( nodeType === 'RangeVar' ) {
304+ if ( ! ( 'location' in nodeData ) ) {
305+ nodeData . location = undefined ;
306+ }
307+ if ( ! ( 'relpersistence' in nodeData ) ) {
308+ nodeData . relpersistence = 'p' ;
309+ }
310+ if ( ! ( 'inh' in nodeData ) ) {
311+ nodeData . inh = true ;
312+ }
313+ }
314+
315+ if ( nodeData . relation && typeof nodeData . relation === 'object' ) {
316+ if ( ! ( 'location' in nodeData . relation ) ) {
317+ nodeData . relation . location = undefined ;
318+ }
319+ if ( ! ( 'relpersistence' in nodeData . relation ) ) {
320+ nodeData . relation . relpersistence = 'p' ;
321+ }
322+ if ( ! ( 'inh' in nodeData . relation ) ) {
323+ nodeData . relation . inh = true ;
324+ }
325+ }
270326 }
271327}
0 commit comments