Commit 925c33db authored by unknown's avatar unknown

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:
  Update result file.
mysql-test/t/show_check.test:
  Provide test case for BUG#10491.
sql/item.h:
  Use utf8_general_ci instead of binary collation by default,
  because for views and base tables utf8 is the character set
  in which their definition is stored. For system constants
  it's the default character set, and for other objects
  (routines, triggers), no character set is stored, and
  therefore no character set is known, so returning utf8
  is just as good as any non-binary character set.
  This latter problem is fixed in 5.1 by 16291. In 5.1
  we will return the "real" character set.
parent 6f059005
......@@ -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
......@@ -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
......@@ -1764,11 +1764,17 @@ class Item_datetime :public Item_string
enum_field_types field_type() const { return MYSQL_TYPE_DATETIME; }
};
/**
Item_empty_string -- is a utility class to put an item into List<Item>
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);
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment