@@ -1022,7 +1022,7 @@ export class V13ToV14Transformer {
10221022
10231023
10241024
1025- private isVariadicParameterType ( argType : any , index ?: number , allArgs ?: any [ ] ) : boolean {
1025+ private isVariadicParameterType ( argType : any , index ?: number , allArgs ?: any [ ] , context ?: TransformerContext ) : boolean {
10261026 if ( ! argType ) return false ;
10271027
10281028 // Handle TypeName wrapper
@@ -1039,15 +1039,15 @@ export class V13ToV14Transformer {
10391039 }
10401040 }
10411041
1042- if ( index !== undefined && allArgs &&
1043- typeNode . names . length > 0 &&
1044- index === allArgs . length - 1 &&
1045- allArgs . length > 1 ) {
1046- const typeName = typeNode . names [ typeNode . names . length - 1 ] ?. String ?. str ;
1047- if ( typeName === 'anyarray' || typeName === 'any' ) {
1048- return true ;
1049- }
1042+ const typeName = typeNode . names [ typeNode . names . length - 1 ] ?. String ?. str ;
1043+
1044+ // In RenameStmt context for aggregates, "any" type should be treated as variadic
1045+ if ( context && context . parentNodeTypes ?. includes ( 'RenameStmt' ) &&
1046+ ! context . parentNodeTypes ?. includes ( 'DropStmt' ) && typeName === 'any' ) {
1047+ return true ;
10501048 }
1049+
1050+
10511051 }
10521052
10531053 return false ;
@@ -1075,15 +1075,24 @@ export class V13ToV14Transformer {
10751075 }
10761076
10771077 if ( node . mode !== undefined ) {
1078- const isInAggregateContext = context . parentNodeTypes ?. includes ( 'CreateAggregateStmt' ) ;
1079- const isInObjectAddressContext = context . parentNodeTypes ?. includes ( 'ObjectAddress' ) ;
1078+ const isInRenameContext = context . parentNodeTypes ?. includes ( 'RenameStmt' ) ;
1079+ const isInDropContext = context . parentNodeTypes ?. includes ( 'DropStmt' ) ;
1080+ const isInCommentContext = context . parentNodeTypes ?. includes ( 'CommentStmt' ) ;
10801081
1081- if ( node . mode === "FUNC_PARAM_VARIADIC" ) {
1082- result . mode = "FUNC_PARAM_VARIADIC" ; // Always preserve variadic mode
1082+ if ( isInRenameContext || isInCommentContext ) {
1083+ result . mode = node . mode ; // Preserve original mode
1084+ } else if ( isInDropContext ) {
1085+ if ( node . mode === "FUNC_PARAM_VARIADIC" ) {
1086+ result . mode = node . mode ; // Preserve variadic mode
1087+ } else if ( node . mode === "FUNC_PARAM_IN" ) {
1088+ result . mode = "FUNC_PARAM_DEFAULT" ; // Map IN to DEFAULT in PG14
1089+ } else {
1090+ result . mode = node . mode ; // Preserve other modes
1091+ }
10831092 } else if ( node . mode === "FUNC_PARAM_IN" ) {
10841093 result . mode = "FUNC_PARAM_DEFAULT" ; // Map IN to DEFAULT in PG14
10851094 } else {
1086- result . mode = node . mode ;
1095+ result . mode = node . mode ; // Preserve all other modes unchanged
10871096 }
10881097 }
10891098
@@ -1866,38 +1875,20 @@ export class V13ToV14Transformer {
18661875 const shouldPreserveObjfuncargs = this . shouldPreserveObjfuncargs ( context ) ;
18671876 const shouldCreateObjfuncargsFromObjargs = this . shouldCreateObjfuncargsFromObjargs ( context ) ;
18681877
1869- console . log ( 'DEBUG ObjectWithArgs context:' , {
1870- shouldCreateObjfuncargs,
1871- shouldPreserveObjfuncargs,
1872- shouldCreateObjfuncargsFromObjargs,
1873- parentNodeTypes : context . parentNodeTypes ,
1874- hasOriginalObjfuncargs : ! ! ( node as any ) . objfuncargs ,
1875- objname : result . objname
1876- } ) ;
18771878
18781879 if ( shouldCreateObjfuncargsFromObjargs && result . objargs ) {
18791880 // Create objfuncargs from objargs, with smart parameter mode handling
18801881 const originalObjfuncargs = ( node as any ) . objfuncargs ;
18811882 if ( originalObjfuncargs && Array . isArray ( originalObjfuncargs ) ) {
1882- result . objfuncargs = originalObjfuncargs . map ( ( item : any , index : number ) => {
1883- const transformedParam = this . transform ( item , context ) ;
1884- // Only apply heuristic detection if the parameter doesn't already have a variadic mode
1885- if ( transformedParam . FunctionParameter &&
1886- transformedParam . FunctionParameter . mode !== "FUNC_PARAM_VARIADIC" &&
1887- result . objargs && result . objargs [ index ] ) {
1888- const argType = result . objargs [ index ] ;
1889- if ( this . isVariadicParameterType ( argType , index , result . objargs ) ) {
1890- transformedParam . FunctionParameter . mode = "FUNC_PARAM_VARIADIC" ;
1891- }
1892- }
1893- return transformedParam ;
1883+ result . objfuncargs = originalObjfuncargs . map ( ( item : any ) => {
1884+ return this . transform ( item , context ) ;
18941885 } ) ;
18951886 } else {
18961887 result . objfuncargs = Array . isArray ( result . objargs )
18971888 ? result . objargs . map ( ( arg : any , index : number ) => {
18981889
18991890 const transformedArgType = this . visit ( arg , context ) ;
1900- const isVariadic = this . isVariadicParameterType ( arg , index , result . objargs ) ;
1891+ const isVariadic = this . isVariadicParameterType ( arg , index , result . objargs , context ) ;
19011892 const parameter = {
19021893 FunctionParameter : {
19031894 argType : transformedArgType . TypeName || transformedArgType ,
@@ -1910,7 +1901,7 @@ export class V13ToV14Transformer {
19101901 : [ {
19111902 FunctionParameter : {
19121903 argType : this . visit ( result . objargs , context ) ,
1913- mode : this . isVariadicParameterType ( result . objargs , 0 , [ result . objargs ] ) ? 'FUNC_PARAM_VARIADIC' : 'FUNC_PARAM_DEFAULT'
1904+ mode : this . isVariadicParameterType ( result . objargs , 0 , [ result . objargs ] , context ) ? 'FUNC_PARAM_VARIADIC' : 'FUNC_PARAM_DEFAULT'
19141905 }
19151906 } ] ;
19161907 }
0 commit comments