@@ -1046,7 +1046,7 @@ 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" ; // Convert FUNC_PARAM_IN to FUNC_PARAM_DEFAULT
1049+ result . mode = "FUNC_PARAM_DEFAULT" ;
10501050 } else {
10511051 result . mode = node . mode ;
10521052 }
@@ -1778,6 +1778,9 @@ export class V13ToV14Transformer {
17781778 if ( options === 2 ) {
17791779 return 4 ;
17801780 }
1781+ if ( options === 3 ) {
1782+ return 5 ; // INCLUDING CONSTRAINTS + INCLUDING COMMENTS: PG13 value 3 -> PG14 value 5
1783+ }
17811784 if ( options === 4 ) {
17821785 return 8 ; // INCLUDING DEFAULTS: PG13 value 4 -> PG14 value 8
17831786 }
@@ -1799,6 +1802,12 @@ export class V13ToV14Transformer {
17991802 if ( options === 128 ) {
18001803 return 256 ; // INCLUDING STATISTICS: PG13 value 128 -> PG14 value 256
18011804 }
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+ }
18021811
18031812 return options ;
18041813 }
@@ -1915,6 +1924,10 @@ export class V13ToV14Transformer {
19151924 return false ;
19161925 }
19171926 if ( parentType === 'DropStmt' ) {
1927+ // Check if this is a function drop context
1928+ if ( ( context as any ) . dropRemoveType === 'OBJECT_FUNCTION' ) {
1929+ return true ;
1930+ }
19181931 return false ;
19191932 }
19201933 }
@@ -2119,6 +2132,18 @@ export class V13ToV14Transformer {
21192132
21202133 let mode = "FUNC_PARAM_DEFAULT" ;
21212134
2135+ // Check if this should be variadic based on context (aggregate functions with VARIADIC keyword)
2136+ if ( context && context . parentNodeTypes ) {
2137+ const isAggregateContext = context . parentNodeTypes . includes ( 'RenameStmt' ) &&
2138+ ( context as any ) . renameObjectType === 'OBJECT_AGGREGATE' ;
2139+ if ( isAggregateContext && argType && argType . names && Array . isArray ( argType . names ) ) {
2140+ const typeName = argType . names [ argType . names . length - 1 ] ;
2141+ if ( typeName && typeName . String && typeName . String . str === 'any' ) {
2142+ mode = "FUNC_PARAM_VARIADIC" ;
2143+ }
2144+ }
2145+ }
2146+
21222147 const functionParam : any = {
21232148 argType : argType ,
21242149 mode : mode
@@ -2703,13 +2728,7 @@ export class V13ToV14Transformer {
27032728 const result : any = { } ;
27042729
27052730 if ( node . name !== undefined ) {
2706- result . expr = {
2707- ColumnRef : {
2708- fields : [ {
2709- String : { str : node . name }
2710- } ]
2711- }
2712- } ;
2731+ result . name = node . name ;
27132732 }
27142733
27152734 if ( node . expr !== undefined ) {
@@ -2737,9 +2756,35 @@ export class V13ToV14Transformer {
27372756 if ( node . exprs !== undefined ) {
27382757 result . exprs = Array . isArray ( node . exprs )
27392758 ? node . exprs . map ( ( expr : any ) => {
2740- return { StatsElem : { expr : this . transform ( expr as any , context ) } } ;
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 } } ;
27412772 } )
2742- : [ { StatsElem : { expr : this . transform ( node . exprs as any , context ) } } ] ;
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+ } ) ( ) ;
27432788 }
27442789
27452790 if ( node . relations !== undefined ) {
0 commit comments