@@ -88,25 +88,26 @@ export class V13ToV14Transformer {
8888 if ( key === 'ctes' && Array . isArray ( value ) ) {
8989 transformedData [ key ] = value . map ( item => this . transform ( item as any , context ) ) ;
9090 } else if ( key === 'objname' && typeof value === 'object' && value !== null ) {
91- console . log ( 'transformGenericNode: Processing objname:' , {
92- isArray : Array . isArray ( value ) ,
93- value : JSON . stringify ( value , null , 2 ) ,
94- keys : Object . keys ( value )
95- } ) ;
9691 if ( Array . isArray ( value ) ) {
97- console . log ( 'transformGenericNode: objname is array, transforming items' ) ;
9892 transformedData [ key ] = value . map ( item => this . transform ( item as any , context ) ) ;
9993 } else {
10094 const keys = Object . keys ( value ) ;
10195 const isNumericKeysObject = keys . every ( k => / ^ \d + $ / . test ( k ) ) ;
102- console . log ( 'transformGenericNode: objname is object, isNumericKeysObject:' , isNumericKeysObject , 'keys:' , keys ) ;
96+
10397 if ( isNumericKeysObject && keys . length > 0 ) {
104- const sortedKeys = keys . sort ( ( a , b ) => parseInt ( a ) - parseInt ( b ) ) ;
105- console . log ( 'transformGenericNode: Converting numeric keys object to array, sortedKeys:' , sortedKeys ) ;
106- transformedData [ key ] = sortedKeys . map ( k => this . transform ( ( value as any ) [ k ] , context ) ) ;
98+ const shouldPreserve = this . shouldPreserveObjnameAsObject ( context ) ;
99+ if ( shouldPreserve ) {
100+ const transformedObjname : any = { } ;
101+ Object . keys ( value ) . forEach ( k => {
102+ transformedObjname [ k ] = this . transform ( ( value as any ) [ k ] , context ) ;
103+ } ) ;
104+ transformedData [ key ] = transformedObjname ;
105+ } else {
106+ const sortedKeys = keys . sort ( ( a , b ) => parseInt ( a ) - parseInt ( b ) ) ;
107+ transformedData [ key ] = sortedKeys . map ( k => this . transform ( ( value as any ) [ k ] , context ) ) ;
108+ }
107109 } else {
108110 // Regular object transformation
109- console . log ( 'transformGenericNode: Regular object transformation for objname' ) ;
110111 transformedData [ key ] = this . transform ( value as any , context ) ;
111112 }
112113 }
@@ -1666,8 +1667,26 @@ export class V13ToV14Transformer {
16661667 if ( Array . isArray ( result . objname ) ) {
16671668 result . objname = result . objname . map ( ( item : any ) => this . transform ( item , context ) ) ;
16681669 } else if ( typeof result . objname === 'object' && result . objname !== null ) {
1669- const keys = Object . keys ( result . objname ) . sort ( ( a , b ) => parseInt ( a ) - parseInt ( b ) ) ;
1670- result . objname = keys . map ( key => this . transform ( result . objname [ key ] , context ) ) ;
1670+ const keys = Object . keys ( result . objname ) ;
1671+ const isNumericKeysObject = keys . every ( k => / ^ \d + $ / . test ( k ) ) ;
1672+
1673+ if ( isNumericKeysObject && keys . length > 0 ) {
1674+ // Check if we should preserve objname as object with numeric keys
1675+ const shouldPreserve = this . shouldPreserveObjnameAsObject ( context ) ;
1676+ if ( shouldPreserve ) {
1677+ const transformedObjname : any = { } ;
1678+ Object . keys ( result . objname ) . forEach ( k => {
1679+ transformedObjname [ k ] = this . transform ( result . objname [ k ] , context ) ;
1680+ } ) ;
1681+ result . objname = transformedObjname ;
1682+ } else {
1683+ const sortedKeys = keys . sort ( ( a , b ) => parseInt ( a ) - parseInt ( b ) ) ;
1684+ result . objname = sortedKeys . map ( key => this . transform ( result . objname [ key ] , context ) ) ;
1685+ }
1686+ } else {
1687+ // Regular object transformation
1688+ result . objname = this . transform ( result . objname , context ) ;
1689+ }
16711690 } else {
16721691 result . objname = this . transform ( result . objname , context ) ;
16731692 }
@@ -1862,6 +1881,25 @@ export class V13ToV14Transformer {
18621881 return false ;
18631882 }
18641883
1884+ private shouldPreserveObjnameAsObject ( context : TransformerContext ) : boolean {
1885+ if ( ! context . parentNodeTypes || context . parentNodeTypes . length === 0 ) {
1886+ return true ; // Default to preserving objects
1887+ }
1888+
1889+ // For CreateOpClassItem contexts, convert objname to arrays (PG14 expects arrays)
1890+ const convertToArrayContexts = [
1891+ 'CreateOpClassStmt' , 'CreateOpClassItem' , 'CreateAccessMethodStmt'
1892+ ] ;
1893+
1894+ for ( const parentType of context . parentNodeTypes ) {
1895+ if ( convertToArrayContexts . includes ( parentType ) ) {
1896+ return false ; // Convert to array for these contexts
1897+ }
1898+ }
1899+
1900+ return true ; // Preserve as object for other contexts
1901+ }
1902+
18651903 private createFunctionParameterFromTypeName ( typeNameNode : any ) : any {
18661904 const transformedTypeName = this . transform ( typeNameNode , { parentNodeTypes : [ ] } ) ;
18671905
0 commit comments