Bug #106701 Contribution: Fix bug in REPLACE() in UNION truncates result
Submitted: 11 Mar 2022 0:01 Modified: 11 Mar 2022 7:25
Reporter: OCA Admin (OCA) Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: DML Severity:S3 (Non-critical)
Version:8.0 OS:Any
Assigned to: CPU Architecture:Any
Tags: Contribution

[11 Mar 2022 0:01] OCA Admin
Description:
This bug tracks a contribution by Nick Belyavski (Github user: nickcoast) as described in http://github.com/mysql/mysql-server/pull/390

How to repeat:
See description

Suggested fix:
See contribution code attached
[11 Mar 2022 0:01] OCA Admin
Contribution submitted via Github - Fix bug in REPLACE() in UNION truncates result 
(*) Contribution by Nick Belyavski (Github nickcoast, mysql-server/pull/390#issuecomment-1064447106): I confirm the code being submitted is offered under the terms of the OCA, and that I am authorized to contribute it.

Contribution: git_patch_873834034.txt (text/plain), 5.05 KiB.

[11 Mar 2022 7:25] MySQL Verification Team
Hello Nick Belyavski,

Thank you for the report and contribution.

regards,
Umesh
[12 Mar 2022 10:30] huahua xu
It may be better to fix this bug like:

   ulonglong char_length = args[0]->max_char_length(collation.collation);
+  ulonglong search_length = args[1]->max_char_length(collation.collation);
   ulonglong replace_length = args[2]->max_char_length(collation.collation);
+  int diff = (int) (replace_length - search_length);

-  if (replace_length > 1ULL) {
-    char_length = char_length * (replace_length - 1ULL);
+  if (diff > 0 && search_length >= 1ULL) {
+    ulonglong max_substrs = char_length / search_length
+    char_length += max_substrs * (uint) diff;
   }

   set_data_type_string(char_length);
[17 Mar 2022 23:56] Nick Belyavski
xu huahua

Nice! Same math, it seems, but easier to read than mine, and you improved my 'if' condition.
[5 Apr 2022 21:17] OCA Admin
Contribution submitted via Github - Bug #106701: Fix REPLACE() in UNION truncates result 
(*) Contribution by Nick Belyavski (Github nickcoast, mysql-server/pull/395#issuecomment-1089272147): I confirm the code being submitted is offered under the terms of the OCA, and that I am authorized to contribute it.

Contribution: git_patch_895090566.txt (text/plain), 6.59 KiB.