List:Commits« Previous MessageNext Message »
From:jhe Date:August 14 2006 7:16am
Subject:bk commit into 5.0 tree (Justin.He:1.2236)
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of justin.he. When justin.he does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2006-08-14 15:15:54+08:00, Justin.He@stripped +2 -0
  Merge jhe@stripped:/home/bk/mysql-5.0-ndb-bj
  into  qa3-104.qa.cn.tlan:/mnt/sda7/justin.he/mysql/mysql-5.0-ndb-bj
  MERGE: 1.2205.11.2

  sql/sql_base.cc@stripped, 2006-08-14 15:15:44+08:00, Justin.He@stripped +0 -0
    Auto merged
    MERGE: 1.345.1.1

  sql/sql_view.cc@stripped, 2006-08-14 15:15:44+08:00, Justin.He@stripped +0 -0
    Auto merged
    MERGE: 1.90.1.1

# 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:	Justin.He
# Host:	qa3-104.qa.cn.tlan
# Root:	/mnt/sda7/justin.he/mysql/mysql-5.0-ndb-bj/RESYNC

--- 1.346/sql/sql_base.cc	2006-08-14 15:16:08 +08:00
+++ 1.347/sql/sql_base.cc	2006-08-14 15:16:08 +08:00
@@ -34,7 +34,8 @@
 
 static int open_unireg_entry(THD *thd, TABLE *entry, const char *db,
 			     const char *name, const char *alias,
-			     TABLE_LIST *table_list, MEM_ROOT *mem_root);
+			     TABLE_LIST *table_list, MEM_ROOT *mem_root,
+                             uint flags);
 static void free_cache_entry(TABLE *entry);
 static void mysql_rm_tmp_tables(void);
 static bool open_new_frm(THD *thd, const char *path, const char *alias,
@@ -1108,7 +1109,7 @@
   key_length=(uint) (strmov(strmov(key,db)+1,table_name)-key)+1;
 
   if (open_unireg_entry(thd, table, db, table_name, table_name, 0,
-                        thd->mem_root) ||
+                        thd->mem_root, 0) ||
       !(table->s->table_cache_key= memdup_root(&table->mem_root, (char*) key,
                                                key_length)))
   {
@@ -1311,7 +1312,7 @@
         VOID(pthread_mutex_lock(&LOCK_open));
         if (!open_unireg_entry(thd, table, table_list->db,
                                table_list->table_name,
-                               alias, table_list, mem_root))
+                               alias, table_list, mem_root, 0))
         {
           DBUG_ASSERT(table_list->view != 0);
           VOID(pthread_mutex_unlock(&LOCK_open));
@@ -1391,6 +1392,7 @@
   else
   {
     TABLE_SHARE *share;
+    int error;
     /* Free cache if too big */
     while (open_cache.records > table_cache_size && unused_tables)
       VOID(hash_delete(&open_cache,(byte*) unused_tables)); /* purecov: tested */
@@ -1401,9 +1403,12 @@
       VOID(pthread_mutex_unlock(&LOCK_open));
       DBUG_RETURN(NULL);
     }
-    if (open_unireg_entry(thd, table, table_list->db, table_list->table_name,
-			  alias, table_list, mem_root) ||
-	(!table_list->view && 
+    error= open_unireg_entry(thd, table, table_list->db,
+                          table_list->table_name,
+			  alias, table_list, mem_root,
+                          (flags & OPEN_VIEW_NO_PARSE));
+    if ((error > 0) ||
+	(!table_list->view && !error &&
 	 !(table->s->table_cache_key= memdup_root(&table->mem_root,
                                                   (char*) key,
                                                   key_length))))
@@ -1413,8 +1418,15 @@
       VOID(pthread_mutex_unlock(&LOCK_open));
       DBUG_RETURN(NULL);
     }
-    if (table_list->view)
+    if (table_list->view || error < 0)
     {
+      /*
+        VIEW not really opened, only frm were read.
+        Set 1 as a flag here
+      */
+      if (error < 0)
+        table_list->view= (st_lex*)1;
+
       my_free((gptr)table, MYF(0));
       VOID(pthread_mutex_unlock(&LOCK_open));
       DBUG_RETURN(0); // VIEW
@@ -1521,7 +1533,7 @@
   safe_mutex_assert_owner(&LOCK_open);
 
   if (open_unireg_entry(table->in_use, &tmp, db, table_name,
-			table->alias, 0, table->in_use->mem_root))
+			table->alias, 0, table->in_use->mem_root, 0))
     goto end;
   free_io_cache(table);
 
@@ -1851,6 +1863,8 @@
     alias		Alias name
     table_desc		TABLE_LIST descriptor (used with views)
     mem_root		temporary mem_root for parsing
+    flags               the OPEN_VIEW_NO_PARSE flag to be passed to
+                        openfrm()/open_new_frm()
 
   NOTES
    Extra argument for open is taken from thd->open_options
@@ -1861,7 +1875,8 @@
 */
 static int open_unireg_entry(THD *thd, TABLE *entry, const char *db,
 			     const char *name, const char *alias,
-			     TABLE_LIST *table_desc, MEM_ROOT *mem_root)
+			     TABLE_LIST *table_desc, MEM_ROOT *mem_root,
+                             uint flags)
 {
   char path[FN_REFLEN];
   int error;
@@ -1873,14 +1888,16 @@
 		         (uint) (HA_OPEN_KEYFILE | HA_OPEN_RNDFILE |
 			         HA_GET_INDEX | HA_TRY_READ_ONLY |
                                  NO_ERR_ON_NEW_FRM),
-		      READ_KEYINFO | COMPUTE_TYPES | EXTRA_RECORD,
+		      READ_KEYINFO | COMPUTE_TYPES | EXTRA_RECORD |
+                      (flags & OPEN_VIEW_NO_PARSE),
 		      thd->open_options, entry)) &&
       (error != 5 ||
        (fn_format(path, path, 0, reg_ext, MY_UNPACK_FILENAME),
         open_new_frm(thd, path, alias, db, name,
                      (uint) (HA_OPEN_KEYFILE | HA_OPEN_RNDFILE |
                              HA_GET_INDEX | HA_TRY_READ_ONLY),
-                     READ_KEYINFO | COMPUTE_TYPES | EXTRA_RECORD,
+                     READ_KEYINFO | COMPUTE_TYPES | EXTRA_RECORD |
+                     (flags & OPEN_VIEW_NO_PARSE),
                      thd->open_options, entry, table_desc, mem_root))))
 
   {
@@ -1962,7 +1979,7 @@
   }
 
   if (error == 5)
-    DBUG_RETURN(0);	// we have just opened VIEW
+    DBUG_RETURN((flags & OPEN_VIEW_NO_PARSE)? -1 : 0);	// we have just opened VIEW
 
   /*
     We can't mark all tables in 'mysql' database as system since we don't
@@ -5379,7 +5396,8 @@
         my_error(ER_WRONG_OBJECT, MYF(0), db, table_name, "BASE TABLE");
         goto err;
       }
-      if (mysql_make_view(thd, parser, table_desc))
+      if (mysql_make_view(thd, parser, table_desc,
+                          (prgflag & OPEN_VIEW_NO_PARSE)))
         goto err;
     }
     else

--- 1.91/sql/sql_view.cc	2006-08-14 15:16:08 +08:00
+++ 1.92/sql/sql_view.cc	2006-08-14 15:16:08 +08:00
@@ -183,7 +183,7 @@
   TABLE_LIST decoy;
 
   memcpy (&decoy, view, sizeof (TABLE_LIST));
-  if (!open_table(thd, &decoy, thd->mem_root, &not_used, 0) &&
+  if (!open_table(thd, &decoy, thd->mem_root, &not_used, OPEN_VIEW_NO_PARSE) &&
       !decoy.view)
   {
     return TRUE;
@@ -815,13 +815,14 @@
     thd			Thread handler
     parser		parser object
     table		TABLE_LIST structure for filling
-
+    flags               flags
   RETURN
     0 ok
     1 error
 */
 
-bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table)
+bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table,
+                     uint flags)
 {
   SELECT_LEX *end, *view_select;
   LEX *old_lex, *lex;
@@ -911,6 +912,10 @@
                         ER_VIEW_FRM_NO_USER, ER(ER_VIEW_FRM_NO_USER),
                         table->db, table->table_name);
     get_default_definer(thd, &table->definer);
+  }
+  if (flags & OPEN_VIEW_NO_PARSE)
+  {
+    DBUG_RETURN(FALSE);
   }
 
   /*
Thread
bk commit into 5.0 tree (Justin.He:1.2236)jhe14 Aug