Commit 31fa2c50 authored by serg@serg.mysql.com's avatar serg@serg.mysql.com

merged

parents a69c61a0 5563f67c
This diff is collapsed.
...@@ -352,21 +352,25 @@ static int process_selected_tables(char *db, char **table_names, int tables) ...@@ -352,21 +352,25 @@ static int process_selected_tables(char *db, char **table_names, int tables)
return 1; return 1;
if (opt_all_in_1) if (opt_all_in_1)
{ {
/*
We need table list in form `a`, `b`, `c`
that's why we need 4 more chars added to to each table name
space is for more readable output in logs and in case of error
*/
char *table_names_comma_sep, *end; char *table_names_comma_sep, *end;
int i, tot_length = 0; int i, tot_length = 0;
for (i = 0; i < tables; i++) for (i = 0; i < tables; i++)
tot_length += strlen(*(table_names + i)) + 1; tot_length += strlen(*(table_names + i)) + 4;
if (!(table_names_comma_sep = (char *) if (!(table_names_comma_sep = (char *)
my_malloc((sizeof(char) * tot_length) + 1, MYF(MY_WME)))) my_malloc((sizeof(char) * tot_length) + 4, MYF(MY_WME))))
return 1; return 1;
for (end = table_names_comma_sep + 1; tables > 0; for (end = table_names_comma_sep + 1; tables > 0;
tables--, table_names++) tables--, table_names++)
{ {
end = strmov(end, *table_names); end = strxmov(end, " `", *table_names, "`,", NullS);
*end++= ',';
} }
*--end = 0; *--end = 0;
handle_request_for_tables(table_names_comma_sep + 1, tot_length - 1); handle_request_for_tables(table_names_comma_sep + 1, tot_length - 1);
...@@ -393,22 +397,27 @@ static int process_all_tables_in_db(char *database) ...@@ -393,22 +397,27 @@ static int process_all_tables_in_db(char *database)
if (opt_all_in_1) if (opt_all_in_1)
{ {
/*
We need table list in form `a`, `b`, `c`
that's why we need 4 more chars added to to each table name
space is for more readable output in logs and in case of error
*/
char *tables, *end; char *tables, *end;
uint tot_length = 0; uint tot_length = 0;
while ((row = mysql_fetch_row(res))) while ((row = mysql_fetch_row(res)))
tot_length += strlen(row[0]) + 1; tot_length += strlen(row[0]) + 4;
mysql_data_seek(res, 0); mysql_data_seek(res, 0);
if (!(tables=(char *) my_malloc(sizeof(char)*tot_length+1, MYF(MY_WME)))) if (!(tables=(char *) my_malloc(sizeof(char)*tot_length+4, MYF(MY_WME))))
{ {
mysql_free_result(res); mysql_free_result(res);
return 1; return 1;
} }
for (end = tables + 1; (row = mysql_fetch_row(res)) ;) for (end = tables + 1; (row = mysql_fetch_row(res)) ;)
{ {
end = strmov(end, row[0]); end = strxmov(end, " `", row[0], "`,", NullS);
*end++= ',';
} }
*--end = 0; *--end = 0;
if (tot_length) if (tot_length)
...@@ -468,10 +477,14 @@ static int handle_request_for_tables(char *tables, uint length) ...@@ -468,10 +477,14 @@ static int handle_request_for_tables(char *tables, uint length)
if (!(query =(char *) my_malloc((sizeof(char)*(length+110)), MYF(MY_WME)))) if (!(query =(char *) my_malloc((sizeof(char)*(length+110)), MYF(MY_WME))))
return 1; return 1;
sprintf(query, "%s TABLE %s %s", op, tables, options); if (opt_all_in_1)
/* No backticks here as we added them before */
sprintf(query, "%s TABLE %s %s", op, tables, options);
else
sprintf(query, "%s TABLE `%s` %s", op, tables, options);
if (mysql_query(sock, query)) if (mysql_query(sock, query))
{ {
sprintf(message, "when executing '%s TABLE `%s` %s", op, tables,options); sprintf(message, "when executing '%s TABLE ... %s'", op, options);
DBerror(sock, message); DBerror(sock, message);
return 1; return 1;
} }
......
This diff is collapsed.
...@@ -566,7 +566,6 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param, bool optimize) ...@@ -566,7 +566,6 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param, bool optimize)
} }
if (!optimize || if (!optimize ||
memcmp(file->state, & share->state.state, sizeof(MI_STATUS_INFO)) ||
((file->state->del || share->state.split != file->state->records) && ((file->state->del || share->state.split != file->state->records) &&
(!(param.testflag & T_QUICK) || (!(param.testflag & T_QUICK) ||
!(share->state.changed & STATE_NOT_OPTIMIZED_KEYS)))) !(share->state.changed & STATE_NOT_OPTIMIZED_KEYS))))
...@@ -625,7 +624,16 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param, bool optimize) ...@@ -625,7 +624,16 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param, bool optimize)
STATE_CRASHED_ON_REPAIR); STATE_CRASHED_ON_REPAIR);
file->update|=HA_STATE_CHANGED | HA_STATE_ROW_CHANGED; file->update|=HA_STATE_CHANGED | HA_STATE_ROW_CHANGED;
} }
file->save_state=file->s->state.state; /* Here we need to make file->save_state and file->s->state.state
equal. Unfortunately, sometime table comes locked here (so
file->save_state represents actual table state), and sometime
unlocked (and actual is file->s->state.state instead). This all
is very confusing, and should be streamlined (TODO).
*/
if (file->state == & file->save_state)
file->s->state.state=file->save_state;
else
file->save_state=file->s->state.state;
if (file->s->base.auto_key) if (file->s->base.auto_key)
update_auto_increment_key(&param, file, 1); update_auto_increment_key(&param, file, 1);
if (optimize_done) if (optimize_done)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment