@@ -446,19 +446,10 @@ bbf_rewrite_truncated_identifiers(const char *msg)
446446 const char * found ;
447447 const char * search_msg = result ? result : msg ;
448448
449+ /* Replace all occurrences of this key in the message */
449450 found = strstr (search_msg , key );
450- if (found )
451+ while (found )
451452 {
452- /*
453- * Only replace if the match is a complete identifier — i.e. the
454- * character immediately after the match is not an identifier char.
455- * This prevents partial replacement inside compound names like
456- * construct_unique_index_name results.
457- */
458- char after = found [key_len ];
459- if (after != '\0' && (isalnum ((unsigned char ) after ) || after == '_' ))
460- continue ;
461-
462453 {
463454 int prefix_len = found - search_msg ;
464455 int orig_len = strlen (entry -> original_name );
@@ -468,7 +459,9 @@ bbf_rewrite_truncated_identifiers(const char *msg)
468459 memcpy (newmsg , search_msg , prefix_len );
469460 memcpy (newmsg + prefix_len , entry -> original_name , orig_len );
470461 memcpy (newmsg + prefix_len + orig_len , found + key_len , suffix_len + 1 );
462+ search_msg = newmsg ;
471463 result = newmsg ;
464+ found = strstr (search_msg + prefix_len + orig_len , key );
472465 }
473466 }
474467 }
@@ -3160,9 +3153,9 @@ get_name_db_owner(HeapTuple tuple, TupleDesc dsc)
31603153 char * name_str = text_to_cstring (name );
31613154 char * name_db_owner = palloc0 (MAX_BBF_NAMEDATALEND );
31623155
3163- truncate_identifier (name_str , strlen ( name_str ), false );
3156+ truncate_tsql_identifier (name_str );
31643157 snprintf (name_db_owner , MAX_BBF_NAMEDATALEND , "%s_db_owner" , name_str );
3165- truncate_identifier (name_db_owner , strlen ( name_db_owner ), false );
3158+ truncate_tsql_identifier (name_db_owner );
31663159 return CStringGetDatum (name_db_owner );
31673160}
31683161
@@ -3174,9 +3167,9 @@ get_name_dbo(HeapTuple tuple, TupleDesc dsc)
31743167 char * name_str = text_to_cstring (name );
31753168 char * name_dbo = palloc0 (MAX_BBF_NAMEDATALEND );
31763169
3177- truncate_identifier (name_str , strlen ( name_str ), false );
3170+ truncate_tsql_identifier (name_str );
31783171 snprintf (name_dbo , MAX_BBF_NAMEDATALEND , "%s_dbo" , name_str );
3179- truncate_identifier (name_dbo , strlen ( name_dbo ), false );
3172+ truncate_tsql_identifier (name_dbo );
31803173 return CStringGetDatum (name_dbo );
31813174}
31823175
@@ -3188,9 +3181,9 @@ get_name_guest(HeapTuple tuple, TupleDesc dsc)
31883181 char * name_str = text_to_cstring (name );
31893182 char * name_dbo = palloc0 (MAX_BBF_NAMEDATALEND );
31903183
3191- truncate_identifier (name_str , strlen ( name_str ), false );
3184+ truncate_tsql_identifier (name_str );
31923185 snprintf (name_dbo , MAX_BBF_NAMEDATALEND , "%s_guest" , name_str );
3193- truncate_identifier (name_dbo , strlen ( name_dbo ), false );
3186+ truncate_tsql_identifier (name_dbo );
31943187 return CStringGetDatum (name_dbo );
31953188}
31963189
@@ -5444,7 +5437,9 @@ update_sysdatabases_db_name(const char *old_db_name, const char *new_db_name)
54445437
54455438 /* Set up the new database. */
54465439 values [Anum_sysdatabases_name - 1 ] = CStringGetTextDatum (new_db_name );
5447- replaces [Anum_sysdatabases_name - 1 ] = true;
5440+ replaces [Anum_sysdatabases_name - 1 ] = true;
5441+ values [Anum_sysdatabases_orig_name - 1 ] = CStringGetTextDatum (new_db_name );
5442+ replaces [Anum_sysdatabases_orig_name - 1 ] = true;
54485443
54495444 tuple = heap_modify_tuple (db_found ,
54505445 sysdatabases_rel_descr ,
0 commit comments