mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
BUG#29203 - archive tables have weird values in show table status
Archive engine returns wrong values for average record length and max data length. With this fix they're calculated as following: - max data length is 2 ^ 63 where large files are supported and INT_MAX32 where this is not supported; - average record length is data length / records in data file. mysql-test/r/archive.result: A test case for BUG#29203. mysql-test/t/archive.test: A test case for BUG#29203. storage/archive/ha_archive.cc: Better estimation for average row length and maximal data file length.
This commit is contained in:
@@ -12695,3 +12695,14 @@ a b
|
|||||||
1 NULL
|
1 NULL
|
||||||
2 NULL
|
2 NULL
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1(a INT, b BLOB) ENGINE=archive;
|
||||||
|
SELECT DATA_LENGTH, AVG_ROW_LENGTH FROM
|
||||||
|
INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1' AND TABLE_SCHEMA='test';
|
||||||
|
DATA_LENGTH AVG_ROW_LENGTH
|
||||||
|
8666 15
|
||||||
|
INSERT INTO t1 VALUES(1, 'sampleblob1'),(2, 'sampleblob2');
|
||||||
|
SELECT DATA_LENGTH, AVG_ROW_LENGTH FROM
|
||||||
|
INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1' AND TABLE_SCHEMA='test';
|
||||||
|
DATA_LENGTH AVG_ROW_LENGTH
|
||||||
|
8700 4350
|
||||||
|
DROP TABLE t1;
|
||||||
|
@@ -1599,3 +1599,14 @@ INSERT INTO t1 VALUES (NULL, NULL),(NULL, NULL);
|
|||||||
FLUSH TABLE t1;
|
FLUSH TABLE t1;
|
||||||
SELECT * FROM t1 ORDER BY a;
|
SELECT * FROM t1 ORDER BY a;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#29203 - archive tables have weird values in show table status
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(a INT, b BLOB) ENGINE=archive;
|
||||||
|
SELECT DATA_LENGTH, AVG_ROW_LENGTH FROM
|
||||||
|
INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1' AND TABLE_SCHEMA='test';
|
||||||
|
INSERT INTO t1 VALUES(1, 'sampleblob1'),(2, 'sampleblob2');
|
||||||
|
SELECT DATA_LENGTH, AVG_ROW_LENGTH FROM
|
||||||
|
INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1' AND TABLE_SCHEMA='test';
|
||||||
|
DROP TABLE t1;
|
||||||
|
@@ -1472,11 +1472,12 @@ int ha_archive::info(uint flag)
|
|||||||
|
|
||||||
VOID(my_stat(share->data_file_name, &file_stat, MYF(MY_WME)));
|
VOID(my_stat(share->data_file_name, &file_stat, MYF(MY_WME)));
|
||||||
|
|
||||||
stats.mean_rec_length= table->s->reclength + buffer.alloced_length();
|
|
||||||
stats.data_file_length= file_stat.st_size;
|
stats.data_file_length= file_stat.st_size;
|
||||||
stats.create_time= (ulong) file_stat.st_ctime;
|
stats.create_time= (ulong) file_stat.st_ctime;
|
||||||
stats.update_time= (ulong) file_stat.st_mtime;
|
stats.update_time= (ulong) file_stat.st_mtime;
|
||||||
stats.max_data_file_length= share->rows_recorded * stats.mean_rec_length;
|
stats.mean_rec_length= stats.records ?
|
||||||
|
stats.data_file_length / stats.records : table->s->reclength;
|
||||||
|
stats.max_data_file_length= MAX_FILE_SIZE;
|
||||||
}
|
}
|
||||||
stats.delete_length= 0;
|
stats.delete_length= 0;
|
||||||
stats.index_file_length=0;
|
stats.index_file_length=0;
|
||||||
|
Reference in New Issue
Block a user