=== modified file 'client/mysql.cc' --- client/mysql.cc 2009-07-15 00:03:51 +0000 +++ client/mysql.cc 2009-08-21 17:57:34 +0000 @@ -114,6 +114,7 @@ extern "C" { #define PROMPT_CHAR '\\' #define DEFAULT_DELIMITER ";" +#define DEFAULT_FIELDS_TERMINATED "\t" #define MAX_BATCH_BUFFER_SIZE (1024L * 1024L) @@ -153,7 +154,7 @@ static uint my_end_arg; static char * opt_mysql_unix_port=0; static int connect_flag=CLIENT_INTERACTIVE; static char *current_host,*current_db,*current_user=0,*opt_password=0, - *current_prompt=0, *delimiter_str= 0, + *current_prompt= 0, *delimiter_str= 0, *fields_terminated_str= 0, *default_charset= (char*) MYSQL_DEFAULT_CHARSET_NAME; static char *histfile; static char *histfile_tmp; @@ -184,6 +185,9 @@ static uint prompt_counter; static char delimiter[16]= DEFAULT_DELIMITER; static uint delimiter_length= 1; +static char fields_terminated[16]= DEFAULT_FIELDS_TERMINATED; +static uint fields_terminated_length= 1; + #ifdef HAVE_SMEM static char *shared_memory_base_name=0; #endif @@ -207,6 +211,7 @@ static int com_quit(String *str,char*), com_go(String *str,char*), com_ego(String *str,char*), com_print(String *str,char*), com_help(String *str,char*), com_clear(String *str,char*), + com_fieldsterminated(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_tee(String *str, char*), @@ -253,6 +258,7 @@ static COMMANDS commands[] = { { "clear", 'c', com_clear, 0, "Clear the current input statement."}, { "connect",'r', com_connect,1, "Reconnect to the server. Optional arguments are db and host." }, + { "fieldsterm", 'f', com_fieldsterminated, 1, "Set field terminator." }, { "delimiter", 'd', com_delimiter, 1, "Set statement delimiter." }, #ifdef USE_POPEN @@ -1073,6 +1079,7 @@ int main(int argc,char *argv[]) DBUG_PROCESS(argv[0]); delimiter_str= delimiter; + fields_terminated_str= fields_terminated; default_prompt = my_strdup(getenv("MYSQL_PS1") ? getenv("MYSQL_PS1") : "mysql> ",MYF(MY_WME)); @@ -1370,6 +1377,9 @@ static struct my_option my_long_options[ {"vertical", 'E', "Print the output of a query (rows) vertically.", (uchar**) &vertical, (uchar**) &vertical, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"fields-terminated-by", OPT_FTB, + "Fields in the textfile are terminated by ...", (uchar**) &fields_terminated, + (uchar**) &fields_terminated, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"force", 'f', "Continue even if we get an sql error.", (uchar**) &ignore_errors, (uchar**) &ignore_errors, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, @@ -1598,6 +1608,14 @@ get_one_option(int optid, const struct m delimiter_length= (uint)strlen(delimiter); delimiter_str= delimiter; break; + case OPT_FTB: + if (argument == disabled_my_option) + strmov(fields_terminated, DEFAULT_FIELDS_TERMINATED); + else + strmake(fields_terminated, argument, sizeof(fields_terminated) - 1); + fields_terminated_length= strlen(fields_terminated); + fields_terminated_str= fields_terminated; + break; case OPT_LOCAL_INFILE: using_opt_local_infile=1; break; @@ -3654,7 +3672,7 @@ print_tab_data(MYSQL_RES *result) while ((field = mysql_fetch_field(result))) { if (first++) - (void) tee_fputs("\t", PAGER); + (void) tee_fputs(fields_terminated, PAGER); (void) tee_fputs(field->name, PAGER); } (void) tee_fputs("\n", PAGER); @@ -3665,7 +3683,7 @@ print_tab_data(MYSQL_RES *result) safe_put_field(cur[0],lengths[0]); for (uint off=1 ; off < mysql_num_fields(result); off++) { - (void) tee_fputs("\t", PAGER); + (void) tee_fputs(fields_terminated, PAGER); safe_put_field(cur[off], lengths[off]); } (void) tee_fputs("\n", PAGER); @@ -4031,6 +4049,29 @@ com_delimiter(String *buffer __attribute return 0; } + + /* ARGSUSED */ +static int +com_fieldsterminated(String *buffer __attribute__((unused)), char *line) +{ + char buff[256], *tmp; + + strmake(buff, line, sizeof(buff) - 1); + tmp= get_arg(buff, 0); + + if (!tmp || !*tmp) + { + put_info("FIELDSTERM must be followed by a character or string", + INFO_ERROR); + return 0; + } + strmake(fields_terminated, tmp, sizeof(fields_terminated) - 1); + fields_terminated_length= (int)strlen(fields_terminated); + fields_terminated_str= fields_terminated; + return 0; +} + + /* ARGSUSED */ static int com_use(String *buffer __attribute__((unused)), char *line)