mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
MDEV-22556: Incorrect result for window function when using encrypt-tmp-files=ON
The issue here is that end_of_file for encrypted temporary IO_CACHE (used by filesort) is updated using lseek. Encryption adds storage overhead and hides it from the caller by recalculating offsets and lengths. Two different IO_CACHE cannot possibly modify the same file because the encryption key is randomly generated and stored in the IO_CACHE. So when the tempfiles are encrypted DO NOT use lseek to change end_of_file. Further observations about updating end_of_file using lseek 1) The end_of_file update is only used for binlog index files 2) The whole point is to update file length when the file was modified via a different file descriptor. 3) The temporary IO_CACHE files can never be modified via a different file descriptor. 4) For encrypted temporary IO_CACHE, end_of_file should not be updated with lseek
This commit is contained in:
18
mysql-test/suite/encryption/r/tempfiles_encrypted.result
Normal file
18
mysql-test/suite/encryption/r/tempfiles_encrypted.result
Normal file
@ -0,0 +1,18 @@
|
||||
#
|
||||
# Tests when the temporary files are encrypted
|
||||
#
|
||||
select @@encrypt_tmp_files;
|
||||
@@encrypt_tmp_files
|
||||
1
|
||||
#
|
||||
# MDEV-22556: Incorrect result for window function when using encrypt-tmp-files=ON
|
||||
#
|
||||
set @save_sort_buffer_size=@@sort_buffer_size;
|
||||
set sort_buffer_size= 2000;
|
||||
create table t1( a DECIMAL(12,0) DEFAULT NULL, b VARCHAR(20) DEFAULT NULL, c DECIMAL(12,0) DEFAULT NULL)engine=INNODB;
|
||||
insert into t1 select seq, seq, seq from seq_1_to_5000;
|
||||
select count(*) from (select a, b, c, ROW_NUMBER() OVER (PARTITION BY a) FROM t1)q;
|
||||
count(*)
|
||||
5000
|
||||
set @@sort_buffer_size=@save_sort_buffer_size;
|
||||
drop table t1;
|
Reference in New Issue
Block a user