Loading mysql-test/r/type_enum.result +3 −3 Original line number Diff line number Diff line Loading @@ -1731,9 +1731,9 @@ alter table t1 add b set ('Y','N') CHARACTER SET utf8 COLLATE utf8_bin; alter table t1 add c enum ('Y','N') CHARACTER SET utf8 COLLATE utf8_bin; select * from t1; Catalog Database Table Table_alias Column Column_alias Name Type Length Max length Is_null Flags Decimals Charsetnr def test t1 t1 a a 254 3 1 Y 384 0 8 def test t1 t1 b b 254 9 0 Y 2176 0 8 def test t1 t1 c c 254 3 0 Y 384 0 8 def test t1 t1 a a 254 1 1 Y 384 0 8 def test t1 t1 b b 254 3 0 Y 2176 0 8 def test t1 t1 c c 254 1 0 Y 384 0 8 a b c Y NULL NULL drop table t1; Loading sql/item.h +1 −1 Original line number Diff line number Diff line Loading @@ -765,7 +765,7 @@ 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) { name=(char*) header; max_length=length;} { name=(char*) header; max_length= cs ? length * cs->mbmaxlen : length; } void make_field(Send_field *field); }; Loading sql/protocol.cc +10 −2 Original line number Diff line number Diff line Loading @@ -549,10 +549,18 @@ bool Protocol::send_fields(List<Item> *list, uint flag) pos= (char*) local_packet->ptr()+local_packet->length(); *pos++= 12; // Length of packed fields if (item->collation.collation == &my_charset_bin || thd_charset == NULL) { /* No conversion */ int2store(pos, field.charsetnr); int4store(pos+2, field.length); } else { /* With conversion */ int2store(pos, thd_charset->number); int4store(pos+2, field.length); uint char_len= field.length / item->collation.collation->mbmaxlen; int4store(pos+2, char_len * thd_charset->mbmaxlen); } pos[6]= field.type; int2store(pos+7,field.flags); pos[9]= (char) field.decimals; Loading tests/client_test.c +18 −11 Original line number Diff line number Diff line Loading @@ -1101,7 +1101,8 @@ static void test_prepare_simple() mysql_stmt_close(stmt); /* update */ strmov(query, "UPDATE test_prepare_simple SET id=? WHERE id=? AND name= ?"); strmov(query, "UPDATE test_prepare_simple SET id=? " "WHERE id=? AND CONVERT(name USING utf8)= ?"); stmt= mysql_simple_prepare(mysql, query); check_stmt(stmt); Loading Loading @@ -1129,7 +1130,8 @@ static void test_prepare_simple() mysql_stmt_close(stmt); /* select */ strmov(query, "SELECT * FROM test_prepare_simple WHERE id=? AND name= ?"); strmov(query, "SELECT * FROM test_prepare_simple WHERE id=? " "AND CONVERT(name USING utf8)= ?"); stmt= mysql_simple_prepare(mysql, query); check_stmt(stmt); Loading Loading @@ -1158,7 +1160,7 @@ static void test_prepare_field_result() rc= mysql_query(mysql, "CREATE TABLE test_prepare_field_result(int_c int, " "var_c varchar(50), ts_c timestamp(14), " "char_c char(3), date_c date, extra tinyint)"); "char_c char(4), date_c date, extra tinyint)"); myquery(rc); /* insert */ Loading @@ -1184,8 +1186,8 @@ static void test_prepare_field_result() "t1", "test_prepare_field_result", current_db, 10, 0); verify_prepare_field(result, 3, "ts_c", "ts_c", MYSQL_TYPE_TIMESTAMP, "t1", "test_prepare_field_result", current_db, 19, 0); verify_prepare_field(result, 4, "char_c", "char_c", MYSQL_TYPE_STRING, "t1", "test_prepare_field_result", current_db, 3, 0); verify_prepare_field(result, 4, "char_c", "char_c", MYSQL_TYPE_VAR_STRING, "t1", "test_prepare_field_result", current_db, 4, 0); verify_field_count(result, 5); mysql_free_result(result); Loading Loading @@ -1921,7 +1923,8 @@ static void test_select() rc= mysql_commit(mysql); myquery(rc); strmov(query, "SELECT * FROM test_select WHERE id= ? AND name=?"); strmov(query, "SELECT * FROM test_select WHERE id= ? " "AND CONVERT(name USING utf8) =?"); stmt= mysql_simple_prepare(mysql, query); check_stmt(stmt); Loading Loading @@ -1981,7 +1984,8 @@ static void test_ps_conj_select() "(2, 'hh', 'hh'), (1, 'ii', 'ii'), (2, 'ii', 'ii')"); myquery(rc); strmov(query, "select id1, value1 from t1 where id1= ? or value1= ?"); strmov(query, "select id1, value1 from t1 where id1= ? or " "CONVERT(value1 USING utf8)= ?"); stmt= mysql_simple_prepare(mysql, query); check_stmt(stmt); Loading Loading @@ -2060,7 +2064,8 @@ session_id char(9) NOT NULL, \ "(\"abx\", 1, 2, 3, 2003-08-30)"); myquery(rc); strmov(query, "SELECT * FROM test_select WHERE session_id= ?"); strmov(query, "SELECT * FROM test_select WHERE " "CONVERT(session_id USING utf8)= ?"); stmt= mysql_simple_prepare(mysql, query); check_stmt(stmt); Loading Loading @@ -2898,7 +2903,8 @@ static void test_simple_delete() myquery(rc); /* insert by prepare */ strmov(query, "DELETE FROM test_simple_delete WHERE col1= ? AND col2= ? AND col3= 100"); strmov(query, "DELETE FROM test_simple_delete WHERE col1= ? AND " "CONVERT(col2 USING utf8)= ? AND col3= 100"); stmt= mysql_simple_prepare(mysql, query); check_stmt(stmt); Loading Loading @@ -4866,7 +4872,8 @@ static void test_multi_stmt() /* alter the table schema now */ stmt1= mysql_simple_prepare(mysql, "DELETE FROM test_multi_table " "WHERE id= ? AND name=?"); "WHERE id= ? AND " "CONVERT(name USING utf8)=?"); check_stmt(stmt1); verify_param_count(stmt1, 2); Loading Loading @@ -6632,7 +6639,7 @@ static void test_field_misc() "@@table_type", "", /* field and its org name */ MYSQL_TYPE_STRING, /* field type */ "", "", /* table and its org name */ "", type_length*3, 0); /* db name, length */ "", type_length, 0); /* db name, length */ mysql_free_result(result); mysql_stmt_close(stmt); Loading Loading
mysql-test/r/type_enum.result +3 −3 Original line number Diff line number Diff line Loading @@ -1731,9 +1731,9 @@ alter table t1 add b set ('Y','N') CHARACTER SET utf8 COLLATE utf8_bin; alter table t1 add c enum ('Y','N') CHARACTER SET utf8 COLLATE utf8_bin; select * from t1; Catalog Database Table Table_alias Column Column_alias Name Type Length Max length Is_null Flags Decimals Charsetnr def test t1 t1 a a 254 3 1 Y 384 0 8 def test t1 t1 b b 254 9 0 Y 2176 0 8 def test t1 t1 c c 254 3 0 Y 384 0 8 def test t1 t1 a a 254 1 1 Y 384 0 8 def test t1 t1 b b 254 3 0 Y 2176 0 8 def test t1 t1 c c 254 1 0 Y 384 0 8 a b c Y NULL NULL drop table t1; Loading
sql/item.h +1 −1 Original line number Diff line number Diff line Loading @@ -765,7 +765,7 @@ 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) { name=(char*) header; max_length=length;} { name=(char*) header; max_length= cs ? length * cs->mbmaxlen : length; } void make_field(Send_field *field); }; Loading
sql/protocol.cc +10 −2 Original line number Diff line number Diff line Loading @@ -549,10 +549,18 @@ bool Protocol::send_fields(List<Item> *list, uint flag) pos= (char*) local_packet->ptr()+local_packet->length(); *pos++= 12; // Length of packed fields if (item->collation.collation == &my_charset_bin || thd_charset == NULL) { /* No conversion */ int2store(pos, field.charsetnr); int4store(pos+2, field.length); } else { /* With conversion */ int2store(pos, thd_charset->number); int4store(pos+2, field.length); uint char_len= field.length / item->collation.collation->mbmaxlen; int4store(pos+2, char_len * thd_charset->mbmaxlen); } pos[6]= field.type; int2store(pos+7,field.flags); pos[9]= (char) field.decimals; Loading
tests/client_test.c +18 −11 Original line number Diff line number Diff line Loading @@ -1101,7 +1101,8 @@ static void test_prepare_simple() mysql_stmt_close(stmt); /* update */ strmov(query, "UPDATE test_prepare_simple SET id=? WHERE id=? AND name= ?"); strmov(query, "UPDATE test_prepare_simple SET id=? " "WHERE id=? AND CONVERT(name USING utf8)= ?"); stmt= mysql_simple_prepare(mysql, query); check_stmt(stmt); Loading Loading @@ -1129,7 +1130,8 @@ static void test_prepare_simple() mysql_stmt_close(stmt); /* select */ strmov(query, "SELECT * FROM test_prepare_simple WHERE id=? AND name= ?"); strmov(query, "SELECT * FROM test_prepare_simple WHERE id=? " "AND CONVERT(name USING utf8)= ?"); stmt= mysql_simple_prepare(mysql, query); check_stmt(stmt); Loading Loading @@ -1158,7 +1160,7 @@ static void test_prepare_field_result() rc= mysql_query(mysql, "CREATE TABLE test_prepare_field_result(int_c int, " "var_c varchar(50), ts_c timestamp(14), " "char_c char(3), date_c date, extra tinyint)"); "char_c char(4), date_c date, extra tinyint)"); myquery(rc); /* insert */ Loading @@ -1184,8 +1186,8 @@ static void test_prepare_field_result() "t1", "test_prepare_field_result", current_db, 10, 0); verify_prepare_field(result, 3, "ts_c", "ts_c", MYSQL_TYPE_TIMESTAMP, "t1", "test_prepare_field_result", current_db, 19, 0); verify_prepare_field(result, 4, "char_c", "char_c", MYSQL_TYPE_STRING, "t1", "test_prepare_field_result", current_db, 3, 0); verify_prepare_field(result, 4, "char_c", "char_c", MYSQL_TYPE_VAR_STRING, "t1", "test_prepare_field_result", current_db, 4, 0); verify_field_count(result, 5); mysql_free_result(result); Loading Loading @@ -1921,7 +1923,8 @@ static void test_select() rc= mysql_commit(mysql); myquery(rc); strmov(query, "SELECT * FROM test_select WHERE id= ? AND name=?"); strmov(query, "SELECT * FROM test_select WHERE id= ? " "AND CONVERT(name USING utf8) =?"); stmt= mysql_simple_prepare(mysql, query); check_stmt(stmt); Loading Loading @@ -1981,7 +1984,8 @@ static void test_ps_conj_select() "(2, 'hh', 'hh'), (1, 'ii', 'ii'), (2, 'ii', 'ii')"); myquery(rc); strmov(query, "select id1, value1 from t1 where id1= ? or value1= ?"); strmov(query, "select id1, value1 from t1 where id1= ? or " "CONVERT(value1 USING utf8)= ?"); stmt= mysql_simple_prepare(mysql, query); check_stmt(stmt); Loading Loading @@ -2060,7 +2064,8 @@ session_id char(9) NOT NULL, \ "(\"abx\", 1, 2, 3, 2003-08-30)"); myquery(rc); strmov(query, "SELECT * FROM test_select WHERE session_id= ?"); strmov(query, "SELECT * FROM test_select WHERE " "CONVERT(session_id USING utf8)= ?"); stmt= mysql_simple_prepare(mysql, query); check_stmt(stmt); Loading Loading @@ -2898,7 +2903,8 @@ static void test_simple_delete() myquery(rc); /* insert by prepare */ strmov(query, "DELETE FROM test_simple_delete WHERE col1= ? AND col2= ? AND col3= 100"); strmov(query, "DELETE FROM test_simple_delete WHERE col1= ? AND " "CONVERT(col2 USING utf8)= ? AND col3= 100"); stmt= mysql_simple_prepare(mysql, query); check_stmt(stmt); Loading Loading @@ -4866,7 +4872,8 @@ static void test_multi_stmt() /* alter the table schema now */ stmt1= mysql_simple_prepare(mysql, "DELETE FROM test_multi_table " "WHERE id= ? AND name=?"); "WHERE id= ? AND " "CONVERT(name USING utf8)=?"); check_stmt(stmt1); verify_param_count(stmt1, 2); Loading Loading @@ -6632,7 +6639,7 @@ static void test_field_misc() "@@table_type", "", /* field and its org name */ MYSQL_TYPE_STRING, /* field type */ "", "", /* table and its org name */ "", type_length*3, 0); /* db name, length */ "", type_length, 0); /* db name, length */ mysql_free_result(result); mysql_stmt_close(stmt); Loading