mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 10:56:12 +01:00 
			
		
		
		
	 deb20fb751
			
		
	
	
	deb20fb751
	
	
	
		
			
			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 #
 |