@@ -1046,7 +1046,12 @@ export class V13ToV14Transformer {
10461046 if ( node . mode === "FUNC_PARAM_VARIADIC" ) {
10471047 result . mode = "FUNC_PARAM_VARIADIC" ; // Always preserve variadic parameters
10481048 } else if ( node . mode === "FUNC_PARAM_IN" ) {
1049- result . mode = "FUNC_PARAM_DEFAULT" ;
1049+ // Check if this parameter should be variadic based on polymorphic array types
1050+ if ( this . isVariadicParameterType ( node . argType ) ) {
1051+ result . mode = "FUNC_PARAM_VARIADIC" ;
1052+ } else {
1053+ result . mode = "FUNC_PARAM_DEFAULT" ;
1054+ }
10501055 } else {
10511056 result . mode = node . mode ;
10521057 }
@@ -1778,9 +1783,6 @@ export class V13ToV14Transformer {
17781783 if ( options === 2 ) {
17791784 return 4 ;
17801785 }
1781- if ( options === 3 ) {
1782- return 5 ; // INCLUDING CONSTRAINTS + INCLUDING COMMENTS: PG13 value 3 -> PG14 value 5
1783- }
17841786 if ( options === 4 ) {
17851787 return 8 ; // INCLUDING DEFAULTS: PG13 value 4 -> PG14 value 8
17861788 }
@@ -1802,12 +1804,6 @@ export class V13ToV14Transformer {
18021804 if ( options === 128 ) {
18031805 return 256 ; // INCLUDING STATISTICS: PG13 value 128 -> PG14 value 256
18041806 }
1805- if ( options === 131 ) {
1806- return 261 ; // INCLUDING CONSTRAINTS + INCLUDING STATISTICS: PG13 value 131 -> PG14 value 261
1807- }
1808- if ( options === 163 ) {
1809- return 325 ; // INCLUDING CONSTRAINTS + INCLUDING INDEXES + INCLUDING COMMENTS + INCLUDING STORAGE: PG13 value 163 -> PG14 value 325
1810- }
18111807
18121808 return options ;
18131809 }
@@ -1924,10 +1920,6 @@ export class V13ToV14Transformer {
19241920 return false ;
19251921 }
19261922 if ( parentType === 'DropStmt' ) {
1927- // Check if this is a function drop context
1928- if ( ( context as any ) . dropRemoveType === 'OBJECT_FUNCTION' ) {
1929- return true ;
1930- }
19311923 return false ;
19321924 }
19331925 }
@@ -2132,7 +2124,20 @@ export class V13ToV14Transformer {
21322124
21332125 let mode = "FUNC_PARAM_DEFAULT" ;
21342126
2135- // Check if this should be variadic based on context (aggregate functions with VARIADIC keyword)
2127+ // Check if this is a variadic parameter type (anyarray, anycompatiblearray, etc.)
2128+ if ( this . isVariadicParameterType ( argType ) ) {
2129+ mode = "FUNC_PARAM_VARIADIC" ;
2130+ }
2131+
2132+ if ( argType && argType . names && Array . isArray ( argType . names ) ) {
2133+ const typeName = argType . names [ argType . names . length - 1 ] ;
2134+ if ( typeName && typeName . String && typeName . String . str === 'anyarray' ) {
2135+ mode = "FUNC_PARAM_VARIADIC" ;
2136+ }
2137+ }
2138+
2139+
2140+ // Also check for VARIADIC context in aggregate functions
21362141 if ( context && context . parentNodeTypes ) {
21372142 const isAggregateContext = context . parentNodeTypes . includes ( 'RenameStmt' ) &&
21382143 ( context as any ) . renameObjectType === 'OBJECT_AGGREGATE' ;
@@ -2728,7 +2733,13 @@ export class V13ToV14Transformer {
27282733 const result : any = { } ;
27292734
27302735 if ( node . name !== undefined ) {
2731- result . name = node . name ;
2736+ result . expr = {
2737+ ColumnRef : {
2738+ fields : [ {
2739+ String : { str : node . name }
2740+ } ]
2741+ }
2742+ } ;
27322743 }
27332744
27342745 if ( node . expr !== undefined ) {
@@ -2756,35 +2767,9 @@ export class V13ToV14Transformer {
27562767 if ( node . exprs !== undefined ) {
27572768 result . exprs = Array . isArray ( node . exprs )
27582769 ? node . exprs . map ( ( expr : any ) => {
2759- const transformed = this . transform ( expr as any , context ) ;
2760- if ( transformed && transformed . StatsElem ) {
2761- return transformed ;
2762- }
2763- // Check if this is a simple ColumnRef that should become a name field
2764- if ( transformed && transformed . ColumnRef &&
2765- transformed . ColumnRef . fields &&
2766- Array . isArray ( transformed . ColumnRef . fields ) &&
2767- transformed . ColumnRef . fields . length === 1 &&
2768- transformed . ColumnRef . fields [ 0 ] . String ) {
2769- return { StatsElem : { name : transformed . ColumnRef . fields [ 0 ] . String . str } } ;
2770- }
2771- return { StatsElem : { expr : transformed } } ;
2770+ return { StatsElem : { expr : this . transform ( expr as any , context ) } } ;
27722771 } )
2773- : ( ( ) => {
2774- const transformed = this . transform ( node . exprs as any , context ) ;
2775- if ( transformed && transformed . StatsElem ) {
2776- return transformed ;
2777- }
2778- // Check if this is a simple ColumnRef that should become a name field
2779- if ( transformed && transformed . ColumnRef &&
2780- transformed . ColumnRef . fields &&
2781- Array . isArray ( transformed . ColumnRef . fields ) &&
2782- transformed . ColumnRef . fields . length === 1 &&
2783- transformed . ColumnRef . fields [ 0 ] . String ) {
2784- return { StatsElem : { name : transformed . ColumnRef . fields [ 0 ] . String . str } } ;
2785- }
2786- return { StatsElem : { expr : transformed } } ;
2787- } ) ( ) ;
2772+ : [ { StatsElem : { expr : this . transform ( node . exprs as any , context ) } } ] ;
27882773 }
27892774
27902775 if ( node . relations !== undefined ) {
0 commit comments