mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Fix 'source' command in mysql client to handle delimiter command
in sourced file properly. (Bug #11523) client/mysql.cc: Rename read_lines() to read_and_execute() and change interface so it is clear when we are reading and processing lines interactively versus in batch mode or from a file being sourced. mysql-test/r/mysql.result: Add results mysql-test/t/mysql_delimiter.sql: Add new test mysql-test/t/mysql_delimiter_source.sql: New BitKeeper file ``mysql-test/t/mysql_delimiter_source.sql''
This commit is contained in:
@ -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 *);
|
||||
#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,
|
||||
uint silent);
|
||||
static int put_info(const char *str,INFO_TYPE info,uint error=0,
|
||||
@ -468,7 +468,7 @@ int main(int argc,char *argv[])
|
||||
"Type 'help [[%]function name[%]]' to get help on usage of function.\n");
|
||||
#endif
|
||||
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)
|
||||
end_tee();
|
||||
mysql_end(0);
|
||||
@ -948,7 +948,7 @@ static int get_options(int argc, char **argv)
|
||||
return(0);
|
||||
}
|
||||
|
||||
static int read_lines(bool execute_commands)
|
||||
static int read_and_execute(bool interactive)
|
||||
{
|
||||
#if defined( __WIN__) || defined(OS2) || defined(__NETWARE__)
|
||||
char linebuffer[254];
|
||||
@ -963,7 +963,7 @@ static int read_lines(bool execute_commands)
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (status.batch || !execute_commands)
|
||||
if (!interactive)
|
||||
{
|
||||
line=batch_readline(status.line_buff);
|
||||
line_number++;
|
||||
@ -1041,7 +1041,7 @@ static int read_lines(bool execute_commands)
|
||||
Check if line is a mysql command line
|
||||
(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)))
|
||||
{
|
||||
if ((*com->func)(&glob_buffer,line) > 0)
|
||||
@ -1049,7 +1049,7 @@ static int read_lines(bool execute_commands)
|
||||
if (glob_buffer.is_empty()) // If buffer was emptied
|
||||
in_string=0;
|
||||
#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);
|
||||
#endif
|
||||
continue;
|
||||
@ -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 ((status.batch || !execute_commands) && !status.exit_status)
|
||||
if (!interactive && !status.exit_status)
|
||||
{
|
||||
remove_cntrl(glob_buffer);
|
||||
if (!glob_buffer.is_empty())
|
||||
@ -2777,7 +2777,7 @@ static int com_source(String *buffer, char *line)
|
||||
status.line_buff=line_buff;
|
||||
status.file_name=source_name;
|
||||
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
|
||||
my_fclose(sql_file,MYF(0));
|
||||
batch_readline_end(line_buff);
|
||||
|
Reference in New Issue
Block a user