List:Commits« Previous MessageNext Message »
From:Andrei Elkin Date:December 20 2006 5:00pm
Subject:bk commit into 5.1 tree (aelkin:1.2365) BUG#16567
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of elkin. When elkin does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2006-12-20 19:00:35+02:00, aelkin@stripped +1 -0
  Bug #16567 binlog_format option does not show when doing ./mysqd --help --verbose
  
  Implementing this feature also as a part of wl#3368.
  Supplied by my.cnf or explicitly in command line option gets be displayed. 
  When not supplied `(No default value)' is displayed, even though --log-bin might
  be supplied. The option is different object from @@global.binlog_format variable.
  The default `mixed' for the latter is dependant on presence of `--log-bin' option,
  otherwise the value of the var is set to NULL (undefined):
  
   var := opt | MIXED  when binlog-in-use
   var := NULL         otherwise (no binlog, no format)
  
  Comments on NDB and mixed format updated, also dependency the option on --log-bin 
  aka binlog-in-use is worded.
  
  todo/fixme: turning @@global.binlog_format to be read-only when it's set to NULL (no binlog).
  todo/fixme: options dependacy (acyclic) graph, particularly to solve a task of setting defaults values for the leaf nodes 
  only when parents' nodes are set. 

  sql/mysqld.cc@stripped, 2006-12-20 19:00:31+02:00, aelkin@stripped +26 -17
    opt_binlog_format to hold command line, cnf's value, with default to NULL.
    opt_binlog_format_id integer mapping of the above string.
    changes to use opt_binlog_format_id instead of @@global.binlog_format, and to assign
    the latter from the opt-ion's instance.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	aelkin
# Host:	dsl-hkibras-fe24f900-214.dhcp.inet.fi
# Root:	/home/elkin/MySQL/TEAM/BARE/mysql-5.1-new-rpl

--- 1.600/sql/mysqld.cc	2006-12-20 19:00:52 +02:00
+++ 1.601/sql/mysqld.cc	2006-12-20 19:00:52 +02:00
@@ -444,9 +444,10 @@ my_bool sp_automatic_privileges= 1;
 ulong opt_binlog_rows_event_max_size;
 const char *binlog_format_names[]= {"STATEMENT", "ROW", "MIXED", NullS};
 TYPELIB binlog_format_typelib=
-  { array_elements(binlog_format_names)-1,"",
+  { 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
@@ -3148,17 +3149,24 @@ with --log-bin instead.");
                     "--log-slave-updates work.");
     unireg_abort(1);
   }
-
- if (!opt_bin_log && (global_system_variables.binlog_format != 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)
-  {
+  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);
+    }
+    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 */
   DBUG_ASSERT((uint)global_system_variables.binlog_format <=
@@ -4905,6 +4913,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 "
@@ -4912,11 +4921,11 @@ 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, 0, 0, 0, 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},
@@ -7267,7 +7276,7 @@ get_one_option(int optid, const struct m
               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:
Thread
bk commit into 5.1 tree (aelkin:1.2365) BUG#16567Andrei Elkin20 Dec