diff options
author | unknown <brian@zim.(none)> | 2006-08-14 15:24:29 -0700 |
---|---|---|
committer | unknown <brian@zim.(none)> | 2006-08-14 15:24:29 -0700 |
commit | 948a89432738e4d3b9c4d2f8287573f97e81ecb3 (patch) | |
tree | 2e163bcaefab8eeba55ac25ca6707e3181740da8 /storage/archive | |
parent | 45a5ca85f35d1c13528140b449a27d6b2a47d09d (diff) | |
parent | 61d5563ba413c18b2674e97016093c082b9918d0 (diff) | |
download | mariadb-git-948a89432738e4d3b9c4d2f8287573f97e81ecb3.tar.gz |
Merge zim.(none):/home/brian/mysql/dep-5.0
into zim.(none):/home/brian/mysql/dep-5.1
client/mysql.cc:
Auto merged
mysql-test/r/grant.result:
Auto merged
mysql-test/r/grant2.result:
Auto merged
mysql-test/r/heap_btree.result:
Auto merged
mysql-test/t/grant.test:
Auto merged
mysql-test/t/grant2.test:
Auto merged
mysql-test/t/mysqlbinlog.test:
Auto merged
mysql-test/t/repair.test:
Auto merged
scripts/fill_func_tables.sh:
Auto merged
scripts/mysql_install_db.sh:
Auto merged
sql/field.cc:
Auto merged
sql/field.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/set_var.cc:
Auto merged
sql/sql_update.cc:
Auto merged
storage/heap/hp_delete.c:
Auto merged
storage/myisam/mi_update.c:
Auto merged
storage/myisam/sort.c:
Auto merged
mysql-test/r/mysqldump.result:
Fixing Result
mysql-test/r/repair.result:
Fixing result
mysql-test/t/mysqldump.test:
Merging change
storage/archive/ha_archive.cc:
Merging in change
Diffstat (limited to 'storage/archive')
-rw-r--r-- | storage/archive/ha_archive.cc | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/storage/archive/ha_archive.cc b/storage/archive/ha_archive.cc index 6c0796e3bdc..de8b50fd2f3 100644 --- a/storage/archive/ha_archive.cc +++ b/storage/archive/ha_archive.cc @@ -901,6 +901,28 @@ int ha_archive::write_row(byte *buf) if (init_archive_writer()) DBUG_RETURN(HA_ERR_CRASHED_ON_USAGE); + /* + Varchar structures are constant in size but are not cleaned up request + to request. The following sets all unused space to null to improve + compression. + */ + for (Field **field=table->field ; *field ; field++) + { + DBUG_PRINT("archive",("Pack is %d\n", (*field)->pack_length())); + DBUG_PRINT("archive",("MyPack is %d\n", (*field)->data_length((char*) buf + (*field)->offset()))); + if ((*field)->real_type() == MYSQL_TYPE_VARCHAR) + { + uint actual_length= (*field)->data_length((char*) buf + (*field)->offset()); + uint offset= (*field)->offset() + actual_length + + (actual_length > 255 ? 2 : 1); + DBUG_PRINT("archive",("Offset is %d -> %d\n", actual_length, offset)); + /* + if ((*field)->pack_length() + (*field)->offset() != offset) + bzero(buf + offset, (size_t)((*field)->pack_length() + (actual_length > 255 ? 2 : 1) - (*field)->data_length)); + */ + } + } + share->rows_recorded++; rc= real_write_row(buf, &(share->archive_write)); error: |