21
21
#define DRIZZLED_PLUGIN_STORAGE_ENGINE_H
24
#include <drizzled/cached_directory.h>
25
24
#include <drizzled/definitions.h>
26
#include <drizzled/error_t.h>
25
#include <drizzled/plugin.h>
27
26
#include <drizzled/handler_structs.h>
28
#include <drizzled/identifier.h>
29
#include <drizzled/message.h>
30
#include <drizzled/message/cache.h>
31
#include <drizzled/plugin.h>
32
#include <drizzled/plugin/monitored_in_transaction.h>
33
#include <drizzled/plugin/plugin.h>
34
#include <drizzled/sql_string.h>
27
#include <drizzled/message/schema.pb.h>
28
#include <drizzled/message/table.pb.h>
29
#include "drizzled/plugin/plugin.h"
30
#include "drizzled/sql_string.h"
31
#include "drizzled/schema_identifier.h"
32
#include "drizzled/table_identifier.h"
33
#include "drizzled/cached_directory.h"
34
#include "drizzled/plugin/monitored_in_transaction.h"
36
#include <drizzled/unordered_map.h>
41
#include <drizzled/visibility.h>
282
281
virtual int doCreateTable(Session &session,
283
282
Table &table_arg,
284
const drizzled::identifier::Table &identifier,
283
const drizzled::TableIdentifier &identifier,
285
284
message::Table &message)= 0;
287
286
virtual int doRenameTable(Session &session,
288
const drizzled::identifier::Table &from, const drizzled::identifier::Table &to)= 0;
287
const drizzled::TableIdentifier &from, const drizzled::TableIdentifier &to)= 0;
291
int renameTable(Session &session, const drizzled::TableIdentifier &from, const drizzled::TableIdentifier &to);
293
// @todo move these to protected
294
virtual void doGetTableNames(CachedDirectory &directory,
295
drizzled::SchemaIdentifier &schema_identifier,
296
TableNameList &set_of_names)= 0;
298
virtual void doGetTableIdentifiers(CachedDirectory &directory,
299
drizzled::SchemaIdentifier &schema_identifier,
300
TableIdentifiers &set_of_identifiers)= 0;
290
302
virtual int doDropTable(Session &session,
291
const drizzled::identifier::Table &identifier)= 0;
293
virtual void doGetTableIdentifiers(CachedDirectory &directory,
294
const drizzled::identifier::Schema &schema_identifier,
295
identifier::Table::vector &set_of_identifiers)= 0;
297
virtual bool doDoesTableExist(Session& session, const drizzled::identifier::Table &identifier);
299
virtual bool doCanCreateTable(const drizzled::identifier::Table &identifier)
300
{ (void)identifier; return true; }
304
friend class AddSchemaNames;
305
friend class AddTableIdentifier;
306
friend class AlterSchema;
307
friend class CanCreateTable;
308
friend class CreateSchema;
309
friend class DropSchema;
310
friend class DropTable;
311
friend class DropTables;
312
friend class FindEngineByName;
313
friend class Ha_delete_table_error_handler;
314
friend class StorageEngineCloseConnection;
315
friend class StorageEngineDoesTableExist;
316
friend class StorageEngineGetSchemaDefinition;
317
friend class StorageEngineGetTableDefinition;
318
friend class DropTableByIdentifier;
320
int renameTable(Session &session, const drizzled::identifier::Table &from, const drizzled::identifier::Table &to);
303
const drizzled::TableIdentifier &identifier)= 0;
322
305
/* Class Methods for operating on plugin */
323
306
static bool addPlugin(plugin::StorageEngine *engine);
324
307
static void removePlugin(plugin::StorageEngine *engine);
326
static message::table::shared_ptr getTableMessage(Session& session,
327
const drizzled::identifier::Table &identifier,
328
bool include_temporary_tables= true);
309
static int getTableDefinition(Session& session,
310
const drizzled::TableIdentifier &identifier,
311
message::Table &table_proto,
312
bool include_temporary_tables= true);
329
313
static bool doesTableExist(Session &session,
330
const drizzled::identifier::Table &identifier,
314
const drizzled::TableIdentifier &identifier,
331
315
bool include_temporary_tables= true);
317
virtual bool doDoesTableExist(Session& session, const drizzled::TableIdentifier &identifier);
333
319
static plugin::StorageEngine *findByName(const std::string &find_str);
334
320
static plugin::StorageEngine *findByName(Session& session, const std::string &find_str);
336
322
static void closeConnection(Session* session);
337
323
static void dropDatabase(char* path);
338
324
static bool flushLogs(plugin::StorageEngine *db_type);
340
static bool dropTable(Session& session,
341
const drizzled::identifier::Table &identifier);
342
static bool dropTable(Session& session,
343
const drizzled::identifier::Table &identifier,
344
drizzled::error_t &error);
346
static bool dropTable(Session& session,
347
StorageEngine &engine,
348
identifier::Table::const_reference identifier,
349
drizzled::error_t &error);
351
static void getIdentifiers(Session &session,
352
const identifier::Schema &schema_identifier,
353
identifier::Table::vector &set_of_identifiers);
325
static int dropTable(Session& session,
326
const drizzled::TableIdentifier &identifier);
327
static int dropTable(Session& session,
328
StorageEngine &engine,
329
const drizzled::TableIdentifier &identifier);
330
static void getTableNames(Session &session, drizzled::SchemaIdentifier& schema_identifier, TableNameList &set_of_names);
331
static void getTableIdentifiers(Session &session, SchemaIdentifier &schema_identifier, TableIdentifiers &set_of_identifiers);
355
333
// Check to see if any SE objects to creation.
356
static bool canCreateTable(const drizzled::identifier::Table &identifier);
334
static bool canCreateTable(const drizzled::TableIdentifier &identifier);
335
virtual bool doCanCreateTable(const drizzled::TableIdentifier &identifier)
336
{ (void)identifier; return true; }
358
338
// @note All schema methods defined here
359
static void getIdentifiers(Session &session, identifier::Schema::vector &schemas);
360
static message::schema::shared_ptr getSchemaDefinition(const drizzled::identifier::Table &identifier);
361
static message::schema::shared_ptr getSchemaDefinition(const drizzled::identifier::Schema &identifier);
362
static bool doesSchemaExist(const drizzled::identifier::Schema &identifier);
363
static const CHARSET_INFO *getSchemaCollation(const drizzled::identifier::Schema &identifier);
339
static void getSchemaIdentifiers(Session &session, SchemaIdentifierList &schemas);
340
static bool getSchemaDefinition(const drizzled::TableIdentifier &identifier, message::Schema &proto);
341
static bool getSchemaDefinition(drizzled::SchemaIdentifier &identifier, message::Schema &proto);
342
static bool doesSchemaExist(drizzled::SchemaIdentifier &identifier);
343
static const CHARSET_INFO *getSchemaCollation(drizzled::SchemaIdentifier &identifier);
364
344
static bool createSchema(const drizzled::message::Schema &schema_message);
365
static bool dropSchema(Session &session,
366
identifier::Schema::const_reference identifier,
367
message::schema::const_reference schema_message);
345
static bool dropSchema(drizzled::SchemaIdentifier &identifier);
368
346
static bool alterSchema(const drizzled::message::Schema &schema_message);
370
348
// @note make private/protected
372
virtual void doGetSchemaIdentifiers(identifier::Schema::vector&)
349
virtual void doGetSchemaIdentifiers(SchemaIdentifierList&)
375
virtual drizzled::message::schema::shared_ptr doGetSchemaDefinition(const drizzled::identifier::Schema&)
352
virtual bool doGetSchemaDefinition(drizzled::SchemaIdentifier&, drizzled::message::Schema&)
377
return drizzled::message::schema::shared_ptr();
380
357
virtual bool doCreateSchema(const drizzled::message::Schema&)
383
360
virtual bool doAlterSchema(const drizzled::message::Schema&)
384
361
{ return false; }
386
virtual bool doDropSchema(const drizzled::identifier::Schema&)
363
virtual bool doDropSchema(drizzled::SchemaIdentifier&)
387
364
{ return false; }
390
366
static inline const std::string &resolveName(const StorageEngine *engine)
392
368
return engine == NULL ? UNKNOWN_STRING : engine->getName();
395
static bool createTable(Session &session,
396
const identifier::Table &identifier,
397
message::Table& table_message);
371
static int createTable(Session& session,
372
const drizzled::TableIdentifier &identifier,
373
message::Table& table_proto);
399
375
static void removeLostTemporaryTables(Session &session, const char *directory);
401
Cursor *getCursor(Table &share);
377
Cursor *getCursor(TableShare &share, memory::Root *alloc);
403
379
uint32_t max_record_length() const
404
{ return std::min(HA_MAX_REC_LENGTH, max_supported_record_length()); }
380
{ return std::min((unsigned int)HA_MAX_REC_LENGTH, max_supported_record_length()); }
405
381
uint32_t max_keys() const
406
{ return std::min(MAX_KEY, max_supported_keys()); }
382
{ return std::min((unsigned int)MAX_KEY, max_supported_keys()); }
407
383
uint32_t max_key_parts() const
408
{ return std::min(MAX_REF_PARTS, max_supported_key_parts()); }
384
{ return std::min((unsigned int)MAX_REF_PARTS, max_supported_key_parts()); }
409
385
uint32_t max_key_length() const
410
{ return std::min(MAX_KEY_LENGTH, max_supported_key_length()); }
386
{ return std::min((unsigned int)MAX_KEY_LENGTH, max_supported_key_length()); }
411
387
uint32_t max_key_part_length(void) const
412
{ return std::min(MAX_KEY_LENGTH, max_supported_key_part_length()); }
388
{ return std::min((unsigned int)MAX_KEY_LENGTH, max_supported_key_part_length()); }
414
390
virtual uint32_t max_supported_record_length(void) const
415
391
{ return HA_MAX_REC_LENGTH; }