summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/func_json.result11
-rw-r--r--mysql-test/t/func_json.test11
-rw-r--r--sql/item_jsonfunc.cc2
3 files changed, 24 insertions, 0 deletions
diff --git a/mysql-test/r/func_json.result b/mysql-test/r/func_json.result
index 6a77648efa5..eff8f5c9c92 100644
--- a/mysql-test/r/func_json.result
+++ b/mysql-test/r/func_json.result
@@ -618,3 +618,14 @@ connection default;
set @@global.max_allowed_packet = default;
set @@global.net_buffer_length = default;
disconnect newconn;
+create table t1(j longtext, p longtext);
+insert into t1 values
+('{"a":1,"b":2,"c":3}','$.a'),
+('{"a":1,"b":2,"c":3}','$.b'),
+('{"a":1,"b":2,"c":3}','$.c');
+select j, p, json_remove(j, p) from t1;
+j p json_remove(j, p)
+{"a":1,"b":2,"c":3} $.a {"b": 2, "c": 3}
+{"a":1,"b":2,"c":3} $.b {"a": 1, "c": 3}
+{"a":1,"b":2,"c":3} $.c {"a": 1, "b": 2}
+drop table t1;
diff --git a/mysql-test/t/func_json.test b/mysql-test/t/func_json.test
index 74692c475f4..72b8681ac44 100644
--- a/mysql-test/t/func_json.test
+++ b/mysql-test/t/func_json.test
@@ -263,3 +263,14 @@ set @@global.max_allowed_packet = default;
set @@global.net_buffer_length = default;
--disconnect newconn
+
+#
+# MDEV-12262 Assertion `!null_value' failed in virtual bool Item::send on JSON_REMOVE.
+#
+create table t1(j longtext, p longtext);
+insert into t1 values
+ ('{"a":1,"b":2,"c":3}','$.a'),
+ ('{"a":1,"b":2,"c":3}','$.b'),
+ ('{"a":1,"b":2,"c":3}','$.c');
+select j, p, json_remove(j, p) from t1;
+drop table t1;
diff --git a/sql/item_jsonfunc.cc b/sql/item_jsonfunc.cc
index f3090a4097f..b8471dc8244 100644
--- a/sql/item_jsonfunc.cc
+++ b/sql/item_jsonfunc.cc
@@ -2633,6 +2633,7 @@ v_found:
str->length(0);
if (append_simple(str, js->ptr(), rem_start - js->ptr()) ||
+ (je.state == JST_KEY && n_item > 0 && str->append(",", 1)) ||
append_simple(str, rem_end, js->end() - rem_end))
goto js_error; /* Out of memory. */
@@ -2658,6 +2659,7 @@ v_found:
if (json_nice(&je, str, Item_func_json_format::LOOSE))
goto js_error;
+ null_value= 0;
return str;
js_error: