summaryrefslogtreecommitdiff
path: root/sql/ha_federated.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/ha_federated.cc')
-rw-r--r--sql/ha_federated.cc31
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