From: Mayank Prasad Date: June 10 2011 2:26pm Subject: bzr commit into mysql-5.5 branch (mayank.prasad:3444) Bug#12337762 List-Archive: http://lists.mysql.com/commits/139075 X-Bug: 12337762 Message-Id: <201106101426.p5AEQkGY007494@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0194773253==" --===============0194773253== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/mayank/mysql-tree/mydefects/5.5_12337762/ based on revid:daniel.fischer@stripped 3444 Mayank Prasad 2011-06-10 Bug#12337762 : MYSQL_LIST_FIELDS() RETURNS WRONG CHARSET FOR CHAR/VARCHAR/TEXT COLUMNS IN VIEWS Issue: charset value for a Column, returned by MYSQL_LIST_FIELDS(), was not same for Table and View. This was because, for view, field charset was not being returned. Solution: Added definition of function "charset_for_protocol()" in calss Item_ident_for_show to return field charset value. @ sql/item.h Added definition for charset_for_protocol() function to return field charset. @ tests/mysql_client_test.c Added a test case test_bug12337762 for the changes done. modified: sql/item.h tests/mysql_client_test.c === modified file 'sql/item.h' --- a/sql/item.h 2011-04-08 13:15:23 +0000 +++ b/sql/item.h 2011-06-10 14:26:35 +0000 @@ -1672,6 +1672,8 @@ public: String *val_str(String *str) { return field->val_str(str); } my_decimal *val_decimal(my_decimal *dec) { return field->val_decimal(dec); } void make_field(Send_field *tmp_field); + CHARSET_INFO *charset_for_protocol(void) const + { return field->charset_for_protocol(); } }; === modified file 'tests/mysql_client_test.c' --- a/tests/mysql_client_test.c 2011-06-06 10:27:05 +0000 +++ b/tests/mysql_client_test.c 2011-06-10 14:26:35 +0000 @@ -19588,6 +19588,81 @@ static void test_bug11766854() DBUG_VOID_RETURN; } +/** + Bug#12337762: 60075: MYSQL_LIST_FIELDS() RETURNS WRONG CHARSET FOR + CHAR/VARCHAR/TEXT COLUMNS IN VIEWS +*/ +static void test_bug12337762() +{ + int rc,i=0; + MYSQL_RES *result; + MYSQL_FIELD *field; + unsigned int tab_charsetnr[3]= {0}; + + DBUG_ENTER("test_bug12337762"); + myheader("test_bug12337762"); + + /* + Creating table with specific charset. + */ + rc= mysql_query(mysql, "drop table if exists charset_tab"); + rc= mysql_query(mysql, "create table charset_tab("\ + "txt1 varchar(32) character set Latin1,"\ + "txt2 varchar(32) character set Latin1 collate latin1_bin,"\ + "txt3 varchar(32) character set utf8 collate utf8_bin"\ + ")"); + + DIE_UNLESS(rc == 0); + DIE_IF(mysql_errno(mysql)); + + /* + Creating view from table created earlier. + */ + rc= mysql_query(mysql, "drop view if exists charset_view"); + rc= mysql_query(mysql, "create view charset_view as "\ + "select * from charset_tab;"); + DIE_UNLESS(rc == 0); + DIE_IF(mysql_errno(mysql)); + + /* + Checking field information for table. + */ + result= mysql_list_fields(mysql, "charset_tab", NULL); + DIE_IF(mysql_errno(mysql)); + i=0; + while((field= mysql_fetch_field(result))) + { + printf("field name %s\n", field->name); + printf("field table %s\n", field->table); + printf("field type %d\n", field->type); + printf("field charset %d\n", field->charsetnr); + tab_charsetnr[i++]= field->charsetnr; + printf("\n"); + } + mysql_free_result(result); + + /* + Checking field information for view. + */ + result= mysql_list_fields(mysql, "charset_view", NULL); + DIE_IF(mysql_errno(mysql)); + i=0; + while((field= mysql_fetch_field(result))) + { + printf("field name %s\n", field->name); + printf("field table %s\n", field->table); + printf("field type %d\n", field->type); + printf("field charset %d\n", field->charsetnr); + printf("\n"); + /* + charset value for field must be same for both, view and table. + */ + DIE_UNLESS(field->charsetnr == tab_charsetnr[i++]); + } + mysql_free_result(result); + + DBUG_VOID_RETURN; +} /* Read and parse arguments and MySQL options from my.cnf @@ -19933,6 +20008,7 @@ static struct my_tests_st my_tests[]= { { "test_bug57058", test_bug57058 }, { "test_bug56976", test_bug56976 }, { "test_bug11766854", test_bug11766854 }, + { "test_bug12337762", test_bug12337762 }, { 0, 0 } }; @@ -20071,29 +20147,29 @@ int main(int argc, char **argv) if (!argc) { for (fptr= my_tests; fptr->name; fptr++) - (*fptr->function)(); + (*fptr->function)(); } else { for ( ; *argv ; argv++) { - for (fptr= my_tests; fptr->name; fptr++) - { - if (!strcmp(fptr->name, *argv)) - { - (*fptr->function)(); - break; - } - } - if (!fptr->name) - { - fprintf(stderr, "\n\nGiven test not found: '%s'\n", *argv); - fprintf(stderr, "See legal test names with %s -T\n\nAborting!\n", - my_progname); - client_disconnect(mysql, 1); - free_defaults(defaults_argv); - exit(1); - } + for (fptr= my_tests; fptr->name; fptr++) + { + if (!strcmp(fptr->name, *argv)) + { + (*fptr->function)(); + break; + } + } + if (!fptr->name) + { + fprintf(stderr, "\n\nGiven test not found: '%s'\n", *argv); + fprintf(stderr, "See legal test names with %s -T\n\nAborting!\n", + my_progname); + client_disconnect(mysql, 1); + free_defaults(defaults_argv); + exit(1); + } } } --===============0194773253== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/mayank.prasad@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: mayank.prasad@stripped\ # l5pfumhgzk2pkw3r # target_branch: file:///home/mayank/mysql-tree/mydefects\ # /5.5_12337762/ # testament_sha1: c60a92354eca2067fc459d8c7d69272c2047c5e6 # timestamp: 2011-06-10 19:56:42 +0530 # base_revision_id: daniel.fischer@stripped\ # rn9kov83jovgwza1 # # Begin bundle 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 dyRThQkHepSWkA== --===============0194773253==--