mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Review of code pushed since last 5.0 pull:
Ensure that ccache is also used for C programs mysql: Ensure that 'delimiter' works the same way in batch mode as in normal mode mysqldump: Change to use ;; (instead of //) as a stored procedure/trigger delimiter Fixed test cases by adding missing DROP's and rename views to be of type 'v#' Removed MY_UNIX_PATH from fn_format() Removed current_db_used from TABLE_LIST Removed usage of 'current_thd' in Item_splocal Removed some compiler warnings A bit faster longlong2str code BUILD/FINISH.sh: Ensure that ccache is also used for C programs BUILD/SETUP.sh: Ensure that ccache is also used for C programs client/mysql.cc: More debugging Ensure that 'delimiter' works the same way in batch mode as in normal mode. Compare 'delimiter' command case-insensitive. The above fixes the delimiter bugs so that we can now use ;; as a trigger/SP function delimiter in mysqldump. client/mysqldump.c: Indentation fixes Use ;; as a delmimiter for stored procedures and triggers instead of // client/mysqltest.c: Indentation fixes include/my_sys.h: Remove not needed MY_UNIX_PATH parameter mysql-test/r/alter_table.result: Better to reuse mysqltest database (test didn't properly delete mysqltest1 at start) mysql-test/r/func_str.result: More testing of CONV() (to ensure that longlong2str() works correctly) mysql-test/r/information_schema.result: Drop all used tables and views Rename view tables to 'v#' to ensure that if this test fails, not a lot of other test fails mysql-test/r/information_schema_inno.result: Drop all used tables mysql-test/r/multi_statement.result: Drop used tables mysql-test/r/mysql.result: Add error messages to result mysql-test/r/mysqldump.result: ;; is now used as SP/trigger delimiter mysql-test/r/mysqlshow.result: Drop used tables mysql-test/r/temp_table.result: Drop used views Rename views to v# mysql-test/t/alter_table.test: Better to reuse mysqltest database (test didn't properly delete mysqltest1 at start) mysql-test/t/func_str.test: More testing of CONV() (to ensure that longlong2str() works correctly) mysql-test/t/information_schema.test: Drop all used tables and views Rename view tables to 'v#' to ensure that if this test fails, not a lot of other test fails mysql-test/t/information_schema_inno.test: Drop all used tables mysql-test/t/multi_statement.test: Drop used tables mysql-test/t/mysql.test: Add error messages to result mysql-test/t/mysqlshow.test: Drop used tables mysql-test/t/temp_table.test: Drop used views Rename views to v# mysys/mf_format.c: Remove not needed MY_UNIX_PATH parameter (This goes against how fn_format() is supposed to work and also conflicts with other options like MY_RETURN_REAL_PATH) sql/ha_federated.cc: Removed extra empty line sql/item.cc: Use 'str_value' instead of 'str_value_ptr' to hold result for Item_splocal Remove some calls to 'thd' in Item_splocal by making 'thd' a class variable One doesn't have to set 'null_value' when calling 'is_null()' sql/item.h: Add THD as a class variable to Item_splocal Use 'str_value' instead of 'str_value_ptr' to hold temp result Fixed bug in Item_hex when used in CAST() sql/item_func.cc: Optimize new code sql/log_event.cc: Move 'to_unix_path()' out of fn_format() sql/opt_range.cc: Simplify code sql/sp_head.cc: Ensure that Item_splocal has thd set before we call '->this_item()' sql/sql_class.cc: Return error if Statement::insert() fails in either hash_insert() sql/sql_parse.cc: Remove 'current_db_used' as we can trivially check if db table qualifier was used without this. Simplify code sql/sql_prepare.cc: Use enum instead of const int, to avoid ugly code for VC++ sql/structs.h: Remove compiler warnings when using STRING_WITH_LEN() with constant strings. sql/table.cc: Fixed indentation sql/table.h: Remove not needed current_db_used strings/decimal.c: Simplify code strings/longlong2str-x86.s: A bit faster longlong2str. (Took some ideas from Peter Gulutzan's code) strings/my_strtoll10.c: Simplify code for MetroWerks compiler
This commit is contained in:
@ -320,7 +320,7 @@ static void initialize_readline (char *name);
|
||||
static void fix_history(String *final_command);
|
||||
#endif
|
||||
|
||||
static COMMANDS *find_command (char *name,char cmd_name);
|
||||
static COMMANDS *find_command(char *name,char cmd_name);
|
||||
static bool add_line(String &buffer,char *line,char *in_string,
|
||||
bool *ml_comment);
|
||||
static void remove_cntrl(String &buffer);
|
||||
@ -1085,10 +1085,12 @@ static int read_and_execute(bool interactive)
|
||||
}
|
||||
|
||||
|
||||
static COMMANDS *find_command (char *name,char cmd_char)
|
||||
static COMMANDS *find_command(char *name,char cmd_char)
|
||||
{
|
||||
uint len;
|
||||
char *end;
|
||||
DBUG_ENTER("find_command");
|
||||
DBUG_PRINT("enter",("name: '%s' char: %d", name ? name : "NULL", cmd_char));
|
||||
|
||||
if (!name)
|
||||
{
|
||||
@ -1100,12 +1102,16 @@ static COMMANDS *find_command (char *name,char cmd_char)
|
||||
while (my_isspace(charset_info,*name))
|
||||
name++;
|
||||
/*
|
||||
As special case we allow row that starts with word delimiter
|
||||
to be able to change delimiter if someone has delimiter 'delimiter'.
|
||||
If there is an \\g in the row or if the row has a delimiter but
|
||||
this is not a delimiter command, let add_line() take care of
|
||||
parsing the row and calling find_command()
|
||||
*/
|
||||
if (strstr(name, "\\g") || (strstr(name, delimiter) &&
|
||||
strncmp(name, "delimiter", 9)))
|
||||
return ((COMMANDS *) 0);
|
||||
strlen(name) >= 9 &&
|
||||
my_strnncoll(charset_info,(uchar*) name,
|
||||
9,
|
||||
(const uchar*) "delimiter", 9)))
|
||||
DBUG_RETURN((COMMANDS *) 0);
|
||||
if ((end=strcont(name," \t")))
|
||||
{
|
||||
len=(uint) (end - name);
|
||||
@ -1121,15 +1127,18 @@ static COMMANDS *find_command (char *name,char cmd_char)
|
||||
for (uint i= 0; commands[i].name; i++)
|
||||
{
|
||||
if (commands[i].func &&
|
||||
((name &&
|
||||
((name &&
|
||||
!my_strnncoll(charset_info,(uchar*)name,len,
|
||||
(uchar*)commands[i].name,len) &&
|
||||
!commands[i].name[len] &&
|
||||
(!end || (end && commands[i].takes_params))) ||
|
||||
!name && commands[i].cmd_char == cmd_char))
|
||||
return (&commands[i]);
|
||||
{
|
||||
DBUG_PRINT("exit",("found command: %s", commands[i].name));
|
||||
DBUG_RETURN(&commands[i]);
|
||||
}
|
||||
}
|
||||
return ((COMMANDS *) 0);
|
||||
DBUG_RETURN((COMMANDS *) 0);
|
||||
}
|
||||
|
||||
|
||||
@ -1140,15 +1149,16 @@ static bool add_line(String &buffer,char *line,char *in_string,
|
||||
char buff[80], *pos, *out;
|
||||
COMMANDS *com;
|
||||
bool need_space= 0;
|
||||
DBUG_ENTER("add_line");
|
||||
|
||||
if (!line[0] && buffer.is_empty())
|
||||
return 0;
|
||||
DBUG_RETURN(0);
|
||||
#ifdef HAVE_READLINE
|
||||
if (status.add_to_history && line[0] && not_in_history(line))
|
||||
add_history(line);
|
||||
#endif
|
||||
#ifdef USE_MB
|
||||
char *strend=line+(uint) strlen(line);
|
||||
char *end_of_line=line+(uint) strlen(line);
|
||||
#endif
|
||||
|
||||
for (pos=out=line ; (inchar= (uchar) *pos) ; pos++)
|
||||
@ -1157,13 +1167,14 @@ static bool add_line(String &buffer,char *line,char *in_string,
|
||||
buffer.is_empty())
|
||||
continue;
|
||||
#ifdef USE_MB
|
||||
int l;
|
||||
int length;
|
||||
if (use_mb(charset_info) &&
|
||||
(l = my_ismbchar(charset_info, pos, strend))) {
|
||||
while (l--)
|
||||
*out++ = *pos++;
|
||||
pos--;
|
||||
continue;
|
||||
(length= my_ismbchar(charset_info, pos, end_of_line)))
|
||||
{
|
||||
while (length--)
|
||||
*out++ = *pos++;
|
||||
pos--;
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
if (!*ml_comment && inchar == '\\')
|
||||
@ -1183,7 +1194,7 @@ static bool add_line(String &buffer,char *line,char *in_string,
|
||||
const String tmp(line,(uint) (out-line), charset_info);
|
||||
buffer.append(tmp);
|
||||
if ((*com->func)(&buffer,pos-1) > 0)
|
||||
return 1; // Quit
|
||||
DBUG_RETURN(1); // Quit
|
||||
if (com->takes_params)
|
||||
{
|
||||
for (pos++ ;
|
||||
@ -1201,29 +1212,40 @@ static bool add_line(String &buffer,char *line,char *in_string,
|
||||
{
|
||||
sprintf(buff,"Unknown command '\\%c'.",inchar);
|
||||
if (put_info(buff,INFO_ERROR) > 0)
|
||||
return 1;
|
||||
DBUG_RETURN(1);
|
||||
*out++='\\';
|
||||
*out++=(char) inchar;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
else if (!*ml_comment && (*pos == *delimiter &&
|
||||
is_prefix(pos + 1, delimiter + 1)) &&
|
||||
!*in_string)
|
||||
else if (!*ml_comment && !*in_string &&
|
||||
(*pos == *delimiter && is_prefix(pos + 1, delimiter + 1) ||
|
||||
buffer.length() == 0 && (out - line) >= 9 &&
|
||||
!my_strcasecmp(charset_info, line, "delimiter")))
|
||||
{
|
||||
uint old_delimiter_length= delimiter_length;
|
||||
if (out != line)
|
||||
buffer.append(line, (uint) (out - line)); // Add this line
|
||||
if ((com= find_command(buffer.c_ptr(), 0)))
|
||||
{
|
||||
if (com->func == com_delimiter)
|
||||
{
|
||||
/*
|
||||
Delimiter wants the get rest of the given line as argument to
|
||||
allow one to change ';' to ';;' and back
|
||||
*/
|
||||
char *end= strend(pos);
|
||||
buffer.append(pos, (uint) (end - pos));
|
||||
/* Ensure pos will point at \0 after the pos+= below */
|
||||
pos= end - old_delimiter_length + 1;
|
||||
}
|
||||
if ((*com->func)(&buffer, buffer.c_ptr()) > 0)
|
||||
return 1; // Quit
|
||||
DBUG_RETURN(1); // Quit
|
||||
}
|
||||
else
|
||||
{
|
||||
if (com_go(&buffer, 0) > 0) // < 0 is not fatal
|
||||
return 1;
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
buffer.length(0);
|
||||
out= line;
|
||||
@ -1275,9 +1297,9 @@ static bool add_line(String &buffer,char *line,char *in_string,
|
||||
if (buffer.length() + length >= buffer.alloced_length())
|
||||
buffer.realloc(buffer.length()+length+IO_SIZE);
|
||||
if (!(*ml_comment) && buffer.append(line,length))
|
||||
return 1;
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
return 0;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
|
Reference in New Issue
Block a user