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>
34 #include <drizzled/catalog/instance.h>
62 bool Concurrent::reopen_name_locked_table(TableList* table_list, Session *session)
64 safe_mutex_assert_owner(table::Cache::mutex().native_handle());
66 if (session->getKilled())
69 identifier::Table identifier(session->catalog().identifier(),
70 table_list->getSchemaName(),
71 table_list->getTableName());
73 if (open_unireg_entry(session, table_list->getTableName(), identifier))
87 getMutableShare()->resetVersion();
90 tablenr= session->open_tables.current_tablenr++;
96 status= STATUS_NO_RECORD;
123 int table::Concurrent::open_unireg_entry(Session *session,
125 identifier::Table &identifier)
128 TableShare::shared_ptr share;
129 uint32_t discover_retry_count= 0;
131 safe_mutex_assert_owner(table::Cache::mutex().native_handle());
133 if (not (share= table::instance::Shared::make_shared(session, identifier, error)))
138 while ((error= share->open_table_from_share(session,
141 (uint32_t) (HA_OPEN_KEYFILE |
145 session->open_options, *
this)))
149 share->resetVersion();
150 if (discover_retry_count++)
152 table::instance::release(share);
175 if (share->getTableCount() != 1)
177 table::instance::release(share);
182 table::instance::release(share);
184 if (not session->getKilled())
186 drizzle_reset_errors(*session,
true);
187 session->clear_error();
194 table::instance::release(share);
202 void table::Concurrent::release(
void)
208 if (getShare()->getType() == message::Table::STANDARD)
210 table::instance::release(getMutableShare());