1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

merge from 5.5

This commit is contained in:
Bjorn Munch
2010-10-21 11:20:53 +02:00
70 changed files with 778 additions and 430 deletions

View File

@ -50,7 +50,6 @@
#include "mysql.h" #include "mysql.h"
#include "mysql_version.h" #include "mysql_version.h"
#include "mysqld_error.h" #include "mysqld_error.h"
#include "../sql/ha_ndbcluster_tables.h"
/* Exit codes */ /* Exit codes */

View File

@ -250,11 +250,14 @@ struct st_connection
my_bool pending; my_bool pending;
#ifdef EMBEDDED_LIBRARY #ifdef EMBEDDED_LIBRARY
pthread_t tid;
const char *cur_query; const char *cur_query;
int cur_query_len; int cur_query_len;
pthread_mutex_t mutex; int command, result;
pthread_cond_t cond; pthread_mutex_t query_mutex;
pthread_t tid; pthread_cond_t query_cond;
pthread_mutex_t result_mutex;
pthread_cond_t result_cond;
int query_done; int query_done;
my_bool has_thread; my_bool has_thread;
#endif /*EMBEDDED_LIBRARY*/ #endif /*EMBEDDED_LIBRARY*/
@ -710,71 +713,146 @@ void handle_no_error(struct st_command*);
#ifdef EMBEDDED_LIBRARY #ifdef EMBEDDED_LIBRARY
#define EMB_SEND_QUERY 1
#define EMB_READ_QUERY_RESULT 2
#define EMB_END_CONNECTION 3
/* attributes of the query thread */ /* attributes of the query thread */
pthread_attr_t cn_thd_attrib; pthread_attr_t cn_thd_attrib;
/* /*
send_one_query executes query in separate thread, which is This procedure represents the connection and actually
necessary in embedded library to run 'send' in proper way. runs queries when in the EMBEDDED-SERVER mode.
This implementation doesn't handle errors returned The run_query_normal() just sends request for running
by mysql_send_query. It's technically possible, though mysql_send_query and mysql_read_query_result() here.
I don't see where it is needed.
*/ */
pthread_handler_t send_one_query(void *arg)
pthread_handler_t connection_thread(void *arg)
{ {
struct st_connection *cn= (struct st_connection*)arg; struct st_connection *cn= (struct st_connection*)arg;
mysql_thread_init(); mysql_thread_init();
(void) mysql_send_query(&cn->mysql, cn->cur_query, cn->cur_query_len); while (cn->command != EMB_END_CONNECTION)
{
if (!cn->command)
{
pthread_mutex_lock(&cn->query_mutex);
while (!cn->command)
pthread_cond_wait(&cn->query_cond, &cn->query_mutex);
pthread_mutex_unlock(&cn->query_mutex);
}
switch (cn->command)
{
case EMB_END_CONNECTION:
goto end_thread;
case EMB_SEND_QUERY:
cn->result= mysql_send_query(&cn->mysql, cn->cur_query, cn->cur_query_len);
break;
case EMB_READ_QUERY_RESULT:
cn->result= mysql_read_query_result(&cn->mysql);
break;
default:
DBUG_ASSERT(0);
}
cn->command= 0;
pthread_mutex_lock(&cn->result_mutex);
cn->query_done= 1;
pthread_cond_signal(&cn->result_cond);
pthread_mutex_unlock(&cn->result_mutex);
}
mysql_thread_end(); end_thread:
pthread_mutex_lock(&cn->mutex);
cn->query_done= 1; cn->query_done= 1;
pthread_cond_signal(&cn->cond); mysql_thread_end();
pthread_mutex_unlock(&cn->mutex);
pthread_exit(0); pthread_exit(0);
return 0; return 0;
} }
static int do_send_query(struct st_connection *cn, const char *q, int q_len, static void wait_query_thread_done(struct st_connection *con)
int flags)
{ {
if (flags & QUERY_REAP_FLAG) DBUG_ASSERT(con->has_thread);
if (!con->query_done)
{
pthread_mutex_lock(&con->result_mutex);
while (!con->query_done)
pthread_cond_wait(&con->result_cond, &con->result_mutex);
pthread_mutex_unlock(&con->result_mutex);
}
}
static void signal_connection_thd(struct st_connection *cn, int command)
{
DBUG_ASSERT(cn->has_thread);
cn->query_done= 0;
cn->command= command;
pthread_mutex_lock(&cn->query_mutex);
pthread_cond_signal(&cn->query_cond);
pthread_mutex_unlock(&cn->query_mutex);
}
/*
Sometimes we try to execute queries when the connection is closed.
It's done to make sure it was closed completely.
So that if our connection is closed (cn->has_thread == 0), we just return
the mysql_send_query() result which is an error in this case.
*/
static int do_send_query(struct st_connection *cn, const char *q, int q_len)
{
if (!cn->has_thread)
return mysql_send_query(&cn->mysql, q, q_len); return mysql_send_query(&cn->mysql, q, q_len);
if (pthread_mutex_init(&cn->mutex, NULL) ||
pthread_cond_init(&cn->cond, NULL))
die("Error in the thread library");
cn->cur_query= q; cn->cur_query= q;
cn->cur_query_len= q_len; cn->cur_query_len= q_len;
cn->query_done= 0; signal_connection_thd(cn, EMB_SEND_QUERY);
if (pthread_create(&cn->tid, &cn_thd_attrib, send_one_query, (void*)cn))
die("Cannot start new thread for query");
cn->has_thread= TRUE;
return 0; return 0;
} }
static void wait_query_thread_end(struct st_connection *con) static int do_read_query_result(struct st_connection *cn)
{ {
if (!con->query_done) DBUG_ASSERT(cn->has_thread);
{ wait_query_thread_done(cn);
pthread_mutex_lock(&con->mutex); signal_connection_thd(cn, EMB_READ_QUERY_RESULT);
while (!con->query_done) wait_query_thread_done(cn);
pthread_cond_wait(&con->cond, &con->mutex);
pthread_mutex_unlock(&con->mutex); return cn->result;
} }
if (con->has_thread)
{
pthread_join(con->tid, NULL); static void emb_close_connection(struct st_connection *cn)
con->has_thread= FALSE; {
} if (!cn->has_thread)
return;
wait_query_thread_done(cn);
signal_connection_thd(cn, EMB_END_CONNECTION);
pthread_join(cn->tid, NULL);
cn->has_thread= FALSE;
pthread_mutex_destroy(&cn->query_mutex);
pthread_cond_destroy(&cn->query_cond);
pthread_mutex_destroy(&cn->result_mutex);
pthread_cond_destroy(&cn->result_cond);
}
static void init_connection_thd(struct st_connection *cn)
{
cn->query_done= 1;
cn->command= 0;
if (pthread_mutex_init(&cn->query_mutex, NULL) ||
pthread_cond_init(&cn->query_cond, NULL) ||
pthread_mutex_init(&cn->result_mutex, NULL) ||
pthread_cond_init(&cn->result_cond, NULL) ||
pthread_create(&cn->tid, &cn_thd_attrib, connection_thread, (void*)cn))
die("Error in the thread library");
cn->has_thread=TRUE;
} }
#else /*EMBEDDED_LIBRARY*/ #else /*EMBEDDED_LIBRARY*/
#define do_send_query(cn,q,q_len,flags) mysql_send_query(&cn->mysql, q, q_len) #define do_send_query(cn,q,q_len) mysql_send_query(&cn->mysql, q, q_len)
#define do_read_query_result(cn) mysql_read_query_result(&cn->mysql)
#endif /*EMBEDDED_LIBRARY*/ #endif /*EMBEDDED_LIBRARY*/
@ -1117,6 +1195,9 @@ void close_connections()
DBUG_ENTER("close_connections"); DBUG_ENTER("close_connections");
for (--next_con; next_con >= connections; --next_con) for (--next_con; next_con >= connections; --next_con)
{ {
#ifdef EMBEDDED_LIBRARY
emb_close_connection(next_con);
#endif
if (next_con->stmt) if (next_con->stmt)
mysql_stmt_close(next_con->stmt); mysql_stmt_close(next_con->stmt);
next_con->stmt= 0; next_con->stmt= 0;
@ -4919,7 +5000,7 @@ void do_close_connection(struct st_command *command)
we need to check if the query's thread was finished and probably wait we need to check if the query's thread was finished and probably wait
(embedded-server specific) (embedded-server specific)
*/ */
wait_query_thread_end(con); emb_close_connection(con);
#endif /*EMBEDDED_LIBRARY*/ #endif /*EMBEDDED_LIBRARY*/
if (con->stmt) if (con->stmt)
mysql_stmt_close(con->stmt); mysql_stmt_close(con->stmt);
@ -5286,9 +5367,9 @@ void do_connect(struct st_command *command)
} }
#ifdef EMBEDDED_LIBRARY #ifdef EMBEDDED_LIBRARY
con_slot->query_done= 1; init_connection_thd(con_slot);
con_slot->has_thread= FALSE; #endif /*EMBEDDED_LIBRARY*/
#endif
if (!mysql_init(&con_slot->mysql)) if (!mysql_init(&con_slot->mysql))
die("Failed on mysql_init()"); die("Failed on mysql_init()");
@ -6845,21 +6926,13 @@ void run_query_normal(struct st_connection *cn, struct st_command *command,
/* /*
Send the query Send the query
*/ */
if (do_send_query(cn, query, query_len, flags)) if (do_send_query(cn, query, query_len))
{ {
handle_error(command, mysql_errno(mysql), mysql_error(mysql), handle_error(command, mysql_errno(mysql), mysql_error(mysql),
mysql_sqlstate(mysql), ds); mysql_sqlstate(mysql), ds);
goto end; goto end;
} }
} }
#ifdef EMBEDDED_LIBRARY
/*
Here we handle 'reap' command, so we need to check if the
query's thread was finished and probably wait
*/
else if (flags & QUERY_REAP_FLAG)
wait_query_thread_end(cn);
#endif /*EMBEDDED_LIBRARY*/
if (!(flags & QUERY_REAP_FLAG)) if (!(flags & QUERY_REAP_FLAG))
{ {
cn->pending= TRUE; cn->pending= TRUE;
@ -6872,7 +6945,7 @@ void run_query_normal(struct st_connection *cn, struct st_command *command,
When on first result set, call mysql_read_query_result to retrieve When on first result set, call mysql_read_query_result to retrieve
answer to the query sent earlier answer to the query sent earlier
*/ */
if ((counter==0) && mysql_read_query_result(mysql)) if ((counter==0) && do_read_query_result(cn))
{ {
handle_error(command, mysql_errno(mysql), mysql_error(mysql), handle_error(command, mysql_errno(mysql), mysql_error(mysql),
mysql_sqlstate(mysql), ds); mysql_sqlstate(mysql), ds);
@ -8049,6 +8122,9 @@ int main(int argc, char **argv)
ps_protocol_enabled= 1; ps_protocol_enabled= 1;
st_connection *con= connections; st_connection *con= connections;
#ifdef EMBEDDED_LIBRARY
init_connection_thd(con);
#endif /*EMBEDDED_LIBRARY*/
if (!( mysql_init(&con->mysql))) if (!( mysql_init(&con->mysql)))
die("Failed in mysql_init()"); die("Failed in mysql_init()");
if (opt_connect_timeout) if (opt_connect_timeout)

View File

@ -13,13 +13,30 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND CMAKE_COMPILER_IS_GNUCXX
AND CMAKE_SIZEOF_VOID_P EQUAL 4)
IF(NOT DEFINED BUGGY_GCC_NO_DTRACE_MODULES)
EXECUTE_PROCESS(
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1} --version
OUTPUT_VARIABLE out)
IF(out MATCHES "3.4.6")
# This gcc causes crashes in dlopen() for dtraced shared libs,
# while standard shipped with Solaris10 3.4.3 is ok
SET(BUGGY_GCC_NO_DTRACE_MODULES 1 CACHE INTERNAL "")
ELSE()
SET(BUGGY_GCC_NO_DTRACE_MODULES 0 CACHE INTERNAL "")
ENDIF()
ENDIF()
ENDIF()
# Check if OS supports DTrace # Check if OS supports DTrace
MACRO(CHECK_DTRACE) MACRO(CHECK_DTRACE)
FIND_PROGRAM(DTRACE dtrace) FIND_PROGRAM(DTRACE dtrace)
MARK_AS_ADVANCED(DTRACE) MARK_AS_ADVANCED(DTRACE)
# On FreeBSD, dtrace does not handle userland tracing yet # On FreeBSD, dtrace does not handle userland tracing yet
IF(DTRACE AND NOT CMAKE_SYSTEM_NAME MATCHES "FreeBSD") IF(DTRACE AND NOT CMAKE_SYSTEM_NAME MATCHES "FreeBSD"
AND NOT BUGGY_GCC_NO_DTRACE_MODULES)
SET(ENABLE_DTRACE ON CACHE BOOL "Enable dtrace") SET(ENABLE_DTRACE ON CACHE BOOL "Enable dtrace")
ENDIF() ENDIF()
SET(HAVE_DTRACE ${ENABLE_DTRACE}) SET(HAVE_DTRACE ${ENABLE_DTRACE})
@ -72,22 +89,6 @@ IF(ENABLE_DTRACE)
) )
ENDIF() ENDIF()
IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND CMAKE_COMPILER_IS_GNUCXX
AND CMAKE_SIZEOF_VOID_P EQUAL 4)
IF(NOT DEFINED BUGGY_GCC_NO_DTRACE_MODULES)
EXECUTE_PROCESS(
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1} --version
OUTPUT_VARIABLE out)
IF(out MATCHES "3.4.6")
# This gcc causes crashes in dlopen() for dtraced shared libs,
# while standard shipped with Solaris10 3.4.3 is ok
SET(BUGGY_GCC_NO_DTRACE_MODULES 1 CACHE INTERNAL "")
ELSE()
SET(BUGGY_GCC_NO_DTRACE_MODULES 0 CACHE INTERNAL "")
ENDIF()
ENDIF()
ENDIF()
FUNCTION(DTRACE_INSTRUMENT target) FUNCTION(DTRACE_INSTRUMENT target)
IF(BUGGY_GCC_NO_DTRACE_MODULES) IF(BUGGY_GCC_NO_DTRACE_MODULES)
GET_TARGET_PROPERTY(target_type ${target} TYPE) GET_TARGET_PROPERTY(target_type ${target} TYPE)

View File

@ -1335,15 +1335,11 @@ void _db_doprnt_(const char *format,...)
* This function is intended as a * This function is intended as a
* vfprintf clone with consistent, platform independent output for * vfprintf clone with consistent, platform independent output for
* problematic formats like %p, %zd and %lld. * problematic formats like %p, %zd and %lld.
* However: full functionality for my_vsnprintf has not been backported yet,
* so code using "%g" or "%f" will have undefined behaviour.
*/ */
static void DbugVfprintf(FILE *stream, const char* format, va_list args) static void DbugVfprintf(FILE *stream, const char* format, va_list args)
{ {
char cvtbuf[1024]; char cvtbuf[1024];
size_t len; (void) my_vsnprintf(cvtbuf, sizeof(cvtbuf), format, args);
/* Do not use my_vsnprintf, it does not support "%g". */
len = vsnprintf(cvtbuf, sizeof(cvtbuf), format, args);
(void) fprintf(stream, "%s\n", cvtbuf); (void) fprintf(stream, "%s\n", cvtbuf);
} }

View File

@ -53,7 +53,7 @@
<length modifier> can be 'l', 'll', or 'z'. <length modifier> can be 'l', 'll', or 'z'.
Supported formats are 's' (null pointer is accepted, printed as Supported formats are 's' (null pointer is accepted, printed as
"(null)"), 'b' (extension, see below), 'c', 'd', 'u', 'x', 'o', "(null)"), 'b' (extension, see below), 'c', 'd', 'i', 'u', 'x', 'o',
'X', 'p' (works as 0x%x). 'X', 'p' (works as 0x%x).
Standard syntax for positional arguments $n is supported. Standard syntax for positional arguments $n is supported.

View File

@ -1,21 +1,17 @@
# Copyright (C) 2001-2006 MySQL AB # Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
# #
# This library is free software; you can redistribute it and/or # This program is free software; you can redistribute it and/or modify
# modify it under the terms of the GNU Library General Public # it under the terms of the GNU General Public License as published by
# License as published by the Free Software Foundation; version 2 # the Free Software Foundation; version 2 of the License.
# of the License.
# #
# This library is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# Library General Public License for more details. # GNU General Public License for more details.
# #
# You should have received a copy of the GNU Library General Public # You should have received a copy of the GNU General Public License
# License along with this library; if not, write to the Free # along with this program; if not, write to the Free Software
# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# MA 02111-1307, USA
#
# This file is public domain and comes with NO WARRANTY of any kind
MYSQLDATAdir = $(localstatedir) MYSQLDATAdir = $(localstatedir)
MYSQLSHAREdir = $(pkgdatadir) MYSQLSHAREdir = $(pkgdatadir)

View File

@ -481,6 +481,10 @@ int init_embedded_server(int argc, char **argv, char **groups)
char *fake_argv[] = { (char *)"", 0 }; char *fake_argv[] = { (char *)"", 0 };
const char *fake_groups[] = { "server", "embedded", 0 }; const char *fake_groups[] = { "server", "embedded", 0 };
my_bool acl_error; my_bool acl_error;
if (my_thread_init())
return 1;
if (argc) if (argc)
{ {
argcp= &argc; argcp= &argc;

View File

@ -13,6 +13,7 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
IF(INSTALL_MYSQLTESTDIR)
INSTALL( INSTALL(
DIRECTORY . DIRECTORY .
DESTINATION ${INSTALL_MYSQLTESTDIR} DESTINATION ${INSTALL_MYSQLTESTDIR}
@ -28,6 +29,7 @@ INSTALL(
PATTERN "*.am" EXCLUDE PATTERN "*.am" EXCLUDE
PATTERN "*.in" EXCLUDE PATTERN "*.in" EXCLUDE
) )
ENDIF()
@ -48,9 +50,11 @@ IF(UNIX)
./mysql-test-run.pl mysql-test-run ./mysql-test-run.pl mysql-test-run
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
) )
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/mtr IF(INSTALL_MYSQLTESTDIR)
${CMAKE_CURRENT_BINARY_DIR}/mysql-test-run INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/mtr
DESTINATION ${INSTALL_MYSQLTESTDIR}) ${CMAKE_CURRENT_BINARY_DIR}/mysql-test-run
DESTINATION ${INSTALL_MYSQLTESTDIR})
ENDIF()
ENDIF() ENDIF()
IF(CMAKE_GENERATOR MATCHES "Visual Studio") IF(CMAKE_GENERATOR MATCHES "Visual Studio")

View File

@ -92,5 +92,3 @@ parts.partition_mgm_lc1_ndb # joro : NDB tests marked as experiment
parts.partition_mgm_lc2_ndb # joro : NDB tests marked as experimental as agreed with bochklin parts.partition_mgm_lc2_ndb # joro : NDB tests marked as experimental as agreed with bochklin
parts.partition_syntax_ndb # joro : NDB tests marked as experimental as agreed with bochklin parts.partition_syntax_ndb # joro : NDB tests marked as experimental as agreed with bochklin
parts.partition_value_ndb # joro : NDB tests marked as experimental as agreed with bochklin parts.partition_value_ndb # joro : NDB tests marked as experimental as agreed with bochklin
main.mysqlhotcopy_myisam # horst: due to bug#54129
main.mysqlhotcopy_archive # horst: due to bug#54129

View File

@ -52,13 +52,19 @@ inc $count;
FLUSH TABLES; FLUSH TABLES;
source include/show_binlog_events.inc; source include/show_binlog_events.inc;
insert delayed into t1 values (null),(null),(null),(null); RESET MASTER;
insert /* before delayed */ delayed /* after delayed */ into t1 values (null),(null),(null),(null);
inc $count; inc $count; inc $count; inc $count; inc $count; inc $count; inc $count; inc $count;
--source include/wait_until_rows_count.inc --source include/wait_until_rows_count.inc
insert delayed into t1 values (null),(null),(400),(null); insert /*! delayed */ into t1 values (null),(null),(400),(null);
inc $count; inc $count; inc $count; inc $count; inc $count; inc $count; inc $count; inc $count;
--source include/wait_until_rows_count.inc --source include/wait_until_rows_count.inc
if (`SELECT @@SESSION.BINLOG_FORMAT = 'STATEMENT'`) {
FLUSH TABLES;
source include/show_binlog_events.inc;
}
select * from t1; select * from t1;
drop table t1; drop table t1;

View File

@ -338,10 +338,21 @@ if ($CRC_RET_stmt_sidef) {
SHOW BINLOG EVENTS; SHOW BINLOG EVENTS;
--die Warnings printed --die Warnings printed
} }
# The first event is format_description, the second is
# Query_event('BEGIN'), and the third should be our Table_map.
--let $event_type= query_get_value(SHOW BINLOG EVENTS, Event_type, 3) --let $event_type= query_get_value(SHOW BINLOG EVENTS, Event_type, 3)
if (`SELECT '$event_type' != 'Table_map'`) { # The first event is format_description, the second is
# Query_event('BEGIN'), and the third should be our Query
# for 'INSERT DELAYED' unsafe_type 3, which is safe after
# the fix of bug#54579.
if (`SELECT $unsafe_type = 3 AND '$event_type' != 'Query'`) {
--enable_query_log
--echo ******** Failure! Event number 3 was a '$event_type', not a 'Query'. ********
SHOW BINLOG EVENTS;
--die Wrong events in binlog.
}
# The first event is format_description, the second is
# Query_event('BEGIN'), and the third should be our Table_map
# for unsafe statement.
if (`SELECT $unsafe_type != 3 AND '$event_type' != 'Table_map'`) {
--enable_query_log --enable_query_log
--echo ******** Failure! Event number 3 was a '$event_type', not a 'Table_map'. ******** --echo ******** Failure! Event number 3 was a '$event_type', not a 'Table_map'. ********
SHOW BINLOG EVENTS; SHOW BINLOG EVENTS;

View File

@ -43,5 +43,11 @@ log-bin=mysqld-bin
# Run tests with the performance schema instrumentation # Run tests with the performance schema instrumentation
loose-enable-performance-schema loose-enable-performance-schema
# Run tests with a small number of instrumented objects
# to limit memory consumption with MTR
loose-performance-schema-max-mutex-instances=10000
loose-performance-schema-max-rwlock-instances=10000
loose-performance-schema-max-table-instances=500
loose-performance-schema-max-table-handles=1000
binlog-direct-non-transactional-updates binlog-direct-non-transactional-updates

View File

@ -1200,6 +1200,8 @@ set time_zone= @@global.time_zone;
select str_to_date('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE; select str_to_date('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE;
str_to_date('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE str_to_date('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE
NULL NULL
Warnings:
Warning 1411 Incorrect datetime value: '10:00 PM' for function str_to_date
create table t1 (field DATE); create table t1 (field DATE);
insert into t1 values ('2006-11-06'); insert into t1 values ('2006-11-06');
select * from t1 where field < '2006-11-06 04:08:36.0'; select * from t1 where field < '2006-11-06 04:08:36.0';

View File

@ -556,9 +556,13 @@ DROP TABLE IF EXISTS t1;
SELECT STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE; SELECT STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE;
STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE
NULL NULL
Warnings:
Warning 1411 Incorrect datetime value: '10:00 PM' for function str_to_date
SELECT STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL (INTERVAL(1,2,3) + 1) MINUTE; SELECT STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL (INTERVAL(1,2,3) + 1) MINUTE;
STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL (INTERVAL(1,2,3) + 1) MINUTE STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL (INTERVAL(1,2,3) + 1) MINUTE
NULL NULL
Warnings:
Warning 1411 Incorrect datetime value: '10:00 PM' for function str_to_date
SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND; SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
"1997-12-31 23:59:59" + INTERVAL 1 SECOND "1997-12-31 23:59:59" + INTERVAL 1 SECOND
1998-01-01 00:00:00 1998-01-01 00:00:00

View File

@ -4171,9 +4171,10 @@ str_to_date('2007-10-00','%Y-%m-%d') between '2007/09/01 00:00:00'
set SQL_MODE=TRADITIONAL; set SQL_MODE=TRADITIONAL;
select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34'; select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34';
str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34' str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34'
0 NULL
Warnings: Warnings:
Warning 1292 Truncated incorrect datetime value: '2007-10-00 12:34' Warning 1292 Truncated incorrect datetime value: '2007-10-00 12:34'
Warning 1411 Incorrect datetime value: '2007-10-00 12:34' for function str_to_date
select str_to_date('2007-10-01 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34'; select str_to_date('2007-10-01 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34';
str_to_date('2007-10-01 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34' str_to_date('2007-10-01 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34'
0 0
@ -4181,17 +4182,16 @@ Warnings:
Warning 1292 Truncated incorrect datetime value: '2007-10-00 12:34' Warning 1292 Truncated incorrect datetime value: '2007-10-00 12:34'
select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-01 12:34'; select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-01 12:34';
str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-01 12:34' str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-01 12:34'
0 NULL
Warnings: Warnings:
Warning 1292 Truncated incorrect datetime value: '2007-10-00 12:34:00' Warning 1411 Incorrect datetime value: '2007-10-00 12:34' for function str_to_date
select str_to_date('2007-10-00','%Y-%m-%d') between '2007/09/01' select str_to_date('2007-10-00','%Y-%m-%d') between '2007/09/01'
and '2007/10/20'; and '2007/10/20';
str_to_date('2007-10-00','%Y-%m-%d') between '2007/09/01' str_to_date('2007-10-00','%Y-%m-%d') between '2007/09/01'
and '2007/10/20' and '2007/10/20'
0 NULL
Warnings: Warnings:
Warning 1292 Incorrect datetime value: '2007-10-00' for column '2007/09/01' at row 1 Warning 1411 Incorrect datetime value: '2007-10-00' for function str_to_date
Warning 1292 Incorrect datetime value: '2007-10-00' for column '2007/10/20' at row 1
set SQL_MODE=DEFAULT; set SQL_MODE=DEFAULT;
select str_to_date('2007-10-00','%Y-%m-%d') between '' and '2007/10/20'; select str_to_date('2007-10-00','%Y-%m-%d') between '' and '2007/10/20';
str_to_date('2007-10-00','%Y-%m-%d') between '' and '2007/10/20' str_to_date('2007-10-00','%Y-%m-%d') between '' and '2007/10/20'

View File

@ -206,12 +206,11 @@ INSERT INTO t1 (col1) VALUES (STR_TO_DATE('15.10.2004','%d.%m.%Y'));
INSERT INTO t1 (col2) VALUES (STR_TO_DATE('15.10.2004 10.15','%d.%m.%Y %H.%i')); INSERT INTO t1 (col2) VALUES (STR_TO_DATE('15.10.2004 10.15','%d.%m.%Y %H.%i'));
INSERT INTO t1 (col3) VALUES (STR_TO_DATE('15.10.2004 10.15','%d.%m.%Y %H.%i')); INSERT INTO t1 (col3) VALUES (STR_TO_DATE('15.10.2004 10.15','%d.%m.%Y %H.%i'));
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i'));
Warnings: ERROR HY000: Incorrect datetime value: '31.10.0000 15.30' for function str_to_date
Note 1265 Data truncated for column 'col1' at row 1
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i'));
ERROR 22007: Incorrect date value: '2004-00-31 15:30:00' for column 'col1' at row 1 ERROR HY000: Incorrect datetime value: '31.0.2004 15.30' for function str_to_date
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col1) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i'));
ERROR 22007: Incorrect date value: '2004-10-00 15:30:00' for column 'col1' at row 1 ERROR HY000: Incorrect datetime value: '0.10.2004 15.30' for function str_to_date
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i'));
ERROR 22007: Incorrect date value: '2004-09-31 15:30:00' for column 'col1' at row 1 ERROR 22007: Incorrect date value: '2004-09-31 15:30:00' for column 'col1' at row 1
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col1) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i'));
@ -221,12 +220,13 @@ ERROR 22007: Incorrect date value: '2003-02-29 15:30:00' for column 'col1' at ro
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col1) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i'));
ERROR HY000: Incorrect datetime value: '15.13.2004 15.30' for function str_to_date ERROR HY000: Incorrect datetime value: '15.13.2004 15.30' for function str_to_date
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y')); INSERT INTO t1 (col1) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y'));
ERROR 22007: Incorrect date value: '0000-00-00' for column 'col1' at row 1 ERROR HY000: Incorrect datetime value: '00.00.0000' for function str_to_date
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i'));
ERROR HY000: Incorrect datetime value: '31.10.0000 15.30' for function str_to_date
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i'));
ERROR 22007: Incorrect datetime value: '2004-00-31 15:30:00' for column 'col2' at row 1 ERROR HY000: Incorrect datetime value: '31.0.2004 15.30' for function str_to_date
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col2) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i'));
ERROR 22007: Incorrect datetime value: '2004-10-00 15:30:00' for column 'col2' at row 1 ERROR HY000: Incorrect datetime value: '0.10.2004 15.30' for function str_to_date
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i'));
ERROR 22007: Incorrect datetime value: '2004-09-31 15:30:00' for column 'col2' at row 1 ERROR 22007: Incorrect datetime value: '2004-09-31 15:30:00' for column 'col2' at row 1
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col2) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i'));
@ -236,13 +236,13 @@ ERROR 22007: Incorrect datetime value: '2003-02-29 15:30:00' for column 'col2' a
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col2) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i'));
ERROR HY000: Incorrect datetime value: '15.13.2004 15.30' for function str_to_date ERROR HY000: Incorrect datetime value: '15.13.2004 15.30' for function str_to_date
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y')); INSERT INTO t1 (col2) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y'));
ERROR 22007: Incorrect datetime value: '0000-00-00' for column 'col2' at row 1 ERROR HY000: Incorrect datetime value: '00.00.0000' for function str_to_date
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i'));
ERROR 22007: Incorrect datetime value: '0000-10-31 15:30:00' for column 'col3' at row 1 ERROR HY000: Incorrect datetime value: '31.10.0000 15.30' for function str_to_date
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i'));
ERROR 22007: Incorrect datetime value: '2004-00-31 15:30:00' for column 'col3' at row 1 ERROR HY000: Incorrect datetime value: '31.0.2004 15.30' for function str_to_date
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col3) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i'));
ERROR 22007: Incorrect datetime value: '2004-10-00 15:30:00' for column 'col3' at row 1 ERROR HY000: Incorrect datetime value: '0.10.2004 15.30' for function str_to_date
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i'));
ERROR 22007: Incorrect datetime value: '2004-09-31 15:30:00' for column 'col3' at row 1 ERROR 22007: Incorrect datetime value: '2004-09-31 15:30:00' for column 'col3' at row 1
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col3) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i'));
@ -252,7 +252,7 @@ ERROR 22007: Incorrect datetime value: '2003-02-29 15:30:00' for column 'col3' a
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col3) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i'));
ERROR HY000: Incorrect datetime value: '15.13.2004 15.30' for function str_to_date ERROR HY000: Incorrect datetime value: '15.13.2004 15.30' for function str_to_date
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y')); INSERT INTO t1 (col3) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y'));
ERROR 22007: Incorrect datetime value: '0000-00-00' for column 'col3' at row 1 ERROR HY000: Incorrect datetime value: '00.00.0000' for function str_to_date
drop table t1; drop table t1;
CREATE TABLE t1 (col1 date, col2 datetime, col3 timestamp); CREATE TABLE t1 (col1 date, col2 datetime, col3 timestamp);
INSERT INTO t1 (col1) VALUES (CAST('2004-10-15' AS DATE)); INSERT INTO t1 (col1) VALUES (CAST('2004-10-15' AS DATE));
@ -1108,6 +1108,9 @@ Warnings:
Warning 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_date Warning 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_date
Warning 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_date Warning 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_date
Warning 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_date Warning 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_date
Warning 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_date
Warning 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_date
Warning 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_date
drop table t1; drop table t1;
create table t1 (col1 char(3), col2 integer); create table t1 (col1 char(3), col2 integer);
insert into t1 (col1) values (cast(1000 as char(3))); insert into t1 (col1) values (cast(1000 as char(3)));

View File

@ -655,5 +655,30 @@ Note 1003 select `test`.`t1`.`Id` AS `Id`,`test`.`t1`.`AtTime` AS `AtTime` from
DROP TABLE t1; DROP TABLE t1;
SET NAMES latin1; SET NAMES latin1;
# #
# Bug#56271: Wrong comparison result with STR_TO_DATE function
#
CREATE TABLE t1 (
`year` int(4) NOT NULL,
`month` int(2) NOT NULL
);
INSERT INTO t1 VALUES (2010,3),(2010,4),(2009,8),(2008,9);
SELECT *
FROM t1
WHERE STR_TO_DATE(CONCAT_WS('/01/',`month`,`year`), '%m/%d/%Y') >=
STR_TO_DATE('1/1/2010', '%m/%d/%Y');
year month
2010 3
2010 4
create table t2(f1 datetime primary key);
insert into t2 select STR_TO_DATE(CONCAT_WS('/01/',`month`,`year`), '%m/%d/%Y') from t1;
select * from t2 where f1=STR_TO_DATE('4/1/2010', '%m/%d/%Y');
f1
2010-04-01 00:00:00
t2 should be const
explain select * from t2 where f1=STR_TO_DATE('4/1/2010', '%m/%d/%Y');
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t2 const PRIMARY PRIMARY 8 const 1 Using index
DROP TABLE t1,t2;
#
# End of 5.5 tests # End of 5.5 tests
# #

View File

@ -1908,4 +1908,16 @@ group by PAY.id + 1;
mult v_net_with_discount v_total mult v_net_with_discount v_total
1.0000 27.18 27.180000 1.0000 27.18 27.180000
DROP TABLE currencies, payments, sub_tasks; DROP TABLE currencies, payments, sub_tasks;
#
# BUG#52171: distinct aggregates on unsigned decimal fields trigger assertions
#
CREATE TABLE t1 (a DECIMAL(4,4) UNSIGNED);
INSERT INTO t1 VALUES (0);
SELECT AVG(DISTINCT a) FROM t1;
AVG(DISTINCT a)
0.00000000
SELECT SUM(DISTINCT a) FROM t1;
SUM(DISTINCT a)
0.0000
DROP TABLE t1;
End of 5.1 tests End of 5.1 tests

View File

@ -1267,8 +1267,9 @@ master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `test`; FLUSH TABLES master-bin.000001 # Query # # use `test`; FLUSH TABLES
insert delayed into t1 values (null),(null),(null),(null); RESET MASTER;
insert delayed into t1 values (null),(null),(400),(null); insert /* before delayed */ delayed /* after delayed */ into t1 values (null),(null),(null),(null);
insert /*! delayed */ into t1 values (null),(null),(400),(null);
select * from t1; select * from t1;
a a
207 207

View File

@ -20,12 +20,21 @@ master-bin.000001 # Query # # BEGIN
master-bin.000001 # Query # # use `test`; insert delayed into t1 values (300) master-bin.000001 # Query # # use `test`; insert delayed into t1 values (300)
master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `test`; FLUSH TABLES master-bin.000001 # Query # # use `test`; FLUSH TABLES
insert delayed into t1 values (null),(null),(null),(null); RESET MASTER;
Warnings: insert /* before delayed */ delayed /* after delayed */ into t1 values (null),(null),(null),(null);
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted. insert /*! delayed */ into t1 values (null),(null),(400),(null);
insert delayed into t1 values (null),(null),(400),(null); FLUSH TABLES;
Warnings: show binlog events from <binlog_start>;
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted. Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # BEGIN
master-bin.000001 # Intvar # # INSERT_ID=301
master-bin.000001 # Query # # use `test`; insert /* before delayed */ /* after delayed */ into t1 values (null),(null),(null),(null)
master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # BEGIN
master-bin.000001 # Intvar # # INSERT_ID=305
master-bin.000001 # Query # # use `test`; insert /*! */ into t1 values (null),(null),(400),(null)
master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `test`; FLUSH TABLES
select * from t1; select * from t1;
a a
207 207

View File

@ -758,8 +758,9 @@ master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # use `test`; FLUSH TABLES master-bin.000001 # Query # # use `test`; FLUSH TABLES
insert delayed into t1 values (null),(null),(null),(null); RESET MASTER;
insert delayed into t1 values (null),(null),(400),(null); insert /* before delayed */ delayed /* after delayed */ into t1 values (null),(null),(null),(null);
insert /*! delayed */ into t1 values (null),(null),(400),(null);
select * from t1; select * from t1;
a a
207 207

View File

@ -862,65 +862,51 @@ Note 1592 Unsafe statement written to the binary log using statement format sinc
* Invoke statement so that return value is dicarded: expect no warning. * Invoke statement so that return value is dicarded: expect no warning.
SELECT * FROM data_table LIMIT 1; SELECT * FROM data_table LIMIT 1;
==== Testing INSERT DELAYED unsafeness ==== ==== Testing INSERT DELAYED safeness after BUG#54579 is fixed ====
Invoking function func_sidef_1 invoking unsafe INSERT DELAYED statement. Invoking function func_sidef_1 invoking unsafe INSERT DELAYED statement.
CREATE FUNCTION func_sidef_1() RETURNS VARCHAR(100) BEGIN INSERT INTO ta1 VALUES (47); INSERT DELAYED INTO t0 VALUES (1), (2); RETURN 0; END; CREATE FUNCTION func_sidef_1() RETURNS VARCHAR(100) BEGIN INSERT INTO ta1 VALUES (47); INSERT DELAYED INTO t0 VALUES (1), (2); RETURN 0; END;
* binlog_format = STATEMENT: expect 1 warnings. * binlog_format = STATEMENT: expect 0 warnings.
INSERT INTO t1 SELECT func_sidef_1(); INSERT INTO t1 SELECT func_sidef_1();
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
* SQL_LOG_BIN = 0: expect nothing logged and no warning. * SQL_LOG_BIN = 0: expect nothing logged and no warning.
* binlog_format = MIXED: expect row events in binlog and no warning. * binlog_format = MIXED: expect row events in binlog and no warning.
Invoking function func_sidef_2 invoking function func_sidef_1 invoking unsafe INSERT DELAYED statement. Invoking function func_sidef_2 invoking function func_sidef_1 invoking unsafe INSERT DELAYED statement.
CREATE FUNCTION func_sidef_2() RETURNS VARCHAR(100) BEGIN INSERT INTO ta2 VALUES (47); INSERT INTO t1 SELECT func_sidef_1(); RETURN 0; END; CREATE FUNCTION func_sidef_2() RETURNS VARCHAR(100) BEGIN INSERT INTO ta2 VALUES (47); INSERT INTO t1 SELECT func_sidef_1(); RETURN 0; END;
* binlog_format = STATEMENT: expect 1 warnings. * binlog_format = STATEMENT: expect 0 warnings.
INSERT INTO t2 SELECT func_sidef_2(); INSERT INTO t2 SELECT func_sidef_2();
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
* SQL_LOG_BIN = 0: expect nothing logged and no warning. * SQL_LOG_BIN = 0: expect nothing logged and no warning.
* binlog_format = MIXED: expect row events in binlog and no warning. * binlog_format = MIXED: expect row events in binlog and no warning.
DROP FUNCTION func_sidef_2; DROP FUNCTION func_sidef_2;
Invoking procedure proc_2 invoking function func_sidef_1 invoking unsafe INSERT DELAYED statement. Invoking procedure proc_2 invoking function func_sidef_1 invoking unsafe INSERT DELAYED statement.
CREATE PROCEDURE proc_2() BEGIN INSERT INTO t1 SELECT func_sidef_1(); INSERT INTO ta2 VALUES (47); END; CREATE PROCEDURE proc_2() BEGIN INSERT INTO t1 SELECT func_sidef_1(); INSERT INTO ta2 VALUES (47); END;
* binlog_format = STATEMENT: expect 1 warnings. * binlog_format = STATEMENT: expect 0 warnings.
CALL proc_2(); CALL proc_2();
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
* SQL_LOG_BIN = 0: expect nothing logged and no warning. * SQL_LOG_BIN = 0: expect nothing logged and no warning.
* binlog_format = MIXED: expect row events in binlog and no warning. * binlog_format = MIXED: expect row events in binlog and no warning.
DROP PROCEDURE proc_2; DROP PROCEDURE proc_2;
Invoking trigger trig_2 invoking function func_sidef_1 invoking unsafe INSERT DELAYED statement. Invoking trigger trig_2 invoking function func_sidef_1 invoking unsafe INSERT DELAYED statement.
CREATE TRIGGER trig_2 BEFORE INSERT ON trigger_table_2 FOR EACH ROW BEGIN INSERT INTO ta2 VALUES (47); INSERT INTO t1 SELECT func_sidef_1(); END; CREATE TRIGGER trig_2 BEFORE INSERT ON trigger_table_2 FOR EACH ROW BEGIN INSERT INTO ta2 VALUES (47); INSERT INTO t1 SELECT func_sidef_1(); END;
* binlog_format = STATEMENT: expect 1 warnings. * binlog_format = STATEMENT: expect 0 warnings.
INSERT INTO trigger_table_2 VALUES (1); INSERT INTO trigger_table_2 VALUES (1);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
* SQL_LOG_BIN = 0: expect nothing logged and no warning. * SQL_LOG_BIN = 0: expect nothing logged and no warning.
* binlog_format = MIXED: expect row events in binlog and no warning. * binlog_format = MIXED: expect row events in binlog and no warning.
DROP TRIGGER trig_2; DROP TRIGGER trig_2;
Invoking view view_sidef_2 invoking function func_sidef_1 invoking unsafe INSERT DELAYED statement. Invoking view view_sidef_2 invoking function func_sidef_1 invoking unsafe INSERT DELAYED statement.
CREATE VIEW view_sidef_2 AS SELECT func_sidef_1(); CREATE VIEW view_sidef_2 AS SELECT func_sidef_1();
Warnings: * binlog_format = STATEMENT: expect 0 warnings.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
* binlog_format = STATEMENT: expect 1 warnings.
INSERT INTO t2 SELECT * FROM view_sidef_2; INSERT INTO t2 SELECT * FROM view_sidef_2;
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
* SQL_LOG_BIN = 0: expect nothing logged and no warning. * SQL_LOG_BIN = 0: expect nothing logged and no warning.
* binlog_format = MIXED: expect row events in binlog and no warning. * binlog_format = MIXED: expect row events in binlog and no warning.
DROP VIEW view_sidef_2; DROP VIEW view_sidef_2;
Invoking prepared statement prep_2 invoking function func_sidef_1 invoking unsafe INSERT DELAYED statement. Invoking prepared statement prep_2 invoking function func_sidef_1 invoking unsafe INSERT DELAYED statement.
PREPARE prep_2 FROM "INSERT INTO t1 SELECT func_sidef_1()"; PREPARE prep_2 FROM "INSERT INTO t1 SELECT func_sidef_1()";
* binlog_format = STATEMENT: expect 1 warnings. * binlog_format = STATEMENT: expect 0 warnings.
EXECUTE prep_2; EXECUTE prep_2;
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
* SQL_LOG_BIN = 0: expect nothing logged and no warning. * SQL_LOG_BIN = 0: expect nothing logged and no warning.
* binlog_format = MIXED: expect row events in binlog and no warning. * binlog_format = MIXED: expect row events in binlog and no warning.
DROP PREPARE prep_2; DROP PREPARE prep_2;
@ -928,49 +914,39 @@ DROP FUNCTION func_sidef_1;
Invoking procedure proc_1 invoking unsafe INSERT DELAYED statement. Invoking procedure proc_1 invoking unsafe INSERT DELAYED statement.
CREATE PROCEDURE proc_1() BEGIN INSERT DELAYED INTO t0 VALUES (1), (2); INSERT INTO ta1 VALUES (47); END; CREATE PROCEDURE proc_1() BEGIN INSERT DELAYED INTO t0 VALUES (1), (2); INSERT INTO ta1 VALUES (47); END;
* binlog_format = STATEMENT: expect 1 warnings. * binlog_format = STATEMENT: expect 0 warnings.
CALL proc_1(); CALL proc_1();
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
* SQL_LOG_BIN = 0: expect nothing logged and no warning. * SQL_LOG_BIN = 0: expect nothing logged and no warning.
* binlog_format = MIXED: expect row events in binlog and no warning. * binlog_format = MIXED: expect row events in binlog and no warning.
Invoking function func_sidef_2 invoking procedure proc_1 invoking unsafe INSERT DELAYED statement. Invoking function func_sidef_2 invoking procedure proc_1 invoking unsafe INSERT DELAYED statement.
CREATE FUNCTION func_sidef_2() RETURNS VARCHAR(100) BEGIN INSERT INTO ta2 VALUES (47); CALL proc_1(); RETURN 0; END; CREATE FUNCTION func_sidef_2() RETURNS VARCHAR(100) BEGIN INSERT INTO ta2 VALUES (47); CALL proc_1(); RETURN 0; END;
* binlog_format = STATEMENT: expect 1 warnings. * binlog_format = STATEMENT: expect 0 warnings.
INSERT INTO t2 SELECT func_sidef_2(); INSERT INTO t2 SELECT func_sidef_2();
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
* SQL_LOG_BIN = 0: expect nothing logged and no warning. * SQL_LOG_BIN = 0: expect nothing logged and no warning.
* binlog_format = MIXED: expect row events in binlog and no warning. * binlog_format = MIXED: expect row events in binlog and no warning.
DROP FUNCTION func_sidef_2; DROP FUNCTION func_sidef_2;
Invoking procedure proc_2 invoking procedure proc_1 invoking unsafe INSERT DELAYED statement. Invoking procedure proc_2 invoking procedure proc_1 invoking unsafe INSERT DELAYED statement.
CREATE PROCEDURE proc_2() BEGIN CALL proc_1(); INSERT INTO ta2 VALUES (47); END; CREATE PROCEDURE proc_2() BEGIN CALL proc_1(); INSERT INTO ta2 VALUES (47); END;
* binlog_format = STATEMENT: expect 1 warnings. * binlog_format = STATEMENT: expect 0 warnings.
CALL proc_2(); CALL proc_2();
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
* SQL_LOG_BIN = 0: expect nothing logged and no warning. * SQL_LOG_BIN = 0: expect nothing logged and no warning.
* binlog_format = MIXED: expect row events in binlog and no warning. * binlog_format = MIXED: expect row events in binlog and no warning.
DROP PROCEDURE proc_2; DROP PROCEDURE proc_2;
Invoking trigger trig_2 invoking procedure proc_1 invoking unsafe INSERT DELAYED statement. Invoking trigger trig_2 invoking procedure proc_1 invoking unsafe INSERT DELAYED statement.
CREATE TRIGGER trig_2 BEFORE INSERT ON trigger_table_2 FOR EACH ROW BEGIN INSERT INTO ta2 VALUES (47); CALL proc_1(); END; CREATE TRIGGER trig_2 BEFORE INSERT ON trigger_table_2 FOR EACH ROW BEGIN INSERT INTO ta2 VALUES (47); CALL proc_1(); END;
* binlog_format = STATEMENT: expect 1 warnings. * binlog_format = STATEMENT: expect 0 warnings.
INSERT INTO trigger_table_2 VALUES (1); INSERT INTO trigger_table_2 VALUES (1);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
* SQL_LOG_BIN = 0: expect nothing logged and no warning. * SQL_LOG_BIN = 0: expect nothing logged and no warning.
* binlog_format = MIXED: expect row events in binlog and no warning. * binlog_format = MIXED: expect row events in binlog and no warning.
DROP TRIGGER trig_2; DROP TRIGGER trig_2;
Invoking prepared statement prep_2 invoking procedure proc_1 invoking unsafe INSERT DELAYED statement. Invoking prepared statement prep_2 invoking procedure proc_1 invoking unsafe INSERT DELAYED statement.
PREPARE prep_2 FROM "CALL proc_1()"; PREPARE prep_2 FROM "CALL proc_1()";
* binlog_format = STATEMENT: expect 1 warnings. * binlog_format = STATEMENT: expect 0 warnings.
EXECUTE prep_2; EXECUTE prep_2;
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
* SQL_LOG_BIN = 0: expect nothing logged and no warning. * SQL_LOG_BIN = 0: expect nothing logged and no warning.
* binlog_format = MIXED: expect row events in binlog and no warning. * binlog_format = MIXED: expect row events in binlog and no warning.
DROP PREPARE prep_2; DROP PREPARE prep_2;
@ -978,49 +954,39 @@ DROP PROCEDURE proc_1;
Invoking trigger trig_1 invoking unsafe INSERT DELAYED statement. Invoking trigger trig_1 invoking unsafe INSERT DELAYED statement.
CREATE TRIGGER trig_1 BEFORE INSERT ON trigger_table_1 FOR EACH ROW BEGIN INSERT INTO ta1 VALUES (47); INSERT DELAYED INTO t0 VALUES (1), (2); END; CREATE TRIGGER trig_1 BEFORE INSERT ON trigger_table_1 FOR EACH ROW BEGIN INSERT INTO ta1 VALUES (47); INSERT DELAYED INTO t0 VALUES (1), (2); END;
* binlog_format = STATEMENT: expect 1 warnings. * binlog_format = STATEMENT: expect 0 warnings.
INSERT INTO trigger_table_1 VALUES (1); INSERT INTO trigger_table_1 VALUES (1);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
* SQL_LOG_BIN = 0: expect nothing logged and no warning. * SQL_LOG_BIN = 0: expect nothing logged and no warning.
* binlog_format = MIXED: expect row events in binlog and no warning. * binlog_format = MIXED: expect row events in binlog and no warning.
Invoking function func_sidef_2 invoking trigger trig_1 invoking unsafe INSERT DELAYED statement. Invoking function func_sidef_2 invoking trigger trig_1 invoking unsafe INSERT DELAYED statement.
CREATE FUNCTION func_sidef_2() RETURNS VARCHAR(100) BEGIN INSERT INTO ta2 VALUES (47); INSERT INTO trigger_table_1 VALUES (1); RETURN 0; END; CREATE FUNCTION func_sidef_2() RETURNS VARCHAR(100) BEGIN INSERT INTO ta2 VALUES (47); INSERT INTO trigger_table_1 VALUES (1); RETURN 0; END;
* binlog_format = STATEMENT: expect 1 warnings. * binlog_format = STATEMENT: expect 0 warnings.
INSERT INTO t2 SELECT func_sidef_2(); INSERT INTO t2 SELECT func_sidef_2();
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
* SQL_LOG_BIN = 0: expect nothing logged and no warning. * SQL_LOG_BIN = 0: expect nothing logged and no warning.
* binlog_format = MIXED: expect row events in binlog and no warning. * binlog_format = MIXED: expect row events in binlog and no warning.
DROP FUNCTION func_sidef_2; DROP FUNCTION func_sidef_2;
Invoking procedure proc_2 invoking trigger trig_1 invoking unsafe INSERT DELAYED statement. Invoking procedure proc_2 invoking trigger trig_1 invoking unsafe INSERT DELAYED statement.
CREATE PROCEDURE proc_2() BEGIN INSERT INTO trigger_table_1 VALUES (1); INSERT INTO ta2 VALUES (47); END; CREATE PROCEDURE proc_2() BEGIN INSERT INTO trigger_table_1 VALUES (1); INSERT INTO ta2 VALUES (47); END;
* binlog_format = STATEMENT: expect 1 warnings. * binlog_format = STATEMENT: expect 0 warnings.
CALL proc_2(); CALL proc_2();
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
* SQL_LOG_BIN = 0: expect nothing logged and no warning. * SQL_LOG_BIN = 0: expect nothing logged and no warning.
* binlog_format = MIXED: expect row events in binlog and no warning. * binlog_format = MIXED: expect row events in binlog and no warning.
DROP PROCEDURE proc_2; DROP PROCEDURE proc_2;
Invoking trigger trig_2 invoking trigger trig_1 invoking unsafe INSERT DELAYED statement. Invoking trigger trig_2 invoking trigger trig_1 invoking unsafe INSERT DELAYED statement.
CREATE TRIGGER trig_2 BEFORE INSERT ON trigger_table_2 FOR EACH ROW BEGIN INSERT INTO ta2 VALUES (47); INSERT INTO trigger_table_1 VALUES (1); END; CREATE TRIGGER trig_2 BEFORE INSERT ON trigger_table_2 FOR EACH ROW BEGIN INSERT INTO ta2 VALUES (47); INSERT INTO trigger_table_1 VALUES (1); END;
* binlog_format = STATEMENT: expect 1 warnings. * binlog_format = STATEMENT: expect 0 warnings.
INSERT INTO trigger_table_2 VALUES (1); INSERT INTO trigger_table_2 VALUES (1);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
* SQL_LOG_BIN = 0: expect nothing logged and no warning. * SQL_LOG_BIN = 0: expect nothing logged and no warning.
* binlog_format = MIXED: expect row events in binlog and no warning. * binlog_format = MIXED: expect row events in binlog and no warning.
DROP TRIGGER trig_2; DROP TRIGGER trig_2;
Invoking prepared statement prep_2 invoking trigger trig_1 invoking unsafe INSERT DELAYED statement. Invoking prepared statement prep_2 invoking trigger trig_1 invoking unsafe INSERT DELAYED statement.
PREPARE prep_2 FROM "INSERT INTO trigger_table_1 VALUES (1)"; PREPARE prep_2 FROM "INSERT INTO trigger_table_1 VALUES (1)";
* binlog_format = STATEMENT: expect 1 warnings. * binlog_format = STATEMENT: expect 0 warnings.
EXECUTE prep_2; EXECUTE prep_2;
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
* SQL_LOG_BIN = 0: expect nothing logged and no warning. * SQL_LOG_BIN = 0: expect nothing logged and no warning.
* binlog_format = MIXED: expect row events in binlog and no warning. * binlog_format = MIXED: expect row events in binlog and no warning.
DROP PREPARE prep_2; DROP PREPARE prep_2;
@ -1028,19 +994,15 @@ DROP TRIGGER trig_1;
Invoking prepared statement prep_1 invoking unsafe INSERT DELAYED statement. Invoking prepared statement prep_1 invoking unsafe INSERT DELAYED statement.
PREPARE prep_1 FROM "INSERT DELAYED INTO t0 VALUES (1), (2)"; PREPARE prep_1 FROM "INSERT DELAYED INTO t0 VALUES (1), (2)";
* binlog_format = STATEMENT: expect 1 warnings. * binlog_format = STATEMENT: expect 0 warnings.
EXECUTE prep_1; EXECUTE prep_1;
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
* SQL_LOG_BIN = 0: expect nothing logged and no warning. * SQL_LOG_BIN = 0: expect nothing logged and no warning.
* binlog_format = MIXED: expect row events in binlog and no warning. * binlog_format = MIXED: expect row events in binlog and no warning.
DROP PREPARE prep_1; DROP PREPARE prep_1;
Invoking unsafe INSERT DELAYED statement. Invoking unsafe INSERT DELAYED statement.
* binlog_format = STATEMENT: expect 1 warnings. * binlog_format = STATEMENT: expect 0 warnings.
INSERT DELAYED INTO t0 VALUES (1), (2); INSERT DELAYED INTO t0 VALUES (1), (2);
Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
* SQL_LOG_BIN = 0: expect nothing logged and no warning. * SQL_LOG_BIN = 0: expect nothing logged and no warning.
* binlog_format = MIXED: expect row events in binlog and no warning. * binlog_format = MIXED: expect row events in binlog and no warning.
@ -1798,11 +1760,10 @@ SELECT COUNT(*) FROM mysql.general_log;
Invoking function func_sidef_1 invoking statement that is unsafe in many ways. Invoking function func_sidef_1 invoking statement that is unsafe in many ways.
CREATE FUNCTION func_sidef_1() RETURNS VARCHAR(100) BEGIN INSERT INTO ta1 VALUES (47); INSERT DELAYED INTO double_autoinc_table SELECT CONCAT(UUID(), @@hostname, myfunc_int(), NULL) FROM mysql.general_log LIMIT 1; RETURN 0; END; CREATE FUNCTION func_sidef_1() RETURNS VARCHAR(100) BEGIN INSERT INTO ta1 VALUES (47); INSERT DELAYED INTO double_autoinc_table SELECT CONCAT(UUID(), @@hostname, myfunc_int(), NULL) FROM mysql.general_log LIMIT 1; RETURN 0; END;
* binlog_format = STATEMENT: expect 7 warnings. * binlog_format = STATEMENT: expect 6 warnings.
INSERT INTO t1 SELECT func_sidef_1(); INSERT INTO t1 SELECT func_sidef_1();
Warnings: Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave.
@ -1813,11 +1774,10 @@ Note 1592 Unsafe statement written to the binary log using statement format sinc
Invoking function func_sidef_2 invoking function func_sidef_1 invoking statement that is unsafe in many ways. Invoking function func_sidef_2 invoking function func_sidef_1 invoking statement that is unsafe in many ways.
CREATE FUNCTION func_sidef_2() RETURNS VARCHAR(100) BEGIN INSERT INTO ta2 VALUES (47); INSERT INTO t1 SELECT func_sidef_1(); RETURN 0; END; CREATE FUNCTION func_sidef_2() RETURNS VARCHAR(100) BEGIN INSERT INTO ta2 VALUES (47); INSERT INTO t1 SELECT func_sidef_1(); RETURN 0; END;
* binlog_format = STATEMENT: expect 7 warnings. * binlog_format = STATEMENT: expect 6 warnings.
INSERT INTO t2 SELECT func_sidef_2(); INSERT INTO t2 SELECT func_sidef_2();
Warnings: Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave.
@ -1829,11 +1789,10 @@ DROP FUNCTION func_sidef_2;
Invoking procedure proc_2 invoking function func_sidef_1 invoking statement that is unsafe in many ways. Invoking procedure proc_2 invoking function func_sidef_1 invoking statement that is unsafe in many ways.
CREATE PROCEDURE proc_2() BEGIN INSERT INTO t1 SELECT func_sidef_1(); INSERT INTO ta2 VALUES (47); END; CREATE PROCEDURE proc_2() BEGIN INSERT INTO t1 SELECT func_sidef_1(); INSERT INTO ta2 VALUES (47); END;
* binlog_format = STATEMENT: expect 7 warnings. * binlog_format = STATEMENT: expect 6 warnings.
CALL proc_2(); CALL proc_2();
Warnings: Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave.
@ -1845,11 +1804,10 @@ DROP PROCEDURE proc_2;
Invoking trigger trig_2 invoking function func_sidef_1 invoking statement that is unsafe in many ways. Invoking trigger trig_2 invoking function func_sidef_1 invoking statement that is unsafe in many ways.
CREATE TRIGGER trig_2 BEFORE INSERT ON trigger_table_2 FOR EACH ROW BEGIN INSERT INTO ta2 VALUES (47); INSERT INTO t1 SELECT func_sidef_1(); END; CREATE TRIGGER trig_2 BEFORE INSERT ON trigger_table_2 FOR EACH ROW BEGIN INSERT INTO ta2 VALUES (47); INSERT INTO t1 SELECT func_sidef_1(); END;
* binlog_format = STATEMENT: expect 7 warnings. * binlog_format = STATEMENT: expect 6 warnings.
INSERT INTO trigger_table_2 VALUES (1); INSERT INTO trigger_table_2 VALUES (1);
Warnings: Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave.
@ -1863,17 +1821,15 @@ Invoking view view_sidef_2 invoking function func_sidef_1 invoking statement tha
CREATE VIEW view_sidef_2 AS SELECT func_sidef_1(); CREATE VIEW view_sidef_2 AS SELECT func_sidef_1();
Warnings: Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system variable that may have a different value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system variable that may have a different value on the slave.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave.
* binlog_format = STATEMENT: expect 7 warnings. * binlog_format = STATEMENT: expect 6 warnings.
INSERT INTO t2 SELECT * FROM view_sidef_2; INSERT INTO t2 SELECT * FROM view_sidef_2;
Warnings: Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave.
@ -1885,11 +1841,10 @@ DROP VIEW view_sidef_2;
Invoking prepared statement prep_2 invoking function func_sidef_1 invoking statement that is unsafe in many ways. Invoking prepared statement prep_2 invoking function func_sidef_1 invoking statement that is unsafe in many ways.
PREPARE prep_2 FROM "INSERT INTO t1 SELECT func_sidef_1()"; PREPARE prep_2 FROM "INSERT INTO t1 SELECT func_sidef_1()";
* binlog_format = STATEMENT: expect 7 warnings. * binlog_format = STATEMENT: expect 6 warnings.
EXECUTE prep_2; EXECUTE prep_2;
Warnings: Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave.
@ -1902,11 +1857,10 @@ DROP FUNCTION func_sidef_1;
Invoking procedure proc_1 invoking statement that is unsafe in many ways. Invoking procedure proc_1 invoking statement that is unsafe in many ways.
CREATE PROCEDURE proc_1() BEGIN INSERT DELAYED INTO double_autoinc_table SELECT CONCAT(UUID(), @@hostname, myfunc_int(), NULL) FROM mysql.general_log LIMIT 1; INSERT INTO ta1 VALUES (47); END; CREATE PROCEDURE proc_1() BEGIN INSERT DELAYED INTO double_autoinc_table SELECT CONCAT(UUID(), @@hostname, myfunc_int(), NULL) FROM mysql.general_log LIMIT 1; INSERT INTO ta1 VALUES (47); END;
* binlog_format = STATEMENT: expect 7 warnings. * binlog_format = STATEMENT: expect 6 warnings.
CALL proc_1(); CALL proc_1();
Warnings: Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave.
@ -1917,11 +1871,10 @@ Note 1592 Unsafe statement written to the binary log using statement format sinc
Invoking function func_sidef_2 invoking procedure proc_1 invoking statement that is unsafe in many ways. Invoking function func_sidef_2 invoking procedure proc_1 invoking statement that is unsafe in many ways.
CREATE FUNCTION func_sidef_2() RETURNS VARCHAR(100) BEGIN INSERT INTO ta2 VALUES (47); CALL proc_1(); RETURN 0; END; CREATE FUNCTION func_sidef_2() RETURNS VARCHAR(100) BEGIN INSERT INTO ta2 VALUES (47); CALL proc_1(); RETURN 0; END;
* binlog_format = STATEMENT: expect 7 warnings. * binlog_format = STATEMENT: expect 6 warnings.
INSERT INTO t2 SELECT func_sidef_2(); INSERT INTO t2 SELECT func_sidef_2();
Warnings: Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave.
@ -1933,11 +1886,10 @@ DROP FUNCTION func_sidef_2;
Invoking procedure proc_2 invoking procedure proc_1 invoking statement that is unsafe in many ways. Invoking procedure proc_2 invoking procedure proc_1 invoking statement that is unsafe in many ways.
CREATE PROCEDURE proc_2() BEGIN CALL proc_1(); INSERT INTO ta2 VALUES (47); END; CREATE PROCEDURE proc_2() BEGIN CALL proc_1(); INSERT INTO ta2 VALUES (47); END;
* binlog_format = STATEMENT: expect 7 warnings. * binlog_format = STATEMENT: expect 6 warnings.
CALL proc_2(); CALL proc_2();
Warnings: Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave.
@ -1949,11 +1901,10 @@ DROP PROCEDURE proc_2;
Invoking trigger trig_2 invoking procedure proc_1 invoking statement that is unsafe in many ways. Invoking trigger trig_2 invoking procedure proc_1 invoking statement that is unsafe in many ways.
CREATE TRIGGER trig_2 BEFORE INSERT ON trigger_table_2 FOR EACH ROW BEGIN INSERT INTO ta2 VALUES (47); CALL proc_1(); END; CREATE TRIGGER trig_2 BEFORE INSERT ON trigger_table_2 FOR EACH ROW BEGIN INSERT INTO ta2 VALUES (47); CALL proc_1(); END;
* binlog_format = STATEMENT: expect 7 warnings. * binlog_format = STATEMENT: expect 6 warnings.
INSERT INTO trigger_table_2 VALUES (1); INSERT INTO trigger_table_2 VALUES (1);
Warnings: Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave.
@ -1965,11 +1916,10 @@ DROP TRIGGER trig_2;
Invoking prepared statement prep_2 invoking procedure proc_1 invoking statement that is unsafe in many ways. Invoking prepared statement prep_2 invoking procedure proc_1 invoking statement that is unsafe in many ways.
PREPARE prep_2 FROM "CALL proc_1()"; PREPARE prep_2 FROM "CALL proc_1()";
* binlog_format = STATEMENT: expect 7 warnings. * binlog_format = STATEMENT: expect 6 warnings.
EXECUTE prep_2; EXECUTE prep_2;
Warnings: Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave.
@ -1982,11 +1932,10 @@ DROP PROCEDURE proc_1;
Invoking trigger trig_1 invoking statement that is unsafe in many ways. Invoking trigger trig_1 invoking statement that is unsafe in many ways.
CREATE TRIGGER trig_1 BEFORE INSERT ON trigger_table_1 FOR EACH ROW BEGIN INSERT INTO ta1 VALUES (47); INSERT DELAYED INTO double_autoinc_table SELECT CONCAT(UUID(), @@hostname, myfunc_int(), NULL) FROM mysql.general_log LIMIT 1; END; CREATE TRIGGER trig_1 BEFORE INSERT ON trigger_table_1 FOR EACH ROW BEGIN INSERT INTO ta1 VALUES (47); INSERT DELAYED INTO double_autoinc_table SELECT CONCAT(UUID(), @@hostname, myfunc_int(), NULL) FROM mysql.general_log LIMIT 1; END;
* binlog_format = STATEMENT: expect 7 warnings. * binlog_format = STATEMENT: expect 6 warnings.
INSERT INTO trigger_table_1 VALUES (1); INSERT INTO trigger_table_1 VALUES (1);
Warnings: Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave.
@ -1997,11 +1946,10 @@ Note 1592 Unsafe statement written to the binary log using statement format sinc
Invoking function func_sidef_2 invoking trigger trig_1 invoking statement that is unsafe in many ways. Invoking function func_sidef_2 invoking trigger trig_1 invoking statement that is unsafe in many ways.
CREATE FUNCTION func_sidef_2() RETURNS VARCHAR(100) BEGIN INSERT INTO ta2 VALUES (47); INSERT INTO trigger_table_1 VALUES (1); RETURN 0; END; CREATE FUNCTION func_sidef_2() RETURNS VARCHAR(100) BEGIN INSERT INTO ta2 VALUES (47); INSERT INTO trigger_table_1 VALUES (1); RETURN 0; END;
* binlog_format = STATEMENT: expect 7 warnings. * binlog_format = STATEMENT: expect 6 warnings.
INSERT INTO t2 SELECT func_sidef_2(); INSERT INTO t2 SELECT func_sidef_2();
Warnings: Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave.
@ -2013,11 +1961,10 @@ DROP FUNCTION func_sidef_2;
Invoking procedure proc_2 invoking trigger trig_1 invoking statement that is unsafe in many ways. Invoking procedure proc_2 invoking trigger trig_1 invoking statement that is unsafe in many ways.
CREATE PROCEDURE proc_2() BEGIN INSERT INTO trigger_table_1 VALUES (1); INSERT INTO ta2 VALUES (47); END; CREATE PROCEDURE proc_2() BEGIN INSERT INTO trigger_table_1 VALUES (1); INSERT INTO ta2 VALUES (47); END;
* binlog_format = STATEMENT: expect 7 warnings. * binlog_format = STATEMENT: expect 6 warnings.
CALL proc_2(); CALL proc_2();
Warnings: Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave.
@ -2029,11 +1976,10 @@ DROP PROCEDURE proc_2;
Invoking trigger trig_2 invoking trigger trig_1 invoking statement that is unsafe in many ways. Invoking trigger trig_2 invoking trigger trig_1 invoking statement that is unsafe in many ways.
CREATE TRIGGER trig_2 BEFORE INSERT ON trigger_table_2 FOR EACH ROW BEGIN INSERT INTO ta2 VALUES (47); INSERT INTO trigger_table_1 VALUES (1); END; CREATE TRIGGER trig_2 BEFORE INSERT ON trigger_table_2 FOR EACH ROW BEGIN INSERT INTO ta2 VALUES (47); INSERT INTO trigger_table_1 VALUES (1); END;
* binlog_format = STATEMENT: expect 7 warnings. * binlog_format = STATEMENT: expect 6 warnings.
INSERT INTO trigger_table_2 VALUES (1); INSERT INTO trigger_table_2 VALUES (1);
Warnings: Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave.
@ -2045,11 +1991,10 @@ DROP TRIGGER trig_2;
Invoking prepared statement prep_2 invoking trigger trig_1 invoking statement that is unsafe in many ways. Invoking prepared statement prep_2 invoking trigger trig_1 invoking statement that is unsafe in many ways.
PREPARE prep_2 FROM "INSERT INTO trigger_table_1 VALUES (1)"; PREPARE prep_2 FROM "INSERT INTO trigger_table_1 VALUES (1)";
* binlog_format = STATEMENT: expect 7 warnings. * binlog_format = STATEMENT: expect 6 warnings.
EXECUTE prep_2; EXECUTE prep_2;
Warnings: Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave.
@ -2062,11 +2007,10 @@ DROP TRIGGER trig_1;
Invoking prepared statement prep_1 invoking statement that is unsafe in many ways. Invoking prepared statement prep_1 invoking statement that is unsafe in many ways.
PREPARE prep_1 FROM "INSERT DELAYED INTO double_autoinc_table SELECT CONCAT(UUID(), @@hostname, myfunc_int(), NULL) FROM mysql.general_log LIMIT 1"; PREPARE prep_1 FROM "INSERT DELAYED INTO double_autoinc_table SELECT CONCAT(UUID(), @@hostname, myfunc_int(), NULL) FROM mysql.general_log LIMIT 1";
* binlog_format = STATEMENT: expect 7 warnings. * binlog_format = STATEMENT: expect 6 warnings.
EXECUTE prep_1; EXECUTE prep_1;
Warnings: Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave.
@ -2077,11 +2021,10 @@ Note 1592 Unsafe statement written to the binary log using statement format sinc
DROP PREPARE prep_1; DROP PREPARE prep_1;
Invoking statement that is unsafe in many ways. Invoking statement that is unsafe in many ways.
* binlog_format = STATEMENT: expect 7 warnings. * binlog_format = STATEMENT: expect 6 warnings.
INSERT DELAYED INTO double_autoinc_table SELECT CONCAT(UUID(), @@hostname, myfunc_int(), NULL) FROM mysql.general_log LIMIT 1; INSERT DELAYED INTO double_autoinc_table SELECT CONCAT(UUID(), @@hostname, myfunc_int(), NULL) FROM mysql.general_log LIMIT 1;
Warnings: Warnings:
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly.
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave. Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a UDF which may not return the same value on the slave.
@ -2554,8 +2497,7 @@ func_limit()
show binlog events from <binlog_start>; show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # BEGIN
master-bin.000001 # Table_map # # table_id: # (test.t1) master-bin.000001 # Query # # use `test`; INSERT DELAYED INTO t1 VALUES (1), (2)
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # COMMIT
master-bin.000001 # Query # # BEGIN master-bin.000001 # Query # # BEGIN
master-bin.000001 # Table_map # # table_id: # (test.t1) master-bin.000001 # Table_map # # table_id: # (test.t1)

View File

@ -179,13 +179,13 @@ while (`SELECT $unsafe_type < 9`) {
} }
if (`SELECT $unsafe_type = 3`) { if (`SELECT $unsafe_type = 3`) {
--echo ==== Testing INSERT DELAYED unsafeness ==== --echo ==== Testing INSERT DELAYED safeness after BUG#54579 is fixed ====
--let $desc_0= unsafe INSERT DELAYED statement --let $desc_0= unsafe INSERT DELAYED statement
--let $stmt_sidef_0= INSERT DELAYED INTO t0 VALUES (1), (2) --let $stmt_sidef_0= INSERT DELAYED INTO t0 VALUES (1), (2)
--let $value_0= --let $value_0=
--let $sel_sidef_0= --let $sel_sidef_0=
--let $sel_retval_0= --let $sel_retval_0=
--let $CRC_ARG_expected_number_of_warnings= 1 --let $CRC_ARG_expected_number_of_warnings= 0
} }
if (`SELECT $unsafe_type = 4`) { if (`SELECT $unsafe_type = 4`) {
@ -227,7 +227,7 @@ while (`SELECT $unsafe_type < 9`) {
--let $value_0= --let $value_0=
--let $sel_sidef_0= --let $sel_sidef_0=
--let $sel_retval_0= --let $sel_retval_0=
--let $CRC_ARG_expected_number_of_warnings= 7 --let $CRC_ARG_expected_number_of_warnings= 6
} }
if (`SELECT $unsafe_type = 8`) { if (`SELECT $unsafe_type = 8`) {

View File

@ -18,7 +18,7 @@
# #
--error 1 --error 1
--exec $MYSQL_UPGRADE --skip-verbose > $out_file 2> $err_file --exec $MYSQL_UPGRADE --skip-verbose --force > $out_file 2> $err_file
# Verify that mysql_upgrade complained about the performance_schema # Verify that mysql_upgrade complained about the performance_schema
--cat_file $err_file --cat_file $err_file

View File

@ -0,0 +1,34 @@
checksum table performance_schema.COND_INSTANCES;
checksum table performance_schema.EVENTS_WAITS_CURRENT;
checksum table performance_schema.EVENTS_WAITS_HISTORY;
checksum table performance_schema.EVENTS_WAITS_HISTORY_LONG;
checksum table performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
checksum table performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
checksum table performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
checksum table performance_schema.FILE_INSTANCES;
checksum table performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
checksum table performance_schema.FILE_SUMMARY_BY_INSTANCE;
checksum table performance_schema.MUTEX_INSTANCES;
checksum table performance_schema.PERFORMANCE_TIMERS;
checksum table performance_schema.RWLOCK_INSTANCES;
checksum table performance_schema.SETUP_CONSUMERS;
checksum table performance_schema.SETUP_INSTRUMENTS;
checksum table performance_schema.SETUP_TIMERS;
checksum table performance_schema.THREADS;
checksum table performance_schema.COND_INSTANCES extended;
checksum table performance_schema.EVENTS_WAITS_CURRENT extended;
checksum table performance_schema.EVENTS_WAITS_HISTORY extended;
checksum table performance_schema.EVENTS_WAITS_HISTORY_LONG extended;
checksum table performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE extended;
checksum table performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME extended;
checksum table performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME extended;
checksum table performance_schema.FILE_INSTANCES extended;
checksum table performance_schema.FILE_SUMMARY_BY_EVENT_NAME extended;
checksum table performance_schema.FILE_SUMMARY_BY_INSTANCE extended;
checksum table performance_schema.MUTEX_INSTANCES extended;
checksum table performance_schema.PERFORMANCE_TIMERS extended;
checksum table performance_schema.RWLOCK_INSTANCES extended;
checksum table performance_schema.SETUP_CONSUMERS extended;
checksum table performance_schema.SETUP_INSTRUMENTS extended;
checksum table performance_schema.SETUP_TIMERS extended;
checksum table performance_schema.THREADS extended;

View File

@ -116,18 +116,10 @@ where name like "wait/synch/mutex/sql/LOCK_rpl_status";
count(name) count(name)
1 1
select count(name) from MUTEX_INSTANCES select count(name) from MUTEX_INSTANCES
where name like "wait/synch/mutex/sql/LOG_INFO::lock";
count(name)
1
select count(name) from MUTEX_INSTANCES
where name like "wait/synch/mutex/sql/Query_cache::structure_guard_mutex"; where name like "wait/synch/mutex/sql/Query_cache::structure_guard_mutex";
count(name) count(name)
1 1
select count(name) from MUTEX_INSTANCES select count(name) from MUTEX_INSTANCES
where name like "wait/synch/mutex/sql/Event_scheduler::LOCK_scheduler_state";
count(name)
1
select count(name) from MUTEX_INSTANCES
where name like "wait/synch/mutex/sql/LOCK_event_metadata"; where name like "wait/synch/mutex/sql/LOCK_event_metadata";
count(name) count(name)
1 1
@ -144,6 +136,10 @@ where name like "wait/synch/mutex/sql/Cversion_lock";
count(name) count(name)
1 1
select count(name) from MUTEX_INSTANCES select count(name) from MUTEX_INSTANCES
where name like "wait/synch/mutex/sql/LOCK_audit_mask";
count(name)
1
select count(name) from MUTEX_INSTANCES
where name like "wait/synch/mutex/sql/LOCK_xid_cache"; where name like "wait/synch/mutex/sql/LOCK_xid_cache";
count(name) count(name)
1 1
@ -152,10 +148,6 @@ where name like "wait/synch/mutex/sql/LOCK_plugin";
count(name) count(name)
1 1
select count(name) from MUTEX_INSTANCES select count(name) from MUTEX_INSTANCES
where name like "wait/synch/mutex/sql/LOCK_gdl";
count(name)
1
select count(name) from MUTEX_INSTANCES
where name like "wait/synch/mutex/sql/tz_LOCK"; where name like "wait/synch/mutex/sql/tz_LOCK";
count(name) count(name)
1 1
@ -212,10 +204,6 @@ where name like "wait/synch/cond/sql/Query_cache::COND_cache_status_changed";
count(name) count(name)
1 1
select count(name) from COND_INSTANCES select count(name) from COND_INSTANCES
where name like "wait/synch/cond/sql/Event_scheduler::COND_state";
count(name)
1
select count(name) from COND_INSTANCES
where name like "wait/synch/cond/sql/COND_queue_state"; where name like "wait/synch/cond/sql/COND_queue_state";
count(name) count(name)
1 1

View File

@ -45,11 +45,11 @@ performance_schema_max_file_classes 50
performance_schema_max_file_handles 32768 performance_schema_max_file_handles 32768
performance_schema_max_file_instances 10000 performance_schema_max_file_instances 10000
performance_schema_max_mutex_classes 200 performance_schema_max_mutex_classes 200
performance_schema_max_mutex_instances 1000000 performance_schema_max_mutex_instances 10000
performance_schema_max_rwlock_classes 30 performance_schema_max_rwlock_classes 30
performance_schema_max_rwlock_instances 1000000 performance_schema_max_rwlock_instances 10000
performance_schema_max_table_handles 100000 performance_schema_max_table_handles 1000
performance_schema_max_table_instances 50000 performance_schema_max_table_instances 500
performance_schema_max_thread_classes 50 performance_schema_max_thread_classes 50
performance_schema_max_thread_instances 1000 performance_schema_max_thread_instances 1000
show engine PERFORMANCE_SCHEMA status; show engine PERFORMANCE_SCHEMA status;

View File

@ -45,11 +45,11 @@ performance_schema_max_file_classes 50
performance_schema_max_file_handles 32768 performance_schema_max_file_handles 32768
performance_schema_max_file_instances 10000 performance_schema_max_file_instances 10000
performance_schema_max_mutex_classes 200 performance_schema_max_mutex_classes 200
performance_schema_max_mutex_instances 1000000 performance_schema_max_mutex_instances 10000
performance_schema_max_rwlock_classes 30 performance_schema_max_rwlock_classes 30
performance_schema_max_rwlock_instances 1000000 performance_schema_max_rwlock_instances 10000
performance_schema_max_table_handles 100000 performance_schema_max_table_handles 1000
performance_schema_max_table_instances 50000 performance_schema_max_table_instances 500
performance_schema_max_thread_classes 50 performance_schema_max_thread_classes 50
performance_schema_max_thread_instances 1000 performance_schema_max_thread_instances 1000
show engine PERFORMANCE_SCHEMA status; show engine PERFORMANCE_SCHEMA status;

View File

@ -45,11 +45,11 @@ performance_schema_max_file_classes 0
performance_schema_max_file_handles 32768 performance_schema_max_file_handles 32768
performance_schema_max_file_instances 10000 performance_schema_max_file_instances 10000
performance_schema_max_mutex_classes 200 performance_schema_max_mutex_classes 200
performance_schema_max_mutex_instances 1000000 performance_schema_max_mutex_instances 10000
performance_schema_max_rwlock_classes 30 performance_schema_max_rwlock_classes 30
performance_schema_max_rwlock_instances 1000000 performance_schema_max_rwlock_instances 10000
performance_schema_max_table_handles 100000 performance_schema_max_table_handles 1000
performance_schema_max_table_instances 50000 performance_schema_max_table_instances 500
performance_schema_max_thread_classes 50 performance_schema_max_thread_classes 50
performance_schema_max_thread_instances 1000 performance_schema_max_thread_instances 1000
show engine PERFORMANCE_SCHEMA status; show engine PERFORMANCE_SCHEMA status;

View File

@ -45,11 +45,11 @@ performance_schema_max_file_classes 50
performance_schema_max_file_handles 32768 performance_schema_max_file_handles 32768
performance_schema_max_file_instances 0 performance_schema_max_file_instances 0
performance_schema_max_mutex_classes 200 performance_schema_max_mutex_classes 200
performance_schema_max_mutex_instances 1000000 performance_schema_max_mutex_instances 10000
performance_schema_max_rwlock_classes 30 performance_schema_max_rwlock_classes 30
performance_schema_max_rwlock_instances 1000000 performance_schema_max_rwlock_instances 10000
performance_schema_max_table_handles 100000 performance_schema_max_table_handles 1000
performance_schema_max_table_instances 50000 performance_schema_max_table_instances 500
performance_schema_max_thread_classes 50 performance_schema_max_thread_classes 50
performance_schema_max_thread_instances 1000 performance_schema_max_thread_instances 1000
show engine PERFORMANCE_SCHEMA status; show engine PERFORMANCE_SCHEMA status;

View File

@ -45,11 +45,11 @@ performance_schema_max_file_classes 50
performance_schema_max_file_handles 32768 performance_schema_max_file_handles 32768
performance_schema_max_file_instances 10000 performance_schema_max_file_instances 10000
performance_schema_max_mutex_classes 0 performance_schema_max_mutex_classes 0
performance_schema_max_mutex_instances 1000000 performance_schema_max_mutex_instances 10000
performance_schema_max_rwlock_classes 30 performance_schema_max_rwlock_classes 30
performance_schema_max_rwlock_instances 1000000 performance_schema_max_rwlock_instances 10000
performance_schema_max_table_handles 100000 performance_schema_max_table_handles 1000
performance_schema_max_table_instances 50000 performance_schema_max_table_instances 500
performance_schema_max_thread_classes 50 performance_schema_max_thread_classes 50
performance_schema_max_thread_instances 1000 performance_schema_max_thread_instances 1000
show engine PERFORMANCE_SCHEMA status; show engine PERFORMANCE_SCHEMA status;

View File

@ -47,9 +47,9 @@ performance_schema_max_file_instances 10000
performance_schema_max_mutex_classes 200 performance_schema_max_mutex_classes 200
performance_schema_max_mutex_instances 0 performance_schema_max_mutex_instances 0
performance_schema_max_rwlock_classes 30 performance_schema_max_rwlock_classes 30
performance_schema_max_rwlock_instances 1000000 performance_schema_max_rwlock_instances 10000
performance_schema_max_table_handles 100000 performance_schema_max_table_handles 1000
performance_schema_max_table_instances 50000 performance_schema_max_table_instances 500
performance_schema_max_thread_classes 50 performance_schema_max_thread_classes 50
performance_schema_max_thread_instances 1000 performance_schema_max_thread_instances 1000
show engine PERFORMANCE_SCHEMA status; show engine PERFORMANCE_SCHEMA status;

View File

@ -45,11 +45,11 @@ performance_schema_max_file_classes 50
performance_schema_max_file_handles 32768 performance_schema_max_file_handles 32768
performance_schema_max_file_instances 10000 performance_schema_max_file_instances 10000
performance_schema_max_mutex_classes 200 performance_schema_max_mutex_classes 200
performance_schema_max_mutex_instances 1000000 performance_schema_max_mutex_instances 10000
performance_schema_max_rwlock_classes 0 performance_schema_max_rwlock_classes 0
performance_schema_max_rwlock_instances 1000000 performance_schema_max_rwlock_instances 10000
performance_schema_max_table_handles 100000 performance_schema_max_table_handles 1000
performance_schema_max_table_instances 50000 performance_schema_max_table_instances 500
performance_schema_max_thread_classes 50 performance_schema_max_thread_classes 50
performance_schema_max_thread_instances 1000 performance_schema_max_thread_instances 1000
show engine PERFORMANCE_SCHEMA status; show engine PERFORMANCE_SCHEMA status;

View File

@ -45,11 +45,11 @@ performance_schema_max_file_classes 50
performance_schema_max_file_handles 32768 performance_schema_max_file_handles 32768
performance_schema_max_file_instances 10000 performance_schema_max_file_instances 10000
performance_schema_max_mutex_classes 200 performance_schema_max_mutex_classes 200
performance_schema_max_mutex_instances 1000000 performance_schema_max_mutex_instances 10000
performance_schema_max_rwlock_classes 30 performance_schema_max_rwlock_classes 30
performance_schema_max_rwlock_instances 0 performance_schema_max_rwlock_instances 0
performance_schema_max_table_handles 100000 performance_schema_max_table_handles 1000
performance_schema_max_table_instances 50000 performance_schema_max_table_instances 500
performance_schema_max_thread_classes 50 performance_schema_max_thread_classes 50
performance_schema_max_thread_instances 1000 performance_schema_max_thread_instances 1000
show engine PERFORMANCE_SCHEMA status; show engine PERFORMANCE_SCHEMA status;

View File

@ -45,11 +45,11 @@ performance_schema_max_file_classes 50
performance_schema_max_file_handles 32768 performance_schema_max_file_handles 32768
performance_schema_max_file_instances 10000 performance_schema_max_file_instances 10000
performance_schema_max_mutex_classes 200 performance_schema_max_mutex_classes 200
performance_schema_max_mutex_instances 1000000 performance_schema_max_mutex_instances 10000
performance_schema_max_rwlock_classes 30 performance_schema_max_rwlock_classes 30
performance_schema_max_rwlock_instances 1000000 performance_schema_max_rwlock_instances 10000
performance_schema_max_table_handles 100000 performance_schema_max_table_handles 1000
performance_schema_max_table_instances 50000 performance_schema_max_table_instances 500
performance_schema_max_thread_classes 0 performance_schema_max_thread_classes 0
performance_schema_max_thread_instances 1000 performance_schema_max_thread_instances 1000
show engine PERFORMANCE_SCHEMA status; show engine PERFORMANCE_SCHEMA status;

View File

@ -45,11 +45,11 @@ performance_schema_max_file_classes 50
performance_schema_max_file_handles 32768 performance_schema_max_file_handles 32768
performance_schema_max_file_instances 10000 performance_schema_max_file_instances 10000
performance_schema_max_mutex_classes 200 performance_schema_max_mutex_classes 200
performance_schema_max_mutex_instances 1000000 performance_schema_max_mutex_instances 10000
performance_schema_max_rwlock_classes 30 performance_schema_max_rwlock_classes 30
performance_schema_max_rwlock_instances 1000000 performance_schema_max_rwlock_instances 10000
performance_schema_max_table_handles 100000 performance_schema_max_table_handles 1000
performance_schema_max_table_instances 50000 performance_schema_max_table_instances 500
performance_schema_max_thread_classes 50 performance_schema_max_thread_classes 50
performance_schema_max_thread_instances 0 performance_schema_max_thread_instances 0
show engine PERFORMANCE_SCHEMA status; show engine PERFORMANCE_SCHEMA status;

View File

@ -45,11 +45,11 @@ performance_schema_max_file_classes 50
performance_schema_max_file_handles 32768 performance_schema_max_file_handles 32768
performance_schema_max_file_instances 10000 performance_schema_max_file_instances 10000
performance_schema_max_mutex_classes 200 performance_schema_max_mutex_classes 200
performance_schema_max_mutex_instances 1000000 performance_schema_max_mutex_instances 10000
performance_schema_max_rwlock_classes 30 performance_schema_max_rwlock_classes 30
performance_schema_max_rwlock_instances 1000000 performance_schema_max_rwlock_instances 10000
performance_schema_max_table_handles 100000 performance_schema_max_table_handles 1000
performance_schema_max_table_instances 50000 performance_schema_max_table_instances 500
performance_schema_max_thread_classes 50 performance_schema_max_thread_classes 50
performance_schema_max_thread_instances 1000 performance_schema_max_thread_instances 1000
show engine PERFORMANCE_SCHEMA status; show engine PERFORMANCE_SCHEMA status;

View File

@ -45,11 +45,11 @@ performance_schema_max_file_classes 50
performance_schema_max_file_handles 32768 performance_schema_max_file_handles 32768
performance_schema_max_file_instances 10000 performance_schema_max_file_instances 10000
performance_schema_max_mutex_classes 200 performance_schema_max_mutex_classes 200
performance_schema_max_mutex_instances 1000000 performance_schema_max_mutex_instances 10000
performance_schema_max_rwlock_classes 30 performance_schema_max_rwlock_classes 30
performance_schema_max_rwlock_instances 1000000 performance_schema_max_rwlock_instances 10000
performance_schema_max_table_handles 100000 performance_schema_max_table_handles 1000
performance_schema_max_table_instances 50000 performance_schema_max_table_instances 500
performance_schema_max_thread_classes 50 performance_schema_max_thread_classes 50
performance_schema_max_thread_instances 1000 performance_schema_max_thread_instances 1000
show engine PERFORMANCE_SCHEMA status; show engine PERFORMANCE_SCHEMA status;

View File

@ -0,0 +1,64 @@
# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
#
# 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
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
# Tests for PERFORMANCE_SCHEMA
--source include/not_embedded.inc
--source include/have_perfschema.inc
#
# The checksum value itself is random (data is volatile),
# just testing that this does not crash
#
--disable_result_log
checksum table performance_schema.COND_INSTANCES;
checksum table performance_schema.EVENTS_WAITS_CURRENT;
checksum table performance_schema.EVENTS_WAITS_HISTORY;
checksum table performance_schema.EVENTS_WAITS_HISTORY_LONG;
checksum table performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
checksum table performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
checksum table performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME;
checksum table performance_schema.FILE_INSTANCES;
checksum table performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
checksum table performance_schema.FILE_SUMMARY_BY_INSTANCE;
checksum table performance_schema.MUTEX_INSTANCES;
checksum table performance_schema.PERFORMANCE_TIMERS;
checksum table performance_schema.RWLOCK_INSTANCES;
checksum table performance_schema.SETUP_CONSUMERS;
checksum table performance_schema.SETUP_INSTRUMENTS;
checksum table performance_schema.SETUP_TIMERS;
checksum table performance_schema.THREADS;
checksum table performance_schema.COND_INSTANCES extended;
checksum table performance_schema.EVENTS_WAITS_CURRENT extended;
checksum table performance_schema.EVENTS_WAITS_HISTORY extended;
checksum table performance_schema.EVENTS_WAITS_HISTORY_LONG extended;
checksum table performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE extended;
checksum table performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME extended;
checksum table performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_BY_EVENT_NAME extended;
checksum table performance_schema.FILE_INSTANCES extended;
checksum table performance_schema.FILE_SUMMARY_BY_EVENT_NAME extended;
checksum table performance_schema.FILE_SUMMARY_BY_INSTANCE extended;
checksum table performance_schema.MUTEX_INSTANCES extended;
checksum table performance_schema.PERFORMANCE_TIMERS extended;
checksum table performance_schema.RWLOCK_INSTANCES extended;
checksum table performance_schema.SETUP_CONSUMERS extended;
checksum table performance_schema.SETUP_INSTRUMENTS extended;
checksum table performance_schema.SETUP_TIMERS extended;
checksum table performance_schema.THREADS extended;
--enable_result_log

View File

@ -1,4 +1,4 @@
# Copyright (C) 2009 Sun Microsystems, Inc # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
# #
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@ -10,8 +10,8 @@
# GNU General Public License for more details. # GNU General Public License for more details.
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software Foundation,
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
# Tests for PERFORMANCE_SCHEMA # Tests for PERFORMANCE_SCHEMA
@ -43,10 +43,6 @@ select count(name) from MUTEX_INSTANCES
select count(name) from MUTEX_INSTANCES select count(name) from MUTEX_INSTANCES
where name like "wait/synch/mutex/mysys/THR_LOCK_myisam"; where name like "wait/synch/mutex/mysys/THR_LOCK_myisam";
# Does not exist in mysql 5.5, 6.0 only
# select count(name) from MUTEX_INSTANCES
# where name like "wait/synch/mutex/mysys/THR_LOCK_myisam_log";
select count(name) from MUTEX_INSTANCES select count(name) from MUTEX_INSTANCES
where name like "wait/synch/mutex/mysys/THR_LOCK_heap"; where name like "wait/synch/mutex/mysys/THR_LOCK_heap";
@ -83,11 +79,6 @@ select count(name) from MUTEX_INSTANCES
select count(name) from MUTEX_INSTANCES select count(name) from MUTEX_INSTANCES
where name like "wait/synch/mutex/sql/LOCK_delayed_insert"; where name like "wait/synch/mutex/sql/LOCK_delayed_insert";
# Named LOCK_uuid_short in 6.0 only
# select count(name) from MUTEX_INSTANCES
# where name like "wait/synch/mutex/sql/LOCK_uuid_short";
# Named LOCK_uuid_generator in 5.5, LOCK_uuid_short in 6.0
select count(name) from MUTEX_INSTANCES select count(name) from MUTEX_INSTANCES
where name like "wait/synch/mutex/sql/LOCK_uuid_generator"; where name like "wait/synch/mutex/sql/LOCK_uuid_generator";
@ -130,14 +121,16 @@ select count(name) from MUTEX_INSTANCES
select count(name) from MUTEX_INSTANCES select count(name) from MUTEX_INSTANCES
where name like "wait/synch/mutex/sql/LOCK_rpl_status"; where name like "wait/synch/mutex/sql/LOCK_rpl_status";
select count(name) from MUTEX_INSTANCES # LOG_INFO object are created on demand, and are not global.
where name like "wait/synch/mutex/sql/LOG_INFO::lock"; # select count(name) from MUTEX_INSTANCES
# where name like "wait/synch/mutex/sql/LOG_INFO::lock";
select count(name) from MUTEX_INSTANCES select count(name) from MUTEX_INSTANCES
where name like "wait/synch/mutex/sql/Query_cache::structure_guard_mutex"; where name like "wait/synch/mutex/sql/Query_cache::structure_guard_mutex";
select count(name) from MUTEX_INSTANCES # The event scheduler may be disabled
where name like "wait/synch/mutex/sql/Event_scheduler::LOCK_scheduler_state"; # select count(name) from MUTEX_INSTANCES
# where name like "wait/synch/mutex/sql/Event_scheduler::LOCK_scheduler_state";
select count(name) from MUTEX_INSTANCES select count(name) from MUTEX_INSTANCES
where name like "wait/synch/mutex/sql/LOCK_event_metadata"; where name like "wait/synch/mutex/sql/LOCK_event_metadata";
@ -148,16 +141,11 @@ select count(name) from MUTEX_INSTANCES
select count(name) from MUTEX_INSTANCES select count(name) from MUTEX_INSTANCES
where name like "wait/synch/mutex/sql/LOCK_user_locks"; where name like "wait/synch/mutex/sql/LOCK_user_locks";
# Does not exist in mysql 5.5, 6.0 only
# select count(name) from MUTEX_INSTANCES
# where name like "wait/synch/mutex/sql/LOCK_mdl";
select count(name) from MUTEX_INSTANCES select count(name) from MUTEX_INSTANCES
where name like "wait/synch/mutex/sql/Cversion_lock"; where name like "wait/synch/mutex/sql/Cversion_lock";
# Does not exist in mysql 5.5, 6.0 only select count(name) from MUTEX_INSTANCES
# select count(name) from MUTEX_INSTANCES where name like "wait/synch/mutex/sql/LOCK_audit_mask";
# where name like "wait/synch/mutex/sql/LOCK_audit_mask";
select count(name) from MUTEX_INSTANCES select count(name) from MUTEX_INSTANCES
where name like "wait/synch/mutex/sql/LOCK_xid_cache"; where name like "wait/synch/mutex/sql/LOCK_xid_cache";
@ -165,28 +153,13 @@ select count(name) from MUTEX_INSTANCES
select count(name) from MUTEX_INSTANCES select count(name) from MUTEX_INSTANCES
where name like "wait/synch/mutex/sql/LOCK_plugin"; where name like "wait/synch/mutex/sql/LOCK_plugin";
select count(name) from MUTEX_INSTANCES # Not a global variable, may be destroyed already.
where name like "wait/synch/mutex/sql/LOCK_gdl"; # select count(name) from MUTEX_INSTANCES
# where name like "wait/synch/mutex/sql/LOCK_gdl";
select count(name) from MUTEX_INSTANCES select count(name) from MUTEX_INSTANCES
where name like "wait/synch/mutex/sql/tz_LOCK"; where name like "wait/synch/mutex/sql/tz_LOCK";
# Does not exist in mysql 5.5, 6.0 only
# select count(name) from MUTEX_INSTANCES
# where name like "wait/synch/mutex/sql/slave_start";
# Does not exist in mysql 5.5, 6.0 only
# select count(name) from MUTEX_INSTANCES
# where name like "wait/synch/mutex/sql/BML_class::THR_LOCK_BML";
# Does not exist in mysql 5.5, 6.0 only
# select count(name) from MUTEX_INSTANCES
# where name like "wait/synch/mutex/sql/BML_class::THR_LOCK_BML_active";
# Does not exist in mysql 5.5, 6.0 only
# select count(name) from MUTEX_INSTANCES
# where name like "wait/synch/mutex/sql/BML_class::THR_LOCK_BML_get";
# Verify that these global rwlocks have been properly initilized in sql # Verify that these global rwlocks have been properly initilized in sql
select count(name) from RWLOCK_INSTANCES select count(name) from RWLOCK_INSTANCES
@ -230,25 +203,10 @@ select count(name) from COND_INSTANCES
select count(name) from COND_INSTANCES select count(name) from COND_INSTANCES
where name like "wait/synch/cond/sql/Query_cache::COND_cache_status_changed"; where name like "wait/synch/cond/sql/Query_cache::COND_cache_status_changed";
select count(name) from COND_INSTANCES # The event scheduler may be disabled
where name like "wait/synch/cond/sql/Event_scheduler::COND_state"; # select count(name) from COND_INSTANCES
# where name like "wait/synch/cond/sql/Event_scheduler::COND_state";
select count(name) from COND_INSTANCES select count(name) from COND_INSTANCES
where name like "wait/synch/cond/sql/COND_queue_state"; where name like "wait/synch/cond/sql/COND_queue_state";
# Does not exist in mysql 5.5, 6.0 only
# select count(name) from COND_INSTANCES
# where name like "wait/synch/cond/sql/COND_mdl";
# Does not exist in mysql 5.5, 6.0 only
# select count(name) from COND_INSTANCES
# where name like "wait/synch/cond/sql/BML_class::COND_BML";
# Does not exist in mysql 5.5, 6.0 only
# select count(name) from COND_INSTANCES
# where name like "wait/synch/cond/sql/BML_class::COND_BML_registered";
# Does not exist in mysql 5.5, 6.0 only
# select count(name) from COND_INSTANCES
# where name like "wait/synch/cond/sql/BML_class::COND_BML_release";

View File

@ -11,7 +11,6 @@
############################################################################## ##############################################################################
rpl_failed_optimize : WL#4284: Can't optimize table used by a pending transaction (there is metadata lock on the table). rpl_failed_optimize : WL#4284: Can't optimize table used by a pending transaction (there is metadata lock on the table).
rpl_plugin_load : Bug#55966 2010-08-13 alik "plugin" tests fail in 5.5
rpl_read_only : WL#4284: Setting Read only won't succeed until all metadata locks are released. rpl_read_only : WL#4284: Setting Read only won't succeed until all metadata locks are released.
rpl_row_create_table : Bug#51574 2010-02-27 andrei failed different way than earlier with bug#45576 rpl_row_create_table : Bug#51574 2010-02-27 andrei failed different way than earlier with bug#45576
rpl_spec_variables : BUG#47661 2009-10-27 jasonh rpl_spec_variables fails on PB2 hpux rpl_spec_variables : BUG#47661 2009-10-27 jasonh rpl_spec_variables fails on PB2 hpux

View File

@ -11,10 +11,9 @@
############################################################################## ##############################################################################
kill : Bug#37780 2008-12-03 HHunger need some changes to be robust enough for pushbuild. kill : Bug#37780 2008-12-03 HHunger need some changes to be robust enough for pushbuild.
lowercase_table3 : Bug#54845 2010-06-30 alik main.lowercase_table3 on Mac OSX lowercase_table3 : Bug#54845 2010-06-30 alik main.lowercase_table3 on Mac OSX
mysqlhotcopy_myisam : Bug#54129 2010-08-31 alik mysqlhotcopy* fails
mysqlhotcopy_archive : Bug#54129 2010-08-31 alik mysqlhotcopy* fails
partition_innodb_plugin : Bug#53307 2010-04-30 VasilDimov valgrind warnings partition_innodb_plugin : Bug#53307 2010-04-30 VasilDimov valgrind warnings
plugin : Bug#55966 2010-08-13 alik "plugin" tests fail in 5.5
plugin_load : Bug#55966 2010-08-13 alik "plugin" tests fail in 5.5
plugin_not_embedded : Bug#55966 2010-08-13 alik "plugin" tests fail in 5.5
query_cache_28249 : Bug#43861 2009-03-25 main.query_cache_28249 fails sporadically query_cache_28249 : Bug#43861 2009-03-25 main.query_cache_28249 fails sporadically
sp_sync : Bug#48157 2010-02-06 5.5-m3 demands a differnt solution sp_sync : Bug#48157 2010-02-06 5.5-m3 demands a differnt solution
ctype_utf8mb4_ndb : Bug#55799, Bug#51907, disabled by Konstantin 2010-08-06 ctype_utf8mb4_ndb : Bug#55799, Bug#51907, disabled by Konstantin 2010-08-06

View File

@ -7,6 +7,7 @@
# changed (see explanation in log_state.test) # changed (see explanation in log_state.test)
let $fixed_bug38124 = 0; let $fixed_bug38124 = 0;
--source include/not_embedded.inc
--source include/have_debug.inc --source include/have_debug.inc
# Several subtests modify global variables. Save the initial values only here, # Several subtests modify global variables. Save the initial values only here,

View File

@ -192,11 +192,11 @@ INSERT INTO t1 (col3) VALUES (STR_TO_DATE('15.10.2004 10.15','%d.%m.%Y %H.%i'));
# All test cases expected to fail should return # All test cases expected to fail should return
# SQLSTATE 22007 <invalid date value> # SQLSTATE 22007 <invalid date value>
--error 1411
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i'));
--error 1411
--error 1292
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i'));
--error 1292 --error 1411
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col1) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i'));
--error 1292 --error 1292
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i'));
@ -206,18 +206,18 @@ INSERT INTO t1 (col1) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i'));
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('29.02.2003 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col1) VALUES(STR_TO_DATE('29.02.2003 15.30','%d.%m.%Y %H.%i'));
--error 1411 --error 1411
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col1) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i'));
--error 1292 --error 1411
INSERT INTO t1 (col1) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y')); INSERT INTO t1 (col1) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y'));
## Test INSERT with STR_TO_DATE into DATETIME ## Test INSERT with STR_TO_DATE into DATETIME
# All test cases expected to fail should return # All test cases expected to fail should return
# SQLSTATE 22007 <invalid datetime value> # SQLSTATE 22007 <invalid datetime value>
--error 1411
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i'));
--error 1411
--error 1292
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i'));
--error 1292 --error 1411
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col2) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i'));
--error 1292 --error 1292
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i'));
@ -227,18 +227,18 @@ INSERT INTO t1 (col2) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i'));
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('29.02.2003 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col2) VALUES(STR_TO_DATE('29.02.2003 15.30','%d.%m.%Y %H.%i'));
--error 1411 --error 1411
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col2) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i'));
--error 1292 --error 1411
INSERT INTO t1 (col2) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y')); INSERT INTO t1 (col2) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y'));
## Test INSERT with STR_TO_DATE into TIMESTAMP ## Test INSERT with STR_TO_DATE into TIMESTAMP
# All test cases expected to fail should return # All test cases expected to fail should return
# SQLSTATE 22007 <invalid datetime value> # SQLSTATE 22007 <invalid datetime value>
--error 1292 --error 1411
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i'));
--error 1292 --error 1411
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i'));
--error 1292 --error 1411
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col3) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i'));
--error 1292 --error 1292
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i'));
@ -248,7 +248,7 @@ INSERT INTO t1 (col3) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i'));
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('29.02.2003 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col3) VALUES(STR_TO_DATE('29.02.2003 15.30','%d.%m.%Y %H.%i'));
--error 1411 --error 1411
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i')); INSERT INTO t1 (col3) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i'));
--error 1292 --error 1411
INSERT INTO t1 (col3) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y')); INSERT INTO t1 (col3) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y'));
drop table t1; drop table t1;

View File

@ -461,6 +461,29 @@ EXPLAIN EXTENDED SELECT * FROM t1 FORCE INDEX(attime) WHERE AtTime = '2010-02-22
DROP TABLE t1; DROP TABLE t1;
SET NAMES latin1; SET NAMES latin1;
--echo #
--echo # Bug#56271: Wrong comparison result with STR_TO_DATE function
--echo #
CREATE TABLE t1 (
`year` int(4) NOT NULL,
`month` int(2) NOT NULL
);
INSERT INTO t1 VALUES (2010,3),(2010,4),(2009,8),(2008,9);
SELECT *
FROM t1
WHERE STR_TO_DATE(CONCAT_WS('/01/',`month`,`year`), '%m/%d/%Y') >=
STR_TO_DATE('1/1/2010', '%m/%d/%Y');
create table t2(f1 datetime primary key);
insert into t2 select STR_TO_DATE(CONCAT_WS('/01/',`month`,`year`), '%m/%d/%Y') from t1;
select * from t2 where f1=STR_TO_DATE('4/1/2010', '%m/%d/%Y');
--echo t2 should be const
explain select * from t2 where f1=STR_TO_DATE('4/1/2010', '%m/%d/%Y');
DROP TABLE t1,t2;
--echo # --echo #
--echo # End of 5.5 tests --echo # End of 5.5 tests
--echo # --echo #

View File

@ -1509,5 +1509,14 @@ group by PAY.id + 1;
DROP TABLE currencies, payments, sub_tasks; DROP TABLE currencies, payments, sub_tasks;
--echo #
--echo # BUG#52171: distinct aggregates on unsigned decimal fields trigger assertions
--echo #
CREATE TABLE t1 (a DECIMAL(4,4) UNSIGNED);
INSERT INTO t1 VALUES (0);
SELECT AVG(DISTINCT a) FROM t1;
SELECT SUM(DISTINCT a) FROM t1;
DROP TABLE t1;
--echo End of 5.1 tests --echo End of 5.1 tests

View File

@ -745,3 +745,38 @@
Memcheck:Addr1 Memcheck:Addr1
fun:buf_buddy_relocate fun:buf_buddy_relocate
} }
#
# See related Bug#56666
# Race condition between the server main thread and the kill server thread.
#
# Because of this race condition, the call to shutdown_performance_schema()
# was commented in sql/mysqld.cc, causing the reported leaks.
#
{
missing shutdown_performance_schema 1
Memcheck:Leak
fun:malloc
fun:_Z10pfs_mallocmi
}
{
missing shutdown_performance_schema 2
Memcheck:Leak
fun:malloc
fun:my_malloc
fun:_lf_alloc_new
fun:lf_hash_insert
}
{
missing shutdown_performance_schema 3
Memcheck:Leak
fun:malloc
fun:my_malloc
fun:initialize_bucket
fun:lf_hash_search
fun:_Z19find_or_create_fileP10PFS_threadP14PFS_file_classPKcj
}

View File

@ -64,7 +64,7 @@ my_bool my_gethwaddr(uchar *to)
if (ifm->ifm_type == RTM_IFINFO) if (ifm->ifm_type == RTM_IFINFO)
{ {
sdl = (struct sockaddr_dl *)(ifm + 1); sdl = (struct sockaddr_dl *)(ifm + 1);
addr=LLADDR(sdl); addr=(uchar *)LLADDR(sdl);
res=memcpy_and_test(to, addr, ETHER_ADDR_LEN); res=memcpy_and_test(to, addr, ETHER_ADDR_LEN);
} }
} }

View File

@ -187,6 +187,7 @@ int handle_options(int *argc, char ***argv,
{ {
char **first= pos; char **first= pos;
char *cur_arg= *pos; char *cur_arg= *pos;
opt_found= 0;
if (!is_cmdline_arg && (cur_arg == args_separator)) if (!is_cmdline_arg && (cur_arg == args_separator))
{ {
is_cmdline_arg= 1; is_cmdline_arg= 1;

View File

@ -100,9 +100,9 @@ static const char cur_dir_name[]= {FN_CURLIB, 0};
RETURN RETURN
0 if ok, !=0 if error 0 if ok, !=0 if error
*/ */
#ifdef NEED_EXPLICIT_SYNC_DIR
int my_sync_dir(const char *dir_name, myf my_flags) int my_sync_dir(const char *dir_name, myf my_flags)
{ {
#ifdef NEED_EXPLICIT_SYNC_DIR
File dir_fd; File dir_fd;
int res= 0; int res= 0;
const char *correct_dir_name; const char *correct_dir_name;
@ -124,10 +124,14 @@ int my_sync_dir(const char *dir_name, myf my_flags)
else else
res= 1; res= 1;
DBUG_RETURN(res); DBUG_RETURN(res);
#else
return 0;
#endif
} }
#else /* NEED_EXPLICIT_SYNC_DIR */
int my_sync_dir(const char *dir_name __attribute__((unused)),
myf my_flags __attribute__((unused)))
{
return 0;
}
#endif /* NEED_EXPLICIT_SYNC_DIR */
/* /*
@ -141,15 +145,18 @@ int my_sync_dir(const char *dir_name, myf my_flags)
RETURN RETURN
0 if ok, !=0 if error 0 if ok, !=0 if error
*/ */
#ifdef NEED_EXPLICIT_SYNC_DIR
int my_sync_dir_by_file(const char *file_name, myf my_flags) int my_sync_dir_by_file(const char *file_name, myf my_flags)
{ {
#ifdef NEED_EXPLICIT_SYNC_DIR
char dir_name[FN_REFLEN]; char dir_name[FN_REFLEN];
size_t dir_name_length; size_t dir_name_length;
dirname_part(dir_name, file_name, &dir_name_length); dirname_part(dir_name, file_name, &dir_name_length);
return my_sync_dir(dir_name, my_flags); return my_sync_dir(dir_name, my_flags);
#else
return 0;
#endif
} }
#else /* NEED_EXPLICIT_SYNC_DIR */
int my_sync_dir_by_file(const char *file_name __attribute__((unused)),
myf my_flags __attribute__((unused)))
{
return 0;
}
#endif /* NEED_EXPLICIT_SYNC_DIR */

View File

@ -35,6 +35,8 @@ static void init_myfunc_errs(void);
C_MODE_START C_MODE_START
static const char **get_server_errmsgs() static const char **get_server_errmsgs()
{ {
if (!current_thd)
return DEFAULT_ERRMSGS;
return CURRENT_THD_ERRMSGS; return CURRENT_THD_ERRMSGS;
} }
C_MODE_END C_MODE_END

View File

@ -9115,7 +9115,7 @@ void Create_field::init_for_tmp_table(enum_field_types sql_type_arg,
case MYSQL_TYPE_NEWDECIMAL: case MYSQL_TYPE_NEWDECIMAL:
case MYSQL_TYPE_FLOAT: case MYSQL_TYPE_FLOAT:
case MYSQL_TYPE_DOUBLE: case MYSQL_TYPE_DOUBLE:
pack_flag= FIELDFLAG_DECIMAL | FIELDFLAG_NUMBER | pack_flag= FIELDFLAG_NUMBER |
(decimals_arg & FIELDFLAG_MAX_DEC) << FIELDFLAG_DEC_SHIFT; (decimals_arg & FIELDFLAG_MAX_DEC) << FIELDFLAG_DEC_SHIFT;
break; break;
@ -9164,12 +9164,13 @@ void Create_field::init_for_tmp_table(enum_field_types sql_type_arg,
(maybe_null ? FIELDFLAG_MAYBE_NULL : 0) | (maybe_null ? FIELDFLAG_MAYBE_NULL : 0) |
(is_unsigned ? 0 : FIELDFLAG_DECIMAL); (is_unsigned ? 0 : FIELDFLAG_DECIMAL);
DBUG_PRINT("debug", ("pack_flag: %s%s%s%s%s, pack_type: %d", DBUG_PRINT("debug", ("pack_flag: %s%s%s%s%s%s, pack_type: %d",
FLAGSTR(pack_flag, FIELDFLAG_BINARY), FLAGSTR(pack_flag, FIELDFLAG_BINARY),
FLAGSTR(pack_flag, FIELDFLAG_NUMBER), FLAGSTR(pack_flag, FIELDFLAG_NUMBER),
FLAGSTR(pack_flag, FIELDFLAG_INTERVAL), FLAGSTR(pack_flag, FIELDFLAG_INTERVAL),
FLAGSTR(pack_flag, FIELDFLAG_GEOM), FLAGSTR(pack_flag, FIELDFLAG_GEOM),
FLAGSTR(pack_flag, FIELDFLAG_BLOB), FLAGSTR(pack_flag, FIELDFLAG_BLOB),
FLAGSTR(pack_flag, FIELDFLAG_DECIMAL),
f_packtype(pack_flag))); f_packtype(pack_flag)));
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }

View File

@ -3368,6 +3368,8 @@ void Item_func_str_to_date::fix_length_and_dec()
cached_field_type= MYSQL_TYPE_DATETIME; cached_field_type= MYSQL_TYPE_DATETIME;
max_length= MAX_DATETIME_FULL_WIDTH*MY_CHARSET_BIN_MB_MAXLEN; max_length= MAX_DATETIME_FULL_WIDTH*MY_CHARSET_BIN_MB_MAXLEN;
cached_timestamp_type= MYSQL_TIMESTAMP_NONE; cached_timestamp_type= MYSQL_TIMESTAMP_NONE;
sql_mode= (current_thd->variables.sql_mode &
(MODE_NO_ZERO_IN_DATE | MODE_NO_ZERO_DATE));
if ((const_item= args[1]->const_item())) if ((const_item= args[1]->const_item()))
{ {
char format_buff[64]; char format_buff[64];
@ -3433,6 +3435,14 @@ bool Item_func_str_to_date::get_date(MYSQL_TIME *ltime, uint fuzzy_date)
return 0; return 0;
null_date: null_date:
if (fuzzy_date & TIME_NO_ZERO_DATE)
{
char buff[128];
strmake(buff, val->ptr(), min(val->length(), sizeof(buff)-1));
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_WRONG_VALUE_FOR_TYPE, ER(ER_WRONG_VALUE_FOR_TYPE),
"datetime", buff, "str_to_date");
}
return (null_value=1); return (null_value=1);
} }
@ -3442,7 +3452,7 @@ String *Item_func_str_to_date::val_str(String *str)
DBUG_ASSERT(fixed == 1); DBUG_ASSERT(fixed == 1);
MYSQL_TIME ltime; MYSQL_TIME ltime;
if (Item_func_str_to_date::get_date(&ltime, TIME_FUZZY_DATE)) if (Item_func_str_to_date::get_date(&ltime, TIME_FUZZY_DATE | sql_mode))
return 0; return 0;
if (!make_datetime((const_item ? cached_format_type : if (!make_datetime((const_item ? cached_format_type :
@ -3453,6 +3463,29 @@ String *Item_func_str_to_date::val_str(String *str)
} }
longlong Item_func_str_to_date::val_int()
{
DBUG_ASSERT(fixed == 1);
MYSQL_TIME ltime;
if (Item_func_str_to_date::get_date(&ltime, TIME_FUZZY_DATE | sql_mode))
return 0;
if (const_item)
{
switch (cached_field_type) {
case MYSQL_TYPE_DATE:
return TIME_to_ulonglong_date(&ltime);
case MYSQL_TYPE_TIME:
return TIME_to_ulonglong_time(&ltime);
default:
return TIME_to_ulonglong_datetime(&ltime);
}
}
return TIME_to_ulonglong_datetime(&ltime);
}
bool Item_func_last_day::get_date(MYSQL_TIME *ltime, uint fuzzy_date) bool Item_func_last_day::get_date(MYSQL_TIME *ltime, uint fuzzy_date)
{ {
if (get_arg0_date(ltime, fuzzy_date & ~TIME_FUZZY_DATE) || if (get_arg0_date(ltime, fuzzy_date & ~TIME_FUZZY_DATE) ||

View File

@ -1039,6 +1039,7 @@ class Item_func_str_to_date :public Item_str_func
date_time_format_types cached_format_type; date_time_format_types cached_format_type;
timestamp_type cached_timestamp_type; timestamp_type cached_timestamp_type;
bool const_item; bool const_item;
ulonglong sql_mode;
public: public:
Item_func_str_to_date(Item *a, Item *b) Item_func_str_to_date(Item *a, Item *b)
:Item_str_func(a, b), const_item(false) :Item_str_func(a, b), const_item(false)
@ -1052,6 +1053,8 @@ public:
{ {
return tmp_table_field_from_field_type(table, 1); return tmp_table_field_from_field_type(table, 1);
} }
longlong val_int();
bool result_as_longlong() { return TRUE; }
}; };

View File

@ -5288,11 +5288,8 @@ int MYSQL_BIN_LOG::wait_for_update_bin_log(THD* thd,
const struct timespec *timeout) const struct timespec *timeout)
{ {
int ret= 0; int ret= 0;
const char* old_msg = thd->proc_info;
DBUG_ENTER("wait_for_update_bin_log"); DBUG_ENTER("wait_for_update_bin_log");
old_msg= thd->enter_cond(&update_cond, &LOCK_log,
"Master has sent all binlog to slave; "
"waiting for binlog to be updated");
if (!timeout) if (!timeout)
mysql_cond_wait(&update_cond, &LOCK_log); mysql_cond_wait(&update_cond, &LOCK_log);
else else

View File

@ -460,6 +460,7 @@ public:
inline char* get_log_fname() { return log_file_name; } inline char* get_log_fname() { return log_file_name; }
inline char* get_name() { return name; } inline char* get_name() { return name; }
inline mysql_mutex_t* get_log_lock() { return &LOCK_log; } inline mysql_mutex_t* get_log_lock() { return &LOCK_log; }
inline mysql_cond_t* get_log_cond() { return &update_cond; }
inline IO_CACHE* get_log_file() { return &log_file; } inline IO_CACHE* get_log_file() { return &log_file; }
inline void lock_index() { mysql_mutex_lock(&LOCK_index);} inline void lock_index() { mysql_mutex_lock(&LOCK_index);}

View File

@ -1395,6 +1395,12 @@ static void mysqld_exit(int exit_code)
mysql_audit_finalize(); mysql_audit_finalize();
clean_up_mutexes(); clean_up_mutexes();
clean_up_error_log_mutex(); clean_up_error_log_mutex();
#ifdef WITH_PERFSCHEMA_STORAGE_ENGINE
/*
Bug#56666 needs to be fixed before calling:
shutdown_performance_schema();
*/
#endif
my_end(opt_endinfo ? MY_CHECK_ERROR | MY_GIVE_INFO : 0); my_end(opt_endinfo ? MY_CHECK_ERROR | MY_GIVE_INFO : 0);
exit(exit_code); /* purecov: inspected */ exit(exit_code); /* purecov: inspected */
} }
@ -1486,6 +1492,7 @@ void clean_up(bool print_message)
cleanup_errmsgs(); cleanup_errmsgs();
MYSQL_CALLBACK(thread_scheduler, end, ()); MYSQL_CALLBACK(thread_scheduler, end, ());
finish_client_errs(); finish_client_errs();
(void) my_error_unregister(ER_ERROR_FIRST, ER_ERROR_LAST); // finish server errs
DBUG_PRINT("quit", ("Error messages freed")); DBUG_PRINT("quit", ("Error messages freed"));
/* Tell main we are ready */ /* Tell main we are ready */
logger.cleanup_end(); logger.cleanup_end();
@ -2732,6 +2739,11 @@ pthread_handler_t signal_hand(void *arg __attribute__((unused)))
if (!abort_loop) if (!abort_loop)
{ {
abort_loop=1; // mark abort for threads abort_loop=1; // mark abort for threads
#ifdef HAVE_PSI_INTERFACE
/* Delete the instrumentation for the signal thread */
if (likely(PSI_server != NULL))
PSI_server->delete_current_thread();
#endif
#ifdef USE_ONE_SIGNAL_HAND #ifdef USE_ONE_SIGNAL_HAND
pthread_t tmp; pthread_t tmp;
if (mysql_thread_create(0, /* Not instrumented */ if (mysql_thread_create(0, /* Not instrumented */
@ -4587,6 +4599,15 @@ int mysqld_main(int argc, char **argv)
#endif #endif
#endif /* __WIN__ */ #endif /* __WIN__ */
#ifdef HAVE_PSI_INTERFACE
/*
Disable the main thread instrumentation,
to avoid recording events during the shutdown.
*/
if (PSI_server)
PSI_server->delete_current_thread();
#endif
/* Wait until cleanup is done */ /* Wait until cleanup is done */
mysql_mutex_lock(&LOCK_thread_count); mysql_mutex_lock(&LOCK_thread_count);
while (!ready_to_exit) while (!ready_to_exit)
@ -4604,18 +4625,6 @@ int mysqld_main(int argc, char **argv)
} }
#endif #endif
clean_up(1); clean_up(1);
#ifdef HAVE_PSI_INTERFACE
/*
Disable the instrumentation, to avoid recording events
during the shutdown.
*/
if (PSI_server)
{
PSI_server->delete_current_thread();
PSI_server= NULL;
}
shutdown_performance_schema();
#endif
mysqld_exit(0); mysqld_exit(0);
} }

View File

@ -108,7 +108,7 @@ void sys_var_end()
my_hash_free(&system_variable_hash); my_hash_free(&system_variable_hash);
for (sys_var *var=all_sys_vars.first; var; var= var->next) for (sys_var *var=all_sys_vars.first; var; var= var->next)
var->~sys_var(); var->cleanup();
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }

View File

@ -91,11 +91,13 @@ public:
longlong def_val, PolyLock *lock, enum binlog_status_enum binlog_status_arg, longlong def_val, PolyLock *lock, enum binlog_status_enum binlog_status_arg,
on_check_function on_check_func, on_update_function on_update_func, on_check_function on_check_func, on_update_function on_update_func,
uint deprecated_version, const char *substitute, int parse_flag); uint deprecated_version, const char *substitute, int parse_flag);
/**
The instance should only be destroyed on shutdown, as it doesn't unlink
itself from the chain.
*/
virtual ~sys_var() {} virtual ~sys_var() {}
/**
All the cleanup procedures should be performed here
*/
virtual void cleanup() {}
/** /**
downcast for sys_var_pluginvar. Returns this if it's an instance downcast for sys_var_pluginvar. Returns this if it's an instance
of sys_var_pluginvar, and 0 otherwise. of sys_var_pluginvar, and 0 otherwise.

View File

@ -620,6 +620,32 @@ bool open_and_lock_for_insert_delayed(THD *thd, TABLE_LIST *table_list)
} }
/**
Create a new query string for removing DELAYED keyword for
multi INSERT DEALAYED statement.
@param[in] thd Thread handler
@param[in] buf Query string
@return
0 ok
1 error
*/
static int
create_insert_stmt_from_insert_delayed(THD *thd, String *buf)
{
/* Append the part of thd->query before "DELAYED" keyword */
if (buf->append(thd->query(),
thd->lex->keyword_delayed_begin - thd->query()))
return 1;
/* Append the part of thd->query after "DELAYED" keyword */
if (buf->append(thd->lex->keyword_delayed_begin + 7))
return 1;
return 0;
}
/** /**
INSERT statement implementation INSERT statement implementation
@ -999,13 +1025,28 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
such case the flag is ignored for constructing binlog event. such case the flag is ignored for constructing binlog event.
*/ */
DBUG_ASSERT(thd->killed != THD::KILL_BAD_DATA || error > 0); DBUG_ASSERT(thd->killed != THD::KILL_BAD_DATA || error > 0);
if (thd->binlog_query(THD::ROW_QUERY_TYPE, if (was_insert_delayed && table_list->lock_type == TL_WRITE)
thd->query(), thd->query_length(),
transactional_table, FALSE, FALSE,
errcode))
{ {
/* Binlog multi INSERT DELAYED as INSERT without DELAYED. */
String log_query;
if (create_insert_stmt_from_insert_delayed(thd, &log_query))
{
sql_print_error("Event Error: An error occurred while creating query string"
"for INSERT DELAYED stmt, before writing it into binary log.");
error= 1;
}
else if (thd->binlog_query(THD::ROW_QUERY_TYPE,
log_query.c_ptr(), log_query.length(),
transactional_table, FALSE, FALSE,
errcode))
error= 1;
}
else if (thd->binlog_query(THD::ROW_QUERY_TYPE,
thd->query(), thd->query_length(),
transactional_table, FALSE, FALSE,
errcode))
error= 1; error= 1;
}
} }
} }
DBUG_ASSERT(transactional_table || !changed || DBUG_ASSERT(transactional_table || !changed ||

View File

@ -2354,8 +2354,14 @@ struct LEX: public Query_tables_list
This pointer is required to add possibly omitted DEFINER-clause to the This pointer is required to add possibly omitted DEFINER-clause to the
DDL-statement before dumping it to the binlog. DDL-statement before dumping it to the binlog.
keyword_delayed_begin points to the begin of the DELAYED keyword in
INSERT DELAYED statement.
*/ */
const char *stmt_definition_begin; union {
const char *stmt_definition_begin;
const char *keyword_delayed_begin;
};
const char *stmt_definition_end; const char *stmt_definition_end;

View File

@ -519,7 +519,7 @@ static st_plugin_dl *plugin_dl_add(const LEX_STRING *dl, int report)
/* no op */; /* no op */;
cur= (struct st_mysql_plugin*) cur= (struct st_mysql_plugin*)
my_malloc(i*sizeof(struct st_mysql_plugin), MYF(MY_ZEROFILL|MY_WME)); my_malloc((i+1)*sizeof(struct st_mysql_plugin), MYF(MY_ZEROFILL|MY_WME));
if (!cur) if (!cur)
{ {
free_plugin_mem(&plugin_dl); free_plugin_mem(&plugin_dl);

View File

@ -448,6 +448,8 @@ void mysql_binlog_send(THD* thd, char* log_ident, my_off_t pos,
const char *errmsg = "Unknown error"; const char *errmsg = "Unknown error";
NET* net = &thd->net; NET* net = &thd->net;
mysql_mutex_t *log_lock; mysql_mutex_t *log_lock;
mysql_cond_t *log_cond;
bool binlog_can_be_corrupted= FALSE; bool binlog_can_be_corrupted= FALSE;
#ifndef DBUG_OFF #ifndef DBUG_OFF
int left_events = max_binlog_dump_events; int left_events = max_binlog_dump_events;
@ -591,7 +593,8 @@ impossible position";
mysql_bin_log, and it's already inited, and it will be destroyed mysql_bin_log, and it's already inited, and it will be destroyed
only at shutdown). only at shutdown).
*/ */
log_lock = mysql_bin_log.get_log_lock(); log_lock= mysql_bin_log.get_log_lock();
log_cond= mysql_bin_log.get_log_cond();
if (pos > BIN_LOG_HEADER_SIZE) if (pos > BIN_LOG_HEADER_SIZE)
{ {
/* reset transmit packet for the event read from binary log /* reset transmit packet for the event read from binary log
@ -826,6 +829,7 @@ impossible position";
#ifndef DBUG_OFF #ifndef DBUG_OFF
ulong hb_info_counter= 0; ulong hb_info_counter= 0;
#endif #endif
const char* old_msg= thd->proc_info;
signal_cnt= mysql_bin_log.signal_cnt; signal_cnt= mysql_bin_log.signal_cnt;
do do
{ {
@ -834,6 +838,9 @@ impossible position";
DBUG_ASSERT(heartbeat_ts && heartbeat_period != 0); DBUG_ASSERT(heartbeat_ts && heartbeat_period != 0);
set_timespec_nsec(*heartbeat_ts, heartbeat_period); set_timespec_nsec(*heartbeat_ts, heartbeat_period);
} }
thd->enter_cond(log_cond, log_lock,
"Master has sent all binlog to slave; "
"waiting for binlog to be updated");
ret= mysql_bin_log.wait_for_update_bin_log(thd, heartbeat_ts); ret= mysql_bin_log.wait_for_update_bin_log(thd, heartbeat_ts);
DBUG_ASSERT(ret == 0 || (heartbeat_period != 0 && coord != NULL)); DBUG_ASSERT(ret == 0 || (heartbeat_period != 0 && coord != NULL));
if (ret == ETIMEDOUT || ret == ETIME) if (ret == ETIMEDOUT || ret == ETIME)
@ -849,12 +856,15 @@ impossible position";
#endif #endif
/* reset transmit packet for the heartbeat event */ /* reset transmit packet for the heartbeat event */
if (reset_transmit_packet(thd, flags, &ev_offset, &errmsg)) if (reset_transmit_packet(thd, flags, &ev_offset, &errmsg))
{
thd->exit_cond(old_msg);
goto err; goto err;
}
if (send_heartbeat_event(net, packet, coord)) if (send_heartbeat_event(net, packet, coord))
{ {
errmsg = "Failed on my_net_write()"; errmsg = "Failed on my_net_write()";
my_errno= ER_UNKNOWN_ERROR; my_errno= ER_UNKNOWN_ERROR;
mysql_mutex_unlock(log_lock); thd->exit_cond(old_msg);
goto err; goto err;
} }
} }
@ -863,7 +873,7 @@ impossible position";
DBUG_PRINT("wait",("binary log received update or a broadcast signal caught")); DBUG_PRINT("wait",("binary log received update or a broadcast signal caught"));
} }
} while (signal_cnt == mysql_bin_log.signal_cnt && !thd->killed); } while (signal_cnt == mysql_bin_log.signal_cnt && !thd->killed);
mysql_mutex_unlock(log_lock); thd->exit_cond(old_msg);
} }
break; break;

View File

@ -10447,8 +10447,8 @@ insert_lock_option:
| LOW_PRIORITY { $$= TL_WRITE_LOW_PRIORITY; } | LOW_PRIORITY { $$= TL_WRITE_LOW_PRIORITY; }
| DELAYED_SYM | DELAYED_SYM
{ {
Lex->keyword_delayed_begin= YYLIP->get_tok_start();
$$= TL_WRITE_DELAYED; $$= TL_WRITE_DELAYED;
Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_INSERT_DELAYED);
} }
| HIGH_PRIORITY { $$= TL_WRITE; } | HIGH_PRIORITY { $$= TL_WRITE; }
; ;
@ -10457,8 +10457,8 @@ replace_lock_option:
opt_low_priority { $$= $1; } opt_low_priority { $$= $1; }
| DELAYED_SYM | DELAYED_SYM
{ {
Lex->keyword_delayed_begin= YYLIP->get_tok_start();
$$= TL_WRITE_DELAYED; $$= TL_WRITE_DELAYED;
Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_INSERT_DELAYED);
} }
; ;

View File

@ -385,7 +385,7 @@ public:
DBUG_ASSERT(scope() == GLOBAL); DBUG_ASSERT(scope() == GLOBAL);
DBUG_ASSERT(size == sizeof(char *)); DBUG_ASSERT(size == sizeof(char *));
} }
~Sys_var_charptr() void cleanup()
{ {
if (flags & ALLOCATED) if (flags & ALLOCATED)
my_free(global_var(char*)); my_free(global_var(char*));

View File

@ -223,6 +223,8 @@ int PFS_engine_table::read_row(TABLE *table,
Field **fields) Field **fields)
{ {
my_bitmap_map *org_bitmap; my_bitmap_map *org_bitmap;
Field *f;
Field **fields_reset;
/* /*
Make sure the table structure is as expected before mapping Make sure the table structure is as expected before mapping
@ -240,6 +242,16 @@ int PFS_engine_table::read_row(TABLE *table,
/* We internally write to Fields to support the read interface */ /* We internally write to Fields to support the read interface */
org_bitmap= dbug_tmp_use_all_columns(table, table->write_set); org_bitmap= dbug_tmp_use_all_columns(table, table->write_set);
/*
Some callers of the storage engine interface do not honor the
f->is_null() flag, and will attempt to read the data itself.
A known offender is mysql_checksum_table().
For robustness, reset every field.
*/
for (fields_reset= fields; (f= *fields_reset) ; fields_reset++)
f->reset();
int result= read_row_values(table, buf, fields, read_all); int result= read_row_values(table, buf, fields, read_all);
dbug_tmp_restore_column_map(table->write_set, org_bitmap); dbug_tmp_restore_column_map(table->write_set, org_bitmap);

View File

@ -187,7 +187,7 @@ void table_events_waits_common::clear_object_columns()
*/ */
void table_events_waits_common::make_row(bool thread_own_wait, void table_events_waits_common::make_row(bool thread_own_wait,
PFS_thread *pfs_thread, PFS_thread *pfs_thread,
PFS_events_waits *wait) volatile PFS_events_waits *wait)
{ {
pfs_lock lock; pfs_lock lock;
PFS_thread *safe_thread; PFS_thread *safe_thread;
@ -251,21 +251,27 @@ void table_events_waits_common::make_row(bool thread_own_wait,
case WAIT_CLASS_TABLE: case WAIT_CLASS_TABLE:
m_row.m_object_type= "TABLE"; m_row.m_object_type= "TABLE";
m_row.m_object_type_length= 5; m_row.m_object_type_length= 5;
memcpy(m_row.m_object_schema, wait->m_schema_name,
wait->m_schema_name_length);
m_row.m_object_schema_length= wait->m_schema_name_length; m_row.m_object_schema_length= wait->m_schema_name_length;
memcpy(m_row.m_object_name, wait->m_object_name, if (unlikely((m_row.m_object_schema_length == 0) ||
wait->m_object_name_length); (m_row.m_object_schema_length > sizeof(m_row.m_object_schema))))
return;
memcpy(m_row.m_object_schema, wait->m_schema_name, m_row.m_object_schema_length);
m_row.m_object_name_length= wait->m_object_name_length; m_row.m_object_name_length= wait->m_object_name_length;
if (unlikely((m_row.m_object_name_length == 0) ||
(m_row.m_object_name_length > sizeof(m_row.m_object_name))))
return;
memcpy(m_row.m_object_name, wait->m_object_name, m_row.m_object_name_length);
safe_class= &global_table_class; safe_class= &global_table_class;
break; break;
case WAIT_CLASS_FILE: case WAIT_CLASS_FILE:
m_row.m_object_type= "FILE"; m_row.m_object_type= "FILE";
m_row.m_object_type_length= 4; m_row.m_object_type_length= 4;
m_row.m_object_schema_length= 0; m_row.m_object_schema_length= 0;
memcpy(m_row.m_object_name, wait->m_object_name,
wait->m_object_name_length);
m_row.m_object_name_length= wait->m_object_name_length; m_row.m_object_name_length= wait->m_object_name_length;
if (unlikely((m_row.m_object_name_length == 0) ||
(m_row.m_object_name_length > sizeof(m_row.m_object_name))))
return;
memcpy(m_row.m_object_name, wait->m_object_name, m_row.m_object_name_length);
safe_class= sanitize_file_class((PFS_file_class*) wait->m_class); safe_class= sanitize_file_class((PFS_file_class*) wait->m_class);
break; break;
case NO_WAIT_CLASS: case NO_WAIT_CLASS:

View File

@ -137,7 +137,7 @@ protected:
void clear_object_columns(); void clear_object_columns();
void make_row(bool thread_own_wait, PFS_thread *pfs_thread, void make_row(bool thread_own_wait, PFS_thread *pfs_thread,
PFS_events_waits *wait); volatile PFS_events_waits *wait);
/** Current row. */ /** Current row. */
row_events_waits m_row; row_events_waits m_row;

View File

@ -255,7 +255,7 @@ static char *process_int_arg(char *to, char *end, size_t length,
if ((to_length= (size_t) (end-to)) < 16 || length) if ((to_length= (size_t) (end-to)) < 16 || length)
store_start= buff; store_start= buff;
if (arg_type == 'd') if (arg_type == 'd' || arg_type == 'i')
store_end= longlong10_to_str(par, store_start, -10); store_end= longlong10_to_str(par, store_start, -10);
else if (arg_type == 'u') else if (arg_type == 'u')
store_end= longlong10_to_str(par, store_start, 10); store_end= longlong10_to_str(par, store_start, 10);
@ -399,6 +399,7 @@ start:
args_arr[i].double_arg= va_arg(ap, double); args_arr[i].double_arg= va_arg(ap, double);
break; break;
case 'd': case 'd':
case 'i':
case 'u': case 'u':
case 'x': case 'x':
case 'X': case 'X':
@ -406,7 +407,7 @@ start:
case 'p': case 'p':
if (args_arr[i].have_longlong) if (args_arr[i].have_longlong)
args_arr[i].longlong_arg= va_arg(ap,longlong); args_arr[i].longlong_arg= va_arg(ap,longlong);
else if (args_arr[i].arg_type == 'd') else if (args_arr[i].arg_type == 'd' || args_arr[i].arg_type == 'i')
args_arr[i].longlong_arg= va_arg(ap, int); args_arr[i].longlong_arg= va_arg(ap, int);
else else
args_arr[i].longlong_arg= va_arg(ap, uint); args_arr[i].longlong_arg= va_arg(ap, uint);
@ -458,6 +459,7 @@ start:
break; break;
} }
case 'd': case 'd':
case 'i':
case 'u': case 'u':
case 'x': case 'x':
case 'X': case 'X':
@ -472,7 +474,7 @@ start:
if (args_arr[print_arr[i].arg_idx].have_longlong) if (args_arr[print_arr[i].arg_idx].have_longlong)
larg = args_arr[print_arr[i].arg_idx].longlong_arg; larg = args_arr[print_arr[i].arg_idx].longlong_arg;
else if (print_arr[i].arg_type == 'd') else if (print_arr[i].arg_type == 'd' || print_arr[i].arg_type == 'i' )
larg = (int) args_arr[print_arr[i].arg_idx].longlong_arg; larg = (int) args_arr[print_arr[i].arg_idx].longlong_arg;
else else
larg= (uint) args_arr[print_arr[i].arg_idx].longlong_arg; larg= (uint) args_arr[print_arr[i].arg_idx].longlong_arg;
@ -615,8 +617,8 @@ size_t my_vsnprintf_ex(CHARSET_INFO *cs, char *to, size_t n,
to= process_dbl_arg(to, end, width, d, *fmt); to= process_dbl_arg(to, end, width, d, *fmt);
continue; continue;
} }
else if (*fmt == 'd' || *fmt == 'u' || *fmt == 'x' || *fmt == 'X' || else if (*fmt == 'd' || *fmt == 'i' || *fmt == 'u' || *fmt == 'x' ||
*fmt == 'p' || *fmt == 'o') *fmt == 'X' || *fmt == 'p' || *fmt == 'o')
{ {
/* Integer parameter */ /* Integer parameter */
longlong larg; longlong larg;
@ -625,7 +627,7 @@ size_t my_vsnprintf_ex(CHARSET_INFO *cs, char *to, size_t n,
if (have_longlong) if (have_longlong)
larg = va_arg(ap,longlong); larg = va_arg(ap,longlong);
else if (*fmt == 'd') else if (*fmt == 'd' || *fmt == 'i')
larg = va_arg(ap, int); larg = va_arg(ap, int);
else else
larg= va_arg(ap, uint); larg= va_arg(ap, uint);

View File

@ -31,7 +31,7 @@ void test1(const char *res, const char *fmt, ...)
int main(void) int main(void)
{ {
plan(54); plan(58);
test1("Constant string", test1("Constant string",
"Constant string"); "Constant string");
@ -44,6 +44,8 @@ int main(void)
"Format specifier c %c", '!'); "Format specifier c %c", '!');
test1("Format specifier d 1", test1("Format specifier d 1",
"Format specifier d %d", 1); "Format specifier d %d", 1);
test1("Format specifier i 1",
"Format specifier i %i", 1);
test1("Format specifier u 2", test1("Format specifier u 2",
"Format specifier u %u", 2); "Format specifier u %u", 2);
test1("Format specifier o 375", test1("Format specifier o 375",
@ -77,6 +79,9 @@ int main(void)
test1("Length modifiers work: 1 * -1 * 2 * 3", test1("Length modifiers work: 1 * -1 * 2 * 3",
"Length modifiers work: %d * %ld * %lld * %zd", 1, -1L, 2LL, (size_t)3); "Length modifiers work: %d * %ld * %lld * %zd", 1, -1L, 2LL, (size_t)3);
test1("Length modifiers work: 1 * -1 * 2 * 3",
"Length modifiers work: %i * %li * %lli * %zd", 1, -1L, 2LL, (size_t)3);
test1("long long X: 123456789abcdef0", test1("long long X: 123456789abcdef0",
"long long X: %llx", 0x123456789abcdef0LL); "long long X: %llx", 0x123456789abcdef0LL);
@ -121,6 +126,10 @@ int main(void)
"Hello int, %d", 1); "Hello int, %d", 1);
test1("Hello int, -1", test1("Hello int, -1",
"Hello int, %d", -1); "Hello int, %d", -1);
test1("Hello int, 1",
"Hello int, %i", 1);
test1("Hello int, -1",
"Hello int, %i", -1);
test1("Hello string 'I am a string'", test1("Hello string 'I am a string'",
"Hello string '%s'", "I am a string"); "Hello string '%s'", "I am a string");
test1("Hello hack hack hack hack hack hack hack 1", test1("Hello hack hack hack hack hack hack hack 1",