summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/my_readline.h2
-rw-r--r--client/mysql.cc33
-rw-r--r--client/mysql_upgrade.c2
-rw-r--r--client/mysqladmin.cc2
-rw-r--r--client/mysqlbinlog.cc16
-rw-r--r--client/mysqlcheck.c9
-rw-r--r--client/mysqldump.c59
-rw-r--r--client/mysqlmanager-pwgen.c5
-rw-r--r--client/mysqltest.c82
-rw-r--r--client/readline.cc46
-rw-r--r--client/sql_string.cc2
-rw-r--r--configure.in4
-rw-r--r--extra/comp_err.c2
-rw-r--r--extra/yassl/src/buffer.cpp4
-rw-r--r--extra/yassl/src/cert_wrapper.cpp14
-rw-r--r--extra/yassl/src/ssl.cpp6
-rw-r--r--extra/yassl/src/yassl_imp.cpp2
-rw-r--r--extra/yassl/src/yassl_int.cpp12
-rw-r--r--extra/yassl/taocrypt/include/block.hpp2
-rw-r--r--extra/yassl/taocrypt/src/algebra.cpp2
-rw-r--r--extra/yassl/taocrypt/src/asn.cpp2
-rw-r--r--heap/hp_write.c2
-rw-r--r--include/my_md5.h90
-rw-r--r--include/my_sys.h3
-rw-r--r--innobase/include/pars0pars.h2
-rw-r--r--innobase/pars/pars0pars.c4
-rw-r--r--innobase/rem/rem0cmp.c2
-rw-r--r--libmysql/libmysql.c6
-rw-r--r--libmysql/manager.c4
-rw-r--r--myisam/mi_check.c6
-rw-r--r--myisam/mi_open.c5
-rw-r--r--myisam/mi_packrec.c2
-rw-r--r--myisam/mi_search.c2
-rw-r--r--myisam/rt_index.c10
-rw-r--r--mysql-test/include/ndb_backup.inc48
-rw-r--r--mysql-test/include/wait_until_count_sessions.inc33
-rw-r--r--mysql-test/r/consistent_snapshot.result32
-rw-r--r--mysql-test/r/ctype_collate.result19
-rw-r--r--mysql-test/r/dirty_close.result10
-rw-r--r--mysql-test/r/explain.result4
-rw-r--r--mysql-test/r/federated.result20
-rw-r--r--mysql-test/r/flush_block_commit.result74
-rw-r--r--mysql-test/r/flush_block_commit_notembedded.result30
-rw-r--r--mysql-test/r/flush_read_lock_kill.result17
-rw-r--r--mysql-test/r/lock_multi.result8
-rw-r--r--mysql-test/r/lock_multi_bug38499.result19
-rw-r--r--mysql-test/r/lock_multi_bug38691.result17
-rw-r--r--mysql-test/r/mysql.result9
-rw-r--r--mysql-test/r/mysqlbinlog.result34
-rw-r--r--mysql-test/r/mysqldump.result54
-rw-r--r--mysql-test/r/ndb_restore.result6
-rw-r--r--mysql-test/r/ndb_restore_print.result18
-rw-r--r--mysql-test/r/read_only.result2
-rw-r--r--mysql-test/r/show_check.result6
-rw-r--r--mysql-test/r/skip_name_resolve.result6
-rw-r--r--mysql-test/r/sp-security.result16
-rw-r--r--mysql-test/r/union.result16
-rw-r--r--mysql-test/r/view.result66
-rw-r--r--mysql-test/r/view_grant.result4
-rw-r--r--mysql-test/suite/funcs_1/r/innodb_func_view.result4
-rw-r--r--mysql-test/suite/funcs_1/r/innodb_views.result6
-rw-r--r--mysql-test/suite/funcs_1/r/myisam_views.result2
-rw-r--r--mysql-test/t/alter_table-big.test7
-rw-r--r--mysql-test/t/connect.test38
-rw-r--r--mysql-test/t/consistent_snapshot.test44
-rw-r--r--mysql-test/t/ctype_collate.test14
-rw-r--r--mysql-test/t/dirty_close.test21
-rw-r--r--mysql-test/t/explain.test13
-rw-r--r--mysql-test/t/federated.test22
-rw-r--r--mysql-test/t/flush_block_commit.test96
-rw-r--r--mysql-test/t/flush_block_commit_notembedded.test47
-rw-r--r--mysql-test/t/flush_read_lock_kill.test35
-rw-r--r--mysql-test/t/init_connect.test10
-rw-r--r--mysql-test/t/lock_multi.test205
-rw-r--r--mysql-test/t/lock_multi_bug38499.test221
-rw-r--r--mysql-test/t/lock_multi_bug38691.test141
-rw-r--r--mysql-test/t/mysql.test33
-rw-r--r--mysql-test/t/mysqlbinlog.test75
-rw-r--r--mysql-test/t/mysqldump.test14
-rw-r--r--mysql-test/t/mysqltest.test23
-rw-r--r--mysql-test/t/read_only.test28
-rw-r--r--mysql-test/t/show_check.test72
-rw-r--r--mysql-test/t/skip_name_resolve.test18
-rw-r--r--mysql-test/t/sp-security.test60
-rw-r--r--mysql-test/t/sp_notembedded.test40
-rw-r--r--mysql-test/t/ssl-big.test28
-rw-r--r--mysql-test/t/ssl.test8
-rw-r--r--mysql-test/t/ssl_compress.test10
-rw-r--r--mysql-test/t/status.test7
-rw-r--r--mysql-test/t/type_bit_innodb.test4
-rw-r--r--mysql-test/t/union.test43
-rw-r--r--mysql-test/t/user_limits.test41
-rw-r--r--mysql-test/t/view.test837
-rw-r--r--mysql-test/t/view_grant.test202
-rw-r--r--mysql-test/t/wait_timeout.test5
-rw-r--r--mysql-test/t/xa.test28
-rw-r--r--mysys/base64.c2
-rw-r--r--mysys/default.c8
-rw-r--r--mysys/errors.c16
-rw-r--r--mysys/md5.c567
-rw-r--r--mysys/mf_iocache2.c4
-rw-r--r--mysys/my_fstream.c6
-rw-r--r--mysys/my_new.cc5
-rw-r--r--mysys/my_pread.c6
-rw-r--r--mysys/my_static.c4
-rw-r--r--mysys/my_write.c6
-rw-r--r--mysys/safemalloc.c2
-rw-r--r--mysys/string.c4
-rw-r--r--server-tools/instance-manager/buffer.cc2
-rw-r--r--server-tools/instance-manager/commands.cc18
-rw-r--r--server-tools/instance-manager/instance.cc2
-rw-r--r--server-tools/instance-manager/instance_map.cc2
-rw-r--r--server-tools/instance-manager/instance_options.cc8
-rw-r--r--server-tools/instance-manager/listener.cc33
-rw-r--r--server-tools/instance-manager/mysql_connection.cc4
-rw-r--r--server-tools/instance-manager/options.cc2
-rw-r--r--server-tools/instance-manager/parse.cc2
-rw-r--r--server-tools/instance-manager/parse.h2
-rw-r--r--server-tools/instance-manager/parse_output.cc8
-rw-r--r--server-tools/instance-manager/protocol.cc12
-rw-r--r--server-tools/instance-manager/user_map.cc2
-rw-r--r--sql-bench/TODO21
-rw-r--r--sql-common/client.c2
-rw-r--r--sql-common/my_user.c4
-rw-r--r--sql/gen_lex_hash.cc6
-rw-r--r--sql/ha_archive.cc6
-rw-r--r--sql/ha_federated.cc30
-rw-r--r--sql/ha_innodb.cc2
-rw-r--r--sql/handler.cc7
-rw-r--r--sql/item.cc21
-rw-r--r--sql/item_func.cc4
-rw-r--r--sql/item_strfunc.cc19
-rw-r--r--sql/item_strfunc.h2
-rw-r--r--sql/item_sum.cc3
-rw-r--r--sql/item_timefunc.cc64
-rw-r--r--sql/lock.cc4
-rw-r--r--sql/log.cc4
-rw-r--r--sql/log_event.cc36
-rw-r--r--sql/mysqld.cc6
-rw-r--r--sql/net_serv.cc4
-rw-r--r--sql/opt_range.cc46
-rw-r--r--sql/opt_sum.cc6
-rw-r--r--sql/parse_file.cc10
-rw-r--r--sql/protocol.cc9
-rw-r--r--sql/set_var.cc16
-rw-r--r--sql/slave.cc14
-rw-r--r--sql/sp.cc10
-rw-r--r--sql/sp_head.cc16
-rw-r--r--sql/spatial.cc2
-rw-r--r--sql/sql_acl.cc62
-rw-r--r--sql/sql_base.cc10
-rw-r--r--sql/sql_cache.cc57
-rw-r--r--sql/sql_class.cc8
-rw-r--r--sql/sql_crypt.cc2
-rw-r--r--sql/sql_db.cc18
-rw-r--r--sql/sql_derived.cc2
-rw-r--r--sql/sql_error.cc2
-rw-r--r--sql/sql_handler.cc16
-rw-r--r--sql/sql_help.cc10
-rw-r--r--sql/sql_insert.cc2
-rw-r--r--sql/sql_lex.cc4
-rw-r--r--sql/sql_load.cc4
-rw-r--r--sql/sql_parse.cc38
-rw-r--r--sql/sql_prepare.cc8
-rw-r--r--sql/sql_repl.cc8
-rw-r--r--sql/sql_select.cc40
-rw-r--r--sql/sql_show.cc167
-rw-r--r--sql/sql_string.cc4
-rw-r--r--sql/sql_table.cc8
-rw-r--r--sql/sql_trigger.cc36
-rw-r--r--sql/sql_udf.cc2
-rw-r--r--sql/sql_view.cc16
-rw-r--r--sql/table.cc13
-rw-r--r--sql/tztime.cc77
-rw-r--r--sql/udf_example.c4
-rw-r--r--sql/uniques.cc2
-rw-r--r--sql/unireg.cc2
-rw-r--r--strings/Makefile.am2
-rw-r--r--strings/ctype-mb.c4
-rw-r--r--strings/ctype-simple.c10
-rw-r--r--strings/ctype-ucs2.c2
-rw-r--r--strings/my_vsnprintf.c2
-rw-r--r--strings/xml.c4
-rw-r--r--tests/bug25714.c4
-rw-r--r--tests/mysql_client_test.c521
-rw-r--r--tools/mysqlmanager.c5
-rw-r--r--vio/viosocket.c2
187 files changed, 3571 insertions, 2224 deletions
diff --git a/client/my_readline.h b/client/my_readline.h
index 47be7fa9294..32d6da4c626 100644
--- a/client/my_readline.h
+++ b/client/my_readline.h
@@ -29,5 +29,5 @@ typedef struct st_line_buffer
extern LINE_BUFFER *batch_readline_init(ulong max_size,FILE *file);
extern LINE_BUFFER *batch_readline_command(LINE_BUFFER *buffer, my_string str);
-extern char *batch_readline(LINE_BUFFER *buffer);
+extern char *batch_readline(LINE_BUFFER *buffer, bool *truncated);
extern void batch_readline_end(LINE_BUFFER *buffer);
diff --git a/client/mysql.cc b/client/mysql.cc
index 1a025345190..983d7719c3c 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -112,6 +112,8 @@ extern "C" {
#define PROMPT_CHAR '\\'
#define DEFAULT_DELIMITER ";"
+#define MAX_BATCH_BUFFER_SIZE (1024L * 1024L)
+
typedef struct st_status
{
int exit_status;
@@ -1035,7 +1037,7 @@ static void fix_history(String *final_command);
static COMMANDS *find_command(char *name,char cmd_name);
static bool add_line(String &buffer,char *line,char *in_string,
- bool *ml_comment);
+ bool *ml_comment, bool truncated);
static void remove_cntrl(String &buffer);
static void print_table_data(MYSQL_RES *result);
static void print_table_data_html(MYSQL_RES *result);
@@ -1117,7 +1119,7 @@ int main(int argc,char *argv[])
exit(1);
}
if (status.batch && !status.line_buff &&
- !(status.line_buff=batch_readline_init(opt_max_allowed_packet+512,stdin)))
+ !(status.line_buff= batch_readline_init(MAX_BATCH_BUFFER_SIZE, stdin)))
{
free_defaults(defaults_argv);
my_end(0);
@@ -1197,7 +1199,7 @@ int main(int argc,char *argv[])
#endif
sprintf(buff, "%s",
#ifndef NOT_YET
- "Type 'help;' or '\\h' for help. Type '\\c' to clear the buffer.\n");
+ "Type 'help;' or '\\h' for help. Type '\\c' to clear the current input statement.\n");
#else
"Type 'help [[%]function name[%]]' to get help on usage of function.\n");
#endif
@@ -1226,7 +1228,7 @@ sig_handler mysql_sigint(int sig)
goto err;
/* kill_buffer is always big enough because max length of %lu is 15 */
sprintf(kill_buffer, "KILL /*!50000 QUERY */ %lu", mysql_thread_id(&mysql));
- mysql_real_query(kill_mysql, kill_buffer, strlen(kill_buffer));
+ mysql_real_query(kill_mysql, kill_buffer, (uint) strlen(kill_buffer));
mysql_close(kill_mysql);
tee_fprintf(stdout, "Query aborted by Ctrl+C\n");
@@ -1766,13 +1768,14 @@ static int read_and_execute(bool interactive)
ulong line_number=0;
bool ml_comment= 0;
COMMANDS *com;
+ bool truncated= 0;
status.exit_status=1;
for (;;)
{
if (!interactive)
{
- line=batch_readline(status.line_buff);
+ line=batch_readline(status.line_buff, &truncated);
/*
Skip UTF8 Byte Order Marker (BOM) 0xEFBBBF.
Editors like "notepad" put this marker in
@@ -1891,7 +1894,7 @@ static int read_and_execute(bool interactive)
#endif
continue;
}
- if (add_line(glob_buffer,line,&in_string,&ml_comment))
+ if (add_line(glob_buffer,line,&in_string,&ml_comment, truncated))
break;
}
/* if in batch mode, send last query even if it doesn't end with \g or go */
@@ -1977,7 +1980,7 @@ static COMMANDS *find_command(char *name,char cmd_char)
static bool add_line(String &buffer,char *line,char *in_string,
- bool *ml_comment)
+ bool *ml_comment, bool truncated)
{
uchar inchar;
char buff[80], *pos, *out;
@@ -2224,9 +2227,10 @@ static bool add_line(String &buffer,char *line,char *in_string,
{
uint length=(uint) (out-line);
- if (length < 9 ||
- my_strnncoll (charset_info,
- (uchar *)line, 9, (const uchar *) "delimiter", 9))
+ if (!truncated &&
+ (length < 9 ||
+ my_strnncoll (charset_info,
+ (uchar *)line, 9, (const uchar *) "delimiter", 9)))
{
/*
Don't add a new line in case there's a DELIMITER command to be
@@ -2639,7 +2643,7 @@ static void get_current_db()
(res= mysql_use_result(&mysql)))
{
MYSQL_ROW row= mysql_fetch_row(res);
- if (row[0])
+ if (row && row[0])
current_db= my_strdup(row[0], MYF(MY_WME));
mysql_free_result(res);
}
@@ -3463,7 +3467,7 @@ static void print_warnings()
/* Get the warnings */
query= "show warnings";
- mysql_real_query_for_lazy(query, strlen(query));
+ mysql_real_query_for_lazy(query, (uint) strlen(query));
mysql_store_result_for_lazy(&result);
/* Bail out when no warnings */
@@ -3886,7 +3890,7 @@ static int com_source(String *buffer, char *line)
return put_info(buff, INFO_ERROR, 0);
}
- if (!(line_buff=batch_readline_init(opt_max_allowed_packet+512,sql_file)))
+ if (!(line_buff= batch_readline_init(MAX_BATCH_BUFFER_SIZE, sql_file)))
{
my_fclose(sql_file,MYF(0));
return put_info("Can't initialize batch_readline", INFO_ERROR, 0);
@@ -4343,7 +4347,8 @@ server_version_string(MYSQL *con)
MYSQL_ROW cur = mysql_fetch_row(result);
if (cur && cur[0])
{
- bufp = strxnmov(bufp, sizeof buf - (bufp - buf), " ", cur[0], NullS);
+ bufp = strxnmov(bufp, (uint) (sizeof buf - (bufp - buf)), " ", cur[0],
+ NullS);
}
mysql_free_result(result);
}
diff --git a/client/mysql_upgrade.c b/client/mysql_upgrade.c
index 74e8c9dd577..e3500c81fb9 100644
--- a/client/mysql_upgrade.c
+++ b/client/mysql_upgrade.c
@@ -429,7 +429,7 @@ static int run_query(const char *query, DYNAMIC_STRING *ds_res,
MYF(MY_WME))) < 0)
die("Failed to create temporary file for defaults");
- if (my_write(fd, query, strlen(query),
+ if (my_write(fd, query, (uint) strlen(query),
MYF(MY_FNABP | MY_WME)))
{
my_close(fd, MYF(0));
diff --git a/client/mysqladmin.cc b/client/mysqladmin.cc
index 54f67c5df2d..24b95be8626 100644
--- a/client/mysqladmin.cc
+++ b/client/mysqladmin.cc
@@ -844,7 +844,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
bool old= (find_type(argv[0], &command_typelib, 2) ==
ADMIN_OLD_PASSWORD);
#ifdef __WIN__
- uint pw_len= strlen(pw);
+ uint pw_len= (uint) strlen(pw);
if (pw_len > 1 && pw[0] == '\'' && pw[pw_len-1] == '\'')
printf("Warning: single quotes were not trimmed from the password by"
" your command\nline client, as you might have expected.\n");
diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc
index f0a4c8d2abf..ed072902730 100644
--- a/client/mysqlbinlog.cc
+++ b/client/mysqlbinlog.cc
@@ -105,7 +105,7 @@ static MYSQL* safe_connect();
class Load_log_processor
{
char target_dir_name[FN_REFLEN];
- int target_dir_name_len;
+ size_t target_dir_name_len;
/*
When we see first event corresponding to some LOAD DATA statement in
@@ -275,7 +275,7 @@ File Load_log_processor::prepare_new_file_for_old_format(Load_log_event *le,
File file;
fn_format(filename, le->fname, target_dir_name, "", 1);
- len= strlen(filename);
+ len= (uint) strlen(filename);
tail= filename + len;
if ((file= create_unique_file(filename,tail)) < 0)
@@ -284,7 +284,7 @@ File Load_log_processor::prepare_new_file_for_old_format(Load_log_event *le,
return -1;
}
- le->set_fname_outside_temp_buf(filename,len+strlen(tail));
+ le->set_fname_outside_temp_buf(filename,len+(uint) strlen(tail));
return file;
}
@@ -369,7 +369,7 @@ int Load_log_processor::process_first_event(const char *bname, uint blen,
uint file_id,
Create_file_log_event *ce)
{
- uint full_len= target_dir_name_len + blen + 9 + 9 + 1;
+ size_t full_len= target_dir_name_len + blen + 9 + 9 + 1;
int error= 0;
char *fname, *ptr;
File file;
@@ -403,7 +403,7 @@ int Load_log_processor::process_first_event(const char *bname, uint blen,
}
if (ce)
- ce->set_fname_outside_temp_buf(fname, strlen(fname));
+ ce->set_fname_outside_temp_buf(fname, (uint) strlen(fname));
if (my_write(file, (byte*)block, block_len, MYF(MY_WME|MY_NABP)))
error= -1;
@@ -416,7 +416,7 @@ int Load_log_processor::process_first_event(const char *bname, uint blen,
int Load_log_processor::process(Create_file_log_event *ce)
{
const char *bname= ce->fname + dirname_length(ce->fname);
- uint blen= ce->fname_len - (bname-ce->fname);
+ uint blen= (uint) (ce->fname_len - (bname-ce->fname));
return process_first_event(bname, blen, ce->block, ce->block_len,
ce->file_id, ce);
@@ -864,7 +864,7 @@ static my_time_t convert_str_to_timestamp(const char* str)
long dummy_my_timezone;
my_bool dummy_in_dst_time_gap;
/* We require a total specification (date AND time) */
- if (str_to_datetime(str, strlen(str), &l_time, 0, &was_cut) !=
+ if (str_to_datetime(str, (uint) strlen(str), &l_time, 0, &was_cut) !=
MYSQL_TIMESTAMP_DATETIME || was_cut)
{
fprintf(stderr, "Incorrect date and time argument: %s\n", str);
@@ -1109,7 +1109,7 @@ could be out of memory");
int4store(buf, (uint32)start_position);
int2store(buf + BIN_LOG_HEADER_SIZE, binlog_flags);
- size_s tlen = strlen(logname);
+ size_t tlen= strlen(logname);
if (tlen > UINT_MAX)
{
fprintf(stderr,"Log name too long\n");
diff --git a/client/mysqlcheck.c b/client/mysqlcheck.c
index 513d1974ed0..15922e672a6 100644
--- a/client/mysqlcheck.c
+++ b/client/mysqlcheck.c
@@ -328,7 +328,7 @@ static int get_options(int *argc, char ***argv)
if (!what_to_do)
{
- int pnlen = strlen(my_progname);
+ size_t pnlen= strlen(my_progname);
if (pnlen < 6) /* name too short */
what_to_do = DO_CHECK;
@@ -414,7 +414,8 @@ static int process_selected_tables(char *db, char **table_names, int tables)
space is for more readable output in logs and in case of error
*/
char *table_names_comma_sep, *end;
- int i, tot_length = 0;
+ size_t tot_length= 0;
+ int i= 0;
for (i = 0; i < tables; i++)
tot_length+= fixed_name_length(*(table_names + i)) + 2;
@@ -430,7 +431,7 @@ static int process_selected_tables(char *db, char **table_names, int tables)
*end++= ',';
}
*--end = 0;
- handle_request_for_tables(table_names_comma_sep + 1, tot_length - 1);
+ handle_request_for_tables(table_names_comma_sep + 1, (uint) (tot_length - 1));
my_free(table_names_comma_sep, MYF(0));
}
else
@@ -452,7 +453,7 @@ static uint fixed_name_length(const char *name)
else if (*p == '.')
extra_length+= 2;
}
- return (p - name) + extra_length;
+ return (uint) ((p - name) + extra_length);
}
diff --git a/client/mysqldump.c b/client/mysqldump.c
index 97e8d6ed5ef..a9d2788de05 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000 MySQL AB
+/* Copyright 2000-2008 MySQL AB, 2009 Sun Microsystems, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -662,7 +662,7 @@ static void free_table_ent(char *key)
byte* get_table_key(const char *entry, uint *length,
my_bool not_used __attribute__((unused)))
{
- *length= strlen(entry);
+ *length= (uint) strlen(entry);
return (byte*) entry;
}
@@ -778,7 +778,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
opt_set_charset= 0;
opt_compatible_mode_str= argument;
opt_compatible_mode= find_set(&compatible_mode_typelib,
- argument, strlen(argument),
+ argument, (uint) strlen(argument),
&err_ptr, &err_len);
if (err_len)
{
@@ -791,7 +791,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
uint size_for_sql_mode= 0;
const char **ptr;
for (ptr= compatible_mode_names; *ptr; ptr++)
- size_for_sql_mode+= strlen(*ptr);
+ size_for_sql_mode+= (uint) strlen(*ptr);
size_for_sql_mode+= sizeof(compatible_mode_names)-1;
DBUG_ASSERT(sizeof(compatible_mode_normal_str)>=size_for_sql_mode);
}
@@ -1039,7 +1039,7 @@ static int switch_character_set_results(MYSQL *mysql, const char *cs_name)
"SET SESSION character_set_results = '%s'",
(const char *) cs_name);
- return mysql_real_query(mysql, query_buffer, query_length);
+ return mysql_real_query(mysql, query_buffer, (uint) query_length);
}
@@ -1372,7 +1372,8 @@ static void print_xml_tag(FILE * xml_file, const char* sbeg,
fputs(attribute_name, xml_file);
fputc('\"', xml_file);
- print_quoted_xml(xml_file, attribute_value, strlen(attribute_value));
+ print_quoted_xml(xml_file, attribute_value,
+ (uint) strlen(attribute_value));
fputc('\"', xml_file);
attribute_name= va_arg(arg_list, char *);
@@ -1412,7 +1413,7 @@ static void print_xml_null_tag(FILE * xml_file, const char* sbeg,
fputs("<", xml_file);
fputs(stag_atr, xml_file);
fputs("\"", xml_file);
- print_quoted_xml(xml_file, sval, strlen(sval));
+ print_quoted_xml(xml_file, sval, (uint) strlen(sval));
fputs("\" xsi:nil=\"true\" />", xml_file);
fputs(line_end, xml_file);
check_io(xml_file);
@@ -1510,7 +1511,7 @@ static uint dump_routines_for_db(char *db)
DBUG_ENTER("dump_routines_for_db");
DBUG_PRINT("enter", ("db: '%s'", db));
- mysql_real_escape_string(mysql, db_name_buff, db, strlen(db));
+ mysql_real_escape_string(mysql, db_name_buff, db, (uint) strlen(db));
/* nice comments */
if (opt_comments)
@@ -1602,13 +1603,13 @@ static uint dump_routines_for_db(char *db)
Allocate memory for new query string: original string
from SHOW statement and version-specific comments.
*/
- query_str= alloc_query_str(strlen(row[2]) + 23);
+ query_str= alloc_query_str((uint) strlen(row[2]) + 23);
query_str_tail= strnmov(query_str, row[2],
- definer_begin - row[2]);
+ (uint) (definer_begin - row[2]));
query_str_tail= strmov(query_str_tail, "*/ /*!50020");
query_str_tail= strnmov(query_str_tail, definer_begin,
- definer_end - definer_begin);
+ (uint) (definer_end - definer_begin));
query_str_tail= strxmov(query_str_tail, "*/ /*!50003",
definer_end, NullS);
}
@@ -2217,7 +2218,7 @@ static void dump_triggers_for_table(char *table,
char host_name_str[HOSTNAME_LENGTH + 1];
char quoted_host_name_str[HOSTNAME_LENGTH * 2 + 3];
- parse_user(row[7], strlen(row[7]), user_name_str, &user_name_len,
+ parse_user(row[7], (uint) strlen(row[7]), user_name_str, &user_name_len,
host_name_str, &host_name_len);
fprintf(sql_file,
@@ -3055,7 +3056,7 @@ static int dump_all_tables_in_db(char *database)
while ((table= getTableName(0)))
{
char *end= strmov(afterdot, table);
- if (include_table(hash_key, end - hash_key))
+ if (include_table(hash_key, (uint) (end - hash_key)))
{
dump_table(table,database);
my_free(order_by, MYF(MY_ALLOW_ZERO_PTR));
@@ -3104,6 +3105,11 @@ static my_bool dump_all_views_in_db(char *database)
char *table;
uint numrows;
char table_buff[NAME_LEN*2+3];
+ char hash_key[2*NAME_LEN+2]; /* "db.tablename" */
+ char *afterdot;
+
+ afterdot= strmov(hash_key, database);
+ *afterdot++= '.';
if (init_dumping(database, init_dumping_views))
return 1;
@@ -3113,10 +3119,15 @@ static my_bool dump_all_views_in_db(char *database)
{
DYNAMIC_STRING query;
init_dynamic_string_checked(&query, "LOCK TABLES ", 256, 1024);
- for (numrows= 0 ; (table= getTableName(1)); numrows++)
+ for (numrows= 0 ; (table= getTableName(1)); )
{
- dynstr_append_checked(&query, quote_name(table, table_buff, 1));
- dynstr_append_checked(&query, " READ /*!32311 LOCAL */,");
+ char *end= strmov(afterdot, table);
+ if (include_table((uchar*) hash_key,end - hash_key))
+ {
+ numrows++;
+ dynstr_append_checked(&query, quote_name(table, table_buff, 1));
+ dynstr_append_checked(&query, " READ /*!32311 LOCAL */,");
+ }
}
if (numrows && mysql_real_query(mysql, query.str, query.length-1))
DB_error(mysql, "when using LOCK TABLES");
@@ -3130,7 +3141,11 @@ static my_bool dump_all_views_in_db(char *database)
/* We shall continue here, if --force was given */
}
while ((table= getTableName(0)))
- get_view_structure(table, database);
+ {
+ char *end= strmov(afterdot, table);
+ if (include_table((uchar*) hash_key, end - hash_key))
+ get_view_structure(table, database);
+ }
if (opt_xml)
{
fputs("</database>\n", md_result_file);
@@ -3200,7 +3215,7 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
DBUG_ENTER("dump_selected_tables");
if (init_dumping(db, init_dumping_tables))
- return 1;
+ DBUG_RETURN(1);
init_alloc_root(&root, 8192, 0);
if (!(dump_tables= pos= (char**) alloc_root(&root, tables * sizeof(char *))))
@@ -3562,7 +3577,8 @@ 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 (!opt_no_data &&
- (!strcmp(table_type,"MRG_MyISAM") || !strcmp(table_type,"MRG_ISAM")))
+ (!strcmp(table_type,"MRG_MyISAM") || !strcmp(table_type,"MRG_ISAM") ||
+ !strcmp(table_type,"FEDERATED")))
result= IGNORE_DATA;
}
mysql_free_result(res);
@@ -3623,7 +3639,7 @@ static char *primary_key_fields(const char *table_name)
do
{
quoted_field= quote_name(row[4], buff, 0);
- result_length+= strlen(quoted_field) + 1; /* + 1 for ',' or \0 */
+ result_length+= (uint) strlen(quoted_field) + 1; /* + 1 for ',' or \0 */
} while ((row= mysql_fetch_row(res)) && atoi(row[3]) > 1);
}
@@ -3683,7 +3699,8 @@ static int replace(DYNAMIC_STRING *ds_str,
return 1;
init_dynamic_string_checked(&ds_tmp, "",
ds_str->length + replace_len, 256);
- dynstr_append_mem_checked(&ds_tmp, ds_str->str, start - ds_str->str);
+ dynstr_append_mem_checked(&ds_tmp, ds_str->str,
+ (uint) (start - ds_str->str));
dynstr_append_mem_checked(&ds_tmp, replace_str, replace_len);
dynstr_append_checked(&ds_tmp, start + search_len);
dynstr_set_checked(ds_str, ds_tmp.str);
diff --git a/client/mysqlmanager-pwgen.c b/client/mysqlmanager-pwgen.c
index 7a857c59743..568358b1cda 100644
--- a/client/mysqlmanager-pwgen.c
+++ b/client/mysqlmanager-pwgen.c
@@ -134,7 +134,6 @@ void get_pass(char* pw, int len)
int main(int argc, char** argv)
{
FILE* fp;
- my_MD5_CTX context;
uchar digest[16];
char pw[17];
uint i;
@@ -147,9 +146,7 @@ int main(int argc, char** argv)
if (!(fp=fopen(outfile,"w")))
die("Could not open '%s'(errno=%d)",outfile,errno);
get_pass(pw,sizeof(pw)-1);
- my_MD5Init(&context);
- my_MD5Update(&context,(uchar*) pw,sizeof(pw)-1);
- my_MD5Final(digest,&context);
+ MY_MD5_HASH(digest,(uchar*) pw,sizeof(pw)-1);
fprintf(fp,"%s:",user);
for (i=0;i<sizeof(digest);i++)
fprintf(fp,"%02x",digest[i]);
diff --git a/client/mysqltest.c b/client/mysqltest.c
index d7fbb6f1f18..312012d7b8d 100644
--- a/client/mysqltest.c
+++ b/client/mysqltest.c
@@ -801,7 +801,7 @@ void check_command_args(struct st_command *command,
ptr++;
if (ptr > start)
{
- init_dynamic_string(arg->ds, 0, ptr-start, 32);
+ init_dynamic_string(arg->ds, 0, (uint) (ptr - start), 32);
do_eval(arg->ds, start, ptr, FALSE);
}
else
@@ -1156,16 +1156,16 @@ void warning_msg(const char *fmt, ...)
len= my_snprintf(buff, sizeof(buff), "in included file %s ",
cur_file->file_name);
dynstr_append_mem(&ds_warning_messages,
- buff, len);
+ buff, (uint) len);
}
len= my_snprintf(buff, sizeof(buff), "at line %d: ",
start_lineno);
dynstr_append_mem(&ds_warning_messages,
- buff, len);
+ buff, (uint) len);
}
len= my_vsnprintf(buff, sizeof(buff), fmt, args);
- dynstr_append_mem(&ds_warning_messages, buff, len);
+ dynstr_append_mem(&ds_warning_messages, buff, (uint) len);
dynstr_append(&ds_warning_messages, "\n");
va_end(args);
@@ -1185,7 +1185,7 @@ void log_msg(const char *fmt, ...)
len= my_vsnprintf(buff, sizeof(buff)-1, fmt, args);
va_end(args);
- dynstr_append_mem(&ds_res, buff, len);
+ dynstr_append_mem(&ds_res, buff, (uint) len);
dynstr_append(&ds_res, "\n");
DBUG_VOID_RETURN;
@@ -1222,7 +1222,7 @@ void cat_file(DYNAMIC_STRING* ds, const char* filename)
/* Add fake newline instead of cr and output the line */
*p= '\n';
p++; /* Step past the "fake" newline */
- dynstr_append_mem(ds, start, p-start);
+ dynstr_append_mem(ds, start, (uint) (p - start));
p++; /* Step past the "fake" newline */
start= p;
}
@@ -1230,7 +1230,7 @@ void cat_file(DYNAMIC_STRING* ds, const char* filename)
p++;
}
/* Output any chars that migh be left */
- dynstr_append_mem(ds, start, p-start);
+ dynstr_append_mem(ds, start, (uint) (p - start));
}
my_close(fd, MYF(0));
}
@@ -1770,9 +1770,9 @@ VAR *var_init(VAR *v, const char *name, int name_len, const char *val,
int val_alloc_len;
VAR *tmp_var;
if (!name_len && name)
- name_len = strlen(name);
+ name_len = (uint) strlen(name);
if (!val_len && val)
- val_len = strlen(val) ;
+ val_len = (uint) strlen(val) ;
val_alloc_len = val_len + 16; /* room to grow */
if (!(tmp_var=v) && !(tmp_var = (VAR*)my_malloc(sizeof(*tmp_var)
+ name_len+1, MYF(MY_WME))))
@@ -1815,7 +1815,7 @@ VAR* var_from_env(const char *name, const char *def_val)
if (!(tmp = getenv(name)))
tmp = def_val;
- v = var_init(0, name, strlen(name), tmp, strlen(tmp));
+ v = var_init(0, name, (uint) strlen(name), tmp, (uint) strlen(tmp));
my_hash_insert(&var_hash, (byte*)v);
return v;
}
@@ -1864,7 +1864,7 @@ VAR* var_get(const char *var_name, const char **var_name_end, my_bool raw,
{
sprintf(v->str_val, "%d", v->int_val);
v->int_dirty = 0;
- v->str_val_len = strlen(v->str_val);
+ v->str_val_len = (uint) strlen(v->str_val);
}
if (var_name_end)
*var_name_end = var_name ;
@@ -1927,7 +1927,7 @@ void var_set(const char *var_name, const char *var_name_end,
{
sprintf(v->str_val, "%d", v->int_val);
v->int_dirty= 0;
- v->str_val_len= strlen(v->str_val);
+ v->str_val_len= (uint) strlen(v->str_val);
}
my_snprintf(buf, sizeof(buf), "%.*s=%.*s",
v->name_len, v->name,
@@ -2006,7 +2006,7 @@ void var_query_set(VAR *var, const char *query, const char** query_end)
++query;
/* Eval the query, thus replacing all environment variables */
- init_dynamic_string(&ds_query, 0, (end - query) + 32, 256);
+ init_dynamic_string(&ds_query, 0, (uint) ((end - query) + 32), 256);
do_eval(&ds_query, query, end, FALSE);
if (mysql_real_query(mysql, ds_query.str, ds_query.length))
@@ -2223,7 +2223,7 @@ void eval_expr(VAR *v, const char *p, const char **p_end)
struct st_command command;
memset(&command, 0, sizeof(command));
command.query= (char*)p;
- command.first_word_len= len;
+ command.first_word_len= (uint) len;
command.first_argument= command.query + len;
command.end= (char*)*p_end;
var_set_query_get_value(&command, v);
@@ -2413,7 +2413,7 @@ static int replace(DYNAMIC_STRING *ds_str,
return 1;
init_dynamic_string(&ds_tmp, "",
ds_str->length + replace_len, 256);
- dynstr_append_mem(&ds_tmp, ds_str->str, start - ds_str->str);
+ dynstr_append_mem(&ds_tmp, ds_str->str, (uint) (start - ds_str->str));
dynstr_append_mem(&ds_tmp, replace_str, replace_len);
dynstr_append(&ds_tmp, start + search_len);
dynstr_set(ds_str, ds_tmp.str);
@@ -2468,7 +2468,7 @@ void do_exec(struct st_command *command)
if (builtin_echo[0] && strncmp(cmd, "echo", 4) == 0)
{
/* Replace echo with our "builtin" echo */
- replace(&ds_cmd, "echo", 4, builtin_echo, strlen(builtin_echo));
+ replace(&ds_cmd, "echo", 4, builtin_echo, (uint) strlen(builtin_echo));
}
#ifdef __WIN__
@@ -4627,7 +4627,7 @@ void do_delimiter(struct st_command* command)
die("Can't set empty delimiter");
strmake(delimiter, p, sizeof(delimiter) - 1);
- delimiter_length= strlen(delimiter);
+ delimiter_length= (uint) strlen(delimiter);
DBUG_PRINT("exit", ("delimiter: %s", delimiter));
command->last_argument= p + delimiter_length;
@@ -4753,9 +4753,11 @@ int read_line(char *buf, int size)
}
else if ((c == '{' &&
(!my_strnncoll_simple(charset_info, (const uchar*) "while", 5,
- (uchar*) buf, min(5, p - buf), 0) ||
+ (uchar*) buf, min(5, (uint) (p - buf)),
+ 0) ||
!my_strnncoll_simple(charset_info, (const uchar*) "if", 2,
- (uchar*) buf, min(2, p - buf), 0))))
+ (uchar*) buf, min(2, (uint) (p - buf)),
+ 0))))
{
/* Only if and while commands can be terminated by { */
*p++= c;
@@ -5117,7 +5119,7 @@ int read_command(struct st_command** command_ptr)
command->first_argument= p;
command->end= strend(command->query);
- command->query_len= (command->end - command->query);
+ command->query_len= (uint) (command->end - command->query);
parser.read_lines++;
DBUG_RETURN(0);
}
@@ -6459,7 +6461,7 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
else
{
query = command->query;
- query_len = strlen(query);
+ query_len = (uint) strlen(query);
}
/*
@@ -6520,7 +6522,7 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
*/
view_created= 1;
query= (char*)"SELECT * FROM mysqltest_tmp_v";
- query_len = strlen(query);
+ query_len = (uint) strlen(query);
/*
Collect warnings from create of the view that should otherwise
@@ -6568,7 +6570,7 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
sp_created= 1;
query= (char*)"CALL mysqltest_tmp_sp()";
- query_len = strlen(query);
+ query_len = (uint) strlen(query);
}
dynstr_free(&query_str);
}
@@ -6661,9 +6663,9 @@ void init_re_comp(my_regex_t *re, const char* str)
if (err)
{
char erbuf[100];
- int len= my_regerror(err, re, erbuf, sizeof(erbuf));
+ size_t len= my_regerror(err, re, erbuf, sizeof(erbuf));
die("error %s, %d/%d `%s'\n",
- re_eprint(err), len, (int)sizeof(erbuf), erbuf);
+ re_eprint(err), (int)len, (int)sizeof(erbuf), erbuf);
}
}
@@ -6717,9 +6719,9 @@ int match_re(my_regex_t *re, char *str)
{
char erbuf[100];
- int len= my_regerror(err, re, erbuf, sizeof(erbuf));
+ size_t len= my_regerror(err, re, erbuf, sizeof(erbuf));
die("error %s, %d/%d `%s'\n",
- re_eprint(err), len, (int)sizeof(erbuf), erbuf);
+ re_eprint(err), (int)len, (int)sizeof(erbuf), erbuf);
}
return 0;
}
@@ -7579,7 +7581,7 @@ void replace_strings_append(REPLACE *rep, DYNAMIC_STRING* ds,
if (!(rep_str = ((REPLACE_STRING*) rep_pos))->replace_string)
{
/* No match found */
- dynstr_append_mem(ds, start, from - start - 1);
+ dynstr_append_mem(ds, start, (uint) (from - start - 1));
DBUG_PRINT("exit", ("Found no more string to replace, appended: %s", start));
DBUG_VOID_RETURN;
}
@@ -7590,11 +7592,11 @@ void replace_strings_append(REPLACE *rep, DYNAMIC_STRING* ds,
rep_str->from_offset, rep_str->replace_string));
/* Append part of original string before replace string */
- dynstr_append_mem(ds, start, (from - rep_str->to_offset) - start);
+ dynstr_append_mem(ds, start, (uint) ((from - rep_str->to_offset) - start));
/* Append replace string */
dynstr_append_mem(ds, rep_str->replace_string,
- strlen(rep_str->replace_string));
+ (uint) strlen(rep_str->replace_string));
if (!*(from-=rep_str->from_offset) && rep_pos->found != 2)
{
@@ -7689,7 +7691,7 @@ struct st_replace_regex* init_replace_regex(char* expr)
char* buf,*expr_end;
char* p;
char* buf_p;
- uint expr_len= strlen(expr);
+ size_t expr_len= strlen(expr);
char last_c = 0;
struct st_regex reg;
@@ -7866,7 +7868,7 @@ void free_replace_regex()
*/
#define SECURE_REG_BUF if (buf_len < need_buf_len) \
{ \
- int off= res_p - buf; \
+ size_t off= res_p - buf; \
buf= (char*)my_realloc(buf,need_buf_len,MYF(MY_WME+MY_FAE)); \
res_p= buf + off; \
buf_len= need_buf_len; \
@@ -7898,7 +7900,7 @@ int reg_replace(char** buf_p, int* buf_len_p, char *pattern,
char *res_p,*str_p,*str_end;
buf_len= *buf_len_p;
- len= strlen(string);
+ len= (uint) strlen(string);
str_end= string + len;
/* start with a buffer of a reasonable size that hopefully will not
@@ -7950,7 +7952,7 @@ int reg_replace(char** buf_p, int* buf_len_p, char *pattern,
we need at least what we have so far in the buffer + the part
before this match
*/
- need_buf_len= (res_p - buf) + (int) subs[0].rm_so;
+ need_buf_len= (uint) (res_p - buf) + (int) subs[0].rm_so;
/* on this pass, calculate the memory for the result buffer */
while (expr_p < replace_end)
@@ -8040,8 +8042,8 @@ int reg_replace(char** buf_p, int* buf_len_p, char *pattern,
}
else /* no match this time, just copy the string as is */
{
- int left_in_str= str_end-str_p;
- need_buf_len= (res_p-buf) + left_in_str;
+ size_t left_in_str= str_end-str_p;
+ need_buf_len= (uint) ((res_p-buf) + left_in_str);
SECURE_REG_BUF
memcpy(res_p,str_p,left_in_str);
res_p += left_in_str;
@@ -8708,7 +8710,7 @@ void replace_dynstr_append_mem(DYNAMIC_STRING *ds,
if (!multi_reg_replace(glob_replace_regex, (char*)val))
{
val= glob_replace_regex->buf;
- len= strlen(val);
+ len= (uint) strlen(val);
}
}
@@ -8725,7 +8727,7 @@ void replace_dynstr_append_mem(DYNAMIC_STRING *ds,
/* Append zero-terminated string to ds, with optional replace */
void replace_dynstr_append(DYNAMIC_STRING *ds, const char *val)
{
- replace_dynstr_append_mem(ds, val, strlen(val));
+ replace_dynstr_append_mem(ds, val, (uint) strlen(val));
}
/* Append uint to ds, with optional replace */
@@ -8733,7 +8735,7 @@ void replace_dynstr_append_uint(DYNAMIC_STRING *ds, uint val)
{
char buff[22]; /* This should be enough for any int */
char *end= longlong10_to_str(val, buff, 10);
- replace_dynstr_append_mem(ds, buff, end - buff);
+ replace_dynstr_append_mem(ds, buff, (uint) (end - buff));
}
@@ -8771,7 +8773,7 @@ void dynstr_append_sorted(DYNAMIC_STRING* ds, DYNAMIC_STRING *ds_input)
while (*start && *start != '\n')
start++;
start++; /* Skip past \n */
- dynstr_append_mem(ds, ds_input->str, start - ds_input->str);
+ dynstr_append_mem(ds, ds_input->str, (uint) (start - ds_input->str));
/* Insert line(s) in array */
while (*start)
diff --git a/client/readline.cc b/client/readline.cc
index ad42ed2ee10..726d9cd9415 100644
--- a/client/readline.cc
+++ b/client/readline.cc
@@ -24,7 +24,7 @@ static bool init_line_buffer(LINE_BUFFER *buffer,File file,ulong size,
ulong max_size);
static bool init_line_buffer_from_string(LINE_BUFFER *buffer,my_string str);
static uint fill_buffer(LINE_BUFFER *buffer);
-static char *intern_read_line(LINE_BUFFER *buffer,ulong *out_length);
+static char *intern_read_line(LINE_BUFFER *buffer, ulong *out_length, bool *truncated);
LINE_BUFFER *batch_readline_init(ulong max_size,FILE *file)
@@ -42,12 +42,13 @@ LINE_BUFFER *batch_readline_init(ulong max_size,FILE *file)
}
-char *batch_readline(LINE_BUFFER *line_buff)
+char *batch_readline(LINE_BUFFER *line_buff, bool *truncated)
{
char *pos;
ulong out_length;
+ DBUG_ASSERT(truncated != NULL);
- if (!(pos=intern_read_line(line_buff,&out_length)))
+ if (!(pos=intern_read_line(line_buff,&out_length, truncated)))
return 0;
if (out_length && pos[out_length-1] == '\n')
if (--out_length && pos[out_length-1] == '\r') /* Remove '\n' */
@@ -149,6 +150,14 @@ static uint fill_buffer(LINE_BUFFER *buffer)
read_count=(buffer->bufread - bufbytes)/IO_SIZE;
if ((read_count*=IO_SIZE))
break;
+ if (buffer->bufread * 2 > buffer->max_size)
+ {
+ /*
+ So we must grow the buffer but we cannot due to the max_size limit.
+ Return 0 w/o setting buffer->eof to signal this condition.
+ */
+ return 0;
+ }
buffer->bufread *= 2;
if (!(buffer->buffer = (char*) my_realloc(buffer->buffer,
buffer->bufread+1,
@@ -172,11 +181,15 @@ static uint fill_buffer(LINE_BUFFER *buffer)
DBUG_PRINT("fill_buff", ("Got %d bytes", read_count));
- /* Kludge to pretend every nonempty file ends with a newline. */
- if (!read_count && bufbytes && buffer->end[-1] != '\n')
+ if (!read_count)
{
- buffer->eof = read_count = 1;
- *buffer->end = '\n';
+ buffer->eof = 1;
+ /* Kludge to pretend every nonempty file ends with a newline. */
+ if (bufbytes && buffer->end[-1] != '\n')
+ {
+ read_count = 1;
+ *buffer->end = '\n';
+ }
}
buffer->end_of_line=(buffer->start_of_line=buffer->buffer)+bufbytes;
buffer->end+=read_count;
@@ -186,7 +199,7 @@ static uint fill_buffer(LINE_BUFFER *buffer)
-char *intern_read_line(LINE_BUFFER *buffer,ulong *out_length)
+char *intern_read_line(LINE_BUFFER *buffer, ulong *out_length, bool *truncated)
{
char *pos;
uint length;
@@ -200,14 +213,23 @@ char *intern_read_line(LINE_BUFFER *buffer,ulong *out_length)
pos++;
if (pos == buffer->end)
{
- if ((uint) (pos - buffer->start_of_line) < buffer->max_size)
+ /*
+ fill_buffer() can return 0 either on EOF in which case we abort
+ or when the internal buffer has hit the size limit. In the latter case
+ return what we have read so far and signal string truncation.
+ */
+ if (!(length=fill_buffer(buffer)) || length == (uint) -1)
{
- if (!(length=fill_buffer(buffer)) || length == (uint) -1)
- DBUG_RETURN(0);
- continue;
+ if (buffer->eof)
+ DBUG_RETURN(0);
}
+ else
+ continue;
pos--; /* break line here */
+ *truncated= 1;
}
+ else
+ *truncated= 0;
buffer->end_of_line=pos+1;
*out_length=(ulong) (pos + 1 - buffer->eof - buffer->start_of_line);
DBUG_RETURN(buffer->start_of_line);
diff --git a/client/sql_string.cc b/client/sql_string.cc
index 321bddbf69a..4967538ad3b 100644
--- a/client/sql_string.cc
+++ b/client/sql_string.cc
@@ -465,7 +465,7 @@ bool String::append(const char *s,uint32 arg_length)
bool String::append(const char *s)
{
- return append(s, strlen(s));
+ return append(s, (uint) strlen(s));
}
diff --git a/configure.in b/configure.in
index 8c2c4a9cf79..ed252d4fc46 100644
--- a/configure.in
+++ b/configure.in
@@ -7,7 +7,7 @@ AC_INIT(sql/mysqld.cc)
AC_CANONICAL_SYSTEM
# The Docs Makefile.am parses this line!
# remember to also change ndb version below and update version.c in ndb
-AM_INIT_AUTOMAKE(mysql, 5.0.79)
+AM_INIT_AUTOMAKE(mysql, 5.0.80)
AM_CONFIG_HEADER([include/config.h:config.h.in])
PROTOCOL_VERSION=10
@@ -23,7 +23,7 @@ NDB_SHARED_LIB_VERSION=$NDB_SHARED_LIB_MAJOR_VERSION:0:0
# ndb version
NDB_VERSION_MAJOR=5
NDB_VERSION_MINOR=0
-NDB_VERSION_BUILD=79
+NDB_VERSION_BUILD=80
NDB_VERSION_STATUS=""
# Set all version vars based on $VERSION. How do we do this more elegant ?
diff --git a/extra/comp_err.c b/extra/comp_err.c
index 79f591e45fb..8814a045f36 100644
--- a/extra/comp_err.c
+++ b/extra/comp_err.c
@@ -660,7 +660,7 @@ static ha_checksum checksum_format_specifier(const char* msg)
case 'u':
case 'x':
case 's':
- chksum= my_checksum(chksum, start, p-start);
+ chksum= my_checksum(chksum, start, (uint) (p - start));
start= 0; /* Not in format specifier anymore */
break;
diff --git a/extra/yassl/src/buffer.cpp b/extra/yassl/src/buffer.cpp
index 0c3f23b0cb8..66107dbe0a9 100644
--- a/extra/yassl/src/buffer.cpp
+++ b/extra/yassl/src/buffer.cpp
@@ -106,7 +106,7 @@ void input_buffer::add_size(uint i)
uint input_buffer::get_capacity() const
{
- return end_ - buffer_;
+ return (uint) (end_ - buffer_);
}
@@ -223,7 +223,7 @@ uint output_buffer::get_size() const
uint output_buffer::get_capacity() const
{
- return end_ - buffer_;
+ return (uint) (end_ - buffer_);
}
diff --git a/extra/yassl/src/cert_wrapper.cpp b/extra/yassl/src/cert_wrapper.cpp
index 5eacf9083f9..8caca8f9649 100644
--- a/extra/yassl/src/cert_wrapper.cpp
+++ b/extra/yassl/src/cert_wrapper.cpp
@@ -236,7 +236,7 @@ uint CertManager::get_privateKeyLength() const
int CertManager::Validate()
{
CertList::reverse_iterator last = peerList_.rbegin();
- int count = peerList_.size();
+ size_t count= peerList_.size();
while ( count > 1 ) {
TaoCrypt::Source source((*last)->get_buffer(), (*last)->get_length());
@@ -269,13 +269,13 @@ int CertManager::Validate()
else
peerKeyType_ = dsa_sa_algo;
- int iSz = strlen(cert.GetIssuer()) + 1;
- int sSz = strlen(cert.GetCommonName()) + 1;
- int bSz = strlen(cert.GetBeforeDate()) + 1;
- int aSz = strlen(cert.GetAfterDate()) + 1;
+ size_t iSz= strlen(cert.GetIssuer()) + 1;
+ size_t sSz= strlen(cert.GetCommonName()) + 1;
+ size_t bSz= strlen(cert.GetBeforeDate()) + 1;
+ size_t aSz= strlen(cert.GetAfterDate()) + 1;
peerX509_ = NEW_YS X509(cert.GetIssuer(), iSz, cert.GetCommonName(),
- sSz, cert.GetBeforeDate(), bSz,
- cert.GetAfterDate(), aSz);
+ sSz, cert.GetBeforeDate(), (int) bSz,
+ cert.GetAfterDate(), (int) aSz);
}
return 0;
}
diff --git a/extra/yassl/src/ssl.cpp b/extra/yassl/src/ssl.cpp
index f09a43be56e..781cfa36a70 100644
--- a/extra/yassl/src/ssl.cpp
+++ b/extra/yassl/src/ssl.cpp
@@ -604,13 +604,13 @@ char* X509_NAME_oneline(X509_NAME* name, char* buffer, int sz)
{
if (!name->GetName()) return buffer;
- int len = strlen(name->GetName()) + 1;
- int copySz = min(len, sz);
+ size_t len= strlen(name->GetName()) + 1;
+ int copySz = min((int) len, sz);
if (!buffer) {
buffer = (char*)malloc(len);
if (!buffer) return buffer;
- copySz = len;
+ copySz = (int) len;
}
if (copySz == 0)
diff --git a/extra/yassl/src/yassl_imp.cpp b/extra/yassl/src/yassl_imp.cpp
index b43d9c27355..4ee0fb99d3a 100644
--- a/extra/yassl/src/yassl_imp.cpp
+++ b/extra/yassl/src/yassl_imp.cpp
@@ -532,7 +532,7 @@ void Parameters::SetCipherNames()
for (int j = 0; j < suites; j++) {
int index = suites_[j*2 + 1]; // every other suite is suite id
- int len = strlen(cipher_names[index]) + 1;
+ size_t len = strlen(cipher_names[index]) + 1;
strncpy(cipher_list_[pos++], cipher_names[index], len);
}
cipher_list_[pos][0] = 0;
diff --git a/extra/yassl/src/yassl_int.cpp b/extra/yassl/src/yassl_int.cpp
index 0b6cb89e77e..ba8ee8f66ab 100644
--- a/extra/yassl/src/yassl_int.cpp
+++ b/extra/yassl/src/yassl_int.cpp
@@ -1034,7 +1034,7 @@ void SSL::fillData(Data& data)
{
if (GetError()) return;
uint dataSz = data.get_length(); // input, data size to fill
- uint elements = buffers_.getData().size();
+ size_t elements = buffers_.getData().size();
data.set_length(0); // output, actual data filled
dataSz = min(dataSz, bufferedData());
@@ -1064,7 +1064,7 @@ void SSL::PeekData(Data& data)
{
if (GetError()) return;
uint dataSz = data.get_length(); // input, data size to fill
- uint elements = buffers_.getData().size();
+ size_t elements = buffers_.getData().size();
data.set_length(0); // output, actual data filled
dataSz = min(dataSz, bufferedData());
@@ -1098,7 +1098,7 @@ void SSL::flushBuffer()
buffers_.getHandShake().end(),
SumBuffer()).total_;
output_buffer out(sz);
- uint elements = buffers_.getHandShake().size();
+ size_t elements = buffers_.getHandShake().size();
for (uint i = 0; i < elements; i++) {
output_buffer* front = buffers_.getHandShake().front();
@@ -1906,7 +1906,7 @@ bool SSL_CTX::SetCipherList(const char* list)
int idx = 0;
for(;;) {
- int len;
+ size_t len;
prev = haystack;
haystack = strstr(haystack, needle);
@@ -2354,10 +2354,10 @@ ASN1_STRING* X509_NAME::GetEntry(int i)
memcpy(entry_.data, &name_[i], sz_ - i);
if (entry_.data[sz_ -i - 1]) {
entry_.data[sz_ - i] = 0;
- entry_.length = sz_ - i;
+ entry_.length = (int) (sz_ - i);
}
else
- entry_.length = sz_ - i - 1;
+ entry_.length = (int) (sz_ - i - 1);
entry_.type = 0;
return &entry_;
diff --git a/extra/yassl/taocrypt/include/block.hpp b/extra/yassl/taocrypt/include/block.hpp
index 529a91eee08..bb34db5e07f 100644
--- a/extra/yassl/taocrypt/include/block.hpp
+++ b/extra/yassl/taocrypt/include/block.hpp
@@ -78,7 +78,7 @@ typename A::pointer StdReallocate(A& a, T* p, typename A::size_type oldSize,
if (preserve) {
A b = A();
typename A::pointer newPointer = b.allocate(newSize, 0);
- memcpy(newPointer, p, sizeof(T) * min(oldSize, newSize));
+ memcpy(newPointer, p, sizeof(T) * min((word32) oldSize, (word32) newSize));
a.deallocate(p, oldSize);
STL::swap(a, b);
return newPointer;
diff --git a/extra/yassl/taocrypt/src/algebra.cpp b/extra/yassl/taocrypt/src/algebra.cpp
index cb597c41552..c221ce3d6cb 100644
--- a/extra/yassl/taocrypt/src/algebra.cpp
+++ b/extra/yassl/taocrypt/src/algebra.cpp
@@ -288,7 +288,7 @@ void AbstractGroup::SimultaneousMultiply(Integer *results, const Integer &base,
r = buckets[i][buckets[i].size()-1];
if (buckets[i].size() > 1)
{
- for (int j = buckets[i].size()-2; j >= 1; j--)
+ for (int j= (unsigned int) (buckets[i].size()) - 2; j >= 1; j--)
{
Accumulate(buckets[i][j], buckets[i][j+1]);
Accumulate(r, buckets[i][j]);
diff --git a/extra/yassl/taocrypt/src/asn.cpp b/extra/yassl/taocrypt/src/asn.cpp
index a06ab658c7b..3b1c1c2136a 100644
--- a/extra/yassl/taocrypt/src/asn.cpp
+++ b/extra/yassl/taocrypt/src/asn.cpp
@@ -213,7 +213,7 @@ void PublicKey::AddToEnd(const byte* data, word32 len)
Signer::Signer(const byte* k, word32 kSz, const char* n, const byte* h)
: key_(k, kSz)
{
- int sz = strlen(n);
+ size_t sz = strlen(n);
memcpy(name_, n, sz);
name_[sz] = 0;
diff --git a/heap/hp_write.c b/heap/hp_write.c
index 19215fcf017..6aa34acf2c3 100644
--- a/heap/hp_write.c
+++ b/heap/hp_write.c
@@ -69,7 +69,7 @@ int heap_write(HP_INFO *info, const byte *record)
err:
if (my_errno == HA_ERR_FOUND_DUPP_KEY)
DBUG_PRINT("info",("Duplicate key: %d", (int) (keydef - share->keydef)));
- info->errkey= keydef - share->keydef;
+ info->errkey= (int) (keydef - share->keydef);
/*
We don't need to delete non-inserted key from rb-tree. Also, if
we got ENOMEM, the key wasn't inserted, so don't try to delete it
diff --git a/include/my_md5.h b/include/my_md5.h
index f92976b3beb..6458f27c5cc 100644
--- a/include/my_md5.h
+++ b/include/my_md5.h
@@ -13,80 +13,42 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+/* See md5.c for explanation and copyright information. */
-/* MD5.H - header file for MD5C.C
+/*
+ * $FreeBSD: src/contrib/cvs/lib/md5.h,v 1.2 1999/12/11 15:10:02 peter Exp $
*/
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
-rights reserved.
+/* Unlike previous versions of this code, uint32 need not be exactly
+ 32 bits, merely 32 bits or more. Choosing a data type which is 32
+ bits instead of 64 is not important; speed is considerably more
+ important. ANSI guarantees that "unsigned long" will be big enough,
+ and always using it seems to have few disadvantages. */
+typedef uint32 cvs_uint32;
-License to copy and use this software is granted provided that it
-is identified as the "RSA Data Security, Inc. MD5 Message-Digest
-Algorithm" in all material mentioning or referencing this software
-or this function.
-
-License is also granted to make and use derivative works provided
-that such works are identified as "derived from the RSA Data
-Security, Inc. MD5 Message-Digest Algorithm" in all material
-mentioning or referencing the derived work.
-
-RSA Data Security, Inc. makes no representations concerning either
-the merchantability of this software or the suitability of this
-software for any particular purpose. It is provided "as is"
-without express or implied warranty of any kind.
-
-These notices must be retained in any copies of any part of this
-documentation and/or software.
- */
-
-/* GLOBAL.H - RSAREF types and constants
- */
-
-/* PROTOTYPES should be set to one if and only if the compiler supports
- function argument prototyping.
-The following makes PROTOTYPES default to 0 if it has not already
- been defined with C compiler flags.
- */
-
-/* egcs 1.1.2 under linux didn't defined it.... :( */
-
-#ifndef PROTOTYPES
-#define PROTOTYPES 1 /* Assume prototypes */
-#endif
-
-/* POINTER defines a generic pointer type */
-typedef unsigned char *POINTER;
-
-/* UINT2 defines a two byte word */
-typedef uint16 UINT2; /* Fix for MySQL / Alpha */
-
-/* UINT4 defines a four byte word */
-typedef uint32 UINT4; /* Fix for MySQL / Alpha */
-
-/* PROTO_LIST is defined depending on how PROTOTYPES is defined above.
-If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it
- returns an empty list.
- */
-#if PROTOTYPES
-#define PROTO_LIST(list) list
-#else
-#define PROTO_LIST(list) ()
-#endif
-/* MD5 context. */
typedef struct {
- UINT4 state[4]; /* state (ABCD) */
- UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
- unsigned char buffer[64]; /* input buffer */
-} my_MD5_CTX;
+ cvs_uint32 buf[4];
+ cvs_uint32 bits[2];
+ unsigned char in[64];
+} my_MD5Context;
#ifdef __cplusplus
extern "C" {
#endif
- void my_MD5Init PROTO_LIST ((my_MD5_CTX *));
- void my_MD5Update PROTO_LIST
- ((my_MD5_CTX *, unsigned char *, unsigned int));
- void my_MD5Final PROTO_LIST ((unsigned char [16], my_MD5_CTX *));
+void my_MD5Init (my_MD5Context *context);
+void my_MD5Update (my_MD5Context *context,
+ unsigned char const *buf, unsigned len);
+void my_MD5Final (unsigned char digest[16],
+ my_MD5Context *context);
#ifdef __cplusplus
}
#endif
+
+#define MY_MD5_HASH(digest,buf,len) \
+do { \
+ my_MD5Context ctx; \
+ my_MD5Init (&ctx); \
+ my_MD5Update (&ctx, buf, len); \
+ my_MD5Final (digest, &ctx); \
+} while (0)
diff --git a/include/my_sys.h b/include/my_sys.h
index 5dc73bf84d9..35c4eb5f2b1 100644
--- a/include/my_sys.h
+++ b/include/my_sys.h
@@ -250,7 +250,7 @@ extern int NEAR my_umask, /* Default creation mask */
NEAR my_safe_to_handle_signal, /* Set when allowed to SIGTSTP */
NEAR my_dont_interrupt; /* call remember_intr when set */
extern my_bool NEAR mysys_uses_curses, my_use_symdir;
-extern ulong sf_malloc_cur_memory, sf_malloc_max_memory;
+extern size_t sf_malloc_cur_memory, sf_malloc_max_memory;
extern ulong my_default_record_cache_size;
extern my_bool NEAR my_disable_locking,NEAR my_disable_async_io,
@@ -636,6 +636,7 @@ extern int nt_share_delete(const char *name,myf MyFlags);
extern void TERMINATE(FILE *file);
#endif
extern void init_glob_errs(void);
+extern void wait_for_free_space(const char *filename, int errors);
extern FILE *my_fopen(const char *FileName,int Flags,myf MyFlags);
extern FILE *my_fdopen(File Filedes,const char *name, int Flags,myf MyFlags);
extern int my_fclose(FILE *fd,myf MyFlags);
diff --git a/innobase/include/pars0pars.h b/innobase/include/pars0pars.h
index 62a41a881e8..5c81e331487 100644
--- a/innobase/include/pars0pars.h
+++ b/innobase/include/pars0pars.h
@@ -484,7 +484,7 @@ struct for_node_struct{
definition */
que_node_t* loop_start_limit;/* initial value of loop variable */
que_node_t* loop_end_limit; /* end value of loop variable */
- int loop_end_value; /* evaluated value for the end value:
+ lint loop_end_value; /* evaluated value for the end value:
it is calculated only when the loop
is entered, and will not change within
the loop */
diff --git a/innobase/pars/pars0pars.c b/innobase/pars/pars0pars.c
index c62184abd85..562870b6bed 100644
--- a/innobase/pars/pars0pars.c
+++ b/innobase/pars/pars0pars.c
@@ -1679,8 +1679,8 @@ pars_get_lex_chars(
{
int len;
- len = pars_sym_tab_global->string_len
- - pars_sym_tab_global->next_char_pos;
+ len= (uint) (pars_sym_tab_global->string_len
+ - pars_sym_tab_global->next_char_pos);
if (len == 0) {
#ifdef YYDEBUG
/* fputs("SQL string ends\n", stderr); */
diff --git a/innobase/rem/rem0cmp.c b/innobase/rem/rem0cmp.c
index 6a463b7d4cf..a0c28e117ac 100644
--- a/innobase/rem/rem0cmp.c
+++ b/innobase/rem/rem0cmp.c
@@ -587,7 +587,7 @@ cmp_dtuple_rec_with_match(
dtuple_byte = cmp_collate(dtuple_byte);
}
- ret = dtuple_byte - rec_byte;
+ ret = (uint) (dtuple_byte - rec_byte);
if (UNIV_UNLIKELY(ret)) {
if (ret < 0) {
ret = -1;
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c
index 2a5e1cc657b..d18ed04e273 100644
--- a/libmysql/libmysql.c
+++ b/libmysql/libmysql.c
@@ -3552,7 +3552,7 @@ static void fetch_string_with_conversion(MYSQL_BIND *param, char *value,
*/
char *start= value + param->offset;
char *end= value + length;
- ulong copy_length;
+ size_t copy_length;
if (start < end)
{
copy_length= end - start;
@@ -3807,11 +3807,11 @@ static void fetch_float_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field,
if (field->flags & ZEROFILL_FLAG && length < field->length &&
field->length < MAX_DOUBLE_STRING_REP_LENGTH - 1)
{
- bmove_upp((char*) buff + field->length, buff + length, length);
+ bmove_upp((char*) buff + field->length, buff + length, (uint) length);
bfill((char*) buff, field->length - length, '0');
length= field->length;
}
- fetch_string_with_conversion(param, buff, length);
+ fetch_string_with_conversion(param, buff, (uint) length);
}
break;
diff --git a/libmysql/manager.c b/libmysql/manager.c
index 631bfa26cb2..3260ddcd685 100644
--- a/libmysql/manager.c
+++ b/libmysql/manager.c
@@ -159,7 +159,7 @@ MYSQL_MANAGER* STDCALL mysql_manager_connect(MYSQL_MANAGER* con,
goto err;
}
sprintf(msg_buf,"%-.16s %-.16s\n",user,passwd);
- msg_len=strlen(msg_buf);
+ msg_len= (uint) strlen(msg_buf);
if (my_net_write(&con->net,msg_buf,msg_len) || net_flush(&con->net))
{
con->last_errno=con->net.last_errno;
@@ -219,7 +219,7 @@ int STDCALL mysql_manager_command(MYSQL_MANAGER* con,const char* cmd,
int cmd_len)
{
if (!cmd_len)
- cmd_len=strlen(cmd);
+ cmd_len= (uint) strlen(cmd);
if (my_net_write(&con->net,(char*)cmd,cmd_len) || net_flush(&con->net))
{
con->last_errno=errno;
diff --git a/myisam/mi_check.c b/myisam/mi_check.c
index 4f8883f377e..285a31d34c6 100644
--- a/myisam/mi_check.c
+++ b/myisam/mi_check.c
@@ -659,7 +659,7 @@ void mi_collect_stats_nonulls_first(HA_KEYSEG *keyseg, ulonglong *notnull,
uchar *key)
{
uint first_null, kp;
- first_null= ha_find_null(keyseg, key) - keyseg;
+ first_null= (uint) (ha_find_null(keyseg, key) - keyseg);
/*
All prefix tuples that don't include keypart_{first_null} are not-null
tuples (and all others aren't), increment counters for them.
@@ -715,7 +715,7 @@ int mi_collect_stats_nonulls_next(HA_KEYSEG *keyseg, ulonglong *notnull,
seg= keyseg + diffs[0] - 1;
/* Find first NULL in last_key */
- first_null_seg= ha_find_null(seg, last_key + diffs[1]) - keyseg;
+ first_null_seg= (uint) (ha_find_null(seg, last_key + diffs[1]) - keyseg);
for (kp= 0; kp < first_null_seg; kp++)
notnull[kp]++;
@@ -3913,7 +3913,7 @@ static int sort_ft_key_write(MI_SORT_PARAM *sort_param, const void *a)
key_block++;
sort_info->key_block=key_block;
sort_param->keyinfo=& sort_info->info->s->ft2_keyinfo;
- ft_buf->count=(ft_buf->buf - p)/val_len;
+ ft_buf->count=(uint) (ft_buf->buf - p)/val_len;
/* flushing buffer to second-level tree */
for (error=0; !error && p < ft_buf->buf; p+= val_len)
diff --git a/myisam/mi_open.c b/myisam/mi_open.c
index 8e2f61a3b4b..d9b7f6453db 100644
--- a/myisam/mi_open.c
+++ b/myisam/mi_open.c
@@ -112,7 +112,8 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
share_buff.state.rec_per_key_part=rec_per_key_part;
share_buff.state.key_root=key_root;
share_buff.state.key_del=key_del;
- share_buff.key_cache= multi_key_cache_search(name_buff, strlen(name_buff));
+ share_buff.key_cache= multi_key_cache_search(name_buff,
+ (uint) strlen(name_buff));
DBUG_EXECUTE_IF("myisam_pretend_crashed_table_on_open",
if (strstr(name, "/t1"))
@@ -314,7 +315,7 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
(char*) key_del, (sizeof(my_off_t) *
share->state.header.max_block_size));
strmov(share->unique_file_name, name_buff);
- share->unique_name_length= strlen(name_buff);
+ share->unique_name_length= (uint) strlen(name_buff);
strmov(share->index_file_name, index_name);
strmov(share->data_file_name, data_name);
diff --git a/myisam/mi_packrec.c b/myisam/mi_packrec.c
index 63d624a1445..ddcf0f33e61 100644
--- a/myisam/mi_packrec.c
+++ b/myisam/mi_packrec.c
@@ -254,7 +254,7 @@ my_bool _mi_read_pack_info(MI_INFO *info, pbool fix_keys)
MYF(MY_HOLD_ON_ERROR));
/* Fix the table addresses in the tree heads. */
{
- long diff=PTR_BYTE_DIFF(decode_table,share->decode_tables);
+ my_ptrdiff_t diff=PTR_BYTE_DIFF(decode_table,share->decode_tables);
share->decode_tables=decode_table;
for (i=0 ; i < trees ; i++)
share->decode_trees[i].table=ADD_TO_PTR(share->decode_trees[i].table,
diff --git a/myisam/mi_search.c b/myisam/mi_search.c
index 530be5e042f..795c7ee55c3 100644
--- a/myisam/mi_search.c
+++ b/myisam/mi_search.c
@@ -408,7 +408,7 @@ int _mi_prefix_search(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page,
}
from+=keyseg->length;
page=from+nod_flag;
- length=from-vseg;
+ length= (uint) (from - vseg);
}
if (page > end)
diff --git a/myisam/rt_index.c b/myisam/rt_index.c
index df8964edc20..494eccd38e4 100644
--- a/myisam/rt_index.c
+++ b/myisam/rt_index.c
@@ -95,7 +95,7 @@ static int rtree_find_req(MI_INFO *info, MI_KEYDEF *keyinfo, uint search_flag,
_mi_kpos(nod_flag, k), level + 1)))
{
case 0: /* found - exit from recursion */
- *saved_key = k - page_buf;
+ *saved_key = (uint) (k - page_buf);
goto ok;
case 1: /* not found - continue searching */
info->rtree_recursion_depth = level;
@@ -117,7 +117,7 @@ static int rtree_find_req(MI_INFO *info, MI_KEYDEF *keyinfo, uint search_flag,
info->lastkey_length = k_len + info->s->base.rec_reflength;
memcpy(info->lastkey, k, info->lastkey_length);
info->rtree_recursion_depth = level;
- *saved_key = last - page_buf;
+ *saved_key = (uint) (last - page_buf);
if (after_key < last)
{
@@ -314,7 +314,7 @@ static int rtree_get_req(MI_INFO *info, MI_KEYDEF *keyinfo, uint key_length,
_mi_kpos(nod_flag, k), level + 1)))
{
case 0: /* found - exit from recursion */
- *saved_key = k - page_buf;
+ *saved_key = (uint) (k - page_buf);
goto ok;
case 1: /* not found - continue searching */
info->rtree_recursion_depth = level;
@@ -333,7 +333,7 @@ static int rtree_get_req(MI_INFO *info, MI_KEYDEF *keyinfo, uint key_length,
memcpy(info->lastkey, k, info->lastkey_length);
info->rtree_recursion_depth = level;
- *saved_key = k - page_buf;
+ *saved_key = (uint) (k - page_buf);
if (after_key < last)
{
@@ -420,7 +420,7 @@ int rtree_get_next(MI_INFO *info, uint keynr, uint key_length)
info->lastkey_length = k_len + info->s->base.rec_reflength;
memcpy(info->lastkey, key, k_len + info->s->base.rec_reflength);
- *(int*)info->int_keypos = key - info->buff;
+ *(uint*)info->int_keypos = (uint) (key - info->buff);
if (after_key >= info->int_maxpos)
{
info->buff_used = 1;
diff --git a/mysql-test/include/ndb_backup.inc b/mysql-test/include/ndb_backup.inc
index 3239030bb64..752155a8dbd 100644
--- a/mysql-test/include/ndb_backup.inc
+++ b/mysql-test/include/ndb_backup.inc
@@ -3,29 +3,49 @@
# in test cases and can be reused. #
######################################################
-# Bug#41307: Tests using include/ndb_backup.inc won't work on Windows due to
-# 'grep' call
-# This test is disabled on Windows via the next line until the above bug is
-# resolved
---source include/not_windows.inc
-
--exec $NDB_MGM --no-defaults --ndb-connectstring="localhost:$NDBCLUSTER_PORT" -e "start backup" >> $NDB_TOOLS_OUTPUT
-# there is no neat way to find the backupid, this is a hack to find it...
-
---exec $NDB_TOOLS_DIR/ndb_select_all --ndb-connectstring="localhost:$NDBCLUSTER_PORT" -d sys --delimiter=',' SYSTAB_0 | grep 520093696 > $MYSQLTEST_VARDIR/tmp.dat
-
-CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info (id INT, backup_id INT) ENGINE = HEAP;
+# To find the backupid, we must dump this data to a table, and SELECT
+# what we want into an outfile. This could be accomplished with grep, but
+# grep isn't Windows-portable
+
+--disable_query_log
+# create a table to help us out
+--disable_warnings # leave this on until done with the entire process
+# cleanup
+DROP TABLE IF EXISTS helper1;
+CREATE TABLE helper1(c1 VARCHAR(20));
+# dump raw data to file
+let $ndb_backup_file1= $MYSQLTEST_VARDIR/ndb_backup_tmp.dat;
+let $ndb_backup_file2= $MYSQLTEST_VARDIR/tmp.dat;
+--error 0,1
+--remove_file $ndb_backup_file1
+--exec $NDB_TOOLS_DIR/ndb_select_all --ndb-connectstring="localhost:$NDBCLUSTER_PORT" -d sys --delimiter=',' SYSTAB_0 > $ndb_backup_file1
+# load the table from the raw data file
+eval LOAD DATA INFILE '$ndb_backup_file1' INTO TABLE helper1;
+--remove_file $ndb_backup_file1
+# output what we need
+eval SELECT * FROM helper1 WHERE c1 LIKE '%520093696%'
+INTO OUTFILE '$ndb_backup_file2';
+# cleanup
+DROP TABLE helper1;
+--enable_warnings
+--enable_query_log
+
+CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info
+(id INT, backup_id INT) ENGINE = MEMORY;
DELETE FROM test.backup_info;
-LOAD DATA INFILE '../tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
+--replace_result $MYSQLTEST_VARDIR <MYSQLTEST_VARDIR>
+eval LOAD DATA INFILE '$ndb_backup_file2'
+INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
+--remove_file $ndb_backup_file2
--replace_column 1 <the_backup_id>
SELECT @the_backup_id:=backup_id FROM test.backup_info;
-
-let the_backup_id=`select @the_backup_id`;
+let $the_backup_id=`SELECT @the_backup_id`;
DROP TABLE test.backup_info;
diff --git a/mysql-test/include/wait_until_count_sessions.inc b/mysql-test/include/wait_until_count_sessions.inc
index 41348bee129..56d2b0b1dcd 100644
--- a/mysql-test/include/wait_until_count_sessions.inc
+++ b/mysql-test/include/wait_until_count_sessions.inc
@@ -2,14 +2,23 @@
#
# SUMMARY
#
-# Waits until the passed number ($count_sessions) of concurrent sessions was
-# observed via
+# Waits until the passed number ($count_sessions) of concurrent sessions or
+# a smaller number was observed via
# SHOW STATUS LIKE 'Threads_connected'
# or the operation times out.
-# Note: Starting with 5.1 we could also use
-# SELECT COUNT(*) FROM information_schema.processlist
-# I stay with "SHOW STATUS LIKE 'Threads_connected'" because this
-# runs in all versions 5.0+
+# Note:
+# 1. We wait for $current_sessions <= $count_sessions because in the use case
+# with count_sessions.inc before and wait_until_count_sessions.inc after
+# the core of the test it could happen that the disconnects of sessions
+# belonging to the preceeding test are not finished.
+# sessions at test begin($count_sessions) = m + n
+# sessions of the previous test which will be soon disconnected = n (n >= 0)
+# sessions at test end ($current sessions, assuming the test disconnects
+# all additional sessions) = m
+# 2. Starting with 5.1 we could also use
+# SELECT COUNT(*) FROM information_schema.processlist
+# I stay with "SHOW STATUS LIKE 'Threads_connected'" because this
+# runs in all versions 5.0+
#
#
# USAGE
@@ -19,7 +28,7 @@
#
# OR typical example of a test which uses more than one session
# Such a test could harm successing tests if there is no server shutdown
-# and start between.cw
+# and start between.
#
# If the testing box is slow than the disconnect of sessions belonging to
# the current test might happen when the successing test gets executed.
@@ -79,7 +88,11 @@
# backup.test, grant3.test
#
#
-# Created: 2009-01-14 mleich
+# Created:
+# 2009-01-14 mleich
+# Modified:
+# 2009-02-24 mleich Fix Bug#43114 wait_until_count_sessions too restrictive,
+# random PB failures
#
let $wait_counter= 100;
@@ -93,7 +106,7 @@ let $wait_timeout= 0;
while ($wait_counter)
{
let $current_sessions= query_get_value(SHOW STATUS LIKE 'Threads_connected', Value, 1);
- let $success= `SELECT $current_sessions = $count_sessions`;
+ let $success= `SELECT $current_sessions <= $count_sessions`;
if ($success)
{
let $wait_counter= 0;
@@ -107,7 +120,7 @@ while ($wait_counter)
if (!$success)
{
--echo # Timeout in wait_until_count_sessions.inc
- --echo # Number of sessions expected: $count_sessions found: $current_sessions
+ --echo # Number of sessions expected: <= $count_sessions found: $current_sessions
SHOW PROCESSLIST;
}
diff --git a/mysql-test/r/consistent_snapshot.result b/mysql-test/r/consistent_snapshot.result
index 90606abbe4e..694c996a58e 100644
--- a/mysql-test/r/consistent_snapshot.result
+++ b/mysql-test/r/consistent_snapshot.result
@@ -1,15 +1,23 @@
-drop table if exists t1;
-create table t1 (a int) engine=innodb;
-start transaction with consistent snapshot;
-insert into t1 values(1);
-select * from t1;
+DROP TABLE IF EXISTS t1;
+# Establish connection con1 (user=root)
+# Establish connection con2 (user=root)
+# Switch to connection con1
+CREATE TABLE t1 (a INT) ENGINE=innodb;
+START TRANSACTION WITH CONSISTENT SNAPSHOT;
+# Switch to connection con2
+INSERT INTO t1 VALUES(1);
+# Switch to connection con1
+SELECT * FROM t1;
a
-commit;
-delete from t1;
-start transaction;
-insert into t1 values(1);
-select * from t1;
+COMMIT;
+DELETE FROM t1;
+START TRANSACTION;
+# Switch to connection con2
+INSERT INTO t1 VALUES(1);
+# Switch to connection con1
+SELECT * FROM t1;
a
1
-commit;
-drop table t1;
+COMMIT;
+# Switch to connection default + close connections con1 and con2
+DROP TABLE t1;
diff --git a/mysql-test/r/ctype_collate.result b/mysql-test/r/ctype_collate.result
index 7e9513f06e9..8bcd488cb69 100644
--- a/mysql-test/r/ctype_collate.result
+++ b/mysql-test/r/ctype_collate.result
@@ -611,3 +611,22 @@ check table t1 extended;
Table Op Msg_type Msg_text
test.t1 check status OK
drop table t1;
+select least(_latin1'a',_latin2'b',_latin5'c' collate latin5_turkish_ci);
+least(_latin1'a',_latin2'b',_latin5'c' collate latin5_turkish_ci)
+a
+create table t1
+select least(_latin1'a',_latin2'b',_latin5'c' collate latin5_turkish_ci) as f1;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `f1` varchar(1) character set latin5 NOT NULL default ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+drop table t1;
+select case _latin1'a' when _latin2'b' then 1 when _latin5'c' collate
+latin5_turkish_ci then 2 else 3 end;
+case _latin1'a' when _latin2'b' then 1 when _latin5'c' collate
+latin5_turkish_ci then 2 else 3 end
+3
+select concat(_latin1'a',_latin2'b',_latin5'c' collate latin5_turkish_ci);
+concat(_latin1'a',_latin2'b',_latin5'c' collate latin5_turkish_ci)
+abc
diff --git a/mysql-test/r/dirty_close.result b/mysql-test/r/dirty_close.result
index c4fc19a35f8..b49b72f1b95 100644
--- a/mysql-test/r/dirty_close.result
+++ b/mysql-test/r/dirty_close.result
@@ -1,9 +1,9 @@
-drop table if exists t1;
-create table t1 (n int);
-insert into t1 values (1),(2),(3);
-select * from t1;
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (n INT);
+INSERT INTO t1 VALUES (1),(2),(3);
+SELECT * FROM t1;
n
1
2
3
-drop table t1;
+DROP TABLE t1;
diff --git a/mysql-test/r/explain.result b/mysql-test/r/explain.result
index 3aa189f4a9d..b0adc428e4c 100644
--- a/mysql-test/r/explain.result
+++ b/mysql-test/r/explain.result
@@ -155,3 +155,7 @@ id select_type table type possible_keys key key_len ref rows Extra
Warnings:
Note 1003 select 1 AS `1` from (select count(distinct `test`.`t1`.`a`) AS `COUNT(DISTINCT t1.a)` from `test`.`t1` join `test`.`t2` group by `test`.`t1`.`a`) `s1`
DROP TABLE t1,t2;
+CREATE TABLE t1 (a INT PRIMARY KEY);
+EXPLAIN EXTENDED SELECT COUNT(a) FROM t1 USE KEY(a);
+ERROR HY000: Key 'a' doesn't exist in table 't1'
+DROP TABLE t1;
diff --git a/mysql-test/r/federated.result b/mysql-test/r/federated.result
index f0de3e9b04a..026886cb07d 100644
--- a/mysql-test/r/federated.result
+++ b/mysql-test/r/federated.result
@@ -2094,6 +2094,26 @@ SELECT t1.a FROM t1, t1 as t2 WHERE t2.b NOT LIKE t1.b;
a
DROP TABLE t1;
DROP TABLE t1;
+#
+# BUG#21360 - mysqldump error on federated tables
+#
+#Switch to Connection Slave
+CREATE TABLE t1(id VARCHAR(20) NOT NULL, PRIMARY KEY(id));
+INSERT INTO t1 VALUES ('text1'),('text2'),('text3'),('text4');
+#Switch to Connection Master
+CREATE TABLE t1(id VARCHAR(20) NOT NULL, PRIMARY KEY(id)) ENGINE=FEDERATED
+CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/test/t1';
+# Dump table t1 using mysqldump tool
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `t1` (
+ `id` varchar(20) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/test/t1';
+/*!40101 SET character_set_client = @saved_cs_client */;
+DROP TABLE t1;
+#Switch to Connection Slave
+DROP TABLE t1;
End of 5.0 tests
SET @@GLOBAL.CONCURRENT_INSERT= @OLD_MASTER_CONCURRENT_INSERT;
SET @@GLOBAL.CONCURRENT_INSERT= @OLD_SLAVE_CONCURRENT_INSERT;
diff --git a/mysql-test/r/flush_block_commit.result b/mysql-test/r/flush_block_commit.result
index d5b10868358..d2197beaaab 100644
--- a/mysql-test/r/flush_block_commit.result
+++ b/mysql-test/r/flush_block_commit.result
@@ -1,39 +1,57 @@
-drop table if exists t1;
-create table t1 (a int) engine=innodb;
-begin;
-insert into t1 values(1);
-flush tables with read lock;
-select * from t1;
+# Establish connection con1 (user=root)
+# Establish connection con2 (user=root)
+# Establish connection con3 (user=root)
+# Switch to connection con1
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (a INT) ENGINE=innodb;
+BEGIN;
+INSERT INTO t1 VALUES(1);
+# Switch to connection con2
+FLUSH TABLES WITH READ LOCK;
+SELECT * FROM t1;
a
-commit;
-select * from t1;
+# Switch to connection con1
+COMMIT;
+# Switch to connection con2
+SELECT * FROM t1;
a
-unlock tables;
-begin;
-select * from t1 for update;
+UNLOCK TABLES;
+# Switch to connection con1
+# Switch to connection con1
+BEGIN;
+SELECT * FROM t1 FOR UPDATE;
a
1
-begin;
-select * from t1 for update;
-flush tables with read lock;
-commit;
+# Switch to connection con2
+BEGIN;
+SELECT * FROM t1 FOR UPDATE;
+# Switch to connection con3
+FLUSH TABLES WITH READ LOCK;
+# Switch to connection con1
+COMMIT;
+# Switch to connection con2
a
1
-unlock tables;
-commit;
-begin;
-insert into t1 values(10);
-flush tables with read lock;
-commit;
-unlock tables;
-flush tables with read lock;
-unlock tables;
-begin;
-select * from t1;
+# Switch to connection con3
+UNLOCK TABLES;
+# Switch to connection con2
+COMMIT;
+# Switch to connection con1
+BEGIN;
+INSERT INTO t1 VALUES(10);
+FLUSH TABLES WITH READ LOCK;
+COMMIT;
+UNLOCK TABLES;
+# Switch to connection con2
+FLUSH TABLES WITH READ LOCK;
+UNLOCK TABLES;
+BEGIN;
+SELECT * FROM t1;
a
1
10
-show create database test;
+SHOW CREATE DATABASE test;
Database Create Database
test CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */
-drop table t1;
+DROP TABLE t1;
+# Switch to connection default and close connections con1, con2, con3
diff --git a/mysql-test/r/flush_block_commit_notembedded.result b/mysql-test/r/flush_block_commit_notembedded.result
index 599efeb3e2d..76c55e948dd 100644
--- a/mysql-test/r/flush_block_commit_notembedded.result
+++ b/mysql-test/r/flush_block_commit_notembedded.result
@@ -1,15 +1,23 @@
-create table t1 (a int) engine=innodb;
-reset master;
-set autocommit=0;
-insert t1 values (1);
-flush tables with read lock;
-show master status;
+# Establish connection con1 (user=root)
+# Establish connection con2 (user=root)
+# Switch to connection con1
+CREATE TABLE t1 (a INT) ENGINE=innodb;
+RESET MASTER;
+SET AUTOCOMMIT=0;
+INSERT t1 VALUES (1);
+# Switch to connection con2
+FLUSH TABLES WITH READ LOCK;
+SHOW MASTER STATUS;
File Position Binlog_Do_DB Binlog_Ignore_DB
master-bin.000001 98
-commit;
-show master status;
+# Switch to connection con1
+COMMIT;
+# Switch to connection con2
+SHOW MASTER STATUS;
File Position Binlog_Do_DB Binlog_Ignore_DB
master-bin.000001 98
-unlock tables;
-drop table t1;
-set autocommit=1;
+UNLOCK TABLES;
+# Switch to connection con1
+DROP TABLE t1;
+SET AUTOCOMMIT=1;
+# Switch to connection default and close connections con1 and con2
diff --git a/mysql-test/r/flush_read_lock_kill.result b/mysql-test/r/flush_read_lock_kill.result
index 6703b6bd533..b16a8b114b3 100644
--- a/mysql-test/r/flush_read_lock_kill.result
+++ b/mysql-test/r/flush_read_lock_kill.result
@@ -1,9 +1,12 @@
-drop table if exists t1;
-create table t1 (kill_id int);
-insert into t1 values(connection_id());
-flush tables with read lock;
-select ((@id := kill_id) - kill_id) from t1;
+SET @old_concurrent_insert= @@global.concurrent_insert;
+SET @@global.concurrent_insert= 0;
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (kill_id INT);
+INSERT INTO t1 VALUES(connection_id());
+FLUSH TABLES WITH READ LOCK;
+SELECT ((@id := kill_id) - kill_id) FROM t1;
((@id := kill_id) - kill_id)
0
-kill connection @id;
-drop table t1;
+KILL CONNECTION @id;
+DROP TABLE t1;
+SET @@global.concurrent_insert= @old_concurrent_insert;
diff --git a/mysql-test/r/lock_multi.result b/mysql-test/r/lock_multi.result
index 0430d560a7a..d1b50a0080c 100644
--- a/mysql-test/r/lock_multi.result
+++ b/mysql-test/r/lock_multi.result
@@ -51,10 +51,10 @@ ERROR HY000: Can't execute the query because you have a conflicting read lock
UNLOCK TABLES;
DROP DATABASE mysqltest_1;
ERROR HY000: Can't drop database 'mysqltest_1'; database doesn't exist
-use mysql;
+USE mysql;
LOCK TABLES columns_priv WRITE, db WRITE, host WRITE, user WRITE;
FLUSH TABLES;
-use mysql;
+USE mysql;
SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1;
OPTIMIZE TABLES columns_priv, db, host, user;
Table Op Msg_type Msg_text
@@ -65,7 +65,7 @@ mysql.user optimize status OK
UNLOCK TABLES;
Select_priv
N
-use test;
+USE test;
use test;
CREATE TABLE t1 (c1 int);
LOCK TABLE t1 WRITE;
@@ -93,7 +93,7 @@ create table t1 (a int);
connection: locker
lock tables t1 read;
connection: writer
-create table t2 like t1;;
+create table t2 like t1;
connection: default
kill query
ERROR 70100: Query execution was interrupted
diff --git a/mysql-test/r/lock_multi_bug38499.result b/mysql-test/r/lock_multi_bug38499.result
new file mode 100644
index 00000000000..fd0f2138a8d
--- /dev/null
+++ b/mysql-test/r/lock_multi_bug38499.result
@@ -0,0 +1,19 @@
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1( a INT, b INT );
+INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3), (4, 4);
+# 1. test regular tables
+# 1.1. test altering of columns that multiupdate doesn't use
+# 1.1.1. normal mode
+# 1.1.2. PS mode
+# 1.2. test altering of columns that multiupdate uses
+# 1.2.1. normal mode
+# 1.2.2. PS mode
+ALTER TABLE t1 ADD COLUMN a INT;
+# 2. test UNIONs
+# 2.1. test altering of columns that multiupdate doesn't use
+# 2.1.1. normal mode
+# 2.1.2. PS mode
+# 2.2. test altering of columns that multiupdate uses
+# 2.2.1. normal mode
+# 2.2.2. PS mode
+DROP TABLE t1;
diff --git a/mysql-test/r/lock_multi_bug38691.result b/mysql-test/r/lock_multi_bug38691.result
new file mode 100644
index 00000000000..74b9603d8e3
--- /dev/null
+++ b/mysql-test/r/lock_multi_bug38691.result
@@ -0,0 +1,17 @@
+DROP TABLE IF EXISTS t1,t2,t3;
+CREATE TABLE t1 (
+a int(11) unsigned default NULL,
+b varchar(255) default NULL,
+UNIQUE KEY a (a),
+KEY b (b)
+);
+INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3);
+CREATE TABLE t2 SELECT * FROM t1;
+CREATE TABLE t3 SELECT * FROM t1;
+# test altering of columns that multiupdate doesn't use
+# normal mode
+# PS mode
+# test altering of columns that multiupdate uses
+# normal mode
+# PS mode
+DROP TABLE t1, t2, t3;
diff --git a/mysql-test/r/mysql.result b/mysql-test/r/mysql.result
index 10537f6da16..cef5e08ec6b 100644
--- a/mysql-test/r/mysql.result
+++ b/mysql-test/r/mysql.result
@@ -192,4 +192,13 @@ delimiter
1
1
1
+set @old_max_allowed_packet = @@global.max_allowed_packet;
+set @@global.max_allowed_packet = 2 * 1024 * 1024 + 1024;
+CREATE TABLE t1(data LONGBLOB);
+INSERT INTO t1 SELECT REPEAT('1', 2*1024*1024);
+SELECT LENGTH(data) FROM t1;
+LENGTH(data)
+2097152
+DROP TABLE t1;
+set @@global.max_allowed_packet = @old_max_allowed_packet;
End of 5.0 tests
diff --git a/mysql-test/r/mysqlbinlog.result b/mysql-test/r/mysqlbinlog.result
index 6e5aa09fe92..23244d2b3c4 100644
--- a/mysql-test/r/mysqlbinlog.result
+++ b/mysql-test/r/mysqlbinlog.result
@@ -349,9 +349,9 @@ DELIMITER ;
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
CREATE TABLE t1 (c1 CHAR(10));
-flush logs;
+FLUSH LOGS;
INSERT INTO t1 VALUES ('0123456789');
-flush logs;
+FLUSH LOGS;
DROP TABLE t1;
We expect this value to be 1
The bug being tested was that 'Query' lines were not preceded by '#'
@@ -361,23 +361,23 @@ SELECT COUNT(*) AS `BUG#28293_expect_1` FROM patch WHERE a LIKE '%Query%';
BUG#28293_expect_1
1
DROP TABLE patch;
-flush logs;
-create table t1(a int);
-insert into t1 values(connection_id());
-flush logs;
-drop table t1;
+FLUSH LOGS;
+CREATE TABLE t1(a INT);
+INSERT INTO t1 VALUES(connection_id());
+FLUSH LOGS;
+DROP TABLE t1;
1
-drop table t1;
+DROP TABLE t1;
shell> mysqlbinlog std_data/corrupt-relay-bin.000624 > var/tmp/bug31793.sql
-set @@global.server_id= 4294967295;
-reset master;
-flush logs;
-select
-(@a:=load_file("MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug37313.binlog"))
-is not null;
-(@a:=load_file("MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug37313.binlog"))
-is not null
+SET @@global.server_id= 4294967295;
+RESET MASTER;
+FLUSH LOGS;
+SELECT
+(@a:=LOAD_FILE("MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug37313.binlog"))
+IS NOT NULL;
+(@a:=LOAD_FILE("MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug37313.binlog"))
+IS NOT NULL
1
*** Unsigned server_id 4294967295 is found: 1 ***
-set @@global.server_id= 1;
+SET @@global.server_id= 1;
End of 5.0 tests
diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result
index 49430a5c62d..1897a7df799 100644
--- a/mysql-test/r/mysqldump.result
+++ b/mysql-test/r/mysqldump.result
@@ -3559,6 +3559,60 @@ DROP TABLE t1,t2;
-- Dump completed on DATE
SET @@GLOBAL.CONCURRENT_INSERT = @OLD_CONCURRENT_INSERT;
#
+# Bug #42635: mysqldump includes views that were excluded using
+# the --ignore-table option
+#
+create database db42635;
+use db42635;
+create table t1 (id int);
+create view db42635.v1 (c) as select * from db42635.t1;
+create view db42635.v2 (c) as select * from db42635.t1;
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+DROP TABLE IF EXISTS `t1`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `t1` (
+ `id` int(11) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+LOCK TABLES `t1` WRITE;
+/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
+/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
+UNLOCK TABLES;
+DROP TABLE IF EXISTS `v2`;
+/*!50001 DROP VIEW IF EXISTS `v2`*/;
+/*!50001 CREATE TABLE `v2` (
+ `c` int(11)
+) ENGINE=MyISAM */;
+/*!50001 DROP TABLE `v2`*/;
+/*!50001 DROP VIEW IF EXISTS `v2`*/;
+/*!50001 CREATE ALGORITHM=UNDEFINED */
+/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
+/*!50001 VIEW `v2` AS select `t1`.`id` AS `c` from `t1` */;
+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
+use test;
+drop database db42635;
+#
# Bug#33550 mysqldump 4.0 compatibility broken
#
SET NAMES utf8;
diff --git a/mysql-test/r/ndb_restore.result b/mysql-test/r/ndb_restore.result
index c48333f6ea8..05a94b143f3 100644
--- a/mysql-test/r/ndb_restore.result
+++ b/mysql-test/r/ndb_restore.result
@@ -129,9 +129,11 @@ create table t7 engine=myisam as select * from t7_c;
create table t8 engine=myisam as select * from t8_c;
create table t9 engine=myisam as select * from t9_c;
create table t10 engine=myisam as select * from t10_c;
-CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info (id INT, backup_id INT) ENGINE = HEAP;
+CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info
+(id INT, backup_id INT) ENGINE = MEMORY;
DELETE FROM test.backup_info;
-LOAD DATA INFILE '../tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
+LOAD DATA INFILE '<MYSQLTEST_VARDIR>/tmp.dat'
+INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
SELECT @the_backup_id:=backup_id FROM test.backup_info;
@the_backup_id:=backup_id
<the_backup_id>
diff --git a/mysql-test/r/ndb_restore_print.result b/mysql-test/r/ndb_restore_print.result
index e05f8e43d1a..8b50303c2dc 100644
--- a/mysql-test/r/ndb_restore_print.result
+++ b/mysql-test/r/ndb_restore_print.result
@@ -227,9 +227,11 @@ hex(h3) NULL
hex(i1) NULL
hex(i2) NULL
hex(i3) NULL
-CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info (id INT, backup_id INT) ENGINE = HEAP;
+CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info
+(id INT, backup_id INT) ENGINE = MEMORY;
DELETE FROM test.backup_info;
-LOAD DATA INFILE '../tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
+LOAD DATA INFILE '<MYSQLTEST_VARDIR>/tmp.dat'
+INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
SELECT @the_backup_id:=backup_id FROM test.backup_info;
@the_backup_id:=backup_id
<the_backup_id>
@@ -261,9 +263,11 @@ create table t4 (pk int key, a int) engine ndb;
insert into t2 values (1,11),(2,12),(3,13),(4,14),(5,15);
insert into t3 values (1,21),(2,22),(3,23),(4,24),(5,25);
insert into t4 values (1,31),(2,32),(3,33),(4,34),(5,35);
-CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info (id INT, backup_id INT) ENGINE = HEAP;
+CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info
+(id INT, backup_id INT) ENGINE = MEMORY;
DELETE FROM test.backup_info;
-LOAD DATA INFILE '../tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
+LOAD DATA INFILE '<MYSQLTEST_VARDIR>/tmp.dat'
+INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
SELECT @the_backup_id:=backup_id FROM test.backup_info;
@the_backup_id:=backup_id
<the_backup_id>
@@ -305,9 +309,11 @@ create table t1
insert into t1 values(1, 8388607, 16777215);
insert into t1 values(2, -8388608, 0);
insert into t1 values(3, -1, 1);
-CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info (id INT, backup_id INT) ENGINE = HEAP;
+CREATE TEMPORARY TABLE IF NOT EXISTS test.backup_info
+(id INT, backup_id INT) ENGINE = MEMORY;
DELETE FROM test.backup_info;
-LOAD DATA INFILE '../tmp.dat' INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
+LOAD DATA INFILE '<MYSQLTEST_VARDIR>/tmp.dat'
+INTO TABLE test.backup_info FIELDS TERMINATED BY ',';
SELECT @the_backup_id:=backup_id FROM test.backup_info;
@the_backup_id:=backup_id
<the_backup_id>
diff --git a/mysql-test/r/read_only.result b/mysql-test/r/read_only.result
index 1bf99a8ea07..4b405ddd71a 100644
--- a/mysql-test/r/read_only.result
+++ b/mysql-test/r/read_only.result
@@ -47,7 +47,7 @@ Note 1051 Unknown table 'ttt'
drop table t1,t2;
drop user test@localhost;
#
-# Bug #27440 read_only allows create and drop database
+# Bug#27440 read_only allows create and drop database
#
drop database if exists mysqltest_db1;
drop database if exists mysqltest_db2;
diff --git a/mysql-test/r/show_check.result b/mysql-test/r/show_check.result
index 15f28fb9610..ad73fc650a5 100644
--- a/mysql-test/r/show_check.result
+++ b/mysql-test/r/show_check.result
@@ -507,9 +507,9 @@ ERROR 42000: Access denied for user 'mysqltest_3'@'localhost' to database 'mysql
drop table mysqltest.t1;
drop database mysqltest;
set names binary;
-delete from mysql.user
+delete from mysql.user
where user='mysqltest_1' || user='mysqltest_2' || user='mysqltest_3';
-delete from mysql.db
+delete from mysql.db
where user='mysqltest_1' || user='mysqltest_2' || user='mysqltest_3';
flush privileges;
CREATE TABLE t1 (i int, KEY (i)) ENGINE=MEMORY;
@@ -916,7 +916,7 @@ def TRIGGERS DEFINER Definer 252 589815 14 N 17 0 33
Trigger Event Table Statement Timing Created sql_mode Definer
t1_bi INSERT t1 SET @a = 1 BEFORE NULL root@localhost
----------------------------------------------------------------
-SELECT
+SELECT
TRIGGER_CATALOG,
TRIGGER_SCHEMA,
TRIGGER_NAME,
diff --git a/mysql-test/r/skip_name_resolve.result b/mysql-test/r/skip_name_resolve.result
index 8ef52e75238..47741fed250 100644
--- a/mysql-test/r/skip_name_resolve.result
+++ b/mysql-test/r/skip_name_resolve.result
@@ -5,10 +5,10 @@ GRANT USAGE ON *.* TO 'mysqltest_1'@'127.0.0.1/255.255.255.255'
GRANT ALL PRIVILEGES ON `test`.* TO 'mysqltest_1'@'127.0.0.1/255.255.255.255'
REVOKE ALL ON test.* FROM mysqltest_1@'127.0.0.1/255.255.255.255';
DROP USER mysqltest_1@'127.0.0.1/255.255.255.255';
-select user();
-user()
+SELECT USER();
+USER()
#
-show processlist;
+SHOW PROCESSLIST;
Id User Host db Command Time State Info
<id> root <host> test <command> <time> <state> <info>
<id> root <host> test <command> <time> <state> <info>
diff --git a/mysql-test/r/sp-security.result b/mysql-test/r/sp-security.result
index 8462bafe0e3..106d08c8c12 100644
--- a/mysql-test/r/sp-security.result
+++ b/mysql-test/r/sp-security.result
@@ -332,7 +332,7 @@ ERROR 42000: SELECT command denied to user 'user_bug14533'@'localhost' for table
drop user user_bug14533@localhost;
drop database db_bug14533;
CREATE DATABASE db_bug7787;
-use db_bug7787;
+USE db_bug7787;
CREATE PROCEDURE p1()
SHOW INNODB STATUS;
Warnings:
@@ -352,12 +352,12 @@ GRANT SUPER ON *.* TO mysqltest_2@localhost;
GRANT ALL PRIVILEGES ON mysqltest.* TO mysqltest_2@localhost;
---> connection: mysqltest_2_con
-use mysqltest;
+USE mysqltest;
CREATE PROCEDURE wl2897_p1() SELECT 1;
CREATE FUNCTION wl2897_f1() RETURNS INT RETURN 1;
---> connection: mysqltest_1_con
-use mysqltest;
+USE mysqltest;
CREATE DEFINER=root@localhost PROCEDURE wl2897_p2() SELECT 2;
ERROR 42000: Access denied; you need the SUPER privilege for this operation
CREATE DEFINER=root@localhost FUNCTION wl2897_f2() RETURNS INT RETURN 2;
@@ -373,7 +373,7 @@ Warnings:
Note 1449 There is no 'a @ b @ c'@'localhost' registered
---> connection: con1root
-use mysqltest;
+USE mysqltest;
SHOW CREATE PROCEDURE wl2897_p1;
Procedure sql_mode Create Procedure
wl2897_p1 CREATE DEFINER=`mysqltest_2`@`localhost` PROCEDURE `wl2897_p1`()
@@ -403,7 +403,7 @@ CREATE USER mysqltest_2@localhost;
GRANT ALL PRIVILEGES ON mysqltest.* TO mysqltest_2@localhost;
---> connection: mysqltest_1_con
-use mysqltest;
+USE mysqltest;
CREATE PROCEDURE bug13198_p1()
SELECT 1;
CREATE FUNCTION bug13198_f1() RETURNS INT
@@ -416,7 +416,7 @@ bug13198_f1()
1
---> connection: mysqltest_2_con
-use mysqltest;
+USE mysqltest;
CALL bug13198_p1();
1
1
@@ -428,7 +428,7 @@ bug13198_f1()
DROP USER mysqltest_1@localhost;
---> connection: mysqltest_2_con
-use mysqltest;
+USE mysqltest;
CALL bug13198_p1();
ERROR HY000: There is no 'mysqltest_1'@'localhost' registered
SELECT bug13198_f1();
@@ -445,7 +445,7 @@ Host User Password
localhost user19857 *82DC221D557298F6CE9961037DB1C90604792F5C
---> connection: mysqltest_2_con
-use test;
+USE test;
CREATE PROCEDURE sp19857() DETERMINISTIC
BEGIN
DECLARE a INT;
diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result
index 6007fdd403a..04bd818df89 100644
--- a/mysql-test/r/union.result
+++ b/mysql-test/r/union.result
@@ -1447,12 +1447,12 @@ SELECT a FROM t1
UNION
SELECT a FROM t1
) alias;
-SELECT a INTO OUTFILE 'union.out.file' FROM (
+SELECT a INTO OUTFILE '<MYSQLTEST_VARDIR>/tmp/union.out.file' FROM (
SELECT a FROM t1
UNION
SELECT a FROM t1 WHERE 0
) alias;
-SELECT a INTO DUMPFILE 'union.out.file2' FROM (
+SELECT a INTO DUMPFILE '<MYSQLTEST_VARDIR>/tmp/union.out.file' FROM (
SELECT a FROM t1
UNION
SELECT a FROM t1 WHERE 0
@@ -1465,21 +1465,21 @@ SELECT a INTO @v FROM t1
SELECT a FROM (
SELECT a FROM t1
UNION
-SELECT a INTO OUTFILE 'union.out.file3' FROM t1
+SELECT a INTO OUTFILE '<MYSQLTEST_VARDIR>/tmp/union.out.file' FROM t1
) alias;
SELECT a FROM (
SELECT a FROM t1
UNION
-SELECT a INTO DUMPFILE 'union.out.file4' FROM t1
+SELECT a INTO DUMPFILE '<MYSQLTEST_VARDIR>/tmp/union.out.file' FROM t1
) alias;
SELECT a FROM t1 UNION SELECT a INTO @v FROM t1;
-SELECT a FROM t1 UNION SELECT a INTO OUTFILE 'union.out.file5' FROM t1;
-SELECT a FROM t1 UNION SELECT a INTO OUTFILE 'union.out.file6' FROM t1;
+SELECT a FROM t1 UNION SELECT a INTO OUTFILE '<MYSQLTEST_VARDIR>/tmp/union.out.file' FROM t1;
+SELECT a FROM t1 UNION SELECT a INTO DUMPFILE '<MYSQLTEST_VARDIR>/tmp/union.out.file' FROM t1;
SELECT a INTO @v FROM t1 UNION SELECT a FROM t1;
ERROR HY000: Incorrect usage of UNION and INTO
-SELECT a INTO OUTFILE 'union.out.file7' FROM t1 UNION SELECT a FROM t1;
+SELECT a INTO OUTFILE '<MYSQLTEST_VARDIR>/tmp/union.out.file' FROM t1 UNION SELECT a FROM t1;
ERROR HY000: Incorrect usage of UNION and INTO
-SELECT a INTO DUMPFILE 'union.out.file8' FROM t1 UNION SELECT a FROM t1;
+SELECT a INTO DUMPFILE '<MYSQLTEST_VARDIR>/tmp/union.out.file' FROM t1 UNION SELECT a FROM t1;
ERROR HY000: Incorrect usage of UNION and INTO
DROP TABLE t1;
CREATE TABLE t1 (a INT);
diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result
index 311b77e7a99..58aa614c508 100644
--- a/mysql-test/r/view.result
+++ b/mysql-test/r/view.result
@@ -1667,9 +1667,9 @@ INSERT INTO t2 VALUES (4,3,'n');
INSERT INTO t2 VALUES (6,1,'n');
INSERT INTO t2 VALUES (8,1,'y');
CREATE VIEW v1 AS SELECT * FROM t1;
-SELECT a.col1,a.col2,b.col2,b.col3
+SELECT a.col1,a.col2,b.col2,b.col3
FROM t1 a LEFT JOIN t2 b ON a.col1=b.col1
-WHERE b.col2 IS NULL OR
+WHERE b.col2 IS NULL OR
b.col2=(SELECT MAX(col2) FROM t2 b WHERE b.col1=a.col1);
col1 col2 col2 col3
1 trudy 2 y
@@ -1681,9 +1681,9 @@ col1 col2 col2 col3
7 carsten NULL NULL
8 ranger 1 y
10 matt NULL NULL
-SELECT a.col1,a.col2,b.col2,b.col3
+SELECT a.col1,a.col2,b.col2,b.col3
FROM v1 a LEFT JOIN t2 b ON a.col1=b.col1
-WHERE b.col2 IS NULL OR
+WHERE b.col2 IS NULL OR
b.col2=(SELECT MAX(col2) FROM t2 b WHERE b.col1=a.col1);
col1 col2 col2 col3
1 trudy 2 y
@@ -1737,7 +1737,7 @@ A A
2 2
3 3
create table t3 as select a a,a b from t2;
-create view v2 as select * from t3 where
+create view v2 as select * from t3 where
a in (select * from t1) or b in (select * from t2);
select * from v2 A, v2 B where A.a = B.b;
a b a b
@@ -1993,7 +1993,7 @@ dkjhgd
drop view v1;
create table t1 (f59 int, f60 int, f61 int);
insert into t1 values (19,41,32);
-create view v1 as select f59, f60 from t1 where f59 in
+create view v1 as select f59, f60 from t1 where f59 in
(select f59 from t1);
update v1 set f60=2345;
ERROR HY000: The target table v1 of the UPDATE is not updatable
@@ -2120,7 +2120,7 @@ pid int NOT NULL
INSERT INTO t1 VALUES(1,'a','b'), (2,'c','d');
INSERT INTO t2 values (1,1), (2,1), (2,2);
CREATE VIEW v1 AS SELECT t1.*,t2.pid FROM t1,t2 WHERE t1.aid = t2.aid;
-SELECT pid,GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1) FROM t1,t2
+SELECT pid,GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1) FROM t1,t2
WHERE t1.aid = t2.aid GROUP BY pid;
pid GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1)
1 a b,c d
@@ -2222,7 +2222,7 @@ group_name varchar(32) NOT NULL
) engine = InnoDB;
create table t2 (
r_object_id char(16) NOT NULL,
-i_position int(11) NOT NULL,
+i_position int(11) NOT NULL,
users_names varchar(32) default NULL
) Engine = InnoDB;
create view v1 as select r_object_id, group_name from t1;
@@ -2235,7 +2235,7 @@ insert into t1 values('120001a080000542','tstgroup1');
insert into t2 values('120001a080000542',-1, 'guser01');
insert into t2 values('120001a080000542',-2, 'guser02');
select v1.r_object_id, v2.users_names from v1, v2
-where (v1.group_name='tstgroup1') and v2.r_object_id=v1.r_object_id
+where (v1.group_name='tstgroup1') and v2.r_object_id=v1.r_object_id
order by users_names;
r_object_id users_names
120001a080000542 guser01
@@ -2385,8 +2385,8 @@ create table t4 (x int, y int, z int);
create view v1 as
select t1.x
from (
-(t1 join t2 on ((t1.y = t2.y)))
-join
+(t1 join t2 on ((t1.y = t2.y)))
+join
(t3 left join t4 on (t3.y = t4.y) and (t3.z = t4.z))
);
prepare stmt1 from "select count(*) from v1 where x = ?";
@@ -2562,12 +2562,12 @@ Warnings:
Warning 1052 Column 'x' in group statement is ambiguous
DROP VIEW v1;
DROP TABLE t1;
-drop table if exists t1;
-drop view if exists v1;
-create table t1 (id int);
-create view v1 as select * from t1;
-drop table t1;
-show create view v1;
+drop table if exists t1;
+drop view if exists v1;
+create table t1 (id int);
+create view v1 as select * from t1;
+drop table t1;
+show create view v1;
drop view v1;
//
View Create View
@@ -2614,7 +2614,7 @@ DROP VIEW v2;
DROP TABLE t1, t2;
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY,
td date DEFAULT NULL, KEY idx(td));
-INSERT INTO t1 VALUES
+INSERT INTO t1 VALUES
(1, '2005-01-01'), (2, '2005-01-02'), (3, '2005-01-02'),
(4, '2005-01-03'), (5, '2005-01-04'), (6, '2005-01-05'),
(7, '2005-01-05'), (8, '2005-01-05'), (9, '2005-01-06');
@@ -2978,10 +2978,10 @@ drop view v1;
drop table t1;
CREATE TABLE t1(pk int PRIMARY KEY);
CREATE TABLE t2(pk int PRIMARY KEY, fk int, ver int, org int);
-CREATE ALGORITHM=MERGE VIEW v1 AS
+CREATE ALGORITHM=MERGE VIEW v1 AS
SELECT t1.*
-FROM t1 JOIN t2
-ON t2.fk = t1.pk AND
+FROM t1 JOIN t2
+ON t2.fk = t1.pk AND
t2.ver = (SELECT MAX(t.ver) FROM t2 t WHERE t.org = t2.org);
SHOW WARNINGS;
Level Code Message
@@ -3311,7 +3311,7 @@ name char(10) NOT NULL
INSERT INTO t1 (lid, name) VALUES
(1, 'YES'), (2, 'NO');
CREATE TABLE t2 (
-id int NOT NULL PRIMARY KEY,
+id int NOT NULL PRIMARY KEY,
gid int NOT NULL,
lid int NOT NULL,
dt date
@@ -3410,8 +3410,8 @@ CREATE TABLE t1 (id int);
CREATE TABLE t2 (id int, c int DEFAULT 0);
INSERT INTO t1 (id) VALUES (1);
INSERT INTO t2 (id) VALUES (1);
-CREATE VIEW v1 AS
-SELECT t2.c FROM t1, t2
+CREATE VIEW v1 AS
+SELECT t2.c FROM t1, t2
WHERE t1.id=t2.id AND 1 IN (SELECT id FROM t1) WITH CHECK OPTION;
UPDATE v1 SET c=1;
DROP VIEW v1;
@@ -3519,7 +3519,7 @@ role_name varchar(100) default NULL,
app_name varchar(40) NOT NULL,
INDEX idx_app_name(app_name)
);
-CREATE VIEW v1 AS
+CREATE VIEW v1 AS
SELECT profile.person_id AS person_id
FROM t1 profile, t2 userrole, t3 role
WHERE userrole.person_id = profile.person_id AND
@@ -3531,7 +3531,7 @@ INSERT INTO t1 VALUES
(-717462680,'ENTS Ta','0'), (-904346964,'ndard SQL\n','0');
INSERT INTO t2 VALUES
(1,3,6),(2,4,7),(3,5,8),(4,6,9),(5,1,6),(6,1,7),(7,1,8),(8,1,9),(9,1,10);
-INSERT INTO t3 VALUES
+INSERT INTO t3 VALUES
(1,'NUCANS_APP_USER','NUCANSAPP'),(2,'NUCANS_TRGAPP_USER','NUCANSAPP'),
(3,'IA_INTAKE_COORDINATOR','IACANS'),(4,'IA_SCREENER','IACANS'),
(5,'IA_SUPERVISOR','IACANS'),(6,'IA_READONLY','IACANS'),
@@ -3557,7 +3557,7 @@ i
2
3
4
-select table_name, is_updatable from information_schema.views
+select table_name, is_updatable from information_schema.views
where table_name = 'v1';
table_name is_updatable
v1 NO
@@ -3603,8 +3603,8 @@ DROP VIEW v2;
DROP VIEW v3;
DROP TABLE t1;
#
-# Bug#29477: Not all fields of the target table were checked to have
-# a default value when inserting into a view.
+# Bug#29477 Not all fields of the target table were checked to have
+# a default value when inserting into a view.
#
create table t1(f1 int, f2 int not null);
create view v1 as select f1 from t1;
@@ -3621,7 +3621,7 @@ drop table t1;
create table t1 (a int, key(a));
create table t2 (c int);
create view v1 as select a b from t1;
-create view v2 as select 1 a from t2, v1 where c in
+create view v2 as select 1 a from t2, v1 where c in
(select 1 from t1 where b = a);
insert into t1 values (1), (1);
insert into t2 values (1), (1);
@@ -3643,7 +3643,7 @@ MAX(a) COUNT(DISTINCT a)
DROP VIEW v1;
DROP TABLE t1;
# -----------------------------------------------------------------
-# -- Bug#34337: Server crash when Altering a view using a table name.
+# -- Bug#34337 Server crash when Altering a view using a table name.
# -----------------------------------------------------------------
DROP TABLE IF EXISTS t1;
@@ -3660,8 +3660,8 @@ DROP TABLE t1;
# -- End of test case for Bug#34337.
# -----------------------------------------------------------------
-# -- Bug#35193: VIEW query is rewritten without "FROM DUAL",
-# -- causing syntax error
+# -- Bug#35193 VIEW query is rewritten without "FROM DUAL",
+# -- causing syntax error
# -----------------------------------------------------------------
CREATE VIEW v1 AS SELECT 1 FROM DUAL WHERE 1;
diff --git a/mysql-test/r/view_grant.result b/mysql-test/r/view_grant.result
index 1df8ed335a7..e7a50451cec 100644
--- a/mysql-test/r/view_grant.result
+++ b/mysql-test/r/view_grant.result
@@ -644,7 +644,7 @@ CREATE DATABASE test2;
CREATE TABLE test1.t0 (a VARCHAR(20));
CREATE TABLE test2.t1 (a VARCHAR(20));
CREATE VIEW test2.t3 AS SELECT * FROM test1.t0;
-CREATE OR REPLACE VIEW test.v1 AS
+CREATE OR REPLACE VIEW test.v1 AS
SELECT ta.a AS col1, tb.a AS col2 FROM test2.t3 ta, test2.t1 tb;
DROP VIEW test.v1;
DROP VIEW test2.t3;
@@ -788,7 +788,7 @@ v3 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
DROP USER u26813@localhost;
DROP DATABASE db26813;
#
-# Bug#29908: A user can gain additional access through the ALTER VIEW.
+# Bug#29908 A user can gain additional access through the ALTER VIEW.
#
CREATE DATABASE mysqltest_29908;
USE mysqltest_29908;
diff --git a/mysql-test/suite/funcs_1/r/innodb_func_view.result b/mysql-test/suite/funcs_1/r/innodb_func_view.result
index c2689a36801..0bd83c81bcf 100644
--- a/mysql-test/suite/funcs_1/r/innodb_func_view.result
+++ b/mysql-test/suite/funcs_1/r/innodb_func_view.result
@@ -5245,7 +5245,7 @@ WHERE select_id = 1 OR select_id IS NULL order by id;
sqrt(my_bigint) my_bigint id
NULL NULL 1
NULL -9223372036854775808 2
-3037000499.976 9223372036854775807 3
+3037000499.97605 9223372036854775807 3
0 0 4
NULL -1 5
2 4 6
@@ -5259,7 +5259,7 @@ WHERE select_id = 1 OR select_id IS NULL) order by id;
sqrt(my_bigint) my_bigint id
NULL NULL 1
NULL -9223372036854775808 2
-3037000499.976 9223372036854775807 3
+3037000499.97605 9223372036854775807 3
0 0 4
NULL -1 5
2 4 6
diff --git a/mysql-test/suite/funcs_1/r/innodb_views.result b/mysql-test/suite/funcs_1/r/innodb_views.result
index 3d5c5a1e698..30c7261d09e 100644
--- a/mysql-test/suite/funcs_1/r/innodb_views.result
+++ b/mysql-test/suite/funcs_1/r/innodb_views.result
@@ -22824,7 +22824,7 @@ f1 f2
ABC 3
SELECT * FROM v1 order by 2;
f1 my_sqrt
-ABC 1.7320508075689
+ABC 1.73205080756888
ALTER TABLE t1 CHANGE COLUMN f2 f2 VARCHAR(30);
INSERT INTO t1 SET f1 = 'ABC', f2 = 'DEF';
DESCRIBE t1;
@@ -22842,7 +22842,7 @@ ABC DEF
SELECT * FROM v1 order by 2;
f1 my_sqrt
ABC 0
-ABC 1.7320508075689
+ABC 1.73205080756888
SELECT SQRT('DEF');
SQRT('DEF')
0
@@ -22862,7 +22862,7 @@ my_sqrt double YES NULL
SELECT * FROM v2 order by 2;
f1 my_sqrt
ABC 0
-ABC 1.7320508075689
+ABC 1.73205080756888
CREATE TABLE t2 AS SELECT f1, SQRT(f2) my_sqrt FROM t1;
SELECT * FROM t2 order by 2;
f1 ABC
diff --git a/mysql-test/suite/funcs_1/r/myisam_views.result b/mysql-test/suite/funcs_1/r/myisam_views.result
index e4d6dd4cf8e..c0b12796355 100644
--- a/mysql-test/suite/funcs_1/r/myisam_views.result
+++ b/mysql-test/suite/funcs_1/r/myisam_views.result
@@ -23043,7 +23043,7 @@ ERROR 42S02: Table 'test.v1' doesn't exist
CHECK TABLE v1;
Table Op Msg_type Msg_text
test.v1 check Error Table 'test.v1' doesn't exist
-test.v1 check error Corrupt
+test.v1 check status Operation failed
DESCRIBE v1;
ERROR 42S02: Table 'test.v1' doesn't exist
EXPLAIN SELECT * FROM v1;
diff --git a/mysql-test/t/alter_table-big.test b/mysql-test/t/alter_table-big.test
index 9a773f48a9c..acc4f73dfff 100644
--- a/mysql-test/t/alter_table-big.test
+++ b/mysql-test/t/alter_table-big.test
@@ -1,4 +1,4 @@
-# In order to be more or less robust test for bug#25044 has to take
+# In order to be more or less robust test for Bug#25044 has to take
# significant time (e.g. about 9 seconds on my (Dmitri's) computer)
# so we probably want execute it only in --big-test mode.
# Also in 5.1 this test will require statement-based binlog.
@@ -6,8 +6,8 @@
#
-# Test for bug #25044 "ALTER TABLE ... ENABLE KEYS acquires global
-# 'opening tables' lock".
+# Test for Bug#25044 ALTER TABLE ... ENABLE KEYS acquires global
+# 'opening tables' lock
#
# ALTER TABLE ... ENABLE KEYS should not acquire LOCK_open mutex for
# the whole its duration as it prevents other queries from execution.
@@ -57,6 +57,7 @@ show binlog events in 'master-bin.000001' from 98;
# Clean up
drop tables t1, t2;
+disconnect addconroot;
--echo End of 5.0 tests
diff --git a/mysql-test/t/connect.test b/mysql-test/t/connect.test
index 2147d5b71af..c3a14964bb7 100644
--- a/mysql-test/t/connect.test
+++ b/mysql-test/t/connect.test
@@ -18,12 +18,16 @@ connect (con2,localhost,root,,test);
show tables;
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
---error 1045
+--error ER_ACCESS_DENIED_ERROR
connect (fail_con,localhost,root,z,test2);
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
---error 1045
+--error ER_ACCESS_DENIED_ERROR
connect (fail_con,localhost,root,z,);
+connection default;
+disconnect con1;
+disconnect con2;
+
grant ALL on *.* to test@localhost identified by "gambling";
grant ALL on *.* to test@127.0.0.1 identified by "gambling";
@@ -35,20 +39,23 @@ show tables;
connect (con4,localhost,test,gambling,test);
show tables;
+connection default;
+disconnect con3;
+disconnect con4;
+
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
---error 1045
+--error ER_ACCESS_DENIED_ERROR
connect (fail_con,localhost,test,,test2);
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
---error 1045
+--error ER_ACCESS_DENIED_ERROR
connect (fail_con,localhost,test,,"");
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
---error 1045
+--error ER_ACCESS_DENIED_ERROR
connect (fail_con,localhost,test,zorro,test2);
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
---error 1045
+--error ER_ACCESS_DENIED_ERROR
connect (fail_con,localhost,test,zorro,);
-
# check if old password version also works
update mysql.user set password=old_password("gambling2") where user=_binary"test";
flush privileges;
@@ -57,30 +64,34 @@ connect (con10,localhost,test,gambling2,);
connect (con5,localhost,test,gambling2,mysql);
connection con5;
set password="";
---error 1372
+--error ER_PASSWD_LENGTH
set password='gambling3';
set password=old_password('gambling3');
show tables;
connect (con6,localhost,test,gambling3,test);
show tables;
+connection default;
+disconnect con10;
+disconnect con5;
+disconnect con6;
+
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
---error 1045
+--error ER_ACCESS_DENIED_ERROR
connect (fail_con,localhost,test,,test2);
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
---error 1045
+--error ER_ACCESS_DENIED_ERROR
connect (fail_con,localhost,test,,);
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
---error 1045
+--error ER_ACCESS_DENIED_ERROR
connect (fail_con,localhost,test,zorro,test2);
--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
---error 1045
+--error ER_ACCESS_DENIED_ERROR
connect (fail_con,localhost,test,zorro,);
# remove user 'test' so that other tests which may use 'test'
# do not depend on this test.
-
delete from mysql.user where user=_binary"test";
flush privileges;
@@ -98,4 +109,5 @@ disconnect con7;
connection default;
drop table t1;
+
# End of 4.1 tests
diff --git a/mysql-test/t/consistent_snapshot.test b/mysql-test/t/consistent_snapshot.test
index 8da8e9ce660..82edf2e22b2 100644
--- a/mysql-test/t/consistent_snapshot.test
+++ b/mysql-test/t/consistent_snapshot.test
@@ -1,43 +1,61 @@
--- source include/have_innodb.inc
+--source include/have_innodb.inc
+
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
--disable_warnings
-drop table if exists t1;
+DROP TABLE IF EXISTS t1;
--enable_warnings
+--echo # Establish connection con1 (user=root)
connect (con1,localhost,root,,);
+--echo # Establish connection con2 (user=root)
connect (con2,localhost,root,,);
### Test 1:
### - While a consistent snapshot transaction is executed,
### no external inserts should be visible to the transaction.
+--echo # Switch to connection con1
connection con1;
-create table t1 (a int) engine=innodb;
-start transaction with consistent snapshot;
+CREATE TABLE t1 (a INT) ENGINE=innodb;
+START TRANSACTION WITH CONSISTENT SNAPSHOT;
+--echo # Switch to connection con2
connection con2;
-insert into t1 values(1);
+INSERT INTO t1 VALUES(1);
+--echo # Switch to connection con1
connection con1;
-select * from t1; # if consistent snapshot was set as expected, we
+SELECT * FROM t1; # if consistent snapshot was set as expected, we
# should see nothing.
-commit;
+COMMIT;
### Test 2:
### - For any non-consistent snapshot transaction, external
### committed inserts should be visible to the transaction.
-delete from t1;
-start transaction; # Now we omit WITH CONSISTENT SNAPSHOT
+DELETE FROM t1;
+START TRANSACTION; # Now we omit WITH CONSISTENT SNAPSHOT
+--echo # Switch to connection con2
connection con2;
-insert into t1 values(1);
+INSERT INTO t1 VALUES(1);
+--echo # Switch to connection con1
connection con1;
-select * from t1; # if consistent snapshot was not set, as expected, we
+SELECT * FROM t1; # if consistent snapshot was not set, as expected, we
# should see 1.
-commit;
+COMMIT;
-drop table t1;
+--echo # Switch to connection default + close connections con1 and con2
+connection default;
+disconnect con1;
+disconnect con2;
+DROP TABLE t1;
# End of 4.1 tests
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
+
diff --git a/mysql-test/t/ctype_collate.test b/mysql-test/t/ctype_collate.test
index cfef8dfe81a..6b6abbcfbcc 100644
--- a/mysql-test/t/ctype_collate.test
+++ b/mysql-test/t/ctype_collate.test
@@ -229,3 +229,17 @@ insert into t1 set a=0x6c;
insert into t1 set a=0x4c98;
check table t1 extended;
drop table t1;
+
+#
+# Bug#41627 Illegal mix of collations in LEAST / GREATEST / CASE
+#
+select least(_latin1'a',_latin2'b',_latin5'c' collate latin5_turkish_ci);
+create table t1
+select least(_latin1'a',_latin2'b',_latin5'c' collate latin5_turkish_ci) as f1;
+show create table t1;
+drop table t1;
+
+select case _latin1'a' when _latin2'b' then 1 when _latin5'c' collate
+latin5_turkish_ci then 2 else 3 end;
+
+select concat(_latin1'a',_latin2'b',_latin5'c' collate latin5_turkish_ci);
diff --git a/mysql-test/t/dirty_close.test b/mysql-test/t/dirty_close.test
index f1c2c88ae83..1bbd53e8c06 100644
--- a/mysql-test/t/dirty_close.test
+++ b/mysql-test/t/dirty_close.test
@@ -1,3 +1,7 @@
+
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
connect (con1,localhost,root,,);
connect (con2,localhost,root,,);
connection con1;
@@ -5,12 +9,19 @@ dirty_close con1;
connection con2;
--disable_warnings
-drop table if exists t1;
+DROP TABLE IF EXISTS t1;
--enable_warnings
-create table t1 (n int);
-insert into t1 values (1),(2),(3);
-select * from t1;
-drop table t1;
+CREATE TABLE t1 (n INT);
+INSERT INTO t1 VALUES (1),(2),(3);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+connection default;
+disconnect con2;
# End of 4.1 tests
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
+
diff --git a/mysql-test/t/explain.test b/mysql-test/t/explain.test
index 0247aca82df..1bc98a8acb1 100644
--- a/mysql-test/t/explain.test
+++ b/mysql-test/t/explain.test
@@ -123,4 +123,17 @@ execute s1;
DROP TABLE t1,t2;
+
+#
+# Bug #43354: Use key hint can crash server in explain extended query
+#
+
+CREATE TABLE t1 (a INT PRIMARY KEY);
+
+--error ER_KEY_DOES_NOT_EXITS
+EXPLAIN EXTENDED SELECT COUNT(a) FROM t1 USE KEY(a);
+
+DROP TABLE t1;
+
+
# End of 5.0 tests.
diff --git a/mysql-test/t/federated.test b/mysql-test/t/federated.test
index c977cb65fa0..ee9d1981558 100644
--- a/mysql-test/t/federated.test
+++ b/mysql-test/t/federated.test
@@ -1843,6 +1843,28 @@ DROP TABLE t1;
connection master;
DROP TABLE t1;
+--echo #
+--echo # BUG#21360 - mysqldump error on federated tables
+--echo #
+connection slave;
+--echo #Switch to Connection Slave
+CREATE TABLE t1(id VARCHAR(20) NOT NULL, PRIMARY KEY(id));
+INSERT INTO t1 VALUES ('text1'),('text2'),('text3'),('text4');
+
+connection master;
+--echo #Switch to Connection Master
+--replace_result $SLAVE_MYPORT SLAVE_PORT
+eval CREATE TABLE t1(id VARCHAR(20) NOT NULL, PRIMARY KEY(id)) ENGINE=FEDERATED
+ CONNECTION='mysql://root@127.0.0.1:$SLAVE_MYPORT/test/t1';
+--echo # Dump table t1 using mysqldump tool
+--replace_result $SLAVE_MYPORT SLAVE_PORT
+--exec $MYSQL_DUMP --compact test t1
+DROP TABLE t1;
+
+connection slave;
+--echo #Switch to Connection Slave
+DROP TABLE t1;
+
connection default;
--echo End of 5.0 tests
diff --git a/mysql-test/t/flush_block_commit.test b/mysql-test/t/flush_block_commit.test
index 0c1d2b82df6..74892def63f 100644
--- a/mysql-test/t/flush_block_commit.test
+++ b/mysql-test/t/flush_block_commit.test
@@ -4,74 +4,106 @@
# This is intended to mimick how mysqldump and innobackup work.
# And it requires InnoDB
--- source include/have_innodb.inc
+--source include/have_innodb.inc
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
+--echo # Establish connection con1 (user=root)
connect (con1,localhost,root,,);
+--echo # Establish connection con2 (user=root)
connect (con2,localhost,root,,);
+--echo # Establish connection con3 (user=root)
connect (con3,localhost,root,,);
+--echo # Switch to connection con1
connection con1;
--disable_warnings
-drop table if exists t1;
+DROP TABLE IF EXISTS t1;
--enable_warnings
-create table t1 (a int) engine=innodb;
+CREATE TABLE t1 (a INT) ENGINE=innodb;
# blocks COMMIT ?
-begin;
-insert into t1 values(1);
+BEGIN;
+INSERT INTO t1 VALUES(1);
+--echo # Switch to connection con2
connection con2;
-flush tables with read lock;
-select * from t1;
+FLUSH TABLES WITH READ LOCK;
+SELECT * FROM t1;
+--echo # Switch to connection con1
connection con1;
-send commit; # blocked by con2
+send COMMIT; # blocked by con2
sleep 1;
+--echo # Switch to connection con2
connection con2;
-select * from t1; # verify con1 was blocked and data did not move
-unlock tables;
+SELECT * FROM t1; # verify con1 was blocked and data did not move
+UNLOCK TABLES;
+--echo # Switch to connection con1
connection con1;
reap;
# No deadlock ?
+--echo # Switch to connection con1
connection con1;
-begin;
-select * from t1 for update;
+BEGIN;
+SELECT * FROM t1 FOR UPDATE;
+--echo # Switch to connection con2
connection con2;
-begin;
-send select * from t1 for update; # blocked by con1
+BEGIN;
+send SELECT * FROM t1 FOR UPDATE; # blocked by con1
sleep 1;
+--echo # Switch to connection con3
connection con3;
-send flush tables with read lock; # blocked by con2
+send FLUSH TABLES WITH READ LOCK; # blocked by con2
+--echo # Switch to connection con1
connection con1;
-commit; # should not be blocked by con3
+COMMIT; # should not be blocked by con3
+--echo # Switch to connection con2
connection con2;
reap;
+--echo # Switch to connection con3
connection con3;
reap;
-unlock tables;
+UNLOCK TABLES;
-# BUG#6732 FLUSH TABLES WITH READ LOCK + COMMIT hangs later FLUSH TABLES
-# WITH READ LOCK
+# Bug#6732 FLUSH TABLES WITH READ LOCK + COMMIT hangs later FLUSH TABLES
+# WITH READ LOCK
+--echo # Switch to connection con2
connection con2;
-commit; # unlock InnoDB row locks to allow insertions
+COMMIT; # unlock InnoDB row locks to allow insertions
+--echo # Switch to connection con1
connection con1;
-begin;
-insert into t1 values(10);
-flush tables with read lock;
-commit;
-unlock tables;
+BEGIN;
+INSERT INTO t1 VALUES(10);
+FLUSH TABLES WITH READ LOCK;
+COMMIT;
+UNLOCK TABLES;
+--echo # Switch to connection con2
connection con2;
-flush tables with read lock; # bug caused hang here
-unlock tables;
+FLUSH TABLES WITH READ LOCK; # bug caused hang here
+UNLOCK TABLES;
+
+# Bug#7358 SHOW CREATE DATABASE fails if open transaction
+
+BEGIN;
+SELECT * FROM t1;
+SHOW CREATE DATABASE test;
-# BUG#7358 SHOW CREATE DATABASE fails if open transaction
+DROP TABLE t1;
-begin;
-select * from t1;
-show create database test;
-drop table t1;
+# Cleanup
+--echo # Switch to connection default and close connections con1, con2, con3
+connection default;
+disconnect con1;
+disconnect con2;
+disconnect con3;
# End of 4.1 tests
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
+
diff --git a/mysql-test/t/flush_block_commit_notembedded.test b/mysql-test/t/flush_block_commit_notembedded.test
index 4a0300acf78..aea38250218 100644
--- a/mysql-test/t/flush_block_commit_notembedded.test
+++ b/mysql-test/t/flush_block_commit_notembedded.test
@@ -3,32 +3,51 @@
# We verify that we did not introduce a deadlock.
# This is intended to mimick how mysqldump and innobackup work.
--- source include/have_log_bin.inc
+--source include/have_log_bin.inc
# And it requires InnoDB
--- source include/have_log_bin.inc
--- source include/have_innodb.inc
+--source include/have_log_bin.inc
+--source include/have_innodb.inc
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
+
+--echo # Establish connection con1 (user=root)
connect (con1,localhost,root,,);
+--echo # Establish connection con2 (user=root)
connect (con2,localhost,root,,);
# FLUSH TABLES WITH READ LOCK should block writes to binlog too
+--echo # Switch to connection con1
connection con1;
-create table t1 (a int) engine=innodb;
-reset master;
-set autocommit=0;
-insert t1 values (1);
+CREATE TABLE t1 (a INT) ENGINE=innodb;
+RESET MASTER;
+SET AUTOCOMMIT=0;
+INSERT t1 VALUES (1);
+--echo # Switch to connection con2
connection con2;
-flush tables with read lock;
-show master status;
+FLUSH TABLES WITH READ LOCK;
+SHOW MASTER STATUS;
+--echo # Switch to connection con1
connection con1;
-send commit;
+send COMMIT;
+--echo # Switch to connection con2
connection con2;
sleep 1;
-show master status;
-unlock tables;
+SHOW MASTER STATUS;
+UNLOCK TABLES;
+--echo # Switch to connection con1
connection con1;
reap;
-drop table t1;
-set autocommit=1;
+DROP TABLE t1;
+SET AUTOCOMMIT=1;
+
+--echo # Switch to connection default and close connections con1 and con2
+connection default;
+disconnect con1;
+disconnect con2;
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
diff --git a/mysql-test/t/flush_read_lock_kill.test b/mysql-test/t/flush_read_lock_kill.test
index 19a47b2893a..b767a0758d4 100644
--- a/mysql-test/t/flush_read_lock_kill.test
+++ b/mysql-test/t/flush_read_lock_kill.test
@@ -8,19 +8,27 @@
# won't test anything interesting).
# This also won't work with the embedded server test
--- source include/not_embedded.inc
+--source include/not_embedded.inc
--- source include/have_debug.inc
+--source include/have_debug.inc
+
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
+# Disable concurrent inserts to avoid test failures when reading the
+# connection id which was inserted into a table by another thread.
+SET @old_concurrent_insert= @@global.concurrent_insert;
+SET @@global.concurrent_insert= 0;
connect (con1,localhost,root,,);
connect (con2,localhost,root,,);
connection con1;
--disable_warnings
-drop table if exists t1;
+DROP TABLE IF EXISTS t1;
--enable_warnings
-create table t1 (kill_id int);
-insert into t1 values(connection_id());
+CREATE TABLE t1 (kill_id INT);
+INSERT INTO t1 VALUES(connection_id());
# Thanks to the parameter we passed to --debug, this FLUSH will
# block on a debug build running with our --debug=make_global... It
@@ -28,14 +36,14 @@ insert into t1 values(connection_id());
# --debug) it will succeed immediately
connection con1;
-send flush tables with read lock;
+send FLUSH TABLES WITH READ LOCK;
# kill con1
connection con2;
-select ((@id := kill_id) - kill_id) from t1;
+SELECT ((@id := kill_id) - kill_id) FROM t1;
--sleep 2 # leave time for FLUSH to block
-kill connection @id;
+KILL CONNECTION @id;
connection con1;
# On debug builds it will be error 1053 (killed); on non-debug, or
@@ -46,4 +54,13 @@ connection con1;
reap;
connection con2;
-drop table t1;
+DROP TABLE t1;
+connection default;
+disconnect con2;
+
+# Restore global concurrent_insert value
+SET @@global.concurrent_insert= @old_concurrent_insert;
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
+
diff --git a/mysql-test/t/init_connect.test b/mysql-test/t/init_connect.test
index 0a08559279c..b6bac5f65fa 100644
--- a/mysql-test/t/init_connect.test
+++ b/mysql-test/t/init_connect.test
@@ -5,6 +5,9 @@
# should work with embedded server after mysqltest is fixed
--source include/not_embedded.inc
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
--source include/add_anonymous_users.inc
connect (con0,localhost,root,,);
@@ -233,7 +236,8 @@ connect (con1,localhost,mysqltest1,,);
connection con1;
select * from t1;
-connection con0;
+connection default;
+disconnect con0;
disconnect con1;
drop trigger trg1;
@@ -244,3 +248,7 @@ set global init_connect="set @a='a\\0c'";
revoke all privileges, grant option from mysqltest1@localhost;
drop user mysqltest1@localhost;
drop table t1, t2;
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
+
diff --git a/mysql-test/t/lock_multi.test b/mysql-test/t/lock_multi.test
index 089a60edb3d..6c3c942b046 100644
--- a/mysql-test/t/lock_multi.test
+++ b/mysql-test/t/lock_multi.test
@@ -1,4 +1,8 @@
-- source include/not_embedded.inc
+
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
--disable_warnings
drop table if exists t1,t2;
--enable_warnings
@@ -14,12 +18,23 @@ create table t1(n int);
insert into t1 values (1);
lock tables t1 write;
connection writer;
-send update low_priority t1 set n = 4;
+send
+update low_priority t1 set n = 4;
connection reader;
---sleep 2
-send select n from t1;
+# Sleep a bit till the update of connection writer is in work and hangs
+let $wait_timeout= 5;
+let $show_statement= SHOW PROCESSLIST;
+let $field= State;
+let $condition= = 'Locked';
+--source include/wait_show_condition.inc
+send
+select n from t1;
connection locker;
---sleep 2
+# Sleep a bit till the select of connection reader is in work and hangs
+# Here we cannot use include/wait_show_condition.inc because this routine
+# cannot count the number of 'Locked' sessions or access two columns within
+# the same query_get_value call.
+--sleep 3
unlock tables;
connection writer;
reap;
@@ -32,12 +47,23 @@ create table t1(n int);
insert into t1 values (1);
lock tables t1 read;
connection writer;
-send update low_priority t1 set n = 4;
+send
+update low_priority t1 set n = 4;
connection reader;
---sleep 2
-send select n from t1;
+# Sleep a bit till the update of connection writer is in work and hangs
+let $wait_timeout= 5;
+let $show_statement= SHOW PROCESSLIST;
+let $field= State;
+let $condition= = 'Locked';
+--source include/wait_show_condition.inc
+#
+send
+select n from t1;
connection locker;
---sleep 2
+# Sleep a bit till the select of connection reader is in work and hangs
+# Here we cannot use include/wait_show_condition.inc.
+--sleep 3
+#
unlock tables;
connection writer;
reap;
@@ -58,10 +84,13 @@ insert into t1 values(2,2);
insert into t2 values(1,2);
lock table t1 read;
connection writer;
---sleep 2
-send update t1,t2 set c=a where b=d;
+send
+update t1,t2 set c=a where b=d;
connection reader;
---sleep 2
+# Sleep a bit till the update of connection writer is finished
+# Here we cannot use include/wait_show_condition.inc.
+--sleep 3
+#
select c from t2;
connection writer;
reap;
@@ -70,7 +99,7 @@ drop table t1;
drop table t2;
#
-# Test problem when using locks on many tables and droping a table that
+# Test problem when using locks on many tables and dropping a table that
# is to-be-locked by another thread
#
@@ -79,11 +108,18 @@ create table t1 (a int);
create table t2 (a int);
lock table t1 write, t2 write;
connection reader;
-send insert t1 select * from t2;
+send
+insert t1 select * from t2;
connection locker;
+# Sleep a bit till the insert of connection reader is in work and hangs
+let $wait_timeout= 5;
+let $show_statement= SHOW PROCESSLIST;
+let $field= State;
+let $condition= = 'Locked';
+--source include/wait_show_condition.inc
drop table t2;
connection reader;
---error 1146
+--error ER_NO_SUCH_TABLE
reap;
connection locker;
drop table t1;
@@ -91,7 +127,7 @@ drop table t1;
# End of 4.1 tests
#
-# BUG#9998 - MySQL client hangs on USE "database"
+# Bug#9998 MySQL client hangs on USE "database"
#
create table t1(a int);
lock tables t1 write;
@@ -102,7 +138,7 @@ unlock tables;
drop table t1;
#
-# Bug#19815 - CREATE/RENAME/DROP DATABASE can deadlock on a global read lock
+# Bug#19815 CREATE/RENAME/DROP DATABASE can deadlock on a global read lock
#
connect (con1,localhost,root,,);
connect (con2,localhost,root,,);
@@ -114,12 +150,18 @@ FLUSH TABLES WITH READ LOCK;
# With bug in place: acquire LOCK_mysql_create_table and
# wait in wait_if_global_read_lock().
connection con2;
-send DROP DATABASE mysqltest_1;
---sleep 1
+send
+DROP DATABASE mysqltest_1;
#
# With bug in place: try to acquire LOCK_mysql_create_table...
# When fixed: Reject dropping db because of the read lock.
connection con1;
+# Wait a bit so that the session con2 is in state "Waiting for release of readlock"
+let $wait_timeout= 5;
+let $show_statement= SHOW PROCESSLIST;
+let $field= State;
+let $condition= = 'Waiting for release of readlock';
+--source include/wait_show_condition.inc
--error ER_CANT_UPDATE_WITH_READLOCK
DROP DATABASE mysqltest_1;
UNLOCK TABLES;
@@ -135,26 +177,33 @@ disconnect con2;
--error ER_DB_DROP_EXISTS
DROP DATABASE mysqltest_1;
+
#
-# Bug#16986 - Deadlock condition with MyISAM tables
+# Bug#16986 Deadlock condition with MyISAM tables
#
# Need a matching user in mysql.user for multi-table select
--source include/add_anonymous_users.inc
connection locker;
-use mysql;
+USE mysql;
LOCK TABLES columns_priv WRITE, db WRITE, host WRITE, user WRITE;
FLUSH TABLES;
---sleep 1
-#
+
+
connection reader;
-use mysql;
-#NOTE: This must be a multi-table select, otherwise the deadlock will not occur
-send SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1;
---sleep 1
+USE mysql;
+# Note: This must be a multi-table select, otherwise the deadlock will not occur
+send
+SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1;
#
connection locker;
+# Sleep a bit till the select of connection reader is in work and hangs
+let $wait_timeout= 5;
+let $show_statement= SHOW PROCESSLIST;
+let $field= State;
+let $condition= = 'Locked';
+--source include/wait_show_condition.inc
# Make test case independent from earlier grants.
--replace_result "Table is already up to date" "OK"
OPTIMIZE TABLES columns_priv, db, host, user;
@@ -162,7 +211,7 @@ UNLOCK TABLES;
#
connection reader;
reap;
-use test;
+USE test;
#
connection locker;
use test;
@@ -177,11 +226,17 @@ LOCK TABLE t1 WRITE;
#
# This waits until t1 is unlocked.
connection locker;
-send FLUSH TABLES WITH READ LOCK;
---sleep 1
+send
+FLUSH TABLES WITH READ LOCK;
#
# This must not block.
connection writer;
+# Sleep a bit till the flush of connection locker is in work and hangs
+let $wait_timeout= 5;
+let $show_statement= SHOW PROCESSLIST;
+let $field= State;
+let $condition= = 'Flushing tables';
+--source include/wait_show_condition.inc
CREATE TABLE t2 (c1 int);
UNLOCK TABLES;
#
@@ -201,12 +256,18 @@ LOCK TABLE t1 WRITE;
#
# This waits until t1 is unlocked.
connection locker;
-send FLUSH TABLES WITH READ LOCK;
---sleep 1
+send
+FLUSH TABLES WITH READ LOCK;
#
# This must not block.
connection writer;
---error 1100
+# Sleep a bit till the flush of connection locker is in work and hangs
+let $wait_timeout= 5;
+let $show_statement= SHOW PROCESSLIST;
+let $field= State;
+let $condition= = 'Flushing tables';
+--source include/wait_show_condition.inc
+--error ER_TABLE_NOT_LOCKED
CREATE TABLE t2 AS SELECT * FROM t1;
UNLOCK TABLES;
#
@@ -220,8 +281,9 @@ DROP TABLE t1;
--source include/delete_anonymous_users.inc
+
#
-# Bug #17264: MySQL Server freeze
+# Bug#17264 MySQL Server freeze
#
connection locker;
# Disable warnings to allow test to run also without InnoDB
@@ -230,17 +292,29 @@ create table t1 (f1 int(12) unsigned not null auto_increment, primary key(f1)) e
--enable_warnings
lock tables t1 write;
connection writer;
---sleep 2
+# mleich: I have doubts if the next sleep is really necessary
+# Therefore I set it to comment but don't remove it
+# in case it hat to be enabled again.
+# --sleep 2
delimiter //;
-send alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; //
+send
+alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; //
delimiter ;//
connection reader;
---sleep 2
+# Wait till connection writer is blocked
+let $wait_timeout= 5;
+let $show_statement= SHOW PROCESSLIST;
+let $field= State;
+let $condition= = 'Locked';
+--source include/wait_show_condition.inc
delimiter //;
-send alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; //
+send
+alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; //
delimiter ;//
connection locker;
---sleep 2
+# Wait till connection reader is blocked
+# Here we cannot use include/wait_show_condition.inc.
+--sleep 3
unlock tables;
connection writer;
reap;
@@ -263,7 +337,7 @@ lock tables t1 read;
--echo connection: writer
connection writer;
let $ID= `select connection_id()`;
---send create table t2 like t1;
+send create table t2 like t1;
--echo connection: default
connection default;
let $show_type= open tables where in_use=2 and name_locked=1;
@@ -282,8 +356,8 @@ connection default;
drop table t1;
#
-# Bug #38691: segfault/abort in ``UPDATE ...JOIN'' while
-# ``FLUSH TABLES WITH READ LOCK''
+# Bug#38691 segfault/abort in ``UPDATE ...JOIN'' while
+# ``FLUSH TABLES WITH READ LOCK''
#
--connection default
@@ -354,7 +428,7 @@ while ($i) {
dec $i;
--connection locker
---error 0,1060
+--error 0,ER_DUP_FIELDNAME
ALTER TABLE t2 ADD COLUMN a int(11) unsigned default NULL;
UPDATE t2 SET a=b;
@@ -362,11 +436,11 @@ while ($i) {
--send UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a) SET a = NULL WHERE t1.b <> t2.b
--connection locker
---error 0,1091
+--error 0,ER_CANT_DROP_FIELD_OR_KEY
ALTER TABLE t2 DROP COLUMN a;
--connection writer
---error 0,1054
+--error 0,ER_BAD_FIELD_ERROR
--reap
}
--enable_query_log
@@ -379,7 +453,7 @@ while ($i) {
dec $i;
--connection locker
---error 0,1060
+--error 0,ER_DUP_FIELDNAME
ALTER TABLE t2 ADD COLUMN a int(11) unsigned default NULL;
UPDATE t2 SET a=b;
@@ -388,11 +462,11 @@ while ($i) {
--send EXECUTE stmt
--connection locker
---error 0,1091
+--error 0,ER_CANT_DROP_FIELD_OR_KEY
ALTER TABLE t2 DROP COLUMN a;
--connection writer
---error 0,1054
+--error 0,ER_BAD_FIELD_ERROR
--reap
}
@@ -400,8 +474,9 @@ while ($i) {
--connection default
DROP TABLE t1, t2, t3;
+
#
-# Bug#38499: flush tables and multitable table update with derived table cause
+# Bug#38499: flush tables and multitable table update with derived table cause
# crash
#
@@ -460,7 +535,7 @@ while ($i) {
dec $i;
--connection locker
---error 0,1060
+--error 0,ER_DUP_FIELDNAME
ALTER TABLE t1 ADD COLUMN a int(11) unsigned default NULL;
UPDATE t1 SET a=b;
@@ -468,11 +543,11 @@ while ($i) {
--send UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0;
--connection locker
---error 0,1091
+--error 0,ER_CANT_DROP_FIELD_OR_KEY
ALTER TABLE t1 DROP COLUMN a;
--connection writer
---error 0,1054 # unknown column error
+--error 0,ER_BAD_FIELD_ERROR # unknown column error
--reap
}
--enable_query_log
@@ -485,7 +560,7 @@ while ($i) {
dec $i;
--connection locker
---error 0,1060
+--error 0,ER_DUP_FIELDNAME
ALTER TABLE t1 ADD COLUMN a INT;
UPDATE t1 SET a=b;
@@ -494,11 +569,11 @@ while ($i) {
--send EXECUTE stmt
--connection locker
---error 0,1091
+--error 0,ER_CANT_DROP_FIELD_OR_KEY
ALTER TABLE t1 DROP COLUMN a;
--connection writer
---error 0,1054 # Unknown column 'a' in 'field list'
+--error 0,ER_BAD_FIELD_ERROR # Unknown column 'a' in 'field list'
--reap
}
--enable_query_log
@@ -557,7 +632,7 @@ while ($i) {
dec $i;
--connection locker
---error 0,1060
+--error 0,ER_DUP_FIELDNAME
ALTER TABLE t1 ADD COLUMN a int(11) unsigned default NULL;
UPDATE t1 SET a=b;
@@ -565,11 +640,11 @@ while ($i) {
--send UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0;
--connection locker
---error 0,1091
+--error 0,ER_CANT_DROP_FIELD_OR_KEY
ALTER TABLE t1 DROP COLUMN a;
--connection writer
---error 0,1054 # Unknown column 'a' in 'field list'
+--error 0,ER_BAD_FIELD_ERROR # Unknown column 'a' in 'field list'
--reap
}
--enable_query_log
@@ -582,7 +657,7 @@ while ($i) {
dec $i;
--connection locker
---error 0,1060
+--error 0,ER_DUP_FIELDNAME
ALTER TABLE t1 ADD COLUMN a INT;
UPDATE t1 SET a=b;
@@ -591,15 +666,25 @@ while ($i) {
--send EXECUTE stmt
--connection locker
---error 0,1091
+--error 0,ER_CANT_DROP_FIELD_OR_KEY
ALTER TABLE t1 DROP COLUMN a;
--connection writer
---error 0,1054 # Unknown column 'a' in 'field list'
+--error 0,ER_BAD_FIELD_ERROR # Unknown column 'a' in 'field list'
--reap
}
--enable_query_log
--connection default
DROP TABLE t1;
+
+# Close connections used in many subtests
+--disconnect reader
+--disconnect locker
+--disconnect writer
+
# End of 5.0 tests
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
+
diff --git a/mysql-test/t/lock_multi_bug38499.test b/mysql-test/t/lock_multi_bug38499.test
new file mode 100644
index 00000000000..8178987e802
--- /dev/null
+++ b/mysql-test/t/lock_multi_bug38499.test
@@ -0,0 +1,221 @@
+# Bug38499 flush tables and multitable table update with derived table cause crash
+# MySQL >= 5.0
+#
+
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
+connect (locker,localhost,root,,);
+connect (writer,localhost,root,,);
+
+--connection default
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+CREATE TABLE t1( a INT, b INT );
+INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3), (4, 4);
+
+--echo # 1. test regular tables
+--echo # 1.1. test altering of columns that multiupdate doesn't use
+--echo # 1.1.1. normal mode
+
+--disable_query_log
+let $i = 100;
+while ($i) {
+--dec $i
+
+--connection writer
+ send UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0;
+
+--connection locker
+ ALTER TABLE t1 ADD COLUMN (c INT);
+ ALTER TABLE t1 DROP COLUMN c;
+
+--connection writer
+--reap
+}
+
+--echo # 1.1.2. PS mode
+
+--connection writer
+PREPARE stmt FROM 'UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0';
+
+let $i = 100;
+while ($i) {
+--dec $i
+
+--connection writer
+--send EXECUTE stmt
+
+--connection locker
+ ALTER TABLE t1 ADD COLUMN (c INT);
+ ALTER TABLE t1 DROP COLUMN c;
+
+--connection writer
+--reap
+}
+--enable_query_log
+
+--echo # 1.2. test altering of columns that multiupdate uses
+--echo # 1.2.1. normal mode
+
+--connection default
+
+--disable_query_log
+let $i = 100;
+while ($i) {
+ dec $i;
+
+--connection locker
+--error 0,ER_DUP_FIELDNAME
+ ALTER TABLE t1 ADD COLUMN a int(11) unsigned default NULL;
+ UPDATE t1 SET a=b;
+
+--connection writer
+--send UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0;
+
+--connection locker
+--error 0,ER_CANT_DROP_FIELD_OR_KEY
+ ALTER TABLE t1 DROP COLUMN a;
+
+--connection writer
+--error 0,ER_BAD_FIELD_ERROR # unknown column error
+--reap
+}
+--enable_query_log
+
+--echo # 1.2.2. PS mode
+
+--disable_query_log
+let $i = 100;
+while ($i) {
+ dec $i;
+
+--connection locker
+--error 0,ER_DUP_FIELDNAME
+ ALTER TABLE t1 ADD COLUMN a INT;
+ UPDATE t1 SET a=b;
+
+--connection writer
+ PREPARE stmt FROM 'UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0';
+--send EXECUTE stmt
+
+--connection locker
+--error 0,ER_CANT_DROP_FIELD_OR_KEY
+ ALTER TABLE t1 DROP COLUMN a;
+
+--connection writer
+--error 0,ER_BAD_FIELD_ERROR # Unknown column 'a' in 'field list'
+--reap
+}
+--enable_query_log
+--connection default
+ALTER TABLE t1 ADD COLUMN a INT;
+
+--echo # 2. test UNIONs
+--echo # 2.1. test altering of columns that multiupdate doesn't use
+--echo # 2.1.1. normal mode
+
+--disable_query_log
+let $i = 100;
+while ($i) {
+--dec $i
+
+--connection writer
+ send UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0;
+
+--connection locker
+ ALTER TABLE t1 ADD COLUMN (c INT);
+ ALTER TABLE t1 DROP COLUMN c;
+
+--connection writer
+--reap
+}
+
+--echo # 2.1.2. PS mode
+
+--connection writer
+PREPARE stmt FROM 'UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0';
+
+let $i = 100;
+while ($i) {
+--dec $i
+
+--connection writer
+--send EXECUTE stmt
+
+--connection locker
+ ALTER TABLE t1 ADD COLUMN (c INT);
+ ALTER TABLE t1 DROP COLUMN c;
+
+--connection writer
+--reap
+}
+--enable_query_log
+
+--echo # 2.2. test altering of columns that multiupdate uses
+--echo # 2.2.1. normal mode
+
+--connection default
+
+--disable_query_log
+let $i = 100;
+while ($i) {
+ dec $i;
+
+--connection locker
+--error 0,ER_DUP_FIELDNAME
+ ALTER TABLE t1 ADD COLUMN a int(11) unsigned default NULL;
+ UPDATE t1 SET a=b;
+
+--connection writer
+--send UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0;
+
+--connection locker
+--error 0,ER_CANT_DROP_FIELD_OR_KEY
+ ALTER TABLE t1 DROP COLUMN a;
+
+--connection writer
+--error 0,ER_BAD_FIELD_ERROR # Unknown column 'a' in 'field list'
+--reap
+}
+--enable_query_log
+
+--echo # 2.2.2. PS mode
+
+--disable_query_log
+let $i = 100;
+while ($i) {
+ dec $i;
+
+--connection locker
+--error 0,ER_DUP_FIELDNAME
+ ALTER TABLE t1 ADD COLUMN a INT;
+ UPDATE t1 SET a=b;
+
+--connection writer
+ PREPARE stmt FROM 'UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0';
+--send EXECUTE stmt
+
+--connection locker
+--error 0,ER_CANT_DROP_FIELD_OR_KEY
+ ALTER TABLE t1 DROP COLUMN a;
+
+--connection writer
+--error 0,ER_BAD_FIELD_ERROR # Unknown column 'a' in 'field list'
+--reap
+}
+--enable_query_log
+--connection default
+DROP TABLE t1;
+
+
+# Close connections
+--disconnect locker
+--disconnect writer
+
+# End of 5.0 tests
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
+
diff --git a/mysql-test/t/lock_multi_bug38691.test b/mysql-test/t/lock_multi_bug38691.test
new file mode 100644
index 00000000000..0458f31579e
--- /dev/null
+++ b/mysql-test/t/lock_multi_bug38691.test
@@ -0,0 +1,141 @@
+#
+# Bug#38691 segfault/abort in ``UPDATE ...JOIN'' while
+# ``FLUSH TABLES WITH READ LOCK''
+# MySQL >= 5.0
+#
+
+
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
+# Test to see if select will get the lock ahead of low priority update
+
+connect (locker,localhost,root,,);
+connect (writer,localhost,root,,);
+
+--connection default
+--disable_warnings
+DROP TABLE IF EXISTS t1,t2,t3;
+--enable_warnings
+
+CREATE TABLE t1 (
+ a int(11) unsigned default NULL,
+ b varchar(255) default NULL,
+ UNIQUE KEY a (a),
+ KEY b (b)
+);
+
+INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3);
+CREATE TABLE t2 SELECT * FROM t1;
+CREATE TABLE t3 SELECT * FROM t1;
+
+--echo # test altering of columns that multiupdate doesn't use
+
+--echo # normal mode
+
+--disable_query_log
+let $i = 100;
+while ($i) {
+--dec $i
+
+--connection writer
+ send UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a)
+ SET a = NULL WHERE t1.b <> t2.b;
+
+--connection locker
+ ALTER TABLE t2 ADD COLUMN (c INT);
+ ALTER TABLE t2 DROP COLUMN c;
+
+--connection writer
+--reap
+}
+
+--echo # PS mode
+
+--connection writer
+PREPARE stmt FROM 'UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a)
+ SET a = NULL WHERE t1.b <> t2.b';
+
+let $i = 100;
+while ($i) {
+--dec $i
+
+--connection writer
+--send EXECUTE stmt
+
+--connection locker
+ ALTER TABLE t2 ADD COLUMN (c INT);
+ ALTER TABLE t2 DROP COLUMN c;
+
+--connection writer
+--reap
+}
+--enable_query_log
+
+
+--echo # test altering of columns that multiupdate uses
+
+--echo # normal mode
+
+--connection default
+
+--disable_query_log
+let $i = 100;
+while ($i) {
+ dec $i;
+
+--connection locker
+--error 0,ER_DUP_FIELDNAME
+ ALTER TABLE t2 ADD COLUMN a int(11) unsigned default NULL;
+ UPDATE t2 SET a=b;
+
+--connection writer
+--send UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a) SET a = NULL WHERE t1.b <> t2.b
+
+--connection locker
+--error 0,ER_CANT_DROP_FIELD_OR_KEY
+ ALTER TABLE t2 DROP COLUMN a;
+
+--connection writer
+--error 0,ER_BAD_FIELD_ERROR
+--reap
+}
+--enable_query_log
+
+--echo # PS mode
+
+--disable_query_log
+let $i = 100;
+while ($i) {
+ dec $i;
+
+--connection locker
+--error 0,ER_DUP_FIELDNAME
+ ALTER TABLE t2 ADD COLUMN a int(11) unsigned default NULL;
+ UPDATE t2 SET a=b;
+
+--connection writer
+ PREPARE stmt FROM 'UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a) SET a = NULL WHERE t1.b <> t2.b';
+--send EXECUTE stmt
+
+--connection locker
+--error 0,ER_CANT_DROP_FIELD_OR_KEY
+ ALTER TABLE t2 DROP COLUMN a;
+
+--connection writer
+--error 0,ER_BAD_FIELD_ERROR
+--reap
+
+}
+--enable_query_log
+--connection default
+DROP TABLE t1, t2, t3;
+
+
+# Close connections
+--disconnect locker
+--disconnect writer
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
+
diff --git a/mysql-test/t/mysql.test b/mysql-test/t/mysql.test
index 12431e26596..54b204d3821 100644
--- a/mysql-test/t/mysql.test
+++ b/mysql-test/t/mysql.test
@@ -341,4 +341,37 @@ EOF
remove_file $MYSQLTEST_VARDIR/tmp/bug31060.sql;
+#
+# Bug #41486: extra character appears in BLOB for every ~40Mb after
+# mysqldump/import
+#
+
+# Have to change the global variable as the session variable is
+# read-only.
+set @old_max_allowed_packet = @@global.max_allowed_packet;
+# 2 MB blob length + some space for the rest of INSERT query
+set @@global.max_allowed_packet = 2 * 1024 * 1024 + 1024;
+
+# Create a new connection since the global max_allowed_packet
+# has no effect for the current connection
+connect (con1, localhost, root,,);
+connection con1;
+
+CREATE TABLE t1(data LONGBLOB);
+INSERT INTO t1 SELECT REPEAT('1', 2*1024*1024);
+
+--exec $MYSQL_DUMP test t1 >$MYSQLTEST_VARDIR/tmp/bug41486.sql
+# Check that the mysql client does not insert extra newlines when loading
+# strings longer than client's max_allowed_packet
+--exec $MYSQL --max_allowed_packet=1M test < $MYSQLTEST_VARDIR/tmp/bug41486.sql 2>&1
+SELECT LENGTH(data) FROM t1;
+
+remove_file $MYSQLTEST_VARDIR/tmp/bug41486.sql;
+DROP TABLE t1;
+
+connection default;
+disconnect con1;
+
+set @@global.max_allowed_packet = @old_max_allowed_packet;
+
--echo End of 5.0 tests
diff --git a/mysql-test/t/mysqlbinlog.test b/mysql-test/t/mysqlbinlog.test
index 87e70e61bef..1ca07a40df1 100644
--- a/mysql-test/t/mysqlbinlog.test
+++ b/mysql-test/t/mysqlbinlog.test
@@ -18,7 +18,7 @@ insert into t2 values ();
# set @a:=1
# insert into t2 values (@a);
-# test for load data and load data distributed among the several
+# test for load data and load data distributed among the several
# files (we need to fill up first binlog)
load data infile '../std_data_ln/words.dat' into table t1;
load data infile '../std_data_ln/words.dat' into table t1;
@@ -103,7 +103,7 @@ select "--- --position --" as "";
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
--exec $MYSQL_BINLOG --short-form --local-load=$MYSQLTEST_VARDIR/tmp/ --read-from-remote-server --position=231 --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000002
-# Bug#7853 (mysqlbinlog does not accept input from stdin)
+# Bug#7853 mysqlbinlog does not accept input from stdin
--disable_query_log
select "--- reading stdin --" as "";
--enable_query_log
@@ -117,7 +117,7 @@ select "--- reading stdin --" as "";
drop table t1,t2;
#
-#BUG#14157: utf8 encoding in binlog without set character_set_client
+# Bug#14157 utf8 encoding in binlog without set character_set_client
#
flush logs;
--write_file $MYSQLTEST_VARDIR/tmp/bug14157.sql
@@ -130,8 +130,8 @@ EOF
--exec $MYSQL test < $MYSQLTEST_VARDIR/tmp/bug14157.sql
--remove_file $MYSQLTEST_VARDIR/tmp/bug14157.sql
-# resulted binlog, parly consisting of multi-byte utf8 chars,
-# must be digestable for both client and server. In 4.1 the client
+# resulted binlog, parly consisting of multi-byte utf8 chars,
+# must be digestable for both client and server. In 4.1 the client
# should use default-character-set same as the server.
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000004 | $MYSQL
select * from t5 /* must be (1),(1) */;
@@ -157,7 +157,7 @@ select * from t5 order by c1;
drop table t5;
#
-# Bug#20396 Bin Log does not get DELIMETER cmd - Recover StoredProc fails
+# Bug#20396 Bin Log does not get DELIMETER cmd - Recover StoredProc fails
#
--disable_warnings
drop procedure if exists p1;
@@ -174,7 +174,6 @@ flush logs;
call p1();
drop procedure p1;
--error ER_SP_DOES_NOT_EXIST
-
call p1();
--replace_regex /SQL_LOAD_MB-[0-9]-[0-9]/SQL_LOAD_MB-#-#/
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000007
@@ -217,14 +216,14 @@ flush logs;
#
# Bug#28293 missed '#' sign in the hex dump when the dump length
-# is divisible by 16.
+# is divisible by 16.
#
CREATE TABLE t1 (c1 CHAR(10));
# we need this for getting fixed timestamps inside of this test
-flush logs;
+FLUSH LOGS;
INSERT INTO t1 VALUES ('0123456789');
-flush logs;
+FLUSH LOGS;
DROP TABLE t1;
# We create a table, patch, and load the output into it
@@ -232,11 +231,11 @@ DROP TABLE t1;
# We can easily see if a 'Query' line is missing the '#' character
# as described in the original bug
---disable_query_log
-CREATE TABLE patch (a blob);
+--disable_query_log
+CREATE TABLE patch (a BLOB);
--exec $MYSQL_BINLOG --hexdump --local-load=$MYSQLTEST_VARDIR/tmp/ $MYSQLTEST_VARDIR/log/master-bin.000011 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_tmp.dat
eval LOAD DATA LOCAL INFILE '$MYSQLTEST_VARDIR/tmp/mysqlbinlog_tmp.dat'
- INTO TABLE patch FIELDS TERMINATED by '' LINES STARTING BY '#';
+ INTO TABLE patch FIELDS TERMINATED BY '' LINES STARTING BY '#';
--remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog_tmp.dat
--enable_query_log
@@ -248,49 +247,51 @@ SELECT COUNT(*) AS `BUG#28293_expect_1` FROM patch WHERE a LIKE '%Query%';
DROP TABLE patch;
#
-# Bug #29928: incorrect connection_id() restoring from mysqlbinlog out
+# Bug#29928 incorrect connection_id() restoring from mysqlbinlog out
#
-flush logs;
-create table t1(a int);
-insert into t1 values(connection_id());
-let $a= `select a from t1`;
-flush logs;
+FLUSH LOGS;
+CREATE TABLE t1(a INT);
+INSERT INTO t1 VALUES(connection_id());
+let $a= `SELECT a FROM t1`;
+FLUSH LOGS;
--exec $MYSQL_BINLOG $MYSQLTEST_VARDIR/log/master-bin.000013 > $MYSQLTEST_VARDIR/tmp/bug29928.sql
-drop table t1;
-connect (con1, localhost, root, , test);
+DROP TABLE t1;
+connect (con1, localhost, root, , test);
connection con1;
--exec $MYSQL test < $MYSQLTEST_VARDIR/tmp/bug29928.sql
--remove_file $MYSQLTEST_VARDIR/tmp/bug29928.sql
-let $b= `select a from t1`;
+let $b= `SELECT a FROM t1`;
disconnect con1;
connection default;
-let $c= `select $a=$b`;
+let $c= `SELECT $a=$b`;
--echo $c
-drop table t1;
+DROP TABLE t1;
echo shell> mysqlbinlog std_data/corrupt-relay-bin.000624 > var/tmp/bug31793.sql;
error 1;
exec $MYSQL_BINLOG $MYSQL_TEST_DIR/std_data/corrupt-relay-bin.000624 > $MYSQLTEST_VARDIR/tmp/bug31793.sql;
+remove_file $MYSQLTEST_VARDIR/tmp/bug31793.sql;
#
-# Bug #37313 BINLOG Contains Incorrect server id
+# Bug#37313 BINLOG Contains Incorrect server id
#
-let $save_server_id= `select @@global.server_id`;
-let $s_id_max=`select (1 << 32) - 1`;
-eval set @@global.server_id= $s_id_max;
+let $binlog_file= $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug37313.binlog;
+let $save_server_id= `SELECT @@global.server_id`;
+let $s_id_max= `SELECT (1 << 32) - 1`;
+eval SET @@global.server_id= $s_id_max;
-reset master;
-flush logs;
---exec $MYSQL_BINLOG $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug37313.binlog
+RESET MASTER;
+FLUSH LOGS;
+--exec $MYSQL_BINLOG $MYSQLTEST_VARDIR/log/master-bin.000001 > $binlog_file
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
-eval select
-(@a:=load_file("$MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug37313.binlog"))
-is not null;
-let $s_id_unsigned= `select @a like "%server id $s_id_max%" /* must return 1 */`;
+eval SELECT
+(@a:=LOAD_FILE("$binlog_file"))
+IS NOT NULL;
+let $s_id_unsigned= `SELECT @a LIKE "%server id $s_id_max%" /* must return 1 */`;
echo *** Unsigned server_id $s_id_max is found: $s_id_unsigned ***;
-eval set @@global.server_id= $save_server_id;
---remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug37313.binlog
+eval SET @@global.server_id= $save_server_id;
+--remove_file $binlog_file
--echo End of 5.0 tests
diff --git a/mysql-test/t/mysqldump.test b/mysql-test/t/mysqldump.test
index f252e65c74c..52eecc62931 100644
--- a/mysql-test/t/mysqldump.test
+++ b/mysql-test/t/mysqldump.test
@@ -1649,6 +1649,20 @@ DROP TABLE t1,t2;
# We reset concurrent_inserts value to whatever it was at the start of the test
SET @@GLOBAL.CONCURRENT_INSERT = @OLD_CONCURRENT_INSERT;
+--echo #
+--echo # Bug #42635: mysqldump includes views that were excluded using
+--echo # the --ignore-table option
+--echo #
+
+create database db42635;
+use db42635;
+create table t1 (id int);
+create view db42635.v1 (c) as select * from db42635.t1;
+create view db42635.v2 (c) as select * from db42635.t1;
+--exec $MYSQL_DUMP --skip-comments --ignore-table=db42635.v1 db42635
+use test;
+drop database db42635;
+
--echo #
--echo # Bug#33550 mysqldump 4.0 compatibility broken
diff --git a/mysql-test/t/mysqltest.test b/mysql-test/t/mysqltest.test
index d087d38560b..0c104a4a6b3 100644
--- a/mysql-test/t/mysqltest.test
+++ b/mysql-test/t/mysqltest.test
@@ -6,6 +6,9 @@
# This test uses chmod, can't be run with root permissions
-- source include/not_as_root.inc
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
# ============================================================================
#
# Test of mysqltest itself
@@ -50,7 +53,7 @@ select otto from (select 1 as otto) as t1;
# ----------------------------------------------------------------------------
# Negative case(statement):
-# The derived table t1 does not contain a column named 'friedrich' .
+# The derived table t1 does not contain a column named 'friedrich' .
# --> ERROR 42S22: Unknown column 'friedrich' in 'field list and
# --> 1054: Unknown column 'friedrich' in 'field list'
# ----------------------------------------------------------------------------
@@ -117,7 +120,7 @@ select friedrich from (select 1 as otto) as t1;
# $mysql_errno is a builtin variable of mysqltest and contains the return code
# of the last command sent to the server.
#
-# The following test cases often initialize $mysql_errno to 1064 by
+# The following test cases often initialize $mysql_errno to 1064 by
# a command with wrong syntax.
# Example: --error 1064 To prevent the abort after the error.
# garbage ;
@@ -481,7 +484,7 @@ remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql;
# Allow trailing # comment
--sleep 1 # Wait for insert delayed to be executed.
---sleep 1 # Wait for insert delayed to be executed.
+--sleep 1 # Wait for insert delayed to be executed.
# ----------------------------------------------------------------------------
# Test error
@@ -1382,7 +1385,7 @@ connection default;
# ----------------------------------------------------------------------------
-# TODO Test queries, especially their errormessages... so it's easy to debug
+# TODO Test queries, especially their errormessages... so it's easy to debug
# new scripts and diagnose errors
# ----------------------------------------------------------------------------
@@ -1424,7 +1427,7 @@ let $message= `SELECT USER()`;
# The message contains more then 80 characters on multiple lines
# and is kept between double quotes.
-let $message=
+let $message=
"Here comes a very very long message that
- is longer then 80 characters and
- consists of several lines";
@@ -1534,7 +1537,7 @@ remove_file $MYSQLTEST_VARDIR/log/bug11731.log;
remove_file $MYSQLTEST_VARDIR/tmp/bug11731.sql;
#
-# Bug#19890 mysqltest: "query" command is broken
+# Bug#19890 mysqltest: "query" command is broken
#
# It should be possible to use the command "query" to force mysqltest to
@@ -1560,7 +1563,7 @@ select "at" as col1, "c" as col2;
select "at" as col1, "AT" as col2, "c" as col3;
--replace_regex /a/b/ /ct/d/
-select "a" as col1, "ct" as col2;
+select "a" as col1, "ct" as col2;
--replace_regex /(strawberry)/raspberry and \1/ /blueberry/blackberry/ /potato/tomato/;
select "strawberry","blueberry","potato";
@@ -1578,7 +1581,7 @@ select "strawberry","blueberry","potato";
--error 1
--exec echo "--replace_regex /a b c" | $MYSQL_TEST 2>&1
--error 1
---exec echo "replace_regex /a /b c ;" | $MYSQL_TEST 2>&1
+--exec echo "replace_regex /a /b c ;" | $MYSQL_TEST 2>&1
# REQUIREMENT
# replace_regex should replace substitutions from left to right in output
@@ -1948,7 +1951,7 @@ SELECT '2' as "my_col1",2 as "my_col2"
UNION
SELECT '1',1 from t2;
-# 9. Ensure that several result formatting options including "sorted_result"
+# 9. Ensure that several result formatting options including "sorted_result"
# - have all an effect
# - "--sorted_result" does not need to be direct before the statement
# - Row sorting is applied after modification of the column content
@@ -2154,3 +2157,5 @@ rmdir $MYSQLTEST_VARDIR/tmp/testdir;
--echo End of tests
+# Wait till we reached the initial number of concurrent sessions
+--source include/wait_until_count_sessions.inc
diff --git a/mysql-test/t/read_only.test b/mysql-test/t/read_only.test
index cca9bbd6fde..fdb68b28fdf 100644
--- a/mysql-test/t/read_only.test
+++ b/mysql-test/t/read_only.test
@@ -4,6 +4,9 @@
# should work with embedded server after mysqltest is fixed
-- source include/not_embedded.inc
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
--disable_warnings
DROP TABLE IF EXISTS t1,t2,t3;
--enable_warnings
@@ -40,24 +43,24 @@ connection con1;
select @@global.read_only;
---error 1290
+--error ER_OPTION_PREVENTS_STATEMENT
create table t3 (a int);
---error 1290
+--error ER_OPTION_PREVENTS_STATEMENT
insert into t1 values(1);
# if a statement, after parse stage, looks like it will update a
# non-temp table, it will be rejected, even if at execution it would
# have turned out that 0 rows would be updated
---error 1290
+--error ER_OPTION_PREVENTS_STATEMENT
update t1 set a=1 where 1=0;
# multi-update is special (see sql_parse.cc) so we test it
---error 1290
+--error ER_OPTION_PREVENTS_STATEMENT
update t1,t2 set t1.a=t2.a+1 where t1.a=t2.a;
# check multi-delete to be sure
---error 1290
+--error ER_OPTION_PREVENTS_STATEMENT
delete t1,t2 from t1,t2 where t1.a=t2.a;
# With temp tables updates should be accepted:
@@ -71,7 +74,7 @@ insert into t3 values(1);
insert into t4 select * from t3;
# a non-temp table updated:
---error 1290
+--error ER_OPTION_PREVENTS_STATEMENT
update t1,t3 set t1.a=t3.a+1 where t1.a=t3.a;
# no non-temp table updated (just swapped):
@@ -79,7 +82,7 @@ update t1,t3 set t3.a=t1.a+1 where t1.a=t3.a;
update t4,t3 set t4.a=t3.a+1 where t4.a=t3.a;
---error 1290
+--error ER_OPTION_PREVENTS_STATEMENT
delete t1 from t1,t3 where t1.a=t3.a;
delete t3 from t1,t3 where t1.a=t3.a;
@@ -98,11 +101,11 @@ delete t1 from t1,t3 where t1.a=t3.a;
drop table t1;
---error 1290
+--error ER_OPTION_PREVENTS_STATEMENT
insert into t1 values(1);
#
-# BUG #22077 "DROP TEMPORARY TABLE fails with wrong error if read_only is set"
+# Bug#22077 DROP TEMPORARY TABLE fails with wrong error if read_only is set
#
# check if DROP TEMPORARY on a non-existing temporary table returns the right
# error
@@ -114,11 +117,12 @@ drop temporary table ttt;
drop temporary table if exists ttt;
connection default;
+disconnect con1;
drop table t1,t2;
drop user test@localhost;
--echo #
---echo # Bug #27440 read_only allows create and drop database
+--echo # Bug#27440 read_only allows create and drop database
--echo #
--disable_warnings
drop database if exists mysqltest_db1;
@@ -151,3 +155,7 @@ delete from mysql.columns_priv where User like 'mysqltest_%';
flush privileges;
drop database mysqltest_db1;
set global read_only=0;
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
+
diff --git a/mysql-test/t/show_check.test b/mysql-test/t/show_check.test
index 2d261aa0675..51029e376b1 100644
--- a/mysql-test/t/show_check.test
+++ b/mysql-test/t/show_check.test
@@ -1,6 +1,9 @@
# Uses GRANT commands that usually disabled in embedded server
-- source include/not_embedded.inc
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
#
# Test of some show commands
#
@@ -33,7 +36,7 @@ check table t1 medium;
check table t1 extended;
show index from t1;
--disable_metadata
---error 1062
+--error ER_DUP_ENTRY
insert into t1 values (5,5,5);
--echo -- Here we enable metadata just to check that the collation of the
@@ -191,14 +194,14 @@ show columns from t1;
drop table t1;
#
-# Test for Bug #2593 "SHOW CREATE TABLE doesn't properly double quotes"
+# Test for Bug#2593 SHOW CREATE TABLE doesn't properly double quotes
#
SET @old_sql_mode= @@sql_mode, sql_mode= '';
SET @old_sql_quote_show_create= @@sql_quote_show_create, sql_quote_show_create= OFF;
######### hook for WL#1324 #
---error 1103
+--error ER_WRONG_TABLE_NAME
CREATE TABLE `a/b` (i INT);
# the above test should WORK when WL#1324 is done,
# it should be removed and
@@ -224,7 +227,7 @@ CREATE TABLE `a/b` (i INT);
#SHOW CREATE TABLE """a";
#DROP TABLE """a";
#
-#Bug #4374 SHOW TABLE STATUS FROM ignores collation_connection
+#Bug#4374 SHOW TABLE STATUS FROM ignores collation_connection
#set names latin1;
#create database `ä`;
#create table `ä`.`ä` (a int) engine=heap;
@@ -252,7 +255,7 @@ SET sql_quote_show_create= @old_sql_quote_show_create;
SET sql_mode= @old_sql_mode;
#
-# Test for bug #2719 "Heap tables status shows wrong or missing data."
+# Test for Bug#2719 Heap tables status shows wrong or missing data.
#
select @@max_heap_table_size;
@@ -313,7 +316,7 @@ show table status;
drop table t1, t2, t3;
#
-# Test for bug #3342 SHOW CREATE DATABASE seems to require DROP privilege
+# Test for Bug#3342 SHOW CREATE DATABASE seems to require DROP privilege
#
create database mysqltest;
@@ -328,36 +331,39 @@ connect (con1,localhost,mysqltest_1,,mysqltest);
connection con1;
select * from t1;
show create database mysqltest;
---error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
drop table t1;
---error 1044
+--error ER_DBACCESS_DENIED_ERROR
drop database mysqltest;
+disconnect con1;
connect (con2,localhost,mysqltest_2,,test);
connection con2;
---error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
select * from mysqltest.t1;
---error 1044
+--error ER_DBACCESS_DENIED_ERROR
show create database mysqltest;
---error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
drop table mysqltest.t1;
---error 1044
+--error ER_DBACCESS_DENIED_ERROR
drop database mysqltest;
+disconnect con2;
connect (con3,localhost,mysqltest_3,,test);
connection con3;
---error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
select * from mysqltest.t1;
---error 1044
+--error ER_DBACCESS_DENIED_ERROR
show create database mysqltest;
drop table mysqltest.t1;
drop database mysqltest;
+disconnect con3;
connection default;
set names binary;
-delete from mysql.user
+delete from mysql.user
where user='mysqltest_1' || user='mysqltest_2' || user='mysqltest_3';
-delete from mysql.db
+delete from mysql.db
where user='mysqltest_1' || user='mysqltest_2' || user='mysqltest_3';
flush privileges;
@@ -371,7 +377,7 @@ flush privileges;
#drop database `ä`;
# Test that USING <keytype> is always shown in SHOW CREATE TABLE when it was
-# specified during table creation, but not otherwise. (Bug #7235)
+# specified during table creation, but not otherwise. (Bug#7235)
CREATE TABLE t1 (i int, KEY (i)) ENGINE=MEMORY;
SHOW CREATE TABLE t1;
DROP TABLE t1;
@@ -402,7 +408,7 @@ ALTER TABLE t1 ENGINE=MEMORY;
SHOW CREATE TABLE t1;
DROP TABLE t1;
-# Test for BUG#9439 "Reporting wrong datatype for sub_part on show index"
+# Test for Bug#9439 Reporting wrong datatype for sub_part on show index
CREATE TABLE t1(
field1 text NOT NULL,
PRIMARY KEY(field1(1000))
@@ -412,7 +418,7 @@ show index from t1;
--disable_metadata
drop table t1;
-# Test for BUG#11635: mysqldump exports TYPE instead of USING for HASH
+# Test for Bug#11635 mysqldump exports TYPE instead of USING for HASH
create table t1 (
c1 int NOT NULL,
c2 int NOT NULL,
@@ -422,7 +428,7 @@ create table t1 (
SHOW CREATE TABLE t1;
DROP TABLE t1;
-# Test for BUG#93: 4.1 protocl crash on corupted frm and SHOW TABLE STATUS
+# Test for Bug#93 4.1 protocl crash on corupted frm and SHOW TABLE STATUS
flush tables;
@@ -430,7 +436,7 @@ flush tables;
system echo "this is a junk file for test" >> $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
--replace_column 6 # 7 # 8 # 9 #
SHOW TABLE STATUS like 't1';
---error 1033
+--error ER_NOT_FORM_FILE
show create table t1;
drop table t1;
@@ -438,7 +444,7 @@ drop table t1;
--echo End of 4.1 tests
#
-# BUG 12183 - SHOW OPEN TABLES behavior doesn't match grammar
+# Bug#12183 SHOW OPEN TABLES behavior doesn't match grammar
# First we close all open tables with FLUSH tables and then we open some.
CREATE TABLE txt1(a int);
CREATE TABLE tyt2(a int);
@@ -456,14 +462,14 @@ DROP TABLE txt1;
DROP TABLE tyt2;
DROP TABLE urkunde;
#
-# BUG #12591 (SHOW TABLES FROM dbname produces wrong error message)
+# Bug#12591 SHOW TABLES FROM dbname produces wrong error message
#
---error 1049
+--error ER_BAD_DB_ERROR
SHOW TABLES FROM non_existing_database;
#
-# Bug#17203: "sql_no_cache sql_cache" in views created from prepared
+# Bug#17203 "sql_no_cache sql_cache" in views created from prepared
# statement
#
# The problem was that initial user setting was forgotten, and current
@@ -543,7 +549,7 @@ SHOW COLUMNS FROM no_such_table;
#
-# Bug #19764: SHOW commands end up in the slow log as table scans
+# Bug#19764 SHOW commands end up in the slow log as table scans
#
flush status;
show status like 'slow_queries';
@@ -555,8 +561,8 @@ select 1 from information_schema.tables limit 1;
show status like 'slow_queries';
#
-# BUG#10491: Server returns data as charset binary SHOW CREATE TABLE or SELECT
-# FROM I_S.
+# BUG#10491 Server returns data as charset binary SHOW CREATE TABLE or SELECT
+# FROM I_S.
#
#
@@ -671,7 +677,7 @@ SHOW TRIGGERS LIKE 't1';
--echo ----------------------------------------------------------------
-SELECT
+SELECT
TRIGGER_CATALOG,
TRIGGER_SCHEMA,
TRIGGER_NAME,
@@ -827,7 +833,7 @@ DROP DATABASE mysqltest1;
use test;
#
-# Bug #28808: log_queries_not_using_indexes variable dynamic change is ignored
+# Bug#28808 log_queries_not_using_indexes variable dynamic change is ignored
#
flush status;
show variables like "log_queries_not_using_indexes";
@@ -843,7 +849,7 @@ select 1 from information_schema.tables limit 1;
show status like 'slow_queries';
#
-# Bug #30088: Can't disable myisam-recover by a value of ""
+# Bug#30088 Can't disable myisam-recover by a value of ""
#
show variables like 'myisam_recover_options';
@@ -868,3 +874,7 @@ show create table t1;
drop table t1;
--echo End of 5.0 tests
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
+
diff --git a/mysql-test/t/skip_name_resolve.test b/mysql-test/t/skip_name_resolve.test
index 3f732c8912b..4e7d927fb15 100644
--- a/mysql-test/t/skip_name_resolve.test
+++ b/mysql-test/t/skip_name_resolve.test
@@ -1,7 +1,10 @@
# Can't be tested with embedded server
--- source include/not_embedded.inc
+--source include/not_embedded.inc
-# Bug #8471: IP address with mask fail when skip-name-resolve is on
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
+# Bug#8471 IP address with mask fail when skip-name-resolve is on
GRANT ALL ON test.* TO mysqltest_1@'127.0.0.1/255.255.255.255';
SHOW GRANTS FOR mysqltest_1@'127.0.0.1/255.255.255.255';
REVOKE ALL ON test.* FROM mysqltest_1@'127.0.0.1/255.255.255.255';
@@ -9,12 +12,17 @@ DROP USER mysqltest_1@'127.0.0.1/255.255.255.255';
# End of 4.1 tests
-# Bug #13407 "Remote connecting crashes server".
+# Bug#13407 Remote connecting crashes server
# Server crashed when one used USER() function in connection for which
# was impossible to obtain peer hostname.
connect (con1, 127.0.0.1, root, , test, $MASTER_MYPORT, );
--replace_column 1 #
-select user();
+SELECT USER();
--replace_column 1 <id> 3 <host> 5 <command> 6 <time> 7 <state> 8 <info>
-show processlist;
+SHOW PROCESSLIST;
connection default;
+disconnect con1;
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
+
diff --git a/mysql-test/t/sp-security.test b/mysql-test/t/sp-security.test
index 38c72fd4fa6..b8181fcb89b 100644
--- a/mysql-test/t/sp-security.test
+++ b/mysql-test/t/sp-security.test
@@ -5,6 +5,9 @@
# Can't test with embedded server that doesn't support grants
-- source include/not_embedded.inc
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
connect (con1root,localhost,root,,);
connection con1root;
@@ -156,7 +159,7 @@ call db1_secret.stamp(6);
select db1_secret.db();
#
-# BUG#2777
+# Bug#2777 Stored procedure doesn't observe definer's rights
#
connection con1root;
@@ -215,7 +218,7 @@ call q();
select * from t2;
#
-# BUG#6030: Stored procedure has no appropriate DROP privilege
+# Bug#6030 Stored procedure has no appropriate DROP privilege
# (or ALTER for that matter)
# still connection con2user1 in db2
@@ -330,7 +333,7 @@ flush privileges;
drop table t1;
#
-# BUG#9503: reseting correct parameters of thread after error in SP function
+# Bug#9503 reseting correct parameters of thread after error in SP function
#
connect (root,localhost,root,,test);
connection root;
@@ -366,10 +369,12 @@ REVOKE ALL PRIVILEGES, GRANT OPTION FROM user1@localhost;
drop function bug_9503;
use test;
drop database mysqltest;
+connection default;
+disconnect root;
#
# correct value from current_user() in function run from "security definer"
-# (BUG#7291)
+# (Bug#7291 Stored procedures: wrong CURRENT_USER value)
#
connection con1root;
use test;
@@ -398,10 +403,10 @@ REVOKE ALL PRIVILEGES, GRANT OPTION FROM user1@localhost;
drop user user1@localhost;
#
-# Bug #12318: Wrong error message when accessing an inaccessible stored
+# Bug#12318 Wrong error message when accessing an inaccessible stored
# procedure in another database when the current database is
# information_schema.
-#
+#
--disable_warnings
drop database if exists mysqltest_1;
@@ -438,7 +443,7 @@ revoke usage on *.* from mysqltest_1@localhost;
drop user mysqltest_1@localhost;
#
-# BUG#12812 create view calling a function works without execute right
+# Bug#12812 create view calling a function works without execute right
# on function
delimiter |;
--disable_warnings
@@ -464,7 +469,7 @@ delimiter ;|
#
-# BUG#14834: Server denies to execute Stored Procedure
+# Bug#14834 Server denies to execute Stored Procedure
#
# The problem here was with '_' in the database name.
#
@@ -507,7 +512,7 @@ drop database db_bug14834;
#
-# BUG#14533: 'desc tbl' in stored procedure causes error
+# Bug#14533 'desc tbl' in stored procedure causes error
# ER_TABLEACCESS_DENIED_ERROR
#
create database db_bug14533;
@@ -546,20 +551,20 @@ drop database db_bug14533;
#
-# BUG#7787: Stored procedures: improper warning for "grant execute" statement
+# Bug#7787 Stored procedures: improper warning for "grant execute" statement
#
# Prepare.
CREATE DATABASE db_bug7787;
-use db_bug7787;
+USE db_bug7787;
# Test.
CREATE PROCEDURE p1()
- SHOW INNODB STATUS;
+ SHOW INNODB STATUS;
-GRANT EXECUTE ON PROCEDURE p1 TO user_bug7787@localhost;
+GRANT EXECUTE ON PROCEDURE p1 TO user_bug7787@localhost;
# Cleanup.
@@ -569,7 +574,7 @@ use test;
#
-# WL#2897: Complete definer support in the stored routines.
+# WL#2897 Complete definer support in the stored routines.
#
# The following cases are tested:
# 1. check that if DEFINER-clause is not explicitly specified, stored routines
@@ -614,7 +619,7 @@ GRANT ALL PRIVILEGES ON mysqltest.* TO mysqltest_2@localhost;
--echo ---> connection: mysqltest_2_con
--connection mysqltest_2_con
-use mysqltest;
+USE mysqltest;
CREATE PROCEDURE wl2897_p1() SELECT 1;
@@ -626,7 +631,7 @@ CREATE FUNCTION wl2897_f1() RETURNS INT RETURN 1;
--echo ---> connection: mysqltest_1_con
--connection mysqltest_1_con
-use mysqltest;
+USE mysqltest;
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
CREATE DEFINER=root@localhost PROCEDURE wl2897_p2() SELECT 2;
@@ -652,7 +657,7 @@ CREATE DEFINER='a @ b @ c'@localhost FUNCTION wl2897_f3() RETURNS INT RETURN 3;
--echo ---> connection: con1root
--connection con1root
-use mysqltest;
+USE mysqltest;
SHOW CREATE PROCEDURE wl2897_p1;
SHOW CREATE PROCEDURE wl2897_p3;
@@ -672,7 +677,7 @@ DROP DATABASE mysqltest;
#
-# BUG#13198: SP executes if definer does not exist
+# Bug#13198 SP executes if definer does not exist
#
# Prepare environment.
@@ -702,7 +707,7 @@ GRANT ALL PRIVILEGES ON mysqltest.* TO mysqltest_2@localhost;
--echo ---> connection: mysqltest_1_con
--connection mysqltest_1_con
-use mysqltest;
+USE mysqltest;
CREATE PROCEDURE bug13198_p1()
SELECT 1;
@@ -720,7 +725,7 @@ SELECT bug13198_f1();
--echo ---> connection: mysqltest_2_con
--connection mysqltest_2_con
-use mysqltest;
+USE mysqltest;
CALL bug13198_p1();
@@ -742,7 +747,7 @@ DROP USER mysqltest_1@localhost;
--echo ---> connection: mysqltest_2_con
--connection mysqltest_2_con
-use mysqltest;
+USE mysqltest;
--error ER_NO_SUCH_USER
CALL bug13198_p1();
@@ -764,8 +769,8 @@ DROP DATABASE mysqltest;
#
-# Bug#19857 - When a user with CREATE ROUTINE priv creates a routine,
-# it results in NULL p/w
+# Bug#19857 When a user with CREATE ROUTINE priv creates a routine,
+# it results in NULL p/w
#
# Can't test with embedded server that doesn't support grants
@@ -780,7 +785,7 @@ SELECT Host,User,Password FROM mysql.user WHERE User='user19857';
--echo ---> connection: mysqltest_2_con
--connection mysqltest_2_con
-use test;
+USE test;
DELIMITER //;
CREATE PROCEDURE sp19857() DETERMINISTIC
@@ -814,8 +819,7 @@ DROP USER user19857@localhost;
#
-# BUG#18630: Arguments of suid routine calculated in wrong security
-# context
+# Bug#18630 Arguments of suid routine calculated in wrong security context
#
# Arguments of suid routines were calculated in definer's security
# context instead of caller's context thus creating security hole.
@@ -886,3 +890,7 @@ DROP FUNCTION f_suid;
DROP TABLE t1;
--echo End of 5.0 tests.
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
+
diff --git a/mysql-test/t/sp_notembedded.test b/mysql-test/t/sp_notembedded.test
index 4e18e69d3d2..0839709bdc8 100644
--- a/mysql-test/t/sp_notembedded.test
+++ b/mysql-test/t/sp_notembedded.test
@@ -1,14 +1,17 @@
# Can't test with embedded server
-- source include/not_embedded.inc
---sleep 2
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
--disable_warnings
drop table if exists t1,t3;
--enable_warnings
delimiter |;
+
#
-# BUG#4902: Stored procedure with SHOW WARNINGS leads to packet error
+# Bug#4902: Stored procedure with SHOW WARNINGS leads to packet error
#
# Added tests for show grants command
--disable_warnings
@@ -47,7 +50,7 @@ drop procedure bug4902_2|
#
-# BUG#5278: Stored procedure packets out of order if SET PASSWORD.
+# Bug#5278: Stored procedure packets out of order if SET PASSWORD.
#
--disable_warnings
drop function if exists bug5278|
@@ -58,13 +61,16 @@ begin
return 'okay';
end|
---error 1133
+--error ER_PASSWORD_NO_MATCH
select bug5278()|
---error 1133
+--error ER_PASSWORD_NO_MATCH
select bug5278()|
drop function bug5278|
+#
+# Bug#3583: query cache doesn't work for stored procedures
+#
--disable_warnings
drop table if exists t1|
--enable_warnings
@@ -72,9 +78,6 @@ create table t1 (
id char(16) not null default '',
data int not null
)|
-#
-# BUG#3583: query cache doesn't work for stored procedures
-#
--disable_warnings
drop procedure if exists bug3583|
--enable_warnings
@@ -110,8 +113,9 @@ delete from t1|
drop procedure bug3583|
drop table t1|
+
#
-# BUG#6807: Stored procedure crash if CREATE PROCEDURE ... KILL QUERY
+# Bug#6807: Stored procedure crash if CREATE PROCEDURE ... KILL QUERY
#
--disable_warnings
drop procedure if exists bug6807|
@@ -125,16 +129,16 @@ begin
select 'Not reached';
end|
---error 1317
+--error ER_QUERY_INTERRUPTED
call bug6807()|
---error 1317
+--error ER_QUERY_INTERRUPTED
call bug6807()|
drop procedure bug6807|
#
-# BUG#10100: function (and stored procedure?) recursivity problem
+# Bug#10100: function (and stored procedure?) recursivity problem
#
--disable_warnings
drop function if exists bug10100f|
@@ -233,11 +237,11 @@ begin
close c;
end|
-#end of the stack checking
+# end of the stack checking
set @@max_sp_recursion_depth=255|
set @var=1|
-#disable log because error about stack overrun contains numbers which
-#depend on a system
+# disable log because error about stack overrun contains numbers which
+# depend on a system
-- disable_result_log
-- error ER_STACK_OVERRUN_NEED_MORE
call bug10100p(255, @var)|
@@ -266,6 +270,7 @@ drop table t3|
delimiter ;|
+
#
# Bug#15298 SHOW GRANTS FOR CURRENT_USER: Incorrect output in DEFINER context
#
@@ -282,6 +287,11 @@ call 15298_1();
call 15298_2();
connection default;
+disconnect con1;
drop user mysqltest_1@localhost;
drop procedure 15298_1;
drop procedure 15298_2;
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
+
diff --git a/mysql-test/t/ssl-big.test b/mysql-test/t/ssl-big.test
index 099c64df08f..91103f1d782 100644
--- a/mysql-test/t/ssl-big.test
+++ b/mysql-test/t/ssl-big.test
@@ -4,12 +4,15 @@
-- source include/have_ssl.inc
-- source include/big_test.inc
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
--disable_warnings
DROP TABLE IF EXISTS t1, t2;
--enable_warnings
#
-# Bug #29579 Clients using SSL can hang the server
+# Bug#29579 Clients using SSL can hang the server
#
connect (ssl_con,localhost,root,,,,,SSL);
@@ -18,7 +21,7 @@ create table t1 (a int);
disconnect ssl_con;
-
+
--disable_query_log
--disable_result_log
@@ -26,31 +29,36 @@ let $count= 2000;
while ($count)
{
connect (ssl_con,localhost,root,,,,,SSL);
-
+
eval insert into t1 values ($count);
dec $count;
-
- # This select causes the net buffer to fill as the server sends the results
+
+ # This select causes the net buffer to fill as the server sends the results
# but the client doesn't reap the results. The results are larger each time
# through the loop, so that eventually the buffer is completely full
# at the exact moment the server attempts to the close the connection with
# the lock held.
send select * from t1;
-
+
# now send the quit the command so the server will initiate the shutdown.
- send_quit ssl_con;
-
+ send_quit ssl_con;
+
# if the server is hung, this will hang too:
connect (ssl_con2,localhost,root,,,,,SSL);
-
+
# no hang if we get here, close and retry
disconnect ssl_con2;
disconnect ssl_con;
-}
+}
--enable_query_log
--enable_result_log
connect (ssl_con,localhost,root,,,,,SSL);
drop table t1;
+connection default;
+disconnect ssl_con;
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
diff --git a/mysql-test/t/ssl.test b/mysql-test/t/ssl.test
index a15f0212fbd..936652eaa3d 100644
--- a/mysql-test/t/ssl.test
+++ b/mysql-test/t/ssl.test
@@ -3,6 +3,9 @@
-- source include/have_ssl.inc
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
connect (ssl_con,localhost,root,,,,,SSL);
# Check ssl turned on
@@ -14,4 +17,9 @@ SHOW STATUS LIKE 'Ssl_cipher';
# Check ssl turned on
SHOW STATUS LIKE 'Ssl_cipher';
+connection default;
+disconnect ssl_con;
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
diff --git a/mysql-test/t/ssl_compress.test b/mysql-test/t/ssl_compress.test
index 23051c0e367..b6e11621bf6 100644
--- a/mysql-test/t/ssl_compress.test
+++ b/mysql-test/t/ssl_compress.test
@@ -4,6 +4,9 @@
-- source include/have_ssl.inc
-- source include/have_compress.inc
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
connect (ssl_compress_con,localhost,root,,,,,SSL COMPRESS);
# Check ssl turned on
@@ -20,3 +23,10 @@ SHOW STATUS LIKE 'Ssl_cipher';
# Check compression turned on
SHOW STATUS LIKE 'Compression';
+
+connection default;
+disconnect ssl_compress_con;
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
+
diff --git a/mysql-test/t/status.test b/mysql-test/t/status.test
index ee92d649f47..3e4d4eb7ffe 100644
--- a/mysql-test/t/status.test
+++ b/mysql-test/t/status.test
@@ -1,6 +1,9 @@
# embedded server causes different stat
-- source include/not_embedded.inc
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
# PS causes different statistics
--disable_ps_protocol
@@ -208,3 +211,7 @@ DROP PROCEDURE p1;
DROP FUNCTION f1;
# End of 5.0 tests
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
+
diff --git a/mysql-test/t/type_bit_innodb.test b/mysql-test/t/type_bit_innodb.test
index dbca69d67f0..e7e66da8927 100644
--- a/mysql-test/t/type_bit_innodb.test
+++ b/mysql-test/t/type_bit_innodb.test
@@ -40,7 +40,9 @@ drop table t1;
create table t1 (a bit) engine=innodb;
insert into t1 values (b'0'), (b'1'), (b'000'), (b'100'), (b'001');
select hex(a) from t1;
---error 1062
+# It is not deterministic which duplicate will be seen first
+--replace_regex /(.*Duplicate entry )'.*'( for key.*)/\1''\2/
+--error ER_DUP_ENTRY
alter table t1 add unique (a);
drop table t1;
diff --git a/mysql-test/t/union.test b/mysql-test/t/union.test
index 44f21abda19..3c792f28d4f 100644
--- a/mysql-test/t/union.test
+++ b/mysql-test/t/union.test
@@ -933,17 +933,25 @@ SELECT a INTO @v FROM (
SELECT a FROM t1
) alias;
-SELECT a INTO OUTFILE 'union.out.file' FROM (
+--let $outfile = $MYSQLTEST_VARDIR/tmp/union.out.file
+--error 0,1
+--remove_file $outfile
+
+--replace_result $MYSQLTEST_VARDIR <MYSQLTEST_VARDIR>
+eval SELECT a INTO OUTFILE '$outfile' FROM (
SELECT a FROM t1
UNION
SELECT a FROM t1 WHERE 0
) alias;
+--remove_file $outfile
-SELECT a INTO DUMPFILE 'union.out.file2' FROM (
+--replace_result $MYSQLTEST_VARDIR <MYSQLTEST_VARDIR>
+eval SELECT a INTO DUMPFILE '$outfile' FROM (
SELECT a FROM t1
UNION
SELECT a FROM t1 WHERE 0
) alias;
+--remove_file $outfile
#
# INTO will not be allowed in subqueries in version 5.1 and above.
@@ -954,27 +962,42 @@ SELECT a FROM (
SELECT a INTO @v FROM t1
) alias;
-SELECT a FROM (
+--replace_result $MYSQLTEST_VARDIR <MYSQLTEST_VARDIR>
+eval SELECT a FROM (
SELECT a FROM t1
UNION
- SELECT a INTO OUTFILE 'union.out.file3' FROM t1
+ SELECT a INTO OUTFILE '$outfile' FROM t1
) alias;
+--remove_file $outfile
-SELECT a FROM (
+--replace_result $MYSQLTEST_VARDIR <MYSQLTEST_VARDIR>
+eval SELECT a FROM (
SELECT a FROM t1
UNION
- SELECT a INTO DUMPFILE 'union.out.file4' FROM t1
+ SELECT a INTO DUMPFILE '$outfile' FROM t1
) alias;
+--remove_file $outfile
SELECT a FROM t1 UNION SELECT a INTO @v FROM t1;
-SELECT a FROM t1 UNION SELECT a INTO OUTFILE 'union.out.file5' FROM t1;
-SELECT a FROM t1 UNION SELECT a INTO OUTFILE 'union.out.file6' FROM t1;
+
+--replace_result $MYSQLTEST_VARDIR <MYSQLTEST_VARDIR>
+eval SELECT a FROM t1 UNION SELECT a INTO OUTFILE '$outfile' FROM t1;
+--remove_file $outfile
+
+--replace_result $MYSQLTEST_VARDIR <MYSQLTEST_VARDIR>
+eval SELECT a FROM t1 UNION SELECT a INTO DUMPFILE '$outfile' FROM t1;
+--remove_file $outfile
+
--error ER_WRONG_USAGE
SELECT a INTO @v FROM t1 UNION SELECT a FROM t1;
+
+--replace_result $MYSQLTEST_VARDIR <MYSQLTEST_VARDIR>
--error ER_WRONG_USAGE
-SELECT a INTO OUTFILE 'union.out.file7' FROM t1 UNION SELECT a FROM t1;
+eval SELECT a INTO OUTFILE '$outfile' FROM t1 UNION SELECT a FROM t1;
+
+--replace_result $MYSQLTEST_VARDIR <MYSQLTEST_VARDIR>
--error ER_WRONG_USAGE
-SELECT a INTO DUMPFILE 'union.out.file8' FROM t1 UNION SELECT a FROM t1;
+eval SELECT a INTO DUMPFILE '$outfile' FROM t1 UNION SELECT a FROM t1;
DROP TABLE t1;
diff --git a/mysql-test/t/user_limits.test b/mysql-test/t/user_limits.test
index af0f6545ac4..41af032b97e 100644
--- a/mysql-test/t/user_limits.test
+++ b/mysql-test/t/user_limits.test
@@ -3,9 +3,12 @@
#
# Requires privileges to be enabled
--- source include/not_embedded.inc
+--source include/not_embedded.inc
-# Prepare play-ground
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
+# Prepare play-ground
--disable_warnings
drop table if exists t1;
--enable_warnings
@@ -28,11 +31,11 @@ connect (mqph, localhost, mysqltest_1,,);
connection mqph;
select * from t1;
select * from t1;
---error 1226
+--error ER_USER_LIMIT_REACHED
select * from t1;
connect (mqph2, localhost, mysqltest_1,,);
connection mqph2;
---error 1226
+--error ER_USER_LIMIT_REACHED
select * from t1;
# cleanup
connection default;
@@ -50,12 +53,12 @@ select * from t1;
select * from t1;
delete from t1;
delete from t1;
---error 1226
+--error ER_USER_LIMIT_REACHED
delete from t1;
select * from t1;
connect (muph2, localhost, mysqltest_1,,);
connection muph2;
---error 1226
+--error ER_USER_LIMIT_REACHED
delete from t1;
select * from t1;
# Cleanup
@@ -74,7 +77,7 @@ connect (mcph2, localhost, mysqltest_1,,);
connection mcph2;
select * from t1;
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
---error 1226
+--error ER_USER_LIMIT_REACHED
connect (mcph3, localhost, mysqltest_1,,);
# Old connection is still ok
select * from t1;
@@ -83,7 +86,7 @@ select * from t1;
disconnect mcph1;
disconnect mcph2;
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
---error 1226
+--error ER_USER_LIMIT_REACHED
connect (mcph3, localhost, mysqltest_1,,);
# Cleanup
connection default;
@@ -101,13 +104,13 @@ connect (muc2, localhost, mysqltest_1,,);
connection muc2;
select * from t1;
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
---error 1226
+--error ER_USER_LIMIT_REACHED
connect (muc3, localhost, mysqltest_1,,);
# Closing of one of connections should help
disconnect muc1;
connect (muc3, localhost, mysqltest_1,,);
select * from t1;
-# Changing of limit should also help (and immediately)
+# Changing of limit should also help (and immediately)
connection default;
grant usage on *.* to mysqltest_1@localhost with max_user_connections 3;
flush user_resources;
@@ -115,7 +118,7 @@ connect (muc4, localhost, mysqltest_1,,);
connection muc4;
select * from t1;
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
---error 1226
+--error ER_USER_LIMIT_REACHED
connect (muc5, localhost, mysqltest_1,,);
# Clean up
connection default;
@@ -129,10 +132,10 @@ drop user mysqltest_1@localhost;
select @@session.max_user_connections, @@global.max_user_connections;
# Local max_user_connections variable can't be set directly
# since this limit is per-account
---error 1229
-set session max_user_connections= 2;
+--error ER_GLOBAL_VARIABLE
+set session max_user_connections= 2;
# But it is ok to set global max_user_connections
-set global max_user_connections= 2;
+set global max_user_connections= 2;
select @@session.max_user_connections, @@global.max_user_connections;
# Let us check that global limit works
grant usage on *.* to mysqltest_1@localhost;
@@ -144,7 +147,7 @@ connect (muca2, localhost, mysqltest_1,,);
connection muca2;
select * from t1;
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
---error 1203
+--error ER_TOO_MANY_USER_CONNECTIONS
connect (muca3, localhost, mysqltest_1,,);
# Now we are testing that per-account limit prevails over gloabl limit
connection default;
@@ -154,16 +157,20 @@ connect (muca3, localhost, mysqltest_1,,);
connection muca3;
select @@session.max_user_connections, @@global.max_user_connections;
--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCK
---error 1226
+--error ER_USER_LIMIT_REACHED
connect (muca4, localhost, mysqltest_1,,);
# Cleanup
connection default;
disconnect muca1;
disconnect muca2;
disconnect muca3;
-set global max_user_connections= 0;
+set global max_user_connections= 0;
drop user mysqltest_1@localhost;
--enable_ps_protocol
# Final cleanup
drop table t1;
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
+
diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test
index 2892ee7dd69..6437e546697 100644
--- a/mysql-test/t/view.test
+++ b/mysql-test/t/view.test
@@ -10,12 +10,12 @@ use test;
#
# create view on nonexistent table
--- error 1146
+-- error ER_NO_SUCH_TABLE
create view v1 (c,d) as select a,b from t1;
create temporary table t1 (a int, b int);
# view on temporary table
--- error 1352
+-- error ER_VIEW_SELECT_TMPTABLE
create view v1 (c) as select b+1 from t1;
drop table t1;
@@ -42,18 +42,18 @@ select * from t1;
select c from v1;
show create table v1;
show create view v1;
--- error 1347
+-- error ER_WRONG_OBJECT
show create view t1;
drop table t1;
# try to use fields from underlying table
--- error 1054
+-- error ER_BAD_FIELD_ERROR
select a from v1;
--- error 1054
+-- error ER_BAD_FIELD_ERROR
select v1.a from v1;
--- error 1054
+-- error ER_BAD_FIELD_ERROR
select b from v1;
--- error 1054
+-- error ER_BAD_FIELD_ERROR
select v1.b from v1;
# view with different algorithms (explain output differs)
@@ -64,9 +64,9 @@ select c from v2;
explain extended select c from v2;
# try to use underlying table fields in VIEW creation process
--- error 1054
+-- error ER_BAD_FIELD_ERROR
create view v3 (c) as select a+1 from v1;
--- error 1054
+-- error ER_BAD_FIELD_ERROR
create view v3 (c) as select b+1 from v1;
@@ -104,7 +104,7 @@ select * from v1;
select * from v2;
# try to create VIEW with name of existing VIEW
--- error 1050
+-- error ER_TABLE_EXISTS_ERROR
create view v1 (c,d,e,f) as select a,b, a in (select a+2 from t1), a = all (select a from t1) from t1;
# 'or replace' should work in this case
@@ -112,7 +112,7 @@ create or replace view v1 (c,d,e,f) as select a,b, a in (select a+2 from t1), a
# try to ALTER unexisting VIEW
drop view v2;
--- error 1146
+-- error ER_NO_SUCH_TABLE
alter view v2 as select c, d from v1;
# 'or replace' on unexisting view
@@ -126,15 +126,15 @@ select * from v1;
select * from v2;
# try to drop nonexistent VIEW
--- error 1051
+-- error ER_BAD_TABLE_ERROR
drop view v100;
# try to drop table with DROP VIEW
--- error 1347
+-- error ER_WRONG_OBJECT
drop view t1;
# try to drop VIEW with DROP TABLE
--- error 1051
+-- error ER_BAD_TABLE_ERROR
drop table v1;
# try to drop table with DROP VIEW
@@ -175,7 +175,7 @@ drop table t1;
# syntax compatibility
#
create table t1 (a int);
--- error 1368
+-- error ER_VIEW_NONUPD_CHECK
create view v1 as select distinct a from t1 WITH CHECK OPTION;
create view v1 as select a from t1 WITH CHECK OPTION;
create view v2 as select a from t1 WITH CASCADED CHECK OPTION;
@@ -232,10 +232,10 @@ create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
select is_updatable from information_schema.views where table_name='v2';
select is_updatable from information_schema.views where table_name='v1';
# try to update expression
--- error 1348
+-- error ER_NONUPDATEABLE_COLUMN
update v1 set c=a+c;
# try to update VIEW with forced TEMPORARY TABLE algorithm
--- error 1288
+-- error ER_NON_UPDATABLE_TABLE
update v2 set a=a+c;
# updatable field of updateable view
update v1 set a=a+c;
@@ -254,10 +254,10 @@ insert into t2 values (10), (20);
create view v1 (a,c) as select a, b+1 from t1;
create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
# try to update expression
--- error 1348
+-- error ER_NONUPDATEABLE_COLUMN
update t2,v1 set v1.c=v1.a+v1.c where t2.x=v1.a;
# try to update VIEW with forced TEMPORARY TABLE algorithm
--- error 1288
+-- error ER_NON_UPDATABLE_TABLE
update t2,v2 set v2.a=v2.v2.a+c where t2.x=v2.a;
# updatable field of updateable view
update t2,v1 set v1.a=v1.a+v1.c where t2.x=v1.a;
@@ -292,7 +292,7 @@ insert into t1 values (1,2), (2,3), (3,4), (4,5), (5,10);
create view v1 (a,c) as select a, b+1 from t1;
create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
# try to update VIEW with forced TEMPORARY TABLE algorithm
--- error 1288
+-- error ER_NON_UPDATABLE_TABLE
delete from v2 where c < 4;
# updatable field of updateable view
delete from v1 where c < 4;
@@ -311,7 +311,7 @@ insert into t2 values (1), (2), (3), (4);
create view v1 (a,c) as select a, b+1 from t1;
create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
# try to update VIEW with forced TEMPORARY TABLE algorithm
--- error 1288
+-- error ER_NON_UPDATABLE_TABLE
delete v2 from t2,v2 where t2.x=v2.a;
# updatable field of updateable view
delete v1 from t2,v1 where t2.x=v1.a;
@@ -331,7 +331,7 @@ set updatable_views_with_limit=NO;
update v1 set x=x+1;
update v2 set x=x+1;
update v1 set x=x+1 limit 1;
--- error 1288
+-- error ER_NON_UPDATABLE_TABLE
update v2 set x=x+1 limit 1;
set updatable_views_with_limit=YES;
update v1 set x=x+1 limit 1;
@@ -353,13 +353,13 @@ create view v3 (x,y,z) as select b, a, b from t1;
create view v4 (x,y,z) as select c+1, b, a from t1;
create algorithm=temptable view v5 (x,y,z) as select c, b, a from t1;
# try insert to VIEW with fields duplicate
--- error 1471
+-- error ER_NON_INSERTABLE_TABLE
insert into v3 values (-60,4,30);
# try insert to VIEW with expression in SELECT list
--- error 1471
+-- error ER_NON_INSERTABLE_TABLE
insert into v4 values (-60,4,30);
# try insert to VIEW using temporary table algorithm
--- error 1471
+-- error ER_NON_INSERTABLE_TABLE
insert into v5 values (-60,4,30);
insert into v1 values (-60,4,30);
insert into v1 (z,y,x) values (50,6,-100);
@@ -381,13 +381,13 @@ create view v3 (x,y,z) as select b, a, b from t1;
create view v4 (x,y,z) as select c+1, b, a from t1;
create algorithm=temptable view v5 (x,y,z) as select c, b, a from t1;
# try insert to VIEW with fields duplicate
--- error 1471
+-- error ER_NON_INSERTABLE_TABLE
insert into v3 select c, b, a from t2;
# try insert to VIEW with expression in SELECT list
--- error 1471
+-- error ER_NON_INSERTABLE_TABLE
insert into v4 select c, b, a from t2;
# try insert to VIEW using temporary table algorithm
--- error 1471
+-- error ER_NON_INSERTABLE_TABLE
insert into v5 select c, b, a from t2;
insert into v1 select c, b, a from t2;
insert into v1 (z,y,x) select a+20,b+2,-100 from t2;
@@ -424,7 +424,7 @@ create table t1 (a int, primary key(a));
insert into t1 values (1), (2), (3), (200);
create ALGORITHM=TEMPTABLE view v1 (x) as select a from t1;
create view v2 (y) as select x from v1;
--- error 1288
+-- error ER_NON_UPDATABLE_TABLE
update v2 set y=10 where y=2;
drop table t1;
drop view v1,v2;
@@ -479,17 +479,17 @@ create table t1 (col1 char(5),col2 char(5));
create view v1 as select * from t1;
drop table t1;
create table t1 (col1 char(5),newcol2 char(5));
--- error 1356
+-- error ER_VIEW_INVALID
insert into v1 values('a','aa');
drop table t1;
--- error 1356
+-- error ER_VIEW_INVALID
select * from v1;
drop view v1;
#
# check of duplication of column names
#
--- error 1060
+-- error ER_DUP_FIELDNAME
create view v1 (a,a) as select 'a','a';
#
@@ -559,7 +559,7 @@ drop table t1;
#
# error on preparation
#
--- error 1096
+-- error ER_NO_TABLES_USED
CREATE VIEW v02 AS SELECT * FROM DUAL;
SHOW TABLES;
@@ -575,7 +575,7 @@ drop view v1;
#
create table t1 (col1 int,col2 char(22));
create view v1 as select * from t1;
--- error 1347
+-- error ER_WRONG_OBJECT
create index i1 on v1 (col1);
drop view v1;
drop table t1;
@@ -735,7 +735,7 @@ create function x1 () returns int return 5;
create table t1 (s1 int);
create view v1 as select x1() from t1;
drop function x1;
--- error 1356
+-- error ER_VIEW_INVALID
select * from v1;
--replace_column 8 # 12 # 13 #
show table status;
@@ -786,10 +786,10 @@ create table t1 (a int);
create view v1 as select a from t1;
create view v3 as select a from t1;
create database mysqltest;
--- error 1450
+-- error ER_FORBID_SCHEMA_CHANGE
rename table v1 to mysqltest.v1;
rename table v1 to v2;
---error 1050
+--error ER_TABLE_EXISTS_ERROR
rename table v3 to v1, v2 to t1;
drop table t1;
drop view v2,v3;
@@ -802,19 +802,19 @@ create view v1 as select 'a',1;
create view v2 as select * from v1 union all select * from v1;
create view v3 as select * from v2 where 1 = (select `1` from v2);
create view v4 as select * from v3;
--- error 1242
+-- error ER_SUBQUERY_NO_1_ROW
select * from v4;
drop view v4, v3, v2, v1;
#
# VIEW over SELECT with prohibited clauses
#
--- error 1350
+-- error ER_VIEW_SELECT_CLAUSE
create view v1 as select 5 into @w;
--- error 1350
+-- error ER_VIEW_SELECT_CLAUSE
create view v1 as select 5 into outfile 'ttt';
create table t1 (a int);
--- error 1350
+-- error ER_VIEW_SELECT_CLAUSE
create view v1 as select a from t1 procedure analyse();
-- error ER_VIEW_SELECT_DERIVED
create view v1 as select 1 from (select 1) as d1;
@@ -839,109 +839,109 @@ create table t2 (col1 int);
create view v1 as select * from t1;
create view v2 as select * from v1;
create view v3 as select v2.col1 from v2,t2 where v2.col1 = t2.col1;
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
update v2 set col1 = (select max(col1) from v1);
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
update v2 set col1 = (select max(col1) from t1);
--- error 1093
+-- error ER_UPDATE_TABLE_USED
update v2 set col1 = (select max(col1) from v2);
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
update v2,t2 set v2.col1 = (select max(col1) from v1) where v2.col1 = t2.col1;
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
update t1,t2 set t1.col1 = (select max(col1) from v1) where t1.col1 = t2.col1;
--- error 1093
+-- error ER_UPDATE_TABLE_USED
update v1,t2 set v1.col1 = (select max(col1) from v1) where v1.col1 = t2.col1;
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
update t2,v2 set v2.col1 = (select max(col1) from v1) where v2.col1 = t2.col1;
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
update t2,t1 set t1.col1 = (select max(col1) from v1) where t1.col1 = t2.col1;
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
update t2,v1 set v1.col1 = (select max(col1) from v1) where v1.col1 = t2.col1;
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
update v2,t2 set v2.col1 = (select max(col1) from t1) where v2.col1 = t2.col1;
--- error 1093
+-- error ER_UPDATE_TABLE_USED
update t1,t2 set t1.col1 = (select max(col1) from t1) where t1.col1 = t2.col1;
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
update v1,t2 set v1.col1 = (select max(col1) from t1) where v1.col1 = t2.col1;
--- error 1093
+-- error ER_UPDATE_TABLE_USED
update t2,v2 set v2.col1 = (select max(col1) from t1) where v2.col1 = t2.col1;
--- error 1093
+-- error ER_UPDATE_TABLE_USED
update t2,t1 set t1.col1 = (select max(col1) from t1) where t1.col1 = t2.col1;
--- error 1093
+-- error ER_UPDATE_TABLE_USED
update t2,v1 set v1.col1 = (select max(col1) from t1) where v1.col1 = t2.col1;
--- error 1093
+-- error ER_UPDATE_TABLE_USED
update v2,t2 set v2.col1 = (select max(col1) from v2) where v2.col1 = t2.col1;
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
update t1,t2 set t1.col1 = (select max(col1) from v2) where t1.col1 = t2.col1;
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
update v1,t2 set v1.col1 = (select max(col1) from v2) where v1.col1 = t2.col1;
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
update t2,v2 set v2.col1 = (select max(col1) from v2) where v2.col1 = t2.col1;
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
update t2,t1 set t1.col1 = (select max(col1) from v2) where t1.col1 = t2.col1;
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
update t2,v1 set v1.col1 = (select max(col1) from v2) where v1.col1 = t2.col1;
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
update v3 set v3.col1 = (select max(col1) from v1);
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
update v3 set v3.col1 = (select max(col1) from t1);
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
update v3 set v3.col1 = (select max(col1) from v2);
--- error 1093
+-- error ER_UPDATE_TABLE_USED
update v3 set v3.col1 = (select max(col1) from v3);
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
delete from v2 where col1 = (select max(col1) from v1);
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
delete from v2 where col1 = (select max(col1) from t1);
--- error 1093
+-- error ER_UPDATE_TABLE_USED
delete from v2 where col1 = (select max(col1) from v2);
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
delete v2 from v2,t2 where (select max(col1) from v1) > 0 and v2.col1 = t2.col1;
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
delete t1 from t1,t2 where (select max(col1) from v1) > 0 and t1.col1 = t2.col1;
--- error 1093
+-- error ER_UPDATE_TABLE_USED
delete v1 from v1,t2 where (select max(col1) from v1) > 0 and v1.col1 = t2.col1;
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
delete v2 from v2,t2 where (select max(col1) from t1) > 0 and v2.col1 = t2.col1;
--- error 1093
+-- error ER_UPDATE_TABLE_USED
delete t1 from t1,t2 where (select max(col1) from t1) > 0 and t1.col1 = t2.col1;
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
delete v1 from v1,t2 where (select max(col1) from t1) > 0 and v1.col1 = t2.col1;
--- error 1093
+-- error ER_UPDATE_TABLE_USED
delete v2 from v2,t2 where (select max(col1) from v2) > 0 and v2.col1 = t2.col1;
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
delete t1 from t1,t2 where (select max(col1) from v2) > 0 and t1.col1 = t2.col1;
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
delete v1 from v1,t2 where (select max(col1) from v2) > 0 and v1.col1 = t2.col1;
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
insert into v2 values ((select max(col1) from v1));
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
insert into t1 values ((select max(col1) from v1));
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
insert into v2 values ((select max(col1) from v1));
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
insert into v2 values ((select max(col1) from t1));
--- error 1093
+-- error ER_UPDATE_TABLE_USED
insert into t1 values ((select max(col1) from t1));
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
insert into v2 values ((select max(col1) from t1));
--- error 1093
+-- error ER_UPDATE_TABLE_USED
insert into v2 values ((select max(col1) from v2));
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
insert into t1 values ((select max(col1) from v2));
--- error 1093
+-- error ER_UPDATE_TABLE_USED
insert into v2 values ((select max(col1) from v2));
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
insert into v3 (col1) values ((select max(col1) from v1));
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
insert into v3 (col1) values ((select max(col1) from t1));
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
insert into v3 (col1) values ((select max(col1) from v2));
-#check with TZ tables in list
--- error 1443
+# check with TZ tables in list
+-- error ER_VIEW_PREVENT_UPDATE
insert into v3 (col1) values ((select CONVERT_TZ('20050101000000','UTC','MET') from v2));
insert into v3 (col1) values ((select CONVERT_TZ('20050101000000','UTC','MET') from t2));
--- error 1048
+-- error ER_BAD_NULL_ERROR
insert into mysql.time_zone values ('', (select CONVERT_TZ('20050101000000','UTC','MET') from t2));
# temporary table algorithm view should be equal to subquery in the from clause
create algorithm=temptable view v4 as select * from t1;
@@ -957,7 +957,7 @@ drop table t1,t2;
#
create table t1 (s1 int);
create view v1 as select * from t1;
--- error 1347
+-- error ER_WRONG_OBJECT
handler v1 open as xx;
drop view v1;
drop table t1;
@@ -1005,7 +1005,7 @@ create table t2 (a int);
create view v1 as select * from t1;
lock tables t1 read, v1 read;
select * from v1;
--- error 1100
+-- error ER_TABLE_NOT_LOCKED
select * from t2;
drop view v1;
drop table t1, t2;
@@ -1017,7 +1017,7 @@ create table t1 (a int);
create view v1 as select * from t1 where a < 2 with check option;
# simple insert
insert into v1 values(1);
--- error 1369
+-- error ER_VIEW_CHECK_FAILED
insert into v1 values(3);
# simple insert with ignore
insert ignore into v1 values (2),(3),(0);
@@ -1026,7 +1026,7 @@ select * from t1;
delete from t1;
# INSERT SELECT test
insert into v1 SELECT 1;
--- error 1369
+-- error ER_VIEW_CHECK_FAILED
insert into v1 SELECT 3;
# prepare data for next check
create table t2 (a int);
@@ -1034,9 +1034,9 @@ insert into t2 values (2),(3),(0);
# INSERT SELECT with ignore test
insert ignore into v1 SELECT a from t2;
select * from t1;
-#simple UPDATE test
+# simple UPDATE test
update v1 set a=-1 where a=0;
--- error 1369
+-- error ER_VIEW_CHECK_FAILED
update v1 set a=2 where a=1;
select * from t1;
# prepare data for next check
@@ -1063,12 +1063,12 @@ create view v2 as select * from v1 where a > 0 with local check option;
create view v3 as select * from v1 where a > 0 with cascaded check option;
insert into v2 values (1);
insert into v3 values (1);
--- error 1369
+-- error ER_VIEW_CHECK_FAILED
insert into v2 values (0);
--- error 1369
+-- error ER_VIEW_CHECK_FAILED
insert into v3 values (0);
insert into v2 values (2);
--- error 1369
+-- error ER_VIEW_CHECK_FAILED
insert into v3 values (2);
select * from t1;
drop view v3,v2,v1;
@@ -1080,7 +1080,7 @@ drop table t1;
create table t1 (a int, primary key (a));
create view v1 as select * from t1 where a < 2 with check option;
insert into v1 values (1) on duplicate key update a=2;
--- error 1369
+-- error ER_VIEW_CHECK_FAILED
insert into v1 values (1) on duplicate key update a=2;
insert ignore into v1 values (1) on duplicate key update a=2;
select * from t1;
@@ -1093,13 +1093,13 @@ drop table t1;
create table t1 (s1 int);
create view v1 as select * from t1;
create view v2 as select * from v1;
--- error 1146
+-- error ER_NO_SUCH_TABLE
alter view v1 as select * from v2;
--- error 1146
+-- error ER_NO_SUCH_TABLE
alter view v1 as select * from v1;
--- error 1146
+-- error ER_NO_SUCH_TABLE
create or replace view v1 as select * from v2;
--- error 1146
+-- error ER_NO_SUCH_TABLE
create or replace view v1 as select * from v1;
drop view v2,v1;
drop table t1;
@@ -1134,7 +1134,7 @@ select * from t2;
# check it with check option
alter view v2 as select * from t2 where s1 in (select s1 from t1) with check option;
insert into v2 values (5);
--- error 1369
+-- error ER_VIEW_CHECK_FAILED
update v2 set s1 = 1;
insert into t1 values (1);
update v2 set s1 = 1;
@@ -1166,7 +1166,7 @@ drop table t1;
create table t1 (s1 tinyint);
create view v1 as select * from t1 where s1 <> 0 with local check option;
create view v2 as select * from v1 with cascaded check option;
--- error 1369
+-- error ER_VIEW_CHECK_FAILED
insert into v2 values (0);
drop view v2, v1;
drop table t1;
@@ -1177,7 +1177,7 @@ drop table t1;
create table t1 (s1 int);
create view v1 as select * from t1 where s1 < 5 with check option;
#single value
--- error 1369
+-- error ER_VIEW_CHECK_FAILED
insert ignore into v1 values (6);
#several values
insert ignore into v1 values (6),(3);
@@ -1191,7 +1191,7 @@ drop table t1;
create table t1 (s1 tinyint);
create trigger t1_bi before insert on t1 for each row set new.s1 = 500;
create view v1 as select * from t1 where s1 <> 127 with check option;
--- error 1369
+-- error ER_VIEW_CHECK_FAILED
insert into v1 values (0);
select * from v1;
select * from t1;
@@ -1205,7 +1205,7 @@ drop table t1;
create table t1 (s1 tinyint);
create view v1 as select * from t1 where s1 <> 0;
create view v2 as select * from v1 where s1 <> 1 with cascaded check option;
--- error 1369
+-- error ER_VIEW_CHECK_FAILED
insert into v2 values (0);
select * from v2;
select * from t1;
@@ -1218,7 +1218,7 @@ drop table t1;
# fixed length fields
create table t1 (a int, b char(10));
create view v1 as select * from t1 where a != 0 with check option;
--- error 1369
+-- error ER_VIEW_CHECK_FAILED
load data infile '../std_data_ln/loaddata3.dat' into table v1 fields terminated by '' enclosed by '' ignore 1 lines;
select * from t1;
select * from v1;
@@ -1231,7 +1231,7 @@ drop table t1;
# variable length fields
create table t1 (a text, b text);
create view v1 as select * from t1 where a <> 'Field A' with check option;
--- error 1369
+-- error ER_VIEW_CHECK_FAILED
load data infile '../std_data_ln/loaddata2.dat' into table v1 fields terminated by ',' enclosed by '''';
select concat('|',a,'|'), concat('|',b,'|') from t1;
select concat('|',a,'|'), concat('|',b,'|') from v1;
@@ -1247,14 +1247,14 @@ drop table t1;
#
create table t1 (s1 smallint);
create view v1 as select * from t1 where 20 < (select (s1) from t1);
--- error 1471
+-- error ER_NON_INSERTABLE_TABLE
insert into v1 values (30);
create view v2 as select * from t1;
create view v3 as select * from t1 where 20 < (select (s1) from v2);
--- error 1471
+-- error ER_NON_INSERTABLE_TABLE
insert into v3 values (30);
create view v4 as select * from v2 where 20 < (select (s1) from t1);
--- error 1471
+-- error ER_NON_INSERTABLE_TABLE
insert into v4 values (30);
drop view v4, v3, v2, v1;
drop table t1;
@@ -1312,7 +1312,7 @@ select * from t2;
# view without primary key
create view v2 (a,b) as select t1.b as a, t2.a as b from t1, t2;
set updatable_views_with_limit=NO;
--- error 1288
+-- error ER_NON_UPDATABLE_TABLE
update v2 set a= 10 where a=200 limit 1;
set updatable_views_with_limit=DEFAULT;
# just view selects
@@ -1340,14 +1340,14 @@ create table t2 (a int, primary key (a), b int);
insert into t2 values (1000, 2000);
create view v3 (a,b) as select t1.a as a, t2.a as b from t1, t2;
# inserting into join view without field list
--- error 1394
+-- error ER_VIEW_NO_INSERT_FIELD_LIST
insert into v3 values (1,2);
--- error 1394
+-- error ER_VIEW_NO_INSERT_FIELD_LIST
insert into v3 select * from t2;
# inserting in several tables of join view
--- error 1393
+-- error ER_VIEW_MULTIUPDATE
insert into v3(a,b) values (1,2);
--- error 1393
+-- error ER_VIEW_MULTIUPDATE
insert into v3(a,b) select * from t2;
# correct inserts into join view
insert into v3(a) values (1);
@@ -1358,11 +1358,11 @@ insert into v3(a) values (1) on duplicate key update a=a+10000+VALUES(a);
select * from t1;
select * from t2;
# try delete from join view
--- error 1395
+-- error ER_VIEW_DELETE_MERGE_VIEW
delete from v3;
--- error 1395
+-- error ER_VIEW_DELETE_MERGE_VIEW
delete v3,t1 from v3,t1;
--- error 1395
+-- error ER_VIEW_DELETE_MERGE_VIEW
delete t1,v3 from t1,v3;
# delete from t1 just to reduce result set size
delete from t1;
@@ -1385,7 +1385,7 @@ drop view v3;
drop tables t1,t2;
#
-# View field names should be case insensitive
+# View field names should be case insensitive
#
create table t1(f1 int);
create view v1 as select f1 from t1;
@@ -1394,7 +1394,7 @@ drop view v1;
drop table t1;
#
-# Resolving view fields in subqueries in VIEW (Bug #6394)
+# Resolving view fields in subqueries in VIEW (Bug#6394)
#
create table t1(c1 int);
create table t2(c2 int);
@@ -1411,7 +1411,7 @@ drop view v2, v1;
drop table t1, t2;
#
-# view over other view setup (BUG#7433)
+# view over other view setup (Bug#7433)
#
CREATE TABLE t1 (C1 INT, C2 INT);
CREATE TABLE t2 (C2 INT);
@@ -1422,10 +1422,10 @@ drop view v2, v1;
drop table t1, t2;
#
-# view and group_concat() (BUG#7116)
+# view and group_concat() (Bug#7116)
#
-create table t1 (col1 char(5),col2 int,col3 int);
-insert into t1 values ('one',10,25), ('two',10,50), ('two',10,50), ('one',20,25), ('one',30,25);
+create table t1 (col1 char(5),col2 int,col3 int);
+insert into t1 values ('one',10,25), ('two',10,50), ('two',10,50), ('one',20,25), ('one',30,25);
create view v1 as select * from t1;
select col1,group_concat(col2,col3) from t1 group by col1;
select col1,group_concat(col2,col3) from v1 group by col1;
@@ -1433,18 +1433,18 @@ drop view v1;
drop table t1;
#
-# Item_ref resolved as view field (BUG#6894)
+# Item_ref resolved as view field (Bug#6894)
#
create table t1 (s1 int, s2 char);
create view v1 as select s1, s2 from t1;
--- error 1054
+-- error ER_BAD_FIELD_ERROR
select s2 from v1 vq1 where 2 = (select count(*) from v1 vq2 having vq1.s2 = vq2.s2);
select s2 from v1 vq1 where 2 = (select count(*) aa from v1 vq2 having vq1.s2 = aa);
drop view v1;
drop table t1;
#
-# Test case for bug #9398 CREATE TABLE with SELECT from a multi-table view
+# Test case for Bug#9398 CREATE TABLE with SELECT from a multi-table view
#
CREATE TABLE t1 (a1 int);
CREATE TABLE t2 (a2 int);
@@ -1460,7 +1460,7 @@ DROP VIEW v1;
DROP TABLE t1,t2,t3;
#
-# Test for BUG#8703 "insert into table select from view crashes"
+# Test for Bug#8703 insert into table select from view crashes
#
create table t1 (a int);
create table t2 like t1;
@@ -1472,84 +1472,84 @@ drop view v1;
drop table t1,t2,t3;
#
-# Test for BUG #6106: query over a view using subquery for the underlying table
-#
-
-CREATE TABLE t1 (col1 int PRIMARY KEY, col2 varchar(10));
-INSERT INTO t1 VALUES(1,'trudy');
-INSERT INTO t1 VALUES(2,'peter');
-INSERT INTO t1 VALUES(3,'sanja');
-INSERT INTO t1 VALUES(4,'monty');
-INSERT INTO t1 VALUES(5,'david');
-INSERT INTO t1 VALUES(6,'kent');
-INSERT INTO t1 VALUES(7,'carsten');
-INSERT INTO t1 VALUES(8,'ranger');
-INSERT INTO t1 VALUES(10,'matt');
-CREATE TABLE t2 (col1 int, col2 int, col3 char(1));
-INSERT INTO t2 VALUES (1,1,'y');
-INSERT INTO t2 VALUES (1,2,'y');
-INSERT INTO t2 VALUES (2,1,'n');
-INSERT INTO t2 VALUES (3,1,'n');
-INSERT INTO t2 VALUES (4,1,'y');
-INSERT INTO t2 VALUES (4,2,'n');
-INSERT INTO t2 VALUES (4,3,'n');
-INSERT INTO t2 VALUES (6,1,'n');
+# Test for Bug#6106 query over a view using subquery for the underlying table
+#
+
+CREATE TABLE t1 (col1 int PRIMARY KEY, col2 varchar(10));
+INSERT INTO t1 VALUES(1,'trudy');
+INSERT INTO t1 VALUES(2,'peter');
+INSERT INTO t1 VALUES(3,'sanja');
+INSERT INTO t1 VALUES(4,'monty');
+INSERT INTO t1 VALUES(5,'david');
+INSERT INTO t1 VALUES(6,'kent');
+INSERT INTO t1 VALUES(7,'carsten');
+INSERT INTO t1 VALUES(8,'ranger');
+INSERT INTO t1 VALUES(10,'matt');
+CREATE TABLE t2 (col1 int, col2 int, col3 char(1));
+INSERT INTO t2 VALUES (1,1,'y');
+INSERT INTO t2 VALUES (1,2,'y');
+INSERT INTO t2 VALUES (2,1,'n');
+INSERT INTO t2 VALUES (3,1,'n');
+INSERT INTO t2 VALUES (4,1,'y');
+INSERT INTO t2 VALUES (4,2,'n');
+INSERT INTO t2 VALUES (4,3,'n');
+INSERT INTO t2 VALUES (6,1,'n');
INSERT INTO t2 VALUES (8,1,'y');
-
-CREATE VIEW v1 AS SELECT * FROM t1;
-SELECT a.col1,a.col2,b.col2,b.col3
+CREATE VIEW v1 AS SELECT * FROM t1;
+
+SELECT a.col1,a.col2,b.col2,b.col3
FROM t1 a LEFT JOIN t2 b ON a.col1=b.col1
- WHERE b.col2 IS NULL OR
+ WHERE b.col2 IS NULL OR
b.col2=(SELECT MAX(col2) FROM t2 b WHERE b.col1=a.col1);
-SELECT a.col1,a.col2,b.col2,b.col3
+SELECT a.col1,a.col2,b.col2,b.col3
FROM v1 a LEFT JOIN t2 b ON a.col1=b.col1
- WHERE b.col2 IS NULL OR
+ WHERE b.col2 IS NULL OR
b.col2=(SELECT MAX(col2) FROM t2 b WHERE b.col1=a.col1);
-CREATE VIEW v2 AS SELECT * FROM t2;
+CREATE VIEW v2 AS SELECT * FROM t2;
SELECT a.col1,a.col2,b.col2,b.col3
FROM v2 b RIGHT JOIN v1 a ON a.col1=b.col1
WHERE b.col2 IS NULL OR
- b.col2=(SELECT MAX(col2) FROM v2 b WHERE b.col1=a.col1);
+ b.col2=(SELECT MAX(col2) FROM v2 b WHERE b.col1=a.col1);
-# Tests from the report for bug #6107
+# Tests from the report for Bug#6107
SELECT a.col1,a.col2,b.col2,b.col3
FROM v2 b RIGHT JOIN v1 a ON a.col1=b.col1
WHERE a.col1 IN (1,5,9) AND
(b.col2 IS NULL OR
- b.col2=(SELECT MAX(col2) FROM v2 b WHERE b.col1=a.col1));
+ b.col2=(SELECT MAX(col2) FROM v2 b WHERE b.col1=a.col1));
CREATE VIEW v3 AS SELECT * FROM t1 WHERE col1 IN (1,5,9);
SELECT a.col1,a.col2,b.col2,b.col3
FROM v2 b RIGHT JOIN v3 a ON a.col1=b.col1
WHERE b.col2 IS NULL OR
- b.col2=(SELECT MAX(col2) FROM v2 b WHERE b.col1=a.col1);
-
+ b.col2=(SELECT MAX(col2) FROM v2 b WHERE b.col1=a.col1);
+
DROP VIEW v1,v2,v3;
DROP TABLE t1,t2;
#
-# BUG#8490 Select from views containing subqueries causes server to hang
-# forever.
+# Bug#8490 Select from views containing subqueries causes server to hang
+# forever.
#
create table t1 as select 1 A union select 2 union select 3;
create table t2 as select * from t1;
create view v1 as select * from t1 where a in (select * from t2);
select * from v1 A, v1 B where A.a = B.a;
create table t3 as select a a,a b from t2;
-create view v2 as select * from t3 where
+create view v2 as select * from t3 where
a in (select * from t1) or b in (select * from t2);
select * from v2 A, v2 B where A.a = B.b;
drop view v1, v2;
drop table t1, t2, t3;
#
-# Test case for bug #8528: select from view over multi-table view
+# Test case for Bug#8528 select from view over multi-table view
#
CREATE TABLE t1 (a int);
CREATE TABLE t2 (b int);
@@ -1565,7 +1565,7 @@ DROP VIEW v2,v1;
DROP TABLE t1, t2;
#
-# Correct restoring view name in SP table locking BUG#9758
+# Correct restoring view name in SP table locking Bug#9758
#
create table t1 (a int);
create view v1 as select sum(a) from t1 group by a;
@@ -1594,7 +1594,7 @@ SELECT d, c FROM v1 ORDER BY d,c;
DROP VIEW v1;
DROP TABLE t1, t2;
#
-# using sum(distinct ) & avg(distinct ) in views (BUG#7015)
+# using sum(distinct ) & avg(distinct ) in views (Bug#7015)
#
create table t1 (s1 int);
create view v1 as select sum(distinct s1) from t1;
@@ -1606,14 +1606,14 @@ drop view v1;
drop table t1;
#
-# using cast(... as decimal) in views (BUG#11387);
+# using cast(... as decimal) in views (Bug#11387);
#
create view v1 as select cast(1 as decimal);
select * from v1;
drop view v1;
#
-# Bug#11298 insert into select from VIEW produces incorrect result when
+# Bug#11298 insert into select from VIEW produces incorrect result when
# using ORDER BY
create table t1(f1 int);
create table t2(f2 int);
@@ -1627,7 +1627,7 @@ drop view v1;
drop table t1,t2,t3;
#
-# Generation unique names for columns, and correct names check (BUG#7448)
+# Generation unique names for columns, and correct names check (Bug#7448)
#
# names with ' and \
create view v1 as select '\\','\\shazam';
@@ -1670,24 +1670,24 @@ create view v1 as select 's1', 's1', s1 from t1;
select * from v1;
drop view v1;
# underlying field name conflict with set name
--- error 1060
+-- error ER_DUP_FIELDNAME
create view v1 as select 1 as s1, 's1', s1 from t1;
--- error 1060
+-- error ER_DUP_FIELDNAME
create view v1 as select 's1', s1, 1 as s1 from t1;
drop table t1;
# set names differ by case only
--- error 1060
+-- error ER_DUP_FIELDNAME
create view v1(k, K) as select 1,2;
#
-# using time_format in view (BUG#7521)
+# using time_format in view (Bug#7521)
#
create view v1 as SELECT TIME_FORMAT(SEC_TO_TIME(3600),'%H:%i') as t;
select * from v1;
drop view v1;
#
-# evaluation constant functions in WHERE (BUG#4663)
+# evaluation constant functions in WHERE (Bug#4663)
#
create table t1 (a timestamp default now());
create table t2 (b timestamp default now());
@@ -1708,7 +1708,7 @@ DROP VIEW v1;
DROP TABLE t1;
#
-# checking views after some view with error (BUG#11337)
+# checking views after some view with error (Bug#11337)
#
CREATE TABLE t1 (col1 time);
CREATE TABLE t2 (col1 time);
@@ -1749,7 +1749,7 @@ drop view v1, v2, v3, v4, v5, v6;
drop table t2,t3;
#
-# bug #11325 Wrong date comparison in views
+# Bug#11325 Wrong date comparison in views
#
create table t1 (f1 date);
insert into t1 values ('2005-01-01'),('2005-02-02');
@@ -1760,7 +1760,7 @@ drop view v1;
drop table t1;
#
-# using encrypt & substring_index in view (BUG#7024)
+# using encrypt & substring_index in view (Bug#7024)
#
CREATE VIEW v1 AS SELECT ENCRYPT("dhgdhgd");
disable_result_log;
@@ -1772,21 +1772,21 @@ SELECT * FROM v1;
drop view v1;
#
-# hide underlying tables names in case of imposibility to update (BUG#10773)
+# hide underlying tables names in case of imposibility to update (Bug#10773)
#
create table t1 (f59 int, f60 int, f61 int);
insert into t1 values (19,41,32);
-create view v1 as select f59, f60 from t1 where f59 in
+create view v1 as select f59, f60 from t1 where f59 in
(select f59 from t1);
--- error 1288
+-- error ER_NON_UPDATABLE_TABLE
update v1 set f60=2345;
--- error 1443
+-- error ER_VIEW_PREVENT_UPDATE
update t1 set f60=(select max(f60) from v1);
drop view v1;
drop table t1;
#
-# Using var_samp with view (BUG#10651)
+# Using var_samp with view (Bug#10651)
#
create table t1 (s1 int);
create view v1 as select var_samp(s1) from t1;
@@ -1794,24 +1794,26 @@ show create view v1;
drop view v1;
drop table t1;
+
#
# Correct inserting data check (absence of default value) for view
-# underlying tables (BUG#6443)
+# underlying tables (Bug#6443)
#
set sql_mode='strict_all_tables';
CREATE TABLE t1 (col1 INT NOT NULL, col2 INT NOT NULL);
CREATE VIEW v1 (vcol1) AS SELECT col1 FROM t1;
CREATE VIEW v2 (vcol1) AS SELECT col1 FROM t1 WHERE col2 > 2;
--- error 1364
+-- error ER_NO_DEFAULT_FOR_FIELD
INSERT INTO t1 (col1) VALUES(12);
--- error 1423
+-- error ER_NO_DEFAULT_FOR_VIEW_FIELD
INSERT INTO v1 (vcol1) VALUES(12);
--- error 1423
+-- error ER_NO_DEFAULT_FOR_VIEW_FIELD
INSERT INTO v2 (vcol1) VALUES(12);
set sql_mode=default;
drop view v2,v1;
drop table t1;
+
#
# Bug#11399 Use an alias in a select statement on a view
#
@@ -1822,8 +1824,9 @@ select f1 as alias from v1;
drop view v1;
drop table t1;
+
#
-# Test for bug #6120: SP cache to be invalidated when altering a view
+# Test for Bug#6120 SP cache to be invalidated when altering a view
#
CREATE TABLE t1 (s1 int, s2 int);
@@ -1842,8 +1845,9 @@ DROP PROCEDURE p1;
DROP VIEW v1;
DROP TABLE t1;
+
#
-# Test for bug #11709 View was ordered by wrong column
+# Test for Bug#11709 View was ordered by wrong column
#
create table t1 (f1 int, f2 int);
create view v1 as select f1 as f3, f2 as f1 from t1;
@@ -1852,8 +1856,9 @@ select * from v1 order by f1;
drop view v1;
drop table t1;
+
#
-# Test for bug #11771: wrong query_id in SELECT * FROM <view>
+# Test for Bug#11771 wrong query_id in SELECT * FROM <view>
#
CREATE TABLE t1 (f1 char);
INSERT INTO t1 VALUES ('A');
@@ -1866,8 +1871,9 @@ SELECT * FROM t1;
DROP VIEW v1;
DROP TABLE t1;
+
#
-# opening table in correct locking mode (BUG#9597)
+# opening table in correct locking mode (Bug#9597)
#
CREATE TABLE t1 ( bug_table_seq INTEGER NOT NULL);
CREATE OR REPLACE VIEW v1 AS SELECT * from t1;
@@ -1884,8 +1890,9 @@ DROP PROCEDURE p1;
DROP VIEW v1;
DROP TABLE t1;
+
#
-# Bug #11335 View redefines column types
+# Bug#11335 View redefines column types
#
create table t1 (f1 tinyint(1), f2 char(1), f3 varchar(1), f4 geometry, f5 datetime);
create view v1 as select * from t1;
@@ -1893,8 +1900,9 @@ desc v1;
drop view v1;
drop table t1;
+
#
-# Bug #11760 Typo in Item_func_add_time::print() results in NULLs returned
+# Bug#11760 Typo in Item_func_add_time::print() results in NULLs returned
# subtime() in view
create table t1(f1 datetime);
insert into t1 values('2005.01.01 12:0:0');
@@ -1903,8 +1911,9 @@ select * from v1;
drop view v1;
drop table t1;
+
#
-# Test for bug #11412: query over a multitable view with GROUP_CONCAT
+# Test for Bug#11412 query over a multitable view with GROUP_CONCAT
#
CREATE TABLE t1 (
aid int PRIMARY KEY,
@@ -1920,15 +1929,16 @@ INSERT INTO t2 values (1,1), (2,1), (2,2);
CREATE VIEW v1 AS SELECT t1.*,t2.pid FROM t1,t2 WHERE t1.aid = t2.aid;
-SELECT pid,GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1) FROM t1,t2
+SELECT pid,GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1) FROM t1,t2
WHERE t1.aid = t2.aid GROUP BY pid;
SELECT pid,GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1) FROM v1 GROUP BY pid;
DROP VIEW v1;
DROP TABLE t1,t2;
+
#
-# Test for bug #12382: SELECT * FROM view after INSERT command
+# Test for Bug#12382 SELECT * FROM view after INSERT command
#
CREATE TABLE t1 (id int PRIMARY KEY, f varchar(255));
@@ -1942,9 +1952,10 @@ SELECT * FROM v1;
DROP VIEW v1;
DROP TABLE t1;
+
#
-# Test for bug #12470: crash for a simple select from a view defined
-# as a join over 5 tables
+# Test for Bug#12470 crash for a simple select from a view defined
+# as a join over 5 tables
CREATE TABLE t1 (pk int PRIMARY KEY, b int);
CREATE TABLE t2 (pk int PRIMARY KEY, fk int, INDEX idx(fk));
@@ -1961,27 +1972,29 @@ SELECT a FROM v1;
DROP VIEW v1;
DROP TABLE t1,t2,t3,t4,t5;
+
#
-# Bug #12298 Typo in function name results in erroneous view being created.
+# Bug#12298 Typo in function name results in erroneous view being created.
#
create view v1 as select timestampdiff(day,'1997-01-01 00:00:00','1997-01-02 00:00:00') as f1;
select * from v1;
drop view v1;
#
-# repeatable CREATE VIEW statement BUG#12468
+# repeatable CREATE VIEW statement Bug#12468
#
create table t1(a int);
create procedure p1() create view v1 as select * from t1;
drop table t1;
--- error 1146
+-- error ER_NO_SUCH_TABLE
call p1();
--- error 1146
+-- error ER_NO_SUCH_TABLE
call p1();
drop procedure p1;
+
#
-# Bug #10624 Views with multiple UNION and UNION ALL produce incorrect results
+# Bug#10624 Views with multiple UNION and UNION ALL produce incorrect results
#
create table t1 (f1 int);
create table t2 (f1 int);
@@ -1991,20 +2004,23 @@ create view v1 as select * from t1 union select * from t2 union all select * fro
select * from v1;
drop view v1;
drop table t1,t2;
+
+
+#
+# Test for Bug#10970 view referring a temporary table indirectly
#
-# Test for bug #10970: view referring a temporary table indirectly
-#
CREATE TEMPORARY TABLE t1 (a int);
CREATE FUNCTION f1 () RETURNS int RETURN (SELECT COUNT(*) FROM t1);
--- error 1352
+-- error ER_VIEW_SELECT_TMPTABLE
CREATE VIEW v1 AS SELECT f1();
DROP FUNCTION f1;
DROP TABLE t1;
+
#
-# BUG #12533 (crash on DESCRIBE <view> after renaming base table column)
+# Bug#12533 (crash on DESCRIBE <view> after renaming base table column)
#
--disable_warnings
DROP TABLE IF EXISTS t1;
@@ -2016,13 +2032,14 @@ CREATE VIEW v1 AS SELECT * FROM t1;
DESCRIBE v1;
ALTER TABLE t1 CHANGE COLUMN f4 f4x CHAR(5);
---error 1356
+--error ER_VIEW_INVALID
DESCRIBE v1;
DROP TABLE t1;
DROP VIEW v1;
-#
-# Bug #12489 wrongly printed strcmp() function results in creation of broken
+
+#
+# Bug#12489 wrongly printed strcmp() function results in creation of broken
# view
create table t1 (f1 char);
create view v1 as select strcmp(f1,'a') from t1;
@@ -2030,8 +2047,9 @@ select * from v1;
drop view v1;
drop table t1;
+
#
-# Bug #12922 if(sum(),...) with group from view returns wrong results
+# Bug#12922 if(sum(),...) with group from view returns wrong results
#
create table t1 (f1 int, f2 int,f3 int);
insert into t1 values (1,10,20),(2,0,0);
@@ -2039,7 +2057,9 @@ create view v1 as select * from t1;
select if(sum(f1)>1,f2,f3) from v1 group by f1;
drop view v1;
drop table t1;
-# BUG#12941
+
+
+# Bug#12941
#
--disable_warnings
create table t1 (
@@ -2049,7 +2069,7 @@ create table t1 (
create table t2 (
r_object_id char(16) NOT NULL,
- i_position int(11) NOT NULL,
+ i_position int(11) NOT NULL,
users_names varchar(32) default NULL
) Engine = InnoDB;
--enable_warnings
@@ -2067,22 +2087,24 @@ insert into t2 values('120001a080000542',-1, 'guser01');
insert into t2 values('120001a080000542',-2, 'guser02');
select v1.r_object_id, v2.users_names from v1, v2
-where (v1.group_name='tstgroup1') and v2.r_object_id=v1.r_object_id
+where (v1.group_name='tstgroup1') and v2.r_object_id=v1.r_object_id
order by users_names;
drop view v1, v2;
drop table t1, t2;
-# Bug #6808 - Views: CREATE VIEW v ... FROM t AS v fails
+
+# Bug#6808 Views: CREATE VIEW v ... FROM t AS v fails
#
-create table t1 (s1 int);
+create table t1 (s1 int);
create view abc as select * from t1 as abc;
drop table t1;
drop view abc;
+
#
-# Bug #12993 View column rename broken in subselect
+# Bug#12993 View column rename broken in subselect
#
create table t1(f1 char(1));
create view v1 as select * from t1;
@@ -2090,15 +2112,17 @@ select * from (select f1 as f2 from v1) v where v.f2='a';
drop view v1;
drop table t1;
+
#
-# Bug #11416 Server crash if using a view that uses function convert_tz
+# Bug#11416 Server crash if using a view that uses function convert_tz
#
create view v1 as SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
select * from v1;
drop view v1;
+
#
-# Bugs #12963, #13000: wrong creation of VIEW with DAYNAME, DAYOFWEEK, and WEEKDAY
+# Bugs#12963, #13000 wrong creation of VIEW with DAYNAME, DAYOFWEEK, and WEEKDAY
#
CREATE TABLE t1 (date DATE NOT NULL);
@@ -2128,8 +2152,9 @@ SELECT * FROM v3;
DROP TABLE t1;
DROP VIEW v1, v2, v3;
+
#
-# Bug #13411: crash when using non-qualified view column in HAVING clause
+# Bug#13411 crash when using non-qualified view column in HAVING clause
#
CREATE TABLE t1 ( a int, b int );
@@ -2141,8 +2166,9 @@ SELECT v1.a FROM v1 GROUP BY v1.a HAVING a > 1;
DROP VIEW v1;
DROP TABLE t1;
+
#
-# Bug #13410: failed name resolution for qualified view column in HAVING
+# Bug#13410 failed name resolution for qualified view column in HAVING
#
CREATE TABLE t1 ( a int, b int );
@@ -2156,8 +2182,9 @@ SELECT v_1.a FROM v1 AS v_1 GROUP BY v_1.a HAVING v_1.a IN (1,2,3);
DROP VIEW v1;
DROP TABLE t1;
+
#
-# Bug #13327 view wasn't using index for const condition
+# Bug#13327 view wasn't using index for const condition
#
CREATE TABLE t1 (a INT, b INT, INDEX(a,b));
@@ -2174,8 +2201,9 @@ EXPLAIN SELECT * FROM v2 WHERE a=1;
DROP VIEW v1,v2;
DROP TABLE t1,t2,t3;
+
#
-# Bug #13622 Wrong view .frm created if some field's alias contain \n
+# Bug#13622 Wrong view .frm created if some field's alias contain \n
#
create table t1 (f1 int);
create view v1 as select t1.f1 as '123
@@ -2184,7 +2212,8 @@ select * from v1;
drop view v1;
drop table t1;
-# Bug #14466 lost sort order in GROUP_CONCAT() in a view
+
+# Bug#14466 lost sort order in GROUP_CONCAT() in a view
#
create table t1 (f1 int, f2 int);
insert into t1 values(1,1),(1,2),(1,3);
@@ -2195,8 +2224,9 @@ select * from v2;
drop view v1,v2;
drop table t1;
+
#
-# BUG#14026 Crash on second PS execution when using views
+# Bug#14026 Crash on second PS execution when using views
#
create table t1 (x int, y int);
create table t2 (x int, y int, z int);
@@ -2206,8 +2236,8 @@ create table t4 (x int, y int, z int);
create view v1 as
select t1.x
from (
- (t1 join t2 on ((t1.y = t2.y)))
- join
+ (t1 join t2 on ((t1.y = t2.y)))
+ join
(t3 left join t4 on (t3.y = t4.y) and (t3.z = t4.z))
);
@@ -2219,8 +2249,9 @@ execute stmt1 using @parm1;
drop view v1;
drop table t1,t2,t3,t4;
+
#
-# Bug #14540: OPTIMIZE, ANALYZE, REPAIR applied to not a view
+# Bug#14540 OPTIMIZE, ANALYZE, REPAIR applied to not a view
#
CREATE TABLE t1(id INT);
@@ -2239,7 +2270,7 @@ DROP VIEW v1;
#
-# BUG#14719: Views DEFINER grammar is incorrect
+# Bug#14719 Views DEFINER grammar is incorrect
#
create definer = current_user() sql security invoker view v1 as select 1;
@@ -2250,8 +2281,9 @@ create definer = current_user sql security invoker view v1 as select 1;
show create view v1;
drop view v1;
+
#
-# Bug #14816 test_if_order_by_key() expected only Item_fields.
+# Bug#14816 test_if_order_by_key() expected only Item_fields.
#
create table t1 (id INT, primary key(id));
insert into t1 values (1),(2);
@@ -2260,8 +2292,9 @@ explain select id from v1 order by id;
drop view v1;
drop table t1;
+
#
-# Bug #14850 Item_ref's values wasn't updated
+# Bug#14850 Item_ref's values wasn't updated
#
create table t1(f1 int, f2 int);
insert into t1 values (null, 10), (null,2);
@@ -2271,8 +2304,9 @@ select f1, sum(f2) from v1 group by f1;
drop view v1;
drop table t1;
+
#
-# BUG#14885: incorrect SOURCE in view created in a procedure
+# Bug#14885 incorrect SOURCE in view created in a procedure
# TODO: here SOURCE string must be shown when it will be possible
#
--disable_warnings
@@ -2290,8 +2324,9 @@ show create view v1;
drop view v1;
drop procedure p1;
+
#
-# BUG#15096: using function with view for view creation
+# Bug#15096 using function with view for view creation
#
CREATE VIEW v1 AS SELECT 42 AS Meaning;
--disable_warnings
@@ -2311,8 +2346,9 @@ select * from v2;
drop view v2,v1;
drop function f1;
+
#
-# Bug#14861: aliased column names are not preserved.
+# Bug#14861 aliased column names are not preserved.
#
create table t1 (id numeric, warehouse_id numeric);
create view v1 as select id from t1;
@@ -2330,8 +2366,9 @@ order by v2.receipt_id;
drop view v2, v1;
drop table t1;
+
#
-# Bug#16016: MIN/MAX optimization for views
+# Bug#16016 MIN/MAX optimization for views
#
CREATE TABLE t1 (a int PRIMARY KEY, b int);
@@ -2354,9 +2391,10 @@ EXPLAIN SELECT MIN(a) FROM v1;
DROP VIEW v1;
DROP TABLE t1;
+
#
-# Bug#16382: grouping name is resolved against a view column name
-# which coincides with a select column name
+# Bug#16382 grouping name is resolved against a view column name
+# which coincides with a select column name
CREATE TABLE t1 (x varchar(10));
INSERT INTO t1 VALUES (null), ('foo'), ('bar'), (null);
@@ -2371,21 +2409,23 @@ SELECT IF(x IS NULL, 'blank', 'not blank') AS x FROM v1 GROUP BY x;
DROP VIEW v1;
DROP TABLE t1;
+
#
-# BUG#15943: mysql_next_result hangs on invalid SHOW CREATE VIEW
+# Bug#15943 mysql_next_result hangs on invalid SHOW CREATE VIEW
#
delimiter //;
-drop table if exists t1;
-drop view if exists v1;
-create table t1 (id int);
-create view v1 as select * from t1;
-drop table t1;
-show create view v1;
+drop table if exists t1;
+drop view if exists v1;
+create table t1 (id int);
+create view v1 as select * from t1;
+drop table t1;
+show create view v1;
drop view v1;
//
delimiter ;//
+
#
# Bug#17726 Not checked empty list caused endless loop
#
@@ -2400,9 +2440,10 @@ select * from v2;
drop view v2, v1;
drop table t1;
+
#
-# Bug #18386: select from view over a table with ORDER BY view_col clause
-# given view_col is not an image of any column from the base table
+# Bug#18386 select from view over a table with ORDER BY view_col clause
+# given view_col is not an image of any column from the base table
CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (1), (2);
@@ -2414,9 +2455,10 @@ SELECT my_sqrt FROM v1 ORDER BY my_sqrt;
DROP VIEW v1;
DROP TABLE t1;
+
+#
+# Bug#18237 invalid count optimization applied to an outer join with a view
#
-# Bug #18237: invalid count optimization applied to an outer join with a view
-#
CREATE TABLE t1 (id int PRIMARY KEY);
CREATE TABLE t2 (id int PRIMARY KEY);
@@ -2435,14 +2477,15 @@ DROP VIEW v2;
DROP TABLE t1, t2;
+
#
-# Bug #16069: VIEW does return the same results as underlying SELECT
-# with WHERE condition containing BETWEEN over dates
+# Bug#16069 VIEW does return the same results as underlying SELECT
+# with WHERE condition containing BETWEEN over dates
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY,
td date DEFAULT NULL, KEY idx(td));
-INSERT INTO t1 VALUES
+INSERT INTO t1 VALUES
(1, '2005-01-01'), (2, '2005-01-02'), (3, '2005-01-02'),
(4, '2005-01-03'), (5, '2005-01-04'), (6, '2005-01-05'),
(7, '2005-01-05'), (8, '2005-01-05'), (9, '2005-01-06');
@@ -2455,8 +2498,9 @@ SELECT * FROM v1 WHERE td BETWEEN CAST('2005.01.02' AS DATE) AND CAST('2005.01.0
DROP VIEW v1;
DROP TABLE t1;
+
#
-# BUG#14308: Recursive view definitions
+# Bug#14308 Recursive view definitions
#
# using view only
create table t1 (a int);
@@ -2486,8 +2530,9 @@ select * from v1;
drop function f1;
drop view t1, v1;
+
#
-# Bug #15153: CONVERT_TZ() is not allowed in all places in VIEWs
+# Bug#15153 CONVERT_TZ() is not allowed in all places in VIEWs
#
# Error was reported when one tried to use CONVERT_TZ() function
# select list of view which was processed using MERGE algorithm.
@@ -2498,7 +2543,7 @@ insert into t1 values (20040101000000), (20050101000000), (20060101000000);
create view v1 as select convert_tz(dt, 'UTC', 'Europe/Moscow') as ldt from t1;
select * from v1;
drop view v1;
-# And in its where part
+# And in its where part
create view v1 as select * from t1 where convert_tz(dt, 'UTC', 'Europe/Moscow') >= 20050101000000;
select * from v1;
# Other interesting case - a view which uses convert_tz() function
@@ -2513,9 +2558,10 @@ select * from v2;
drop view v1, v2;
drop table t1;
+
#
-# Bug #19490: usage of view specified by a query with GROUP BY
-# an expression containing non-constant interval
+# Bug#19490 usage of view specified by a query with GROUP BY
+# an expression containing non-constant interval
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, d datetime);
@@ -2529,8 +2575,9 @@ SELECT * FROM v1;
DROP VIEW v1;
DROP TABLE t1;
+
#
-# Bug#19077: A nested materialized view is used before being populated.
+# Bug#19077 A nested materialized view is used before being populated.
#
CREATE TABLE t1 (i INT, j BIGINT);
INSERT INTO t1 VALUES (1, 2), (2, 2), (3, 2);
@@ -2540,9 +2587,10 @@ SELECT * FROM v2;
DROP VIEW v2, v1;
DROP TABLE t1;
+
+#
+# Bug#19573 VIEW with HAVING that refers an alias name
#
-# Bug #19573: VIEW with HAVING that refers an alias name
-#
CREATE TABLE t1(
fName varchar(25) NOT NULL,
@@ -2550,7 +2598,7 @@ CREATE TABLE t1(
DOB date NOT NULL,
test_date date NOT NULL,
uID int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY);
-
+
INSERT INTO t1(fName, lName, DOB, test_date) VALUES
('Hank', 'Hill', '1964-09-29', '2007-01-01'),
('Tom', 'Adams', '1908-02-14', '2007-01-01'),
@@ -2558,8 +2606,8 @@ INSERT INTO t1(fName, lName, DOB, test_date) VALUES
CREATE VIEW v1 AS
SELECT (year(test_date)-year(DOB)) AS Age
- FROM t1 HAVING Age < 75;
-SHOW CREATE VIEW v1;
+ FROM t1 HAVING Age < 75;
+SHOW CREATE VIEW v1;
SELECT (year(test_date)-year(DOB)) AS Age FROM t1 HAVING Age < 75;
SELECT * FROM v1;
@@ -2567,8 +2615,9 @@ SELECT * FROM v1;
DROP VIEW v1;
DROP TABLE t1;
+
#
-# Bug #19089: wrong inherited dafault values in temp table views
+# Bug#19089 wrong inherited dafault values in temp table views
#
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, a char(6) DEFAULT 'xxx');
@@ -2600,7 +2649,7 @@ DROP TABLE t1,t2;
#
-# Bug#16110: insert permitted into view col w/o default value
+# Bug#16110 insert permitted into view col w/o default value
#
CREATE TABLE t1 (a INT NOT NULL, b INT NULL DEFAULT NULL);
CREATE VIEW v1 AS SELECT a, b FROM t1;
@@ -2608,7 +2657,7 @@ CREATE VIEW v1 AS SELECT a, b FROM t1;
INSERT INTO v1 (b) VALUES (2);
SET SQL_MODE = STRICT_ALL_TABLES;
---error 1423
+--error ER_NO_DEFAULT_FOR_VIEW_FIELD
INSERT INTO v1 (b) VALUES (4);
SET SQL_MODE = '';
@@ -2617,8 +2666,9 @@ SELECT * FROM t1;
DROP VIEW v1;
DROP TABLE t1;
+
#
-# Bug #18243: expression over a view column that with the REVERSE function
+# Bug#18243 expression over a view column that with the REVERSE function
#
CREATE TABLE t1 (firstname text, surname text);
@@ -2633,21 +2683,23 @@ SELECT CONCAT(LEFT(name,LENGTH(name)-INSTR(REVERSE(name)," ")),
DROP VIEW v1;
DROP TABLE t1;
+
#
-# Bug #19714: wrong type of a view column specified by an expressions over ints
+# Bug#19714 wrong type of a view column specified by an expressions over ints
#
CREATE TABLE t1 (i int, j int);
CREATE VIEW v1 AS SELECT COALESCE(i,j) FROM t1;
DESCRIBE v1;
-CREATE TABLE t2 SELECT COALESCE(i,j) FROM t1;
+CREATE TABLE t2 SELECT COALESCE(i,j) FROM t1;
DESCRIBE t2;
DROP VIEW v1;
DROP TABLE t1,t2;
+
#
-# Bug #17526: views with TRIM functions
+# Bug#17526 views with TRIM functions
#
CREATE TABLE t1 (s varchar(10));
@@ -2658,20 +2710,21 @@ CREATE VIEW v1 AS SELECT TRIM(BOTH 'y' FROM s) FROM t1;
SELECT * FROM v1;
DROP VIEW v1;
-SELECT TRIM(LEADING 'y' FROM s) FROM t1;
+SELECT TRIM(LEADING 'y' FROM s) FROM t1;
CREATE VIEW v1 AS SELECT TRIM(LEADING 'y' FROM s) FROM t1;
SELECT * FROM v1;
DROP VIEW v1;
-SELECT TRIM(TRAILING 'y' FROM s) FROM t1;
+SELECT TRIM(TRAILING 'y' FROM s) FROM t1;
CREATE VIEW v1 AS SELECT TRIM(TRAILING 'y' FROM s) FROM t1;
SELECT * FROM v1;
DROP VIEW v1;
DROP TABLE t1;
+
#
-#Bug #21080: ALTER VIEW makes user restate SQL SECURITY mode, and ALGORITHM
+# Bug#21080 ALTER VIEW makes user restate SQL SECURITY mode, and ALGORITHM
#
CREATE TABLE t1 (x INT, y INT);
CREATE ALGORITHM=TEMPTABLE SQL SECURITY INVOKER VIEW v1 AS SELECT x FROM t1;
@@ -2682,8 +2735,10 @@ SHOW CREATE VIEW v1;
DROP VIEW v1;
DROP TABLE t1;
-# Bug #21086: server crashes when VIEW defined with a SELECT with COLLATE
-# clause is called
+
+
+# Bug#21086 server crashes when VIEW defined with a SELECT with COLLATE
+# clause is called
#
CREATE TABLE t1 (s1 char);
INSERT INTO t1 VALUES ('Z');
@@ -2700,19 +2755,20 @@ SELECT s1 FROM t1;
DROP VIEW v1, v2;
DROP TABLE t1;
+
#
-# Bug #11551: Asymmetric + undocumented behaviour of DROP VIEW and DROP TABLE
+# Bug#11551 Asymmetric + undocumented behaviour of DROP VIEW and DROP TABLE
#
CREATE TABLE t1 (id INT);
CREATE VIEW v1 AS SELECT id FROM t1;
SHOW TABLES;
---error 1051
+--error ER_BAD_TABLE_ERROR
DROP VIEW v2,v1;
SHOW TABLES;
CREATE VIEW v1 AS SELECT id FROM t1;
---error 1347
+--error ER_WRONG_OBJECT
DROP VIEW t1,v1;
SHOW TABLES;
@@ -2721,13 +2777,14 @@ DROP TABLE t1;
DROP VIEW IF EXISTS v1;
--enable_warnings
+
#
-# Bug #21261: Wrong access rights was required for an insert to a view
+# Bug#21261 Wrong access rights was required for an insert to a view
#
CREATE DATABASE bug21261DB;
USE bug21261DB;
-CONNECT (root,localhost,root,,bug21261DB);
-CONNECTION root;
+connect (root,localhost,root,,bug21261DB);
+connection root;
CREATE TABLE t1 (x INT);
CREATE SQL SECURITY INVOKER VIEW v1 AS SELECT x FROM t1;
@@ -2736,34 +2793,41 @@ GRANT INSERT, UPDATE ON t1 TO 'user21261'@'localhost';
CREATE TABLE t2 (y INT);
GRANT SELECT ON t2 TO 'user21261'@'localhost';
-CONNECT (user21261, localhost, user21261,, bug21261DB);
-CONNECTION user21261;
+connect (user21261, localhost, user21261,, bug21261DB);
+connection user21261;
INSERT INTO v1 (x) VALUES (5);
UPDATE v1 SET x=1;
-CONNECTION root;
+connection root;
GRANT SELECT ON v1 TO 'user21261'@'localhost';
GRANT SELECT ON t1 TO 'user21261'@'localhost';
-CONNECTION user21261;
+connection user21261;
UPDATE v1,t2 SET x=1 WHERE x=y;
-CONNECTION root;
+connection root;
SELECT * FROM t1;
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user21261'@'localhost';
DROP USER 'user21261'@'localhost';
DROP VIEW v1;
DROP TABLE t1;
DROP DATABASE bug21261DB;
+
+connection default;
USE test;
+disconnect root;
+disconnect user21261;
+
#
-# Bug #15950: NOW() optimized away in VIEWs
+# Bug#15950 NOW() optimized away in VIEWs
#
create table t1 (f1 datetime);
create view v1 as select * from t1 where f1 between now() and now() + interval 1 minute;
show create view v1;
drop view v1;
drop table t1;
+
+
#
-# Test for BUG#16899: Possible buffer overflow in handling of DEFINER-clause.
+# Test for Bug#16899 Possible buffer overflow in handling of DEFINER-clause.
#
# Prepare.
@@ -2790,8 +2854,7 @@ DROP TABLE t1;
#
-# BUG#17591: Updatable view not possible with trigger or stored
-# function
+# Bug#17591 Updatable view not possible with trigger or stored function
#
# During prelocking phase we didn't update lock type of view tables,
# hence READ lock was always requested.
@@ -2835,11 +2898,12 @@ DROP FUNCTION f2;
DROP VIEW v1, v2;
DROP TABLE t1;
+
#
-# Bug #5500: wrong select_type in EXPLAIN output for queries over views
+# Bug#5500 wrong select_type in EXPLAIN output for queries over views
#
-CREATE TABLE t1 (s1 int);
+CREATE TABLE t1 (s1 int);
CREATE VIEW v1 AS SELECT * FROM t1;
EXPLAIN SELECT * FROM t1;
@@ -2847,34 +2911,36 @@ EXPLAIN SELECT * FROM v1;
INSERT INTO t1 VALUES (1), (3), (2);
-EXPLAIN SELECT * FROM t1 t WHERE t.s1+1 < (SELECT MAX(t1.s1) FROM t1);
-EXPLAIN SELECT * FROM v1 t WHERE t.s1+1 < (SELECT MAX(t1.s1) FROM t1);
+EXPLAIN SELECT * FROM t1 t WHERE t.s1+1 < (SELECT MAX(t1.s1) FROM t1);
+EXPLAIN SELECT * FROM v1 t WHERE t.s1+1 < (SELECT MAX(t1.s1) FROM t1);
DROP VIEW v1;
DROP TABLE t1;
+
#
-# Bug #5505: Wrong error message on INSERT into a view
+# Bug#5505 Wrong error message on INSERT into a view
#
create table t1 (s1 int);
create view v1 as select s1 as a, s1 as b from t1;
---error 1471
-insert into v1 values (1,1);
+--error ER_NON_INSERTABLE_TABLE
+insert into v1 values (1,1);
update v1 set a = 5;
drop view v1;
drop table t1;
+
#
-# Bug #21646: view qith a subquery in ON expression
+# Bug#21646 view qith a subquery in ON expression
#
-CREATE TABLE t1(pk int PRIMARY KEY);
+CREATE TABLE t1(pk int PRIMARY KEY);
CREATE TABLE t2(pk int PRIMARY KEY, fk int, ver int, org int);
-CREATE ALGORITHM=MERGE VIEW v1 AS
+CREATE ALGORITHM=MERGE VIEW v1 AS
SELECT t1.*
- FROM t1 JOIN t2
- ON t2.fk = t1.pk AND
+ FROM t1 JOIN t2
+ ON t2.fk = t1.pk AND
t2.ver = (SELECT MAX(t.ver) FROM t2 t WHERE t.org = t2.org);
SHOW WARNINGS;
SHOW CREATE VIEW v1;
@@ -2884,8 +2950,7 @@ DROP TABLE t1, t2;
#
-# Bug#19111: TRIGGERs selecting from a VIEW on the firing base table
-# fail
+# Bug#19111 TRIGGERs selecting from a VIEW on the firing base table fail
#
# Allow to select from a view on a table being modified in a trigger
# and stored function, since plain select is allowed there.
@@ -2916,23 +2981,24 @@ DROP FUNCTION f1;
DROP VIEW v1;
DROP TABLE t1;
+
#
-# Bug #16813 (WITH CHECK OPTION doesn't work with UPDATE)
+# Bug#16813 (WITH CHECK OPTION doesn't work with UPDATE)
#
CREATE TABLE t1(id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, val INT UNSIGNED NOT NULL);
CREATE VIEW v1 AS SELECT id, val FROM t1 WHERE val >= 1 AND val <= 5 WITH CHECK OPTION;
INSERT INTO v1 (val) VALUES (2);
INSERT INTO v1 (val) VALUES (4);
--- error 1369
+-- error ER_VIEW_CHECK_FAILED
INSERT INTO v1 (val) VALUES (6);
--- error 1369
+-- error ER_VIEW_CHECK_FAILED
UPDATE v1 SET val=6 WHERE id=2;
DROP VIEW v1;
DROP TABLE t1;
#
-# BUG#22584: last_insert_id not updated after inserting a record
+# Bug#22584 last_insert_id not updated after inserting a record
# through a updatable view
#
# We still do not update LAST_INSERT_ID if AUTO_INCREMENT column is
@@ -2968,8 +3034,9 @@ SELECT * FROM t1;
DROP VIEW v1, v2;
DROP TABLE t1;
+
#
-# Bug #25580: !0 as an operand in a select expression of a view
+# Bug#25580 !0 as an operand in a select expression of a view
#
CREATE VIEW v AS SELECT !0 * 5 AS x FROM DUAL;
@@ -2980,8 +3047,9 @@ SELECT * FROM v;
DROP VIEW v;
+
#
-# BUG#24293: '\Z' token is not handled correctly in views
+# Bug#24293 '\Z' token is not handled correctly in views
#
--disable_warnings
@@ -2995,8 +3063,9 @@ SHOW CREATE VIEW v1;
DROP VIEW v1;
+
#
-# Bug #26124: BETWEEN over a view column of the DATETIME type
+# Bug#26124 BETWEEN over a view column of the DATETIME type
#
CREATE TABLE t1 (mydate DATETIME);
@@ -3011,8 +3080,9 @@ SELECT * FROM v1 WHERE mydate BETWEEN '2007-01-01' AND '2007-01-31';
DROP VIEW v1;
DROP TABLE t1;
+
#
-# Bug #25931: update of a multi-table view with check option
+# Bug#25931 update of a multi-table view with check option
#
CREATE TABLE t1 (a int);
@@ -3024,7 +3094,7 @@ CREATE VIEW v1 AS
SELECT t2.b FROM t1,t2 WHERE t1.a = t2.b WITH CHECK OPTION;
SELECT * FROM v1;
---error 1369
+--error ER_VIEW_CHECK_FAILED
UPDATE v1 SET b=3;
SELECT * FROM v1;
SELECT * FROM t1;
@@ -3033,8 +3103,9 @@ SELECT * FROM t2;
DROP VIEW v1;
DROP TABLE t1,t2;
+
#
-# Bug#12122: Views with ORDER BY can't be resolved using MERGE algorithm.
+# Bug#12122 Views with ORDER BY can't be resolved using MERGE algorithm.
#
create table t1(f1 int, f2 int);
insert into t1 values(1,2),(1,3),(1,1),(2,3),(2,1),(2,2);
@@ -3048,7 +3119,7 @@ drop view v1;
drop table t1;
#
-# Bug#26209: queries with GROUP BY and ORDER BY using views
+# Bug#26209 queries with GROUP BY and ORDER BY using views
#
CREATE TABLE t1 (
@@ -3067,9 +3138,9 @@ SELECT code, COUNT(DISTINCT country) FROM v1 GROUP BY code ORDER BY MAX(id);
DROP VIEW v1;
DROP TABLE t1;
+
#
-# BUG#25897: Some queries are no longer possible after a CREATE VIEW
-# fails
+# Bug#25897 Some queries are no longer possible after a CREATE VIEW fails
#
--disable_warnings
DROP VIEW IF EXISTS v1;
@@ -3083,9 +3154,9 @@ eval CREATE VIEW v1 AS $query;
--echo # Previously the following would fail.
eval $query;
+
#
-# Bug#24532: The return data type of IS TRUE is different from similar
-# operations
+# Bug#24532 The return data type of IS TRUE is different from similar operations
#
--disable_warnings
@@ -3170,8 +3241,9 @@ drop view view_24532_a;
drop view view_24532_b;
drop table table_24532;
+
#
-# Bug#26560: view using subquery with a reference to an outer alias
+# Bug#26560 view using subquery with a reference to an outer alias
#
CREATE TABLE t1 (
@@ -3182,7 +3254,7 @@ INSERT INTO t1 (lid, name) VALUES
(1, 'YES'), (2, 'NO');
CREATE TABLE t2 (
- id int NOT NULL PRIMARY KEY,
+ id int NOT NULL PRIMARY KEY,
gid int NOT NULL,
lid int NOT NULL,
dt date
@@ -3210,8 +3282,9 @@ SELECT * FROM v1;
DROP VIEW v1;
DROP table t1,t2;
+
#
-# Bug#27786: Inconsistent Operation Performing UNION On View With ORDER BY
+# Bug#27786 Inconsistent Operation Performing UNION On View With ORDER BY
#
CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1),(2),(3);
CREATE VIEW v1 AS SELECT a FROM t1 ORDER BY a;
@@ -3226,8 +3299,9 @@ EXPLAIN SELECT * FROM t1 UNION SELECT * FROM v1 ORDER BY a;
DROP VIEW v1;
DROP TABLE t1;
+
#
-# Bug #27921 View ignores precision for CAST()
+# Bug#27921 View ignores precision for CAST()
#
CREATE VIEW v1 AS SELECT CAST( 1.23456789 AS DECIMAL( 7,5 ) ) AS col;
SELECT * FROM v1;
@@ -3238,9 +3312,10 @@ CREATE VIEW v1 AS SELECT CAST(1.23456789 AS DECIMAL(8,0)) AS col;
SHOW CREATE VIEW v1;
DROP VIEW v1;
+
#
-# Bug #28716: CHECK OPTION expression is evaluated over expired record buffers
-# when VIEW is updated via temporary tables
+# Bug#28716 CHECK OPTION expression is evaluated over expired record buffers
+# when VIEW is updated via temporary tables
#
CREATE TABLE t1 (a INT);
CREATE TABLE t2 (b INT, c INT DEFAULT 0);
@@ -3254,9 +3329,10 @@ SELECT * FROM v1;
DROP VIEW v1;
DROP TABLE t1,t2;
+
#
-# Bug #28561: update on multi-table view with CHECK OPTION and
-# a subquery in WHERE condition
+# Bug#28561 update on multi-table view with CHECK OPTION and a subquery
+# in WHERE condition
#
CREATE TABLE t1 (id int);
@@ -3264,8 +3340,8 @@ CREATE TABLE t2 (id int, c int DEFAULT 0);
INSERT INTO t1 (id) VALUES (1);
INSERT INTO t2 (id) VALUES (1);
-CREATE VIEW v1 AS
- SELECT t2.c FROM t1, t2
+CREATE VIEW v1 AS
+ SELECT t2.c FROM t1, t2
WHERE t1.id=t2.id AND 1 IN (SELECT id FROM t1) WITH CHECK OPTION;
UPDATE v1 SET c=1;
@@ -3273,9 +3349,10 @@ UPDATE v1 SET c=1;
DROP VIEW v1;
DROP TABLE t1,t2;
+
#
-# Bug #27827: CHECK OPTION ignores ON conditions when updating
-# a multi-table view with CHECK OPTION.
+# Bug#27827 CHECK OPTION ignores ON conditions when updating
+# a multi-table view with CHECK OPTION.
#
CREATE TABLE t1 (a1 INT, c INT DEFAULT 0);
@@ -3291,14 +3368,14 @@ CREATE VIEW v1 AS
SELECT t1.a1, t1.c FROM t1 JOIN t2 ON t1.a1=t2.a2 AND t1.c < 3
WITH CHECK OPTION;
SELECT * FROM v1;
---error 1369
+--error ER_VIEW_CHECK_FAILED
UPDATE v1 SET c=3;
PREPARE t FROM 'UPDATE v1 SET c=3';
---error 1369
+--error ER_VIEW_CHECK_FAILED
EXECUTE t;
---error 1369
+--error ER_VIEW_CHECK_FAILED
EXECUTE t;
---error 1369
+--error ER_VIEW_CHECK_FAILED
INSERT INTO v1(a1, c) VALUES (3, 3);
UPDATE v1 SET c=1 WHERE a1=1;
SELECT * FROM v1;
@@ -3309,14 +3386,14 @@ CREATE VIEW v2 AS SELECT t1.a1, t1.c
JOIN (t3 JOIN t4 ON t3.a3=t4.a4)
ON t2.a2=t3.a3 WITH CHECK OPTION;
SELECT * FROM v2;
---error 1369
+--error ER_VIEW_CHECK_FAILED
UPDATE v2 SET c=3;
PREPARE t FROM 'UPDATE v2 SET c=3';
---error 1369
+--error ER_VIEW_CHECK_FAILED
EXECUTE t;
---error 1369
+--error ER_VIEW_CHECK_FAILED
EXECUTE t;
---error 1369
+--error ER_VIEW_CHECK_FAILED
INSERT INTO v2(a1, c) VALUES (3, 3);
UPDATE v2 SET c=2 WHERE a1=1;
SELECT * FROM v2;
@@ -3325,10 +3402,11 @@ SELECT * FROM t1;
DROP VIEW v1,v2;
DROP TABLE t1,t2,t3,t4;
+
#
-# Bug #29104: assertion abort for a query with a view column reference
-# in the GROUP BY list and a condition requiring the value
-# of another view column to be equal to a constant
+# Bug#29104 assertion abort for a query with a view column reference
+# in the GROUP BY list and a condition requiring the value
+# of another view column to be equal to a constant
#
CREATE TABLE t1 (a int, b int);
@@ -3349,9 +3427,10 @@ EXPLAIN SELECT a, SUM(b) FROM v1 WHERE a=1 GROUP BY a;
DROP VIEW v1;
DROP TABLE t1;
+
#
-# Bug #29392: SELECT over a multi-table view with ORDER BY
-# selecting the same view column with two different aliases
+# Bug#29392 SELECT over a multi-table view with ORDER BY
+# selecting the same view column with two different aliases
#
CREATE TABLE t1 (
@@ -3375,7 +3454,7 @@ CREATE TABLE t3 (
INDEX idx_app_name(app_name)
);
-CREATE VIEW v1 AS
+CREATE VIEW v1 AS
SELECT profile.person_id AS person_id
FROM t1 profile, t2 userrole, t3 role
WHERE userrole.person_id = profile.person_id AND
@@ -3390,35 +3469,37 @@ INSERT INTO t1 VALUES
INSERT INTO t2 VALUES
(1,3,6),(2,4,7),(3,5,8),(4,6,9),(5,1,6),(6,1,7),(7,1,8),(8,1,9),(9,1,10);
-INSERT INTO t3 VALUES
+INSERT INTO t3 VALUES
(1,'NUCANS_APP_USER','NUCANSAPP'),(2,'NUCANS_TRGAPP_USER','NUCANSAPP'),
(3,'IA_INTAKE_COORDINATOR','IACANS'),(4,'IA_SCREENER','IACANS'),
(5,'IA_SUPERVISOR','IACANS'),(6,'IA_READONLY','IACANS'),
(7,'SOC_USER','SOCCANS'),(8,'CAYIT_USER','CAYITCANS'),
(9,'RTOS_DCFSPOS_SUPERVISOR','RTOS');
-
+
EXPLAIN SELECT t.person_id AS a, t.person_id AS b FROM v1 t WHERE t.person_id=6;
SELECT t.person_id AS a, t.person_id AS b FROM v1 t WHERE t.person_id=6;
DROP VIEW v1;
DROP TABLE t1,t2,t3;
+
#
-# Bug#30020: Insufficient check led to a wrong info provided by the
-# information schema table.
+# Bug#30020 Insufficient check led to a wrong info provided by the
+# information schema table.
#
create table t1 (i int);
insert into t1 values (1), (2), (1), (3), (2), (4);
create view v1 as select distinct i from t1;
select * from v1;
-select table_name, is_updatable from information_schema.views
+select table_name, is_updatable from information_schema.views
where table_name = 'v1';
drop view v1;
drop table t1;
+
#
-# Bug #28701: SELECTs from VIEWs completely ignore USE/FORCE KEY, allowing
-# invalid statements
+# Bug#28701 SELECTs from VIEWs completely ignore USE/FORCE KEY, allowing
+# invalid statements
#
CREATE TABLE t1 (a INT);
@@ -3436,7 +3517,7 @@ DROP TABLE t1;
#
-# Bug #28702: VIEWs defined with USE/FORCE KEY ignore that request
+# Bug#28702 VIEWs defined with USE/FORCE KEY ignore that request
#
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, b INT NOT NULL DEFAULT 0,
PRIMARY KEY(a), KEY (b));
@@ -3456,9 +3537,10 @@ DROP VIEW v2;
DROP VIEW v3;
DROP TABLE t1;
+
--echo #
---echo # Bug#29477: Not all fields of the target table were checked to have
---echo # a default value when inserting into a view.
+--echo # Bug#29477 Not all fields of the target table were checked to have
+--echo # a default value when inserting into a view.
--echo #
create table t1(f1 int, f2 int not null);
create view v1 as select f1 from t1;
@@ -3471,29 +3553,31 @@ set @@sql_mode=@old_mode;
drop view v1;
drop table t1;
+
#
-# Bug #33389: Selecting from a view into a table from within SP or trigger
-# crashes server
+# Bug#33389 Selecting from a view into a table from within SP or trigger
+# crashes server
#
create table t1 (a int, key(a));
create table t2 (c int);
-
+
create view v1 as select a b from t1;
-create view v2 as select 1 a from t2, v1 where c in
+create view v2 as select 1 a from t2, v1 where c in
(select 1 from t1 where b = a);
-
+
insert into t1 values (1), (1);
insert into t2 values (1), (1);
-
+
prepare stmt from "select * from v2 where a = 1";
-execute stmt;
+execute stmt;
drop view v1, v2;
drop table t1, t2;
+
#
-# Bug #33049: Assert while running test-as3ap test(mysql-bench suite)
+# Bug#33049 Assert while running test-as3ap test(mysql-bench suite)
#
CREATE TABLE t1 (a INT);
@@ -3508,7 +3592,7 @@ DROP TABLE t1;
###########################################################################
--echo # -----------------------------------------------------------------
---echo # -- Bug#34337: Server crash when Altering a view using a table name.
+--echo # -- Bug#34337 Server crash when Altering a view using a table name.
--echo # -----------------------------------------------------------------
--echo
@@ -3538,8 +3622,8 @@ DROP TABLE t1;
###########################################################################
--echo # -----------------------------------------------------------------
---echo # -- Bug#35193: VIEW query is rewritten without "FROM DUAL",
---echo # -- causing syntax error
+--echo # -- Bug#35193 VIEW query is rewritten without "FROM DUAL",
+--echo # -- causing syntax error
--echo # -----------------------------------------------------------------
--echo
@@ -3561,15 +3645,16 @@ DROP VIEW v1;
###########################################################################
#
-# Bug#39040: valgrind errors/crash when creating views with binlog logging
-# enabled
+# Bug#39040 valgrind errors/crash when creating views with binlog logging
+# enabled
#
# Bug is visible only when running in valgrind with binary logging.
CREATE VIEW v1 AS SELECT 1;
DROP VIEW v1;
+
#
-# Bug #33461: SELECT ... FROM <view> USE INDEX (...) throws an error
+# Bug#33461 SELECT ... FROM <view> USE INDEX (...) throws an error
#
CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT, INDEX (c2));
diff --git a/mysql-test/t/view_grant.test b/mysql-test/t/view_grant.test
index c8b31f711b5..ff17cde5184 100644
--- a/mysql-test/t/view_grant.test
+++ b/mysql-test/t/view_grant.test
@@ -1,6 +1,9 @@
# Can't test with embedded server
-- source include/not_embedded.inc
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
# simple test of grants
grant create view on test.* to test@localhost;
show grants for test@localhost;
@@ -26,19 +29,19 @@ grant create view,select on test.* to mysqltest_1@localhost;
connect (user1,localhost,mysqltest_1,,test);
connection user1;
--- error ER_SPECIFIC_ACCESS_DENIED_ERROR
+--error ER_SPECIFIC_ACCESS_DENIED_ERROR
create definer=root@localhost view v1 as select * from mysqltest.t1;
create view v1 as select * from mysqltest.t1;
# try to modify view without DROP privilege on it
--- error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
alter view v1 as select * from mysqltest.t1;
--- error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
create or replace view v1 as select * from mysqltest.t1;
# no CRETE VIEW privilege
--- error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
create view mysqltest.v2 as select * from mysqltest.t1;
# no SELECT privilege
--- error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
create view v2 as select * from mysqltest.t2;
connection root;
@@ -48,7 +51,7 @@ show create view v1;
grant create view,drop,select on test.* to mysqltest_1@localhost;
connection user1;
-# following 'use' command is workaround of bug #9582 and should be removed
+# following 'use' command is workaround of Bug#9582 and should be removed
# when that bug will be fixed
use test;
alter view v1 as select * from mysqltest.t1;
@@ -76,7 +79,7 @@ grant select (c) on mysqltest.v1 to mysqltest_1@localhost;
connection user1;
select c from mysqltest.v1;
# there are no privileges on column 'd'
--- error 1143
+--error ER_COLUMNACCESS_DENIED_ERROR
select d from mysqltest.v1;
connection root;
@@ -96,7 +99,7 @@ grant select (c) on mysqltest.v1 to mysqltest_1@localhost;
connection user1;
select c from mysqltest.v1;
# there are no privileges on column 'd'
--- error 1143
+--error ER_COLUMNACCESS_DENIED_ERROR
select d from mysqltest.v1;
connection root;
@@ -111,7 +114,7 @@ connection root;
--disable_warnings
create database mysqltest;
--enable_warnings
-#prepare views and tables
+# prepare views and tables
create table mysqltest.t1 (a int, b int);
create table mysqltest.t2 (a int, b int);
create view mysqltest.v1 (c,d) as select a+1,b+1 from mysqltest.t1;
@@ -133,21 +136,21 @@ select c from mysqltest.v4;
show columns from mysqltest.v1;
show columns from mysqltest.v2;
# but explain/show do not
--- error 1345
+--error ER_VIEW_NO_EXPLAIN
explain select c from mysqltest.v1;
--- error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
show create view mysqltest.v1;
--- error 1345
+--error ER_VIEW_NO_EXPLAIN
explain select c from mysqltest.v2;
--- error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
show create view mysqltest.v2;
--- error 1345
+--error ER_VIEW_NO_EXPLAIN
explain select c from mysqltest.v3;
--- error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
show create view mysqltest.v3;
--- error 1345
+--error ER_VIEW_NO_EXPLAIN
explain select c from mysqltest.v4;
--- error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
show create view mysqltest.v4;
# allow to see one of underlying table
@@ -156,19 +159,19 @@ grant select on mysqltest.t1 to mysqltest_1@localhost;
connection user1;
# EXPLAIN of view on above table works
explain select c from mysqltest.v1;
--- error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
show create view mysqltest.v1;
explain select c from mysqltest.v2;
--- error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
show create view mysqltest.v2;
# but other EXPLAINs do not
--- error 1345
+--error ER_VIEW_NO_EXPLAIN
explain select c from mysqltest.v3;
--- error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
show create view mysqltest.v3;
--- error 1345
+--error ER_VIEW_NO_EXPLAIN
explain select c from mysqltest.v4;
--- error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
show create view mysqltest.v4;
# allow to see any view in mysqltest database
@@ -222,14 +225,14 @@ select * from t1;
update v2 set a=a+c;
select * from t1;
# no rights on column
--- error 1143
+--error ER_COLUMNACCESS_DENIED_ERROR
update t2,v2 set v2.c=v2.a+v2.c where t2.x=v2.c;
--- error 1143
+--error ER_COLUMNACCESS_DENIED_ERROR
update v2 set c=a+c;
# no rights for view
--- error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
update t2,v3 set v3.a=v3.a+v3.c where t2.x=v3.c;
--- error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
update v3 set a=a+c;
use test;
@@ -263,9 +266,9 @@ select * from t1;
delete v1 from t2,v1 where t2.x=v1.c;
select * from t1;
# no rights for view
--- error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
delete v2 from t2,v2 where t2.x=v2.c;
--- error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
delete from v2 where c < 4;
use test;
@@ -299,9 +302,9 @@ select * from t1;
insert into v1 select x,y from t2;
select * from t1;
# no rights for view
--- error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
insert into v2 values (5,6);
--- error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
insert into v2 select x,y from t2;
use test;
@@ -329,10 +332,10 @@ connection user1;
create view v1 as select * from mysqltest.t1;
create view v2 as select b from mysqltest.t2;
# There are not rights on mysqltest.v1
--- error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
create view mysqltest.v1 as select * from mysqltest.t1;
# There are not any rights on mysqltest.t2.a
--- error 1143
+--error ER_COLUMNACCESS_DENIED_ERROR
create view v3 as select a from mysqltest.t2;
# give CREATE VIEW privileges (without any privileges for result column)
@@ -352,13 +355,13 @@ create view mysqltest.v3 as select b from mysqltest.t2;
# Expression need select privileges
--- error 1143
+--error ER_COLUMNACCESS_DENIED_ERROR
create view v4 as select b+1 from mysqltest.t2;
connection root;
grant create view,update,select on test.* to mysqltest_1@localhost;
connection user1;
--- error 1143
+--error ER_COLUMNACCESS_DENIED_ERROR
create view v4 as select b+1 from mysqltest.t2;
connection root;
@@ -411,7 +414,7 @@ connection root;
# check view definer information
show create view v1;
revoke select on mysqltest.t1 from mysqltest_1@localhost;
--- error ER_VIEW_INVALID
+--error ER_VIEW_INVALID
select * from v1;
grant select on mysqltest.t1 to mysqltest_1@localhost;
select * from v1;
@@ -420,7 +423,7 @@ drop view v1;
drop database mysqltest;
#
-# rights on execution of view underlying functiond (BUG#9505)
+# rights on execution of view underlying functiond (Bug#9505)
#
connection root;
--disable_warnings
@@ -453,11 +456,11 @@ connection user1;
use mysqltest;
select * from v1;
select * from v2;
--- error ER_VIEW_INVALID
+--error ER_VIEW_INVALID
select * from v3;
--- error ER_VIEW_INVALID
+--error ER_VIEW_INVALID
select * from v4;
--- error ER_VIEW_INVALID
+--error ER_VIEW_INVALID
select * from v5;
use test;
@@ -505,13 +508,13 @@ use test;
connection root;
create view v5 as select * from v1;
revoke execute on function f2 from mysqltest_1@localhost;
--- error ER_VIEW_INVALID
+--error ER_VIEW_INVALID
select * from v1;
--- error ER_VIEW_INVALID
+--error ER_VIEW_INVALID
select * from v2;
select * from v3;
select * from v4;
--- error ER_VIEW_INVALID
+--error ER_VIEW_INVALID
select * from v5;
drop view v1, v2, v3, v4, v5;
@@ -549,13 +552,13 @@ use test;
connection root;
revoke select on t1 from mysqltest_1@localhost;
--- error ER_VIEW_INVALID
+--error ER_VIEW_INVALID
select * from v1;
--- error ER_VIEW_INVALID
+--error ER_VIEW_INVALID
select * from v2;
select * from v3;
select * from v4;
--- error ER_VIEW_INVALID
+--error ER_VIEW_INVALID
select * from v5;
#drop view v1, v2, v3, v4, v5;
@@ -588,11 +591,11 @@ connection user1;
use mysqltest;
select * from v1;
select * from v2;
--- error ER_VIEW_INVALID
+--error ER_VIEW_INVALID
select * from v3;
--- error ER_VIEW_INVALID
+--error ER_VIEW_INVALID
select * from v4;
--- error ER_VIEW_INVALID
+--error ER_VIEW_INVALID
select * from v5;
use test;
@@ -604,7 +607,7 @@ REVOKE ALL PRIVILEGES, GRANT OPTION FROM mysqltest_1@localhost;
drop database mysqltest;
#
-# BUG#14256: definer in view definition is not fully qualified
+# Bug#14256 definer in view definition is not fully qualified
#
--disable_warnings
drop view if exists v1;
@@ -641,6 +644,7 @@ drop view v1;
select @v1def1, @v1def2, @v1def1=@v1def2;
connection root;
+disconnect test14256;
drop user test14256;
# Restore the anonymous users.
@@ -650,8 +654,8 @@ flush privileges;
drop table t1;
#
-# BUG#14726: freeing stack variable in case of an error of opening
-# a view when we have locked tables with LOCK TABLES statement.
+# Bug#14726 freeing stack variable in case of an error of opening a view when
+# we have locked tables with LOCK TABLES statement.
#
connection root;
--disable_warnings
@@ -668,7 +672,7 @@ connection user1;
use mysqltest;
LOCK TABLES v1 READ;
--- error ER_TABLEACCESS_DENIED_ERROR
+--error ER_TABLEACCESS_DENIED_ERROR
SHOW CREATE TABLE v1;
UNLOCK TABLES;
use test;
@@ -679,7 +683,7 @@ drop user mysqltest_1@localhost;
drop database mysqltest;
#
-# switch to default connaction
+# switch to default connection
#
disconnect user1;
disconnect root;
@@ -696,7 +700,7 @@ drop view v1;
drop view v2;
#
-# Bug#18681: View privileges are broken
+# Bug#18681 View privileges are broken
#
CREATE DATABASE mysqltest1;
CREATE USER readonly@localhost;
@@ -717,54 +721,55 @@ GRANT UPDATE,SELECT ON mysqltest1.v_tus TO readonly@localhost;
GRANT DELETE ON mysqltest1.v_td TO readonly@localhost;
GRANT DELETE,SELECT ON mysqltest1.v_tds TO readonly@localhost;
-CONNECT (n1,localhost,readonly,,);
-CONNECTION n1;
+connect (n1,localhost,readonly,,);
+connection n1;
---error 1356
+--error ER_VIEW_INVALID
SELECT * FROM mysqltest1.v_t1;
---error 1356
+--error ER_VIEW_INVALID
INSERT INTO mysqltest1.v_t1 VALUES(4);
---error 1356
+--error ER_VIEW_INVALID
DELETE FROM mysqltest1.v_t1 WHERE x = 1;
---error 1356
+--error ER_VIEW_INVALID
UPDATE mysqltest1.v_t1 SET x = 3 WHERE x = 2;
---error 1356
+--error ER_VIEW_INVALID
UPDATE mysqltest1.v_t1 SET x = 3;
---error 1356
+--error ER_VIEW_INVALID
DELETE FROM mysqltest1.v_t1;
---error 1356
+--error ER_VIEW_INVALID
SELECT 1 FROM mysqltest1.v_t1;
---error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
SELECT * FROM mysqltest1.t1;
SELECT * FROM mysqltest1.v_ts;
---error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
SELECT * FROM mysqltest1.v_ts, mysqltest1.t1 WHERE mysqltest1.t1.x = mysqltest1.v_ts.x;
---error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
SELECT * FROM mysqltest1.v_ti;
---error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
INSERT INTO mysqltest1.v_ts VALUES (100);
INSERT INTO mysqltest1.v_ti VALUES (100);
---error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
UPDATE mysqltest1.v_ts SET x= 200 WHERE x = 100;
---error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
UPDATE mysqltest1.v_ts SET x= 200;
UPDATE mysqltest1.v_tu SET x= 200 WHERE x = 100;
UPDATE mysqltest1.v_tus SET x= 200 WHERE x = 100;
UPDATE mysqltest1.v_tu SET x= 200;
---error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
DELETE FROM mysqltest1.v_ts WHERE x= 200;
---error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
DELETE FROM mysqltest1.v_ts;
---error 1143
+--error ER_COLUMNACCESS_DENIED_ERROR
DELETE FROM mysqltest1.v_td WHERE x= 200;
DELETE FROM mysqltest1.v_tds WHERE x= 200;
DELETE FROM mysqltest1.v_td;
-CONNECTION default;
+connection default;
+disconnect n1;
DROP VIEW mysqltest1.v_tds;
DROP VIEW mysqltest1.v_td;
DROP VIEW mysqltest1.v_tus;
@@ -777,21 +782,21 @@ DROP USER readonly@localhost;
DROP DATABASE mysqltest1;
#
-# BUG#14875: Bad view DEFINER makes SHOW CREATE VIEW fail
+# Bug#14875 Bad view DEFINER makes SHOW CREATE VIEW fail
#
CREATE TABLE t1 (a INT PRIMARY KEY);
INSERT INTO t1 VALUES (1), (2), (3);
CREATE DEFINER = 'no-such-user'@localhost VIEW v AS SELECT a from t1;
-#--warning 1448
+#--warning ER_VIEW_OTHER_USER
SHOW CREATE VIEW v;
---error 1449
+--error ER_NO_SUCH_USER
SELECT * FROM v;
DROP VIEW v;
DROP TABLE t1;
USE test;
#
-# Bug#20363: Create view on just created view is now denied
+# Bug#20363 Create view on just created view is now denied
#
eval CREATE USER mysqltest_db1@localhost identified by 'PWD';
eval GRANT ALL ON mysqltest_db1.* TO mysqltest_db1@localhost WITH GRANT OPTION;
@@ -822,6 +827,7 @@ SELECT * FROM view2;
SELECT * from view3;
connection default;
+disconnect session1;
DROP VIEW mysqltest_db1.view3;
DROP VIEW mysqltest_db1.view2;
DROP VIEW mysqltest_db1.view1;
@@ -829,8 +835,8 @@ DROP TABLE mysqltest_db1.t1;
DROP SCHEMA mysqltest_db1;
DROP USER mysqltest_db1@localhost;
#
-# BUG#20482: failure on Create join view with sources views/tables
-# in different schemas
+# Bug#20482 failure on Create join view with sources views/tables
+# in different schemas
#
--disable_warnings
CREATE DATABASE test1;
@@ -840,7 +846,7 @@ CREATE DATABASE test2;
CREATE TABLE test1.t0 (a VARCHAR(20));
CREATE TABLE test2.t1 (a VARCHAR(20));
CREATE VIEW test2.t3 AS SELECT * FROM test1.t0;
-CREATE OR REPLACE VIEW test.v1 AS
+CREATE OR REPLACE VIEW test.v1 AS
SELECT ta.a AS col1, tb.a AS col2 FROM test2.t3 ta, test2.t1 tb;
DROP VIEW test.v1;
@@ -851,8 +857,8 @@ DROP DATABASE test1;
#
-# BUG#20570: CURRENT_USER() in a VIEW with SQL SECURITY DEFINER
-# returns invoker name
+# Bug#20570 CURRENT_USER() in a VIEW with SQL SECURITY DEFINER returns
+# invoker name
#
--disable_warnings
DROP VIEW IF EXISTS v1;
@@ -911,7 +917,7 @@ DROP USER mysqltest_u1@localhost;
#
-# Bug#17254: Error for DEFINER security on VIEW provides too much info
+# Bug#17254 Error for DEFINER security on VIEW provides too much info
#
connect (root,localhost,root,,);
connection root;
@@ -935,12 +941,12 @@ DROP USER def_17254@localhost;
connect (inv,localhost,inv_17254,,db17254);
connection inv;
--echo for a user
---error 1142
+--error ER_TABLEACCESS_DENIED_ERROR
SELECT * FROM v1;
connection root;
--echo for a superuser
---error 1449
+--error ER_NO_SUCH_USER
SELECT * FROM v1;
DROP USER inv_17254@localhost;
DROP DATABASE db17254;
@@ -949,7 +955,7 @@ disconnect inv;
#
-# BUG#24404: strange bug with view+permission+prepared statement
+# Bug#24404 strange bug with view+permission+prepared statement
#
--disable_warnings
DROP DATABASE IF EXISTS mysqltest_db1;
@@ -1017,8 +1023,8 @@ DROP USER mysqltest_u1@localhost;
DROP USER mysqltest_u2@localhost;
#
-# Bug#26813: The SUPER privilege is wrongly required to alter a view created
-# by another user.
+# Bug#26813 The SUPER privilege is wrongly required to alter a view created
+# by another user.
#
connection root;
CREATE DATABASE db26813;
@@ -1050,7 +1056,7 @@ DROP DATABASE db26813;
disconnect u1;
--echo #
---echo # Bug#29908: A user can gain additional access through the ALTER VIEW.
+--echo # Bug#29908 A user can gain additional access through the ALTER VIEW.
--echo #
connection root;
CREATE DATABASE mysqltest_29908;
@@ -1095,7 +1101,7 @@ disconnect u2;
--echo #######################################################################
#
-# BUG#24040: Create View don't succed with "all privileges" on a database.
+# Bug#24040 Create View don't succed with "all privileges" on a database.
#
# Prepare.
@@ -1179,7 +1185,7 @@ SELECT * FROM mysqltest1.t4;
# Cleanup.
--- disconnect bug24040_con
+disconnect bug24040_con;
DROP DATABASE mysqltest1;
DROP DATABASE mysqltest2;
@@ -1187,8 +1193,8 @@ DROP USER mysqltest_u1@localhost;
#
-# Bug #41354: Access control is bypassed when all columns of a view are
-# selected by * wildcard
+# Bug#41354 Access control is bypassed when all columns of a view are
+# selected by * wildcard
CREATE DATABASE db1;
USE db1;
@@ -1202,7 +1208,6 @@ connect (addconfoo, localhost, foo,,);
connection addconfoo;
USE db1;
-
SELECT f1 FROM t1;
--error ER_COLUMNACCESS_DENIED_ERROR
SELECT f2 FROM t1;
@@ -1216,8 +1221,9 @@ SELECT f2 FROM v1;
SELECT * FROM v1;
connection default;
-USE test;
+disconnect root;
disconnect addconfoo;
+USE test;
REVOKE SELECT (f1) ON db1.t1 FROM foo;
REVOKE SELECT (f1) ON db1.v1 FROM foo;
DROP USER foo;
@@ -1225,4 +1231,8 @@ DROP VIEW db1.v1;
DROP TABLE db1.t1;
DROP DATABASE db1;
+connection default;
--echo End of 5.0 tests.
+
+# Wait till we reached the initial number of concurrent sessions
+--source include/wait_until_count_sessions.inc
diff --git a/mysql-test/t/wait_timeout.test b/mysql-test/t/wait_timeout.test
index 9b9813f9655..093f69f0143 100644
--- a/mysql-test/t/wait_timeout.test
+++ b/mysql-test/t/wait_timeout.test
@@ -2,7 +2,7 @@
-- source include/not_embedded.inc
#
-# Bug #8731: wait_timeout does not work on Mac OS X
+# Bug#8731 wait_timeout does not work on Mac OS X
#
@@ -87,6 +87,7 @@ while (!`select @aborted_clients`)
}
}
--enable_query_log
+disconnect wait_con;
connection con1;
# When the connection is closed in this way, the error code should
@@ -97,3 +98,5 @@ select 2;
--enable_reconnect
select 3;
disconnect con1;
+# The last connect is to keep tools checking the current test happy.
+connect (default,localhost,root,,test,,);
diff --git a/mysql-test/t/xa.test b/mysql-test/t/xa.test
index 591d7ac2c4d..04ecf518577 100644
--- a/mysql-test/t/xa.test
+++ b/mysql-test/t/xa.test
@@ -2,6 +2,10 @@
# WL#1756
#
-- source include/have_innodb.inc
+
+# Save the initial number of concurrent sessions
+--source include/count_sessions.inc
+
--disable_warnings
drop table if exists t1, t2;
--enable_warnings
@@ -14,10 +18,10 @@ xa rollback 'test1';
select * from t1;
xa start 'test2';
---error 1399
+--error ER_XAER_RMFAIL
xa start 'test-bad';
insert t1 values (20);
---error 1399
+--error ER_XAER_RMFAIL
xa prepare 'test2';
xa end 'test2';
xa prepare 'test2';
@@ -27,22 +31,22 @@ select * from t1;
xa start 'testa','testb';
insert t1 values (30);
---error 1399
+--error ER_XAER_RMFAIL
commit;
xa end 'testa','testb';
---error 1399
+--error ER_XAER_RMFAIL
begin;
---error 1399
+--error ER_XAER_RMFAIL
create table t2 (a int);
connect (con1,localhost,root,,);
connection con1;
---error 1440
+--error ER_XAER_DUPID
xa start 'testa','testb';
---error 1440
+--error ER_XAER_DUPID
xa start 'testa','testb', 123;
# gtrid [ , bqual [ , formatID ] ]
@@ -51,7 +55,7 @@ insert t1 values (40);
xa end 'testb',' 0@P`',11;
xa prepare 'testb',0x2030405060,11;
---error 1399
+--error ER_XAER_RMFAIL
start transaction;
xa recover;
@@ -64,11 +68,11 @@ xa prepare 'testa','testb';
xa recover;
---error 1397
+--error ER_XAER_NOTA
xa commit 'testb',0x2030405060,11;
xa rollback 'testa','testb';
---error 1064
+--error ER_PARSE_ERROR
xa start 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz';
select * from t1;
@@ -119,3 +123,7 @@ xa start 'a','c';
drop table t1;
--echo End of 5.0 tests
+
+# Wait till all disconnects are completed
+--source include/wait_until_count_sessions.inc
+
diff --git a/mysys/base64.c b/mysys/base64.c
index 47b93942784..a471e846b97 100644
--- a/mysys/base64.c
+++ b/mysys/base64.c
@@ -193,7 +193,7 @@ base64_decode(const char *src, size_t size, void *dst)
{
return -1;
}
- return d - dst_base;
+ return (int) (d - dst_base);
}
diff --git a/mysys/default.c b/mysys/default.c
index b709b33e2f8..362aa0d4605 100644
--- a/mysys/default.c
+++ b/mysys/default.c
@@ -182,7 +182,7 @@ int my_search_option_files(const char *conf_file, int *argc, char ***argv,
/* Handle --defaults-group-suffix= */
uint i;
const char **extra_groups;
- const uint instance_len= strlen(my_defaults_group_suffix);
+ const size_t instance_len= strlen(my_defaults_group_suffix);
struct handle_option_ctx *ctx= (struct handle_option_ctx*) func_ctx;
char *ptr;
TYPELIB *group= ctx->group;
@@ -194,11 +194,11 @@ int my_search_option_files(const char *conf_file, int *argc, char ***argv,
for (i= 0; i < group->count; i++)
{
- uint len;
+ size_t len;
extra_groups[i]= group->type_names[i]; /** copy group */
len= strlen(extra_groups[i]);
- if (!(ptr= alloc_root(ctx->alloc, len+instance_len+1)))
+ if (!(ptr= alloc_root(ctx->alloc, (uint) (len+instance_len+1))))
goto err;
extra_groups[i+group->count]= ptr;
@@ -1083,7 +1083,7 @@ static const char **init_default_directories(MEM_ROOT *alloc)
if ((env= getenv("ETC")))
errors += add_directory(alloc, env, dirs);
#elif defined(DEFAULT_SYSCONFDIR)
- if (DEFAULT_SYSCONFDIR != "")
+ if (DEFAULT_SYSCONFDIR[0])
errors += add_directory(alloc, DEFAULT_SYSCONFDIR, dirs);
#endif /* __EMX__ || __OS2__ */
diff --git a/mysys/errors.c b/mysys/errors.c
index 1c13255a616..92eb2be6708 100644
--- a/mysys/errors.c
+++ b/mysys/errors.c
@@ -39,7 +39,7 @@ const char * NEAR globerrs[GLOBERRS]=
"Can't change dir to '%s' (Errcode: %d)",
"Warning: '%s' had %d links",
"%d files and %d streams is left open\n",
- "Disk is full writing '%s' (Errcode: %d). Waiting for someone to free space... Retry in %d secs",
+ "Disk is full writing '%s' (Errcode: %d). Waiting for someone to free space... (Expect up to %d secs delay for server to continue after freeing disk space)",
"Can't create directory '%s' (Errcode: %d)",
"Character set '%s' is not a compiled character set and is not specified in the '%s' file",
"Out of resources when opening file '%s' (Errcode: %d)",
@@ -90,3 +90,17 @@ void init_glob_errs()
EE(EE_FILENOTFOUND) = "File '%s' not found (Errcode: %d)";
}
#endif
+
+void wait_for_free_space(const char *filename, int errors)
+{
+ if (errors == 0)
+ my_error(EE_DISK_FULL,MYF(ME_BELL | ME_NOREFRESH),
+ filename,my_errno,MY_WAIT_FOR_USER_TO_FIX_PANIC);
+ if (!(errors % MY_WAIT_GIVE_USER_A_MESSAGE))
+ my_printf_error(EE_DISK_FULL,
+ "Retry in %d secs. Message reprinted in %d secs",
+ MYF(ME_BELL | ME_NOREFRESH),
+ MY_WAIT_FOR_USER_TO_FIX_PANIC,
+ MY_WAIT_GIVE_USER_A_MESSAGE * MY_WAIT_FOR_USER_TO_FIX_PANIC );
+ VOID(sleep(MY_WAIT_FOR_USER_TO_FIX_PANIC));
+}
diff --git a/mysys/md5.c b/mysys/md5.c
index 0945f9ce5f4..2388cebedc4 100644
--- a/mysys/md5.c
+++ b/mysys/md5.c
@@ -13,356 +13,313 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
+/*
+ * This code implements the MD5 message-digest algorithm.
+ * The algorithm is due to Ron Rivest. This code was
+ * written by Colin Plumb in 1993, no copyright is claimed.
+ * This code is in the public domain; do with it what you wish.
+ *
+ * Equivalent code is available from RSA Data Security, Inc.
+ * This code has been tested against that, and is equivalent,
+ * except that you don't need to include two pages of legalese
+ * with every copy.
+ *
+ * To compute the message digest of a chunk of bytes, declare an
+ * MD5Context structure, pass it to MD5Init, call MD5Update as
+ * needed on buffers full of bytes, and then call MD5Final, which
+ * will fill a supplied 16-byte array with the digest.
*/
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
-rights reserved.
-
-License to copy and use this software is granted provided that it
-is identified as the "RSA Data Security, Inc. MD5 Message-Digest
-Algorithm" in all material mentioning or referencing this software
-or this function.
-
-License is also granted to make and use derivative works provided
-that such works are identified as "derived from the RSA Data
-Security, Inc. MD5 Message-Digest Algorithm" in all material
-mentioning or referencing the derived work.
-
-RSA Data Security, Inc. makes no representations concerning either
-the merchantability of this software or the suitability of this
-software for any particular purpose. It is provided "as is"
-without express or implied warranty of any kind.
-
-These notices must be retained in any copies of any part of this
-documentation and/or software.
-*/
-
-/*
- Changes by Monty:
- Replace of MD5_memset and MD5_memcpy with memset & memcpy
-*/
+/* This code was modified in 1997 by Jim Kingdon of Cyclic Software to
+ not require an integer type which is exactly 32 bits. This work
+ draws on the changes for the same purpose by Tatu Ylonen
+ <ylo@cs.hut.fi> as part of SSH, but since I didn't actually use
+ that code, there is no copyright issue. I hereby disclaim
+ copyright in any changes I have made; this code remains in the
+ public domain. */
#include <my_global.h>
#include <m_string.h>
#include "my_md5.h"
-/* Constants for MD5Transform routine. */
-
-#define S11 7
-#define S12 12
-#define S13 17
-#define S14 22
-#define S21 5
-#define S22 9
-#define S23 14
-#define S24 20
-#define S31 4
-#define S32 11
-#define S33 16
-#define S34 23
-#define S41 6
-#define S42 10
-#define S43 15
-#define S44 21
-
-
-static void MD5Transform PROTO_LIST ((UINT4 [4], unsigned char [64]));
-static void Encode PROTO_LIST
- ((unsigned char *, UINT4 *, unsigned int));
-static void Decode PROTO_LIST
- ((UINT4 *, unsigned char *, unsigned int));
-#ifdef OLD_CODE
-static void MD5_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int));
-static void MD5_memset PROTO_LIST ((POINTER, int, unsigned int));
-#else
-#define MD5_memcpy(A,B,C) memcpy((char*) (A),(char*) (B), (C))
-#define MD5_memset(A,B,C) memset((char*) (A),(B), (C))
-#endif
+#include <string.h> /* for memcpy() and memset() */
-static unsigned char PADDING[64] = {
- 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-/* F, G, H and I are basic MD5 functions.
- */
-#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
-#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
-#define H(x, y, z) ((x) ^ (y) ^ (z))
-#define I(x, y, z) ((y) ^ ((x) | (~z)))
+static void
+my_MD5Transform (cvs_uint32 buf[4], const unsigned char in[64]);
-/* ROTATE_LEFT rotates x left n bits.
- */
-#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
+/* Little-endian byte-swapping routines. Note that these do not
+ depend on the size of datatypes such as uint32, nor do they require
+ us to detect the endianness of the machine we are running on. It
+ is possible they should be macros for speed, but I would be
+ surprised if they were a performance bottleneck for MD5. */
-/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
-Rotation is separate from addition to prevent recomputation.
- */
-#define FF(a, b, c, d, x, s, ac) { \
- (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define GG(a, b, c, d, x, s, ac) { \
- (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define HH(a, b, c, d, x, s, ac) { \
- (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define II(a, b, c, d, x, s, ac) { \
- (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-
-/* MD5 initialization. Begins an MD5 operation, writing a new context.
- */
-void my_MD5Init (my_MD5_CTX *context) /* context */
+static uint32 getu32 (const unsigned char *addr)
{
- context->count[0] = context->count[1] = 0;
- /* Load magic initialization constants.
-*/
- context->state[0] = 0x67452301;
- context->state[1] = 0xefcdab89;
- context->state[2] = 0x98badcfe;
- context->state[3] = 0x10325476;
+ return (((((unsigned long)addr[3] << 8) | addr[2]) << 8)
+ | addr[1]) << 8 | addr[0];
}
-/* MD5 block update operation. Continues an MD5 message-digest
- operation, processing another message block, and updating the
- context.
- */
-
-void my_MD5Update (
-my_MD5_CTX *context, /* context */
-unsigned char *input, /* input block */
-unsigned int inputLen) /* length of input block */
+static void
+putu32 (uint32 data, unsigned char *addr)
{
- unsigned int i, idx, partLen;
-
- /* Compute number of bytes mod 64 */
- idx = (unsigned int)((context->count[0] >> 3) & 0x3F);
-
+ addr[0] = (unsigned char)data;
+ addr[1] = (unsigned char)(data >> 8);
+ addr[2] = (unsigned char)(data >> 16);
+ addr[3] = (unsigned char)(data >> 24);
+}
- /* Update number of bits */
- if ((context->count[0] += ((UINT4)inputLen << 3))
- < ((UINT4)inputLen << 3))
- context->count[1]++;
- context->count[1] += ((UINT4)inputLen >> 29);
+/*
+ Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
+ initialization constants.
+*/
+void
+my_MD5Init (my_MD5Context *ctx)
+{
+ ctx->buf[0] = 0x67452301;
+ ctx->buf[1] = 0xefcdab89;
+ ctx->buf[2] = 0x98badcfe;
+ ctx->buf[3] = 0x10325476;
- partLen = 64 - idx;
+ ctx->bits[0] = 0;
+ ctx->bits[1] = 0;
+}
- /* Transform as many times as possible.
+/*
+ Update context to reflect the concatenation of another buffer full
+ of bytes.
*/
- if (inputLen >= partLen) {
- MD5_memcpy((POINTER)&context->buffer[idx], (POINTER)input, partLen);
- MD5Transform(context->state, context->buffer);
+void
+my_MD5Update (my_MD5Context *ctx, unsigned char const *buf, unsigned len)
+{
+ uint32 t;
- for (i = partLen; i + 63 < inputLen; i += 64)
- MD5Transform (context->state, &input[i]);
+ /* Update bitcount */
- idx = 0;
- }
- else
- i = 0;
+ t = ctx->bits[0];
+ if ((ctx->bits[0] = (t + ((uint32)len << 3)) & 0xffffffff) < t)
+ ctx->bits[1]++; /* Carry from low to high */
+ ctx->bits[1] += len >> 29;
- /* Buffer remaining input */
- MD5_memcpy((POINTER)&context->buffer[idx], (POINTER)&input[i],
- inputLen-i);
-}
+ t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */
-/* MD5 finalization. Ends an MD5 message-digest operation, writing the
- the message digest and zeroizing the context.
- */
+ /* Handle any leading odd-sized chunks */
-void my_MD5Final (
-unsigned char digest[16], /* message digest */
-my_MD5_CTX *context) /* context */
-{
- unsigned char bits[8];
- unsigned int idx, padLen;
+ if ( t ) {
+ unsigned char *p = ctx->in + t;
- /* Save number of bits */
- Encode (bits, context->count, 8);
+ t = 64-t;
+ if (len < t) {
+ memcpy(p, buf, len);
+ return;
+ }
+ memcpy(p, buf, t);
+ my_MD5Transform (ctx->buf, ctx->in);
+ buf += t;
+ len -= t;
+ }
- /* Pad out to 56 mod 64.
-*/
- idx = (unsigned int)((context->count[0] >> 3) & 0x3f);
- padLen = (idx < 56) ? (56 - idx) : (120 - idx);
- my_MD5Update (context, PADDING, padLen);
+ /* Process data in 64-byte chunks */
- /* Append length (before padding) */
- my_MD5Update (context, bits, 8);
+ while (len >= 64) {
+ memcpy(ctx->in, buf, 64);
+ my_MD5Transform (ctx->buf, ctx->in);
+ buf += 64;
+ len -= 64;
+ }
- /* Store state in digest */
- Encode (digest, context->state, 16);
+ /* Handle any remaining bytes of data. */
- /* Zeroize sensitive information.
-*/
- MD5_memset ((POINTER)context, 0, sizeof (*context));
+ memcpy(ctx->in, buf, len);
}
-/* MD5 basic transformation. Transforms state based on block.
- */
-static void MD5Transform (
-UINT4 state[4],
-unsigned char block[64])
-{
- UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
-
- Decode (x, block, 64);
-
- /* Round 1 */
- FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
- FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
- FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
- FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
- FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
- FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
- FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
- FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
- FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
- FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
- FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
- FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
- FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
- FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
- FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
- FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
-
- /* Round 2 */
- GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
- GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
- GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
- GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
- GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
- GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */
- GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
- GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
- GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
- GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
- GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
- GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
- GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
- GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
- GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
- GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
-
- /* Round 3 */
- HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
- HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
- HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
- HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
- HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
- HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
- HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
- HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
- HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
- HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
- HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
- HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */
- HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
- HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
- HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
- HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
-
- /* Round 4 */
- II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
- II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
- II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
- II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
- II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
- II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
- II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
- II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
- II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
- II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
- II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
- II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
- II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
- II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
- II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
- II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
-
-
- state[0] += a;
- state[1] += b;
- state[2] += c;
- state[3] += d;
-
- /* Zeroize sensitive information.
+/*
+ Final wrapup - pad to 64-byte boundary with the bit pattern
+ 1 0* (64-bit count of bits processed, MSB-first)
*/
- MD5_memset ((POINTER)x, 0, sizeof (x));
-}
-
-/* Encodes input (UINT4) into output (unsigned char). Assumes len is
- a multiple of 4.
- */
-static void Encode (
-unsigned char *output,
-UINT4 *input,
-unsigned int len)
+void
+my_MD5Final (unsigned char digest[16], my_MD5Context *ctx)
{
- unsigned int i, j;
+ unsigned count;
+ unsigned char *p;
- for (i = 0, j = 0; j < len; i++, j += 4) {
- output[j] = (unsigned char)(input[i] & 0xff);
- output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
- output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
- output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
+ /* Compute number of bytes mod 64 */
+ count = (ctx->bits[0] >> 3) & 0x3F;
+
+ /* Set the first char of padding to 0x80. This is safe since there is
+ always at least one byte free */
+ p = ctx->in + count;
+ *p++ = 0x80;
+
+ /* Bytes of padding needed to make 64 bytes */
+ count = 64 - 1 - count;
+
+ /* Pad out to 56 mod 64 */
+ if (count < 8) {
+ /* Two lots of padding: Pad the first block to 64 bytes */
+ memset(p, 0, count);
+ my_MD5Transform (ctx->buf, ctx->in);
+
+ /* Now fill the next block with 56 bytes */
+ memset(ctx->in, 0, 56);
+ } else {
+ /* Pad block to 56 bytes */
+ memset(p, 0, count-8);
}
+
+ /* Append length in bits and transform */
+ putu32(ctx->bits[0], ctx->in + 56);
+ putu32(ctx->bits[1], ctx->in + 60);
+
+ my_MD5Transform (ctx->buf, ctx->in);
+ putu32(ctx->buf[0], digest);
+ putu32(ctx->buf[1], digest + 4);
+ putu32(ctx->buf[2], digest + 8);
+ putu32(ctx->buf[3], digest + 12);
+ memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */
}
+#ifndef ASM_MD5
-/* Decodes input (unsigned char) into output (UINT4). Assumes len is
- a multiple of 4.
- */
-static void Decode (
-UINT4 *output,
-unsigned char *input,
-unsigned int len)
-{
- unsigned int i, j;
+/* The four core functions - F1 is optimized somewhat */
- for (i = 0, j = 0; j < len; i++, j += 4)
- output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
- (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
-}
+/* #define F1(x, y, z) (x & y | ~x & z) */
+#define F1(x, y, z) (z ^ (x & (y ^ z)))
+#define F2(x, y, z) F1(z, x, y)
+#define F3(x, y, z) (x ^ y ^ z)
+#define F4(x, y, z) (y ^ (x | ~z))
-/* Note: Replace "for loop" with standard memcpy if possible.
- */
+/* This is the central step in the MD5 algorithm. */
+#define MD5STEP(f, w, x, y, z, data, s) \
+ ( w += f(x, y, z) + data, w &= 0xffffffff, w = w<<s | w>>(32-s), w += x )
-#ifndef MD5_memcpy
-static void MD5_memcpy (output, input, len)
-POINTER output;
-POINTER input;
-unsigned int len;
+/*
+ * The core of the MD5 algorithm, this alters an existing MD5 hash to
+ * reflect the addition of 16 longwords of new data. MD5Update blocks
+ * the data and converts bytes into longwords for this routine.
+ */
+static void
+my_MD5Transform (uint32 buf[4], const unsigned char inraw[64])
{
- unsigned int i;
-
- for (i = 0; i < len; i++)
- output[i] = input[i];
+ register uint32 a, b, c, d;
+ uint32 in[16];
+ int i;
+
+ for (i = 0; i < 16; ++i)
+ in[i] = getu32 (inraw + 4 * i);
+
+ a = buf[0];
+ b = buf[1];
+ c = buf[2];
+ d = buf[3];
+
+ MD5STEP(F1, a, b, c, d, in[ 0]+0xd76aa478, 7);
+ MD5STEP(F1, d, a, b, c, in[ 1]+0xe8c7b756, 12);
+ MD5STEP(F1, c, d, a, b, in[ 2]+0x242070db, 17);
+ MD5STEP(F1, b, c, d, a, in[ 3]+0xc1bdceee, 22);
+ MD5STEP(F1, a, b, c, d, in[ 4]+0xf57c0faf, 7);
+ MD5STEP(F1, d, a, b, c, in[ 5]+0x4787c62a, 12);
+ MD5STEP(F1, c, d, a, b, in[ 6]+0xa8304613, 17);
+ MD5STEP(F1, b, c, d, a, in[ 7]+0xfd469501, 22);
+ MD5STEP(F1, a, b, c, d, in[ 8]+0x698098d8, 7);
+ MD5STEP(F1, d, a, b, c, in[ 9]+0x8b44f7af, 12);
+ MD5STEP(F1, c, d, a, b, in[10]+0xffff5bb1, 17);
+ MD5STEP(F1, b, c, d, a, in[11]+0x895cd7be, 22);
+ MD5STEP(F1, a, b, c, d, in[12]+0x6b901122, 7);
+ MD5STEP(F1, d, a, b, c, in[13]+0xfd987193, 12);
+ MD5STEP(F1, c, d, a, b, in[14]+0xa679438e, 17);
+ MD5STEP(F1, b, c, d, a, in[15]+0x49b40821, 22);
+
+ MD5STEP(F2, a, b, c, d, in[ 1]+0xf61e2562, 5);
+ MD5STEP(F2, d, a, b, c, in[ 6]+0xc040b340, 9);
+ MD5STEP(F2, c, d, a, b, in[11]+0x265e5a51, 14);
+ MD5STEP(F2, b, c, d, a, in[ 0]+0xe9b6c7aa, 20);
+ MD5STEP(F2, a, b, c, d, in[ 5]+0xd62f105d, 5);
+ MD5STEP(F2, d, a, b, c, in[10]+0x02441453, 9);
+ MD5STEP(F2, c, d, a, b, in[15]+0xd8a1e681, 14);
+ MD5STEP(F2, b, c, d, a, in[ 4]+0xe7d3fbc8, 20);
+ MD5STEP(F2, a, b, c, d, in[ 9]+0x21e1cde6, 5);
+ MD5STEP(F2, d, a, b, c, in[14]+0xc33707d6, 9);
+ MD5STEP(F2, c, d, a, b, in[ 3]+0xf4d50d87, 14);
+ MD5STEP(F2, b, c, d, a, in[ 8]+0x455a14ed, 20);
+ MD5STEP(F2, a, b, c, d, in[13]+0xa9e3e905, 5);
+ MD5STEP(F2, d, a, b, c, in[ 2]+0xfcefa3f8, 9);
+ MD5STEP(F2, c, d, a, b, in[ 7]+0x676f02d9, 14);
+ MD5STEP(F2, b, c, d, a, in[12]+0x8d2a4c8a, 20);
+
+ MD5STEP(F3, a, b, c, d, in[ 5]+0xfffa3942, 4);
+ MD5STEP(F3, d, a, b, c, in[ 8]+0x8771f681, 11);
+ MD5STEP(F3, c, d, a, b, in[11]+0x6d9d6122, 16);
+ MD5STEP(F3, b, c, d, a, in[14]+0xfde5380c, 23);
+ MD5STEP(F3, a, b, c, d, in[ 1]+0xa4beea44, 4);
+ MD5STEP(F3, d, a, b, c, in[ 4]+0x4bdecfa9, 11);
+ MD5STEP(F3, c, d, a, b, in[ 7]+0xf6bb4b60, 16);
+ MD5STEP(F3, b, c, d, a, in[10]+0xbebfbc70, 23);
+ MD5STEP(F3, a, b, c, d, in[13]+0x289b7ec6, 4);
+ MD5STEP(F3, d, a, b, c, in[ 0]+0xeaa127fa, 11);
+ MD5STEP(F3, c, d, a, b, in[ 3]+0xd4ef3085, 16);
+ MD5STEP(F3, b, c, d, a, in[ 6]+0x04881d05, 23);
+ MD5STEP(F3, a, b, c, d, in[ 9]+0xd9d4d039, 4);
+ MD5STEP(F3, d, a, b, c, in[12]+0xe6db99e5, 11);
+ MD5STEP(F3, c, d, a, b, in[15]+0x1fa27cf8, 16);
+ MD5STEP(F3, b, c, d, a, in[ 2]+0xc4ac5665, 23);
+
+ MD5STEP(F4, a, b, c, d, in[ 0]+0xf4292244, 6);
+ MD5STEP(F4, d, a, b, c, in[ 7]+0x432aff97, 10);
+ MD5STEP(F4, c, d, a, b, in[14]+0xab9423a7, 15);
+ MD5STEP(F4, b, c, d, a, in[ 5]+0xfc93a039, 21);
+ MD5STEP(F4, a, b, c, d, in[12]+0x655b59c3, 6);
+ MD5STEP(F4, d, a, b, c, in[ 3]+0x8f0ccc92, 10);
+ MD5STEP(F4, c, d, a, b, in[10]+0xffeff47d, 15);
+ MD5STEP(F4, b, c, d, a, in[ 1]+0x85845dd1, 21);
+ MD5STEP(F4, a, b, c, d, in[ 8]+0x6fa87e4f, 6);
+ MD5STEP(F4, d, a, b, c, in[15]+0xfe2ce6e0, 10);
+ MD5STEP(F4, c, d, a, b, in[ 6]+0xa3014314, 15);
+ MD5STEP(F4, b, c, d, a, in[13]+0x4e0811a1, 21);
+ MD5STEP(F4, a, b, c, d, in[ 4]+0xf7537e82, 6);
+ MD5STEP(F4, d, a, b, c, in[11]+0xbd3af235, 10);
+ MD5STEP(F4, c, d, a, b, in[ 2]+0x2ad7d2bb, 15);
+ MD5STEP(F4, b, c, d, a, in[ 9]+0xeb86d391, 21);
+
+ buf[0] += a;
+ buf[1] += b;
+ buf[2] += c;
+ buf[3] += d;
}
#endif
-/* Note: Replace "for loop" with standard memset if possible.
- */
+#ifdef TEST
+/*
+ Simple test program. Can use it to manually run the tests from
+ RFC1321 for example.
+*/
+#include <stdio.h>
-#ifndef MD5_memset
-static void MD5_memset (output, value, len)
-POINTER output;
-int value;
-unsigned int len;
+int
+main (int argc, char **argv)
{
- unsigned int i;
-
- for (i = 0; i < len; i++)
- ((char *)output)[i] = (char)value;
+ my_MD5Context context;
+ unsigned char checksum[16];
+ int i;
+ int j;
+
+ if (argc < 2)
+ {
+ fprintf (stderr, "usage: %s string-to-hash\n", argv[0]);
+ exit (1);
+ }
+ for (j = 1; j < argc; ++j)
+ {
+ printf ("MD5 (\"%s\") = ", argv[j]);
+ my_MD5Init (&context);
+ my_MD5Update (&context, argv[j], strlen (argv[j]));
+ my_MD5Final (checksum, &context);
+ for (i = 0; i < 16; i++)
+ {
+ printf ("%02x", (unsigned int) checksum[i]);
+ }
+ printf ("\n");
+ }
+ return 0;
}
-#endif
+#endif /* TEST */
diff --git a/mysys/mf_iocache2.c b/mysys/mf_iocache2.c
index 30e9f19a189..214e7716683 100644
--- a/mysys/mf_iocache2.c
+++ b/mysys/mf_iocache2.c
@@ -368,9 +368,9 @@ uint my_b_vprintf(IO_CACHE *info, const char* fmt, va_list args)
else
{
/* %% or unknown code */
- if (my_b_write(info, backtrack, fmt-backtrack))
+ if (my_b_write(info, backtrack, (uint) (fmt - backtrack)))
goto err;
- out_length+= fmt-backtrack;
+ out_length+= (uint) (fmt - backtrack);
}
}
return out_length;
diff --git a/mysys/my_fstream.c b/mysys/my_fstream.c
index ea30509ca8c..38b27bce100 100644
--- a/mysys/my_fstream.c
+++ b/mysys/my_fstream.c
@@ -116,10 +116,8 @@ uint my_fwrite(FILE *stream, const byte *Buffer, uint Count, myf MyFlags)
if ((errno == ENOSPC || errno == EDQUOT) &&
(MyFlags & MY_WAIT_IF_FULL))
{
- if (!(errors++ % MY_WAIT_GIVE_USER_A_MESSAGE))
- my_error(EE_DISK_FULL,MYF(ME_BELL | ME_NOREFRESH),
- "[stream]",my_errno,MY_WAIT_FOR_USER_TO_FIX_PANIC);
- VOID(sleep(MY_WAIT_FOR_USER_TO_FIX_PANIC));
+ wait_for_free_space("[stream]", errors);
+ errors++;
VOID(my_fseek(stream,seekptr,MY_SEEK_SET,MYF(0)));
continue;
}
diff --git a/mysys/my_new.cc b/mysys/my_new.cc
index babfe04d695..7da54ffac87 100644
--- a/mysys/my_new.cc
+++ b/mysys/my_new.cc
@@ -46,8 +46,9 @@ void operator delete[] (void *ptr) throw ()
C_MODE_START
-int __cxa_pure_virtual() {
- assert("Pure virtual method called." == "Aborted");
+int __cxa_pure_virtual()
+{
+ assert(! "Aborted: pure virtual method called.");
return 0;
}
diff --git a/mysys/my_pread.c b/mysys/my_pread.c
index 2d42a6ebbc4..d5bb29ff6a4 100644
--- a/mysys/my_pread.c
+++ b/mysys/my_pread.c
@@ -121,10 +121,8 @@ uint my_pwrite(int Filedes, const byte *Buffer, uint Count, my_off_t offset,
if ((my_errno == ENOSPC || my_errno == EDQUOT) &&
(MyFlags & MY_WAIT_IF_FULL))
{
- if (!(errors++ % MY_WAIT_GIVE_USER_A_MESSAGE))
- my_error(EE_DISK_FULL,MYF(ME_BELL | ME_NOREFRESH),
- my_filename(Filedes),my_errno,MY_WAIT_FOR_USER_TO_FIX_PANIC);
- VOID(sleep(MY_WAIT_FOR_USER_TO_FIX_PANIC));
+ wait_for_free_space(my_filename(Filedes), errors);
+ errors++;
continue;
}
if ((writenbytes > 0 && (uint) writenbytes != (uint) -1) ||
diff --git a/mysys/my_static.c b/mysys/my_static.c
index 77dbffb911e..1858d830f41 100644
--- a/mysys/my_static.c
+++ b/mysys/my_static.c
@@ -74,8 +74,8 @@ uint sf_malloc_prehunc=0, /* If you have problem with core- */
sf_malloc_endhunc=0, /* dump when malloc-message.... */
/* set theese to 64 or 128 */
sf_malloc_quick=0; /* set if no calls to sanity */
-ulong sf_malloc_cur_memory= 0L; /* Current memory usage */
-ulong sf_malloc_max_memory= 0L; /* Maximum memory usage */
+size_t sf_malloc_cur_memory= 0L; /* Current memory usage */
+size_t sf_malloc_max_memory= 0L; /* Maximum memory usage */
uint sf_malloc_count= 0; /* Number of times NEW() was called */
byte *sf_min_adress= (byte*) ~(unsigned long) 0L,
*sf_max_adress= (byte*) 0L;
diff --git a/mysys/my_write.c b/mysys/my_write.c
index 9ff7babab31..4df7e75b953 100644
--- a/mysys/my_write.c
+++ b/mysys/my_write.c
@@ -54,10 +54,8 @@ uint my_write(int Filedes, const byte *Buffer, uint Count, myf MyFlags)
if ((my_errno == ENOSPC || my_errno == EDQUOT) &&
(MyFlags & MY_WAIT_IF_FULL))
{
- if (!(errors++ % MY_WAIT_GIVE_USER_A_MESSAGE))
- my_error(EE_DISK_FULL,MYF(ME_BELL | ME_NOREFRESH),
- my_filename(Filedes),my_errno,MY_WAIT_FOR_USER_TO_FIX_PANIC);
- VOID(sleep(MY_WAIT_FOR_USER_TO_FIX_PANIC));
+ wait_for_free_space(my_filename(Filedes), errors);
+ errors++;
continue;
}
diff --git a/mysys/safemalloc.c b/mysys/safemalloc.c
index 1cdbd1ecbf2..8c611a8556b 100644
--- a/mysys/safemalloc.c
+++ b/mysys/safemalloc.c
@@ -173,7 +173,7 @@ gptr _mymalloc(size_t size, const char *filename, uint lineno, myf MyFlags)
data[size + 3]= MAGICEND3;
irem->filename= (my_string) filename;
irem->linenum= lineno;
- irem->datasize= size;
+ irem->datasize= (uint32) size;
irem->prev= NULL;
/* Add this remember structure to the linked list */
diff --git a/mysys/string.c b/mysys/string.c
index df78f2b98b5..6dcb034531e 100644
--- a/mysys/string.c
+++ b/mysys/string.c
@@ -150,12 +150,12 @@ my_bool dynstr_append_os_quoted(DYNAMIC_STRING *str, const char *append, ...)
/* Search for quote in each string and replace with escaped quote */
while(*(next_pos= strcend(cur_pos, quote_str[0])) != '\0')
{
- ret&= dynstr_append_mem(str, cur_pos, next_pos - cur_pos);
+ ret&= dynstr_append_mem(str, cur_pos, (uint) (next_pos - cur_pos));
ret&= dynstr_append_mem(str ,"\\", 1);
ret&= dynstr_append_mem(str, quote_str, quote_len);
cur_pos= next_pos + 1;
}
- ret&= dynstr_append_mem(str, cur_pos, next_pos - cur_pos);
+ ret&= dynstr_append_mem(str, cur_pos, (uint) (next_pos - cur_pos));
append= va_arg(dirty_text, char *);
}
va_end(dirty_text);
diff --git a/server-tools/instance-manager/buffer.cc b/server-tools/instance-manager/buffer.cc
index a782c2ae33e..57dd1c72f23 100644
--- a/server-tools/instance-manager/buffer.cc
+++ b/server-tools/instance-manager/buffer.cc
@@ -100,7 +100,7 @@ err:
int Buffer::get_size()
{
- return buffer_size;
+ return (uint) buffer_size;
}
diff --git a/server-tools/instance-manager/commands.cc b/server-tools/instance-manager/commands.cc
index 01afa703a47..bb3763ce8c5 100644
--- a/server-tools/instance-manager/commands.cc
+++ b/server-tools/instance-manager/commands.cc
@@ -52,11 +52,11 @@
static inline int put_to_buff(Buffer *buff, const char *str, uint *position)
{
- uint len= strlen(str);
- if (buff->append(*position, str, len))
+ size_t len= strlen(str);
+ if (buff->append(*position, str, (uint) len))
return 1;
- *position+= len;
+ *position+= (uint) len;
return 0;
}
@@ -201,7 +201,7 @@ int Show_instance_status::execute(struct st_net *net,
Instance *instance;
store_to_protocol_packet(&send_buff, (char*) instance_name, &position);
- if (!(instance= instance_map->find(instance_name, strlen(instance_name))))
+ if (!(instance= instance_map->find(instance_name, (uint) strlen(instance_name))))
goto err;
if (instance->is_running())
store_to_protocol_packet(&send_buff, (char*) "online", &position);
@@ -272,7 +272,7 @@ int Show_instance_options::execute(struct st_net *net, ulong connection_id)
{
Instance *instance;
- if (!(instance= instance_map->find(instance_name, strlen(instance_name))))
+ if (!(instance= instance_map->find(instance_name, (uint) strlen(instance_name))))
goto err;
store_to_protocol_packet(&send_buff, (char*) "instance_name", &position);
store_to_protocol_packet(&send_buff, (char*) instance_name, &position);
@@ -452,7 +452,7 @@ int Show_instance_log::execute(struct st_net *net, ulong connection_id)
File fd;
if ((instance= instance_map->find(instance_name,
- strlen(instance_name))) == NULL)
+ (uint) strlen(instance_name))) == NULL)
goto err;
logpath= instance->options.logs[log_type];
@@ -479,13 +479,13 @@ int Show_instance_log::execute(struct st_net *net, ulong connection_id)
buff_size= (size - offset);
- read_buff.reserve(0, buff_size);
+ read_buff.reserve(0, (uint) buff_size);
/* read in one chunk */
read_len= (int)my_seek(fd, file_stat.st_size - size, MY_SEEK_SET, MYF(0));
if ((read_len= my_read(fd, (byte*) read_buff.buffer,
- buff_size, MYF(0))) < 0)
+ (uint) buff_size, MYF(0))) < 0)
return ER_READ_FILE;
store_to_protocol_packet(&send_buff, read_buff.buffer,
&position, read_len);
@@ -569,7 +569,7 @@ int Show_instance_log_files::execute(struct st_net *net, ulong connection_id)
Instance *instance;
if ((instance= instance_map->
- find(instance_name, strlen(instance_name))) == NULL)
+ find(instance_name, (uint) strlen(instance_name))) == NULL)
goto err;
{
diff --git a/server-tools/instance-manager/instance.cc b/server-tools/instance-manager/instance.cc
index 58fe7569db7..e08bf2f66df 100644
--- a/server-tools/instance-manager/instance.cc
+++ b/server-tools/instance-manager/instance.cc
@@ -173,7 +173,7 @@ static int start_process(Instance_options *instance_options,
int cmdlen= 0;
for (int i= 0; instance_options->argv[i] != 0; i++)
- cmdlen+= strlen(instance_options->argv[i]) + 3;
+ cmdlen+= (uint) strlen(instance_options->argv[i]) + 3;
cmdlen++; /* make room for the null */
char *cmdline= new char[cmdlen];
diff --git a/server-tools/instance-manager/instance_map.cc b/server-tools/instance-manager/instance_map.cc
index 39fd20cbc2d..571826edd7b 100644
--- a/server-tools/instance-manager/instance_map.cc
+++ b/server-tools/instance-manager/instance_map.cc
@@ -112,7 +112,7 @@ int Instance_map::process_one_option(const char *group, const char *option)
|| group[sizeof(prefix)] == '\0'))
{
if (!(instance= (Instance *) hash_search(&hash, (byte *) group,
- strlen(group))))
+ (uint) strlen(group))))
{
if (!(instance= new Instance))
goto err;
diff --git a/server-tools/instance-manager/instance_options.cc b/server-tools/instance-manager/instance_options.cc
index d4ca2ad570f..9d88bb0e669 100644
--- a/server-tools/instance-manager/instance_options.cc
+++ b/server-tools/instance-manager/instance_options.cc
@@ -257,7 +257,7 @@ int Instance_options::fill_log_options()
strmov(hostname, "mysql");
hostname[MAX_LOG_OPTION_LENGTH - 1]= 0; /* Safety */
- hostname_length= strlen(hostname);
+ hostname_length= (uint) strlen(hostname);
for (log_files= logs_st; log_files->name; log_files++)
@@ -392,7 +392,7 @@ int Instance_options::complete_initialization(const char *default_path,
if (!mysqld_path)
{
// Need one extra byte, as convert_dirname() adds a slash at the end.
- if (!(mysqld_path= alloc_root(&alloc, strlen(default_path) + 2)))
+ if (!(mysqld_path= alloc_root(&alloc, (uint) strlen(default_path) + 2)))
goto err;
strcpy((char *)mysqld_path, default_path);
}
@@ -401,7 +401,7 @@ int Instance_options::complete_initialization(const char *default_path,
end= convert_dirname((char*)mysqld_path, mysqld_path, NullS);
end[-1]= 0;
- mysqld_path_len= strlen(mysqld_path);
+ mysqld_path_len= (uint) strlen(mysqld_path);
if (mysqld_port)
mysqld_port_val= atoi(strchr(mysqld_port, '=') + 1);
@@ -572,7 +572,7 @@ void Instance_options::print_argv()
int Instance_options::init(const char *instance_name_arg)
{
- instance_name_len= strlen(instance_name_arg);
+ instance_name_len= (uint) strlen(instance_name_arg);
init_alloc_root(&alloc, MEM_ROOT_BLOCK_SIZE, 0);
diff --git a/server-tools/instance-manager/listener.cc b/server-tools/instance-manager/listener.cc
index a950ecf4ed3..36f0cbe85e1 100644
--- a/server-tools/instance-manager/listener.cc
+++ b/server-tools/instance-manager/listener.cc
@@ -35,23 +35,28 @@
#include "portability.h"
+#ifndef __WIN__
static void set_non_blocking(int socket)
{
-#ifndef __WIN__
int flags= fcntl(socket, F_GETFL, 0);
fcntl(socket, F_SETFL, flags | O_NONBLOCK);
#else
+static void set_non_blocking(SOCKET socket)
+{
u_long arg= 1;
ioctlsocket(socket, FIONBIO, &arg);
#endif
}
+#ifndef __WIN__
static void set_no_inherit(int socket)
{
-#ifndef __WIN__
int flags= fcntl(socket, F_GETFD, 0);
fcntl(socket, F_SETFD, flags | FD_CLOEXEC);
+#else
+static void set_no_inherit(SOCKET socket)
+{
#endif
}
@@ -71,7 +76,11 @@ private:
ulong total_connection_count;
Thread_info thread_info;
+#ifdef __WIN__
+ SOCKET sockets[2];
+#else
int sockets[2];
+#endif
int num_sockets;
fd_set read_fds;
private:
@@ -110,9 +119,10 @@ Listener_thread::~Listener_thread()
void Listener_thread::run()
{
- int i, n= 0;
+ int i= 0;
#ifndef __WIN__
+ int n= 0;
/* we use this var to check whether we are running on LinuxThreads */
pid_t thread_pid;
@@ -121,6 +131,8 @@ void Listener_thread::run()
struct sockaddr_un unix_socket_address;
/* set global variable */
linuxthreads= (thread_pid != manager_pid);
+#else
+ SOCKET n= 0;
#endif
thread_registry.register_thread(&thread_info);
@@ -159,7 +171,11 @@ void Listener_thread::run()
signal during shutdown. This results in failing assert
(Thread_registry::~Thread_registry). Valgrind 2.2 works fine.
*/
+#ifdef __WIN__
+ int rc= select(0, &read_fds_arg, 0, 0, &tv);
+#else
int rc= select(n, &read_fds_arg, 0, 0, &tv);
+#endif
if (rc == 0 || rc == -1)
{
@@ -175,11 +191,18 @@ void Listener_thread::run()
/* Assuming that rc > 0 as we asked to wait forever */
if (FD_ISSET(sockets[socket_index], &read_fds_arg))
{
+#ifdef __WIN__
+ SOCKET client_fd= accept(sockets[socket_index], 0, 0);
+ /* accept may return INVALID_SOCKET on failure */
+ if (client_fd != INVALID_SOCKET)
+ {
+#else
int client_fd= accept(sockets[socket_index], 0, 0);
/* accept may return -1 (failure or spurious wakeup) */
if (client_fd >= 0) // connection established
{
set_no_inherit(client_fd);
+#endif
Vio *vio= vio_new(client_fd, socket_index == 0 ?
VIO_TYPE_SOCKET : VIO_TYPE_TCPIP,
@@ -230,7 +253,11 @@ int Listener_thread::create_tcp_socket()
/* value to be set by setsockopt */
int arg= 1;
+#ifdef __WIN__
+ SOCKET ip_socket= socket(AF_INET, SOCK_STREAM, 0);
+#else
int ip_socket= socket(AF_INET, SOCK_STREAM, 0);
+#endif
if (ip_socket == INVALID_SOCKET)
{
log_error("Listener_thead::run(): socket(AF_INET) failed, %s",
diff --git a/server-tools/instance-manager/mysql_connection.cc b/server-tools/instance-manager/mysql_connection.cc
index 2b377d60ad0..1803108c39d 100644
--- a/server-tools/instance-manager/mysql_connection.cc
+++ b/server-tools/instance-manager/mysql_connection.cc
@@ -241,7 +241,7 @@ int Mysql_connection_thread::check_connection()
/* write connection message and read reply */
enum { MIN_HANDSHAKE_SIZE= 2 };
- if (net_write_command(&net, protocol_version, "", 0, buff, pos - buff) ||
+ if (net_write_command(&net, protocol_version, "", 0, buff, (uint) (pos - buff)) ||
(pkt_len= my_net_read(&net)) == packet_error ||
pkt_len < MIN_HANDSHAKE_SIZE)
{
@@ -275,7 +275,7 @@ int Mysql_connection_thread::check_connection()
net_send_error(&net, ER_ACCESS_DENIED_ERROR);
return 1;
}
- if (user_map.authenticate(user, password-user-2, password, scramble))
+ if (user_map.authenticate(user, (uint) (password - user - 2), password, scramble))
{
net_send_error(&net, ER_ACCESS_DENIED_ERROR);
return 1;
diff --git a/server-tools/instance-manager/options.cc b/server-tools/instance-manager/options.cc
index f7eab075952..9eb148c4e3b 100644
--- a/server-tools/instance-manager/options.cc
+++ b/server-tools/instance-manager/options.cc
@@ -59,7 +59,7 @@ char **Options::saved_argv= NULL;
bool Options::is_forced_default_file= 0;
static const char * const ANGEL_PID_FILE_SUFFIX= ".angel.pid";
-static const int ANGEL_PID_FILE_SUFFIX_LEN= strlen(ANGEL_PID_FILE_SUFFIX);
+static const int ANGEL_PID_FILE_SUFFIX_LEN= (uint) strlen(ANGEL_PID_FILE_SUFFIX);
/*
List of options, accepted by the instance manager.
diff --git a/server-tools/instance-manager/parse.cc b/server-tools/instance-manager/parse.cc
index 71f69b596c1..bbbadf3e91a 100644
--- a/server-tools/instance-manager/parse.cc
+++ b/server-tools/instance-manager/parse.cc
@@ -177,7 +177,7 @@ Command *parse_command(Instance_map *map, const char *text)
get_word(&text, &option_len, NONSPACE);
option= text;
if ((tmp= strchr(text, '=')) != NULL)
- option_len= tmp - text;
+ option_len= (uint) (tmp - text);
text+= option_len;
get_word(&text, &word_len);
diff --git a/server-tools/instance-manager/parse.h b/server-tools/instance-manager/parse.h
index 5e9f33beb11..9f7f7d7933c 100644
--- a/server-tools/instance-manager/parse.h
+++ b/server-tools/instance-manager/parse.h
@@ -58,7 +58,7 @@ inline void get_word(const char **text, uint *word_len,
(*word_end != '\0'))
++word_end;
- *word_len= word_end - *text;
+ *word_len= (uint) (word_end - *text);
}
#endif /* INCLUDES_MYSQL_INSTANCE_MANAGER_PARSE_H */
diff --git a/server-tools/instance-manager/parse_output.cc b/server-tools/instance-manager/parse_output.cc
index f8ddf5a2d08..377671b4401 100644
--- a/server-tools/instance-manager/parse_output.cc
+++ b/server-tools/instance-manager/parse_output.cc
@@ -30,11 +30,11 @@ void trim_space(const char **text, uint *word_len)
start++;
*text= start;
- int len= strlen(start);
+ size_t len= strlen(start);
const char *end= start + len - 1;
while (end > start && my_isspace(&my_charset_latin1, *end))
end--;
- *word_len= (end - start)+1;
+ *word_len= (uint) (end - start)+1;
}
/*
@@ -65,7 +65,7 @@ int parse_output_and_get_value(const char *command, const char *word,
uint flag)
{
FILE *output;
- uint wordlen;
+ size_t wordlen;
/* should be enough to store the string from the output */
enum { MAX_LINE_LEN= 512 };
char linebuf[MAX_LINE_LEN];
@@ -111,7 +111,7 @@ int parse_output_and_get_value(const char *command, const char *word,
strmake(result, linep, found_word_len);
}
else /* currently there are only two options */
- strmake(result, linep, input_buffer_len - 1);
+ strmake(result, linep, (uint) (input_buffer_len - 1));
rc= 0;
break;
}
diff --git a/server-tools/instance-manager/protocol.cc b/server-tools/instance-manager/protocol.cc
index 6c7a7f0ecfa..faeee4e95e9 100644
--- a/server-tools/instance-manager/protocol.cc
+++ b/server-tools/instance-manager/protocol.cc
@@ -53,11 +53,11 @@ int net_send_ok(struct st_net *net, unsigned long connection_id,
int2store(pos, 0);
pos+= 2;
- uint position= pos - buff.buffer; /* we might need it for message */
+ uint position= (uint) (pos - buff.buffer); /* we might need it for message */
if (message != NULL)
{
- buff.reserve(position, 9 + strlen(message));
+ buff.reserve(position, 9 + (uint) strlen(message));
store_to_protocol_packet(&buff, message, &position);
}
@@ -82,7 +82,7 @@ int net_send_error(struct st_net *net, uint sql_errno)
memcpy(pos, errno_to_sqlstate(sql_errno), SQLSTATE_LENGTH);
pos+= SQLSTATE_LENGTH;
pos= strmake(pos, err, MYSQL_ERRMSG_SIZE - 1) + 1;
- return my_net_write(net, buff, pos - buff) || net_flush(net);
+ return my_net_write(net, buff, (uint) (pos - buff)) || net_flush(net);
}
@@ -98,7 +98,7 @@ int net_send_error_323(struct st_net *net, uint sql_errno)
int2store(pos, sql_errno);
pos+= 2;
pos= strmake(pos, err, MYSQL_ERRMSG_SIZE - 1) + 1;
- return my_net_write(net, buff, pos - buff) || net_flush(net);
+ return my_net_write(net, buff, (uint) (pos - buff)) || net_flush(net);
}
char *net_store_length(char *pkg, uint length)
@@ -123,7 +123,7 @@ int store_to_protocol_packet(Buffer *buf, const char *string, uint *position,
/* reserve max amount of bytes needed to store length */
if (buf->reserve(*position, 9))
goto err;
- currpos= (net_store_length(buf->buffer + *position,
+ currpos= (uint) (net_store_length(buf->buffer + *position,
(ulonglong) string_len) - buf->buffer);
if (buf->append(currpos, string, string_len))
goto err;
@@ -139,7 +139,7 @@ int store_to_protocol_packet(Buffer *buf, const char *string, uint *position)
{
uint string_len;
- string_len= strlen(string);
+ string_len= (uint) strlen(string);
return store_to_protocol_packet(buf, string, position, string_len);
}
diff --git a/server-tools/instance-manager/user_map.cc b/server-tools/instance-manager/user_map.cc
index 2f77d2f59c1..7871cad7814 100644
--- a/server-tools/instance-manager/user_map.cc
+++ b/server-tools/instance-manager/user_map.cc
@@ -55,7 +55,7 @@ int User::init(const char *line)
goto err;
password= name_end + 1;
}
- user_length= name_end - name_begin;
+ user_length= (uint) (name_end - name_begin);
if (user_length > USERNAME_LENGTH)
goto err;
diff --git a/sql-bench/TODO b/sql-bench/TODO
deleted file mode 100644
index 8a103e89199..00000000000
--- a/sql-bench/TODO
+++ /dev/null
@@ -1,21 +0,0 @@
-When comparing with ms-sql:
-
-Check how to get MySQL faster mysql ms-sql
-
-count_distinct (2000) | 89.00| 39.00|
-count_distinct_big (120) | 324.00| 121.00|
-count_distinct_group (1000) | 158.00| 107.00|
-count_distinct_group_on_key (1000) | 49.00| 17.00|
-count_distinct_group_on_key_parts (1| 157.00| 108.00|
-order_by_big (10) | 197.00| 89.00|
-order_by_big_key (10) | 170.00| 82.00|
-order_by_big_key2 (10) | 163.00| 73.00|
-order_by_big_key_desc (10) | 172.00| 84.00|
-order_by_big_key_diff (10) | 193.00| 89.00|
-order_by_big_key_prefix (10) | 165.00| 72.00|
-
-
-Why is the following slow on NT:
- NT Linux
-update_of_primary_key_many_keys (256| 560.00| 65.00|
-
diff --git a/sql-common/client.c b/sql-common/client.c
index 519deac2bc5..27cc110401c 100644
--- a/sql-common/client.c
+++ b/sql-common/client.c
@@ -3145,7 +3145,7 @@ int STDCALL mysql_set_character_set(MYSQL *mysql, const char *cs_name)
if (mysql_get_server_version(mysql) < 40100)
return 0;
sprintf(buff, "SET NAMES %s", cs_name);
- if (!mysql_real_query(mysql, buff, strlen(buff)))
+ if (!mysql_real_query(mysql, buff, (uint) strlen(buff)))
{
mysql->charset= cs;
}
diff --git a/sql-common/my_user.c b/sql-common/my_user.c
index fa5b80413bf..8d54275b2fd 100644
--- a/sql-common/my_user.c
+++ b/sql-common/my_user.c
@@ -44,8 +44,8 @@ void parse_user(const char *user_id_str, uint user_id_len,
}
else
{
- *user_name_len= p - user_id_str;
- *host_name_len= user_id_len - *user_name_len - 1;
+ *user_name_len= (uint) (p - user_id_str);
+ *host_name_len= (uint) (user_id_len - *user_name_len - 1);
memcpy(user_name_str, user_id_str, *user_name_len);
memcpy(host_name_str, p + 1, *host_name_len);
diff --git a/sql/gen_lex_hash.cc b/sql/gen_lex_hash.cc
index 2d78999017a..ef671ac7f9d 100644
--- a/sql/gen_lex_hash.cc
+++ b/sql/gen_lex_hash.cc
@@ -199,7 +199,7 @@ void insert_symbols()
for (cur= symbols; i<array_elements(symbols); cur++, i++){
hash_lex_struct *root=
get_hash_struct_by_len(&root_by_len,cur->length,&max_len);
- insert_into_hash(root,cur->name,0,i,0);
+ insert_into_hash(root,cur->name,0,(uint) i,0);
}
}
@@ -511,7 +511,7 @@ static inline SYMBOL *get_hash_symbol(const char *s,\n\
res= symbols+ires;\n\
else\n\
res= sql_functions-ires-1;\n\
- register uint count= cur_str-s;\n\
+ register uint count= (uint) (cur_str - s);\n\
return lex_casecmp(cur_str,res->name+count,len-count) ? 0 : res;\n\
}\n\
\n\
@@ -540,7 +540,7 @@ static inline SYMBOL *get_hash_symbol(const char *s,\n\
register int16 ires= (int16)(cur_struct>>16);\n\
if (ires==array_elements(symbols)) return 0;\n\
register SYMBOL *res= symbols+ires;\n\
- register uint count= cur_str-s;\n\
+ register uint count= (uint) (cur_str - s);\n\
return lex_casecmp(cur_str,res->name+count,len-count)!=0 ? 0 : res;\n\
}\n\
\n\
diff --git a/sql/ha_archive.cc b/sql/ha_archive.cc
index 0c558bf2515..04dbe678d4d 100644
--- a/sql/ha_archive.cc
+++ b/sql/ha_archive.cc
@@ -851,7 +851,7 @@ int ha_archive::get_row(gzFile file_to_read, byte *buf)
total_blob_length += ((Field_blob*) table->field[*ptr])->get_length();
/* Adjust our row buffer if we need be */
- buffer.alloc(total_blob_length);
+ buffer.alloc((uint) total_blob_length);
last= (char *)buffer.ptr();
/* Loop through our blobs and read them */
@@ -862,10 +862,10 @@ int ha_archive::get_row(gzFile file_to_read, byte *buf)
size_t size= ((Field_blob*) table->field[*ptr])->get_length();
if (size)
{
- read= gzread(file_to_read, last, size);
+ read= gzread(file_to_read, last, (uint) size);
if ((size_t) read != size)
DBUG_RETURN(HA_ERR_END_OF_FILE);
- ((Field_blob*) table->field[*ptr])->set_ptr(size, last);
+ ((Field_blob*) table->field[*ptr])->set_ptr((uint) size, last);
last += size;
}
}
diff --git a/sql/ha_federated.cc b/sql/ha_federated.cc
index d4144a41a2a..6944dc5a030 100644
--- a/sql/ha_federated.cc
+++ b/sql/ha_federated.cc
@@ -640,7 +640,7 @@ static int parse_url(FEDERATED_SHARE *share, TABLE *table,
share->database[share->table_name - share->database]= '\0';
share->table_name++;
- share->table_name_length= strlen(share->table_name);
+ share->table_name_length= (uint) strlen(share->table_name);
/* make sure there's not an extra / */
if ((strchr(share->table_name, '/')))
@@ -726,7 +726,7 @@ uint ha_federated::convert_row_to_internal_format(byte *record,
index variable to move us through the row at the
same iterative step as the field
*/
- int x= field - table->field;
+ size_t x= (field - table->field);
my_ptrdiff_t old_ptr;
old_ptr= (my_ptrdiff_t) (record - table->record[0]);
(*field)->move_field(old_ptr);
@@ -750,7 +750,7 @@ static bool emit_key_part_name(String *to, KEY_PART_INFO *part)
{
DBUG_ENTER("emit_key_part_name");
if (append_ident(to, part->field->field_name,
- strlen(part->field->field_name), ident_quote_char))
+ (uint) strlen(part->field->field_name), ident_quote_char))
DBUG_RETURN(1); // Out of memory
DBUG_RETURN(0);
}
@@ -1290,13 +1290,13 @@ static FEDERATED_SHARE *get_share(const char *table_name, TABLE *table)
for (field= table->field; *field; field++)
{
append_ident(&query, (*field)->field_name,
- strlen((*field)->field_name), ident_quote_char);
+ (uint) strlen((*field)->field_name), ident_quote_char);
query.append(FEDERATED_COMMA);
}
- query.length(query.length()- strlen(FEDERATED_COMMA));
+ query.length(query.length() - (uint) strlen(FEDERATED_COMMA));
query.append(FEDERATED_FROM);
- tmp_share.table_name_length= strlen(tmp_share.table_name);
+ tmp_share.table_name_length= (uint) strlen(tmp_share.table_name);
append_ident(&query, tmp_share.table_name,
tmp_share.table_name_length, ident_quote_char);
@@ -1528,7 +1528,7 @@ bool ha_federated::append_stmt_insert(String *query)
append_ident(&insert_string, share->table_name, share->table_name_length,
ident_quote_char);
insert_string.append(FEDERATED_OPENPAREN);
- tmp_length= insert_string.length() - strlen(FEDERATED_COMMA);
+ tmp_length= insert_string.length() - (uint) strlen(FEDERATED_COMMA);
/*
loop through the field pointer array, add any fields to both the values
@@ -1538,7 +1538,7 @@ bool ha_federated::append_stmt_insert(String *query)
{
/* append the field name */
append_ident(&insert_string, (*field)->field_name,
- strlen((*field)->field_name), ident_quote_char);
+ (uint) strlen((*field)->field_name), ident_quote_char);
/* append commas between both fields and fieldnames */
/*
@@ -1554,7 +1554,7 @@ bool ha_federated::append_stmt_insert(String *query)
/*
remove trailing comma
*/
- insert_string.length(insert_string.length() - strlen(FEDERATED_COMMA));
+ insert_string.length(insert_string.length() - (uint) strlen(FEDERATED_COMMA));
/*
if there were no fields, we don't want to add a closing paren
@@ -1667,7 +1667,7 @@ int ha_federated::write_row(byte *buf)
if (values_string.length() > tmp_length)
{
/* chops off leading commas */
- values_string.length(values_string.length() - strlen(FEDERATED_COMMA));
+ values_string.length(values_string.length() - (uint) strlen(FEDERATED_COMMA));
}
/* we always want to append this, even if there aren't any fields */
values_string.append(FEDERATED_CLOSEPAREN);
@@ -1950,10 +1950,10 @@ int ha_federated::update_row(const byte *old_data, byte *new_data)
for (Field **field= table->field; *field; field++)
{
- uint field_name_length= strlen((*field)->field_name);
- append_ident(&where_string, (*field)->field_name, field_name_length,
+ size_t field_name_length= strlen((*field)->field_name);
+ append_ident(&where_string, (*field)->field_name, (uint) field_name_length,
ident_quote_char);
- append_ident(&update_string, (*field)->field_name, field_name_length,
+ append_ident(&update_string, (*field)->field_name, (uint) field_name_length,
ident_quote_char);
update_string.append(FEDERATED_EQ);
@@ -2044,7 +2044,7 @@ int ha_federated::delete_row(const byte *buf)
Field *cur_field= *field;
data_string.length(0);
append_ident(&delete_string, (*field)->field_name,
- strlen((*field)->field_name), ident_quote_char);
+ (uint) strlen((*field)->field_name), ident_quote_char);
if (cur_field->is_null())
{
@@ -2359,7 +2359,7 @@ int ha_federated::rnd_init(bool scan)
stored_result= 0;
}
- if (real_query(share->select_query, strlen(share->select_query)))
+ if (real_query(share->select_query, (uint) strlen(share->select_query)))
goto error;
stored_result= mysql_store_result(mysql);
diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc
index 3bae0da3e02..f71e891e88d 100644
--- a/sql/ha_innodb.cc
+++ b/sql/ha_innodb.cc
@@ -7025,7 +7025,7 @@ ha_innobase::get_error_message(int error, String *buf)
{
trx_t* trx = check_trx_exists(current_thd);
- buf->copy(trx->detailed_error, strlen(trx->detailed_error),
+ buf->copy(trx->detailed_error, (uint) strlen(trx->detailed_error),
system_charset_info);
return FALSE;
diff --git a/sql/handler.cc b/sql/handler.cc
index 71d184ad84b..d069d56caae 100644
--- a/sql/handler.cc
+++ b/sql/handler.cc
@@ -188,7 +188,8 @@ retest:
{
if (!my_strnncoll(&my_charset_latin1,
(const uchar *)name, namelen,
- (const uchar *)(*types)->name, strlen((*types)->name)))
+ (const uchar *)(*types)->name,
+ (uint) strlen((*types)->name)))
return (enum db_type) (*types)->db_type;
}
@@ -200,10 +201,10 @@ retest:
if (!my_strnncoll(&my_charset_latin1,
(const uchar *)name, namelen,
(const uchar *)table_alias->alias,
- strlen(table_alias->alias)))
+ (uint) strlen(table_alias->alias)))
{
name= table_alias->type;
- namelen= strlen(name);
+ namelen= (uint) strlen(name);
goto retest;
}
}
diff --git a/sql/item.cc b/sql/item.cc
index f32828629cf..6ae52d8be59 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -1498,7 +1498,8 @@ bool DTCollation::aggregate(DTCollation &dt, uint flags)
else
{
// Cannot apply conversion
- set(0, DERIVATION_NONE, 0);
+ set(&my_charset_bin, DERIVATION_NONE,
+ (dt.repertoire|repertoire));
return 1;
}
}
@@ -1581,15 +1582,31 @@ bool agg_item_collations(DTCollation &c, const char *fname,
{
uint i;
Item **arg;
+ bool unknown_cs= 0;
+
c.set(av[0]->collation);
for (i= 1, arg= &av[item_sep]; i < count; i++, arg++)
{
if (c.aggregate((*arg)->collation, flags))
{
+ if (c.derivation == DERIVATION_NONE &&
+ c.collation == &my_charset_bin)
+ {
+ unknown_cs= 1;
+ continue;
+ }
my_coll_agg_error(av, count, fname, item_sep);
return TRUE;
}
}
+
+ if (unknown_cs &&
+ c.derivation != DERIVATION_EXPLICIT)
+ {
+ my_coll_agg_error(av, count, fname, item_sep);
+ return TRUE;
+ }
+
if ((flags & MY_COLL_DISALLOW_NONE) &&
c.derivation == DERIVATION_NONE)
{
@@ -6290,7 +6307,7 @@ bool Item_trigger_field::fix_fields(THD *thd, Item **items)
if (check_grant_column(thd, table_grants, triggers->trigger_table->s->db,
triggers->trigger_table->s->table_name,
field_name,
- strlen(field_name), thd->security_ctx))
+ (uint) strlen(field_name), thd->security_ctx))
return TRUE;
}
#endif // NO_EMBEDDED_ACCESS_CHECKS
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 55324923fe2..47e16a1bcc3 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -2758,7 +2758,7 @@ longlong Item_func_find_in_set::val_int()
if (is_last_item && !is_separator)
str_end= substr_end;
if (!my_strnncoll(cs, (const uchar *) str_begin,
- str_end - str_begin,
+ (uint) (str_end - str_begin),
find_str, find_str_len))
return (longlong) position;
else
@@ -4792,7 +4792,7 @@ Item_func_get_system_var(sys_var *var_arg, enum_var_type var_type_arg,
:var(var_arg), var_type(var_type_arg), component(*component_arg)
{
/* set_name() will allocate the name */
- set_name(name_arg, name_len_arg, system_charset_info);
+ set_name(name_arg, (uint) name_len_arg, system_charset_info);
}
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index 34f974042a5..7edc1a62307 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -101,13 +101,10 @@ String *Item_func_md5::val_str(String *str)
str->set_charset(&my_charset_bin);
if (sptr)
{
- my_MD5_CTX context;
unsigned char digest[16];
null_value=0;
- my_MD5Init (&context);
- my_MD5Update (&context,(unsigned char *) sptr->ptr(), sptr->length());
- my_MD5Final (digest, &context);
+ MY_MD5_HASH(digest,(unsigned char *) sptr->ptr(), sptr->length());
if (str->alloc(32)) // Ensure that memory is free
{
null_value=1;
@@ -1743,17 +1740,17 @@ bool Item_func_user::init(const char *user, const char *host)
if (user)
{
CHARSET_INFO *cs= str_value.charset();
- uint res_length= (strlen(user)+strlen(host)+2) * cs->mbmaxlen;
+ size_t res_length= (strlen(user)+strlen(host)+2) * cs->mbmaxlen;
- if (str_value.alloc(res_length))
+ if (str_value.alloc((uint) res_length))
{
null_value=1;
return TRUE;
}
- res_length=cs->cset->snprintf(cs, (char*)str_value.ptr(), res_length,
+ res_length=cs->cset->snprintf(cs, (char*)str_value.ptr(), (uint) res_length,
"%s@%s", user, host);
- str_value.length(res_length);
+ str_value.length((uint) res_length);
str_value.mark_as_const();
}
return FALSE;
@@ -2433,7 +2430,7 @@ String *Item_func_rpad::val_str(String *str)
memcpy(to,ptr_pad,(size_t) pad_byte_length);
to+= pad_byte_length;
}
- res->length(to- (char*) res->ptr());
+ res->length((uint) (to- (char*) res->ptr()));
return (res);
err:
@@ -2701,7 +2698,7 @@ String *Item_func_charset::val_str(String *str)
CHARSET_INFO *cs= args[0]->collation.collation;
null_value= 0;
- str->copy(cs->csname, strlen(cs->csname),
+ str->copy(cs->csname, (uint) strlen(cs->csname),
&my_charset_latin1, collation.collation, &dummy_errors);
return str;
}
@@ -2713,7 +2710,7 @@ String *Item_func_collation::val_str(String *str)
CHARSET_INFO *cs= args[0]->collation.collation;
null_value= 0;
- str->copy(cs->name, strlen(cs->name),
+ str->copy(cs->name, (uint) strlen(cs->name),
&my_charset_latin1, collation.collation, &dummy_errors);
return str;
}
diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h
index 23ac20a4017..9794a092648 100644
--- a/sql/item_strfunc.h
+++ b/sql/item_strfunc.h
@@ -362,7 +362,7 @@ public:
Item_func_encode(Item *a, char *seed_arg):
Item_str_func(a), sql_crypt(seed_arg)
{
- seed.copy(seed_arg, strlen(seed_arg), default_charset_info);
+ seed.copy(seed_arg, (uint) strlen(seed_arg), default_charset_info);
}
String *val_str(String *);
void fix_length_and_dec();
diff --git a/sql/item_sum.cc b/sql/item_sum.cc
index d33d92a5238..57045f52825 100644
--- a/sql/item_sum.cc
+++ b/sql/item_sum.cc
@@ -440,7 +440,8 @@ void Item_sum::make_field(Send_field *tmp_field)
void Item_sum::print(String *str)
{
- Item **pargs= orig_args;
+ /* orig_args is not filled with valid values until fix_fields() */
+ Item **pargs= fixed ? orig_args : args;
str->append(func_name());
for (uint i=0 ; i < arg_count ; i++)
{
diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc
index 38d9d62bd99..22ca8a925db 100644
--- a/sql/item_timefunc.cc
+++ b/sql/item_timefunc.cc
@@ -384,7 +384,7 @@ static bool extract_date_time(DATE_TIME_FORMAT *format,
if (tmp - val > 6)
tmp= (char*) val + 6;
l_time->second_part= (int) my_strtoll10(val, &tmp, &error);
- frac_part= 6 - (tmp - val);
+ frac_part= 6 - (uint) (tmp - val);
if (frac_part > 0)
l_time->second_part*= (ulong) log_10_int[frac_part];
val= tmp;
@@ -635,14 +635,14 @@ bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time,
if (!l_time->month)
return 1;
str->append(locale->month_names->type_names[l_time->month-1],
- strlen(locale->month_names->type_names[l_time->month-1]),
+ (uint) strlen(locale->month_names->type_names[l_time->month-1]),
system_charset_info);
break;
case 'b':
if (!l_time->month)
return 1;
str->append(locale->ab_month_names->type_names[l_time->month-1],
- strlen(locale->ab_month_names->type_names[l_time->month-1]),
+ (uint) strlen(locale->ab_month_names->type_names[l_time->month-1]),
system_charset_info);
break;
case 'W':
@@ -651,7 +651,7 @@ bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time,
weekday= calc_weekday(calc_daynr(l_time->year,l_time->month,
l_time->day),0);
str->append(locale->day_names->type_names[weekday],
- strlen(locale->day_names->type_names[weekday]),
+ (uint) strlen(locale->day_names->type_names[weekday]),
system_charset_info);
break;
case 'a':
@@ -660,13 +660,13 @@ bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time,
weekday=calc_weekday(calc_daynr(l_time->year,l_time->month,
l_time->day),0);
str->append(locale->ab_day_names->type_names[weekday],
- strlen(locale->ab_day_names->type_names[weekday]),
+ (uint) strlen(locale->ab_day_names->type_names[weekday]),
system_charset_info);
break;
case 'D':
if (type == MYSQL_TIMESTAMP_TIME)
return 1;
- length= int10_to_str(l_time->day, intbuff, 10) - intbuff;
+ length= (uint) (int10_to_str(l_time->day, intbuff, 10) - intbuff);
str->append_with_prefill(intbuff, length, 1, '0');
if (l_time->day >= 10 && l_time->day <= 19)
str->append(STRING_WITH_LEN("th"));
@@ -689,62 +689,62 @@ bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time,
}
break;
case 'Y':
- length= int10_to_str(l_time->year, intbuff, 10) - intbuff;
+ length= (uint) (int10_to_str(l_time->year, intbuff, 10) - intbuff);
str->append_with_prefill(intbuff, length, 4, '0');
break;
case 'y':
- length= int10_to_str(l_time->year%100, intbuff, 10) - intbuff;
+ length= (uint) (int10_to_str(l_time->year%100, intbuff, 10) - intbuff);
str->append_with_prefill(intbuff, length, 2, '0');
break;
case 'm':
- length= int10_to_str(l_time->month, intbuff, 10) - intbuff;
+ length= (uint) (int10_to_str(l_time->month, intbuff, 10) - intbuff);
str->append_with_prefill(intbuff, length, 2, '0');
break;
case 'c':
- length= int10_to_str(l_time->month, intbuff, 10) - intbuff;
+ length= (uint) (int10_to_str(l_time->month, intbuff, 10) - intbuff);
str->append_with_prefill(intbuff, length, 1, '0');
break;
case 'd':
- length= int10_to_str(l_time->day, intbuff, 10) - intbuff;
+ length= (uint) (int10_to_str(l_time->day, intbuff, 10) - intbuff);
str->append_with_prefill(intbuff, length, 2, '0');
break;
case 'e':
- length= int10_to_str(l_time->day, intbuff, 10) - intbuff;
+ length= (uint) (int10_to_str(l_time->day, intbuff, 10) - intbuff);
str->append_with_prefill(intbuff, length, 1, '0');
break;
case 'f':
- length= int10_to_str(l_time->second_part, intbuff, 10) - intbuff;
+ length= (uint) (int10_to_str(l_time->second_part, intbuff, 10) - intbuff);
str->append_with_prefill(intbuff, length, 6, '0');
break;
case 'H':
- length= int10_to_str(l_time->hour, intbuff, 10) - intbuff;
+ length= (uint) (int10_to_str(l_time->hour, intbuff, 10) - intbuff);
str->append_with_prefill(intbuff, length, 2, '0');
break;
case 'h':
case 'I':
hours_i= (l_time->hour%24 + 11)%12+1;
- length= int10_to_str(hours_i, intbuff, 10) - intbuff;
+ length= (uint) (int10_to_str(hours_i, intbuff, 10) - intbuff);
str->append_with_prefill(intbuff, length, 2, '0');
break;
case 'i': /* minutes */
- length= int10_to_str(l_time->minute, intbuff, 10) - intbuff;
+ length= (uint) (int10_to_str(l_time->minute, intbuff, 10) - intbuff);
str->append_with_prefill(intbuff, length, 2, '0');
break;
case 'j':
if (type == MYSQL_TIMESTAMP_TIME)
return 1;
- length= int10_to_str(calc_daynr(l_time->year,l_time->month,
+ length= (uint) (int10_to_str(calc_daynr(l_time->year,l_time->month,
l_time->day) -
- calc_daynr(l_time->year,1,1) + 1, intbuff, 10) - intbuff;
+ calc_daynr(l_time->year,1,1) + 1, intbuff, 10) - intbuff);
str->append_with_prefill(intbuff, length, 3, '0');
break;
case 'k':
- length= int10_to_str(l_time->hour, intbuff, 10) - intbuff;
+ length= (uint) (int10_to_str(l_time->hour, intbuff, 10) - intbuff);
str->append_with_prefill(intbuff, length, 1, '0');
break;
case 'l':
hours_i= (l_time->hour%24 + 11)%12+1;
- length= int10_to_str(hours_i, intbuff, 10) - intbuff;
+ length= (uint) (int10_to_str(hours_i, intbuff, 10) - intbuff);
str->append_with_prefill(intbuff, length, 1, '0');
break;
case 'p':
@@ -763,7 +763,7 @@ bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time,
break;
case 'S':
case 's':
- length= int10_to_str(l_time->second, intbuff, 10) - intbuff;
+ length= (uint) (int10_to_str(l_time->second, intbuff, 10) - intbuff);
str->append_with_prefill(intbuff, length, 2, '0');
break;
case 'T':
@@ -781,11 +781,11 @@ bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time,
uint year;
if (type == MYSQL_TIMESTAMP_TIME)
return 1;
- length= int10_to_str(calc_week(l_time,
+ length= (uint) (int10_to_str(calc_week(l_time,
(*ptr) == 'U' ?
WEEK_FIRST_WEEKDAY : WEEK_MONDAY_FIRST,
&year),
- intbuff, 10) - intbuff;
+ intbuff, 10) - intbuff);
str->append_with_prefill(intbuff, length, 2, '0');
}
break;
@@ -795,12 +795,12 @@ bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time,
uint year;
if (type == MYSQL_TIMESTAMP_TIME)
return 1;
- length= int10_to_str(calc_week(l_time,
+ length= (uint) (int10_to_str(calc_week(l_time,
((*ptr) == 'V' ?
(WEEK_YEAR | WEEK_FIRST_WEEKDAY) :
(WEEK_YEAR | WEEK_MONDAY_FIRST)),
&year),
- intbuff, 10) - intbuff;
+ intbuff, 10) - intbuff);
str->append_with_prefill(intbuff, length, 2, '0');
}
break;
@@ -815,7 +815,7 @@ bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time,
WEEK_YEAR | WEEK_FIRST_WEEKDAY :
WEEK_YEAR | WEEK_MONDAY_FIRST),
&year);
- length= int10_to_str(year, intbuff, 10) - intbuff;
+ length= (uint) (int10_to_str(year, intbuff, 10) - intbuff);
str->append_with_prefill(intbuff, length, 4, '0');
}
break;
@@ -824,7 +824,7 @@ bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time,
return 1;
weekday=calc_weekday(calc_daynr(l_time->year,l_time->month,
l_time->day),1);
- length= int10_to_str(weekday, intbuff, 10) - intbuff;
+ length= (uint) (int10_to_str(weekday, intbuff, 10) - intbuff);
str->append_with_prefill(intbuff, length, 1, '0');
break;
@@ -875,7 +875,7 @@ static bool get_interval_info(const char *str,uint length,CHARSET_INFO *cs,
value= value*LL(10) + (longlong) (*str - '0');
if (transform_msec && i == count - 1) // microseconds always last
{
- long msec_length= 6 - (str - start);
+ long msec_length= 6 - (uint) (str - start);
if (msec_length > 0)
value*= (long) log_10_int[msec_length];
}
@@ -1063,7 +1063,7 @@ String* Item_func_monthname::val_str(String* str)
}
null_value=0;
month_name= locale->month_names->type_names[month-1];
- str->copy(month_name, strlen(month_name), &my_charset_utf8_bin,
+ str->copy(month_name, (uint) strlen(month_name), &my_charset_utf8_bin,
collation.collation, &err);
return str;
}
@@ -1207,7 +1207,7 @@ String* Item_func_dayname::val_str(String* str)
return (String*) 0;
day_name= locale->day_names->type_names[weekday];
- str->copy(day_name, strlen(day_name), &my_charset_utf8_bin,
+ str->copy(day_name, (uint) strlen(day_name), &my_charset_utf8_bin,
collation.collation, &err);
return str;
}
@@ -3222,14 +3222,14 @@ String *Item_func_get_format::val_str(String *str)
format++)
{
uint format_name_len;
- format_name_len= strlen(format_name);
+ format_name_len= (uint) strlen(format_name);
if (val_len == format_name_len &&
!my_strnncoll(&my_charset_latin1,
(const uchar *) val->ptr(), val_len,
(const uchar *) format_name, val_len))
{
const char *format_str= get_date_time_format_str(format, type);
- str->set(format_str, strlen(format_str), &my_charset_bin);
+ str->set(format_str, (uint) strlen(format_str), &my_charset_bin);
return str;
}
}
diff --git a/sql/lock.cc b/sql/lock.cc
index 47458702033..e22eecd9b73 100644
--- a/sql/lock.cc
+++ b/sql/lock.cc
@@ -347,7 +347,7 @@ void mysql_unlock_read_tables(THD *thd, MYSQL_LOCK *sql_lock)
for (i= 0; i < sql_lock->table_count; i++)
{
TABLE *tbl= *table;
- tbl->lock_position= table - sql_lock->table;
+ tbl->lock_position= (uint) (table - sql_lock->table);
tbl->lock_data_start= found;
found+= tbl->lock_count;
table++;
@@ -740,7 +740,7 @@ static MYSQL_LOCK *get_lock_data(THD *thd, TABLE **table_ptr, uint count,
{
my_error(ER_OPEN_AS_READONLY,MYF(0),table->alias);
/* Clear the lock type of the lock data that are stored already. */
- sql_lock->lock_count= locks - sql_lock->locks;
+ sql_lock->lock_count= (uint) (locks - sql_lock->locks);
reset_lock_data(sql_lock);
my_free((gptr) sql_lock,MYF(0));
DBUG_RETURN(0);
diff --git a/sql/log.cc b/sql/log.cc
index c411f7c8238..d979dd101e0 100644
--- a/sql/log.cc
+++ b/sql/log.cc
@@ -487,7 +487,7 @@ const char *MYSQL_LOG::generate_name(const char *log_name,
{
if (!log_name || !log_name[0])
{
- strmake(buff, pidfile_name, FN_REFLEN - strlen(suffix) - 1);
+ strmake(buff, pidfile_name, (uint) (FN_REFLEN - strlen(suffix) - 1));
return (const char *)
fn_format(buff, buff, "", suffix, MYF(MY_REPLACE_EXT|MY_REPLACE_DIR));
@@ -728,7 +728,7 @@ bool MYSQL_LOG::open(const char *log_name,
file. As every time we write to the index file, we sync it.
*/
if (my_b_write(&index_file, (byte*) log_file_name,
- strlen(log_file_name)) ||
+ (uint) strlen(log_file_name)) ||
my_b_write(&index_file, (byte*) "\n", 1) ||
flush_io_cache(&index_file) ||
my_sync(index_file.file, MYF(MY_WME)))
diff --git a/sql/log_event.cc b/sql/log_event.cc
index ba282fd8e59..c4cdfc27fa0 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -268,7 +268,7 @@ append_query_string(CHARSET_INFO *csinfo,
from->ptr(), from->length());
*ptr++='\'';
}
- to->length(orig_len + ptr - beg);
+ to->length((uint) (orig_len + ptr - beg));
return 0;
}
#endif
@@ -556,7 +556,7 @@ int Log_event::net_send(Protocol *protocol, const char* log_name, my_off_t pos)
protocol->store(log_name, &my_charset_bin);
protocol->store((ulonglong) pos);
event_type = get_type_str();
- protocol->store(event_type, strlen(event_type), &my_charset_bin);
+ protocol->store(event_type, (uint) strlen(event_type), &my_charset_bin);
protocol->store((uint32) server_id);
protocol->store((ulonglong) log_pos);
pack_info(protocol);
@@ -1106,7 +1106,7 @@ void Query_log_event::pack_info(Protocol *protocol)
memcpy(pos, query, q_len);
pos+= q_len;
}
- protocol->store(buf, pos-buf, &my_charset_bin);
+ protocol->store(buf, (uint) (pos - buf), &my_charset_bin);
my_free(buf, MYF(MY_ALLOW_ZERO_PTR));
}
#endif
@@ -1443,7 +1443,7 @@ get_str_len_and_pointer(const Log_event::Byte **src,
if (length > 0)
{
if (*src + length >= end)
- return *src + length - end + 1; // Number of bytes missing
+ return (int) (*src + length - end + 1); // Number of bytes missing
*dst= (char *)*src + 1; // Will be copied later
}
*len= length;
@@ -1921,7 +1921,7 @@ int Query_log_event::exec_event(struct st_relay_log_info* rli,
Thank you.
*/
thd->catalog= catalog_len ? (char *) catalog : (char *)"";
- thd->set_db(new_db, strlen(new_db)); /* allocates a copy of 'db' */
+ thd->set_db(new_db, (uint) strlen(new_db)); /* allocates a copy of 'db' */
thd->variables.auto_increment_increment= auto_increment_increment;
thd->variables.auto_increment_offset= auto_increment_offset;
@@ -2786,7 +2786,7 @@ void Load_log_event::pack_info(Protocol *protocol)
if (!(buf= my_malloc(get_query_buffer_length(), MYF(MY_WME))))
return;
print_query(TRUE, buf, &end, 0, 0);
- protocol->store(buf, end-buf, &my_charset_bin);
+ protocol->store(buf, (uint) (end - buf), &my_charset_bin);
my_free(buf, MYF(0));
}
#endif /* defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT) */
@@ -2993,7 +2993,7 @@ int Load_log_event::copy_log_event(const char *buf, ulong event_len,
table_name = fields + field_block_len;
db = table_name + table_name_len + 1;
fname = db + db_len + 1;
- fname_len = strlen(fname);
+ fname_len = (uint) strlen(fname);
// null termination is accomplished by the caller doing buf[event_len]=0
DBUG_RETURN(0);
@@ -3159,7 +3159,7 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli,
bool use_rli_only_for_errors)
{
const char *new_db= rewrite_db(db);
- thd->set_db(new_db, strlen(new_db));
+ thd->set_db(new_db, (uint) strlen(new_db));
DBUG_ASSERT(thd->query == 0);
thd->query_length= 0; // Should not be needed
thd->query_error= 0;
@@ -3252,7 +3252,7 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli,
print_query(FALSE, load_data_query, &end, (char **)&thd->lex->fname_start,
(char **)&thd->lex->fname_end);
*end= 0;
- thd->query_length= end - load_data_query;
+ thd->query_length= (uint) (end - load_data_query);
thd->query= load_data_query;
if (sql_ex.opt_flags & REPLACE_FLAG)
@@ -3872,7 +3872,7 @@ void User_var_log_event::pack_info(Protocol* protocol)
break;
case INT_RESULT:
buf= my_malloc(val_offset + 22, MYF(MY_WME));
- event_len= longlong10_to_str(uint8korr(val), buf + val_offset,-10)-buf;
+ event_len= (uint) (longlong10_to_str(uint8korr(val), buf + val_offset,-10) - buf);
break;
case DECIMAL_RESULT:
{
@@ -3898,7 +3898,7 @@ void User_var_log_event::pack_info(Protocol* protocol)
char *p= strxmov(buf + val_offset, "_", cs->csname, " ", NullS);
p= str_to_hex(p, val, val_len);
p= strxmov(p, " COLLATE ", cs->name, NullS);
- event_len= p-buf;
+ event_len= (uint) (p - buf);
}
break;
case ROW_RESULT:
@@ -4219,7 +4219,7 @@ void Slave_log_event::pack_info(Protocol *protocol)
pos= strmov(pos, master_log);
pos= strmov(pos, ",pos=");
pos= longlong10_to_str(master_pos, pos, 10);
- protocol->store(buf, pos-buf, &my_charset_bin);
+ protocol->store(buf, (uint) (pos - buf), &my_charset_bin);
}
#endif /* !MYSQL_CLIENT */
@@ -4237,8 +4237,8 @@ Slave_log_event::Slave_log_event(THD* thd_arg,
// TODO: re-write this better without holding both locks at the same time
pthread_mutex_lock(&mi->data_lock);
pthread_mutex_lock(&rli->data_lock);
- master_host_len = strlen(mi->host);
- master_log_len = strlen(rli->group_master_log_name);
+ master_host_len= (uint) strlen(mi->host);
+ master_log_len= (uint) strlen(rli->group_master_log_name);
// on OOM, just do not initialize the structure and print the error
if ((mem_pool = (char*)my_malloc(get_data_size() + 1,
MYF(MY_WME))))
@@ -4307,7 +4307,7 @@ void Slave_log_event::init_from_mem_pool(int data_size)
master_pos = uint8korr(mem_pool + SL_MASTER_POS_OFFSET);
master_port = uint2korr(mem_pool + SL_MASTER_PORT_OFFSET);
master_host = mem_pool + SL_MASTER_HOST_OFFSET;
- master_host_len = strlen(master_host);
+ master_host_len= (uint) strlen(master_host);
// safety
master_log = master_host + master_host_len + 1;
if (master_log > mem_pool + data_size)
@@ -4315,7 +4315,7 @@ void Slave_log_event::init_from_mem_pool(int data_size)
master_host = 0;
return;
}
- master_log_len = strlen(master_log);
+ master_log_len= (uint) strlen(master_log);
}
@@ -5237,7 +5237,7 @@ void Execute_load_query_log_event::pack_info(Protocol *protocol)
}
pos= strmov(pos, " ;file_id=");
pos= int10_to_str((long) file_id, pos, 10);
- protocol->store(buf, pos-buf, &my_charset_bin);
+ protocol->store(buf, (uint) (pos - buf), &my_charset_bin);
my_free(buf, MYF(MY_ALLOW_ZERO_PTR));
}
@@ -5280,7 +5280,7 @@ Execute_load_query_log_event::exec_event(struct st_relay_log_info* rli)
p= strmake(p, STRING_WITH_LEN(" INTO"));
p= strmake(p, query+fn_pos_end, q_len-fn_pos_end);
- error= Query_log_event::exec_event(rli, buf, p-buf);
+ error= Query_log_event::exec_event(rli, buf, (uint) (p - buf));
/* Forging file name for deletion in same buffer */
*fname_end= 0;
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index fcde4e2b626..ad3521e5dde 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -2815,7 +2815,7 @@ static bool init_global_datetime_format(timestamp_type format_type,
*/
opt_date_time_formats[format_type]= str;
}
- if (!(*var_ptr= date_time_format_make(format_type, str, strlen(str))))
+ if (!(*var_ptr= date_time_format_make(format_type, str, (uint) strlen(str))))
{
fprintf(stderr, "Wrong date/time format specifier: %s\n", str);
return 1;
@@ -3041,7 +3041,7 @@ static int init_common_variables(const char *conf_file_name, int argc,
sys_init_slave.value_length= 0;
if ((sys_init_slave.value= opt_init_slave))
- sys_init_slave.value_length= strlen(opt_init_slave);
+ sys_init_slave.value_length= (uint) strlen(opt_init_slave);
else
sys_init_slave.value=my_strdup("",MYF(0));
sys_init_slave.is_os_charset= TRUE;
@@ -7336,7 +7336,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
case OPT_STORAGE_ENGINE:
{
if ((enum db_type)((global_system_variables.table_type=
- ha_resolve_by_name(argument, strlen(argument)))) ==
+ ha_resolve_by_name(argument, (uint) strlen(argument)))) ==
DB_TYPE_UNKNOWN)
{
fprintf(stderr,"Unknown/unsupported table type: %s\n",argument);
diff --git a/sql/net_serv.cc b/sql/net_serv.cc
index a40764577fd..627a5fae5e3 100644
--- a/sql/net_serv.cc
+++ b/sql/net_serv.cc
@@ -253,7 +253,7 @@ static int net_data_is_ready(my_socket sd)
tv.tv_sec= tv.tv_usec= 0;
- if ((res= select(sd+1, &sfds, NULL, NULL, &tv)) < 0)
+ if ((res= select((int) (sd + 1), &sfds, NULL, NULL, &tv)) < 0)
return 0;
else
return test(res ? FD_ISSET(sd, &sfds) : 0);
@@ -501,7 +501,7 @@ net_write_buff(NET *net,const char *packet,ulong len)
{
ulong left_length;
if (net->compress && net->max_packet > MAX_PACKET_LENGTH)
- left_length= MAX_PACKET_LENGTH - (net->write_pos - net->buff);
+ left_length= (ulong) (MAX_PACKET_LENGTH - (net->write_pos - net->buff));
else
left_length= (ulong) (net->buff_end - net->write_pos);
diff --git a/sql/opt_range.cc b/sql/opt_range.cc
index 018fc8a9d44..c3a43776429 100644
--- a/sql/opt_range.cc
+++ b/sql/opt_range.cc
@@ -673,7 +673,7 @@ int SEL_IMERGE::or_sel_tree(PARAM *param, SEL_TREE *tree)
if (trees_next == trees_end)
{
const int realloc_ratio= 2; /* Double size for next round */
- uint old_elements= (trees_end - trees);
+ uint old_elements= (uint) (trees_end - trees);
uint old_size= sizeof(SEL_TREE**) * old_elements;
uint new_size= old_size * realloc_ratio;
SEL_TREE **new_trees;
@@ -2398,7 +2398,7 @@ TABLE_READ_PLAN *get_best_disjunct_quick(PARAM *param, SEL_IMERGE *imerge,
{
SEL_TREE **ptree;
TRP_INDEX_MERGE *imerge_trp= NULL;
- uint n_child_scans= imerge->trees_next - imerge->trees;
+ uint n_child_scans= (uint) (imerge->trees_next - imerge->trees);
TRP_RANGE **range_scans;
TRP_RANGE **cur_child;
TRP_RANGE **cpk_scan= NULL;
@@ -2997,7 +2997,7 @@ static double ror_scan_selectivity(const ROR_INTERSECT_INFO *info,
tuple_arg= tuple_arg->next_key_part;
tuple_arg->store_min(key_part[tuple_arg->part].store_length, &key_ptr, 0);
}
- min_range.length= max_range.length= ((char*) key_ptr - (char*) key_val);
+ min_range.length= max_range.length= (uint) ((char*) key_ptr - (char*) key_val);
records= (info->param->table->file->
records_in_range(scan->keynr, &min_range, &max_range));
if (cur_covered)
@@ -3297,7 +3297,7 @@ TRP_ROR_INTERSECT *get_best_ror_intersect(const PARAM *param, SEL_TREE *tree,
intersect_scans_best););
*are_all_covering= intersect->is_covering;
- uint best_num= intersect_scans_best - intersect_scans;
+ uint best_num= (uint) (intersect_scans_best - intersect_scans);
ror_intersect_cpy(intersect, intersect_best);
/*
@@ -3474,7 +3474,7 @@ TRP_ROR_INTERSECT *get_best_covering_ror_intersect(PARAM *param,
TRP_ROR_INTERSECT *trp;
if (!(trp= new (param->mem_root) TRP_ROR_INTERSECT))
DBUG_RETURN(trp);
- uint best_num= (ror_scan_mark - tree->ror_scans);
+ uint best_num= (uint) (ror_scan_mark - tree->ror_scans);
if (!(trp->first_scan= (ROR_SCAN_INFO**)alloc_root(param->mem_root,
sizeof(ROR_SCAN_INFO*)*
best_num)))
@@ -3594,7 +3594,7 @@ static TRP_RANGE *get_key_scans_params(PARAM *param, SEL_TREE *tree,
"ROR scans"););
if (key_to_read)
{
- idx= key_to_read - tree->keys;
+ idx= (uint) (key_to_read - tree->keys);
if ((read_plan= new (param->mem_root) TRP_RANGE(*key_to_read, idx)))
{
read_plan->records= best_records;
@@ -4755,7 +4755,7 @@ tree_and(PARAM *param,SEL_TREE *tree1,SEL_TREE *tree2)
tree1->type= SEL_TREE::IMPOSSIBLE;
DBUG_RETURN(tree1);
}
- result_keys.set_bit(key1 - tree1->keys);
+ result_keys.set_bit((uint) (key1 - tree1->keys));
#ifdef EXTRA_DEBUG
if (*key1 && param->alloced_sel_args < SEL_ARG::MAX_SEL_ARGS)
(*key1)->test_use_count(*key1);
@@ -4837,7 +4837,7 @@ tree_or(PARAM *param,SEL_TREE *tree1,SEL_TREE *tree2)
if (*key1)
{
result=tree1; // Added to tree1
- result_keys.set_bit(key1 - tree1->keys);
+ result_keys.set_bit((uint) (key1 - tree1->keys));
#ifdef EXTRA_DEBUG
if (param->alloced_sel_args < SEL_ARG::MAX_SEL_ARGS)
(*key1)->test_use_count(*key1);
@@ -6956,8 +6956,8 @@ int QUICK_RANGE_SELECT::get_next()
}
}
- uint count= min(multi_range_length, ranges.elements -
- (cur_range - (QUICK_RANGE**) ranges.buffer));
+ uint count= min(multi_range_length, (uint) (ranges.elements -
+ (cur_range - (QUICK_RANGE**) ranges.buffer)));
if (count == 0)
{
/* Ranges have already been used up before. None is left for read. */
@@ -7047,7 +7047,7 @@ int QUICK_RANGE_SELECT::get_next_prefix(uint prefix_length, byte *cur_prefix)
DBUG_RETURN(result);
}
- uint count= ranges.elements - (cur_range - (QUICK_RANGE**) ranges.buffer);
+ uint count= (uint) (ranges.elements - (cur_range - (QUICK_RANGE**) ranges.buffer));
if (count == 0)
{
/* Ranges have already been used up before. None is left for read. */
@@ -7102,7 +7102,7 @@ int QUICK_RANGE_SELECT_GEOM::get_next()
DBUG_RETURN(result);
}
- uint count= ranges.elements - (cur_range - (QUICK_RANGE**) ranges.buffer);
+ uint count= (uint) (ranges.elements - (cur_range - (QUICK_RANGE**) ranges.buffer));
if (count == 0)
{
/* Ranges have already been used up before. None is left for read. */
@@ -7435,18 +7435,18 @@ void QUICK_RANGE_SELECT::add_keys_and_lengths(String *key_names,
String *used_lengths)
{
char buf[64];
- uint length;
+ size_t length;
KEY *key_info= head->key_info + index;
key_names->append(key_info->name);
length= longlong2str(max_used_key_length, buf, 10) - buf;
- used_lengths->append(buf, length);
+ used_lengths->append(buf, (uint) length);
}
void QUICK_INDEX_MERGE_SELECT::add_keys_and_lengths(String *key_names,
String *used_lengths)
{
char buf[64];
- uint length;
+ size_t length;
bool first= TRUE;
QUICK_RANGE_SELECT *quick;
@@ -7464,7 +7464,7 @@ void QUICK_INDEX_MERGE_SELECT::add_keys_and_lengths(String *key_names,
KEY *key_info= head->key_info + quick->index;
key_names->append(key_info->name);
length= longlong2str(quick->max_used_key_length, buf, 10) - buf;
- used_lengths->append(buf, length);
+ used_lengths->append(buf, (uint) length);
}
if (pk_quick_select)
{
@@ -7473,7 +7473,7 @@ void QUICK_INDEX_MERGE_SELECT::add_keys_and_lengths(String *key_names,
key_names->append(key_info->name);
length= longlong2str(pk_quick_select->max_used_key_length, buf, 10) - buf;
used_lengths->append(',');
- used_lengths->append(buf, length);
+ used_lengths->append(buf, (uint) length);
}
}
@@ -7481,7 +7481,7 @@ void QUICK_ROR_INTERSECT_SELECT::add_keys_and_lengths(String *key_names,
String *used_lengths)
{
char buf[64];
- uint length;
+ size_t length;
bool first= TRUE;
QUICK_RANGE_SELECT *quick;
List_iterator_fast<QUICK_RANGE_SELECT> it(quick_selects);
@@ -7497,7 +7497,7 @@ void QUICK_ROR_INTERSECT_SELECT::add_keys_and_lengths(String *key_names,
}
key_names->append(key_info->name);
length= longlong2str(quick->max_used_key_length, buf, 10) - buf;
- used_lengths->append(buf, length);
+ used_lengths->append(buf, (uint) length);
}
if (cpk_quick)
@@ -7507,7 +7507,7 @@ void QUICK_ROR_INTERSECT_SELECT::add_keys_and_lengths(String *key_names,
key_names->append(key_info->name);
length= longlong2str(cpk_quick->max_used_key_length, buf, 10) - buf;
used_lengths->append(',');
- used_lengths->append(buf, length);
+ used_lengths->append(buf, (uint) length);
}
}
@@ -8016,7 +8016,7 @@ get_best_group_min_max(PARAM *param, SEL_TREE *tree)
}
/* If we got to this point, cur_index_info passes the test. */
- key_infix_parts= cur_key_infix_len ?
+ key_infix_parts= cur_key_infix_len ? (uint)
(first_non_infix_part - first_non_group_part) : 0;
cur_used_key_parts= cur_group_key_parts + key_infix_parts;
@@ -8353,7 +8353,7 @@ get_field_keypart(KEY *index, Field *field)
for (part= index->key_part, end= part + index->key_parts; part < end; part++)
{
if (field->eq(part->field))
- return part - index->key_part + 1;
+ return (uint) (part - index->key_part + 1);
}
return 0;
}
@@ -9608,7 +9608,7 @@ void QUICK_GROUP_MIN_MAX_SELECT::add_keys_and_lengths(String *key_names,
char buf[64];
uint length;
key_names->append(index_info->name);
- length= longlong2str(max_used_key_length, buf, 10) - buf;
+ length= (uint) (longlong2str(max_used_key_length, buf, 10) - buf);
used_lengths->append(buf, length);
}
diff --git a/sql/opt_sum.cc b/sql/opt_sum.cc
index 39db1344588..f8603f06fa0 100644
--- a/sql/opt_sum.cc
+++ b/sql/opt_sum.cc
@@ -636,12 +636,12 @@ static bool matching_cond(bool max_fl, TABLE_REF *ref, KEY *keyinfo,
key_part_map org_key_part_used= *key_part_used;
if (eq_type || between || max_fl == less_fl)
{
- uint length= (key_ptr-ref->key_buff)+part->store_length;
+ size_t length= (key_ptr-ref->key_buff)+part->store_length;
if (ref->key_length < length)
/* Ultimately ref->key_length will contain the length of the search key */
- ref->key_length= length;
+ ref->key_length= (uint) length;
if (!*prefix_len && part+1 == field_part)
- *prefix_len= length;
+ *prefix_len= (uint) length;
if (is_field_part && eq_type)
*prefix_len= ref->key_length;
diff --git a/sql/parse_file.cc b/sql/parse_file.cc
index c4b07ed9dac..03e0d25b885 100644
--- a/sql/parse_file.cc
+++ b/sql/parse_file.cc
@@ -215,7 +215,7 @@ sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name,
dir->str, file_name->str, (ulong) base));
fn_format(path, file_name->str, dir->str, 0, MY_UNPACK_FILENAME);
- path_end= strlen(path);
+ path_end= (uint) strlen(path);
// temporary file name
path[path_end]='~';
@@ -411,7 +411,7 @@ sql_parse_prepare(const LEX_STRING *file_name, MEM_ROOT *mem_root,
sign++;
if (*sign != '\n')
goto frm_error;
- parser->file_type.length= sign - parser->file_type.str;
+ parser->file_type.length= (uint) (sign - parser->file_type.str);
// EOS for file signature just for safety
*sign= '\0';
@@ -456,7 +456,7 @@ parse_string(char *ptr, char *end, MEM_ROOT *mem_root, LEX_STRING *str)
if (eol >= end)
return 0;
- str->length= eol - ptr;
+ str->length= (uint) (eol - ptr);
if (!(str->str= alloc_root(mem_root, str->length+1)))
return 0;
@@ -521,7 +521,7 @@ read_escaped_string(char *ptr, char *eol, LEX_STRING *str)
else
*write_pos= c;
}
- str->str[str->length= write_pos-str->str]= '\0'; // just for safety
+ str->str[str->length= (uint) (write_pos - str->str)]= '\0'; // just for safety
return FALSE;
}
@@ -548,7 +548,7 @@ parse_escaped_string(char *ptr, char *end, MEM_ROOT *mem_root, LEX_STRING *str)
char *eol= strchr(ptr, '\n');
if (eol == 0 || eol >= end ||
- !(str->str= alloc_root(mem_root, (eol - ptr) + 1)) ||
+ !(str->str= alloc_root(mem_root, (uint) ((eol - ptr) + 1))) ||
read_escaped_string(ptr, eol, str))
return 0;
diff --git a/sql/protocol.cc b/sql/protocol.cc
index 2309bac88a9..728b9954f6a 100644
--- a/sql/protocol.cc
+++ b/sql/protocol.cc
@@ -306,7 +306,7 @@ send_ok(THD *thd, ha_rows affected_rows, ulonglong id, const char *message)
pos+=2;
}
if (message)
- pos=net_store_data((char*) pos, message, strlen(message));
+ pos=net_store_data((char*) pos, message, (uint) strlen(message));
VOID(my_net_write(net,buff,(uint) (pos-buff)));
VOID(net_flush(net));
/* We can't anymore send an error to the client */
@@ -641,7 +641,8 @@ bool Protocol::send_fields(List<Item> *list, uint flags)
field.length / item->collation.collation->mbminlen :
field.length / item->collation.collation->mbmaxlen;
max_length*= thd_charset->mbmaxlen;
- field_length= (max_length > UINT_MAX32) ? UINT_MAX32 : max_length;
+ field_length= (max_length > UINT_MAX32) ?
+ UINT_MAX32 : (uint32) max_length;
int4store(pos + 2, field_length);
}
pos[6]= field.type;
@@ -734,8 +735,8 @@ bool Protocol::store(const char *from, CHARSET_INFO *cs)
{
if (!from)
return store_null();
- uint length= strlen(from);
- return store(from, length, cs);
+ size_t length= strlen(from);
+ return store(from, (uint) length, cs);
}
diff --git a/sql/set_var.cc b/sql/set_var.cc
index a29abe6581f..735bb5279bd 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -1927,7 +1927,7 @@ Item *sys_var::item(THD *thd, enum_var_type var_type, LEX_STRING *base)
pthread_mutex_lock(&LOCK_global_system_variables);
char *str= (char*) value_ptr(thd, var_type, base);
if (str)
- tmp= new Item_string(str, strlen(str),
+ tmp= new Item_string(str, (uint) strlen(str),
charset(thd), DERIVATION_SYSCONST);
else
{
@@ -2079,7 +2079,7 @@ void sys_var_thd_date_time_format::set_default(THD *thd, enum_var_type type)
{
const char *format;
if ((format= opt_date_time_formats[date_time_type]))
- res= date_time_format_make(date_time_type, format, strlen(format));
+ res= date_time_format_make(date_time_type, format, (uint) strlen(format));
}
else
{
@@ -3166,10 +3166,10 @@ static byte *get_tmpdir(THD *thd)
static struct my_option *find_option(struct my_option *opt, const char *name)
{
- uint length=strlen(name);
+ size_t length=strlen(name);
for (; opt->name; opt++)
{
- if (!getopt_compare_strings(opt->name, name, length) &&
+ if (!getopt_compare_strings(opt->name, name, (uint) length) &&
!opt->name[length])
{
/*
@@ -3210,7 +3210,7 @@ void set_var_init()
var < end;
var++)
{
- (*var)->name_length= strlen((*var)->name);
+ (*var)->name_length= (uint) strlen((*var)->name);
(*var)->option_limits= find_option(my_long_options, (*var)->name);
my_hash_insert(&system_variable_hash, (byte*) *var);
}
@@ -3249,7 +3249,7 @@ sys_var *find_sys_var(const char *str, uint length)
sys_var *var= (sys_var*) hash_search(&system_variable_hash,
(byte*) str,
length ? length :
- strlen(str));
+ (uint) strlen(str));
if (!var)
my_error(ER_UNKNOWN_SYSTEM_VARIABLE, MYF(0), (char*) str);
return var;
@@ -3479,7 +3479,7 @@ int set_var_password::check(THD *thd)
if (*thd->security_ctx->priv_host != 0)
{
user->host.str= (char *) thd->security_ctx->priv_host;
- user->host.length= strlen(thd->security_ctx->priv_host);
+ user->host.length= (uint) strlen(thd->security_ctx->priv_host);
}
else
{
@@ -3495,7 +3495,7 @@ int set_var_password::check(THD *thd)
}
/* Returns 1 as the function sends error to client */
return check_change_password(thd, user->host.str, user->user.str,
- password, strlen(password)) ? 1 : 0;
+ password, (uint) strlen(password)) ? 1 : 0;
#else
return 0;
#endif
diff --git a/sql/slave.cc b/sql/slave.cc
index b4e74f8e68d..cc82710dec7 100644
--- a/sql/slave.cc
+++ b/sql/slave.cc
@@ -1003,7 +1003,7 @@ int db_ok_with_wild_table(const char *db)
int len;
end= strmov(hash_key, db);
*end++= '.';
- len= end - hash_key ;
+ len= (uint) (end - hash_key);
if (wild_do_table_inited && find_wild(&replicate_wild_do_table,
hash_key, len))
return 1;
@@ -1189,7 +1189,7 @@ void skip_load_data_infile(NET *net)
bool net_request_file(NET* net, const char* fname)
{
DBUG_ENTER("net_request_file");
- DBUG_RETURN(net_write_command(net, 251, fname, strlen(fname), "", 0));
+ DBUG_RETURN(net_write_command(net, 251, fname, (uint) strlen(fname), "", 0));
}
@@ -1581,7 +1581,7 @@ static int create_table_from_dump(THD* thd, MYSQL *mysql, const char* db,
save_db = thd->db;
save_db_length= thd->db_length;
DBUG_ASSERT(db != 0);
- thd->reset_db((char*)db, strlen(db));
+ thd->reset_db((char*)db, (uint) strlen(db));
mysql_parse(thd, thd->query, packet_len, &found_semicolon); // run create table
thd->db = save_db; // leave things the way the were before
thd->db_length= save_db_length;
@@ -2314,11 +2314,11 @@ int register_slave_on_master(MYSQL* mysql)
if (!report_host)
return 0;
- report_host_len= strlen(report_host);
+ report_host_len= (uint) strlen(report_host);
if (report_user)
- report_user_len= strlen(report_user);
+ report_user_len= (uint) strlen(report_user);
if (report_password)
- report_password_len= strlen(report_password);
+ report_password_len= (uint) strlen(report_password);
/* 30 is a good safety margin */
if (report_host_len + report_user_len + report_password_len + 30 >
sizeof(buf))
@@ -3043,7 +3043,7 @@ static int request_table_dump(MYSQL* mysql, const char* db, const char* table)
*p++ = table_len;
memcpy(p, table, table_len);
- if (simple_command(mysql, COM_TABLE_DUMP, buf, p - buf + table_len, 1))
+ if (simple_command(mysql, COM_TABLE_DUMP, buf, (uint) (p - buf + table_len), 1))
{
sql_print_error("request_table_dump: Error sending the table dump \
command");
diff --git a/sql/sp.cc b/sql/sp.cc
index d2a12f2190f..3af51b82521 100644
--- a/sql/sp.cc
+++ b/sql/sp.cc
@@ -414,7 +414,7 @@ db_load_routine(THD *thd, int type, sp_name *name, sp_head **sphp,
thd->lex= &newlex;
newlex.current_select= NULL;
- parse_user(definer, strlen(definer),
+ parse_user(definer, (uint) strlen(definer),
definer_user_name.str, &definer_user_name.length,
definer_host_name.str, &definer_host_name.length);
@@ -929,7 +929,7 @@ sp_drop_db_routines(THD *thd, char *db)
if (!(table= open_proc_table_for_update(thd)))
goto err;
- table->field[MYSQL_PROC_FIELD_DB]->store(db, strlen(db), system_charset_info);
+ table->field[MYSQL_PROC_FIELD_DB]->store(db, (uint) strlen(db), system_charset_info);
key_len= table->key_info->key_part[0].store_length;
ret= SP_OK;
@@ -1099,8 +1099,8 @@ sp_exist_routines(THD *thd, TABLE_LIST *routines, bool any, bool no_error)
sp_name *name;
LEX_STRING lex_db;
LEX_STRING lex_name;
- lex_db.length= strlen(routine->db);
- lex_name.length= strlen(routine->table_name);
+ lex_db.length= (uint) strlen(routine->db);
+ lex_name.length= (uint) strlen(routine->table_name);
lex_db.str= thd->strmake(routine->db, lex_db.length);
lex_name.str= thd->strmake(routine->table_name, lex_name.length);
name= new sp_name(lex_db, lex_name, true);
@@ -1918,7 +1918,7 @@ sp_use_new_db(THD *thd, LEX_STRING new_db, LEX_STRING *old_db,
if (thd->db)
{
- old_db->length= (strmake(old_db->str, thd->db, old_db->length - 1) -
+ old_db->length= (uint) (strmake(old_db->str, thd->db, old_db->length - 1) -
old_db->str);
}
else
diff --git a/sql/sp_head.cc b/sql/sp_head.cc
index 3ec6dd5cf06..b51d97e66c5 100644
--- a/sql/sp_head.cc
+++ b/sql/sp_head.cc
@@ -381,7 +381,7 @@ sp_name::sp_name(THD *thd, char *key, uint key_len)
m_qname.length= key_len - 1;
if ((m_name.str= strchr(m_qname.str, '.')))
{
- m_db.length= m_name.str - key;
+ m_db.length= (uint) (m_name.str - key);
m_db.str= strmake_root(thd->mem_root, key, m_db.length);
m_name.str++;
m_name.length= m_qname.length - m_db.length - 1;
@@ -447,7 +447,7 @@ sp_head::operator new(size_t size) throw()
sp_head *sp;
init_sql_alloc(&own_root, MEM_ROOT_BLOCK_SIZE, MEM_ROOT_PREALLOC);
- sp= (sp_head *) alloc_root(&own_root, size);
+ sp= (sp_head *) alloc_root(&own_root, (uint) size);
if (sp == NULL)
DBUG_RETURN(NULL);
sp->main_mem_root= own_root;
@@ -598,7 +598,7 @@ sp_head::init_strings(THD *thd, LEX *lex)
if (m_param_begin && m_param_end)
{
- m_params.length= m_param_end - m_param_begin;
+ m_params.length= (uint) (m_param_end - m_param_begin);
m_params.str= strmake_root(root,
(char *)m_param_begin, m_params.length);
}
@@ -611,9 +611,9 @@ sp_head::init_strings(THD *thd, LEX *lex)
*/
endp= skip_rear_comments(thd->charset(), (char*) m_body_begin, (char*) endp);
- m_body.length= endp - m_body_begin;
+ m_body.length= (uint) (endp - m_body_begin);
m_body.str= strmake_root(root, m_body_begin, m_body.length);
- m_defstr.length= endp - lip->buf;
+ m_defstr.length= (uint) (endp - lip->buf);
m_defstr.str= strmake_root(root, lip->buf, m_defstr.length);
DBUG_VOID_RETURN;
}
@@ -3606,7 +3606,7 @@ sp_head::merge_table_list(THD *thd, TABLE_LIST *table, LEX *lex_for_tmp_check)
memcpy(tname+tlen, table->table_name, table->table_name_length);
tlen+= table->table_name_length;
tname[tlen++]= '\0';
- alen= strlen(table->alias);
+ alen= (uint) strlen(table->alias);
memcpy(tname+tlen, table->alias, alen);
tlen+= alen;
tname[tlen]= '\0';
@@ -3771,9 +3771,9 @@ sp_add_to_query_tables(THD *thd, LEX *lex,
thd->fatal_error();
return NULL;
}
- table->db_length= strlen(db);
+ table->db_length= (uint) strlen(db);
table->db= thd->strmake(db, table->db_length);
- table->table_name_length= strlen(name);
+ table->table_name_length= (uint) strlen(name);
table->table_name= thd->strmake(name, table->table_name_length);
table->alias= thd->strdup(name);
table->lock_type= locktype;
diff --git a/sql/spatial.cc b/sql/spatial.cc
index 69d0c15748a..80506f16d0f 100644
--- a/sql/spatial.cc
+++ b/sql/spatial.cc
@@ -54,7 +54,7 @@ static Geometry::Class_info **ci_collection_end=
Geometry::Class_info::Class_info(const char *name, int type_id,
void(*create_func)(void *)):
- m_name(name, strlen(name)), m_type_id(type_id), m_create_func(create_func)
+ m_name(name, (uint) strlen(name)), m_type_id(type_id), m_create_func(create_func)
{
ci_collection[type_id]= this;
}
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index c59c42d512a..b2d0304f007 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -313,8 +313,8 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
}
const char *password= get_field(thd->mem_root, table->field[2]);
- uint password_len= password ? strlen(password) : 0;
- set_user_salt(&user, password, password_len);
+ size_t password_len= password ? strlen(password) : 0;
+ set_user_salt(&user, password, (uint) password_len);
if (user.salt_len == 0 && password_len != 0)
{
switch (password_len) {
@@ -1405,7 +1405,7 @@ int check_change_password(THD *thd, const char *host, const char *user,
MYF(0));
return(1);
}
- uint len=strlen(new_password);
+ size_t len= strlen(new_password);
if (len && len != SCRAMBLED_PASSWORD_CHAR_LENGTH &&
len != SCRAMBLED_PASSWORD_CHAR_LENGTH_323)
{
@@ -1439,14 +1439,14 @@ bool change_password(THD *thd, const char *host, const char *user,
/* Buffer should be extended when password length is extended. */
char buff[512];
ulong query_length;
- uint new_password_len= strlen(new_password);
+ size_t new_password_len= strlen(new_password);
bool result= 1;
DBUG_ENTER("change_password");
DBUG_PRINT("enter",("host: '%s' user: '%s' new_password: '%s'",
host,user,new_password));
DBUG_ASSERT(host != 0); // Ensured by parent
- if (check_change_password(thd, host, user, new_password, new_password_len))
+ if (check_change_password(thd, host, user, new_password, (uint) new_password_len))
DBUG_RETURN(1);
bzero((char*) &tables, sizeof(tables));
@@ -1483,12 +1483,12 @@ bool change_password(THD *thd, const char *host, const char *user,
goto end;
}
/* update loaded acl entry: */
- set_user_salt(acl_user, new_password, new_password_len);
+ set_user_salt(acl_user, new_password, (uint) new_password_len);
if (update_user_table(thd, table,
acl_user->host.hostname ? acl_user->host.hostname : "",
acl_user->user ? acl_user->user : "",
- new_password, new_password_len))
+ new_password, (uint) new_password_len))
{
VOID(pthread_mutex_unlock(&acl_cache->lock)); /* purecov: deadcode */
goto end;
@@ -1641,11 +1641,11 @@ bool hostname_requires_resolving(const char *hostname)
char cur;
if (!hostname)
return FALSE;
- int namelen= strlen(hostname);
- int lhlen= strlen(my_localhost);
+ size_t namelen= strlen(hostname);
+ size_t lhlen= strlen(my_localhost);
if ((namelen == lhlen) &&
- !my_strnncoll(system_charset_info, (const uchar *)hostname, namelen,
- (const uchar *)my_localhost, strlen(my_localhost)))
+ !my_strnncoll(system_charset_info, (const uchar *)hostname, (uint) namelen,
+ (const uchar *)my_localhost, (uint) strlen(my_localhost)))
return FALSE;
for (; (cur=*hostname); hostname++)
{
@@ -1873,13 +1873,13 @@ static int replace_user_table(THD *thd, TABLE *table, const LEX_USER &combo,
table->field[next_field+3]->store("", 0, &my_charset_latin1);
if (lex->ssl_cipher)
table->field[next_field+1]->store(lex->ssl_cipher,
- strlen(lex->ssl_cipher), system_charset_info);
+ (uint) strlen(lex->ssl_cipher), system_charset_info);
if (lex->x509_issuer)
table->field[next_field+2]->store(lex->x509_issuer,
- strlen(lex->x509_issuer), system_charset_info);
+ (uint) strlen(lex->x509_issuer), system_charset_info);
if (lex->x509_subject)
table->field[next_field+3]->store(lex->x509_subject,
- strlen(lex->x509_subject), system_charset_info);
+ (uint) strlen(lex->x509_subject), system_charset_info);
break;
case SSL_TYPE_NOT_SPECIFIED:
break;
@@ -4202,10 +4202,10 @@ static void add_user_option(String *grant, ulong value, const char *name)
{
char buff[22], *p; // just as in int2str
grant->append(' ');
- grant->append(name, strlen(name));
+ grant->append(name, (uint) strlen(name));
grant->append(' ');
p=int10_to_str(value, buff, 10);
- grant->append(buff,p-buff);
+ grant->append(buff,(uint) (p - buff));
}
}
@@ -4343,7 +4343,7 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
{
ssl_options++;
global.append(STRING_WITH_LEN("ISSUER \'"));
- global.append(acl_user->x509_issuer,strlen(acl_user->x509_issuer));
+ global.append(acl_user->x509_issuer,(uint) strlen(acl_user->x509_issuer));
global.append('\'');
}
if (acl_user->x509_subject)
@@ -4351,7 +4351,7 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
if (ssl_options++)
global.append(' ');
global.append(STRING_WITH_LEN("SUBJECT \'"));
- global.append(acl_user->x509_subject,strlen(acl_user->x509_subject),
+ global.append(acl_user->x509_subject,(uint) strlen(acl_user->x509_subject),
system_charset_info);
global.append('\'');
}
@@ -4360,7 +4360,7 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
if (ssl_options++)
global.append(' ');
global.append(STRING_WITH_LEN("CIPHER '"));
- global.append(acl_user->ssl_cipher,strlen(acl_user->ssl_cipher),
+ global.append(acl_user->ssl_cipher,(uint) strlen(acl_user->ssl_cipher),
system_charset_info);
global.append('\'');
}
@@ -4440,13 +4440,13 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
}
}
db.append (STRING_WITH_LEN(" ON "));
- append_identifier(thd, &db, acl_db->db, strlen(acl_db->db));
+ append_identifier(thd, &db, acl_db->db, (uint) strlen(acl_db->db));
db.append (STRING_WITH_LEN(".* TO '"));
db.append(lex_user->user.str, lex_user->user.length,
system_charset_info);
db.append (STRING_WITH_LEN("'@'"));
// host and lex_user->host are equal except for case
- db.append(host, strlen(host), system_charset_info);
+ db.append(host, (uint) strlen(host), system_charset_info);
db.append ('\'');
if (want_access & GRANT_ACL)
db.append(STRING_WITH_LEN(" WITH GRANT OPTION"));
@@ -4552,16 +4552,16 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
}
global.append(STRING_WITH_LEN(" ON "));
append_identifier(thd, &global, grant_table->db,
- strlen(grant_table->db));
+ (uint) strlen(grant_table->db));
global.append('.');
append_identifier(thd, &global, grant_table->tname,
- strlen(grant_table->tname));
+ (uint) strlen(grant_table->tname));
global.append(STRING_WITH_LEN(" TO '"));
global.append(lex_user->user.str, lex_user->user.length,
system_charset_info);
global.append(STRING_WITH_LEN("'@'"));
// host and lex_user->host are equal except for case
- global.append(host, strlen(host), system_charset_info);
+ global.append(host, (uint) strlen(host), system_charset_info);
global.append('\'');
if (table_access & GRANT_ACL)
global.append(STRING_WITH_LEN(" WITH GRANT OPTION"));
@@ -4658,16 +4658,16 @@ static int show_routine_grants(THD* thd, LEX_USER *lex_user, HASH *hash,
global.append(type,typelen);
global.append(' ');
append_identifier(thd, &global, grant_proc->db,
- strlen(grant_proc->db));
+ (uint) strlen(grant_proc->db));
global.append('.');
append_identifier(thd, &global, grant_proc->tname,
- strlen(grant_proc->tname));
+ (uint) strlen(grant_proc->tname));
global.append(STRING_WITH_LEN(" TO '"));
global.append(lex_user->user.str, lex_user->user.length,
system_charset_info);
global.append(STRING_WITH_LEN("'@'"));
// host and lex_user->host are equal except for case
- global.append(host, strlen(host), system_charset_info);
+ global.append(host, (uint) strlen(host), system_charset_info);
global.append('\'');
if (proc_access & GRANT_ACL)
global.append(STRING_WITH_LEN(" WITH GRANT OPTION"));
@@ -5785,11 +5785,11 @@ bool sp_revoke_privileges(THD *thd, const char *sp_db, const char *sp_name,
{
LEX_USER lex_user;
lex_user.user.str= grant_proc->user;
- lex_user.user.length= strlen(grant_proc->user);
+ lex_user.user.length= (uint) strlen(grant_proc->user);
lex_user.host.str= grant_proc->host.hostname ?
grant_proc->host.hostname : (char*)"";
lex_user.host.length= grant_proc->host.hostname ?
- strlen(grant_proc->host.hostname) : 0;
+ (uint) strlen(grant_proc->host.hostname) : 0;
if (!replace_routine_table(thd,grant_proc,tables[4].table,lex_user,
grant_proc->db, grant_proc->tname,
is_proc, ~(ulong)0, 1))
@@ -5868,8 +5868,8 @@ int sp_grant_privileges(THD *thd, const char *sp_db, const char *sp_name,
tables->db= (char*)sp_db;
tables->table_name= tables->alias= (char*)sp_name;
- combo->host.length= strlen(combo->host.str);
- combo->user.length= strlen(combo->user.str);
+ combo->host.length= (uint) strlen(combo->host.str);
+ combo->user.length= (uint) strlen(combo->user.str);
combo->host.str= thd->strmake(combo->host.str,combo->host.length);
combo->user.str= thd->strmake(combo->user.str,combo->user.length);
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 781bbc0a553..0cf3e023be9 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -780,10 +780,10 @@ void close_temporary_tables(THD *thd)
We are going to add 4 ` around the db/table names and possible more
due to special characters in the names
*/
- append_identifier(thd, &s_query, table->s->db, strlen(table->s->db));
+ append_identifier(thd, &s_query, table->s->db, (uint) strlen(table->s->db));
s_query.q_append('.');
append_identifier(thd, &s_query, table->s->table_name,
- strlen(table->s->table_name));
+ (uint) strlen(table->s->table_name));
s_query.q_append(',');
next= table->next;
close_temporary(table, 1);
@@ -3690,7 +3690,7 @@ find_field_in_table(THD *thd, TABLE *table, const char *name, uint length,
if (field_ptr && *field_ptr)
{
- *cached_field_index_ptr= field_ptr - table->field;
+ *cached_field_index_ptr= (uint) (field_ptr - table->field);
field= *field_ptr;
}
else
@@ -5992,7 +5992,7 @@ my_bool mysql_rm_tmp_tables(void)
if (!bcmp(file->name,tmp_file_prefix,tmp_file_prefix_length))
{
char *ext= fn_ext(file->name);
- uint ext_len= strlen(ext);
+ size_t ext_len= strlen(ext);
uint filePath_len= my_snprintf(filePath, sizeof(filePath),
"%s%s", tmpdir, file->name);
if (!bcmp(reg_ext, ext, ext_len))
@@ -6264,7 +6264,7 @@ open_new_frm(THD *thd, const char *path, const char *alias,
DBUG_ENTER("open_new_frm");
pathstr.str= (char*) path;
- pathstr.length= strlen(path);
+ pathstr.length= (uint) strlen(path);
if ((parser= sql_parse_prepare(&pathstr, mem_root, 1)))
{
diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc
index b55fa148e24..bd56994e216 100644
--- a/sql/sql_cache.cc
+++ b/sql/sql_cache.cc
@@ -363,6 +363,43 @@ TYPELIB query_cache_type_typelib=
array_elements(query_cache_type_names)-1,"", query_cache_type_names, NULL
};
+
+/**
+ Helper function for determine if a SELECT statement has a SQL_NO_CACHE
+ directive.
+
+ @param sql A pointer to the first white space character after SELECT
+
+ @return
+ @retval TRUE The character string contains SQL_NO_CACHE
+ @retval FALSE No directive found.
+*/
+
+static bool has_no_cache_directive(char *sql)
+{
+ int i=0;
+ while (sql[i] == ' ')
+ ++i;
+
+ if (my_toupper(system_charset_info, sql[i]) == 'S' &&
+ my_toupper(system_charset_info, sql[i+1]) == 'Q' &&
+ my_toupper(system_charset_info, sql[i+2]) == 'L' &&
+ my_toupper(system_charset_info, sql[i+3]) == '_' &&
+ my_toupper(system_charset_info, sql[i+4]) == 'N' &&
+ my_toupper(system_charset_info, sql[i+5]) == 'O' &&
+ my_toupper(system_charset_info, sql[i+6]) == '_' &&
+ my_toupper(system_charset_info, sql[i+7]) == 'C' &&
+ my_toupper(system_charset_info, sql[i+8]) == 'A' &&
+ my_toupper(system_charset_info, sql[i+9]) == 'C' &&
+ my_toupper(system_charset_info, sql[i+10]) == 'H' &&
+ my_toupper(system_charset_info, sql[i+11]) == 'E' &&
+ my_toupper(system_charset_info, sql[i+12]) == ' ')
+ return TRUE;
+
+ return FALSE;
+}
+
+
/*****************************************************************************
Query_cache_block_table method(s)
*****************************************************************************/
@@ -1095,6 +1132,16 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length)
DBUG_PRINT("qcache", ("The statement is not a SELECT; Not cached"));
goto err;
}
+
+ if (query_length > 20 && has_no_cache_directive(&sql[i+6]))
+ {
+ /*
+ We do not increase 'refused' statistics here since it will be done
+ later when the query is parsed.
+ */
+ DBUG_PRINT("qcache", ("The statement has a SQL_NO_CACHE directive"));
+ goto err;
+ }
}
#ifdef __WIN__
@@ -3126,7 +3173,7 @@ Query_cache::process_and_count_tables(THD *thd, TABLE_LIST *tables_used,
{
ha_myisammrg *handler = (ha_myisammrg *)tables_used->table->file;
MYRG_INFO *file = handler->myrg_info();
- table_count+= (file->end_table - file->open_tables);
+ table_count+= (uint) (file->end_table - file->open_tables);
}
}
}
@@ -3313,7 +3360,7 @@ my_bool Query_cache::move_by_type(byte **border,
*pprev = block->pprev,
*pnext = block->pnext,
*new_block =(Query_cache_block *) *border;
- uint tablename_offset = block->table()->table() - block->table()->db();
+ size_t tablename_offset= block->table()->table() - block->table()->db();
char *data = (char*) block->data();
byte *key;
uint key_length;
@@ -3625,7 +3672,7 @@ uint Query_cache::filename_2_table_key (char *key, const char *path,
filename= tablename + dirname_length(tablename + 2) + 2;
/* Find start of databasename */
for (dbname= filename - 2 ; dbname[-1] != FN_LIBCHAR ; dbname--) ;
- *db_length= (filename - dbname) - 1;
+ *db_length= (uint) ((filename - dbname) - 1);
DBUG_PRINT("qcache", ("table '%-.*s.%s'", *db_length, dbname, filename));
DBUG_RETURN((uint) (strmov(strmake(key, dbname, *db_length) + 1,
@@ -3934,8 +3981,8 @@ my_bool Query_cache::check_integrity(bool locked)
}
else
{
- int idx = (((byte*)bin) - ((byte*)bins)) /
- sizeof(Query_cache_memory_bin);
+ int idx = (int) ((((byte*)bin) - ((byte*)bins)) /
+ sizeof(Query_cache_memory_bin));
if (in_list(bins[idx].free_blocks, block, "free memory"))
result = 1;
}
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 4ea621f428d..74bc669a049 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -343,6 +343,12 @@ void THD::init(void)
if (variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES)
server_status|= SERVER_STATUS_NO_BACKSLASH_ESCAPES;
options= thd_startup_options;
+
+ if (variables.max_join_size == HA_POS_ERROR)
+ options |= OPTION_BIG_SELECTS;
+ else
+ options &= ~OPTION_BIG_SELECTS;
+
transaction.all.modified_non_trans_table= transaction.stmt.modified_non_trans_table= FALSE;
open_options=ha_open_options;
update_lock_default= (variables.low_priority_updates ?
@@ -1752,7 +1758,7 @@ void Query_arena::set_query_arena(Query_arena *set)
void Query_arena::cleanup_stmt()
{
- DBUG_ASSERT("Query_arena::cleanup_stmt()" == "not implemented");
+ DBUG_ASSERT(! "Query_arena::cleanup_stmt() not implemented");
}
/*
diff --git a/sql/sql_crypt.cc b/sql/sql_crypt.cc
index 367b9e38e56..38dfc869b3a 100644
--- a/sql/sql_crypt.cc
+++ b/sql/sql_crypt.cc
@@ -31,7 +31,7 @@
SQL_CRYPT::SQL_CRYPT(const char *password)
{
ulong rand_nr[2];
- hash_password(rand_nr,password, strlen(password));
+ hash_password(rand_nr,password, (uint) strlen(password));
crypt_init(rand_nr);
}
diff --git a/sql/sql_db.cc b/sql/sql_db.cc
index c3cf7429222..80fea3ef1b1 100644
--- a/sql/sql_db.cc
+++ b/sql/sql_db.cc
@@ -239,7 +239,7 @@ void del_dbopt(const char *path)
my_dbopt_t *opt;
rw_wrlock(&LOCK_dboptions);
if ((opt= (my_dbopt_t *)hash_search(&dboptions, (const byte*) path,
- strlen(path))))
+ (uint) strlen(path))))
hash_delete(&dboptions, (byte*) opt);
rw_unlock(&LOCK_dboptions);
}
@@ -582,7 +582,7 @@ int mysql_create_db(THD *thd, char *db, HA_CREATE_INFO *create_info,
# database does not exist.
*/
qinfo.db = db;
- qinfo.db_len = strlen(db);
+ qinfo.db_len = (uint) strlen(db);
/* These DDL methods and logging protected with LOCK_mysql_create_db */
mysql_bin_log.write(&qinfo);
@@ -653,7 +653,7 @@ bool mysql_alter_db(THD *thd, const char *db, HA_CREATE_INFO *create_info)
default.
*/
qinfo.db = db;
- qinfo.db_len = strlen(db);
+ qinfo.db_len = (uint) strlen(db);
thd->clear_error();
/* These DDL methods and logging protected with LOCK_mysql_create_db */
@@ -777,7 +777,7 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
default.
*/
qinfo.db = db;
- qinfo.db_len = strlen(db);
+ qinfo.db_len = (uint) strlen(db);
thd->clear_error();
/* These DDL methods and logging protected with LOCK_mysql_create_db */
@@ -797,18 +797,18 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
goto exit; /* not much else we can do */
query_pos= query_data_start= strmov(query,"drop table ");
query_end= query + MAX_DROP_TABLE_Q_LEN;
- db_len= strlen(db);
+ db_len= (uint) strlen(db);
for (tbl= dropped_tables; tbl; tbl= tbl->next_local)
{
uint tbl_name_len;
/* 3 for the quotes and the comma*/
- tbl_name_len= strlen(tbl->table_name) + 3;
+ tbl_name_len= (uint) strlen(tbl->table_name) + 3;
if (query_pos + tbl_name_len + 1 >= query_end)
{
/* These DDL methods and logging protected with LOCK_mysql_create_db */
- write_to_binlog(thd, query, query_pos -1 - query, db, db_len);
+ write_to_binlog(thd, query, (uint) (query_pos - 1 - query), db, db_len);
query_pos= query_data_start;
}
@@ -821,7 +821,7 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
if (query_pos != query_data_start)
{
/* These DDL methods and logging protected with LOCK_mysql_create_db */
- write_to_binlog(thd, query, query_pos -1 - query, db, db_len);
+ write_to_binlog(thd, query, (uint) (query_pos - 1 - query), db, db_len);
}
}
@@ -938,7 +938,7 @@ static long mysql_rm_known_files(THD *thd, MY_DIR *dirp, const char *db,
/* Drop the table nicely */
*extension= 0; // Remove extension
TABLE_LIST *table_list=(TABLE_LIST*)
- thd->calloc(sizeof(*table_list)+ strlen(db)+strlen(file->name)+2);
+ thd->calloc((uint) (sizeof(*table_list)+ strlen(db)+strlen(file->name)+2));
if (!table_list)
goto err;
table_list->db= (char*) (table_list+1);
diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc
index 84622398f6f..830d1b7c36f 100644
--- a/sql/sql_derived.cc
+++ b/sql/sql_derived.cc
@@ -177,7 +177,7 @@ exit:
orig_table_list->derived_result= derived_result;
orig_table_list->table= table;
orig_table_list->table_name= (char*) table->s->table_name;
- orig_table_list->table_name_length= strlen((char*)table->s->table_name);
+ orig_table_list->table_name_length= (uint) strlen((char*)table->s->table_name);
table->derived_select_number= first_select->select_number;
table->s->tmp_table= NON_TRANSACTIONAL_TMP_TABLE;
#ifndef NO_EMBEDDED_ACCESS_CHECKS
diff --git a/sql/sql_error.cc b/sql/sql_error.cc
index 344a0c00db8..8f825f83df1 100644
--- a/sql/sql_error.cc
+++ b/sql/sql_error.cc
@@ -243,7 +243,7 @@ bool mysqld_show_warnings(THD *thd, ulong levels_to_show)
protocol->store(warning_level_names[err->level],
warning_level_length[err->level], system_charset_info);
protocol->store((uint32) err->code);
- protocol->store(err->msg, strlen(err->msg), system_charset_info);
+ protocol->store(err->msg, (uint) strlen(err->msg), system_charset_info);
if (protocol->write())
DBUG_RETURN(TRUE);
}
diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc
index f58a4ec4921..c376f1b3d1d 100644
--- a/sql/sql_handler.cc
+++ b/sql/sql_handler.cc
@@ -90,7 +90,7 @@ static int mysql_ha_flush_table(THD *thd, TABLE **table_ptr, uint mode_flags);
static char *mysql_ha_hash_get_key(TABLE_LIST *tables, uint *key_len_p,
my_bool first __attribute__((unused)))
{
- *key_len_p= strlen(tables->alias) + 1 ; /* include '\0' in comparisons */
+ *key_len_p= (uint) strlen(tables->alias) + 1 ; /* include '\0' in comparisons */
return tables->alias;
}
@@ -204,7 +204,7 @@ bool mysql_ha_open(THD *thd, TABLE_LIST *tables, bool reopen)
else if (! reopen) /* Otherwise we have 'tables' already. */
{
if (hash_search(&thd->handler_tables_hash, (byte*) tables->alias,
- strlen(tables->alias) + 1))
+ (uint) strlen(tables->alias) + 1))
{
DBUG_PRINT("info",("duplicate '%s'", tables->alias));
my_error(ER_NONUNIQ_TABLE, MYF(0), tables->alias);
@@ -259,9 +259,9 @@ bool mysql_ha_open(THD *thd, TABLE_LIST *tables, bool reopen)
if (! reopen)
{
/* copy the TABLE_LIST struct */
- dblen= strlen(tables->db) + 1;
- namelen= strlen(tables->table_name) + 1;
- aliaslen= strlen(tables->alias) + 1;
+ dblen= (uint) strlen(tables->db) + 1;
+ namelen= (uint) strlen(tables->table_name) + 1;
+ aliaslen= (uint) strlen(tables->alias) + 1;
if (!(my_multi_malloc(MYF(MY_WME),
&hash_tables, sizeof(*hash_tables),
&db, dblen,
@@ -324,7 +324,7 @@ bool mysql_ha_close(THD *thd, TABLE_LIST *tables)
if ((hash_tables= (TABLE_LIST*) hash_search(&thd->handler_tables_hash,
(byte*) tables->alias,
- strlen(tables->alias) + 1)))
+ (uint) strlen(tables->alias) + 1)))
{
mysql_ha_close_table(thd, hash_tables);
hash_delete(&thd->handler_tables_hash, (byte*) hash_tables);
@@ -396,7 +396,7 @@ bool mysql_ha_read(THD *thd, TABLE_LIST *tables,
retry:
if ((hash_tables= (TABLE_LIST*) hash_search(&thd->handler_tables_hash,
(byte*) tables->alias,
- strlen(tables->alias) + 1)))
+ (uint) strlen(tables->alias) + 1)))
{
table= hash_tables->table;
DBUG_PRINT("info-in-hash",("'%s'.'%s' as '%s' tab %p",
@@ -778,7 +778,7 @@ static int mysql_ha_flush_table(THD *thd, TABLE **table_ptr, uint mode_flags)
if ((hash_tables= (TABLE_LIST*) hash_search(&thd->handler_tables_hash,
(byte*) table->alias,
- strlen(table->alias) + 1)))
+ (uint) strlen(table->alias) + 1)))
{
if (! (mode_flags & MYSQL_HA_REOPEN_ON_USAGE))
{
diff --git a/sql/sql_help.cc b/sql/sql_help.cc
index 6036a687274..e369a72fa9f 100644
--- a/sql/sql_help.cc
+++ b/sql/sql_help.cc
@@ -628,7 +628,7 @@ bool mysqld_help(THD *thd, const char *mask)
List<String> topics_list, categories_list, subcategories_list;
String name, description, example;
int count_topics, count_categories, error;
- uint mlen= strlen(mask);
+ size_t mlen= strlen(mask);
size_t i;
MEM_ROOT *mem_root= thd->mem_root;
DBUG_ENTER("mysqld_help");
@@ -668,7 +668,7 @@ bool mysqld_help(THD *thd, const char *mask)
tables[i].table->file->init_table_handle_for_HANDLER();
if (!(select=
- prepare_select_for_name(thd,mask,mlen,tables,tables[0].table,
+ prepare_select_for_name(thd,mask,(uint) mlen,tables,tables[0].table,
used_fields[help_topic_name].field,&error)))
goto error;
@@ -681,7 +681,7 @@ bool mysqld_help(THD *thd, const char *mask)
{
int key_id;
if (!(select=
- prepare_select_for_name(thd,mask,mlen,tables,tables[3].table,
+ prepare_select_for_name(thd,mask,(uint) mlen,tables,tables[3].table,
used_fields[help_keyword_name].field,&error)))
goto error;
@@ -698,7 +698,7 @@ bool mysqld_help(THD *thd, const char *mask)
int16 category_id;
Field *cat_cat_id= used_fields[help_category_parent_category_id].field;
if (!(select=
- prepare_select_for_name(thd,mask,mlen,tables,tables[1].table,
+ prepare_select_for_name(thd,mask,(uint) mlen,tables,tables[1].table,
used_fields[help_category_name].field,&error)))
goto error;
@@ -759,7 +759,7 @@ bool mysqld_help(THD *thd, const char *mask)
send_variant_2_list(mem_root,protocol, &topics_list, "N", 0))
goto error;
if (!(select=
- prepare_select_for_name(thd,mask,mlen,tables,tables[1].table,
+ prepare_select_for_name(thd,mask,(uint) mlen,tables,tables[1].table,
used_fields[help_category_name].field,&error)))
goto error;
search_categories(thd, tables[1].table, used_fields,
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index ec16de318cc..b79f979df05 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -1820,7 +1820,7 @@ bool delayed_get_table(THD *thd, TABLE_LIST *table_list)
pthread_mutex_lock(&LOCK_thread_count);
thread_count++;
pthread_mutex_unlock(&LOCK_thread_count);
- di->thd.set_db(table_list->db, strlen(table_list->db));
+ di->thd.set_db(table_list->db, (uint) strlen(table_list->db));
di->thd.query= my_strdup(table_list->table_name, MYF(MY_WME));
if (di->thd.db == NULL || di->thd.query == NULL)
{
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index 71aa80b8170..4c53772bc25 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -858,7 +858,7 @@ int MYSQLlex(void *arg, void *yythd)
case MY_LEX_HEX_NUMBER: // Found x'hexstring'
yyGet(); // Skip '
while (my_isxdigit(cs,(c = yyGet()))) ;
- length=(lip->ptr - lip->tok_start); // Length of hexnum+3
+ length=(uint) (lip->ptr - lip->tok_start); // Length of hexnum+3
if (!(length & 1) || c != '\'')
{
return(ABORT_SYM); // Illegal hex constant
@@ -872,7 +872,7 @@ int MYSQLlex(void *arg, void *yythd)
case MY_LEX_BIN_NUMBER: // Found b'bin-string'
yyGet(); // Skip '
while ((c= yyGet()) == '0' || c == '1');
- length= (lip->ptr - lip->tok_start); // Length of bin-num + 3
+ length= (uint) (lip->ptr - lip->tok_start); // Length of bin-num + 3
if (c != '\'')
return(ABORT_SYM); // Illegal hex constant
yyGet(); // get_token makes an unget
diff --git a/sql/sql_load.cc b/sql/sql_load.cc
index 5477610bb05..5b9f8ea441d 100644
--- a/sql/sql_load.cc
+++ b/sql/sql_load.cc
@@ -526,8 +526,8 @@ static bool write_execute_load_query_log_event(THD *thd,
{
Execute_load_query_log_event
e(thd, thd->query, thd->query_length,
- (char*)thd->lex->fname_start - (char*)thd->query,
- (char*)thd->lex->fname_end - (char*)thd->query,
+ (uint) ((char*)thd->lex->fname_start - (char*)thd->query),
+ (uint) ((char*)thd->lex->fname_end - (char*)thd->query),
(duplicates == DUP_REPLACE) ? LOAD_DUP_REPLACE :
(ignore ? LOAD_DUP_IGNORE : LOAD_DUP_ERROR),
transactional_table, FALSE, killed_err_arg);
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index dafe4baa9e5..2297283c92d 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -250,7 +250,7 @@ static int get_or_create_user_conn(THD *thd, const char *user,
USER_RESOURCES *mqh)
{
int return_val= 0;
- uint temp_len, user_len;
+ size_t temp_len, user_len;
char temp_user[USER_HOST_BUFF_SIZE];
struct user_conn *uc;
@@ -261,7 +261,7 @@ static int get_or_create_user_conn(THD *thd, const char *user,
temp_len= (strmov(strmov(temp_user, user)+1, host) - temp_user)+1;
(void) pthread_mutex_lock(&LOCK_user_conn);
if (!(uc = (struct user_conn *) hash_search(&hash_user_connections,
- (byte*) temp_user, temp_len)))
+ (byte*) temp_user, (uint) temp_len)))
{
/* First connection for user; Create a user connection object */
if (!(uc= ((struct user_conn*)
@@ -275,7 +275,7 @@ static int get_or_create_user_conn(THD *thd, const char *user,
uc->user=(char*) (uc+1);
memcpy(uc->user,temp_user,temp_len+1);
uc->host= uc->user + user_len + 1;
- uc->len= temp_len;
+ uc->len= (uint) temp_len;
uc->connections= uc->questions= uc->updates= uc->conn_per_hour= 0;
uc->user_resources= *mqh;
uc->intime= thd->thr_create_time;
@@ -328,7 +328,7 @@ int check_user(THD *thd, enum enum_server_command command,
bool check_count)
{
DBUG_ENTER("check_user");
- LEX_STRING db_str= { (char *) db, db ? strlen(db) : 0 };
+ LEX_STRING db_str= { (char *) db, db ? (uint) strlen(db) : 0 };
#ifdef NO_EMBEDDED_ACCESS_CHECKS
thd->main_security_ctx.master_access= GLOBAL_ACLS; // Full rights
@@ -1036,7 +1036,7 @@ static int check_connection(THD *thd)
char *user= end;
char *passwd= strend(user)+1;
- uint user_len= passwd - user - 1;
+ size_t user_len= passwd - user - 1;
char *db= passwd;
char db_buff[NAME_LEN + 1]; // buffer to store db in utf8
char user_buff[USERNAME_LENGTH + 1]; // buffer to store user in utf8
@@ -1051,10 +1051,10 @@ static int check_connection(THD *thd)
*passwd > 127 and become 2**32-127 after casting to uint.
*/
uint passwd_len= thd->client_capabilities & CLIENT_SECURE_CONNECTION ?
- (uchar)(*passwd++) : strlen(passwd);
+ (uchar)(*passwd++) : (uint) strlen(passwd);
db= thd->client_capabilities & CLIENT_CONNECT_WITH_DB ?
db + passwd_len + 1 : 0;
- uint db_len= db ? strlen(db) : 0;
+ size_t db_len= db ? strlen(db) : 0;
if (passwd + passwd_len + db_len > (char *)net->read_pos + pkt_len)
{
@@ -1067,13 +1067,13 @@ static int check_connection(THD *thd)
{
db_buff[copy_and_convert(db_buff, sizeof(db_buff)-1,
system_charset_info,
- db, db_len,
+ db, (uint) db_len,
thd->charset(), &dummy_errors)]= 0;
db= db_buff;
}
user_buff[user_len= copy_and_convert(user_buff, sizeof(user_buff)-1,
- system_charset_info, user, user_len,
+ system_charset_info, user, (uint) user_len,
thd->charset(), &dummy_errors)]= '\0';
user= user_buff;
@@ -1769,7 +1769,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
statistic_increment(thd->status_var.com_stat[SQLCOM_CHANGE_DB],
&LOCK_status);
thd->convert_string(&tmp, system_charset_info,
- packet, strlen(packet), thd->charset());
+ packet, (uint) strlen(packet), thd->charset());
if (!mysql_change_db(thd, &tmp, FALSE))
{
mysql_log.write(thd,command,"%s",thd->db);
@@ -1832,7 +1832,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
*/
char db_buff[NAME_LEN+1]; // buffer to store db in utf8
char *db= passwd;
- uint passwd_len= thd->client_capabilities & CLIENT_SECURE_CONNECTION ?
+ size_t passwd_len= thd->client_capabilities & CLIENT_SECURE_CONNECTION ?
(uchar)(*passwd++) : strlen(passwd);
db+= passwd_len + 1;
#ifndef EMBEDDED_LIBRARY
@@ -1846,7 +1846,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
/* Convert database name to utf8 */
uint dummy_errors;
db_buff[copy_and_convert(db_buff, sizeof(db_buff)-1,
- system_charset_info, db, strlen(db),
+ system_charset_info, db, (uint) strlen(db),
thd->charset(), &dummy_errors)]= 0;
db= db_buff;
@@ -1865,7 +1865,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
/* Clear variables that are allocated */
thd->user_connect= 0;
- int res= check_user(thd, COM_CHANGE_USER, passwd, passwd_len, db, FALSE);
+ int res= check_user(thd, COM_CHANGE_USER, passwd, (uint) passwd_len, db, FALSE);
if (res)
{
@@ -2011,7 +2011,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
table_list.schema_table= schema_table;
}
- thd->query_length= strlen(packet); // for simplicity: don't optimize
+ thd->query_length= (uint) strlen(packet); // for simplicity: don't optimize
if (!(thd->query=fields=thd->memdup(packet,thd->query_length+1)))
break;
mysql_log.write(thd,command,"%s %s",table_list.table_name, fields);
@@ -3963,7 +3963,7 @@ end_with_restore_list:
#endif
case SQLCOM_CHANGE_DB:
{
- LEX_STRING db_str= { (char *) select_lex->db, strlen(select_lex->db) };
+ LEX_STRING db_str= { (char *) select_lex->db, (uint) strlen(select_lex->db) };
if (!mysql_change_db(thd, &db_str, FALSE))
send_ok(thd);
@@ -6194,7 +6194,7 @@ void create_select_for_variable(const char *var_name)
mysql_init_select(lex);
lex->sql_command= SQLCOM_SELECT;
tmp.str= (char*) var_name;
- tmp.length=strlen(var_name);
+ tmp.length=(uint) strlen(var_name);
bzero((char*) &null_lex_string.str, sizeof(null_lex_string));
/*
We set the name of Item to @@session.var_name because that then is used
@@ -6203,7 +6203,7 @@ void create_select_for_variable(const char *var_name)
if ((var= get_system_var(thd, OPT_SESSION, tmp, null_lex_string)))
{
end= strxmov(buff, "@@session.", var_name, NullS);
- var->set_name(buff, end-buff, system_charset_info);
+ var->set_name(buff, (uint) (end - buff), system_charset_info);
add_item_to_list(thd, var);
}
DBUG_VOID_RETURN;
@@ -7946,10 +7946,10 @@ void get_default_definer(THD *thd, LEX_USER *definer)
const Security_context *sctx= thd->security_ctx;
definer->user.str= (char *) sctx->priv_user;
- definer->user.length= strlen(definer->user.str);
+ definer->user.length= (uint) strlen(definer->user.str);
definer->host.str= (char *) sctx->priv_host;
- definer->host.length= strlen(definer->host.str);
+ definer->host.length= (uint) strlen(definer->host.str);
}
diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc
index 9e144f5ae9b..a07fcc37856 100644
--- a/sql/sql_prepare.cc
+++ b/sql/sql_prepare.cc
@@ -726,13 +726,13 @@ static bool insert_params_withlog(Prepared_statement *stmt, uchar *null_array,
Item_param *param= *it;
if (param->state != Item_param::LONG_DATA_VALUE)
{
- if (is_param_null(null_array, it - begin))
+ if (is_param_null(null_array, (uint) (it - begin)))
param->set_null();
else
{
if (read_pos >= data_end)
DBUG_RETURN(1);
- param->set_param_func(param, &read_pos, data_end - read_pos);
+ param->set_param_func(param, &read_pos, (uint) (data_end - read_pos));
if (param->state == Item_param::NO_VALUE)
DBUG_RETURN(1);
}
@@ -764,13 +764,13 @@ static bool insert_params(Prepared_statement *stmt, uchar *null_array,
Item_param *param= *it;
if (param->state != Item_param::LONG_DATA_VALUE)
{
- if (is_param_null(null_array, it - begin))
+ if (is_param_null(null_array, (uint) (it - begin)))
param->set_null();
else
{
if (read_pos >= data_end)
DBUG_RETURN(1);
- param->set_param_func(param, &read_pos, data_end - read_pos);
+ param->set_param_func(param, &read_pos, (uint) (data_end - read_pos));
if (param->state == Item_param::NO_VALUE)
DBUG_RETURN(1);
}
diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc
index 5bbff69f197..5966176012f 100644
--- a/sql/sql_repl.cc
+++ b/sql/sql_repl.cc
@@ -202,7 +202,7 @@ void adjust_linfo_offsets(my_off_t purge_offset)
bool log_in_use(const char* log_name)
{
- int log_name_len = strlen(log_name) + 1;
+ size_t log_name_len = strlen(log_name) + 1;
THD *tmp;
bool result = 0;
@@ -1284,8 +1284,8 @@ int cmp_master_pos(const char* log_file_name1, ulonglong log_pos1,
const char* log_file_name2, ulonglong log_pos2)
{
int res;
- uint log_file_name1_len= strlen(log_file_name1);
- uint log_file_name2_len= strlen(log_file_name2);
+ size_t log_file_name1_len= strlen(log_file_name1);
+ size_t log_file_name2_len= strlen(log_file_name2);
// We assume that both log names match up to '.'
if (log_file_name1_len == log_file_name2_len)
@@ -1580,7 +1580,7 @@ int log_loaded_block(IO_CACHE* file)
lf_info->last_pos_in_file >= my_b_get_pos_in_file(file))
DBUG_RETURN(0);
- for (block_len= my_b_get_bytes_in_buffer(file); block_len > 0;
+ for (block_len= (uint) (my_b_get_bytes_in_buffer(file)); block_len > 0;
buffer += min(block_len, max_event_size),
block_len -= min(block_len, max_event_size))
{
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index a820e9966dc..3b4668a3925 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -7617,7 +7617,7 @@ static int compare_fields_by_table_order(Item_field *field1,
if (outer_ref)
return cmp;
JOIN_TAB **idx= (JOIN_TAB **) table_join_idx;
- cmp= idx[field2->field->table->tablenr]-idx[field1->field->table->tablenr];
+ cmp= (uint) (idx[field2->field->table->tablenr] - idx[field1->field->table->tablenr]);
return cmp < 0 ? -1 : (cmp ? 1 : 0);
}
@@ -9644,7 +9644,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
table->s->default_values= table->record[1]+alloc_length;
}
copy_func[0]=0; // End marker
- param->func_count= copy_func - param->items_to_copy;
+ param->func_count= (uint) (copy_func - param->items_to_copy);
recinfo=param->start_recinfo;
null_flags=(uchar*) table->record[0];
@@ -15217,10 +15217,10 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
item_list.push_back(new Item_int((int32)
join->select_lex->select_number));
item_list.push_back(new Item_string(join->select_lex->type,
- strlen(join->select_lex->type), cs));
+ (uint) strlen(join->select_lex->type), cs));
for (uint i=0 ; i < 7; i++)
item_list.push_back(item_null);
- item_list.push_back(new Item_string(message,strlen(message),cs));
+ item_list.push_back(new Item_string(message,(uint) strlen(message),cs));
if (result->send_data(item_list))
join->error= 1;
}
@@ -15239,7 +15239,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
item_list.push_back(new Item_null);
/* select_type */
item_list.push_back(new Item_string(join->select_lex->type,
- strlen(join->select_lex->type),
+ (uint) strlen(join->select_lex->type),
cs));
/* table */
{
@@ -15266,7 +15266,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
}
/* type */
item_list.push_back(new Item_string(join_type_str[JT_ALL],
- strlen(join_type_str[JT_ALL]),
+ (uint) strlen(join_type_str[JT_ALL]),
cs));
/* possible_keys */
item_list.push_back(item_null);
@@ -15315,7 +15315,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
join->select_lex->select_number));
/* select_type */
item_list.push_back(new Item_string(join->select_lex->type,
- strlen(join->select_lex->type),
+ (uint) strlen(join->select_lex->type),
cs));
if (tab->type == JT_ALL && tab->select && tab->select->quick)
{
@@ -15340,12 +15340,12 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
{
TABLE_LIST *real_table= table->pos_in_table_list;
item_list.push_back(new Item_string(real_table->alias,
- strlen(real_table->alias),
+ (uint) strlen(real_table->alias),
cs));
}
/* type */
item_list.push_back(new Item_string(join_type_str[tab->type],
- strlen(join_type_str[tab->type]),
+ (uint) strlen(join_type_str[tab->type]),
cs));
/* Build "possible_keys" value and add it to item_list */
if (!tab->keys.is_clear_all())
@@ -15358,7 +15358,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
if (tmp1.length())
tmp1.append(',');
tmp1.append(table->key_info[j].name,
- strlen(table->key_info[j].name),
+ (uint) strlen(table->key_info[j].name),
system_charset_info);
}
}
@@ -15374,17 +15374,17 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
KEY *key_info=table->key_info+ tab->ref.key;
register uint length;
item_list.push_back(new Item_string(key_info->name,
- strlen(key_info->name),
+ (uint) strlen(key_info->name),
system_charset_info));
- length= longlong2str(tab->ref.key_length, keylen_str_buf, 10) -
- keylen_str_buf;
+ length= (uint) (longlong2str(tab->ref.key_length, keylen_str_buf, 10) -
+ keylen_str_buf);
item_list.push_back(new Item_string(keylen_str_buf, length,
system_charset_info));
for (store_key **ref=tab->ref.key_copy ; *ref ; ref++)
{
if (tmp2.length())
tmp2.append(',');
- tmp2.append((*ref)->name(), strlen((*ref)->name()),
+ tmp2.append((*ref)->name(), (uint) strlen((*ref)->name()),
system_charset_info);
}
item_list.push_back(new Item_string(tmp2.ptr(),tmp2.length(),cs));
@@ -15394,9 +15394,9 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
KEY *key_info=table->key_info+ tab->index;
register uint length;
item_list.push_back(new Item_string(key_info->name,
- strlen(key_info->name),cs));
- length= longlong2str(key_info->key_length, keylen_str_buf, 10) -
- keylen_str_buf;
+ (uint) strlen(key_info->name),cs));
+ length= (uint) (longlong2str(key_info->key_length, keylen_str_buf, 10) -
+ keylen_str_buf);
item_list.push_back(new Item_string(keylen_str_buf,
length,
system_charset_info));
@@ -15429,7 +15429,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
key_read=1;
if (tab->info)
- item_list.push_back(new Item_string(tab->info,strlen(tab->info),cs));
+ item_list.push_back(new Item_string(tab->info,(uint) strlen(tab->info),cs));
else if (tab->packed_info & TAB_INFO_HAVE_VALUE)
{
if (tab->packed_info & TAB_INFO_USING_INDEX)
@@ -15753,7 +15753,7 @@ void TABLE_LIST::print(THD *thd, String *str)
if (schema_table)
{
append_identifier(thd, str, schema_table_name,
- strlen(schema_table_name));
+ (uint) strlen(schema_table_name));
cmp_name= schema_table_name;
}
else
@@ -15778,7 +15778,7 @@ void TABLE_LIST::print(THD *thd, String *str)
}
}
- append_identifier(thd, str, t_alias, strlen(t_alias));
+ append_identifier(thd, str, t_alias, (uint) strlen(t_alias));
}
if (use_index)
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index a3ccf770a3c..34e3193378f 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -362,9 +362,9 @@ find_files(THD *thd, List<char> *files, const char *db,
if (db && !(col_access & TABLE_ACLS))
{
table_list.db= (char*) db;
- table_list.db_length= strlen(db);
+ table_list.db_length= (uint) strlen(db);
table_list.table_name= file->name;
- table_list.table_name_length= strlen(file->name);
+ table_list.table_name_length= (uint) strlen(file->name);
table_list.grant.privilege=col_access;
if (check_grant(thd, TABLE_ACLS, &table_list, 1, 1, 1))
continue;
@@ -530,12 +530,12 @@ bool mysqld_show_create_db(THD *thd, char *dbname,
DBUG_RETURN(TRUE);
protocol->prepare_for_resend();
- protocol->store(dbname, strlen(dbname), system_charset_info);
+ protocol->store(dbname, (uint) strlen(dbname), system_charset_info);
buffer.length(0);
buffer.append(STRING_WITH_LEN("CREATE DATABASE "));
if (create_options & HA_LEX_CREATE_IF_NOT_EXISTS)
buffer.append(STRING_WITH_LEN("/*!32312 IF NOT EXISTS*/ "));
- append_identifier(thd, &buffer, dbname, strlen(dbname));
+ append_identifier(thd, &buffer, dbname, (uint) strlen(dbname));
if (create.default_table_charset)
{
@@ -907,7 +907,7 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet)
else
alias= (lower_case_table_names == 2 ? table->alias :
share->table_name);
- append_identifier(thd, packet, alias, strlen(alias));
+ append_identifier(thd, packet, alias, (uint) strlen(alias));
packet->append(STRING_WITH_LEN(" (\n"));
for (ptr=table->field ; (field= *ptr); ptr++)
@@ -918,7 +918,7 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet)
packet->append(STRING_WITH_LEN(",\n"));
packet->append(STRING_WITH_LEN(" "));
- append_identifier(thd,packet,field->field_name, strlen(field->field_name));
+ append_identifier(thd,packet,field->field_name, (uint) strlen(field->field_name));
packet->append(' ');
// check for surprises from the previous call to Field::sql_type()
if (type.ptr() != tmp)
@@ -1005,7 +1005,7 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet)
packet->append(STRING_WITH_LEN("KEY "));
if (!found_primary)
- append_identifier(thd, packet, key_info->name, strlen(key_info->name));
+ append_identifier(thd, packet, key_info->name, (uint) strlen(key_info->name));
if (!(thd->variables.sql_mode & MODE_NO_KEY_OPTIONS) &&
!limited_mysql_mode && !foreign_db_mode)
@@ -1032,7 +1032,7 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet)
if (key_part->field)
append_identifier(thd,packet,key_part->field->field_name,
- strlen(key_part->field->field_name));
+ (uint) strlen(key_part->field->field_name));
if (key_part->field &&
(key_part->length !=
table->field[key_part->fieldnr-1]->key_length() &&
@@ -1056,7 +1056,7 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet)
if ((for_str= file->get_foreign_key_create_info()))
{
- packet->append(for_str, strlen(for_str));
+ packet->append(for_str, (uint) strlen(for_str));
file->free_foreign_key_create_info(for_str);
}
@@ -1338,7 +1338,8 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
field_list.push_back(field=new Item_empty_string("db",NAME_LEN));
field->maybe_null=1;
field_list.push_back(new Item_empty_string("Command",16));
- field_list.push_back(new Item_return_int("Time",7, FIELD_TYPE_LONG));
+ field_list.push_back(field= new Item_return_int("Time",7, FIELD_TYPE_LONG));
+ field->unsigned_flag= 0;
field_list.push_back(field=new Item_empty_string("State",30));
field->maybe_null=1;
field_list.push_back(field=new Item_empty_string("Info",max_query_length));
@@ -1439,7 +1440,7 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
else
protocol->store(command_name[thd_info->command], system_charset_info);
if (thd_info->start_time)
- protocol->store((uint32) (now - thd_info->start_time));
+ protocol->store_long ((longlong) (now - thd_info->start_time));
else
protocol->store_null();
protocol->store(thd_info->state_info, system_charset_info);
@@ -1465,7 +1466,7 @@ static bool show_status_array(THD *thd, const char *wild,
char buff[1024], *prefix_end;
/* the variable name should not be longer then 80 characters */
char name_buffer[80];
- int len;
+ size_t len;
LEX_STRING null_lex_str;
CHARSET_INFO *charset= system_charset_info;
DBUG_ENTER("show_status_array");
@@ -1474,11 +1475,11 @@ static bool show_status_array(THD *thd, const char *wild,
null_lex_str.length= 0;
prefix_end=strnmov(name_buffer, prefix, sizeof(name_buffer)-1);
- len=name_buffer + sizeof(name_buffer) - prefix_end;
+ len= name_buffer + sizeof(name_buffer) - prefix_end;
for (; variables->name; variables++)
{
- strnmov(prefix_end, variables->name, len);
+ strnmov(prefix_end, variables->name, (uint) len);
name_buffer[sizeof(name_buffer)-1]=0; /* Safety */
SHOW_TYPE show_type=variables->type;
if (show_type == SHOW_VARS)
@@ -1794,7 +1795,7 @@ static bool show_status_array(THD *thd, const char *wild,
const char *p= SSL_get_cipher_list((SSL*) thd->net.vio->ssl_arg,i);
if (p == NULL)
break;
- to= strnmov(to, p, buff_end-to-1);
+ to= strnmov(to, p, (uint) (buff_end-to-1));
*to++= ':';
}
if (to != buff)
@@ -1823,7 +1824,7 @@ static bool show_status_array(THD *thd, const char *wild,
break;
}
restore_record(table, s->default_values);
- table->field[0]->store(name_buffer, strlen(name_buffer),
+ table->field[0]->store(name_buffer, (uint) strlen(name_buffer),
system_charset_info);
table->field[1]->store(pos, (uint32) (end - pos), charset);
if (schema_table_store_record(thd, table))
@@ -1942,9 +1943,9 @@ int make_table_list(THD *thd, SELECT_LEX *sel,
Table_ident *table_ident;
LEX_STRING ident_db, ident_table;
ident_db.str= db;
- ident_db.length= strlen(db);
+ ident_db.length= (uint) strlen(db);
ident_table.str= table;
- ident_table.length= strlen(table);
+ ident_table.length= (uint) strlen(table);
table_ident= new Table_ident(thd, ident_db, ident_table, 1);
sel->init_query();
if (!sel->add_table_to_list(thd, table_ident, 0, 0, TL_READ,
@@ -1974,12 +1975,12 @@ bool uses_only_table_name_fields(Item *item, TABLE_LIST *table)
const char *field_name1= schema_table->idx_field1 >= 0 ? field_info[schema_table->idx_field1].field_name : "";
const char *field_name2= schema_table->idx_field2 >= 0 ? field_info[schema_table->idx_field2].field_name : "";
if (table->table != item_field->field->table ||
- (cs->coll->strnncollsp(cs, (uchar *) field_name1, strlen(field_name1),
+ (cs->coll->strnncollsp(cs, (uchar *) field_name1, (uint) strlen(field_name1),
(uchar *) item_field->field_name,
- strlen(item_field->field_name), 0) &&
- cs->coll->strnncollsp(cs, (uchar *) field_name2, strlen(field_name2),
+ (uint) strlen(item_field->field_name), 0) &&
+ cs->coll->strnncollsp(cs, (uchar *) field_name2, (uint) strlen(field_name2),
(uchar *) item_field->field_name,
- strlen(item_field->field_name), 0)))
+ (uint) strlen(item_field->field_name), 0)))
return 0;
}
else if (item->type() == Item::REF_ITEM)
@@ -2310,9 +2311,9 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
{
restore_record(table, s->default_values);
table->field[schema_table->idx_field1]->
- store(base_name, strlen(base_name), system_charset_info);
+ store(base_name, (uint) strlen(base_name), system_charset_info);
table->field[schema_table->idx_field2]->
- store(file_name, strlen(file_name),system_charset_info);
+ store(file_name, (uint) strlen(file_name),system_charset_info);
if (!partial_cond || partial_cond->val_int())
{
if (schema_table_idx == SCH_TABLE_NAMES)
@@ -2420,9 +2421,9 @@ bool store_schema_shemata(THD* thd, TABLE *table, const char *db_name,
CHARSET_INFO *cs)
{
restore_record(table, s->default_values);
- table->field[1]->store(db_name, strlen(db_name), system_charset_info);
- table->field[2]->store(cs->csname, strlen(cs->csname), system_charset_info);
- table->field[3]->store(cs->name, strlen(cs->name), system_charset_info);
+ table->field[1]->store(db_name, (uint) strlen(db_name), system_charset_info);
+ table->field[2]->store(cs->csname, (uint) strlen(cs->csname), system_charset_info);
+ table->field[3]->store(cs->name, (uint) strlen(cs->name), system_charset_info);
return schema_table_store_record(thd, table);
}
@@ -2488,8 +2489,8 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
DBUG_ENTER("get_schema_tables_record");
restore_record(table, s->default_values);
- table->field[1]->store(base_name, strlen(base_name), cs);
- table->field[2]->store(file_name, strlen(file_name), cs);
+ table->field[1]->store(base_name, (uint) strlen(base_name), cs);
+ table->field[2]->store(file_name, (uint) strlen(file_name), cs);
if (res)
{
/*
@@ -2502,7 +2503,7 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
table->field[3]->store(STRING_WITH_LEN("SYSTEM VIEW"), cs);
else
table->field[3]->store(STRING_WITH_LEN("BASE TABLE"), cs);
- table->field[20]->store(error, strlen(error), cs);
+ table->field[20]->store(error, (uint) strlen(error), cs);
thd->clear_error();
}
else if (tables->view)
@@ -2532,7 +2533,7 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
table->field[i]->set_notnull();
}
tmp_buff= file->table_type();
- table->field[4]->store(tmp_buff, strlen(tmp_buff), cs);
+ table->field[4]->store(tmp_buff, (uint) strlen(tmp_buff), cs);
table->field[5]->store((longlong) share->frm_version, TRUE);
enum row_type row_type = file->get_row_type();
switch (row_type) {
@@ -2559,7 +2560,7 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
tmp_buff= "Compact";
break;
}
- table->field[6]->store(tmp_buff, strlen(tmp_buff), cs);
+ table->field[6]->store(tmp_buff, (uint) strlen(tmp_buff), cs);
if (!tables->schema_table)
{
table->field[7]->store((longlong) file->records, TRUE);
@@ -2601,7 +2602,7 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
}
tmp_buff= (share->table_charset ?
share->table_charset->name : "default");
- table->field[17]->store(tmp_buff, strlen(tmp_buff), cs);
+ table->field[17]->store(tmp_buff, (uint) strlen(tmp_buff), cs);
if (file->table_flags() & (ulong) HA_HAS_CHECKSUM)
{
table->field[18]->store((longlong) file->checksum(), TRUE);
@@ -2657,7 +2658,7 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
table->field[20]->store(comment,
(comment == share->comment.str ?
share->comment.length :
- strlen(comment)), cs);
+ (uint) strlen(comment)), cs);
if (comment != share->comment.str)
my_free(comment, MYF(0));
}
@@ -2703,8 +2704,8 @@ static int get_schema_column_record(THD *thd, TABLE_LIST *tables,
count= 0;
file->info(HA_STATUS_VARIABLE | HA_STATUS_NO_LOCK);
restore_record(show_table, s->default_values);
- base_name_length= strlen(base_name);
- file_name_length= strlen(file_name);
+ base_name_length= (uint) strlen(base_name);
+ file_name_length= (uint) strlen(file_name);
for (ptr=show_table->field; (field= *ptr) ; ptr++)
{
@@ -2749,13 +2750,13 @@ static int get_schema_column_record(THD *thd, TABLE_LIST *tables,
#endif
table->field[1]->store(base_name, base_name_length, cs);
table->field[2]->store(file_name, file_name_length, cs);
- table->field[3]->store(field->field_name, strlen(field->field_name),
+ table->field[3]->store(field->field_name, (uint) strlen(field->field_name),
cs);
table->field[4]->store((longlong) count, TRUE);
field->sql_type(type);
table->field[14]->store(type.ptr(), type.length(), cs);
tmp_buff= strchr(type.ptr(), '(');
- table->field[7]->store(type.ptr(),
+ table->field[7]->store(type.ptr(), (uint)
(tmp_buff ? tmp_buff - type.ptr() :
type.length()), cs);
@@ -2767,7 +2768,7 @@ static int get_schema_column_record(THD *thd, TABLE_LIST *tables,
pos=(byte*) ((flags & NOT_NULL_FLAG) ? "NO" : "YES");
table->field[6]->store((const char*) pos,
- strlen((const char*) pos), cs);
+ (uint) strlen((const char*) pos), cs);
is_blob= (field->type() == FIELD_TYPE_BLOB);
if (field->has_charset() || is_blob ||
field->real_type() == MYSQL_TYPE_VARCHAR || // For varbinary type
@@ -2835,18 +2836,18 @@ static int get_schema_column_record(THD *thd, TABLE_LIST *tables,
{
pos=(byte*) field->charset()->csname;
table->field[12]->store((const char*) pos,
- strlen((const char*) pos), cs);
+ (uint) strlen((const char*) pos), cs);
table->field[12]->set_notnull();
pos=(byte*) field->charset()->name;
table->field[13]->store((const char*) pos,
- strlen((const char*) pos), cs);
+ (uint) strlen((const char*) pos), cs);
table->field[13]->set_notnull();
}
pos=(byte*) ((field->flags & PRI_KEY_FLAG) ? "PRI" :
(field->flags & UNIQUE_KEY_FLAG) ? "UNI" :
(field->flags & MULTIPLE_KEY_FLAG) ? "MUL":"");
table->field[15]->store((const char*) pos,
- strlen((const char*) pos), cs);
+ (uint) strlen((const char*) pos), cs);
end= tmp;
if (field->unireg_check == Field::NEXT_NUMBER)
@@ -2879,10 +2880,10 @@ int fill_schema_charsets(THD *thd, TABLE_LIST *tables, COND *cond)
{
const char *comment;
restore_record(table, s->default_values);
- table->field[0]->store(tmp_cs->csname, strlen(tmp_cs->csname), scs);
- table->field[1]->store(tmp_cs->name, strlen(tmp_cs->name), scs);
+ table->field[0]->store(tmp_cs->csname, (uint) strlen(tmp_cs->csname), scs);
+ table->field[1]->store(tmp_cs->name, (uint) strlen(tmp_cs->name), scs);
comment= tmp_cs->comment ? tmp_cs->comment : "";
- table->field[2]->store(comment, strlen(comment), scs);
+ table->field[2]->store(comment, (uint) strlen(comment), scs);
table->field[3]->store((longlong) tmp_cs->mbmaxlen, TRUE);
if (schema_table_store_record(thd, table))
return 1;
@@ -2916,13 +2917,13 @@ int fill_schema_collation(THD *thd, TABLE_LIST *tables, COND *cond)
{
const char *tmp_buff;
restore_record(table, s->default_values);
- table->field[0]->store(tmp_cl->name, strlen(tmp_cl->name), scs);
- table->field[1]->store(tmp_cl->csname , strlen(tmp_cl->csname), scs);
+ table->field[0]->store(tmp_cl->name, (uint) strlen(tmp_cl->name), scs);
+ table->field[1]->store(tmp_cl->csname , (uint) strlen(tmp_cl->csname), scs);
table->field[2]->store((longlong) tmp_cl->number, TRUE);
tmp_buff= (tmp_cl->state & MY_CS_PRIMARY) ? "Yes" : "";
- table->field[3]->store(tmp_buff, strlen(tmp_buff), scs);
+ table->field[3]->store(tmp_buff, (uint) strlen(tmp_buff), scs);
tmp_buff= (tmp_cl->state & MY_CS_COMPILED)? "Yes" : "";
- table->field[4]->store(tmp_buff, strlen(tmp_buff), scs);
+ table->field[4]->store(tmp_buff, (uint) strlen(tmp_buff), scs);
table->field[5]->store((longlong) tmp_cl->strxfrm_multiply, TRUE);
if (schema_table_store_record(thd, table))
return 1;
@@ -2952,8 +2953,8 @@ int fill_schema_coll_charset_app(THD *thd, TABLE_LIST *tables, COND *cond)
!my_charset_same(tmp_cs,tmp_cl))
continue;
restore_record(table, s->default_values);
- table->field[0]->store(tmp_cl->name, strlen(tmp_cl->name), scs);
- table->field[1]->store(tmp_cl->csname , strlen(tmp_cl->csname), scs);
+ table->field[0]->store(tmp_cl->name, (uint) strlen(tmp_cl->name), scs);
+ table->field[1]->store(tmp_cl->csname , (uint) strlen(tmp_cl->csname), scs);
if (schema_table_store_record(thd, table))
return 1;
}
@@ -3124,16 +3125,16 @@ static int get_schema_stat_record(THD *thd, TABLE_LIST *tables,
for (uint j=0 ; j < key_info->key_parts ; j++,key_part++)
{
restore_record(table, s->default_values);
- table->field[1]->store(base_name, strlen(base_name), cs);
- table->field[2]->store(file_name, strlen(file_name), cs);
+ table->field[1]->store(base_name, (uint) strlen(base_name), cs);
+ table->field[2]->store(file_name, (uint) strlen(file_name), cs);
table->field[3]->store((longlong) ((key_info->flags &
HA_NOSAME) ? 0 : 1), TRUE);
- table->field[4]->store(base_name, strlen(base_name), cs);
- table->field[5]->store(key_info->name, strlen(key_info->name), cs);
+ table->field[4]->store(base_name, (uint) strlen(base_name), cs);
+ table->field[5]->store(key_info->name, (uint) strlen(key_info->name), cs);
table->field[6]->store((longlong) (j+1), TRUE);
str=(key_part->field ? key_part->field->field_name :
"?unknown field?");
- table->field[7]->store(str, strlen(str), cs);
+ table->field[7]->store(str, (uint) strlen(str), cs);
if (show_table->file->index_flags(i, j, 0) & HA_READ_ORDER)
{
table->field[8]->store(((key_part->key_part_flag &
@@ -3160,9 +3161,9 @@ static int get_schema_stat_record(THD *thd, TABLE_LIST *tables,
}
uint flags= key_part->field ? key_part->field->flags : 0;
const char *pos=(char*) ((flags & NOT_NULL_FLAG) ? "" : "YES");
- table->field[12]->store(pos, strlen(pos), cs);
+ table->field[12]->store(pos, (uint) strlen(pos), cs);
pos= show_table->file->index_type(i);
- table->field[13]->store(pos, strlen(pos), cs);
+ table->field[13]->store(pos, (uint) strlen(pos), cs);
if (!show_table->s->keys_in_use.is_set(i))
table->field[14]->store(STRING_WITH_LEN("disabled"), cs);
else
@@ -3278,7 +3279,7 @@ static int get_schema_views_record(THD *thd, TABLE_LIST *tables,
table->field[5]->store(STRING_WITH_LEN("YES"), cs);
else
table->field[5]->store(STRING_WITH_LEN("NO"), cs);
- definer_len= (strxmov(definer, tables->definer.user.str, "@",
+ definer_len= (uint) (strxmov(definer, tables->definer.user.str, "@",
tables->definer.host.str, NullS) - definer);
table->field[6]->store(definer, definer_len, cs);
if (tables->view_suid)
@@ -3303,10 +3304,10 @@ bool store_constraints(THD *thd, TABLE *table, const char *db,
{
CHARSET_INFO *cs= system_charset_info;
restore_record(table, s->default_values);
- table->field[1]->store(db, strlen(db), cs);
+ table->field[1]->store(db, (uint) strlen(db), cs);
table->field[2]->store(key_name, key_len, cs);
- table->field[3]->store(db, strlen(db), cs);
- table->field[4]->store(tname, strlen(tname), cs);
+ table->field[3]->store(db, (uint) strlen(db), cs);
+ table->field[4]->store(tname, (uint) strlen(tname), cs);
table->field[5]->store(con_type, con_len, cs);
return schema_table_store_record(thd, table);
}
@@ -3343,14 +3344,14 @@ static int get_schema_constraints_record(THD *thd, TABLE_LIST *tables,
if (i == primary_key && !strcmp(key_info->name, primary_key_name))
{
if (store_constraints(thd, table, base_name, file_name, key_info->name,
- strlen(key_info->name),
+ (uint) strlen(key_info->name),
STRING_WITH_LEN("PRIMARY KEY")))
DBUG_RETURN(1);
}
else if (key_info->flags & HA_NOSAME)
{
if (store_constraints(thd, table, base_name, file_name, key_info->name,
- strlen(key_info->name),
+ (uint) strlen(key_info->name),
STRING_WITH_LEN("UNIQUE")))
DBUG_RETURN(1);
}
@@ -3363,7 +3364,7 @@ static int get_schema_constraints_record(THD *thd, TABLE_LIST *tables,
{
if (store_constraints(thd, table, base_name, file_name,
f_key_info->forein_id->str,
- strlen(f_key_info->forein_id->str),
+ (uint) strlen(f_key_info->forein_id->str),
"FOREIGN KEY", 11))
DBUG_RETURN(1);
}
@@ -3385,12 +3386,12 @@ static bool store_trigger(THD *thd, TABLE *table, const char *db,
ulong sql_mode_len;
restore_record(table, s->default_values);
- table->field[1]->store(db, strlen(db), cs);
+ table->field[1]->store(db, (uint) strlen(db), cs);
table->field[2]->store(trigger_name->str, trigger_name->length, cs);
table->field[3]->store(trg_event_type_names[event].str,
trg_event_type_names[event].length, cs);
- table->field[5]->store(db, strlen(db), cs);
- table->field[6]->store(tname, strlen(tname), cs);
+ table->field[5]->store(db, (uint) strlen(db), cs);
+ table->field[6]->store(tname, (uint) strlen(tname), cs);
table->field[9]->store(trigger_stmt->str, trigger_stmt->length, cs);
table->field[10]->store(STRING_WITH_LEN("ROW"), cs);
table->field[11]->store(trg_action_time_type_names[timing].str,
@@ -3474,10 +3475,10 @@ void store_key_column_usage(TABLE *table, const char*db, const char *tname,
const char *con_type, uint con_len, longlong idx)
{
CHARSET_INFO *cs= system_charset_info;
- table->field[1]->store(db, strlen(db), cs);
+ table->field[1]->store(db, (uint) strlen(db), cs);
table->field[2]->store(key_name, key_len, cs);
- table->field[4]->store(db, strlen(db), cs);
- table->field[5]->store(tname, strlen(tname), cs);
+ table->field[4]->store(db, (uint) strlen(db), cs);
+ table->field[5]->store(tname, (uint) strlen(tname), cs);
table->field[6]->store(con_type, con_len, cs);
table->field[7]->store((longlong) idx, TRUE);
}
@@ -3521,9 +3522,9 @@ static int get_schema_key_column_usage_record(THD *thd,
restore_record(table, s->default_values);
store_key_column_usage(table, base_name, file_name,
key_info->name,
- strlen(key_info->name),
+ (uint) strlen(key_info->name),
key_part->field->field_name,
- strlen(key_part->field->field_name),
+ (uint) strlen(key_part->field->field_name),
(longlong) f_idx);
if (schema_table_store_record(thd, table))
DBUG_RETURN(1);
@@ -3587,8 +3588,8 @@ int fill_open_tables(THD *thd, TABLE_LIST *tables, COND *cond)
for (; open_list ; open_list=open_list->next)
{
restore_record(table, s->default_values);
- table->field[0]->store(open_list->db, strlen(open_list->db), cs);
- table->field[1]->store(open_list->table, strlen(open_list->table), cs);
+ table->field[0]->store(open_list->db, (uint) strlen(open_list->db), cs);
+ table->field[1]->store(open_list->table, (uint) strlen(open_list->table), cs);
table->field[2]->store((longlong) open_list->in_use, TRUE);
table->field[3]->store((longlong) open_list->locked, TRUE);
if (schema_table_store_record(thd, table))
@@ -3720,7 +3721,7 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list)
DBUG_RETURN(0);
}
item->set_name(fields_info->field_name,
- strlen(fields_info->field_name), cs);
+ (uint) strlen(fields_info->field_name), cs);
break;
}
field_list.push_back(item);
@@ -3773,7 +3774,7 @@ int make_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table)
if (field)
{
field->set_name(field_info->old_name,
- strlen(field_info->old_name),
+ (uint) strlen(field_info->old_name),
system_charset_info);
if (add_item_to_list(thd, field))
return 1;
@@ -3842,7 +3843,7 @@ int make_table_names_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table)
field= new Item_field(context, NullS, NullS, field_info->field_name);
if (add_item_to_list(thd, field))
return 1;
- field->set_name(field_info->old_name, strlen(field_info->old_name),
+ field->set_name(field_info->old_name, (uint) strlen(field_info->old_name),
system_charset_info);
}
return 0;
@@ -3868,7 +3869,7 @@ int make_columns_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table)
if (field)
{
field->set_name(field_info->old_name,
- strlen(field_info->old_name),
+ (uint) strlen(field_info->old_name),
system_charset_info);
if (add_item_to_list(thd, field))
return 1;
@@ -3893,7 +3894,7 @@ int make_character_sets_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table)
if (field)
{
field->set_name(field_info->old_name,
- strlen(field_info->old_name),
+ (uint) strlen(field_info->old_name),
system_charset_info);
if (add_item_to_list(thd, field))
return 1;
@@ -3918,7 +3919,7 @@ int make_proc_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table)
if (field)
{
field->set_name(field_info->old_name,
- strlen(field_info->old_name),
+ (uint) strlen(field_info->old_name),
system_charset_info);
if (add_item_to_list(thd, field))
return 1;
@@ -3964,7 +3965,7 @@ int mysql_schema_table(THD *thd, LEX *lex, TABLE_LIST *table_list)
table_list->schema_table_name,
table_list->alias);
table_list->table_name= (char*) table->s->table_name;
- table_list->table_name_length= strlen(table->s->table_name);
+ table_list->table_name_length= (uint) strlen(table->s->table_name);
table_list->table= table;
table->next= thd->derived_tables;
thd->derived_tables= table;
@@ -4040,7 +4041,7 @@ int make_schema_select(THD *thd, SELECT_LEX *sel,
make_lex_string(thd, &db, INFORMATION_SCHEMA_NAME.str,
INFORMATION_SCHEMA_NAME.length, 0);
make_lex_string(thd, &table, schema_table->table_name,
- strlen(schema_table->table_name), 0);
+ (uint) strlen(schema_table->table_name), 0);
if (schema_table->old_format(thd, schema_table) || /* Handle old syntax */
!sel->add_table_to_list(thd, new Table_ident(thd, db, table, 0),
0, 0, TL_READ, (List<String> *) 0,
diff --git a/sql/sql_string.cc b/sql/sql_string.cc
index 6bf624a73a2..e536fc10d51 100644
--- a/sql/sql_string.cc
+++ b/sql/sql_string.cc
@@ -465,7 +465,7 @@ bool String::append(const char *s,uint32 arg_length)
bool String::append(const char *s)
{
- return append(s, strlen(s));
+ return append(s, (uint) strlen(s));
}
@@ -1000,7 +1000,7 @@ outp:
}
}
*from_end_pos= from;
- res= to - to_start;
+ res= (uint) (to - to_start);
}
return (uint32) res;
}
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index ff7f874ffcb..963a98cfb59 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -66,8 +66,8 @@ static void set_tmp_file_path(char *buf, size_t bufsize, THD *thd);
uint build_table_path(char *buff, size_t bufflen, const char *db,
const char *table, const char *ext)
{
- strxnmov(buff, bufflen-1, mysql_data_home, "/", db, "/", table, ext,
- NullS);
+ strxnmov(buff, (uint) (bufflen - 1), mysql_data_home, "/", db, "/", table,
+ ext, NullS);
return unpack_filename(buff,buff);
}
@@ -2542,7 +2542,7 @@ send_result_message:
case HA_ADMIN_WRONG_CHECKSUM:
{
protocol->store(STRING_WITH_LEN("note"), system_charset_info);
- protocol->store(ER(ER_VIEW_CHECKSUM), strlen(ER(ER_VIEW_CHECKSUM)),
+ protocol->store(ER(ER_VIEW_CHECKSUM), (uint) strlen(ER(ER_VIEW_CHECKSUM)),
system_charset_info);
break;
}
@@ -4448,7 +4448,7 @@ static bool check_engine(THD *thd, const char *table_name,
static void set_tmp_file_path(char *buf, size_t bufsize, THD *thd)
{
- char *p= strnmov(buf, mysql_tmpdir, bufsize);
+ char *p= strnmov(buf, mysql_tmpdir, (uint) bufsize);
my_snprintf(p, bufsize - (p - buf), "%s%lx_%lx_%x%s",
tmp_file_prefix, current_pid,
thd->thread_id, thd->tmp_table++, reg_ext);
diff --git a/sql/sql_trigger.cc b/sql/sql_trigger.cc
index d3b5289cd68..930e3601699 100644
--- a/sql/sql_trigger.cc
+++ b/sql/sql_trigger.cc
@@ -459,12 +459,12 @@ bool Table_triggers_list::create_trigger(THD *thd, TABLE_LIST *tables,
strxnmov(dir_buff, FN_REFLEN, mysql_data_home, "/", tables->db, "/", NullS);
dir.length= unpack_filename(dir_buff, dir_buff);
dir.str= dir_buff;
- file.length= strxnmov(file_buff, FN_REFLEN, tables->table_name,
- triggers_file_ext, NullS) - file_buff;
+ file.length= (uint) (strxnmov(file_buff, FN_REFLEN, tables->table_name,
+ triggers_file_ext, NullS) - file_buff);
file.str= file_buff;
- trigname_file.length= strxnmov(trigname_buff, FN_REFLEN,
+ trigname_file.length= (uint) (strxnmov(trigname_buff, FN_REFLEN,
lex->spname->m_name.str,
- trigname_file_ext, NullS) - trigname_buff;
+ trigname_file_ext, NullS) - trigname_buff);
trigname_file.str= trigname_buff;
strxnmov(trigname_path, FN_REFLEN, dir_buff, trigname_buff, NullS);
@@ -524,8 +524,8 @@ bool Table_triggers_list::create_trigger(THD *thd, TABLE_LIST *tables,
definer_host= lex->definer->host;
trg_definer->str= trg_definer_holder;
- trg_definer->length= strxmov(trg_definer->str, definer_user.str, "@",
- definer_host.str, NullS) - trg_definer->str;
+ trg_definer->length= (uint) (strxmov(trg_definer->str, definer_user.str, "@",
+ definer_host.str, NullS) - trg_definer->str);
}
else
{
@@ -559,9 +559,9 @@ bool Table_triggers_list::create_trigger(THD *thd, TABLE_LIST *tables,
}
stmt_query->append(thd->lex->stmt_definition_begin,
- (char *) thd->lex->sphead->m_body_begin -
+ (uint) ((char *) thd->lex->sphead->m_body_begin -
thd->lex->stmt_definition_begin +
- thd->lex->sphead->m_body.length);
+ thd->lex->sphead->m_body.length));
trg_def->str= stmt_query->c_ptr();
trg_def->length= stmt_query->length();
@@ -651,8 +651,8 @@ static bool save_trigger_file(Table_triggers_list *triggers, const char *db,
strxnmov(dir_buff, FN_REFLEN, mysql_data_home, "/", db, "/", NullS);
dir.length= unpack_filename(dir_buff, dir_buff);
dir.str= dir_buff;
- file.length= strxnmov(file_buff, FN_REFLEN, table_name, triggers_file_ext,
- NullS) - file_buff;
+ file.length= (uint) (strxnmov(file_buff, FN_REFLEN, table_name, triggers_file_ext,
+ NullS) - file_buff);
file.str= file_buff;
return sql_create_definition_file(&dir, &file, &triggers_file_type,
@@ -960,7 +960,7 @@ bool Table_triggers_list::check_n_load(THD *thd, const char *db,
save_db.str= thd->db;
save_db.length= thd->db_length;
- thd->reset_db((char*) db, strlen(db));
+ thd->reset_db((char*) db, (uint) strlen(db));
while ((trg_create_str= it++))
{
trg_sql_mode= itm++;
@@ -1153,8 +1153,8 @@ bool Table_triggers_list::get_trigger_info(THD *thd, trg_event_type event,
}
else
{
- definer->length= strxmov(definer->str, body->m_definer_user.str, "@",
- body->m_definer_host.str, NullS) - definer->str;
+ definer->length= (uint) (strxmov(definer->str, body->m_definer_user.str, "@",
+ body->m_definer_host.str, NullS) - definer->str);
}
DBUG_RETURN(0);
@@ -1350,7 +1350,7 @@ Table_triggers_list::change_table_name_in_triggers(THD *thd,
/* Construct CREATE TRIGGER statement with new table name. */
buff.length(0);
- before_on_len= on_table_name->str - def->str;
+ before_on_len= (uint) (on_table_name->str - def->str);
buff.append(def->str, before_on_len);
buff.append(STRING_WITH_LEN("ON "));
append_identifier(thd, &buff, new_table_name->str, new_table_name->length);
@@ -1420,8 +1420,8 @@ Table_triggers_list::change_table_name_in_trignames(const char *db_name,
while ((trigger= it_name++) != stopper)
{
- trigname_file.length= strxnmov(trigname_buff, FN_REFLEN, trigger->str,
- trigname_file_ext, NullS) - trigname_buff;
+ trigname_file.length= (uint) (strxnmov(trigname_buff, FN_REFLEN, trigger->str,
+ trigname_file_ext, NullS) - trigname_buff);
trigname_file.str= trigname_buff;
trigname.trigger_table= *new_table_name;
@@ -1482,8 +1482,8 @@ bool Table_triggers_list::change_table_name(THD *thd, const char *db,
}
if (table.triggers)
{
- LEX_STRING_WITH_INIT old_table_name(old_table, strlen(old_table));
- LEX_STRING_WITH_INIT new_table_name(new_table, strlen(new_table));
+ LEX_STRING_WITH_INIT old_table_name(old_table, (uint) strlen(old_table));
+ LEX_STRING_WITH_INIT new_table_name(new_table, (uint) strlen(new_table));
/*
Since triggers should be in the same schema as their subject tables
moving table with them between two schemas raises too many questions.
diff --git a/sql/sql_udf.cc b/sql/sql_udf.cc
index 6520c1a661e..f1b16a627ac 100644
--- a/sql/sql_udf.cc
+++ b/sql/sql_udf.cc
@@ -182,7 +182,7 @@ void udf_init()
DBUG_PRINT("info",("init udf record"));
LEX_STRING name;
name.str=get_field(&mem, table->field[0]);
- name.length = strlen(name.str);
+ name.length = (uint) strlen(name.str);
char *dl_name= get_field(&mem, table->field[2]);
bool new_dl=0;
Item_udftype udftype=UDFTYPE_FUNCTION;
diff --git a/sql/sql_view.cc b/sql/sql_view.cc
index 41a638b2618..9e0fa87d5f5 100644
--- a/sql/sql_view.cc
+++ b/sql/sql_view.cc
@@ -775,11 +775,11 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view,
}
view->source.str= thd->query + thd->lex->create_view_select_start;
- view->source.length= (char *)skip_rear_comments(thd->charset(),
+ view->source.length= (uint) ((char *)skip_rear_comments(thd->charset(),
(char *)view->source.str,
(char *)thd->query +
thd->query_length) -
- view->source.str;
+ view->source.str);
view->file_version= 1;
view->calc_md5(md5);
if (!(view->md5.str= thd->memdup(md5, 32)))
@@ -831,10 +831,10 @@ loop_out:
mysql_data_home, view->db);
unpack_filename(dir_buff, dir_buff);
dir.str= dir_buff;
- dir.length= strlen(dir_buff);
+ dir.length= (uint) strlen(dir_buff);
file.str= file_buff;
- file.length= (strxnmov(file_buff, FN_REFLEN, view->table_name, reg_ext,
+ file.length= (uint) (strxnmov(file_buff, FN_REFLEN, view->table_name, reg_ext,
NullS) - file_buff);
/* init timestamp */
if (!view->timestamp.str)
@@ -848,7 +848,7 @@ loop_out:
path.str= path_buff;
fn_format(path_buff, file.str, dir.str, 0, MY_UNPACK_FILENAME);
- path.length= strlen(path_buff);
+ path.length= (uint) strlen(path_buff);
if (!access(path.str, F_OK))
{
@@ -1828,7 +1828,7 @@ mysql_rename_view(THD *thd,
(void) unpack_filename(view_path, view_path);
pathstr.str= (char *)view_path;
- pathstr.length= strlen(view_path);
+ pathstr.length= (uint) strlen(view_path);
if ((parser= sql_parse_prepare(&pathstr, thd->mem_root, 1)) &&
is_equal(&view_type, parser->type()))
@@ -1860,10 +1860,10 @@ mysql_rename_view(THD *thd,
(void) unpack_filename(dir_buff, dir_buff);
pathstr.str= (char*)dir_buff;
- pathstr.length= strlen(dir_buff);
+ pathstr.length= (uint) strlen(dir_buff);
file.str= file_buff;
- file.length= (strxnmov(file_buff, FN_REFLEN, new_name, reg_ext, NullS)
+ file.length= (uint) (strxnmov(file_buff, FN_REFLEN, new_name, reg_ext, NullS)
- file_buff);
if (sql_create_definition_file(&pathstr, &file, view_file_type,
diff --git a/sql/table.cc b/sql/table.cc
index 3abd2c24c94..c559b4bb7fd 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -471,7 +471,7 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat,
for (count= 0; count < interval->count; count++)
{
char *val= (char*) interval->type_names[count];
- interval->type_lengths[count]= strlen(val);
+ interval->type_lengths[count]= (uint) strlen(val);
}
interval->type_lengths[count]= 0;
}
@@ -916,7 +916,7 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat,
the correct null_bytes can now be set, since bitfields have been taken
into account
*/
- share->null_bytes= (null_pos - (uchar*) outparam->null_flags +
+ share->null_bytes= (uint) (null_pos - (uchar*) outparam->null_flags +
(null_bit_pos + 7) / 8);
share->last_null_bit_pos= null_bit_pos;
@@ -1792,11 +1792,8 @@ void st_table::reset_item_list(List<Item> *item_list) const
void TABLE_LIST::calc_md5(char *buffer)
{
- my_MD5_CTX context;
uchar digest[16];
- my_MD5Init(&context);
- my_MD5Update(&context,(uchar *) query.str, query.length);
- my_MD5Final(digest, &context);
+ MY_MD5_HASH(digest, (uchar *) query.str, query.length);
sprintf((char *) buffer,
"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
digest[0], digest[1], digest[2], digest[3],
@@ -3000,8 +2997,8 @@ Field_iterator_table_ref::get_or_create_column_ref(THD *thd, TABLE_LIST *parent_
/* The field belongs to a merge view or information schema table. */
Field_translator *translated_field= view_field_it.field_translator();
nj_col= new Natural_join_column(translated_field, table_ref);
- field_count= table_ref->field_translation_end -
- table_ref->field_translation;
+ field_count= (uint) (table_ref->field_translation_end -
+ table_ref->field_translation);
}
else
{
diff --git a/sql/tztime.cc b/sql/tztime.cc
index d3d952e3c1e..d73a1ca0111 100644
--- a/sql/tztime.cc
+++ b/sql/tztime.cc
@@ -1871,6 +1871,12 @@ tz_load_from_open_tables(const String *tz_name, TABLE_LIST *tz_tables)
#ifdef ABBR_ARE_USED
char chars[max(TZ_MAX_CHARS + 1, (2 * (MY_TZNAME_MAX + 1)))];
#endif
+ /*
+ Used as a temporary tz_info until we decide that we actually want to
+ allocate and keep the tz info and tz name in tz_storage.
+ */
+ TIME_ZONE_INFO tmp_tz_info;
+ memset(&tmp_tz_info, 0, sizeof(TIME_ZONE_INFO));
DBUG_ENTER("tz_load_from_open_tables");
@@ -1914,7 +1920,8 @@ tz_load_from_open_tables(const String *tz_name, TABLE_LIST *tz_tables)
Most probably user has mistyped time zone name, so no need to bark here
unless we need it for debugging.
*/
- sql_print_error("Can't find description of time zone '%s'", tz_name_buff);
+ sql_print_error("Can't find description of time zone '%.*s'",
+ tz_name->length(), tz_name->ptr());
#endif
goto end;
}
@@ -1943,8 +1950,8 @@ tz_load_from_open_tables(const String *tz_name, TABLE_LIST *tz_tables)
/* If Uses_leap_seconds == 'Y' */
if (table->field[1]->val_int() == 1)
{
- tz_info->leapcnt= tz_leapcnt;
- tz_info->lsis= tz_lsis;
+ tmp_tz_info.leapcnt= tz_leapcnt;
+ tmp_tz_info.lsis= tz_lsis;
}
(void)table->file->ha_index_end();
@@ -1981,18 +1988,18 @@ tz_load_from_open_tables(const String *tz_name, TABLE_LIST *tz_tables)
#ifdef ABBR_ARE_USED
// FIXME should we do something with duplicates here ?
table->field[4]->val_str(&abbr, &abbr);
- if (tz_info->charcnt + abbr.length() + 1 > sizeof(chars))
+ if (tmp_tz_info.charcnt + abbr.length() + 1 > sizeof(chars))
{
sql_print_error("Error while loading time zone description from "
"mysql.time_zone_transition_type table: not enough "
"room for abbreviations");
goto end;
}
- ttis[ttid].tt_abbrind= tz_info->charcnt;
- memcpy(chars + tz_info->charcnt, abbr.ptr(), abbr.length());
- tz_info->charcnt+= abbr.length();
- chars[tz_info->charcnt]= 0;
- tz_info->charcnt++;
+ ttis[ttid].tt_abbrind= tmp_tz_info.charcnt;
+ memcpy(chars + tmp_tz_info.charcnt, abbr.ptr(), abbr.length());
+ tmp_tz_info.charcnt+= abbr.length();
+ chars[tmp_tz_info.charcnt]= 0;
+ tmp_tz_info.charcnt++;
DBUG_PRINT("info",
("time_zone_transition_type table: tz_id=%u tt_id=%u tt_gmtoff=%ld "
@@ -2005,9 +2012,9 @@ tz_load_from_open_tables(const String *tz_name, TABLE_LIST *tz_tables)
#endif
/* ttid is increasing because we are reading using index */
- DBUG_ASSERT(ttid >= tz_info->typecnt);
+ DBUG_ASSERT(ttid >= tmp_tz_info.typecnt);
- tz_info->typecnt= ttid + 1;
+ tmp_tz_info.typecnt= ttid + 1;
res= table->file->index_next_same(table->record[0],
(byte*)table->field[0]->ptr, 4);
@@ -2040,14 +2047,14 @@ tz_load_from_open_tables(const String *tz_name, TABLE_LIST *tz_tables)
ttime= (my_time_t)table->field[1]->val_int();
ttid= (uint)table->field[2]->val_int();
- if (tz_info->timecnt + 1 > TZ_MAX_TIMES)
+ if (tmp_tz_info.timecnt + 1 > TZ_MAX_TIMES)
{
sql_print_error("Error while loading time zone description from "
"mysql.time_zone_transition table: "
"too much transitions");
goto end;
}
- if (ttid + 1 > tz_info->typecnt)
+ if (ttid + 1 > tmp_tz_info.typecnt)
{
sql_print_error("Error while loading time zone description from "
"mysql.time_zone_transition table: "
@@ -2055,9 +2062,9 @@ tz_load_from_open_tables(const String *tz_name, TABLE_LIST *tz_tables)
goto end;
}
- ats[tz_info->timecnt]= ttime;
- types[tz_info->timecnt]= ttid;
- tz_info->timecnt++;
+ ats[tmp_tz_info.timecnt]= ttime;
+ types[tmp_tz_info.timecnt]= ttid;
+ tmp_tz_info.timecnt++;
DBUG_PRINT("info",
("time_zone_transition table: tz_id: %u tt_time: %lu tt_id: %u",
@@ -2082,6 +2089,34 @@ tz_load_from_open_tables(const String *tz_name, TABLE_LIST *tz_tables)
table= 0;
/*
+ Let us check how correct our time zone description is. We don't check for
+ tz->timecnt < 1 since it is ok for GMT.
+ */
+ if (tmp_tz_info.typecnt < 1)
+ {
+ sql_print_error("loading time zone without transition types");
+ goto end;
+ }
+
+ /* Allocate memory for the timezone info and timezone name in tz_storage. */
+ if (!(alloc_buff= (char*) alloc_root(&tz_storage, sizeof(TIME_ZONE_INFO) +
+ tz_name->length() + 1)))
+ {
+ sql_print_error("Out of memory while loading time zone description");
+ return 0;
+ }
+
+ /* Move the temporary tz_info into the allocated area */
+ tz_info= (TIME_ZONE_INFO *)alloc_buff;
+ memcpy(tz_info, &tmp_tz_info, sizeof(TIME_ZONE_INFO));
+ tz_name_buff= alloc_buff + sizeof(TIME_ZONE_INFO);
+ /*
+ By writing zero to the end we guarantee that we can call ptr()
+ instead of c_ptr() for time zone name.
+ */
+ strmake(tz_name_buff, tz_name->ptr(), tz_name->length());
+
+ /*
Now we will allocate memory and init TIME_ZONE_INFO structure.
*/
if (!(alloc_buff= alloc_root(&tz_storage,
@@ -2112,15 +2147,7 @@ tz_load_from_open_tables(const String *tz_name, TABLE_LIST *tz_tables)
tz_info->ttis= (TRAN_TYPE_INFO *)alloc_buff;
memcpy(tz_info->ttis, ttis, tz_info->typecnt * sizeof(TRAN_TYPE_INFO));
- /*
- Let us check how correct our time zone description and build
- reversed map. We don't check for tz->timecnt < 1 since it ok for GMT.
- */
- if (tz_info->typecnt < 1)
- {
- sql_print_error("loading time zone without transition types");
- goto end;
- }
+ /* Build reversed map. */
if (prepare_tz_info(tz_info, &tz_storage))
{
sql_print_error("Unable to build mktime map for time zone");
diff --git a/sql/udf_example.c b/sql/udf_example.c
index 4ca6133da03..db48984eed8 100644
--- a/sql/udf_example.c
+++ b/sql/udf_example.c
@@ -1099,7 +1099,7 @@ char * is_const(UDF_INIT *initid, UDF_ARGS *args __attribute__((unused)),
sprintf(result, "not const");
}
*is_null= 0;
- *length= strlen(result);
+ *length= (uint) strlen(result);
return result;
}
@@ -1133,7 +1133,7 @@ char * check_const_len(UDF_INIT *initid, UDF_ARGS *args __attribute__((unused)),
char *is_null, char *error __attribute__((unused)))
{
strmov(result, initid->ptr);
- *length= strlen(result);
+ *length= (uint) strlen(result);
*is_null= 0;
return result;
}
diff --git a/sql/uniques.cc b/sql/uniques.cc
index 7c197d2a2e9..a0d1beaf0f9 100644
--- a/sql/uniques.cc
+++ b/sql/uniques.cc
@@ -131,7 +131,7 @@ static double get_merge_buffers_cost(uint *buff_elems, uint elem_size,
total_buf_elems+= *pbuf;
*last= total_buf_elems;
- int n_buffers= last - first + 1;
+ size_t n_buffers= last - first + 1;
/* Using log2(n)=log(n)/log(2) formula */
return 2*((double)total_buf_elems*elem_size) / IO_SIZE +
diff --git a/sql/unireg.cc b/sql/unireg.cc
index d37bb09d0e8..d658365abd0 100644
--- a/sql/unireg.cc
+++ b/sql/unireg.cc
@@ -119,7 +119,7 @@ bool mysql_create_frm(THD *thd, my_string file_name,
/* Calculate extra data segment length */
str_db_type.str= (char *) ha_get_storage_engine(create_info->db_type);
- str_db_type.length= strlen(str_db_type.str);
+ str_db_type.length= (uint) strlen(str_db_type.str);
create_info->extra_size= (2 + str_db_type.length +
2 + create_info->connect_string.length);
diff --git a/strings/Makefile.am b/strings/Makefile.am
index ffca972459b..f0d6585dee4 100644
--- a/strings/Makefile.am
+++ b/strings/Makefile.am
@@ -52,7 +52,7 @@ EXTRA_DIST = ctype-big5.c ctype-cp932.c ctype-czech.c ctype-eucjpms.c ctype-euc
bmove_upp-sparc.s strappend-sparc.s strend-sparc.s \
strinstr-sparc.s strmake-sparc.s strmov-sparc.s \
strnmov-sparc.s strstr-sparc.s strxmov-sparc.s \
- t_ctype.h CMakeLists.txt
+ t_ctype.h CMakeLists.txt CHARSET_INFO.txt
libmystrings_a_LIBADD=
conf_to_src_SOURCES = conf_to_src.c xml.c ctype.c bcmp.c
diff --git a/strings/ctype-mb.c b/strings/ctype-mb.c
index b370714e464..1e0523e86bc 100644
--- a/strings/ctype-mb.c
+++ b/strings/ctype-mb.c
@@ -37,7 +37,7 @@ uint my_caseup_str_mb(CHARSET_INFO * cs, char *str)
str++;
}
}
- return str - str_orig;
+ return (uint) (str - str_orig);
}
uint my_casedn_str_mb(CHARSET_INFO * cs, char *str)
@@ -57,7 +57,7 @@ uint my_casedn_str_mb(CHARSET_INFO * cs, char *str)
str++;
}
}
- return str - str_orig;
+ return (uint) (str - str_orig);
}
uint my_caseup_mb(CHARSET_INFO * cs, char *src, uint srclen,
diff --git a/strings/ctype-simple.c b/strings/ctype-simple.c
index 99e02e02014..35f0979b461 100644
--- a/strings/ctype-simple.c
+++ b/strings/ctype-simple.c
@@ -193,7 +193,7 @@ uint my_caseup_str_8bit(CHARSET_INFO * cs,char *str)
char *str_orig= str;
while ((*str= (char) map[(uchar) *str]) != 0)
str++;
- return str - str_orig;
+ return (uint) (str - str_orig);
}
@@ -203,7 +203,7 @@ uint my_casedn_str_8bit(CHARSET_INFO * cs,char *str)
char *str_orig= str;
while ((*str= (char) map[(uchar) *str]) != 0)
str++;
- return str - str_orig;
+ return (uint) (str - str_orig);
}
@@ -1516,7 +1516,7 @@ my_strntoull10rnd_8bit(CHARSET_INFO *cs __attribute__((unused)),
}
}
- digits= str - beg;
+ digits= (int) (str - beg);
/* Continue to accumulate into ulonglong */
for (dot= NULL, ull= ul; str < end; str++)
@@ -1553,7 +1553,7 @@ my_strntoull10rnd_8bit(CHARSET_INFO *cs __attribute__((unused)),
}
else
{
- shift= dot - str;
+ shift= (int) (dot - str);
for ( ; str < end && (ch= (unsigned char) (*str - '0')) < 10; str++);
}
goto exp;
@@ -1577,7 +1577,7 @@ my_strntoull10rnd_8bit(CHARSET_INFO *cs __attribute__((unused)),
/* Unknown character, exit the loop */
break;
}
- shift= dot ? dot - str : 0; /* Right shift */
+ shift= dot ? (int) (dot - str) : 0; /* Right shift */
addon= 0;
exp: /* [ E [ <sign> ] <unsigned integer> ] */
diff --git a/strings/ctype-ucs2.c b/strings/ctype-ucs2.c
index dd8d1395ad4..65e4182d564 100644
--- a/strings/ctype-ucs2.c
+++ b/strings/ctype-ucs2.c
@@ -1001,7 +1001,7 @@ ulonglong my_strntoull10rnd_ucs2(CHARSET_INFO *cs __attribute__((unused)),
*b++= (char) wc;
}
- res= my_strntoull10rnd_8bit(cs, buf, b - buf, unsign_fl, endptr, err);
+ res= my_strntoull10rnd_8bit(cs, buf, (uint) (b - buf), unsign_fl, endptr, err);
*endptr= (char*) nptr + 2 * (uint) (*endptr- buf);
return res;
}
diff --git a/strings/my_vsnprintf.c b/strings/my_vsnprintf.c
index 93d228a1954..c1c68b48b13 100644
--- a/strings/my_vsnprintf.c
+++ b/strings/my_vsnprintf.c
@@ -107,7 +107,7 @@ int my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap)
char *par = va_arg(ap, char *);
DBUG_ASSERT(to <= end);
if (to + abs(width) + 1 > end)
- width= end - to - 1; /* sign doesn't matter */
+ width= (uint) (end - to - 1); /* sign doesn't matter */
memmove(to, par, abs(width));
to+= width;
continue;
diff --git a/strings/xml.c b/strings/xml.c
index 5f8283f2ea8..850d22da352 100644
--- a/strings/xml.c
+++ b/strings/xml.c
@@ -147,7 +147,7 @@ static int my_xml_enter(MY_XML_PARSER *st, const char *str, uint len)
memcpy(st->attrend,str,len);
st->attrend+=len;
st->attrend[0]='\0';
- return st->enter ? st->enter(st,st->attr,st->attrend-st->attr) : MY_XML_OK;
+ return st->enter ? st->enter(st,st->attr, (uint) (st->attrend - st->attr)) : MY_XML_OK;
}
@@ -179,7 +179,7 @@ static int my_xml_leave(MY_XML_PARSER *p, const char *str, uint slen)
return MY_XML_ERROR;
}
- rc = p->leave_xml ? p->leave_xml(p,p->attr,p->attrend-p->attr) : MY_XML_OK;
+ rc = p->leave_xml ? p->leave_xml(p,p->attr, (uint) (p->attrend - p->attr)) : MY_XML_OK;
*e='\0';
p->attrend=e;
diff --git a/tests/bug25714.c b/tests/bug25714.c
index 88485aa1962..b9c0708f352 100644
--- a/tests/bug25714.c
+++ b/tests/bug25714.c
@@ -54,14 +54,14 @@ int main (int argc, char **argv)
printf("%s\n", mysql_error(&conn));
}
- OK = mysql_real_query (&conn, query4, strlen(query4));
+ OK = mysql_real_query (&conn, query4, (uint) strlen(query4));
assert(0 == OK);
printf("%ld inserted\n",
(long) mysql_insert_id(&conn));
- OK = mysql_real_query (&conn, query5, strlen(query5));
+ OK = mysql_real_query (&conn, query5, (uint) strlen(query5));
assert(0 == OK);
diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c
index 7df84c600c9..d006a557819 100644
--- a/tests/mysql_client_test.c
+++ b/tests/mysql_client_test.c
@@ -115,6 +115,8 @@ static void client_disconnect(void);
#define DIE_UNLESS(expr) \
((void) ((expr) ? 0 : (die(__FILE__, __LINE__, #expr), 0)))
+#define DIE_IF(expr) \
+ ((void) ((expr) ? (die(__FILE__, __LINE__, #expr), 0) : 0))
#define DIE(expr) \
die(__FILE__, __LINE__, #expr)
@@ -256,7 +258,7 @@ static MYSQL_STMT *STDCALL
mysql_simple_prepare(MYSQL *mysql_arg, const char *query)
{
MYSQL_STMT *stmt= mysql_stmt_init(mysql_arg);
- if (stmt && mysql_stmt_prepare(stmt, query, strlen(query)))
+ if (stmt && mysql_stmt_prepare(stmt, query, (uint) strlen(query)))
{
mysql_stmt_close(stmt);
return 0;
@@ -436,7 +438,7 @@ static void my_print_result_metadata(MYSQL_RES *result)
for(i= 0; i< field_count; i++)
{
field= mysql_fetch_field(result);
- j= strlen(field->name);
+ j= (uint) strlen(field->name);
if (j < field->max_length)
j= field->max_length;
if (j < 4 && !IS_NOT_NULL(field->flags))
@@ -962,7 +964,7 @@ void stmt_fetch_init(Stmt_fetch *fetch, unsigned stmt_no_arg,
fetch->handle= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(fetch->handle, fetch->query, strlen(fetch->query));
+ rc= mysql_stmt_prepare(fetch->handle, fetch->query, (uint) strlen(fetch->query));
check_execute(fetch->handle, rc);
/*
@@ -1072,7 +1074,7 @@ my_bool fetch_n(const char **query_list, unsigned query_count,
for (fetch= fetch_array; fetch < fetch_array + query_count; ++fetch)
{
/* Init will exit(1) in case of error */
- stmt_fetch_init(fetch, fetch - fetch_array,
+ stmt_fetch_init(fetch, (uint) (fetch - fetch_array),
query_list[fetch - fetch_array]);
}
@@ -2344,7 +2346,7 @@ static void test_ps_conj_select()
int_data= 1;
strmov(str_data, "hh");
- str_length= strlen(str_data);
+ str_length= (uint) strlen(str_data);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -2855,9 +2857,9 @@ static void test_long_data()
data= (char *)"Michael";
/* supply data in pieces */
- rc= mysql_stmt_send_long_data(stmt, 1, data, strlen(data));
+ rc= mysql_stmt_send_long_data(stmt, 1, data, (uint) strlen(data));
data= (char *)" 'Monty' Widenius";
- rc= mysql_stmt_send_long_data(stmt, 1, data, strlen(data));
+ rc= mysql_stmt_send_long_data(stmt, 1, data, (uint) strlen(data));
check_execute(stmt, rc);
rc= mysql_stmt_send_long_data(stmt, 2, "Venu (venu@mysql.com)", 4);
check_execute(stmt, rc);
@@ -8433,7 +8435,7 @@ static void test_mem_overun()
sprintf(field, "c%d int", i);
strxmov(buffer, buffer, field, ", ", NullS);
}
- length= strlen(buffer);
+ length= (uint) strlen(buffer);
buffer[length-2]= ')';
buffer[--length]= '\0';
@@ -8445,7 +8447,7 @@ static void test_mem_overun()
{
strxmov(buffer, buffer, "1, ", NullS);
}
- length= strlen(buffer);
+ length= (uint) strlen(buffer);
buffer[length-2]= ')';
buffer[--length]= '\0';
@@ -8973,7 +8975,7 @@ static void test_bug1500()
data= "Dogs";
my_bind[0].buffer_type= MYSQL_TYPE_STRING;
my_bind[0].buffer= (void *) data;
- my_bind[0].buffer_length= strlen(data);
+ my_bind[0].buffer_length= (uint) strlen(data);
my_bind[0].is_null= 0;
my_bind[0].length= 0;
@@ -8998,7 +9000,7 @@ static void test_bug1500()
data= "Grave";
my_bind[0].buffer_type= MYSQL_TYPE_STRING;
my_bind[0].buffer= (void *) data;
- my_bind[0].buffer_length= strlen(data);
+ my_bind[0].buffer_length= (uint) strlen(data);
rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
@@ -9029,7 +9031,7 @@ static void test_bug1946()
stmt= mysql_simple_prepare(mysql, query);
check_stmt(stmt);
- rc= mysql_real_query(mysql, query, strlen(query));
+ rc= mysql_real_query(mysql, query, (uint) strlen(query));
DIE_UNLESS(rc != 0);
if (!opt_silent)
fprintf(stdout, "Got error (as expected):\n");
@@ -10045,7 +10047,7 @@ static void test_bug3035()
myheader("test_bug3035");
stmt_text= "DROP TABLE IF EXISTS t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "CREATE TABLE t1 (i8 TINYINT, ui8 TINYINT UNSIGNED, "
@@ -10053,7 +10055,7 @@ static void test_bug3035()
"i32 INT, ui32 INT UNSIGNED, "
"i64 BIGINT, ui64 BIGINT UNSIGNED, "
"id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
bzero((char*) bind_array, sizeof(bind_array));
@@ -10094,7 +10096,7 @@ static void test_bug3035()
stmt_text= "INSERT INTO t1 (i8, ui8, i16, ui16, i32, ui32, i64, ui64) "
"VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
mysql_stmt_bind_param(stmt, bind_array);
@@ -10127,7 +10129,7 @@ static void test_bug3035()
"cast(ui64 as signed), ui64, cast(ui64 as signed)"
"FROM t1 ORDER BY id ASC";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -10197,7 +10199,7 @@ static void test_bug3035()
mysql_stmt_close(stmt);
stmt_text= "DROP TABLE t1";
- mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
}
@@ -10260,7 +10262,7 @@ static void test_bug1664()
stmt= mysql_stmt_init(mysql);
check_stmt(stmt);
- rc= mysql_stmt_prepare(stmt, query, strlen(query));
+ rc= mysql_stmt_prepare(stmt, query, (uint) strlen(query));
check_execute(stmt, rc);
verify_param_count(stmt, 2);
@@ -10269,7 +10271,7 @@ static void test_bug1664()
my_bind[0].buffer_type= MYSQL_TYPE_STRING;
my_bind[0].buffer= (void *)str_data;
- my_bind[0].buffer_length= strlen(str_data);
+ my_bind[0].buffer_length= (uint) strlen(str_data);
my_bind[1].buffer= (void *)&int_data;
my_bind[1].buffer_type= MYSQL_TYPE_LONG;
@@ -10284,7 +10286,7 @@ static void test_bug1664()
not break following execution.
*/
data= "";
- rc= mysql_stmt_send_long_data(stmt, 0, data, strlen(data));
+ rc= mysql_stmt_send_long_data(stmt, 0, data, (uint) strlen(data));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -10298,7 +10300,7 @@ static void test_bug1664()
/* This should pass OK */
data= (char *)"Data";
- rc= mysql_stmt_send_long_data(stmt, 0, data, strlen(data));
+ rc= mysql_stmt_send_long_data(stmt, 0, data, (uint) strlen(data));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -10335,7 +10337,7 @@ static void test_bug1664()
*/
data= (char *)"SomeOtherData";
- rc= mysql_stmt_send_long_data(stmt, 0, data, strlen(data));
+ rc= mysql_stmt_send_long_data(stmt, 0, data, (uint) strlen(data));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -10353,13 +10355,13 @@ static void test_bug1664()
/* Now let us test how mysql_stmt_reset works. */
stmt= mysql_stmt_init(mysql);
check_stmt(stmt);
- rc= mysql_stmt_prepare(stmt, query, strlen(query));
+ rc= mysql_stmt_prepare(stmt, query, (uint) strlen(query));
check_execute(stmt, rc);
rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
data= (char *)"SomeData";
- rc= mysql_stmt_send_long_data(stmt, 0, data, strlen(data));
+ rc= mysql_stmt_send_long_data(stmt, 0, data, (uint) strlen(data));
check_execute(stmt, rc);
rc= mysql_stmt_reset(stmt);
@@ -10485,7 +10487,7 @@ static void test_ps_i18n()
myheader("test_ps_i18n");
stmt_text= "DROP TABLE IF EXISTS t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
/*
@@ -10496,37 +10498,37 @@ static void test_ps_i18n()
stmt_text= "CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255))";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "SET CHARACTER_SET_CLIENT=koi8r, "
"CHARACTER_SET_CONNECTION=cp1251, "
"CHARACTER_SET_RESULTS=koi8r";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
bzero((char*) bind_array, sizeof(bind_array));
bind_array[0].buffer_type= MYSQL_TYPE_STRING;
bind_array[0].buffer= (void *) koi8;
- bind_array[0].buffer_length= strlen(koi8);
+ bind_array[0].buffer_length= (uint) strlen(koi8);
bind_array[1].buffer_type= MYSQL_TYPE_STRING;
bind_array[1].buffer= (void *) koi8;
- bind_array[1].buffer_length= strlen(koi8);
+ bind_array[1].buffer_length= (uint) strlen(koi8);
stmt= mysql_stmt_init(mysql);
check_stmt(stmt);
stmt_text= "INSERT INTO t1 (c1, c2) VALUES (?, ?)";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
mysql_stmt_bind_param(stmt, bind_array);
- mysql_stmt_send_long_data(stmt, 0, koi8, strlen(koi8));
+ mysql_stmt_send_long_data(stmt, 0, koi8, (uint) strlen(koi8));
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -10534,7 +10536,7 @@ static void test_ps_i18n()
stmt_text= "SELECT c1, c2 FROM t1";
/* c1 and c2 are binary so no conversion will be done on select */
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -10562,7 +10564,7 @@ static void test_ps_i18n()
DIE_UNLESS(rc == MYSQL_NO_DATA);
stmt_text= "DROP TABLE IF EXISTS t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
/*
@@ -10575,26 +10577,26 @@ static void test_ps_i18n()
stmt_text= "CREATE TABLE t1 (c1 VARCHAR(255) CHARACTER SET cp1251, "
"c2 VARCHAR(255) CHARACTER SET cp1251)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "INSERT INTO t1 (c1, c2) VALUES (?, ?)";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
/* this data must be converted */
bind_array[0].buffer_type= MYSQL_TYPE_STRING;
bind_array[0].buffer= (void *) koi8;
- bind_array[0].buffer_length= strlen(koi8);
+ bind_array[0].buffer_length= (uint) strlen(koi8);
bind_array[1].buffer_type= MYSQL_TYPE_STRING;
bind_array[1].buffer= (void *) koi8;
- bind_array[1].buffer_length= strlen(koi8);
+ bind_array[1].buffer_length= (uint) strlen(koi8);
mysql_stmt_bind_param(stmt, bind_array);
- mysql_stmt_send_long_data(stmt, 0, koi8, strlen(koi8));
+ mysql_stmt_send_long_data(stmt, 0, koi8, (uint) strlen(koi8));
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -10602,15 +10604,15 @@ static void test_ps_i18n()
/* this data must not be converted */
bind_array[0].buffer_type= MYSQL_TYPE_BLOB;
bind_array[0].buffer= (void *) cp1251;
- bind_array[0].buffer_length= strlen(cp1251);
+ bind_array[0].buffer_length= (uint) strlen(cp1251);
bind_array[1].buffer_type= MYSQL_TYPE_BLOB;
bind_array[1].buffer= (void *) cp1251;
- bind_array[1].buffer_length= strlen(cp1251);
+ bind_array[1].buffer_length= (uint) strlen(cp1251);
mysql_stmt_bind_param(stmt, bind_array);
- mysql_stmt_send_long_data(stmt, 0, cp1251, strlen(cp1251));
+ mysql_stmt_send_long_data(stmt, 0, cp1251, (uint) strlen(cp1251));
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -10620,7 +10622,7 @@ static void test_ps_i18n()
stmt_text= "SELECT c1, c2 FROM t1";
/* c1 and c2 are binary so no conversion will be done on select */
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -10647,10 +10649,10 @@ static void test_ps_i18n()
mysql_stmt_close(stmt);
stmt_text= "DROP TABLE t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "SET NAMES DEFAULT";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
}
@@ -10671,22 +10673,22 @@ static void test_bug3796()
/* Create and fill test table */
stmt_text= "DROP TABLE IF EXISTS t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "CREATE TABLE t1 (a INT, b VARCHAR(30))";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "INSERT INTO t1 VALUES(1, 'ONE'), (2, 'TWO')";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
/* Create statement handle and prepare it with select */
stmt= mysql_stmt_init(mysql);
stmt_text= "SELECT concat(?, b) FROM t1";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
/* Bind input buffers */
@@ -10694,7 +10696,7 @@ static void test_bug3796()
my_bind[0].buffer_type= MYSQL_TYPE_STRING;
my_bind[0].buffer= (void *) concat_arg0;
- my_bind[0].buffer_length= strlen(concat_arg0);
+ my_bind[0].buffer_length= (uint) strlen(concat_arg0);
mysql_stmt_bind_param(stmt, my_bind);
@@ -10731,7 +10733,7 @@ static void test_bug3796()
mysql_stmt_close(stmt);
stmt_text= "DROP TABLE IF EXISTS t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
}
@@ -10753,7 +10755,7 @@ static void test_bug4026()
stmt= mysql_stmt_init(mysql);
stmt_text= "SELECT ?, ?";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
/* Bind input buffers */
@@ -10831,7 +10833,7 @@ static void test_bug4079()
stmt= mysql_stmt_init(mysql);
stmt_text= "SELECT 1 < (SELECT a FROM t1)";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
/* Execute the select statement */
@@ -10870,7 +10872,7 @@ static void test_bug4236()
/* mysql_stmt_execute() of statement with statement id= 0 crashed server */
stmt_text= "SELECT 1";
/* We need to prepare statement to pass by possible check in libmysql */
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
/* Hack to check that server works OK if statement wasn't found */
backup.stmt_id= stmt->stmt_id;
@@ -10902,7 +10904,7 @@ static void test_bug4030()
stmt= mysql_stmt_init(mysql);
stmt_text= "SELECT '23:59:59.123456', '2003-12-31', "
"'2003-12-31 23:59:59.123456'";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -11013,7 +11015,7 @@ static void test_view()
myquery(rc);
stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(stmt, query, strlen(query));
+ rc= mysql_stmt_prepare(stmt, query, (uint) strlen(query));
check_execute(stmt, rc);
strmov(str_data, "TEST");
@@ -11067,7 +11069,7 @@ static void test_view_where()
myquery(rc);
stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(stmt, query, strlen(query));
+ rc= mysql_stmt_prepare(stmt, query, (uint) strlen(query));
check_execute(stmt, rc);
for (i= 0; i < 3; i++)
@@ -11149,7 +11151,7 @@ static void test_view_2where()
length[i] = 1;
}
stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(stmt, query, strlen(query));
+ rc= mysql_stmt_prepare(stmt, query, (uint) strlen(query));
check_execute(stmt, rc);
rc= mysql_stmt_bind_param(stmt, my_bind);
@@ -11200,7 +11202,7 @@ static void test_view_star()
}
stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(stmt, query, strlen(query));
+ rc= mysql_stmt_prepare(stmt, query, (uint) strlen(query));
check_execute(stmt, rc);
rc= mysql_stmt_bind_param(stmt, my_bind);
@@ -11248,11 +11250,11 @@ static void test_view_insert()
myquery(rc);
insert_stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(insert_stmt, query, strlen(query));
+ rc= mysql_stmt_prepare(insert_stmt, query, (uint) strlen(query));
check_execute(insert_stmt, rc);
query= "select * from t1";
select_stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(select_stmt, query, strlen(query));
+ rc= mysql_stmt_prepare(select_stmt, query, (uint) strlen(query));
check_execute(select_stmt, rc);
bzero((char*) my_bind, sizeof(my_bind));
@@ -11307,7 +11309,7 @@ static void test_left_join_view()
rc= mysql_query(mysql,"create view v1 (x) as select a from t1 where a > 1");
myquery(rc);
stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(stmt, query, strlen(query));
+ rc= mysql_stmt_prepare(stmt, query, (uint) strlen(query));
check_execute(stmt, rc);
for (i= 0; i < 3; i++)
@@ -11375,7 +11377,7 @@ static void test_view_insert_fields()
my_bind[i].length= &l[i];
}
stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(stmt, query, strlen(query));
+ rc= mysql_stmt_prepare(stmt, query, (uint) strlen(query));
check_execute(stmt, rc);
rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
@@ -11386,7 +11388,7 @@ static void test_view_insert_fields()
query= "select * from t1";
stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(stmt, query, strlen(query));
+ rc= mysql_stmt_prepare(stmt, query, (uint) strlen(query));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -11412,20 +11414,20 @@ static void test_bug5126()
myheader("test_bug5126");
stmt_text= "DROP TABLE IF EXISTS t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "CREATE TABLE t1 (a mediumint, b int)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "INSERT INTO t1 VALUES (8386608, 1)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt= mysql_stmt_init(mysql);
stmt_text= "SELECT a, b FROM t1";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -11460,20 +11462,20 @@ static void test_bug4231()
myheader("test_bug4231");
stmt_text= "DROP TABLE IF EXISTS t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "CREATE TABLE t1 (a int)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "INSERT INTO t1 VALUES (1)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt= mysql_stmt_init(mysql);
stmt_text= "SELECT a FROM t1 WHERE ? = ?";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
/* Bind input buffers */
@@ -11517,7 +11519,7 @@ static void test_bug4231()
mysql_stmt_close(stmt);
stmt_text= "DROP TABLE t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
}
@@ -11546,7 +11548,7 @@ static void test_bug5399()
{
sprintf(buff, "select %d", (int) (stmt - stmt_list));
*stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(*stmt, buff, strlen(buff));
+ rc= mysql_stmt_prepare(*stmt, buff, (uint) strlen(buff));
check_execute(*stmt, rc);
mysql_stmt_bind_result(*stmt, my_bind);
}
@@ -11623,7 +11625,7 @@ static void test_bug5194()
myheader("test_bug5194");
stmt_text= "drop table if exists t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
stmt_text= "create table if not exists t1"
"(c1 float, c2 float, c3 float, c4 float, c5 float, c6 float, "
@@ -11668,7 +11670,7 @@ static void test_bug5194()
"c235 float, c236 float, c237 float, c238 float, c239 float, c240 float, "
"c241 float, c242 float, c243 float, c244 float, c245 float, c246 float, "
"c247 float, c248 float, c249 float, c250 float)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
my_bind= (MYSQL_BIND*) malloc(MAX_PARAM_COUNT * sizeof(MYSQL_BIND));
@@ -11695,7 +11697,7 @@ static void test_bug5194()
for (i= 1; i < COLUMN_COUNT; ++i)
strcat(param_str, "?, ");
strcat(param_str, "?)");
- param_str_length= strlen(param_str);
+ param_str_length= (uint) strlen(param_str);
/* setup bind array */
bzero((char*) my_bind, MAX_PARAM_COUNT * sizeof(MYSQL_BIND));
@@ -11726,7 +11728,7 @@ static void test_bug5194()
}
*query_ptr= '\0';
- rc= mysql_stmt_prepare(stmt, query, query_ptr - query);
+ rc= mysql_stmt_prepare(stmt, query, (uint) (query_ptr - query));
if (rc && nrows * COLUMN_COUNT > uint16_max)
{
if (!opt_silent)
@@ -11755,7 +11757,7 @@ static void test_bug5194()
free(query);
free(param_str);
stmt_text= "drop table t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
}
@@ -11770,7 +11772,7 @@ static void test_bug5315()
stmt_text= "SELECT 1";
stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
DIE_UNLESS(rc == 0);
mysql_change_user(mysql, opt_user, opt_password, current_db);
rc= mysql_stmt_execute(stmt);
@@ -11783,7 +11785,7 @@ static void test_bug5315()
/* check that connection is OK */
mysql_stmt_close(stmt);
stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
DIE_UNLESS(rc == 0);
rc= mysql_stmt_execute(stmt);
DIE_UNLESS(rc == 0);
@@ -11806,13 +11808,13 @@ static void test_bug6049()
stmt_text= "SELECT MAKETIME(-25, 12, 12)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
res= mysql_store_result(mysql);
row= mysql_fetch_row(res);
stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -11855,13 +11857,13 @@ static void test_bug6058()
stmt_text= "SELECT CAST('0000-00-00' AS DATE)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
res= mysql_store_result(mysql);
row= mysql_fetch_row(res);
stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -11899,7 +11901,7 @@ static void test_bug6059()
stmt_text= "SELECT 'foo' INTO OUTFILE 'x.3'";
stmt= mysql_stmt_init(mysql);
- (void) mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ (void) mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
DIE_UNLESS(mysql_stmt_field_count(stmt) == 0);
mysql_stmt_close(stmt);
}
@@ -11916,13 +11918,13 @@ static void test_bug6046()
myheader("test_bug6046");
stmt_text= "DROP TABLE IF EXISTS t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "CREATE TABLE t1 (a int, b int)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "INSERT INTO t1 VALUES (1,1),(2,2),(3,1),(4,2)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt= mysql_stmt_init(mysql);
@@ -11930,7 +11932,7 @@ static void test_bug6046()
stmt_text= "SELECT t1.a FROM t1 NATURAL JOIN t1 as X1 "
"WHERE t1.b > ? ORDER BY t1.a";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
b= 1;
@@ -12066,7 +12068,7 @@ static void test_bug6096()
myheader("test_bug6096");
stmt_text= "drop table if exists t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
mysql_query(mysql, "set sql_mode=''");
@@ -12076,24 +12078,24 @@ static void test_bug6096()
" c_double double, c_varchar varchar(20), "
" c_char char(20), c_time time, c_date date, "
" c_datetime datetime)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "insert into t1 values (-100, -20000, 30000000, 4, 8, 1.0, "
"2.0, 'abc', 'def', now(), now(), now())";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "select * from t1";
/* Run select in prepared and non-prepared mode and compare metadata */
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
query_result= mysql_store_result(mysql);
query_field_list= mysql_fetch_fields(query_result);
query_field_count= mysql_num_fields(query_result);
stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -12150,7 +12152,7 @@ static void test_bug6096()
mysql_free_result(query_result);
mysql_free_result(stmt_metadata);
stmt_text= "drop table t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
}
@@ -12171,12 +12173,12 @@ static void test_datetime_ranges()
myheader("test_datetime_ranges");
stmt_text= "drop table if exists t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "create table t1 (year datetime, month datetime, day datetime, "
"hour datetime, min datetime, sec datetime)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt= mysql_simple_prepare(mysql,
@@ -12215,7 +12217,7 @@ static void test_datetime_ranges()
mysql_stmt_close(stmt);
stmt_text= "delete from t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt= mysql_simple_prepare(mysql, "INSERT INTO t1 (year, month, day) "
@@ -12243,11 +12245,11 @@ static void test_datetime_ranges()
mysql_stmt_close(stmt);
stmt_text= "drop table t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "create table t1 (day_ovfl time, day time, hour time, min time, sec time)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt= mysql_simple_prepare(mysql,
@@ -12284,7 +12286,7 @@ static void test_datetime_ranges()
mysql_stmt_close(stmt);
stmt_text= "drop table t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
}
@@ -12310,7 +12312,7 @@ static void test_bug4172()
stmt= mysql_stmt_init(mysql);
stmt_text= "SELECT f, d, e FROM t1";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -12335,7 +12337,7 @@ static void test_bug4172()
rc= mysql_stmt_fetch(stmt);
check_execute(stmt, rc);
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
res= mysql_store_result(mysql);
row= mysql_fetch_row(res);
@@ -12366,20 +12368,20 @@ static void test_conversion()
myheader("test_conversion");
stmt_text= "DROP TABLE IF EXISTS t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "CREATE TABLE t1 (a TEXT) DEFAULT CHARSET latin1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "SET character_set_connection=utf8, character_set_client=utf8, "
" character_set_results=latin1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt= mysql_stmt_init(mysql);
stmt_text= "INSERT INTO t1 (a) VALUES (?)";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
bzero((char*) my_bind, sizeof(my_bind));
@@ -12397,7 +12399,7 @@ static void test_conversion()
check_execute(stmt, rc);
stmt_text= "SELECT a FROM t1";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -12414,10 +12416,10 @@ static void test_conversion()
mysql_stmt_close(stmt);
stmt_text= "DROP TABLE t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "SET NAMES DEFAULT";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
}
@@ -12433,16 +12435,16 @@ static void test_rewind(void)
myheader("test_rewind");
stmt_text= "CREATE TABLE t1 (a int)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "INSERT INTO t1 VALUES(2),(3),(4)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt= mysql_stmt_init(mysql);
stmt_text= "SELECT * FROM t1";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
bzero((char*) &my_bind, sizeof(MYSQL_BIND));
@@ -12477,7 +12479,7 @@ static void test_rewind(void)
DIE_UNLESS(rc == MYSQL_NO_DATA);
stmt_text= "DROP TABLE t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
rc= mysql_stmt_free_result(stmt);
rc= mysql_stmt_close(stmt);
@@ -12505,7 +12507,7 @@ static void test_truncation()
"d double, d_1 double, ch char(30), ch_1 char(30), "
"tx text, tx_1 text, ch_2 char(30) "
")";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "insert into t1 VALUES ("
"-10, " /* i8 */
@@ -12523,7 +12525,7 @@ static void test_truncation()
"'12345.67 ', " /* tx_1 */
"'12345.67abc'" /* ch_2 */
")";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "select i8 c1, i8 c2, ui8 c3, i16_1 c4, ui16 c5, "
@@ -12533,7 +12535,7 @@ static void test_truncation()
"from t1";
stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -12741,7 +12743,7 @@ static void test_truncation_option()
stmt_text= "select -1";
stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -12787,7 +12789,7 @@ static void test_bug6761(void)
myheader("test_bug6761");
stmt_text= "CREATE TABLE t1 (a int, b char(255), c decimal)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
res= mysql_list_fields(mysql, "t1", "%");
@@ -12795,7 +12797,7 @@ static void test_bug6761(void)
mysql_free_result(res);
stmt_text= "DROP TABLE t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
}
@@ -12815,17 +12817,17 @@ static void test_bug8330()
stmt_text= "drop table if exists t1";
/* in case some previos test failed */
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "create table t1 (a int, b int)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
bzero((char*) my_bind, sizeof(my_bind));
for (i=0; i < 2; i++)
{
stmt[i]= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(stmt[i], query, strlen(query));
+ rc= mysql_stmt_prepare(stmt[i], query, (uint) strlen(query));
check_execute(stmt[i], rc);
my_bind[i].buffer_type= MYSQL_TYPE_LONG;
@@ -12846,7 +12848,7 @@ static void test_bug8330()
mysql_stmt_close(stmt[1]);
stmt_text= "drop table t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
}
@@ -13031,7 +13033,7 @@ static void test_bug8378()
sprintf(buf, "SELECT '%s'", out);
- rc=mysql_real_query(lmysql, buf, strlen(buf));
+ rc=mysql_real_query(lmysql, buf, (uint) strlen(buf));
myquery(rc);
mysql_close(lmysql);
@@ -13048,19 +13050,19 @@ static void test_bug8722()
myheader("test_bug8722");
/* Prepare test data */
stmt_text= "drop table if exists t1, v1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "CREATE TABLE t1 (c1 varchar(10), c2 varchar(10), c3 varchar(10),"
" c4 varchar(10), c5 varchar(10), c6 varchar(10),"
" c7 varchar(10), c8 varchar(10), c9 varchar(10),"
"c10 varchar(10))";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "INSERT INTO t1 VALUES (1,2,3,4,5,6,7,8,9,10)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "CREATE VIEW v1 AS SELECT * FROM t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
/* Note: if you uncomment following block everything works fine */
/*
@@ -13071,11 +13073,11 @@ static void test_bug8722()
stmt= mysql_stmt_init(mysql);
stmt_text= "select * from v1";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
mysql_stmt_close(stmt);
stmt_text= "drop table if exists t1, v1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
}
@@ -13086,7 +13088,7 @@ MYSQL_STMT *open_cursor(const char *query)
const ulong type= (ulong)CURSOR_TYPE_READ_ONLY;
MYSQL_STMT *stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(stmt, query, strlen(query));
+ rc= mysql_stmt_prepare(stmt, query, (uint) strlen(query));
check_execute(stmt, rc);
mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void*) &type);
@@ -13137,7 +13139,7 @@ static void test_bug9159()
myquery(rc);
stmt= mysql_stmt_init(mysql);
- mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (const void *)&type);
mysql_stmt_execute(stmt);
@@ -13379,7 +13381,7 @@ static void test_bug9643()
(void*) &prefetch_rows);
check_execute(stmt, rc);
stmt_text= "select * from t1";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
bzero((char*) my_bind, sizeof(my_bind));
@@ -13435,7 +13437,7 @@ static void test_bug11111()
stmt= mysql_stmt_init(mysql);
- mysql_stmt_prepare(stmt, query, strlen(query));
+ mysql_stmt_prepare(stmt, query, (uint) strlen(query));
mysql_stmt_execute(stmt);
bzero((char*) my_bind, sizeof(my_bind));
@@ -13493,7 +13495,7 @@ static void test_bug10729()
rc= mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void*) &type);
check_execute(stmt, rc);
stmt_text= "select name from t1";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
bzero((char*) my_bind, sizeof(my_bind));
@@ -13603,7 +13605,7 @@ static void test_bug10736()
rc= mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void*) &type);
check_execute(stmt, rc);
stmt_text= "select name from t1 where name=(select name from t1 where id=2)";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
bzero((char*) my_bind, sizeof(my_bind));
@@ -13653,7 +13655,7 @@ static void test_bug10794()
"name varchar(20) not null)");
stmt= mysql_stmt_init(mysql);
stmt_text= "insert into t1 (id, name) values (?, ?)";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
bzero((char*) my_bind, sizeof(my_bind));
my_bind[0].buffer_type= MYSQL_TYPE_LONG;
@@ -13667,12 +13669,12 @@ static void test_bug10794()
{
id_val= (i+1)*10;
sprintf(a, "a%d", i);
- a_len= strlen(a); /* safety against broken sprintf */
+ a_len= (uint) strlen(a); /* safety against broken sprintf */
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
}
stmt_text= "select name from t1";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
type= (ulong) CURSOR_TYPE_READ_ONLY;
mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (const void*) &type);
stmt1= mysql_stmt_init(mysql);
@@ -13694,7 +13696,7 @@ static void test_bug10794()
mysql_stmt_free_result(stmt);
mysql_stmt_reset(stmt);
stmt_text= "select name from t1 where id=10";
- rc= mysql_stmt_prepare(stmt1, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt1, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt1, rc);
rc= mysql_stmt_bind_result(stmt1, my_bind);
check_execute(stmt1, rc);
@@ -13744,7 +13746,7 @@ static void test_bug11172()
myquery(rc);
stmt= mysql_stmt_init(mysql);
stmt_text= "SELECT id, hired FROM t1 WHERE hired=?";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
type= (ulong) CURSOR_TYPE_READ_ONLY;
@@ -13816,7 +13818,7 @@ static void test_bug11656()
stmt_text= "select distinct test_kind, test_id from t1 "
"where server in (?, ?)";
stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
type= (ulong) CURSOR_TYPE_READ_ONLY;
mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (const void*) &type);
@@ -13828,7 +13830,7 @@ static void test_bug11656()
{
my_bind[i].buffer_type= MYSQL_TYPE_STRING;
my_bind[i].buffer= (gptr *)&buf[i];
- my_bind[i].buffer_length= strlen(buf[i]);
+ my_bind[i].buffer_length= (uint) strlen(buf[i]);
}
mysql_stmt_bind_param(stmt, my_bind);
@@ -13933,7 +13935,7 @@ static void test_bug11183()
stmt= mysql_stmt_init(mysql);
DIE_UNLESS(stmt != 0);
- rc= mysql_stmt_prepare(stmt, bug_statement, strlen(bug_statement));
+ rc= mysql_stmt_prepare(stmt, bug_statement, (uint) strlen(bug_statement));
check_execute(stmt, rc);
rc= mysql_query(mysql, "drop table t1");
@@ -13979,7 +13981,7 @@ static void test_bug11037()
stmt_text= "select id FROM t1";
stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
/* expected error */
rc = mysql_stmt_fetch(stmt);
@@ -14047,7 +14049,7 @@ static void test_bug10760()
con1: insert into t1 (id) values (1)
*/
stmt_text= "select id from t1 order by 1";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -14080,7 +14082,7 @@ static void test_bug10760()
else
{
stmt_text= "select id from t1 order by 1";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
rc= mysql_query(mysql, "alter table t1 engine=InnoDB");
@@ -14183,7 +14185,7 @@ static void test_bug11909()
myheader("test_bug11909");
stmt_text= "drop table if exists t1";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "create table t1 ("
@@ -14192,7 +14194,7 @@ static void test_bug11909()
" workdept varchar(6) not null, salary double not null,"
" bonus float not null, primary key (empno)"
") default charset=latin1 collate=latin1_bin";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "insert into t1 values "
@@ -14201,7 +14203,7 @@ static void test_bug11909()
"(30, 'SALLY', 'A', 'KWAN', 'C01', 38250, 800),"
"(50, 'JOHN', 'B', 'GEYER', 'E01', 40175, 800), "
"(60, 'IRVING', 'F', 'STERN', 'D11', 32250, 500)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
/* ****** Begin of trace ****** */
@@ -14299,7 +14301,7 @@ static void test_bug11901()
myheader("test_bug11901");
stmt_text= "drop table if exists t1, t2";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "create table t1 ("
@@ -14309,7 +14311,7 @@ static void test_bug11901()
" bonus float not null, primary key (empno), "
" unique key (workdept, empno) "
") default charset=latin1 collate=latin1_bin";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "insert into t1 values "
@@ -14346,7 +14348,7 @@ static void test_bug11901()
"(330, 'WING', '', 'LEE', 'E21', 25370, 500), "
"(340, 'JASON', 'R', 'GOUNOT', 'E21', 23840, 500)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "create table t2 ("
@@ -14355,7 +14357,7 @@ static void test_bug11901()
" admrdept varchar(6) not null, refcntd int(11) not null,"
" refcntu int(11) not null, primary key (deptno)"
") default charset=latin1 collate=latin1_bin";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
stmt_text= "insert into t2 values "
@@ -14368,7 +14370,7 @@ static void test_bug11901()
"('E01', 'SUPPORT SERVICES', 50, '', 'A00', 0, 0), "
"('E11', 'OPERATIONS', 90, '', 'E01', 0, 0), "
"('E21', 'SOFTWARE SUPPORT', 100,'', 'E01', 0, 0)";
- rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
+ rc= mysql_real_query(mysql, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
/* ****** Begin of trace ****** */
@@ -14438,7 +14440,7 @@ static void test_bug11904()
stmt_text= "SELECT id, MIN(name) FROM bug11904b GROUP BY id";
- rc= mysql_stmt_prepare(stmt1, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt1, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt1, rc);
memset(my_bind, 0, sizeof(my_bind));
@@ -14514,14 +14516,14 @@ static void test_bug12243()
stmt_text= "select a from t1";
- rc= mysql_stmt_prepare(stmt1, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt1, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt1, rc);
rc= mysql_stmt_execute(stmt1);
check_execute(stmt1, rc);
rc= mysql_stmt_fetch(stmt1);
check_execute(stmt1, rc);
- rc= mysql_stmt_prepare(stmt2, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt2, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt2, rc);
rc= mysql_stmt_execute(stmt2);
check_execute(stmt2, rc);
@@ -14627,7 +14629,7 @@ static void test_bug14210()
stmt_text= "select a from t1";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
while ((rc= mysql_stmt_fetch(stmt)) == 0)
@@ -14681,7 +14683,7 @@ static void test_bug13488()
rc= mysql_stmt_attr_set(stmt1,STMT_ATTR_CURSOR_TYPE, (const void *)&type);
check_execute(stmt1, rc);
- rc= mysql_stmt_prepare(stmt1, query, strlen(query));
+ rc= mysql_stmt_prepare(stmt1, query, (uint) strlen(query));
check_execute(stmt1, rc);
rc= mysql_stmt_execute(stmt1);
@@ -14736,7 +14738,7 @@ static void test_bug13524()
rc= mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (const void*) &type);
check_execute(stmt, rc);
- rc= mysql_stmt_prepare(stmt, query, strlen(query));
+ rc= mysql_stmt_prepare(stmt, query, (uint) strlen(query));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -14795,7 +14797,7 @@ static void test_bug14845()
rc= mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (const void*) &type);
check_execute(stmt, rc);
- rc= mysql_stmt_prepare(stmt, query, strlen(query));
+ rc= mysql_stmt_prepare(stmt, query, (uint) strlen(query));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -14831,7 +14833,7 @@ static void test_bug15510()
stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(stmt, query, strlen(query));
+ rc= mysql_stmt_prepare(stmt, query, (uint) strlen(query));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -15003,7 +15005,7 @@ static void test_bug15613()
/* II. Check SELECT metadata */
stmt_text= ("select t, tt, mt, lt, vl, vb, vu from t1");
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
metadata= mysql_stmt_result_metadata(stmt);
field= mysql_fetch_fields(metadata);
if (!opt_silent)
@@ -15197,7 +15199,7 @@ static void test_bug14169()
myquery(rc);
stmt= mysql_stmt_init(mysql);
stmt_text= "select f2,group_concat(f1) from t1 group by f2";
- rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
+ rc= mysql_stmt_prepare(stmt, stmt_text, (uint) strlen(stmt_text));
myquery(rc);
res= mysql_stmt_result_metadata(stmt);
field= mysql_fetch_fields(res);
@@ -15440,7 +15442,7 @@ static void test_bug20152()
myquery(rc);
stmt= mysql_stmt_init(mysql);
- rc= mysql_stmt_prepare(stmt, query, strlen(query));
+ rc= mysql_stmt_prepare(stmt, query, (uint) strlen(query));
check_execute(stmt, rc);
rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
@@ -15485,11 +15487,11 @@ static void test_bug15752()
printf("Unable connect to MySQL server: %s\n", mysql_error(&mysql_local));
DIE_UNLESS(0);
}
- rc= mysql_real_query(&mysql_local, query, strlen(query));
+ rc= mysql_real_query(&mysql_local, query, (uint) strlen(query));
myquery(rc);
mysql_free_result(mysql_store_result(&mysql_local));
- rc= mysql_real_query(&mysql_local, query, strlen(query));
+ rc= mysql_real_query(&mysql_local, query, (uint) strlen(query));
DIE_UNLESS(rc && mysql_errno(&mysql_local) == CR_COMMANDS_OUT_OF_SYNC);
if (! opt_silent)
@@ -15504,7 +15506,7 @@ static void test_bug15752()
/* The second problem is not reproducible: add the test case */
for (i = 0; i < ITERATION_COUNT; i++)
{
- if (mysql_real_query(&mysql_local, query, strlen(query)))
+ if (mysql_real_query(&mysql_local, query, (uint) strlen(query)))
{
printf("\ni=%d %s failed: %s\n", i, query, mysql_error(&mysql_local));
break;
@@ -15551,7 +15553,7 @@ static void test_bug21206()
for (fetch= fetch_array; fetch < fetch_array + cursor_count; ++fetch)
{
/* Init will exit(1) in case of error */
- stmt_fetch_init(fetch, fetch - fetch_array, query);
+ stmt_fetch_init(fetch, (uint) (fetch - fetch_array), query);
}
for (fetch= fetch_array; fetch < fetch_array + cursor_count; ++fetch)
@@ -15646,7 +15648,7 @@ static void test_bug23383()
stmt= mysql_stmt_init(mysql);
DIE_UNLESS(stmt != 0);
- rc= mysql_stmt_prepare(stmt, insert_query, strlen(insert_query));
+ rc= mysql_stmt_prepare(stmt, insert_query, (uint) strlen(insert_query));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -15659,7 +15661,7 @@ static void test_bug23383()
row_count= mysql_stmt_affected_rows(stmt);
DIE_UNLESS(row_count == (my_ulonglong)-1);
- rc= mysql_stmt_prepare(stmt, update_query, strlen(update_query));
+ rc= mysql_stmt_prepare(stmt, update_query, (uint) strlen(update_query));
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -15725,7 +15727,7 @@ static void test_bug21635()
rc= mysql_query(mysql, "INSERT INTO t1 VALUES (1)");
myquery(rc);
- rc= mysql_real_query(mysql, query, query_end - query);
+ rc= mysql_real_query(mysql, query, (uint) (query_end - query));
myquery(rc);
result= mysql_use_result(mysql);
@@ -16276,6 +16278,176 @@ static void test_bug38486(void)
DBUG_VOID_RETURN;
}
+static void bug20023_change_user(MYSQL *con)
+{
+ DIE_IF(mysql_change_user(con,
+ opt_user,
+ opt_password,
+ opt_db ? opt_db : "test"));
+}
+
+static void bug20023_query_int_variable(MYSQL *con,
+ const char *var_name,
+ int *var_value)
+{
+ MYSQL_RES *rs;
+ MYSQL_ROW row;
+
+ char query_buffer[MAX_TEST_QUERY_LENGTH];
+
+ my_snprintf(query_buffer,
+ sizeof (query_buffer),
+ "SELECT @@%s",
+ (const char *) var_name);
+
+ DIE_IF(mysql_query(con, query_buffer));
+ DIE_UNLESS(rs= mysql_store_result(con));
+ DIE_UNLESS(row= mysql_fetch_row(rs));
+ *var_value= atoi(row[0]);
+ mysql_free_result(rs);
+}
+
+static void test_bug20023()
+{
+ MYSQL con;
+
+ int sql_big_selects_orig;
+ int max_join_size_orig;
+
+ int sql_big_selects_2;
+ int sql_big_selects_3;
+ int sql_big_selects_4;
+ int sql_big_selects_5;
+
+ char query_buffer[MAX_TEST_QUERY_LENGTH];
+
+ /* Create a new connection. */
+
+ DIE_UNLESS(mysql_init(&con));
+
+ DIE_UNLESS(mysql_real_connect(&con,
+ opt_host,
+ opt_user,
+ opt_password,
+ opt_db ? opt_db : "test",
+ opt_port,
+ opt_unix_socket,
+ CLIENT_FOUND_ROWS));
+
+ /***********************************************************************
+ Remember original SQL_BIG_SELECTS, MAX_JOIN_SIZE values.
+ ***********************************************************************/
+
+ bug20023_query_int_variable(&con,
+ "session.sql_big_selects",
+ &sql_big_selects_orig);
+
+ bug20023_query_int_variable(&con,
+ "global.max_join_size",
+ &max_join_size_orig);
+
+ /***********************************************************************
+ Test that COM_CHANGE_USER resets the SQL_BIG_SELECTS to the initial value.
+ ***********************************************************************/
+
+ /* Issue COM_CHANGE_USER. */
+
+ bug20023_change_user(&con);
+
+ /* Query SQL_BIG_SELECTS. */
+
+ bug20023_query_int_variable(&con,
+ "session.sql_big_selects",
+ &sql_big_selects_2);
+
+ /* Check that SQL_BIG_SELECTS is reset properly. */
+
+ DIE_UNLESS(sql_big_selects_orig == sql_big_selects_2);
+
+ /***********************************************************************
+ Test that if MAX_JOIN_SIZE set to non-default value,
+ SQL_BIG_SELECTS will be 0.
+ ***********************************************************************/
+
+ /* Set MAX_JOIN_SIZE to some non-default value. */
+
+ DIE_IF(mysql_query(&con, "SET @@global.max_join_size = 10000"));
+ DIE_IF(mysql_query(&con, "SET @@session.max_join_size = default"));
+
+ /* Issue COM_CHANGE_USER. */
+
+ bug20023_change_user(&con);
+
+ /* Query SQL_BIG_SELECTS. */
+
+ bug20023_query_int_variable(&con,
+ "session.sql_big_selects",
+ &sql_big_selects_3);
+
+ /* Check that SQL_BIG_SELECTS is 0. */
+
+ DIE_UNLESS(sql_big_selects_3 == 0);
+
+ /***********************************************************************
+ Test that if MAX_JOIN_SIZE set to default value,
+ SQL_BIG_SELECTS will be 1.
+ ***********************************************************************/
+
+ /* Set MAX_JOIN_SIZE to the default value (-1). */
+
+ DIE_IF(mysql_query(&con, "SET @@global.max_join_size = -1"));
+ DIE_IF(mysql_query(&con, "SET @@session.max_join_size = default"));
+
+ /* Issue COM_CHANGE_USER. */
+
+ bug20023_change_user(&con);
+
+ /* Query SQL_BIG_SELECTS. */
+
+ bug20023_query_int_variable(&con,
+ "session.sql_big_selects",
+ &sql_big_selects_4);
+
+ /* Check that SQL_BIG_SELECTS is 1. */
+
+ DIE_UNLESS(sql_big_selects_4 == 1);
+
+ /***********************************************************************
+ Restore MAX_JOIN_SIZE.
+ Check that SQL_BIG_SELECTS will be the original one.
+ ***********************************************************************/
+
+ /* Restore MAX_JOIN_SIZE. */
+
+ my_snprintf(query_buffer,
+ sizeof (query_buffer),
+ "SET @@global.max_join_size = %d",
+ (int) max_join_size_orig);
+
+ DIE_IF(mysql_query(&con, query_buffer));
+ DIE_IF(mysql_query(&con, "SET @@session.max_join_size = default"));
+
+ /* Issue COM_CHANGE_USER. */
+
+ bug20023_change_user(&con);
+
+ /* Query SQL_BIG_SELECTS. */
+
+ bug20023_query_int_variable(&con,
+ "session.sql_big_selects",
+ &sql_big_selects_5);
+
+ /* Check that SQL_BIG_SELECTS is 1. */
+
+ DIE_UNLESS(sql_big_selects_5 == sql_big_selects_orig);
+
+ /***********************************************************************
+ That's it. Cleanup.
+ ***********************************************************************/
+
+ mysql_close(&con);
+}
+
static void test_bug40365(void)
{
uint rc, i;
@@ -16780,6 +16952,7 @@ static struct my_tests_st my_tests[]= {
{ "test_bug36326", test_bug36326 },
#endif
{ "test_bug41078", test_bug41078 },
+ { "test_bug20023", test_bug20023 },
{ 0, 0 }
};
diff --git a/tools/mysqlmanager.c b/tools/mysqlmanager.c
index faed9addf60..36f2b8eff9d 100644
--- a/tools/mysqlmanager.c
+++ b/tools/mysqlmanager.c
@@ -992,7 +992,6 @@ end:
static int authenticate(struct manager_thd* thd)
{
char* buf_end,*buf,*p,*p_end;
- my_MD5_CTX context;
uchar digest[MD5_LEN];
struct manager_user* u;
char c;
@@ -1018,9 +1017,7 @@ static int authenticate(struct manager_thd* thd)
return 1;
for (;my_isspace(cs,*buf) && buf<buf_end;buf++) /* empty */;
- my_MD5Init(&context);
- my_MD5Update(&context,(uchar*) buf,(uint)(buf_end-buf));
- my_MD5Final(digest,&context);
+ MY_MD5_HASH (digest, (uchar*) buf,(uint)(buf_end-buf));
if (memcmp(u->md5_pass,digest,MD5_LEN))
return 1;
client_msg(&thd->net,MANAGER_OK,"OK");
diff --git a/vio/viosocket.c b/vio/viosocket.c
index 84fdd6f57e4..13fbf5d98d8 100644
--- a/vio/viosocket.c
+++ b/vio/viosocket.c
@@ -67,7 +67,7 @@ int vio_read_buff(Vio *vio, gptr buf, int size)
if (vio->read_pos < vio->read_end)
{
- rc= min(vio->read_end - vio->read_pos, size);
+ rc= min((int) (vio->read_end - vio->read_pos), size);
memcpy(buf, vio->read_pos, rc);
vio->read_pos+= rc;
/*