Commit 04ed3c9d authored by Sergey Vojtovich's avatar Sergey Vojtovich

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.
parent fe3b6356
......@@ -12695,3 +12695,14 @@ a b
1 NULL
2 NULL
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;
SELECT * FROM t1 ORDER BY a;
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)));
stats.mean_rec_length= table->s->reclength + buffer.alloced_length();
stats.data_file_length= file_stat.st_size;
stats.create_time= (ulong) file_stat.st_ctime;
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.index_file_length=0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment