diff options
-rw-r--r-- | mysql-test/r/func_json.result | 11 | ||||
-rw-r--r-- | mysql-test/t/func_json.test | 11 | ||||
-rw-r--r-- | sql/item_jsonfunc.cc | 2 |
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: |