Commit 8ff68092 authored by unknown's avatar unknown

Fix for Antony's push. I've also changed from using the zlib off_t pointer...

Fix for Antony's push. I've also changed from using the zlib off_t pointer type to my_off_t to fix issues around buggy zlib versions and to make sure file sizes are consistent through out mysql.



mysql-test/r/information_schema.result:
  Fix for Antony adding plugins to information schema.
sql/ha_archive.cc:
  Fix for now using my_off_t, no need to worry about buggy zlib's anymore.
sql/ha_archive.h:
  Update to fix issues with buggy zlib.
storage/archive/azio.c:
  Moved to using my_off_t (which should fix problems with most fille system size issues).
storage/archive/azlib.h:
  Change to using my_off_t
parent 2c88b639
...@@ -725,7 +725,7 @@ CREATE TABLE t_crashme ( f1 BIGINT); ...@@ -725,7 +725,7 @@ CREATE TABLE t_crashme ( f1 BIGINT);
CREATE VIEW a1 (t_CRASHME) AS SELECT f1 FROM t_crashme GROUP BY f1; CREATE VIEW a1 (t_CRASHME) AS SELECT f1 FROM t_crashme GROUP BY f1;
CREATE VIEW a2 AS SELECT t_CRASHME FROM a1; CREATE VIEW a2 AS SELECT t_CRASHME FROM a1;
count(*) count(*)
103 104
drop view a2, a1; drop view a2, a1;
drop table t_crashme; drop table t_crashme;
select table_schema,table_name, column_name from select table_schema,table_name, column_name from
...@@ -796,7 +796,7 @@ delete from mysql.db where user='mysqltest_4'; ...@@ -796,7 +796,7 @@ delete from mysql.db where user='mysqltest_4';
flush privileges; flush privileges;
SELECT table_schema, count(*) FROM information_schema.TABLES GROUP BY TABLE_SCHEMA; SELECT table_schema, count(*) FROM information_schema.TABLES GROUP BY TABLE_SCHEMA;
table_schema count(*) table_schema count(*)
information_schema 17 information_schema 18
mysql 18 mysql 18
create table t1 (i int, j int); create table t1 (i int, j int);
create trigger trg1 before insert on t1 for each row create trigger trg1 before insert on t1 for each row
......
...@@ -247,8 +247,7 @@ ha_archive::ha_archive(TABLE_SHARE *table_arg) ...@@ -247,8 +247,7 @@ ha_archive::ha_archive(TABLE_SHARE *table_arg)
buffer.set((char *)byte_buffer, IO_SIZE, system_charset_info); buffer.set((char *)byte_buffer, IO_SIZE, system_charset_info);
/* The size of the offset value we will use for position() */ /* The size of the offset value we will use for position() */
ref_length = 2 << ((zlibCompileFlags() >> 6) & 3); ref_length = sizeof(my_off_t);
DBUG_ASSERT(ref_length <= sizeof(z_off_t));
} }
/* /*
...@@ -612,7 +611,7 @@ int ha_archive::create(const char *name, TABLE *table_arg, ...@@ -612,7 +611,7 @@ int ha_archive::create(const char *name, TABLE *table_arg,
*/ */
int ha_archive::real_write_row(byte *buf, azio_stream *writer) int ha_archive::real_write_row(byte *buf, azio_stream *writer)
{ {
z_off_t written; my_off_t written;
uint *ptr, *end; uint *ptr, *end;
DBUG_ENTER("ha_archive::real_write_row"); DBUG_ENTER("ha_archive::real_write_row");
...@@ -621,7 +620,7 @@ int ha_archive::real_write_row(byte *buf, azio_stream *writer) ...@@ -621,7 +620,7 @@ int ha_archive::real_write_row(byte *buf, azio_stream *writer)
if (!delayed_insert || !bulk_insert) if (!delayed_insert || !bulk_insert)
share->dirty= TRUE; share->dirty= TRUE;
if (written != (z_off_t)table->s->reclength) if (written != (my_off_t)table->s->reclength)
DBUG_RETURN(errno ? errno : -1); DBUG_RETURN(errno ? errno : -1);
/* /*
We should probably mark the table as damagaged if the record is written We should probably mark the table as damagaged if the record is written
...@@ -638,7 +637,7 @@ int ha_archive::real_write_row(byte *buf, azio_stream *writer) ...@@ -638,7 +637,7 @@ int ha_archive::real_write_row(byte *buf, azio_stream *writer)
{ {
((Field_blob*) table->field[*ptr])->get_ptr(&data_ptr); ((Field_blob*) table->field[*ptr])->get_ptr(&data_ptr);
written= azwrite(writer, data_ptr, (unsigned)size); written= azwrite(writer, data_ptr, (unsigned)size);
if (written != (z_off_t)size) if (written != (my_off_t)size)
DBUG_RETURN(errno ? errno : -1); DBUG_RETURN(errno ? errno : -1);
} }
} }
...@@ -830,7 +829,7 @@ int ha_archive::rnd_pos(byte * buf, byte *pos) ...@@ -830,7 +829,7 @@ int ha_archive::rnd_pos(byte * buf, byte *pos)
DBUG_ENTER("ha_archive::rnd_pos"); DBUG_ENTER("ha_archive::rnd_pos");
statistic_increment(table->in_use->status_var.ha_read_rnd_next_count, statistic_increment(table->in_use->status_var.ha_read_rnd_next_count,
&LOCK_status); &LOCK_status);
current_position= (z_off_t)my_get_ptr(pos, ref_length); current_position= (my_off_t)my_get_ptr(pos, ref_length);
(void)azseek(&archive, current_position, SEEK_SET); (void)azseek(&archive, current_position, SEEK_SET);
DBUG_RETURN(get_row(&archive, buf)); DBUG_RETURN(get_row(&archive, buf));
......
...@@ -51,7 +51,7 @@ class ha_archive: public handler ...@@ -51,7 +51,7 @@ class ha_archive: public handler
THR_LOCK_DATA lock; /* MySQL lock */ THR_LOCK_DATA lock; /* MySQL lock */
ARCHIVE_SHARE *share; /* Shared lock info */ ARCHIVE_SHARE *share; /* Shared lock info */
azio_stream archive; /* Archive file we are working with */ azio_stream archive; /* Archive file we are working with */
z_off_t current_position; /* The position of the row we just read */ my_off_t current_position; /* The position of the row we just read */
byte byte_buffer[IO_SIZE]; /* Initial buffer for our string */ byte byte_buffer[IO_SIZE]; /* Initial buffer for our string */
String buffer; /* Buffer used for blob storage */ String buffer; /* Buffer used for blob storage */
ha_rows scan_rows; /* Number of rows left in scan */ ha_rows scan_rows; /* Number of rows left in scan */
......
...@@ -506,9 +506,9 @@ int azrewind (s) ...@@ -506,9 +506,9 @@ int azrewind (s)
SEEK_END is not implemented, returns error. SEEK_END is not implemented, returns error.
In this version of the library, azseek can be extremely slow. In this version of the library, azseek can be extremely slow.
*/ */
z_off_t azseek (s, offset, whence) my_off_t azseek (s, offset, whence)
azio_stream *s; azio_stream *s;
z_off_t offset; my_off_t offset;
int whence; int whence;
{ {
...@@ -589,7 +589,7 @@ z_off_t azseek (s, offset, whence) ...@@ -589,7 +589,7 @@ z_off_t azseek (s, offset, whence)
given compressed file. This position represents a number of bytes in the given compressed file. This position represents a number of bytes in the
uncompressed data stream. uncompressed data stream.
*/ */
z_off_t ZEXPORT aztell (file) my_off_t ZEXPORT aztell (file)
azio_stream *file; azio_stream *file;
{ {
return azseek(file, 0L, SEEK_CUR); return azseek(file, 0L, SEEK_CUR);
......
...@@ -166,9 +166,9 @@ typedef struct azio_stream { ...@@ -166,9 +166,9 @@ typedef struct azio_stream {
char *msg; /* error message */ char *msg; /* error message */
int transparent; /* 1 if input file is not a .gz file */ int transparent; /* 1 if input file is not a .gz file */
char mode; /* 'w' or 'r' */ char mode; /* 'w' or 'r' */
z_off_t start; /* start of compressed data in file (header skipped) */ my_off_t start; /* start of compressed data in file (header skipped) */
z_off_t in; /* bytes into deflate or inflate */ my_off_t in; /* bytes into deflate or inflate */
z_off_t out; /* bytes out of deflate or inflate */ my_off_t out; /* bytes out of deflate or inflate */
int back; /* one character push-back */ int back; /* one character push-back */
int last; /* true if push-back is last character */ int last; /* true if push-back is last character */
} azio_stream; } azio_stream;
...@@ -232,8 +232,8 @@ extern int azflush(azio_stream *file, int flush); ...@@ -232,8 +232,8 @@ extern int azflush(azio_stream *file, int flush);
degrade compression. degrade compression.
*/ */
extern z_off_t azseek (azio_stream *file, extern my_off_t azseek (azio_stream *file,
z_off_t offset, int whence); my_off_t offset, int whence);
/* /*
Sets the starting position for the next gzread or gzwrite on the Sets the starting position for the next gzread or gzwrite on the
given compressed file. The offset represents a number of bytes in the given compressed file. The offset represents a number of bytes in the
...@@ -257,7 +257,7 @@ extern int azrewind(azio_stream *file); ...@@ -257,7 +257,7 @@ extern int azrewind(azio_stream *file);
gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
*/ */
extern z_off_t aztell(azio_stream *file); extern my_off_t aztell(azio_stream *file);
/* /*
Returns the starting position for the next gzread or gzwrite on the Returns the starting position for the next gzread or gzwrite on the
given compressed file. This position represents a number of bytes in the given compressed file. This position represents a number of bytes in the
......
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