From 8c8ab0488e7026397f8d8e2075511281da792b1b Mon Sep 17 00:00:00 2001 From: "anozdrin/alik@ibm." <> Date: Tue, 19 Jun 2007 01:54:35 +0400 Subject: [PATCH 1/6] Fix typo in the patch for BUG#25411 on 24-Apr-2007. --- sql/handler.cc | 2 +- sql/sp.cc | 2 +- sql/sp_head.cc | 4 ++-- sql/sql_error.cc | 2 +- sql/sql_trigger.cc | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sql/handler.cc b/sql/handler.cc index 867ac7ff778..70d50f3f34f 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -1343,7 +1343,7 @@ int ha_delete_table(THD *thd, enum db_type table_type, const char *path, strmake(buff, thd->net.last_error, sizeof(buff)-1); thd->query_error= 0; - thd->spcont= 0; + thd->spcont= NULL; thd->lex->current_select= 0; thd->net.last_error[0]= 0; diff --git a/sql/sp.cc b/sql/sp.cc index de786a77275..d28e9138fa8 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -438,10 +438,10 @@ db_load_routine(THD *thd, int type, sp_name *name, sp_head **sphp, Lex_input_stream lip(thd, defstr.c_ptr(), defstr.length()); thd->m_lip= &lip; lex_start(thd); + thd->spcont= NULL; ret= MYSQLparse(thd); } - thd->spcont= 0; if (ret || thd->is_fatal_error || newlex.sphead == NULL) { sp_head *sp= newlex.sphead; diff --git a/sql/sp_head.cc b/sql/sp_head.cc index a98fe5027c9..d939fd20b9b 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -2581,7 +2581,7 @@ sp_instr_set::exec_core(THD *thd, uint *nextp) sp_rcontext *spcont= thd->spcont; - thd->spcont= 0; /* Avoid handlers */ + thd->spcont= NULL; /* Avoid handlers */ my_error(ER_OUT_OF_RESOURCES, MYF(0)); spcont->clear_handler(); thd->spcont= spcont; @@ -3316,7 +3316,7 @@ sp_instr_set_case_expr::exec_core(THD *thd, uint *nextp) sp_rcontext *spcont= thd->spcont; - thd->spcont= 0; /* Avoid handlers */ + thd->spcont= NULL; /* Avoid handlers */ my_error(ER_OUT_OF_RESOURCES, MYF(0)); spcont->clear_handler(); thd->spcont= spcont; diff --git a/sql/sql_error.cc b/sql/sql_error.cc index 61a7581908c..4b7774286ba 100644 --- a/sql/sql_error.cc +++ b/sql/sql_error.cc @@ -126,7 +126,7 @@ MYSQL_ERROR *push_warning(THD *thd, MYSQL_ERROR::enum_warning_level level, sp_rcontext *spcont= thd->spcont; thd->no_warnings_for_error= 1; - thd->spcont= 0; + thd->spcont= NULL; thd->killed= THD::KILL_BAD_DATA; my_message(code, msg, MYF(0)); diff --git a/sql/sql_trigger.cc b/sql/sql_trigger.cc index cf6db22fbcb..5762614e47f 100644 --- a/sql/sql_trigger.cc +++ b/sql/sql_trigger.cc @@ -982,7 +982,7 @@ bool Table_triggers_list::check_n_load(THD *thd, const char *db, Lex_input_stream lip(thd, trg_create_str->str, trg_create_str->length); thd->m_lip= &lip; lex_start(thd); - thd->spcont= 0; + thd->spcont= NULL; int err= MYSQLparse((void *)thd); if (err || thd->is_fatal_error) From 3e7c1b1cb1125a3cf61b2d45f8052acd69c68fdb Mon Sep 17 00:00:00 2001 From: "thek@adventure.(none)" <> Date: Fri, 22 Jun 2007 11:55:48 +0200 Subject: [PATCH 2/6] Bug#28846 Use of undocumented Prepared Statements crashes server ALTER VIEW is currently not supported as a prepared statement and should be disabled as such as they otherwise could cause server crashes. ALTER VIEW is currently not supported when called from stored procedures or functions for related reasons and should also be disabled. This patch disables these DDL statements and adjusts the appropriate test cases accordingly. Additional tests has been added to reflect on the fact that we do support CREATE/ALTER/DROP TABLE for Prepared Statements (PS), Stored Procedures (SP) and PS within SP. --- mysql-test/r/ps_1general.result | 2 ++ mysql-test/r/sp-dynamic.result | 18 +++++++++++++++++- mysql-test/r/sp-error.result | 4 ++-- mysql-test/t/ps_1general.test | 4 ++++ mysql-test/t/sp-dynamic.test | 12 ++++++++++-- mysql-test/t/sp-error.test | 10 +++++----- sql/sql_class.h | 7 +++++++ sql/sql_parse.cc | 4 ++++ sql/sql_prepare.cc | 8 +++++++- sql/sql_view.cc | 19 +++++++++---------- sql/sql_yacc.yy | 5 +++++ 11 files changed, 72 insertions(+), 21 deletions(-) diff --git a/mysql-test/r/ps_1general.result b/mysql-test/r/ps_1general.result index df4ec793325..5ea6a758d42 100644 --- a/mysql-test/r/ps_1general.result +++ b/mysql-test/r/ps_1general.result @@ -396,6 +396,8 @@ prepare stmt1 from ' execute stmt2 ' ; ERROR HY000: This command is not supported in the prepared statement protocol yet prepare stmt1 from ' deallocate prepare never_prepared ' ; ERROR HY000: This command is not supported in the prepared statement protocol yet +prepare stmt1 from 'alter view v1 as select 2'; +ERROR HY000: This command is not supported in the prepared statement protocol yet prepare stmt4 from ' use test ' ; ERROR HY000: This command is not supported in the prepared statement protocol yet prepare stmt3 from ' create database mysqltest '; diff --git a/mysql-test/r/sp-dynamic.result b/mysql-test/r/sp-dynamic.result index d9d5706cded..0f50bcc97cd 100644 --- a/mysql-test/r/sp-dynamic.result +++ b/mysql-test/r/sp-dynamic.result @@ -87,6 +87,10 @@ prepare stmt from "create table t1 (a int)"; execute stmt; insert into t1 (a) values (1); select * from t1; +prepare stmt_alter from "alter table t1 add (b int)"; +execute stmt_alter; +insert into t1 (a,b) values (2,1); +deallocate prepare stmt_alter; deallocate prepare stmt; deallocate prepare stmt_drop; end| @@ -245,6 +249,9 @@ a 1 drop procedure p1| drop table if exists t1| +drop table if exists t2| +Warnings: +Note 1051 Unknown table 't2' create table t1 (id integer primary key auto_increment, stmt_text char(35), status varchar(20))| insert into t1 (stmt_text) values @@ -255,7 +262,10 @@ insert into t1 (stmt_text) values ("help help"), ("show databases"), ("show tables"), ("show table status"), ("show open tables"), ("show storage engines"), ("insert into t1 (id) values (1)"), ("update t1 set status=''"), -("delete from t1"), ("truncate t1"), ("call p1()"), ("foo bar")| +("delete from t1"), ("truncate t1"), ("call p1()"), ("foo bar"), +("create view v1 as select 1"), ("alter view v1 as select 2"), +("drop view v1"),("create table t2 (a int)"),("alter table t2 add (b int)"), +("drop table t2")| create procedure p1() begin declare v_stmt_text varchar(255); @@ -305,6 +315,12 @@ id stmt_text status 20 truncate t1 supported 21 call p1() supported 22 foo bar syntax error +23 create view v1 as select 1 supported +24 alter view v1 as select 2 not supported +25 drop view v1 supported +26 create table t2 (a int) supported +27 alter table t2 add (b int) supported +28 drop table t2 supported drop procedure p1| drop table t1| prepare stmt from 'select 1'| diff --git a/mysql-test/r/sp-error.result b/mysql-test/r/sp-error.result index 7a2f812cde4..bd0640b2b14 100644 --- a/mysql-test/r/sp-error.result +++ b/mysql-test/r/sp-error.result @@ -982,9 +982,9 @@ ERROR HY000: Explicit or implicit commit is not allowed in stored function or tr CREATE FUNCTION bug_13627_f() returns int BEGIN create view v1 as select 1; return 1; END | ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger. CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN alter view v1 as select 1; END | -ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger. +ERROR 0A000: ALTER VIEW is not allowed in stored procedures CREATE FUNCTION bug_13627_f() returns int BEGIN alter view v1 as select 1; return 1; END | -ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger. +ERROR 0A000: ALTER VIEW is not allowed in stored procedures CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN drop view v1; END | ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger. CREATE FUNCTION bug_13627_f() returns int BEGIN drop view v1; return 1; END | diff --git a/mysql-test/t/ps_1general.test b/mysql-test/t/ps_1general.test index 2e7fea2ff3d..952931f2ad1 100644 --- a/mysql-test/t/ps_1general.test +++ b/mysql-test/t/ps_1general.test @@ -423,6 +423,10 @@ prepare stmt1 from ' execute stmt2 ' ; --error ER_UNSUPPORTED_PS prepare stmt1 from ' deallocate prepare never_prepared ' ; +## We don't support alter view as prepared statements +--error ER_UNSUPPORTED_PS +prepare stmt1 from 'alter view v1 as select 2'; + ## switch the database connection --error 1295 prepare stmt4 from ' use test ' ; diff --git a/mysql-test/t/sp-dynamic.test b/mysql-test/t/sp-dynamic.test index 6546a5ab548..e6f4aae96ac 100644 --- a/mysql-test/t/sp-dynamic.test +++ b/mysql-test/t/sp-dynamic.test @@ -85,7 +85,7 @@ call p1()| call p1()| drop procedure p1| # -# D. Create/Drop a table (a DDL that issues a commit) in Dynamic SQL. +# D. Create/Drop/Alter a table (a DDL that issues a commit) in Dynamic SQL. # (should work ok). # create procedure p1() @@ -96,6 +96,10 @@ begin execute stmt; insert into t1 (a) values (1); select * from t1; + prepare stmt_alter from "alter table t1 add (b int)"; + execute stmt_alter; + insert into t1 (a,b) values (2,1); + deallocate prepare stmt_alter; deallocate prepare stmt; deallocate prepare stmt_drop; end| @@ -239,6 +243,7 @@ drop procedure p1| # K. Use of continue handlers with Dynamic SQL. # drop table if exists t1| +drop table if exists t2| create table t1 (id integer primary key auto_increment, stmt_text char(35), status varchar(20))| insert into t1 (stmt_text) values @@ -249,7 +254,10 @@ insert into t1 (stmt_text) values ("help help"), ("show databases"), ("show tables"), ("show table status"), ("show open tables"), ("show storage engines"), ("insert into t1 (id) values (1)"), ("update t1 set status=''"), - ("delete from t1"), ("truncate t1"), ("call p1()"), ("foo bar")| + ("delete from t1"), ("truncate t1"), ("call p1()"), ("foo bar"), + ("create view v1 as select 1"), ("alter view v1 as select 2"), + ("drop view v1"),("create table t2 (a int)"),("alter table t2 add (b int)"), + ("drop table t2")| create procedure p1() begin declare v_stmt_text varchar(255); diff --git a/mysql-test/t/sp-error.test b/mysql-test/t/sp-error.test index ec91be13ba0..240cda67edc 100644 --- a/mysql-test/t/sp-error.test +++ b/mysql-test/t/sp-error.test @@ -1087,12 +1087,12 @@ delimiter ;| # # BUG 12490 (Packets out of order if calling HELP CONTENTS from Stored Procedure) # ---error 1314 +--error ER_SP_BADSTATEMENT CREATE PROCEDURE BUG_12490() HELP CONTENTS; ---error 1314 +--error ER_SP_BADSTATEMENT CREATE FUNCTION BUG_12490() RETURNS INT HELP CONTENTS; CREATE TABLE t_bug_12490(a int); ---error 1314 +--error ER_SP_BADSTATEMENT CREATE TRIGGER BUG_12490 BEFORE UPDATE ON t_bug_12490 FOR EACH ROW HELP CONTENTS; DROP TABLE t_bug_12490; @@ -1397,9 +1397,9 @@ CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN create view v1 as sele -- error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG CREATE FUNCTION bug_13627_f() returns int BEGIN create view v1 as select 1; return 1; END | --- error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG +-- error ER_SP_BADSTATEMENT CREATE TRIGGER tr1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN alter view v1 as select 1; END | --- error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG +-- error ER_SP_BADSTATEMENT CREATE FUNCTION bug_13627_f() returns int BEGIN alter view v1 as select 1; return 1; END | -- error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG diff --git a/sql/sql_class.h b/sql/sql_class.h index 62f4df0719f..c2e22a6fd8b 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -697,6 +697,13 @@ public: #ifndef DBUG_OFF bool is_backup_arena; /* True if this arena is used for backup. */ #endif + /* + The states relfects three diffrent life cycles for three + different types of statements: + Prepared statement: INITIALIZED -> PREPARED -> EXECUTED. + Stored procedure: INITIALIZED_FOR_SP -> EXECUTED. + Other statements: CONVENTIONAL_EXECUTION never changes. + */ enum enum_state { INITIALIZED= 0, INITIALIZED_FOR_SP= 1, PREPARED= 2, diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 6277a6c0c10..923e019d982 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -4876,6 +4876,10 @@ create_sp_error: #endif // ifndef DBUG_OFF case SQLCOM_CREATE_VIEW: { + /* + Note: SQLCOM_CREATE_VIEW also handles 'ALTER VIEW' commands + as specified through the thd->lex->create_view_mode flag. + */ if (end_active_trans(thd)) goto error; diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 42655608196..4cdf54393de 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -1727,6 +1727,13 @@ static bool check_prepared_statement(Prepared_statement *stmt, res= mysql_test_create_table(stmt); break; + case SQLCOM_CREATE_VIEW: + if (lex->create_view_mode == VIEW_ALTER) + { + my_message(ER_UNSUPPORTED_PS, ER(ER_UNSUPPORTED_PS), MYF(0)); + goto error; + } + break; case SQLCOM_DO: res= mysql_test_do_fields(stmt, tables, lex->insert_list); break; @@ -1769,7 +1776,6 @@ static bool check_prepared_statement(Prepared_statement *stmt, case SQLCOM_ROLLBACK: case SQLCOM_TRUNCATE: case SQLCOM_CALL: - case SQLCOM_CREATE_VIEW: case SQLCOM_DROP_VIEW: case SQLCOM_REPAIR: case SQLCOM_ANALYZE: diff --git a/sql/sql_view.cc b/sql/sql_view.cc index bfa799ff289..54bd248fabb 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -205,18 +205,17 @@ fill_defined_view_parts (THD *thd, TABLE_LIST *view) } -/* - Creating/altering VIEW procedure +/** + @brief Creating/altering VIEW procedure - SYNOPSIS - mysql_create_view() - thd - thread handler - views - views to create - mode - VIEW_CREATE_NEW, VIEW_ALTER, VIEW_CREATE_OR_REPLACE + @param thd thread handler + @param views views to create + @param mode VIEW_CREATE_NEW, VIEW_ALTER, VIEW_CREATE_OR_REPLACE - RETURN VALUE - FALSE OK - TRUE Error + @note This function handles both create and alter view commands. + + @retval FALSE Operation was a success. + @retval TRUE An error occured. */ bool mysql_create_view(THD *thd, TABLE_LIST *views, diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index b970bcaedd6..a3a9ead897e 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -3671,6 +3671,11 @@ alter: { THD *thd= YYTHD; LEX *lex= thd->lex; + if (lex->sphead) + { + my_error(ER_SP_BADSTATEMENT, MYF(0), "ALTER VIEW"); + MYSQL_YYABORT; + } lex->sql_command= SQLCOM_CREATE_VIEW; lex->create_view_mode= VIEW_ALTER; /* first table in list is target VIEW name */ From 6794da1159a649ec6485bb73696abb281c7c0a71 Mon Sep 17 00:00:00 2001 From: "anozdrin/alik@ibm." <> Date: Thu, 28 Jun 2007 13:24:52 +0400 Subject: [PATCH 3/6] Fix for BUG#10491: Server returns data as charset binary SHOW CREATE TABLE or SELECT FROM I_S. Actually, the bug discovers two problems: - the original query is not preserved properly. This is the problem of BUG#16291; - the resultset of SHOW CREATE TABLE statement is binary. This patch fixes the second problem for the 5.0. Both problems will be fixed in 5.1. --- mysql-test/r/show_check.result | 443 +++++++++++++++++++++++++++++++++ mysql-test/t/show_check.test | 248 ++++++++++++++++++ sql/item.h | 8 +- 3 files changed, 698 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/show_check.result b/mysql-test/r/show_check.result index 0dfb7c95f9a..e2450c98202 100644 --- a/mysql-test/r/show_check.result +++ b/mysql-test/r/show_check.result @@ -7,60 +7,157 @@ delete from mysql.db where user='mysqltest_1' || user='mysqltest_2' || user='mys flush privileges; create table t1 (a int not null primary key, b int not null,c int not null, key(b,c)); insert into t1 values (1,2,2),(2,2,3),(3,2,4),(4,2,4); +-- Here we enable metadata just to check that the collation of the +-- resultset is non-binary for string type. This should be changed +-- after Bug#29394 is implemented. check table t1 fast; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def Table 253 42 7 Y 0 31 8 +def Op 253 3 5 Y 0 31 8 +def Msg_type 253 3 6 Y 0 31 8 +def Msg_text 253 85 27 Y 0 31 8 Table Op Msg_type Msg_text test.t1 check status Table is already up to date check table t1 fast; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def Table 253 42 7 Y 0 31 8 +def Op 253 3 5 Y 0 31 8 +def Msg_type 253 3 6 Y 0 31 8 +def Msg_text 253 85 27 Y 0 31 8 Table Op Msg_type Msg_text test.t1 check status Table is already up to date check table t1 changed; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def Table 253 42 7 Y 0 31 8 +def Op 253 3 5 Y 0 31 8 +def Msg_type 253 3 6 Y 0 31 8 +def Msg_text 253 85 2 Y 0 31 8 Table Op Msg_type Msg_text test.t1 check status OK insert into t1 values (5,5,5); check table t1 changed; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def Table 253 42 7 Y 0 31 8 +def Op 253 3 5 Y 0 31 8 +def Msg_type 253 3 6 Y 0 31 8 +def Msg_text 253 85 2 Y 0 31 8 Table Op Msg_type Msg_text test.t1 check status OK check table t1 medium; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def Table 253 42 7 Y 0 31 8 +def Op 253 3 5 Y 0 31 8 +def Msg_type 253 3 6 Y 0 31 8 +def Msg_text 253 85 2 Y 0 31 8 Table Op Msg_type Msg_text test.t1 check status OK check table t1 extended; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def Table 253 42 7 Y 0 31 8 +def Op 253 3 5 Y 0 31 8 +def Msg_type 253 3 6 Y 0 31 8 +def Msg_text 253 85 2 Y 0 31 8 Table Op Msg_type Msg_text test.t1 check status OK show index from t1; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def STATISTICS TABLE_NAME Table 253 64 2 N 1 0 8 +def STATISTICS NON_UNIQUE Non_unique 8 1 1 N 32769 0 63 +def STATISTICS INDEX_NAME Key_name 253 64 7 N 1 0 8 +def STATISTICS SEQ_IN_INDEX Seq_in_index 8 2 1 N 32769 0 63 +def STATISTICS COLUMN_NAME Column_name 253 64 1 N 1 0 8 +def STATISTICS COLLATION Collation 253 1 1 Y 0 0 8 +def STATISTICS CARDINALITY Cardinality 8 21 1 Y 32768 0 63 +def STATISTICS SUB_PART Sub_part 8 3 0 Y 32768 0 63 +def STATISTICS PACKED Packed 253 10 0 Y 0 0 8 +def STATISTICS NULLABLE Null 253 3 0 N 1 0 8 +def STATISTICS INDEX_TYPE Index_type 253 16 5 N 1 0 8 +def STATISTICS COMMENT Comment 253 16 0 Y 0 0 8 Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment t1 0 PRIMARY 1 a A 5 NULL NULL BTREE t1 1 b 1 b A 1 NULL NULL BTREE t1 1 b 2 c A 5 NULL NULL BTREE insert into t1 values (5,5,5); ERROR 23000: Duplicate entry '5' for key 1 +-- Here we enable metadata just to check that the collation of the +-- resultset is non-binary for string type. This should be changed +-- after Bug#29394 is implemented. optimize table t1; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def Table 253 42 7 Y 0 31 8 +def Op 253 3 8 Y 0 31 8 +def Msg_type 253 3 6 Y 0 31 8 +def Msg_text 253 85 2 Y 0 31 8 Table Op Msg_type Msg_text test.t1 optimize status OK optimize table t1; Table Op Msg_type Msg_text test.t1 optimize status Table is already up to date drop table t1; +-- Here we enable metadata just to check that the collation of the +-- resultset is non-binary for string type. This should be changed +-- after Bug#29394 is implemented. show variables like "wait_timeout%"; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def VARIABLES Variable_name Variable_name 253 80 12 N 1 0 8 +def VARIABLES Value Value 253 512 5 N 1 0 8 Variable_name Value wait_timeout 28800 show variables like "WAIT_timeout%"; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def VARIABLES Variable_name Variable_name 253 80 12 N 1 0 8 +def VARIABLES Value Value 253 512 5 N 1 0 8 Variable_name Value wait_timeout 28800 show variables like "this_doesn't_exists%"; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def VARIABLES Variable_name Variable_name 253 80 0 N 1 0 8 +def VARIABLES Value Value 253 512 0 N 1 0 8 Variable_name Value show table status from test like "this_doesn't_exists%"; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def TABLES TABLE_NAME Name 253 64 0 N 1 0 8 +def TABLES ENGINE Engine 253 64 0 Y 0 0 8 +def TABLES VERSION Version 8 21 0 Y 32768 0 63 +def TABLES ROW_FORMAT Row_format 253 10 0 Y 0 0 8 +def TABLES TABLE_ROWS Rows 8 21 0 Y 32768 0 63 +def TABLES AVG_ROW_LENGTH Avg_row_length 8 21 0 Y 32768 0 63 +def TABLES DATA_LENGTH Data_length 8 21 0 Y 32768 0 63 +def TABLES MAX_DATA_LENGTH Max_data_length 8 21 0 Y 32768 0 63 +def TABLES INDEX_LENGTH Index_length 8 21 0 Y 32768 0 63 +def TABLES DATA_FREE Data_free 8 21 0 Y 32768 0 63 +def TABLES AUTO_INCREMENT Auto_increment 8 21 0 Y 32768 0 63 +def TABLES CREATE_TIME Create_time 12 19 0 Y 128 0 63 +def TABLES UPDATE_TIME Update_time 12 19 0 Y 128 0 63 +def TABLES CHECK_TIME Check_time 12 19 0 Y 128 0 63 +def TABLES TABLE_COLLATION Collation 253 64 0 Y 0 0 8 +def TABLES CHECKSUM Checksum 8 21 0 Y 32768 0 63 +def TABLES CREATE_OPTIONS Create_options 253 255 0 Y 0 0 8 +def TABLES TABLE_COMMENT Comment 253 80 0 N 1 0 8 Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment show databases; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def SCHEMATA SCHEMA_NAME Database 253 64 18 N 1 0 8 Database information_schema mysql test show databases like "test%"; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def SCHEMATA SCHEMA_NAME Database (test%) 253 64 4 N 1 0 8 Database (test%) test create table t1 (f1 int not null, f2 int not null, f3 int not null, f4 int not null, primary key(f1,f2,f3,f4)); insert into t1 values (1,1,1,0),(1,1,2,0),(1,1,3,0),(1,2,1,0),(1,2,2,0),(1,2,3,0),(1,3,1,0),(1,3,2,0),(1,3,3,0),(1,1,1,1),(1,1,2,1),(1,1,3,1),(1,2,1,1),(1,2,2,1),(1,2,3,1),(1,3,1,1),(1,3,2,1),(1,3,3,1); +-- Here we enable metadata just to check that the collation of the +-- resultset is non-binary for string type. This should be changed +-- after Bug#29394 is implemented. analyze table t1; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def Table 253 42 7 Y 0 31 8 +def Op 253 3 7 Y 0 31 8 +def Msg_type 253 3 6 Y 0 31 8 +def Msg_text 253 85 2 Y 0 31 8 Table Op Msg_type Msg_text test.t1 analyze status OK show index from t1; @@ -69,7 +166,15 @@ t1 0 PRIMARY 1 f1 A 1 NULL NULL BTREE t1 0 PRIMARY 2 f2 A 3 NULL NULL BTREE t1 0 PRIMARY 3 f3 A 9 NULL NULL BTREE t1 0 PRIMARY 4 f4 A 18 NULL NULL BTREE +-- Here we enable metadata just to check that the collation of the +-- resultset is non-binary for string type. This should be changed +-- after Bug#29394 is implemented. repair table t1; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def Table 253 42 7 Y 0 31 8 +def Op 253 3 6 Y 0 31 8 +def Msg_type 253 3 6 Y 0 31 8 +def Msg_text 253 85 2 Y 0 31 8 Table Op Msg_type Msg_text test.t1 repair status OK show index from t1; @@ -645,4 +750,342 @@ select 1 from information_schema.tables limit 1; show status like 'slow_queries'; Variable_name Value Slow_queries 1 +DROP DATABASE IF EXISTS mysqltest1; +DROP TABLE IF EXISTS t1; +DROP VIEW IF EXISTS v1; +DROP PROCEDURE IF EXISTS p1; +DROP FUNCTION IF EXISTS f1; +CREATE DATABASE mysqltest1; +CREATE TABLE t1(c INT NOT NULL PRIMARY KEY); +CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW SET @a = 1; +CREATE VIEW v1 AS SELECT 1; +CREATE PROCEDURE p1() SELECT 1; +CREATE FUNCTION f1() RETURNS INT RETURN 1; +set names utf8; +-- Here we enable metadata just to check that the collation of the +-- resultset is non-binary for string type. This should be changed +-- after Bug#29394 is implemented. +---------------------------------------------------------------- +SHOW CHARACTER SET LIKE 'utf8'; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def CHARACTER_SETS CHARACTER_SET_NAME Charset 253 192 4 N 1 0 33 +def CHARACTER_SETS DESCRIPTION Description 253 180 13 N 1 0 33 +def CHARACTER_SETS DEFAULT_COLLATE_NAME Default collation 253 192 15 N 1 0 33 +def CHARACTER_SETS MAXLEN Maxlen 8 3 1 N 32769 0 63 +Charset Description Default collation Maxlen +utf8 UTF-8 Unicode utf8_general_ci 3 +---------------------------------------------------------------- +SHOW COLLATION LIKE 'latin1_bin'; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def COLLATIONS COLLATION_NAME Collation 253 192 10 N 1 0 33 +def COLLATIONS CHARACTER_SET_NAME Charset 253 192 6 N 1 0 33 +def COLLATIONS ID Id 8 11 2 N 32769 0 63 +def COLLATIONS IS_DEFAULT Default 253 9 0 N 1 0 33 +def COLLATIONS IS_COMPILED Compiled 253 9 3 N 1 0 33 +def COLLATIONS SORTLEN Sortlen 8 3 1 N 32769 0 63 +Collation Charset Id Default Compiled Sortlen +latin1_bin latin1 47 Yes 1 +---------------------------------------------------------------- +SHOW CREATE DATABASE mysqltest1; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def Database 253 63 10 N 1 31 33 +def Create Database 253 1023 69 N 1 31 33 +Database Create Database +mysqltest1 CREATE DATABASE `mysqltest1` /*!40100 DEFAULT CHARACTER SET latin1 */ +---------------------------------------------------------------- +SHOW DATABASES LIKE 'mysqltest1'; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def SCHEMATA SCHEMA_NAME Database (mysqltest1) 253 192 10 N 1 0 33 +Database (mysqltest1) +mysqltest1 +---------------------------------------------------------------- +SHOW CREATE TABLE t1; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def Table 253 63 2 N 1 31 33 +def Create Table 253 1023 103 N 1 31 33 +Table Create Table +t1 CREATE TABLE `t1` ( + `c` int(11) NOT NULL, + PRIMARY KEY (`c`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +---------------------------------------------------------------- +SHOW INDEX FROM t1; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def STATISTICS TABLE_NAME Table 253 192 2 N 1 0 33 +def STATISTICS NON_UNIQUE Non_unique 8 1 1 N 32769 0 63 +def STATISTICS INDEX_NAME Key_name 253 192 7 N 1 0 33 +def STATISTICS SEQ_IN_INDEX Seq_in_index 8 2 1 N 32769 0 63 +def STATISTICS COLUMN_NAME Column_name 253 192 1 N 1 0 33 +def STATISTICS COLLATION Collation 253 3 1 Y 0 0 33 +def STATISTICS CARDINALITY Cardinality 8 21 1 Y 32768 0 63 +def STATISTICS SUB_PART Sub_part 8 3 0 Y 32768 0 63 +def STATISTICS PACKED Packed 253 30 0 Y 0 0 33 +def STATISTICS NULLABLE Null 253 9 0 N 1 0 33 +def STATISTICS INDEX_TYPE Index_type 253 48 5 N 1 0 33 +def STATISTICS COMMENT Comment 253 48 0 Y 0 0 33 +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment +t1 0 PRIMARY 1 c A 0 NULL NULL BTREE +---------------------------------------------------------------- +SELECT +TABLE_CATALOG, +TABLE_SCHEMA, +TABLE_NAME, +TABLE_TYPE, +ENGINE, +ROW_FORMAT, +TABLE_COLLATION, +CREATE_OPTIONS, +TABLE_COMMENT +FROM INFORMATION_SCHEMA.TABLES +WHERE table_name = 't1'; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def TABLES TABLE_CATALOG TABLE_CATALOG 253 1536 0 Y 0 0 33 +def TABLES TABLE_SCHEMA TABLE_SCHEMA 253 192 4 N 1 0 33 +def TABLES TABLE_NAME TABLE_NAME 253 192 2 N 1 0 33 +def TABLES TABLE_TYPE TABLE_TYPE 253 192 10 N 1 0 33 +def TABLES ENGINE ENGINE 253 192 6 Y 0 0 33 +def TABLES ROW_FORMAT ROW_FORMAT 253 30 5 Y 0 0 33 +def TABLES TABLE_COLLATION TABLE_COLLATION 253 192 17 Y 0 0 33 +def TABLES CREATE_OPTIONS CREATE_OPTIONS 253 765 0 Y 0 0 33 +def TABLES TABLE_COMMENT TABLE_COMMENT 253 240 0 N 1 0 33 +TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE ENGINE ROW_FORMAT TABLE_COLLATION CREATE_OPTIONS TABLE_COMMENT +NULL test t1 BASE TABLE MyISAM Fixed latin1_swedish_ci +---------------------------------------------------------------- +SELECT +TABLE_CATALOG, +TABLE_SCHEMA, +TABLE_NAME, +COLUMN_NAME, +COLUMN_DEFAULT, +IS_NULLABLE, +DATA_TYPE, +CHARACTER_SET_NAME, +COLLATION_NAME, +COLUMN_TYPE, +COLUMN_KEY, +EXTRA, +PRIVILEGES, +COLUMN_COMMENT +FROM INFORMATION_SCHEMA.COLUMNS +WHERE table_name = 't1'; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def COLUMNS TABLE_CATALOG TABLE_CATALOG 253 1536 0 Y 0 0 33 +def COLUMNS TABLE_SCHEMA TABLE_SCHEMA 253 192 4 N 1 0 33 +def COLUMNS TABLE_NAME TABLE_NAME 253 192 2 N 1 0 33 +def COLUMNS COLUMN_NAME COLUMN_NAME 253 192 1 N 1 0 33 +def COLUMNS COLUMN_DEFAULT COLUMN_DEFAULT 252 589815 0 Y 16 0 33 +def COLUMNS IS_NULLABLE IS_NULLABLE 253 9 2 N 1 0 33 +def COLUMNS DATA_TYPE DATA_TYPE 253 192 3 N 1 0 33 +def COLUMNS CHARACTER_SET_NAME CHARACTER_SET_NAME 253 192 0 Y 0 0 33 +def COLUMNS COLLATION_NAME COLLATION_NAME 253 192 0 Y 0 0 33 +def COLUMNS COLUMN_TYPE COLUMN_TYPE 252 589815 7 N 17 0 33 +def COLUMNS COLUMN_KEY COLUMN_KEY 253 9 3 N 1 0 33 +def COLUMNS EXTRA EXTRA 253 60 0 N 1 0 33 +def COLUMNS PRIVILEGES PRIVILEGES 253 240 31 N 1 0 33 +def COLUMNS COLUMN_COMMENT COLUMN_COMMENT 253 765 0 N 1 0 33 +TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT +NULL test t1 c NULL NO int NULL NULL int(11) PRI select,insert,update,references +---------------------------------------------------------------- +SHOW TABLES LIKE 't1'; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def TABLE_NAMES TABLE_NAME Tables_in_test (t1) 253 192 2 N 1 0 33 +Tables_in_test (t1) +t1 +---------------------------------------------------------------- +SHOW COLUMNS FROM t1; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def COLUMNS COLUMN_NAME Field 253 192 1 N 1 0 33 +def COLUMNS COLUMN_TYPE Type 252 589815 7 N 17 0 33 +def COLUMNS IS_NULLABLE Null 253 9 2 N 1 0 33 +def COLUMNS COLUMN_KEY Key 253 9 3 N 1 0 33 +def COLUMNS COLUMN_DEFAULT Default 252 589815 0 Y 16 0 33 +def COLUMNS EXTRA Extra 253 60 0 N 1 0 33 +Field Type Null Key Default Extra +c int(11) NO PRI +---------------------------------------------------------------- +SHOW TRIGGERS LIKE 't1'; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def TRIGGERS TRIGGER_NAME Trigger 253 192 5 N 1 0 33 +def TRIGGERS EVENT_MANIPULATION Event 253 18 6 N 1 0 33 +def TRIGGERS EVENT_OBJECT_TABLE Table 253 192 2 N 1 0 33 +def TRIGGERS ACTION_STATEMENT Statement 252 589815 10 N 17 0 33 +def TRIGGERS ACTION_TIMING Timing 253 18 6 N 1 0 33 +def TRIGGERS CREATED Created 12 19 0 Y 128 0 63 +def TRIGGERS SQL_MODE sql_mode 252 589815 0 N 17 0 33 +def TRIGGERS DEFINER Definer 252 589815 14 N 17 0 33 +Trigger Event Table Statement Timing Created sql_mode Definer +t1_bi INSERT t1 SET @a = 1 BEFORE NULL root@localhost +---------------------------------------------------------------- +SELECT +TRIGGER_CATALOG, +TRIGGER_SCHEMA, +TRIGGER_NAME, +EVENT_MANIPULATION, +EVENT_OBJECT_CATALOG, +EVENT_OBJECT_SCHEMA, +EVENT_OBJECT_TABLE, +ACTION_CONDITION, +ACTION_STATEMENT, +ACTION_ORIENTATION, +ACTION_TIMING, +ACTION_REFERENCE_OLD_TABLE, +ACTION_REFERENCE_NEW_TABLE, +ACTION_REFERENCE_OLD_ROW, +ACTION_REFERENCE_NEW_ROW, +SQL_MODE, +DEFINER +FROM INFORMATION_SCHEMA.TRIGGERS +WHERE trigger_name = 't1_bi'; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def TRIGGERS TRIGGER_CATALOG TRIGGER_CATALOG 253 1536 0 Y 0 0 33 +def TRIGGERS TRIGGER_SCHEMA TRIGGER_SCHEMA 253 192 4 N 1 0 33 +def TRIGGERS TRIGGER_NAME TRIGGER_NAME 253 192 5 N 1 0 33 +def TRIGGERS EVENT_MANIPULATION EVENT_MANIPULATION 253 18 6 N 1 0 33 +def TRIGGERS EVENT_OBJECT_CATALOG EVENT_OBJECT_CATALOG 253 1536 0 Y 0 0 33 +def TRIGGERS EVENT_OBJECT_SCHEMA EVENT_OBJECT_SCHEMA 253 192 4 N 1 0 33 +def TRIGGERS EVENT_OBJECT_TABLE EVENT_OBJECT_TABLE 253 192 2 N 1 0 33 +def TRIGGERS ACTION_CONDITION ACTION_CONDITION 252 589815 0 Y 16 0 33 +def TRIGGERS ACTION_STATEMENT ACTION_STATEMENT 252 589815 10 N 17 0 33 +def TRIGGERS ACTION_ORIENTATION ACTION_ORIENTATION 253 27 3 N 1 0 33 +def TRIGGERS ACTION_TIMING ACTION_TIMING 253 18 6 N 1 0 33 +def TRIGGERS ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_OLD_TABLE 253 192 0 Y 0 0 33 +def TRIGGERS ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_NEW_TABLE 253 192 0 Y 0 0 33 +def TRIGGERS ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_OLD_ROW 253 9 3 N 1 0 33 +def TRIGGERS ACTION_REFERENCE_NEW_ROW ACTION_REFERENCE_NEW_ROW 253 9 3 N 1 0 33 +def TRIGGERS SQL_MODE SQL_MODE 252 589815 0 N 17 0 33 +def TRIGGERS DEFINER DEFINER 252 589815 14 N 17 0 33 +TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW SQL_MODE DEFINER +NULL test t1_bi INSERT NULL test t1 NULL SET @a = 1 ROW BEFORE NULL NULL OLD NEW root@localhost +---------------------------------------------------------------- +SHOW CREATE VIEW v1; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def View 253 63 2 N 1 31 33 +def Create View 253 1023 103 N 1 31 33 +View Create View +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1` +---------------------------------------------------------------- +SELECT * +FROM INFORMATION_SCHEMA.VIEWS +WHERE table_name = 'v1'; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def VIEWS TABLE_CATALOG TABLE_CATALOG 253 1536 0 Y 0 0 33 +def VIEWS TABLE_SCHEMA TABLE_SCHEMA 253 192 4 N 1 0 33 +def VIEWS TABLE_NAME TABLE_NAME 253 192 2 N 1 0 33 +def VIEWS VIEW_DEFINITION VIEW_DEFINITION 252 589815 41 N 17 0 33 +def VIEWS CHECK_OPTION CHECK_OPTION 253 24 4 N 1 0 33 +def VIEWS IS_UPDATABLE IS_UPDATABLE 253 9 2 N 1 0 33 +def VIEWS DEFINER DEFINER 253 231 14 N 1 0 33 +def VIEWS SECURITY_TYPE SECURITY_TYPE 253 21 7 N 1 0 33 +TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE +NULL test v1 /* ALGORITHM=UNDEFINED */ select 1 AS `1` NONE NO root@localhost DEFINER +---------------------------------------------------------------- +SHOW CREATE PROCEDURE p1; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def Procedure 253 63 2 N 1 31 33 +def sql_mode 253 0 0 N 1 31 33 +def Create Procedure 253 2046 59 Y 0 31 33 +Procedure sql_mode Create Procedure +p1 CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`() +SELECT 1 +---------------------------------------------------------------- +SELECT +SPECIFIC_NAME, +ROUTINE_CATALOG, +ROUTINE_SCHEMA, +ROUTINE_NAME, +ROUTINE_TYPE, +DTD_IDENTIFIER, +ROUTINE_BODY, +ROUTINE_DEFINITION, +EXTERNAL_NAME, +EXTERNAL_LANGUAGE, +PARAMETER_STYLE, +IS_DETERMINISTIC, +SQL_DATA_ACCESS, +SQL_PATH, +SECURITY_TYPE, +SQL_MODE, +ROUTINE_COMMENT, +DEFINER +FROM INFORMATION_SCHEMA.ROUTINES +WHERE routine_name = 'p1'; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def ROUTINES SPECIFIC_NAME SPECIFIC_NAME 253 192 2 N 1 0 33 +def ROUTINES ROUTINE_CATALOG ROUTINE_CATALOG 253 1536 0 Y 0 0 33 +def ROUTINES ROUTINE_SCHEMA ROUTINE_SCHEMA 253 192 4 N 1 0 33 +def ROUTINES ROUTINE_NAME ROUTINE_NAME 253 192 2 N 1 0 33 +def ROUTINES ROUTINE_TYPE ROUTINE_TYPE 253 27 9 N 1 0 33 +def ROUTINES DTD_IDENTIFIER DTD_IDENTIFIER 253 192 0 Y 0 0 33 +def ROUTINES ROUTINE_BODY ROUTINE_BODY 253 24 3 N 1 0 33 +def ROUTINES ROUTINE_DEFINITION ROUTINE_DEFINITION 252 589815 8 Y 16 0 33 +def ROUTINES EXTERNAL_NAME EXTERNAL_NAME 253 192 0 Y 0 0 33 +def ROUTINES EXTERNAL_LANGUAGE EXTERNAL_LANGUAGE 253 192 0 Y 0 0 33 +def ROUTINES PARAMETER_STYLE PARAMETER_STYLE 253 24 3 N 1 0 33 +def ROUTINES IS_DETERMINISTIC IS_DETERMINISTIC 253 9 2 N 1 0 33 +def ROUTINES SQL_DATA_ACCESS SQL_DATA_ACCESS 253 192 12 N 1 0 33 +def ROUTINES SQL_PATH SQL_PATH 253 192 0 Y 0 0 33 +def ROUTINES SECURITY_TYPE SECURITY_TYPE 253 21 7 N 1 0 33 +def ROUTINES SQL_MODE SQL_MODE 252 589815 0 N 17 0 33 +def ROUTINES ROUTINE_COMMENT ROUTINE_COMMENT 253 192 0 N 1 0 33 +def ROUTINES DEFINER DEFINER 253 231 14 N 1 0 33 +SPECIFIC_NAME ROUTINE_CATALOG ROUTINE_SCHEMA ROUTINE_NAME ROUTINE_TYPE DTD_IDENTIFIER ROUTINE_BODY ROUTINE_DEFINITION EXTERNAL_NAME EXTERNAL_LANGUAGE PARAMETER_STYLE IS_DETERMINISTIC SQL_DATA_ACCESS SQL_PATH SECURITY_TYPE SQL_MODE ROUTINE_COMMENT DEFINER +p1 NULL test p1 PROCEDURE NULL SQL SELECT 1 NULL NULL SQL NO CONTAINS SQL NULL DEFINER root@localhost +---------------------------------------------------------------- +SHOW CREATE FUNCTION f1; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def Function 253 63 2 N 1 31 33 +def sql_mode 253 0 0 N 1 31 33 +def Create Function 253 2046 74 Y 0 31 33 +Function sql_mode Create Function +f1 CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11) +RETURN 1 +---------------------------------------------------------------- +SELECT +SPECIFIC_NAME, +ROUTINE_CATALOG, +ROUTINE_SCHEMA, +ROUTINE_NAME, +ROUTINE_TYPE, +DTD_IDENTIFIER, +ROUTINE_BODY, +ROUTINE_DEFINITION, +EXTERNAL_NAME, +EXTERNAL_LANGUAGE, +PARAMETER_STYLE, +IS_DETERMINISTIC, +SQL_DATA_ACCESS, +SQL_PATH, +SECURITY_TYPE, +SQL_MODE, +ROUTINE_COMMENT, +DEFINER +FROM INFORMATION_SCHEMA.ROUTINES +WHERE routine_name = 'f1'; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def ROUTINES SPECIFIC_NAME SPECIFIC_NAME 253 192 2 N 1 0 33 +def ROUTINES ROUTINE_CATALOG ROUTINE_CATALOG 253 1536 0 Y 0 0 33 +def ROUTINES ROUTINE_SCHEMA ROUTINE_SCHEMA 253 192 4 N 1 0 33 +def ROUTINES ROUTINE_NAME ROUTINE_NAME 253 192 2 N 1 0 33 +def ROUTINES ROUTINE_TYPE ROUTINE_TYPE 253 27 8 N 1 0 33 +def ROUTINES DTD_IDENTIFIER DTD_IDENTIFIER 253 192 7 Y 0 0 33 +def ROUTINES ROUTINE_BODY ROUTINE_BODY 253 24 3 N 1 0 33 +def ROUTINES ROUTINE_DEFINITION ROUTINE_DEFINITION 252 589815 8 Y 16 0 33 +def ROUTINES EXTERNAL_NAME EXTERNAL_NAME 253 192 0 Y 0 0 33 +def ROUTINES EXTERNAL_LANGUAGE EXTERNAL_LANGUAGE 253 192 0 Y 0 0 33 +def ROUTINES PARAMETER_STYLE PARAMETER_STYLE 253 24 3 N 1 0 33 +def ROUTINES IS_DETERMINISTIC IS_DETERMINISTIC 253 9 2 N 1 0 33 +def ROUTINES SQL_DATA_ACCESS SQL_DATA_ACCESS 253 192 12 N 1 0 33 +def ROUTINES SQL_PATH SQL_PATH 253 192 0 Y 0 0 33 +def ROUTINES SECURITY_TYPE SECURITY_TYPE 253 21 7 N 1 0 33 +def ROUTINES SQL_MODE SQL_MODE 252 589815 0 N 17 0 33 +def ROUTINES ROUTINE_COMMENT ROUTINE_COMMENT 253 192 0 N 1 0 33 +def ROUTINES DEFINER DEFINER 253 231 14 N 1 0 33 +SPECIFIC_NAME ROUTINE_CATALOG ROUTINE_SCHEMA ROUTINE_NAME ROUTINE_TYPE DTD_IDENTIFIER ROUTINE_BODY ROUTINE_DEFINITION EXTERNAL_NAME EXTERNAL_LANGUAGE PARAMETER_STYLE IS_DETERMINISTIC SQL_DATA_ACCESS SQL_PATH SECURITY_TYPE SQL_MODE ROUTINE_COMMENT DEFINER +f1 NULL test f1 FUNCTION int(11) SQL RETURN 1 NULL NULL SQL NO CONTAINS SQL NULL DEFINER root@localhost +---------------------------------------------------------------- +DROP DATABASE mysqltest1; +DROP TABLE t1; +DROP VIEW v1; +DROP PROCEDURE p1; +DROP FUNCTION f1; End of 5.0 tests diff --git a/mysql-test/t/show_check.test b/mysql-test/t/show_check.test index 369ae9bff65..1db40b0c17c 100644 --- a/mysql-test/t/show_check.test +++ b/mysql-test/t/show_check.test @@ -18,6 +18,12 @@ flush privileges; create table t1 (a int not null primary key, b int not null,c int not null, key(b,c)); insert into t1 values (1,2,2),(2,2,3),(3,2,4),(4,2,4); + +--echo -- Here we enable metadata just to check that the collation of the +--echo -- resultset is non-binary for string type. This should be changed +--echo -- after Bug#29394 is implemented. + +--enable_metadata check table t1 fast; check table t1 fast; check table t1 changed; @@ -26,28 +32,58 @@ check table t1 changed; check table t1 medium; check table t1 extended; show index from t1; +--disable_metadata --error 1062 insert into t1 values (5,5,5); + +--echo -- Here we enable metadata just to check that the collation of the +--echo -- resultset is non-binary for string type. This should be changed +--echo -- after Bug#29394 is implemented. + +--enable_metadata optimize table t1; +--disable_metadata optimize table t1; drop table t1; #show variables; + +--echo -- Here we enable metadata just to check that the collation of the +--echo -- resultset is non-binary for string type. This should be changed +--echo -- after Bug#29394 is implemented. + +--enable_metadata show variables like "wait_timeout%"; show variables like "WAIT_timeout%"; show variables like "this_doesn't_exists%"; show table status from test like "this_doesn't_exists%"; show databases; show databases like "test%"; +--disable_metadata # # Check of show index # create table t1 (f1 int not null, f2 int not null, f3 int not null, f4 int not null, primary key(f1,f2,f3,f4)); insert into t1 values (1,1,1,0),(1,1,2,0),(1,1,3,0),(1,2,1,0),(1,2,2,0),(1,2,3,0),(1,3,1,0),(1,3,2,0),(1,3,3,0),(1,1,1,1),(1,1,2,1),(1,1,3,1),(1,2,1,1),(1,2,2,1),(1,2,3,1),(1,3,1,1),(1,3,2,1),(1,3,3,1); + +--echo -- Here we enable metadata just to check that the collation of the +--echo -- resultset is non-binary for string type. This should be changed +--echo -- after Bug#29394 is implemented. + +--enable_metadata analyze table t1; +--disable_metadata show index from t1; + +--echo -- Here we enable metadata just to check that the collation of the +--echo -- resultset is non-binary for string type. This should be changed +--echo -- after Bug#29394 is implemented. + +--enable_metadata + repair table t1; +--disable_metadata show index from t1; drop table t1; @@ -518,4 +554,216 @@ show status like 'slow_queries'; select 1 from information_schema.tables limit 1; show status like 'slow_queries'; +# +# BUG#10491: Server returns data as charset binary SHOW CREATE TABLE or SELECT +# FROM I_S. +# + +# Ensure that all needed objects are dropped. + +--disable_warnings +DROP DATABASE IF EXISTS mysqltest1; +DROP TABLE IF EXISTS t1; +DROP VIEW IF EXISTS v1; +DROP PROCEDURE IF EXISTS p1; +DROP FUNCTION IF EXISTS f1; +--enable_warnings + +# Create objects. + +CREATE DATABASE mysqltest1; + +CREATE TABLE t1(c INT NOT NULL PRIMARY KEY); + +CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW SET @a = 1; + +CREATE VIEW v1 AS SELECT 1; + +CREATE PROCEDURE p1() SELECT 1; + +CREATE FUNCTION f1() RETURNS INT RETURN 1; + + +# Test. + +set names utf8; + +--echo -- Here we enable metadata just to check that the collation of the +--echo -- resultset is non-binary for string type. This should be changed +--echo -- after Bug#29394 is implemented. + +--enable_metadata + +--echo ---------------------------------------------------------------- + +SHOW CHARACTER SET LIKE 'utf8'; + +--echo ---------------------------------------------------------------- + +SHOW COLLATION LIKE 'latin1_bin'; + +--echo ---------------------------------------------------------------- + +SHOW CREATE DATABASE mysqltest1; + +--echo ---------------------------------------------------------------- + +SHOW DATABASES LIKE 'mysqltest1'; + +--echo ---------------------------------------------------------------- + +SHOW CREATE TABLE t1; + +--echo ---------------------------------------------------------------- + +SHOW INDEX FROM t1; + +--echo ---------------------------------------------------------------- + +SELECT + TABLE_CATALOG, + TABLE_SCHEMA, + TABLE_NAME, + TABLE_TYPE, + ENGINE, + ROW_FORMAT, + TABLE_COLLATION, + CREATE_OPTIONS, + TABLE_COMMENT +FROM INFORMATION_SCHEMA.TABLES +WHERE table_name = 't1'; + +--echo ---------------------------------------------------------------- + +SELECT + TABLE_CATALOG, + TABLE_SCHEMA, + TABLE_NAME, + COLUMN_NAME, + COLUMN_DEFAULT, + IS_NULLABLE, + DATA_TYPE, + CHARACTER_SET_NAME, + COLLATION_NAME, + COLUMN_TYPE, + COLUMN_KEY, + EXTRA, + PRIVILEGES, + COLUMN_COMMENT +FROM INFORMATION_SCHEMA.COLUMNS +WHERE table_name = 't1'; + +--echo ---------------------------------------------------------------- + +SHOW TABLES LIKE 't1'; + +--echo ---------------------------------------------------------------- + +SHOW COLUMNS FROM t1; + +--echo ---------------------------------------------------------------- + +SHOW TRIGGERS LIKE 't1'; + +--echo ---------------------------------------------------------------- + +SELECT + TRIGGER_CATALOG, + TRIGGER_SCHEMA, + TRIGGER_NAME, + EVENT_MANIPULATION, + EVENT_OBJECT_CATALOG, + EVENT_OBJECT_SCHEMA, + EVENT_OBJECT_TABLE, + ACTION_CONDITION, + ACTION_STATEMENT, + ACTION_ORIENTATION, + ACTION_TIMING, + ACTION_REFERENCE_OLD_TABLE, + ACTION_REFERENCE_NEW_TABLE, + ACTION_REFERENCE_OLD_ROW, + ACTION_REFERENCE_NEW_ROW, + SQL_MODE, + DEFINER +FROM INFORMATION_SCHEMA.TRIGGERS +WHERE trigger_name = 't1_bi'; + +--echo ---------------------------------------------------------------- + +SHOW CREATE VIEW v1; + +--echo ---------------------------------------------------------------- + +SELECT * +FROM INFORMATION_SCHEMA.VIEWS +WHERE table_name = 'v1'; + +--echo ---------------------------------------------------------------- + +SHOW CREATE PROCEDURE p1; + +--echo ---------------------------------------------------------------- + +SELECT + SPECIFIC_NAME, + ROUTINE_CATALOG, + ROUTINE_SCHEMA, + ROUTINE_NAME, + ROUTINE_TYPE, + DTD_IDENTIFIER, + ROUTINE_BODY, + ROUTINE_DEFINITION, + EXTERNAL_NAME, + EXTERNAL_LANGUAGE, + PARAMETER_STYLE, + IS_DETERMINISTIC, + SQL_DATA_ACCESS, + SQL_PATH, + SECURITY_TYPE, + SQL_MODE, + ROUTINE_COMMENT, + DEFINER +FROM INFORMATION_SCHEMA.ROUTINES +WHERE routine_name = 'p1'; + +--echo ---------------------------------------------------------------- + +SHOW CREATE FUNCTION f1; + +--echo ---------------------------------------------------------------- + +SELECT + SPECIFIC_NAME, + ROUTINE_CATALOG, + ROUTINE_SCHEMA, + ROUTINE_NAME, + ROUTINE_TYPE, + DTD_IDENTIFIER, + ROUTINE_BODY, + ROUTINE_DEFINITION, + EXTERNAL_NAME, + EXTERNAL_LANGUAGE, + PARAMETER_STYLE, + IS_DETERMINISTIC, + SQL_DATA_ACCESS, + SQL_PATH, + SECURITY_TYPE, + SQL_MODE, + ROUTINE_COMMENT, + DEFINER +FROM INFORMATION_SCHEMA.ROUTINES +WHERE routine_name = 'f1'; + +--echo ---------------------------------------------------------------- + +--disable_metadata + +# Cleanup. + +DROP DATABASE mysqltest1; +DROP TABLE t1; +DROP VIEW v1; +DROP PROCEDURE p1; +DROP FUNCTION f1; + --echo End of 5.0 tests diff --git a/sql/item.h b/sql/item.h index 3478095351a..fdb85b131c1 100644 --- a/sql/item.h +++ b/sql/item.h @@ -1764,11 +1764,17 @@ public: enum_field_types field_type() const { return MYSQL_TYPE_DATETIME; } }; +/** + Item_empty_string -- is a utility class to put an item into List + which is then used in protocol.send_fields() when sending SHOW output to + the client. +*/ + class Item_empty_string :public Item_string { public: Item_empty_string(const char *header,uint length, CHARSET_INFO *cs= NULL) : - Item_string("",0, cs ? cs : &my_charset_bin) + Item_string("",0, cs ? cs : &my_charset_utf8_general_ci) { name=(char*) header; max_length= cs ? length * cs->mbmaxlen : length; } void make_field(Send_field *field); }; From 6eb17c289a23120d3e051eb05ea4568d8ec69d7b Mon Sep 17 00:00:00 2001 From: "anozdrin/alik@ibm." <> Date: Fri, 29 Jun 2007 17:37:17 +0400 Subject: [PATCH 4/6] Follow up to the patch for the BUG#10491. --- mysql-test/r/ps_1general.result | 4 ++-- mysql-test/r/ps_2myisam.result | 2 +- mysql-test/r/ps_3innodb.result | 2 +- mysql-test/r/ps_4heap.result | 2 +- mysql-test/r/ps_5merge.result | 4 ++-- tests/mysql_client_test.c | 4 +++- 6 files changed, 10 insertions(+), 8 deletions(-) diff --git a/mysql-test/r/ps_1general.result b/mysql-test/r/ps_1general.result index 5ea6a758d42..71f4bcbdf38 100644 --- a/mysql-test/r/ps_1general.result +++ b/mysql-test/r/ps_1general.result @@ -468,7 +468,7 @@ def table 253 64 2 Y 0 31 8 def type 253 10 3 Y 0 31 8 def possible_keys 253 4096 0 Y 0 31 8 def key 253 64 0 Y 0 31 8 -def key_len 253 4096 0 Y 128 31 63 +def key_len 253 1365 0 Y 0 31 8 def ref 253 1024 0 Y 0 31 8 def rows 8 10 1 Y 32928 0 63 def Extra 253 255 14 N 1 31 8 @@ -484,7 +484,7 @@ def table 253 64 2 Y 0 31 8 def type 253 10 5 Y 0 31 8 def possible_keys 253 4096 7 Y 0 31 8 def key 253 64 7 Y 0 31 8 -def key_len 253 4096 1 Y 128 31 63 +def key_len 253 1365 1 Y 0 31 8 def ref 253 1024 0 Y 0 31 8 def rows 8 10 1 Y 32928 0 63 def Extra 253 255 27 N 1 31 8 diff --git a/mysql-test/r/ps_2myisam.result b/mysql-test/r/ps_2myisam.result index 06941cf6497..7ccb41e6294 100644 --- a/mysql-test/r/ps_2myisam.result +++ b/mysql-test/r/ps_2myisam.result @@ -1158,7 +1158,7 @@ def table 253 64 2 Y 0 31 8 def type 253 10 3 Y 0 31 8 def possible_keys 253 4096 0 Y 0 31 8 def key 253 64 0 Y 0 31 8 -def key_len 253 4096 0 Y 128 31 63 +def key_len 253 1365 0 Y 0 31 8 def ref 253 1024 0 Y 0 31 8 def rows 8 10 1 Y 32928 0 63 def Extra 253 255 0 N 1 31 8 diff --git a/mysql-test/r/ps_3innodb.result b/mysql-test/r/ps_3innodb.result index 235660cbbaf..21d2b23f27b 100644 --- a/mysql-test/r/ps_3innodb.result +++ b/mysql-test/r/ps_3innodb.result @@ -1158,7 +1158,7 @@ def table 253 64 2 Y 0 31 8 def type 253 10 3 Y 0 31 8 def possible_keys 253 4096 0 Y 0 31 8 def key 253 64 0 Y 0 31 8 -def key_len 253 4096 0 Y 128 31 63 +def key_len 253 1365 0 Y 0 31 8 def ref 253 1024 0 Y 0 31 8 def rows 8 10 1 Y 32928 0 63 def Extra 253 255 0 N 1 31 8 diff --git a/mysql-test/r/ps_4heap.result b/mysql-test/r/ps_4heap.result index bf77ec7acf2..6b31e95c6c8 100644 --- a/mysql-test/r/ps_4heap.result +++ b/mysql-test/r/ps_4heap.result @@ -1159,7 +1159,7 @@ def table 253 64 2 Y 0 31 8 def type 253 10 3 Y 0 31 8 def possible_keys 253 4096 0 Y 0 31 8 def key 253 64 0 Y 0 31 8 -def key_len 253 4096 0 Y 128 31 63 +def key_len 253 1365 0 Y 0 31 8 def ref 253 1024 0 Y 0 31 8 def rows 8 10 1 Y 32928 0 63 def Extra 253 255 0 N 1 31 8 diff --git a/mysql-test/r/ps_5merge.result b/mysql-test/r/ps_5merge.result index f6aa716d932..c7b20b774bd 100644 --- a/mysql-test/r/ps_5merge.result +++ b/mysql-test/r/ps_5merge.result @@ -1201,7 +1201,7 @@ def table 253 64 2 Y 0 31 8 def type 253 10 3 Y 0 31 8 def possible_keys 253 4096 0 Y 0 31 8 def key 253 64 0 Y 0 31 8 -def key_len 253 4096 0 Y 128 31 63 +def key_len 253 1365 0 Y 0 31 8 def ref 253 1024 0 Y 0 31 8 def rows 8 10 1 Y 32928 0 63 def Extra 253 255 0 N 1 31 8 @@ -4222,7 +4222,7 @@ def table 253 64 2 Y 0 31 8 def type 253 10 3 Y 0 31 8 def possible_keys 253 4096 0 Y 0 31 8 def key 253 64 0 Y 0 31 8 -def key_len 253 4096 0 Y 128 31 63 +def key_len 253 1365 0 Y 0 31 8 def ref 253 1024 0 Y 0 31 8 def rows 8 10 1 Y 32928 0 63 def Extra 253 255 0 N 1 31 8 diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c index 9bf062f7df8..75c86902972 100644 --- a/tests/mysql_client_test.c +++ b/tests/mysql_client_test.c @@ -7564,7 +7564,9 @@ static void test_explain_bug() else { verify_prepare_field(result, 6, "key_len", "", MYSQL_TYPE_VAR_STRING, "", - "", "", NAME_LEN*MAX_KEY, 0); + "", "", + NAME_LEN*MAX_KEY / my_charset_utf8_general_ci.mbmaxlen, + 0); } verify_prepare_field(result, 7, "ref", "", MYSQL_TYPE_VAR_STRING, From 2f4b4de6400c5a01d0ab8257b71b2f1e89509c61 Mon Sep 17 00:00:00 2001 From: "anozdrin/alik@ibm." <> Date: Fri, 29 Jun 2007 22:05:43 +0400 Subject: [PATCH 5/6] Update result files. --- mysql-test/r/ps_6bdb.result | 2 +- mysql-test/r/ps_7ndb.result | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/ps_6bdb.result b/mysql-test/r/ps_6bdb.result index 2c8b40e8818..df367451739 100644 --- a/mysql-test/r/ps_6bdb.result +++ b/mysql-test/r/ps_6bdb.result @@ -1158,7 +1158,7 @@ def table 253 64 2 Y 0 31 8 def type 253 10 3 Y 0 31 8 def possible_keys 253 4096 0 Y 0 31 8 def key 253 64 0 Y 0 31 8 -def key_len 253 4096 0 Y 128 31 63 +def key_len 253 4096 0 Y 128 31 8 def ref 253 1024 0 Y 0 31 8 def rows 8 10 1 Y 32928 0 63 def Extra 253 255 0 N 1 31 8 diff --git a/mysql-test/r/ps_7ndb.result b/mysql-test/r/ps_7ndb.result index a0bbeed34ee..7ca18edc9cc 100644 --- a/mysql-test/r/ps_7ndb.result +++ b/mysql-test/r/ps_7ndb.result @@ -1158,7 +1158,7 @@ def table 253 64 2 Y 0 31 8 def type 253 10 3 Y 0 31 8 def possible_keys 253 4096 0 Y 0 31 8 def key 253 64 0 Y 0 31 8 -def key_len 253 4096 0 Y 128 31 63 +def key_len 253 1365 0 Y 0 31 8 def ref 253 1024 0 Y 0 31 8 def rows 8 10 1 Y 32928 0 63 def Extra 253 255 0 N 1 31 8 From 2d8decabd42558776d9079aa36d48dcebee9ade3 Mon Sep 17 00:00:00 2001 From: "kostja@bodhi.(none)" <> Date: Mon, 2 Jul 2007 01:28:20 +0400 Subject: [PATCH 6/6] Update a missed test result. --- mysql-test/r/ps_6bdb.result | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/r/ps_6bdb.result b/mysql-test/r/ps_6bdb.result index df367451739..5e97d5cf179 100644 --- a/mysql-test/r/ps_6bdb.result +++ b/mysql-test/r/ps_6bdb.result @@ -1158,7 +1158,7 @@ def table 253 64 2 Y 0 31 8 def type 253 10 3 Y 0 31 8 def possible_keys 253 4096 0 Y 0 31 8 def key 253 64 0 Y 0 31 8 -def key_len 253 4096 0 Y 128 31 8 +def key_len 253 1365 0 Y 0 31 8 def ref 253 1024 0 Y 0 31 8 def rows 8 10 1 Y 32928 0 63 def Extra 253 255 0 N 1 31 8