summaryrefslogtreecommitdiff
path: root/sql/ha_federated.cc
diff options
context:
space:
mode:
authorunknown <eric@mysql.com>2005-09-12 18:02:17 -0700
committerunknown <eric@mysql.com>2005-09-12 18:02:17 -0700
commit00d77fdd75aa132249594a16db2c674f3642b28d (patch)
tree6c75268ce9925e6ce7ea68145119322cc40faafb /sql/ha_federated.cc
parent3d1658f71337aeb6ba235d7b0a4cf2198e1888bc (diff)
downloadmariadb-git-00d77fdd75aa132249594a16db2c674f3642b28d.tar.gz
Made changes to add federated CONNECTION information to the .frm file
(per Monty's patch). Remove references to the "COMMENT" field. WL#2414 mysql-test/r/federated.result: alter from "COMMENT=" to "CONNECTION=" mysql-test/r/federated_archive.result: change "COMMENT=" to "CONNECTION=" mysql-test/t/federated.test: change from "COMMENT=" to "CONNECTION=" mysql-test/t/federated_archive.test: change from "COMMENT=" to "CONNECTION=" sql/ha_federated.cc: Change parsing of char* table->s->comment to LEX_STRING table->s->connect_string (per Monty's patch) sql/handler.h: added LEX_STRING "connection_string" (per Monty's patch) sql/sql_yacc.yy: added setting of "connect_string" string and length sql/table.cc: Modifying frm file to store connecting information (code change came from Monty). sql/table.h: added connect_string sql/unireg.cc: Storing information on connection_string (code came from Monty).
Diffstat (limited to 'sql/ha_federated.cc')
-rw-r--r--sql/ha_federated.cc36
1 files changed, 21 insertions, 15 deletions
diff --git a/sql/ha_federated.cc b/sql/ha_federated.cc
index 96cb81fe3ec..02a110811c0 100644
--- a/sql/ha_federated.cc
+++ b/sql/ha_federated.cc
@@ -518,7 +518,7 @@ error:
/*
- Parse connection info from table->s->comment
+ Parse connection info from table->s->connect_string
SYNOPSIS
parse_url()
@@ -563,7 +563,14 @@ static int parse_url(FEDERATED_SHARE *share, TABLE *table,
DBUG_ENTER("ha_federated::parse_url");
share->port= 0;
- share->scheme= my_strdup(table->s->comment, MYF(0));
+ DBUG_PRINT("info", ("Length %d \n", table->s->connect_string.length));
+ DBUG_PRINT("info", ("String %.*s \n", table->s->connect_string.length,
+ table->s->connect_string.str));
+ share->scheme= my_strdup_with_length(table->s->connect_string.str,
+ table->s->connect_string.length+1,
+ MYF(0));
+ // Add a null for later termination of table name
+ share->scheme[table->s->connect_string.length]= 0;
DBUG_PRINT("info",("parse_url alloced share->scheme %lx", share->scheme));
/*
@@ -673,7 +680,8 @@ error:
my_free((gptr) share->scheme, MYF(0));
share->scheme= 0;
}
- my_error(error_num, MYF(0), table->s->comment);
+ /* FIXME: table->s->connect_string is NOT null terminated */
+ my_error(error_num, MYF(0), "invalid connection string");
DBUG_RETURN(error_num);
}
@@ -1313,7 +1321,7 @@ static FEDERATED_SHARE *get_share(const char *table_name, TABLE *table)
&share, sizeof(*share),
&tmp_table_name, tmp_table_name_length+ 1,
&select_query,
- query.length()+strlen(table->s->comment)+1,
+ query.length()+table->s->connect_string.length+1,
NullS)))
{
pthread_mutex_unlock(&federated_mutex);
@@ -1918,11 +1926,9 @@ int ha_federated::delete_row(const byte *buf)
String delete_string(delete_buffer, sizeof(delete_buffer), &my_charset_bin);
String data_string(data_buffer, sizeof(data_buffer), &my_charset_bin);
- delete_string.length(0);
- data_string.length(0);
-
DBUG_ENTER("ha_federated::delete_row");
+ delete_string.length(0);
delete_string.append(FEDERATED_DELETE);
delete_string.append(FEDERATED_FROM);
delete_string.append(FEDERATED_BTICK);
@@ -1932,9 +1938,11 @@ int ha_federated::delete_row(const byte *buf)
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())
{
delete_string.append(FEDERATED_IS);
data_string.append(FEDERATED_NULL);
@@ -1942,16 +1950,14 @@ int ha_federated::delete_row(const byte *buf)
else
{
delete_string.append(FEDERATED_EQ);
- (*field)->val_str(&data_string);
- (*field)->quote_data(&data_string);
+ cur_field->val_str(&data_string);
+ cur_field->quote_data(&data_string);
}
delete_string.append(data_string);
- data_string.length(0);
-
- if (*(field + 1))
- delete_string.append(FEDERATED_AND);
+ delete_string.append(FEDERATED_AND);
}
+ delete_string.length(delete_string.length()-5); // Remove trailing AND
delete_string.append(FEDERATED_LIMIT1);
DBUG_PRINT("info",