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, ¬_used, 0) &&
+ if (!open_table(thd, &decoy, thd->mem_root, ¬_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) | jhe | 14 Aug |