[Maria-developers] bzr commit into MariaDB 5.1, with Maria 1.5:maria branch (knielsen:2777)
#At lp:maria 2777 knielsen@knielsen-hq.org 2009-12-16 [merge] Automatic merge with MariaDB trunk. modified: BUILD/FINISH.sh BUILD/SETUP.sh client/mysql.cc client/mysqlcheck.c client/mysqlslap.c client/mysqltest.cc dbug/dbug.c extra/yassl/taocrypt/include/block.hpp mysql-test/lib/mtr_cases.pm mysql-test/lib/mtr_report.pm mysql-test/lib/v1/mysql-test-run.pl mysql-test/mysql-test-run.pl mysql-test/r/ctype_ucs.result mysql-test/r/warnings.result mysql-test/suite/federated/disabled.def mysql-test/suite/federated/federated_server.result mysql-test/suite/federated/federated_server.test mysql-test/suite/funcs_1/r/innodb_func_view.result mysql-test/suite/funcs_1/r/memory_func_view.result mysql-test/suite/funcs_1/r/myisam_func_view.result mysql-test/t/ctype_ucs.test mysql-test/t/warnings.test plugin/fulltext/plugin_example.c sql-common/client.c sql/my_decimal.cc sql/mysqld.cc sql/share/errmsg.txt sql/slave.cc sql/sql_base.cc sql/sql_class.cc sql/sql_insert.cc storage/federatedx/ha_federatedx.cc strings/ctype-ucs2.c unittest/mysys/Makefile.am vio/viosslfactories.c === modified file 'BUILD/FINISH.sh' --- a/BUILD/FINISH.sh 2009-10-27 13:20:34 +0000 +++ b/BUILD/FINISH.sh 2009-12-06 17:34:54 +0000 @@ -1,6 +1,6 @@ -cflags="$c_warnings $extra_flags" -cxxflags="$cxx_warnings $base_cxxflags $extra_flags" -extra_configs="$extra_configs $local_infile_configs" +cflags="$c_warnings $extra_flags $EXTRA_FLAGS $EXTRA_CFLAGS" +cxxflags="$cxx_warnings $base_cxxflags $extra_flags $EXTRA_FLAGS $EXTRA_CXXFLAGS" +extra_configs="$extra_configs $local_infile_configs $EXTRA_CONFIGS" configure="./configure $base_configs $extra_configs" commands="\ === modified file 'BUILD/SETUP.sh' --- a/BUILD/SETUP.sh 2009-10-29 00:04:56 +0000 +++ b/BUILD/SETUP.sh 2009-12-06 17:34:54 +0000 @@ -34,6 +34,14 @@ parse_options() full_debug="=full";; --warning-mode=*) warning_mode=`get_key_value "$1"`;; + --extra-flags=*) + EXTRA_FLAGS=`get_key_value "$1"`;; + --extra-cflags=*) + EXTRA_CFLAGS=`get_key_value "$1"`;; + --extra-cxxflags=*) + EXTRA_CXXFLAGS=`get_key_value "$1"`;; + --extra-configs=*) + EXTRA_CONFIGS=`get_key_value "$1"`;; -c | --just-configure) just_configure=1;; -n | --just-print | --print) === modified file 'client/mysql.cc' --- a/client/mysql.cc 2009-11-30 21:37:27 +0000 +++ b/client/mysql.cc 2009-12-03 11:34:11 +0000 @@ -1280,7 +1280,6 @@ sig_handler handle_sigint(int sig) MYSQL *kill_mysql= NULL; /* terminate if no query being executed, or we already tried interrupting */ - /* terminate if no query being executed, or we already tried interrupting */ if (!executing_query || (interrupted_query == 2)) { tee_fprintf(stdout, "Ctrl-C -- exit!\n"); @@ -1295,6 +1294,7 @@ sig_handler handle_sigint(int sig) goto err; } + /* First time try to kill the query, second time the connection */ interrupted_query++; /* mysqld < 5 does not understand KILL QUERY, skip to KILL CONNECTION */ @@ -1305,10 +1305,13 @@ sig_handler handle_sigint(int sig) sprintf(kill_buffer, "KILL %s%lu", (interrupted_query == 1) ? "QUERY " : "", mysql_thread_id(&mysql)); - tee_fprintf(stdout, "Ctrl-C -- sending \"%s\" to server ...\n", kill_buffer); + if (verbose) + tee_fprintf(stdout, "Ctrl-C -- sending \"%s\" to server ...\n", + kill_buffer); mysql_real_query(kill_mysql, kill_buffer, (uint) strlen(kill_buffer)); mysql_close(kill_mysql); - tee_fprintf(stdout, "Ctrl-C -- query aborted.\n"); + tee_fprintf(stdout, "Ctrl-C -- query killed. Continuing normally.\n"); + interrupted_query= 0; return; @@ -1321,7 +1324,6 @@ err: handler called mysql_end(). */ mysql_thread_end(); - return; #else mysql_end(sig); #endif @@ -2881,13 +2883,8 @@ com_help(String *buffer __attribute__((u return com_server_help(buffer,line,help_arg); } - put_info("\nFor information about MySQL products and services, visit:\n" - " http://www.mysql.com/\n" - "For developer information, including the MySQL Reference Manual, " - "visit:\n" - " http://dev.mysql.com/\n" - "To buy MySQL Enterprise support, training, or other products, visit:\n" - " https://shop.mysql.com/\n", INFO_INFO); + put_info("\nGeneral information about MariaDB can be found at\n" + "http://askmonty.org/wiki/index.php/Manual:Contents\n", INFO_INFO); put_info("List of all MySQL commands:", INFO_INFO); if (!named_cmds) put_info("Note that all text commands must be first on line and end with ';'",INFO_INFO); === modified file 'client/mysqlcheck.c' --- a/client/mysqlcheck.c 2009-09-28 06:24:19 +0000 +++ b/client/mysqlcheck.c 2009-12-03 11:19:05 +0000 @@ -857,7 +857,8 @@ int main(int argc, char **argv) if (!opt_write_binlog) { - if (disable_binlog()) { + if (disable_binlog()) + { first_error= 1; goto end; } === modified file 'client/mysqlslap.c' --- a/client/mysqlslap.c 2009-11-30 21:37:27 +0000 +++ b/client/mysqlslap.c 2009-12-03 11:34:11 +0000 @@ -472,11 +472,10 @@ void concurrency_loop(MYSQL *mysql, uint if (commit_rate) run_query(mysql, "SET AUTOCOMMIT=0", strlen("SET AUTOCOMMIT=0")); - if (pre_system) - if ((sysret= system(pre_system)) != 0) - fprintf(stderr, - "Warning: Execution of pre_system option returned %d.\n", - sysret); + if (pre_system && (sysret= system(pre_system)) != 0) + fprintf(stderr, + "Warning: Execution of pre_system option returned %d.\n", + sysret); /* Pre statements are always run after all other logic so they can @@ -490,11 +489,10 @@ void concurrency_loop(MYSQL *mysql, uint if (post_statements) run_statements(mysql, post_statements); - if (post_system) - if ((sysret= system(post_system)) != 0) - fprintf(stderr, - "Warning: Execution of post_system option returned %d.\n", - sysret); + if (post_system && (sysret= system(post_system)) != 0) + fprintf(stderr, + "Warning: Execution of post_system option returned %d.\n", + sysret); /* We are finished with this run */ if (auto_generate_sql_autoincrement || auto_generate_sql_guid_primary) drop_primary_key_list(); === modified file 'client/mysqltest.cc' --- a/client/mysqltest.cc 2009-11-16 20:49:51 +0000 +++ b/client/mysqltest.cc 2009-12-03 11:19:05 +0000 @@ -3497,9 +3497,10 @@ void do_diff_files(struct st_command *co if ((error= compare_files(ds_filename.str, ds_filename2.str)) && match_expected_error(command, error, NULL) < 0) { - /* Compare of the two files failed, append them to output - so the failure can be analyzed, but only if it was not - expected to fail. + /* + Compare of the two files failed, append them to output + so the failure can be analyzed, but only if it was not + expected to fail. */ show_diff(&ds_res, ds_filename.str, ds_filename2.str); log_file.write(&ds_res); @@ -5013,7 +5014,8 @@ void do_connect(struct st_command *comma con_options= ds_options.str; while (*con_options) { - char* end; + size_t length; + char *end; /* Step past any spaces in beginning of option*/ while (*con_options && my_isspace(charset_info, *con_options)) con_options++; @@ -5021,13 +5023,14 @@ void do_connect(struct st_command *comma end= con_options; while (*end && !my_isspace(charset_info, *end)) end++; - if (!strncmp(con_options, "SSL", 3)) + length= (size_t) (end - con_options); + if (length == 3 && !strncmp(con_options, "SSL", 3)) con_ssl= 1; - else if (!strncmp(con_options, "COMPRESS", 8)) + else if (length == 8 && !strncmp(con_options, "COMPRESS", 8)) con_compress= 1; - else if (!strncmp(con_options, "PIPE", 4)) + else if (length == 4 && !strncmp(con_options, "PIPE", 4)) con_pipe= 1; - else if (!strncmp(con_options, "SHM", 3)) + else if (length == 3 && !strncmp(con_options, "SHM", 3)) con_shm= 1; else die("Illegal option to connect: %.*s", @@ -5096,14 +5099,13 @@ void do_connect(struct st_command *comma mysql_options(&con_slot->mysql, MYSQL_SHARED_MEMORY_BASE_NAME, ds_shm.str); mysql_options(&con_slot->mysql, MYSQL_OPT_PROTOCOL, &protocol); } - else if(shared_memory_base_name) + else if (shared_memory_base_name) { mysql_options(&con_slot->mysql, MYSQL_SHARED_MEMORY_BASE_NAME, - shared_memory_base_name); + shared_memory_base_name); } #endif - /* Use default db name */ if (ds_database.length == 0) dynstr_set(&ds_database, opt_db); @@ -6879,10 +6881,8 @@ void run_query_stmt(MYSQL *mysql, struct MYSQL_STMT *stmt; DYNAMIC_STRING ds_prepare_warnings; DYNAMIC_STRING ds_execute_warnings; - ulonglong affected_rows; DBUG_ENTER("run_query_stmt"); DBUG_PRINT("query", ("'%-.60s'", query)); - LINT_INIT(affected_rows); /* Init a new stmt if it's not already one created for this connection @@ -6981,6 +6981,9 @@ void run_query_stmt(MYSQL *mysql, struct handle_no_error(command); if (!disable_result_log) { + ulonglong affected_rows; + LINT_INIT(affected_rows); + /* Not all statements creates a result set. If there is one we can now create another normal result set that contains the meta @@ -7026,39 +7029,33 @@ void run_query_stmt(MYSQL *mysql, struct Need to grab affected rows information before getting warnings here */ - { - ulonglong affected_rows; - LINT_INIT(affected_rows); + if (!disable_info) + affected_rows= mysql_affected_rows(mysql); - if (!disable_info) - affected_rows= mysql_affected_rows(mysql); + if (!disable_warnings) + { + /* Get the warnings from execute */ - if (!disable_warnings) + /* Append warnings to ds - if there are any */ + if (append_warnings(&ds_execute_warnings, mysql) || + ds_execute_warnings.length || + ds_prepare_warnings.length || + ds_warnings->length) { - /* Get the warnings from execute */ - - /* Append warnings to ds - if there are any */ - if (append_warnings(&ds_execute_warnings, mysql) || - ds_execute_warnings.length || - ds_prepare_warnings.length || - ds_warnings->length) - { - dynstr_append_mem(ds, "Warnings:\n", 10); - if (ds_warnings->length) - dynstr_append_mem(ds, ds_warnings->str, - ds_warnings->length); - if (ds_prepare_warnings.length) - dynstr_append_mem(ds, ds_prepare_warnings.str, - ds_prepare_warnings.length); - if (ds_execute_warnings.length) - dynstr_append_mem(ds, ds_execute_warnings.str, - ds_execute_warnings.length); - } + dynstr_append_mem(ds, "Warnings:\n", 10); + if (ds_warnings->length) + dynstr_append_mem(ds, ds_warnings->str, + ds_warnings->length); + if (ds_prepare_warnings.length) + dynstr_append_mem(ds, ds_prepare_warnings.str, + ds_prepare_warnings.length); + if (ds_execute_warnings.length) + dynstr_append_mem(ds, ds_execute_warnings.str, + ds_execute_warnings.length); } - - if (!disable_info) - append_info(ds, affected_rows, mysql_info(mysql)); } + if (!disable_info) + append_info(ds, affected_rows, mysql_info(mysql)); } end: @@ -7235,7 +7232,6 @@ void run_query(struct st_connection *cn, } dynstr_free(&query_str); - } if (sp_protocol_enabled && @@ -7662,6 +7658,7 @@ int main(int argc, char **argv) my_bool q_send_flag= 0, abort_flag= 0; uint command_executed= 0, last_command_executed= 0; char save_file[FN_REFLEN]; + bool empty_result= FALSE; MY_INIT(argv[0]); save_file[0]= 0; @@ -7819,6 +7816,7 @@ int main(int argc, char **argv) verbose_msg("Start processing test commands from '%s' ...", cur_file->file_name); while (!read_command(&command) && !abort_flag) { + my_bool ok_to_do; int current_line_inc = 1, processed = 0; if (command->type == Q_UNKNOWN || command->type == Q_COMMENT_WITH_COMMAND) get_command_type(command); @@ -7831,7 +7829,7 @@ int main(int argc, char **argv) command->type= Q_COMMENT; } - my_bool ok_to_do= cur_block->ok; + ok_to_do= cur_block->ok; /* Some commands need to be "done" the first time if they may get re-iterated over in a true context. This can only happen if there's @@ -8167,8 +8165,6 @@ int main(int argc, char **argv) if (parsing_disabled) die("Test ended with parsing disabled"); - my_bool empty_result= FALSE; - /* The whole test has been executed _sucessfully_. Time to compare result or save it to record file. === modified file 'dbug/dbug.c' --- a/dbug/dbug.c 2009-09-07 20:50:10 +0000 +++ b/dbug/dbug.c 2009-12-07 00:52:40 +0000 @@ -497,12 +497,18 @@ int DbugParse(CODE_STATE *cs, const char const char *end; int rel, f_used=0; struct settings *stack; + int org_cs_locked; stack= cs->stack; + if (!(org_cs_locked= cs->locked)) + { + cs->locked= 1; + pthread_mutex_lock(&THR_LOCK_dbug); + } + if (control[0] == '-' && control[1] == '#') control+=2; - rel= control[0] == '+' || control[0] == '-'; if ((!rel || (!stack->out_file && !stack->next))) { @@ -550,9 +556,11 @@ int DbugParse(CODE_STATE *cs, const char while (control < end) { int c, sign= (*control == '+') ? 1 : (*control == '-') ? -1 : 0; - if (sign) control++; + if (sign) + control++; c= *control++; - if (*control == ',') control++; + if (*control == ',') + control++; /* XXX when adding new cases here, don't forget _db_explain_ ! */ switch (c) { case 'd': @@ -570,7 +578,7 @@ int DbugParse(CODE_STATE *cs, const char { if (DEBUGGING) stack->keywords= ListDel(stack->keywords, control, end); - break; + break; } stack->keywords= ListAdd(stack->keywords, control, end); stack->flags |= DEBUG_ON; @@ -718,8 +726,13 @@ int DbugParse(CODE_STATE *cs, const char control=end+1; end= DbugStrTok(control); } - return !rel || f_used; -} + if (!org_cs_locked) + { + pthread_mutex_unlock(&THR_LOCK_dbug); + cs->locked= 0; + } + return !rel || f_used;} + #define framep_trace_flag(cs, frp) (frp ? \ frp->level & TRACE_ON : \ @@ -1340,11 +1353,11 @@ void _db_doprnt_(const char *format,...) va_start(args,format); + if (!cs->locked) + pthread_mutex_lock(&THR_LOCK_dbug); if (_db_keyword_(cs, cs->u_keyword, 0)) { int save_errno=errno; - if (!cs->locked) - pthread_mutex_lock(&THR_LOCK_dbug); DoPrefix(cs, cs->u_line); if (TRACING) Indent(cs, cs->level + 1); @@ -1356,6 +1369,9 @@ void _db_doprnt_(const char *format,...) DbugFlush(cs); errno=save_errno; } + else if (!cs->locked) + pthread_mutex_unlock(&THR_LOCK_dbug); + va_end(args); } @@ -1386,10 +1402,10 @@ void _db_dump_(uint _line_, const char * CODE_STATE *cs; get_code_state_or_return; + if (!cs->locked) + pthread_mutex_lock(&THR_LOCK_dbug); if (_db_keyword_(cs, keyword, 0)) { - if (!cs->locked) - pthread_mutex_lock(&THR_LOCK_dbug); DoPrefix(cs, _line_); if (TRACING) { @@ -1420,6 +1436,8 @@ void _db_dump_(uint _line_, const char * (void) fputc('\n',cs->stack->out_file); DbugFlush(cs); } + else if (!cs->locked) + pthread_mutex_unlock(&THR_LOCK_dbug); } @@ -2105,7 +2123,8 @@ static void DBUGCloseFile(CODE_STATE *cs { if (fp != stderr && fp != stdout && fclose(fp) == EOF) { - pthread_mutex_lock(&THR_LOCK_dbug); + if (!cs->locked) + pthread_mutex_lock(&THR_LOCK_dbug); (void) fprintf(cs->stack->out_file, ERR_CLOSE, cs->process); perror(""); DbugFlush(cs); === modified file 'extra/yassl/taocrypt/include/block.hpp' --- a/extra/yassl/taocrypt/include/block.hpp 2009-02-10 22:47:54 +0000 +++ b/extra/yassl/taocrypt/include/block.hpp 2009-12-06 17:34:54 +0000 @@ -167,7 +167,8 @@ public: void CleanNew(word32 newSize) { New(newSize); - memset(buffer_, 0, sz_ * sizeof(T)); + if (sz_ > 0) + memset(buffer_, 0, sz_ * sizeof(T)); } void New(word32 newSize) === modified file 'mysql-test/lib/mtr_cases.pm' --- a/mysql-test/lib/mtr_cases.pm 2009-11-16 20:49:51 +0000 +++ b/mysql-test/lib/mtr_cases.pm 2009-12-06 17:34:54 +0000 @@ -101,7 +101,6 @@ sub init_pattern { sub collect_test_cases ($$) { my $suites= shift; # Semicolon separated list of test suites - my %found_suites; my $opt_cases= shift; my $cases= []; # Array of hash(one hash for each testcase) @@ -115,7 +114,6 @@ sub collect_test_cases ($$) { ["ha_innodb_plugin.dll", "ha_innodb_plugin.so", "ha_innodb_plugin.sl"], NOT_REQUIRED); - $do_innodb_plugin= ($::mysql_version_id >= 50100 && !(IS_WINDOWS && $::opt_embedded_server) && $lib_innodb_plugin); @@ -123,7 +121,6 @@ sub collect_test_cases ($$) { foreach my $suite (split(",", $suites)) { push(@$cases, collect_one_suite($suite, $opt_cases)); - $found_suites{$suite}= 1; last if $some_test_found; } @@ -136,12 +133,6 @@ sub collect_test_cases ($$) { { my $found= 0; my ($sname, $tname, $extension)= split_testname($test_name_spec); - if (defined($sname) && !defined($found_suites{$sname})) - { - $found_suites{$sname}= 1; - push(@$cases, collect_one_suite($sname)); - } - foreach my $test ( @$cases ) { # test->{name} is always in suite.name format @@ -247,7 +238,7 @@ sub split_testname { } -sub collect_one_suite($) +sub collect_one_suite { my $suite= shift; # Test suite name my $opt_cases= shift; @@ -767,7 +758,6 @@ sub process_opts_file { } } - ############################################################################## # # Collect information about a single test case === modified file 'mysql-test/lib/mtr_report.pm' --- a/mysql-test/lib/mtr_report.pm 2009-11-16 20:49:51 +0000 +++ b/mysql-test/lib/mtr_report.pm 2009-12-03 11:19:05 +0000 @@ -388,7 +388,7 @@ MSG } elsif (@$extra_warnings) { - mtr_error("There were errors/warnings in server logs after running test cases."); + mtr_error("There where errors/warnings in server logs after running test cases."); } elsif ($fail) { === modified file 'mysql-test/lib/v1/mysql-test-run.pl' --- a/mysql-test/lib/v1/mysql-test-run.pl 2009-02-15 10:58:34 +0000 +++ b/mysql-test/lib/v1/mysql-test-run.pl 2009-12-09 16:43:00 +0000 @@ -178,6 +178,7 @@ our @opt_extra_mysqltest_opt; our $opt_compress; our $opt_ssl; +our $opt_skip_ssl; our $opt_ssl_supported; our $opt_ps_protocol; our $opt_sp_protocol; === modified file 'mysql-test/mysql-test-run.pl' --- a/mysql-test/mysql-test-run.pl 2009-11-30 21:37:27 +0000 +++ b/mysql-test/mysql-test-run.pl 2009-12-06 17:34:54 +0000 @@ -201,10 +201,10 @@ my $opt_mark_progress; my $opt_sleep; -my $opt_testcase_timeout= 15; # minutes -my $opt_suite_timeout = 300; # minutes -my $opt_shutdown_timeout= 10; # seconds -my $opt_start_timeout = 180; # seconds +my $opt_testcase_timeout= 15; # 15 minutes +my $opt_suite_timeout = 360; # 6 hours +my $opt_shutdown_timeout= 10; # 10 seconds +my $opt_start_timeout = 180; # 180 seconds sub testcase_timeout { return $opt_testcase_timeout * 60; }; sub suite_timeout { return $opt_suite_timeout * 60; }; @@ -1319,6 +1319,8 @@ sub command_line_setup { { # Indicate that we are using debugger $glob_debugger= 1; + $opt_testcase_timeout= 60*60*24; # Don't abort debugging with timeout + $opt_suite_timeout= $opt_testcase_timeout; $opt_retry= 1; $opt_retry_failure= 1; @@ -2151,7 +2153,6 @@ sub environment_setup { # Create an environment variable to make it possible # to detect that valgrind is being used from test cases $ENV{'VALGRIND_TEST'}= $opt_valgrind; - } @@ -2908,8 +2909,8 @@ sub mysql_install_db { my $bootstrap_sql_file= "$opt_vardir/tmp/bootstrap.sql"; my $path_sql= my_find_file($install_basedir, - ["mysql", "sql/share", "share/mysql", - "share/mariadb", "share", "scripts"], + ["mysql", "sql/share", "share/mariadb", + "share/mysql", "share", "scripts"], "mysql_system_tables.sql", NOT_REQUIRED); @@ -3861,7 +3862,7 @@ sub extract_server_log ($$) { my ($error_log, $tname) = @_; # Open the servers .err log file and read all lines - # belonging to current tets into @lines + # belonging to current test into @lines my $Ferr = IO::File->new($error_log) or mtr_error("Could not open file '$error_log' for reading: $!"); @@ -5682,12 +5683,15 @@ Misc options servers to exit before finishing the process fast Run as fast as possible, dont't wait for servers to shutdown etc. - parallel=N Run tests in N parallel threads (default=1) + parallel=N Run tests in N parallel threads (default 1) Use parallel=auto for auto-setting of N repeat=N Run each test N number of times - retry=N Retry tests that fail N times, limit number of failures - to $opt_retry_failure - retry-failure=N Limit number of retries for a failed test + retry=N Retry tests that fail up to N times (default $opt_retry). + Retries are also limited by the maximum number of + failures before stopping, set with the --retry-failure + option + retry-failure=N When using the --retry option to retry failed tests, + stop when N failures have occured (default $opt_retry_failure) reorder Reorder tests to get fewer server restarts help Get this help text === modified file 'mysql-test/r/ctype_ucs.result' --- a/mysql-test/r/ctype_ucs.result 2008-12-23 14:21:01 +0000 +++ b/mysql-test/r/ctype_ucs.result 2009-12-03 12:02:37 +0000 @@ -1211,3 +1211,47 @@ HEX(DAYNAME(19700101)) 0427043504420432043504400433 SET character_set_connection=latin1; End of 5.0 tests +Start of 5.1 tests +SET NAMES utf8; +CREATE TABLE t1 ( +a varchar(10) CHARACTER SET ucs2 COLLATE ucs2_czech_ci, +key(a) +); +INSERT INTO t1 VALUES +('aa'),('bb'),('cc'),('dd'),('ee'),('ff'),('gg'),('hh'),('ii'), +('jj'),('kk'),('ll'),('mm'),('nn'),('oo'),('pp'),('rr'),('ss'), +('tt'),('uu'),('vv'),('ww'),('xx'),('yy'),('zz'); +INSERT INTO t1 VALUES ('ca'),('cz'),('ch'); +INSERT INTO t1 VALUES ('da'),('dz'), (X'0064017E'); +EXPLAIN SELECT * FROM t1 WHERE a LIKE 'b%'; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range a a 23 NULL 1 Using where; Using index +EXPLAIN SELECT * FROM t1 WHERE a LIKE 'c%'; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range a a 23 NULL 30 Using where; Using index +SELECT * FROM t1 WHERE a LIKE 'c%'; +a +ca +cc +cz +ch +EXPLAIN SELECT * FROM t1 WHERE a LIKE 'ch%'; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range a a 23 NULL 1 Using where; Using index +SELECT * FROM t1 WHERE a LIKE 'ch%'; +a +ch +ALTER TABLE t1 MODIFY a VARCHAR(10) CHARACTER SET ucs2 COLLATE ucs2_croatian_ci; +EXPLAIN SELECT * FROM t1 WHERE a LIKE 'd%'; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range a a 23 NULL 1 Using where; Using index +SELECT hex(concat('d',_ucs2 0x017E,'%')); +hex(concat('d',_ucs2 0x017E,'%')) +0064017E0025 +EXPLAIN SELECT * FROM t1 WHERE a LIKE concat('d',_ucs2 0x017E,'%'); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range a a 23 NULL 1 Using where; Using index +SELECT hex(a) FROM t1 WHERE a LIKE concat('D',_ucs2 0x017E,'%'); +hex(a) +0064017E +DROP TABLE t1; === modified file 'mysql-test/r/warnings.result' --- a/mysql-test/r/warnings.result 2009-09-10 08:49:49 +0000 +++ b/mysql-test/r/warnings.result 2009-12-06 17:26:12 +0000 @@ -319,3 +319,17 @@ SHOW ERRORS; Level Code Message Error 1051 Unknown table 't1' End of 5.0 tests +set sql_mode = default; +select CAST(a AS DECIMAL(13,5)) FROM (SELECT '' as a) t; +CAST(a AS DECIMAL(13,5)) +0.00000 +Warnings: +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Warning 1292 Truncated incorrect DECIMAL value: '' +create table t1 (a integer unsigned); +insert into t1 values (1),(-1),(0),(-2); +Warnings: +Warning 1264 Out of range value for column 'a' at row 2 +Warning 1264 Out of range value for column 'a' at row 4 +drop table t1; +End of 5.1 tests === modified file 'mysql-test/suite/federated/disabled.def' --- a/mysql-test/suite/federated/disabled.def 2009-10-30 18:50:56 +0000 +++ b/mysql-test/suite/federated/disabled.def 2009-11-14 19:33:59 +0000 @@ -9,5 +9,4 @@ # Do not use any TAB characters for whitespace. # ############################################################################## -federated_server : needs fixup === modified file 'mysql-test/suite/federated/federated_server.result' --- a/mysql-test/suite/federated/federated_server.result 2009-10-30 18:50:56 +0000 +++ b/mysql-test/suite/federated/federated_server.result 2009-11-14 19:33:59 +0000 @@ -175,6 +175,8 @@ CREATE TABLE db_bogus.t1 ( ) ; INSERT INTO db_bogus.t1 VALUES ('2','this is bogus'); +create user test_fed@localhost identified by 'foo'; +grant all on db_legitimate.* to test_fed@localhost; create server 's1' foreign data wrapper 'mysql' options (HOST '127.0.0.1', DATABASE 'db_legitimate', @@ -211,15 +213,14 @@ id name alter server s1 options (database 'db_bogus'); flush tables; select * from federated.t1; -id name -2 this is bogus +ERROR HY000: There was a problem processing the query on the foreign data source. Data source error: : 1044 : Access denied for user 'test_fed'@'localhost' to databa drop server if exists 's1'; ERROR 42000: Access denied; you need the SUPER privilege for this operation create server 's1' foreign data wrapper 'mysql' options (HOST '127.0.0.1', DATABASE 'db_legitimate', -USER 'root', -PASSWORD '', +USER 'test_fed', +PASSWORD 'foo', PORT SLAVE_PORT, SOCKET '', OWNER 'root'); @@ -228,8 +229,8 @@ drop server 's1'; create server 's1' foreign data wrapper 'mysql' options (HOST '127.0.0.1', DATABASE 'db_legitimate', -USER 'root', -PASSWORD '', +USER 'test_fed', +PASSWORD 'foo', PORT SLAVE_PORT, SOCKET '', OWNER 'root'); @@ -237,6 +238,7 @@ flush tables; select * from federated.t1; id name 1 this is legitimate +drop user test_fed@localhost; drop database db_legitimate; drop database db_bogus; drop user guest_super@localhost; @@ -275,6 +277,6 @@ call p1(); drop procedure p1; drop server if exists s; DROP TABLE IF EXISTS federated.t1; -DROP DATABASE federated; +DROP DATABASE IF EXISTS federated; DROP TABLE IF EXISTS federated.t1; -DROP DATABASE federated; +DROP DATABASE IF EXISTS federated; === modified file 'mysql-test/suite/federated/federated_server.test' --- a/mysql-test/suite/federated/federated_server.test 2009-10-30 18:50:56 +0000 +++ b/mysql-test/suite/federated/federated_server.test 2009-11-14 19:33:59 +0000 @@ -239,6 +239,7 @@ alter server s1 options (database 'db_bo connection master; flush tables; +--error ER_QUERY_ON_FOREIGN_DATA_SOURCE select * from federated.t1; connection conn_select; @@ -249,8 +250,8 @@ drop server if exists 's1'; eval create server 's1' foreign data wrapper 'mysql' options (HOST '127.0.0.1', DATABASE 'db_legitimate', - USER 'root', - PASSWORD '', + USER 'test_fed', + PASSWORD 'foo', PORT $SLAVE_MYPORT, SOCKET '', OWNER 'root'); @@ -261,8 +262,8 @@ drop server 's1'; eval create server 's1' foreign data wrapper 'mysql' options (HOST '127.0.0.1', DATABASE 'db_legitimate', - USER 'root', - PASSWORD '', + USER 'test_fed', + PASSWORD 'foo', PORT $SLAVE_MYPORT, SOCKET '', OWNER 'root'); @@ -273,6 +274,7 @@ select * from federated.t1; # clean up test connection slave; +drop user test_fed@localhost; drop database db_legitimate; drop database db_bogus; === modified file 'mysql-test/suite/funcs_1/r/innodb_func_view.result' --- a/mysql-test/suite/funcs_1/r/innodb_func_view.result 2009-05-15 12:57:51 +0000 +++ b/mysql-test/suite/funcs_1/r/innodb_func_view.result 2009-12-06 17:26:12 +0000 @@ -3372,9 +3372,9 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 29 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 SHOW CREATE VIEW v1; View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varbinary_1000` as decimal(37,2)) AS `CAST(my_varbinary_1000 AS DECIMAL(37,2))`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci @@ -3389,9 +3389,9 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 29 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 DROP VIEW v1; @@ -3408,11 +3408,11 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 28 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: '' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: '<--------30 characters------->' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: ' ---���*$-- ' Warning 1292 Truncated incorrect DECIMAL value: '-1' Warning 1292 Truncated incorrect DECIMAL value: '-3333.3333' @@ -3430,11 +3430,11 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 28 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: '' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: '<--------30 characters------->' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: ' ---���*$-- ' Warning 1292 Truncated incorrect DECIMAL value: '-1' Warning 1292 Truncated incorrect DECIMAL value: '-3333.3333' @@ -3454,9 +3454,9 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 27 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 SHOW CREATE VIEW v1; View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varchar_1000` as decimal(37,2)) AS `CAST(my_varchar_1000 AS DECIMAL(37,2))`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci @@ -3471,9 +3471,9 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 27 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 DROP VIEW v1; @@ -3490,11 +3490,11 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 26 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: ' ' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: '<--------30 characters------->' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: ' ---���*$-- ' SHOW CREATE VIEW v1; View Create View character_set_client collation_connection @@ -3510,11 +3510,11 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 26 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: ' ' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: '<--------30 characters------->' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: ' ---���*$-- ' DROP VIEW v1; === modified file 'mysql-test/suite/funcs_1/r/memory_func_view.result' --- a/mysql-test/suite/funcs_1/r/memory_func_view.result 2009-02-14 16:00:11 +0000 +++ b/mysql-test/suite/funcs_1/r/memory_func_view.result 2009-12-06 17:26:12 +0000 @@ -3373,9 +3373,9 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 29 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 SHOW CREATE VIEW v1; View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varbinary_1000` as decimal(37,2)) AS `CAST(my_varbinary_1000 AS DECIMAL(37,2))`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci @@ -3390,9 +3390,9 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 29 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 DROP VIEW v1; @@ -3409,11 +3409,11 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 28 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: '' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: '<--------30 characters------->' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: ' ---���*$-- ' Warning 1292 Truncated incorrect DECIMAL value: '-1' Warning 1292 Truncated incorrect DECIMAL value: '-3333.3333' @@ -3431,11 +3431,11 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 28 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: '' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: '<--------30 characters------->' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: ' ---���*$-- ' Warning 1292 Truncated incorrect DECIMAL value: '-1' Warning 1292 Truncated incorrect DECIMAL value: '-3333.3333' @@ -3455,9 +3455,9 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 27 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 SHOW CREATE VIEW v1; View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varchar_1000` as decimal(37,2)) AS `CAST(my_varchar_1000 AS DECIMAL(37,2))`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci @@ -3472,9 +3472,9 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 27 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 DROP VIEW v1; @@ -3491,11 +3491,11 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 26 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: ' ' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: '<--------30 characters------->' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: ' ---���*$-- ' SHOW CREATE VIEW v1; View Create View character_set_client collation_connection @@ -3511,11 +3511,11 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 26 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: ' ' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: '<--------30 characters------->' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: ' ---���*$-- ' DROP VIEW v1; === modified file 'mysql-test/suite/funcs_1/r/myisam_func_view.result' --- a/mysql-test/suite/funcs_1/r/myisam_func_view.result 2009-02-14 16:00:11 +0000 +++ b/mysql-test/suite/funcs_1/r/myisam_func_view.result 2009-12-06 17:26:12 +0000 @@ -3373,9 +3373,9 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 29 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 SHOW CREATE VIEW v1; View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varbinary_1000` as decimal(37,2)) AS `CAST(my_varbinary_1000 AS DECIMAL(37,2))`,`t1_values`.`my_varbinary_1000` AS `my_varbinary_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci @@ -3390,9 +3390,9 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 29 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 DROP VIEW v1; @@ -3409,11 +3409,11 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 28 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: '' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: '<--------30 characters------->' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: ' ---���*$-- ' Warning 1292 Truncated incorrect DECIMAL value: '-1' Warning 1292 Truncated incorrect DECIMAL value: '-3333.3333' @@ -3431,11 +3431,11 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 28 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: '' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: '<--------30 characters------->' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: ' ---���*$-- ' Warning 1292 Truncated incorrect DECIMAL value: '-1' Warning 1292 Truncated incorrect DECIMAL value: '-3333.3333' @@ -3455,9 +3455,9 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 27 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 SHOW CREATE VIEW v1; View Create View character_set_client collation_connection v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(`t1_values`.`my_varchar_1000` as decimal(37,2)) AS `CAST(my_varchar_1000 AS DECIMAL(37,2))`,`t1_values`.`my_varchar_1000` AS `my_varchar_1000`,`t1_values`.`id` AS `id` from `t1_values` latin1 latin1_swedish_ci @@ -3472,9 +3472,9 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 27 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 +Error 1366 Incorrect decimal value: '' for column '' at row 0 DROP VIEW v1; @@ -3491,11 +3491,11 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 26 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: ' ' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: '<--------30 characters------->' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: ' ---���*$-- ' SHOW CREATE VIEW v1; View Create View character_set_client collation_connection @@ -3511,11 +3511,11 @@ NULL NULL 1 -1.00 -1 5 -3333.33 -3333.3333 26 Warnings: -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: ' ' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: '<--------30 characters------->' -Error 1366 Incorrect decimal value: '' for column '' at row -1 +Error 1366 Incorrect decimal value: '' for column '' at row 0 Warning 1292 Truncated incorrect DECIMAL value: ' ---���*$-- ' DROP VIEW v1; === modified file 'mysql-test/t/ctype_ucs.test' --- a/mysql-test/t/ctype_ucs.test 2008-12-23 14:21:01 +0000 +++ b/mysql-test/t/ctype_ucs.test 2009-12-03 12:02:37 +0000 @@ -723,3 +723,34 @@ SELECT HEX(DAYNAME(19700101)); SET character_set_connection=latin1; --echo End of 5.0 tests + + +--echo Start of 5.1 tests +# +# Checking my_like_range_ucs2 +# +SET NAMES utf8; +CREATE TABLE t1 ( + a varchar(10) CHARACTER SET ucs2 COLLATE ucs2_czech_ci, + key(a) +); +INSERT INTO t1 VALUES +('aa'),('bb'),('cc'),('dd'),('ee'),('ff'),('gg'),('hh'),('ii'), +('jj'),('kk'),('ll'),('mm'),('nn'),('oo'),('pp'),('rr'),('ss'), +('tt'),('uu'),('vv'),('ww'),('xx'),('yy'),('zz'); +INSERT INTO t1 VALUES ('ca'),('cz'),('ch'); +INSERT INTO t1 VALUES ('da'),('dz'), (X'0064017E'); +# This one should scan only one row +EXPLAIN SELECT * FROM t1 WHERE a LIKE 'b%'; +# This one should scan many rows: 'c' is a contraction head +EXPLAIN SELECT * FROM t1 WHERE a LIKE 'c%'; +SELECT * FROM t1 WHERE a LIKE 'c%'; +EXPLAIN SELECT * FROM t1 WHERE a LIKE 'ch%'; +SELECT * FROM t1 WHERE a LIKE 'ch%'; +ALTER TABLE t1 MODIFY a VARCHAR(10) CHARACTER SET ucs2 COLLATE ucs2_croatian_ci; +EXPLAIN SELECT * FROM t1 WHERE a LIKE 'd%'; +SELECT hex(concat('d',_ucs2 0x017E,'%')); +EXPLAIN SELECT * FROM t1 WHERE a LIKE concat('d',_ucs2 0x017E,'%'); +SELECT hex(a) FROM t1 WHERE a LIKE concat('D',_ucs2 0x017E,'%'); + +DROP TABLE t1; === modified file 'mysql-test/t/warnings.test' --- a/mysql-test/t/warnings.test 2009-11-16 20:49:51 +0000 +++ b/mysql-test/t/warnings.test 2009-12-06 17:26:12 +0000 @@ -194,7 +194,6 @@ DROP PROCEDURE sp1; DROP PROCEDURE sp2; DROP PROCEDURE sp3; - # # Bug#30059: End-space truncation warnings are inconsistent or incorrect # @@ -235,3 +234,15 @@ DROP TABLE t1; SHOW ERRORS; --echo End of 5.0 tests + +# +# Test warning with row numbers +# + +set sql_mode = default; +select CAST(a AS DECIMAL(13,5)) FROM (SELECT '' as a) t; +create table t1 (a integer unsigned); +insert into t1 values (1),(-1),(0),(-2); +drop table t1; + +--echo End of 5.1 tests === modified file 'plugin/fulltext/plugin_example.c' --- a/plugin/fulltext/plugin_example.c 2007-04-26 19:26:04 +0000 +++ b/plugin/fulltext/plugin_example.c 2009-12-06 17:34:54 +0000 @@ -145,7 +145,7 @@ static int simple_parser_deinit(MYSQL_FT the list of search terms when parsing a search string. */ -static void add_word(MYSQL_FTPARSER_PARAM *param, char *word, size_t len) +static void add_word(MYSQL_FTPARSER_PARAM *param, const unsigned char *word, size_t len) { MYSQL_FTPARSER_BOOLEAN_INFO bool_info= { FT_TOKEN_WORD, 0, 0, 0, 0, ' ', 0 }; @@ -169,7 +169,7 @@ static void add_word(MYSQL_FTPARSER_PARA static int simple_parser_parse(MYSQL_FTPARSER_PARAM *param) { - char *end, *start, *docend= param->doc + param->length; + const unsigned char *end, *start, *docend= param->doc + param->length; number_of_calls++; === modified file 'sql-common/client.c' --- a/sql-common/client.c 2009-11-16 20:49:51 +0000 +++ b/sql-common/client.c 2009-12-03 15:26:54 +0000 @@ -3208,7 +3208,7 @@ const char * STDCALL mysql_error(MYSQL * mysql Connection EXAMPLE - 4.1.0-alfa -> 40100 + MariaDB-4.1.0-alfa -> 40100 NOTES We will ensure that a newer server always has a bigger number. @@ -3221,7 +3221,11 @@ ulong STDCALL mysql_get_server_version(MYSQL *mysql) { uint major, minor, version; - char *pos= mysql->server_version, *end_pos; + const char *pos= mysql->server_version; + char *end_pos; + /* Skip possible prefix */ + while (*pos && !my_isdigit(&my_charset_latin1, *pos)) + pos++; major= (uint) strtoul(pos, &end_pos, 10); pos=end_pos+1; minor= (uint) strtoul(pos, &end_pos, 10); pos=end_pos+1; version= (uint) strtoul(pos, &end_pos, 10); === modified file 'sql/my_decimal.cc' --- a/sql/my_decimal.cc 2008-11-27 11:33:04 +0000 +++ b/sql/my_decimal.cc 2009-12-06 17:26:12 +0000 @@ -38,7 +38,7 @@ int decimal_operation_results(int result case E_DEC_TRUNCATED: push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, ER(WARN_DATA_TRUNCATED), - "", (long)-1); + "", (ulong) 0); break; case E_DEC_OVERFLOW: push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR, @@ -54,7 +54,7 @@ int decimal_operation_results(int result push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR, ER_TRUNCATED_WRONG_VALUE_FOR_FIELD, ER(ER_TRUNCATED_WRONG_VALUE_FOR_FIELD), - "decimal", "", "", (long)-1); + "decimal", "", "", (ulong) 0); break; case E_DEC_OOM: my_error(ER_OUT_OF_RESOURCES, MYF(0)); === modified file 'sql/mysqld.cc' --- a/sql/mysqld.cc 2009-11-30 21:37:27 +0000 +++ b/sql/mysqld.cc 2009-12-04 15:12:22 +0000 @@ -4169,8 +4169,10 @@ server."); Need to unlock as global_system_variables.table_plugin was acquired during plugin_init() */ + pthread_mutex_lock(&LOCK_global_system_variables); plugin_unlock(0, global_system_variables.table_plugin); global_system_variables.table_plugin= plugin; + pthread_mutex_unlock(&LOCK_global_system_variables); } } #if defined(WITH_MARIA_STORAGE_ENGINE) && defined(USE_MARIA_FOR_TMP_TABLES) === modified file 'sql/share/errmsg.txt' --- a/sql/share/errmsg.txt 2009-11-16 20:49:51 +0000 +++ b/sql/share/errmsg.txt 2009-12-06 17:26:12 +0000 @@ -3173,22 +3173,22 @@ ER_CANT_CREATE_THREAD swe "Kan inte skapa en ny tr�(errno %d)" ukr "��� ���� �� Ǧ��(����%d). � � � ������������ � ����� �������� ��� �- ����� ����� ER_WRONG_VALUE_COUNT_ON_ROW 21S01 - cze "Po-B� sloupc�dpov� po� hodnot na � %ld" - dan "Kolonne antallet stemmer ikke overens med antallet af v�ier i post %ld" - nla "Kolom aantal komt niet overeen met waarde aantal in rij %ld" - eng "Column count doesn't match value count at row %ld" - est "Tulpade hulk erineb v�tuste hulgast real %ld" - ger "Anzahl der Felder stimmt nicht mit der Anzahl der Werte in Zeile %ld �n" - hun "Az oszlopban talalhato ertek nem egyezik meg a %ld sorban szamitott ertekkel" - ita "Il numero delle colonne non corrisponde al conteggio alla riga %ld" - kor "Row %ld���� Į�� ī����value ī�����ġ�� �ʽ�ϴ�" - por "Contagem de colunas n�confere com a contagem de valores na linha %ld" - rum "Numarul de coloane nu corespunde cu numarul de valori la linia %ld" - rus "��������� � ���������������� ���� %ld" - serbian "Broj kolona ne odgovara broju vrednosti u slogu %ld" - spa "El n� de columnas no corresponde al n� en la l�a %ld" - swe "Antalet kolumner motsvarar inte antalet v�en p�ad: %ld" - ukr "����������� ����� �˦�˦���������æ %ld" + cze "Po-B� sloupc�dpov� po� hodnot na � %lu" + dan "Kolonne antallet stemmer ikke overens med antallet af v�ier i post %lu" + nla "Kolom aantal komt niet overeen met waarde aantal in rij %lu" + eng "Column count doesn't match value count at row %lu" + est "Tulpade hulk erineb v�tuste hulgast real %lu" + ger "Anzahl der Felder stimmt nicht mit der Anzahl der Werte in Zeile %lu �n" + hun "Az oszlopban talalhato ertek nem egyezik meg a %lu sorban szamitott ertekkel" + ita "Il numero delle colonne non corrisponde al conteggio alla riga %lu" + kor "Row %lu���� Į�� ī����value ī�����ġ�� �ʽ�ϴ�" + por "Contagem de colunas n�confere com a contagem de valores na linha %lu" + rum "Numarul de coloane nu corespunde cu numarul de valori la linia %lu" + rus "��������� � ���������������� ���� %lu" + serbian "Broj kolona ne odgovara broju vrednosti u slogu %lu" + spa "El n� de columnas no corresponde al n� en la l�a %lu" + swe "Antalet kolumner motsvarar inte antalet v�en p�ad: %lu" + ukr "����������� ����� �˦�˦���������æ %lu" ER_CANT_REOPEN_TABLE cze "Nemohu znovuotev-B�abulku: '%-.192s" dan "Kan ikke gen�e tabel '%-.192s" @@ -4887,29 +4887,29 @@ ER_CUT_VALUE_GROUP_CONCAT swe "%d rad(er) kapades av group_concat()" ukr "%d line(s) was(were) cut by group_concat()" ER_WARN_TOO_FEW_RECORDS 01000 - eng "Row %ld doesn't contain data for all columns" - ger "Zeile %ld enth� nicht f�e Felder Daten" - nla "Rij %ld bevat niet de data voor alle kolommen" - por "Conta de registro �enor que a conta de coluna na linha %ld" - spa "L�a %ld no contiene datos para todas las columnas" + eng "Row %lu doesn't contain data for all columns" + ger "Zeile %lu enth� nicht f�e Felder Daten" + nla "Rij %lu bevat niet de data voor alle kolommen" + por "Conta de registro �enor que a conta de coluna na linha %lu" + spa "L�a %lu no contiene datos para todas las columnas" ER_WARN_TOO_MANY_RECORDS 01000 - eng "Row %ld was truncated; it contained more data than there were input columns" - ger "Zeile %ld gek�die Zeile enthielt mehr Daten, als es Eingabefelder gibt" - nla "Regel %ld ingekort, bevatte meer data dan invoer kolommen" - por "Conta de registro �aior que a conta de coluna na linha %ld" - spa "L�a %ld fu�runcada; La misma contine mas datos que las que existen en las columnas de entrada" + eng "Row %lu was truncated; it contained more data than there were input columns" + ger "Zeile %lu gek�die Zeile enthielt mehr Daten, als es Eingabefelder gibt" + nla "Regel %lu ingekort, bevatte meer data dan invoer kolommen" + por "Conta de registro �aior que a conta de coluna na linha %lu" + spa "L�a %lu fu�runcada; La misma contine mas datos que las que existen en las columnas de entrada" ER_WARN_NULL_TO_NOTNULL 22004 - eng "Column set to default value; NULL supplied to NOT NULL column '%s' at row %ld" - ger "Feld auf Vorgabewert gesetzt, da NULL f�-NULL-Feld '%s' in Zeile %ld angegeben" - por "Dado truncado, NULL fornecido para NOT NULL coluna '%s' na linha %ld" - spa "Datos truncado, NULL suministrado para NOT NULL columna '%s' en la l�a %ld" + eng "Column set to default value; NULL supplied to NOT NULL column '%s' at row %lu" + ger "Feld auf Vorgabewert gesetzt, da NULL f�-NULL-Feld '%s' in Zeile %lu angegeben" + por "Dado truncado, NULL fornecido para NOT NULL coluna '%s' na linha %lu" + spa "Datos truncado, NULL suministrado para NOT NULL columna '%s' en la l�a %lu" ER_WARN_DATA_OUT_OF_RANGE 22003 - eng "Out of range value for column '%s' at row %ld" + eng "Out of range value for column '%s' at row %lu" WARN_DATA_TRUNCATED 01000 - eng "Data truncated for column '%s' at row %ld" - ger "Daten abgeschnitten f�d '%s' in Zeile %ld" - por "Dado truncado para coluna '%s' na linha %ld" - spa "Datos truncados para columna '%s' en la l�a %ld" + eng "Data truncated for column '%s' at row %lu" + ger "Daten abgeschnitten f�d '%s' in Zeile %lu" + por "Dado truncado para coluna '%s' na linha %lu" + spa "Datos truncados para columna '%s' en la l�a %lu" ER_WARN_USING_OTHER_HANDLER eng "Using storage engine %s for table '%s'" ger "F�elle '%s' wird Speicher-Engine %s benutzt" @@ -5090,8 +5090,8 @@ ER_UNKNOWN_TIME_ZONE eng "Unknown or incorrect time zone: '%-.64s'" ger "Unbekannte oder falsche Zeitzone: '%-.64s'" ER_WARN_INVALID_TIMESTAMP - eng "Invalid TIMESTAMP value in column '%s' at row %ld" - ger "Ung�r TIMESTAMP-Wert in Feld '%s', Zeile %ld" + eng "Invalid TIMESTAMP value in column '%s' at row %lu" + ger "Ung�r TIMESTAMP-Wert in Feld '%s', Zeile %lu" ER_INVALID_CHARACTER_STRING eng "Invalid %s character string: '%.64s'" ger "Ung�r %s-Zeichen-String: '%.64s'" @@ -5322,8 +5322,8 @@ ER_DIVISION_BY_ZERO 22012 eng "Division by 0" ger "Division durch 0" ER_TRUNCATED_WRONG_VALUE_FOR_FIELD - eng "Incorrect %-.32s value: '%-.128s' for column '%.192s' at row %ld" - ger "Falscher %-.32s-Wert: '%-.128s' f�d '%.192s' in Zeile %ld" + eng "Incorrect %-.32s value: '%-.128s' for column '%.192s' at row %lu" + ger "Falscher %-.32s-Wert: '%-.128s' f�d '%.192s' in Zeile %lu" ER_ILLEGAL_VALUE_FOR_TYPE 22007 eng "Illegal %s '%-.192s' value found during parsing" ger "Nicht zul�iger %s-Wert '%-.192s' beim Parsen gefunden" @@ -5456,8 +5456,8 @@ ER_PROC_AUTO_REVOKE_FAIL eng "Failed to revoke all privileges to dropped routine" ger "R�me aller Rechte f� gel�te Routine fehlgeschlagen" ER_DATA_TOO_LONG 22001 - eng "Data too long for column '%s' at row %ld" - ger "Daten zu lang f�d '%s' in Zeile %ld" + eng "Data too long for column '%s' at row %lu" + ger "Daten zu lang f�d '%s' in Zeile %lu" ER_SP_BAD_SQLSTATE 42000 eng "Bad SQLSTATE: '%s'" ger "Ung�r SQLSTATE: '%s'" === modified file 'sql/slave.cc' --- a/sql/slave.cc 2009-11-16 20:49:51 +0000 +++ b/sql/slave.cc 2009-12-06 17:51:48 +0000 @@ -1117,18 +1117,27 @@ be equal for the Statement-format replic goto err; } } - else if (is_network_error(mysql_errno(mysql))) + else if (is_network_error(err_code= mysql_errno(mysql))) { - mi->report(WARNING_LEVEL, mysql_errno(mysql), - "Get master TIME_ZONE failed with error: %s", mysql_error(mysql)); + mi->report(ERROR_LEVEL, err_code, + "Get master TIME_ZONE failed with error: %s", + mysql_error(mysql)); goto network_err; - } + } + else if (err_code == ER_UNKNOWN_SYSTEM_VARIABLE) + { + /* We use ERROR_LEVEL to get the error logged to file */ + mi->report(ERROR_LEVEL, err_code, + + "MySQL master doesn't have a TIME_ZONE variable. Note that" + "if your timezone is not same between master and slave, your " + "slave may get wrong data into timestamp columns"); + } else { /* Fatal error */ errmsg= "The slave I/O thread stops because a fatal error is encountered \ when it try to get the value of TIME_ZONE global variable from master."; - err_code= mysql_errno(mysql); sprintf(err_buff, "%s Error: %s", errmsg, mysql_error(mysql)); goto err; } === modified file 'sql/sql_base.cc' --- a/sql/sql_base.cc 2009-11-30 21:37:27 +0000 +++ b/sql/sql_base.cc 2009-12-04 15:12:22 +0000 @@ -8488,19 +8488,26 @@ bool remove_table_from_cache(THD *thd, c result=1; } /* Kill delayed insert threads */ - if ((in_use->system_thread & SYSTEM_THREAD_DELAYED_INSERT) && - ! in_use->killed) + if ((in_use->system_thread & SYSTEM_THREAD_DELAYED_INSERT)) { - in_use->killed= THD::KILL_CONNECTION; - pthread_mutex_lock(&in_use->mysys_var->mutex); - if (in_use->mysys_var->current_cond) - { - pthread_mutex_lock(in_use->mysys_var->current_mutex); - signalled= 1; - pthread_cond_broadcast(in_use->mysys_var->current_cond); - pthread_mutex_unlock(in_use->mysys_var->current_mutex); - } - pthread_mutex_unlock(&in_use->mysys_var->mutex); + if (!in_use->killed) + { + in_use->killed= THD::KILL_CONNECTION; + pthread_mutex_lock(&in_use->mysys_var->mutex); + if (in_use->mysys_var->current_cond) + { + pthread_mutex_lock(in_use->mysys_var->current_mutex); + signalled= 1; + pthread_cond_broadcast(in_use->mysys_var->current_cond); + pthread_mutex_unlock(in_use->mysys_var->current_mutex); + } + pthread_mutex_unlock(&in_use->mysys_var->mutex); + } + /* + Don't abort locks. Instead give the delayed insert thread + time to finish it's inserts and die gracefully. + */ + continue; } /* Now we must abort all tables locks used by this thread === modified file 'sql/sql_class.cc' --- a/sql/sql_class.cc 2009-11-30 21:37:27 +0000 +++ b/sql/sql_class.cc 2009-12-04 15:12:22 +0000 @@ -2046,7 +2046,7 @@ bool select_export::send_data(List<Item> ER_TRUNCATED_WRONG_VALUE_FOR_FIELD, ER(ER_TRUNCATED_WRONG_VALUE_FOR_FIELD), "string", printable_buff, - item->name, row_count); + item->name, (ulong) row_count); } cvt_str.length(bytes); res= &cvt_str; === modified file 'sql/sql_insert.cc' --- a/sql/sql_insert.cc 2009-11-30 21:37:27 +0000 +++ b/sql/sql_insert.cc 2009-12-04 15:12:22 +0000 @@ -2618,7 +2618,7 @@ bool Delayed_insert::handle_inserts(void or if another thread is removing the current table definition from the table cache. */ - my_error(ER_DELAYED_CANT_CHANGE_LOCK,MYF(ME_FATALERROR), + my_error(ER_DELAYED_CANT_CHANGE_LOCK, MYF(ME_FATALERROR | ME_NOREFRESH), table->s->table_name.str); goto err; } @@ -2791,10 +2791,11 @@ bool Delayed_insert::handle_inserts(void query_cache_invalidate3(&thd, table, 1); if (thr_reschedule_write_lock(*thd.lock->locks)) { - /* This is not known to happen. */ - my_error(ER_DELAYED_CANT_CHANGE_LOCK,MYF(ME_FATALERROR), - table->s->table_name.str); - goto err; + /* This is not known to happen. */ + my_error(ER_DELAYED_CANT_CHANGE_LOCK, + MYF(ME_FATALERROR | ME_NOREFRESH), + table->s->table_name.str); + goto err; } if (!using_bin_log) table->file->extra(HA_EXTRA_WRITE_CACHE); === modified file 'storage/federatedx/ha_federatedx.cc' --- a/storage/federatedx/ha_federatedx.cc 2009-11-30 21:37:27 +0000 +++ b/storage/federatedx/ha_federatedx.cc 2009-12-03 11:34:11 +0000 @@ -1,5 +1,5 @@ /* -Copyright (c) 2008, Patrick Galbraith +Copyright (c) 2008-2009, Patrick Galbraith & Antony Curtis All rights reserved. Redistribution and use in source and binary forms, with or without @@ -308,7 +308,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE */ -#define MYSQL_SERVER 1q +#define MYSQL_SERVER 1 #include "mysql_priv.h" #include <mysql/plugin.h> @@ -1627,7 +1627,13 @@ static int free_server(federatedx_txn *t { MEM_ROOT mem_root; - txn->close(server); + if (!txn) + { + federatedx_txn tmp_txn; + tmp_txn.close(server); + } + else + txn->close(server); DBUG_ASSERT(server->io_count == 0); @@ -1785,21 +1791,25 @@ int ha_federatedx::close(void) if (stored_result) retval= free_result(); - /* Disconnect from mysql. thd may be null during refresh */ - txn= thd ? get_txn(thd, true) : new federatedx_txn(); + /* Disconnect from mysql */ + if (!thd || !(txn= get_txn(thd, true))) + { + federatedx_txn tmp_txn; + + tmp_txn.release(&io); - if (txn) + DBUG_ASSERT(io == NULL); + + if ((error= free_share(&tmp_txn, share))) + retval= error; + } + else { txn->release(&io); - DBUG_ASSERT(io == NULL); if ((error= free_share(txn, share))) retval= error; - - if (!thd) - delete txn; - } DBUG_RETURN(retval); } @@ -2793,14 +2803,16 @@ int ha_federatedx::rnd_end() int ha_federatedx::free_result() { int error; + federatedx_io *tmp_io= 0, **iop; DBUG_ASSERT(stored_result); - if ((error= txn->acquire(share, FALSE, &io))) + if (!*(iop= &io) && (error= txn->acquire(share, TRUE, (iop= &tmp_io)))) { DBUG_ASSERT(0); // Fail when testing return error; } - io->free_result(stored_result); + (*iop)->free_result(stored_result); stored_result= 0; + txn->release(&tmp_io); return 0; } @@ -2985,7 +2997,7 @@ int ha_federatedx::info(uint flag) { char error_buffer[FEDERATEDX_QUERY_BUFFER_SIZE]; uint error_code; - federatedx_io *tmp_io= 0; + federatedx_io *tmp_io= 0, **iop= 0; DBUG_ENTER("ha_federatedx::info"); error_code= ER_QUERY_ON_FOREIGN_DATA_SOURCE; @@ -2993,7 +3005,7 @@ int ha_federatedx::info(uint flag) /* we want not to show table status if not needed to do so */ if (flag & (HA_STATUS_VARIABLE | HA_STATUS_CONST | HA_STATUS_AUTO)) { - if ((error_code= txn->acquire(share, TRUE, &tmp_io))) + if (!*(iop= &io) && (error_code= txn->acquire(share, TRUE, (iop= &tmp_io)))) goto fail; } @@ -3006,13 +3018,13 @@ int ha_federatedx::info(uint flag) if (flag & HA_STATUS_CONST) stats.block_size= 4096; - if (tmp_io->table_metadata(&stats, share->table_name, + if ((*iop)->table_metadata(&stats, share->table_name, share->table_name_length, flag)) goto error; } if (flag & HA_STATUS_AUTO) - stats.auto_increment_value= tmp_io->last_insert_id(); + stats.auto_increment_value= (*iop)->last_insert_id(); /* If ::info created it's own transaction, close it. This happens in case @@ -3023,10 +3035,10 @@ int ha_federatedx::info(uint flag) DBUG_RETURN(0); error: - if (tmp_io) + if (iop && *iop) { my_sprintf(error_buffer, (error_buffer, ": %d : %s", - tmp_io->error_code(), tmp_io->error_str())); + (*iop)->error_code(), (*iop)->error_str())); my_error(error_code, MYF(0), error_buffer); } else === modified file 'strings/ctype-ucs2.c' --- a/strings/ctype-ucs2.c 2009-11-30 12:42:24 +0000 +++ b/strings/ctype-ucs2.c 2009-12-03 12:02:37 +0000 @@ -1498,6 +1498,14 @@ void my_hash_sort_ucs2_bin(CHARSET_INFO } } + +static inline my_wc_t +ucs2_to_wc(const uchar *ptr) +{ + return (((uint) ptr[0]) << 8) + ptr[1]; +} + + /* ** Calculate min_str and max_str that ranges a LIKE string. ** Arguments: @@ -1531,6 +1539,7 @@ my_bool my_like_range_ucs2(CHARSET_INFO for ( ; ptr + 1 < end && min_str + 1 < min_end && charlen > 0 ; ptr+=2, charlen--) { + my_wc_t wc; if (ptr[0] == '\0' && ptr[1] == escape && ptr + 1 < end) { ptr+=2; /* Skip escape */ @@ -1567,9 +1576,9 @@ fill_max_and_min: } if (have_contractions && ptr + 3 < end && - ptr[0] == '\0' && - my_uca_can_be_contraction_head(cs, (uchar) ptr[1])) + my_uca_can_be_contraction_head(cs, (wc= ucs2_to_wc((uchar*) ptr)))) { + my_wc_t wc2; /* Contraction head found */ if (ptr[2] == '\0' && (ptr[3] == w_one || ptr[3] == w_many)) { @@ -1581,9 +1590,8 @@ fill_max_and_min: Check if the second letter can be contraction part, and if two letters really produce a contraction. */ - if (ptr[2] == '\0' && - my_uca_can_be_contraction_tail(cs, (uchar) ptr[3]) && - my_uca_contraction2_weight(cs,(uchar) ptr[1], (uchar) ptr[3])) + if (my_uca_can_be_contraction_tail(cs, (wc2= ucs2_to_wc((uchar*) ptr + 2))) && + my_uca_contraction2_weight(cs, wc , wc2)) { /* Contraction found */ if (charlen == 1 || min_str + 2 >= min_end) === modified file 'unittest/mysys/Makefile.am' --- a/unittest/mysys/Makefile.am 2009-11-26 08:44:38 +0000 +++ b/unittest/mysys/Makefile.am 2009-12-03 11:19:05 +0000 @@ -24,7 +24,7 @@ LDADD = $(top_builddir)/unittest/mytap $(top_builddir)/strings/libmystrings.a EXTRA_DIST = CMakeLists.txt -noinst_PROGRAMS = bitmap-t base64-t lf-t waiting_threads-t +noinst_PROGRAMS = bitmap-t base64-t my_atomic-t lf-t waiting_threads-t if NEED_THREAD # my_atomic-t is used to check thread functions, so it is safe to === modified file 'vio/viosslfactories.c' --- a/vio/viosslfactories.c 2009-10-27 13:20:34 +0000 +++ b/vio/viosslfactories.c 2009-12-06 17:34:54 +0000 @@ -19,7 +19,6 @@ static my_bool ssl_algorithms_added = FALSE; static my_bool ssl_error_strings_loaded= FALSE; -static int verify_depth = 0; static unsigned char dh512_p[]= {
participants (1)
-
knielsen@knielsen-hq.org