mirror of
https://github.com/MariaDB/server.git
synced 2025-02-01 19:41:47 +01:00
Merge
This commit is contained in:
commit
bcf70ef6a0
4 changed files with 34 additions and 33 deletions
|
@ -397,12 +397,12 @@ static int free_share(TINA_SHARE *share)
|
||||||
'\r''\n' -- DOS\Windows line ending
|
'\r''\n' -- DOS\Windows line ending
|
||||||
*/
|
*/
|
||||||
|
|
||||||
off_t find_eoln_buff(Transparent_file *data_buff, off_t begin,
|
my_off_t find_eoln_buff(Transparent_file *data_buff, my_off_t begin,
|
||||||
off_t end, int *eoln_len)
|
my_off_t end, int *eoln_len)
|
||||||
{
|
{
|
||||||
*eoln_len= 0;
|
*eoln_len= 0;
|
||||||
|
|
||||||
for (off_t x= begin; x < end; x++)
|
for (my_off_t x= begin; x < end; x++)
|
||||||
{
|
{
|
||||||
/* Unix (includes Mac OS X) */
|
/* Unix (includes Mac OS X) */
|
||||||
if (data_buff->get_value(x) == '\n')
|
if (data_buff->get_value(x) == '\n')
|
||||||
|
@ -586,7 +586,7 @@ int ha_tina::chain_append()
|
||||||
*/
|
*/
|
||||||
int ha_tina::find_current_row(uchar *buf)
|
int ha_tina::find_current_row(uchar *buf)
|
||||||
{
|
{
|
||||||
off_t end_offset, curr_offset= current_position;
|
my_off_t end_offset, curr_offset= current_position;
|
||||||
int eoln_len;
|
int eoln_len;
|
||||||
my_bitmap_map *org_bitmap;
|
my_bitmap_map *org_bitmap;
|
||||||
int error;
|
int error;
|
||||||
|
@ -836,7 +836,7 @@ int ha_tina::open(const char *name, int mode, uint open_options)
|
||||||
during locking. This is needed to enable concurrent inserts.
|
during locking. This is needed to enable concurrent inserts.
|
||||||
*/
|
*/
|
||||||
thr_lock_data_init(&share->lock, &lock, (void*) this);
|
thr_lock_data_init(&share->lock, &lock, (void*) this);
|
||||||
ref_length=sizeof(off_t);
|
ref_length= sizeof(my_off_t);
|
||||||
|
|
||||||
share->lock.get_status= tina_get_status;
|
share->lock.get_status= tina_get_status;
|
||||||
share->lock.update_status= tina_update_status;
|
share->lock.update_status= tina_update_status;
|
||||||
|
@ -1140,7 +1140,7 @@ int ha_tina::rnd_pos(uchar * buf, uchar *pos)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("ha_tina::rnd_pos");
|
DBUG_ENTER("ha_tina::rnd_pos");
|
||||||
ha_statistic_increment(&SSV::ha_read_rnd_count);
|
ha_statistic_increment(&SSV::ha_read_rnd_count);
|
||||||
current_position= (off_t)my_get_ptr(pos,ref_length);
|
current_position= my_get_ptr(pos,ref_length);
|
||||||
DBUG_RETURN(find_current_row(buf));
|
DBUG_RETURN(find_current_row(buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1180,7 +1180,7 @@ int ha_tina::extra(enum ha_extra_function operation)
|
||||||
to the given "hole", stored in the buffer. "Valid" here means,
|
to the given "hole", stored in the buffer. "Valid" here means,
|
||||||
not listed in the chain of deleted records ("holes").
|
not listed in the chain of deleted records ("holes").
|
||||||
*/
|
*/
|
||||||
bool ha_tina::get_write_pos(off_t *end_pos, tina_set *closest_hole)
|
bool ha_tina::get_write_pos(my_off_t *end_pos, tina_set *closest_hole)
|
||||||
{
|
{
|
||||||
if (closest_hole == chain_ptr) /* no more chains */
|
if (closest_hole == chain_ptr) /* no more chains */
|
||||||
*end_pos= file_buff->end();
|
*end_pos= file_buff->end();
|
||||||
|
@ -1200,7 +1200,7 @@ bool ha_tina::get_write_pos(off_t *end_pos, tina_set *closest_hole)
|
||||||
int ha_tina::rnd_end()
|
int ha_tina::rnd_end()
|
||||||
{
|
{
|
||||||
char updated_fname[FN_REFLEN];
|
char updated_fname[FN_REFLEN];
|
||||||
off_t file_buffer_start= 0;
|
my_off_t file_buffer_start= 0;
|
||||||
DBUG_ENTER("ha_tina::rnd_end");
|
DBUG_ENTER("ha_tina::rnd_end");
|
||||||
|
|
||||||
free_root(&blobroot, MYF(0));
|
free_root(&blobroot, MYF(0));
|
||||||
|
@ -1223,17 +1223,17 @@ int ha_tina::rnd_end()
|
||||||
my_qsort(chain, (size_t)(chain_ptr - chain), sizeof(tina_set),
|
my_qsort(chain, (size_t)(chain_ptr - chain), sizeof(tina_set),
|
||||||
(qsort_cmp)sort_set);
|
(qsort_cmp)sort_set);
|
||||||
|
|
||||||
off_t write_begin= 0, write_end;
|
my_off_t write_begin= 0, write_end;
|
||||||
|
|
||||||
/* create the file to write updated table if it wasn't yet created */
|
/* create the file to write updated table if it wasn't yet created */
|
||||||
if (open_update_temp_file_if_needed())
|
if (open_update_temp_file_if_needed())
|
||||||
DBUG_RETURN(-1);
|
DBUG_RETURN(-1);
|
||||||
|
|
||||||
/* write the file with updated info */
|
/* write the file with updated info */
|
||||||
while ((file_buffer_start != -1)) // while not end of file
|
while ((file_buffer_start != (my_off_t)-1)) // while not end of file
|
||||||
{
|
{
|
||||||
bool in_hole= get_write_pos(&write_end, ptr);
|
bool in_hole= get_write_pos(&write_end, ptr);
|
||||||
off_t write_length= write_end - write_begin;
|
my_off_t write_length= write_end - write_begin;
|
||||||
|
|
||||||
/* if there is something to write, write it */
|
/* if there is something to write, write it */
|
||||||
if (write_length)
|
if (write_length)
|
||||||
|
@ -1241,14 +1241,15 @@ int ha_tina::rnd_end()
|
||||||
if (my_write(update_temp_file,
|
if (my_write(update_temp_file,
|
||||||
(uchar*) (file_buff->ptr() +
|
(uchar*) (file_buff->ptr() +
|
||||||
(write_begin - file_buff->start())),
|
(write_begin - file_buff->start())),
|
||||||
write_length, MYF_RW))
|
(size_t)write_length, MYF_RW))
|
||||||
goto error;
|
goto error;
|
||||||
temp_file_length+= write_length;
|
temp_file_length+= write_length;
|
||||||
}
|
}
|
||||||
if (in_hole)
|
if (in_hole)
|
||||||
{
|
{
|
||||||
/* skip hole */
|
/* skip hole */
|
||||||
while (file_buff->end() <= ptr->end && file_buffer_start != -1)
|
while (file_buff->end() <= ptr->end &&
|
||||||
|
file_buffer_start != (my_off_t)-1)
|
||||||
file_buffer_start= file_buff->read_next();
|
file_buffer_start= file_buff->read_next();
|
||||||
write_begin= ptr->end;
|
write_begin= ptr->end;
|
||||||
ptr++;
|
ptr++;
|
||||||
|
@ -1348,7 +1349,7 @@ int ha_tina::repair(THD* thd, HA_CHECK_OPT* check_opt)
|
||||||
File repair_file;
|
File repair_file;
|
||||||
int rc;
|
int rc;
|
||||||
ha_rows rows_repaired= 0;
|
ha_rows rows_repaired= 0;
|
||||||
off_t write_begin= 0, write_end;
|
my_off_t write_begin= 0, write_end;
|
||||||
DBUG_ENTER("ha_tina::repair");
|
DBUG_ENTER("ha_tina::repair");
|
||||||
|
|
||||||
/* empty file */
|
/* empty file */
|
||||||
|
@ -1423,7 +1424,7 @@ int ha_tina::repair(THD* thd, HA_CHECK_OPT* check_opt)
|
||||||
write_end= min(file_buff->end(), current_position);
|
write_end= min(file_buff->end(), current_position);
|
||||||
if ((write_end - write_begin) &&
|
if ((write_end - write_begin) &&
|
||||||
(my_write(repair_file, (uchar*)file_buff->ptr(),
|
(my_write(repair_file, (uchar*)file_buff->ptr(),
|
||||||
write_end - write_begin, MYF_RW)))
|
(size_t) (write_end - write_begin), MYF_RW)))
|
||||||
DBUG_RETURN(-1);
|
DBUG_RETURN(-1);
|
||||||
|
|
||||||
write_begin= write_end;
|
write_begin= write_end;
|
||||||
|
|
|
@ -40,7 +40,7 @@ typedef struct st_tina_share {
|
||||||
inserts, updates and deletes. The var is initialized along with the
|
inserts, updates and deletes. The var is initialized along with the
|
||||||
share initialization.
|
share initialization.
|
||||||
*/
|
*/
|
||||||
off_t saved_data_file_length;
|
my_off_t saved_data_file_length;
|
||||||
pthread_mutex_t mutex;
|
pthread_mutex_t mutex;
|
||||||
THR_LOCK lock;
|
THR_LOCK lock;
|
||||||
bool update_file_opened;
|
bool update_file_opened;
|
||||||
|
@ -53,18 +53,18 @@ typedef struct st_tina_share {
|
||||||
} TINA_SHARE;
|
} TINA_SHARE;
|
||||||
|
|
||||||
struct tina_set {
|
struct tina_set {
|
||||||
off_t begin;
|
my_off_t begin;
|
||||||
off_t end;
|
my_off_t end;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ha_tina: public handler
|
class ha_tina: public handler
|
||||||
{
|
{
|
||||||
THR_LOCK_DATA lock; /* MySQL lock */
|
THR_LOCK_DATA lock; /* MySQL lock */
|
||||||
TINA_SHARE *share; /* Shared lock info */
|
TINA_SHARE *share; /* Shared lock info */
|
||||||
off_t current_position; /* Current position in the file during a file scan */
|
my_off_t current_position; /* Current position in the file during a file scan */
|
||||||
off_t next_position; /* Next position in the file scan */
|
my_off_t next_position; /* Next position in the file scan */
|
||||||
my_off_t local_saved_data_file_length; /* save position for reads */
|
my_off_t local_saved_data_file_length; /* save position for reads */
|
||||||
off_t temp_file_length;
|
my_off_t temp_file_length;
|
||||||
uchar byte_buffer[IO_SIZE];
|
uchar byte_buffer[IO_SIZE];
|
||||||
Transparent_file *file_buff;
|
Transparent_file *file_buff;
|
||||||
File data_file; /* File handler for readers */
|
File data_file; /* File handler for readers */
|
||||||
|
@ -85,7 +85,7 @@ class ha_tina: public handler
|
||||||
MEM_ROOT blobroot;
|
MEM_ROOT blobroot;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool get_write_pos(off_t *end_pos, tina_set *closest_hole);
|
bool get_write_pos(my_off_t *end_pos, tina_set *closest_hole);
|
||||||
int open_update_temp_file_if_needed();
|
int open_update_temp_file_if_needed();
|
||||||
int init_tina_writer();
|
int init_tina_writer();
|
||||||
int init_data_file();
|
int init_data_file();
|
||||||
|
|
|
@ -45,17 +45,17 @@ uchar *Transparent_file::ptr()
|
||||||
return buff;
|
return buff;
|
||||||
}
|
}
|
||||||
|
|
||||||
off_t Transparent_file::start()
|
my_off_t Transparent_file::start()
|
||||||
{
|
{
|
||||||
return lower_bound;
|
return lower_bound;
|
||||||
}
|
}
|
||||||
|
|
||||||
off_t Transparent_file::end()
|
my_off_t Transparent_file::end()
|
||||||
{
|
{
|
||||||
return upper_bound;
|
return upper_bound;
|
||||||
}
|
}
|
||||||
|
|
||||||
off_t Transparent_file::read_next()
|
my_off_t Transparent_file::read_next()
|
||||||
{
|
{
|
||||||
size_t bytes_read;
|
size_t bytes_read;
|
||||||
|
|
||||||
|
@ -64,11 +64,11 @@ off_t Transparent_file::read_next()
|
||||||
always points to upper_bound byte
|
always points to upper_bound byte
|
||||||
*/
|
*/
|
||||||
if ((bytes_read= my_read(filedes, buff, buff_size, MYF(0))) == MY_FILE_ERROR)
|
if ((bytes_read= my_read(filedes, buff, buff_size, MYF(0))) == MY_FILE_ERROR)
|
||||||
return (off_t) -1;
|
return (my_off_t) -1;
|
||||||
|
|
||||||
/* end of file */
|
/* end of file */
|
||||||
if (!bytes_read)
|
if (!bytes_read)
|
||||||
return (off_t) -1;
|
return (my_off_t) -1;
|
||||||
|
|
||||||
lower_bound= upper_bound;
|
lower_bound= upper_bound;
|
||||||
upper_bound+= bytes_read;
|
upper_bound+= bytes_read;
|
||||||
|
@ -77,7 +77,7 @@ off_t Transparent_file::read_next()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char Transparent_file::get_value(off_t offset)
|
char Transparent_file::get_value(my_off_t offset)
|
||||||
{
|
{
|
||||||
size_t bytes_read;
|
size_t bytes_read;
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ class Transparent_file
|
||||||
File filedes;
|
File filedes;
|
||||||
uchar *buff; /* in-memory window to the file or mmaped area */
|
uchar *buff; /* in-memory window to the file or mmaped area */
|
||||||
/* current window sizes */
|
/* current window sizes */
|
||||||
off_t lower_bound;
|
my_off_t lower_bound;
|
||||||
my_off_t upper_bound;
|
my_off_t upper_bound;
|
||||||
uint buff_size;
|
uint buff_size;
|
||||||
|
|
||||||
|
@ -34,8 +34,8 @@ public:
|
||||||
|
|
||||||
void init_buff(File filedes_arg);
|
void init_buff(File filedes_arg);
|
||||||
uchar *ptr();
|
uchar *ptr();
|
||||||
off_t start();
|
my_off_t start();
|
||||||
off_t end();
|
my_off_t end();
|
||||||
char get_value (off_t offset);
|
char get_value (my_off_t offset);
|
||||||
off_t read_next();
|
my_off_t read_next();
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue