mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
cleanup: set_field_ptr()
This commit is contained in:
parent
65e53c8bc6
commit
d4170f64fc
5 changed files with 30 additions and 50 deletions
|
@ -7959,7 +7959,7 @@ void ha_partition::append_row_to_str(String &str)
|
||||||
{
|
{
|
||||||
Field **field_ptr;
|
Field **field_ptr;
|
||||||
if (!is_rec0)
|
if (!is_rec0)
|
||||||
set_field_ptr(m_part_info->full_part_field_array, rec,
|
table->move_fields(m_part_info->full_part_field_array, rec,
|
||||||
table->record[0]);
|
table->record[0]);
|
||||||
/* No primary key, use full partition field array. */
|
/* No primary key, use full partition field array. */
|
||||||
for (field_ptr= m_part_info->full_part_field_array;
|
for (field_ptr= m_part_info->full_part_field_array;
|
||||||
|
@ -7973,7 +7973,7 @@ void ha_partition::append_row_to_str(String &str)
|
||||||
field_unpack(&str, field, rec, 0, false);
|
field_unpack(&str, field, rec, 0, false);
|
||||||
}
|
}
|
||||||
if (!is_rec0)
|
if (!is_rec0)
|
||||||
set_field_ptr(m_part_info->full_part_field_array, table->record[0],
|
table->move_fields(m_part_info->full_part_field_array, table->record[0],
|
||||||
rec);
|
rec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -293,10 +293,10 @@ int get_parts_for_update(const uchar *old_data, uchar *new_data,
|
||||||
DBUG_ENTER("get_parts_for_update");
|
DBUG_ENTER("get_parts_for_update");
|
||||||
|
|
||||||
DBUG_ASSERT(new_data == rec0); // table->record[0]
|
DBUG_ASSERT(new_data == rec0); // table->record[0]
|
||||||
set_field_ptr(part_field_array, old_data, rec0);
|
part_info->table->move_fields(part_field_array, old_data, rec0);
|
||||||
error= part_info->get_partition_id(part_info, old_part_id,
|
error= part_info->get_partition_id(part_info, old_part_id,
|
||||||
&old_func_value);
|
&old_func_value);
|
||||||
set_field_ptr(part_field_array, rec0, old_data);
|
part_info->table->move_fields(part_field_array, rec0, old_data);
|
||||||
if (unlikely(error)) // Should never happen
|
if (unlikely(error)) // Should never happen
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(0);
|
DBUG_ASSERT(0);
|
||||||
|
@ -321,10 +321,10 @@ int get_parts_for_update(const uchar *old_data, uchar *new_data,
|
||||||
future use. It will be tested by ensuring that the above
|
future use. It will be tested by ensuring that the above
|
||||||
condition is false in one test situation before pushing the code.
|
condition is false in one test situation before pushing the code.
|
||||||
*/
|
*/
|
||||||
set_field_ptr(part_field_array, new_data, rec0);
|
part_info->table->move_fields(part_field_array, new_data, rec0);
|
||||||
error= part_info->get_partition_id(part_info, new_part_id,
|
error= part_info->get_partition_id(part_info, new_part_id,
|
||||||
new_func_value);
|
new_func_value);
|
||||||
set_field_ptr(part_field_array, rec0, new_data);
|
part_info->table->move_fields(part_field_array, rec0, new_data);
|
||||||
if (unlikely(error))
|
if (unlikely(error))
|
||||||
{
|
{
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
|
@ -375,9 +375,9 @@ int get_part_for_delete(const uchar *buf, const uchar *rec0,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Field **part_field_array= part_info->full_part_field_array;
|
Field **part_field_array= part_info->full_part_field_array;
|
||||||
set_field_ptr(part_field_array, buf, rec0);
|
part_info->table->move_fields(part_field_array, buf, rec0);
|
||||||
error= part_info->get_partition_id(part_info, part_id, &func_value);
|
error= part_info->get_partition_id(part_info, part_id, &func_value);
|
||||||
set_field_ptr(part_field_array, rec0, buf);
|
part_info->table->move_fields(part_field_array, rec0, buf);
|
||||||
if (unlikely(error))
|
if (unlikely(error))
|
||||||
{
|
{
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
|
@ -3787,9 +3787,9 @@ static int get_sub_part_id_from_key(const TABLE *table,uchar *buf,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Field **part_field_array= part_info->subpart_field_array;
|
Field **part_field_array= part_info->subpart_field_array;
|
||||||
set_field_ptr(part_field_array, buf, rec0);
|
part_info->table->move_fields(part_field_array, buf, rec0);
|
||||||
res= part_info->get_subpartition_id(part_info, part_id);
|
res= part_info->get_subpartition_id(part_info, part_id);
|
||||||
set_field_ptr(part_field_array, rec0, buf);
|
part_info->table->move_fields(part_field_array, rec0, buf);
|
||||||
}
|
}
|
||||||
DBUG_RETURN(res);
|
DBUG_RETURN(res);
|
||||||
}
|
}
|
||||||
|
@ -3833,10 +3833,10 @@ bool get_part_id_from_key(const TABLE *table, uchar *buf, KEY *key_info,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Field **part_field_array= part_info->part_field_array;
|
Field **part_field_array= part_info->part_field_array;
|
||||||
set_field_ptr(part_field_array, buf, rec0);
|
part_info->table->move_fields(part_field_array, buf, rec0);
|
||||||
result= part_info->get_part_partition_id(part_info, part_id,
|
result= part_info->get_part_partition_id(part_info, part_id,
|
||||||
&func_value);
|
&func_value);
|
||||||
set_field_ptr(part_field_array, rec0, buf);
|
part_info->table->move_fields(part_field_array, rec0, buf);
|
||||||
}
|
}
|
||||||
DBUG_RETURN(result);
|
DBUG_RETURN(result);
|
||||||
}
|
}
|
||||||
|
@ -3882,10 +3882,10 @@ void get_full_part_id_from_key(const TABLE *table, uchar *buf,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Field **part_field_array= part_info->full_part_field_array;
|
Field **part_field_array= part_info->full_part_field_array;
|
||||||
set_field_ptr(part_field_array, buf, rec0);
|
part_info->table->move_fields(part_field_array, buf, rec0);
|
||||||
result= part_info->get_partition_id(part_info, &part_spec->start_part,
|
result= part_info->get_partition_id(part_info, &part_spec->start_part,
|
||||||
&func_value);
|
&func_value);
|
||||||
set_field_ptr(part_field_array, rec0, buf);
|
part_info->table->move_fields(part_field_array, rec0, buf);
|
||||||
}
|
}
|
||||||
part_spec->end_part= part_spec->start_part;
|
part_spec->end_part= part_spec->start_part;
|
||||||
if (unlikely(result))
|
if (unlikely(result))
|
||||||
|
@ -3935,7 +3935,7 @@ bool verify_data_with_partition(TABLE *table, TABLE *part_table,
|
||||||
bitmap_union(table->read_set, &part_info->full_part_field_set);
|
bitmap_union(table->read_set, &part_info->full_part_field_set);
|
||||||
old_rec= part_table->record[0];
|
old_rec= part_table->record[0];
|
||||||
part_table->record[0]= table->record[0];
|
part_table->record[0]= table->record[0];
|
||||||
set_field_ptr(part_info->full_part_field_array, table->record[0], old_rec);
|
part_info->table->move_fields(part_info->full_part_field_array, table->record[0], old_rec);
|
||||||
if ((error= file->ha_rnd_init(TRUE)))
|
if ((error= file->ha_rnd_init(TRUE)))
|
||||||
{
|
{
|
||||||
file->print_error(error, MYF(0));
|
file->print_error(error, MYF(0));
|
||||||
|
@ -3970,7 +3970,7 @@ bool verify_data_with_partition(TABLE *table, TABLE *part_table,
|
||||||
} while (TRUE);
|
} while (TRUE);
|
||||||
(void) file->ha_rnd_end();
|
(void) file->ha_rnd_end();
|
||||||
err:
|
err:
|
||||||
set_field_ptr(part_info->full_part_field_array, old_rec,
|
part_info->table->move_fields(part_info->full_part_field_array, old_rec,
|
||||||
table->record[0]);
|
table->record[0]);
|
||||||
part_table->record[0]= old_rec;
|
part_table->record[0]= old_rec;
|
||||||
if (error)
|
if (error)
|
||||||
|
@ -7211,39 +7211,6 @@ err:
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
Prepare for calling val_int on partition function by setting fields to
|
|
||||||
point to the record where the values of the PF-fields are stored.
|
|
||||||
|
|
||||||
SYNOPSIS
|
|
||||||
set_field_ptr()
|
|
||||||
ptr Array of fields to change ptr
|
|
||||||
new_buf New record pointer
|
|
||||||
old_buf Old record pointer
|
|
||||||
|
|
||||||
DESCRIPTION
|
|
||||||
Set ptr in field objects of field array to refer to new_buf record
|
|
||||||
instead of previously old_buf. Used before calling val_int and after
|
|
||||||
it is used to restore pointers to table->record[0].
|
|
||||||
This routine is placed outside of partition code since it can be useful
|
|
||||||
also for other programs.
|
|
||||||
*/
|
|
||||||
|
|
||||||
void set_field_ptr(Field **ptr, const uchar *new_buf,
|
|
||||||
const uchar *old_buf)
|
|
||||||
{
|
|
||||||
my_ptrdiff_t diff= (new_buf - old_buf);
|
|
||||||
DBUG_ENTER("set_field_ptr");
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
(*ptr)->move_field_offset(diff);
|
|
||||||
} while (*(++ptr));
|
|
||||||
DBUG_VOID_RETURN;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Prepare for calling val_int on partition function by setting fields to
|
Prepare for calling val_int on partition function by setting fields to
|
||||||
point to the record where the values of the PF-fields are stored.
|
point to the record where the values of the PF-fields are stored.
|
||||||
|
|
|
@ -288,7 +288,6 @@ void create_subpartition_name(char *out, const char *in1,
|
||||||
const char *in2, const char *in3,
|
const char *in2, const char *in3,
|
||||||
uint name_variant);
|
uint name_variant);
|
||||||
|
|
||||||
void set_field_ptr(Field **ptr, const uchar *new_buf, const uchar *old_buf);
|
|
||||||
void set_key_field_ptr(KEY *key_info, const uchar *new_buf,
|
void set_key_field_ptr(KEY *key_info, const uchar *new_buf,
|
||||||
const uchar *old_buf);
|
const uchar *old_buf);
|
||||||
|
|
||||||
|
|
12
sql/table.cc
12
sql/table.cc
|
@ -6633,6 +6633,18 @@ void TABLE::mark_default_fields_for_write(bool is_insert)
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TABLE::move_fields(Field **ptr, const uchar *to, const uchar *from)
|
||||||
|
{
|
||||||
|
my_ptrdiff_t diff= to - from;
|
||||||
|
if (diff)
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
(*ptr)->move_field_offset(diff);
|
||||||
|
} while (*(++ptr));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@brief
|
@brief
|
||||||
|
|
|
@ -1419,6 +1419,8 @@ public:
|
||||||
my_ptrdiff_t default_values_offset() const
|
my_ptrdiff_t default_values_offset() const
|
||||||
{ return (my_ptrdiff_t) (s->default_values - record[0]); }
|
{ return (my_ptrdiff_t) (s->default_values - record[0]); }
|
||||||
|
|
||||||
|
void move_fields(Field **ptr, const uchar *to, const uchar *from);
|
||||||
|
|
||||||
uint actual_n_key_parts(KEY *keyinfo);
|
uint actual_n_key_parts(KEY *keyinfo);
|
||||||
ulong actual_key_flags(KEY *keyinfo);
|
ulong actual_key_flags(KEY *keyinfo);
|
||||||
int update_virtual_fields(enum_vcol_update_mode update_mode);
|
int update_virtual_fields(enum_vcol_update_mode update_mode);
|
||||||
|
|
Loading…
Reference in a new issue