Commit 054c0650 authored by unknown's avatar unknown
Browse files

Merge gbichot@bk-internal.mysql.com:/home/bk/mysql-5.0

into production.mysql.com:/nfstmp1/guilhem/mysql-5.0-prod

parents 93990166 0f3183cc
Loading
Loading
Loading
Loading
+24 −8
Original line number Diff line number Diff line
@@ -1059,9 +1059,9 @@ bool Query_log_event::write(IO_CACHE* file)
      sees unknown Q_CATALOG_NZ_CODE; so it will not be able to read
      Q_AUTO_INCREMENT*, Q_CHARSET and so replication will fail silently in
      various ways. Documented that you should not mix alpha/beta versions if
      they are not exactly the same version, with example of 5.0.2<->5.0.3 and
      5.0.3<->5.0.4. If replication is from older to new, the new won't find
      the catalog and will have the same problems.
      they are not exactly the same version, with example of 5.0.3->5.0.2 and
      5.0.4->5.0.3. If replication is from older to new, the new will
      recognize Q_CATALOG_CODE and have no problem.
      */
  }
  if (auto_increment_increment != 1)
@@ -1195,6 +1195,7 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
  uint8 common_header_len, post_header_len;
  char *start;
  const char *end;
  bool catalog_nz= 1;
  DBUG_ENTER("Query_log_event::Query_log_event(char*,...)");

  common_header_len= description_event->common_header_len;
@@ -1286,11 +1287,17 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
      pos+= time_zone_len+1;
      break;
    }
    case Q_CATALOG_CODE: /* for 5.0.x where 0<=x<=3 masters */
      if ((catalog_len= *pos))
        catalog= (char*) pos+1;                           // Will be copied later
      pos+= catalog_len+2; // leap over end 0
      catalog_nz= 0; // catalog has end 0 in event
      break;
    default:
      /* That's why you must write status vars in growing order of code */
      DBUG_PRINT("info",("Query_log_event has unknown status vars (first has\
 code: %u), skipping the rest of them", (uint) *(pos-1)));
      pos= (const uchar*) end;                         // Break look
      pos= (const uchar*) end;                         // Break loop
    }
  }
  
@@ -1299,12 +1306,21 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
                                            data_len + 1, MYF(MY_WME))))
    DBUG_VOID_RETURN;
  if (catalog_len)                                  // If catalog is given
  {
    if (likely(catalog_nz)) // true except if event comes from 5.0.0|1|2|3.
    {
      memcpy(start, catalog, catalog_len);
      catalog= start;
      start+= catalog_len;
      *start++= 0;
    }
    else
    {
      memcpy(start, catalog, catalog_len+1); // copy end 0
      catalog= start;
      start+= catalog_len+1;
    }
  }
  if (time_zone_len)
  {
    memcpy(start, time_zone_str, time_zone_len);