23 #include <sys/types.h>
27 #include <drizzled/session.h>
28 #include <plugin/myisam/myisam.h>
29 #include <drizzled/open_tables_state.h>
30 #include <drizzled/plugin/transactional_storage_engine.h>
31 #include <drizzled/table/instance.h>
32 #include <drizzled/table.h>
33 #include <drizzled/table_list.h>
61 bool Concurrent::reopen_name_locked_table(TableList* table_list, Session *session)
63 safe_mutex_assert_owner(table::Cache::mutex().native_handle());
65 if (session->getKilled())
68 identifier::Table identifier(table_list->getSchemaName(), table_list->getTableName());
69 if (open_unireg_entry(session, table_list->getTableName(), identifier))
83 getMutableShare()->resetVersion();
86 tablenr= session->open_tables.current_tablenr++;
92 status= STATUS_NO_RECORD;
119 int table::Concurrent::open_unireg_entry(Session *session,
121 identifier::Table &identifier)
124 TableShare::shared_ptr share;
125 uint32_t discover_retry_count= 0;
127 safe_mutex_assert_owner(table::Cache::mutex().native_handle());
129 if (not (share= table::instance::Shared::make_shared(session, identifier, error)))
134 while ((error= share->open_table_from_share(session,
137 (uint32_t) (HA_OPEN_KEYFILE |
141 session->open_options, *
this)))
145 share->resetVersion();
146 if (discover_retry_count++)
148 table::instance::release(share);
171 if (share->getTableCount() != 1)
173 table::instance::release(share);
178 table::instance::release(share);
180 if (not session->getKilled())
182 drizzle_reset_errors(*session,
true);
183 session->clear_error();
190 table::instance::release(share);
198 void table::Concurrent::release(
void)
204 if (getShare()->getType() == message::Table::STANDARD)
206 table::instance::release(getMutableShare());