mirror of
https://github.com/MariaDB/server.git
synced 2025-08-09 22:24:09 +03:00
EXAMPLE storage engine: update comments
This commit is contained in:
committed by
Daniel Black
parent
0254eb9307
commit
e666b8651a
@@ -38,7 +38,7 @@
|
|||||||
build by doing the following during your build process:<br> ./configure
|
build by doing the following during your build process:<br> ./configure
|
||||||
--with-example-storage-engine
|
--with-example-storage-engine
|
||||||
|
|
||||||
Once this is done, MySQL will let you create tables with:<br>
|
Once this is done, MariaDB will let you create tables with:<br>
|
||||||
CREATE TABLE <table name> (...) ENGINE=EXAMPLE;
|
CREATE TABLE <table name> (...) ENGINE=EXAMPLE;
|
||||||
|
|
||||||
The example storage engine is set up to use table locks. It
|
The example storage engine is set up to use table locks. It
|
||||||
@@ -51,9 +51,9 @@
|
|||||||
of this file.
|
of this file.
|
||||||
|
|
||||||
@note
|
@note
|
||||||
When you create an EXAMPLE table, the MySQL Server creates a table .frm
|
When you create an EXAMPLE table, the MariaDB Server creates a table .frm
|
||||||
(format) file in the database directory, using the table name as the file
|
(format) file in the database directory, using the table name as the file
|
||||||
name as is customary with MySQL. No other files are created. To get an idea
|
name as is customary with MariaDB. No other files are created. To get an idea
|
||||||
of what occurs, here is an example select that would do a scan of an entire
|
of what occurs, here is an example select that would do a scan of an entire
|
||||||
table:
|
table:
|
||||||
|
|
||||||
@@ -86,10 +86,6 @@
|
|||||||
ha_example::open() would also have been necessary. Calls to
|
ha_example::open() would also have been necessary. Calls to
|
||||||
ha_example::extra() are hints as to what will be occuring to the request.
|
ha_example::extra() are hints as to what will be occuring to the request.
|
||||||
|
|
||||||
A Longer Example can be found called the "Skeleton Engine" which can be
|
|
||||||
found on TangentOrg. It has both an engine and a full build environment
|
|
||||||
for building a pluggable storage engine.
|
|
||||||
|
|
||||||
Happy coding!<br>
|
Happy coding!<br>
|
||||||
-Brian
|
-Brian
|
||||||
*/
|
*/
|
||||||
@@ -771,7 +767,7 @@ int ha_example::external_lock(THD *thd, int lock_type)
|
|||||||
Before adding the lock into the table lock handler (see thr_lock.c),
|
Before adding the lock into the table lock handler (see thr_lock.c),
|
||||||
mysqld calls store lock with the requested locks. Store lock can now
|
mysqld calls store lock with the requested locks. Store lock can now
|
||||||
modify a write lock to a read lock (or some other lock), ignore the
|
modify a write lock to a read lock (or some other lock), ignore the
|
||||||
lock (if we don't want to use MySQL table locks at all), or add locks
|
lock (if we don't want to use MariaDB table locks at all), or add locks
|
||||||
for many tables (like we do when we are using a MERGE handler).
|
for many tables (like we do when we are using a MERGE handler).
|
||||||
|
|
||||||
Berkeley DB, for example, changes all WRITE locks to TL_WRITE_ALLOW_WRITE
|
Berkeley DB, for example, changes all WRITE locks to TL_WRITE_ALLOW_WRITE
|
||||||
@@ -781,7 +777,7 @@ int ha_example::external_lock(THD *thd, int lock_type)
|
|||||||
When releasing locks, store_lock() is also called. In this case one
|
When releasing locks, store_lock() is also called. In this case one
|
||||||
usually doesn't have to do anything.
|
usually doesn't have to do anything.
|
||||||
|
|
||||||
In some exceptional cases MySQL may send a request for a TL_IGNORE;
|
In some exceptional cases MariaDB may send a request for a TL_IGNORE;
|
||||||
This means that we are requesting the same lock as last time and this
|
This means that we are requesting the same lock as last time and this
|
||||||
should also be ignored. (This may happen when someone does a flush
|
should also be ignored. (This may happen when someone does a flush
|
||||||
table when we have opened a part of the tables, in which case mysqld
|
table when we have opened a part of the tables, in which case mysqld
|
||||||
@@ -1084,7 +1080,7 @@ static int show_func_example(MYSQL_THD thd, struct st_mysql_show_var *var,
|
|||||||
var->value= buf; // it's of SHOW_VAR_FUNC_BUFF_SIZE bytes
|
var->value= buf; // it's of SHOW_VAR_FUNC_BUFF_SIZE bytes
|
||||||
my_snprintf(buf, SHOW_VAR_FUNC_BUFF_SIZE,
|
my_snprintf(buf, SHOW_VAR_FUNC_BUFF_SIZE,
|
||||||
"enum_var is %lu, ulong_var is %lu, int_var is %d, "
|
"enum_var is %lu, ulong_var is %lu, int_var is %d, "
|
||||||
"double_var is %f, %.6b", // %b is a MySQL extension
|
"double_var is %f, %.6b", // %b is a MariaDB/MySQL extension
|
||||||
srv_enum_var, srv_ulong_var, THDVAR(thd, int_var),
|
srv_enum_var, srv_ulong_var, THDVAR(thd, int_var),
|
||||||
srv_double_var, "really");
|
srv_double_var, "really");
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -62,7 +62,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
class ha_example: public handler
|
class ha_example: public handler
|
||||||
{
|
{
|
||||||
THR_LOCK_DATA lock; ///< MySQL lock
|
THR_LOCK_DATA lock; ///< MariaDB lock
|
||||||
Example_share *share; ///< Shared lock info
|
Example_share *share; ///< Shared lock info
|
||||||
Example_share *get_share(); ///< Get the share
|
Example_share *get_share(); ///< Get the share
|
||||||
|
|
||||||
@@ -97,7 +97,7 @@ public:
|
|||||||
|
|
||||||
@details
|
@details
|
||||||
part is the key part to check. First key part is 0.
|
part is the key part to check. First key part is 0.
|
||||||
If all_parts is set, MySQL wants to know the flags for the combined
|
If all_parts is set, MariaDB wants to know the flags for the combined
|
||||||
index, up to and including 'part'.
|
index, up to and including 'part'.
|
||||||
*/
|
*/
|
||||||
ulong index_flags(uint inx, uint part, bool all_parts) const
|
ulong index_flags(uint inx, uint part, bool all_parts) const
|
||||||
@@ -109,7 +109,7 @@ public:
|
|||||||
unireg.cc will call max_supported_record_length(), max_supported_keys(),
|
unireg.cc will call max_supported_record_length(), max_supported_keys(),
|
||||||
max_supported_key_parts(), uint max_supported_key_length()
|
max_supported_key_parts(), uint max_supported_key_length()
|
||||||
to make sure that the storage engine can handle the data it is about to
|
to make sure that the storage engine can handle the data it is about to
|
||||||
send. Return *real* limits of your storage engine here; MySQL will do
|
send. Return *real* limits of your storage engine here; MariaDB will do
|
||||||
min(your_limits, MySQL_limits) automatically.
|
min(your_limits, MySQL_limits) automatically.
|
||||||
*/
|
*/
|
||||||
uint max_supported_record_length() const { return HA_MAX_REC_LENGTH; }
|
uint max_supported_record_length() const { return HA_MAX_REC_LENGTH; }
|
||||||
@@ -117,7 +117,7 @@ public:
|
|||||||
/** @brief
|
/** @brief
|
||||||
unireg.cc will call this to make sure that the storage engine can handle
|
unireg.cc will call this to make sure that the storage engine can handle
|
||||||
the data it is about to send. Return *real* limits of your storage engine
|
the data it is about to send. Return *real* limits of your storage engine
|
||||||
here; MySQL will do min(your_limits, MySQL_limits) automatically.
|
here; MariaDB will do min(your_limits, MySQL_limits) automatically.
|
||||||
|
|
||||||
@details
|
@details
|
||||||
There is no need to implement ..._key_... methods if your engine doesn't
|
There is no need to implement ..._key_... methods if your engine doesn't
|
||||||
@@ -128,7 +128,7 @@ public:
|
|||||||
/** @brief
|
/** @brief
|
||||||
unireg.cc will call this to make sure that the storage engine can handle
|
unireg.cc will call this to make sure that the storage engine can handle
|
||||||
the data it is about to send. Return *real* limits of your storage engine
|
the data it is about to send. Return *real* limits of your storage engine
|
||||||
here; MySQL will do min(your_limits, MySQL_limits) automatically.
|
here; MariaDB will do min(your_limits, MySQL_limits) automatically.
|
||||||
|
|
||||||
@details
|
@details
|
||||||
There is no need to implement ..._key_... methods if your engine doesn't
|
There is no need to implement ..._key_... methods if your engine doesn't
|
||||||
@@ -139,7 +139,7 @@ public:
|
|||||||
/** @brief
|
/** @brief
|
||||||
unireg.cc will call this to make sure that the storage engine can handle
|
unireg.cc will call this to make sure that the storage engine can handle
|
||||||
the data it is about to send. Return *real* limits of your storage engine
|
the data it is about to send. Return *real* limits of your storage engine
|
||||||
here; MySQL will do min(your_limits, MySQL_limits) automatically.
|
here; MariaDB will do min(your_limits, MySQL_limits) automatically.
|
||||||
|
|
||||||
@details
|
@details
|
||||||
There is no need to implement ..._key_... methods if your engine doesn't
|
There is no need to implement ..._key_... methods if your engine doesn't
|
||||||
@@ -187,7 +187,7 @@ public:
|
|||||||
Everything below are methods that we implement in ha_example.cc.
|
Everything below are methods that we implement in ha_example.cc.
|
||||||
|
|
||||||
Most of these methods are not obligatory, skip them and
|
Most of these methods are not obligatory, skip them and
|
||||||
MySQL will treat them as not implemented
|
MariaDB will treat them as not implemented
|
||||||
*/
|
*/
|
||||||
/** @brief
|
/** @brief
|
||||||
We implement this in ha_example.cc; it's a required method.
|
We implement this in ha_example.cc; it's a required method.
|
||||||
@@ -201,50 +201,50 @@ public:
|
|||||||
|
|
||||||
/** @brief
|
/** @brief
|
||||||
We implement this in ha_example.cc. It's not an obligatory method;
|
We implement this in ha_example.cc. It's not an obligatory method;
|
||||||
skip it and and MySQL will treat it as not implemented.
|
skip it and and MariaDB will treat it as not implemented.
|
||||||
*/
|
*/
|
||||||
int write_row(const uchar *buf);
|
int write_row(const uchar *buf);
|
||||||
|
|
||||||
/** @brief
|
/** @brief
|
||||||
We implement this in ha_example.cc. It's not an obligatory method;
|
We implement this in ha_example.cc. It's not an obligatory method;
|
||||||
skip it and and MySQL will treat it as not implemented.
|
skip it and and MariaDB will treat it as not implemented.
|
||||||
*/
|
*/
|
||||||
int update_row(const uchar *old_data, const uchar *new_data);
|
int update_row(const uchar *old_data, const uchar *new_data);
|
||||||
|
|
||||||
/** @brief
|
/** @brief
|
||||||
We implement this in ha_example.cc. It's not an obligatory method;
|
We implement this in ha_example.cc. It's not an obligatory method;
|
||||||
skip it and and MySQL will treat it as not implemented.
|
skip it and and MariaDB will treat it as not implemented.
|
||||||
*/
|
*/
|
||||||
int delete_row(const uchar *buf);
|
int delete_row(const uchar *buf);
|
||||||
|
|
||||||
/** @brief
|
/** @brief
|
||||||
We implement this in ha_example.cc. It's not an obligatory method;
|
We implement this in ha_example.cc. It's not an obligatory method;
|
||||||
skip it and and MySQL will treat it as not implemented.
|
skip it and and MariaDB will treat it as not implemented.
|
||||||
*/
|
*/
|
||||||
int index_read_map(uchar *buf, const uchar *key,
|
int index_read_map(uchar *buf, const uchar *key,
|
||||||
key_part_map keypart_map, enum ha_rkey_function find_flag);
|
key_part_map keypart_map, enum ha_rkey_function find_flag);
|
||||||
|
|
||||||
/** @brief
|
/** @brief
|
||||||
We implement this in ha_example.cc. It's not an obligatory method;
|
We implement this in ha_example.cc. It's not an obligatory method;
|
||||||
skip it and and MySQL will treat it as not implemented.
|
skip it and and MariaDB will treat it as not implemented.
|
||||||
*/
|
*/
|
||||||
int index_next(uchar *buf);
|
int index_next(uchar *buf);
|
||||||
|
|
||||||
/** @brief
|
/** @brief
|
||||||
We implement this in ha_example.cc. It's not an obligatory method;
|
We implement this in ha_example.cc. It's not an obligatory method;
|
||||||
skip it and and MySQL will treat it as not implemented.
|
skip it and and MariaDB will treat it as not implemented.
|
||||||
*/
|
*/
|
||||||
int index_prev(uchar *buf);
|
int index_prev(uchar *buf);
|
||||||
|
|
||||||
/** @brief
|
/** @brief
|
||||||
We implement this in ha_example.cc. It's not an obligatory method;
|
We implement this in ha_example.cc. It's not an obligatory method;
|
||||||
skip it and and MySQL will treat it as not implemented.
|
skip it and and MariaDB will treat it as not implemented.
|
||||||
*/
|
*/
|
||||||
int index_first(uchar *buf);
|
int index_first(uchar *buf);
|
||||||
|
|
||||||
/** @brief
|
/** @brief
|
||||||
We implement this in ha_example.cc. It's not an obligatory method;
|
We implement this in ha_example.cc. It's not an obligatory method;
|
||||||
skip it and and MySQL will treat it as not implemented.
|
skip it and and MariaDB will treat it as not implemented.
|
||||||
*/
|
*/
|
||||||
int index_last(uchar *buf);
|
int index_last(uchar *buf);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user