From: Mayank Prasad Date: June 9 2011 9:16am Subject: bzr commit into mysql-5.5 branch (mayank.prasad:3433) Bug#12337762 List-Archive: http://lists.mysql.com/commits/138922 X-Bug: 12337762 Message-Id: <201106090917.p599H5Sc027946@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1318689108==" --===============1318689108== 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:dmitry.shulga@stripped 3433 Mayank Prasad 2011-06-09 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-09 09:16:47 +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-09 09:16:47 +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); + } } } --===============1318689108== 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\ # q3nz1l2f860x0yzw # target_branch: file:///home/mayank/mysql-tree/mydefects\ # /5.5_12337762/ # testament_sha1: 42df706cf4b9fab3868657e88b70f6f5883a93c6 # timestamp: 2011-06-09 14:46:54 +0530 # base_revision_id: dmitry.shulga@stripped\ # 1d0opabpgzp36za6 # # Begin bundle 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 KL4v0qAQoKUYP8XckU4UJAyFCebA --===============1318689108==--