diff options
Diffstat (limited to 'sql/ha_federated.cc')
-rw-r--r-- | sql/ha_federated.cc | 31 |
1 files changed, 11 insertions, 20 deletions
diff --git a/sql/ha_federated.cc b/sql/ha_federated.cc index c18ca5d7915..bbcae0613e7 100644 --- a/sql/ha_federated.cc +++ b/sql/ha_federated.cc @@ -848,7 +848,7 @@ static FEDERATED_SHARE *get_share(const char *table_name, TABLE *table) query.length(0); uint table_name_length, table_base_name_length; - char *tmp_table_name, *tmp_table_base_name, *table_base_name, *select_query; + char *tmp_table_name, *table_base_name, *select_query; /* share->table_name has the file location - we want the table's name! */ table_base_name= (char*) table->s->table_name; @@ -969,7 +969,6 @@ const char **ha_federated::bas_ext() const int ha_federated::open(const char *name, int mode, uint test_if_locked) { - int rc; DBUG_ENTER("ha_federated::open"); if (!(share= get_share(name, table))) @@ -1370,27 +1369,25 @@ int ha_federated::update_row(const byte *old_data, byte *new_data) int ha_federated::delete_row(const byte *buf) { - uint x= 0; char delete_buffer[IO_SIZE]; char data_buffer[IO_SIZE]; - String delete_string(delete_buffer, sizeof(delete_buffer), &my_charset_bin); - delete_string.length(0); String data_string(data_buffer, sizeof(data_buffer), &my_charset_bin); - data_string.length(0); - DBUG_ENTER("ha_federated::delete_row"); + delete_string.length(0); delete_string.append("DELETE FROM `"); delete_string.append(share->table_base_name); delete_string.append("`"); delete_string.append(" WHERE "); - for (Field **field= table->field; *field; field++, x++) + for (Field **field= table->field; *field; field++) { - delete_string.append((*field)->field_name); + Field *cur_field= *field; + data_string.length(0); + delete_string.append(cur_field->field_name); - if ((*field)->is_null()) + if (cur_field->is_null_in_record((const uchar*) buf)) { delete_string.append(" IS "); data_string.append("NULL"); @@ -1398,17 +1395,15 @@ int ha_federated::delete_row(const byte *buf) else { delete_string.append("="); - (*field)->val_str(&data_string); - (*field)->quote_data(&data_string); + cur_field->val_str(&data_string, (char*) buf+ cur_field->offset()); + cur_field->quote_data(&data_string); } delete_string.append(data_string); - data_string.length(0); - - if (x + 1 < table->s->fields) - delete_string.append(" AND "); + delete_string.append(" AND "); } + delete_string.length(delete_string.length()-5); // Remove AND delete_string.append(" LIMIT 1"); DBUG_PRINT("info", ("Delete sql: %s", delete_string.c_ptr_quick())); @@ -1454,8 +1449,6 @@ int ha_federated::index_read_idx(byte *buf, uint index, const byte *key, __attribute__ ((unused))) { char index_value[IO_SIZE]; - char key_value[IO_SIZE]; - char test_value[IO_SIZE]; String index_string(index_value, sizeof(index_value), &my_charset_bin); index_string.length(0); uint keylen; @@ -1521,7 +1514,6 @@ int ha_federated::index_read_idx(byte *buf, uint index, const byte *key, /* Initialized at each key walk (called multiple times unlike rnd_init()) */ int ha_federated::index_init(uint keynr) { - int error; DBUG_ENTER("ha_federated::index_init"); DBUG_PRINT("info", ("table: '%s' key: %d", table->s->table_name, keynr)); @@ -1553,7 +1545,6 @@ int ha_federated::index_next(byte *buf) int ha_federated::rnd_init(bool scan) { DBUG_ENTER("ha_federated::rnd_init"); - int num_fields, rows; /* This 'scan' flag is incredibly important for this handler to work |