List:Commits« Previous MessageNext Message »
From:monty Date:February 25 2006 7:54pm
Subject:bk commit into 5.1 tree (monty:1.2177)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of monty. When monty 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.2177 06/02/25 21:54:34 monty@stripped +78 -0
  Merge mysql.com:/home/my/mysql-5.0
  into  mysql.com:/home/my/mysql-5.1

  sql/sql_update.cc
    1.189 06/02/25 21:54:30 monty@stripped +0 -1
    Manual merge

  sql/sql_class.h
    1.285 06/02/25 21:54:29 monty@stripped +0 -12
    Manual merge

  sql/sql_cache.h
    1.33 06/02/25 21:54:29 monty@stripped +0 -2
    Manual merge

  sql/item.cc
    1.171 06/02/25 21:54:29 monty@stripped +0 -0
    Manual merge

  scripts/mysql_fix_privilege_tables.sql
    1.41 06/02/25 21:54:29 monty@stripped +6 -6
    Manual merge

  mysys/my_bitmap.c
    1.39 06/02/25 21:54:29 monty@stripped +0 -0
    Manual merge

  mysql-test/t/view.test
    1.137 06/02/25 21:54:29 monty@stripped +1 -0
    Manual merge

  mysql-test/t/innodb.test
    1.130 06/02/25 21:54:29 monty@stripped +0 -3
    Manual merge

  mysql-test/r/binlog_stm_ctype_cp932.result
    1.10 06/02/25 21:54:29 monty@stripped +0 -0
    No changes

  mysql-test/r/binlog_stm_binlog.result
    1.8 06/02/25 21:54:29 monty@stripped +0 -2
    Manual merge

  mysql-test/extra/binlog_tests/ctype_cp932.test
    1.12 06/02/25 21:54:29 monty@stripped +0 -0
    No changes

  mysql-test/extra/binlog_tests/binlog.test
    1.6 06/02/25 21:54:29 monty@stripped +1 -3
    Manual merge

  libmysqld/lib_sql.cc
    1.111 06/02/25 21:54:29 monty@stripped +0 -366
    Manual merge

  tests/mysql_client_test.c
    1.179 06/02/25 20:35:09 monty@stripped +0 -0
    Auto merged

  storage/ndb/include/ndbapi/NdbDictionary.hpp
    1.70 06/02/25 20:35:09 monty@stripped +0 -0
    Auto merged

  sql/tztime.h
    1.15 06/02/25 20:35:09 monty@stripped +0 -0
    Auto merged

  sql/tztime.cc
    1.32 06/02/25 20:35:09 monty@stripped +0 -0
    Auto merged

  sql/table.h
    1.132 06/02/25 20:35:09 monty@stripped +0 -0
    Auto merged

  sql/sql_select.h
    1.105 06/02/25 20:35:09 monty@stripped +0 -0
    Auto merged

  sql/sql_prepare.cc
    1.164 06/02/25 20:35:09 monty@stripped +0 -9
    Auto merged

  sql/sql_parse.cc
    1.523 06/02/25 20:35:09 monty@stripped +0 -0
    Auto merged

  sql-common/client.c
    1.85 06/02/25 20:35:09 monty@stripped +0 -5
    Auto merged

  sql/sql_db.cc
    1.131 06/02/25 20:35:08 monty@stripped +0 -0
    Auto merged

  sql/sql_cursor.cc
    1.6 06/02/25 20:35:08 monty@stripped +0 -1
    Auto merged

  sql/sql_class.cc
    1.246 06/02/25 20:35:08 monty@stripped +0 -0
    Auto merged

  sql/sql_base.cc
    1.305 06/02/25 20:35:08 monty@stripped +0 -0
    Auto merged

  sql/protocol.h
    1.33 06/02/25 20:35:08 monty@stripped +0 -9
    Auto merged

  sql/protocol.cc
    1.114 06/02/25 20:35:08 monty@stripped +0 -43
    Auto merged

  sql/opt_range.cc
    1.205 06/02/25 20:35:08 monty@stripped +0 -0
    Auto merged

  sql/mysqld.cc
    1.539 06/02/25 20:35:08 monty@stripped +0 -0
    Auto merged

  sql/mysql_priv.h
    1.381 06/02/25 20:35:07 monty@stripped +0 -0
    Auto merged

  sql/log_event.h
    1.129 06/02/25 20:35:07 monty@stripped +0 -0
    Auto merged

  sql/item.h
    1.192 06/02/25 20:35:07 monty@stripped +0 -0
    Auto merged

  sql/handler.h
    1.195 06/02/25 20:35:07 monty@stripped +0 -0
    Auto merged

  sql/field.cc
    1.302 06/02/25 20:35:07 monty@stripped +0 -0
    Auto merged

  mysys/mf_dirname.c
    1.13 06/02/25 20:35:07 monty@stripped +0 -0
    Auto merged

  mysql-test/t/wait_timeout.test
    1.4 06/02/25 20:35:07 monty@stripped +0 -3
    Auto merged

  mysql-test/t/view_grant.test
    1.12 06/02/25 20:35:07 monty@stripped +0 -9
    Auto merged

  mysql-test/t/temp_table.test
    1.15 06/02/25 20:35:07 monty@stripped +0 -0
    Auto merged

  mysql-test/t/sp.test
    1.180 06/02/25 20:35:07 monty@stripped +0 -4
    Auto merged

  mysql-test/t/sp-threads.test
    1.9 06/02/25 20:35:07 monty@stripped +0 -2
    Auto merged

  mysql-test/t/sp-error.test
    1.105 06/02/25 20:35:07 monty@stripped +0 -0
    Auto merged

  mysql-test/t/sp-destruct.test
    1.8 06/02/25 20:35:07 monty@stripped +0 -0
    Auto merged

  mysql-test/t/skip_grants.test
    1.8 06/02/25 20:35:07 monty@stripped +0 -3
    Auto merged

  mysql-test/t/read_only.test
    1.4 06/02/25 20:35:07 monty@stripped +0 -3
    Auto merged

  mysql-test/t/query_cache_notembedded.test
    1.4 06/02/25 20:35:07 monty@stripped +0 -84
    Auto merged

  mysql-test/t/query_cache.test
    1.58 06/02/25 20:35:07 monty@stripped +0 -0
    Auto merged

  mysql-test/t/mysqltest.test
    1.43 06/02/25 20:35:07 monty@stripped +0 -2
    Auto merged

  mysql-test/t/mysql_client_test.test
    1.18 06/02/25 20:35:07 monty@stripped +0 -3
    Auto merged

  mysql-test/t/mysql.test
    1.7 06/02/25 20:35:07 monty@stripped +0 -2
    Auto merged

  mysql-test/t/handler.test
    1.28 06/02/25 20:35:06 monty@stripped +0 -3
    Auto merged

  mysql-test/t/delayed.test
    1.13 06/02/25 20:35:06 monty@stripped +0 -3
    Auto merged

  mysql-test/t/compress.test
    1.5 06/02/25 20:35:06 monty@stripped +0 -3
    Auto merged

  mysql-test/t/backup.test
    1.20 06/02/25 20:35:06 monty@stripped +0 -3
    Auto merged

  mysql-test/r/view_grant.result
    1.14 06/02/25 20:35:06 monty@stripped +0 -9
    Auto merged

  mysql-test/r/view.result
    1.149 06/02/25 20:35:06 monty@stripped +0 -0
    Auto merged

  mysql-test/r/subselect.result
    1.136 06/02/25 20:35:06 monty@stripped +0 -0
    Auto merged

  mysql-test/r/sp.result
    1.192 06/02/25 20:35:06 monty@stripped +0 -0
    Auto merged

  mysql-test/r/sp-error.result
    1.106 06/02/25 20:35:06 monty@stripped +0 -0
    Auto merged

  mysql-test/r/query_cache_notembedded.result
    1.4 06/02/25 20:35:06 monty@stripped +0 -220
    Auto merged

  mysql-test/r/query_cache.result
    1.73 06/02/25 20:35:06 monty@stripped +0 -0
    Auto merged

  mysql-test/r/mysqltest.result
    1.35 06/02/25 20:35:06 monty@stripped +0 -2
    Auto merged

  mysql-test/r/innodb.result
    1.163 06/02/25 20:35:06 monty@stripped +0 -0
    Auto merged

  mysql-test/mysql-test-run.sh
    1.302 06/02/25 20:35:06 monty@stripped +0 -1
    Auto merged

  mysql-test/extra/binlog_tests/blackhole.test
    1.8 06/02/25 20:35:06 monty@stripped +0 -0
    Auto merged

  libmysqld/libmysqld.c
    1.68 06/02/25 20:35:06 monty@stripped +0 -12
    Auto merged

  libmysqld/embedded_priv.h
    1.14 06/02/25 20:35:06 monty@stripped +0 -14
    Auto merged

  libmysqld/emb_qcache.cc
    1.9 06/02/25 20:35:06 monty@stripped +0 -69
    Auto merged

  libmysql/libmysql.c
    1.240 06/02/25 20:35:06 monty@stripped +0 -6
    Auto merged

  include/mysql.h
    1.156 06/02/25 20:35:06 monty@stripped +0 -6
    Auto merged

  configure.in
    1.344 06/02/25 20:35:06 monty@stripped +0 -0
    Auto merged

  BitKeeper/deleted/.del-subselect_notembedded.result
    1.2 06/02/25 20:35:05 monty@stripped +0 -0
    Delete: mysql-test/r/subselect_notembedded.result

  BitKeeper/deleted/.del-sp_notembedded.result
    1.3 06/02/25 20:34:51 monty@stripped +0 -0
    Delete: mysql-test/r/sp_notembedded.result

  BitKeeper/deleted/.del-innodb_notembedded.result
    1.2 06/02/25 20:34:44 monty@stripped +0 -0
    Delete: mysql-test/r/innodb_notembedded.result

  BitKeeper/deleted/.del-ctype_cp932_notembedded.result
    1.2 06/02/25 20:34:37 monty@stripped +0 -0
    Delete: mysql-test/r/ctype_cp932_notembedded.result

  BitKeeper/deleted/.del-subselect_notembedded.test
    1.2 06/02/25 20:32:05 monty@stripped +0 -0
    Delete: mysql-test/t/subselect_notembedded.test

  BitKeeper/deleted/.del-sp_notembedded.test
    1.3 06/02/25 20:31:58 monty@stripped +0 -0
    Delete: mysql-test/t/sp_notembedded.test

  BitKeeper/deleted/.del-innodb_notembedded.test
    1.2 06/02/25 20:31:38 monty@stripped +0 -0
    Delete: mysql-test/t/innodb_notembedded.test

  storage/ndb/include/ndbapi/NdbDictionary.hpp
    1.48.5.2 06/02/25 17:48:13 monty@stripped +0 -0
    Merge rename: ndb/include/ndbapi/NdbDictionary.hpp -> storage/ndb/include/ndbapi/NdbDictionary.hpp

  mysql-test/r/binlog_stm_ctype_cp932.result
    1.6.2.2 06/02/25 17:48:13 monty@stripped +0 -0
    Merge rename: mysql-test/r/ctype_cp932.result -> mysql-test/r/binlog_stm_ctype_cp932.result

  mysql-test/r/binlog_stm_binlog.result
    1.4.1.2 06/02/25 17:48:13 monty@stripped +0 -0
    Merge rename: mysql-test/r/binlog.result -> mysql-test/r/binlog_stm_binlog.result

  mysql-test/extra/binlog_tests/ctype_cp932.test
    1.8.2.2 06/02/25 17:48:13 monty@stripped +0 -0
    Merge rename: mysql-test/t/ctype_cp932.test -> mysql-test/extra/binlog_tests/ctype_cp932.test

  mysql-test/extra/binlog_tests/blackhole.test
    1.4.2.2 06/02/25 17:48:13 monty@stripped +0 -0
    Merge rename: mysql-test/t/blackhole.test -> mysql-test/extra/binlog_tests/blackhole.test

  mysql-test/extra/binlog_tests/binlog.test
    1.4.1.3 06/02/25 17:48:13 monty@stripped +0 -0
    Merge rename: mysql-test/t/binlog.test -> mysql-test/extra/binlog_tests/binlog.test

# 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:	monty
# Host:	narttu.mysql.fi
# Root:	/home/my/mysql-5.1/RESYNC

--- 1.343/configure.in	2006-02-22 13:15:37 +02:00
+++ 1.344/configure.in	2006-02-25 20:35:06 +02:00
@@ -334,6 +334,9 @@
   # mysqld requires -fno-implicit-templates.
   # Disable exceptions as they seams to create problems with gcc and threads.
   # mysqld doesn't use run-time-type-checking, so we disable it.
+  # We should use -Wno-invalid-offsetof flag to disable some warnings from gcc
+  # regarding offset() usage in C++ which are done in a safe manner in the
+  # server
   CXXFLAGS="$CXXFLAGS -fno-implicit-templates -fno-exceptions -fno-rtti"
   AC_DEFINE([HAVE_EXPLICIT_TEMPLATE_INSTANTIATION],
     [1], [Defined by configure. Use explicit template instantiation.])

--- 1.12/mysys/mf_dirname.c	2005-11-23 22:44:54 +02:00
+++ 1.13/mysys/mf_dirname.c	2006-02-25 20:35:07 +02:00
@@ -109,7 +109,7 @@
 
 #if FN_LIBCHAR != '/' || defined(FN_C_BEFORE_DIR_2)
   {
-    for (; *from && from != from_end; from++)
+    for (; from != from_end && *from ; from++)
     {
       if (*from == '/')
 	*to++= FN_LIBCHAR;

--- 1.301/sql/field.cc	2006-02-07 23:02:49 +02:00
+++ 1.302/sql/field.cc	2006-02-25 20:35:07 +02:00
@@ -5266,7 +5266,7 @@
   }
 
   if (nr >= 19000000000000.0 && nr <= 99991231235959.0)
-    nr=floor(nr/1000000.0);			// Timestamp to date
+    nr= (longlong) floor(nr/1000000.0);         // Timestamp to date
 
   if (error)
     set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN,

--- 1.194/sql/handler.h	2006-02-21 18:29:29 +02:00
+++ 1.195/sql/handler.h	2006-02-25 20:35:07 +02:00
@@ -272,6 +272,7 @@
   long bqual_length;
   char data[XIDDATASIZE];  // not \0-terminated !
 
+  xid_t() {}                                /* Remove gcc warning */  
   bool eq(struct xid_t *xid)
   { return eq(xid->gtrid_length, xid->bqual_length, xid->data); }
   bool eq(long g, long b, const char *d)
@@ -646,6 +647,7 @@
 
 typedef struct st_ha_check_opt
 {
+  st_ha_check_opt() {}                        /* Remove gcc warning */
   ulong sort_buffer_size;
   uint flags;       /* isam layer flags (e.g. for myisamchk) */
   uint sql_flags;   /* sql layer flags - for something myisamchk cannot do */

--- 1.170/sql/item.cc	2006-02-23 11:49:36 +02:00
+++ 1.171/sql/item.cc	2006-02-25 21:54:29 +02:00
@@ -375,9 +375,6 @@
 void Item::cleanup()
 {
   DBUG_ENTER("Item::cleanup");
-  DBUG_PRINT("info", ("Item: 0x%lx, name %s, original name %s",
-		      this, name ? name : "(null)",
-                      orig_name ? orig_name : "null"));
   fixed=0;
   marker= 0;
   if (orig_name)

--- 1.191/sql/item.h	2006-02-17 20:56:36 +02:00
+++ 1.192/sql/item.h	2006-02-25 20:35:07 +02:00
@@ -164,7 +164,8 @@
   virtual my_decimal *val_decimal(Hybrid_type *val, my_decimal *buf) const;
   virtual String *val_str(Hybrid_type *val, String *buf, uint8 decimals) const;
   static const Hybrid_type_traits *instance();
-  Hybrid_type_traits() {};
+  Hybrid_type_traits() {}
+  virtual ~Hybrid_type_traits() {}
 };
 
 
@@ -339,6 +340,7 @@
   bool        save_resolve_in_select_list;
 
 public:
+  Name_resolution_context_state() {}          /* Remove gcc warning */
   TABLE_LIST *save_next_local;
 
 public:
@@ -1055,6 +1057,7 @@
 class Item_num: public Item
 {
 public:
+  Item_num() {}                               /* Remove gcc warning */
   virtual Item_num *neg()= 0;
   Item *safe_charset_converter(CHARSET_INFO *tocs);
 };

--- 1.128/sql/log_event.h	2006-01-20 14:17:10 +02:00
+++ 1.129/sql/log_event.h	2006-02-25 20:35:07 +02:00
@@ -131,6 +131,7 @@
  ****************************************************************************/
 struct sql_ex_info
 {
+  sql_ex_info() {}                            /* Remove gcc warning */
   char* field_term;
   char* enclosed;
   char* line_term;

--- 1.380/sql/mysql_priv.h	2006-02-22 12:59:56 +02:00
+++ 1.381/sql/mysql_priv.h	2006-02-25 20:35:07 +02:00
@@ -434,6 +434,7 @@
   byte *first;
   byte **next;
 
+  st_sql_list() {}                              /* Remove gcc warning */
   inline void empty()
   {
     elements=0;
@@ -1040,7 +1041,7 @@
 void close_temporary_tables(THD *thd);
 void close_tables_for_reopen(THD *thd, TABLE_LIST **tables);
 TABLE_LIST *find_table_in_list(TABLE_LIST *table,
-                               uint offset_to_list,
+                               st_table_list *TABLE_LIST::*link,
                                const char *db_name,
                                const char *table_name);
 TABLE_LIST *unique_table(THD *thd, TABLE_LIST *table, TABLE_LIST *table_list);
@@ -1130,7 +1131,7 @@
                                              const char *db_name,
                                              const char *table_name)
 {
-  return find_table_in_list(table, offsetof(TABLE_LIST, next_global),
+  return find_table_in_list(table, &TABLE_LIST::next_global,
                             db_name, table_name);
 }
 
@@ -1138,7 +1139,7 @@
                                             const char *db_name,
                                             const char *table_name)
 {
-  return find_table_in_list(table, offsetof(TABLE_LIST, next_local),
+  return find_table_in_list(table, &TABLE_LIST::next_local,
                             db_name, table_name);
 }
 

--- 1.204/sql/opt_range.cc	2006-02-24 23:41:34 +02:00
+++ 1.205/sql/opt_range.cc	2006-02-25 20:35:08 +02:00
@@ -1601,6 +1601,8 @@
   { return (void*) alloc_root(mem_root, (uint) size); }
   static void operator delete(void *ptr,size_t size) { TRASH(ptr, size); }
   static void operator delete(void *ptr, MEM_ROOT *mem_root) { /* Never called */ }
+  virtual ~TABLE_READ_PLAN() {}               /* Remove gcc warning */
+
 };
 
 class TRP_ROR_INTERSECT;
@@ -1624,6 +1626,7 @@
   TRP_RANGE(SEL_ARG *key_arg, uint idx_arg)
    : key(key_arg), key_idx(idx_arg)
   {}
+  virtual ~TRP_RANGE() {}                     /* Remove gcc warning */
 
   QUICK_SELECT_I *make_quick(PARAM *param, bool retrieve_full_rows,
                              MEM_ROOT *parent_alloc)
@@ -1645,6 +1648,8 @@
 class TRP_ROR_INTERSECT : public TABLE_READ_PLAN
 {
 public:
+  TRP_ROR_INTERSECT() {}                      /* Remove gcc warning */
+  virtual ~TRP_ROR_INTERSECT() {}             /* Remove gcc warning */
   QUICK_SELECT_I *make_quick(PARAM *param, bool retrieve_full_rows,
                              MEM_ROOT *parent_alloc);
 
@@ -1666,6 +1671,8 @@
 class TRP_ROR_UNION : public TABLE_READ_PLAN
 {
 public:
+  TRP_ROR_UNION() {}                          /* Remove gcc warning */
+  virtual ~TRP_ROR_UNION() {}                 /* Remove gcc warning */
   QUICK_SELECT_I *make_quick(PARAM *param, bool retrieve_full_rows,
                              MEM_ROOT *parent_alloc);
   TABLE_READ_PLAN **first_ror; /* array of ptrs to plans for merged scans */
@@ -1682,6 +1689,8 @@
 class TRP_INDEX_MERGE : public TABLE_READ_PLAN
 {
 public:
+  TRP_INDEX_MERGE() {}                        /* Remove gcc warning */
+  virtual ~TRP_INDEX_MERGE() {}               /* Remove gcc warning */
   QUICK_SELECT_I *make_quick(PARAM *param, bool retrieve_full_rows,
                              MEM_ROOT *parent_alloc);
   TRP_RANGE **range_scans; /* array of ptrs to plans of merged scans */
@@ -1731,6 +1740,7 @@
       if (key_infix_len)
         memcpy(this->key_infix, key_infix_arg, key_infix_len);
     }
+  virtual ~TRP_GROUP_MIN_MAX() {}             /* Remove gcc warning */
 
   QUICK_SELECT_I *make_quick(PARAM *param, bool retrieve_full_rows,
                              MEM_ROOT *parent_alloc);

--- 1.304/sql/sql_base.cc	2006-02-22 13:04:17 +02:00
+++ 1.305/sql/sql_base.cc	2006-02-25 20:35:08 +02:00
@@ -917,6 +917,15 @@
   DESCRIPTION
     Marks all tables in the list which were used by current substatement
     (they are marked by its query_id) as free for reuse.
+
+  NOTE
+    The reason we reset query_id is that it's not enough to just test
+    if table->query_id != thd->query_id to know if a table is in use.
+
+    For example
+    SELECT f1_that_uses_t1() FROM t1;
+    In f1_that_uses_t1() we will see one instance of t1 where query_id is
+    set to query_id of original query.
 */
 
 static void mark_used_tables_as_free_for_reuse(THD *thd, TABLE *table)
@@ -1230,11 +1239,11 @@
 */
 
 TABLE_LIST *find_table_in_list(TABLE_LIST *table,
-                               uint offset,
+                               st_table_list *TABLE_LIST::*link,
                                const char *db_name,
                                const char *table_name)
 {
-  for (; table; table= *(TABLE_LIST **) ((char*) table + offset))
+  for (; table; table= table->*link )
   {
     if ((table->table == 0 || table->table->s->tmp_table == NO_TMP_TABLE) &&
         strcmp(table->db, db_name) == 0 &&

--- 1.245/sql/sql_class.cc	2006-02-14 07:41:15 +02:00
+++ 1.246/sql/sql_class.cc	2006-02-25 20:35:08 +02:00
@@ -992,6 +992,7 @@
     protocol->remove_last_row();
   else
     DBUG_RETURN(protocol->write());
+  protocol->remove_last_row();
   DBUG_RETURN(1);
 }
 

--- 1.284/sql/sql_class.h	2006-02-14 07:41:19 +02:00
+++ 1.285/sql/sql_class.h	2006-02-25 21:54:29 +02:00
@@ -629,6 +629,7 @@
 
 class Security_context {
 public:
+  Security_context() {}                       /* Remove gcc warning */
   /*
     host - host of the client
     user - user of the client, set to NULL until the user has been read from
@@ -1467,6 +1468,7 @@
 class select_result_interceptor: public select_result
 {
 public:
+  select_result_interceptor() {}              /* Remove gcc warning */
   uint field_count(List<Item> &fields) const { return 0; }
   bool send_fields(List<Item> &fields, uint flag) { return FALSE; }
 };
@@ -1757,6 +1759,7 @@
 class user_var_entry
 {
  public:
+  user_var_entry() {}                         /* Remove gcc warning */
   LEX_STRING name;
   char *value;
   ulong length;

--- 1.130/sql/sql_db.cc	2006-02-16 01:49:28 +02:00
+++ 1.131/sql/sql_db.cc	2006-02-25 20:35:08 +02:00
@@ -1233,10 +1233,13 @@
 #ifndef NO_EMBEDDED_ACCESS_CHECKS
   ulong db_access;
   Security_context *sctx= thd->security_ctx;
+  LINT_INIT(db_access);
 #endif
   DBUG_ENTER("mysql_change_db");
   DBUG_PRINT("enter",("name: '%s'",name));
 
+  LINT_INIT(db_length);
+
   /* dbname can only be NULL if malloc failed */
   if (!dbname || !(db_length= strlen(dbname)))
   {
@@ -1254,7 +1257,7 @@
   if (check_db_name(dbname))
   {
     my_error(ER_WRONG_DB_NAME, MYF(0), dbname);
-    x_free(dbname);
+    my_free(dbname, MYF(0));
     DBUG_RETURN(1);
   }
   DBUG_PRINT("info",("Use database: %s", dbname));
@@ -1303,8 +1306,7 @@
     x_free(thd->db);
   if (dbname && dbname[0] == 0)
   {
-    if (!(thd->slave_thread))
-      x_free(dbname);
+    my_free(dbname, MYF(0));
     thd->db= NULL;
     thd->db_length= 0;
   }

--- 1.522/sql/sql_parse.cc	2006-02-15 18:12:20 +02:00
+++ 1.523/sql/sql_parse.cc	2006-02-25 20:35:09 +02:00
@@ -4972,7 +4972,9 @@
     break;
   }
   default:
+#ifndef EMBEDDED_LIBRARY
     DBUG_ASSERT(0);                             /* Impossible */
+#endif
     send_ok(thd);
     break;
   }
@@ -6149,10 +6151,11 @@
     /*
       table_list.next points to the last inserted TABLE_LIST->next_local'
       element
+      We don't use the offsetof() macro here to avoid warnings from gcc
     */
-    previous_table_ref= (TABLE_LIST*) (table_list.next -
-                                       offsetof(TABLE_LIST, next_local));
-    DBUG_ASSERT(previous_table_ref);
+    previous_table_ref= (TABLE_LIST*) ((char*) table_list.next -
+                                       ((char*) &(ptr->next_local) -
+                                        (char*) ptr));
     /*
       Set next_name_resolution_table of the previous table reference to point
       to the current table reference. In effect the list

--- 1.104/sql/sql_select.h	2006-02-08 22:52:05 +02:00
+++ 1.105/sql/sql_select.h	2006-02-25 20:35:09 +02:00
@@ -104,6 +104,7 @@
 Next_select_func setup_end_select_func(JOIN *join);
 
 typedef struct st_join_table {
+  st_join_table() {}                          /* Remove gcc warning */
   TABLE		*table;
   KEYUSE	*keyuse;			/* pointer to first used key */
   SQL_SELECT	*select;
@@ -288,7 +289,7 @@
   }
 
   JOIN(JOIN &join)
-    :fields_list(join.fields_list)
+    :Sql_alloc(), fields_list(join.fields_list)
   {
     init(join.thd, join.fields_list, join.select_options,
          join.result);

--- 1.131/sql/table.h	2006-02-16 15:53:27 +02:00
+++ 1.132/sql/table.h	2006-02-25 20:35:09 +02:00
@@ -216,6 +216,8 @@
 /* Information for one open table */
 
 struct st_table {
+  st_table() {}                               /* Remove gcc warning */
+
   TABLE_SHARE	*s;
   handler	*file;
 #ifdef NOT_YET
@@ -490,6 +492,7 @@
 
 typedef struct st_table_list
 {
+  st_table_list() {}                          /* Remove gcc warning */
   /*
     List of tables local to a subquery (used by SQL_LIST). Considers
     views as leaves (unlike 'next_leaf' below). Created at parse time
@@ -722,6 +725,7 @@
 class Field_iterator: public Sql_alloc
 {
 public:
+  Field_iterator() {}                         /* Remove gcc warning */
   virtual ~Field_iterator() {}
   virtual void set(TABLE_LIST *)= 0;
   virtual void next()= 0;

--- 1.135/mysql-test/r/subselect.result	2006-02-22 10:27:16 +02:00
+++ 1.136/mysql-test/r/subselect.result	2006-02-25 20:35:06 +02:00
@@ -2987,7 +2987,6 @@
 max(fld)
 1
 drop table t1;
-purge master logs before (select adddate(current_timestamp(), interval -4 day));
 CREATE TABLE t1 (a int, b int);
 CREATE TABLE t2 (c int, d int);
 CREATE TABLE t3 (e int);

--- 1.4.2.1/mysql-test/t/blackhole.test	2006-02-24 18:34:08 +02:00
+++ 1.8/mysql-test/extra/binlog_tests/blackhole.test	2006-02-25 20:35:06 +02:00
@@ -128,3 +128,20 @@
 drop table t1,t2,t3;
 
 # End of 4.1 tests
+
+# Test that a transaction which is rolled back does not go into binlog
+# and that a transaction which is committed does
+
+reset master;
+create table t1 (a int) engine=blackhole;
+set autocommit=0;
+start transaction;
+insert into t1 values(1);
+commit;
+start transaction;
+insert into t1 values(2);
+rollback;
+set autocommit=1;
+--replace_result $VERSION VERSION
+--replace_column 2 # 5 #
+show binlog events;

--- 1.31/sql/tztime.cc	2006-01-10 20:50:20 +02:00
+++ 1.32/sql/tztime.cc	2006-02-25 20:35:09 +02:00
@@ -973,6 +973,7 @@
 class Time_zone_system : public Time_zone
 {
 public:
+  Time_zone_system() {}                       /* Remove gcc warning */
   virtual my_time_t TIME_to_gmt_sec(const TIME *t,
                                     my_bool *in_dst_time_gap) const;
   virtual void gmt_sec_to_TIME(TIME *tmp, my_time_t t) const;
@@ -1066,6 +1067,7 @@
 class Time_zone_utc : public Time_zone
 {
 public:
+  Time_zone_utc() {}                          /* Remove gcc warning */
   virtual my_time_t TIME_to_gmt_sec(const TIME *t,
                                     my_bool *in_dst_time_gap) const;
   virtual void gmt_sec_to_TIME(TIME *tmp, my_time_t t) const;

--- 1.14/sql/tztime.h	2005-12-05 12:44:56 +02:00
+++ 1.15/sql/tztime.h	2006-02-25 20:35:09 +02:00
@@ -30,6 +30,7 @@
 class Time_zone: public Sql_alloc 
 {
 public:
+  Time_zone() {}                              /* Remove gcc warning */
   /*
     Converts local time in broken down TIME representation to 
     my_time_t (UTC seconds since Epoch) represenation.

--- 1.38/mysys/my_bitmap.c	2006-02-02 15:51:30 +02:00
+++ 1.39/mysys/my_bitmap.c	2006-02-25 21:54:29 +02:00
@@ -84,7 +84,7 @@
   }
 }
 
-static inline void bitmap_lock(MY_BITMAP *map)
+static inline void bitmap_lock(MY_BITMAP *map __attribute__((unused)))
 {
 #ifdef THREAD
   if (map->mutex)
@@ -92,7 +92,7 @@
 #endif
 }
 
-static inline void bitmap_unlock(MY_BITMAP *map)
+static inline void bitmap_unlock(MY_BITMAP *map __attribute__((unused)))
 {
 #ifdef THREAD
   if (map->mutex)

--- 1.11/mysql-test/t/view_grant.test	2006-02-07 18:56:23 +02:00
+++ 1.12/mysql-test/t/view_grant.test	2006-02-25 20:35:07 +02:00
@@ -717,3 +717,5 @@
 create definer=some_user@localhost sql security invoker view v1 as select 1;
 show create view v1;
 drop view v1;
+
+

--- 1.48.5.1/ndb/include/ndbapi/NdbDictionary.hpp	2006-02-25 17:46:25 +02:00
+++ 1.70/storage/ndb/include/ndbapi/NdbDictionary.hpp	2006-02-25 20:35:09 +02:00
@@ -96,7 +96,9 @@
      * Get version of object
      */
     virtual int getObjectVersion() const = 0;
-
+    
+    virtual int getObjectId() const = 0;
+    
     /**
      * Object type
      */
@@ -109,7 +111,11 @@
       HashIndexTrigger = 7,   ///< Index maintenance, internal
       IndexTrigger = 8,       ///< Index maintenance, internal
       SubscriptionTrigger = 9,///< Backup or replication, internal
-      ReadOnlyConstraint = 10 ///< Trigger, internal
+      ReadOnlyConstraint = 10,///< Trigger, internal
+      Tablespace = 20,        ///< Tablespace
+      LogfileGroup = 21,      ///< Logfile group
+      Datafile = 22,          ///< Datafile
+      Undofile = 23           ///< Undofile
     };
 
     /**
@@ -150,12 +156,17 @@
       FragSingle = 1,         ///< Only one fragment
       FragAllSmall = 2,       ///< One fragment per node, default
       FragAllMedium = 3,      ///< two fragments per node
-      FragAllLarge = 4        ///< Four fragments per node.
+      FragAllLarge = 4,       ///< Four fragments per node.
+      DistrKeyHash = 5,
+      DistrKeyLin = 6,
+      UserDefined = 7
     };
   };
 
   class Table; // forward declaration
-  
+  class Tablespace; // forward declaration
+//  class NdbEventOperation; // forward declaration
+
   /**
    * @class Column
    * @brief Represents a column in an NDB Cluster table
@@ -212,6 +223,34 @@
       Timestamp = NDB_TYPE_TIMESTAMP  ///< Unix time
     };
 
+    /*
+     * Array type specifies internal attribute format.
+     *
+     * - ArrayTypeFixed is stored as fixed number of bytes.  This type
+     *   is fastest to access but can waste space.
+     *
+     * - ArrayTypeVar is stored as variable number of bytes with a fixed
+     *   overhead of 2 bytes.
+     *
+     * Default is ArrayTypeVar for Var* types and ArrayTypeFixed for
+     * others.  The default is normally ok.
+     */
+    enum ArrayType {
+      ArrayTypeFixed = NDB_ARRAYTYPE_FIXED,          // 0 length bytes
+      ArrayTypeShortVar = NDB_ARRAYTYPE_SHORT_VAR,   // 1 length bytes
+      ArrayTypeMediumVar = NDB_ARRAYTYPE_MEDIUM_VAR // 2 length bytes
+    };
+
+    /*
+     * Storage type specifies whether attribute is stored in memory or
+     * on disk.  Default is memory.  Disk attributes are potentially
+     * much slower to access and cannot be indexed in version 5.1.
+     */
+    enum StorageType {
+      StorageTypeMemory = NDB_STORAGETYPE_MEMORY,
+      StorageTypeDisk = NDB_STORAGETYPE_DISK
+    };
+
     /** 
      * @name General 
      * @{
@@ -238,6 +277,10 @@
      */
     int getColumnNo() const;
 
+#ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
+    int getAttrId() const;
+#endif
+
     /**
      * Check if column is equal to some other column
      * @param  column  Column to compare with
@@ -331,6 +374,9 @@
     inline bool getDistributionKey() const { return getPartitionKey(); };
 #endif
 
+    ArrayType getArrayType() const;
+    StorageType getStorageType() const;
+
     /** @} *******************************************************************/
 
 
@@ -439,6 +485,9 @@
     { setPartitionKey(enable); };
 #endif
 
+    void setArrayType(ArrayType type);
+    void setStorageType(StorageType type);
+
     /** @} *******************************************************************/
 
 #ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
@@ -456,6 +505,10 @@
     static const Column * COMMIT_COUNT;
     static const Column * ROW_SIZE;
     static const Column * RANGE_NO;
+    static const Column * DISK_REF;
+    static const Column * RECORDS_IN_RANGE;
+    static const Column * ROWID;
+    static const Column * ROW_GCI;
     
     int getSizeInBytes() const;
 #endif
@@ -619,6 +672,24 @@
     const void* getFrmData() const;
     Uint32 getFrmLength() const;
 
+    /**
+     * Get Fragment Data (id, state and node group)
+     */
+    const void *getFragmentData() const;
+    Uint32 getFragmentDataLen() const;
+
+    /**
+     * Get Range or List Array (value, partition)
+     */
+    const void *getRangeListData() const;
+    Uint32 getRangeListDataLen() const;
+
+    /**
+     * Get Tablespace Data (id, version)
+     */
+    const void *getTablespaceData() const;
+    Uint32 getTablespaceDataLen() const;
+
     /** @} *******************************************************************/
 
     /** 
@@ -665,7 +736,23 @@
      * @see NdbDictionary::Table::getLogging.
      */
     void setLogging(bool); 
-   
+  
+    /**
+     * Set/Get Linear Hash Flag
+     */ 
+    void setLinearFlag(Uint32 flag);
+    bool getLinearFlag() const;
+
+    /**
+     * Set fragment count
+     */
+    void setFragmentCount(Uint32);
+
+    /**
+     * Get fragment count
+     */
+    Uint32 getFragmentCount() const;
+
     /**
      * Set fragmentation type
      */
@@ -697,6 +784,11 @@
      */
     void setMaxLoadFactor(int);
 
+    void setTablespace(const char * name);
+    void setTablespace(const class Tablespace &);
+    const char * getTablespace() const;
+    bool getTablespace(Uint32 *id= 0, Uint32 *version= 0) const;
+
     /**
      * Get table object type
      */
@@ -713,18 +805,77 @@
     virtual int getObjectVersion() const;
 
     /**
+     * Set/Get Maximum number of rows in table (only used to calculate
+     * number of partitions).
+     */
+    void setMaxRows(Uint64 maxRows);
+    Uint64 getMaxRows() const;
+
+    /**
+     * Set/Get indicator if default number of partitions is used in table.
+     */
+    void setDefaultNoPartitionsFlag(Uint32 indicator);
+    Uint32 getDefaultNoPartitionsFlag() const;
+   
+    /**
+     * Get object id
+     */
+    virtual int getObjectId() const;
+
+    /**
      * Set frm file to store with this table
      */ 
     void setFrm(const void* data, Uint32 len);
 
     /**
+     * Set array of fragment information containing
+     * Fragment Identity
+     * Node group identity
+     * Fragment State
+     */
+    void setFragmentData(const void* data, Uint32 len);
+
+    /**
+     * Set/Get tablespace names per fragment
+     */
+    void setTablespaceNames(const void* data, Uint32 len);
+    const void *getTablespaceNames();
+    Uint32 getTablespaceNamesLen() const;
+
+    /**
+     * Set tablespace information per fragment
+     * Contains a tablespace id and a tablespace version
+     */
+    void setTablespaceData(const void* data, Uint32 len);
+
+    /**
+     * Set array of information mapping range values and list values
+     * to fragments. This is essentially a sorted map consisting of
+     * pairs of value, fragment identity. For range partitions there is
+     * one pair per fragment. For list partitions it could be any number
+     * of pairs, at least as many as there are fragments.
+     */
+    void setRangeListData(const void* data, Uint32 len);
+
+    /**
      * Set table object type
      */
     void setObjectType(Object::Type type);
 
     /** @} *******************************************************************/
 
+    /**
+     * 
+     */
+    void setRowGCIIndicator(bool value);
+    bool getRowGCIIndicator() const;
+
+    void setRowChecksumIndicator(bool value);
+    bool getRowChecksumIndicator() const;
+ 
 #ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
+    const char *getMysqlName() const;
+
     void setStoredTable(bool x) { setLogging(x); }
     bool getStoredTable() const { return getLogging(); }
 
@@ -736,7 +887,10 @@
 
   private:
 #ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
+    friend class Ndb;
+    friend class NdbDictionaryImpl;
     friend class NdbTableImpl;
+    friend class NdbEventOperationImpl;
 #endif
     class NdbTableImpl & m_impl;
     Table(NdbTableImpl&);
@@ -825,6 +979,11 @@
      */
     virtual int getObjectVersion() const;
 
+    /**
+     * Get object id
+     */
+    virtual int getObjectId() const;
+
     /** @} *******************************************************************/
 
     /** 
@@ -918,6 +1077,7 @@
   private:
 #ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
     friend class NdbIndexImpl;
+    friend class NdbIndexStat;
 #endif
     class NdbIndexImpl & m_impl;
     Index(NdbIndexImpl&);
@@ -936,12 +1096,44 @@
     /** TableEvent must match 1 << TriggerEvent */
 #endif
     enum TableEvent { 
-      TE_INSERT=1, ///< Insert event on table
-      TE_DELETE=2, ///< Delete event on table
-      TE_UPDATE=4, ///< Update event on table
-      TE_ALL=7     ///< Any/all event on table (not relevant when 
-                   ///< events are received)
+      TE_INSERT      =1<<0, ///< Insert event on table
+      TE_DELETE      =1<<1, ///< Delete event on table
+      TE_UPDATE      =1<<2, ///< Update event on table
+#ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
+      TE_SCAN        =1<<3, ///< Scan event on table
+      TE_FIRST_NON_DATA_EVENT =1<<4,
+#endif
+      TE_DROP        =1<<4, ///< Drop of table
+      TE_ALTER       =1<<5, ///< Alter of table
+      TE_CREATE      =1<<6, ///< Create of table
+      TE_GCP_COMPLETE=1<<7, ///< GCP is complete
+      TE_CLUSTER_FAILURE=1<<8, ///< Cluster is unavailable
+      TE_STOP        =1<<9, ///< Stop of event operation
+      TE_NODE_FAILURE=1<<10, ///< Node failed
+      TE_SUBSCRIBE   =1<<11, ///< Node subscribes
+      TE_UNSUBSCRIBE =1<<12, ///< Node unsubscribes
+      TE_ALL=0xFFFF         ///< Any/all event on table (not relevant when 
+                            ///< events are received)
+    };
+#ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
+    enum _TableEvent { 
+      _TE_INSERT=0,
+      _TE_DELETE=1,
+      _TE_UPDATE=2,
+      _TE_SCAN=3,
+      _TE_FIRST_NON_DATA_EVENT=4,
+      _TE_DROP=4,
+      _TE_ALTER=5,
+      _TE_CREATE=6,
+      _TE_GCP_COMPLETE=7,
+      _TE_CLUSTER_FAILURE=8,
+      _TE_STOP=9,
+      _TE_NODE_FAILURE=10,
+      _TE_SUBSCRIBE=11,
+      _TE_UNSUBSCRIBE=12,
+      _TE_NUL=13 // internal (e.g. INS o DEL within same GCI)
     };
+#endif
     /**
      *  Specifies the durability of an event
      * (future version may supply other types)
@@ -968,6 +1160,15 @@
     };
 
     /**
+     * Specifies reporting options for table events
+     */
+    enum EventReport {
+      ER_UPDATED = 0,
+      ER_ALL = 1,
+      ER_SUBSCRIBE = 2
+    };
+
+    /**
      *  Constructor
      *  @param  name  Name of event
      */
@@ -988,6 +1189,12 @@
      */
     const char *getName() const;
     /**
+     * Get table that the event is defined on
+     *
+     * @return pointer to table or NULL if no table has been defined
+     */
+    const NdbDictionary::Table * getTable() const;
+    /**
      * Define table on which events should be detected
      *
      * @note calling this method will default to detection
@@ -1015,6 +1222,10 @@
      */
     void addTableEvent(const TableEvent te);
     /**
+     * Check if a specific table event will be detected
+     */
+    bool getTableEvent(const TableEvent te) const;
+    /**
      * Set durability of the event
      */
     void setDurability(EventDurability);
@@ -1022,6 +1233,14 @@
      * Get durability of the event
      */
     EventDurability getDurability() const;
+    /**
+     * Set report option of the event
+     */
+    void setReport(EventReport);
+    /**
+     * Get report option of the event
+     */
+    EventReport getReport() const;
 #ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
     void addColumn(const Column &c);
 #endif
@@ -1060,6 +1279,29 @@
     int getNoOfEventColumns() const;
 
     /**
+     * Get a specific column in the event
+     */
+    const Column * getEventColumn(unsigned no) const;
+
+    /**
+     * The merge events flag is false by default.  Setting it true
+     * implies that events are merged in following ways:
+     *
+     * - for given NdbEventOperation associated with this event,
+     *   events on same PK within same GCI are merged into single event
+     *
+     * - a blob table event is created for each blob attribute
+     *   and blob events are handled as part of main table events
+     *
+     * - blob post/pre data from the blob part events can be read
+     *   via NdbBlob methods as a single value
+     *
+     * NOTE: Currently this flag is not inherited by NdbEventOperation
+     * and must be set on NdbEventOperation explicitly.
+     */
+    void mergeEvents(bool flag);
+
+    /**
      * Get object status
      */
     virtual Object::Status getObjectStatus() const;
@@ -1069,6 +1311,11 @@
      */
     virtual int getObjectVersion() const;
 
+    /**
+     * Get object id
+     */
+    virtual int getObjectId() const;
+
 #ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
     void print();
 #endif
@@ -1082,6 +1329,187 @@
     Event(NdbEventImpl&);
   };
 
+  struct AutoGrowSpecification {
+    Uint32 min_free;
+    Uint64 max_size;
+    Uint64 file_size;
+    const char * filename_pattern;
+  };
+
+  /**
+   * @class LogfileGroup
+   */
+  class LogfileGroup : public Object {
+  public:
+    LogfileGroup();
+    LogfileGroup(const LogfileGroup&);
+    virtual ~LogfileGroup();
+
+    void setName(const char * name);
+    const char* getName() const;
+
+    void setUndoBufferSize(Uint32 sz);
+    Uint32 getUndoBufferSize() const;
+    
+    void setAutoGrowSpecification(const AutoGrowSpecification&);
+    const AutoGrowSpecification& getAutoGrowSpecification() const;
+
+    Uint64 getUndoFreeWords() const;
+
+    /**
+     * Get object status
+     */
+    virtual Object::Status getObjectStatus() const;
+
+    /**
+     * Get object version
+     */
+    virtual int getObjectVersion() const;
+
+    /**
+     * Get object id
+     */
+    virtual int getObjectId() const;
+
+  private:
+    friend class NdbDictionaryImpl;
+    friend class NdbLogfileGroupImpl;
+    class NdbLogfileGroupImpl & m_impl;
+    LogfileGroup(NdbLogfileGroupImpl&);
+  };
+
+  /**
+   * @class Tablespace
+   */
+  class Tablespace : public Object {
+  public:
+    Tablespace();
+    Tablespace(const Tablespace&);
+    virtual ~Tablespace();
+
+    void setName(const char * name);
+    const char* getName() const;
+
+    void setExtentSize(Uint32 sz);
+    Uint32 getExtentSize() const;
+
+    void setAutoGrowSpecification(const AutoGrowSpecification&);
+    const AutoGrowSpecification& getAutoGrowSpecification() const;
+
+    void setDefaultLogfileGroup(const char * name);
+    void setDefaultLogfileGroup(const class LogfileGroup&);
+
+    const char * getDefaultLogfileGroup() const;
+    Uint32 getDefaultLogfileGroupId() const;
+    
+    /**
+     * Get object status
+     */
+    virtual Object::Status getObjectStatus() const;
+
+    /**
+     * Get object version
+     */
+    virtual int getObjectVersion() const;
+
+    /**
+     * Get object id
+     */
+    virtual int getObjectId() const;
+
+  private:
+    friend class NdbTablespaceImpl;
+    class NdbTablespaceImpl & m_impl;
+    Tablespace(NdbTablespaceImpl&);
+  };
+
+  class Datafile : public Object {
+  public:
+    Datafile();
+    Datafile(const Datafile&);
+    virtual ~Datafile();
+
+    void setPath(const char * name);
+    const char* getPath() const;
+  
+    void setSize(Uint64);
+    Uint64 getSize() const;
+    Uint64 getFree() const;
+
+    void setTablespace(const char * name);
+    void setTablespace(const class Tablespace &);
+    const char * getTablespace() const;
+    Uint32 getTablespaceId() const;
+
+    void setNode(Uint32 nodeId);
+    Uint32 getNode() const;
+
+    Uint32 getFileNo() const;
+
+    /**
+     * Get object status
+     */
+    virtual Object::Status getObjectStatus() const;
+
+    /**
+     * Get object version
+     */
+    virtual int getObjectVersion() const;
+
+    /**
+     * Get object id
+     */
+    virtual int getObjectId() const;
+
+  private:
+    friend class NdbDatafileImpl;
+    class NdbDatafileImpl & m_impl;
+    Datafile(NdbDatafileImpl&);
+  };
+
+  class Undofile : public Object {
+  public:
+    Undofile();
+    Undofile(const Undofile&);
+    virtual ~Undofile();
+
+    void setPath(const char * path);
+    const char* getPath() const;
+  
+    void setSize(Uint64);
+    Uint64 getSize() const;
+
+    void setLogfileGroup(const char * name);
+    void setLogfileGroup(const class LogfileGroup &);
+    const char * getLogfileGroup() const;
+    Uint32 getLogfileGroupId() const;
+
+    void setNode(Uint32 nodeId);
+    Uint32 getNode() const;
+
+    Uint32 getFileNo() const;
+
+    /**
+     * Get object status
+     */
+    virtual Object::Status getObjectStatus() const;
+
+    /**
+     * Get object version
+     */
+    virtual int getObjectVersion() const;
+
+    /**
+     * Get object id
+     */
+    virtual int getObjectId() const;
+
+  private:
+    friend class NdbUndofileImpl;
+    class NdbUndofileImpl & m_impl;
+    Undofile(NdbUndofileImpl&);
+  };
+
   /**
    * @class Dictionary
    * @brief Dictionary for defining and retreiving meta data
@@ -1173,6 +1601,14 @@
      */
     const Table * getTable(const char * name) const;
 
+#ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
+    /*
+     * Save a table definition in dictionary cache
+     * @param table Object to put into cache
+     */
+    void putTable(const Table * table);
+#endif
+
     /**
      * Get index with given name, NULL if undefined
      * @param indexName  Name of index to get.
@@ -1308,10 +1744,39 @@
      */
     void invalidateIndex(const char * indexName,
                          const char * tableName);
+    /**
+     * Force gcp and wait for gcp complete
+     */
+    int forceGCPWait();
 #endif
 
     /** @} *******************************************************************/
 
+    /** @} *******************************************************************/
+    /** 
+     * @name Disk data objects
+     * @{
+     */
+    
+    int createLogfileGroup(const LogfileGroup &);
+    int dropLogfileGroup(const LogfileGroup&);
+    LogfileGroup getLogfileGroup(const char * name);
+
+    int createTablespace(const Tablespace &);
+    int dropTablespace(const Tablespace&);
+    Tablespace getTablespace(const char * name);
+    Tablespace getTablespace(Uint32 tablespaceId);
+
+    int createDatafile(const Datafile &, bool overwrite_existing = false);
+    int dropDatafile(const Datafile&);
+    Datafile getDatafile(Uint32 node, const char * path);
+    
+    int createUndofile(const Undofile &, bool overwrite_existing = false);
+    int dropUndofile(const Undofile&);
+    Undofile getUndofile(Uint32 node, const char * path);
+    
+    /** @} *******************************************************************/
+    
   protected:
     Dictionary(Ndb & ndb);
     ~Dictionary();

--- 1.14/mysql-test/t/temp_table.test	2005-11-23 22:44:54 +02:00
+++ 1.15/mysql-test/t/temp_table.test	2006-02-25 20:35:07 +02:00
@@ -1,3 +1,5 @@
+# mysqltest should be fixed
+-- source include/not_embedded.inc
 #
 # Test of temporary tables
 #

--- 1.32/sql/sql_cache.h	2005-11-23 14:04:12 +02:00
+++ 1.33/sql/sql_cache.h	2006-02-25 21:54:29 +02:00
@@ -69,6 +69,7 @@
 
 struct Query_cache_block_table
 {
+  Query_cache_block_table() {}                /* Remove gcc warning */
   TABLE_COUNTER_TYPE n;		// numbr in table (from 0)
   Query_cache_block_table *next, *prev;
   Query_cache_table *parent;
@@ -78,6 +79,7 @@
 
 struct Query_cache_block
 {
+  Query_cache_block() {}                      /* Remove gcc warning */
   enum block_type {FREE, QUERY, RESULT, RES_CONT, RES_BEG,
 		   RES_INCOMPLETE, TABLE, INCOMPLETE};
 
@@ -143,6 +145,7 @@
 
 struct Query_cache_table
 {
+  Query_cache_table() {}                      /* Remove gcc warning */
   char *tbl;
   uint32 key_len;
   uint8 table_type;
@@ -171,6 +174,7 @@
 
 struct Query_cache_result
 {
+  Query_cache_result() {}                     /* Remove gcc warning */
   Query_cache_block *query;
 
   inline gptr data()
@@ -197,6 +201,7 @@
 
 struct Query_cache_memory_bin
 {
+  Query_cache_memory_bin() {}                 /* Remove gcc warning */
 #ifndef DBUG_OFF
   ulong size;
 #endif
@@ -215,8 +220,7 @@
 
 struct Query_cache_memory_bin_step
 {
-public:
-  Query_cache_memory_bin_step() {}
+  Query_cache_memory_bin_step() {}            /* Remove gcc warning */
   ulong size;
   ulong increment;
   uint idx;

--- 1.40/scripts/mysql_fix_privilege_tables.sql	2006-02-02 12:35:58 +02:00
+++ 1.41/scripts/mysql_fix_privilege_tables.sql	2006-02-25 21:54:29 +02:00
@@ -680,3 +680,9 @@
 ALTER TABLE tables_priv MODIFY Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') COLLATE utf8_general_ci DEFAULT '' NOT NULL;
 
 UPDATE user SET Trigger_priv=Super_priv WHERE @hadTriggerPriv = 0;
+
+# Activate the new, possible modified privilege tables
+# This should not be needed, but gives us some extra testing that the above
+# changes was correct
+
+flush privileges;

--- 1.7/mysql-test/t/sp-destruct.test	2006-02-09 12:34:34 +02:00
+++ 1.8/mysql-test/t/sp-destruct.test	2006-02-25 20:35:07 +02:00
@@ -54,10 +54,13 @@
 
 # Thrashing the .frm file
 --system echo 'saljdlfa' > $MYSQLTEST_VARDIR/master-data/mysql/proc.frm
+--replace_result $MYSQLTEST_VARDIR . master-data// ''
 --error ER_NOT_FORM_FILE
 call bug14233();
+--replace_result $MYSQLTEST_VARDIR . master-data// ''
 --error ER_NOT_FORM_FILE
 create view v1 as select bug14233_f();
+--replace_result $MYSQLTEST_VARDIR . master-data// ''
 --error ER_NOT_FORM_FILE
 insert into t1 values (0);
 

--- 1.179/mysql-test/t/sp.test	2006-02-23 11:49:36 +02:00
+++ 1.180/mysql-test/t/sp.test	2006-02-25 20:35:07 +02:00
@@ -699,10 +699,11 @@
 --disable_warnings
 drop procedure if exists into_outfile|
 --enable_warnings
-create procedure into_outfile(x char(16), y int)
+--replace_result $MYSQLTEST_VARDIR ..
+eval create procedure into_outfile(x char(16), y int)
 begin
   insert into test.t1 values (x, y);
-  select * into outfile "../tmp/spout" from test.t1;
+  select * into outfile "$MYSQLTEST_VARDIR/tmp/spout" from test.t1;
   insert into test.t1 values (concat(x, "2"), y+2);
 end|
 
@@ -715,10 +716,11 @@
 --disable_warnings
 drop procedure if exists into_dumpfile|
 --enable_warnings
-create procedure into_dumpfile(x char(16), y int)
+--replace_result $MYSQLTEST_VARDIR ..
+eval create procedure into_dumpfile(x char(16), y int)
 begin
   insert into test.t1 values (x, y);
-  select * into dumpfile "../tmp/spdump" from test.t1 limit 1;
+  select * into dumpfile "$MYSQLTEST_VARDIR/tmp/spdump" from test.t1 limit 1;
   insert into test.t1 values (concat(x, "2"), y+2);
 end|
 

--- 1.4.1.1/mysql-test/r/binlog.result	2006-02-24 18:34:07 +02:00
+++ 1.8/mysql-test/r/binlog_stm_binlog.result	2006-02-25 21:54:29 +02:00
@@ -1,3 +1,15 @@
+create table t1 (a int, b int) engine=innodb;
+begin;
+insert into t1 values (1,2);
+commit;
+show binlog events;
+Log_name	Pos	Event_type	Server_id	End_log_pos	Info
+master-bin.000001	4	Format_desc	1	102	Server ver: #, Binlog ver: #
+master-bin.000001	102	Query	1	209	use `test`; create table t1 (a int, b int) engine=innodb
+master-bin.000001	209	Query	1	277	use `test`; BEGIN
+master-bin.000001	277	Query	1	90	use `test`; insert into t1 values (1,2)
+master-bin.000001	367	Xid	1	394	COMMIT /* XID */
+drop table t1;
 drop table if exists t1, t2;
 reset master;
 create table t1 (a int) engine=bdb;
@@ -8,7 +20,7 @@
 begin;
 insert t2 values (5);
 commit;
-show binlog events from 98;
+show binlog events from 102;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	1	#	use `test`; create table t1 (a int) engine=bdb
 master-bin.000001	#	Query	1	#	use `test`; create table t2 (a int) engine=innodb
@@ -17,14 +29,14 @@
 master-bin.000001	#	Query	1	#	use `test`; COMMIT
 master-bin.000001	#	Query	1	#	use `test`; BEGIN
 master-bin.000001	#	Query	1	#	use `test`; insert t2 values (5)
-master-bin.000001	#	Xid	1	#	COMMIT /* xid=12 */
+master-bin.000001	#	Xid	1	#	COMMIT /* xid= */
 drop table t1,t2;
 reset master;
 create table t1 (n int) engine=innodb;
 begin;
 commit;
 drop table t1;
-show binlog events in 'master-bin.000001' from 98;
+show binlog events in 'master-bin.000001' from 102;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000001	#	Query	1	#	use `test`; create table t1 (n int) engine=innodb
 master-bin.000001	#	Query	1	#	use `test`; BEGIN
@@ -128,8 +140,8 @@
 master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(3 + 4)
 master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(2 + 4)
 master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(1 + 4)
-master-bin.000001	#	Xid	1	#	COMMIT /* xid=19 */
+master-bin.000001	#	Xid	1	#	COMMIT /* xid= */
 master-bin.000001	#	Rotate	1	#	master-bin.000002;pos=4
-show binlog events in 'master-bin.000002' from 98;
+show binlog events in 'master-bin.000002' from 102;
 Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 master-bin.000002	#	Query	1	#	use `test`; drop table t1

--- 1.4.1.2/mysql-test/t/binlog.test	2006-02-25 13:24:15 +02:00
+++ 1.6/mysql-test/extra/binlog_tests/binlog.test	2006-02-25 21:54:29 +02:00
@@ -1,9 +1,11 @@
 #
 # misc binlogging tests that do not require a slave running
 #
+
 -- source include/not_embedded.inc
 -- source include/have_bdb.inc
 -- source include/have_innodb.inc
+-- source include/have_debug.inc
 
 --disable_warnings
 drop table if exists t1, t2;
@@ -19,9 +21,8 @@
 insert t2 values (5);
 commit;
 # first COMMIT must be Query_log_event, second - Xid_log_event
---replace_result "xid=21" "xid=12"
 --replace_column 2 # 5 #
-show binlog events from 98;
+show binlog events from 102;
 drop table t1,t2;
 
 #
@@ -41,9 +42,7 @@
 --enable_query_log
 commit;
 drop table t1;
---replace_result "xid=32" "xid=19"
 --replace_column 2 # 5 #
-show binlog events in 'master-bin.000001' from 98;
+show binlog events in 'master-bin.000001' from 102;
 --replace_column 2 # 5 #
-show binlog events in 'master-bin.000002' from 98;
-
+show binlog events in 'master-bin.000002' from 102;

--- 1.178/tests/mysql_client_test.c	2006-02-16 11:09:47 +02:00
+++ 1.179/tests/mysql_client_test.c	2006-02-25 20:35:09 +02:00
@@ -14724,9 +14724,9 @@
 
   mysql_close(mysql);
 
-  if (rc= mysql_stmt_execute(prep_stmt))
+  if ((rc= mysql_stmt_execute(prep_stmt)))
   {
-    if (rc= mysql_stmt_reset(prep_stmt))
+    if ((rc= mysql_stmt_reset(prep_stmt)))
       printf("OK!\n");
     else
     {
Thread
bk commit into 5.1 tree (monty:1.2177)monty25 Feb