mirror of
https://github.com/MariaDB/server.git
synced 2026-05-14 19:07:15 +02:00
Updates for Monty's changes in the table structure. All tests pass currently.
Seems like such a short commit message...
This commit is contained in:
parent
75f282df27
commit
2ee9d854b4
2 changed files with 26 additions and 20 deletions
|
|
@ -520,7 +520,7 @@ error:
|
||||||
int ha_archive::write_row(byte * buf)
|
int ha_archive::write_row(byte * buf)
|
||||||
{
|
{
|
||||||
z_off_t written;
|
z_off_t written;
|
||||||
Field_blob **field;
|
uint *ptr, *end;
|
||||||
DBUG_ENTER("ha_archive::write_row");
|
DBUG_ENTER("ha_archive::write_row");
|
||||||
|
|
||||||
if (share->crashed)
|
if (share->crashed)
|
||||||
|
|
@ -530,25 +530,27 @@ int ha_archive::write_row(byte * buf)
|
||||||
if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_INSERT)
|
if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_INSERT)
|
||||||
table->timestamp_field->set_time();
|
table->timestamp_field->set_time();
|
||||||
pthread_mutex_lock(&share->mutex);
|
pthread_mutex_lock(&share->mutex);
|
||||||
written= gzwrite(share->archive_write, buf, table->reclength);
|
written= gzwrite(share->archive_write, buf, table->s->reclength);
|
||||||
DBUG_PRINT("ha_archive::write_row", ("Wrote %d bytes expected %d", written, table->reclength));
|
DBUG_PRINT("ha_archive::write_row", ("Wrote %d bytes expected %d", written, table->s->reclength));
|
||||||
if (!delayed_insert || !bulk_insert)
|
if (!delayed_insert || !bulk_insert)
|
||||||
share->dirty= TRUE;
|
share->dirty= TRUE;
|
||||||
|
|
||||||
if (written != table->reclength)
|
if (written != table->s->reclength)
|
||||||
goto error;
|
goto error;
|
||||||
/*
|
/*
|
||||||
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
|
||||||
but the blob fails.
|
but the blob fails.
|
||||||
*/
|
*/
|
||||||
for (field= table->blob_field ; *field ; field++)
|
for (ptr= table->s->blob_field, end=ptr + table->s->blob_fields ;
|
||||||
|
ptr != end ;
|
||||||
|
ptr++)
|
||||||
{
|
{
|
||||||
char *ptr;
|
char *ptr;
|
||||||
uint32 size= (*field)->get_length();
|
uint32 size= ((Field_blob*) table->field[*ptr])->get_length();
|
||||||
|
|
||||||
if (size)
|
if (size)
|
||||||
{
|
{
|
||||||
(*field)->get_ptr(&ptr);
|
((Field_blob*) table->field[*ptr])->get_ptr(&ptr);
|
||||||
written= gzwrite(share->archive_write, ptr, (unsigned)size);
|
written= gzwrite(share->archive_write, ptr, (unsigned)size);
|
||||||
if (written != size)
|
if (written != size)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
@ -614,13 +616,13 @@ int ha_archive::rnd_init(bool scan)
|
||||||
int ha_archive::get_row(gzFile file_to_read, byte *buf)
|
int ha_archive::get_row(gzFile file_to_read, byte *buf)
|
||||||
{
|
{
|
||||||
int read; // Bytes read, gzread() returns int
|
int read; // Bytes read, gzread() returns int
|
||||||
|
uint *ptr, *end;
|
||||||
char *last;
|
char *last;
|
||||||
size_t total_blob_length= 0;
|
size_t total_blob_length= 0;
|
||||||
Field_blob **field;
|
|
||||||
DBUG_ENTER("ha_archive::get_row");
|
DBUG_ENTER("ha_archive::get_row");
|
||||||
|
|
||||||
read= gzread(file_to_read, buf, table->reclength);
|
read= gzread(file_to_read, buf, table->s->reclength);
|
||||||
DBUG_PRINT("ha_archive::get_row", ("Read %d bytes expected %d", read, table->reclength));
|
DBUG_PRINT("ha_archive::get_row", ("Read %d bytes expected %d", read, table->s->reclength));
|
||||||
|
|
||||||
if (read == Z_STREAM_ERROR)
|
if (read == Z_STREAM_ERROR)
|
||||||
DBUG_RETURN(HA_ERR_CRASHED_ON_USAGE);
|
DBUG_RETURN(HA_ERR_CRASHED_ON_USAGE);
|
||||||
|
|
@ -633,27 +635,31 @@ int ha_archive::get_row(gzFile file_to_read, byte *buf)
|
||||||
If the record is the wrong size, the file is probably damaged, unless
|
If the record is the wrong size, the file is probably damaged, unless
|
||||||
we are dealing with a delayed insert or a bulk insert.
|
we are dealing with a delayed insert or a bulk insert.
|
||||||
*/
|
*/
|
||||||
if ((ulong) read != table->reclength)
|
if ((ulong) read != table->s->reclength)
|
||||||
DBUG_RETURN(HA_ERR_END_OF_FILE);
|
DBUG_RETURN(HA_ERR_END_OF_FILE);
|
||||||
|
|
||||||
/* Calculate blob length, we use this for our buffer */
|
/* Calculate blob length, we use this for our buffer */
|
||||||
for (field=table->blob_field; *field ; field++)
|
for (ptr= table->s->blob_field, end=ptr + table->s->blob_fields ;
|
||||||
total_blob_length += (*field)->get_length();
|
ptr != end ;
|
||||||
|
ptr++)
|
||||||
|
total_blob_length += ((Field_blob*) table->field[*ptr])->get_length();
|
||||||
|
|
||||||
/* Adjust our row buffer if we need be */
|
/* Adjust our row buffer if we need be */
|
||||||
buffer.alloc(total_blob_length);
|
buffer.alloc(total_blob_length);
|
||||||
last= (char *)buffer.ptr();
|
last= (char *)buffer.ptr();
|
||||||
|
|
||||||
/* Loop through our blobs and read them */
|
/* Loop through our blobs and read them */
|
||||||
for (field=table->blob_field; *field ; field++)
|
for (ptr= table->s->blob_field, end=ptr + table->s->blob_fields ;
|
||||||
|
ptr != end ;
|
||||||
|
ptr++)
|
||||||
{
|
{
|
||||||
size_t size= (*field)->get_length();
|
size_t size= ((Field_blob*) table->field[*ptr])->get_length();
|
||||||
if (size)
|
if (size)
|
||||||
{
|
{
|
||||||
read= gzread(file_to_read, last, size);
|
read= gzread(file_to_read, last, size);
|
||||||
if ((size_t) read != size)
|
if ((size_t) read != size)
|
||||||
DBUG_RETURN(HA_ERR_END_OF_FILE);
|
DBUG_RETURN(HA_ERR_END_OF_FILE);
|
||||||
(*field)->set_ptr(size, last);
|
((Field_blob*) table->field[*ptr])->set_ptr(size, last);
|
||||||
last += size;
|
last += size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -753,8 +759,8 @@ int ha_archive::repair(THD* thd, HA_CHECK_OPT* check_opt)
|
||||||
I know, this malloc'ing memory but this should be a very
|
I know, this malloc'ing memory but this should be a very
|
||||||
rare event.
|
rare event.
|
||||||
*/
|
*/
|
||||||
if (!(buf= (byte*) my_malloc(table->rec_buff_length > sizeof(ulonglong) +1 ?
|
if (!(buf= (byte*) my_malloc(table->s->rec_buff_length > sizeof(ulonglong) +1 ?
|
||||||
table->rec_buff_length : sizeof(ulonglong) +1 ,
|
table->s->rec_buff_length : sizeof(ulonglong) +1 ,
|
||||||
MYF(MY_WME))))
|
MYF(MY_WME))))
|
||||||
{
|
{
|
||||||
rc= HA_ERR_CRASHED_ON_USAGE;
|
rc= HA_ERR_CRASHED_ON_USAGE;
|
||||||
|
|
@ -894,7 +900,7 @@ void 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)));
|
||||||
|
|
||||||
mean_rec_length= table->reclength + buffer.alloced_length();
|
mean_rec_length= table->s->reclength + buffer.alloced_length();
|
||||||
data_file_length= file_stat.st_size;
|
data_file_length= file_stat.st_size;
|
||||||
create_time= file_stat.st_ctime;
|
create_time= file_stat.st_ctime;
|
||||||
update_time= file_stat.st_mtime;
|
update_time= file_stat.st_mtime;
|
||||||
|
|
|
||||||
|
|
@ -375,7 +375,7 @@ int ha_tina::find_current_row(byte *buf)
|
||||||
}
|
}
|
||||||
next_position= (end_ptr - share->mapped_file)+1;
|
next_position= (end_ptr - share->mapped_file)+1;
|
||||||
/* Maybe use \N for null? */
|
/* Maybe use \N for null? */
|
||||||
memset(buf, 0, table->null_bytes); /* We do not implement nulls! */
|
memset(buf, 0, table->s->null_bytes); /* We do not implement nulls! */
|
||||||
|
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue