mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 19:06:14 +01:00 
			
		
		
		
	 56e479107c
			
		
	
	
	56e479107c
	
	
	
		
			
			mysql_compare_tables() treated all columns non-virtual. Now it properly checks if the columns are virtual and matches expressions.
		
			
				
	
	
		
			101 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #
 | |
| # test keyread on an indexed vcol
 | |
| #
 | |
| --source include/have_partition.inc
 | |
| 
 | |
| CREATE TABLE t1 (
 | |
|     id INT NOT NULL,
 | |
|     store_id INT NOT NULL,
 | |
|     x INT GENERATED ALWAYS AS (id + store_id)
 | |
| )
 | |
| PARTITION BY RANGE (store_id) (
 | |
|     PARTITION p0 VALUES LESS THAN (6),
 | |
|     PARTITION p1 VALUES LESS THAN (11),
 | |
|     PARTITION p2 VALUES LESS THAN (16),
 | |
|     PARTITION p3 VALUES LESS THAN (21)
 | |
| );
 | |
| INSERT t1 (id, store_id) VALUES(1, 2), (3, 4), (3, 12), (4, 18);
 | |
| CREATE INDEX idx ON t1(x);
 | |
| SELECT x FROM t1;
 | |
| DROP TABLE t1;
 | |
| 
 | |
| #
 | |
| # MDEV-15626 Assertion on update virtual column in partitioned table
 | |
| #
 | |
| create table t1 (i int, v int as (i) virtual)
 | |
| partition by range columns (i)
 | |
| subpartition by hash(v) subpartitions 3 (
 | |
|     partition p1 values less than (3),
 | |
|     partition pn values less than (maxvalue));
 | |
| insert t1 set i= 0;
 | |
| set statement sql_mode= '' for update t1 set i= 1, v= 2;
 | |
| drop table t1;
 | |
| 
 | |
| --echo #
 | |
| --echo # MDEV-18734 ASAN heap-use-after-free in my_strnxfrm_simple_internal upon update on versioned partitioned table
 | |
| --echo #
 | |
| --echo # Cover queue_fix() in ha_partition::handle_ordered_index_scan()
 | |
| create or replace table t1 (
 | |
|     x int auto_increment primary key,
 | |
|     b text, v mediumtext as (b) virtual,
 | |
|     index (v(10))
 | |
| ) partition by range columns (x) (
 | |
|     partition p1 values less than (3),
 | |
|     partition p2 values less than (6),
 | |
|     partition p3 values less than (9),
 | |
|     partition p4 values less than (12),
 | |
|     partition p5 values less than (15),
 | |
|     partition p6 values less than (17),
 | |
|     partition p7 values less than (19),
 | |
|     partition p8 values less than (21),
 | |
|     partition p9 values less than (23),
 | |
|     partition p10 values less than (25),
 | |
|     partition p11 values less than (27),
 | |
|     partition p12 values less than (29),
 | |
|     partition p13 values less than (31),
 | |
|     partition p14 values less than (33),
 | |
|     partition p15 values less than (35),
 | |
|     partition pn values less than (maxvalue));
 | |
| insert into t1 (b) values
 | |
| (repeat('q', 8192)), (repeat('z', 8192)), (repeat('a', 8192)), (repeat('b', 8192)),
 | |
| (repeat('x', 8192)), (repeat('y', 8192));
 | |
| 
 | |
| insert t1 (b) select b from t1;
 | |
| insert t1 (b) select b from t1;
 | |
| insert t1 (b) select b from t1;
 | |
| insert t1 (b) select b from t1;
 | |
| 
 | |
| select x, left(b, 10), left(v, 10) from t1 where x > 30 and x < 60 order by v;
 | |
| update t1 set b= 'bar' where v > 'a' limit 20;
 | |
| 
 | |
| drop table t1;
 | |
| 
 | |
| --echo # Cover return_top_record() in ha_partition::handle_ordered_index_scan()
 | |
| create table t1 (x int primary key, b tinytext, v text as (b) virtual)
 | |
| partition by range columns (x) (
 | |
|   partition p1 values less than (4),
 | |
|   partition pn values less than (maxvalue));
 | |
| insert into t1 (x, b) values (1, ''), (2, ''), (3, 'a'), (4, 'b');
 | |
| update t1 set b= 'bar' where x > 0 order by v limit 2;
 | |
| drop table t1;
 | |
| 
 | |
| --echo #
 | |
| --echo # MDEV-28127 EXCHANGE PARTITION with non-matching vcol expression segfault
 | |
| --echo #
 | |
| set @old_mode= @@sql_mode;
 | |
| set sql_mode='';
 | |
| create table t1 (a int, key(a)) partition by range (a) (partition p values less than (1));
 | |
| create table t (a int generated always as (1) virtual, key(a));
 | |
| --error ER_TABLES_DIFFERENT_METADATA
 | |
| alter table t1 exchange partition p with table t;
 | |
| create or replace table t (a int, key(a));
 | |
| alter table t1 exchange partition p with table t;
 | |
| create or replace table t1 (a int generated always as (1) virtual, key(a)) partition by range (a) (partition p values less than (1));
 | |
| create or replace table t (a int generated always as (1) virtual, key(a));
 | |
| alter table t1 exchange partition p with table t;
 | |
| create or replace table t (a int generated always as (1) stored, key(a));
 | |
| --error ER_TABLES_DIFFERENT_METADATA
 | |
| alter table t1 exchange partition p with table t;
 | |
| insert into t values (1);
 | |
| drop tables t1, t;
 | |
| set sql_mode= @old_mode;
 |