1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
--source include/have_debug.inc
--source include/have_innodb_min_8k.inc
--source include/have_innodb_max_16k.inc
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings
CREATE TABLE t1 (
id INT UNSIGNED,
a JSON DEFAULT NULL,
PRIMARY KEY (id),
KEY ((CAST(JSON_EXTRACT(a,_utf8mb4'$.b') AS CHAR(255) ARRAY)))
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ;
DELIMITER |;
CREATE PROCEDURE fill()
BEGIN
DECLARE v_i BIGINT UNSIGNED DEFAULT 0;
REPEAT
SET v_i:=v_i+1;
REPLACE INTO t1(id,a) VALUES(FLOOR(RAND()*100000),CONCAT('{"a":"\'{ab:a,ba:',FLOOR(RAND()*100000),',bab:baa}\'","b":"\'{a:bbb,bab:true,bb:[',FLOOR(RAND()*100000),',8,7,1,9,10,8,7,3]}\'","ba":"b","baa":[6,1,1,2,9,8,0,5,2,4]}'));
UNTIL v_i=200 END REPEAT;
END |
CREATE PROCEDURE upd()
BEGIN
DECLARE v_i BIGINT UNSIGNED DEFAULT 0;
REPEAT
SET v_i:=v_i+1;
UPDATE t1 SET a= CONCAT('{"b":',FLOOR(RAND()*100000),',"aba":"\'{a:[a,aa,b,aab,aa,bba,baa,a],b:bba}\'","b":',FLOOR(RAND()*100000),',"bb":2}');
UNTIL v_i = 10 END REPEAT;
END |
DELIMITER ;|
REPLACE INTO t1(id,a) VALUES(7,CONCAT('{"a":"\'{ab:a,ba:',FLOOR(RAND()*100000),',bab:baa}\'","b":"\'{a:bbb,bab:true,bb:[',FLOOR(RAND()*100000),',8,7,1,9,10,8,7,3]}\'","ba":"b","baa":[6,1,1,2,9,8,0,5,2,4]}'));
UPDATE t1 SET a= CONCAT('{"b":',FLOOR(RAND()*100000),',"aba":"\'{a:[a,aa,b,aab,aa,bba,baa,a],b:bba}\'","b":',FLOOR(RAND()*100000),',"bb":2}');
UPDATE t1 SET a= CONCAT('{"b":',FLOOR(RAND()*100000),',"aba":"\'{a:[a,aa,b,aab,aa,bba,baa,a],b:bba}\'","b":',FLOOR(RAND()*100000),',"bb":2}');
--sleep 5
--let $memory_before_insert= `SELECT CURRENT_COUNT_USED FROM performance_schema.memory_summary_global_by_event_name WHERE event_name LIKE 'memory/innodb/memory';`
CALL fill();
--sleep 5
--let $memory_after_insert= `SELECT CURRENT_COUNT_USED FROM performance_schema.memory_summary_global_by_event_name WHERE event_name LIKE 'memory/innodb/memory';`
assert($memory_after_insert == $memory_before_insert);
--let $memory_before_update= `SELECT CURRENT_COUNT_USED FROM performance_schema.memory_summary_global_by_event_name WHERE event_name LIKE 'memory/innodb/memory';`
CALL upd();
--sleep 5
--let $memory_after_update= `SELECT CURRENT_COUNT_USED FROM performance_schema.memory_summary_global_by_event_name WHERE event_name LIKE 'memory/innodb/memory';`
assert($memory_after_update == $memory_before_update);
DROP PROCEDURE IF EXISTS fill;
DROP PROCEDURE IF EXISTS upd;
DROP TABLE t1;
|