mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 10:31:54 +01:00
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;
|