Commit 73921638 authored by unknown's avatar unknown
Browse files

Merge dsl-hkibras-fe36f900-97.dhcp.inet.fi:/home/elkin/MySQL/TEAM/BARE/5.1

into  dsl-hkibras-fe36f900-97.dhcp.inet.fi:/home/elkin/MySQL/TEAM/FIXES/5.1/bug16567_binlog_verbose_help_jeb


sql/mysqld.cc:
  Auto merged
parents ae927d45 fa5cc52a
Loading
Loading
Loading
Loading
+29 −7
Original line number Diff line number Diff line
@@ -7,8 +7,31 @@ start slave;
drop database if exists mysqltest1;
create database mysqltest1;
use mysqltest1;
set session binlog_format=mixed;
show session variables like "binlog_format%";
Variable_name	Value
binlog_format	MIXED
set session binlog_format=statement;
show session variables like "binlog_format%";
Variable_name	Value
binlog_format	STATEMENT
set session binlog_format=row;
set global binlog_format=row;
show session variables like "binlog_format%";
Variable_name	Value
binlog_format	ROW
set global binlog_format=DEFAULT;
show global variables like "binlog_format%";
Variable_name	Value
binlog_format	MIXED
set global binlog_format=MIXED;
show global variables like "binlog_format%";
Variable_name	Value
binlog_format	MIXED
set global binlog_format=STATEMENT;
show global variables like "binlog_format%";
Variable_name	Value
binlog_format	STATEMENT
set global binlog_format=ROW;
show global variables like "binlog_format%";
Variable_name	Value
binlog_format	ROW
@@ -67,12 +90,11 @@ execute stmt1 using @string;
deallocate prepare stmt1;
insert into t1 values("for_10_");
insert into t1 select "yesterday_11_";
set binlog_format=default;
set binlog_format=statement;
select @@global.binlog_format, @@session.binlog_format;
@@global.binlog_format	@@session.binlog_format
STATEMENT	STATEMENT
set global binlog_format=default;
ERROR 42000: Variable 'binlog_format' doesn't have a default value
set global binlog_format=statement;
select @@global.binlog_format, @@session.binlog_format;
@@global.binlog_format	@@session.binlog_format
STATEMENT	STATEMENT
@@ -87,11 +109,11 @@ execute stmt1 using @string;
deallocate prepare stmt1;
insert into t1 values("for_15_");
insert into t1 select "yesterday_16_";
set binlog_format=mixed;
set global binlog_format=mixed;
select @@global.binlog_format, @@session.binlog_format;
@@global.binlog_format	@@session.binlog_format
STATEMENT	MIXED
set global binlog_format=mixed;
MIXED	STATEMENT
set binlog_format=default;
select @@global.binlog_format, @@session.binlog_format;
@@global.binlog_format	@@session.binlog_format
MIXED	MIXED
+30 −8
Original line number Diff line number Diff line
#
# rpl_switch_stm_row_mixed tests covers
#
#   - switching explicitly between STATEMENT, ROW, and MIXED binlog format
#     showing when it is possible and when not. 
#   - switching from MIXED to RBR implicitly listing all use cases,
#     e.g a query invokes UUID(), thereafter to serve as the definition
#     of MIXED binlog format
#   - correctness of execution


-- source include/not_ndb_default.inc
-- source include/master-slave.inc

@@ -8,9 +19,22 @@ create database mysqltest1;
--enable_warnings
use mysqltest1;


#  play with switching
set session binlog_format=mixed;
show session variables like "binlog_format%";
set session binlog_format=statement;
show session variables like "binlog_format%";
set session binlog_format=row;
set global binlog_format=row;
show session variables like "binlog_format%";

set global binlog_format=DEFAULT;
show global variables like "binlog_format%";
set global binlog_format=MIXED;
show global variables like "binlog_format%";
set global binlog_format=STATEMENT;
show global variables like "binlog_format%";
set global binlog_format=ROW;
show global variables like "binlog_format%";
show session variables like "binlog_format%";
select @@global.binlog_format, @@session.binlog_format;
@@ -63,12 +87,10 @@ deallocate prepare stmt1;
insert into t1 values("for_10_");
insert into t1 select "yesterday_11_";

# test SET DEFAULT (=statement at this point of test)
set binlog_format=default;
# test statement (is not default after wl#3368)
set binlog_format=statement;
select @@global.binlog_format, @@session.binlog_format;
# due to cluster it's hard to set back to default
--error ER_NO_DEFAULT
set global binlog_format=default;
set global binlog_format=statement;
select @@global.binlog_format, @@session.binlog_format;

prepare stmt1 from 'insert into t1 select ?';
@@ -87,10 +109,10 @@ insert into t1 select "yesterday_16_";

# and now the mixed mode

set binlog_format=mixed;
select @@global.binlog_format, @@session.binlog_format;
set global binlog_format=mixed;
select @@global.binlog_format, @@session.binlog_format;
set binlog_format=default;
select @@global.binlog_format, @@session.binlog_format;

prepare stmt1 from 'insert into t1 select concat(UUID(),?)';
set @string="emergency_17_";
+27 −17
Original line number Diff line number Diff line
@@ -450,7 +450,8 @@ const char *binlog_format_names[]= {"STATEMENT", "ROW", "MIXED", NullS};
TYPELIB binlog_format_typelib=
  { array_elements(binlog_format_names) - 1, "",
    binlog_format_names, NULL };

ulong opt_binlog_format_id= (ulong) BINLOG_FORMAT_UNSPEC;
const char *opt_binlog_format= binlog_format_names[opt_binlog_format_id];
#ifdef HAVE_INITGROUPS
static bool calling_initgroups= FALSE; /* Used in SIGSEGV handler. */
#endif
@@ -3153,16 +3154,23 @@ with --log-bin instead.");
                    "--log-slave-updates work.");
    unireg_abort(1);
  }

 if (!opt_bin_log && (global_system_variables.binlog_format != BINLOG_FORMAT_UNSPEC))
  if (!opt_bin_log)
    if (opt_binlog_format_id != BINLOG_FORMAT_UNSPEC)
    {
      sql_print_error("You need to use --log-bin to make "
		      "--binlog-format work.");
      unireg_abort(1);
    }
  if (global_system_variables.binlog_format == BINLOG_FORMAT_UNSPEC)
    else
    {
      global_system_variables.binlog_format= BINLOG_FORMAT_UNSPEC;
    }
  else
    if (opt_binlog_format_id == BINLOG_FORMAT_UNSPEC)
      global_system_variables.binlog_format= BINLOG_FORMAT_MIXED;
    else
    { 
      DBUG_ASSERT(global_system_variables.binlog_format != BINLOG_FORMAT_UNSPEC);
    }

  /* Check that we have not let the format to unspecified at this point */
@@ -4914,6 +4922,7 @@ struct my_option my_long_options[] =
   (gptr*) &my_bind_addr_str, (gptr*) &my_bind_addr_str, 0, GET_STR,
   REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
  {"binlog_format", OPT_BINLOG_FORMAT,
   "Does not have any effect without '--log-bin'. "
   "Tell the master the form of binary logging to use: either 'row' for "
   "row-based binary logging, or 'statement' for statement-based binary "
   "logging, or 'mixed'. 'mixed' is statement-based binary logging except "
@@ -4921,11 +4930,12 @@ struct my_option my_long_options[] =
   "involve user-defined functions (i.e. UDFs) or the UUID() function; for "
   "those, row-based binary logging is automatically used. "
#ifdef HAVE_NDB_BINLOG
   "If ndbcluster is enabled, the default is 'row'."
   "If ndbcluster is enabled and binlog_format is `mixed', the format switches"
   " to 'row' and back implicitly per each query accessing a NDB table."
#endif
   , 0, 0, 0, GET_STR, REQUIRED_ARG,
   BINLOG_FORMAT_MIXED
   , 0, 0, 0, 0, 0 },
   ,(gptr*) &opt_binlog_format, (gptr*) &opt_binlog_format,
   0, GET_STR, REQUIRED_ARG, BINLOG_FORMAT_MIXED, BINLOG_FORMAT_STMT,
   BINLOG_FORMAT_MIXED, 0, 0, 0},
  {"binlog-do-db", OPT_BINLOG_DO_DB,
   "Tells the master it should log updates for the specified database, and exclude all others not explicitly mentioned.",
   0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
@@ -7291,7 +7301,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
              binlog_format_names[BINLOG_FORMAT_MIXED]);
      exit(1);
    }
    global_system_variables.binlog_format= id-1;
    global_system_variables.binlog_format= opt_binlog_format_id= id - 1;
    break;
  }
  case (int)OPT_BINLOG_DO_DB: