17
17
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
#ifndef DRIZZLED_PLUGIN_STORAGE_ENGINE_H
21
#define DRIZZLED_PLUGIN_STORAGE_ENGINE_H
24
22
#include <drizzled/definitions.h>
25
#include <drizzled/plugin.h>
23
#include <drizzled/error_t.h>
26
24
#include <drizzled/handler_structs.h>
27
25
#include <drizzled/message.h>
28
26
#include <drizzled/message/cache.h>
29
#include "drizzled/plugin/plugin.h"
30
#include "drizzled/sql_string.h"
31
#include "drizzled/identifier.h"
32
#include "drizzled/cached_directory.h"
33
#include "drizzled/plugin/monitored_in_transaction.h"
27
#include <drizzled/plugin.h>
28
#include <drizzled/plugin/monitored_in_transaction.h>
29
#include <drizzled/plugin/plugin.h>
30
#include <drizzled/sql_string.h>
46
typedef struct st_hash HASH;
49
typedef drizzle_lex_string LEX_STRING;
37
#include <drizzled/visibility.h>
50
43
typedef bool (stat_print_fn)(Session *session, const char *type, uint32_t type_len,
51
44
const char *file, uint32_t file_len,
52
45
const char *status, uint32_t status_len);
277
269
virtual int doCreateTable(Session &session,
278
270
Table &table_arg,
279
const drizzled::TableIdentifier &identifier,
280
message::Table &message)= 0;
271
const drizzled::identifier::Table &identifier,
272
const message::Table &message)= 0;
282
274
virtual int doRenameTable(Session &session,
283
const drizzled::TableIdentifier &from, const drizzled::TableIdentifier &to)= 0;
287
int renameTable(Session &session, const drizzled::TableIdentifier &from, const drizzled::TableIdentifier &to);
275
const drizzled::identifier::Table &from, const drizzled::identifier::Table &to)= 0;
277
virtual int doDropTable(Session &session,
278
const drizzled::identifier::Table &identifier)= 0;
289
280
virtual void doGetTableIdentifiers(CachedDirectory &directory,
290
const drizzled::SchemaIdentifier &schema_identifier,
291
TableIdentifier::vector &set_of_identifiers)= 0;
293
virtual int doDropTable(Session &session,
294
const drizzled::TableIdentifier &identifier)= 0;
281
const drizzled::identifier::Schema &schema_identifier,
282
identifier::table::vector &set_of_identifiers)= 0;
284
virtual bool doDoesTableExist(Session& session, const drizzled::identifier::Table &identifier);
286
virtual bool doCanCreateTable(const drizzled::identifier::Table &identifier)
287
{ (void)identifier; return true; }
291
friend class AddSchemaNames;
292
friend class AddTableIdentifier;
293
friend class AlterSchema;
294
friend class CanCreateTable;
295
friend class CreateSchema;
296
friend class DropSchema;
297
friend class DropTable;
298
friend class DropTables;
299
friend class FindEngineByName;
300
friend class Ha_delete_table_error_handler;
301
friend class StorageEngineCloseConnection;
302
friend class StorageEngineDoesTableExist;
303
friend class StorageEngineGetSchemaDefinition;
304
friend class StorageEngineGetTableDefinition;
305
friend class DropTableByIdentifier;
307
int renameTable(Session &session, const drizzled::identifier::Table &from, const drizzled::identifier::Table &to);
296
309
/* Class Methods for operating on plugin */
297
310
static bool addPlugin(plugin::StorageEngine *engine);
298
311
static void removePlugin(plugin::StorageEngine *engine);
300
static int getTableDefinition(Session& session,
301
const drizzled::TableIdentifier &identifier,
302
message::table::shared_ptr &table_proto,
303
bool include_temporary_tables= true);
313
static message::table::shared_ptr getTableMessage(Session& session,
314
const drizzled::identifier::Table &identifier,
315
bool include_temporary_tables= true);
304
316
static bool doesTableExist(Session &session,
305
const drizzled::TableIdentifier &identifier,
317
const drizzled::identifier::Table &identifier,
306
318
bool include_temporary_tables= true);
308
virtual bool doDoesTableExist(Session& session, const drizzled::TableIdentifier &identifier);
310
320
static plugin::StorageEngine *findByName(const std::string &find_str);
311
321
static plugin::StorageEngine *findByName(Session& session, const std::string &find_str);
313
static void closeConnection(Session* session);
323
static void closeConnection(Session&);
314
324
static void dropDatabase(char* path);
315
325
static bool flushLogs(plugin::StorageEngine *db_type);
316
static int dropTable(Session& session,
317
const drizzled::TableIdentifier &identifier);
318
static int dropTable(Session& session,
319
StorageEngine &engine,
320
const drizzled::TableIdentifier &identifier);
327
static bool dropTable(Session& session,
328
const drizzled::identifier::Table &identifier);
329
static bool dropTable(Session& session,
330
const drizzled::identifier::Table &identifier,
331
drizzled::error_t &error);
333
static bool dropTable(Session& session,
334
StorageEngine &engine,
335
const identifier::Table& identifier,
336
drizzled::error_t &error);
321
338
static void getIdentifiers(Session &session,
322
const SchemaIdentifier &schema_identifier,
323
TableIdentifier::vector &set_of_identifiers);
339
const identifier::Schema &schema_identifier,
340
identifier::table::vector &set_of_identifiers);
325
342
// Check to see if any SE objects to creation.
326
static bool canCreateTable(const drizzled::TableIdentifier &identifier);
327
virtual bool doCanCreateTable(const drizzled::TableIdentifier &identifier)
328
{ (void)identifier; return true; }
343
static bool canCreateTable(const drizzled::identifier::Table &identifier);
330
345
// @note All schema methods defined here
331
static void getIdentifiers(Session &session, SchemaIdentifier::vector &schemas);
332
static bool getSchemaDefinition(const drizzled::TableIdentifier &identifier, message::schema::shared_ptr &proto);
333
static bool getSchemaDefinition(const drizzled::SchemaIdentifier &identifier, message::schema::shared_ptr &proto);
334
static bool doesSchemaExist(const drizzled::SchemaIdentifier &identifier);
335
static const CHARSET_INFO *getSchemaCollation(const drizzled::SchemaIdentifier &identifier);
346
static void getIdentifiers(Session &session, identifier::schema::vector &schemas);
347
static message::schema::shared_ptr getSchemaDefinition(const drizzled::identifier::Table &identifier);
348
static message::schema::shared_ptr getSchemaDefinition(const drizzled::identifier::Schema &identifier);
349
static bool doesSchemaExist(const drizzled::identifier::Schema &identifier);
350
static const charset_info_st *getSchemaCollation(const drizzled::identifier::Schema &identifier);
336
351
static bool createSchema(const drizzled::message::Schema &schema_message);
337
static bool dropSchema(const drizzled::SchemaIdentifier &identifier);
352
static bool dropSchema(Session &session,
353
const identifier::Schema& identifier,
354
message::schema::const_reference schema_message);
338
355
static bool alterSchema(const drizzled::message::Schema &schema_message);
340
357
// @note make private/protected
341
virtual void doGetSchemaIdentifiers(SchemaIdentifier::vector&)
359
virtual void doGetSchemaIdentifiers(identifier::schema::vector&)
344
virtual bool doGetSchemaDefinition(const drizzled::SchemaIdentifier&, drizzled::message::schema::shared_ptr&)
362
virtual drizzled::message::schema::shared_ptr doGetSchemaDefinition(const drizzled::identifier::Schema&)
364
return drizzled::message::schema::shared_ptr();
349
367
virtual bool doCreateSchema(const drizzled::message::Schema&)
352
370
virtual bool doAlterSchema(const drizzled::message::Schema&)
353
371
{ return false; }
355
virtual bool doDropSchema(const drizzled::SchemaIdentifier&)
373
virtual bool doDropSchema(const drizzled::identifier::Schema&)
356
374
{ return false; }
358
377
static inline const std::string &resolveName(const StorageEngine *engine)
360
379
return engine == NULL ? UNKNOWN_STRING : engine->getName();
363
static int createTable(Session& session,
364
const drizzled::TableIdentifier &identifier,
365
message::Table& table_proto);
382
static bool createTable(Session &session,
383
const identifier::Table &identifier,
384
message::Table& table_message);
367
386
static void removeLostTemporaryTables(Session &session, const char *directory);
369
388
Cursor *getCursor(Table &share);
371
390
uint32_t max_record_length() const
372
{ return std::min((unsigned int)HA_MAX_REC_LENGTH, max_supported_record_length()); }
391
{ return std::min(HA_MAX_REC_LENGTH, max_supported_record_length()); }
373
392
uint32_t max_keys() const
374
{ return std::min((unsigned int)MAX_KEY, max_supported_keys()); }
393
{ return std::min(MAX_KEY, max_supported_keys()); }
375
394
uint32_t max_key_parts() const
376
{ return std::min((unsigned int)MAX_REF_PARTS, max_supported_key_parts()); }
395
{ return std::min(MAX_REF_PARTS, max_supported_key_parts()); }
377
396
uint32_t max_key_length() const
378
{ return std::min((unsigned int)MAX_KEY_LENGTH, max_supported_key_length()); }
397
{ return std::min(MAX_KEY_LENGTH, max_supported_key_length()); }
379
398
uint32_t max_key_part_length(void) const
380
{ return std::min((unsigned int)MAX_KEY_LENGTH, max_supported_key_part_length()); }
399
{ return std::min(MAX_KEY_LENGTH, max_supported_key_part_length()); }
382
401
virtual uint32_t max_supported_record_length(void) const
383
402
{ return HA_MAX_REC_LENGTH; }