mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-04 12:56:14 +01:00 
			
		
		
		
	use the same condition in fill_schema_table_from_frm() when open_table_from_share() fails, as in fill_schema_table_from_frm() when tdc_aquire_share() fails and as in fill_schema_table_from_open() when open_table_from_share() fails
		
			
				
	
	
		
			166 lines
		
	
	
	
		
			5.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
	
		
			5.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
--source include/have_utf8.inc
 | 
						|
--source include/have_type_mysql_json.inc
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # The following test takes 2 tables containing a JSON column and attempts
 | 
						|
--echo # to repair them.
 | 
						|
--echo #
 | 
						|
--echo # The tables header is (Description, Expected, Actual), where description
 | 
						|
--echo # shows a brief description what the JSON value is testing in the MariaDB
 | 
						|
--echo # implementation. Expected is the longtext string and actual is the JSON
 | 
						|
--echo # column that needs to be converted to MariaDB's representation of
 | 
						|
--echo # LONGTEXT.
 | 
						|
--echo #
 | 
						|
 | 
						|
 | 
						|
call mtr.add_suppression("Table rebuild required");
 | 
						|
call mtr.add_suppression("is marked as crashed");
 | 
						|
call mtr.add_suppression("Checking");
 | 
						|
 | 
						|
let $MYSQLD_DATADIR= `select @@datadir`;
 | 
						|
 | 
						|
SET NAMES utf8;
 | 
						|
 | 
						|
--copy_file std_data/mysql_json/tempty.frm $MYSQLD_DATADIR/test/tempty.frm
 | 
						|
--copy_file std_data/mysql_json/tempty.MYI $MYSQLD_DATADIR/test/tempty.MYI
 | 
						|
--copy_file std_data/mysql_json/tempty.MYD $MYSQLD_DATADIR/test/tempty.MYD
 | 
						|
 | 
						|
--copy_file std_data/mysql_json/mysql_json_test.frm $MYSQLD_DATADIR/test/mysql_json_test.frm
 | 
						|
--copy_file std_data/mysql_json/mysql_json_test.MYI $MYSQLD_DATADIR/test/mysql_json_test.MYI
 | 
						|
--copy_file std_data/mysql_json/mysql_json_test.MYD $MYSQLD_DATADIR/test/mysql_json_test.MYD
 | 
						|
 | 
						|
--copy_file std_data/mysql_json/mysql_json_test_big.frm $MYSQLD_DATADIR/test/mysql_json_test_big.frm
 | 
						|
--copy_file std_data/mysql_json/mysql_json_test_big.MYI $MYSQLD_DATADIR/test/mysql_json_test_big.MYI
 | 
						|
--copy_file std_data/mysql_json/mysql_json_test_big.MYD $MYSQLD_DATADIR/test/mysql_json_test_big.MYD
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # Check that only ALTER TABLE ... FORCE is allowed on a MySQL 5.7 table
 | 
						|
--echo # with a JSON column.
 | 
						|
--echo #
 | 
						|
 | 
						|
--error ER_TABLE_NEEDS_REBUILD
 | 
						|
show create table tempty;
 | 
						|
--error ER_TABLE_NEEDS_REBUILD
 | 
						|
select * from tempty;
 | 
						|
 | 
						|
--sorted_result
 | 
						|
select table_name, table_comment from information_schema.tables where table_schema='test' and table_comment!='VIEW';
 | 
						|
 | 
						|
alter table tempty force;
 | 
						|
show create table tempty;
 | 
						|
 | 
						|
--error ER_TABLE_NEEDS_REBUILD
 | 
						|
show create table mysql_json_test;
 | 
						|
--error ER_TABLE_NEEDS_REBUILD
 | 
						|
select * from mysql_json_test;
 | 
						|
 | 
						|
--error ER_TABLE_NEEDS_REBUILD
 | 
						|
CREATE TABLE t2 AS SELECT * FROM mysql_json_test;
 | 
						|
--error ER_NOT_ALLOWED_IN_THIS_CONTEXT
 | 
						|
CREATE TABLE t2 (a mysql_json /*new column*/) AS SELECT * FROM mysql_json_test;
 | 
						|
--error ER_NOT_ALLOWED_IN_THIS_CONTEXT
 | 
						|
CREATE TABLE t2 (actual mysql_json /*existing column*/) AS SELECT * FROM mysql_json_test;
 | 
						|
 | 
						|
--error ER_TABLE_NEEDS_REBUILD
 | 
						|
LOCK TABLES mysql_json_test WRITE;
 | 
						|
 | 
						|
alter table mysql_json_test force;
 | 
						|
 | 
						|
--sorted_result
 | 
						|
select description, expected, actual, expected = actual from mysql_json_test;
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # A quick check that all rows match from the original MySQL Table.
 | 
						|
--echo #
 | 
						|
select count(*) as 'Total_Number_of_Tests',
 | 
						|
       sum(expected = actual) as 'Succesful_Tests'
 | 
						|
from mysql_json_test;
 | 
						|
 | 
						|
show create table mysql_json_test;
 | 
						|
 | 
						|
--error ER_TABLE_NEEDS_REBUILD
 | 
						|
show create table mysql_json_test_big;
 | 
						|
--error ER_TABLE_NEEDS_REBUILD
 | 
						|
select * from mysql_json_test_big;
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # This test checks the long format implementation of MySQL's JSON
 | 
						|
--echo # Not printing the actual contents as they are not readable by a human,
 | 
						|
--echo # just compare the strings, make sure they match.
 | 
						|
--echo #
 | 
						|
alter table mysql_json_test_big force;
 | 
						|
 | 
						|
select count(*) as 'Total_Number_of_Tests',
 | 
						|
       sum(expected = actual) as 'Succesful_Tests',
 | 
						|
       sum(JSON_VALID(actual)) as 'String_is_valid_JSON'
 | 
						|
from mysql_json_test_big;
 | 
						|
 | 
						|
drop table tempty;
 | 
						|
drop table mysql_json_test;
 | 
						|
drop table mysql_json_test_big;
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # MDEV-32790: Output result in show create table
 | 
						|
--echo #             for mysql_json type should be longtext
 | 
						|
--echo #
 | 
						|
 | 
						|
create table t1(j json);
 | 
						|
show create table t1;
 | 
						|
drop table t1;
 | 
						|
--error ER_NOT_ALLOWED_IN_THIS_CONTEXT
 | 
						|
create table t1(j mysql_json);
 | 
						|
# `json` type should not have character set and collation other than utf8mb4_bin
 | 
						|
--error ER_PARSE_ERROR
 | 
						|
create table `testjson` (
 | 
						|
  `t` json /* JSON from MySQL 5.7*/ CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL
 | 
						|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
 | 
						|
 | 
						|
# By removing character set from `json` field query should work and
 | 
						|
# expand to `longtext` with characterset
 | 
						|
create table `testjson` (
 | 
						|
  `t` json /* JSON from MySQL 5.7*/ COLLATE utf8mb4_bin NOT NULL
 | 
						|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
 | 
						|
show create table testjson;
 | 
						|
drop table testjson;
 | 
						|
 | 
						|
# `longtext` that is alias can have character set
 | 
						|
create table `testjson` (
 | 
						|
  `t` longtext /* JSON from MySQL 5.7 */ CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL
 | 
						|
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
 | 
						|
show create table testjson;
 | 
						|
drop table testjson;
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # MDEV-32235: mysql_json cannot be used on newly created table
 | 
						|
--echo #
 | 
						|
 | 
						|
--error ER_NOT_ALLOWED_IN_THIS_CONTEXT
 | 
						|
CREATE TABLE t(j mysql_json);
 | 
						|
--error ER_NOT_ALLOWED_IN_THIS_CONTEXT
 | 
						|
CREATE TABLE IF NOT EXISTS t(j mysql_json);
 | 
						|
--error ER_NOT_ALLOWED_IN_THIS_CONTEXT
 | 
						|
CREATE OR REPLACE TABLE t(j mysql_json);
 | 
						|
--error ER_NOT_ALLOWED_IN_THIS_CONTEXT
 | 
						|
CREATE TEMPORARY TABLE t(j mysql_json);
 | 
						|
 | 
						|
CREATE TABLE t1 (a TEXT);
 | 
						|
--error ER_NOT_ALLOWED_IN_THIS_CONTEXT
 | 
						|
ALTER TABLE t1 MODIFY a mysql_json;
 | 
						|
DROP TABLE t1;
 | 
						|
 | 
						|
--error ER_NOT_ALLOWED_IN_THIS_CONTEXT
 | 
						|
CREATE FUNCTION f1() RETURNS mysql_json RETURN NULL;
 | 
						|
--error ER_NOT_ALLOWED_IN_THIS_CONTEXT
 | 
						|
CREATE FUNCTION f1(a mysql_json) RETURNS INT RETURN 0;
 | 
						|
DELIMITER $$;
 | 
						|
--error ER_NOT_ALLOWED_IN_THIS_CONTEXT
 | 
						|
CREATE PROCEDURE p1()
 | 
						|
BEGIN
 | 
						|
  DECLARE a mysql_json;
 | 
						|
END;
 | 
						|
$$
 | 
						|
DELIMITER ;$$
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # End of 10.5 tests
 | 
						|
--echo #
 |