summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libmysqld/Makefile.am1
-rw-r--r--mysql-test/r/information_schema.result8
-rw-r--r--mysql-test/r/information_schema_db.result1
-rw-r--r--mysql-test/t/information_schema.test6
-rw-r--r--sql/ha_partition.cc2
-rw-r--r--sql/sql_parse.cc1
-rw-r--r--sql/sql_show.cc58
-rw-r--r--sql/sql_yacc.yy3
-rw-r--r--sql/table.h4
9 files changed, 81 insertions, 3 deletions
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 c7c3de9451a..d1901b725a1 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
ROUTINES
SCHEMATA
@@ -723,7 +724,7 @@ CREATE TABLE t_crashme ( f1 BIGINT);
CREATE VIEW a1 (t_CRASHME) AS SELECT f1 FROM t_crashme GROUP BY f1;
CREATE VIEW a2 AS SELECT t_CRASHME FROM a1;
count(*)
-102
+103
drop view a2, a1;
drop table t_crashme;
select table_schema,table_name, column_name from
@@ -793,7 +794,7 @@ delete from mysql.db where user='mysqltest_4';
flush privileges;
SELECT table_schema, count(*) FROM information_schema.TABLES GROUP BY TABLE_SCHEMA;
table_schema count(*)
-information_schema 16
+information_schema 17
mysql 18
create table t1 (i int, j int);
create trigger trg1 before insert on t1 for each row
@@ -1056,3 +1057,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 d3ff310b812..a3cf0840903 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
ROUTINES
SCHEMATA
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 b0b4ac3fdcd..c2d8dfaa7b8 100644
--- a/sql/ha_partition.cc
+++ b/sql/ha_partition.cc
@@ -98,7 +98,7 @@ handlerton partition_hton = {
NULL, /* Flush logs */
NULL, /* Show status */
NULL, /* Replication Report Sent Binlog */
- 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 986e87c7d01..19f15ab8151 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 badc15f2ab5..0cb6215c57b 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -2767,6 +2767,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;
@@ -3821,6 +3861,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
@@ -3974,6 +4015,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},
@@ -4174,6 +4227,9 @@ ST_FIELD_INFO variables_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[]=
@@ -4188,6 +4244,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 01dfd9f2f5a..dc7e8628dc3 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -7098,6 +7098,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 c4e99ed2a0d..93f8e2942bc 100644
--- a/sql/table.h
+++ b/sql/table.h
@@ -314,6 +314,9 @@ typedef struct st_foreign_key_info
List<LEX_STRING> referenced_fields;
} FOREIGN_KEY_INFO;
+/*
+ Make sure that the order of schema_tables and enum_schema_tables are the same.
+*/
enum enum_schema_tables
{
@@ -322,6 +325,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_PROCEDURES,