mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 10:56:12 +01:00 
			
		
		
		
	 7d9ba57da4
			
		
	
	
	7d9ba57da4
	
	
	
		
			
			This is a 10.2+ part of a jira task The two bugs regarding virtual column marking have been fixed: 1. UPDATE of a partitioned table, where the optimizer has chosen a secondary index to make a filesort; 2. INSERT into a table with a nonblob field generated from a blob, with binlog enabled and binlog_row_image=noblob. 3. DELETE from a view on a table with virtual column. Generally the assertion happens from update_virtual_fields() call These bugs are root-caused by missing field marking for dependant fields of a virtual column. Therefore a fix is: mark all the fields involved in the vcol expression by calling field->register_field_in_read_map() instead just setting a single bit. 3 was reproducible only on 10.4+, however the problem might has just been invisible in the earlier versions. The fix is applicable to 10.2-10.3 as well.
		
			
				
	
	
		
			83 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| --source include/have_innodb.inc
 | |
| --source include/have_binlog_format_row.inc
 | |
| --source include/master-slave.inc
 | |
| 
 | |
| #
 | |
| # MDEV-15243
 | |
| # Server crashes in in Field_blob::pack upon REPLACE into view with virtual
 | |
| # columns with binlog enabled
 | |
| #
 | |
| 
 | |
| CREATE TABLE t1 (
 | |
|  pk SERIAL,
 | |
|  vcol_date DATE AS (col_date) PERSISTENT,
 | |
|  vcol_int INT AS (col_int) VIRTUAL,
 | |
|  vcol_year YEAR AS (col_year) PERSISTENT,
 | |
|  vcol_blob BLOB AS (col_blob) VIRTUAL,
 | |
|  col_date DATE,
 | |
|  col_int INT NULL,
 | |
|  col_blob BLOB NULL,
 | |
|  col_year YEAR,
 | |
|  PRIMARY KEY(pk)
 | |
| ) ENGINE=InnoDB;
 | |
| 
 | |
| INSERT INTO t1 (col_date,col_int,col_blob,col_year) VALUES ('2010-04-24',5,'foo',1981);
 | |
| SET SQL_MODE='';
 | |
| 
 | |
| set binlog_row_image="FULL";
 | |
| CREATE VIEW v1 AS SELECT * FROM t1;
 | |
| REPLACE INTO v1 SELECT pk, vcol_date, vcol_int, vcol_year, vcol_blob, col_date, col_int, col_blob, 1982 FROM t1;
 | |
| select col_date,col_int,col_blob,col_year from v1;
 | |
| sync_slave_with_master;
 | |
| select col_date,col_int,col_blob,col_year from v1;
 | |
| connection master;
 | |
| DROP VIEW v1;
 | |
| set binlog_row_image="MINIMAL";
 | |
| CREATE VIEW v1 AS SELECT * FROM t1;
 | |
| REPLACE INTO v1 SELECT pk, vcol_date, vcol_int, vcol_year, vcol_blob, col_date, col_int, col_blob, 1983 FROM t1;
 | |
| select col_date,col_int,col_blob,col_year from v1;
 | |
| sync_slave_with_master;
 | |
| select col_date,col_int,col_blob,col_year from v1;
 | |
| connection master;
 | |
| DROP VIEW v1;
 | |
| set @@binlog_row_image="NOBLOB";
 | |
| CREATE VIEW v1 AS SELECT * FROM t1;
 | |
| REPLACE INTO v1 SELECT pk, vcol_date, vcol_int, vcol_year, vcol_blob, col_date, col_int, col_blob, 1984 FROM t1;
 | |
| select col_date,col_int,col_blob,col_year from v1;
 | |
| sync_slave_with_master;
 | |
| select col_date,col_int,col_blob,col_year from v1;
 | |
| connection master;
 | |
| DROP VIEW v1;
 | |
| set @@binlog_row_image=default;
 | |
| 
 | |
| DROP TABLE t1;
 | |
| SET SQL_MODE=default;
 | |
| 
 | |
| # MDEV-24782
 | |
| # ASAN use-after-poison in Field::pack_int / THD::binlog_update_row
 | |
| 
 | |
| CREATE TABLE t1 (pk INT, a VARCHAR(3), b VARCHAR(1) AS (a) VIRTUAL, PRIMARY KEY (pk));
 | |
| INSERT IGNORE INTO t1 (pk, a) VALUES (1,'foo'),(2,'bar');
 | |
| --error ER_DATA_TOO_LONG
 | |
| REPLACE INTO t1 (pk) VALUES (2);
 | |
| UPDATE IGNORE t1 SET a = NULL;
 | |
| 
 | |
| # Cleanup
 | |
| DROP TABLE t1;
 | |
| 
 | |
| 
 | |
| --echo #
 | |
| --echo # MDEV-18166 ASSERT_COLUMN_MARKED_FOR_READ failed on tables with vcols
 | |
| --echo #
 | |
| 
 | |
| SET SESSION binlog_row_image= noblob;
 | |
| CREATE TEMPORARY TABLE t1 SELECT UUID();
 | |
| show create table t1;
 | |
| CREATE TABLE t2 (a INT PRIMARY KEY, b TEXT, c INT GENERATED ALWAYS AS(b));
 | |
| INSERT INTO t2 (a,b) VALUES (1,1);
 | |
| 
 | |
| SET SESSION binlog_row_image= default;
 | |
| DROP TABLE t2;
 | |
| 
 | |
| 
 | |
| --source include/rpl_end.inc
 |