@@ -193,8 +193,7 @@ export class V13ToV14Transformer {
193193 const prefix = firstElement . String . str || firstElement . String . sval ;
194194 const functionName = secondElement . String . str || secondElement . String . sval ;
195195
196- if ( prefix === 'pg_catalog' &&
197- ( functionName === 'substring' || this . isInCreateDomainContext ( context ) ) ) {
196+ if ( prefix === 'pg_catalog' && this . isInCreateDomainContext ( context ) ) {
198197 funcname = funcname . slice ( 1 ) ;
199198 }
200199 }
@@ -922,14 +921,54 @@ export class V13ToV14Transformer {
922921 return 'COERCE_EXPLICIT_CALL' ;
923922 }
924923
925- // Handle substring function specifically - context-dependent behavior
924+ // Handle substring function specifically - depends on pg_catalog prefix
926925 if ( funcname . toLowerCase ( ) === 'substring' ) {
926+ // Check if the function has pg_catalog prefix by examining the node
927+ if ( node && node . funcname && Array . isArray ( node . funcname ) && node . funcname . length >= 2 ) {
928+ const firstElement = node . funcname [ 0 ] ;
929+ if ( firstElement && typeof firstElement === 'object' && 'String' in firstElement ) {
930+ const prefix = firstElement . String . str || firstElement . String . sval ;
931+ if ( prefix === 'pg_catalog' ) {
932+ return 'COERCE_SQL_SYNTAX' ;
933+ }
934+ }
935+ }
927936 if ( this . isInConstraintContext ( context ) || this . isInCreateDomainContext ( context ) ) {
928937 return 'COERCE_EXPLICIT_CALL' ;
929938 }
930939 return 'COERCE_SQL_SYNTAX' ;
931940 }
932941
942+ // Handle ltrim function specifically - depends on pg_catalog prefix
943+ if ( funcname . toLowerCase ( ) === 'ltrim' ) {
944+ // Check if the function has pg_catalog prefix by examining the node
945+ if ( node && node . funcname && Array . isArray ( node . funcname ) && node . funcname . length >= 2 ) {
946+ const firstElement = node . funcname [ 0 ] ;
947+ if ( firstElement && typeof firstElement === 'object' && 'String' in firstElement ) {
948+ const prefix = firstElement . String . str || firstElement . String . sval ;
949+ if ( prefix === 'pg_catalog' ) {
950+ return 'COERCE_SQL_SYNTAX' ;
951+ }
952+ }
953+ }
954+ return 'COERCE_EXPLICIT_CALL' ;
955+ }
956+
957+ // Handle btrim function specifically - depends on pg_catalog prefix
958+ if ( funcname . toLowerCase ( ) === 'btrim' ) {
959+ // Check if the function has pg_catalog prefix by examining the node
960+ if ( node && node . funcname && Array . isArray ( node . funcname ) && node . funcname . length >= 2 ) {
961+ const firstElement = node . funcname [ 0 ] ;
962+ if ( firstElement && typeof firstElement === 'object' && 'String' in firstElement ) {
963+ const prefix = firstElement . String . str || firstElement . String . sval ;
964+ if ( prefix === 'pg_catalog' ) {
965+ return 'COERCE_SQL_SYNTAX' ;
966+ }
967+ }
968+ }
969+ return 'COERCE_EXPLICIT_CALL' ;
970+ }
971+
933972
934973 const explicitCallFunctions = [
935974 'substr' , 'timestamptz' , 'timestamp' , 'date' , 'time' , 'timetz' ,
@@ -1721,6 +1760,11 @@ export class V13ToV14Transformer {
17211760 return options ;
17221761 }
17231762
1763+ // Transform specific enum values from PG13 to PG14
1764+ if ( options === 6 ) {
1765+ return 12 ;
1766+ }
1767+
17241768 return options ;
17251769 }
17261770
@@ -2015,7 +2059,11 @@ export class V13ToV14Transformer {
20152059 mode : "FUNC_PARAM_DEFAULT"
20162060 } ;
20172061
2018- if ( typeNameNode && typeNameNode . name ) {
2062+ const shouldAddParameterName = context && context . parentNodeTypes &&
2063+ ! context . parentNodeTypes . includes ( 'DropStmt' ) ;
2064+
2065+
2066+ if ( typeNameNode && typeNameNode . name && shouldAddParameterName ) {
20192067 functionParam . name = typeNameNode . name ;
20202068 }
20212069
0 commit comments