Commit e049538c authored by monty@donna.mysql.com's avatar monty@donna.mysql.com

Split error message for crashed table to 3 different error messages.

Fixes for Windows
parent 4f91d5b5
......@@ -8262,6 +8262,12 @@ following information:
@example
127.0.0.1 localhost
@end example
@item @code{ALTER TABLE}
While you are doing an @code{ALTER TABLE} the table is locked from usage
by other threads. This has to do with the fact that you on Windows can't
delete a file that is in use by another threads. (We may in the future
find some way to go around this problem).
@end table
Here are some open issues for anyone who might want to help us with the Windows
......@@ -145,14 +145,18 @@ void tee_putc(int c, FILE *file);
static int get_options(int argc,char **argv);
static int com_quit(String *str,char*),
com_go(String *str,char*), com_ego(String *str,char*),
com_edit(String *str,char*), com_print(String *str,char*),
com_print(String *str,char*),
com_help(String *str,char*), com_clear(String *str,char*),
com_connect(String *str,char*), com_status(String *str,char*),
com_use(String *str,char*), com_source(String *str, char*),
com_rehash(String *str, char*), com_pager(String *str, char*),
com_nopager(String *str, char*), com_tee(String *str, char*),
com_rehash(String *str, char*), com_tee(String *str, char*),
com_notee(String *str, char*);
#ifndef __WIN__
static int com_nopager(String *str, char*), com_pager(String *str, char*),
com_edit(String *str,char*);
#endif
static int read_lines(bool execute_commands);
static int sql_connect(char *host,char *database,char *user,char *password,
uint silent);
......@@ -180,7 +184,9 @@ static COMMANDS commands[] = {
{ "clear", 'c', com_clear, 0, "Clear command."},
{ "connect",'r', com_connect,1,
"Reconnect to the server. Optional arguments are db and host." },
#ifndef __WIN__
{ "edit", 'e', com_edit, 0, "Edit command with $EDITOR."},
#endif
{ "ego", 'G', com_ego, 0,
"Send command to mysql server, display result vertically."},
{ "exit", 'q', com_quit, 0, "Exit mysql. Same as quit."},
......@@ -764,6 +770,16 @@ static int read_lines(bool execute_commands)
}
else
{
#ifdef __WIN__
if (opt_outfile && glob_buffer.is_empty())
fflush(OUTFILE);
tee_fputs(glob_buffer.is_empty() ? "mysql> " :
!in_string ? " -> " :
in_string == '\'' ?
" '> " : " \"> ",stdout);
linebuffer[0]=(char) sizeof(linebuffer);
line=_cgets(linebuffer);
#else
if (opt_outfile)
{
if (glob_buffer.is_empty())
......@@ -773,14 +789,6 @@ static int read_lines(bool execute_commands)
in_string == '\'' ?
" '> " : " \"> ", OUTFILE);
}
#ifdef __WIN__
tee_fprintf(stdout, glob_buffer.is_empty() ? "mysql> " :
!in_string ? " -> " :
in_string == '\'' ?
" '> " : " \"> ");
linebuffer[0]=(char) sizeof(linebuffer);
line=_cgets(linebuffer);
#else
line=readline((char*) (glob_buffer.is_empty() ? "mysql> " :
!in_string ? " -> " :
in_string == '\'' ?
......@@ -1476,7 +1484,7 @@ static void end_pager()
static void init_tee()
{
if (!(OUTFILE= my_fopen(outfile,O_APPEND | O_WRONLY | O_BINARY,MYF(MY_WME))))
if (!(OUTFILE= my_fopen(outfile, O_APPEND | O_WRONLY, MYF(MY_WME))))
{
opt_outfile=0;
init_pager();
......@@ -1727,7 +1735,7 @@ com_tee(String *buffer, char *line __attribute__((unused)))
init_tee();
opt_outfile=1;
}
tee_fprintf(stdout, "Outfile '%s' is in use now.\n", outfile);
tee_fprintf(stdout, "Logging to file '%s'\n", outfile);
return 0;
}
......@@ -1742,6 +1750,11 @@ com_notee(String *buffer __attribute__((unused)),
return 0;
}
/*
** Sorry, this command is not available in Windows.
*/
#ifndef __WIN__
static int
com_pager(String *buffer, char *line __attribute__((unused)))
{
......@@ -1749,10 +1762,6 @@ com_pager(String *buffer, char *line __attribute__((unused)))
if (status.batch)
return 0;
#ifdef __WIN__
tee_fprintf(stdout, "Sorry, this command is not available in Windows.\n");
return 0;
#endif
/* Skip space from file name */
while (isspace(*line))
line++;
......@@ -1783,28 +1792,27 @@ com_pager(String *buffer, char *line __attribute__((unused)))
return 0;
}
static int
com_nopager(String *buffer __attribute__((unused)),
char *line __attribute__((unused)))
{
#ifdef __WIN__
tee_fprintf(stdout, "This command has no function in Windows.\n");
return 0;
#endif
strmov(pager, "stdout");
opt_nopager=1;
tee_fprintf(stdout, "PAGER set to stdout\n");
return 0;
}
#endif
/*
** Sorry, you can't send the result to an editor in Win32
*/
#ifndef __WIN__
static int
com_edit(String *buffer,char *line __attribute__((unused)))
{
#ifdef __WIN__
put_info("Sorry, you can't send the result to an editor in Win32",
INFO_ERROR);
#else
char filename[FN_REFLEN],buff[160];
int fd,tmp;
const char *editor;
......@@ -1838,9 +1846,10 @@ com_edit(String *buffer,char *line __attribute__((unused)))
(void) my_close(fd,MYF(0));
(void) my_delete(filename,MYF(MY_WME));
err:
#endif
return 0;
}
#endif
/* If arg is given, exit without errors. This happens on command 'quit' */
......
......@@ -353,6 +353,7 @@ typedef struct st_mi_sortinfo {
/* functions in mi_check */
void myisamchk_init(MI_CHECK *param);
int chk_status(MI_CHECK *param, MI_INFO *info);
int chk_del(MI_CHECK *param, register MI_INFO *info, uint test_flag);
int chk_size(MI_CHECK *param, MI_INFO *info);
int chk_key(MI_CHECK *param, MI_INFO *info);
......
......@@ -194,4 +194,6 @@
#define ER_FT_MATCHING_KEY_NOT_FOUND 1191
#define ER_LOCK_OR_ACTIVE_TRANSACTION 1192
#define ER_UNKNOWN_SYSTEM_VARIABLE 1193
#define ER_ERROR_MESSAGES 194
#define ER_CRASHED_ON_USAGE 1194
#define ER_CRASHED_ON_REPAIR 1195
#define ER_ERROR_MESSAGES 196
......@@ -97,6 +97,26 @@ void myisamchk_init(MI_CHECK *param)
param->start_check_pos=0;
}
/* Check the status flags for the table */
int chk_status(MI_CHECK *param, register MI_INFO *info)
{
MYISAM_SHARE *share=info->s;
if (mi_is_crashed_on_repair(info))
mi_check_print_warning(param,
"Table is marked as crashed and last repair failed");
else if (mi_is_crashed(info))
mi_check_print_warning(param,
"Table is marked as crashed");
if (share->state.open_count)
{
mi_check_print_warning(param,
"%d clients is using or hasn't closed the table properly",
share->state.open_count);
}
return 0;
}
/* Check delete links */
int chk_del(MI_CHECK *param, register MI_INFO *info, uint test_flag)
......
......@@ -196,7 +196,7 @@ static struct option long_options[] =
static void print_version(void)
{
printf("%s Ver 1.37 for %s at %s\n",my_progname,SYSTEM_TYPE,
printf("%s Ver 1.38 for %s at %s\n",my_progname,SYSTEM_TYPE,
MACHINE_TYPE);
}
......@@ -739,12 +739,7 @@ static int myisamchk(MI_CHECK *param, my_string filename)
printf("Data records: %7s Deleted blocks: %7s\n",
llstr(info->state->records,llbuff),
llstr(info->state->del,llbuff2));
if (share->state.open_count)
{
mi_check_print_warning(param,
"%d clients is using or hasn't closed the table properly",
share->state.open_count);
}
error =chk_status(param,info);
share->state.key_map &=param->keys_in_use;
error =chk_size(param,info);
if (!error || !(param->testflag & (T_FAST | T_FORCE_CREATE)))
......
......@@ -259,6 +259,7 @@ int ha_myisam::check(THD* thd, HA_CHECK_OPT* check_opt)
(uint) (share->global_changed ? 1 : 0)))))
return HA_ADMIN_ALREADY_DONE;
error = chk_status(&param, file); // Not fatal
error = chk_size(&param, file);
if (!error)
error |= chk_del(&param, file, param.testflag);
......@@ -266,8 +267,10 @@ int ha_myisam::check(THD* thd, HA_CHECK_OPT* check_opt)
error = chk_key(&param, file);
if (!error)
{
if (!check_opt->quick &&
(share->options & (HA_OPTION_PACK_RECORD | HA_OPTION_COMPRESS_RECORD)))
if ((!check_opt->quick &&
(share->options &
(HA_OPTION_PACK_RECORD | HA_OPTION_COMPRESS_RECORD))) ||
mi_is_crashed(file))
{
init_io_cache(&param.read_cache, file->dfile,
my_default_record_cache_size, READ_CACHE,
......@@ -281,7 +284,8 @@ int ha_myisam::check(THD* thd, HA_CHECK_OPT* check_opt)
if ((share->state.changed & (STATE_CHANGED |
STATE_CRASHED_ON_REPAIR |
STATE_CRASHED | STATE_NOT_ANALYZED)) ||
(param.testflag & T_STATISTICS))
(param.testflag & T_STATISTICS) ||
mi_is_crashed(file))
{
file->update|=HA_STATE_CHANGED | HA_STATE_ROW_CHANGED;
pthread_mutex_lock(&share->intern_lock);
......
......@@ -543,9 +543,14 @@ void handler::print_error(int error, myf errflag)
textno=ER_CHECKREAD;
break;
case HA_ERR_CRASHED:
case HA_ERR_CRASHED_ON_REPAIR:
textno=ER_NOT_KEYFILE;
break;
case HA_ERR_CRASHED_ON_USAGE:
textno=ER_CRASHED_ON_USAGE;
break;
case HA_ERR_CRASHED_ON_REPAIR:
textno=ER_CRASHED_ON_REPAIR;
break;
case HA_ERR_OUT_OF_MEM:
my_error(ER_OUT_OF_RESOURCES,errflag);
DBUG_VOID_RETURN;
......
......@@ -209,3 +209,5 @@
"-Bdn sloupec nem vytvoen fulltextov index",-A
"Can't execute the given command because you have active locked tables or an active transaction",
"Unknown system variable '%-.64'",
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
......@@ -198,3 +198,5 @@
"Can't find FULLTEXT index matching the column list",
"Can't execute the given command because you have active locked tables or an active transaction",
"Unknown system variable '%-.64'",
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
......@@ -195,3 +195,5 @@
"Can't find FULLTEXT index matching the column list",
"Can't execute the given command because you have active locked tables or an active transaction",
"Unknown system variable '%-.64'",
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
......@@ -195,3 +195,5 @@
"Can't find FULLTEXT index matching the column list",
"Can't execute the given command because you have active locked tables or an active transaction",
"Unknown system variable '%-.64'",
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
......@@ -199,3 +199,5 @@
"Can't find FULLTEXT index matching the column list",
"Can't execute the given command because you have active locked tables or an active transaction",
"Unknown system variable '%-.64'",
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
......@@ -195,3 +195,5 @@
"Can't find FULLTEXT index matching the column list",
"Can't execute the given command because you have active locked tables or an active transaction",
"Unknown system variable '%-.64'",
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
......@@ -198,3 +198,5 @@
"Kann keinen FULLTEXT-Index finden der der Spaltenliste entspricht",
"Can't execute the given command because you have active locked tables or an active transaction",
"Unknown system variable '%-.64'",
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
......@@ -195,3 +195,5 @@
"Can't find FULLTEXT index matching the column list",
"Can't execute the given command because you have active locked tables or an active transaction",
"Unknown system variable '%-.64'",
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
......@@ -197,3 +197,5 @@
"Can't find FULLTEXT index matching the column list",
"Can't execute the given command because you have active locked tables or an active transaction",
"Unknown system variable '%-.64'",
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
......@@ -195,3 +195,5 @@
"Impossibile trovare un indice FULLTEXT che corrisponda all'elenco delle colonne",
"Can't execute the given command because you have active locked tables or an active transaction",
"Unknown system variable '%-.64'",
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
......@@ -197,3 +197,5 @@
"Can't find FULLTEXT index matching the column list",
"Can't execute the given command because you have active locked tables or an active transaction",
"Unknown system variable '%-.64'",
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
......@@ -195,3 +195,5 @@
"Can't find FULLTEXT index matching the column list",
"Can't execute the given command because you have active locked tables or an active transaction",
"Unknown system variable '%-.64'",
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
......@@ -197,3 +197,5 @@
"Can't find FULLTEXT index matching the column list",
"Can't execute the given command because you have active locked tables or an active transaction",
"Unknown system variable '%-.64'",
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
......@@ -197,3 +197,5 @@
"Can't find FULLTEXT index matching the column list",
"Can't execute the given command because you have active locked tables or an active transaction",
"Unknown system variable '%-.64'",
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
......@@ -199,3 +199,5 @@
"Can't find FULLTEXT index matching the column list",
"Can't execute the given command because you have active locked tables or an active transaction",
"Unknown system variable '%-.64'",
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
......@@ -195,3 +195,5 @@
"Can't find FULLTEXT index matching the column list",
"Can't execute the given command because you have active locked tables or an active transaction",
"Unknown system variable '%-.64'",
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
......@@ -199,3 +199,5 @@
"Can't find FULLTEXT index matching the column list",
"Can't execute the given command because you have active locked tables or an active transaction",
"Unknown system variable '%-.64'",
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
......@@ -198,3 +198,5 @@
"FULLTEXT , , ",
"Can't execute the given command because you have active locked tables or an active transaction",
"Unknown system variable '%-.64'",
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
......@@ -203,3 +203,5 @@
"Can't find FULLTEXT index matching the column list",
"Can't execute the given command because you have active locked tables or an active transaction",
"Unknown system variable '%-.64'",
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
......@@ -196,3 +196,5 @@
"Can't find FULLTEXT index matching the column list",
"Can't execute the given command because you have active locked tables or an active transaction",
"Unknown system variable '%-.64'",
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
......@@ -195,3 +195,7 @@
"Hittar inte ett FULLTEXT index i kolumnlistan",
"Kan inte exekvera kommandot emedan du har en låst tabell eller an aktiv transaktion",
"Okänd system variabel '%-.64'",
#ER_CRASHED_ON_USAGE
"Tabell '%-.64s' är crashad och bör repareras med REPAIR TABLE",
#ER_CRASHED_ON_REPAIR
"Tabell '%-.64s' är crashad och senast (automatiska?) reparation misslyckades",
......@@ -195,3 +195,5 @@
"Hittar inte ett FULLTEXT index i kolumnlistan",
"Kan inte exekvera kommandot emedan du har en låst tabell eller an aktiv transaktion",
"Okänd system variabel '%-.64'",
"Tabell '%-.64s' är crashad och bör repareras med REPAIR TABLE",
"Tabell '%-.64s' är crashad och senast (automatiska?) reparation misslyckades",
......@@ -650,8 +650,8 @@ TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info,
(Item_result_field***) 0, &tmp_field,0,0);
if (!field ||
!(cr_field=new create_field(field,(item->type() == Item::FIELD_ITEM ?
((Item_field *)item)->field : NULL)
)))
((Item_field *)item)->field :
(Field*) 0))))
DBUG_RETURN(0);
extra_fields->push_back(cr_field);
}
......
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