Commit 397cef94 authored by jimw@mysql.com's avatar jimw@mysql.com

Fix 'source' command in mysql client to handle delimiter command

in sourced file properly. (Bug #11523)
parent a17fa233
...@@ -203,7 +203,7 @@ static int com_nopager(String *str, char*), com_pager(String *str, char*), ...@@ -203,7 +203,7 @@ static int com_nopager(String *str, char*), com_pager(String *str, char*),
com_edit(String *str,char*), com_shell(String *str, char *); com_edit(String *str,char*), com_shell(String *str, char *);
#endif #endif
static int read_lines(bool execute_commands); static int read_and_execute(bool interactive);
static int sql_connect(char *host,char *database,char *user,char *password, static int sql_connect(char *host,char *database,char *user,char *password,
uint silent); uint silent);
static int put_info(const char *str,INFO_TYPE info,uint error=0, static int put_info(const char *str,INFO_TYPE info,uint error=0,
...@@ -468,7 +468,7 @@ int main(int argc,char *argv[]) ...@@ -468,7 +468,7 @@ int main(int argc,char *argv[])
"Type 'help [[%]function name[%]]' to get help on usage of function.\n"); "Type 'help [[%]function name[%]]' to get help on usage of function.\n");
#endif #endif
put_info(buff,INFO_INFO); put_info(buff,INFO_INFO);
status.exit_status=read_lines(1); // read lines and execute them status.exit_status= read_and_execute(!status.batch);
if (opt_outfile) if (opt_outfile)
end_tee(); end_tee();
mysql_end(0); mysql_end(0);
...@@ -948,7 +948,7 @@ static int get_options(int argc, char **argv) ...@@ -948,7 +948,7 @@ static int get_options(int argc, char **argv)
return(0); return(0);
} }
static int read_lines(bool execute_commands) static int read_and_execute(bool interactive)
{ {
#if defined( __WIN__) || defined(OS2) || defined(__NETWARE__) #if defined( __WIN__) || defined(OS2) || defined(__NETWARE__)
char linebuffer[254]; char linebuffer[254];
...@@ -963,7 +963,7 @@ static int read_lines(bool execute_commands) ...@@ -963,7 +963,7 @@ static int read_lines(bool execute_commands)
for (;;) for (;;)
{ {
if (status.batch || !execute_commands) if (!interactive)
{ {
line=batch_readline(status.line_buff); line=batch_readline(status.line_buff);
line_number++; line_number++;
...@@ -1041,7 +1041,7 @@ static int read_lines(bool execute_commands) ...@@ -1041,7 +1041,7 @@ static int read_lines(bool execute_commands)
Check if line is a mysql command line Check if line is a mysql command line
(We want to allow help, print and clear anywhere at line start (We want to allow help, print and clear anywhere at line start
*/ */
if (execute_commands && (named_cmds || glob_buffer.is_empty()) if ((named_cmds || glob_buffer.is_empty())
&& !in_string && (com=find_command(line,0))) && !in_string && (com=find_command(line,0)))
{ {
if ((*com->func)(&glob_buffer,line) > 0) if ((*com->func)(&glob_buffer,line) > 0)
...@@ -1049,7 +1049,7 @@ static int read_lines(bool execute_commands) ...@@ -1049,7 +1049,7 @@ static int read_lines(bool execute_commands)
if (glob_buffer.is_empty()) // If buffer was emptied if (glob_buffer.is_empty()) // If buffer was emptied
in_string=0; in_string=0;
#ifdef HAVE_READLINE #ifdef HAVE_READLINE
if (status.add_to_history && not_in_history(line)) if (interactive && status.add_to_history && not_in_history(line))
add_history(line); add_history(line);
#endif #endif
continue; continue;
...@@ -1059,7 +1059,7 @@ static int read_lines(bool execute_commands) ...@@ -1059,7 +1059,7 @@ static int read_lines(bool execute_commands)
} }
/* if in batch mode, send last query even if it doesn't end with \g or go */ /* if in batch mode, send last query even if it doesn't end with \g or go */
if ((status.batch || !execute_commands) && !status.exit_status) if (!interactive && !status.exit_status)
{ {
remove_cntrl(glob_buffer); remove_cntrl(glob_buffer);
if (!glob_buffer.is_empty()) if (!glob_buffer.is_empty())
...@@ -2777,7 +2777,7 @@ static int com_source(String *buffer, char *line) ...@@ -2777,7 +2777,7 @@ static int com_source(String *buffer, char *line)
status.line_buff=line_buff; status.line_buff=line_buff;
status.file_name=source_name; status.file_name=source_name;
glob_buffer.length(0); // Empty command buffer glob_buffer.length(0); // Empty command buffer
error=read_lines(0); // Read lines from file error= read_and_execute(false);
status=old_status; // Continue as before status=old_status; // Continue as before
my_fclose(sql_file,MYF(0)); my_fclose(sql_file,MYF(0));
batch_readline_end(line_buff); batch_readline_end(line_buff);
......
...@@ -31,6 +31,10 @@ a ...@@ -31,6 +31,10 @@ a
Test delimiter delimiter Test delimiter delimiter
a a
1 1
Tables_in_test
t1
t2
t3
Test delimiter : from command line Test delimiter : from command line
a a
......
...@@ -45,4 +45,7 @@ delimiter delimiter ...@@ -45,4 +45,7 @@ delimiter delimiter
select * from t1 delimiter select * from t1 delimiter
delimiter ; # Reset delimiter delimiter ; # Reset delimiter
#
# Bug #11523: \d works differently than delimiter
#
source t/mysql_delimiter_source.sql
delimiter //
create table t2 (a int) //
delimiter ;
\d //
create table t3 (a int) //
\d ;
show tables;
drop table t2, t3;
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