Loading BitKeeper/etc/logging_ok +1 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,7 @@ igor@hundin.mysql.fi igor@rurik.mysql.com ingo@mysql.com jan@hundin.mysql.fi jani@a193-229-222-2.elisa-laajakaista.fi jani@a80-186-24-72.elisa-laajakaista.fi jani@a80-186-41-201.elisa-laajakaista.fi jani@dsl-jkl1657.dial.inet.fi Loading innobase/row/row0mysql.c +15 −3 Original line number Diff line number Diff line Loading @@ -1585,7 +1585,7 @@ row_create_table_for_mysql( "InnoDB: See the Restrictions section of the InnoDB manual.\n" "InnoDB: You can drop the orphaned table inside InnoDB by\n" "InnoDB: creating an InnoDB table with the same name in another\n" "InnoDB: database and moving the .frm file to the current database.\n" "InnoDB: database and copying the .frm file to the current database.\n" "InnoDB: Then MySQL thinks the table exists, and DROP TABLE will\n" "InnoDB: succeed.\n" "InnoDB: You can look for further help from\n" Loading Loading @@ -2546,7 +2546,13 @@ row_drop_table_for_mysql( name_or_path, is_path, FALSE, TRUE)) { err = DB_ERROR; err = DB_SUCCESS; fprintf(stderr, "InnoDB: We removed now the InnoDB internal data dictionary entry\n" "InnoDB: of table "); ut_print_name(stderr, trx, name); fprintf(stderr, ".\n"); goto funct_exit; } Loading @@ -2554,6 +2560,12 @@ row_drop_table_for_mysql( success = fil_delete_tablespace(space_id); if (!success) { fprintf(stderr, "InnoDB: We removed now the InnoDB internal data dictionary entry\n" "InnoDB: of table "); ut_print_name(stderr, trx, name); fprintf(stderr, ".\n"); ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: Error: not able to delete tablespace %lu of table ", Loading Loading @@ -2993,7 +3005,7 @@ row_rename_table_for_mysql( "InnoDB: dropped automatically when the queries end.\n" "InnoDB: You can drop the orphaned table inside InnoDB by\n" "InnoDB: creating an InnoDB table with the same name in another\n" "InnoDB: database and moving the .frm file to the current database.\n" "InnoDB: database and copying the .frm file to the current database.\n" "InnoDB: Then MySQL thinks the table exists, and DROP TABLE will\n" "InnoDB: succeed.\n", stderr); } Loading innobase/row/row0row.c +10 −6 Original line number Diff line number Diff line Loading @@ -386,10 +386,12 @@ row_build_row_ref( dict_index_get_nth_field(clust_index, i)->prefix_len; if (clust_col_prefix_len > 0) { if (len != UNIV_SQL_NULL && len > clust_col_prefix_len) { if (len != UNIV_SQL_NULL) { dfield_set_len(dfield, clust_col_prefix_len); dfield_set_len(dfield, dtype_get_at_most_n_mbchars( dfield_get_type(dfield), clust_col_prefix_len, len, field)); } } } Loading Loading @@ -471,10 +473,12 @@ row_build_row_ref_in_tuple( dict_index_get_nth_field(clust_index, i)->prefix_len; if (clust_col_prefix_len > 0) { if (len != UNIV_SQL_NULL && len > clust_col_prefix_len) { if (len != UNIV_SQL_NULL) { dfield_set_len(dfield, clust_col_prefix_len); dfield_set_len(dfield, dtype_get_at_most_n_mbchars( dfield_get_type(dfield), clust_col_prefix_len, len, field)); } } } Loading innobase/row/row0sel.c +20 −13 Original line number Diff line number Diff line Loading @@ -2024,19 +2024,15 @@ row_sel_convert_mysql_key_to_innobase( /* MySQL stores the actual data length to the first 2 bytes after the optional SQL NULL marker byte. The storage format is little-endian. */ /* There are no key fields > 255 bytes currently in MySQL */ if (key_ptr[data_offset + 1] != 0) { ut_print_timestamp(stderr); fputs( " InnoDB: Error: BLOB or TEXT prefix > 255 bytes in query to table ", stderr); ut_print_name(stderr, trx, index->table_name); putc('\n', stderr); } data_len = key_ptr[data_offset]; storage format is little-endian, that is, the most significant byte at a higher address. In UTF-8, MySQL seems to reserve field->prefix_len bytes for storing this field in the key value buffer, even though the actual value only takes data_len bytes from the start. */ data_len = key_ptr[data_offset] + 256 * key_ptr[data_offset + 1]; data_field_len = data_offset + 2 + field->prefix_len; data_offset += 2; Loading @@ -2044,6 +2040,17 @@ row_sel_convert_mysql_key_to_innobase( store the column value like it would be a fixed char field */ } else if (field->prefix_len > 0) { /* Looks like MySQL pads unused end bytes in the prefix with space. Therefore, also in UTF-8, it is ok to compare with a prefix containing full prefix_len bytes, and no need to take at most prefix_len / 3 UTF-8 characters from the start. If the prefix is used as the upper end of a LIKE 'abc%' query, then MySQL pads the end with chars 0xff. TODO: in that case does it any harm to compare with the full prefix_len bytes. How do characters 0xff in UTF-8 behave? */ data_len = field->prefix_len; data_field_len = data_offset + data_len; } else { Loading mysql-test/mysql-test-run.sh +1 −1 Original line number Diff line number Diff line Loading @@ -530,7 +530,7 @@ else MYSQLD="$VALGRIND $BASEDIR/bin/mysqld" fi CLIENT_BINDIR="$BASEDIR/bin" TESTS_BINDIR="$BASEDIR/bin" TESTS_BINDIR="$BASEDIR/tests" MYSQL_TEST="$CLIENT_BINDIR/mysqltest" MYSQL_DUMP="$CLIENT_BINDIR/mysqldump" MYSQL_BINLOG="$CLIENT_BINDIR/mysqlbinlog" Loading Loading
BitKeeper/etc/logging_ok +1 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,7 @@ igor@hundin.mysql.fi igor@rurik.mysql.com ingo@mysql.com jan@hundin.mysql.fi jani@a193-229-222-2.elisa-laajakaista.fi jani@a80-186-24-72.elisa-laajakaista.fi jani@a80-186-41-201.elisa-laajakaista.fi jani@dsl-jkl1657.dial.inet.fi Loading
innobase/row/row0mysql.c +15 −3 Original line number Diff line number Diff line Loading @@ -1585,7 +1585,7 @@ row_create_table_for_mysql( "InnoDB: See the Restrictions section of the InnoDB manual.\n" "InnoDB: You can drop the orphaned table inside InnoDB by\n" "InnoDB: creating an InnoDB table with the same name in another\n" "InnoDB: database and moving the .frm file to the current database.\n" "InnoDB: database and copying the .frm file to the current database.\n" "InnoDB: Then MySQL thinks the table exists, and DROP TABLE will\n" "InnoDB: succeed.\n" "InnoDB: You can look for further help from\n" Loading Loading @@ -2546,7 +2546,13 @@ row_drop_table_for_mysql( name_or_path, is_path, FALSE, TRUE)) { err = DB_ERROR; err = DB_SUCCESS; fprintf(stderr, "InnoDB: We removed now the InnoDB internal data dictionary entry\n" "InnoDB: of table "); ut_print_name(stderr, trx, name); fprintf(stderr, ".\n"); goto funct_exit; } Loading @@ -2554,6 +2560,12 @@ row_drop_table_for_mysql( success = fil_delete_tablespace(space_id); if (!success) { fprintf(stderr, "InnoDB: We removed now the InnoDB internal data dictionary entry\n" "InnoDB: of table "); ut_print_name(stderr, trx, name); fprintf(stderr, ".\n"); ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: Error: not able to delete tablespace %lu of table ", Loading Loading @@ -2993,7 +3005,7 @@ row_rename_table_for_mysql( "InnoDB: dropped automatically when the queries end.\n" "InnoDB: You can drop the orphaned table inside InnoDB by\n" "InnoDB: creating an InnoDB table with the same name in another\n" "InnoDB: database and moving the .frm file to the current database.\n" "InnoDB: database and copying the .frm file to the current database.\n" "InnoDB: Then MySQL thinks the table exists, and DROP TABLE will\n" "InnoDB: succeed.\n", stderr); } Loading
innobase/row/row0row.c +10 −6 Original line number Diff line number Diff line Loading @@ -386,10 +386,12 @@ row_build_row_ref( dict_index_get_nth_field(clust_index, i)->prefix_len; if (clust_col_prefix_len > 0) { if (len != UNIV_SQL_NULL && len > clust_col_prefix_len) { if (len != UNIV_SQL_NULL) { dfield_set_len(dfield, clust_col_prefix_len); dfield_set_len(dfield, dtype_get_at_most_n_mbchars( dfield_get_type(dfield), clust_col_prefix_len, len, field)); } } } Loading Loading @@ -471,10 +473,12 @@ row_build_row_ref_in_tuple( dict_index_get_nth_field(clust_index, i)->prefix_len; if (clust_col_prefix_len > 0) { if (len != UNIV_SQL_NULL && len > clust_col_prefix_len) { if (len != UNIV_SQL_NULL) { dfield_set_len(dfield, clust_col_prefix_len); dfield_set_len(dfield, dtype_get_at_most_n_mbchars( dfield_get_type(dfield), clust_col_prefix_len, len, field)); } } } Loading
innobase/row/row0sel.c +20 −13 Original line number Diff line number Diff line Loading @@ -2024,19 +2024,15 @@ row_sel_convert_mysql_key_to_innobase( /* MySQL stores the actual data length to the first 2 bytes after the optional SQL NULL marker byte. The storage format is little-endian. */ /* There are no key fields > 255 bytes currently in MySQL */ if (key_ptr[data_offset + 1] != 0) { ut_print_timestamp(stderr); fputs( " InnoDB: Error: BLOB or TEXT prefix > 255 bytes in query to table ", stderr); ut_print_name(stderr, trx, index->table_name); putc('\n', stderr); } data_len = key_ptr[data_offset]; storage format is little-endian, that is, the most significant byte at a higher address. In UTF-8, MySQL seems to reserve field->prefix_len bytes for storing this field in the key value buffer, even though the actual value only takes data_len bytes from the start. */ data_len = key_ptr[data_offset] + 256 * key_ptr[data_offset + 1]; data_field_len = data_offset + 2 + field->prefix_len; data_offset += 2; Loading @@ -2044,6 +2040,17 @@ row_sel_convert_mysql_key_to_innobase( store the column value like it would be a fixed char field */ } else if (field->prefix_len > 0) { /* Looks like MySQL pads unused end bytes in the prefix with space. Therefore, also in UTF-8, it is ok to compare with a prefix containing full prefix_len bytes, and no need to take at most prefix_len / 3 UTF-8 characters from the start. If the prefix is used as the upper end of a LIKE 'abc%' query, then MySQL pads the end with chars 0xff. TODO: in that case does it any harm to compare with the full prefix_len bytes. How do characters 0xff in UTF-8 behave? */ data_len = field->prefix_len; data_field_len = data_offset + data_len; } else { Loading
mysql-test/mysql-test-run.sh +1 −1 Original line number Diff line number Diff line Loading @@ -530,7 +530,7 @@ else MYSQLD="$VALGRIND $BASEDIR/bin/mysqld" fi CLIENT_BINDIR="$BASEDIR/bin" TESTS_BINDIR="$BASEDIR/bin" TESTS_BINDIR="$BASEDIR/tests" MYSQL_TEST="$CLIENT_BINDIR/mysqltest" MYSQL_DUMP="$CLIENT_BINDIR/mysqldump" MYSQL_BINLOG="$CLIENT_BINDIR/mysqlbinlog" Loading