mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +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:
@ -1188,23 +1188,25 @@ static void print_xml_row(FILE *xml_file, const char *row_name,
|
||||
This function has logic to print the appropriate syntax depending on whether
|
||||
this is a procedure or functions
|
||||
|
||||
RETURN 0 succes, 1 if error
|
||||
RETURN
|
||||
0 Success
|
||||
1 Error
|
||||
*/
|
||||
|
||||
static uint dump_routines_for_db (char *db)
|
||||
static uint dump_routines_for_db(char *db)
|
||||
{
|
||||
char query_buff[512];
|
||||
const char *routine_type[]={"FUNCTION", "PROCEDURE"};
|
||||
char db_name_buff[NAME_LEN*2+3], name_buff[NAME_LEN*2+3], *routine_name;
|
||||
const char *routine_type[]= {"FUNCTION", "PROCEDURE"};
|
||||
char db_name_buff[NAME_LEN*2+3], name_buff[NAME_LEN*2+3];
|
||||
char *routine_name;
|
||||
int i;
|
||||
FILE *sql_file = md_result_file;
|
||||
FILE *sql_file= md_result_file;
|
||||
MYSQL_RES *routine_res, *routine_list_res;
|
||||
MYSQL_ROW row, routine_list_row;
|
||||
|
||||
DBUG_ENTER("dump_routines_for_db");
|
||||
DBUG_PRINT("enter", ("db: '%s'", db));
|
||||
|
||||
mysql_real_escape_string(sock, db_name_buff, db, strlen(db));
|
||||
DBUG_PRINT("enter", ("db: '%s'", db_name_buff));
|
||||
|
||||
/* nice comments */
|
||||
if (opt_comments)
|
||||
@ -1217,10 +1219,10 @@ static uint dump_routines_for_db (char *db)
|
||||
if (lock_tables)
|
||||
mysql_query(sock, "LOCK TABLES mysql.proc READ");
|
||||
|
||||
fprintf(sql_file, "DELIMITER //\n");
|
||||
fprintf(sql_file, "DELIMITER ;;\n");
|
||||
|
||||
/* 0, retrieve and dump functions, 1, procedures */
|
||||
for (i=0; i <= 1; i++)
|
||||
for (i= 0; i <= 1; i++)
|
||||
{
|
||||
my_snprintf(query_buff, sizeof(query_buff),
|
||||
"SHOW %s STATUS WHERE Db = '%s'",
|
||||
@ -1232,18 +1234,18 @@ static uint dump_routines_for_db (char *db)
|
||||
if (mysql_num_rows(routine_list_res))
|
||||
{
|
||||
|
||||
while((routine_list_row= mysql_fetch_row(routine_list_res)))
|
||||
while ((routine_list_row= mysql_fetch_row(routine_list_res)))
|
||||
{
|
||||
DBUG_PRINT("info", ("retrieving CREATE %s for %s", routine_type[i],
|
||||
name_buff));
|
||||
routine_name=quote_name(routine_list_row[1], name_buff, 0);
|
||||
routine_name= quote_name(routine_list_row[1], name_buff, 0);
|
||||
my_snprintf(query_buff, sizeof(query_buff), "SHOW CREATE %s %s",
|
||||
routine_type[i], routine_name);
|
||||
|
||||
if (mysql_query_with_error_report(sock, &routine_res, query_buff))
|
||||
DBUG_RETURN(1);
|
||||
|
||||
while ((row=mysql_fetch_row(routine_res)))
|
||||
while ((row= mysql_fetch_row(routine_res)))
|
||||
{
|
||||
/*
|
||||
if the user has EXECUTE privilege he see routine names, but NOT the
|
||||
@ -1254,16 +1256,18 @@ static uint dump_routines_for_db (char *db)
|
||||
if (strlen(row[2]))
|
||||
{
|
||||
if (opt_drop)
|
||||
fprintf(sql_file, "/*!50003 DROP %s IF EXISTS %s */ //\n",
|
||||
fprintf(sql_file, "/*!50003 DROP %s IF EXISTS %s */;;\n",
|
||||
routine_type[i], routine_name);
|
||||
/*
|
||||
we need to change sql_mode only for the CREATE PROCEDURE/FUNCTION
|
||||
otherwise we may need to re-quote routine_name
|
||||
we need to change sql_mode only for the CREATE
|
||||
PROCEDURE/FUNCTION otherwise we may need to re-quote routine_name
|
||||
*/;
|
||||
fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\"*/ //\n",
|
||||
fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\"*/;;\n",
|
||||
row[1] /* sql_mode */);
|
||||
fprintf(sql_file, "/*!50003 %s */ //\n", row[2]);
|
||||
fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE*/ //\n");
|
||||
fprintf(sql_file, "/*!50003 %s */;;\n", row[2]);
|
||||
fprintf(sql_file,
|
||||
"/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE*/"
|
||||
";;\n");
|
||||
}
|
||||
} /* end of routine printing */
|
||||
} /* end of list of routines */
|
||||
@ -1741,7 +1745,6 @@ static void dump_triggers_for_table (char *table, char *db)
|
||||
char name_buff[NAME_LEN*4+3], table_buff[NAME_LEN*2+3];
|
||||
char query_buff[512];
|
||||
FILE *sql_file = md_result_file;
|
||||
|
||||
DBUG_ENTER("dump_triggers_for_table");
|
||||
DBUG_PRINT("enter", ("db: %s, table: %s", db, table));
|
||||
result_table= quote_name(table, table_buff, 1);
|
||||
@ -1759,11 +1762,11 @@ static void dump_triggers_for_table (char *table, char *db)
|
||||
}
|
||||
if (mysql_num_rows(result))
|
||||
fprintf(sql_file, "\n/*!50003 SET @OLD_SQL_MODE=@@SQL_MODE*/;\n\
|
||||
DELIMITER //;\n");
|
||||
DELIMITER ;;\n");
|
||||
while ((row=mysql_fetch_row(result)))
|
||||
{
|
||||
fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\" */ //\n\
|
||||
/*!50003 CREATE TRIGGER %s %s %s ON %s FOR EACH ROW%s */ //\n\n",
|
||||
fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\" */;;\n\
|
||||
/*!50003 CREATE TRIGGER %s %s %s ON %s FOR EACH ROW%s */;;\n\n",
|
||||
row[6], /* sql_mode */
|
||||
quote_name(row[0], name_buff, 0), /* Trigger */
|
||||
row[4], /* Timing */
|
||||
@ -1773,8 +1776,8 @@ DELIMITER //;\n");
|
||||
}
|
||||
if (mysql_num_rows(result))
|
||||
fprintf(sql_file,
|
||||
"DELIMITER ;//\n\
|
||||
/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */;");
|
||||
"DELIMITER ;\n"
|
||||
"/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */;\n");
|
||||
mysql_free_result(result);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
@ -1800,10 +1803,10 @@ static char *add_load_option(char *ptr,const char *object,
|
||||
|
||||
|
||||
/*
|
||||
** Allow the user to specify field terminator strings like:
|
||||
** "'", "\", "\\" (escaped backslash), "\t" (tab), "\n" (newline)
|
||||
** This is done by doubleing ' and add a end -\ if needed to avoid
|
||||
** syntax errors from the SQL parser.
|
||||
Allow the user to specify field terminator strings like:
|
||||
"'", "\", "\\" (escaped backslash), "\t" (tab), "\n" (newline)
|
||||
This is done by doubling ' and add a end -\ if needed to avoid
|
||||
syntax errors from the SQL parser.
|
||||
*/
|
||||
|
||||
static char *field_escape(char *to,const char *from,uint length)
|
||||
|
Reference in New Issue
Block a user