00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #pragma once
00022
00023 #include <assert.h>
00024 #include <drizzled/plugin/storage_engine.h>
00025 #include <boost/unordered_map.hpp>
00026 #include <boost/thread/shared_mutex.hpp>
00027
00028 extern const drizzled::charset_info_st *default_charset_info;
00029
00030 class Schema : public drizzled::plugin::StorageEngine
00031 {
00032 bool writeSchemaFile(const drizzled::identifier::Schema &schema_identifier, const drizzled::message::Schema &db);
00033 bool readSchemaFile(const drizzled::identifier::Schema &schema_identifier, drizzled::message::Schema &schema);
00034 bool readSchemaFile(std::string filename, drizzled::message::Schema &schema);
00035
00036 void prime();
00037
00038 typedef boost::unordered_map<std::string, drizzled::message::schema::shared_ptr> SchemaCache;
00039 SchemaCache schema_cache;
00040 bool schema_cache_filled;
00041
00042 boost::shared_mutex mutex;
00043
00044 public:
00045 Schema();
00046
00047 drizzled::Cursor* create(drizzled::Table&)
00048 {
00049 return NULL;
00050 }
00051
00052 void doGetSchemaIdentifiers(drizzled::identifier::schema::vector&);
00053 drizzled::message::schema::shared_ptr doGetSchemaDefinition(const drizzled::identifier::Schema&);
00054
00055 bool doCreateSchema(const drizzled::message::Schema&);
00056
00057 bool doAlterSchema(const drizzled::message::Schema&);
00058
00059 bool doDropSchema(const drizzled::identifier::Schema&);
00060
00061
00062
00063 int doGetTableDefinition(drizzled::Session&,
00064 const drizzled::identifier::Table&,
00065 drizzled::message::Table&)
00066 {
00067 return ENOENT;
00068 }
00069
00070 bool doDoesTableExist(drizzled::Session&, const drizzled::identifier::Table&)
00071 {
00072 return false;
00073 }
00074
00075 int doRenameTable(drizzled::Session&, const drizzled::identifier::Table&, const drizzled::identifier::Table&)
00076 {
00077 return drizzled::HA_ERR_NO_SUCH_TABLE;
00078 }
00079
00080 int doCreateTable(drizzled::Session&,
00081 drizzled::Table&,
00082 const drizzled::identifier::Table&,
00083 const drizzled::message::Table&)
00084 {
00085 return drizzled::ER_TABLE_PERMISSION_DENIED;
00086 }
00087
00088 int doDropTable(drizzled::Session&, const drizzled::identifier::Table&)
00089 {
00090 return drizzled::HA_ERR_NO_SUCH_TABLE;
00091 }
00092
00093 const char** bas_ext() const;
00094
00095 void get_auto_increment(uint64_t, uint64_t,
00096 uint64_t,
00097 uint64_t *,
00098 uint64_t *)
00099 {}
00100
00101 void doGetTableIdentifiers(drizzled::CachedDirectory &directory,
00102 const drizzled::identifier::Schema &schema_identifier,
00103 drizzled::identifier::table::vector &set_of_identifiers);
00104 };
00105