From: Marc Alff Date: September 14 2010 9:40pm Subject: bzr commit into mysql-5.5-bugfixing branch (marc.alff:3205) List-Archive: http://lists.mysql.com/commits/118260 Message-Id: <20100914214123.2833545E80@linux-su11.site> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0918424679064449947==" --===============0918424679064449947== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/malff/BZR_TREE/mysql-5.5-bugfixing-56324-B/ based on revid:marc.alff@stripped 3205 Marc Alff 2010-09-14 [merge] Local merge modified: client/mysqltest.cc libmysqld/lib_sql.cc mysql-test/include/default_mysqld.cnf mysql-test/r/func_time.result mysql-test/r/parser.result mysql-test/r/select.result mysql-test/r/strict.result mysql-test/r/type_datetime.result mysql-test/suite/perfschema/include/upgrade_check.inc mysql-test/suite/perfschema/r/start_server_no_cond_class.result mysql-test/suite/perfschema/r/start_server_no_cond_inst.result mysql-test/suite/perfschema/r/start_server_no_file_class.result mysql-test/suite/perfschema/r/start_server_no_file_inst.result mysql-test/suite/perfschema/r/start_server_no_mutex_class.result mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result mysql-test/suite/perfschema/r/start_server_no_thread_class.result mysql-test/suite/perfschema/r/start_server_no_thread_inst.result mysql-test/suite/perfschema/r/start_server_off.result mysql-test/suite/perfschema/r/start_server_on.result mysql-test/t/strict.test mysql-test/t/type_datetime.test mysys/my_gethwaddr.c mysys/my_sync.c sql/derror.cc sql/item_timefunc.cc sql/item_timefunc.h sql/mysqld.cc sql/set_var.cc sql/set_var.h sql/sys_vars.h storage/perfschema/ha_perfschema.cc === modified file 'client/mysqltest.cc' --- a/client/mysqltest.cc 2010-08-27 11:33:32 +0000 +++ b/client/mysqltest.cc 2010-09-08 08:53:03 +0000 @@ -248,10 +248,14 @@ struct st_connection my_bool pending; #ifdef EMBEDDED_LIBRARY + pthread_t tid; const char *cur_query; int cur_query_len; - pthread_mutex_t mutex; - pthread_cond_t cond; + int command, result; + pthread_mutex_t query_mutex; + pthread_cond_t query_cond; + pthread_mutex_t result_mutex; + pthread_cond_t result_cond; int query_done; #endif /*EMBEDDED_LIBRARY*/ }; @@ -703,67 +707,148 @@ void handle_no_error(struct st_command*) #ifdef EMBEDDED_LIBRARY +#define EMB_SEND_QUERY 1 +#define EMB_READ_QUERY_RESULT 2 +#define EMB_END_CONNECTION 3 + /* attributes of the query thread */ pthread_attr_t cn_thd_attrib; + /* - send_one_query executes query in separate thread, which is - necessary in embedded library to run 'send' in proper way. - This implementation doesn't handle errors returned - by mysql_send_query. It's technically possible, though - I don't see where it is needed. + This procedure represents the connection and actually + runs queries when in the EMBEDDED-SERVER mode. + The run_query_normal() just sends request for running + mysql_send_query and mysql_read_query_result() here. */ -pthread_handler_t send_one_query(void *arg) + +pthread_handler_t connection_thread(void *arg) { struct st_connection *cn= (struct st_connection*)arg; mysql_thread_init(); - (void) mysql_send_query(&cn->mysql, cn->cur_query, cn->cur_query_len); + while (cn->command != EMB_END_CONNECTION) + { + if (!cn->command) + { + pthread_mutex_lock(&cn->query_mutex); + while (!cn->command) + pthread_cond_wait(&cn->query_cond, &cn->query_mutex); + pthread_mutex_unlock(&cn->query_mutex); + } + switch (cn->command) + { + case EMB_END_CONNECTION: + goto end_thread; + case EMB_SEND_QUERY: + cn->result= mysql_send_query(&cn->mysql, cn->cur_query, cn->cur_query_len); + break; + case EMB_READ_QUERY_RESULT: + cn->result= mysql_read_query_result(&cn->mysql); + break; + default: + DBUG_ASSERT(0); + } + cn->command= 0; + pthread_mutex_lock(&cn->result_mutex); + cn->query_done= 1; + pthread_cond_signal(&cn->result_cond); + pthread_mutex_unlock(&cn->result_mutex); + } - mysql_thread_end(); - pthread_mutex_lock(&cn->mutex); +end_thread: cn->query_done= 1; - pthread_cond_signal(&cn->cond); - pthread_mutex_unlock(&cn->mutex); + mysql_thread_end(); pthread_exit(0); return 0; } -static int do_send_query(struct st_connection *cn, const char *q, int q_len, - int flags) + +static void wait_query_thread_done(struct st_connection *con) +{ + DBUG_ASSERT(con->tid); + if (!con->query_done) + { + pthread_mutex_lock(&con->result_mutex); + while (!con->query_done) + pthread_cond_wait(&con->result_cond, &con->result_mutex); + pthread_mutex_unlock(&con->result_mutex); + } +} + + +static void signal_connection_thd(struct st_connection *cn, int command) { - pthread_t tid; + DBUG_ASSERT(cn->tid); + cn->query_done= 0; + cn->command= command; + pthread_mutex_lock(&cn->query_mutex); + pthread_cond_signal(&cn->query_cond); + pthread_mutex_unlock(&cn->query_mutex); +} - if (flags & QUERY_REAP_FLAG) - return mysql_send_query(&cn->mysql, q, q_len); - if (pthread_mutex_init(&cn->mutex, NULL) || - pthread_cond_init(&cn->cond, NULL)) - die("Error in the thread library"); +/* + Sometimes we try to execute queries when the connection is closed. + It's done to make sure it was closed completely. + So that if our connection is closed (cn->tid == 0), we just return + the mysql_send_query() result which is an error in this case. +*/ +static int do_send_query(struct st_connection *cn, const char *q, int q_len) +{ + if (!cn->tid) + return mysql_send_query(&cn->mysql, q, q_len); cn->cur_query= q; cn->cur_query_len= q_len; - cn->query_done= 0; - if (pthread_create(&tid, &cn_thd_attrib, send_one_query, (void*)cn)) - die("Cannot start new thread for query"); - + signal_connection_thd(cn, EMB_SEND_QUERY); return 0; } -static void wait_query_thread_end(struct st_connection *con) + +static int do_read_query_result(struct st_connection *cn) { - if (!con->query_done) - { - pthread_mutex_lock(&con->mutex); - while (!con->query_done) - pthread_cond_wait(&con->cond, &con->mutex); - pthread_mutex_unlock(&con->mutex); - } + DBUG_ASSERT(cn->tid); + wait_query_thread_done(cn); + signal_connection_thd(cn, EMB_READ_QUERY_RESULT); + wait_query_thread_done(cn); + + return cn->result; +} + + +static void emb_close_connection(struct st_connection *cn) +{ + if (!cn->tid) + return; + wait_query_thread_done(cn); + signal_connection_thd(cn, EMB_END_CONNECTION); + pthread_join(cn->tid, NULL); + cn->tid= 0; + pthread_mutex_destroy(&cn->query_mutex); + pthread_cond_destroy(&cn->query_cond); + pthread_mutex_destroy(&cn->result_mutex); + pthread_cond_destroy(&cn->result_cond); } + +static void init_connection_thd(struct st_connection *cn) +{ + cn->query_done= 1; + cn->command= 0; + if (pthread_mutex_init(&cn->query_mutex, NULL) || + pthread_cond_init(&cn->query_cond, NULL) || + pthread_mutex_init(&cn->result_mutex, NULL) || + pthread_cond_init(&cn->result_cond, NULL) || + pthread_create(&cn->tid, &cn_thd_attrib, connection_thread, (void*)cn)) + die("Error in the thread library"); +} + + #else /*EMBEDDED_LIBRARY*/ -#define do_send_query(cn,q,q_len,flags) mysql_send_query(&cn->mysql, q, q_len) +#define do_send_query(cn,q,q_len) mysql_send_query(&cn->mysql, q, q_len) +#define do_read_query_result(cn) mysql_read_query_result(&cn->mysql) #endif /*EMBEDDED_LIBRARY*/ @@ -1106,6 +1191,9 @@ void close_connections() DBUG_ENTER("close_connections"); for (--next_con; next_con >= connections; --next_con) { +#ifdef EMBEDDED_LIBRARY + emb_close_connection(next_con); +#endif if (next_con->stmt) mysql_stmt_close(next_con->stmt); next_con->stmt= 0; @@ -4866,7 +4954,7 @@ void do_close_connection(struct st_comma we need to check if the query's thread was finished and probably wait (embedded-server specific) */ - wait_query_thread_end(con); + emb_close_connection(con); #endif /*EMBEDDED_LIBRARY*/ if (con->stmt) mysql_stmt_close(con->stmt); @@ -5216,8 +5304,9 @@ void do_connect(struct st_command *comma } #ifdef EMBEDDED_LIBRARY - con_slot->query_done= 1; -#endif + init_connection_thd(con_slot); +#endif /*EMBEDDED_LIBRARY*/ + if (!mysql_init(&con_slot->mysql)) die("Failed on mysql_init()"); @@ -6768,21 +6857,13 @@ void run_query_normal(struct st_connecti /* Send the query */ - if (do_send_query(cn, query, query_len, flags)) + if (do_send_query(cn, query, query_len)) { handle_error(command, mysql_errno(mysql), mysql_error(mysql), mysql_sqlstate(mysql), ds); goto end; } } -#ifdef EMBEDDED_LIBRARY - /* - Here we handle 'reap' command, so we need to check if the - query's thread was finished and probably wait - */ - else if (flags & QUERY_REAP_FLAG) - wait_query_thread_end(cn); -#endif /*EMBEDDED_LIBRARY*/ if (!(flags & QUERY_REAP_FLAG)) { cn->pending= TRUE; @@ -6795,7 +6876,7 @@ void run_query_normal(struct st_connecti When on first result set, call mysql_read_query_result to retrieve answer to the query sent earlier */ - if ((counter==0) && mysql_read_query_result(mysql)) + if ((counter==0) && do_read_query_result(cn)) { handle_error(command, mysql_errno(mysql), mysql_error(mysql), mysql_sqlstate(mysql), ds); @@ -7970,6 +8051,9 @@ int main(int argc, char **argv) ps_protocol_enabled= 1; st_connection *con= connections; +#ifdef EMBEDDED_LIBRARY + init_connection_thd(con); +#endif /*EMBEDDED_LIBRARY*/ if (!( mysql_init(&con->mysql))) die("Failed in mysql_init()"); if (opt_connect_timeout) === modified file 'libmysqld/lib_sql.cc' --- a/libmysqld/lib_sql.cc 2010-07-15 11:33:27 +0000 +++ b/libmysqld/lib_sql.cc 2010-09-02 18:37:04 +0000 @@ -481,6 +481,10 @@ int init_embedded_server(int argc, char char *fake_argv[] = { (char *)"", 0 }; const char *fake_groups[] = { "server", "embedded", 0 }; my_bool acl_error; + + if (my_thread_init()) + return 1; + if (argc) { argcp= &argc; === modified file 'mysql-test/include/default_mysqld.cnf' --- a/mysql-test/include/default_mysqld.cnf 2010-02-17 09:18:17 +0000 +++ b/mysql-test/include/default_mysqld.cnf 2010-09-08 18:01:12 +0000 @@ -43,5 +43,11 @@ log-bin=mysqld-bin # Run tests with the performance schema instrumentation loose-enable-performance-schema +# Run tests with a small number of instrumented objects +# to limit memory consumption with MTR +loose-performance-schema-max-mutex-instances=10000 +loose-performance-schema-max-rwlock-instances=10000 +loose-performance-schema-max-table-instances=500 +loose-performance-schema-max-table-handles=1000 binlog-direct-non-transactional-updates === modified file 'mysql-test/r/func_time.result' --- a/mysql-test/r/func_time.result 2010-08-16 07:11:57 +0000 +++ b/mysql-test/r/func_time.result 2010-09-09 12:02:02 +0000 @@ -1200,6 +1200,8 @@ set time_zone= @@global.time_zone; select str_to_date('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE; str_to_date('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE NULL +Warnings: +Warning 1411 Incorrect datetime value: '10:00 PM' for function str_to_date create table t1 (field DATE); insert into t1 values ('2006-11-06'); select * from t1 where field < '2006-11-06 04:08:36.0'; === modified file 'mysql-test/r/parser.result' --- a/mysql-test/r/parser.result 2010-06-09 08:46:24 +0000 +++ b/mysql-test/r/parser.result 2010-09-07 06:45:00 +0000 @@ -556,9 +556,13 @@ DROP TABLE IF EXISTS t1; SELECT STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE; STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE NULL +Warnings: +Warning 1411 Incorrect datetime value: '10:00 PM' for function str_to_date SELECT STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL (INTERVAL(1,2,3) + 1) MINUTE; STR_TO_DATE('10:00 PM', '%h:%i %p') + INTERVAL (INTERVAL(1,2,3) + 1) MINUTE NULL +Warnings: +Warning 1411 Incorrect datetime value: '10:00 PM' for function str_to_date SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND; "1997-12-31 23:59:59" + INTERVAL 1 SECOND 1998-01-01 00:00:00 === modified file 'mysql-test/r/select.result' --- a/mysql-test/r/select.result 2010-08-25 19:00:38 +0000 +++ b/mysql-test/r/select.result 2010-09-07 06:45:00 +0000 @@ -4171,9 +4171,10 @@ str_to_date('2007-10-00','%Y-%m-%d') bet set SQL_MODE=TRADITIONAL; select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34'; str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34' -0 +NULL Warnings: Warning 1292 Truncated incorrect datetime value: '2007-10-00 12:34' +Warning 1411 Incorrect datetime value: '2007-10-00 12:34' for function str_to_date select str_to_date('2007-10-01 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34'; str_to_date('2007-10-01 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34' 0 @@ -4181,17 +4182,16 @@ Warnings: Warning 1292 Truncated incorrect datetime value: '2007-10-00 12:34' select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-01 12:34'; str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-01 12:34' -0 +NULL Warnings: -Warning 1292 Truncated incorrect datetime value: '2007-10-00 12:34:00' +Warning 1411 Incorrect datetime value: '2007-10-00 12:34' for function str_to_date select str_to_date('2007-10-00','%Y-%m-%d') between '2007/09/01' and '2007/10/20'; str_to_date('2007-10-00','%Y-%m-%d') between '2007/09/01' and '2007/10/20' -0 +NULL Warnings: -Warning 1292 Incorrect datetime value: '2007-10-00' for column '2007/09/01' at row 1 -Warning 1292 Incorrect datetime value: '2007-10-00' for column '2007/10/20' at row 1 +Warning 1411 Incorrect datetime value: '2007-10-00' for function str_to_date set SQL_MODE=DEFAULT; select str_to_date('2007-10-00','%Y-%m-%d') between '' and '2007/10/20'; str_to_date('2007-10-00','%Y-%m-%d') between '' and '2007/10/20' === modified file 'mysql-test/r/strict.result' --- a/mysql-test/r/strict.result 2010-07-30 15:28:36 +0000 +++ b/mysql-test/r/strict.result 2010-09-07 06:45:00 +0000 @@ -206,12 +206,11 @@ INSERT INTO t1 (col1) VALUES (STR_TO_DAT INSERT INTO t1 (col2) VALUES (STR_TO_DATE('15.10.2004 10.15','%d.%m.%Y %H.%i')); INSERT INTO t1 (col3) VALUES (STR_TO_DATE('15.10.2004 10.15','%d.%m.%Y %H.%i')); INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i')); -Warnings: -Note 1265 Data truncated for column 'col1' at row 1 +ERROR HY000: Incorrect datetime value: '31.10.0000 15.30' for function str_to_date INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i')); -ERROR 22007: Incorrect date value: '2004-00-31 15:30:00' for column 'col1' at row 1 +ERROR HY000: Incorrect datetime value: '31.0.2004 15.30' for function str_to_date INSERT INTO t1 (col1) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i')); -ERROR 22007: Incorrect date value: '2004-10-00 15:30:00' for column 'col1' at row 1 +ERROR HY000: Incorrect datetime value: '0.10.2004 15.30' for function str_to_date INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i')); ERROR 22007: Incorrect date value: '2004-09-31 15:30:00' for column 'col1' at row 1 INSERT INTO t1 (col1) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i')); @@ -221,12 +220,13 @@ ERROR 22007: Incorrect date value: '2003 INSERT INTO t1 (col1) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i')); ERROR HY000: Incorrect datetime value: '15.13.2004 15.30' for function str_to_date INSERT INTO t1 (col1) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y')); -ERROR 22007: Incorrect date value: '0000-00-00' for column 'col1' at row 1 +ERROR HY000: Incorrect datetime value: '00.00.0000' for function str_to_date INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i')); +ERROR HY000: Incorrect datetime value: '31.10.0000 15.30' for function str_to_date INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i')); -ERROR 22007: Incorrect datetime value: '2004-00-31 15:30:00' for column 'col2' at row 1 +ERROR HY000: Incorrect datetime value: '31.0.2004 15.30' for function str_to_date INSERT INTO t1 (col2) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i')); -ERROR 22007: Incorrect datetime value: '2004-10-00 15:30:00' for column 'col2' at row 1 +ERROR HY000: Incorrect datetime value: '0.10.2004 15.30' for function str_to_date INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i')); ERROR 22007: Incorrect datetime value: '2004-09-31 15:30:00' for column 'col2' at row 1 INSERT INTO t1 (col2) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i')); @@ -236,13 +236,13 @@ ERROR 22007: Incorrect datetime value: ' INSERT INTO t1 (col2) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i')); ERROR HY000: Incorrect datetime value: '15.13.2004 15.30' for function str_to_date INSERT INTO t1 (col2) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y')); -ERROR 22007: Incorrect datetime value: '0000-00-00' for column 'col2' at row 1 +ERROR HY000: Incorrect datetime value: '00.00.0000' for function str_to_date INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i')); -ERROR 22007: Incorrect datetime value: '0000-10-31 15:30:00' for column 'col3' at row 1 +ERROR HY000: Incorrect datetime value: '31.10.0000 15.30' for function str_to_date INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i')); -ERROR 22007: Incorrect datetime value: '2004-00-31 15:30:00' for column 'col3' at row 1 +ERROR HY000: Incorrect datetime value: '31.0.2004 15.30' for function str_to_date INSERT INTO t1 (col3) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i')); -ERROR 22007: Incorrect datetime value: '2004-10-00 15:30:00' for column 'col3' at row 1 +ERROR HY000: Incorrect datetime value: '0.10.2004 15.30' for function str_to_date INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i')); ERROR 22007: Incorrect datetime value: '2004-09-31 15:30:00' for column 'col3' at row 1 INSERT INTO t1 (col3) VALUES(STR_TO_DATE('32.10.2004 15.30','%d.%m.%Y %H.%i')); @@ -252,7 +252,7 @@ ERROR 22007: Incorrect datetime value: ' INSERT INTO t1 (col3) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i')); ERROR HY000: Incorrect datetime value: '15.13.2004 15.30' for function str_to_date INSERT INTO t1 (col3) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y')); -ERROR 22007: Incorrect datetime value: '0000-00-00' for column 'col3' at row 1 +ERROR HY000: Incorrect datetime value: '00.00.0000' for function str_to_date drop table t1; CREATE TABLE t1 (col1 date, col2 datetime, col3 timestamp); INSERT INTO t1 (col1) VALUES (CAST('2004-10-15' AS DATE)); @@ -1108,6 +1108,9 @@ Warnings: Warning 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_date Warning 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_date Warning 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_date +Warning 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_date +Warning 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_date +Warning 1411 Incorrect datetime value: '2004.12.12 10:22:61' for function str_to_date drop table t1; create table t1 (col1 char(3), col2 integer); insert into t1 (col1) values (cast(1000 as char(3))); === modified file 'mysql-test/r/type_datetime.result' --- a/mysql-test/r/type_datetime.result 2010-05-05 09:28:37 +0000 +++ b/mysql-test/r/type_datetime.result 2010-09-07 06:45:00 +0000 @@ -655,5 +655,30 @@ Note 1003 select `test`.`t1`.`Id` AS `Id DROP TABLE t1; SET NAMES latin1; # +# Bug#56271: Wrong comparison result with STR_TO_DATE function +# +CREATE TABLE t1 ( +`year` int(4) NOT NULL, +`month` int(2) NOT NULL +); +INSERT INTO t1 VALUES (2010,3),(2010,4),(2009,8),(2008,9); +SELECT * +FROM t1 +WHERE STR_TO_DATE(CONCAT_WS('/01/',`month`,`year`), '%m/%d/%Y') >= +STR_TO_DATE('1/1/2010', '%m/%d/%Y'); +year month +2010 3 +2010 4 +create table t2(f1 datetime primary key); +insert into t2 select STR_TO_DATE(CONCAT_WS('/01/',`month`,`year`), '%m/%d/%Y') from t1; +select * from t2 where f1=STR_TO_DATE('4/1/2010', '%m/%d/%Y'); +f1 +2010-04-01 00:00:00 +t2 should be const +explain select * from t2 where f1=STR_TO_DATE('4/1/2010', '%m/%d/%Y'); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t2 const PRIMARY PRIMARY 8 const 1 Using index +DROP TABLE t1,t2; +# # End of 5.5 tests # === modified file 'mysql-test/suite/perfschema/include/upgrade_check.inc' --- a/mysql-test/suite/perfschema/include/upgrade_check.inc 2010-07-20 19:15:29 +0000 +++ b/mysql-test/suite/perfschema/include/upgrade_check.inc 2010-09-13 23:19:39 +0000 @@ -18,7 +18,7 @@ # --error 1 ---exec $MYSQL_UPGRADE --skip-verbose > $out_file 2> $err_file +--exec $MYSQL_UPGRADE --skip-verbose --force > $out_file 2> $err_file # Verify that mysql_upgrade complained about the performance_schema --cat_file $err_file === modified file 'mysql-test/suite/perfschema/r/start_server_no_cond_class.result' --- a/mysql-test/suite/perfschema/r/start_server_no_cond_class.result 2010-08-25 00:21:43 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_cond_class.result 2010-09-08 18:01:12 +0000 @@ -45,11 +45,11 @@ performance_schema_max_file_classes 50 performance_schema_max_file_handles 32768 performance_schema_max_file_instances 10000 performance_schema_max_mutex_classes 200 -performance_schema_max_mutex_instances 1000000 +performance_schema_max_mutex_instances 10000 performance_schema_max_rwlock_classes 30 -performance_schema_max_rwlock_instances 1000000 -performance_schema_max_table_handles 100000 -performance_schema_max_table_instances 50000 +performance_schema_max_rwlock_instances 10000 +performance_schema_max_table_handles 1000 +performance_schema_max_table_instances 500 performance_schema_max_thread_classes 50 performance_schema_max_thread_instances 1000 show engine PERFORMANCE_SCHEMA status; === modified file 'mysql-test/suite/perfschema/r/start_server_no_cond_inst.result' --- a/mysql-test/suite/perfschema/r/start_server_no_cond_inst.result 2010-08-25 00:21:43 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_cond_inst.result 2010-09-08 18:01:12 +0000 @@ -45,11 +45,11 @@ performance_schema_max_file_classes 50 performance_schema_max_file_handles 32768 performance_schema_max_file_instances 10000 performance_schema_max_mutex_classes 200 -performance_schema_max_mutex_instances 1000000 +performance_schema_max_mutex_instances 10000 performance_schema_max_rwlock_classes 30 -performance_schema_max_rwlock_instances 1000000 -performance_schema_max_table_handles 100000 -performance_schema_max_table_instances 50000 +performance_schema_max_rwlock_instances 10000 +performance_schema_max_table_handles 1000 +performance_schema_max_table_instances 500 performance_schema_max_thread_classes 50 performance_schema_max_thread_instances 1000 show engine PERFORMANCE_SCHEMA status; === modified file 'mysql-test/suite/perfschema/r/start_server_no_file_class.result' --- a/mysql-test/suite/perfschema/r/start_server_no_file_class.result 2010-08-25 00:21:43 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_file_class.result 2010-09-08 18:01:12 +0000 @@ -45,11 +45,11 @@ performance_schema_max_file_classes 0 performance_schema_max_file_handles 32768 performance_schema_max_file_instances 10000 performance_schema_max_mutex_classes 200 -performance_schema_max_mutex_instances 1000000 +performance_schema_max_mutex_instances 10000 performance_schema_max_rwlock_classes 30 -performance_schema_max_rwlock_instances 1000000 -performance_schema_max_table_handles 100000 -performance_schema_max_table_instances 50000 +performance_schema_max_rwlock_instances 10000 +performance_schema_max_table_handles 1000 +performance_schema_max_table_instances 500 performance_schema_max_thread_classes 50 performance_schema_max_thread_instances 1000 show engine PERFORMANCE_SCHEMA status; === modified file 'mysql-test/suite/perfschema/r/start_server_no_file_inst.result' --- a/mysql-test/suite/perfschema/r/start_server_no_file_inst.result 2010-08-25 00:21:43 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_file_inst.result 2010-09-08 18:01:12 +0000 @@ -45,11 +45,11 @@ performance_schema_max_file_classes 50 performance_schema_max_file_handles 32768 performance_schema_max_file_instances 0 performance_schema_max_mutex_classes 200 -performance_schema_max_mutex_instances 1000000 +performance_schema_max_mutex_instances 10000 performance_schema_max_rwlock_classes 30 -performance_schema_max_rwlock_instances 1000000 -performance_schema_max_table_handles 100000 -performance_schema_max_table_instances 50000 +performance_schema_max_rwlock_instances 10000 +performance_schema_max_table_handles 1000 +performance_schema_max_table_instances 500 performance_schema_max_thread_classes 50 performance_schema_max_thread_instances 1000 show engine PERFORMANCE_SCHEMA status; === modified file 'mysql-test/suite/perfschema/r/start_server_no_mutex_class.result' --- a/mysql-test/suite/perfschema/r/start_server_no_mutex_class.result 2010-08-25 00:21:43 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_mutex_class.result 2010-09-08 18:01:12 +0000 @@ -45,11 +45,11 @@ performance_schema_max_file_classes 50 performance_schema_max_file_handles 32768 performance_schema_max_file_instances 10000 performance_schema_max_mutex_classes 0 -performance_schema_max_mutex_instances 1000000 +performance_schema_max_mutex_instances 10000 performance_schema_max_rwlock_classes 30 -performance_schema_max_rwlock_instances 1000000 -performance_schema_max_table_handles 100000 -performance_schema_max_table_instances 50000 +performance_schema_max_rwlock_instances 10000 +performance_schema_max_table_handles 1000 +performance_schema_max_table_instances 500 performance_schema_max_thread_classes 50 performance_schema_max_thread_instances 1000 show engine PERFORMANCE_SCHEMA status; === modified file 'mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result' --- a/mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result 2010-08-25 00:21:43 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result 2010-09-08 18:01:12 +0000 @@ -47,9 +47,9 @@ performance_schema_max_file_instances 10 performance_schema_max_mutex_classes 200 performance_schema_max_mutex_instances 0 performance_schema_max_rwlock_classes 30 -performance_schema_max_rwlock_instances 1000000 -performance_schema_max_table_handles 100000 -performance_schema_max_table_instances 50000 +performance_schema_max_rwlock_instances 10000 +performance_schema_max_table_handles 1000 +performance_schema_max_table_instances 500 performance_schema_max_thread_classes 50 performance_schema_max_thread_instances 1000 show engine PERFORMANCE_SCHEMA status; === modified file 'mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result' --- a/mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result 2010-08-25 00:21:43 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result 2010-09-08 18:01:12 +0000 @@ -45,11 +45,11 @@ performance_schema_max_file_classes 50 performance_schema_max_file_handles 32768 performance_schema_max_file_instances 10000 performance_schema_max_mutex_classes 200 -performance_schema_max_mutex_instances 1000000 +performance_schema_max_mutex_instances 10000 performance_schema_max_rwlock_classes 0 -performance_schema_max_rwlock_instances 1000000 -performance_schema_max_table_handles 100000 -performance_schema_max_table_instances 50000 +performance_schema_max_rwlock_instances 10000 +performance_schema_max_table_handles 1000 +performance_schema_max_table_instances 500 performance_schema_max_thread_classes 50 performance_schema_max_thread_instances 1000 show engine PERFORMANCE_SCHEMA status; === modified file 'mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result' --- a/mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result 2010-08-25 00:21:43 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result 2010-09-08 18:01:12 +0000 @@ -45,11 +45,11 @@ performance_schema_max_file_classes 50 performance_schema_max_file_handles 32768 performance_schema_max_file_instances 10000 performance_schema_max_mutex_classes 200 -performance_schema_max_mutex_instances 1000000 +performance_schema_max_mutex_instances 10000 performance_schema_max_rwlock_classes 30 performance_schema_max_rwlock_instances 0 -performance_schema_max_table_handles 100000 -performance_schema_max_table_instances 50000 +performance_schema_max_table_handles 1000 +performance_schema_max_table_instances 500 performance_schema_max_thread_classes 50 performance_schema_max_thread_instances 1000 show engine PERFORMANCE_SCHEMA status; === modified file 'mysql-test/suite/perfschema/r/start_server_no_thread_class.result' --- a/mysql-test/suite/perfschema/r/start_server_no_thread_class.result 2010-08-25 00:21:43 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_thread_class.result 2010-09-08 18:01:12 +0000 @@ -45,11 +45,11 @@ performance_schema_max_file_classes 50 performance_schema_max_file_handles 32768 performance_schema_max_file_instances 10000 performance_schema_max_mutex_classes 200 -performance_schema_max_mutex_instances 1000000 +performance_schema_max_mutex_instances 10000 performance_schema_max_rwlock_classes 30 -performance_schema_max_rwlock_instances 1000000 -performance_schema_max_table_handles 100000 -performance_schema_max_table_instances 50000 +performance_schema_max_rwlock_instances 10000 +performance_schema_max_table_handles 1000 +performance_schema_max_table_instances 500 performance_schema_max_thread_classes 0 performance_schema_max_thread_instances 1000 show engine PERFORMANCE_SCHEMA status; === modified file 'mysql-test/suite/perfschema/r/start_server_no_thread_inst.result' --- a/mysql-test/suite/perfschema/r/start_server_no_thread_inst.result 2010-08-25 00:21:43 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_thread_inst.result 2010-09-08 18:01:12 +0000 @@ -45,11 +45,11 @@ performance_schema_max_file_classes 50 performance_schema_max_file_handles 32768 performance_schema_max_file_instances 10000 performance_schema_max_mutex_classes 200 -performance_schema_max_mutex_instances 1000000 +performance_schema_max_mutex_instances 10000 performance_schema_max_rwlock_classes 30 -performance_schema_max_rwlock_instances 1000000 -performance_schema_max_table_handles 100000 -performance_schema_max_table_instances 50000 +performance_schema_max_rwlock_instances 10000 +performance_schema_max_table_handles 1000 +performance_schema_max_table_instances 500 performance_schema_max_thread_classes 50 performance_schema_max_thread_instances 0 show engine PERFORMANCE_SCHEMA status; === modified file 'mysql-test/suite/perfschema/r/start_server_off.result' --- a/mysql-test/suite/perfschema/r/start_server_off.result 2010-08-25 00:21:43 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_off.result 2010-09-08 18:01:12 +0000 @@ -45,11 +45,11 @@ performance_schema_max_file_classes 50 performance_schema_max_file_handles 32768 performance_schema_max_file_instances 10000 performance_schema_max_mutex_classes 200 -performance_schema_max_mutex_instances 1000000 +performance_schema_max_mutex_instances 10000 performance_schema_max_rwlock_classes 30 -performance_schema_max_rwlock_instances 1000000 -performance_schema_max_table_handles 100000 -performance_schema_max_table_instances 50000 +performance_schema_max_rwlock_instances 10000 +performance_schema_max_table_handles 1000 +performance_schema_max_table_instances 500 performance_schema_max_thread_classes 50 performance_schema_max_thread_instances 1000 show engine PERFORMANCE_SCHEMA status; === modified file 'mysql-test/suite/perfschema/r/start_server_on.result' --- a/mysql-test/suite/perfschema/r/start_server_on.result 2010-08-25 00:21:43 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_on.result 2010-09-08 18:01:12 +0000 @@ -45,11 +45,11 @@ performance_schema_max_file_classes 50 performance_schema_max_file_handles 32768 performance_schema_max_file_instances 10000 performance_schema_max_mutex_classes 200 -performance_schema_max_mutex_instances 1000000 +performance_schema_max_mutex_instances 10000 performance_schema_max_rwlock_classes 30 -performance_schema_max_rwlock_instances 1000000 -performance_schema_max_table_handles 100000 -performance_schema_max_table_instances 50000 +performance_schema_max_rwlock_instances 10000 +performance_schema_max_table_handles 1000 +performance_schema_max_table_instances 500 performance_schema_max_thread_classes 50 performance_schema_max_thread_instances 1000 show engine PERFORMANCE_SCHEMA status; === modified file 'mysql-test/t/strict.test' --- a/mysql-test/t/strict.test 2010-03-18 10:38:29 +0000 +++ b/mysql-test/t/strict.test 2010-09-07 06:45:00 +0000 @@ -192,11 +192,11 @@ INSERT INTO t1 (col3) VALUES (STR_TO_DAT # All test cases expected to fail should return # SQLSTATE 22007 +--error 1411 INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i')); - ---error 1292 +--error 1411 INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i')); ---error 1292 +--error 1411 INSERT INTO t1 (col1) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i')); --error 1292 INSERT INTO t1 (col1) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i')); @@ -206,18 +206,18 @@ INSERT INTO t1 (col1) VALUES(STR_TO_DATE INSERT INTO t1 (col1) VALUES(STR_TO_DATE('29.02.2003 15.30','%d.%m.%Y %H.%i')); --error 1411 INSERT INTO t1 (col1) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i')); ---error 1292 +--error 1411 INSERT INTO t1 (col1) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y')); ## Test INSERT with STR_TO_DATE into DATETIME # All test cases expected to fail should return # SQLSTATE 22007 +--error 1411 INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i')); - ---error 1292 +--error 1411 INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i')); ---error 1292 +--error 1411 INSERT INTO t1 (col2) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i')); --error 1292 INSERT INTO t1 (col2) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i')); @@ -227,18 +227,18 @@ INSERT INTO t1 (col2) VALUES(STR_TO_DATE INSERT INTO t1 (col2) VALUES(STR_TO_DATE('29.02.2003 15.30','%d.%m.%Y %H.%i')); --error 1411 INSERT INTO t1 (col2) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i')); ---error 1292 +--error 1411 INSERT INTO t1 (col2) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y')); ## Test INSERT with STR_TO_DATE into TIMESTAMP # All test cases expected to fail should return # SQLSTATE 22007 ---error 1292 +--error 1411 INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.10.0000 15.30','%d.%m.%Y %H.%i')); ---error 1292 +--error 1411 INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.0.2004 15.30','%d.%m.%Y %H.%i')); ---error 1292 +--error 1411 INSERT INTO t1 (col3) VALUES(STR_TO_DATE('0.10.2004 15.30','%d.%m.%Y %H.%i')); --error 1292 INSERT INTO t1 (col3) VALUES(STR_TO_DATE('31.9.2004 15.30','%d.%m.%Y %H.%i')); @@ -248,7 +248,7 @@ INSERT INTO t1 (col3) VALUES(STR_TO_DATE INSERT INTO t1 (col3) VALUES(STR_TO_DATE('29.02.2003 15.30','%d.%m.%Y %H.%i')); --error 1411 INSERT INTO t1 (col3) VALUES(STR_TO_DATE('15.13.2004 15.30','%d.%m.%Y %H.%i')); ---error 1292 +--error 1411 INSERT INTO t1 (col3) VALUES(STR_TO_DATE('00.00.0000','%d.%m.%Y')); drop table t1; === modified file 'mysql-test/t/type_datetime.test' --- a/mysql-test/t/type_datetime.test 2010-05-05 09:28:37 +0000 +++ b/mysql-test/t/type_datetime.test 2010-09-07 06:45:00 +0000 @@ -462,5 +462,28 @@ DROP TABLE t1; SET NAMES latin1; --echo # +--echo # Bug#56271: Wrong comparison result with STR_TO_DATE function +--echo # +CREATE TABLE t1 ( + `year` int(4) NOT NULL, + `month` int(2) NOT NULL +); + +INSERT INTO t1 VALUES (2010,3),(2010,4),(2009,8),(2008,9); + +SELECT * +FROM t1 +WHERE STR_TO_DATE(CONCAT_WS('/01/',`month`,`year`), '%m/%d/%Y') >= +STR_TO_DATE('1/1/2010', '%m/%d/%Y'); + +create table t2(f1 datetime primary key); +insert into t2 select STR_TO_DATE(CONCAT_WS('/01/',`month`,`year`), '%m/%d/%Y') from t1; +select * from t2 where f1=STR_TO_DATE('4/1/2010', '%m/%d/%Y'); +--echo t2 should be const +explain select * from t2 where f1=STR_TO_DATE('4/1/2010', '%m/%d/%Y'); + +DROP TABLE t1,t2; + +--echo # --echo # End of 5.5 tests --echo # === modified file 'mysys/my_gethwaddr.c' --- a/mysys/my_gethwaddr.c 2010-07-15 13:47:50 +0000 +++ b/mysys/my_gethwaddr.c 2010-09-09 12:51:50 +0000 @@ -64,7 +64,7 @@ my_bool my_gethwaddr(uchar *to) if (ifm->ifm_type == RTM_IFINFO) { sdl = (struct sockaddr_dl *)(ifm + 1); - addr=LLADDR(sdl); + addr=(uchar *)LLADDR(sdl); res=memcpy_and_test(to, addr, ETHER_ADDR_LEN); } } === modified file 'mysys/my_sync.c' --- a/mysys/my_sync.c 2009-12-11 09:39:38 +0000 +++ b/mysys/my_sync.c 2010-09-09 13:55:37 +0000 @@ -100,9 +100,9 @@ static const char cur_dir_name[]= {FN_CU RETURN 0 if ok, !=0 if error */ +#ifdef NEED_EXPLICIT_SYNC_DIR int my_sync_dir(const char *dir_name, myf my_flags) { -#ifdef NEED_EXPLICIT_SYNC_DIR File dir_fd; int res= 0; const char *correct_dir_name; @@ -124,10 +124,14 @@ int my_sync_dir(const char *dir_name, my else res= 1; DBUG_RETURN(res); -#else +} +#else /* NEED_EXPLICIT_SYNC_DIR */ +int my_sync_dir(const char *dir_name __attribute__((unused)), + myf my_flags __attribute__((unused))) +{ return 0; -#endif } +#endif /* NEED_EXPLICIT_SYNC_DIR */ /* @@ -141,15 +145,18 @@ int my_sync_dir(const char *dir_name, my RETURN 0 if ok, !=0 if error */ +#ifdef NEED_EXPLICIT_SYNC_DIR int my_sync_dir_by_file(const char *file_name, myf my_flags) { -#ifdef NEED_EXPLICIT_SYNC_DIR char dir_name[FN_REFLEN]; size_t dir_name_length; dirname_part(dir_name, file_name, &dir_name_length); return my_sync_dir(dir_name, my_flags); -#else +} +#else /* NEED_EXPLICIT_SYNC_DIR */ +int my_sync_dir_by_file(const char *file_name __attribute__((unused)), + myf my_flags __attribute__((unused))) +{ return 0; -#endif } - +#endif /* NEED_EXPLICIT_SYNC_DIR */ === modified file 'sql/derror.cc' --- a/sql/derror.cc 2010-07-08 21:20:08 +0000 +++ b/sql/derror.cc 2010-09-02 18:37:04 +0000 @@ -35,6 +35,8 @@ static void init_myfunc_errs(void); C_MODE_START static const char **get_server_errmsgs() { + if (!current_thd) + return DEFAULT_ERRMSGS; return CURRENT_THD_ERRMSGS; } C_MODE_END === modified file 'sql/item_timefunc.cc' --- a/sql/item_timefunc.cc 2010-07-09 12:28:51 +0000 +++ b/sql/item_timefunc.cc 2010-09-07 06:45:00 +0000 @@ -3368,6 +3368,8 @@ void Item_func_str_to_date::fix_length_a cached_field_type= MYSQL_TYPE_DATETIME; max_length= MAX_DATETIME_FULL_WIDTH*MY_CHARSET_BIN_MB_MAXLEN; cached_timestamp_type= MYSQL_TIMESTAMP_NONE; + sql_mode= (current_thd->variables.sql_mode & + (MODE_NO_ZERO_IN_DATE | MODE_NO_ZERO_DATE)); if ((const_item= args[1]->const_item())) { char format_buff[64]; @@ -3433,6 +3435,14 @@ bool Item_func_str_to_date::get_date(MYS return 0; null_date: + if (fuzzy_date & TIME_NO_ZERO_DATE) + { + char buff[128]; + strmake(buff, val->ptr(), min(val->length(), sizeof(buff)-1)); + push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN, + ER_WRONG_VALUE_FOR_TYPE, ER(ER_WRONG_VALUE_FOR_TYPE), + "datetime", buff, "str_to_date"); + } return (null_value=1); } @@ -3442,7 +3452,7 @@ String *Item_func_str_to_date::val_str(S DBUG_ASSERT(fixed == 1); MYSQL_TIME ltime; - if (Item_func_str_to_date::get_date(<ime, TIME_FUZZY_DATE)) + if (Item_func_str_to_date::get_date(<ime, TIME_FUZZY_DATE | sql_mode)) return 0; if (!make_datetime((const_item ? cached_format_type : @@ -3453,6 +3463,29 @@ String *Item_func_str_to_date::val_str(S } +longlong Item_func_str_to_date::val_int() +{ + DBUG_ASSERT(fixed == 1); + MYSQL_TIME ltime; + + if (Item_func_str_to_date::get_date(<ime, TIME_FUZZY_DATE | sql_mode)) + return 0; + + if (const_item) + { + switch (cached_field_type) { + case MYSQL_TYPE_DATE: + return TIME_to_ulonglong_date(<ime); + case MYSQL_TYPE_TIME: + return TIME_to_ulonglong_time(<ime); + default: + return TIME_to_ulonglong_datetime(<ime); + } + } + return TIME_to_ulonglong_datetime(<ime); +} + + bool Item_func_last_day::get_date(MYSQL_TIME *ltime, uint fuzzy_date) { if (get_arg0_date(ltime, fuzzy_date & ~TIME_FUZZY_DATE) || === modified file 'sql/item_timefunc.h' --- a/sql/item_timefunc.h 2010-08-16 07:11:57 +0000 +++ b/sql/item_timefunc.h 2010-09-09 12:02:02 +0000 @@ -1039,6 +1039,7 @@ class Item_func_str_to_date :public Item date_time_format_types cached_format_type; timestamp_type cached_timestamp_type; bool const_item; + ulonglong sql_mode; public: Item_func_str_to_date(Item *a, Item *b) :Item_str_func(a, b), const_item(false) @@ -1052,6 +1053,8 @@ public: { return tmp_table_field_from_field_type(table, 1); } + longlong val_int(); + bool result_as_longlong() { return TRUE; } }; === modified file 'sql/mysqld.cc' --- a/sql/mysqld.cc 2010-09-09 21:33:35 +0000 +++ b/sql/mysqld.cc 2010-09-14 21:40:50 +0000 @@ -1492,6 +1492,7 @@ void clean_up(bool print_message) cleanup_errmsgs(); MYSQL_CALLBACK(thread_scheduler, end, ()); finish_client_errs(); + (void) my_error_unregister(ER_ERROR_FIRST, ER_ERROR_LAST); // finish server errs DBUG_PRINT("quit", ("Error messages freed")); /* Tell main we are ready */ logger.cleanup_end(); === modified file 'sql/set_var.cc' --- a/sql/set_var.cc 2010-08-26 00:59:28 +0000 +++ b/sql/set_var.cc 2010-09-02 18:37:04 +0000 @@ -108,7 +108,7 @@ void sys_var_end() my_hash_free(&system_variable_hash); for (sys_var *var=all_sys_vars.first; var; var= var->next) - var->~sys_var(); + var->cleanup(); DBUG_VOID_RETURN; } === modified file 'sql/set_var.h' --- a/sql/set_var.h 2010-07-23 20:13:36 +0000 +++ b/sql/set_var.h 2010-09-09 12:37:09 +0000 @@ -91,11 +91,13 @@ public: longlong def_val, PolyLock *lock, enum binlog_status_enum binlog_status_arg, on_check_function on_check_func, on_update_function on_update_func, uint deprecated_version, const char *substitute, int parse_flag); + + virtual ~sys_var() {} + /** - The instance should only be destroyed on shutdown, as it doesn't unlink - itself from the chain. + All the cleanup procedures should be performed here */ - virtual ~sys_var() {} + virtual void cleanup() {} /** downcast for sys_var_pluginvar. Returns this if it's an instance of sys_var_pluginvar, and 0 otherwise. === modified file 'sql/sys_vars.h' --- a/sql/sys_vars.h 2010-08-05 12:34:19 +0000 +++ b/sql/sys_vars.h 2010-09-02 18:37:04 +0000 @@ -385,7 +385,7 @@ public: DBUG_ASSERT(scope() == GLOBAL); DBUG_ASSERT(size == sizeof(char *)); } - ~Sys_var_charptr() + void cleanup() { if (flags & ALLOCATED) my_free(global_var(char*)); === modified file 'storage/perfschema/ha_perfschema.cc' --- a/storage/perfschema/ha_perfschema.cc 2010-07-15 23:44:45 +0000 +++ b/storage/perfschema/ha_perfschema.cc 2010-09-10 09:10:38 +0000 @@ -20,6 +20,7 @@ #include "my_global.h" #include "my_pthread.h" +#include "my_atomic.h" #include "sql_plugin.h" #include "mysql/plugin.h" #include "ha_perfschema.h" @@ -28,6 +29,17 @@ #include "pfs_instr_class.h" #include "pfs_instr.h" +#ifdef MY_ATOMIC_MODE_DUMMY +/* + The performance schema can can not function with MY_ATOMIC_MODE_DUMMY, + a fully functional implementation of MY_ATOMIC should be used instead. + If the build fails with this error message: + - either use a different ./configure --with-atomic-ops option + - or do not build with the performance schema. +*/ +#error "The performance schema needs a functional MY_ATOMIC implementation." +#endif + handlerton *pfs_hton= NULL; static handler* pfs_create_handler(handlerton *hton, --===============0918424679064449947== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/marc.alff@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: marc.alff@stripped # target_branch: file:///home/malff/BZR_TREE/mysql-5.5-bugfixing-\ # 56324-B/ # testament_sha1: 6dbb85cc53013482d9c86e88817b1346681412ba # timestamp: 2010-09-14 15:41:23 -0600 # source_branch: file:///home/malff/BZR_TREE/mysql-5.5-bugfixing/ # base_revision_id: marc.alff@stripped\ # azexyau10kbdg1jx # # Begin bundle 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 --===============0918424679064449947==--