Details
-
Type:
Task
-
Status: Open
-
Priority:
Minor
-
Resolution: Unresolved
-
Fix Version/s: 10.1
-
Component/s: None
-
Labels:None
Description
Storage engine producers tend to do very similar mistakes, like:
- including undesired server *.h files
- doing #define MYSQL_SERVER
- accessing members and methods of THD directly,
without using engine plugin services.
This typically makes such storage engine crash in case of
embedded server, because THD definition varies between
client-server and embedded versions.
It would be nice to do take some steps to avoid this and help
engine producers to write the code correctly.
1. Create a file "se_api.h" which will include all *.h files that
we allow to use in engines (e.g. handler.h, sql_class.h, etc).
2. Remove the confusing "#define MYSQL_SERVER" from as
many existing engines as possible:
blackhole/ha_blackhole.cc:#define MYSQL_SERVER 1 maria/ha_maria.cc:#define MYSQL_SERVER 1 tokudb/ha_tokudb.cc:#define MYSQL_SERVER 1 tokudb/hatoku_hton.cc:#define MYSQL_SERVER 1 oqgraph/ha_oqgraph.cc:#define MYSQL_SERVER // to have THD federatedx/ha_federatedx.cc:#define MYSQL_SERVER 1 federatedx/federatedx_io_mysql.cc:#define MYSQL_SERVER 1 federatedx/federatedx_io_null.cc:/*#define MYSQL_SERVER 1*/ federatedx/federatedx_io.cc:/*#define MYSQL_SERVER 1*/ federatedx/federatedx_txn.cc:#define MYSQL_SERVER 1 connect/tabmysql.cpp:#define MYSQL_SERVER 1 connect/ha_connect.cc:#define MYSQL_SERVER 1 connect/user_connect.cc:#define MYSQL_SERVER spider/spd_db_conn.cc:#define MYSQL_SERVER 1 spider/spd_table.cc:#define MYSQL_SERVER 1 spider/spd_db_mysql.cc:#define MYSQL_SERVER 1 spider/spd_malloc.cc:#define MYSQL_SERVER 1 spider/ha_spider.cc:#define MYSQL_SERVER 1 spider/spd_db_handlersocket.cc:#define MYSQL_SERVER 1 spider/spd_conn.cc:#define MYSQL_SERVER 1 spider/spd_i_s.cc:#define MYSQL_SERVER 1 spider/spd_db_oracle.cc:#define MYSQL_SERVER 1 spider/spd_ping_table.cc:#define MYSQL_SERVER 1 spider/spd_trx.cc:#define MYSQL_SERVER 1 spider/spd_param.cc:#define MYSQL_SERVER 1 spider/spd_sys_table.cc:#define MYSQL_SERVER 1 spider/spd_direct_sql.cc:#define MYSQL_SERVER 1 spider/spd_udf.cc:#define MYSQL_SERVER 1 spider/spd_copy_tables.cc:#define MYSQL_SERVER 1 myisammrg/ha_myisammrg.cc:#define MYSQL_SERVER 1 myisam/ha_myisam.cc:#define MYSQL_SERVER 1 federated/ha_federated.cc:#define MYSQL_SERVER 1 xtradb/handler/ha_innodb.cc:#define MYSQL_SERVER 1 xtradb/handler/i_s.cc:#define MYSQL_SERVER /* For Item_* classes */ heap/ha_heap.cc:#define MYSQL_SERVER 1
3. Prevent direct inclusion of the server *.h files without using se_api.h.
Gliffy Diagrams
Attachments
Activity
- All
- Comments
- Work Log
- History
- Activity
- Transitions
Sounds like a fine plan, Bar - do you have a full overview of the issues involved, so that individual storage engine people can at least fix that bit?
Of course, if a single storage engine include with the appropriate defines/include were to be provided, that's even better - but we'd still need to get rid of the superfluous/bad stuff from the storage engines themselves, so it'll be good to see a list.
thanks