mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge neptunus.(none):/home/msvensson/mysql/my50-m-bug21215
into neptunus.(none):/home/msvensson/mysql/mysql-5.0 client/mysql.cc: Auto merged configure.in: Auto merged sql/item_func.cc: Auto merged sql/item_func.h: Auto merged sql/item_strfunc.cc: Auto merged sql/item_strfunc.h: Auto merged sql/item_subselect.cc: Auto merged sql/sql_class.h: Auto merged sql/sql_yacc.yy: Auto merged client/mysqldump.c: Manual merge mysql-test/r/mysqldump.result: Manual merge mysql-test/t/mysqldump.test: Manual merge
This commit is contained in:
@ -3725,6 +3725,9 @@ static const char* construct_prompt()
|
|||||||
case 't':
|
case 't':
|
||||||
processed_prompt.append('\t');
|
processed_prompt.append('\t');
|
||||||
break;
|
break;
|
||||||
|
case 'l':
|
||||||
|
processed_prompt.append(delimiter_str);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
processed_prompt.append(c);
|
processed_prompt.append(c);
|
||||||
}
|
}
|
||||||
|
@ -83,7 +83,8 @@ static ulong find_set(TYPELIB *lib, const char *x, uint length,
|
|||||||
static char *alloc_query_str(ulong size);
|
static char *alloc_query_str(ulong size);
|
||||||
|
|
||||||
static char *field_escape(char *to,const char *from,uint length);
|
static char *field_escape(char *to,const char *from,uint length);
|
||||||
static my_bool verbose=0,tFlag=0,dFlag=0,quick= 1, extended_insert= 1,
|
static my_bool verbose= 0, opt_no_create_info= 0, opt_no_data= 0,
|
||||||
|
quick= 1, extended_insert= 1,
|
||||||
lock_tables=1,ignore_errors=0,flush_logs=0,
|
lock_tables=1,ignore_errors=0,flush_logs=0,
|
||||||
opt_drop=1,opt_keywords=0,opt_lock=1,opt_compress=0,
|
opt_drop=1,opt_keywords=0,opt_lock=1,opt_compress=0,
|
||||||
opt_delayed=0,create_options=1,opt_quoted=0,opt_databases=0,
|
opt_delayed=0,create_options=1,opt_quoted=0,opt_databases=0,
|
||||||
@ -96,7 +97,7 @@ static my_bool verbose=0,tFlag=0,dFlag=0,quick= 1, extended_insert= 1,
|
|||||||
opt_complete_insert= 0, opt_drop_database= 0,
|
opt_complete_insert= 0, opt_drop_database= 0,
|
||||||
opt_dump_triggers= 0, opt_routines=0, opt_tz_utc=1;
|
opt_dump_triggers= 0, opt_routines=0, opt_tz_utc=1;
|
||||||
static ulong opt_max_allowed_packet, opt_net_buffer_length;
|
static ulong opt_max_allowed_packet, opt_net_buffer_length;
|
||||||
static MYSQL mysql_connection,*sock=0;
|
static MYSQL mysql_connection,*mysql=0;
|
||||||
static my_bool insert_pat_inited=0;
|
static my_bool insert_pat_inited=0;
|
||||||
static DYNAMIC_STRING insert_pat;
|
static DYNAMIC_STRING insert_pat;
|
||||||
static char *opt_password=0,*current_user=0,
|
static char *opt_password=0,*current_user=0,
|
||||||
@ -312,9 +313,10 @@ static struct my_option my_long_options[] =
|
|||||||
(gptr*) &opt_create_db, (gptr*) &opt_create_db, 0, GET_BOOL, NO_ARG, 0, 0,
|
(gptr*) &opt_create_db, (gptr*) &opt_create_db, 0, GET_BOOL, NO_ARG, 0, 0,
|
||||||
0, 0, 0, 0},
|
0, 0, 0, 0},
|
||||||
{"no-create-info", 't', "Don't write table creation info.",
|
{"no-create-info", 't', "Don't write table creation info.",
|
||||||
(gptr*) &tFlag, (gptr*) &tFlag, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
(gptr*) &opt_no_create_info, (gptr*) &opt_no_create_info, 0, GET_BOOL,
|
||||||
{"no-data", 'd', "No row information.", (gptr*) &dFlag, (gptr*) &dFlag, 0,
|
NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
{"no-data", 'd', "No row information.", (gptr*) &opt_no_data,
|
||||||
|
(gptr*) &opt_no_data, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"no-set-names", 'N',
|
{"no-set-names", 'N',
|
||||||
"Deprecated. Use --skip-set-charset instead.",
|
"Deprecated. Use --skip-set-charset instead.",
|
||||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
@ -426,6 +428,30 @@ static my_bool dump_all_views_in_db(char *database);
|
|||||||
|
|
||||||
#include <help_start.h>
|
#include <help_start.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
Print the supplied message if in verbose mode
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
verbose_msg()
|
||||||
|
fmt format specifier
|
||||||
|
... variable number of parameters
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void verbose_msg(const char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
DBUG_ENTER("verbose_msg");
|
||||||
|
|
||||||
|
if (!verbose)
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
|
|
||||||
|
va_start(args, fmt);
|
||||||
|
vfprintf(stderr, fmt, args);
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
exit with message if ferror(file)
|
exit with message if ferror(file)
|
||||||
|
|
||||||
@ -844,9 +870,9 @@ static int mysql_query_with_error_report(MYSQL *mysql_con, MYSQL_RES **res,
|
|||||||
if (mysql_query(mysql_con, query) ||
|
if (mysql_query(mysql_con, query) ||
|
||||||
(res && !((*res)= mysql_store_result(mysql_con))))
|
(res && !((*res)= mysql_store_result(mysql_con))))
|
||||||
{
|
{
|
||||||
my_printf_error(0, "%s: Couldn't execute '%s': %s (%d)",
|
my_printf_error(0, "Couldn't execute '%s': %s (%d)", MYF(0),
|
||||||
MYF(0), my_progname, query,
|
query, mysql_error(mysql_con), mysql_errno(mysql_con));
|
||||||
mysql_error(mysql_con), mysql_errno(mysql_con));
|
safe_exit(EX_MYSQLERR);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -880,8 +906,8 @@ static void safe_exit(int error)
|
|||||||
first_error= error;
|
first_error= error;
|
||||||
if (ignore_errors)
|
if (ignore_errors)
|
||||||
return;
|
return;
|
||||||
if (sock)
|
if (mysql)
|
||||||
mysql_close(sock);
|
mysql_close(mysql);
|
||||||
exit(error);
|
exit(error);
|
||||||
}
|
}
|
||||||
/* safe_exit */
|
/* safe_exit */
|
||||||
@ -894,10 +920,8 @@ static int dbConnect(char *host, char *user,char *passwd)
|
|||||||
{
|
{
|
||||||
char buff[20+FN_REFLEN];
|
char buff[20+FN_REFLEN];
|
||||||
DBUG_ENTER("dbConnect");
|
DBUG_ENTER("dbConnect");
|
||||||
if (verbose)
|
|
||||||
{
|
verbose_msg("-- Connecting to %s...\n", host ? host : "localhost");
|
||||||
fprintf(stderr, "-- Connecting to %s...\n", host ? host : "localhost");
|
|
||||||
}
|
|
||||||
mysql_init(&mysql_connection);
|
mysql_init(&mysql_connection);
|
||||||
if (opt_compress)
|
if (opt_compress)
|
||||||
mysql_options(&mysql_connection,MYSQL_OPT_COMPRESS,NullS);
|
mysql_options(&mysql_connection,MYSQL_OPT_COMPRESS,NullS);
|
||||||
@ -915,7 +939,7 @@ static int dbConnect(char *host, char *user,char *passwd)
|
|||||||
mysql_options(&mysql_connection,MYSQL_SHARED_MEMORY_BASE_NAME,shared_memory_base_name);
|
mysql_options(&mysql_connection,MYSQL_SHARED_MEMORY_BASE_NAME,shared_memory_base_name);
|
||||||
#endif
|
#endif
|
||||||
mysql_options(&mysql_connection, MYSQL_SET_CHARSET_NAME, default_charset);
|
mysql_options(&mysql_connection, MYSQL_SET_CHARSET_NAME, default_charset);
|
||||||
if (!(sock= mysql_real_connect(&mysql_connection,host,user,passwd,
|
if (!(mysql= mysql_real_connect(&mysql_connection,host,user,passwd,
|
||||||
NULL,opt_mysql_port,opt_mysql_unix_port,
|
NULL,opt_mysql_port,opt_mysql_unix_port,
|
||||||
0)))
|
0)))
|
||||||
{
|
{
|
||||||
@ -931,12 +955,11 @@ static int dbConnect(char *host, char *user,char *passwd)
|
|||||||
As we're going to set SQL_MODE, it would be lost on reconnect, so we
|
As we're going to set SQL_MODE, it would be lost on reconnect, so we
|
||||||
cannot reconnect.
|
cannot reconnect.
|
||||||
*/
|
*/
|
||||||
sock->reconnect= 0;
|
mysql->reconnect= 0;
|
||||||
my_snprintf(buff, sizeof(buff), "/*!40100 SET @@SQL_MODE='%s' */",
|
my_snprintf(buff, sizeof(buff), "/*!40100 SET @@SQL_MODE='%s' */",
|
||||||
compatible_mode_normal_str);
|
compatible_mode_normal_str);
|
||||||
if (mysql_query_with_error_report(sock, 0, buff))
|
if (mysql_query_with_error_report(mysql, 0, buff))
|
||||||
{
|
{
|
||||||
mysql_close(sock);
|
|
||||||
safe_exit(EX_MYSQLERR);
|
safe_exit(EX_MYSQLERR);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -947,9 +970,8 @@ static int dbConnect(char *host, char *user,char *passwd)
|
|||||||
if (opt_tz_utc)
|
if (opt_tz_utc)
|
||||||
{
|
{
|
||||||
my_snprintf(buff, sizeof(buff), "/*!40103 SET TIME_ZONE='+00:00' */");
|
my_snprintf(buff, sizeof(buff), "/*!40103 SET TIME_ZONE='+00:00' */");
|
||||||
if (mysql_query_with_error_report(sock, 0, buff))
|
if (mysql_query_with_error_report(mysql, 0, buff))
|
||||||
{
|
{
|
||||||
mysql_close(sock);
|
|
||||||
safe_exit(EX_MYSQLERR);
|
safe_exit(EX_MYSQLERR);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -963,9 +985,8 @@ static int dbConnect(char *host, char *user,char *passwd)
|
|||||||
*/
|
*/
|
||||||
static void dbDisconnect(char *host)
|
static void dbDisconnect(char *host)
|
||||||
{
|
{
|
||||||
if (verbose)
|
verbose_msg("-- Disconnecting from %s...\n", host ? host : "localhost");
|
||||||
fprintf(stderr, "-- Disconnecting from %s...\n", host ? host : "localhost");
|
mysql_close(mysql);
|
||||||
mysql_close(sock);
|
|
||||||
} /* dbDisconnect */
|
} /* dbDisconnect */
|
||||||
|
|
||||||
|
|
||||||
@ -1258,7 +1279,7 @@ static uint dump_routines_for_db(char *db)
|
|||||||
DBUG_ENTER("dump_routines_for_db");
|
DBUG_ENTER("dump_routines_for_db");
|
||||||
DBUG_PRINT("enter", ("db: '%s'", db));
|
DBUG_PRINT("enter", ("db: '%s'", db));
|
||||||
|
|
||||||
mysql_real_escape_string(sock, db_name_buff, db, strlen(db));
|
mysql_real_escape_string(mysql, db_name_buff, db, strlen(db));
|
||||||
|
|
||||||
/* nice comments */
|
/* nice comments */
|
||||||
if (opt_comments)
|
if (opt_comments)
|
||||||
@ -1269,7 +1290,7 @@ static uint dump_routines_for_db(char *db)
|
|||||||
enough privileges to lock mysql.proc.
|
enough privileges to lock mysql.proc.
|
||||||
*/
|
*/
|
||||||
if (lock_tables)
|
if (lock_tables)
|
||||||
mysql_query(sock, "LOCK TABLES mysql.proc READ");
|
mysql_query(mysql, "LOCK TABLES mysql.proc READ");
|
||||||
|
|
||||||
fprintf(sql_file, "DELIMITER ;;\n");
|
fprintf(sql_file, "DELIMITER ;;\n");
|
||||||
|
|
||||||
@ -1280,7 +1301,7 @@ static uint dump_routines_for_db(char *db)
|
|||||||
"SHOW %s STATUS WHERE Db = '%s'",
|
"SHOW %s STATUS WHERE Db = '%s'",
|
||||||
routine_type[i], db_name_buff);
|
routine_type[i], db_name_buff);
|
||||||
|
|
||||||
if (mysql_query_with_error_report(sock, &routine_list_res, query_buff))
|
if (mysql_query_with_error_report(mysql, &routine_list_res, query_buff))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
|
|
||||||
if (mysql_num_rows(routine_list_res))
|
if (mysql_num_rows(routine_list_res))
|
||||||
@ -1294,7 +1315,7 @@ static uint dump_routines_for_db(char *db)
|
|||||||
my_snprintf(query_buff, sizeof(query_buff), "SHOW CREATE %s %s",
|
my_snprintf(query_buff, sizeof(query_buff), "SHOW CREATE %s %s",
|
||||||
routine_type[i], routine_name);
|
routine_type[i], routine_name);
|
||||||
|
|
||||||
if (mysql_query_with_error_report(sock, &routine_res, query_buff))
|
if (mysql_query_with_error_report(mysql, &routine_res, query_buff))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
|
|
||||||
while ((row= mysql_fetch_row(routine_res)))
|
while ((row= mysql_fetch_row(routine_res)))
|
||||||
@ -1376,7 +1397,7 @@ static uint dump_routines_for_db(char *db)
|
|||||||
fprintf(sql_file, "DELIMITER ;\n");
|
fprintf(sql_file, "DELIMITER ;\n");
|
||||||
|
|
||||||
if (lock_tables)
|
if (lock_tables)
|
||||||
VOID(mysql_query_with_error_report(sock, 0, "UNLOCK TABLES"));
|
VOID(mysql_query_with_error_report(mysql, 0, "UNLOCK TABLES"));
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1418,10 +1439,8 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
if (delayed && (*ignore_flag & IGNORE_INSERT_DELAYED))
|
if (delayed && (*ignore_flag & IGNORE_INSERT_DELAYED))
|
||||||
{
|
{
|
||||||
delayed= 0;
|
delayed= 0;
|
||||||
if (verbose)
|
verbose_msg("-- Warning: Unable to use delayed inserts for table '%s' "
|
||||||
fprintf(stderr,
|
"because it's of type %s\n", table, table_type);
|
||||||
"-- Warning: Unable to use delayed inserts for table '%s' "
|
|
||||||
"because it's of type %s\n", table, table_type);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
complete_insert= 0;
|
complete_insert= 0;
|
||||||
@ -1437,8 +1456,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
insert_option= ((delayed && opt_ignore) ? " DELAYED IGNORE " :
|
insert_option= ((delayed && opt_ignore) ? " DELAYED IGNORE " :
|
||||||
delayed ? " DELAYED " : opt_ignore ? " IGNORE " : "");
|
delayed ? " DELAYED " : opt_ignore ? " IGNORE " : "");
|
||||||
|
|
||||||
if (verbose)
|
verbose_msg("-- Retrieving table structure for table %s...\n", table);
|
||||||
fprintf(stderr, "-- Retrieving table structure for table %s...\n", table);
|
|
||||||
|
|
||||||
len= my_snprintf(query_buff, sizeof(query_buff),
|
len= my_snprintf(query_buff, sizeof(query_buff),
|
||||||
"SET OPTION SQL_QUOTE_SHOW_CREATE=%d",
|
"SET OPTION SQL_QUOTE_SHOW_CREATE=%d",
|
||||||
@ -1453,17 +1471,17 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
if (opt_order_by_primary)
|
if (opt_order_by_primary)
|
||||||
order_by = primary_key_fields(result_table);
|
order_by = primary_key_fields(result_table);
|
||||||
|
|
||||||
if (!opt_xml && !mysql_query_with_error_report(sock, 0, query_buff))
|
if (!opt_xml && !mysql_query_with_error_report(mysql, 0, query_buff))
|
||||||
{
|
{
|
||||||
/* using SHOW CREATE statement */
|
/* using SHOW CREATE statement */
|
||||||
if (!tFlag)
|
if (!opt_no_create_info)
|
||||||
{
|
{
|
||||||
/* Make an sql-file, if path was given iow. option -T was given */
|
/* Make an sql-file, if path was given iow. option -T was given */
|
||||||
char buff[20+FN_REFLEN];
|
char buff[20+FN_REFLEN];
|
||||||
MYSQL_FIELD *field;
|
MYSQL_FIELD *field;
|
||||||
|
|
||||||
my_snprintf(buff, sizeof(buff), "show create table %s", result_table);
|
my_snprintf(buff, sizeof(buff), "show create table %s", result_table);
|
||||||
if (mysql_query_with_error_report(sock, 0, buff))
|
if (mysql_query_with_error_report(mysql, 0, buff))
|
||||||
{
|
{
|
||||||
safe_exit(EX_MYSQLERR);
|
safe_exit(EX_MYSQLERR);
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
@ -1499,14 +1517,13 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
check_io(sql_file);
|
check_io(sql_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
result= mysql_store_result(sock);
|
result= mysql_store_result(mysql);
|
||||||
field= mysql_fetch_field_direct(result, 0);
|
field= mysql_fetch_field_direct(result, 0);
|
||||||
if (strcmp(field->name, "View") == 0)
|
if (strcmp(field->name, "View") == 0)
|
||||||
{
|
{
|
||||||
char *scv_buff = NULL;
|
char *scv_buff = NULL;
|
||||||
|
|
||||||
if (verbose)
|
verbose_msg("-- It's a view, create dummy table for view\n");
|
||||||
fprintf(stderr, "-- It's a view, create dummy table for view\n");
|
|
||||||
|
|
||||||
/* save "show create" statement for later */
|
/* save "show create" statement for later */
|
||||||
if ((row= mysql_fetch_row(result)) && (scv_buff=row[1]))
|
if ((row= mysql_fetch_row(result)) && (scv_buff=row[1]))
|
||||||
@ -1527,7 +1544,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
*/
|
*/
|
||||||
my_snprintf(query_buff, sizeof(query_buff),
|
my_snprintf(query_buff, sizeof(query_buff),
|
||||||
"SHOW FIELDS FROM %s", result_table);
|
"SHOW FIELDS FROM %s", result_table);
|
||||||
if (mysql_query_with_error_report(sock, 0, query_buff))
|
if (mysql_query_with_error_report(mysql, 0, query_buff))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
View references invalid or privileged table/col/fun (err 1356),
|
View references invalid or privileged table/col/fun (err 1356),
|
||||||
@ -1535,7 +1552,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
a comment with the view's 'show create' statement. (Bug #17371)
|
a comment with the view's 'show create' statement. (Bug #17371)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (mysql_errno(sock) == ER_VIEW_INVALID)
|
if (mysql_errno(mysql) == ER_VIEW_INVALID)
|
||||||
fprintf(sql_file, "\n-- failed on view %s: %s\n\n", result_table, scv_buff ? scv_buff : "");
|
fprintf(sql_file, "\n-- failed on view %s: %s\n\n", result_table, scv_buff ? scv_buff : "");
|
||||||
|
|
||||||
my_free(scv_buff, MYF(MY_ALLOW_ZERO_PTR));
|
my_free(scv_buff, MYF(MY_ALLOW_ZERO_PTR));
|
||||||
@ -1546,7 +1563,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
else
|
else
|
||||||
my_free(scv_buff, MYF(MY_ALLOW_ZERO_PTR));
|
my_free(scv_buff, MYF(MY_ALLOW_ZERO_PTR));
|
||||||
|
|
||||||
if ((result= mysql_store_result(sock)))
|
if ((result= mysql_store_result(mysql)))
|
||||||
{
|
{
|
||||||
if (mysql_num_rows(result))
|
if (mysql_num_rows(result))
|
||||||
{
|
{
|
||||||
@ -1599,7 +1616,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
}
|
}
|
||||||
my_snprintf(query_buff, sizeof(query_buff), "show fields from %s",
|
my_snprintf(query_buff, sizeof(query_buff), "show fields from %s",
|
||||||
result_table);
|
result_table);
|
||||||
if (mysql_query_with_error_report(sock, &result, query_buff))
|
if (mysql_query_with_error_report(mysql, &result, query_buff))
|
||||||
{
|
{
|
||||||
if (path)
|
if (path)
|
||||||
my_fclose(sql_file, MYF(MY_WME));
|
my_fclose(sql_file, MYF(MY_WME));
|
||||||
@ -1649,21 +1666,19 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (verbose)
|
verbose_msg("%s: Warning: Can't set SQL_QUOTE_SHOW_CREATE option (%s)\n",
|
||||||
fprintf(stderr,
|
my_progname, mysql_error(mysql));
|
||||||
"%s: Warning: Can't set SQL_QUOTE_SHOW_CREATE option (%s)\n",
|
|
||||||
my_progname, mysql_error(sock));
|
|
||||||
|
|
||||||
my_snprintf(query_buff, sizeof(query_buff), "show fields from %s",
|
my_snprintf(query_buff, sizeof(query_buff), "show fields from %s",
|
||||||
result_table);
|
result_table);
|
||||||
if (mysql_query_with_error_report(sock, &result, query_buff))
|
if (mysql_query_with_error_report(mysql, &result, query_buff))
|
||||||
{
|
{
|
||||||
safe_exit(EX_MYSQLERR);
|
safe_exit(EX_MYSQLERR);
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make an sql-file, if path was given iow. option -T was given */
|
/* Make an sql-file, if path was given iow. option -T was given */
|
||||||
if (!tFlag)
|
if (!opt_no_create_info)
|
||||||
{
|
{
|
||||||
if (path)
|
if (path)
|
||||||
{
|
{
|
||||||
@ -1707,7 +1722,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
ulong *lengths= mysql_fetch_lengths(result);
|
ulong *lengths= mysql_fetch_lengths(result);
|
||||||
if (init)
|
if (init)
|
||||||
{
|
{
|
||||||
if (!opt_xml && !tFlag)
|
if (!opt_xml && !opt_no_create_info)
|
||||||
{
|
{
|
||||||
fputs(",\n",sql_file);
|
fputs(",\n",sql_file);
|
||||||
check_io(sql_file);
|
check_io(sql_file);
|
||||||
@ -1719,7 +1734,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
if (opt_complete_insert)
|
if (opt_complete_insert)
|
||||||
dynstr_append(&insert_pat,
|
dynstr_append(&insert_pat,
|
||||||
quote_name(row[SHOW_FIELDNAME], name_buff, 0));
|
quote_name(row[SHOW_FIELDNAME], name_buff, 0));
|
||||||
if (!tFlag)
|
if (!opt_no_create_info)
|
||||||
{
|
{
|
||||||
if (opt_xml)
|
if (opt_xml)
|
||||||
{
|
{
|
||||||
@ -1749,22 +1764,22 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
}
|
}
|
||||||
num_fields= mysql_num_rows(result);
|
num_fields= mysql_num_rows(result);
|
||||||
mysql_free_result(result);
|
mysql_free_result(result);
|
||||||
if (!tFlag)
|
if (!opt_no_create_info)
|
||||||
{
|
{
|
||||||
/* Make an sql-file, if path was given iow. option -T was given */
|
/* Make an sql-file, if path was given iow. option -T was given */
|
||||||
char buff[20+FN_REFLEN];
|
char buff[20+FN_REFLEN];
|
||||||
uint keynr,primary_key;
|
uint keynr,primary_key;
|
||||||
my_snprintf(buff, sizeof(buff), "show keys from %s", result_table);
|
my_snprintf(buff, sizeof(buff), "show keys from %s", result_table);
|
||||||
if (mysql_query_with_error_report(sock, &result, buff))
|
if (mysql_query_with_error_report(mysql, &result, buff))
|
||||||
{
|
{
|
||||||
if (mysql_errno(sock) == ER_WRONG_OBJECT)
|
if (mysql_errno(mysql) == ER_WRONG_OBJECT)
|
||||||
{
|
{
|
||||||
/* it is VIEW */
|
/* it is VIEW */
|
||||||
fputs("\t\t<options Comment=\"view\" />\n", sql_file);
|
fputs("\t\t<options Comment=\"view\" />\n", sql_file);
|
||||||
goto continue_xml;
|
goto continue_xml;
|
||||||
}
|
}
|
||||||
fprintf(stderr, "%s: Can't get keys for table %s (%s)\n",
|
fprintf(stderr, "%s: Can't get keys for table %s (%s)\n",
|
||||||
my_progname, result_table, mysql_error(sock));
|
my_progname, result_table, mysql_error(mysql));
|
||||||
if (path)
|
if (path)
|
||||||
my_fclose(sql_file, MYF(MY_WME));
|
my_fclose(sql_file, MYF(MY_WME));
|
||||||
safe_exit(EX_MYSQLERR);
|
safe_exit(EX_MYSQLERR);
|
||||||
@ -1837,21 +1852,19 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
my_snprintf(buff, sizeof(buff), "show table status like %s",
|
my_snprintf(buff, sizeof(buff), "show table status like %s",
|
||||||
quote_for_like(table, show_name_buff));
|
quote_for_like(table, show_name_buff));
|
||||||
|
|
||||||
if (mysql_query_with_error_report(sock, &result, buff))
|
if (mysql_query_with_error_report(mysql, &result, buff))
|
||||||
{
|
{
|
||||||
if (mysql_errno(sock) != ER_PARSE_ERROR)
|
if (mysql_errno(mysql) != ER_PARSE_ERROR)
|
||||||
{ /* If old MySQL version */
|
{ /* If old MySQL version */
|
||||||
if (verbose)
|
verbose_msg("-- Warning: Couldn't get status information for " \
|
||||||
fprintf(stderr,
|
"table %s (%s)\n", result_table,mysql_error(mysql));
|
||||||
"-- Warning: Couldn't get status information for table %s (%s)\n",
|
|
||||||
result_table,mysql_error(sock));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!(row= mysql_fetch_row(result)))
|
else if (!(row= mysql_fetch_row(result)))
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Error: Couldn't read status information for table %s (%s)\n",
|
"Error: Couldn't read status information for table %s (%s)\n",
|
||||||
result_table,mysql_error(sock));
|
result_table,mysql_error(mysql));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1924,7 +1937,7 @@ static void dump_triggers_for_table (char *table, char *db)
|
|||||||
"SHOW TRIGGERS LIKE %s",
|
"SHOW TRIGGERS LIKE %s",
|
||||||
quote_for_like(table, name_buff));
|
quote_for_like(table, name_buff));
|
||||||
|
|
||||||
if (mysql_query_with_error_report(sock, &result, query_buff))
|
if (mysql_query_with_error_report(mysql, &result, query_buff))
|
||||||
{
|
{
|
||||||
if (path)
|
if (path)
|
||||||
my_fclose(sql_file, MYF(MY_WME));
|
my_fclose(sql_file, MYF(MY_WME));
|
||||||
@ -2094,12 +2107,10 @@ static void dump_table(char *table, char *db)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* Check --no-data flag */
|
/* Check --no-data flag */
|
||||||
if (dFlag)
|
if (opt_no_data)
|
||||||
{
|
{
|
||||||
if (verbose)
|
verbose_msg("-- Skipping dump data for table '%s', --no-data was used\n",
|
||||||
fprintf(stderr,
|
table);
|
||||||
"-- Skipping dump data for table '%s', --no-data was used\n",
|
|
||||||
table);
|
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2112,27 +2123,22 @@ static void dump_table(char *table, char *db)
|
|||||||
*/
|
*/
|
||||||
if (ignore_flag & IGNORE_DATA)
|
if (ignore_flag & IGNORE_DATA)
|
||||||
{
|
{
|
||||||
if (verbose)
|
verbose_msg("-- Warning: Skipping data for table '%s' because " \
|
||||||
fprintf(stderr,
|
"it's of type %s\n", table, table_type);
|
||||||
"-- Warning: Skipping data for table '%s' because it's of type %s\n",
|
|
||||||
table, table_type);
|
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
/* Check that there are any fields in the table */
|
/* Check that there are any fields in the table */
|
||||||
if (num_fields == 0)
|
if (num_fields == 0)
|
||||||
{
|
{
|
||||||
if (verbose)
|
verbose_msg("-- Skipping dump data for table '%s', it has no fields\n",
|
||||||
fprintf(stderr,
|
table);
|
||||||
"-- Skipping dump data for table '%s', it has no fields\n",
|
|
||||||
table);
|
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
result_table= quote_name(table,table_buff, 1);
|
result_table= quote_name(table,table_buff, 1);
|
||||||
opt_quoted_table= quote_name(table, table_buff2, 0);
|
opt_quoted_table= quote_name(table, table_buff2, 0);
|
||||||
|
|
||||||
if (verbose)
|
verbose_msg("-- Sending SELECT query...\n");
|
||||||
fprintf(stderr, "-- Sending SELECT query...\n");
|
|
||||||
if (path)
|
if (path)
|
||||||
{
|
{
|
||||||
char filename[FN_REFLEN], tmp_path[FN_REFLEN];
|
char filename[FN_REFLEN], tmp_path[FN_REFLEN];
|
||||||
@ -2170,9 +2176,9 @@ static void dump_table(char *table, char *db)
|
|||||||
if (order_by)
|
if (order_by)
|
||||||
end = strxmov(end, " ORDER BY ", order_by, NullS);
|
end = strxmov(end, " ORDER BY ", order_by, NullS);
|
||||||
}
|
}
|
||||||
if (mysql_real_query(sock, query, (uint) (end - query)))
|
if (mysql_real_query(mysql, query, (uint) (end - query)))
|
||||||
{
|
{
|
||||||
DB_error(sock, "when executing 'SELECT INTO OUTFILE'");
|
DB_error(mysql, "when executing 'SELECT INTO OUTFILE'");
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2218,19 +2224,19 @@ static void dump_table(char *table, char *db)
|
|||||||
fputs("\n", md_result_file);
|
fputs("\n", md_result_file);
|
||||||
check_io(md_result_file);
|
check_io(md_result_file);
|
||||||
}
|
}
|
||||||
if (mysql_query_with_error_report(sock, 0, query))
|
if (mysql_query_with_error_report(mysql, 0, query))
|
||||||
DB_error(sock, "when retrieving data from server");
|
DB_error(mysql, "when retrieving data from server");
|
||||||
if (quick)
|
if (quick)
|
||||||
res=mysql_use_result(sock);
|
res=mysql_use_result(mysql);
|
||||||
else
|
else
|
||||||
res=mysql_store_result(sock);
|
res=mysql_store_result(mysql);
|
||||||
if (!res)
|
if (!res)
|
||||||
{
|
{
|
||||||
DB_error(sock, "when retrieving data from server");
|
DB_error(mysql, "when retrieving data from server");
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
if (verbose)
|
|
||||||
fprintf(stderr, "-- Retrieving rows...\n");
|
verbose_msg("-- Retrieving rows...\n");
|
||||||
if (mysql_num_fields(res) != num_fields)
|
if (mysql_num_fields(res) != num_fields)
|
||||||
{
|
{
|
||||||
fprintf(stderr,"%s: Error in field count for table: %s ! Aborting.\n",
|
fprintf(stderr,"%s: Error in field count for table: %s ! Aborting.\n",
|
||||||
@ -2499,13 +2505,13 @@ static void dump_table(char *table, char *db)
|
|||||||
fputs(";\n", md_result_file); /* If not empty table */
|
fputs(";\n", md_result_file); /* If not empty table */
|
||||||
fflush(md_result_file);
|
fflush(md_result_file);
|
||||||
check_io(md_result_file);
|
check_io(md_result_file);
|
||||||
if (mysql_errno(sock))
|
if (mysql_errno(mysql))
|
||||||
{
|
{
|
||||||
my_snprintf(query, QUERY_LENGTH,
|
my_snprintf(query, QUERY_LENGTH,
|
||||||
"%s: Error %d: %s when dumping table %s at row: %ld\n",
|
"%s: Error %d: %s when dumping table %s at row: %ld\n",
|
||||||
my_progname,
|
my_progname,
|
||||||
mysql_errno(sock),
|
mysql_errno(mysql),
|
||||||
mysql_error(sock),
|
mysql_error(mysql),
|
||||||
result_table,
|
result_table,
|
||||||
rownr);
|
rownr);
|
||||||
fputs(query,stderr);
|
fputs(query,stderr);
|
||||||
@ -2551,7 +2557,7 @@ static char *getTableName(int reset)
|
|||||||
|
|
||||||
if (!res)
|
if (!res)
|
||||||
{
|
{
|
||||||
if (!(res = mysql_list_tables(sock,NullS)))
|
if (!(res = mysql_list_tables(mysql,NullS)))
|
||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
if ((row = mysql_fetch_row(res)))
|
if ((row = mysql_fetch_row(res)))
|
||||||
@ -2574,7 +2580,7 @@ static int dump_all_databases()
|
|||||||
MYSQL_RES *tableres;
|
MYSQL_RES *tableres;
|
||||||
int result=0;
|
int result=0;
|
||||||
|
|
||||||
if (mysql_query_with_error_report(sock, &tableres, "SHOW DATABASES"))
|
if (mysql_query_with_error_report(mysql, &tableres, "SHOW DATABASES"))
|
||||||
return 1;
|
return 1;
|
||||||
while ((row = mysql_fetch_row(tableres)))
|
while ((row = mysql_fetch_row(tableres)))
|
||||||
{
|
{
|
||||||
@ -2583,11 +2589,11 @@ static int dump_all_databases()
|
|||||||
}
|
}
|
||||||
if (seen_views)
|
if (seen_views)
|
||||||
{
|
{
|
||||||
if (mysql_query(sock, "SHOW DATABASES") ||
|
if (mysql_query(mysql, "SHOW DATABASES") ||
|
||||||
!(tableres = mysql_store_result(sock)))
|
!(tableres = mysql_store_result(mysql)))
|
||||||
{
|
{
|
||||||
my_printf_error(0, "Error: Couldn't execute 'SHOW DATABASES': %s",
|
my_printf_error(0, "Error: Couldn't execute 'SHOW DATABASES': %s",
|
||||||
MYF(0), mysql_error(sock));
|
MYF(0), mysql_error(mysql));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
while ((row = mysql_fetch_row(tableres)))
|
while ((row = mysql_fetch_row(tableres)))
|
||||||
@ -2624,13 +2630,13 @@ static int dump_databases(char **db_names)
|
|||||||
|
|
||||||
static int init_dumping(char *database)
|
static int init_dumping(char *database)
|
||||||
{
|
{
|
||||||
if (mysql_get_server_version(sock) >= 50003 &&
|
if (mysql_get_server_version(mysql) >= 50003 &&
|
||||||
!my_strcasecmp(&my_charset_latin1, database, "information_schema"))
|
!my_strcasecmp(&my_charset_latin1, database, "information_schema"))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (mysql_select_db(sock, database))
|
if (mysql_select_db(mysql, database))
|
||||||
{
|
{
|
||||||
DB_error(sock, "when selecting the database");
|
DB_error(mysql, "when selecting the database");
|
||||||
return 1; /* If --force */
|
return 1; /* If --force */
|
||||||
}
|
}
|
||||||
if (!path && !opt_xml)
|
if (!path && !opt_xml)
|
||||||
@ -2657,7 +2663,7 @@ static int init_dumping(char *database)
|
|||||||
"SHOW CREATE DATABASE IF NOT EXISTS %s",
|
"SHOW CREATE DATABASE IF NOT EXISTS %s",
|
||||||
qdatabase);
|
qdatabase);
|
||||||
|
|
||||||
if (mysql_query(sock, qbuf) || !(dbinfo = mysql_store_result(sock)))
|
if (mysql_query(mysql, qbuf) || !(dbinfo = mysql_store_result(mysql)))
|
||||||
{
|
{
|
||||||
/* Old server version, dump generic CREATE DATABASE */
|
/* Old server version, dump generic CREATE DATABASE */
|
||||||
if (opt_drop_database)
|
if (opt_drop_database)
|
||||||
@ -2725,15 +2731,15 @@ static int dump_all_tables_in_db(char *database)
|
|||||||
dynstr_append(&query, quote_name(table, table_buff, 1));
|
dynstr_append(&query, quote_name(table, table_buff, 1));
|
||||||
dynstr_append(&query, " READ /*!32311 LOCAL */,");
|
dynstr_append(&query, " READ /*!32311 LOCAL */,");
|
||||||
}
|
}
|
||||||
if (numrows && mysql_real_query(sock, query.str, query.length-1))
|
if (numrows && mysql_real_query(mysql, query.str, query.length-1))
|
||||||
DB_error(sock, "when using LOCK TABLES");
|
DB_error(mysql, "when using LOCK TABLES");
|
||||||
/* We shall continue here, if --force was given */
|
/* We shall continue here, if --force was given */
|
||||||
dynstr_free(&query);
|
dynstr_free(&query);
|
||||||
}
|
}
|
||||||
if (flush_logs)
|
if (flush_logs)
|
||||||
{
|
{
|
||||||
if (mysql_refresh(sock, REFRESH_LOG))
|
if (mysql_refresh(mysql, REFRESH_LOG))
|
||||||
DB_error(sock, "when doing refresh");
|
DB_error(mysql, "when doing refresh");
|
||||||
/* We shall continue here, if --force was given */
|
/* We shall continue here, if --force was given */
|
||||||
}
|
}
|
||||||
while ((table= getTableName(0)))
|
while ((table= getTableName(0)))
|
||||||
@ -2745,12 +2751,12 @@ static int dump_all_tables_in_db(char *database)
|
|||||||
my_free(order_by, MYF(MY_ALLOW_ZERO_PTR));
|
my_free(order_by, MYF(MY_ALLOW_ZERO_PTR));
|
||||||
order_by= 0;
|
order_by= 0;
|
||||||
if (opt_dump_triggers && ! opt_xml &&
|
if (opt_dump_triggers && ! opt_xml &&
|
||||||
mysql_get_server_version(sock) >= 50009)
|
mysql_get_server_version(mysql) >= 50009)
|
||||||
dump_triggers_for_table(table, database);
|
dump_triggers_for_table(table, database);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (opt_routines && !opt_xml &&
|
if (opt_routines && !opt_xml &&
|
||||||
mysql_get_server_version(sock) >= 50009)
|
mysql_get_server_version(mysql) >= 50009)
|
||||||
{
|
{
|
||||||
DBUG_PRINT("info", ("Dumping routines for database %s", database));
|
DBUG_PRINT("info", ("Dumping routines for database %s", database));
|
||||||
dump_routines_for_db(database);
|
dump_routines_for_db(database);
|
||||||
@ -2761,7 +2767,7 @@ static int dump_all_tables_in_db(char *database)
|
|||||||
check_io(md_result_file);
|
check_io(md_result_file);
|
||||||
}
|
}
|
||||||
if (lock_tables)
|
if (lock_tables)
|
||||||
VOID(mysql_query_with_error_report(sock, 0, "UNLOCK TABLES"));
|
VOID(mysql_query_with_error_report(mysql, 0, "UNLOCK TABLES"));
|
||||||
return 0;
|
return 0;
|
||||||
} /* dump_all_tables_in_db */
|
} /* dump_all_tables_in_db */
|
||||||
|
|
||||||
@ -2784,9 +2790,9 @@ static my_bool dump_all_views_in_db(char *database)
|
|||||||
uint numrows;
|
uint numrows;
|
||||||
char table_buff[NAME_LEN*2+3];
|
char table_buff[NAME_LEN*2+3];
|
||||||
|
|
||||||
if (mysql_select_db(sock, database))
|
if (mysql_select_db(mysql, database))
|
||||||
{
|
{
|
||||||
DB_error(sock, "when selecting the database");
|
DB_error(mysql, "when selecting the database");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (opt_databases || opt_alldbs)
|
if (opt_databases || opt_alldbs)
|
||||||
@ -2812,15 +2818,15 @@ static my_bool dump_all_views_in_db(char *database)
|
|||||||
dynstr_append(&query, quote_name(table, table_buff, 1));
|
dynstr_append(&query, quote_name(table, table_buff, 1));
|
||||||
dynstr_append(&query, " READ /*!32311 LOCAL */,");
|
dynstr_append(&query, " READ /*!32311 LOCAL */,");
|
||||||
}
|
}
|
||||||
if (numrows && mysql_real_query(sock, query.str, query.length-1))
|
if (numrows && mysql_real_query(mysql, query.str, query.length-1))
|
||||||
DB_error(sock, "when using LOCK TABLES");
|
DB_error(mysql, "when using LOCK TABLES");
|
||||||
/* We shall continue here, if --force was given */
|
/* We shall continue here, if --force was given */
|
||||||
dynstr_free(&query);
|
dynstr_free(&query);
|
||||||
}
|
}
|
||||||
if (flush_logs)
|
if (flush_logs)
|
||||||
{
|
{
|
||||||
if (mysql_refresh(sock, REFRESH_LOG))
|
if (mysql_refresh(mysql, REFRESH_LOG))
|
||||||
DB_error(sock, "when doing refresh");
|
DB_error(mysql, "when doing refresh");
|
||||||
/* We shall continue here, if --force was given */
|
/* We shall continue here, if --force was given */
|
||||||
}
|
}
|
||||||
while ((table= getTableName(0)))
|
while ((table= getTableName(0)))
|
||||||
@ -2831,7 +2837,7 @@ static my_bool dump_all_views_in_db(char *database)
|
|||||||
check_io(md_result_file);
|
check_io(md_result_file);
|
||||||
}
|
}
|
||||||
if (lock_tables)
|
if (lock_tables)
|
||||||
VOID(mysql_query_with_error_report(sock, 0, "UNLOCK TABLES"));
|
VOID(mysql_query_with_error_report(mysql, 0, "UNLOCK TABLES"));
|
||||||
return 0;
|
return 0;
|
||||||
} /* dump_all_tables_in_db */
|
} /* dump_all_tables_in_db */
|
||||||
|
|
||||||
@ -2861,12 +2867,12 @@ static char *get_actual_table_name(const char *old_table_name, MEM_ROOT *root)
|
|||||||
my_snprintf(query, sizeof(query), "SHOW TABLES LIKE %s",
|
my_snprintf(query, sizeof(query), "SHOW TABLES LIKE %s",
|
||||||
quote_for_like(old_table_name, show_name_buff));
|
quote_for_like(old_table_name, show_name_buff));
|
||||||
|
|
||||||
if (mysql_query_with_error_report(sock, 0, query))
|
if (mysql_query_with_error_report(mysql, 0, query))
|
||||||
{
|
{
|
||||||
safe_exit(EX_MYSQLERR);
|
safe_exit(EX_MYSQLERR);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((table_res= mysql_store_result(sock)))
|
if ((table_res= mysql_store_result(mysql)))
|
||||||
{
|
{
|
||||||
my_ulonglong num_rows= mysql_num_rows(table_res);
|
my_ulonglong num_rows= mysql_num_rows(table_res);
|
||||||
if (num_rows > 0)
|
if (num_rows > 0)
|
||||||
@ -2928,16 +2934,16 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
|
|||||||
|
|
||||||
if (lock_tables)
|
if (lock_tables)
|
||||||
{
|
{
|
||||||
if (mysql_real_query(sock, lock_tables_query.str,
|
if (mysql_real_query(mysql, lock_tables_query.str,
|
||||||
lock_tables_query.length-1))
|
lock_tables_query.length-1))
|
||||||
DB_error(sock, "when doing LOCK TABLES");
|
DB_error(mysql, "when doing LOCK TABLES");
|
||||||
/* We shall countinue here, if --force was given */
|
/* We shall countinue here, if --force was given */
|
||||||
}
|
}
|
||||||
dynstr_free(&lock_tables_query);
|
dynstr_free(&lock_tables_query);
|
||||||
if (flush_logs)
|
if (flush_logs)
|
||||||
{
|
{
|
||||||
if (mysql_refresh(sock, REFRESH_LOG))
|
if (mysql_refresh(mysql, REFRESH_LOG))
|
||||||
DB_error(sock, "when doing refresh");
|
DB_error(mysql, "when doing refresh");
|
||||||
/* We shall countinue here, if --force was given */
|
/* We shall countinue here, if --force was given */
|
||||||
}
|
}
|
||||||
if (opt_xml)
|
if (opt_xml)
|
||||||
@ -2949,7 +2955,7 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
|
|||||||
DBUG_PRINT("info",("Dumping table %s", *pos));
|
DBUG_PRINT("info",("Dumping table %s", *pos));
|
||||||
dump_table(*pos, db);
|
dump_table(*pos, db);
|
||||||
if (opt_dump_triggers &&
|
if (opt_dump_triggers &&
|
||||||
mysql_get_server_version(sock) >= 50009)
|
mysql_get_server_version(mysql) >= 50009)
|
||||||
dump_triggers_for_table(*pos, db);
|
dump_triggers_for_table(*pos, db);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2961,7 +2967,7 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
|
|||||||
}
|
}
|
||||||
/* obtain dump of routines (procs/functions) */
|
/* obtain dump of routines (procs/functions) */
|
||||||
if (opt_routines && !opt_xml &&
|
if (opt_routines && !opt_xml &&
|
||||||
mysql_get_server_version(sock) >= 50009)
|
mysql_get_server_version(mysql) >= 50009)
|
||||||
{
|
{
|
||||||
DBUG_PRINT("info", ("Dumping routines for database %s", db));
|
DBUG_PRINT("info", ("Dumping routines for database %s", db));
|
||||||
dump_routines_for_db(db);
|
dump_routines_for_db(db);
|
||||||
@ -2975,7 +2981,7 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
|
|||||||
check_io(md_result_file);
|
check_io(md_result_file);
|
||||||
}
|
}
|
||||||
if (lock_tables)
|
if (lock_tables)
|
||||||
VOID(mysql_query_with_error_report(sock, 0, "UNLOCK TABLES"));
|
VOID(mysql_query_with_error_report(mysql, 0, "UNLOCK TABLES"));
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
} /* dump_selected_tables */
|
} /* dump_selected_tables */
|
||||||
|
|
||||||
@ -3160,7 +3166,7 @@ static void print_value(FILE *file, MYSQL_RES *result, MYSQL_ROW row,
|
|||||||
table_type Type of table
|
table_type Type of table
|
||||||
|
|
||||||
GLOBAL VARIABLES
|
GLOBAL VARIABLES
|
||||||
sock MySQL socket
|
mysql MySQL connection
|
||||||
verbose Write warning messages
|
verbose Write warning messages
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
@ -3179,14 +3185,12 @@ char check_if_ignore_table(const char *table_name, char *table_type)
|
|||||||
DBUG_ASSERT(2*sizeof(table_name) < sizeof(show_name_buff));
|
DBUG_ASSERT(2*sizeof(table_name) < sizeof(show_name_buff));
|
||||||
my_snprintf(buff, sizeof(buff), "show table status like %s",
|
my_snprintf(buff, sizeof(buff), "show table status like %s",
|
||||||
quote_for_like(table_name, show_name_buff));
|
quote_for_like(table_name, show_name_buff));
|
||||||
if (mysql_query_with_error_report(sock, &res, buff))
|
if (mysql_query_with_error_report(mysql, &res, buff))
|
||||||
{
|
{
|
||||||
if (mysql_errno(sock) != ER_PARSE_ERROR)
|
if (mysql_errno(mysql) != ER_PARSE_ERROR)
|
||||||
{ /* If old MySQL version */
|
{ /* If old MySQL version */
|
||||||
if (verbose)
|
verbose_msg("-- Warning: Couldn't get status information for " \
|
||||||
fprintf(stderr,
|
"table %s (%s)\n", table_name,mysql_error(mysql));
|
||||||
"-- Warning: Couldn't get status information for table %s (%s)\n",
|
|
||||||
table_name,mysql_error(sock));
|
|
||||||
DBUG_RETURN(result); /* assume table is ok */
|
DBUG_RETURN(result); /* assume table is ok */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3194,7 +3198,7 @@ char check_if_ignore_table(const char *table_name, char *table_type)
|
|||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Error: Couldn't read status information for table %s (%s)\n",
|
"Error: Couldn't read status information for table %s (%s)\n",
|
||||||
table_name, mysql_error(sock));
|
table_name, mysql_error(mysql));
|
||||||
mysql_free_result(res);
|
mysql_free_result(res);
|
||||||
DBUG_RETURN(result); /* assume table is ok */
|
DBUG_RETURN(result); /* assume table is ok */
|
||||||
}
|
}
|
||||||
@ -3222,7 +3226,7 @@ char check_if_ignore_table(const char *table_name, char *table_type)
|
|||||||
/*
|
/*
|
||||||
If these two types, we do want to skip dumping the table
|
If these two types, we do want to skip dumping the table
|
||||||
*/
|
*/
|
||||||
if (!dFlag &&
|
if (!opt_no_data &&
|
||||||
(!strcmp(table_type,"MRG_MyISAM") || !strcmp(table_type,"MRG_ISAM")))
|
(!strcmp(table_type,"MRG_MyISAM") || !strcmp(table_type,"MRG_ISAM")))
|
||||||
result= IGNORE_DATA;
|
result= IGNORE_DATA;
|
||||||
}
|
}
|
||||||
@ -3230,6 +3234,7 @@ char check_if_ignore_table(const char *table_name, char *table_type)
|
|||||||
DBUG_RETURN(result);
|
DBUG_RETURN(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Get string of comma-separated primary key field names
|
Get string of comma-separated primary key field names
|
||||||
|
|
||||||
@ -3259,12 +3264,12 @@ static char *primary_key_fields(const char *table_name)
|
|||||||
|
|
||||||
my_snprintf(show_keys_buff, sizeof(show_keys_buff),
|
my_snprintf(show_keys_buff, sizeof(show_keys_buff),
|
||||||
"SHOW KEYS FROM %s", table_name);
|
"SHOW KEYS FROM %s", table_name);
|
||||||
if (mysql_query(sock, show_keys_buff) ||
|
if (mysql_query(mysql, show_keys_buff) ||
|
||||||
!(res = mysql_store_result(sock)))
|
!(res = mysql_store_result(mysql)))
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Warning: Couldn't read keys from table %s;"
|
fprintf(stderr, "Warning: Couldn't read keys from table %s;"
|
||||||
" records are NOT sorted (%s)\n",
|
" records are NOT sorted (%s)\n",
|
||||||
table_name, mysql_error(sock));
|
table_name, mysql_error(mysql));
|
||||||
/* Don't exit, because it's better to print out unsorted records */
|
/* Don't exit, because it's better to print out unsorted records */
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
@ -3369,11 +3374,10 @@ static my_bool get_view_structure(char *table, char* db)
|
|||||||
FILE *sql_file = md_result_file;
|
FILE *sql_file = md_result_file;
|
||||||
DBUG_ENTER("get_view_structure");
|
DBUG_ENTER("get_view_structure");
|
||||||
|
|
||||||
if (tFlag) /* Don't write table creation info */
|
if (opt_no_create_info) /* Don't write table creation info */
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
|
|
||||||
if (verbose)
|
verbose_msg("-- Retrieving view structure for table %s...\n", table);
|
||||||
fprintf(stderr, "-- Retrieving view structure for table %s...\n", table);
|
|
||||||
|
|
||||||
#ifdef NOT_REALLY_USED_YET
|
#ifdef NOT_REALLY_USED_YET
|
||||||
sprintf(insert_pat,"SET OPTION SQL_QUOTE_SHOW_CREATE=%d",
|
sprintf(insert_pat,"SET OPTION SQL_QUOTE_SHOW_CREATE=%d",
|
||||||
@ -3384,7 +3388,7 @@ static my_bool get_view_structure(char *table, char* db)
|
|||||||
opt_quoted_table= quote_name(table, table_buff2, 0);
|
opt_quoted_table= quote_name(table, table_buff2, 0);
|
||||||
|
|
||||||
my_snprintf(query, sizeof(query), "SHOW CREATE TABLE %s", result_table);
|
my_snprintf(query, sizeof(query), "SHOW CREATE TABLE %s", result_table);
|
||||||
if (mysql_query_with_error_report(sock, &table_res, query))
|
if (mysql_query_with_error_report(mysql, &table_res, query))
|
||||||
{
|
{
|
||||||
safe_exit(EX_MYSQLERR);
|
safe_exit(EX_MYSQLERR);
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
@ -3394,8 +3398,7 @@ static my_bool get_view_structure(char *table, char* db)
|
|||||||
field= mysql_fetch_field_direct(table_res, 0);
|
field= mysql_fetch_field_direct(table_res, 0);
|
||||||
if (strcmp(field->name, "View") != 0)
|
if (strcmp(field->name, "View") != 0)
|
||||||
{
|
{
|
||||||
if (verbose)
|
verbose_msg("-- It's base table, skipped\n");
|
||||||
fprintf(stderr, "-- It's base table, skipped\n");
|
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3430,7 +3433,7 @@ static my_bool get_view_structure(char *table, char* db)
|
|||||||
"SELECT CHECK_OPTION, DEFINER, SECURITY_TYPE " \
|
"SELECT CHECK_OPTION, DEFINER, SECURITY_TYPE " \
|
||||||
"FROM information_schema.views " \
|
"FROM information_schema.views " \
|
||||||
"WHERE table_name=\"%s\" AND table_schema=\"%s\"", table, db);
|
"WHERE table_name=\"%s\" AND table_schema=\"%s\"", table, db);
|
||||||
if (mysql_query(sock, query))
|
if (mysql_query(mysql, query))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Use the raw output from SHOW CREATE TABLE if
|
Use the raw output from SHOW CREATE TABLE if
|
||||||
@ -3456,7 +3459,7 @@ static my_bool get_view_structure(char *table, char* db)
|
|||||||
mysql_free_result(table_res);
|
mysql_free_result(table_res);
|
||||||
|
|
||||||
/* Get the result from "select ... information_schema" */
|
/* Get the result from "select ... information_schema" */
|
||||||
if (!(table_res= mysql_store_result(sock)) ||
|
if (!(table_res= mysql_store_result(mysql)) ||
|
||||||
!(row= mysql_fetch_row(table_res)))
|
!(row= mysql_fetch_row(table_res)))
|
||||||
{
|
{
|
||||||
safe_exit(EX_MYSQLERR);
|
safe_exit(EX_MYSQLERR);
|
||||||
@ -3551,21 +3554,21 @@ int main(int argc, char **argv)
|
|||||||
write_header(md_result_file, *argv);
|
write_header(md_result_file, *argv);
|
||||||
|
|
||||||
if ((opt_lock_all_tables || opt_master_data) &&
|
if ((opt_lock_all_tables || opt_master_data) &&
|
||||||
do_flush_tables_read_lock(sock))
|
do_flush_tables_read_lock(mysql))
|
||||||
goto err;
|
goto err;
|
||||||
if (opt_single_transaction && start_transaction(sock, test(opt_master_data)))
|
if (opt_single_transaction && start_transaction(mysql, test(opt_master_data)))
|
||||||
goto err;
|
goto err;
|
||||||
if (opt_delete_master_logs && do_reset_master(sock))
|
if (opt_delete_master_logs && do_reset_master(mysql))
|
||||||
goto err;
|
goto err;
|
||||||
if (opt_lock_all_tables || opt_master_data)
|
if (opt_lock_all_tables || opt_master_data)
|
||||||
{
|
{
|
||||||
if (flush_logs && mysql_refresh(sock, REFRESH_LOG))
|
if (flush_logs && mysql_refresh(mysql, REFRESH_LOG))
|
||||||
goto err;
|
goto err;
|
||||||
flush_logs= 0; /* not anymore; that would not be sensible */
|
flush_logs= 0; /* not anymore; that would not be sensible */
|
||||||
}
|
}
|
||||||
if (opt_master_data && do_show_master_status(sock))
|
if (opt_master_data && do_show_master_status(mysql))
|
||||||
goto err;
|
goto err;
|
||||||
if (opt_single_transaction && do_unlock_tables(sock)) /* unlock but no commit! */
|
if (opt_single_transaction && do_unlock_tables(mysql)) /* unlock but no commit! */
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
if (opt_alldbs)
|
if (opt_alldbs)
|
||||||
|
15
configure.in
15
configure.in
@ -1655,17 +1655,20 @@ AC_ARG_WITH(debug,
|
|||||||
if test "$with_debug" = "yes"
|
if test "$with_debug" = "yes"
|
||||||
then
|
then
|
||||||
# Medium debug.
|
# Medium debug.
|
||||||
CFLAGS="$DEBUG_CFLAGS $DEBUG_OPTIMIZE_CC -DDBUG_ON -DSAFE_MUTEX $CFLAGS"
|
AC_DEFINE([DBUG_ON], [1], [Use libdbug])
|
||||||
CXXFLAGS="$DEBUG_CXXFLAGS $DEBUG_OPTIMIZE_CXX -DDBUG_ON -DSAFE_MUTEX $CXXFLAGS"
|
CFLAGS="$DEBUG_CFLAGS $DEBUG_OPTIMIZE_CC -DSAFE_MUTEX $CFLAGS"
|
||||||
|
CXXFLAGS="$DEBUG_CXXFLAGS $DEBUG_OPTIMIZE_CXX -DSAFE_MUTEX $CXXFLAGS"
|
||||||
elif test "$with_debug" = "full"
|
elif test "$with_debug" = "full"
|
||||||
then
|
then
|
||||||
# Full debug. Very slow in some cases
|
# Full debug. Very slow in some cases
|
||||||
CFLAGS="$DEBUG_CFLAGS -DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC $CFLAGS"
|
AC_DEFINE([DBUG_ON], [1], [Use libdbug])
|
||||||
CXXFLAGS="$DEBUG_CXXFLAGS -DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC $CXXFLAGS"
|
CFLAGS="$DEBUG_CFLAGS -DSAFE_MUTEX -DSAFEMALLOC $CFLAGS"
|
||||||
|
CXXFLAGS="$DEBUG_CXXFLAGS -DSAFE_MUTEX -DSAFEMALLOC $CXXFLAGS"
|
||||||
else
|
else
|
||||||
# Optimized version. No debug
|
# Optimized version. No debug
|
||||||
CFLAGS="$OPTIMIZE_CFLAGS -DDBUG_OFF $CFLAGS"
|
AC_DEFINE([DBUG_OFF], [1], [Don't use libdbug])
|
||||||
CXXFLAGS="$OPTIMIZE_CXXFLAGS -DDBUG_OFF $CXXFLAGS"
|
CFLAGS="$OPTIMIZE_CFLAGS $CFLAGS"
|
||||||
|
CXXFLAGS="$OPTIMIZE_CXXFLAGS $CXXFLAGS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Force static compilation to avoid linking problems/get more speed
|
# Force static compilation to avoid linking problems/get more speed
|
||||||
|
@ -66,10 +66,13 @@
|
|||||||
* Check of malloc on entry/exit (option "S")
|
* Check of malloc on entry/exit (option "S")
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <my_global.h>
|
||||||
|
|
||||||
|
/* This file won't compile unless DBUG_OFF is undefined locally */
|
||||||
#ifdef DBUG_OFF
|
#ifdef DBUG_OFF
|
||||||
#undef DBUG_OFF
|
#undef DBUG_OFF
|
||||||
#endif
|
#endif
|
||||||
#include <my_global.h>
|
|
||||||
#include <m_string.h>
|
#include <m_string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#if defined(MSDOS) || defined(__WIN__)
|
#if defined(MSDOS) || defined(__WIN__)
|
||||||
|
@ -381,3 +381,14 @@ DROP TABLE t1;
|
|||||||
select cast(NULL as decimal(6)) as t1;
|
select cast(NULL as decimal(6)) as t1;
|
||||||
t1
|
t1
|
||||||
NULL
|
NULL
|
||||||
|
set names latin1;
|
||||||
|
select hex(cast('a' as char(2) binary));
|
||||||
|
hex(cast('a' as char(2) binary))
|
||||||
|
61
|
||||||
|
select hex(cast('a' as binary(2)));
|
||||||
|
hex(cast('a' as binary(2)))
|
||||||
|
6100
|
||||||
|
select hex(cast('a' as char(2) binary));
|
||||||
|
hex(cast('a' as char(2) binary))
|
||||||
|
61
|
||||||
|
End of 5.0 tests
|
||||||
|
@ -79,3 +79,31 @@ uncompress(a) uncompressed_length(a)
|
|||||||
NULL NULL
|
NULL NULL
|
||||||
a 1
|
a 1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1 (a varchar(32) not null);
|
||||||
|
insert into t1 values ('foo');
|
||||||
|
explain select * from t1 where uncompress(a) is null;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
||||||
|
Warnings:
|
||||||
|
Error 1259 ZLIB: Input data corrupted
|
||||||
|
select * from t1 where uncompress(a) is null;
|
||||||
|
a
|
||||||
|
foo
|
||||||
|
Warnings:
|
||||||
|
Error 1259 ZLIB: Input data corrupted
|
||||||
|
explain select *, uncompress(a) from t1;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
||||||
|
select *, uncompress(a) from t1;
|
||||||
|
a uncompress(a)
|
||||||
|
foo NULL
|
||||||
|
Warnings:
|
||||||
|
Error 1259 ZLIB: Input data corrupted
|
||||||
|
select *, uncompress(a), uncompress(a) is null from t1;
|
||||||
|
a uncompress(a) uncompress(a) is null
|
||||||
|
foo NULL 1
|
||||||
|
Warnings:
|
||||||
|
Error 1259 ZLIB: Input data corrupted
|
||||||
|
Error 1259 ZLIB: Input data corrupted
|
||||||
|
drop table t1;
|
||||||
|
End of 5.0 tests
|
||||||
|
@ -2875,3 +2875,19 @@ use mysqldump_dbb;
|
|||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
drop database mysqldump_dbb;
|
drop database mysqldump_dbb;
|
||||||
|
use test;
|
||||||
|
create user mysqltest_1;
|
||||||
|
create table t1(a int, b varchar(34));
|
||||||
|
mysqldump: Couldn't execute 'FLUSH TABLES': Access denied; you need the RELOAD privilege for this operation (1227)
|
||||||
|
mysqldump: Couldn't execute 'FLUSH TABLES': Access denied; you need the RELOAD privilege for this operation (1227)
|
||||||
|
grant RELOAD on *.* to mysqltest_1@localhost;
|
||||||
|
mysqldump: Couldn't execute 'SHOW MASTER STATUS': Access denied; you need the SUPER,REPLICATION CLIENT privilege for this operation (1227)
|
||||||
|
mysqldump: Couldn't execute 'SHOW MASTER STATUS': Access denied; you need the SUPER,REPLICATION CLIENT privilege for this operation (1227)
|
||||||
|
grant REPLICATION CLIENT on *.* to mysqltest_1@localhost;
|
||||||
|
CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000003', MASTER_LOG_POS=3784;
|
||||||
|
CREATE TABLE `t1` (
|
||||||
|
`a` int(11) default NULL,
|
||||||
|
`b` varchar(34) default NULL
|
||||||
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||||
|
drop table t1;
|
||||||
|
drop user mysqltest_1;
|
||||||
|
@ -256,3 +256,39 @@ t1 CREATE TABLE `t1` (
|
|||||||
`@first_var` longtext
|
`@first_var` longtext
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
set @a=18446744071710965857;
|
||||||
|
select @a;
|
||||||
|
@a
|
||||||
|
18446744071710965857
|
||||||
|
CREATE TABLE `bigfailure` (
|
||||||
|
`afield` BIGINT UNSIGNED NOT NULL
|
||||||
|
);
|
||||||
|
INSERT INTO `bigfailure` VALUES (18446744071710965857);
|
||||||
|
SELECT * FROM bigfailure;
|
||||||
|
afield
|
||||||
|
18446744071710965857
|
||||||
|
select * from (SELECT afield FROM bigfailure) as b;
|
||||||
|
afield
|
||||||
|
18446744071710965857
|
||||||
|
select * from bigfailure where afield = (SELECT afield FROM bigfailure);
|
||||||
|
afield
|
||||||
|
18446744071710965857
|
||||||
|
select * from bigfailure where afield = 18446744071710965857;
|
||||||
|
afield
|
||||||
|
18446744071710965857
|
||||||
|
select * from bigfailure where afield = 18446744071710965856+1;
|
||||||
|
afield
|
||||||
|
18446744071710965857
|
||||||
|
SET @a := (SELECT afield FROM bigfailure);
|
||||||
|
SELECT @a;
|
||||||
|
@a
|
||||||
|
18446744071710965857
|
||||||
|
SET @a := (select afield from (SELECT afield FROM bigfailure) as b);
|
||||||
|
SELECT @a;
|
||||||
|
@a
|
||||||
|
18446744071710965857
|
||||||
|
SET @a := (select * from bigfailure where afield = (SELECT afield FROM bigfailure));
|
||||||
|
SELECT @a;
|
||||||
|
@a
|
||||||
|
18446744071710965857
|
||||||
|
drop table bigfailure;
|
||||||
|
@ -204,7 +204,19 @@ SELECT CAST(v AS DECIMAL), CAST(tt AS DECIMAL), CAST(t AS DECIMAL),
|
|||||||
CAST(mt AS DECIMAL), CAST(lt AS DECIMAL) from t1;
|
CAST(mt AS DECIMAL), CAST(lt AS DECIMAL) from t1;
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
# Bug @10237 (CAST(NULL DECIMAL) crashes server)
|
|
||||||
|
#
|
||||||
|
# Bug #10237 (CAST(NULL DECIMAL) crashes server)
|
||||||
#
|
#
|
||||||
select cast(NULL as decimal(6)) as t1;
|
select cast(NULL as decimal(6)) as t1;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #17903: cast to char results in binary
|
||||||
|
#
|
||||||
|
set names latin1;
|
||||||
|
select hex(cast('a' as char(2) binary));
|
||||||
|
select hex(cast('a' as binary(2)));
|
||||||
|
select hex(cast('a' as char(2) binary));
|
||||||
|
|
||||||
|
--echo End of 5.0 tests
|
||||||
|
@ -57,3 +57,17 @@ select uncompress(a), uncompressed_length(a) from t1;
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #18539: uncompress(d) is null: impossible?
|
||||||
|
#
|
||||||
|
create table t1 (a varchar(32) not null);
|
||||||
|
insert into t1 values ('foo');
|
||||||
|
explain select * from t1 where uncompress(a) is null;
|
||||||
|
select * from t1 where uncompress(a) is null;
|
||||||
|
explain select *, uncompress(a) from t1;
|
||||||
|
select *, uncompress(a) from t1;
|
||||||
|
select *, uncompress(a), uncompress(a) is null from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
--echo End of 5.0 tests
|
||||||
|
@ -1266,3 +1266,43 @@ use mysqldump_dbb;
|
|||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
drop database mysqldump_dbb;
|
drop database mysqldump_dbb;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#21215 mysqldump creating incomplete backups without warning
|
||||||
|
#
|
||||||
|
use test;
|
||||||
|
|
||||||
|
# Create user without sufficient privs to perform the requested operation
|
||||||
|
create user mysqltest_1;
|
||||||
|
create table t1(a int, b varchar(34));
|
||||||
|
|
||||||
|
# Execute mysqldump, will fail on FLUSH TABLES
|
||||||
|
--error 2
|
||||||
|
--exec $MYSQL_DUMP --compact --master-data -u mysqltest_1 test 2>&1
|
||||||
|
|
||||||
|
# Execute mysqldump, will fail on FLUSH TABLES
|
||||||
|
# use --force, should no affect behaviour
|
||||||
|
--error 2
|
||||||
|
--exec $MYSQL_DUMP --compact --force --master-data -u mysqltest_1 test 2>&1
|
||||||
|
|
||||||
|
# Add RELOAD grants
|
||||||
|
grant RELOAD on *.* to mysqltest_1@localhost;
|
||||||
|
|
||||||
|
# Execute mysqldump, will fail on SHOW MASTER STATUS
|
||||||
|
--error 2
|
||||||
|
--exec $MYSQL_DUMP --compact --master-data -u mysqltest_1 test 2>&1
|
||||||
|
|
||||||
|
# Execute mysqldump, will fail on SHOW MASTER STATUS.
|
||||||
|
# use --force, should not alter behaviour
|
||||||
|
--error 2
|
||||||
|
--exec $MYSQL_DUMP --compact --force --master-data -u mysqltest_1 test 2>&1
|
||||||
|
|
||||||
|
# Add REPLICATION CLIENT grants
|
||||||
|
grant REPLICATION CLIENT on *.* to mysqltest_1@localhost;
|
||||||
|
|
||||||
|
# Execute mysqldump, should now succeed
|
||||||
|
--exec $MYSQL_DUMP --compact --master-data -u mysqltest_1 test 2>&1
|
||||||
|
|
||||||
|
# Clean up
|
||||||
|
drop table t1;
|
||||||
|
drop user mysqltest_1;
|
||||||
|
@ -171,3 +171,34 @@ set @first_var= cast(NULL as CHAR);
|
|||||||
create table t1 select @first_var;
|
create table t1 select @first_var;
|
||||||
show create table t1;
|
show create table t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #7498 User variable SET saves SIGNED BIGINT as UNSIGNED BIGINT
|
||||||
|
#
|
||||||
|
|
||||||
|
# First part, set user var to large number and select it
|
||||||
|
set @a=18446744071710965857;
|
||||||
|
select @a;
|
||||||
|
|
||||||
|
# Second part, set user var from large number in table
|
||||||
|
# then select it
|
||||||
|
CREATE TABLE `bigfailure` (
|
||||||
|
`afield` BIGINT UNSIGNED NOT NULL
|
||||||
|
);
|
||||||
|
INSERT INTO `bigfailure` VALUES (18446744071710965857);
|
||||||
|
SELECT * FROM bigfailure;
|
||||||
|
select * from (SELECT afield FROM bigfailure) as b;
|
||||||
|
select * from bigfailure where afield = (SELECT afield FROM bigfailure);
|
||||||
|
select * from bigfailure where afield = 18446744071710965857;
|
||||||
|
# This is fixed in 5.0, to be uncommented there
|
||||||
|
#select * from bigfailure where afield = '18446744071710965857';
|
||||||
|
select * from bigfailure where afield = 18446744071710965856+1;
|
||||||
|
|
||||||
|
SET @a := (SELECT afield FROM bigfailure);
|
||||||
|
SELECT @a;
|
||||||
|
SET @a := (select afield from (SELECT afield FROM bigfailure) as b);
|
||||||
|
SELECT @a;
|
||||||
|
SET @a := (select * from bigfailure where afield = (SELECT afield FROM bigfailure));
|
||||||
|
SELECT @a;
|
||||||
|
|
||||||
|
drop table bigfailure;
|
||||||
|
@ -3413,6 +3413,7 @@ static user_var_entry *get_variable(HASH *hash, LEX_STRING &name,
|
|||||||
entry->length=0;
|
entry->length=0;
|
||||||
entry->update_query_id=0;
|
entry->update_query_id=0;
|
||||||
entry->collation.set(NULL, DERIVATION_IMPLICIT);
|
entry->collation.set(NULL, DERIVATION_IMPLICIT);
|
||||||
|
entry->unsigned_flag= 0;
|
||||||
/*
|
/*
|
||||||
If we are here, we were called from a SET or a query which sets a
|
If we are here, we were called from a SET or a query which sets a
|
||||||
variable. Imagine it is this:
|
variable. Imagine it is this:
|
||||||
@ -3499,6 +3500,7 @@ Item_func_set_user_var::fix_length_and_dec()
|
|||||||
type - type of new value
|
type - type of new value
|
||||||
cs - charset info for new value
|
cs - charset info for new value
|
||||||
dv - derivation for new value
|
dv - derivation for new value
|
||||||
|
unsigned_arg - indiates if a value of type INT_RESULT is unsigned
|
||||||
|
|
||||||
RETURN VALUE
|
RETURN VALUE
|
||||||
False - success, True - failure
|
False - success, True - failure
|
||||||
@ -3506,7 +3508,8 @@ Item_func_set_user_var::fix_length_and_dec()
|
|||||||
|
|
||||||
static bool
|
static bool
|
||||||
update_hash(user_var_entry *entry, bool set_null, void *ptr, uint length,
|
update_hash(user_var_entry *entry, bool set_null, void *ptr, uint length,
|
||||||
Item_result type, CHARSET_INFO *cs, Derivation dv)
|
Item_result type, CHARSET_INFO *cs, Derivation dv,
|
||||||
|
bool unsigned_arg)
|
||||||
{
|
{
|
||||||
if (set_null)
|
if (set_null)
|
||||||
{
|
{
|
||||||
@ -3554,6 +3557,7 @@ update_hash(user_var_entry *entry, bool set_null, void *ptr, uint length,
|
|||||||
((my_decimal*)entry->value)->fix_buffer_pointer();
|
((my_decimal*)entry->value)->fix_buffer_pointer();
|
||||||
entry->length= length;
|
entry->length= length;
|
||||||
entry->collation.set(cs, dv);
|
entry->collation.set(cs, dv);
|
||||||
|
entry->unsigned_flag= unsigned_arg;
|
||||||
}
|
}
|
||||||
entry->type=type;
|
entry->type=type;
|
||||||
return 0;
|
return 0;
|
||||||
@ -3562,7 +3566,8 @@ update_hash(user_var_entry *entry, bool set_null, void *ptr, uint length,
|
|||||||
|
|
||||||
bool
|
bool
|
||||||
Item_func_set_user_var::update_hash(void *ptr, uint length, Item_result type,
|
Item_func_set_user_var::update_hash(void *ptr, uint length, Item_result type,
|
||||||
CHARSET_INFO *cs, Derivation dv)
|
CHARSET_INFO *cs, Derivation dv,
|
||||||
|
bool unsigned_arg)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
If we set a variable explicitely to NULL then keep the old
|
If we set a variable explicitely to NULL then keep the old
|
||||||
@ -3571,7 +3576,7 @@ Item_func_set_user_var::update_hash(void *ptr, uint length, Item_result type,
|
|||||||
if ((null_value= args[0]->null_value) && null_item)
|
if ((null_value= args[0]->null_value) && null_item)
|
||||||
type= entry->type; // Don't change type of item
|
type= entry->type; // Don't change type of item
|
||||||
if (::update_hash(entry, (null_value= args[0]->null_value),
|
if (::update_hash(entry, (null_value= args[0]->null_value),
|
||||||
ptr, length, type, cs, dv))
|
ptr, length, type, cs, dv, unsigned_arg))
|
||||||
{
|
{
|
||||||
current_thd->fatal_error(); // Probably end of memory
|
current_thd->fatal_error(); // Probably end of memory
|
||||||
null_value= 1;
|
null_value= 1;
|
||||||
@ -3653,7 +3658,10 @@ String *user_var_entry::val_str(my_bool *null_value, String *str,
|
|||||||
str->set(*(double*) value, decimals, &my_charset_bin);
|
str->set(*(double*) value, decimals, &my_charset_bin);
|
||||||
break;
|
break;
|
||||||
case INT_RESULT:
|
case INT_RESULT:
|
||||||
str->set(*(longlong*) value, &my_charset_bin);
|
if (!unsigned_flag)
|
||||||
|
str->set(*(longlong*) value, &my_charset_bin);
|
||||||
|
else
|
||||||
|
str->set(*(ulonglong*) value, &my_charset_bin);
|
||||||
break;
|
break;
|
||||||
case DECIMAL_RESULT:
|
case DECIMAL_RESULT:
|
||||||
my_decimal2string(E_DEC_FATAL_ERROR, (my_decimal *)value, 0, 0, 0, str);
|
my_decimal2string(E_DEC_FATAL_ERROR, (my_decimal *)value, 0, 0, 0, str);
|
||||||
@ -3724,6 +3732,7 @@ Item_func_set_user_var::check()
|
|||||||
case INT_RESULT:
|
case INT_RESULT:
|
||||||
{
|
{
|
||||||
save_result.vint= args[0]->val_int();
|
save_result.vint= args[0]->val_int();
|
||||||
|
unsigned_flag= args[0]->unsigned_flag;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case STRING_RESULT:
|
case STRING_RESULT:
|
||||||
@ -3779,7 +3788,8 @@ Item_func_set_user_var::update()
|
|||||||
case INT_RESULT:
|
case INT_RESULT:
|
||||||
{
|
{
|
||||||
res= update_hash((void*) &save_result.vint, sizeof(save_result.vint),
|
res= update_hash((void*) &save_result.vint, sizeof(save_result.vint),
|
||||||
INT_RESULT, &my_charset_bin, DERIVATION_IMPLICIT);
|
INT_RESULT, &my_charset_bin, DERIVATION_IMPLICIT,
|
||||||
|
unsigned_flag);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case STRING_RESULT:
|
case STRING_RESULT:
|
||||||
@ -4158,7 +4168,7 @@ bool Item_user_var_as_out_param::fix_fields(THD *thd, Item **ref)
|
|||||||
void Item_user_var_as_out_param::set_null_value(CHARSET_INFO* cs)
|
void Item_user_var_as_out_param::set_null_value(CHARSET_INFO* cs)
|
||||||
{
|
{
|
||||||
if (::update_hash(entry, TRUE, 0, 0, STRING_RESULT, cs,
|
if (::update_hash(entry, TRUE, 0, 0, STRING_RESULT, cs,
|
||||||
DERIVATION_IMPLICIT))
|
DERIVATION_IMPLICIT, 0 /* unsigned_arg */))
|
||||||
current_thd->fatal_error(); // Probably end of memory
|
current_thd->fatal_error(); // Probably end of memory
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4167,7 +4177,7 @@ void Item_user_var_as_out_param::set_value(const char *str, uint length,
|
|||||||
CHARSET_INFO* cs)
|
CHARSET_INFO* cs)
|
||||||
{
|
{
|
||||||
if (::update_hash(entry, FALSE, (void*)str, length, STRING_RESULT, cs,
|
if (::update_hash(entry, FALSE, (void*)str, length, STRING_RESULT, cs,
|
||||||
DERIVATION_IMPLICIT))
|
DERIVATION_IMPLICIT, 0 /* unsigned_arg */))
|
||||||
current_thd->fatal_error(); // Probably end of memory
|
current_thd->fatal_error(); // Probably end of memory
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1161,8 +1161,6 @@ class Item_func_set_user_var :public Item_func
|
|||||||
String *vstr;
|
String *vstr;
|
||||||
my_decimal *vdec;
|
my_decimal *vdec;
|
||||||
} save_result;
|
} save_result;
|
||||||
String save_buff;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
LEX_STRING name; // keep it public
|
LEX_STRING name; // keep it public
|
||||||
@ -1173,8 +1171,8 @@ public:
|
|||||||
longlong val_int();
|
longlong val_int();
|
||||||
String *val_str(String *str);
|
String *val_str(String *str);
|
||||||
my_decimal *val_decimal(my_decimal *);
|
my_decimal *val_decimal(my_decimal *);
|
||||||
bool update_hash(void *ptr, uint length, enum Item_result type,
|
bool update_hash(void *ptr, uint length, enum Item_result type,
|
||||||
CHARSET_INFO *cs, Derivation dv);
|
CHARSET_INFO *cs, Derivation dv, bool unsigned_arg= 0);
|
||||||
bool check();
|
bool check();
|
||||||
bool update();
|
bool update();
|
||||||
enum Item_result result_type () const { return cached_result_type; }
|
enum Item_result result_type () const { return cached_result_type; }
|
||||||
|
@ -2985,6 +2985,16 @@ String *Item_func_uncompress::val_str(String *str)
|
|||||||
if (res->is_empty())
|
if (res->is_empty())
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
|
/* If length is less than 4 bytes, data is corrupt */
|
||||||
|
if (res->length() <= 4)
|
||||||
|
{
|
||||||
|
push_warning_printf(current_thd,MYSQL_ERROR::WARN_LEVEL_ERROR,
|
||||||
|
ER_ZLIB_Z_DATA_ERROR,
|
||||||
|
ER(ER_ZLIB_Z_DATA_ERROR));
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Size of uncompressed data is stored as first 4 bytes of field */
|
||||||
new_size= uint4korr(res->ptr()) & 0x3FFFFFFF;
|
new_size= uint4korr(res->ptr()) & 0x3FFFFFFF;
|
||||||
if (new_size > current_thd->variables.max_allowed_packet)
|
if (new_size > current_thd->variables.max_allowed_packet)
|
||||||
{
|
{
|
||||||
|
@ -808,7 +808,7 @@ class Item_func_uncompress: public Item_str_func
|
|||||||
String buffer;
|
String buffer;
|
||||||
public:
|
public:
|
||||||
Item_func_uncompress(Item *a): Item_str_func(a){}
|
Item_func_uncompress(Item *a): Item_str_func(a){}
|
||||||
void fix_length_and_dec(){max_length= MAX_BLOB_WIDTH;}
|
void fix_length_and_dec(){ maybe_null= 1; max_length= MAX_BLOB_WIDTH; }
|
||||||
const char *func_name() const{return "uncompress";}
|
const char *func_name() const{return "uncompress";}
|
||||||
String *val_str(String *) ZLIB_DEPENDED_FUNCTION
|
String *val_str(String *) ZLIB_DEPENDED_FUNCTION
|
||||||
};
|
};
|
||||||
|
@ -1511,6 +1511,7 @@ static Item_result set_row(List<Item> &item_list, Item *item,
|
|||||||
item->max_length= sel_item->max_length;
|
item->max_length= sel_item->max_length;
|
||||||
res_type= sel_item->result_type();
|
res_type= sel_item->result_type();
|
||||||
item->decimals= sel_item->decimals;
|
item->decimals= sel_item->decimals;
|
||||||
|
item->unsigned_flag= sel_item->unsigned_flag;
|
||||||
*maybe_null= sel_item->maybe_null;
|
*maybe_null= sel_item->maybe_null;
|
||||||
if (!(row[i]= Item_cache::get_cache(res_type)))
|
if (!(row[i]= Item_cache::get_cache(res_type)))
|
||||||
return STRING_RESULT; // we should return something
|
return STRING_RESULT; // we should return something
|
||||||
|
@ -2015,6 +2015,7 @@ class user_var_entry
|
|||||||
ulong length;
|
ulong length;
|
||||||
query_id_t update_query_id, used_query_id;
|
query_id_t update_query_id, used_query_id;
|
||||||
Item_result type;
|
Item_result type;
|
||||||
|
bool unsigned_flag;
|
||||||
|
|
||||||
double val_real(my_bool *null_value);
|
double val_real(my_bool *null_value);
|
||||||
longlong val_int(my_bool *null_value);
|
longlong val_int(my_bool *null_value);
|
||||||
|
@ -237,7 +237,7 @@ void udf_init()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (error > 0)
|
if (error > 0)
|
||||||
sql_print_error(ER(ER_GET_ERRNO), my_errno);
|
sql_print_error("Got unknown error: %d", my_errno);
|
||||||
end_read_record(&read_record_info);
|
end_read_record(&read_record_info);
|
||||||
new_thd->version--; // Force close to free memory
|
new_thd->version--; // Force close to free memory
|
||||||
|
|
||||||
|
@ -3104,7 +3104,7 @@ opt_bin_mod:
|
|||||||
| BINARY { Lex->type|= BINCMP_FLAG; };
|
| BINARY { Lex->type|= BINCMP_FLAG; };
|
||||||
|
|
||||||
opt_bin_charset:
|
opt_bin_charset:
|
||||||
/* empty */ { }
|
/* empty */ { Lex->charset= NULL; }
|
||||||
| ASCII_SYM { Lex->charset=&my_charset_latin1; }
|
| ASCII_SYM { Lex->charset=&my_charset_latin1; }
|
||||||
| UNICODE_SYM
|
| UNICODE_SYM
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user