diff options
author | Sergei Golubchik <serg@mariadb.org> | 2016-11-16 19:03:51 +0100 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2016-12-12 20:27:33 +0100 |
commit | d4170f64fccb7750dc2dec65e7a008852a7585f7 (patch) | |
tree | b90e876d7c5b10f030aa80a63f0de1b6bffa2bc6 | |
parent | 65e53c8bc6727c4d5909864052d4c6e6c967e870 (diff) | |
download | mariadb-git-d4170f64fccb7750dc2dec65e7a008852a7585f7.tar.gz |
cleanup: set_field_ptr()
-rw-r--r-- | sql/ha_partition.cc | 4 | ||||
-rw-r--r-- | sql/sql_partition.cc | 61 | ||||
-rw-r--r-- | sql/sql_partition.h | 1 | ||||
-rw-r--r-- | sql/table.cc | 12 | ||||
-rw-r--r-- | sql/table.h | 2 |
5 files changed, 30 insertions, 50 deletions
diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 31cffe75e55..a54d406f9eb 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -7959,7 +7959,7 @@ void ha_partition::append_row_to_str(String &str) { Field **field_ptr; 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]); /* No primary key, use full partition 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); } 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); } } diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index a2bc5000ec6..09dbf9d76af 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -293,10 +293,10 @@ int get_parts_for_update(const uchar *old_data, uchar *new_data, DBUG_ENTER("get_parts_for_update"); 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, &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 { 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 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, 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)) { DBUG_RETURN(error); @@ -375,9 +375,9 @@ int get_part_for_delete(const uchar *buf, const uchar *rec0, else { 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); - set_field_ptr(part_field_array, rec0, buf); + part_info->table->move_fields(part_field_array, rec0, buf); if (unlikely(error)) { DBUG_RETURN(error); @@ -3787,9 +3787,9 @@ static int get_sub_part_id_from_key(const TABLE *table,uchar *buf, else { 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); - set_field_ptr(part_field_array, rec0, buf); + part_info->table->move_fields(part_field_array, rec0, buf); } DBUG_RETURN(res); } @@ -3833,10 +3833,10 @@ bool get_part_id_from_key(const TABLE *table, uchar *buf, KEY *key_info, else { 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, &func_value); - set_field_ptr(part_field_array, rec0, buf); + part_info->table->move_fields(part_field_array, rec0, buf); } DBUG_RETURN(result); } @@ -3882,10 +3882,10 @@ void get_full_part_id_from_key(const TABLE *table, uchar *buf, else { 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, &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; 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); old_rec= part_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))) { file->print_error(error, MYF(0)); @@ -3970,7 +3970,7 @@ bool verify_data_with_partition(TABLE *table, TABLE *part_table, } while (TRUE); (void) file->ha_rnd_end(); 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]); part_table->record[0]= old_rec; if (error) @@ -7211,39 +7211,6 @@ err: } #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 point to the record where the values of the PF-fields are stored. diff --git a/sql/sql_partition.h b/sql/sql_partition.h index b225c14fc53..c2665a8366b 100644 --- a/sql/sql_partition.h +++ b/sql/sql_partition.h @@ -288,7 +288,6 @@ void create_subpartition_name(char *out, const char *in1, const char *in2, const char *in3, 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, const uchar *old_buf); diff --git a/sql/table.cc b/sql/table.cc index 092ec79f21b..3ca391d3538 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -6633,6 +6633,18 @@ void TABLE::mark_default_fields_for_write(bool is_insert) 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 diff --git a/sql/table.h b/sql/table.h index 14b6a26c650..cd2d3af95ad 100644 --- a/sql/table.h +++ b/sql/table.h @@ -1419,6 +1419,8 @@ public: my_ptrdiff_t default_values_offset() const { 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); ulong actual_key_flags(KEY *keyinfo); int update_virtual_fields(enum_vcol_update_mode update_mode); |