diff --git a/libmysqld/Makefile.am b/libmysqld/Makefile.am index 12531a553eb..fb34b3a2bca 100644 --- a/libmysqld/Makefile.am +++ b/libmysqld/Makefile.am @@ -64,6 +64,7 @@ sqlsources = derror.cc field.cc field_conv.cc strfunc.cc filesort.cc \ spatial.cc gstream.cc sql_help.cc tztime.cc sql_cursor.cc \ sp_head.cc sp_pcontext.cc sp.cc sp_cache.cc sp_rcontext.cc \ parse_file.cc sql_view.cc sql_trigger.cc my_decimal.cc \ + item_xmlfunc.cc \ rpl_filter.cc sql_partition.cc handlerton.cc sql_plugin.cc libmysqld_int_a_SOURCES= $(libmysqld_sources) $(libmysqlsources) $(sqlsources) diff --git a/mysql-test/r/information_schema.result b/mysql-test/r/information_schema.result index 6b7be14a531..f86e972dfe1 100644 --- a/mysql-test/r/information_schema.result +++ b/mysql-test/r/information_schema.result @@ -41,6 +41,7 @@ COLLATIONS COLLATION_CHARACTER_SET_APPLICABILITY COLUMNS COLUMN_PRIVILEGES +ENGINES KEY_COLUMN_USAGE PLUGINS ROUTINES @@ -1058,3 +1059,6 @@ where table_name="v1"; table_type VIEW drop view v1; +select * from information_schema.engines WHERE ENGINE="MyISAM"; +ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS +MyISAM ENABLED Default engine as of MySQL 3.23 with great performance NO NO NO diff --git a/mysql-test/r/information_schema_db.result b/mysql-test/r/information_schema_db.result index 092c03064ba..75dc747cfab 100644 --- a/mysql-test/r/information_schema_db.result +++ b/mysql-test/r/information_schema_db.result @@ -6,6 +6,7 @@ COLLATIONS COLLATION_CHARACTER_SET_APPLICABILITY COLUMNS COLUMN_PRIVILEGES +ENGINES KEY_COLUMN_USAGE PLUGINS ROUTINES diff --git a/mysql-test/t/information_schema.test b/mysql-test/t/information_schema.test index acbc62f1364..1f4933c9bb4 100644 --- a/mysql-test/t/information_schema.test +++ b/mysql-test/t/information_schema.test @@ -748,3 +748,9 @@ drop table t1; select table_type from information_schema.tables where table_name="v1"; drop view v1; + +# +# Show engines +# + +select * from information_schema.engines WHERE ENGINE="MyISAM"; diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index f20fb7304ba..9d2e4c2fef5 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -96,7 +96,7 @@ handlerton partition_hton = { NULL, /* Start Consistent Snapshot */ NULL, /* Flush logs */ NULL, /* Show status */ - HTON_NOT_USER_SELECTABLE + HTON_NOT_USER_SELECTABLE | HTON_HIDDEN }; static handler *partition_create_handler(TABLE_SHARE *share) diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 839e1dbd65f..4def568635d 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -2229,6 +2229,7 @@ int prepare_schema_table(THD *thd, LEX *lex, Table_ident *table_ident, case SCH_STATUS: case SCH_PROCEDURES: case SCH_CHARSETS: + case SCH_ENGINES: case SCH_COLLATIONS: case SCH_COLLATION_CHARACTER_SET_APPLICABILITY: case SCH_USER_PRIVILEGES: diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 42345afbd0d..7abd625c2a9 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -2917,6 +2917,46 @@ int fill_schema_charsets(THD *thd, TABLE_LIST *tables, COND *cond) } +int fill_schema_engines(THD *thd, TABLE_LIST *tables, COND *cond) +{ + const char *wild= thd->lex->wild ? thd->lex->wild->ptr() : NullS; + TABLE *table= tables->table; + CHARSET_INFO *scs= system_charset_info; + handlerton **types; + + DBUG_ENTER("fill_schema_engines"); + + for (types= sys_table_types; *types; types++) + { + if ((*types)->flags & HTON_HIDDEN) + continue; + + if (!(wild && wild[0] && + wild_case_compare(scs, (*types)->name,wild))) + { + const char *tmp; + restore_record(table, s->default_values); + + table->field[0]->store((*types)->name, strlen((*types)->name), scs); + tmp= (*types)->state ? "DISABLED" : "ENABLED"; + table->field[1]->store( tmp, strlen(tmp), scs); + table->field[2]->store((*types)->comment, strlen((*types)->comment), scs); + tmp= (*types)->commit ? "YES" : "NO"; + table->field[3]->store( tmp, strlen(tmp), scs); + tmp= (*types)->prepare ? "YES" : "NO"; + table->field[4]->store( tmp, strlen(tmp), scs); + tmp= (*types)->savepoint_set ? "YES" : "NO"; + table->field[5]->store( tmp, strlen(tmp), scs); + + if (schema_table_store_record(thd, table)) + DBUG_RETURN(1); + } + } + + DBUG_RETURN(0); +} + + int fill_schema_collation(THD *thd, TABLE_LIST *tables, COND *cond) { CHARSET_INFO **cs; @@ -3971,6 +4011,7 @@ int make_schema_select(THD *thd, SELECT_LEX *sel, ST_SCHEMA_TABLE *schema_table= get_schema_table(schema_table_idx); LEX_STRING db, table; DBUG_ENTER("mysql_schema_select"); + DBUG_PRINT("enter", ("mysql_schema_select: %s", schema_table->table_name)); /* We have to make non const db_name & table_name because of lower_case_table_names @@ -4124,6 +4165,18 @@ ST_FIELD_INFO collation_fields_info[]= }; +ST_FIELD_INFO engines_fields_info[]= +{ + {"ENGINE", 64, MYSQL_TYPE_STRING, 0, 0, "Engine"}, + {"SUPPORT", 8, MYSQL_TYPE_STRING, 0, 0, "Support"}, + {"COMMENT", 80, MYSQL_TYPE_STRING, 0, 0, "Comment"}, + {"TRANSACTIONS", 3, MYSQL_TYPE_STRING, 0, 0, "Transactions"}, + {"XA", 3, MYSQL_TYPE_STRING, 0, 0, "XA"}, + {"SAVEPOINTS", 3 ,MYSQL_TYPE_STRING, 0, 0, "Savepoints"}, + {0, 0, MYSQL_TYPE_STRING, 0, 0, 0} +}; + + ST_FIELD_INFO coll_charset_app_fields_info[]= { {"COLLATION_NAME", 64, MYSQL_TYPE_STRING, 0, 0, 0}, @@ -4339,6 +4392,9 @@ ST_FIELD_INFO plugin_fields_info[]= /* Description of ST_FIELD_INFO in table.h + + Make sure that the order of schema_tables and enum_schema_tables are the same. + */ ST_SCHEMA_TABLE schema_tables[]= @@ -4353,6 +4409,8 @@ ST_SCHEMA_TABLE schema_tables[]= get_all_tables, make_columns_old_format, get_schema_column_record, 1, 2, 0}, {"COLUMN_PRIVILEGES", column_privileges_fields_info, create_schema_table, fill_schema_column_privileges, 0, 0, -1, -1, 0}, + {"ENGINES", engines_fields_info, create_schema_table, + fill_schema_engines, make_old_format, 0, -1, -1, 0}, {"KEY_COLUMN_USAGE", key_column_usage_fields_info, create_schema_table, get_all_tables, 0, get_schema_key_column_usage_record, 4, 5, 0}, {"OPEN_TABLES", open_tables_fields_info, create_schema_table, diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index bc41178e1be..e1231bd8c5c 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -7114,6 +7114,9 @@ show_param: { LEX *lex=Lex; lex->sql_command= SQLCOM_SHOW_STORAGE_ENGINES; + lex->orig_sql_command= SQLCOM_SHOW_AUTHORS; + if (prepare_schema_table(YYTHD, lex, 0, SCH_ENGINES)) + YYABORT; } | AUTHORS_SYM { diff --git a/sql/table.h b/sql/table.h index c8b9db1b2a5..d8829de5ebf 100644 --- a/sql/table.h +++ b/sql/table.h @@ -317,6 +317,9 @@ typedef struct st_foreign_key_info List referenced_fields; } FOREIGN_KEY_INFO; +/* + Make sure that the order of schema_tables and enum_schema_tables are the same. +*/ enum enum_schema_tables { @@ -325,6 +328,7 @@ enum enum_schema_tables SCH_COLLATION_CHARACTER_SET_APPLICABILITY, SCH_COLUMNS, SCH_COLUMN_PRIVILEGES, + SCH_ENGINES, SCH_KEY_COLUMN_USAGE, SCH_OPEN_TABLES, SCH_PLUGINS,