diff options
author | Kentoku SHIBA <kentokushiba@gmail.com> | 2020-06-06 07:37:05 +0900 |
---|---|---|
committer | Kentoku SHIBA <kentokushiba@gmail.com> | 2020-06-11 16:41:14 +0900 |
commit | 0af1b0bd213db385fa9073e0936d59f73bceddf6 (patch) | |
tree | a0244176ba329243919ed1a16c35b170d4c203d4 /storage | |
parent | c9f262ee0d256368cab4fdb894fd31d5fb669680 (diff) | |
download | mariadb-git-0af1b0bd213db385fa9073e0936d59f73bceddf6.tar.gz |
Add information_schema.spider_wrapper_protocols for knowing available wrappers of Spider
Diffstat (limited to 'storage')
-rw-r--r-- | storage/spider/mysql-test/spider/include/deinit_spider.inc | 1 | ||||
-rw-r--r-- | storage/spider/mysql-test/spider/r/spider_wrapper_protocols.result | 22 | ||||
-rw-r--r-- | storage/spider/mysql-test/spider/t/spider_wrapper_protocols.test | 16 | ||||
-rw-r--r-- | storage/spider/spd_db_handlersocket.cc | 5 | ||||
-rw-r--r-- | storage/spider/spd_db_include.h | 20 | ||||
-rw-r--r-- | storage/spider/spd_db_mysql.cc | 10 | ||||
-rw-r--r-- | storage/spider/spd_db_oracle.cc | 5 | ||||
-rw-r--r-- | storage/spider/spd_environ.h | 8 | ||||
-rw-r--r-- | storage/spider/spd_i_s.cc | 150 | ||||
-rw-r--r-- | storage/spider/spd_init_query.h | 29 | ||||
-rw-r--r-- | storage/spider/spd_param.cc | 8 |
11 files changed, 262 insertions, 12 deletions
diff --git a/storage/spider/mysql-test/spider/include/deinit_spider.inc b/storage/spider/mysql-test/spider/include/deinit_spider.inc index 1b7cb45d9fc..dd474c59bc7 100644 --- a/storage/spider/mysql-test/spider/include/deinit_spider.inc +++ b/storage/spider/mysql-test/spider/include/deinit_spider.inc @@ -33,6 +33,7 @@ DROP FUNCTION spider_copy_tables; DROP FUNCTION spider_ping_table; DROP FUNCTION spider_bg_direct_sql; DROP FUNCTION spider_direct_sql; +UNINSTALL PLUGIN spider_wrapper_protocols; UNINSTALL PLUGIN spider_alloc_mem; UNINSTALL PLUGIN spider; DROP TABLE IF EXISTS mysql.spider_xa; diff --git a/storage/spider/mysql-test/spider/r/spider_wrapper_protocols.result b/storage/spider/mysql-test/spider/r/spider_wrapper_protocols.result new file mode 100644 index 00000000000..f1a7b6208ac --- /dev/null +++ b/storage/spider/mysql-test/spider/r/spider_wrapper_protocols.result @@ -0,0 +1,22 @@ +for master_1 +for child2 +child2_1 +child2_2 +child2_3 +for child3 +child3_1 +child3_2 +child3_3 +connection master_1; +SELECT * FROM information_schema.spider_wrapper_protocols; +for master_1 +for child2 +child2_1 +child2_2 +child2_3 +for child3 +child3_1 +child3_2 +child3_3 + +end of test diff --git a/storage/spider/mysql-test/spider/t/spider_wrapper_protocols.test b/storage/spider/mysql-test/spider/t/spider_wrapper_protocols.test new file mode 100644 index 00000000000..d0753cf73c4 --- /dev/null +++ b/storage/spider/mysql-test/spider/t/spider_wrapper_protocols.test @@ -0,0 +1,16 @@ +--disable_warnings +--disable_query_log +--disable_result_log +--source test_init.inc +--enable_query_log + +--connection master_1 +SELECT * FROM information_schema.spider_wrapper_protocols; + +--disable_query_log +--source test_deinit.inc +--enable_result_log +--enable_query_log +--enable_warnings +--echo +--echo end of test diff --git a/storage/spider/spd_db_handlersocket.cc b/storage/spider/spd_db_handlersocket.cc index 86ed332f64e..b3e73b856a3 100644 --- a/storage/spider/spd_db_handlersocket.cc +++ b/storage/spider/spd_db_handlersocket.cc @@ -127,7 +127,10 @@ SPIDER_DBTON spider_dbton_handlersocket = { NULL, spider_handlersocket_create_conn, spider_handlersocket_support_direct_join, - &spider_db_handlersocket_utility + &spider_db_handlersocket_utility, + "For communicating using the handlersocket protocol", + "0.1.0", + SPIDER_MATURITY_BETA }; #ifndef HANDLERSOCKET_MYSQL_UTIL diff --git a/storage/spider/spd_db_include.h b/storage/spider/spd_db_include.h index 828aabb5ec5..bff3d95cacb 100644 --- a/storage/spider/spd_db_include.h +++ b/storage/spider/spd_db_include.h @@ -1923,6 +1923,23 @@ enum spider_db_access_type SPIDER_DB_ACCESS_TYPE_NOSQL }; +#define SPIDER_MATURITY_UNKNOWN 0 +#define SPIDER_MATURITY_EXPERIMENTAL 1 +#define SPIDER_MATURITY_ALPHA 2 +#define SPIDER_MATURITY_BETA 3 +#define SPIDER_MATURITY_GAMMA 4 +#define SPIDER_MATURITY_STABLE 5 + +static const LEX_CSTRING maturity_name[] = +{ + { STRING_WITH_LEN("Unknown") }, + { STRING_WITH_LEN("Experimental") }, + { STRING_WITH_LEN("Alpha") }, + { STRING_WITH_LEN("Beta") }, + { STRING_WITH_LEN("Gamma") }, + { STRING_WITH_LEN("Stable") } +}; + typedef struct st_spider_dbton { uint dbton_id; @@ -1938,6 +1955,9 @@ typedef struct st_spider_dbton SPIDER_DB_CONN *(*create_db_conn)(SPIDER_CONN *conn); bool (*support_direct_join)(); spider_db_util *db_util; + const char *descr; + const char *version_info; + unsigned int maturity; } SPIDER_DBTON; typedef struct st_spider_position diff --git a/storage/spider/spd_db_mysql.cc b/storage/spider/spd_db_mysql.cc index faacd4a970f..1337717dcad 100644 --- a/storage/spider/spd_db_mysql.cc +++ b/storage/spider/spd_db_mysql.cc @@ -329,7 +329,10 @@ SPIDER_DBTON spider_dbton_mysql = { spider_mysql_create_copy_table, spider_mysql_create_conn, spider_mysql_support_direct_join, - &spider_db_mysql_utility + &spider_db_mysql_utility, + "For communicating to MySQL using native protocol", + "3.4.0", + SPIDER_MATURITY_STABLE }; SPIDER_DBTON spider_dbton_mariadb = { @@ -343,7 +346,10 @@ SPIDER_DBTON spider_dbton_mariadb = { spider_mariadb_create_copy_table, spider_mariadb_create_conn, spider_mariadb_support_direct_join, - &spider_db_mariadb_utility + &spider_db_mariadb_utility, + "For communicating to MariaDB using native protocol", + "3.4.0", + SPIDER_MATURITY_STABLE }; spider_db_mbase_row::spider_db_mbase_row( diff --git a/storage/spider/spd_db_oracle.cc b/storage/spider/spd_db_oracle.cc index d83a723e426..7cc32316f68 100644 --- a/storage/spider/spd_db_oracle.cc +++ b/storage/spider/spd_db_oracle.cc @@ -336,7 +336,10 @@ SPIDER_DBTON spider_dbton_oracle = { spider_oracle_create_copy_table, spider_oracle_create_conn, spider_oracle_support_direct_join, - &spider_db_oracle_utility + &spider_db_oracle_utility, + "For communicating Oracle using native protocol", + "1.0.0", + SPIDER_MATURITY_BETA }; spider_db_oracle_row::spider_db_oracle_row() : diff --git a/storage/spider/spd_environ.h b/storage/spider/spd_environ.h index 5e7687074b7..528bed160c9 100644 --- a/storage/spider/spd_environ.h +++ b/storage/spider/spd_environ.h @@ -1,5 +1,5 @@ -/* Copyright (C) 2008-2019 Kentoku Shiba - Copyright (C) 2017-2019 MariaDB corp +/* Copyright (C) 2008-2020 Kentoku Shiba + Copyright (C) 2017-2020 MariaDB corp This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -54,4 +54,8 @@ #define SPIDER_LIKE_FUNC_HAS_GET_NEGATED #define HA_HAS_CHECKSUM_EXTENDED #endif + +#if defined(MARIADB_BASE_VERSION) && MYSQL_VERSION_ID >= 100500 +#define SPIDER_I_S_USE_SHOW_FOR_COLUMN +#endif #endif /* SPD_ENVIRON_INCLUDED */ diff --git a/storage/spider/spd_i_s.cc b/storage/spider/spd_i_s.cc index 014da9fc2cd..24000f3e6c1 100644 --- a/storage/spider/spd_i_s.cc +++ b/storage/spider/spd_i_s.cc @@ -1,4 +1,5 @@ -/* Copyright (C) 2012-2018 Kentoku Shiba +/* Copyright (C) 2012-2020 Kentoku Shiba + Copyright (C) 2020 MariaDB corp This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -45,7 +46,7 @@ static struct st_mysql_storage_engine spider_i_s_info = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION }; namespace Show { - +#ifdef SPIDER_I_S_USE_SHOW_FOR_COLUMN static ST_FIELD_INFO spider_i_s_alloc_mem_fields_info[] = { Column("ID", ULong(10), NOT_NULL, "id"), @@ -58,6 +59,27 @@ static ST_FIELD_INFO spider_i_s_alloc_mem_fields_info[] = Column("FREE_MEM_COUNT", ULonglong(20), NULLABLE, "free_mem_count"), CEnd() }; +#else +static ST_FIELD_INFO spider_i_s_alloc_mem_fields_info[] = +{ + {"ID", 10, MYSQL_TYPE_LONG, 0, MY_I_S_UNSIGNED, "id", SKIP_OPEN_TABLE}, + {"FUNC_NAME", 64, MYSQL_TYPE_STRING, 0, + MY_I_S_MAYBE_NULL, "func_name", SKIP_OPEN_TABLE}, + {"FILE_NAME", 64, MYSQL_TYPE_STRING, 0, + MY_I_S_MAYBE_NULL, "file_name", SKIP_OPEN_TABLE}, + {"LINE_NO", 10, MYSQL_TYPE_LONG, 0, + MY_I_S_UNSIGNED | MY_I_S_MAYBE_NULL, "line_no", SKIP_OPEN_TABLE}, + {"TOTAL_ALLOC_MEM", 20, MYSQL_TYPE_LONGLONG, 0, + MY_I_S_UNSIGNED | MY_I_S_MAYBE_NULL, "total_alloc_mem", SKIP_OPEN_TABLE}, + {"CURRENT_ALLOC_MEM", 20, MYSQL_TYPE_LONGLONG, 0, + MY_I_S_MAYBE_NULL, "current_alloc_mem", SKIP_OPEN_TABLE}, + {"ALLOC_MEM_COUNT", 20, MYSQL_TYPE_LONGLONG, 0, + MY_I_S_UNSIGNED | MY_I_S_MAYBE_NULL, "alloc_mem_count", SKIP_OPEN_TABLE}, + {"FREE_MEM_COUNT", 20, MYSQL_TYPE_LONGLONG, 0, + MY_I_S_UNSIGNED | MY_I_S_MAYBE_NULL, "free_mem_count", SKIP_OPEN_TABLE}, + {NULL, 0, MYSQL_TYPE_STRING, 0, 0, NULL, 0} +}; +#endif } // namespace Show static int spider_i_s_alloc_mem_fill_table( @@ -163,3 +185,127 @@ struct st_maria_plugin spider_i_s_alloc_mem_maria = MariaDB_PLUGIN_MATURITY_STABLE, }; #endif + +extern SPIDER_DBTON spider_dbton[SPIDER_DBTON_SIZE]; + +namespace Show { +#ifdef SPIDER_I_S_USE_SHOW_FOR_COLUMN +static ST_FIELD_INFO spider_i_s_wrapper_protocols_fields_info[] = +{ + Column("WRAPPER_NAME", Varchar(NAME_CHAR_LEN), NOT_NULL, ""), + Column("WRAPPER_VERSION", Varchar(20), NOT_NULL, ""), + Column("WRAPPER_DESCRIPTION", Longtext(65535), NULLABLE, ""), + Column("WRAPPER_MATURITY", Varchar(12), NOT_NULL, ""), + CEnd() +}; +#else +static ST_FIELD_INFO spider_i_s_wrapper_protocols_fields_info[] = +{ + {"WRAPPER_NAME", NAME_CHAR_LEN, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}, + {"WRAPPER_VERSION", 20, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}, + {"WRAPPER_DESCRIPTION", 65535, MYSQL_TYPE_STRING, 0, 1, 0, SKIP_OPEN_TABLE}, + {"WRAPPER_MATURITY", 12, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}, + {0, 0, MYSQL_TYPE_STRING, 0, 0, 0, 0} +}; +#endif +} // namespace Show + +static int spider_i_s_wrapper_protocols_fill_table( + THD *thd, + TABLE_LIST *tables, + COND *cond +) { + uint roop_count; + SPIDER_DBTON *dbton; + TABLE *table = tables->table; + DBUG_ENTER("spider_i_s_wrapper_protocols_fill_table"); + for (roop_count = 0; roop_count < SPIDER_DBTON_SIZE; roop_count++) + { + dbton = &spider_dbton[roop_count]; + if (!dbton->wrapper) + { + continue; + } + table->field[0]->store(dbton->wrapper, + strlen(dbton->wrapper), system_charset_info); + table->field[1]->store(dbton->version_info, + strlen(dbton->version_info), system_charset_info); + if (dbton->descr) + { + table->field[2]->set_notnull(); + table->field[2]->store(dbton->descr, + strlen(dbton->descr), system_charset_info); + } else { + table->field[2]->set_null(); + } + if (dbton->maturity <= SPIDER_MATURITY_STABLE) + { + table->field[3]->store(maturity_name[dbton->maturity].str, + maturity_name[dbton->maturity].length, system_charset_info); + } else { + table->field[3]->store(maturity_name[0].str, + maturity_name[0].length, system_charset_info); + } + if (schema_table_store_record(thd, table)) + { + DBUG_RETURN(1); + } + } + DBUG_RETURN(0); +} + +static int spider_i_s_wrapper_protocols_init( + void *p +) { + ST_SCHEMA_TABLE *schema = (ST_SCHEMA_TABLE *) p; + DBUG_ENTER("spider_i_s_wrapper_protocols_init"); + schema->fields_info = Show::spider_i_s_wrapper_protocols_fields_info; + schema->fill_table = spider_i_s_wrapper_protocols_fill_table; + schema->idx_field1 = 0; + DBUG_RETURN(0); +} + +static int spider_i_s_wrapper_protocols_deinit( + void *p +) { + DBUG_ENTER("spider_i_s_wrapper_protocols_deinit"); + DBUG_RETURN(0); +} + +struct st_mysql_plugin spider_i_s_wrapper_protocols = +{ + MYSQL_INFORMATION_SCHEMA_PLUGIN, + &spider_i_s_info, + "SPIDER_WRAPPER_PROTOCOLS", + "Kentoku Shiba, MariaDB Corp", + "Available wrapper protocols of Spider", + PLUGIN_LICENSE_GPL, + spider_i_s_wrapper_protocols_init, + spider_i_s_wrapper_protocols_deinit, + 0x0001, + NULL, + NULL, + NULL, +#if MYSQL_VERSION_ID >= 50600 + 0, +#endif +}; + +#ifdef MARIADB_BASE_VERSION +struct st_maria_plugin spider_i_s_wrapper_protocols_maria = +{ + MYSQL_INFORMATION_SCHEMA_PLUGIN, + &spider_i_s_info, + "SPIDER_WRAPPER_PROTOCOLS", + "Kentoku Shiba, MariaDB Corp", + "Available wrapper protocols of Spider", + PLUGIN_LICENSE_GPL, + spider_i_s_wrapper_protocols_init, + spider_i_s_wrapper_protocols_deinit, + 0x0100, + NULL, + NULL, + "1.0", + MariaDB_PLUGIN_MATURITY_STABLE, +}; +#endif diff --git a/storage/spider/spd_init_query.h b/storage/spider/spd_init_query.h index dcec21e3ee8..f1fc558ab98 100644 --- a/storage/spider/spd_init_query.h +++ b/storage/spider/spd_init_query.h @@ -1,5 +1,5 @@ -/* Copyright (C) 2010-2019 Kentoku Shiba - Copyright (C) 2019 MariaDB corp +/* Copyright (C) 2010-2020 Kentoku Shiba + Copyright (C) 2019-2020 MariaDB corp This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -686,6 +686,31 @@ static LEX_STRING spider_init_queries[] = { " install plugin spider_alloc_mem soname 'ha_spider.dll';" " end if;" " end if;" +/* + Install spider_wrapper_protocols plugin +*/ + " set @have_spider_i_s_wrapper_protocols_plugin := 0;" + " select @have_spider_i_s_wrapper_protocols_plugin := 1" + " from INFORMATION_SCHEMA.plugins" + " where PLUGIN_NAME = 'SPIDER_WRAPPER_PROTOCOLS';" + " set @have_spider_wrapper_protocols_plugin := 0;" + " select @have_spider_wrapper_protocols_plugin := 1 from mysql.plugin" + " where name = 'spider_wrapper_protocols';" + " if @have_spider_i_s_wrapper_protocols_plugin = 0 then" + " if @have_spider_wrapper_protocols_plugin = 1 then" + " /*" + " spider_wrapper_protocols plugin is present in mysql.plugin but not in" + " information_schema.plugins. Remove spider_wrapper_protocols plugin entry" + " in mysql.plugin first." + " */" + " delete from mysql.plugin where name = 'spider_wrapper_protocols';" + " end if;" + " if @win_plugin = 0 then " + " install plugin spider_wrapper_protocols soname 'ha_spider.so';" + " else" + " install plugin spider_wrapper_protocols soname 'ha_spider.dll';" + " end if;" + " end if;" " set @have_spider_direct_sql_udf := 0;" " select @have_spider_direct_sql_udf := 1 from mysql.func" " where name = 'spider_direct_sql';" diff --git a/storage/spider/spd_param.cc b/storage/spider/spd_param.cc index 8c71bf3c4df..8084fe8a3ce 100644 --- a/storage/spider/spd_param.cc +++ b/storage/spider/spd_param.cc @@ -35,8 +35,10 @@ #include "spd_trx.h" extern struct st_mysql_plugin spider_i_s_alloc_mem; +extern struct st_mysql_plugin spider_i_s_wrapper_protocols; #ifdef MARIADB_BASE_VERSION extern struct st_maria_plugin spider_i_s_alloc_mem_maria; +extern struct st_maria_plugin spider_i_s_wrapper_protocols_maria; #endif extern volatile ulonglong spider_mon_table_cache_version; @@ -3652,7 +3654,8 @@ mysql_declare_plugin(spider) 0, #endif }, -spider_i_s_alloc_mem +spider_i_s_alloc_mem, +spider_i_s_wrapper_protocols mysql_declare_plugin_end; #ifdef MARIADB_BASE_VERSION @@ -3672,6 +3675,7 @@ maria_declare_plugin(spider) SPIDER_DETAIL_VERSION, MariaDB_PLUGIN_MATURITY_BETA }, -spider_i_s_alloc_mem_maria +spider_i_s_alloc_mem_maria, +spider_i_s_wrapper_protocols_maria maria_declare_plugin_end; #endif |