List:Internals« Previous MessageNext Message »
From:dlenev Date:March 16 2005 2:32am
Subject:bk commit into 5.0 tree (dlenev:1.1812)
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of dlenev. When dlenev 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
  1.1812 05/03/16 04:32:47 dlenev@stripped +69 -0
  WL#874 "Extended LOAD DATA". 
  
  Now one can use user variables as target for data loaded from file
  (besides table's columns). Also LOAD DATA got new SET-clause in which
  one can specify values for table columns as expressions.
  
  For example the following is possible:
  LOAD DATA INFILE 'words.dat' INTO TABLE t1 (a, @b) SET c = @b + 1;
  
  This patch also implements new way of replicating LOAD DATA.
  Now we do it similarly to other queries.
  We store LOAD DATA query in new Execute_load_query event
  (which is last in the sequence of events representing LOAD DATA).
  When we are executing this event we simply rewrite part of query which
  holds name of file (we use name of temporary file) and then execute it
  as usual query. In the beggining of this sequence we use Begin_load_query
  event which is almost identical to Append_file event

  mysql-test/std_data/loaddata5.dat
    1.1 05/03/16 04:32:42 dlenev@stripped +3 -0

  sql/sql_yacc.yy
    1.350 05/03/16 04:32:42 dlenev@stripped +57 -22
    Added support for extended LOAD DATA syntax. Now one can use
    user variables as target for data loaded from file (besides table's 
    columns). Also LOAD DATA got new SET-clause in which one can specify
    values for table columns as expressions.
    
    For example the following is possible:
    LOAD DATA INFILE 'words.dat' INTO TABLE t1 (a, @b) SET c = @b + 1;
    
    Also now we save pointers to the beginning and to the end of part of 
    LOAD DATA statement which should be rewritten during replication.

  sql/sql_repl.h
    1.37 05/03/16 04:32:42 dlenev@stripped +1 -6
    struct st_load_file_info:
      Removed memebers which are no longer needed for LOAD DATA binnlogging.

  sql/sql_repl.cc
    1.133 05/03/16 04:32:42 dlenev@stripped +6 -7
    New way of replicating LOAD DATA. Now we do it similarly to other
    queries. We store LOAD DATA query in new Execute_load_query event
    (which is last in the sequence of events representing LOAD DATA).
    When we are executing this event we simply rewrite part of query which
    holds name of file (we use name of temporary file) and then execute it
    as usual query. In the beggining of this sequence we use Begin_load_query
    event which is almost identical to Append_file event.

  sql/sql_parse.cc
    1.419 05/03/16 04:32:42 dlenev@stripped +9 -11
    mysql_execute_command():
      Since now we have SET clause in LOAD DATA we should also check
      permissions for tables used in its expressions. Also mysql_load()
      has two more arguments to pass information about this clause.

  sql/sql_load.cc
    1.75 05/03/16 04:32:42 dlenev@stripped +190 -82
    Added support for extended LOAD DATA. 
    Now one can use user variables as target for data loaded from file 
    (besides table's columns). Also LOAD DATA got new SET-clause in which
    one can specify values for table columns as expressions.
    
    Updated mysql_load()/read_fixed_length()/read_sep_field() to support
    this functionality (now they can read data from file to both columns and
    variables and assign do calculations and assignments specified in SET
    clause).
    
    We also use new approach for LOAD DATA binlogging/replication.

  sql/sql_lex.h
    1.169 05/03/16 04:32:42 dlenev@stripped +6 -0
    Added LEX::fname_start/fname_end members. 
    They are pointers to part of LOAD DATA statement which should be
    rewritten during replication (file name + little extra).

  sql/share/errmsg.txt
    1.15 05/03/16 04:32:42 dlenev@stripped +2 -0
    Added new error message which is used to forbid loading of data from
    fixed length rows to variables. 

  mysql-test/std_data/loaddata5.dat
    1.0 05/03/16 04:32:42 dlenev@stripped +0 -0
    BitKeeper file /home/dlenev/src/mysql-5.0-eld/mysql-test/std_data/loaddata5.dat

  sql/mysql_priv.h
    1.276 05/03/16 04:32:41 dlenev@stripped +4 -2
    Now mysql_load() has two more arguments. They are needed to pass list of
    columns and corresponding expressions from new LOAD DATA's SET clause. 

  sql/log_event.h
    1.105 05/03/16 04:32:41 dlenev@stripped +121 -5
    New way of replicating LOAD DATA. Now we do it similarly to other
    queries. We store LOAD DATA query in new Execute_load_query event
    (which is last in the sequence of events representing LOAD DATA).
    When we are executing this event we simply rewrite part of query which
    holds name of file (we use name of temporary file) and then execute it
    as usual query. In the beggining of this sequence we use Begin_load_query
    event which is almost identical to Append_file event.

  sql/log_event.cc
    1.166 05/03/16 04:32:41 dlenev@stripped +336 -67
    New way of replicating LOAD DATA. Now we do it similarly to other
    queries. We store LOAD DATA query in new Execute_load_query event
    (which is last in the sequence of events representing LOAD DATA).
    When we are executing this event we simply rewrite part of query which
    holds name of file (we use name of temporary file) and then execute it
    as usual query. In the beggining of this sequence we use Begin_load_query
    event which is almost identical to Append_file event.

  sql/item_func.h
    1.101 05/03/16 04:32:41 dlenev@stripped +29 -0
    Added Item_user_var_as_out_param class that represents user variable
    which used as out parameter in LOAD DATA.

  sql/item_func.cc
    1.173 05/03/16 04:32:41 dlenev@stripped +107 -10
    Added Item_user_var_as_out_param class that represents user variable
    which used as out parameter in LOAD DATA.
    
    Moved code from Item_func_set_user_var::update_hash() function to
    separate static function to be able to reuse it in this new class. 

  mysql-test/t/user_var.test
    1.23 05/03/16 04:32:41 dlenev@stripped +2 -1
    Addition of two new types of binary log events shifted binlog positions.
    Updated test accordingly and made it more robust for future similar
    changes.

  mysql-test/t/rpl_user_variables.test
    1.11 05/03/16 04:32:41 dlenev@stripped +2 -1
    Addition of two new types of binary log events shifted binlog positions.
    Updated test accordingly and made it more robust for future similar
    changes.

  mysql-test/t/rpl_until.test
    1.14 05/03/16 04:32:41 dlenev@stripped +5 -5
    Addition of two new types of binary log events shifted binlog positions.
    Updated test accordingly and tweaked it a bit to bring it back to good
    shape.

  mysql-test/t/rpl_timezone.test
    1.4 05/03/16 04:32:41 dlenev@stripped +1 -0
    Addition of two new types of binary log events shifted binlog positions.
    Made test more robust for future similar changes.

  mysql-test/t/rpl_temporary.test
    1.14 05/03/16 04:32:41 dlenev@stripped +1 -0
    Addition of two new types of binary log events shifted binlog positions.
    Made test more robust for future similar changes.

  mysql-test/t/rpl_multi_query.test
    1.5 05/03/16 04:32:41 dlenev@stripped +1 -1
    Addition of two new types of binary log events shifted binlog positions.
    Updated test accordingly.

  mysql-test/t/rpl_log_pos.test
    1.33 05/03/16 04:32:41 dlenev@stripped +1 -1
    Addition of two new types of binary log events shifted binlog positions.
    Updated test accordingly.

  mysql-test/t/rpl_log.test
    1.25 05/03/16 04:32:41 dlenev@stripped +3 -3
    Addition of two new types of binary log events shifted binlog positions.
    Updated test accordingly (don't dare to get rid from binlog positions
    completely since it seems that this test uses them).

  mysql-test/t/rpl_loaddatalocal.test
    1.4 05/03/16 04:32:41 dlenev@stripped +24 -0
    Added nice test for case when it is important that LOAD DATA LOCAL
    ignores duplicates.

  mysql-test/t/rpl_loaddata_rule_s.test
    1.6 05/03/16 04:32:41 dlenev@stripped +1 -1
    Addition of two new types of binary log events shifted binlog positions.
    Updated test accordingly.

  mysql-test/t/rpl_loaddata_rule_m.test
    1.8 05/03/16 04:32:41 dlenev@stripped +5 -1
    Addition of two new types of binary log events shifted binlog positions.
    Updated test accordingly and made it more robust for future similar 
    changes.
    Since now LOAD DATA is replicated much in the same way as usual query
    --binlog_do/ignore_db work for it inthe same way as for usual queries.

  mysql-test/t/rpl_loaddata.test
    1.15 05/03/16 04:32:41 dlenev@stripped +4 -3
    New way of replicating LOAD DATA. Now we do it similarly to other
    queries. We store LOAD DATA query in new Execute_load_query event
    (which is last in the sequence of events representing LOAD DATA).
    When we are executing this event we simply rewrite part of query which
    holds name of file (we use name of temporary file) and then execute it
    as usual query. In the beggining of this sequence we use Begin_load_query
    event which is almost identical to Append_file event...
    
    Apropritely updated comments in test.

  mysql-test/t/rpl_flush_tables.test
    1.6 05/03/16 04:32:41 dlenev@stripped +2 -0
    Addition of two new types of binary log events shifted binlog positions.
    Made test more robust for future similar changes.

  mysql-test/t/rpl_error_ignored_table.test
    1.13 05/03/16 04:32:41 dlenev@stripped +2 -1
    Addition of two new types of binary log events shifted binlog positions.
    Updated test accordingly and made it more robust for future similar
    changes.

  mysql-test/t/rpl_deadlock.test
    1.3 05/03/16 04:32:41 dlenev@stripped +2 -2
    Addition of two new types of binary log events shifted binlog positions.
    Updated test accordingly.

  mysql-test/t/rpl_charset.test
    1.15 05/03/16 04:32:41 dlenev@stripped +1 -1
    Addition of two new types of binary log events shifted binlog positions.
    Updated test accordingly.

  mysql-test/t/mysqldump.test
    1.31 05/03/16 04:32:41 dlenev@stripped +1 -1
    Made test more robust for failures of other tests.

  mysql-test/t/mysqlbinlog2.test
    1.4 05/03/16 04:32:41 dlenev@stripped +8 -8
    Addition of two new types of binary log events shifted binlog positions.
    Updated test accordingly.

  mysql-test/t/mysqlbinlog.test
    1.15 05/03/16 04:32:41 dlenev@stripped +2 -3
    New way of replicating LOAD DATA local. Now we do it similarly to other
    queries. We store LOAD DATA query in new Execute_load_query event
    (which is last in the sequence of events representing LOAD DATA).
    When we are executing this event we simply rewrite part of query which
    holds name of file (we use name of temporary file) and then execute it
    as usual query. In the beggining of this sequence we use Begin_load_query
    event which is almost identical to Append_file event...
    
    Thus we need new binlog positions for LOAD DATA events.

  mysql-test/t/mix_innodb_myisam_binlog.test
    1.13 05/03/16 04:32:41 dlenev@stripped +12 -12
    Addition of two new types of binary log events shifted binlog positions.
    Updated test accordingly.

  mysql-test/t/loaddata.test
    1.8 05/03/16 04:32:41 dlenev@stripped +34 -0
    Added test cases for new LOAD DATA functionality.

  mysql-test/t/insert_select.test
    1.18 05/03/16 04:32:41 dlenev@stripped +2 -0
    Addition of two new types of binary log events shifted binlog positions.
    Updated test accordingly and made it more robust for future similar
    changes.

  mysql-test/t/ctype_ucs.test
    1.26 05/03/16 04:32:41 dlenev@stripped +2 -1
    Addition of two new types of binary log events shifted binlog positions.
    Updated test accordingly and made it more robust for future similar
    changes.

  mysql-test/r/user_var.result
    1.28 05/03/16 04:32:41 dlenev@stripped +6 -6
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results and made it more robust for future similar 
    changes.

  mysql-test/r/rpl_user_variables.result
    1.14 05/03/16 04:32:41 dlenev@stripped +29 -29
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results and made it more robust for future similar 
    changes.

  mysql-test/r/rpl_until.result
    1.20 05/03/16 04:32:41 dlenev@stripped +16 -16
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results accordingly and tweaked test a bit to bring it
    back to good shape.

  mysql-test/r/rpl_timezone.result
    1.8 05/03/16 04:32:41 dlenev@stripped +7 -7
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results and made it more robust for future similar 
    changes.

  mysql-test/r/rpl_temporary.result
    1.17 05/03/16 04:32:41 dlenev@stripped +13 -13
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results and made it more robust for future similar 
    changes.

  mysql-test/r/rpl_server_id2.result
    1.8 05/03/16 04:32:41 dlenev@stripped +1 -1
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results accordingly.

  mysql-test/r/rpl_server_id1.result
    1.7 05/03/16 04:32:41 dlenev@stripped +1 -1
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results accordingly.

  mysql-test/r/rpl_rotate_logs.result
    1.66 05/03/16 04:32:41 dlenev@stripped +4 -4
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results accordingly.

  mysql-test/r/rpl_reset_slave.result
    1.13 05/03/16 04:32:41 dlenev@stripped +3 -3
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results accordingly.

  mysql-test/r/rpl_replicate_do.result
    1.28 05/03/16 04:32:41 dlenev@stripped +1 -1
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results accordingly.

  mysql-test/r/rpl_relayrotate.result
    1.16 05/03/16 04:32:40 dlenev@stripped +1 -1
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results accordingly.

  mysql-test/r/rpl_multi_query.result
    1.4 05/03/16 04:32:40 dlenev@stripped +1 -1
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results accordingly.

  mysql-test/r/rpl_max_relay_size.result
    1.19 05/03/16 04:32:40 dlenev@stripped +6 -6
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results accordingly.

  mysql-test/r/rpl_log_pos.result
    1.42 05/03/16 04:32:40 dlenev@stripped +4 -4
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results accordingly.

  mysql-test/r/rpl_log.result
    1.56 05/03/16 04:32:40 dlenev@stripped +51 -51
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results accordingly (don't dare to get rid from binlog 
    positions completely since it seems that this test uses them).

  mysql-test/r/rpl_loaddatalocal.result
    1.5 05/03/16 04:32:40 dlenev@stripped +17 -0
    Added nice test for case when it is important that LOAD DATA LOCAL
    ignores duplicates.

  mysql-test/r/rpl_loaddata_rule_s.result
    1.7 05/03/16 04:32:40 dlenev@stripped +1 -1
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results accordingly.

  mysql-test/r/rpl_loaddata_rule_m.result
    1.13 05/03/16 04:32:40 dlenev@stripped +5 -3
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results and made it more robust for future similar 
    changes.
    Since now LOAD DATA is replicated much in the same way as usual query
    --binlog_do/ignore_db work for it inthe same way as for usual queries.

  mysql-test/r/rpl_loaddata.result
    1.27 05/03/16 04:32:40 dlenev@stripped +4 -4
    New way of replicating LOAD DATA. Now we do it similarly to other
    queries. We store LOAD DATA query in new Execute_load_query event
    (which is last in the sequence of events representing LOAD DATA).
    When we are executing this event we simply rewrite part of query which
    holds name of file (we use name of temporary file) and then execute it
    as usual query. In the beggining of this sequence we use Begin_load_query
    event which is almost identical to Append_file event...
    
    Updated test's results wwith new binlog positions.

  mysql-test/r/rpl_flush_tables.result
    1.11 05/03/16 04:32:40 dlenev@stripped +17 -17
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results and made it more robust for future similar 
    changes.

  mysql-test/r/rpl_flush_log_loop.result
    1.22 05/03/16 04:32:40 dlenev@stripped +1 -1
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results accordingly.

  mysql-test/r/rpl_error_ignored_table.result
    1.19 05/03/16 04:32:40 dlenev@stripped +11 -11
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results and made it more robust for future similar 
    changes.

  mysql-test/r/rpl_deadlock.result
    1.3 05/03/16 04:32:40 dlenev@stripped +5 -5
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results accordingly

  mysql-test/r/rpl_charset.result
    1.18 05/03/16 04:32:40 dlenev@stripped +1 -1
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results accordingly

  mysql-test/r/rpl_change_master.result
    1.16 05/03/16 04:32:40 dlenev@stripped +2 -2
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results.

  mysql-test/r/rpl000015.result
    1.34 05/03/16 04:32:40 dlenev@stripped +2 -2
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results accordingly.

  mysql-test/r/mysqldump.result
    1.36 05/03/16 04:32:40 dlenev@stripped +1 -1
    Made test more robust to other tests failures.

  mysql-test/r/mysqlbinlog.result
    1.16 05/03/16 04:32:40 dlenev@stripped +16 -11
    New approach for binlogging of LOAD DATA statement. Now we store it as
    usual query and rewrite part in which file is specified when needed.
    So now mysqlbinlog output for LOAD DATA much more closer to its initial
    form. Updated test'd results accordingly.

  mysql-test/r/mix_innodb_myisam_binlog.result
    1.20 05/03/16 04:32:40 dlenev@stripped +62 -62
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results (don't dare to get rid from binlog positions
    completely since it seems that this test uses them).

  mysql-test/r/loaddata.result
    1.16 05/03/16 04:32:40 dlenev@stripped +46 -0
    Added tests for new LOAD DATA features.

  mysql-test/r/insert_select.result
    1.26 05/03/16 04:32:40 dlenev@stripped +3 -3
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results and made it more robust for future similar 
    changes.

  mysql-test/r/ctype_ucs.result
    1.31 05/03/16 04:32:40 dlenev@stripped +3 -3
    Addition of two new types of binary log events shifted binlog positions.
    Updated test's results and made it more robust for future similar 
    changes.

  client/mysqlbinlog.cc
    1.109 05/03/16 04:32:40 dlenev@stripped +196 -48
    Added support of two new binary log events Begin_load_query_log_event and
    Execute_load_query_log_Event which are used to replicate LOAD DATA INFILE.

# 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:	dlenev
# Host:	brandersnatch.localdomain
# Root:	/home/dlenev/src/mysql-5.0-eld

--- 1.172/sql/item_func.cc	Thu Mar 10 00:52:48 2005
+++ 1.173/sql/item_func.cc	Wed Mar 16 04:32:41 2005
@@ -3294,12 +3294,28 @@
 }
 
 
-bool Item_func_set_user_var::update_hash(void *ptr, uint length,
-					 Item_result type,
-					 CHARSET_INFO *cs,
-					 Derivation dv)
+/*
+  Set value to user variable.
+
+  SYNOPSYS
+    update_hash()
+    entry    - pointer to structure representing variable
+    set_null - should we set NULL value ?
+    ptr      - pointer to buffer with new value
+    length   - length of new value
+    type     - type of new value
+    cs       - charset info for new value
+    dv       - derivation for new value
+
+  RETURN VALUE
+    False - success, True - failure
+*/
+
+static bool
+update_hash(user_var_entry *entry, bool set_null, void *ptr, uint length,
+            Item_result type, CHARSET_INFO *cs, Derivation dv)
 {
-  if ((null_value=args[0]->null_value))
+  if (set_null)
   {
     char *pos= (char*) entry+ ALIGN_SIZE(sizeof(user_var_entry));
     if (entry->value && entry->value != pos)
@@ -3332,7 +3348,7 @@
 	  entry->value=0;
 	if (!(entry->value=(char*) my_realloc(entry->value, length,
 					      MYF(MY_ALLOW_ZERO_PTR))))
-	  goto err;
+	  return 1;
       }
     }
     if (type == STRING_RESULT)
@@ -3348,11 +3364,21 @@
     entry->collation.set(cs, dv);
   }
   return 0;
+}
 
- err:
-  current_thd->fatal_error();			// Probably end of memory
-  null_value= 1;
-  return 1;
+
+bool
+Item_func_set_user_var::update_hash(void *ptr, uint length, Item_result type,
+                                    CHARSET_INFO *cs, Derivation dv)
+{
+  if (::update_hash(entry, (null_value= args[0]->null_value),
+                    ptr, length, type, cs, dv))
+  {
+    current_thd->fatal_error();     // Probably end of memory
+    null_value= 1;
+    return 1;
+  }
+  return 0;
 }
 
 
@@ -3875,6 +3901,77 @@
   Item_func_get_user_var *other=(Item_func_get_user_var*) item;
   return (name.length == other->name.length &&
 	  !memcmp(name.str, other->name.str, name.length));
+}
+
+
+bool Item_user_var_as_out_param::fix_fields(THD *thd, TABLE_LIST *tables,
+                                            Item **ref)
+{
+  DBUG_ASSERT(fixed == 0);
+  if (Item::fix_fields(thd, tables, ref) ||
+      !(entry= get_variable(&thd->user_vars, name, 1)))
+    return TRUE;
+  entry->type= STRING_RESULT;
+  /*
+    Let us set the same collation which is used for loading
+    of fields in LOAD DATA INFILE.
+    (Since Item_user_var_as_out_param is used only there).
+  */
+  entry->collation.set(thd->variables.collation_database);
+  entry->update_query_id= thd->query_id;
+  return FALSE;
+}
+
+
+void Item_user_var_as_out_param::set_null_value(CHARSET_INFO* cs)
+{
+  if (::update_hash(entry, TRUE, 0, 0, STRING_RESULT, cs,
+                    DERIVATION_IMPLICIT))
+    current_thd->fatal_error();			// Probably end of memory
+}
+
+
+void Item_user_var_as_out_param::set_value(const char *str, uint length,
+                                           CHARSET_INFO* cs)
+{
+  if (::update_hash(entry, FALSE, (void*)str, length, STRING_RESULT, cs,
+                    DERIVATION_IMPLICIT))
+    current_thd->fatal_error();			// Probably end of memory
+}
+
+
+double Item_user_var_as_out_param::val_real()
+{
+  DBUG_ASSERT(0);
+  return 0.0;
+}
+
+
+longlong Item_user_var_as_out_param::val_int()
+{
+  DBUG_ASSERT(0);
+  return 0;
+}
+
+
+String* Item_user_var_as_out_param::val_str(String *str)
+{
+  DBUG_ASSERT(0);
+  return 0;
+}
+
+
+my_decimal* Item_user_var_as_out_param::val_decimal(my_decimal *decimal_buffer)
+{
+  DBUG_ASSERT(0);
+  return 0;
+}
+
+
+void Item_user_var_as_out_param::print(String *str)
+{
+  str->append('@');
+  str->append(name.str,name.length);
 }
 
 

--- 1.100/sql/item_func.h	Thu Mar 10 00:52:48 2005
+++ 1.101/sql/item_func.h	Wed Mar 16 04:32:41 2005
@@ -1131,6 +1131,35 @@
 };
 
 
+/*
+  This item represents user variable used as out parameter (e.g in LOAD DATA),
+  and it is supposed to be used only for this purprose. So it is simplified
+  a lot. Actually you should never obtain its value.
+
+  The only two reasons for this thing being an Item is possibility to store it
+  in List<Item> and desire to place this code somewhere near other functions
+  working with user variables.
+*/
+class Item_user_var_as_out_param :public Item
+{
+  LEX_STRING name;
+  user_var_entry *entry;
+public:
+  Item_user_var_as_out_param(LEX_STRING a) : name(a) {}
+  /* We should return something different from FIELD_ITEM here */
+  enum Type type() const { return STRING_ITEM;}
+  double val_real();
+  longlong val_int();
+  String *val_str(String *str);
+  my_decimal *val_decimal(my_decimal *decimal_buffer);
+  /* fix_fields() binds variable name with its entry structure */
+  bool fix_fields(THD *thd, struct st_table_list *tables, Item **ref);
+  void print(String *str);
+  void set_null_value(CHARSET_INFO* cs);
+  void set_value(const char *str, uint length, CHARSET_INFO* cs);
+};
+
+
 class Item_func_inet_aton : public Item_int_func
 {
 public:

--- 1.165/sql/log_event.cc	Wed Mar  2 18:39:58 2005
+++ 1.166/sql/log_event.cc	Wed Mar 16 04:32:41 2005
@@ -272,6 +272,8 @@
   case XID_EVENT: return "Xid";
   case USER_VAR_EVENT: return "User var";
   case FORMAT_DESCRIPTION_EVENT: return "Format_desc";
+  case BEGIN_LOAD_QUERY_EVENT: return "Begin_load_query";
+  case EXECUTE_LOAD_QUERY_EVENT: return "Execute_load_query";
   default: return "Unknown";				/* impossible */
   }
 }
@@ -783,10 +785,10 @@
 
   switch(buf[EVENT_TYPE_OFFSET]) {
   case QUERY_EVENT:
-    ev  = new Query_log_event(buf, event_len, description_event);
+    ev  = new Query_log_event(buf, event_len, description_event, QUERY_EVENT);
     break;
   case LOAD_EVENT:
-    ev = new Create_file_log_event(buf, event_len, description_event);
+    ev = new Load_log_event(buf, event_len, description_event);
     break;
   case NEW_LOAD_EVENT:
     ev = new Load_log_event(buf, event_len, description_event);
@@ -832,6 +834,12 @@
   case FORMAT_DESCRIPTION_EVENT:
     ev = new Format_description_log_event(buf, event_len, description_event); 
     break;
+  case BEGIN_LOAD_QUERY_EVENT:
+    ev = new Begin_load_query_log_event(buf, event_len, description_event);
+    break;
+  case EXECUTE_LOAD_QUERY_EVENT:
+    ev = new Execute_load_query_log_event(buf, event_len, description_event);
+    break;
   default:
     DBUG_PRINT("error",("Unknown evernt code: %d",(int) buf[EVENT_TYPE_OFFSET]));
     ev= NULL;
@@ -1085,10 +1093,13 @@
     Calculate length of whole event
     The "1" below is the \0 in the db's length
   */
-  event_length= (uint) (start-buf) + db_len + 1 + q_len;
+  event_length= (uint) (start-buf) + get_post_header_size_for_derived() + db_len + 1 +
q_len;
 
   return (write_header(file, event_length) ||
-          my_b_safe_write(file, (byte*) buf, (uint) (start-buf)) ||
+          my_b_safe_write(file, (byte*) buf, QUERY_HEADER_LEN) ||
+          write_post_header_for_derived(file) ||
+          my_b_safe_write(file, (byte*) start_of_status,
+                          (uint) (start-start_of_status)) ||
           my_b_safe_write(file, (db) ? (byte*) db : (byte*)"", db_len + 1) ||
           my_b_safe_write(file, (byte*) query, q_len)) ? 1 : 0;
 }
@@ -1150,7 +1161,8 @@
 */
 
 Query_log_event::Query_log_event(const char* buf, uint event_len,
-                                 const Format_description_log_event *description_event)
+                                 const Format_description_log_event *description_event,
+                                 Log_event_type event_type)
   :Log_event(buf, description_event), data_buf(0), query(NullS), catalog(NullS), 
    db(NullS), catalog_len(0), status_vars_len(0),
    flags2_inited(0), sql_mode_inited(0), charset_inited(0),
@@ -1163,7 +1175,7 @@
   DBUG_ENTER("Query_log_event::Query_log_event(char*,...)");
 
   common_header_len= description_event->common_header_len;
-  post_header_len= description_event->post_header_len[QUERY_EVENT-1]; 
+  post_header_len= description_event->post_header_len[event_type-1];
   DBUG_PRINT("info",("event_len=%ld, common_header_len=%d, post_header_len=%d",
                      event_len, common_header_len, post_header_len));
   
@@ -1196,13 +1208,12 @@
                         (uint) status_vars_len));
     tmp-= 2;
   }
-  /* we have parsed everything we know in the post header */
-#ifndef DBUG_OFF
-  if (tmp) /* this is probably a master newer than us */
-    DBUG_PRINT("info", ("Query_log_event has longer post header than we know\
-  (%d more bytes)", tmp));
-#endif
-  
+  /*
+    We have parsed everything we know in the post header for QUERY_EVENT,
+    the rest of post header is either comes from older version MySQL or
+    dedicated to derived events (e.g. Execute_load_query...)
+  */
+
   /* variable-part: the status vars; only in MySQL 5.0  */
   
   start= (char*) (buf+post_header_len);
@@ -1281,8 +1292,8 @@
 */
 
 #ifdef MYSQL_CLIENT
-void Query_log_event::print(FILE* file, bool short_form,
-                            LAST_EVENT_INFO* last_event_info)
+void Query_log_event::print_query_header(FILE* file, bool short_form,
+                                         LAST_EVENT_INFO* last_event_info)
 {
   // TODO: print the catalog ??
   char buff[40],*end;				// Enough for SET TIMESTAMP
@@ -1292,8 +1303,8 @@
   if (!short_form)
   {
     print_header(file);
-    fprintf(file, "\tQuery\tthread_id=%lu\texec_time=%lu\terror_code=%d\n",
-	    (ulong) thread_id, (ulong) exec_time, error_code);
+    fprintf(file, "\t%s\tthread_id=%lu\texec_time=%lu\terror_code=%d\n",
+	    get_type_str(), (ulong) thread_id, (ulong) exec_time, error_code);
   }
 
   if (!(flags & LOG_EVENT_SUPPRESS_USE_F) && db)
@@ -1399,7 +1410,13 @@
       memcpy(last_event_info->charset, charset, 6);
     }
   }
+}
+
 
+void Query_log_event::print(FILE* file, bool short_form,
+                            LAST_EVENT_INFO* last_event_info)
+{
+  print_query_header(file, short_form, last_event_info);
   my_fwrite(file, (byte*) query, q_len, MYF(MY_NABP | MY_WME));
   fputs(";\n", file);
 }
@@ -1413,6 +1430,12 @@
 #if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT)
 int Query_log_event::exec_event(struct st_relay_log_info* rli)
 {
+  return exec_event(rli, query, q_len);
+}
+
+
+int Query_log_event::exec_event(struct st_relay_log_info* rli, const char *query_arg,
uint32 q_len_arg)
+{
   int expected_error,actual_error= 0;
   /*
     Colleagues: please never free(thd->catalog) in MySQL. This would lead to
@@ -1444,8 +1467,8 @@
   if (db_ok(thd->db, replicate_do_db, replicate_ignore_db))
   {
     thd->set_time((time_t)when);
-    thd->query_length= q_len;
-    thd->query = (char*)query;
+    thd->query_length= q_len_arg;
+    thd->query= (char*)query_arg;
     VOID(pthread_mutex_lock(&LOCK_thread_count));
     thd->query_id = next_query_id();
     VOID(pthread_mutex_unlock(&LOCK_thread_count));
@@ -1506,7 +1529,7 @@
       }
 
       /* Execute the query (note that we bypass dispatch_command()) */
-      mysql_parse(thd, thd->query, q_len);
+      mysql_parse(thd, thd->query, thd->query_length);
 
     }
     else
@@ -1518,7 +1541,7 @@
         we exit gracefully; otherwise we warn about the bad error and tell DBA
         to check/fix it.
       */
-      if (mysql_test_parse_for_slave(thd, thd->query, q_len))
+      if (mysql_test_parse_for_slave(thd, thd->query, thd->query_length))
         clear_all_errors(thd, rli);        /* Can ignore query */
       else
       {
@@ -1560,7 +1583,7 @@
 			expected_error,
 			actual_error ? thd->net.last_error: "no error",
 			actual_error,
-			print_slave_db_safe(db), query);
+			print_slave_db_safe(db), query_arg);
       thd->query_error= 1;
     }
     /*
@@ -1581,7 +1604,7 @@
 			"Error '%s' on query. Default database: '%s'. Query: '%s'",
 			(actual_error ? thd->net.last_error :
 			 "unexpected success or fatal error"),
-			print_slave_db_safe(thd->db), query);
+			print_slave_db_safe(thd->db), query_arg);
       thd->query_error= 1;
     }
 
@@ -1828,11 +1851,6 @@
     server starts or when FLUSH LOGS), or to create artificial events to parse
     binlogs from MySQL 3.23 or 4.x.
     When in a client, only the 2nd use is possible.
-
-  TODO
-    Update this code with the new event for LOAD DATA, once they are pushed (in
-    4.1 or 5.0). If it's in 5.0, only the "case 4" block should be updated.
-
 */
 
 Format_description_log_event::
@@ -1866,6 +1884,8 @@
       post_header_len[DELETE_FILE_EVENT-1]= DELETE_FILE_HEADER_LEN;
       post_header_len[NEW_LOAD_EVENT-1]= post_header_len[LOAD_EVENT-1];
       post_header_len[FORMAT_DESCRIPTION_EVENT-1]= FORMAT_DESCRIPTION_HEADER_LEN;
+      post_header_len[BEGIN_LOAD_QUERY_EVENT-1]= post_header_len[APPEND_BLOCK_EVENT-1];
+      post_header_len[EXECUTE_LOAD_QUERY_EVENT-1]= EXECUTE_LOAD_QUERY_HEADER_LEN;
     }
     break;
 
@@ -2071,12 +2091,9 @@
 */
 
 #if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT)
-void Load_log_event::pack_info(Protocol *protocol)
+uint Load_log_event::get_query_buffer_length()
 {
-  char *buf, *pos;
-  uint buf_len;
-
-  buf_len=
+  return
     5 + db_len + 3 +                        // "use DB; "
     18 + fname_len + 2 +                    // "LOAD DATA INFILE 'file''"
     7 +					    // LOCAL
@@ -2089,11 +2106,15 @@
     19 + sql_ex.line_start_len*4 + 2 +      // " LINES STARTING BY 'str'"
     15 + 22 +                               // " IGNORE xxx  LINES"
     3 + (num_fields-1)*2 + field_block_len; // " (field1, field2, ...)"
+}
 
-  if (!(buf= my_malloc(buf_len, MYF(MY_WME))))
-    return;
-  pos= buf;
-  if (db && db_len)
+
+void Load_log_event::print_query(bool need_db, char *buf,
+                                 char **end, char **fn_start, char **fn_end)
+{
+  char *pos= buf;
+
+  if (need_db && db && db_len)
   {
     pos= strmov(pos, "use `");
     memcpy(pos, db, db_len);
@@ -2101,6 +2122,10 @@
   }
 
   pos= strmov(pos, "LOAD DATA ");
+
+  if (fn_start)
+    *fn_start= pos;
+
   if (check_fname_outside_temp_buf())
     pos= strmov(pos, "LOCAL ");
   pos= strmov(pos, "INFILE '");
@@ -2112,7 +2137,12 @@
   else if (sql_ex.opt_flags & IGNORE_FLAG)
     pos= strmov(pos, " IGNORE ");
 
-  pos= strmov(pos ,"INTO TABLE `");
+  pos= strmov(pos ,"INTO");
+
+  if (fn_end)
+    *fn_end= pos;
+
+  pos= strmov(pos ," TABLE `");
   memcpy(pos, table_name, table_name_len);
   pos+= table_name_len;
 
@@ -2161,7 +2191,18 @@
     *pos++= ')';
   }
 
-  protocol->store(buf, pos-buf, &my_charset_bin);
+  *end= pos;
+}
+
+
+void Load_log_event::pack_info(Protocol *protocol)
+{
+  char *buf, *end;
+
+  if (!(buf= my_malloc(get_query_buffer_length(), MYF(MY_WME))))
+    return;
+  print_query(TRUE, buf, &end, 0, 0);
+  protocol->store(buf, end-buf, &my_charset_bin);
   my_free(buf, MYF(0));
 }
 #endif /* defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT) */
@@ -2368,11 +2409,6 @@
   fname_len = strlen(fname);
   // null termination is accomplished by the caller doing buf[event_len]=0
 
-  /*
-    In 5.0 this event will have the same format, as we are planning to log LOAD
-    DATA INFILE in a completely different way (as a plain-text query) since 4.1
-    or 5.0 (Dmitri's WL#874)
-  */
   DBUG_RETURN(0);
 }
 
@@ -2532,7 +2568,6 @@
 int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli, 
 			       bool use_rli_only_for_errors)
 {
-  char *load_data_query= 0;
   thd->db_length= db_len;
   thd->db= (char*) rewrite_db(db, &thd->db_length);
   DBUG_ASSERT(thd->query == 0);
@@ -2594,21 +2629,30 @@
     else
     {
       char llbuff[22];
+      char *end;
       enum enum_duplicates handle_dup;
       bool ignore= 0;
+      char *load_data_query;
+
       /*
-        Make a simplified LOAD DATA INFILE query, for the information of the
-        user in SHOW PROCESSLIST. Note that db is known in the 'db' column.
+        Forge LOAD DATA INFILE query which will be used in SHOW PROCESS LIST
+        and written to slave's binlog if binlogging is on.
       */
-      if ((load_data_query= (char *) my_alloca(18 + strlen(fname) + 14 +
-                                               strlen(tables.table_name) + 8)))
+      if (!(load_data_query= (char *)thd->alloc(get_query_buffer_length() + 1)))
       {
-        thd->query_length= (uint)(strxmov(load_data_query,
-                                          "LOAD DATA INFILE '", fname,
-                                          "' INTO TABLE `", tables.table_name,
-                                          "` <...>", NullS) - load_data_query);
-        thd->query= load_data_query;
+        /*
+          This will set thd->fatal_error in case of OOM. So we surely will notice
+          that something is wrong.
+        */
+        goto error;
       }
+
+      print_query(FALSE, load_data_query, &end, (char
**)&thd->lex->fname_start,
+                  (char **)&thd->lex->fname_end);
+      *end= 0;
+      thd->query_length= end - load_data_query;
+      thd->query= load_data_query;
+
       if (sql_ex.opt_flags & REPLACE_FLAG)
 	handle_dup= DUP_REPLACE;
       else if (sql_ex.opt_flags & IGNORE_FLAG)
@@ -2654,6 +2698,7 @@
       List<Item> field_list;
       set_fields(thd->db,field_list);
       thd->variables.pseudo_thread_id= thread_id;
+      List<Item> set_fields;
       if (net)
       {
 	// mysql_load will use thd->net to read the file
@@ -2663,9 +2708,13 @@
 	*/
 	thd->net.pkt_nr = net->pkt_nr;
       }
-      if (mysql_load(thd, &ex, &tables, field_list, handle_dup, ignore,
-                     net != 0, TL_WRITE))
-	thd->query_error = 1;
+      /*
+        It is safe to use set_fields twice because we are not going to
+        update it inside mysql_load().
+      */
+      if (mysql_load(thd, &ex, &tables, field_list, set_fields, set_fields,
+                     handle_dup, ignore, net != 0, TL_WRITE))
+        thd->query_error= 1;
       if (thd->cuted_fields)
       {
 	/* log_pos is the position of the LOAD event in the master log */
@@ -2691,7 +2740,8 @@
     if (net)
       skip_load_data_infile(net);
   }
-	    
+
+error:
   thd->net.vio = 0; 
   char *save_db= thd->db;
   VOID(pthread_mutex_lock(&LOCK_thread_count));
@@ -2700,8 +2750,6 @@
   thd->query_length= thd->db_length= 0;
   VOID(pthread_mutex_unlock(&LOCK_thread_count));
   close_thread_tables(thd);
-  if (load_data_query)
-    my_afree(load_data_query);
   if (thd->query_error)
   {
     /* this err/sql_errno code is copy-paste from net_send_error() */
@@ -4016,8 +4064,8 @@
     return;
   print_header(file);
   fputc('\n', file);
-  fprintf(file, "#Append_block: file_id: %d  block_len: %d\n",
-	  file_id, block_len);
+  fprintf(file, "#%s: file_id: %d  block_len: %d\n",
+	  get_type_str(), file_id, block_len);
 }
 #endif /* MYSQL_CLIENT */
 
@@ -4036,14 +4084,21 @@
 			     block_len));
   protocol->store(buf, length, &my_charset_bin);
 }
-#endif /* defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT) */
 
 
 /*
+  Append_block_log_event::get_open_mode()
+*/
+
+int Append_block_log_event::get_open_mode() const
+{
+  return O_WRONLY | O_APPEND | O_BINARY;
+}
+
+/*
   Append_block_log_event::exec_event()
 */
 
-#if defined( HAVE_REPLICATION) && !defined(MYSQL_CLIENT)
 int Append_block_log_event::exec_event(struct st_relay_log_info* rli)
 {
   char proc_info[17+FN_REFLEN+10], *fname= proc_info+17;
@@ -4055,14 +4110,18 @@
   memcpy(p, ".data", 6);
   strnmov(proc_info, "Making temp file ", 17); // no end 0
   thd->proc_info= proc_info;
-  if ((fd = my_open(fname, O_WRONLY|O_APPEND|O_BINARY, MYF(MY_WME))) < 0)
+  if ((fd = my_open(fname, get_open_mode(), MYF(MY_WME))) < 0)
   {
-    slave_print_error(rli,my_errno, "Error in Append_block event: could not open file
'%s'", fname);
+    slave_print_error(rli, my_errno,
+                      "Error in %s event: could not open file '%s'",
+                      get_type_str(), fname);
     goto err;
   }
   if (my_write(fd, (byte*) block, block_len, MYF(MY_WME+MY_NABP)))
   {
-    slave_print_error(rli,my_errno, "Error in Append_block event: write to '%s' failed",
fname);
+    slave_print_error(rli, my_errno,
+                      "Error in %s event: write to '%s' failed",
+                      get_type_str(), fname);
     goto err;
   }
   error=0;
@@ -4332,6 +4391,216 @@
 }
 
 #endif /* defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT) */
+
+
+/**************************************************************************
+	Begin_load_query_log_event methods
+**************************************************************************/
+
+#ifndef MYSQL_CLIENT
+Begin_load_query_log_event::
+Begin_load_query_log_event(THD* thd_arg, const char* db_arg, char* block_arg,
+                           uint block_len_arg, bool using_trans)
+  :Append_block_log_event(thd_arg, db_arg, block_arg, block_len_arg,
+                          using_trans)
+{
+   file_id= thd_arg->file_id= mysql_bin_log.next_file_id();
+}
+#endif
+
+
+Begin_load_query_log_event::
+Begin_load_query_log_event(const char* buf, uint len,
+                           const Format_description_log_event* desc_event)
+  :Append_block_log_event(buf, len, desc_event)
+{
+}
+
+
+#if defined( HAVE_REPLICATION) && !defined(MYSQL_CLIENT)
+int Begin_load_query_log_event::get_open_mode() const
+{
+  return O_CREAT | O_WRONLY | O_BINARY | O_TRUNC;
+}
+#endif /* defined( HAVE_REPLICATION) && !defined(MYSQL_CLIENT) */
+
+
+/**************************************************************************
+	Execute_load_query_log_event methods
+**************************************************************************/
+
+
+#ifndef MYSQL_CLIENT
+Execute_load_query_log_event::
+Execute_load_query_log_event(THD* thd_arg, const char* query_arg,
+                     ulong query_length_arg, uint fn_pos_start_arg,
+                     uint fn_pos_end_arg,
+                     enum_load_dup_handling dup_handling_arg,
+                     bool using_trans, bool suppress_use):
+  Query_log_event(thd_arg, query_arg, query_length_arg, using_trans,
+                  suppress_use),
+  file_id(thd_arg->file_id), fn_pos_start(fn_pos_start_arg),
+  fn_pos_end(fn_pos_end_arg), dup_handling(dup_handling_arg)
+{
+}
+#endif /* !MYSQL_CLIENT */
+
+
+Execute_load_query_log_event::
+Execute_load_query_log_event(const char* buf, uint event_len,
+                             const Format_description_log_event* desc_event):
+  Query_log_event(buf, event_len, desc_event, EXECUTE_LOAD_QUERY_EVENT),
+  file_id(0), fn_pos_start(0), fn_pos_end(0)
+{
+  if (!Query_log_event::is_valid())
+    return;
+
+  buf+= desc_event->common_header_len;
+
+  fn_pos_start= uint4korr(buf + ELQ_FN_POS_START_OFFSET);
+  fn_pos_end= uint4korr(buf + ELQ_FN_POS_END_OFFSET);
+  dup_handling= (enum_load_dup_handling)(*(buf + ELQ_DUP_HANDLING_OFFSET));
+
+  if (fn_pos_start > q_len || fn_pos_end > q_len ||
+      dup_handling > LOAD_DUP_REPLACE)
+    return;
+
+  file_id= uint4korr(buf + ELQ_FILE_ID_OFFSET);
+}
+
+
+ulong Execute_load_query_log_event::get_post_header_size_for_derived()
+{
+  return EXECUTE_LOAD_QUERY_EXTRA_HEADER_LEN;
+}
+
+
+bool
+Execute_load_query_log_event::write_post_header_for_derived(IO_CACHE* file)
+{
+  char buf[EXECUTE_LOAD_QUERY_EXTRA_HEADER_LEN];
+  int4store(buf, file_id);
+  int4store(buf + 4, fn_pos_start);
+  int4store(buf + 4 + 4, fn_pos_end);
+  *(buf + 4 + 4 + 4)= (char)dup_handling;
+  return my_b_safe_write(file, (byte*) buf, EXECUTE_LOAD_QUERY_EXTRA_HEADER_LEN);
+}
+
+
+#ifdef MYSQL_CLIENT
+void Execute_load_query_log_event::print(FILE* file, bool short_form,
+                                         LAST_EVENT_INFO* last_event_info)
+{
+  print(file, short_form, last_event_info, 0);
+}
+
+
+void Execute_load_query_log_event::print(FILE* file, bool short_form,
+                                         LAST_EVENT_INFO* last_event_info,
+                                         const char *local_fname)
+{
+  print_query_header(file, short_form, last_event_info);
+
+  if (local_fname)
+  {
+    my_fwrite(file, (byte*) query, fn_pos_start, MYF(MY_NABP | MY_WME));
+    fprintf(file, " LOCAL INFILE \'");
+    fprintf(file, local_fname);
+    fprintf(file, "\'");
+    if (dup_handling == LOAD_DUP_REPLACE)
+      fprintf(file, " REPLACE");
+    fprintf(file, " INTO");
+    my_fwrite(file, (byte*) query + fn_pos_end, q_len-fn_pos_end,
+        MYF(MY_NABP | MY_WME));
+    fprintf(file, ";\n");
+  }
+  else
+  {
+    my_fwrite(file, (byte*) query, q_len, MYF(MY_NABP | MY_WME));
+    fprintf(file, ";\n");
+  }
+
+  if (!short_form)
+    fprintf(file, "# file_id: %d \n", file_id);
+}
+#endif
+
+
+#if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT)
+void Execute_load_query_log_event::pack_info(Protocol *protocol)
+{
+  char *buf, *pos;
+  if (!(buf= my_malloc(9 + db_len + q_len + 10 + 21, MYF(MY_WME))))
+    return;
+  pos= buf;
+  if (db && db_len)
+  {
+    pos= strmov(buf, "use `");
+    memcpy(pos, db, db_len);
+    pos= strmov(pos+db_len, "`; ");
+  }
+  if (query && q_len)
+  {
+    memcpy(pos, query, q_len);
+    pos+= q_len;
+  }
+  pos= strmov(pos, " ;file_id=");
+  pos= int10_to_str((long) file_id, pos, 10);
+  protocol->store(buf, pos-buf, &my_charset_bin);
+  my_free(buf, MYF(MY_ALLOW_ZERO_PTR));
+}
+
+
+int
+Execute_load_query_log_event::exec_event(struct st_relay_log_info* rli)
+{
+  char *p;
+  char *buf;
+  char *fname;
+  char *fname_end;
+  int error;
+
+  /* Replace filename and LOCAL keyword in query before executing it */
+  if (!(buf = my_malloc(q_len + 1 - (fn_pos_end - fn_pos_start) +
+                        (FN_REFLEN + 10) + 10 + 8 + 5, MYF(MY_WME))))
+  {
+    slave_print_error(rli, my_errno, "Not enough memory");
+    return 1;
+  }
+
+  p= buf;
+  memcpy(p, query, fn_pos_start);
+  p+= fn_pos_start;
+  fname= (p= strmake(p, " INFILE \'", 9));
+  p= slave_load_file_stem(p, file_id, server_id);
+  fname_end= (p= strmake(p, ".data", 5));
+  *(p++)='\'';
+  switch (dup_handling)
+  {
+  case LOAD_DUP_IGNORE:
+    p= strmake(p, " IGNORE", 7);
+    break;
+  case LOAD_DUP_REPLACE:
+    p= strmake(p, " REPLACE", 8);
+    break;
+  default:
+    /* Ordinary load data */
+    break;
+  }
+  p= strmake(p, " INTO", 5);
+  p= strmake(p, query+fn_pos_end, q_len-fn_pos_end);
+
+  error= Query_log_event::exec_event(rli, buf, p-buf);
+
+  /* Forging file name for deletion in same buffer */
+  *fname_end= 0;
+
+  (void) my_delete(fname, MYF(MY_WME));
+
+  my_free(buf, MYF(MY_ALLOW_ZERO_PTR));
+  return error;
+}
+#endif
 
 
 /**************************************************************************

--- 1.104/sql/log_event.h	Wed Feb 23 20:26:33 2005
+++ 1.105/sql/log_event.h	Wed Mar 16 04:32:41 2005
@@ -163,10 +163,12 @@
 
   See the #defines below for the format specifics.
 
-  The events which really update data are Query_log_event and
-  Load_log_event/Create_file_log_event/Execute_load_log_event (these 3 act
-  together to replicate LOAD DATA INFILE, with the help of
-  Append_block_log_event which prepares temporary files to load into the table).
+  The events which really update data are Query_log_event,
+  Execute_load_query_log_event and old Load_log_event and
+  Execute_load_log_event events (Execute_load_query is used together with
+  Begin_load_query and Append_block events to replicate LOAD DATA INFILE.
+  Create_file/Append_block/Execute_load (which includes Load_log_event)
+  were used to replicate LOAD DATA before the 5.0.3).
 
  ****************************************************************************/
 
@@ -194,6 +196,8 @@
 #define EXEC_LOAD_HEADER_LEN   4
 #define DELETE_FILE_HEADER_LEN 4
 #define FORMAT_DESCRIPTION_HEADER_LEN (START_V3_HEADER_LEN+1+LOG_EVENT_TYPES)
+#define EXECUTE_LOAD_QUERY_EXTRA_HEADER_LEN (4 + 4 + 4 + 1)
+#define EXECUTE_LOAD_QUERY_HEADER_LEN  (QUERY_HEADER_LEN +
EXECUTE_LOAD_QUERY_EXTRA_HEADER_LEN)
 
 /*
    Event header offsets;
@@ -284,6 +288,12 @@
 /* DF = "Delete File" */
 #define DF_FILE_ID_OFFSET  0
 
+/* ELQ = "Execute Load Query" */
+#define ELQ_FILE_ID_OFFSET QUERY_HEADER_LEN
+#define ELQ_FN_POS_START_OFFSET ELQ_FILE_ID_OFFSET + 4
+#define ELQ_FN_POS_END_OFFSET ELQ_FILE_ID_OFFSET + 8
+#define ELQ_DUP_HANDLING_OFFSET ELQ_FILE_ID_OFFSET + 12
+
 /* 4 bytes which all binlogs should begin with */
 #define BINLOG_MAGIC        "\xfe\x62\x69\x6e"
 
@@ -387,6 +397,8 @@
   RAND_EVENT, USER_VAR_EVENT,
   FORMAT_DESCRIPTION_EVENT,
   XID_EVENT,
+  BEGIN_LOAD_QUERY_EVENT,
+  EXECUTE_LOAD_QUERY_EVENT,
 
   /*
     add new events here - right above this comment!
@@ -711,13 +723,17 @@
 #ifdef HAVE_REPLICATION
   void pack_info(Protocol* protocol);
   int exec_event(struct st_relay_log_info* rli);
+  int exec_event(struct st_relay_log_info* rli, const char *query_arg,
+                 uint32 q_len_arg);
 #endif /* HAVE_REPLICATION */
 #else
+  void print_query_header(FILE* file, bool short_form = 0, LAST_EVENT_INFO*
last_event_info= 0);
   void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0);
 #endif
 
   Query_log_event(const char* buf, uint event_len,
-                  const Format_description_log_event *description_event);
+                  const Format_description_log_event *description_event,
+                  Log_event_type event_type);
   ~Query_log_event()
   {
     if (data_buf)
@@ -728,6 +744,14 @@
   Log_event_type get_type_code() { return QUERY_EVENT; }
   bool write(IO_CACHE* file);
   bool is_valid() const { return query != 0; }
+
+  /*
+    Returns number of bytes additionaly written to post header by derived
+    events (so far it is only Execute_load_query event).
+  */
+  virtual ulong get_post_header_size_for_derived() { return 0; }
+  /* Writes derived event-specific part of post header. */
+  virtual bool write_post_header_for_derived(IO_CACHE* file) { return FALSE; }
 };
 
 #ifdef HAVE_REPLICATION
@@ -779,6 +803,10 @@
  ****************************************************************************/
 class Load_log_event: public Log_event
 {
+private:
+  uint get_query_buffer_length();
+  void print_query(bool need_db, char *buf, char **end,
+                   char **fn_start, char **fn_end);
 protected:
   int copy_log_event(const char *buf, ulong event_len,
                      int body_offset, const Format_description_log_event*
description_event);
@@ -1312,6 +1340,7 @@
 #ifdef HAVE_REPLICATION
   int exec_event(struct st_relay_log_info* rli);
   void pack_info(Protocol* protocol);
+  virtual int get_open_mode() const;
 #endif /* HAVE_REPLICATION */
 #else
   void print(FILE* file, bool short_form = 0, LAST_EVENT_INFO* last_event_info= 0);
@@ -1393,6 +1422,93 @@
   bool write(IO_CACHE* file);
   const char* get_db() { return db; }
 };
+
+
+/***************************************************************************
+
+  Begin load query Log Event class
+
+  Event for the first block of file to be loaded, its only difference from
+  Append_block event is that this event creates or truncates existing file
+  before writing data.
+
+****************************************************************************/
+class Begin_load_query_log_event: public Append_block_log_event
+{
+public:
+#ifndef MYSQL_CLIENT
+  Begin_load_query_log_event(THD* thd_arg, const char *db_arg,
+                             char* block_arg, uint block_len_arg,
+                             bool using_trans);
+#ifdef HAVE_REPLICATION
+  Begin_load_query_log_event(THD* thd);
+  int get_open_mode() const;
+#endif /* HAVE_REPLICATION */
+#endif
+  Begin_load_query_log_event(const char* buf, uint event_len,
+                             const Format_description_log_event* description_event);
+  ~Begin_load_query_log_event() {}
+  Log_event_type get_type_code() { return BEGIN_LOAD_QUERY_EVENT; }
+};
+
+
+/*
+  Elements of this enum describe how LOAD DATA handles duplicates.
+*/
+enum enum_load_dup_handling { LOAD_DUP_ERROR= 0, LOAD_DUP_IGNORE,
+                              LOAD_DUP_REPLACE };
+
+/****************************************************************************
+
+  Execute load query Log Event class
+
+  Event responsible for LOAD DATA execution, it similar to Query_log_event
+  but before executing the query it substitutes original filename in LOAD DATA
+  query with name of temporary file.
+
+****************************************************************************/
+class Execute_load_query_log_event: public Query_log_event
+{
+public:
+  uint file_id;       // file_id of temporary file
+  uint fn_pos_start;  // pointer to the part of the query that should
+                      // be substituted
+  uint fn_pos_end;    // pointer to the end of this part of query
+  /*
+    We have to store type of duplicate handling explicitly, because
+    for LOAD DATA it also depends on LOCAL option. And this part
+    of query will be rewritten during replication so this information
+    may be lost...
+  */
+  enum_load_dup_handling dup_handling;
+
+#ifndef MYSQL_CLIENT
+  Execute_load_query_log_event(THD* thd, const char* query_arg,
+                       ulong query_length, uint fn_pos_start_arg,
+                       uint fn_pos_end_arg,
+                       enum_load_dup_handling dup_handling_arg,
+                       bool using_trans, bool suppress_use);
+#ifdef HAVE_REPLICATION
+  void pack_info(Protocol* protocol);
+  int exec_event(struct st_relay_log_info* rli);
+#endif /* HAVE_REPLICATION */
+#else
+  void print(FILE* file, bool short_form = 0,
+             LAST_EVENT_INFO* last_event_info= 0);
+  /* Prints the query as LOAD DATA LOCAL and with rewritten filename */
+  void print(FILE* file, bool short_form, LAST_EVENT_INFO* last_event_info,
+             const char *local_fname);
+#endif
+  Execute_load_query_log_event(const char* buf, uint event_len,
+                               const Format_description_log_event *description_event);
+  ~Execute_load_query_log_event() {}
+
+  Log_event_type get_type_code() { return EXECUTE_LOAD_QUERY_EVENT; }
+  bool is_valid() const { return Query_log_event::is_valid() && file_id != 0; }
+
+  ulong get_post_header_size_for_derived();
+  bool write_post_header_for_derived(IO_CACHE* file);
+ };
 
 
 #ifdef MYSQL_CLIENT

--- 1.275/sql/mysql_priv.h	Mon Mar 14 16:47:37 2005
+++ 1.276/sql/mysql_priv.h	Wed Mar 16 04:32:41 2005
@@ -942,8 +942,10 @@
 
 /* sql_load.cc */
 bool mysql_load(THD *thd, sql_exchange *ex, TABLE_LIST *table_list,
-	        List<Item> &fields, enum enum_duplicates handle_duplicates,
-                bool ignore, bool local_file, thr_lock_type lock_type);
+	        List<Item> &fields_vars, List<Item> &set_fields,
+                List<Item> &set_values_list,
+                enum enum_duplicates handle_duplicates, bool ignore,
+                bool local_file, thr_lock_type lock_type);
 int write_record(THD *thd, TABLE *table, COPY_INFO *info);
 
 /* sql_manager.cc */

--- 1.108/client/mysqlbinlog.cc	Wed Feb 23 21:14:25 2005
+++ 1.109/client/mysqlbinlog.cc	Wed Mar 16 04:32:40 2005
@@ -103,6 +103,22 @@
 {
   char target_dir_name[FN_REFLEN];
   int target_dir_name_len;
+
+  /*
+    When we see first event corresponding to some LOAD DATA statement in
+    binlog, we create temporary file to store data to be loaded.
+    We add name of this file to file_names array using its file_id as index.
+    If we have Create_file event (i.e. we have binary log in pre-5.0.3
+    format) we also store save event object to be able which is needed to
+    emit LOAD DATA statement when we will meet Exec_load_data event.
+    If we have Begin_load_query event we simply store 0 in
+    File_name_record::event field.
+  */
+  struct File_name_record
+  {
+    char *fname;
+    Create_file_log_event *event;
+  };
   DYNAMIC_ARRAY file_names;
 
   /*
@@ -144,7 +160,7 @@
 
   int init()
   {
-    return init_dynamic_array(&file_names,sizeof(Create_file_log_event*),
+    return init_dynamic_array(&file_names, sizeof(File_name_record),
 			      100,100 CALLER_INFO);
   }
 
@@ -161,33 +177,91 @@
     }
   void destroy()
     {
-      Create_file_log_event **ptr= (Create_file_log_event**)file_names.buffer;
-      Create_file_log_event **end= ptr + file_names.elements;
+      File_name_record *ptr= (File_name_record *)file_names.buffer;
+      File_name_record *end= ptr + file_names.elements;
       for (; ptr<end; ptr++)
       {
-	if (*ptr)
+	if (ptr->fname)
 	{
-	  my_free((char*)(*ptr)->fname,MYF(MY_WME));
-	  delete *ptr;
-	  *ptr= 0;
+          my_free(ptr->fname, MYF(MY_WME));
+          delete ptr->event;
+          bzero((char *)ptr, sizeof(File_name_record));
 	}
       }
     }
+
+  /*
+    Obtain Create_file event for LOAD DATA statement by its file_id.
+
+    SYNOPSIS
+      grab_event()
+        file_id - file_id identifiying LOAD DATA statement
+
+    DESCRIPTION
+      Checks whenever we have already seen Create_file event for this file_id.
+      If yes then returns pointer to it and removes it from array describing
+      active temporary files. Since this moment caller is responsible for
+      freeing memory occupied by this event and associated file name.
+
+    RETURN VALUES
+      Pointer to Create_file event or 0 if there was no such event
+      with this file_id.
+  */
   Create_file_log_event *grab_event(uint file_id)
     {
+      File_name_record *ptr;
+      Create_file_log_event *res;
+
+      if (file_id >= file_names.elements)
+        return 0;
+      ptr= dynamic_element(&file_names, file_id, File_name_record*);
+      if ((res= ptr->event))
+        bzero((char *)ptr, sizeof(File_name_record));
+      return res;
+    }
+
+  /*
+    Obtain file name of temporary file for LOAD DATA statement by its file_id.
+
+    SYNOPSIS
+      grab_fname()
+        file_id - file_id identifiying LOAD DATA statement
+
+    DESCRIPTION
+      Checks whenever we have already seen Begin_load_query event for this
+      file_id. If yes then returns file name of corresponding temporary file.
+      Removes record about this file from the array of active temporary files.
+      Since this moment caller is responsible for freeing memory occupied by
+      this name.
+
+    RETURN VALUES
+      String with name of temporary file or 0 if we have not seen Begin_load_query
+      event with this file_id.
+  */
+  char *grab_fname(uint file_id)
+    {
+      File_name_record *ptr;
+      char *res= 0;
+
       if (file_id >= file_names.elements)
         return 0;
-      Create_file_log_event **ptr= 
-	(Create_file_log_event**)file_names.buffer + file_id;
-      Create_file_log_event *res= *ptr;
-      *ptr= 0;
+      ptr= dynamic_element(&file_names, file_id, File_name_record*);
+      if (!ptr->event)
+      {
+        res= ptr->fname;
+        bzero((char *)ptr, sizeof(File_name_record));
+      }
       return res;
     }
   int process(Create_file_log_event *ce);
+  int process(Begin_load_query_log_event *ce);
   int process(Append_block_log_event *ae);
   File prepare_new_file_for_old_format(Load_log_event *le, char *filename);
   int load_old_format_file(NET* net, const char *server_fname,
 			   uint server_fname_len, File file);
+  int process_first_event(const char *bname, uint blen, const char *block,
+                          uint block_len, uint file_id,
+                          Create_file_log_event *ce);
 };
 
 
@@ -265,22 +339,42 @@
 }
 
 
-int Load_log_processor::process(Create_file_log_event *ce)
+/*
+  Process first event in the sequence of events representing LOAD DATA
+  statement.
+
+  SYNOPSIS
+    process_first_event()
+      bname     - base name for temporary file to be created
+      blen      - base name length
+      block     - first block of data to be loaded
+      block_len - first block length
+      file_id   - identifies LOAD DATA statement
+      ce        - pointer to Create_file event object if we are processing
+                  this type of event.
+
+  DESCRIPTION
+    Creates temporary file to be used in LOAD DATA and writes first block of
+    data to it. Registers its file name (and optional Create_file event)
+    in the array of active temporary files.
+
+  RETURN VALUES
+    0     - success
+    non-0 - error
+*/
+
+int Load_log_processor::process_first_event(const char *bname, uint blen,
+                                            const char *block, uint block_len,
+                                            uint file_id,
+                                            Create_file_log_event *ce)
 {
-  const char *bname= ce->fname+dirname_length(ce->fname);
-  uint blen= ce->fname_len - (bname-ce->fname);
   uint full_len= target_dir_name_len + blen + 9 + 9 + 1;
   int error= 0;
   char *fname, *ptr;
   File file;
-  DBUG_ENTER("Load_log_processor::process");
+  File_name_record rec;
+  DBUG_ENTER("Load_log_processor::process_first_event");
 
-  if (set_dynamic(&file_names,(gptr)&ce,ce->file_id))
-  {
-    sql_print_error("Could not construct local filename %s%s",
-		    target_dir_name,bname);
-    DBUG_RETURN(-1);
-  }
   if (!(fname= my_malloc(full_len,MYF(MY_WME))))
     DBUG_RETURN(-1);
 
@@ -288,7 +382,7 @@
   ptr= fname + target_dir_name_len;
   memcpy(ptr,bname,blen);
   ptr+= blen;
-  ptr+= my_sprintf(ptr,(ptr,"-%x",ce->file_id));
+  ptr+= my_sprintf(ptr, (ptr, "-%x", file_id));
 
   if ((file= create_unique_file(fname,ptr)) < 0)
   {
@@ -296,9 +390,21 @@
 		    target_dir_name,bname);
     DBUG_RETURN(-1);
   }
-  ce->set_fname_outside_temp_buf(fname,strlen(fname));
 
-  if (my_write(file,(byte*) ce->block,ce->block_len,MYF(MY_WME|MY_NABP)))
+  rec.fname= fname;
+  rec.event= ce;
+
+  if (set_dynamic(&file_names, (gptr)&rec, file_id))
+  {
+    sql_print_error("Could not construct local filename %s%s",
+		    target_dir_name, bname);
+    DBUG_RETURN(-1);
+  }
+
+  if (ce)
+    ce->set_fname_outside_temp_buf(fname, strlen(fname));
+
+  if (my_write(file, (byte*)block, block_len, MYF(MY_WME|MY_NABP)))
     error= -1;
   if (my_close(file, MYF(MY_WME)))
     error= -1;
@@ -306,19 +412,35 @@
 }
 
 
+int Load_log_processor::process(Create_file_log_event *ce)
+{
+  const char *bname= ce->fname + dirname_length(ce->fname);
+  uint blen= ce->fname_len - (bname-ce->fname);
+
+  return process_first_event(bname, blen, ce->block, ce->block_len,
+                             ce->file_id, ce);
+}
+
+
+int Load_log_processor::process(Begin_load_query_log_event *blqe)
+{
+  return process_first_event("SQL_LOAD_MB", 11, blqe->block, blqe->block_len,
+                             blqe->file_id, 0);
+}
+
+
 int Load_log_processor::process(Append_block_log_event *ae)
 {
   DBUG_ENTER("Load_log_processor::process");
-  Create_file_log_event* ce= ((ae->file_id < file_names.elements) ?
-			      *((Create_file_log_event**)file_names.buffer +
-				ae->file_id) :
-			      0);
+  const char* fname= ((ae->file_id < file_names.elements) ?
+                       dynamic_element(&file_names, ae->file_id,
+                                       File_name_record*)->fname : 0);
 
-  if (ce)
+  if (fname)
   {
     File file;
     int error= 0;
-    if (((file= my_open(ce->fname,
+    if (((file= my_open(fname,
 			O_APPEND|O_BINARY|O_WRONLY,MYF(MY_WME))) < 0))
       DBUG_RETURN(-1);
     if (my_write(file,(byte*)ae->block,ae->block_len,MYF(MY_WME|MY_NABP)))
@@ -342,6 +464,14 @@
 Load_log_processor load_processor;
 
 
+static bool check_database(const char *log_dbname)
+{
+  return one_database &&
+         (log_dbname != NULL) &&
+         strcmp(log_dbname, database);
+}
+
+
 /*
   Process an event
 
@@ -395,29 +525,21 @@
     
     switch (ev_type) {
     case QUERY_EVENT:
-      if (one_database)
-      {
-	const char * log_dbname = ((Query_log_event*)ev)->db;
-	if ((log_dbname != NULL) && (strcmp(log_dbname, database)))
-	  goto end;
-      }
+      if (check_database(((Query_log_event*)ev)->db))
+        goto end;
       ev->print(result_file, short_form, last_event_info);
       break;
     case CREATE_FILE_EVENT:
     {
       Create_file_log_event* ce= (Create_file_log_event*)ev;
-      if (one_database)
-      {
-	/*
-	  We test if this event has to be ignored. If yes, we don't save 
-	      this event; this will have the good side-effect of ignoring all 
-	      related Append_block and Exec_load.
-	      Note that Load event from 3.23 is not tested.
-	*/
-	const char * log_dbname = ce->db;            
-	if ((log_dbname != NULL) && (strcmp(log_dbname, database)))
-	  goto end;				// Next event
-      }
+      /*
+        We test if this event has to be ignored. If yes, we don't save
+        this event; this will have the good side-effect of ignoring all
+        related Append_block and Exec_load.
+        Note that Load event from 3.23 is not tested.
+      */
+      if (check_database(ce->db))
+        goto end;                // Next event
       /*
 	We print the event, but with a leading '#': this is just to inform 
 	the user of the original command; the command we want to execute 
@@ -473,6 +595,32 @@
       */
       ev= 0;
       break;
+    case BEGIN_LOAD_QUERY_EVENT:
+      ev->print(result_file, short_form, last_event_info);
+      load_processor.process((Begin_load_query_log_event*) ev);
+      break;
+    case EXECUTE_LOAD_QUERY_EVENT:
+    {
+      Execute_load_query_log_event *exlq= (Execute_load_query_log_event*)ev;
+      char *fname= load_processor.grab_fname(exlq->file_id);
+
+      if (check_database(exlq->db))
+      {
+        if (fname)
+          my_free(fname, MYF(MY_WME));
+        goto end;
+      }
+
+      if (fname)
+      {
+	exlq->print(result_file, short_form, last_event_info, fname);
+	my_free(fname, MYF(MY_WME));
+      }
+      else
+	fprintf(stderr,"Warning: ignoring Execute_load_query as there is no \
+Begin_load_query event for file_id: %u\n", exlq->file_id);
+      break;
+    }
     default:
       ev->print(result_file, short_form, last_event_info);
     }

--- 1.168/sql/sql_lex.h	Thu Mar 10 00:52:43 2005
+++ 1.169/sql/sql_lex.h	Wed Mar 16 04:32:42 2005
@@ -810,6 +810,12 @@
   */
   TABLE_LIST **query_tables_own_last;
 
+  /*
+    Pointers to part of LOAD DATA statement that should be rewritten
+    during replication ("LOCAL 'filename' REPLACE INTO" part).
+  */
+  uchar *fname_start, *fname_end;
+
   st_lex() :result(0), sql_command(SQLCOM_END), query_tables_own_last(0)
   {
     extern byte *sp_lex_sp_key(const byte *ptr, uint *plen, my_bool first);

--- 1.74/sql/sql_load.cc	Fri Feb 25 17:53:16 2005
+++ 1.75/sql/sql_load.cc	Wed Mar 16 04:32:42 2005
@@ -72,18 +72,44 @@
 };
 
 static int read_fixed_length(THD *thd, COPY_INFO &info, TABLE_LIST *table_list,
-			     List<Item> &fields, READ_INFO &read_info,
+                             List<Item> &fields_vars, List<Item>
&set_fields,
+                             List<Item> &set_values, READ_INFO &read_info,
 			     ulong skip_lines,
 			     bool ignore_check_option_errors);
 static int read_sep_field(THD *thd, COPY_INFO &info, TABLE_LIST *table_list,
-			  List<Item> &fields, READ_INFO &read_info,
+                          List<Item> &fields_vars, List<Item>
&set_fields,
+                          List<Item> &set_values, READ_INFO &read_info,
 			  String &enclosed, ulong skip_lines,
 			  bool ignore_check_option_errors);
 
+
+/*
+  Execute LOAD DATA query
+
+  SYNOPSYS
+    mysql_load()
+      thd - current thread
+      ex  - sql_exchange object representing source file and its parsing rules
+      table_list  - list of tables to which we are loading data
+      fields_vars - list of fields and variables to which we read
+                    data from file
+      set_fields  - list of fields mentioned in set clause
+      set_values  - expressions to assign to fields in previous list
+      handle_duplicates - indicates whenever we should emit error or
+                          replace row if we will meet duplicates.
+      ignore -          - indicates whenever we should ignore duplicates
+      read_file_from_client - is this LOAD DATA LOCAL ?
+      lock_type - what type of concurrency do we allow then we are inserting data
+
+  RETURN VALUES
+    TRUE - error / FALSE - success
+*/
+
 bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
-	       List<Item> &fields, enum enum_duplicates handle_duplicates,
-               bool ignore,
-	       bool read_file_from_client,thr_lock_type lock_type)
+	        List<Item> &fields_vars, List<Item> &set_fields,
+                List<Item> &set_values,
+                enum enum_duplicates handle_duplicates, bool ignore,
+                bool read_file_from_client, thr_lock_type lock_type)
 {
   char name[FN_REFLEN];
   File file;
@@ -130,48 +156,80 @@
     my_error(ER_NON_UPDATABLE_TABLE, MYF(0), table_list->alias, "LOAD");
     DBUG_RETURN(TRUE);
   }
+  /*
+    Let us emit an error if we are loading data to table which is used
+    in subselect in SET clause like we do it for INSERT.
+
+    The main thing to fix to remove this restriction is to ensure that the
+    table is marked to be 'used for insert' in which case we should never
+    mark this table as as 'const table' (ie, one that has only one row).
+  */
+  if (unique_table(table_list, table_list->next_global))
+  {
+    my_error(ER_UPDATE_TABLE_USED, MYF(0), table_list->table_name);
+    DBUG_RETURN(TRUE);
+  }
+
   table= table_list->table;
   transactional_table= table->file->has_transactions();
 
-  if (!fields.elements)
+  if (!fields_vars.elements)
   {
     Field **field;
     for (field=table->field; *field ; field++)
-      fields.push_back(new Item_field(*field));
+      fields_vars.push_back(new Item_field(*field));
+    table->timestamp_field_type= TIMESTAMP_NO_AUTO_SET;
+    /*
+      Let us also prepare SET clause, altough it is probably empty
+      in this case.
+    */
+    if (setup_fields(thd, 0, table_list, set_fields, 1, 0, 0) ||
+        setup_fields(thd, 0, table_list, set_values, 1, 0, 0))
+      DBUG_RETURN(TRUE);
   }
   else
   {						// Part field list
-    thd->dupp_field=0;
     /* TODO: use this conds for 'WITH CHECK OPTIONS' */
-    if (setup_fields(thd, 0, table_list, fields, 1, 0, 0))
+    if (setup_fields(thd, 0, table_list, fields_vars, 1, 0, 0) ||
+        setup_fields(thd, 0, table_list, set_fields, 1, 0, 0) ||
+        check_that_all_fields_are_given_values(thd, table))
       DBUG_RETURN(TRUE);
-    if (thd->dupp_field)
-    {
-      my_error(ER_FIELD_SPECIFIED_TWICE, MYF(0), thd->dupp_field->field_name);
-      DBUG_RETURN(TRUE);
-    }
-    if (check_that_all_fields_are_given_values(thd, table))
+    /*
+      Check whenever TIMESTAMP field with auto-set feature specified
+      explicitly.
+    */
+    if (table->timestamp_field &&
+        table->timestamp_field->query_id == thd->query_id)
+      table->timestamp_field_type= TIMESTAMP_NO_AUTO_SET;
+    /*
+      Fix the expressions in SET clause. This should be done after
+      check_that_all_fields_are_given_values() and setting use_timestamp
+      since it may update query_id for some fields.
+    */
+    if (setup_fields(thd, 0, table_list, set_values, 1, 0, 0))
       DBUG_RETURN(TRUE);
   }
 
   uint tot_length=0;
-  bool use_blobs=0,use_timestamp=0;
-  List_iterator_fast<Item> it(fields);
+  bool use_blobs= 0, use_vars= 0;
+  List_iterator_fast<Item> it(fields_vars);
+  Item *item;
 
-  Item_field *field;
-  while ((field=(Item_field*) it++))
+  while ((item= it++))
   {
-    if (field->field->flags & BLOB_FLAG)
+    if (item->type() == Item::FIELD_ITEM)
     {
-      use_blobs=1;
-      tot_length+=256;				// Will be extended if needed
+      Field *field= ((Item_field*)item)->field;
+      if (field->flags & BLOB_FLAG)
+      {
+        use_blobs= 1;
+        tot_length+= 256;			// Will be extended if needed
+      }
+      else
+        tot_length+= field->field_length;
     }
     else
-      tot_length+=field->field->field_length;
-    if (!field_term->length() && !(field->field->flags &
NOT_NULL_FLAG))
-      field->field->set_notnull();
-    if (field->field == table->timestamp_field)
-      use_timestamp=1;
+      use_vars= 1;
   }
   if (use_blobs && !ex->line_term->length() &&
!field_term->length())
   {
@@ -179,6 +237,11 @@
 	       MYF(0));
     DBUG_RETURN(TRUE);
   }
+  if (use_vars && !field_term->length() && !enclosed->length())
+  {
+    my_error(ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR, MYF(0));
+    DBUG_RETURN(TRUE);
+  }
 
   /* We can't give an error in the middle when using LOCAL files */
   if (read_file_from_client && handle_duplicates == DUP_ERROR)
@@ -251,12 +314,6 @@
   if (mysql_bin_log.is_open())
   {
     lf_info.thd = thd;
-    lf_info.ex = ex;
-    lf_info.db = db;
-    lf_info.table_name = table_list->table_name;
-    lf_info.fields = &fields;
-    lf_info.ignore= ignore;
-    lf_info.handle_dup = handle_duplicates;
     lf_info.wrote_create_file = 0;
     lf_info.last_pos_in_file = HA_POS_ERROR;
     lf_info.log_delayed= transactional_table;
@@ -264,8 +321,6 @@
   }
 #endif /*!EMBEDDED_LIBRARY*/
 
-  restore_record(table, s->default_values);
-
   thd->count_cuted_fields= CHECK_FIELD_WARN;		/* calc cuted fields */
   thd->cuted_fields=0L;
   /* Skip lines if there is a line terminator */
@@ -282,8 +337,6 @@
 
   if (!(error=test(read_info.error)))
   {
-    if (use_timestamp)
-      table->timestamp_field_type= TIMESTAMP_NO_AUTO_SET;
 
     table->next_number_field=table->found_next_number_field;
     if (ignore ||
@@ -300,12 +353,13 @@
                               MODE_STRICT_ALL_TABLES)));
 
     if (!field_term->length() && !enclosed->length())
-      error= read_fixed_length(thd, info, table_list, fields,read_info,
+      error= read_fixed_length(thd, info, table_list, fields_vars,
+                               set_fields, set_values, read_info,
 			       skip_lines, ignore);
     else
-      error= read_sep_field(thd, info, table_list, fields, read_info,
-			    *enclosed, skip_lines,
-			    ignore);
+      error= read_sep_field(thd, info, table_list, fields_vars,
+                            set_fields, set_values, read_info,
+			    *enclosed, skip_lines, ignore);
     if (table->file->end_bulk_insert())
       error=1;					/* purecov: inspected */
     ha_enable_transaction(thd, TRUE);
@@ -380,13 +434,19 @@
   {
     /*
       As already explained above, we need to call end_io_cache() or the last
-      block will be logged only after Execute_load_log_event (which is wrong),
-      when read_info is destroyed.
+      block will be logged only after Execute_load_query_log_event (which is
+      wrong), when read_info is destroyed.
     */
     read_info.end_io_cache();
     if (lf_info.wrote_create_file)
     {
-      Execute_load_log_event e(thd, db, transactional_table);
+      Execute_load_query_log_event e(thd, thd->query, thd->query_length,
+        (char*)thd->lex->fname_start - (char*)thd->query,
+        (char*)thd->lex->fname_end - (char*)thd->query,
+        (handle_duplicates == DUP_REPLACE) ?  LOAD_DUP_REPLACE :
+                                              (ignore ? LOAD_DUP_IGNORE :
+                                                        LOAD_DUP_ERROR),
+        transactional_table, FALSE);
       mysql_bin_log.write(&e);
     }
   }
@@ -410,10 +470,11 @@
 
 static int
 read_fixed_length(THD *thd, COPY_INFO &info, TABLE_LIST *table_list,
-		  List<Item> &fields, READ_INFO &read_info, ulong skip_lines,
-		  bool ignore_check_option_errors)
+                  List<Item> &fields_vars, List<Item> &set_fields,
+                  List<Item> &set_values, READ_INFO &read_info,
+                  ulong skip_lines, bool ignore_check_option_errors)
 {
-  List_iterator_fast<Item> it(fields);
+  List_iterator_fast<Item> it(fields_vars);
   Item_field *sql_field;
   TABLE *table= table_list->table;
   ulonglong id;
@@ -421,11 +482,7 @@
   DBUG_ENTER("read_fixed_length");
 
   id= 0;
-  
-  /* No fields can be null in this format. mark all fields as not null */
-  while ((sql_field= (Item_field*) it++))
-      sql_field->field->set_notnull();
-
+ 
   while (!read_info.read_fixed_length())
   {
     if (thd->killed)
@@ -450,16 +507,28 @@
     read_info.row_end[0]=0;
 #endif
     no_trans_update= !table->file->has_transactions();
+
+    restore_record(table, s->default_values);
+    /*
+      There is no variables in fields_vars list in this format so
+      this conversion is safe.
+    */
     while ((sql_field= (Item_field*) it++))
     {
       Field *field= sql_field->field;                  
+      /*
+        No fields specified in fields_vars list can be null in this format.
+        Mark field as not null, we should do this for each row because of
+        restore_record...
+      */
+      field->set_notnull();
+
       if (pos == read_info.row_end)
       {
         thd->cuted_fields++;			/* Not enough fields */
         push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN, 
                             ER_WARN_TOO_FEW_RECORDS, 
                             ER(ER_WARN_TOO_FEW_RECORDS), thd->row_count);
-	      field->reset();
       }
       else
       {
@@ -483,6 +552,9 @@
                           ER(ER_WARN_TOO_MANY_RECORDS), thd->row_count); 
     }
 
+    if (fill_record(thd, set_fields, set_values, ignore_check_option_errors))
+      DBUG_RETURN(1);
+
     switch (table_list->view_check_option(thd,
                                           ignore_check_option_errors)) {
     case VIEW_CHECK_SKIP:
@@ -527,12 +599,13 @@
 
 static int
 read_sep_field(THD *thd, COPY_INFO &info, TABLE_LIST *table_list,
-	       List<Item> &fields, READ_INFO &read_info,
+               List<Item> &fields_vars, List<Item> &set_fields,
+               List<Item> &set_values, READ_INFO &read_info,
 	       String &enclosed, ulong skip_lines,
 	       bool ignore_check_option_errors)
 {
-  List_iterator_fast<Item> it(fields);
-  Item_field *sql_field;
+  List_iterator_fast<Item> it(fields_vars);
+  Item *item;
   TABLE *table= table_list->table;
   uint enclosed_length;
   ulonglong id;
@@ -550,59 +623,94 @@
       thd->send_kill_message();
       DBUG_RETURN(1);
     }
-    while ((sql_field=(Item_field*) it++))
+
+    restore_record(table, s->default_values);
+
+    while ((item= it++))
     {
       uint length;
       byte *pos;
 
       if (read_info.read_field())
 	break;
+
+      /* If this line is to be skipped we don't want to fill field or var */
+      if (skip_lines)
+        continue;
+
       pos=read_info.row_start;
       length=(uint) (read_info.row_end-pos);
-      Field *field=sql_field->field;
 
       if (!read_info.enclosed &&
 	  (enclosed_length && length == 4 && !memcmp(pos,"NULL",4)) ||
 	  (length == 1 && read_info.found_null))
       {
-	field->reset();
-	field->set_null();
-	if (!field->maybe_null())
-	{
-	  if (field->type() == FIELD_TYPE_TIMESTAMP)
-	    ((Field_timestamp*) field)->set_time();
-	  else if (field != table->next_number_field)      
-	    field->set_warning((uint) MYSQL_ERROR::WARN_LEVEL_WARN, 
-			       ER_WARN_NULL_TO_NOTNULL, 1);
+        if (item->type() == Item::FIELD_ITEM)
+        {
+          Field *field= ((Item_field *)item)->field;
+          field->reset();
+          field->set_null();
+          if (!field->maybe_null())
+          {
+            if (field->type() == FIELD_TYPE_TIMESTAMP)
+              ((Field_timestamp*) field)->set_time();
+            else if (field != table->next_number_field)
+              field->set_warning((uint) MYSQL_ERROR::WARN_LEVEL_WARN,
+                                 ER_WARN_NULL_TO_NOTNULL, 1);
+          }
 	}
+        else
+          ((Item_user_var_as_out_param *)item)->set_null_value(
+                                                  read_info.read_charset);
 	continue;
       }
-      field->set_notnull();
-      read_info.row_end[0]=0;			// Safe to change end marker
-      field->store((char*) read_info.row_start,length,read_info.read_charset);
+
+      if (item->type() == Item::FIELD_ITEM)
+      {
+        Field *field= ((Item_field *)item)->field;
+        field->set_notnull();
+        read_info.row_end[0]=0;			// Safe to change end marker
+        field->store((char*) pos, length, read_info.read_charset);
+      }
+      else
+        ((Item_user_var_as_out_param *)item)->set_value((char*) pos, length,
+                                                read_info.read_charset);
     }
     if (read_info.error)
       break;
     if (skip_lines)
     {
-      if (!--skip_lines)
-	thd->cuted_fields= 0L;			// Reset warnings
+      skip_lines--;
       continue;
     }
-    if (sql_field)
-    {						// Last record
-      if (sql_field == (Item_field*) fields.head())
+    if (item)
+    {
+      /* Have not read any field, thus input file is simply ended */
+      if (item == fields_vars.head())
 	break;
-      for (; sql_field ; sql_field=(Item_field*) it++)
+      for (; item ; item= it++)
       {
-	sql_field->field->set_null();
-	sql_field->field->reset();
-	thd->cuted_fields++;
- 	push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN, 
-                	    ER_WARN_TOO_FEW_RECORDS,
-                	    ER(ER_WARN_TOO_FEW_RECORDS), thd->row_count);
+        if (item->type() == Item::FIELD_ITEM)
+        {
+          /*
+            QQ: We probably should not throw warning for each field.
+            But how about intention to always have the same number
+            of warnings in THD::cuted_fields (and get rid of cuted_fields
+            in the end ?)
+          */
+          thd->cuted_fields++;
+          push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+                              ER_WARN_TOO_FEW_RECORDS,
+                              ER(ER_WARN_TOO_FEW_RECORDS), thd->row_count);
+        }
+        else
+          ((Item_user_var_as_out_param *)item)->set_null_value(
+                                                  read_info.read_charset);
       }
     }
+
+    if (fill_record(thd, set_fields, set_values, ignore_check_option_errors))
+      DBUG_RETURN(1);
 
     switch (table_list->view_check_option(thd,
                                           ignore_check_option_errors)) {

--- 1.418/sql/sql_parse.cc	Tue Mar 15 02:14:55 2005
+++ 1.419/sql/sql_parse.cc	Wed Mar 16 04:32:42 2005
@@ -3337,14 +3337,10 @@
   {
     DBUG_ASSERT(first_table == all_tables && first_table != 0);
     uint privilege= (lex->duplicates == DUP_REPLACE ?
-		     INSERT_ACL | DELETE_ACL : INSERT_ACL);
+		     INSERT_ACL | DELETE_ACL : INSERT_ACL) |
+                    (lex->local_file ? 0 : FILE_ACL);
 
-    if (!lex->local_file)
-    {
-      if (check_access(thd, privilege | FILE_ACL, first_table->db, 0, 0, 0))
-	goto error;
-    }
-    else
+    if (lex->local_file)
     {
       if (!(thd->client_capabilities & CLIENT_LOCAL_FILES) ||
 	  ! opt_local_infile)
@@ -3352,12 +3348,14 @@
 	my_message(ER_NOT_ALLOWED_COMMAND, ER(ER_NOT_ALLOWED_COMMAND), MYF(0));
 	goto error;
       }
-      if (check_one_table_access(thd, privilege, all_tables))
-	goto error;
     }
+
+    if (check_one_table_access(thd, privilege, all_tables))
+      goto error;
+
     res= mysql_load(thd, lex->exchange, first_table, lex->field_list,
-                    lex->duplicates, lex->ignore, (bool) lex->local_file,
-		    lex->lock_option);
+                    lex->update_list, lex->value_list, lex->duplicates,
+                    lex->ignore, (bool) lex->local_file, lex->lock_option);
     break;
   }
 

--- 1.349/sql/sql_yacc.yy	Sun Mar 13 23:50:37 2005
+++ 1.350/sql/sql_yacc.yy	Wed Mar 16 04:32:42 2005
@@ -686,7 +686,7 @@
 	text_string opt_gconcat_separator
 
 %type <num>
-	type int_type real_type order_dir opt_field_spec lock_option
+	type int_type real_type order_dir lock_option
 	udf_type if_exists opt_local opt_table_options table_options
         table_option opt_if_not_exists opt_no_write_to_binlog opt_var_type
         opt_var_ident_type delete_option opt_temporary all_or_any opt_distinct
@@ -714,6 +714,7 @@
 	signed_literal now_or_signed_literal opt_escape
 	sp_opt_default
 	simple_ident_nospvar simple_ident_q
+        field_or_var
 
 %type <item_num>
 	NUM_literal
@@ -809,6 +810,7 @@
         prepare prepare_src execute deallocate 
 	statement sp_suid opt_view_list view_list or_replace algorithm
 	sp_c_chistics sp_a_chistics sp_chistic sp_c_chistic xa
+        load_data opt_field_or_var_spec fields_or_vars opt_load_data_set_spec
 END_OF_INPUT
 
 %type <NONE> call sp_proc_stmts sp_proc_stmts1 sp_proc_stmt
@@ -5703,11 +5705,6 @@
 	   }
 	   ident_eq_list;
 
-opt_field_spec:
-	/* empty */	  { }
-	| '(' fields ')'  { }
-	| '(' ')'	  { };
-
 fields:
 	fields ',' insert_ident { Lex->field_list.push_back($3); }
 	| insert_ident		{ Lex->field_list.push_back($1); };
@@ -6409,34 +6406,49 @@
 
 /* import, export of files */
 
-load:	LOAD DATA_SYM load_data_lock opt_local INFILE TEXT_STRING_sys
+load:   LOAD DATA_SYM 
+        {
+          LEX *lex=Lex;
+          lex->fname_start= lex->ptr;
+        }
+        load_data
+        {}
+        |
+        LOAD TABLE_SYM table_ident FROM MASTER_SYM
+        {
+          Lex->sql_command = SQLCOM_LOAD_MASTER_TABLE;
+          if (!Select->add_table_to_list(YYTHD, $3, NULL, TL_OPTION_UPDATING))
+            YYABORT;
+        };
+
+load_data:
+	load_data_lock opt_local INFILE TEXT_STRING_sys
 	{
 	  LEX *lex=Lex;
 	  lex->sql_command= SQLCOM_LOAD;
-	  lex->lock_option= $3;
-	  lex->local_file=  $4;
+	  lex->lock_option= $1;
+	  lex->local_file=  $2;
 	  lex->duplicates= DUP_ERROR;
 	  lex->ignore= 0;
-	  if (!(lex->exchange= new sql_exchange($6.str,0)))
+	  if (!(lex->exchange= new sql_exchange($4.str, 0)))
 	    YYABORT;
+        }
+        opt_duplicate INTO
+        {
+	  LEX *lex=Lex;
+	  lex->fname_end= lex->ptr;
 	  lex->field_list.empty();
+	  lex->update_list.empty();
+	  lex->value_list.empty();
 	}
-	opt_duplicate INTO TABLE_SYM table_ident opt_field_term opt_line_term
-	opt_ignore_lines opt_field_spec
+	TABLE_SYM table_ident opt_field_term opt_line_term
+	opt_ignore_lines opt_field_or_var_spec opt_load_data_set_spec
 	{
-	  if (!Select->add_table_to_list(YYTHD, $11, NULL, TL_OPTION_UPDATING))
+	  if (!Select->add_table_to_list(YYTHD, $10, NULL, TL_OPTION_UPDATING))
 	    YYABORT;
 	}
         |
-	LOAD TABLE_SYM table_ident FROM MASTER_SYM
-        {
-	  Lex->sql_command = SQLCOM_LOAD_MASTER_TABLE;
-	  if (!Select->add_table_to_list(YYTHD, $3, NULL, TL_OPTION_UPDATING))
-	    YYABORT;
-
-        }
-        |
-	LOAD DATA_SYM FROM MASTER_SYM
+	FROM MASTER_SYM
         {
 	  Lex->sql_command = SQLCOM_LOAD_MASTER_DATA;
         };
@@ -6515,6 +6527,29 @@
             DBUG_ASSERT(Lex->exchange != 0);
             Lex->exchange->skip_lines= atol($2.str);
           };
+
+opt_field_or_var_spec:
+	/* empty */	          { }
+	| '(' fields_or_vars ')'  { }
+	| '(' ')'	          { };
+
+fields_or_vars:
+        fields_or_vars ',' field_or_var
+          { Lex->field_list.push_back($3); }
+        | field_or_var
+          { Lex->field_list.push_back($1); }
+        ;
+        
+field_or_var:
+        simple_ident_nospvar {$$= $1;}
+        | '@' ident_or_text
+          { $$= new Item_user_var_as_out_param($2); }
+        ;
+
+opt_load_data_set_spec:
+        /* empty */           { }
+        | SET insert_update_list  { };
+
 
 /* Common definitions */
 

--- 1.14/sql/share/errmsg.txt	Wed Mar  9 19:55:37 2005
+++ 1.15/sql/share/errmsg.txt	Wed Mar 16 04:32:42 2005
@@ -5330,3 +5330,5 @@
 	eng "Bad SQLSTATE: '%s'"
 ER_STARTUP
 	eng "%s: ready for connections.\nVersion: '%s'  socket: '%s'  port: %d  %s"
+ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR
+        eng "Can't load value from file with fixed size rows to variable"

--- 1.30/mysql-test/r/ctype_ucs.result	Wed Feb 23 21:29:44 2005
+++ 1.31/mysql-test/r/ctype_ucs.result	Wed Mar 16 04:32:40 2005
@@ -523,10 +523,10 @@
 set @v=convert('abc' using ucs2);
 reset master;
 insert into t2 values (@v);
-show binlog events from 96;
+show binlog events from 98;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	96	User var	1	136	@`v`=_ucs2 0x006100620063 COLLATE ucs2_general_ci
-master-bin.000001	136	Query	1	226	use `test`; insert into t2 values (@v)
+master-bin.000001	#	User var	1	#	@`v`=_ucs2 0x006100620063 COLLATE ucs2_general_ci
+master-bin.000001	#	Query	1	#	use `test`; insert into t2 values (@v)
 /*!40019 SET @@session.max_insert_delayed_threads=0*/;
 /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
 ROLLBACK;

--- 1.25/mysql-test/t/ctype_ucs.test	Thu Feb 17 16:00:29 2005
+++ 1.26/mysql-test/t/ctype_ucs.test	Wed Mar 16 04:32:41 2005
@@ -338,7 +338,8 @@
 set @v=convert('abc' using ucs2);
 reset master;
 insert into t2 values (@v);
-show binlog events from 96;
+--replace_column 2 # 5 #
+show binlog events from 98;
 # more important than SHOW BINLOG EVENTS, mysqlbinlog (where we
 # absolutely need variables names to be quoted and strings to be
 # escaped).

--- 1.7/mysql-test/r/rpl_timezone.result	Wed Feb 16 19:33:52 2005
+++ 1.8/mysql-test/r/rpl_timezone.result	Wed Mar 16 04:32:41 2005
@@ -32,13 +32,13 @@
 2004-06-11 09:39:02
 show binlog events;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	4	Format_desc	1	96	Server ver: VERSION, Binlog ver: 4
-master-bin.000001	96	Query	1	189	use `test`; create table t1 (t timestamp)
-master-bin.000001	189	Query	1	281	use `test`; create table t2 (t char(32))
-master-bin.000001	281	Query	1	373	use `test`; SET ONE_SHOT TIME_ZONE='UTC'
-master-bin.000001	373	Query	1	497	use `test`; insert into t1 values ('20040101000000'),
('20040611093902')
-master-bin.000001	497	Query	1	575	use `test`; delete from t1
-master-bin.000001	575	Query	1	699	use `test`; insert into t1 values ('20040101000000'),
('20040611093902')
+master-bin.000001	#	Format_desc	1	#	Server ver: VERSION, Binlog ver: 4
+master-bin.000001	#	Query	1	#	use `test`; create table t1 (t timestamp)
+master-bin.000001	#	Query	1	#	use `test`; create table t2 (t char(32))
+master-bin.000001	#	Query	1	#	use `test`; SET ONE_SHOT TIME_ZONE='UTC'
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values ('20040101000000'),
('20040611093902')
+master-bin.000001	#	Query	1	#	use `test`; delete from t1
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values ('20040101000000'),
('20040611093902')
 set time_zone='MET';
 insert into t2 (select t from t1);
 select * from t1;

--- 1.3/mysql-test/t/rpl_timezone.test	Thu Oct 28 15:02:06 2004
+++ 1.4/mysql-test/t/rpl_timezone.test	Wed Mar 16 04:32:41 2005
@@ -32,6 +32,7 @@
 connection master;
 # We should not see SET ONE_SHOT time_zone before second insert
 --replace_result $VERSION VERSION
+--replace_column 2 # 5 #
 show binlog events;
 
 #

--- 1.15/mysql-test/r/mysqlbinlog.result	Wed Feb 23 21:44:19 2005
+++ 1.16/mysql-test/r/mysqlbinlog.result	Wed Mar 16 04:32:40 2005
@@ -9,7 +9,6 @@
 load data infile '../../std_data/words.dat' into table t1;
 load data infile '../../std_data/words.dat' into table t1;
 load data infile '../../std_data/words.dat' into table t1;
-load data infile '../../std_data/words.dat' into table t1;
 insert into t1 values ("Alas");
 flush logs;
 
@@ -32,11 +31,14 @@
 SET INSERT_ID=1;
 SET TIMESTAMP=1000000000;
 insert into t2 values ();
-LOAD DATA LOCAL INFILE 'MYSQL_TEST_DIR/var/tmp/words.dat-1-0' INTO TABLE `t1` FIELDS
TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY ''
(word);
-LOAD DATA LOCAL INFILE 'MYSQL_TEST_DIR/var/tmp/words.dat-2-0' INTO TABLE `t1` FIELDS
TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY ''
(word);
-LOAD DATA LOCAL INFILE 'MYSQL_TEST_DIR/var/tmp/words.dat-3-0' INTO TABLE `t1` FIELDS
TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY ''
(word);
-LOAD DATA LOCAL INFILE 'MYSQL_TEST_DIR/var/tmp/words.dat-4-0' INTO TABLE `t1` FIELDS
TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY ''
(word);
-LOAD DATA LOCAL INFILE 'MYSQL_TEST_DIR/var/tmp/words.dat-5-0' INTO TABLE `t1` FIELDS
TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY ''
(word);
+SET TIMESTAMP=1000000000;
+load data LOCAL INFILE 'MYSQL_TEST_DIR/var/tmp/SQL_LOAD_MB-1-0' INTO table t1;
+SET TIMESTAMP=1000000000;
+load data LOCAL INFILE 'MYSQL_TEST_DIR/var/tmp/SQL_LOAD_MB-2-0' INTO table t1;
+SET TIMESTAMP=1000000000;
+load data LOCAL INFILE 'MYSQL_TEST_DIR/var/tmp/SQL_LOAD_MB-3-0' INTO table t1;
+SET TIMESTAMP=1000000000;
+load data LOCAL INFILE 'MYSQL_TEST_DIR/var/tmp/SQL_LOAD_MB-4-0' INTO table t1;
 ROLLBACK;
 /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
 
@@ -91,11 +93,14 @@
 SET INSERT_ID=1;
 SET TIMESTAMP=1000000000;
 insert into t2 values ();
-LOAD DATA LOCAL INFILE 'MYSQL_TEST_DIR/var/tmp/words.dat-1-1' INTO TABLE `t1` FIELDS
TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY ''
(word);
-LOAD DATA LOCAL INFILE 'MYSQL_TEST_DIR/var/tmp/words.dat-2-1' INTO TABLE `t1` FIELDS
TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY ''
(word);
-LOAD DATA LOCAL INFILE 'MYSQL_TEST_DIR/var/tmp/words.dat-3-1' INTO TABLE `t1` FIELDS
TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY ''
(word);
-LOAD DATA LOCAL INFILE 'MYSQL_TEST_DIR/var/tmp/words.dat-4-1' INTO TABLE `t1` FIELDS
TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY ''
(word);
-LOAD DATA LOCAL INFILE 'MYSQL_TEST_DIR/var/tmp/words.dat-5-1' INTO TABLE `t1` FIELDS
TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY ''
(word);
+SET TIMESTAMP=1000000000;
+load data LOCAL INFILE 'MYSQL_TEST_DIR/var/tmp/SQL_LOAD_MB-1-2' INTO table t1;
+SET TIMESTAMP=1000000000;
+load data LOCAL INFILE 'MYSQL_TEST_DIR/var/tmp/SQL_LOAD_MB-2-2' INTO table t1;
+SET TIMESTAMP=1000000000;
+load data LOCAL INFILE 'MYSQL_TEST_DIR/var/tmp/SQL_LOAD_MB-3-2' INTO table t1;
+SET TIMESTAMP=1000000000;
+load data LOCAL INFILE 'MYSQL_TEST_DIR/var/tmp/SQL_LOAD_MB-4-2' INTO table t1;
 ROLLBACK;
 /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
 

--- 1.19/mysql-test/r/rpl_until.result	Wed Feb 16 19:33:52 2005
+++ 1.20/mysql-test/r/rpl_until.result	Wed Mar 16 04:32:41 2005
@@ -14,15 +14,15 @@
 drop table t2;
 show binlog events;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	4	Format_desc	1	96	Server ver: VERSION, Binlog ver: 4
-master-bin.000001	96	Query	1	218	use `test`; create table t1(n int not null
auto_increment primary key)
-master-bin.000001	218	Query	1	319	use `test`; insert into t1 values (1),(2),(3),(4)
-master-bin.000001	319	Query	1	396	use `test`; drop table t1
-master-bin.000001	396	Query	1	518	use `test`; create table t2(n int not null
auto_increment primary key)
-master-bin.000001	518	Query	1	611	use `test`; insert into t2 values (1),(2)
-master-bin.000001	611	Query	1	704	use `test`; insert into t2 values (3),(4)
-master-bin.000001	704	Query	1	781	use `test`; drop table t2
-start slave until master_log_file='master-bin.000001', master_log_pos=304;
+master-bin.000001	4	Format_desc	1	98	Server ver: VERSION, Binlog ver: 4
+master-bin.000001	98	Query	1	220	use `test`; create table t1(n int not null
auto_increment primary key)
+master-bin.000001	220	Query	1	321	use `test`; insert into t1 values (1),(2),(3),(4)
+master-bin.000001	321	Query	1	398	use `test`; drop table t1
+master-bin.000001	398	Query	1	520	use `test`; create table t2(n int not null
auto_increment primary key)
+master-bin.000001	520	Query	1	613	use `test`; insert into t2 values (1),(2)
+master-bin.000001	613	Query	1	706	use `test`; insert into t2 values (3),(4)
+master-bin.000001	706	Query	1	783	use `test`; drop table t2
+start slave until master_log_file='master-bin.000001', master_log_pos=321;
 select * from t1;
 n
 1
@@ -31,7 +31,7 @@
 4
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_MYPORT	1	master-bin.000001	781	slave-relay-bin.000004	#	master-bin.000001	Yes	No							0		0	319	#	Master	master-bin.000001	304	No						#
+#	127.0.0.1	root	MASTER_MYPORT	1	master-bin.000001	783	slave-relay-bin.000004	#	master-bin.000001	Yes	No							0		0	321	#	Master	master-bin.000001	321	No						#
 start slave until master_log_file='master-no-such-bin.000001', master_log_pos=291;
 select * from t1;
 n
@@ -41,21 +41,21 @@
 4
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_MYPORT	1	master-bin.000001	781	slave-relay-bin.000004	#	master-bin.000001	Yes	No							0		0	319	#	Master	master-no-such-bin.000001	291	No						#
-start slave until relay_log_file='slave-relay-bin.000004', relay_log_pos=710;
+#	127.0.0.1	root	MASTER_MYPORT	1	master-bin.000001	783	slave-relay-bin.000004	#	master-bin.000001	Yes	No							0		0	321	#	Master	master-no-such-bin.000001	291	No						#
+start slave until relay_log_file='slave-relay-bin.000004', relay_log_pos=751;
 select * from t2;
 n
 1
 2
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_MYPORT	1	master-bin.000001	781	slave-relay-bin.000004	#	master-bin.000001	Yes	No							0		0	611	#	Relay	slave-relay-bin.000004	710	No						#
+#	127.0.0.1	root	MASTER_MYPORT	1	master-bin.000001	783	slave-relay-bin.000004	#	master-bin.000001	Yes	No							0		0	613	#	Relay	slave-relay-bin.000004	751	No						#
 start slave;
 stop slave;
-start slave until master_log_file='master-bin.000001', master_log_pos=710;
+start slave until master_log_file='master-bin.000001', master_log_pos=783;
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_MYPORT	1	master-bin.000001	781	slave-relay-bin.000004	#	master-bin.000001	Yes	No							0		0	781	#	Master	master-bin.000001	710	No						#
+#	127.0.0.1	root	MASTER_MYPORT	1	master-bin.000001	783	slave-relay-bin.000004	#	master-bin.000001	Yes	No							0		0	783	#	Master	master-bin.000001	783	No						#
 start slave until master_log_file='master-bin', master_log_pos=561;
 ERROR HY000: Incorrect parameter or combination of parameters for START SLAVE UNTIL
 start slave until master_log_file='master-bin.000001', master_log_pos=561,
relay_log_pos=12;
@@ -67,6 +67,6 @@
 start slave until relay_log_file='slave-relay-bin.000002', master_log_pos=561;
 ERROR HY000: Incorrect parameter or combination of parameters for START SLAVE UNTIL
 start slave sql_thread;
-start slave until master_log_file='master-bin.000001', master_log_pos=710;
+start slave until master_log_file='master-bin.000001', master_log_pos=783;
 Warnings:
 Note	1254	Slave is already running
--- New file ---
+++ mysql-test/std_data/loaddata5.dat	05/03/16 04:32:42
1          2          
3          4          
5          6          


--- 1.14/mysql-test/t/mysqlbinlog.test	Mon Feb 14 23:49:58 2005
+++ 1.15/mysql-test/t/mysqlbinlog.test	Wed Mar 16 04:32:41 2005
@@ -24,7 +24,6 @@
 load data infile '../../std_data/words.dat' into table t1;
 load data infile '../../std_data/words.dat' into table t1;
 load data infile '../../std_data/words.dat' into table t1;
-load data infile '../../std_data/words.dat' into table t1;
 # simple query to show more in second binlog
 insert into t1 values ("Alas");
 flush logs;
@@ -61,7 +60,7 @@
 select "--- --position --" as "";
 --enable_query_log
 --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
---exec $MYSQL_BINLOG --short-form --local-load=$MYSQL_TEST_DIR/var/tmp/ --position=119
$MYSQL_TEST_DIR/var/log/master-bin.000002
+--exec $MYSQL_BINLOG --short-form --local-load=$MYSQL_TEST_DIR/var/tmp/ --position=232
$MYSQL_TEST_DIR/var/log/master-bin.000002
 
 # These are tests for remote binlog.
 # They should return the same as previous test.
@@ -93,7 +92,7 @@
 select "--- --position --" as "";
 --enable_query_log
 --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
---exec $MYSQL_BINLOG --short-form --local-load=$MYSQL_TEST_DIR/var/tmp/
--read-from-remote-server --position=119 --user=root --host=127.0.0.1
--port=$MASTER_MYPORT master-bin.000002
+--exec $MYSQL_BINLOG --short-form --local-load=$MYSQL_TEST_DIR/var/tmp/
--read-from-remote-server --position=232 --user=root --host=127.0.0.1
--port=$MASTER_MYPORT master-bin.000002
 
 # Bug#7853 (mysqlbinlog does not accept input from stdin)
 --disable_query_log

--- 1.13/mysql-test/t/rpl_until.test	Mon Dec  6 03:05:21 2004
+++ 1.14/mysql-test/t/rpl_until.test	Wed Mar 16 04:32:41 2005
@@ -24,7 +24,7 @@
 
 # try to replicate all queries until drop of t1
 connection slave;
-start slave until master_log_file='master-bin.000001', master_log_pos=304;
+start slave until master_log_file='master-bin.000001', master_log_pos=321;
 sleep 2;
 # here table should be still not deleted
 select * from t1;
@@ -42,7 +42,7 @@
 show slave status;
 
 # try replicate all until second insert to t2;
-start slave until relay_log_file='slave-relay-bin.000004', relay_log_pos=710;
+start slave until relay_log_file='slave-relay-bin.000004', relay_log_pos=751;
 sleep 4;
 select * from t2;
 --replace_result $MASTER_MYPORT MASTER_MYPORT
@@ -58,7 +58,7 @@
 stop slave;
 
 # this should stop immediately as we are already there
-start slave until master_log_file='master-bin.000001', master_log_pos=710;
+start slave until master_log_file='master-bin.000001', master_log_pos=783;
 # 2 is not enough when running with valgrind
 real_sleep 4
 # here the sql slave thread should be stopped
@@ -77,6 +77,6 @@
 start slave until relay_log_file='slave-relay-bin.000002';
 --error 1277
 start slave until relay_log_file='slave-relay-bin.000002', master_log_pos=561;
-
+# Warning should be given for second command
 start slave sql_thread;
-start slave until master_log_file='master-bin.000001', master_log_pos=710;
+start slave until master_log_file='master-bin.000001', master_log_pos=783;

--- 1.13/mysql-test/r/rpl_user_variables.result	Wed Feb 16 19:33:52 2005
+++ 1.14/mysql-test/r/rpl_user_variables.result	Wed Mar 16 04:32:41 2005
@@ -76,35 +76,35 @@
 NULL
 NULL
 NULL
-show binlog events from 96;
+show binlog events from 98;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-slave-bin.000001	96	Query	1	187	use `test`; create table t1(n char(30))
-slave-bin.000001	187	User var	2	230	@`i1`=12345678901234
-slave-bin.000001	230	User var	2	273	@`i2`=-12345678901234
-slave-bin.000001	273	User var	2	316	@`i3`=0
-slave-bin.000001	316	User var	2	359	@`i4`=-1
-slave-bin.000001	359	Query	1	471	use `test`; insert into t1 values (@i1), (@i2), (@i3),
(@i4)
-slave-bin.000001	471	User var	2	510	@`r1`=12.5
-slave-bin.000001	510	User var	2	549	@`r2`=-12.5
-slave-bin.000001	549	Query	1	647	use `test`; insert into t1 values (@r1), (@r2)
-slave-bin.000001	647	User var	2	696	@`s1`=_latin1 0x5468697320697320612074657374 COLLATE
latin1_swedish_ci
-slave-bin.000001	696	User var	2	731	@`s2`=_latin1 "" COLLATE latin1_swedish_ci
-slave-bin.000001	731	User var	2	773	@`s3`=_latin1 0x61626327646566 COLLATE
latin1_swedish_ci
-slave-bin.000001	773	User var	2	815	@`s4`=_latin1 0x6162635C646566 COLLATE
latin1_swedish_ci
-slave-bin.000001	815	User var	2	857	@`s5`=_latin1 0x61626327646566 COLLATE
latin1_swedish_ci
-slave-bin.000001	857	Query	1	976	use `test`; insert into t1 values (@s1), (@s2), (@s3),
(@s4), (@s5)
-slave-bin.000001	976	User var	2	1002	@`n1`=NULL
-slave-bin.000001	1002	Query	1	1093	use `test`; insert into t1 values (@n1)
-slave-bin.000001	1093	User var	2	1119	@`n2`=NULL
-slave-bin.000001	1119	Query	1	1210	use `test`; insert into t1 values (@n2)
-slave-bin.000001	1210	Query	1	1327	use `test`; insert into t1 values (@a:=0), (@a:=@a+1),
(@a:=@a+1)
-slave-bin.000001	1327	User var	2	1369	@`a`=2
-slave-bin.000001	1369	Query	1	1470	use `test`; insert into t1 values (@a+(@b:=@a+1))
-slave-bin.000001	1470	User var	2	1507	@`q`=_latin1 0x616263 COLLATE latin1_swedish_ci
-slave-bin.000001	1507	Query	1	1640	use `test`; insert t1 values (@q), (@q:=concat(@q,
'n1')), (@q:=concat(@q, 'n2'))
-slave-bin.000001	1640	User var	2	1682	@`a`=5
-slave-bin.000001	1682	Query	1	1777	use `test`; insert into t1 values (@a),(@a)
-slave-bin.000001	1777	User var	2	1802	@`a`=NULL
-slave-bin.000001	1802	Query	1	1904	use `test`; insert into t1 values (@a),(@a),(@a*5)
+slave-bin.000001	#	Query	1	#	use `test`; create table t1(n char(30))
+slave-bin.000001	#	User var	2	#	@`i1`=12345678901234
+slave-bin.000001	#	User var	2	#	@`i2`=-12345678901234
+slave-bin.000001	#	User var	2	#	@`i3`=0
+slave-bin.000001	#	User var	2	#	@`i4`=-1
+slave-bin.000001	#	Query	1	#	use `test`; insert into t1 values (@i1), (@i2), (@i3), (@i4)
+slave-bin.000001	#	User var	2	#	@`r1`=12.5
+slave-bin.000001	#	User var	2	#	@`r2`=-12.5
+slave-bin.000001	#	Query	1	#	use `test`; insert into t1 values (@r1), (@r2)
+slave-bin.000001	#	User var	2	#	@`s1`=_latin1 0x5468697320697320612074657374 COLLATE
latin1_swedish_ci
+slave-bin.000001	#	User var	2	#	@`s2`=_latin1 "" COLLATE latin1_swedish_ci
+slave-bin.000001	#	User var	2	#	@`s3`=_latin1 0x61626327646566 COLLATE latin1_swedish_ci
+slave-bin.000001	#	User var	2	#	@`s4`=_latin1 0x6162635C646566 COLLATE latin1_swedish_ci
+slave-bin.000001	#	User var	2	#	@`s5`=_latin1 0x61626327646566 COLLATE latin1_swedish_ci
+slave-bin.000001	#	Query	1	#	use `test`; insert into t1 values (@s1), (@s2), (@s3),
(@s4), (@s5)
+slave-bin.000001	#	User var	2	#	@`n1`=NULL
+slave-bin.000001	#	Query	1	#	use `test`; insert into t1 values (@n1)
+slave-bin.000001	#	User var	2	#	@`n2`=NULL
+slave-bin.000001	#	Query	1	#	use `test`; insert into t1 values (@n2)
+slave-bin.000001	#	Query	1	#	use `test`; insert into t1 values (@a:=0), (@a:=@a+1),
(@a:=@a+1)
+slave-bin.000001	#	User var	2	#	@`a`=2
+slave-bin.000001	#	Query	1	#	use `test`; insert into t1 values (@a+(@b:=@a+1))
+slave-bin.000001	#	User var	2	#	@`q`=_latin1 0x616263 COLLATE latin1_swedish_ci
+slave-bin.000001	#	Query	1	#	use `test`; insert t1 values (@q), (@q:=concat(@q, 'n1')),
(@q:=concat(@q, 'n2'))
+slave-bin.000001	#	User var	2	#	@`a`=5
+slave-bin.000001	#	Query	1	#	use `test`; insert into t1 values (@a),(@a)
+slave-bin.000001	#	User var	2	#	@`a`=NULL
+slave-bin.000001	#	Query	1	#	use `test`; insert into t1 values (@a),(@a),(@a*5)
 drop table t1;
 stop slave;

--- 1.10/mysql-test/t/rpl_user_variables.test	Mon Feb 14 23:49:58 2005
+++ 1.11/mysql-test/t/rpl_user_variables.test	Wed Mar 16 04:32:41 2005
@@ -46,7 +46,8 @@
 connection slave;
 sync_with_master;
 select * from t1;
-show binlog events from 96;
+--replace_column 2 # 5 #
+show binlog events from 98;
 connection master;
 drop table t1;
 save_master_pos;

--- 1.19/mysql-test/r/mix_innodb_myisam_binlog.result	Wed Mar  2 19:52:26 2005
+++ 1.20/mysql-test/r/mix_innodb_myisam_binlog.result	Wed Mar 16 04:32:40 2005
@@ -6,12 +6,12 @@
 insert into t1 values(1);
 insert into t2 select * from t1;
 commit;
-show binlog events from 96;
+show binlog events from 98;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	96	Query	1	#	use `test`; BEGIN
-master-bin.000001	165	Query	1	#	use `test`; insert into t1 values(1)
-master-bin.000001	253	Query	1	#	use `test`; insert into t2 select * from t1
-master-bin.000001	348	Xid	1	#	COMMIT /* xid=7 */
+master-bin.000001	98	Query	1	#	use `test`; BEGIN
+master-bin.000001	167	Query	1	#	use `test`; insert into t1 values(1)
+master-bin.000001	255	Query	1	#	use `test`; insert into t2 select * from t1
+master-bin.000001	350	Xid	1	#	COMMIT /* xid=7 */
 delete from t1;
 delete from t2;
 reset master;
@@ -21,12 +21,12 @@
 rollback;
 Warnings:
 Warning	1196	Some non-transactional changed tables couldn't be rolled back
-show binlog events from 96;
+show binlog events from 98;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	96	Query	1	#	use `test`; BEGIN
-master-bin.000001	165	Query	1	#	use `test`; insert into t1 values(2)
-master-bin.000001	253	Query	1	#	use `test`; insert into t2 select * from t1
-master-bin.000001	348	Query	1	#	use `test`; ROLLBACK
+master-bin.000001	98	Query	1	#	use `test`; BEGIN
+master-bin.000001	167	Query	1	#	use `test`; insert into t1 values(2)
+master-bin.000001	255	Query	1	#	use `test`; insert into t2 select * from t1
+master-bin.000001	350	Query	1	#	use `test`; ROLLBACK
 delete from t1;
 delete from t2;
 reset master;
@@ -39,15 +39,15 @@
 Warnings:
 Warning	1196	Some non-transactional changed tables couldn't be rolled back
 commit;
-show binlog events from 96;
+show binlog events from 98;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	96	Query	1	#	use `test`; BEGIN
-master-bin.000001	165	Query	1	#	use `test`; insert into t1 values(3)
-master-bin.000001	253	Query	1	#	use `test`; savepoint my_savepoint
-master-bin.000001	339	Query	1	#	use `test`; insert into t1 values(4)
-master-bin.000001	427	Query	1	#	use `test`; insert into t2 select * from t1
-master-bin.000001	522	Query	1	#	use `test`; rollback to savepoint my_savepoint
-master-bin.000001	620	Xid	1	#	COMMIT /* xid=24 */
+master-bin.000001	98	Query	1	#	use `test`; BEGIN
+master-bin.000001	167	Query	1	#	use `test`; insert into t1 values(3)
+master-bin.000001	255	Query	1	#	use `test`; savepoint my_savepoint
+master-bin.000001	341	Query	1	#	use `test`; insert into t1 values(4)
+master-bin.000001	429	Query	1	#	use `test`; insert into t2 select * from t1
+master-bin.000001	524	Query	1	#	use `test`; rollback to savepoint my_savepoint
+master-bin.000001	622	Xid	1	#	COMMIT /* xid=24 */
 delete from t1;
 delete from t2;
 reset master;
@@ -65,16 +65,16 @@
 a
 5
 7
-show binlog events from 96;
+show binlog events from 98;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	96	Query	1	#	use `test`; BEGIN
-master-bin.000001	165	Query	1	#	use `test`; insert into t1 values(5)
-master-bin.000001	253	Query	1	#	use `test`; savepoint my_savepoint
-master-bin.000001	339	Query	1	#	use `test`; insert into t1 values(6)
-master-bin.000001	427	Query	1	#	use `test`; insert into t2 select * from t1
-master-bin.000001	522	Query	1	#	use `test`; rollback to savepoint my_savepoint
-master-bin.000001	620	Query	1	#	use `test`; insert into t1 values(7)
-master-bin.000001	708	Xid	1	#	COMMIT /* xid=36 */
+master-bin.000001	98	Query	1	#	use `test`; BEGIN
+master-bin.000001	167	Query	1	#	use `test`; insert into t1 values(5)
+master-bin.000001	255	Query	1	#	use `test`; savepoint my_savepoint
+master-bin.000001	341	Query	1	#	use `test`; insert into t1 values(6)
+master-bin.000001	429	Query	1	#	use `test`; insert into t2 select * from t1
+master-bin.000001	524	Query	1	#	use `test`; rollback to savepoint my_savepoint
+master-bin.000001	622	Query	1	#	use `test`; insert into t1 values(7)
+master-bin.000001	710	Xid	1	#	COMMIT /* xid=36 */
 delete from t1;
 delete from t2;
 reset master;
@@ -87,43 +87,43 @@
 select get_lock("a",10);
 get_lock("a",10)
 1
-show binlog events from 96;
+show binlog events from 98;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	96	Query	1	#	use `test`; BEGIN
-master-bin.000001	165	Query	1	#	use `test`; insert into t1 values(8)
-master-bin.000001	253	Query	1	#	use `test`; insert into t2 select * from t1
-master-bin.000001	348	Query	1	#	use `test`; ROLLBACK
+master-bin.000001	98	Query	1	#	use `test`; BEGIN
+master-bin.000001	167	Query	1	#	use `test`; insert into t1 values(8)
+master-bin.000001	255	Query	1	#	use `test`; insert into t2 select * from t1
+master-bin.000001	350	Query	1	#	use `test`; ROLLBACK
 delete from t1;
 delete from t2;
 reset master;
 insert into t1 values(9);
 insert into t2 select * from t1;
-show binlog events from 96;
+show binlog events from 98;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	96	Query	1	#	use `test`; insert into t1 values(9)
-master-bin.000001	184	Xid	1	#	COMMIT /* xid=59 */
-master-bin.000001	211	Query	1	#	use `test`; insert into t2 select * from t1
+master-bin.000001	98	Query	1	#	use `test`; insert into t1 values(9)
+master-bin.000001	186	Xid	1	#	COMMIT /* xid=59 */
+master-bin.000001	213	Query	1	#	use `test`; insert into t2 select * from t1
 delete from t1;
 delete from t2;
 reset master;
 insert into t1 values(10);
 begin;
 insert into t2 select * from t1;
-show binlog events from 96;
+show binlog events from 98;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	96	Query	1	#	use `test`; insert into t1 values(10)
-master-bin.000001	185	Xid	1	#	COMMIT /* xid=65 */
-master-bin.000001	212	Query	1	#	use `test`; insert into t2 select * from t1
+master-bin.000001	98	Query	1	#	use `test`; insert into t1 values(10)
+master-bin.000001	187	Xid	1	#	COMMIT /* xid=65 */
+master-bin.000001	214	Query	1	#	use `test`; insert into t2 select * from t1
 insert into t1 values(11);
 commit;
-show binlog events from 96;
+show binlog events from 98;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	96	Query	1	#	use `test`; insert into t1 values(10)
-master-bin.000001	185	Xid	1	#	COMMIT /* xid=65 */
-master-bin.000001	212	Query	1	#	use `test`; insert into t2 select * from t1
-master-bin.000001	307	Query	1	#	use `test`; BEGIN
-master-bin.000001	376	Query	1	#	use `test`; insert into t1 values(11)
-master-bin.000001	465	Xid	1	#	COMMIT /* xid=67 */
+master-bin.000001	98	Query	1	#	use `test`; insert into t1 values(10)
+master-bin.000001	187	Xid	1	#	COMMIT /* xid=65 */
+master-bin.000001	214	Query	1	#	use `test`; insert into t2 select * from t1
+master-bin.000001	309	Query	1	#	use `test`; BEGIN
+master-bin.000001	378	Query	1	#	use `test`; insert into t1 values(11)
+master-bin.000001	467	Xid	1	#	COMMIT /* xid=67 */
 alter table t2 engine=INNODB;
 delete from t1;
 delete from t2;
@@ -132,12 +132,12 @@
 insert into t1 values(12);
 insert into t2 select * from t1;
 commit;
-show binlog events from 96;
+show binlog events from 98;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	96	Query	1	#	use `test`; BEGIN
-master-bin.000001	165	Query	1	#	use `test`; insert into t1 values(12)
-master-bin.000001	254	Query	1	#	use `test`; insert into t2 select * from t1
-master-bin.000001	349	Xid	1	#	COMMIT /* xid=77 */
+master-bin.000001	98	Query	1	#	use `test`; BEGIN
+master-bin.000001	167	Query	1	#	use `test`; insert into t1 values(12)
+master-bin.000001	256	Query	1	#	use `test`; insert into t2 select * from t1
+master-bin.000001	351	Xid	1	#	COMMIT /* xid=77 */
 delete from t1;
 delete from t2;
 reset master;
@@ -145,7 +145,7 @@
 insert into t1 values(13);
 insert into t2 select * from t1;
 rollback;
-show binlog events from 96;
+show binlog events from 98;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 delete from t1;
 delete from t2;
@@ -157,11 +157,11 @@
 insert into t2 select * from t1;
 rollback to savepoint my_savepoint;
 commit;
-show binlog events from 96;
+show binlog events from 98;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	96	Query	1	#	use `test`; BEGIN
-master-bin.000001	165	Query	1	#	use `test`; insert into t1 values(14)
-master-bin.000001	254	Xid	1	#	COMMIT /* xid=93 */
+master-bin.000001	98	Query	1	#	use `test`; BEGIN
+master-bin.000001	167	Query	1	#	use `test`; insert into t1 values(14)
+master-bin.000001	256	Xid	1	#	COMMIT /* xid=93 */
 delete from t1;
 delete from t2;
 reset master;
@@ -177,12 +177,12 @@
 a
 16
 18
-show binlog events from 96;
+show binlog events from 98;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	96	Query	1	#	use `test`; BEGIN
-master-bin.000001	165	Query	1	#	use `test`; insert into t1 values(16)
-master-bin.000001	254	Query	1	#	use `test`; insert into t1 values(18)
-master-bin.000001	343	Xid	1	#	COMMIT /* xid=104 */
+master-bin.000001	98	Query	1	#	use `test`; BEGIN
+master-bin.000001	167	Query	1	#	use `test`; insert into t1 values(16)
+master-bin.000001	256	Query	1	#	use `test`; insert into t1 values(18)
+master-bin.000001	345	Xid	1	#	COMMIT /* xid=104 */
 delete from t1;
 delete from t2;
 alter table t2 type=MyISAM;

--- 1.15/mysql-test/r/rpl_change_master.result	Wed Mar  2 19:52:26 2005
+++ 1.16/mysql-test/r/rpl_change_master.result	Wed Mar 16 04:32:40 2005
@@ -13,11 +13,11 @@
 stop slave;
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_MYPORT	1	master-bin.000001	358	#	#	master-bin.000001	No	No							0		0	182	#	None		0	No						#
+#	127.0.0.1	root	MASTER_MYPORT	1	master-bin.000001	360	#	#	master-bin.000001	No	No							0		0	184	#	None		0	No						#
 change master to master_user='root';
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_MYPORT	1	master-bin.000001	182	#	#	master-bin.000001	No	No							0		0	182	#	None		0	No						#
+#	127.0.0.1	root	MASTER_MYPORT	1	master-bin.000001	184	#	#	master-bin.000001	No	No							0		0	184	#	None		0	No						#
 start slave;
 select * from t1;
 n

--- 1.17/mysql-test/r/rpl_charset.result	Wed Feb 23 21:47:51 2005
+++ 1.18/mysql-test/r/rpl_charset.result	Wed Mar 16 04:32:40 2005
@@ -103,7 +103,7 @@
 1	cp850_general_ci
 drop database mysqltest2;
 drop database mysqltest3;
-show binlog events from 96;
+show binlog events from 98;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	1	#	drop database if exists mysqltest2
 master-bin.000001	#	Query	1	#	drop database if exists mysqltest3

--- 1.2/mysql-test/r/rpl_deadlock.result	Wed Mar  2 19:52:26 2005
+++ 1.3/mysql-test/r/rpl_deadlock.result	Wed Mar 16 04:32:40 2005
@@ -39,9 +39,9 @@
 22
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_MYPORT	1	master-bin.000001	19116	#	#	master-bin.000001	Yes	Yes							0		0	19116	#	None		0	No						#
+#	127.0.0.1	root	MASTER_MYPORT	1	master-bin.000001	19118	#	#	master-bin.000001	Yes	Yes							0		0	19118	#	None		0	No						#
 stop slave;
-change master to master_log_pos=534;
+change master to master_log_pos=536;
 begin;
 select * from t2 for update;
 a
@@ -57,10 +57,10 @@
 22
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_MYPORT	1	master-bin.000001	19116	#	#	master-bin.000001	Yes	Yes							0		0	19116	#	None		0	No						#
+#	127.0.0.1	root	MASTER_MYPORT	1	master-bin.000001	19118	#	#	master-bin.000001	Yes	Yes							0		0	19118	#	None		0	No						#
 set global max_relay_log_size=0;
 stop slave;
-change master to master_log_pos=534;
+change master to master_log_pos=536;
 begin;
 select * from t2 for update;
 a
@@ -77,5 +77,5 @@
 22
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_MYPORT	1	master-bin.000001	19116	#	#	master-bin.000001	Yes	Yes							0		0	19116	#	None		0	No						#
+#	127.0.0.1	root	MASTER_MYPORT	1	master-bin.000001	19118	#	#	master-bin.000001	Yes	Yes							0		0	19118	#	None		0	No						#
 drop table t1,t2;

--- 1.18/mysql-test/r/rpl_error_ignored_table.result	Wed Feb 16 19:33:52 2005
+++ 1.19/mysql-test/r/rpl_error_ignored_table.result	Wed Mar 16 04:32:40 2005
@@ -9,7 +9,7 @@
 ERROR 23000: Duplicate entry '1' for key 1
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	288	#	#	master-bin.000001	Yes	Yes				test.t3,test.t1,test.t2			0		0	288	#	None		0	No						#
+#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	290	#	#	master-bin.000001	Yes	Yes				test.t3,test.t1,test.t2			0		0	290	#	None		0	No						#
 show tables like 't1';
 Tables_in_test (t1)
 drop table t1;
@@ -26,14 +26,14 @@
 0
 kill @id;
 drop table t2,t3;
-show binlog events from 96;
+show binlog events from 98;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	96	Query	1	195	use `test`; create table t1 (a int primary key)
-master-bin.000001	195	Query	1	288	use `test`; insert into t1 values (1),(1)
-master-bin.000001	288	Query	1	365	use `test`; drop table t1
-master-bin.000001	365	Query	1	464	use `test`; create table t2 (a int primary key)
-master-bin.000001	464	Query	1	552	use `test`; insert into t2 values(1)
-master-bin.000001	552	Query	1	640	use `test`; create table t3 (id int)
-master-bin.000001	640	Query	1	742	use `test`; insert into t3 values(connection_id())
-master-bin.000001	742	Query	1	862	use `test`; update t2 set a = a + 1 +
get_lock('crash_lock%20C', 10)
-master-bin.000001	862	Query	1	942	use `test`; drop table t2,t3
+master-bin.000001	#	Query	1	#	use `test`; create table t1 (a int primary key)
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values (1),(1)
+master-bin.000001	#	Query	1	#	use `test`; drop table t1
+master-bin.000001	#	Query	1	#	use `test`; create table t2 (a int primary key)
+master-bin.000001	#	Query	1	#	use `test`; insert into t2 values(1)
+master-bin.000001	#	Query	1	#	use `test`; create table t3 (id int)
+master-bin.000001	#	Query	1	#	use `test`; insert into t3 values(connection_id())
+master-bin.000001	#	Query	1	#	use `test`; update t2 set a = a + 1 +
get_lock('crash_lock%20C', 10)
+master-bin.000001	#	Query	1	#	use `test`; drop table t2,t3

--- 1.10/mysql-test/r/rpl_flush_tables.result	Wed Feb 16 19:33:52 2005
+++ 1.11/mysql-test/r/rpl_flush_tables.result	Wed Mar 16 04:32:40 2005
@@ -14,27 +14,27 @@
 flush no_write_to_binlog tables;
 show binlog events;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	4	Format_desc	1	96	Server ver: SERVER_VERSION, Binlog ver: 4
-master-bin.000001	96	Query	1	183	use `test`; create table t1 (a int)
-master-bin.000001	183	Query	1	273	use `test`; insert into t1 values (10)
-master-bin.000001	273	Query	1	360	use `test`; create table t2 (a int)
-master-bin.000001	360	Query	1	470	use `test`; create table t3 (a int) engine=merge
union(t1)
-master-bin.000001	470	Query	1	557	use `test`; create table t4 (a int)
-master-bin.000001	557	Query	1	652	use `test`; insert into t4 select * from t3
-master-bin.000001	652	Query	1	747	use `test`; rename table t1 to t5, t2 to t1
+master-bin.000001	#	Format_desc	1	#	Server ver: SERVER_VERSION, Binlog ver: 4
+master-bin.000001	#	Query	1	#	use `test`; create table t1 (a int)
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values (10)
+master-bin.000001	#	Query	1	#	use `test`; create table t2 (a int)
+master-bin.000001	#	Query	1	#	use `test`; create table t3 (a int) engine=merge union(t1)
+master-bin.000001	#	Query	1	#	use `test`; create table t4 (a int)
+master-bin.000001	#	Query	1	#	use `test`; insert into t4 select * from t3
+master-bin.000001	#	Query	1	#	use `test`; rename table t1 to t5, t2 to t1
 select * from t3;
 a
 flush tables;
 show binlog events;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	4	Format_desc	1	96	Server ver: SERVER_VERSION, Binlog ver: 4
-master-bin.000001	96	Query	1	183	use `test`; create table t1 (a int)
-master-bin.000001	183	Query	1	273	use `test`; insert into t1 values (10)
-master-bin.000001	273	Query	1	360	use `test`; create table t2 (a int)
-master-bin.000001	360	Query	1	470	use `test`; create table t3 (a int) engine=merge
union(t1)
-master-bin.000001	470	Query	1	557	use `test`; create table t4 (a int)
-master-bin.000001	557	Query	1	652	use `test`; insert into t4 select * from t3
-master-bin.000001	652	Query	1	747	use `test`; rename table t1 to t5, t2 to t1
-master-bin.000001	747	Query	1	823	use `test`; flush tables
+master-bin.000001	#	Format_desc	1	#	Server ver: SERVER_VERSION, Binlog ver: 4
+master-bin.000001	#	Query	1	#	use `test`; create table t1 (a int)
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values (10)
+master-bin.000001	#	Query	1	#	use `test`; create table t2 (a int)
+master-bin.000001	#	Query	1	#	use `test`; create table t3 (a int) engine=merge union(t1)
+master-bin.000001	#	Query	1	#	use `test`; create table t4 (a int)
+master-bin.000001	#	Query	1	#	use `test`; insert into t4 select * from t3
+master-bin.000001	#	Query	1	#	use `test`; rename table t1 to t5, t2 to t1
+master-bin.000001	#	Query	1	#	use `test`; flush tables
 select * from t3;
 a

--- 1.12/mysql-test/r/rpl_loaddata_rule_m.result	Wed Feb 16 19:33:52 2005
+++ 1.13/mysql-test/r/rpl_loaddata_rule_m.result	Wed Mar 16 04:32:40 2005
@@ -10,8 +10,10 @@
 create table t1(a int, b int, unique(b));
 use mysqltest;
 load data infile '../../std_data/rpl_loaddata.dat' into table test.t1;
-show binlog events from 96;
+show binlog events from 98;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	96	Query	1	198	drop database if exists mysqltest
-master-bin.000001	198	Query	1	292	create database mysqltest
+master-bin.000001	#	Query	1	#	drop database if exists mysqltest
+master-bin.000001	#	Query	1	#	create database mysqltest
+master-bin.000001	#	Begin_load_query	1	#	;file_id=1;block_len=12
+master-bin.000001	#	Execute_load_query	1	#	use `mysqltest`; load data infile
'../../std_data/rpl_loaddata.dat' into table test.t1 ;file_id=1
 drop database mysqltest;

--- 1.6/mysql-test/r/rpl_loaddata_rule_s.result	Sun Jan 16 15:16:10 2005
+++ 1.7/mysql-test/r/rpl_loaddata_rule_s.result	Wed Mar 16 04:32:40 2005
@@ -10,5 +10,5 @@
 select count(*) from t1;
 count(*)
 2
-show binlog events from 96;
+show binlog events from 98;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info

--- 1.18/mysql-test/r/rpl_max_relay_size.result	Wed Feb 16 19:33:52 2005
+++ 1.19/mysql-test/r/rpl_max_relay_size.result	Wed Mar 16 04:32:40 2005
@@ -16,7 +16,7 @@
 start slave;
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	73752	#	#	master-bin.000001	Yes	Yes							0		0	73752	#	None		0	No						#
+#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	73754	#	#	master-bin.000001	Yes	Yes							0		0	73754	#	None		0	No						#
 stop slave;
 reset slave;
 set global max_relay_log_size=(5*4096);
@@ -26,7 +26,7 @@
 start slave;
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	73752	#	#	master-bin.000001	Yes	Yes							0		0	73752	#	None		0	No						#
+#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	73754	#	#	master-bin.000001	Yes	Yes							0		0	73754	#	None		0	No						#
 stop slave;
 reset slave;
 set global max_relay_log_size=0;
@@ -36,7 +36,7 @@
 start slave;
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	73752	#	#	master-bin.000001	Yes	Yes							0		0	73752	#	None		0	No						#
+#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	73754	#	#	master-bin.000001	Yes	Yes							0		0	73754	#	None		0	No						#
 stop slave;
 reset slave;
 flush logs;
@@ -49,13 +49,13 @@
 create table t1 (a int);
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	73839	#	#	master-bin.000001	Yes	Yes							0		0	73839	#	None		0	No						#
+#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	73841	#	#	master-bin.000001	Yes	Yes							0		0	73841	#	None		0	No						#
 flush logs;
 drop table t1;
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	73916	#	#	master-bin.000001	Yes	Yes							0		0	73916	#	None		0	No						#
+#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	73918	#	#	master-bin.000001	Yes	Yes							0		0	73918	#	None		0	No						#
 flush logs;
 show master status;
 File	Position	Binlog_Do_DB	Binlog_Ignore_DB
-master-bin.000002	96		
+master-bin.000002	98		

--- 1.3/mysql-test/r/rpl_multi_query.result	Fri Feb 18 16:53:16 2005
+++ 1.4/mysql-test/r/rpl_multi_query.result	Wed Mar 16 04:32:40 2005
@@ -19,7 +19,7 @@
 3
 4
 5
-show binlog events from 96;
+show binlog events from 98;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	1	#	drop database if exists mysqltest
 master-bin.000001	#	Query	1	#	create database mysqltest

--- 1.15/mysql-test/r/rpl_relayrotate.result	Wed Feb 16 19:33:52 2005
+++ 1.16/mysql-test/r/rpl_relayrotate.result	Wed Mar 16 04:32:40 2005
@@ -18,5 +18,5 @@
 8000
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_MYPORT	1	master-bin.000001	743186	#	#	master-bin.000001	Yes	Yes							0		0	743186	#	None		0	No						#
+#	127.0.0.1	root	MASTER_MYPORT	1	master-bin.000001	743188	#	#	master-bin.000001	Yes	Yes							0		0	743188	#	None		0	No						#
 drop table t1;

--- 1.12/mysql-test/r/rpl_reset_slave.result	Sun Jan 16 15:16:10 2005
+++ 1.13/mysql-test/r/rpl_reset_slave.result	Wed Mar 16 04:32:41 2005
@@ -6,12 +6,12 @@
 start slave;
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	96	#	#	master-bin.000001	Yes	Yes							0		0	96	#	None		0	No						#
+#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	98	#	#	master-bin.000001	Yes	Yes							0		0	98	#	None		0	No						#
 stop slave;
 change master to master_user='test';
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	test	MASTER_PORT	1	master-bin.000001	96	#	#	master-bin.000001	No	No							0		0	96	#	None		0	No						#
+#	127.0.0.1	test	MASTER_PORT	1	master-bin.000001	98	#	#	master-bin.000001	No	No							0		0	98	#	None		0	No						#
 reset slave;
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
@@ -19,7 +19,7 @@
 start slave;
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	96	#	#	master-bin.000001	Yes	Yes							0		0	96	#	None		0	No						#
+#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	98	#	#	master-bin.000001	Yes	Yes							0		0	98	#	None		0	No						#
 stop slave;
 reset slave;
 start slave;

--- 1.6/mysql-test/r/rpl_server_id1.result	Sun Jan 16 15:16:10 2005
+++ 1.7/mysql-test/r/rpl_server_id1.result	Wed Mar 16 04:32:41 2005
@@ -10,7 +10,7 @@
 change master to master_port=SLAVE_PORT;
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-	127.0.0.1	root	SLAVE_PORT	1		4	slave-relay-bin.000001	4		No	No						#	0		0	0	96	None		0	No						NULL
+	127.0.0.1	root	SLAVE_PORT	1		4	slave-relay-bin.000001	4		No	No						#	0		0	0	98	None		0	No						NULL
 start slave;
 insert into t1 values (1);
 show status like "slave_running";

--- 1.7/mysql-test/r/rpl_server_id2.result	Sun Jan 16 15:16:10 2005
+++ 1.8/mysql-test/r/rpl_server_id2.result	Wed Mar 16 04:32:41 2005
@@ -10,7 +10,7 @@
 change master to master_port=SLAVE_PORT;
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-	127.0.0.1	root	SLAVE_PORT	1		4	slave-relay-bin.000001	4		No	No						#	0		0	0	96	None		0	No						NULL
+	127.0.0.1	root	SLAVE_PORT	1		4	slave-relay-bin.000001	4		No	No						#	0		0	0	98	None		0	No						NULL
 start slave;
 insert into t1 values (1);
 select * from t1;

--- 1.12/mysql-test/t/mix_innodb_myisam_binlog.test	Thu Feb 17 15:52:07 2005
+++ 1.13/mysql-test/t/mix_innodb_myisam_binlog.test	Wed Mar 16 04:32:41 2005
@@ -27,7 +27,7 @@
 
 --replace_column 5 #
 --replace_result "xid=12" "xid=7"
-show binlog events from 96;
+show binlog events from 98;
 
 delete from t1;
 delete from t2;
@@ -40,7 +40,7 @@
 rollback;
 
 --replace_column 5 #
-show binlog events from 96;
+show binlog events from 98;
 
 delete from t1;
 delete from t2;
@@ -56,7 +56,7 @@
 
 --replace_column 5 #
 --replace_result "xid=45" "xid=24"
-show binlog events from 96;
+show binlog events from 98;
 
 delete from t1;
 delete from t2;
@@ -74,7 +74,7 @@
 
 --replace_column 5 #
 --replace_result "xid=67" "xid=36"
-show binlog events from 96;
+show binlog events from 98;
 
 # and when ROLLBACK is not explicit?
 delete from t1;
@@ -95,7 +95,7 @@
 # logging has been done, we use a user lock.
 select get_lock("a",10);
 --replace_column 5 #
-show binlog events from 96;
+show binlog events from 98;
 
 # and when not in a transact1on?
 delete from t1;
@@ -107,7 +107,7 @@
 
 --replace_column 5 #
 --replace_result "xid=116" "xid=59"
-show binlog events from 96;
+show binlog events from 98;
 
 # Check that when the query updat1ng the MyISAM table is the first in the
 # transaction, we log it immediately.
@@ -120,13 +120,13 @@
 insert into t2 select * from t1;
 --replace_column 5 #
 --replace_result "xid=130" "xid=65"
-show binlog events from 96;
+show binlog events from 98;
 insert into t1 values(11);
 commit;
 
 --replace_column 5 #
 --replace_result "xid=130" "xid=65" "xid=133" "xid=67"
-show binlog events from 96;
+show binlog events from 98;
 
 
 # Check that things work like before this BEGIN/ROLLBACK code was added,
@@ -145,7 +145,7 @@
 
 --replace_column 5 #
 --replace_result "xid=152" "xid=77"
-show binlog events from 96;
+show binlog events from 98;
 
 delete from t1;
 delete from t2;
@@ -157,7 +157,7 @@
 rollback;
 
 --replace_column 5 #
-show binlog events from 96;
+show binlog events from 98;
 
 delete from t1;
 delete from t2;
@@ -173,7 +173,7 @@
 
 --replace_column 5 #
 --replace_result "xid=184" "xid=93"
-show binlog events from 96;
+show binlog events from 98;
 
 delete from t1;
 delete from t2;
@@ -191,7 +191,7 @@
 
 --replace_column 5 #
 --replace_result "xid=205" "xid=104"
-show binlog events from 96;
+show binlog events from 98;
 
 # Test for BUG#5714, where a MyISAM update in the transaction used to
 # release row-level locks in InnoDB

--- 1.3/mysql-test/t/mysqlbinlog2.test	Sun Jan 16 15:16:10 2005
+++ 1.4/mysql-test/t/mysqlbinlog2.test	Wed Mar 16 04:32:41 2005
@@ -46,11 +46,11 @@
 --disable_query_log
 select "--- start-position --" as "";
 --enable_query_log
---exec $MYSQL_BINLOG --short-form --start-position=602
$MYSQL_TEST_DIR/var/log/master-bin.000001 
+--exec $MYSQL_BINLOG --short-form --start-position=604
$MYSQL_TEST_DIR/var/log/master-bin.000001 
 --disable_query_log
 select "--- stop-position --" as "";
 --enable_query_log
---exec $MYSQL_BINLOG --short-form --stop-position=602
$MYSQL_TEST_DIR/var/log/master-bin.000001 
+--exec $MYSQL_BINLOG --short-form --stop-position=604
$MYSQL_TEST_DIR/var/log/master-bin.000001 
 --disable_query_log
 select "--- start-datetime --" as "";
 --enable_query_log
@@ -75,11 +75,11 @@
 --disable_query_log
 select "--- start-position --" as "";
 --enable_query_log
---exec $MYSQL_BINLOG --short-form --start-position=602
$MYSQL_TEST_DIR/var/log/master-bin.000001 $MYSQL_TEST_DIR/var/log/master-bin.000002
+--exec $MYSQL_BINLOG --short-form --start-position=604
$MYSQL_TEST_DIR/var/log/master-bin.000001 $MYSQL_TEST_DIR/var/log/master-bin.000002
 --disable_query_log
 select "--- stop-position --" as "";
 --enable_query_log
---exec $MYSQL_BINLOG --short-form --stop-position=124
$MYSQL_TEST_DIR/var/log/master-bin.000001 $MYSQL_TEST_DIR/var/log/master-bin.000002
+--exec $MYSQL_BINLOG --short-form --stop-position=126
$MYSQL_TEST_DIR/var/log/master-bin.000001 $MYSQL_TEST_DIR/var/log/master-bin.000002
 --disable_query_log
 select "--- start-datetime --" as "";
 --enable_query_log
@@ -102,11 +102,11 @@
 --disable_query_log
 select "--- start-position --" as "";
 --enable_query_log
---exec $MYSQL_BINLOG --short-form --start-position=602 --read-from-remote-server
--user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001 
+--exec $MYSQL_BINLOG --short-form --start-position=604 --read-from-remote-server
--user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001 
 --disable_query_log
 select "--- stop-position --" as "";
 --enable_query_log
---exec $MYSQL_BINLOG --short-form --stop-position=602 --read-from-remote-server
--user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001 
+--exec $MYSQL_BINLOG --short-form --stop-position=604 --read-from-remote-server
--user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001 
 --disable_query_log
 select "--- start-datetime --" as "";
 --enable_query_log
@@ -129,11 +129,11 @@
 --disable_query_log
 select "--- start-position --" as "";
 --enable_query_log
---exec $MYSQL_BINLOG --short-form --start-position=602 --read-from-remote-server
--user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001  master-bin.000002
+--exec $MYSQL_BINLOG --short-form --start-position=604 --read-from-remote-server
--user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001  master-bin.000002
 --disable_query_log
 select "--- stop-position --" as "";
 --enable_query_log
---exec $MYSQL_BINLOG --short-form --stop-position=124 --read-from-remote-server
--user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001  master-bin.000002
+--exec $MYSQL_BINLOG --short-form --stop-position=126 --read-from-remote-server
--user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001  master-bin.000002
 --disable_query_log
 select "--- start-datetime --" as "";
 --enable_query_log

--- 1.14/mysql-test/t/rpl_charset.test	Wed Feb 23 02:48:31 2005
+++ 1.15/mysql-test/t/rpl_charset.test	Wed Mar 16 04:32:41 2005
@@ -107,7 +107,7 @@
 drop database mysqltest2;
 drop database mysqltest3;
 --replace_column 2 # 5 #
-show binlog events from 96;
+show binlog events from 98;
 sync_slave_with_master;
 
 # Check that we can change global.collation_server (since 5.0.3)

--- 1.2/mysql-test/t/rpl_deadlock.test	Wed Mar  2 19:52:26 2005
+++ 1.3/mysql-test/t/rpl_deadlock.test	Wed Mar 16 04:32:41 2005
@@ -68,7 +68,7 @@
 # 2) Test lock wait timeout
 
 stop slave;
-change master to master_log_pos=534; # the BEGIN log event
+change master to master_log_pos=536; # the BEGIN log event
 begin;
 select * from t2 for update; # hold lock
 start slave;
@@ -89,7 +89,7 @@
 
 # This is really copy-paste of 2) of above
 stop slave;
-change master to master_log_pos=534;
+change master to master_log_pos=536;
 begin;
 select * from t2 for update;
 start slave;

--- 1.12/mysql-test/t/rpl_error_ignored_table.test	Sun Jan 16 15:16:10 2005
+++ 1.13/mysql-test/t/rpl_error_ignored_table.test	Wed Mar 16 04:32:41 2005
@@ -48,7 +48,8 @@
 --error 0,1053;
 reap;
 connection master1;
-show binlog events from 96;
+--replace_column 2 # 5 #
+show binlog events from 98;
 save_master_pos;
 connection slave;
 # SQL slave thread should not have stopped (because table of the killed

--- 1.5/mysql-test/t/rpl_flush_tables.test	Sat Mar 20 13:29:41 2004
+++ 1.6/mysql-test/t/rpl_flush_tables.test	Wed Mar 16 04:32:41 2005
@@ -18,6 +18,7 @@
 flush no_write_to_binlog tables;
 # Check that it's not in the binlog.
 --replace_result $SERVER_VERSION SERVER_VERSION
+--replace_column 2 # 5 #
 show binlog events;
 # Check that the master is not confused.
 select * from t3;
@@ -25,6 +26,7 @@
 flush tables;
 # Check that it's in the binlog.
 --replace_result $SERVER_VERSION SERVER_VERSION
+--replace_column 2 # 5 #
 show binlog events;
 save_master_pos;
 connection slave;

--- 1.7/mysql-test/t/rpl_loaddata_rule_m.test	Sun Jan 16 15:16:10 2005
+++ 1.8/mysql-test/t/rpl_loaddata_rule_m.test	Wed Mar 16 04:32:41 2005
@@ -19,5 +19,9 @@
 create table t1(a int, b int, unique(b));
 use mysqltest;
 load data infile '../../std_data/rpl_loaddata.dat' into table test.t1;
-show binlog events from 96; # should be nothing
+# Starting from 5.0.3 LOAD DATA is replicated much in the same way as ordinary
+# query so "show binlog ..." should show two events (before 5.0.3 no events
+# were returned).
+--replace_column 2 # 5 #
+show binlog events from 98;
 drop database mysqltest;

--- 1.5/mysql-test/t/rpl_loaddata_rule_s.test	Sun Jan 16 15:16:10 2005
+++ 1.6/mysql-test/t/rpl_loaddata_rule_s.test	Wed Mar 16 04:32:41 2005
@@ -17,4 +17,4 @@
 connection slave;
 sync_with_master;
 select count(*) from t1; # check that LOAD was replicated
-show binlog events from 96; # should be nothing
+show binlog events from 98; # should be nothing

--- 1.4/mysql-test/t/rpl_multi_query.test	Fri Feb 18 16:53:16 2005
+++ 1.5/mysql-test/t/rpl_multi_query.test	Wed Mar 16 04:32:41 2005
@@ -24,6 +24,6 @@
 select * from mysqltest.t1;
 connection master;
 --replace_column 2 # 5 #
-show binlog events from 96;
+show binlog events from 98;
 drop database mysqltest;
 sync_slave_with_master;

--- 1.25/mysql-test/r/insert_select.result	Wed Feb 16 19:33:51 2005
+++ 1.26/mysql-test/r/insert_select.result	Wed Mar 16 04:32:40 2005
@@ -74,8 +74,8 @@
 ERROR 23000: Duplicate entry '2' for key 1
 show binlog events;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	4	Format_desc	1	96	Server ver: VERSION, Binlog ver: 4
-master-bin.000001	96	Query	1	191	use `test`; insert into t1 select * from t2
+master-bin.000001	#	Format_desc	1	#	Server ver: VERSION, Binlog ver: 4
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 select * from t2
 select * from t1;
 a
 1
@@ -88,7 +88,7 @@
 ERROR 23000: Duplicate entry '1' for key 1
 show binlog events;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	4	Format_desc	1	96	Server ver: VERSION, Binlog ver: 4
+master-bin.000001	#	Format_desc	1	#	Server ver: VERSION, Binlog ver: 4
 drop table t1;
 create table t1 (a int not null);
 create table t2 (a int not null);

--- 1.17/mysql-test/t/insert_select.test	Thu Jan 20 16:14:47 2005
+++ 1.18/mysql-test/t/insert_select.test	Wed Mar 16 04:32:41 2005
@@ -85,6 +85,7 @@
 # verify the binlog :
 let $VERSION=`select version()`;
 --replace_result $VERSION VERSION
+--replace_column 2 # 5 #
 show binlog events;
 select * from t1;
 drop table t1, t2;
@@ -99,6 +100,7 @@
 # The above should produce an error, *and* not appear in the binlog
 let $VERSION=`select version()`;
 --replace_result $VERSION VERSION
+--replace_column 2 # 5 #
 show binlog events;
 drop table t1;
 

--- 1.21/mysql-test/r/rpl_flush_log_loop.result	Wed Feb 16 19:33:52 2005
+++ 1.22/mysql-test/r/rpl_flush_log_loop.result	Wed Mar 16 04:32:40 2005
@@ -14,4 +14,4 @@
 flush logs;
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	SLAVE_PORT	60	slave-bin.000001	207	#	#	slave-bin.000001	Yes	Yes							0		0	207	#	None		0	No						#
+#	127.0.0.1	root	SLAVE_PORT	60	slave-bin.000001	209	#	#	slave-bin.000001	Yes	Yes							0		0	209	#	None		0	No						#

--- 1.26/mysql-test/r/rpl_loaddata.result	Wed Feb 16 19:33:52 2005
+++ 1.27/mysql-test/r/rpl_loaddata.result	Wed Mar 16 04:32:40 2005
@@ -22,7 +22,7 @@
 2003-03-22	2416	a	bbbbb
 show master status;
 File	Position	Binlog_Do_DB	Binlog_Ignore_DB
-slave-bin.000001	1097		
+slave-bin.000001	1292		
 drop table t1;
 drop table t2;
 drop table t3;
@@ -33,7 +33,7 @@
 start slave;
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	1560	#	#	master-bin.000001	Yes	Yes							0		0	1560	#	None		0	No						#
+#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	1800	#	#	master-bin.000001	Yes	Yes							0		0	1800	#	None		0	No						#
 set sql_log_bin=0;
 delete from t1;
 set sql_log_bin=1;
@@ -43,7 +43,7 @@
 change master to master_user='root';
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	1668	#	#	master-bin.000001	No	No							0		0	1668	#	None		0	No						#
+#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	1835	#	#	master-bin.000001	No	No							0		0	1835	#	None		0	No						#
 set global sql_slave_skip_counter=1;
 start slave;
 set sql_log_bin=0;
@@ -64,5 +64,5 @@
 ERROR 23000: Duplicate entry '2003-03-22' for key 1
 show master status;
 File	Position	Binlog_Do_DB	Binlog_Ignore_DB
-master-bin.000001	537		
+master-bin.000001	441		
 drop table t2;

--- 1.14/mysql-test/t/rpl_loaddata.test	Wed Apr  7 17:12:39 2004
+++ 1.15/mysql-test/t/rpl_loaddata.test	Wed Mar 16 04:32:41 2005
@@ -36,8 +36,7 @@
 # But we can't simply read this binlog, because as the slave has not been
 # restarted for this test, the file_id is uncertain (would cause test
 # failures). So instead, we test if the binlog looks long enough to
-# contain LOAD DATA. That is, I (Guilhem) have done SHOW BINLOG EVENTS on my
-# machine, saw that the binlog is of size 1068 (in 5.0.0) when things go fine.
+# contain LOAD DATA. Since 5.0.3 we assume that binlog of 1292 is ok.
 # If LOAD DATA was not logged, the binlog would be shorter.
 show master status;
 
@@ -84,7 +83,9 @@
 load data infile '../../std_data/rpl_loaddata.dat' into table t1;
 save_master_pos;
 connection slave;
-# The SQL slave thread should be stopped now.
+# The SQL slave thread should be stopped now. 
+# Exec_Master_Log_Pos should point to the start of Execute event
+# for last load data.
 wait_for_slave_to_stop;
 
 # CHANGE MASTER and see if error is cleared in SHOW SLAVE STATUS.

--- 1.15/mysql-test/r/loaddata.result	Tue Sep 28 21:07:50 2004
+++ 1.16/mysql-test/r/loaddata.result	Wed Mar 16 04:32:40 2005
@@ -66,3 +66,49 @@
 3	row 3
 0	
 drop table t1;
+create table t1 (a int default 100, b int, c varchar(60));
+load data infile '../../std_data/rpl_loaddata.dat' into table t1 (a, @b) set b=@b+10,
c=concat("b=",@b);
+select * from t1;
+a	b	c
+NULL	20	b=10
+NULL	25	b=15
+truncate table t1;
+load data infile '../../std_data/rpl_loaddata.dat' into table t1 (a, @b) set c= if(a is
null,"oops",a);
+select * from t1;
+a	b	c
+NULL	NULL	oops
+NULL	NULL	oops
+truncate table t1;
+set @c:=123;
+load data infile '../../std_data/rpl_loaddata.dat' into table t1 (@a, b) set c= if(@a is
null,@c,b);
+select * from t1;
+a	b	c
+100	10	123
+100	15	123
+load data infile '../../std_data/rpl_loaddata.dat' into table t1 (@a, @b);
+select * from t1;
+a	b	c
+100	10	123
+100	15	123
+100	NULL	NULL
+100	NULL	NULL
+select @a, @b;
+@a	@b
+NULL	15
+truncate table t1;
+load data infile '../../std_data/loaddata5.dat' into table t1 fields terminated by ''
enclosed by '' (a, b) set c="Wow";
+select * from t1;
+a	b	c
+1	2	Wow
+3	4	Wow
+5	6	Wow
+truncate table t1;
+load data infile '../../std_data/loaddata5.dat' into table t1 fields terminated by ''
enclosed by '' (a, b) set c=concat(a,"+",b,"+",@c,"+",b,"+",if(c is null,"NIL",c));
+select * from t1;
+a	b	c
+1	2	1+2+123+2+NIL
+3	4	3+4+123+4+NIL
+5	6	5+6+123+6+NIL
+load data infile '../../std_data/loaddata5.dat' into table t1 fields terminated by ''
enclosed by '' (a, @b);
+ERROR HY000: Can't load value from file with fixed size rows to variable
+drop table t1;

--- 1.4/mysql-test/r/rpl_loaddatalocal.result	Sat Mar 20 13:31:15 2004
+++ 1.5/mysql-test/r/rpl_loaddatalocal.result	Wed Mar 16 04:32:40 2005
@@ -12,3 +12,20 @@
 a	count(*)
 1	10000
 drop table t1;
+create table t1(a int);
+insert into t1 values (1), (2), (2), (3);
+select * into outfile '../../var/master-data/rpl_loaddatalocal.select_outfile' from t1;
+drop table t1;
+create table t1(a int primary key);
+load data local infile './var/master-data/rpl_loaddatalocal.select_outfile' into table
t1;
+select * from t1;
+a
+1
+2
+3
+select * from t1;
+a
+1
+2
+3
+drop table t1;

--- 1.7/mysql-test/t/loaddata.test	Sat Mar 20 13:29:41 2004
+++ 1.8/mysql-test/t/loaddata.test	Wed Mar 16 04:32:41 2005
@@ -31,3 +31,37 @@
 select * from t1;
 drop table t1;
 
+#
+# Let us test extended LOAD DATA features
+#
+create table t1 (a int default 100, b int, c varchar(60));
+# we can do something like this
+load data infile '../../std_data/rpl_loaddata.dat' into table t1 (a, @b) set b=@b+10,
c=concat("b=",@b);
+select * from t1;
+truncate table t1;
+# we can use filled fields in expressions 
+# we also assigning NULL value to field with non-NULL default here
+load data infile '../../std_data/rpl_loaddata.dat' into table t1 (a, @b) set c= if(a is
null,"oops",a);
+select * from t1;
+truncate table t1;
+# we even can use variables in set clause, and missed columns will be set
+# with default values
+set @c:=123;
+load data infile '../../std_data/rpl_loaddata.dat' into table t1 (@a, b) set c= if(@a is
null,@c,b);
+select * from t1;
+# let us test side-effect of such load
+load data infile '../../std_data/rpl_loaddata.dat' into table t1 (@a, @b);
+select * from t1;
+select @a, @b;
+truncate table t1;
+# now going to test fixed field-row file format
+load data infile '../../std_data/loaddata5.dat' into table t1 fields terminated by ''
enclosed by '' (a, b) set c="Wow";
+select * from t1;
+truncate table t1;
+# this also should work
+load data infile '../../std_data/loaddata5.dat' into table t1 fields terminated by ''
enclosed by '' (a, b) set c=concat(a,"+",b,"+",@c,"+",b,"+",if(c is null,"NIL",c));
+select * from t1;
+# and this should bark
+--error 1409 
+load data infile '../../std_data/loaddata5.dat' into table t1 fields terminated by ''
enclosed by '' (a, @b);
+drop table t1;

--- 1.3/mysql-test/t/rpl_loaddatalocal.test	Sat Mar 20 13:29:41 2004
+++ 1.4/mysql-test/t/rpl_loaddatalocal.test	Wed Mar 16 04:32:41 2005
@@ -34,3 +34,27 @@
 save_master_pos;
 connection slave;
 sync_with_master;
+
+#
+# Now let us test how well we replicate LOAD DATA LOCAL in situation when
+# we met duplicates in tables to which we are adding rows.
+# (It supposed that LOAD DATA LOCAL ignores such errors)
+#
+connection master;
+create table t1(a int);
+insert into t1 values (1), (2), (2), (3);
+select * into outfile '../../var/master-data/rpl_loaddatalocal.select_outfile' from t1;
+drop table t1;
+create table t1(a int primary key);
+load data local infile './var/master-data/rpl_loaddatalocal.select_outfile' into table
t1;
+system rm ./var/master-data/rpl_loaddatalocal.select_outfile ;
+select * from t1;
+save_master_pos;
+connection slave;
+sync_with_master;
+select * from t1;
+connection master;
+drop table t1;
+save_master_pos;
+connection slave;
+sync_with_master;

--- 1.35/mysql-test/r/mysqldump.result	Wed Mar  9 15:37:15 2005
+++ 1.36/mysql-test/r/mysqldump.result	Wed Mar 16 04:32:40 2005
@@ -1,4 +1,4 @@
-DROP TABLE IF EXISTS t1, `"t"1`, t1aa,t2aa;
+DROP TABLE IF EXISTS t1, `"t"1`, t1aa, t2, t2aa;
 drop database if exists mysqldump_test_db;
 drop view if exists v1;
 CREATE TABLE t1(a int);

--- 1.30/mysql-test/t/mysqldump.test	Wed Mar  9 15:37:15 2005
+++ 1.31/mysql-test/t/mysqldump.test	Wed Mar 16 04:32:41 2005
@@ -1,5 +1,5 @@
 --disable_warnings
-DROP TABLE IF EXISTS t1, `"t"1`, t1aa,t2aa;
+DROP TABLE IF EXISTS t1, `"t"1`, t1aa, t2, t2aa;
 drop database if exists mysqldump_test_db;
 drop view if exists v1;
 --enable_warnings

--- 1.27/mysql-test/r/rpl_replicate_do.result	Wed Feb 16 19:33:52 2005
+++ 1.28/mysql-test/r/rpl_replicate_do.result	Wed Mar 16 04:32:41 2005
@@ -28,4 +28,4 @@
 drop table if exists t1,t2,t11;
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	1618	#	#	master-bin.000001	Yes	Yes			test.t1				0		0	1618	#	None		0	No						#
+#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	1668	#	#	master-bin.000001	Yes	Yes			test.t1				0		0	1668	#	None		0	No						#

--- 1.41/mysql-test/r/rpl_log_pos.result	Sun Jan 16 15:16:10 2005
+++ 1.42/mysql-test/r/rpl_log_pos.result	Wed Mar 16 04:32:40 2005
@@ -6,10 +6,10 @@
 start slave;
 show master status;
 File	Position	Binlog_Do_DB	Binlog_Ignore_DB
-master-bin.000001	96		
+master-bin.000001	98		
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	96	#	#	master-bin.000001	Yes	Yes							0		0	96	#	None		0	No						#
+#	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	98	#	#	master-bin.000001	Yes	Yes							0		0	98	#	None		0	No						#
 stop slave;
 change master to master_log_pos=73;
 start slave;
@@ -30,13 +30,13 @@
 #	127.0.0.1	root	MASTER_PORT	1	master-bin.000001	173	#	#	master-bin.000001	No	Yes							0		0	173	#	None		0	No						#
 show master status;
 File	Position	Binlog_Do_DB	Binlog_Ignore_DB
-master-bin.000001	96		
+master-bin.000001	98		
 create table if not exists t1 (n int);
 drop table if exists t1;
 create table t1 (n int);
 insert into t1 values (1),(2),(3);
 stop slave;
-change master to master_log_pos=96;
+change master to master_log_pos=98;
 start slave;
 select * from t1;
 n

--- 1.33/mysql-test/r/rpl000015.result	Sun Jan 16 15:16:09 2005
+++ 1.34/mysql-test/r/rpl000015.result	Wed Mar 16 04:32:40 2005
@@ -1,7 +1,7 @@
 reset master;
 show master status;
 File	Position	Binlog_Do_DB	Binlog_Ignore_DB
-master-bin.000001	96		
+master-bin.000001	98		
 reset slave;
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
@@ -17,7 +17,7 @@
 start slave;
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_PORT	7	master-bin.000001	96	#	#	master-bin.000001	Yes	Yes							0		0	96	#	None		0	No						#
+#	127.0.0.1	root	MASTER_PORT	7	master-bin.000001	98	#	#	master-bin.000001	Yes	Yes							0		0	98	#	None		0	No						#
 drop table if exists t1;
 create table t1 (n int);
 insert into t1 values (10),(45),(90);

--- 1.65/mysql-test/r/rpl_rotate_logs.result	Wed Feb 23 22:35:46 2005
+++ 1.66/mysql-test/r/rpl_rotate_logs.result	Wed Mar 16 04:32:41 2005
@@ -16,7 +16,7 @@
 insert into t1 values('Could not break slave'),('Tried hard');
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_PORT	60	master-bin.000001	550	#	#	master-bin.000001	Yes	Yes							0		0	550	#	None		0	No						#
+#	127.0.0.1	root	MASTER_PORT	60	master-bin.000001	552	#	#	master-bin.000001	Yes	Yes							0		0	552	#	None		0	No						#
 select * from t1;
 s
 Could not break slave
@@ -57,7 +57,7 @@
 insert into t2 values (65);
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_PORT	60	master-bin.000003	498	#	#	master-bin.000003	Yes	Yes							0		0	498	#	None		0	No						#
+#	127.0.0.1	root	MASTER_PORT	60	master-bin.000003	500	#	#	master-bin.000003	Yes	Yes							0		0	500	#	None		0	No						#
 select * from t2;
 m
 34
@@ -79,13 +79,13 @@
 master-bin.000005
 show master status;
 File	Position	Binlog_Do_DB	Binlog_Ignore_DB
-master-bin.000005	2051		
+master-bin.000005	2146		
 select * from t4;
 a
 testing temporary tables part 2
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_PORT	60	master-bin.000005	2051	#	#	master-bin.000005	Yes	Yes							0		0	2051	#	None		0	No						#
+#	127.0.0.1	root	MASTER_PORT	60	master-bin.000005	2146	#	#	master-bin.000005	Yes	Yes							0		0	2146	#	None		0	No						#
 lock tables t3 read;
 select count(*) from t3 where n >= 4;
 count(*)

--- 1.55/mysql-test/r/rpl_log.result	Wed Feb 16 19:33:52 2005
+++ 1.56/mysql-test/r/rpl_log.result	Wed Mar 16 04:32:40 2005
@@ -19,25 +19,25 @@
 drop table t1;
 show binlog events;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	4	Format_desc	1	96	Server ver: VERSION, Binlog ver: 4
-master-bin.000001	96	Query	1	218	use `test`; create table t1(n int not null
auto_increment primary key)
-master-bin.000001	218	Intvar	1	246	INSERT_ID=1
-master-bin.000001	246	Query	1	338	use `test`; insert into t1 values (NULL)
-master-bin.000001	338	Query	1	415	use `test`; drop table t1
-master-bin.000001	415	Query	1	519	use `test`; create table t1 (word char(20) not null)
-master-bin.000001	519	Create_file	1	1189	db=test;table=t1;file_id=1;block_len=581
-master-bin.000001	1189	Exec_load	1	1212	;file_id=1
-master-bin.000001	1212	Query	1	1289	use `test`; drop table t1
-show binlog events from 96 limit 1;
-Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	96	Query	1	218	use `test`; create table t1(n int not null
auto_increment primary key)
-show binlog events from 96 limit 2;
-Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	96	Query	1	218	use `test`; create table t1(n int not null
auto_increment primary key)
-master-bin.000001	218	Intvar	1	246	INSERT_ID=1
-show binlog events from 96 limit 2,1;
+master-bin.000001	4	Format_desc	1	98	Server ver: VERSION, Binlog ver: 4
+master-bin.000001	98	Query	1	220	use `test`; create table t1(n int not null
auto_increment primary key)
+master-bin.000001	220	Intvar	1	248	INSERT_ID=1
+master-bin.000001	248	Query	1	340	use `test`; insert into t1 values (NULL)
+master-bin.000001	340	Query	1	417	use `test`; drop table t1
+master-bin.000001	417	Query	1	521	use `test`; create table t1 (word char(20) not null)
+master-bin.000001	521	Begin_load_query	1	1125	;file_id=1;block_len=581
+master-bin.000001	1125	Execute_load_query	1	1274	use `test`; load data infile
'../../std_data/words.dat' into table t1 ignore 1 lines ;file_id=1
+master-bin.000001	1274	Query	1	1351	use `test`; drop table t1
+show binlog events from 98 limit 1;
+Log_name	Pos	Event_type	Server_id	End_log_pos	Info
+master-bin.000001	98	Query	1	220	use `test`; create table t1(n int not null
auto_increment primary key)
+show binlog events from 98 limit 2;
+Log_name	Pos	Event_type	Server_id	End_log_pos	Info
+master-bin.000001	98	Query	1	220	use `test`; create table t1(n int not null
auto_increment primary key)
+master-bin.000001	220	Intvar	1	248	INSERT_ID=1
+show binlog events from 98 limit 2,1;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	246	Query	1	338	use `test`; insert into t1 values (NULL)
+master-bin.000001	248	Query	1	340	use `test`; insert into t1 values (NULL)
 flush logs;
 create table t5 (a int);
 drop table t5;
@@ -49,24 +49,24 @@
 drop table t1;
 show binlog events;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	4	Format_desc	1	96	Server ver: VERSION, Binlog ver: 4
-master-bin.000001	96	Query	1	218	use `test`; create table t1(n int not null
auto_increment primary key)
-master-bin.000001	218	Intvar	1	246	INSERT_ID=1
-master-bin.000001	246	Query	1	338	use `test`; insert into t1 values (NULL)
-master-bin.000001	338	Query	1	415	use `test`; drop table t1
-master-bin.000001	415	Query	1	519	use `test`; create table t1 (word char(20) not null)
-master-bin.000001	519	Create_file	1	1189	db=test;table=t1;file_id=1;block_len=581
-master-bin.000001	1189	Exec_load	1	1212	;file_id=1
-master-bin.000001	1212	Query	1	1289	use `test`; drop table t1
-master-bin.000001	1289	Rotate	1	1333	master-bin.000002;pos=4
+master-bin.000001	4	Format_desc	1	98	Server ver: VERSION, Binlog ver: 4
+master-bin.000001	98	Query	1	220	use `test`; create table t1(n int not null
auto_increment primary key)
+master-bin.000001	220	Intvar	1	248	INSERT_ID=1
+master-bin.000001	248	Query	1	340	use `test`; insert into t1 values (NULL)
+master-bin.000001	340	Query	1	417	use `test`; drop table t1
+master-bin.000001	417	Query	1	521	use `test`; create table t1 (word char(20) not null)
+master-bin.000001	521	Begin_load_query	1	1125	;file_id=1;block_len=581
+master-bin.000001	1125	Execute_load_query	1	1274	use `test`; load data infile
'../../std_data/words.dat' into table t1 ignore 1 lines ;file_id=1
+master-bin.000001	1274	Query	1	1351	use `test`; drop table t1
+master-bin.000001	1351	Rotate	1	1395	master-bin.000002;pos=4
 show binlog events in 'master-bin.000002';
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000002	4	Format_desc	1	96	Server ver: VERSION, Binlog ver: 4
-master-bin.000002	96	Query	1	183	use `test`; create table t5 (a int)
-master-bin.000002	183	Query	1	260	use `test`; drop table t5
-master-bin.000002	260	Query	1	347	use `test`; create table t1 (n int)
-master-bin.000002	347	Query	1	436	use `test`; insert into t1 values (1)
-master-bin.000002	436	Query	1	513	use `test`; drop table t1
+master-bin.000002	4	Format_desc	1	98	Server ver: VERSION, Binlog ver: 4
+master-bin.000002	98	Query	1	185	use `test`; create table t5 (a int)
+master-bin.000002	185	Query	1	262	use `test`; drop table t5
+master-bin.000002	262	Query	1	349	use `test`; create table t1 (n int)
+master-bin.000002	349	Query	1	438	use `test`; insert into t1 values (1)
+master-bin.000002	438	Query	1	515	use `test`; drop table t1
 show binary logs;
 Log_name
 master-bin.000001
@@ -78,26 +78,26 @@
 slave-bin.000002
 show binlog events in 'slave-bin.000001' from 4;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-slave-bin.000001	4	Format_desc	2	96	Server ver: VERSION, Binlog ver: 4
-slave-bin.000001	96	Query	1	218	use `test`; create table t1(n int not null auto_increment
primary key)
-slave-bin.000001	218	Intvar	1	246	INSERT_ID=1
-slave-bin.000001	246	Query	1	338	use `test`; insert into t1 values (NULL)
-slave-bin.000001	338	Query	1	415	use `test`; drop table t1
-slave-bin.000001	415	Query	1	519	use `test`; create table t1 (word char(20) not null)
-slave-bin.000001	519	Create_file	1	1198	db=test;table=t1;file_id=1;block_len=581
-slave-bin.000001	1198	Exec_load	1	1221	;file_id=1
-slave-bin.000001	1221	Query	1	1298	use `test`; drop table t1
-slave-bin.000001	1298	Query	1	1385	use `test`; create table t5 (a int)
-slave-bin.000001	1385	Query	1	1462	use `test`; drop table t5
-slave-bin.000001	1462	Rotate	2	1505	slave-bin.000002;pos=4
+slave-bin.000001	4	Format_desc	2	98	Server ver: VERSION, Binlog ver: 4
+slave-bin.000001	98	Query	1	220	use `test`; create table t1(n int not null auto_increment
primary key)
+slave-bin.000001	220	Intvar	1	248	INSERT_ID=1
+slave-bin.000001	248	Query	1	340	use `test`; insert into t1 values (NULL)
+slave-bin.000001	340	Query	1	417	use `test`; drop table t1
+slave-bin.000001	417	Query	1	521	use `test`; create table t1 (word char(20) not null)
+slave-bin.000001	521	Begin_load_query	1	1125	;file_id=1;block_len=581
+slave-bin.000001	1125	Execute_load_query	1	1283	use `test`; load data INFILE
'../../var/tmp/SQL_LOAD-2-1-1.data' INTO table t1 ignore 1 lines ;file_id=1
+slave-bin.000001	1283	Query	1	1360	use `test`; drop table t1
+slave-bin.000001	1360	Query	1	1447	use `test`; create table t5 (a int)
+slave-bin.000001	1447	Query	1	1524	use `test`; drop table t5
+slave-bin.000001	1524	Rotate	2	1567	slave-bin.000002;pos=4
 show binlog events in 'slave-bin.000002' from 4;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-slave-bin.000002	4	Format_desc	2	96	Server ver: VERSION, Binlog ver: 4
-slave-bin.000002	96	Query	1	183	use `test`; create table t1 (n int)
-slave-bin.000002	183	Query	1	272	use `test`; insert into t1 values (1)
-slave-bin.000002	272	Query	1	349	use `test`; drop table t1
+slave-bin.000002	4	Format_desc	2	98	Server ver: VERSION, Binlog ver: 4
+slave-bin.000002	98	Query	1	185	use `test`; create table t1 (n int)
+slave-bin.000002	185	Query	1	274	use `test`; insert into t1 values (1)
+slave-bin.000002	274	Query	1	351	use `test`; drop table t1
 show slave status;
 Slave_IO_State	Master_Host	Master_User	Master_Port	Connect_Retry	Master_Log_File	Read_Master_Log_Pos	Relay_Log_File	Relay_Log_Pos	Relay_Master_Log_File	Slave_IO_Running	Slave_SQL_Running	Replicate_Do_DB	Replicate_Ignore_DB	Replicate_Do_Table	Replicate_Ignore_Table	Replicate_Wild_Do_Table	Replicate_Wild_Ignore_Table	Last_Errno	Last_Error	Skip_Counter	Exec_Master_Log_Pos	Relay_Log_Space	Until_Condition	Until_Log_File	Until_Log_Pos	Master_SSL_Allowed	Master_SSL_CA_File	Master_SSL_CA_Path	Master_SSL_Cert	Master_SSL_Cipher	Master_SSL_Key	Seconds_Behind_Master
-#	127.0.0.1	root	MASTER_PORT	1	master-bin.000002	513	#	#	master-bin.000002	Yes	Yes							0		0	513	#	None		0	No						#
+#	127.0.0.1	root	MASTER_PORT	1	master-bin.000002	515	#	#	master-bin.000002	Yes	Yes							0		0	515	#	None		0	No						#
 show binlog events in 'slave-bin.000005' from 4;
 ERROR HY000: Error when executing command SHOW BINLOG EVENTS: Could not find target log

--- 1.27/mysql-test/r/user_var.result	Wed Feb 23 21:57:49 2005
+++ 1.28/mysql-test/r/user_var.result	Wed Mar 16 04:32:41 2005
@@ -176,13 +176,13 @@
 set @var1= "';aaa";
 SET @var2=char(ascii('a'));
 insert into t1 values (@var1),(@var2);
-show binlog events from 96;
+show binlog events from 98;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	96	User var	1	137	@`a b`=_latin1 0x68656C6C6F COLLATE latin1_swedish_ci
-master-bin.000001	137	Query	1	230	use `test`; INSERT INTO t1 VALUES(@`a b`)
-master-bin.000001	230	User var	1	272	@`var1`=_latin1 0x273B616161 COLLATE
latin1_swedish_ci
-master-bin.000001	272	User var	1	310	@`var2`=_latin1 0x61 COLLATE latin1_swedish_ci
-master-bin.000001	310	Query	1	411	use `test`; insert into t1 values (@var1),(@var2)
+master-bin.000001	#	User var	1	#	@`a b`=_latin1 0x68656C6C6F COLLATE latin1_swedish_ci
+master-bin.000001	#	Query	1	#	use `test`; INSERT INTO t1 VALUES(@`a b`)
+master-bin.000001	#	User var	1	#	@`var1`=_latin1 0x273B616161 COLLATE latin1_swedish_ci
+master-bin.000001	#	User var	1	#	@`var2`=_latin1 0x61 COLLATE latin1_swedish_ci
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values (@var1),(@var2)
 /*!40019 SET @@session.max_insert_delayed_threads=0*/;
 /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
 ROLLBACK;

--- 1.32/mysql-test/t/rpl_log_pos.test	Sun Jan 16 15:16:10 2005
+++ 1.33/mysql-test/t/rpl_log_pos.test	Wed Mar 16 04:32:41 2005
@@ -38,7 +38,7 @@
 save_master_pos;
 connection slave;
 stop slave;
-change master to master_log_pos=96;
+change master to master_log_pos=98;
 start slave;
 sync_with_master;
 select * from t1;

--- 1.24/mysql-test/t/rpl_log.test	Sun Jan 16 15:16:10 2005
+++ 1.25/mysql-test/t/rpl_log.test	Wed Mar 16 04:32:41 2005
@@ -38,9 +38,9 @@
 drop table t1;
 --replace_result $VERSION VERSION
 show binlog events;
-show binlog events from 96 limit 1;
-show binlog events from 96 limit 2;
-show binlog events from 96 limit 2,1;
+show binlog events from 98 limit 1;
+show binlog events from 98 limit 2;
+show binlog events from 98 limit 2,1;
 flush logs;
 
 # We need an extra update before doing save_master_pos.

--- 1.22/mysql-test/t/user_var.test	Tue Feb 22 16:14:13 2005
+++ 1.23/mysql-test/t/user_var.test	Wed Mar 16 04:32:41 2005
@@ -108,7 +108,8 @@
 set @var1= "';aaa";
 SET @var2=char(ascii('a'));
 insert into t1 values (@var1),(@var2);
-show binlog events from 96;
+--replace_column 2 # 5 #
+show binlog events from 98;
 # more important than SHOW BINLOG EVENTS, mysqlbinlog (where we
 # absolutely need variables names to be quoted and strings to be
 # escaped).

--- 1.132/sql/sql_repl.cc	Mon Mar 14 19:53:15 2005
+++ 1.133/sql/sql_repl.cc	Wed Mar 16 04:32:42 2005
@@ -1511,17 +1511,16 @@
   lf_info->last_pos_in_file = file->pos_in_file;
   if (lf_info->wrote_create_file)
   {
-    Append_block_log_event a(lf_info->thd, lf_info->db, buffer, block_len,
-			     lf_info->log_delayed);
+    Append_block_log_event a(lf_info->thd, lf_info->thd->db, buffer,
+                             block_len, lf_info->log_delayed);
     mysql_bin_log.write(&a);
   }
   else
   {
-    Create_file_log_event c(lf_info->thd,lf_info->ex,lf_info->db,
-			    lf_info->table_name, *lf_info->fields,
-			    lf_info->handle_dup, lf_info->ignore, buffer,
-			    block_len, lf_info->log_delayed);
-    mysql_bin_log.write(&c);
+    Begin_load_query_log_event b(lf_info->thd, lf_info->thd->db,
+                                 buffer, block_len,
+                                 lf_info->log_delayed);
+    mysql_bin_log.write(&b);
     lf_info->wrote_create_file = 1;
     DBUG_SYNC_POINT("debug_lock.created_file_event",10);
   }

--- 1.36/sql/sql_repl.h	Mon Feb 14 20:45:30 2005
+++ 1.37/sql/sql_repl.h	Wed Mar 16 04:32:42 2005
@@ -63,12 +63,7 @@
 {
   THD* thd;
   my_off_t last_pos_in_file;
-  sql_exchange* ex;
-  List <Item> *fields;
-  enum enum_duplicates handle_dup;
-  char* db;
-  char* table_name;
-  bool wrote_create_file, log_delayed, ignore;
+  bool wrote_create_file, log_delayed;
 } LOAD_FILE_INFO;
 
 int log_loaded_block(IO_CACHE* file);

--- 1.16/mysql-test/r/rpl_temporary.result	Wed Feb 16 19:33:52 2005
+++ 1.17/mysql-test/r/rpl_temporary.result	Wed Mar 16 04:32:41 2005
@@ -38,19 +38,19 @@
 7
 show binlog events;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
-master-bin.000001	4	Format_desc	1	96	Server ver: VERSION, Binlog ver: 4
-master-bin.000001	96	Query	1	186	use `test`; drop table if exists t1,t2
-master-bin.000001	186	Query	1	272	use `test`; create table t1(f int)
-master-bin.000001	272	Query	1	358	use `test`; create table t2(f int)
-master-bin.000001	358	Query	1	484	use `test`; insert into t1 values
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10)
-master-bin.000001	484	Query	1	580	use `test`; create temporary table t3(f int)
-master-bin.000001	580	Query	1	685	use `test`; insert into t3 select * from t1 where
f<6
-master-bin.000001	685	Query	1	781	use `test`; create temporary table t3(f int)
-master-bin.000001	781	Query	1	883	use `test`; insert into t2 select count(*) from t3
-master-bin.000001	883	Query	1	989	use `test`; insert into t3 select * from t1 where
f>=4
-master-bin.000001	989	Query	1	1076	use `test`; drop temporary table t3
-master-bin.000001	1076	Query	1	1178	use `test`; insert into t2 select count(*) from t3
-master-bin.000001	1178	Query	1	1265	use `test`; drop temporary table t3
+master-bin.000001	#	Format_desc	1	#	Server ver: VERSION, Binlog ver: 4
+master-bin.000001	#	Query	1	#	use `test`; drop table if exists t1,t2
+master-bin.000001	#	Query	1	#	use `test`; create table t1(f int)
+master-bin.000001	#	Query	1	#	use `test`; create table t2(f int)
+master-bin.000001	#	Query	1	#	use `test`; insert into t1 values
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10)
+master-bin.000001	#	Query	1	#	use `test`; create temporary table t3(f int)
+master-bin.000001	#	Query	1	#	use `test`; insert into t3 select * from t1 where f<6
+master-bin.000001	#	Query	1	#	use `test`; create temporary table t3(f int)
+master-bin.000001	#	Query	1	#	use `test`; insert into t2 select count(*) from t3
+master-bin.000001	#	Query	1	#	use `test`; insert into t3 select * from t1 where f>=4
+master-bin.000001	#	Query	1	#	use `test`; drop temporary table t3
+master-bin.000001	#	Query	1	#	use `test`; insert into t2 select count(*) from t3
+master-bin.000001	#	Query	1	#	use `test`; drop temporary table t3
 drop table t1, t2;
 use test;
 SET TIMESTAMP=1040323920;

--- 1.13/mysql-test/t/rpl_temporary.test	Sat Mar 27 03:07:04 2004
+++ 1.14/mysql-test/t/rpl_temporary.test	Wed Mar 16 04:32:41 2005
@@ -82,6 +82,7 @@
 select * from t2;
 
 --replace_result $VERSION VERSION
+--replace_column 2 # 5 #
 show binlog events;
 
 drop table t1, t2;
Thread
bk commit into 5.0 tree (dlenev:1.1812)dlenev16 Mar