20
20
#include <config.h>
22
22
#include <drizzled/session.h>
23
#include <drizzled/sql_base.h>
24
24
#include <drizzled/global_charset_info.h>
25
25
#include <drizzled/charset.h>
26
26
#include <drizzled/transaction_services.h>
37
class AddSchemaNames :
37
class AddSchemaNames :
38
38
public std::unary_function<StorageEngine *, void>
40
identifier::Schema::vector &schemas;
40
identifier::schema::vector &schemas;
44
AddSchemaNames(identifier::Schema::vector &of_names) :
44
AddSchemaNames(identifier::schema::vector &of_names) :
55
void StorageEngine::getIdentifiers(Session &session, identifier::Schema::vector &schemas)
55
void StorageEngine::getIdentifiers(Session &session, identifier::schema::vector &schemas)
57
57
// Add hook here for engines to register schema.
58
58
std::for_each(StorageEngine::getSchemaEngines().begin(), StorageEngine::getSchemaEngines().end(),
70
70
StorageEngineGetSchemaDefinition(const identifier::Schema &identifier_arg,
71
71
message::schema::shared_ptr &schema_proto_arg) :
72
72
identifier(identifier_arg),
73
schema_proto(schema_proto_arg)
73
schema_proto(schema_proto_arg)
87
87
message::schema::shared_ptr StorageEngine::getSchemaDefinition(const drizzled::identifier::Table &identifier)
89
return StorageEngine::getSchemaDefinition(identifier);
89
identifier::Schema schema_identifier= identifier;
90
return StorageEngine::getSchemaDefinition(schema_identifier);
92
93
message::schema::shared_ptr StorageEngine::getSchemaDefinition(const identifier::Schema &identifier)
116
const CHARSET_INFO *StorageEngine::getSchemaCollation(const identifier::Schema &identifier)
117
const charset_info_st *StorageEngine::getSchemaCollation(const identifier::Schema &identifier)
118
message::schema::shared_ptr schmema_proto;
120
schmema_proto= StorageEngine::getSchemaDefinition(identifier);
122
if (schmema_proto && schmema_proto->has_collation())
124
const std::string buffer= schmema_proto->collation();
125
const CHARSET_INFO* cs= get_charset_by_name(buffer.c_str());
130
identifier.getSQLPath(path);
132
errmsg_printf(error::ERROR,
133
_("Error while loading database options: '%s':"), path.c_str());
134
errmsg_printf(error::ERROR, ER(ER_UNKNOWN_COLLATION), buffer.c_str());
136
return default_charset_info;
119
message::schema::shared_ptr schmema_proto= StorageEngine::getSchemaDefinition(identifier);
120
if (not schmema_proto || not schmema_proto->has_collation())
121
return default_charset_info;
122
const std::string buffer= schmema_proto->collation();
123
if (const charset_info_st* cs= get_charset_by_name(buffer.c_str()))
125
errmsg_printf(error::ERROR, _("Error while loading database options: '%s':"), identifier.getSQLPath().c_str());
126
errmsg_printf(error::ERROR, ER(ER_UNKNOWN_COLLATION), buffer.c_str());
142
127
return default_charset_info;
146
131
public std::unary_function<StorageEngine *, void>
148
133
const drizzled::message::Schema &schema_message;
177
162
std::for_each(StorageEngine::getSchemaEngines().begin(), StorageEngine::getSchemaEngines().end(),
178
163
CreateSchema(schema_message, success_count));
182
167
TransactionServices &transaction_services= TransactionServices::singleton();
183
168
transaction_services.allocateNewTransactionId();
217
202
static bool drop_all_tables_in_schema(Session& session,
218
identifier::Schema::const_reference identifier,
219
identifier::Table::vector &dropped_tables,
203
const identifier::Schema& identifier,
204
identifier::table::vector &dropped_tables,
220
205
uint64_t &deleted)
222
207
TransactionServices &transaction_services= TransactionServices::singleton();
224
209
plugin::StorageEngine::getIdentifiers(session, identifier, dropped_tables);
226
for (identifier::Table::vector::iterator it= dropped_tables.begin();
211
for (identifier::table::vector::iterator it= dropped_tables.begin();
227
212
it != dropped_tables.end();
254
bool StorageEngine::dropSchema(Session::reference session,
255
identifier::Schema::const_reference identifier,
239
bool StorageEngine::dropSchema(Session& session,
240
const identifier::Schema& identifier,
256
241
message::schema::const_reference schema_message)
258
243
uint64_t deleted= 0;
259
244
bool error= false;
260
identifier::Table::vector dropped_tables;
245
identifier::table::vector dropped_tables;
264
249
// Remove all temp tables first, this prevents loss of table from
265
250
// shadowing (ie temp over standard table)
267
// Lets delete the temporary tables first outside of locks.
268
identifier::Table::vector set_of_identifiers;
269
session.doGetTableIdentifiers(identifier, set_of_identifiers);
252
// Lets delete the temporary tables first outside of locks.
253
identifier::table::vector set_of_identifiers;
254
session.open_tables.doGetTableIdentifiers(identifier, set_of_identifiers);
271
for (identifier::Table::vector::iterator iter= set_of_identifiers.begin(); iter != set_of_identifiers.end(); iter++)
256
for (identifier::table::vector::iterator iter= set_of_identifiers.begin(); iter != set_of_identifiers.end(); iter++)
273
258
if (session.drop_temporary_table(*iter))