diff options
author | unknown <dlenev@mysql.com> | 2005-08-09 11:43:55 +0400 |
---|---|---|
committer | unknown <dlenev@mysql.com> | 2005-08-09 11:43:55 +0400 |
commit | 8103db27bb931cefd9f59772954f8693ccfea640 (patch) | |
tree | bb9c0e1f9064cb7937fea43d87cf1464768b9e25 /sql/sql_class.cc | |
parent | 807a9c8dffa784557e0ed4dcd72175d44e1af917 (diff) | |
parent | 39fda600439547cfa49e2f00ebf93eb47bc479f9 (diff) | |
download | mariadb-git-8103db27bb931cefd9f59772954f8693ccfea640.tar.gz |
Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/dlenev/src/mysql-5.0-is
mysql-test/r/information_schema.result:
Auto merged
mysql-test/t/information_schema.test:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sp.cc:
Auto merged
sql/sp.h:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_prepare.cc:
Auto merged
sql/sql_show.cc:
Auto merged
mysql-test/r/sp.result:
Manual merge
mysql-test/t/sp.test:
Manual merge
sql/sql_class.h:
Manual merge
Diffstat (limited to 'sql/sql_class.cc')
-rw-r--r-- | sql/sql_class.cc | 43 |
1 files changed, 19 insertions, 24 deletions
diff --git a/sql/sql_class.cc b/sql/sql_class.cc index 56d3194765b..21df4640f3f 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -157,8 +157,8 @@ bool foreign_key_prefix(Key *a, Key *b) ** Thread specific functions ****************************************************************************/ -Open_tables_state::Open_tables_state() - :version(refresh_version) +Open_tables_state::Open_tables_state(ulong version_arg) + :version(version_arg) { reset_open_tables_state(); } @@ -172,7 +172,7 @@ Open_tables_state::Open_tables_state() THD::THD() :Statement(CONVENTIONAL_EXECUTION, 0, ALLOC_ROOT_MIN_BLOCK_SIZE, 0), - Open_tables_state(), + Open_tables_state(refresh_version), lock_id(&main_lock_id), user_time(0), in_sub_stmt(FALSE), global_read_lock(0), is_fatal_error(0), rand_used(0), time_zone_used(0), @@ -1813,31 +1813,26 @@ void THD::set_status_var_init() access to mysql.proc table to find definitions of stored routines. ****************************************************************************/ -bool THD::push_open_tables_state() +void THD::reset_n_backup_open_tables_state(Open_tables_state *backup) { - Open_tables_state *state; - DBUG_ENTER("push_open_table_state"); - /* Currently we only push things one level */ - DBUG_ASSERT(open_state_list.elements == 0); - - if (!(state= (Open_tables_state*) alloc(sizeof(*state)))) - DBUG_RETURN(1); // Fatal error is set - /* Store state for currently open tables */ - state->set_open_tables_state(this); - if (open_state_list.push_back(state, mem_root)) - DBUG_RETURN(1); // Fatal error is set + DBUG_ENTER("reset_n_backup_open_tables_state"); + backup->set_open_tables_state(this); reset_open_tables_state(); - DBUG_RETURN(0); + DBUG_VOID_RETURN; } -void THD::pop_open_tables_state() -{ - Open_tables_state *state; - DBUG_ENTER("pop_open_table_state"); - /* Currently we only push things one level */ - DBUG_ASSERT(open_state_list.elements == 1); - state= open_state_list.pop(); - set_open_tables_state(state); +void THD::restore_backup_open_tables_state(Open_tables_state *backup) +{ + DBUG_ENTER("restore_backup_open_tables_state"); + /* + Before we will throw away current open tables state we want + to be sure that it was properly cleaned up. + */ + DBUG_ASSERT(open_tables == 0 && temporary_tables == 0 && + handler_tables == 0 && derived_tables == 0 && + lock == 0 && locked_tables == 0 && + prelocked_mode == NON_PRELOCKED); + set_open_tables_state(backup); DBUG_VOID_RETURN; } |