From: Mayank Prasad Date: June 7 2011 7:21am Subject: bzr commit into mysql-5.5 branch (mayank.prasad:3430) Bug#12337762 List-Archive: http://lists.mysql.com/commits/138741 X-Bug: 12337762 Message-Id: <201106070721.p577LX6D006705@acsmt357.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0821175539==" --===============0821175539== 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:marko.makela@stripped 3430 Mayank Prasad 2011-06-07 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-07 07:21:17 +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-07 07:21:17 +0000 @@ -19588,6 +19588,74 @@ 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; + MYSQL_RES *result; + MYSQL_FIELD *field; + unsigned int tab_charsetnr= 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(txt varchar(32)"\ + "character set Latin1)"); + 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)); + 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= 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)); + 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); + /* + charset vlaue for field must be same for both, view and table. + */ + DIE_UNLESS(field->charsetnr == tab_charsetnr); + } + mysql_free_result(result); + + DBUG_VOID_RETURN; +} /* Read and parse arguments and MySQL options from my.cnf @@ -19933,6 +20001,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 +20140,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); + } } } --===============0821175539== 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\ # nahzd9ntvw5dvi6g # target_branch: file:///home/mayank/mysql-tree/mydefects\ # /5.5_12337762/ # testament_sha1: 2f63459275fdf0d88252832ba86add8db052b3e4 # timestamp: 2011-06-07 12:51:24 +0530 # base_revision_id: marko.makela@stripped\ # hu7s4whv32n8pqqu # # Begin bundle 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 --===============0821175539==--