summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2016-11-16 19:03:51 +0100
committerSergei Golubchik <serg@mariadb.org>2016-12-12 20:27:33 +0100
commitd4170f64fccb7750dc2dec65e7a008852a7585f7 (patch)
treeb90e876d7c5b10f030aa80a63f0de1b6bffa2bc6
parent65e53c8bc6727c4d5909864052d4c6e6c967e870 (diff)
downloadmariadb-git-d4170f64fccb7750dc2dec65e7a008852a7585f7.tar.gz
cleanup: set_field_ptr()
-rw-r--r--sql/ha_partition.cc4
-rw-r--r--sql/sql_partition.cc61
-rw-r--r--sql/sql_partition.h1
-rw-r--r--sql/table.cc12
-rw-r--r--sql/table.h2
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);