diff options
-rw-r--r-- | mysql-test/r/ps_1general.result | 12 | ||||
-rw-r--r-- | mysql-test/r/ps_2myisam.result | 6 | ||||
-rw-r--r-- | mysql-test/r/ps_3innodb.result | 6 | ||||
-rw-r--r-- | mysql-test/r/ps_4heap.result | 6 | ||||
-rw-r--r-- | mysql-test/r/ps_5merge.result | 12 | ||||
-rw-r--r-- | sql/item.cc | 9 | ||||
-rw-r--r-- | sql/sql_show.cc | 31 | ||||
-rw-r--r-- | tests/mysql_client_test.c | 6 |
8 files changed, 62 insertions, 26 deletions
diff --git a/mysql-test/r/ps_1general.result b/mysql-test/r/ps_1general.result index db8dc2e60af..97af043d4f2 100644 --- a/mysql-test/r/ps_1general.result +++ b/mysql-test/r/ps_1general.result @@ -470,12 +470,12 @@ def id 8 3 1 N 32929 0 63 def select_type 253 19 6 N 1 31 8 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 possible_keys 252 4096 0 Y 0 31 8 def key 253 64 0 Y 0 31 8 def key_len 8 3 0 Y 32928 0 63 -def ref 253 1024 0 Y 0 31 8 +def ref 252 1024 0 Y 0 31 8 def rows 8 10 1 Y 32928 0 63 -def Extra 253 255 14 N 1 31 8 +def Extra 252 255 14 N 1 31 8 id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using filesort SET @arg00=1 ; @@ -486,12 +486,12 @@ def id 8 3 1 N 32929 0 63 def select_type 253 19 6 N 1 31 8 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 possible_keys 252 4096 7 Y 0 31 8 def key 253 64 7 Y 0 31 8 def key_len 8 3 1 Y 32928 0 63 -def ref 253 1024 0 Y 0 31 8 +def ref 252 1024 0 Y 0 31 8 def rows 8 10 1 Y 32928 0 63 -def Extra 253 255 27 N 1 31 8 +def Extra 252 255 27 N 1 31 8 id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 3 Using where; Using filesort drop table if exists t2; diff --git a/mysql-test/r/ps_2myisam.result b/mysql-test/r/ps_2myisam.result index c569c9842f7..bae8143b8b5 100644 --- a/mysql-test/r/ps_2myisam.result +++ b/mysql-test/r/ps_2myisam.result @@ -1153,12 +1153,12 @@ def id 8 3 1 N 32929 0 63 def select_type 253 19 6 N 1 31 8 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 possible_keys 252 4096 0 Y 0 31 8 def key 253 64 0 Y 0 31 8 def key_len 8 3 0 Y 32928 0 63 -def ref 253 1024 0 Y 0 31 8 +def ref 252 1024 0 Y 0 31 8 def rows 8 10 1 Y 32928 0 63 -def Extra 253 255 0 N 1 31 8 +def Extra 252 255 0 N 1 31 8 id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t9 ALL NULL NULL NULL NULL 2 drop table if exists t2 ; diff --git a/mysql-test/r/ps_3innodb.result b/mysql-test/r/ps_3innodb.result index 930aea2e381..8acbf070336 100644 --- a/mysql-test/r/ps_3innodb.result +++ b/mysql-test/r/ps_3innodb.result @@ -1153,12 +1153,12 @@ def id 8 3 1 N 32929 0 63 def select_type 253 19 6 N 1 31 8 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 possible_keys 252 4096 0 Y 0 31 8 def key 253 64 0 Y 0 31 8 def key_len 8 3 0 Y 32928 0 63 -def ref 253 1024 0 Y 0 31 8 +def ref 252 1024 0 Y 0 31 8 def rows 8 10 1 Y 32928 0 63 -def Extra 253 255 0 N 1 31 8 +def Extra 252 255 0 N 1 31 8 id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t9 ALL NULL NULL NULL NULL 2 test_sequence diff --git a/mysql-test/r/ps_4heap.result b/mysql-test/r/ps_4heap.result index 083a4b221fe..314e644a675 100644 --- a/mysql-test/r/ps_4heap.result +++ b/mysql-test/r/ps_4heap.result @@ -1154,12 +1154,12 @@ def id 8 3 1 N 32929 0 63 def select_type 253 19 6 N 1 31 8 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 possible_keys 252 4096 0 Y 0 31 8 def key 253 64 0 Y 0 31 8 def key_len 8 3 0 Y 32928 0 63 -def ref 253 1024 0 Y 0 31 8 +def ref 252 1024 0 Y 0 31 8 def rows 8 10 1 Y 32928 0 63 -def Extra 253 255 0 N 1 31 8 +def Extra 252 255 0 N 1 31 8 id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t9 ALL NULL NULL NULL NULL 2 test_sequence diff --git a/mysql-test/r/ps_5merge.result b/mysql-test/r/ps_5merge.result index 1edd617ffc6..9d620290f00 100644 --- a/mysql-test/r/ps_5merge.result +++ b/mysql-test/r/ps_5merge.result @@ -1196,12 +1196,12 @@ def id 8 3 1 N 32929 0 63 def select_type 253 19 6 N 1 31 8 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 possible_keys 252 4096 0 Y 0 31 8 def key 253 64 0 Y 0 31 8 def key_len 8 3 0 Y 32928 0 63 -def ref 253 1024 0 Y 0 31 8 +def ref 252 1024 0 Y 0 31 8 def rows 8 10 1 Y 32928 0 63 -def Extra 253 255 0 N 1 31 8 +def Extra 252 255 0 N 1 31 8 id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t9 ALL NULL NULL NULL NULL 2 test_sequence @@ -4210,12 +4210,12 @@ def id 8 3 1 N 32929 0 63 def select_type 253 19 6 N 1 31 8 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 possible_keys 252 4096 0 Y 0 31 8 def key 253 64 0 Y 0 31 8 def key_len 8 3 0 Y 32928 0 63 -def ref 253 1024 0 Y 0 31 8 +def ref 252 1024 0 Y 0 31 8 def rows 8 10 1 Y 32928 0 63 -def Extra 253 255 0 N 1 31 8 +def Extra 252 255 0 N 1 31 8 id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t9 ALL NULL NULL NULL NULL 2 test_sequence diff --git a/sql/item.cc b/sql/item.cc index c96794ff482..d13127e4952 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -1768,7 +1768,14 @@ void Item::make_field(Send_field *tmp_field) void Item_empty_string::make_field(Send_field *tmp_field) { - init_make_field(tmp_field,FIELD_TYPE_VAR_STRING); + enum_field_types type = FIELD_TYPE_VAR_STRING; + if (max_length >= 16777216) + type = FIELD_TYPE_LONG_BLOB; + else if (max_length >= 65536) + type = FIELD_TYPE_MEDIUM_BLOB; + else if (max_length >= 256) + type = FIELD_TYPE_BLOB; + init_make_field(tmp_field, type); } diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 7e0ee0dab68..03b12468b92 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -638,6 +638,30 @@ int mysqld_extend_show_tables(THD *thd,const char *db,const char *wild) DBUG_RETURN(0); } +/* +returns the length of the longest type on the given table. +This is used so that show fields will return the data using the proper +lengths instead of forcing columns such as type to always return with a +given length. +*/ +uint get_longest_type_in_table(TABLE *table, const char *wild) +{ + Field **ptr,*field; + char tmp[MAX_FIELD_WIDTH]; + uint max_len = 0; + + for (ptr=table->field; (field= *ptr); ptr++) + { + if (!wild || !wild[0] || + !wild_case_compare(system_charset_info, field->field_name,wild)) + { + String type(tmp,sizeof(tmp), system_charset_info); + field->sql_type(type); + max_len = max(max_len, type.length()); + } + } + return max_len; +} /*************************************************************************** ** List all columns in a table_list->real_name @@ -667,9 +691,14 @@ mysqld_show_fields(THD *thd, TABLE_LIST *table_list,const char *wild, #ifndef NO_EMBEDDED_ACCESS_CHECKS (void) get_table_grant(thd, table_list); #endif + + /* we scan for the longest since long enum types can exceed 40 */ + uint max_len = get_longest_type_in_table(table, wild); + List<Item> field_list; field_list.push_back(new Item_empty_string("Field",NAME_LEN)); - field_list.push_back(new Item_empty_string("Type",40)); + field_list.push_back(new Item_empty_string("Type", + max_len > 40 ? max_len : 40)); if (verbose) field_list.push_back(new Item_empty_string("Collation",40)); field_list.push_back(new Item_empty_string("Null",1)); diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c index dbee6e77e4f..b7232565e0b 100644 --- a/tests/mysql_client_test.c +++ b/tests/mysql_client_test.c @@ -7173,7 +7173,7 @@ static void test_explain_bug() verify_prepare_field(result, 3, "type", "", MYSQL_TYPE_VAR_STRING, "", "", "", 10, 0); - verify_prepare_field(result, 4, "possible_keys", "", MYSQL_TYPE_VAR_STRING, + verify_prepare_field(result, 4, "possible_keys", "", MYSQL_TYPE_BLOB, "", "", "", NAME_LEN*64, 0); verify_prepare_field(result, 5, "key", "", MYSQL_TYPE_VAR_STRING, @@ -7186,13 +7186,13 @@ static void test_explain_bug() (mysql_get_server_version(mysql) <= 50000 ? 3 : 4096), 0); - verify_prepare_field(result, 7, "ref", "", MYSQL_TYPE_VAR_STRING, + verify_prepare_field(result, 7, "ref", "", MYSQL_TYPE_BLOB, "", "", "", NAME_LEN*16, 0); verify_prepare_field(result, 8, "rows", "", MYSQL_TYPE_LONGLONG, "", "", "", 10, 0); - verify_prepare_field(result, 9, "Extra", "", MYSQL_TYPE_VAR_STRING, + verify_prepare_field(result, 9, "Extra", "", MYSQL_TYPE_BLOB, "", "", "", 255, 0); mysql_free_result(result); |