Skip to content

Commit a510935

Browse files
committed
Bug#26867509: JSON_OBJECT CREATES INVALID JSON CODE
When inserting JSON values from a grouped query into a string column, the inserted values could sometimes include the concatenation of all the values previously inserted into that column. The fix is to make Item_copy_json::save_in_field_inner() reset the buffer before converting the JSON value to text. (cherry picked from commit 0178fbc193bfaa0af49136e444ad5b73586d6f83)
1 parent 7bc11be commit a510935

File tree

4 files changed

+38
-0
lines changed

4 files changed

+38
-0
lines changed

mysql-test/suite/json/inc/json_insert.inc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,3 +145,14 @@ disconnect con1;
145145
connection default;
146146

147147
SET global max_allowed_packet=default;
148+
149+
--echo #
150+
--echo # Bug#26867509: JSON_OBJECT CREATES INVALID JSON CODE
151+
--echo #
152+
153+
CREATE TABLE t1(i INT, KEY(i));
154+
INSERT INTO t1 VALUES (1), (2), (3);
155+
CREATE TABLE t2(i INT, vc VARCHAR(100));
156+
INSERT INTO t2 SELECT i, JSON_ARRAY(i) FROM t1 GROUP BY i;
157+
SELECT * FROM t2 ORDER BY i;
158+
DROP TABLE t1, t2;

mysql-test/suite/json/r/json_insert_innodb.result

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,3 +174,16 @@ ARRAY 6000005 18000015
174174
INSERT INTO t1(a) VALUES(@a);
175175
DROP TABLE t1;
176176
SET global max_allowed_packet=default;
177+
#
178+
# Bug#26867509: JSON_OBJECT CREATES INVALID JSON CODE
179+
#
180+
CREATE TABLE t1(i INT, KEY(i));
181+
INSERT INTO t1 VALUES (1), (2), (3);
182+
CREATE TABLE t2(i INT, vc VARCHAR(100));
183+
INSERT INTO t2 SELECT i, JSON_ARRAY(i) FROM t1 GROUP BY i;
184+
SELECT * FROM t2 ORDER BY i;
185+
i vc
186+
1 [1]
187+
2 [2]
188+
3 [3]
189+
DROP TABLE t1, t2;

mysql-test/suite/json/r/json_insert_ndb.result

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,3 +180,16 @@ ARRAY 6000005 18000015
180180
INSERT INTO t1(a) VALUES(@a);
181181
DROP TABLE t1;
182182
SET global max_allowed_packet=default;
183+
#
184+
# Bug#26867509: JSON_OBJECT CREATES INVALID JSON CODE
185+
#
186+
CREATE TABLE t1(i INT, KEY(i));
187+
INSERT INTO t1 VALUES (1), (2), (3);
188+
CREATE TABLE t2(i INT, vc VARCHAR(100));
189+
INSERT INTO t2 SELECT i, JSON_ARRAY(i) FROM t1 GROUP BY i;
190+
SELECT * FROM t2 ORDER BY i;
191+
i vc
192+
1 [1]
193+
2 [2]
194+
3 [3]
195+
DROP TABLE t1, t2;

sql/item.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4838,6 +4838,7 @@ Item_copy_json::save_in_field_inner(Field *field, bool no_conversions)
48384838
}
48394839
else
48404840
{
4841+
str_value.length(0);
48414842
if (m_value->to_string(&str_value, true, item_name.ptr()))
48424843
return set_field_to_null(field); /* purecov: inspected */
48434844
return save_str_value_in_field(field, &str_value);

0 commit comments

Comments
 (0)