@@ -758,8 +758,8 @@ export class V13ToV14Transformer {
758758
759759 if ( ! isOperator ) {
760760 result . name . objfuncargs = Array . isArray ( result . name . objargs )
761- ? result . name . objargs . map ( ( arg : any ) => this . createFunctionParameterFromTypeName ( arg , context ) )
762- : [ this . createFunctionParameterFromTypeName ( result . name . objargs , context ) ] ;
761+ ? result . name . objargs . map ( ( arg : any , index : number ) => this . createFunctionParameterFromTypeName ( arg , context , index ) )
762+ : [ this . createFunctionParameterFromTypeName ( result . name . objargs , context , 0 ) ] ;
763763 }
764764 }
765765 }
@@ -978,7 +978,7 @@ export class V13ToV14Transformer {
978978
979979 const sqlSyntaxFunctions = [
980980 'btrim' , 'trim' , 'ltrim' , 'rtrim' ,
981- 'position' , 'overlay' ,
981+ 'position' , 'overlay' , 'substring' ,
982982 'extract' , 'timezone' , 'xmlexists' ,
983983 'current_date' , 'current_time' , 'current_timestamp' ,
984984 'localtime' , 'localtimestamp' , 'overlaps' ,
@@ -1030,11 +1030,22 @@ export class V13ToV14Transformer {
10301030 }
10311031
10321032 if ( node . mode !== undefined ) {
1033+ const isInAggregateContext = context . parentNodeTypes ?. includes ( 'CreateAggregateStmt' ) ;
1034+ const isInObjectAddressContext = context . parentNodeTypes ?. includes ( 'ObjectAddress' ) ;
1035+
10331036 if ( node . mode === "FUNC_PARAM_VARIADIC" ) {
1034- const isVariadicType = this . isVariadicParameterType ( node . argType ) ;
1035- result . mode = isVariadicType ? "FUNC_PARAM_VARIADIC" : "FUNC_PARAM_DEFAULT" ;
1037+ if ( isInAggregateContext ) {
1038+ result . mode = "FUNC_PARAM_DEFAULT" ;
1039+ } else {
1040+ const isVariadicType = this . isVariadicParameterType ( node . argType ) ;
1041+ result . mode = isVariadicType ? "FUNC_PARAM_VARIADIC" : "FUNC_PARAM_DEFAULT" ;
1042+ }
10361043 } else if ( node . mode === "FUNC_PARAM_IN" ) {
1037- result . mode = "FUNC_PARAM_DEFAULT" ;
1044+ if ( isInObjectAddressContext ) {
1045+ result . mode = "FUNC_PARAM_DEFAULT" ;
1046+ } else {
1047+ result . mode = "FUNC_PARAM_DEFAULT" ;
1048+ }
10381049 } else {
10391050 result . mode = node . mode ;
10401051 }
@@ -1070,8 +1081,8 @@ export class V13ToV14Transformer {
10701081
10711082 // Create objfuncargs from objargs for PG14
10721083 funcResult . objfuncargs = Array . isArray ( ( node . func as any ) . objargs )
1073- ? ( node . func as any ) . objargs . map ( ( arg : any ) => this . createFunctionParameterFromTypeName ( arg , childContext ) )
1074- : [ this . createFunctionParameterFromTypeName ( ( node . func as any ) . objargs , childContext ) ] ;
1084+ ? ( node . func as any ) . objargs . map ( ( arg : any , index : number ) => this . createFunctionParameterFromTypeName ( arg , childContext , index ) )
1085+ : [ this . createFunctionParameterFromTypeName ( ( node . func as any ) . objargs , childContext , 0 ) ] ;
10751086 }
10761087
10771088 result . func = funcResult ;
@@ -1742,7 +1753,7 @@ export class V13ToV14Transformer {
17421753 }
17431754
17441755 if ( node . options !== undefined ) {
1745- result . options = this . transformTableLikeOptions ( node . options ) ;
1756+ result . options = this . mapTableLikeOption ( node . options ) ;
17461757 }
17471758
17481759 return { TableLikeClause : result } ;
@@ -1817,8 +1828,8 @@ export class V13ToV14Transformer {
18171828 if ( shouldCreateObjfuncargsFromObjargs && result . objargs ) {
18181829 // Create objfuncargs from objargs (this takes priority over shouldCreateObjfuncargs)
18191830 result . objfuncargs = Array . isArray ( result . objargs )
1820- ? result . objargs . map ( ( arg : any ) => this . createFunctionParameterFromTypeName ( arg , context ) )
1821- : [ this . createFunctionParameterFromTypeName ( result . objargs , context ) ] ;
1831+ ? result . objargs . map ( ( arg : any , index : number ) => this . createFunctionParameterFromTypeName ( arg , context , index ) )
1832+ : [ this . createFunctionParameterFromTypeName ( result . objargs , context , 0 ) ] ;
18221833
18231834 } else if ( shouldCreateObjfuncargs ) {
18241835 result . objfuncargs = [ ] ;
@@ -2049,7 +2060,7 @@ export class V13ToV14Transformer {
20492060 return true ; // Preserve as object for other contexts
20502061 }
20512062
2052- private createFunctionParameterFromTypeName ( typeNameNode : any , context ?: TransformerContext ) : any {
2063+ private createFunctionParameterFromTypeName ( typeNameNode : any , context ?: TransformerContext , index : number = 0 ) : any {
20532064 const transformedTypeName = this . transform ( typeNameNode , { parentNodeTypes : [ ] } ) ;
20542065
20552066 const argType = transformedTypeName . TypeName ? transformedTypeName . TypeName : transformedTypeName ;
@@ -2062,7 +2073,6 @@ export class V13ToV14Transformer {
20622073 const shouldAddParameterName = context && context . parentNodeTypes &&
20632074 ! context . parentNodeTypes . includes ( 'DropStmt' ) ;
20642075
2065-
20662076 if ( typeNameNode && typeNameNode . name && shouldAddParameterName ) {
20672077 functionParam . name = typeNameNode . name ;
20682078 }
@@ -2781,6 +2791,7 @@ export class V13ToV14Transformer {
27812791 return { RenameStmt : result } ;
27822792 }
27832793
2794+
27842795 AlterObjectSchemaStmt ( node : any , context : TransformerContext ) : any {
27852796 const result : any = { } ;
27862797
@@ -2814,4 +2825,30 @@ export class V13ToV14Transformer {
28142825 return { AlterObjectSchemaStmt : result } ;
28152826 }
28162827
2828+ private mapTableLikeOption ( pg13Value : number ) : number {
2829+ if ( pg13Value === 2 ) {
2830+ return 4 ;
2831+ }
2832+ if ( pg13Value === 6 ) {
2833+ return 12 ;
2834+ }
2835+ if ( pg13Value >= 1 ) {
2836+ return pg13Value + 1 ;
2837+ }
2838+ return pg13Value ;
2839+ }
2840+
2841+ private mapFunctionParameterMode ( pg13Mode : string ) : string {
2842+ // Handle specific mode mappings between PG13 and PG14
2843+ switch ( pg13Mode ) {
2844+ case 'FUNC_PARAM_VARIADIC' :
2845+ return 'FUNC_PARAM_DEFAULT' ;
2846+ case 'FUNC_PARAM_IN' :
2847+ return 'FUNC_PARAM_DEFAULT' ;
2848+ default :
2849+ return pg13Mode ;
2850+ }
2851+ }
2852+
2853+
28172854}
0 commit comments