From eac847f39b8e3737db6386e5f036628b98937286 Mon Sep 17 00:00:00 2001 From: "mattiasj@mattias-jonssons-macbook.local" <> Date: Tue, 20 Nov 2007 11:21:00 +0100 Subject: [PATCH 01/13] Bug#30822: ALTER TABLE COALESCE PARTITION causes segmentation fault Problem was for LINEAR HASH/KEY. Crashes because of wrong partition id returned when creating the new altered partitions. (because of wrong linear hash mask) Solution: Update the linear hash mask before using it for the new altered table. --- mysql-test/r/partition_hash.result | 12 ++++++++++++ mysql-test/t/partition_hash.test | 16 ++++++++++++++++ sql/ha_partition.cc | 8 ++++++++ sql/sql_partition.cc | 2 +- sql/sql_partition.h | 1 + 5 files changed, 38 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/partition_hash.result b/mysql-test/r/partition_hash.result index 72f036be099..94fefe77a77 100644 --- a/mysql-test/r/partition_hash.result +++ b/mysql-test/r/partition_hash.result @@ -1,4 +1,16 @@ drop table if exists t1; +CREATE TABLE t1 (c1 INT) +PARTITION BY HASH (c1) +PARTITIONS 15; +INSERT INTO t1 VALUES (1), (2), (3), (4), (5); +ALTER TABLE t1 COALESCE PARTITION 13; +DROP TABLE t1; +CREATE TABLE t1 (c1 INT) +PARTITION BY LINEAR HASH (c1) +PARTITIONS 5; +INSERT INTO t1 VALUES (1), (2), (3), (4), (5); +ALTER TABLE t1 COALESCE PARTITION 3; +DROP TABLE t1; create table t1 (a int unsigned) partition by hash(a div 2) partitions 4; diff --git a/mysql-test/t/partition_hash.test b/mysql-test/t/partition_hash.test index 52caaa8c8e9..362d5f747e9 100644 --- a/mysql-test/t/partition_hash.test +++ b/mysql-test/t/partition_hash.test @@ -9,6 +9,22 @@ drop table if exists t1; --enable_warnings +# +# Bug#30822: crash when COALESCE +# +CREATE TABLE t1 (c1 INT) + PARTITION BY HASH (c1) + PARTITIONS 15; +INSERT INTO t1 VALUES (1), (2), (3), (4), (5); +ALTER TABLE t1 COALESCE PARTITION 13; +DROP TABLE t1; +CREATE TABLE t1 (c1 INT) + PARTITION BY LINEAR HASH (c1) + PARTITIONS 5; +INSERT INTO t1 VALUES (1), (2), (3), (4), (5); +ALTER TABLE t1 COALESCE PARTITION 3; +DROP TABLE t1; + # # More partition pruning tests, especially on interval walking # diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index b53a5e3da97..d1b20896d9a 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -1531,6 +1531,14 @@ int ha_partition::copy_partitions(ulonglong *copied, ulonglong *deleted) longlong func_value; DBUG_ENTER("ha_partition::copy_partitions"); + if (m_part_info->linear_hash_ind) + { + if (m_part_info->part_type == HASH_PARTITION) + set_linear_hash_mask(m_part_info, m_part_info->no_parts); + else + set_linear_hash_mask(m_part_info, m_part_info->no_subparts); + } + while (reorg_part < m_reorged_parts) { handler *file= m_reorged_file[reorg_part]; diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index 94b58bf913f..8d5732dfd94 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -1402,7 +1402,7 @@ static void set_up_partition_func_pointers(partition_info *part_info) NONE */ -static void set_linear_hash_mask(partition_info *part_info, uint no_parts) +void set_linear_hash_mask(partition_info *part_info, uint no_parts) { uint mask; diff --git a/sql/sql_partition.h b/sql/sql_partition.h index 56f24181b93..282e24f1853 100644 --- a/sql/sql_partition.h +++ b/sql/sql_partition.h @@ -65,6 +65,7 @@ int get_part_for_delete(const uchar *buf, const uchar *rec0, void prune_partition_set(const TABLE *table, part_id_range *part_spec); bool check_partition_info(partition_info *part_info,handlerton **eng_type, TABLE *table, handler *file, HA_CREATE_INFO *info); +void set_linear_hash_mask(partition_info *part_info, uint no_parts); bool fix_partition_func(THD *thd, TABLE *table, bool create_table_ind); char *generate_partition_syntax(partition_info *part_info, uint *buf_length, bool use_sql_alloc, From 876f49710e7aa9863c3dd84234296d86375b4f1d Mon Sep 17 00:00:00 2001 From: "svoj@mysql.com/june.mysql.com" <> Date: Fri, 23 Nov 2007 17:51:12 +0400 Subject: [PATCH 02/13] BUG#31833 - ORDER BY leads to wrong result when ARCHIVE, BLOB and table cache is full After reading last record from freshly opened archive table (e.g. after flush table, or if there is no room in table cache), the table is reported as crashed. The problem was that azio wrongly invalidated azio_stream when it meets EOF. --- mysql-test/r/archive.result | 7 +++++++ mysql-test/t/archive.test | 9 +++++++++ storage/archive/azio.c | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/archive.result b/mysql-test/r/archive.result index 77d3cba63d5..ed2553910a2 100644 --- a/mysql-test/r/archive.result +++ b/mysql-test/r/archive.result @@ -12687,3 +12687,10 @@ CREATE TABLE t1(a VARCHAR(510)) ENGINE = ARCHIVE; INSERT INTO t1(a) VALUES (''); SELECT * FROM t1 ORDER BY a; DROP TABLE t1; +CREATE TABLE t1(a INT NOT NULL AUTO_INCREMENT, b BLOB, KEY(a)) ENGINE=archive; +INSERT INTO t1 VALUES (NULL, NULL),(NULL, NULL); +FLUSH TABLE t1; +SELECT * FROM t1 ORDER BY a; +a b +1 NULL +2 NULL diff --git a/mysql-test/t/archive.test b/mysql-test/t/archive.test index f8eff10e30a..9595576cbce 100644 --- a/mysql-test/t/archive.test +++ b/mysql-test/t/archive.test @@ -1589,3 +1589,12 @@ SELECT * FROM t1 ORDER BY a; --enable_result_log DROP TABLE t1; + +# +# BUG#31833 - ORDER BY leads to wrong result when ARCHIVE, BLOB and table +# cache is full +# +CREATE TABLE t1(a INT NOT NULL AUTO_INCREMENT, b BLOB, KEY(a)) ENGINE=archive; +INSERT INTO t1 VALUES (NULL, NULL),(NULL, NULL); +FLUSH TABLE t1; +SELECT * FROM t1 ORDER BY a; diff --git a/storage/archive/azio.c b/storage/archive/azio.c index 2cf0fe114d3..cada6c57918 100644 --- a/storage/archive/azio.c +++ b/storage/archive/azio.c @@ -262,7 +262,7 @@ void check_header(azio_stream *s) if (len) s->inbuf[0] = s->stream.next_in[0]; errno = 0; len = (uInt)my_read(s->file, (uchar *)s->inbuf + len, AZ_BUFSIZE_READ >> len, MYF(0)); - if (len == 0) s->z_err = Z_ERRNO; + if (len == (uInt)-1) s->z_err = Z_ERRNO; s->stream.avail_in += len; s->stream.next_in = s->inbuf; if (s->stream.avail_in < 2) { From beff6193e0711b1732215f69df43207088913fdf Mon Sep 17 00:00:00 2001 From: "ramil/ram@mysql.com/ramil.myoffice.izhnet.ru" <> Date: Mon, 26 Nov 2007 10:28:25 +0400 Subject: [PATCH 03/13] Fix for bug #29258: Partitions: search fails for maximum unsigned bigint Problems: 1. looking for a matching partition we miss the fact that the maximum allowed value is in the PARTITION p LESS THAN MAXVALUE. 2. one can insert maximum value if numeric maximum value is the last range. (should only work if LESS THAN MAXVALUE). 3. one cannot have both numeric maximum value and MAXVALUE string as ranges (the same value, but different meanings). Fix: consider the maximum value as a supremum. --- mysql-test/r/partition.result | 47 +++++++++++++++++++++++++++++++++++ mysql-test/t/partition.test | 39 +++++++++++++++++++++++++++++ sql/partition_info.cc | 7 ++++++ sql/sql_partition.cc | 12 ++++++--- 4 files changed, 102 insertions(+), 3 deletions(-) diff --git a/mysql-test/r/partition.result b/mysql-test/r/partition.result index 2b8c79b4563..22dca8888ef 100644 --- a/mysql-test/r/partition.result +++ b/mysql-test/r/partition.result @@ -1297,4 +1297,51 @@ create table t1 partition by key(s1) partitions 3; insert into t1 values (null,null); drop table t1; +CREATE TABLE t1 (s1 BIGINT UNSIGNED) +PARTITION BY RANGE (s1) ( +PARTITION p0 VALUES LESS THAN (0), +PARTITION p1 VALUES LESS THAN (1), +PARTITION p2 VALUES LESS THAN (18446744073709551615) +); +INSERT INTO t1 VALUES (0), (18446744073709551614); +INSERT INTO t1 VALUES (18446744073709551615); +ERROR HY000: Table has no partition for value 18446744073709551615 +DROP TABLE t1; +CREATE TABLE t1 (s1 BIGINT UNSIGNED) +PARTITION BY RANGE (s1) ( +PARTITION p0 VALUES LESS THAN (0), +PARTITION p1 VALUES LESS THAN (1), +PARTITION p2 VALUES LESS THAN (18446744073709551614), +PARTITION p3 VALUES LESS THAN MAXVALUE +); +INSERT INTO t1 VALUES (-1), (0), (18446744073709551613), +(18446744073709551614), (18446744073709551615); +Warnings: +Warning 1264 Out of range value for column 's1' at row 1 +SELECT * FROM t1; +s1 +0 +0 +18446744073709551613 +18446744073709551614 +18446744073709551615 +SELECT * FROM t1 WHERE s1 = 0; +s1 +0 +0 +SELECT * FROM t1 WHERE s1 = 18446744073709551614; +s1 +18446744073709551614 +SELECT * FROM t1 WHERE s1 = 18446744073709551615; +s1 +18446744073709551615 +DROP TABLE t1; +CREATE TABLE t1 (s1 BIGINT UNSIGNED) +PARTITION BY RANGE (s1) ( +PARTITION p0 VALUES LESS THAN (0), +PARTITION p1 VALUES LESS THAN (1), +PARTITION p2 VALUES LESS THAN (18446744073709551615), +PARTITION p3 VALUES LESS THAN MAXVALUE +); +DROP TABLE t1; End of 5.1 tests diff --git a/mysql-test/t/partition.test b/mysql-test/t/partition.test index 68eff608879..91ec91d4b10 100644 --- a/mysql-test/t/partition.test +++ b/mysql-test/t/partition.test @@ -1541,4 +1541,43 @@ while ($cnt) --enable_query_log drop table t1; + +# +# Bug #29258: Partitions: search fails for maximum unsigned bigint +# +CREATE TABLE t1 (s1 BIGINT UNSIGNED) + PARTITION BY RANGE (s1) ( + PARTITION p0 VALUES LESS THAN (0), + PARTITION p1 VALUES LESS THAN (1), + PARTITION p2 VALUES LESS THAN (18446744073709551615) +); +INSERT INTO t1 VALUES (0), (18446744073709551614); +--error ER_NO_PARTITION_FOR_GIVEN_VALUE +INSERT INTO t1 VALUES (18446744073709551615); +DROP TABLE t1; + +CREATE TABLE t1 (s1 BIGINT UNSIGNED) + PARTITION BY RANGE (s1) ( + PARTITION p0 VALUES LESS THAN (0), + PARTITION p1 VALUES LESS THAN (1), + PARTITION p2 VALUES LESS THAN (18446744073709551614), + PARTITION p3 VALUES LESS THAN MAXVALUE +); +INSERT INTO t1 VALUES (-1), (0), (18446744073709551613), + (18446744073709551614), (18446744073709551615); +SELECT * FROM t1; +SELECT * FROM t1 WHERE s1 = 0; +SELECT * FROM t1 WHERE s1 = 18446744073709551614; +SELECT * FROM t1 WHERE s1 = 18446744073709551615; +DROP TABLE t1; + +CREATE TABLE t1 (s1 BIGINT UNSIGNED) + PARTITION BY RANGE (s1) ( + PARTITION p0 VALUES LESS THAN (0), + PARTITION p1 VALUES LESS THAN (1), + PARTITION p2 VALUES LESS THAN (18446744073709551615), + PARTITION p3 VALUES LESS THAN MAXVALUE +); +DROP TABLE t1; + --echo End of 5.1 tests diff --git a/sql/partition_info.cc b/sql/partition_info.cc index ab887d5dda0..67f5f48556b 100644 --- a/sql/partition_info.cc +++ b/sql/partition_info.cc @@ -524,6 +524,13 @@ bool partition_info::check_range_constants() current_largest= part_range_value; range_int_array[i]= part_range_value; } + else if (defined_max_value && + current_largest == part_range_value && + part_range_value == LONGLONG_MAX && + i == (no_parts - 1)) + { + range_int_array[i]= part_range_value; + } else { my_error(ER_RANGE_NOT_INCREASING_ERROR, MYF(0)); diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index 64f96f342df..06b45e3e62a 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -2834,8 +2834,8 @@ int get_partition_id_range(partition_info *part_info, loc_part_id++; *part_id= (uint32)loc_part_id; if (loc_part_id == max_partition && - range_array[loc_part_id] != LONGLONG_MAX && - part_func_value >= range_array[loc_part_id]) + part_func_value >= range_array[loc_part_id] && + !part_info->defined_max_value) DBUG_RETURN(HA_ERR_NO_PARTITION_FOUND); DBUG_PRINT("exit",("partition: %d", *part_id)); @@ -2941,7 +2941,13 @@ uint32 get_partition_id_range_for_endpoint(partition_info *part_info, } if (left_endpoint) { - if (part_func_value >= range_array[loc_part_id]) + longlong bound= range_array[loc_part_id]; + /* + In case of PARTITION p VALUES LESS THAN MAXVALUE + the maximum value is in the current partition. + */ + if (part_func_value > bound || + (part_func_value == bound && !part_info->defined_max_value)) loc_part_id++; } else From 5adf16e2889ae89ac77e3d2a8d6d2a4225922e53 Mon Sep 17 00:00:00 2001 From: "ramil/ram@mysql.com/ramil.myoffice.izhnet.ru" <> Date: Mon, 26 Nov 2007 13:29:26 +0400 Subject: [PATCH 04/13] Fix for bug #32676: insert delayed crash with wrong column and function specified Problem: using wrong local lock type value in the mysql_insert() results in a crash. Fix: use a proper value. --- mysql-test/r/delayed.result | 5 +++++ mysql-test/t/delayed.test | 9 +++++++++ sql/sql_insert.cc | 4 ++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/delayed.result b/mysql-test/r/delayed.result index b37679847be..5bcedbf107f 100644 --- a/mysql-test/r/delayed.result +++ b/mysql-test/r/delayed.result @@ -255,3 +255,8 @@ CREATE TABLE t2(c1 INT) ENGINE=MERGE UNION=(t1); INSERT DELAYED INTO t2 VALUES(1); ERROR HY000: Table storage engine for 't2' doesn't have this option DROP TABLE t1, t2; +CREATE TABLE t1 (a INT); +INSERT DELAYED INTO t1 SET b= b(); +ERROR 42S22: Unknown column 'b' in 'field list' +DROP TABLE t1; +End of 5.0 tests diff --git a/mysql-test/t/delayed.test b/mysql-test/t/delayed.test index 13615c8c269..5a05301010e 100644 --- a/mysql-test/t/delayed.test +++ b/mysql-test/t/delayed.test @@ -252,3 +252,12 @@ CREATE TABLE t2(c1 INT) ENGINE=MERGE UNION=(t1); INSERT DELAYED INTO t2 VALUES(1); DROP TABLE t1, t2; +# +# Bug #32676: insert delayed crash with wrong column and function specified +# +CREATE TABLE t1 (a INT); +--error ER_BAD_FIELD_ERROR +INSERT DELAYED INTO t1 SET b= b(); +DROP TABLE t1; + +--echo End of 5.0 tests diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 770bbd1349d..bb648d2eb83 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -585,7 +585,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list, bool log_on= (thd->options & OPTION_BIN_LOG) || (!(thd->security_ctx->master_access & SUPER_ACL)); #endif - thr_lock_type lock_type = table_list->lock_type; + thr_lock_type lock_type; Item *unused_conds= 0; DBUG_ENTER("mysql_insert"); @@ -620,6 +620,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list, if (open_and_lock_tables(thd, table_list)) DBUG_RETURN(TRUE); } + lock_type= table_list->lock_type; thd->proc_info="init"; thd->used_tables=0; @@ -637,7 +638,6 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list, /* mysql_prepare_insert set table_list->table if it was not set */ table= table_list->table; - lock_type= table_list->lock_type; context= &thd->lex->select_lex.context; /* From ac034767c0482ea234ac624ddda4a0cdcff46a8e Mon Sep 17 00:00:00 2001 From: "ramil/ram@mysql.com/ramil.myoffice.izhnet.ru" <> Date: Tue, 27 Nov 2007 09:36:43 +0400 Subject: [PATCH 05/13] Fix for bug #32559: connection hangs on query with name_const Problem: passing a non-constant name to the NAME_CONST function results in a crash. Fix: check the NAME_CONST name argument; return fake item type if we got non-constant argument(s). --- mysql-test/r/func_misc.result | 7 +++++++ mysql-test/t/func_misc.test | 12 +++++++++++- sql/item.cc | 12 +++++++++++- sql/item.h | 4 +++- 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/mysql-test/r/func_misc.result b/mysql-test/r/func_misc.result index c941790c35b..889dfb7e078 100644 --- a/mysql-test/r/func_misc.result +++ b/mysql-test/r/func_misc.result @@ -207,4 +207,11 @@ test SELECT NAME_CONST('test', 'test'); test test +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES (), (), (); +SELECT NAME_CONST(a, '1') FROM t1; +ERROR HY000: Incorrect arguments to NAME_CONST +SET INSERT_ID= NAME_CONST(a, a); +ERROR HY000: Incorrect arguments to NAME_CONST +DROP TABLE t1; End of 5.0 tests diff --git a/mysql-test/t/func_misc.test b/mysql-test/t/func_misc.test index 2c34f77b1ff..4870379d69e 100644 --- a/mysql-test/t/func_misc.test +++ b/mysql-test/t/func_misc.test @@ -204,5 +204,15 @@ SELECT NAME_CONST('test', 1.0); SELECT NAME_CONST('test', -1.0); SELECT NAME_CONST('test', 'test'); ---echo End of 5.0 tests +# +# Bug #32559: connection hangs on query with name_const +# +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES (), (), (); +--error ER_WRONG_ARGUMENTS +SELECT NAME_CONST(a, '1') FROM t1; +--error ER_WRONG_ARGUMENTS +SET INSERT_ID= NAME_CONST(a, a); +DROP TABLE t1; +--echo End of 5.0 tests diff --git a/sql/item.cc b/sql/item.cc index 431d82af331..a75d0159848 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -1209,7 +1209,17 @@ bool Item_name_const::is_null() Item::Type Item_name_const::type() const { - return value_item->type(); + /* + As + 1. one can try to create the Item_name_const passing non-constant + arguments, although it's incorrect and + 2. the type() method can be called before the fix_fields() to get + type information for a further type cast, e.g. + if (item->type() == FIELD_ITEM) + ((Item_field *) item)->... + we return NULL_ITEM in the case to avoid wrong casting. + */ + return valid_args ? value_item->type() : NULL_ITEM; } diff --git a/sql/item.h b/sql/item.h index a1135c2c725..fbf4b94b276 100644 --- a/sql/item.h +++ b/sql/item.h @@ -1111,11 +1111,13 @@ class Item_name_const : public Item { Item *value_item; Item *name_item; + bool valid_args; public: Item_name_const(Item *name_arg, Item *val): value_item(val), name_item(name_arg) { - if(!value_item->basic_const_item()) + if (!(valid_args= name_item->basic_const_item() & + value_item->basic_const_item())) my_error(ER_WRONG_ARGUMENTS, MYF(0), "NAME_CONST"); Item::maybe_null= TRUE; } From a4d2d87395b2b44fec892d123c759bed76933478 Mon Sep 17 00:00:00 2001 From: "svoj@mysql.com/april.(none)" <> Date: Tue, 27 Nov 2007 14:01:11 +0400 Subject: [PATCH 06/13] BUG#32050 - table logging gone wrong. INSERT/UPDATE against CSV table created by MySQL earlier than 5.1.23 with NULL-able column results in server crash in debug builds. Starting with 5.1.23 CSV doesn't permit creation of NULL-able columns, but it is still possible to get such table from older MySQL versions. Fixed by removing excessive DBUG_ASSERT(). --- scripts/mysql_system_tables_fix.sql | 16 ++++++++++++++++ storage/csv/ha_tina.cc | 8 -------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/scripts/mysql_system_tables_fix.sql b/scripts/mysql_system_tables_fix.sql index a43964bf09a..fccd1737e31 100644 --- a/scripts/mysql_system_tables_fix.sql +++ b/scripts/mysql_system_tables_fix.sql @@ -513,6 +513,22 @@ ALTER TABLE tables_priv MODIFY Table_priv set('Select','Insert','Update','Delete UPDATE user SET Trigger_priv=Super_priv WHERE @hadTriggerPriv = 0; +# +# Log Table +# + +ALTER TABLE general_log + MODIFY COLUMN user_host MEDIUMTEXT NOT NULL, + MODIFY COLUMN thread_id INTEGER NOT NULL, + MODIFY COLUMN server_id INTEGER NOT NULL, + MODIFY COLUMN command_type VARCHAR(64) NOT NULL, + MODIFY COLUMN argument MEDIUMTEXT NOT NULL; +ALTER TABLE slow_log + MODIFY COLUMN db VARCHAR(512) NOT NULL, + MODIFY COLUMN last_insert_id INTEGER NOT NULL, + MODIFY COLUMN insert_id INTEGER NOT NULL, + MODIFY COLUMN server_id INTEGER NOT NULL; + # Activate the new, possible modified privilege tables # This should not be needed, but gives us some extra testing that the above # changes was correct diff --git a/storage/csv/ha_tina.cc b/storage/csv/ha_tina.cc index 6a87b8ecc72..75c3f70dec4 100644 --- a/storage/csv/ha_tina.cc +++ b/storage/csv/ha_tina.cc @@ -472,14 +472,6 @@ int ha_tina::encode_quote(uchar *buf) const char *ptr; const char *end_ptr; const bool was_null= (*field)->is_null(); - - /* - CSV does not support nulls. ::create() prevents creation of a table - with nullable columns so if we encounter them here, there is a bug. - This may only occur if the frm was created by an older version of - mysqld which permitted table creation with nullable columns. - */ - DBUG_ASSERT(!(*field)->maybe_null()); /* assistance for backwards compatibility in production builds. From 75095711f49bb77c4d7d56108449728c863b6007 Mon Sep 17 00:00:00 2001 From: "ramil/ram@mysql.com/ramil.myoffice.izhnet.ru" <> Date: Wed, 28 Nov 2007 10:55:13 +0400 Subject: [PATCH 07/13] Fix for bug #32726: crash with cast in order by clause and cp932 charset - fix for #31070 (missed during merging) applied for cp932 charset. - tests/results adjusted. --- mysql-test/include/ctype_common.inc | 2 + mysql-test/r/ctype_big5.result | 4 ++ mysql-test/r/ctype_cp932.result | 74 +++++++++++++++++++++++++++++ mysql-test/r/ctype_euckr.result | 4 ++ mysql-test/r/ctype_gb2312.result | 4 ++ mysql-test/r/ctype_gbk.result | 4 ++ mysql-test/r/ctype_uca.result | 4 ++ mysql-test/t/ctype_cp932.test | 4 ++ strings/ctype-cp932.c | 4 +- 9 files changed, 102 insertions(+), 2 deletions(-) diff --git a/mysql-test/include/ctype_common.inc b/mysql-test/include/ctype_common.inc index 9ee0a40c8ce..89b7ceb0c72 100644 --- a/mysql-test/include/ctype_common.inc +++ b/mysql-test/include/ctype_common.inc @@ -53,11 +53,13 @@ DROP TABLE t1; # # Bug #31070: crash during conversion of charsets +# Bug #32726: crash with cast in order by clause and cp932 charset # create table t1 (a set('a') not null); insert into t1 values (),(); select cast(a as char(1)) from t1; select a sounds like a from t1; +select 1 from t1 order by cast(a as char(1)); drop table t1; DROP DATABASE d1; diff --git a/mysql-test/r/ctype_big5.result b/mysql-test/r/ctype_big5.result index b190273cc64..8103e9b856f 100644 --- a/mysql-test/r/ctype_big5.result +++ b/mysql-test/r/ctype_big5.result @@ -64,6 +64,10 @@ select a sounds like a from t1; a sounds like a 1 1 +select 1 from t1 order by cast(a as char(1)); +1 +1 +1 drop table t1; DROP DATABASE d1; USE test; diff --git a/mysql-test/r/ctype_cp932.result b/mysql-test/r/ctype_cp932.result index e3598f00777..8974a6a8594 100755 --- a/mysql-test/r/ctype_cp932.result +++ b/mysql-test/r/ctype_cp932.result @@ -2,6 +2,80 @@ drop table if exists t1; drop table if exists t2; drop table if exists t3; drop table if exists t4; +SET @test_character_set= 'cp932'; +SET @test_collation= 'cp932_japanese_ci'; +SET @safe_character_set_server= @@character_set_server; +SET @safe_collation_server= @@collation_server; +SET character_set_server= @test_character_set; +SET collation_server= @test_collation; +CREATE DATABASE d1; +USE d1; +CREATE TABLE t1 (c CHAR(10), KEY(c)); +SHOW FULL COLUMNS FROM t1; +Field Type Collation Null Key Default Extra Privileges Comment +c char(10) cp932_japanese_ci YES MUL NULL +INSERT INTO t1 VALUES ('aaa'),('aaaa'),('aaaaa'); +SELECT c as want3results FROM t1 WHERE c LIKE 'aaa%'; +want3results +aaa +aaaa +aaaaa +DROP TABLE t1; +CREATE TABLE t1 (c1 varchar(15), KEY c1 (c1(2))); +SHOW FULL COLUMNS FROM t1; +Field Type Collation Null Key Default Extra Privileges Comment +c1 varchar(15) cp932_japanese_ci YES MUL NULL +INSERT INTO t1 VALUES ('location'),('loberge'),('lotre'),('boabab'); +SELECT c1 as want3results from t1 where c1 like 'l%'; +want3results +location +loberge +lotre +SELECT c1 as want3results from t1 where c1 like 'lo%'; +want3results +location +loberge +lotre +SELECT c1 as want1result from t1 where c1 like 'loc%'; +want1result +location +SELECT c1 as want1result from t1 where c1 like 'loca%'; +want1result +location +SELECT c1 as want1result from t1 where c1 like 'locat%'; +want1result +location +SELECT c1 as want1result from t1 where c1 like 'locati%'; +want1result +location +SELECT c1 as want1result from t1 where c1 like 'locatio%'; +want1result +location +SELECT c1 as want1result from t1 where c1 like 'location%'; +want1result +location +DROP TABLE t1; +create table t1 (a set('a') not null); +insert into t1 values (),(); +Warnings: +Warning 1364 Field 'a' doesn't have a default value +select cast(a as char(1)) from t1; +cast(a as char(1)) + + +select a sounds like a from t1; +a sounds like a +1 +1 +select 1 from t1 order by cast(a as char(1)); +1 +1 +1 +drop table t1; +DROP DATABASE d1; +USE test; +SET character_set_server= @safe_character_set_server; +SET collation_server= @safe_collation_server; set names cp932; set character_set_database = cp932; CREATE TABLE t1(c1 CHAR(1)) DEFAULT CHARACTER SET = cp932; diff --git a/mysql-test/r/ctype_euckr.result b/mysql-test/r/ctype_euckr.result index b9619370d4c..08fa9bd059a 100644 --- a/mysql-test/r/ctype_euckr.result +++ b/mysql-test/r/ctype_euckr.result @@ -64,6 +64,10 @@ select a sounds like a from t1; a sounds like a 1 1 +select 1 from t1 order by cast(a as char(1)); +1 +1 +1 drop table t1; DROP DATABASE d1; USE test; diff --git a/mysql-test/r/ctype_gb2312.result b/mysql-test/r/ctype_gb2312.result index 90c94c3b299..95246525368 100644 --- a/mysql-test/r/ctype_gb2312.result +++ b/mysql-test/r/ctype_gb2312.result @@ -64,6 +64,10 @@ select a sounds like a from t1; a sounds like a 1 1 +select 1 from t1 order by cast(a as char(1)); +1 +1 +1 drop table t1; DROP DATABASE d1; USE test; diff --git a/mysql-test/r/ctype_gbk.result b/mysql-test/r/ctype_gbk.result index fe90c7bff29..8437e34be1e 100644 --- a/mysql-test/r/ctype_gbk.result +++ b/mysql-test/r/ctype_gbk.result @@ -64,6 +64,10 @@ select a sounds like a from t1; a sounds like a 1 1 +select 1 from t1 order by cast(a as char(1)); +1 +1 +1 drop table t1; DROP DATABASE d1; USE test; diff --git a/mysql-test/r/ctype_uca.result b/mysql-test/r/ctype_uca.result index e676d5a5ca0..7d6bca7e7d0 100644 --- a/mysql-test/r/ctype_uca.result +++ b/mysql-test/r/ctype_uca.result @@ -2599,6 +2599,10 @@ select a sounds like a from t1; a sounds like a 1 1 +select 1 from t1 order by cast(a as char(1)); +1 +1 +1 drop table t1; DROP DATABASE d1; USE test; diff --git a/mysql-test/t/ctype_cp932.test b/mysql-test/t/ctype_cp932.test index 633f3af0d2b..3521a6fc91e 100644 --- a/mysql-test/t/ctype_cp932.test +++ b/mysql-test/t/ctype_cp932.test @@ -8,6 +8,10 @@ drop table if exists t3; drop table if exists t4; --enable_warnings +SET @test_character_set= 'cp932'; +SET @test_collation= 'cp932_japanese_ci'; +-- source include/ctype_common.inc + set names cp932; set character_set_database = cp932; diff --git a/strings/ctype-cp932.c b/strings/ctype-cp932.c index 42325648037..48c217921b1 100644 --- a/strings/ctype-cp932.c +++ b/strings/ctype-cp932.c @@ -5359,12 +5359,12 @@ my_wc_mb_cp932(CHARSET_INFO *cs __attribute__((unused)), static int my_mb_wc_cp932(CHARSET_INFO *cs __attribute__((unused)), my_wc_t *pwc, const uchar *s, const uchar *e){ - int hi=s[0]; + int hi; if (s >= e) return MY_CS_TOOSMALL; - if (hi < 0x80) + if ((hi= s[0]) < 0x80) { pwc[0]=hi; return 1; From 87bf7eff9225cc39b37e16c5440c0b033eea1212 Mon Sep 17 00:00:00 2001 From: "ramil/ram@mysql.com/ramil.myoffice.izhnet.ru" <> Date: Thu, 29 Nov 2007 22:32:34 +0400 Subject: [PATCH 08/13] after-merge fix: - result adjusted. --- .../binlog/r/binlog_row_ctype_cp932.result | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/mysql-test/suite/binlog/r/binlog_row_ctype_cp932.result b/mysql-test/suite/binlog/r/binlog_row_ctype_cp932.result index ef9f76b7d9c..655100203b5 100644 --- a/mysql-test/suite/binlog/r/binlog_row_ctype_cp932.result +++ b/mysql-test/suite/binlog/r/binlog_row_ctype_cp932.result @@ -2,6 +2,80 @@ drop table if exists t1; drop table if exists t2; drop table if exists t3; drop table if exists t4; +SET @test_character_set= 'cp932'; +SET @test_collation= 'cp932_japanese_ci'; +SET @safe_character_set_server= @@character_set_server; +SET @safe_collation_server= @@collation_server; +SET character_set_server= @test_character_set; +SET collation_server= @test_collation; +CREATE DATABASE d1; +USE d1; +CREATE TABLE t1 (c CHAR(10), KEY(c)); +SHOW FULL COLUMNS FROM t1; +Field Type Collation Null Key Default Extra Privileges Comment +c char(10) cp932_japanese_ci YES MUL NULL +INSERT INTO t1 VALUES ('aaa'),('aaaa'),('aaaaa'); +SELECT c as want3results FROM t1 WHERE c LIKE 'aaa%'; +want3results +aaa +aaaa +aaaaa +DROP TABLE t1; +CREATE TABLE t1 (c1 varchar(15), KEY c1 (c1(2))); +SHOW FULL COLUMNS FROM t1; +Field Type Collation Null Key Default Extra Privileges Comment +c1 varchar(15) cp932_japanese_ci YES MUL NULL +INSERT INTO t1 VALUES ('location'),('loberge'),('lotre'),('boabab'); +SELECT c1 as want3results from t1 where c1 like 'l%'; +want3results +location +loberge +lotre +SELECT c1 as want3results from t1 where c1 like 'lo%'; +want3results +location +loberge +lotre +SELECT c1 as want1result from t1 where c1 like 'loc%'; +want1result +location +SELECT c1 as want1result from t1 where c1 like 'loca%'; +want1result +location +SELECT c1 as want1result from t1 where c1 like 'locat%'; +want1result +location +SELECT c1 as want1result from t1 where c1 like 'locati%'; +want1result +location +SELECT c1 as want1result from t1 where c1 like 'locatio%'; +want1result +location +SELECT c1 as want1result from t1 where c1 like 'location%'; +want1result +location +DROP TABLE t1; +create table t1 (a set('a') not null); +insert into t1 values (),(); +Warnings: +Warning 1364 Field 'a' doesn't have a default value +select cast(a as char(1)) from t1; +cast(a as char(1)) + + +select a sounds like a from t1; +a sounds like a +1 +1 +select 1 from t1 order by cast(a as char(1)); +1 +1 +1 +drop table t1; +DROP DATABASE d1; +USE test; +SET character_set_server= @safe_character_set_server; +SET collation_server= @safe_collation_server; set names cp932; set character_set_database = cp932; CREATE TABLE t1(c1 CHAR(1)) DEFAULT CHARACTER SET = cp932; From 12df19a7a5e19d84e42275f54d100a07f67876b1 Mon Sep 17 00:00:00 2001 From: "svoj@mysql.com/june.mysql.com" <> Date: Fri, 30 Nov 2007 15:00:15 +0400 Subject: [PATCH 09/13] BUG#32050 - table logging gone wrong. Reverted log tables alteration. --- scripts/mysql_system_tables_fix.sql | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/scripts/mysql_system_tables_fix.sql b/scripts/mysql_system_tables_fix.sql index fccd1737e31..a43964bf09a 100644 --- a/scripts/mysql_system_tables_fix.sql +++ b/scripts/mysql_system_tables_fix.sql @@ -513,22 +513,6 @@ ALTER TABLE tables_priv MODIFY Table_priv set('Select','Insert','Update','Delete UPDATE user SET Trigger_priv=Super_priv WHERE @hadTriggerPriv = 0; -# -# Log Table -# - -ALTER TABLE general_log - MODIFY COLUMN user_host MEDIUMTEXT NOT NULL, - MODIFY COLUMN thread_id INTEGER NOT NULL, - MODIFY COLUMN server_id INTEGER NOT NULL, - MODIFY COLUMN command_type VARCHAR(64) NOT NULL, - MODIFY COLUMN argument MEDIUMTEXT NOT NULL; -ALTER TABLE slow_log - MODIFY COLUMN db VARCHAR(512) NOT NULL, - MODIFY COLUMN last_insert_id INTEGER NOT NULL, - MODIFY COLUMN insert_id INTEGER NOT NULL, - MODIFY COLUMN server_id INTEGER NOT NULL; - # Activate the new, possible modified privilege tables # This should not be needed, but gives us some extra testing that the above # changes was correct From b21a56aa24262ea173c1ae648603ec75874a0cf7 Mon Sep 17 00:00:00 2001 From: "istruewing@stella.local" <> Date: Fri, 30 Nov 2007 15:16:31 +0100 Subject: [PATCH 10/13] Bug#30491 - MERGE doesn't report error when one table is Innodb 1. A bad error message was given when a MERGE table with an InnoDB child table was tried to use. 2. After selecting from a correct MERGE table and then altering one of the children to InnoDB, incorrect results were returned. These bugs have been fixed with the patch for bug 26379 (Combination of FLUSH TABLE and REPAIR TABLE corrupts a MERGE table). For verification, I added the test case from the bug report. --- mysql-test/r/merge_innodb.result | 37 ++++++++++++++++++++++++++++ mysql-test/t/merge_innodb.test | 41 ++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 mysql-test/r/merge_innodb.result create mode 100644 mysql-test/t/merge_innodb.test diff --git a/mysql-test/r/merge_innodb.result b/mysql-test/r/merge_innodb.result new file mode 100644 index 00000000000..f6057d279b1 --- /dev/null +++ b/mysql-test/r/merge_innodb.result @@ -0,0 +1,37 @@ +DROP TABLE IF EXISTS t1, t2, t3, t4, t5; +CREATE TABLE t1 (c1 varchar(100)) ENGINE=MyISAM; +CREATE TABLE t2 (c1 varchar(100)) ENGINE=MyISAM; +CREATE TABLE t3 (c1 varchar(100)) ENGINE=InnoDB; +INSERT INTO t1 VALUES ('Ann'), ('Alice'); +INSERT INTO t2 VALUES ('Bob'), ('Brian'); +INSERT INTO t3 VALUES ('Chris'), ('Charlie'); +CREATE TABLE t4 (c1 varchar(100)) ENGINE=MRG_MYISAM UNION=(t1,t2) +INSERT_METHOD=LAST; +CREATE TABLE t5 (c1 varchar(100)) ENGINE=MRG_MYISAM UNION=(t1,t3) +INSERT_METHOD=LAST; +SELECT * FROM t5; +ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist +SELECT * FROM t4; +c1 +Ann +Alice +Bob +Brian +ALTER TABLE t2 ENGINE=InnoDB; +SELECT * FROM t4; +ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist +DELETE FROM t2 LIMIT 1; +SELECT * FROM t4; +ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist +INSERT INTO t4 VALUES ('Beware'); +ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist +SELECT * FROM t4; +ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist +SELECT * FROM t2; +c1 +Brian +SELECT * FROM t1; +c1 +Ann +Alice +DROP TABLE t1, t2, t3, t4, t5; diff --git a/mysql-test/t/merge_innodb.test b/mysql-test/t/merge_innodb.test new file mode 100644 index 00000000000..7f0b1a0c36e --- /dev/null +++ b/mysql-test/t/merge_innodb.test @@ -0,0 +1,41 @@ +# t/merge_innodb.test +# +# Tests with MERGE tables over InnoDB tables +# + +--source include/have_innodb.inc + +--disable_warnings +DROP TABLE IF EXISTS t1, t2, t3, t4, t5; +--enable_warnings + +# +# Bug#30491 - MERGE doesn't report error when one table is Innodb +# +CREATE TABLE t1 (c1 varchar(100)) ENGINE=MyISAM; +CREATE TABLE t2 (c1 varchar(100)) ENGINE=MyISAM; +CREATE TABLE t3 (c1 varchar(100)) ENGINE=InnoDB; +INSERT INTO t1 VALUES ('Ann'), ('Alice'); +INSERT INTO t2 VALUES ('Bob'), ('Brian'); +INSERT INTO t3 VALUES ('Chris'), ('Charlie'); +CREATE TABLE t4 (c1 varchar(100)) ENGINE=MRG_MYISAM UNION=(t1,t2) + INSERT_METHOD=LAST; +CREATE TABLE t5 (c1 varchar(100)) ENGINE=MRG_MYISAM UNION=(t1,t3) + INSERT_METHOD=LAST; +--error ER_WRONG_MRG_TABLE +SELECT * FROM t5; +SELECT * FROM t4; +ALTER TABLE t2 ENGINE=InnoDB; +--error ER_WRONG_MRG_TABLE +SELECT * FROM t4; +DELETE FROM t2 LIMIT 1; +--error ER_WRONG_MRG_TABLE +SELECT * FROM t4; +--error ER_WRONG_MRG_TABLE +INSERT INTO t4 VALUES ('Beware'); +--error ER_WRONG_MRG_TABLE +SELECT * FROM t4; +SELECT * FROM t2; +SELECT * FROM t1; +DROP TABLE t1, t2, t3, t4, t5; + From 1d7ac77479d22e25c58c37f36ba086e8ebb5356b Mon Sep 17 00:00:00 2001 From: "mattiasj@witty." <> Date: Mon, 3 Dec 2007 16:12:25 +0100 Subject: [PATCH 11/13] Bug#30480: Falcon: searches fail if LIKE and key partition (also fixes the bugs: Bug#29320, Bug#29493 and Bug#30536) Problem: Partitioning did not handle unordered scans correctly for engines with unordered read order. Solution: do not stop scanning fi a recored is out of range, since there can be more records within the range afterwards. Note: this is the patch that fixes the bug, but since there are no storage engines shipped with mysql 5.1 (falcon comes in 6.0) there are no test cases (it is a separate patch that only goes into 6.0) --- sql/ha_partition.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 1400d9da753..5abdf873c81 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -3983,7 +3983,8 @@ int ha_partition::handle_unordered_next(uchar *buf, bool is_next_same) } else if (!(error= file->index_next(buf))) { - if (compare_key(end_range) <= 0) + if (!(file->table_flags() & HA_READ_ORDER) || + compare_key(end_range) <= 0) { m_last_part= m_part_spec.start_part; DBUG_RETURN(0); // Row was in range @@ -4060,7 +4061,8 @@ int ha_partition::handle_unordered_scan_next_partition(uchar * buf) } if (!error) { - if (compare_key(end_range) <= 0) + if (!(file->table_flags() & HA_READ_ORDER) || + compare_key(end_range) <= 0) { m_last_part= i; DBUG_RETURN(0); From 413112fb55afb352537f35a77d17327f5370c873 Mon Sep 17 00:00:00 2001 From: "svoj@mysql.com/june.mysql.com" <> Date: Fri, 7 Dec 2007 14:44:03 +0400 Subject: [PATCH 12/13] BUG#32817 - though CSV is marked as supported create table is rejected with error 1005. CSV doesn't support nullable fields. Report descriptive error if create table with nullable field is requested. --- mysql-test/r/csv.result | 10 ++++++++-- mysql-test/t/csv.test | 11 +++++++++-- storage/csv/ha_tina.cc | 5 ++++- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/mysql-test/r/csv.result b/mysql-test/r/csv.result index 69f77dc3cd8..b0033383f00 100644 --- a/mysql-test/r/csv.result +++ b/mysql-test/r/csv.result @@ -5364,13 +5364,19 @@ BIN(a) 0 drop table t1; create table t1(a enum('foo','bar') default null) engine=csv; -ERROR HY000: Can't create table 'test.t1' (errno: -1) +ERROR 42000: The storage engine for the table doesn't support nullable columns create table t1(a enum('foo','bar') default 'foo') engine=csv; -ERROR HY000: Can't create table 'test.t1' (errno: -1) +ERROR 42000: The storage engine for the table doesn't support nullable columns create table t1(a enum('foo','bar') default 'foo' not null) engine=csv; insert into t1 values(); select * from t1; a foo drop table t1; +CREATE TABLE t1(a INT) ENGINE=CSV; +ERROR 42000: The storage engine for the table doesn't support nullable columns +SHOW WARNINGS; +Level Code Message +Error 1178 The storage engine for the table doesn't support nullable columns +Error 1005 Can't create table 'test.t1' (errno: 138) End of 5.1 tests diff --git a/mysql-test/t/csv.test b/mysql-test/t/csv.test index 6c83fbfdc9c..7b4f95bbf8a 100644 --- a/mysql-test/t/csv.test +++ b/mysql-test/t/csv.test @@ -1755,9 +1755,9 @@ insert into t1 values(); select BIN(a) from t1; drop table t1; # We prevent creation of table with nullable ENUM ---error ER_CANT_CREATE_TABLE +--error ER_CHECK_NOT_IMPLEMENTED create table t1(a enum('foo','bar') default null) engine=csv; ---error ER_CANT_CREATE_TABLE +--error ER_CHECK_NOT_IMPLEMENTED create table t1(a enum('foo','bar') default 'foo') engine=csv; # Enum columns must be specified as NOT NULL create table t1(a enum('foo','bar') default 'foo' not null) engine=csv; @@ -1765,5 +1765,12 @@ insert into t1 values(); select * from t1; drop table t1; +# +# BUG#32817 - though CSV is marked as supported create table is rejected +# with error 1005. +# +--error ER_CHECK_NOT_IMPLEMENTED +CREATE TABLE t1(a INT) ENGINE=CSV; +SHOW WARNINGS; --echo End of 5.1 tests diff --git a/storage/csv/ha_tina.cc b/storage/csv/ha_tina.cc index 75c3f70dec4..b5ef4620108 100644 --- a/storage/csv/ha_tina.cc +++ b/storage/csv/ha_tina.cc @@ -1486,7 +1486,10 @@ int ha_tina::create(const char *name, TABLE *table_arg, for (Field **field= table_arg->s->field; *field; field++) { if ((*field)->real_maybe_null()) - DBUG_RETURN(-1); + { + my_error(ER_CHECK_NOT_IMPLEMENTED, MYF(0), "nullable columns"); + DBUG_RETURN(HA_ERR_UNSUPPORTED); + } } From 71160422ee4ebccac974ff4a42934dafcaf56449 Mon Sep 17 00:00:00 2001 From: "dkatz@damien-katzs-computer.local" <> Date: Fri, 7 Dec 2007 19:27:45 -0500 Subject: [PATCH 13/13] Bug#29830 Test case 'events_scheduling' fails on Mac OS X and Windows. Change LAST_EXECUTED time the execution start time, instead of the execution completion time. This ensures the END time always the same or later than the LAST_EXECUTED time. --- mysql-test/r/events_scheduling.result | 4 ++-- mysql-test/t/disabled.def | 1 - mysql-test/t/events_scheduling.test | 2 +- sql/event_data_objects.cc | 2 -- 4 files changed, 3 insertions(+), 6 deletions(-) diff --git a/mysql-test/r/events_scheduling.result b/mysql-test/r/events_scheduling.result index d45bffcd7ff..033136ba354 100644 --- a/mysql-test/r/events_scheduling.result +++ b/mysql-test/r/events_scheduling.result @@ -78,10 +78,10 @@ FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_SCHEMA=DATABASE() AND EVENT_NAME='event_2'; IF(TIME_TO_SEC(TIMEDIFF(ENDS,STARTS))=6, 'OK', 'ERROR') OK -SELECT IF(LAST_EXECUTED-ENDS < 3, 'OK', 'ERROR') +SELECT IF(LAST_EXECUTED-ENDS <= 0, 'OK', 'ERROR') FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_SCHEMA=DATABASE() AND EVENT_NAME='event_2'; -IF(LAST_EXECUTED-ENDS < 3, 'OK', 'ERROR') +IF(LAST_EXECUTED-ENDS <= 0, 'OK', 'ERROR') OK "Already dropped because ended. Therefore an error." DROP EVENT event_3; diff --git a/mysql-test/t/disabled.def b/mysql-test/t/disabled.def index 3746d20ebd8..234b502b22b 100644 --- a/mysql-test/t/disabled.def +++ b/mysql-test/t/disabled.def @@ -16,7 +16,6 @@ ctype_big5 : BUG#26711 2007-06-21 Lars Test has never worked on Do federated_transactions : Bug#29523 Transactions do not work events : Bug#32664 events.test fails randomly -events_scheduling : Bug#29830 Test case 'events_scheduling' fails on Mac OS X and Windows lowercase_table3 : Bug#32667 lowercase_table3.test reports to error log kill : Bug#29149: Test "kill" fails on Windows grant3 : Bug#32723: grant3.test fails diff --git a/mysql-test/t/events_scheduling.test b/mysql-test/t/events_scheduling.test index b1eeae1e020..226cad0f3eb 100644 --- a/mysql-test/t/events_scheduling.test +++ b/mysql-test/t/events_scheduling.test @@ -87,7 +87,7 @@ SELECT IF(TIME_TO_SEC(TIMEDIFF(ENDS,STARTS))=6, 'OK', 'ERROR') FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_SCHEMA=DATABASE() AND EVENT_NAME='event_2'; -SELECT IF(LAST_EXECUTED-ENDS < 3, 'OK', 'ERROR') +SELECT IF(LAST_EXECUTED-ENDS <= 0, 'OK', 'ERROR') FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_SCHEMA=DATABASE() AND EVENT_NAME='event_2'; diff --git a/sql/event_data_objects.cc b/sql/event_data_objects.cc index adac2b596c1..f4b64ab3012 100644 --- a/sql/event_data_objects.cc +++ b/sql/event_data_objects.cc @@ -1649,8 +1649,6 @@ err: void Event_queue_element::mark_last_executed(THD *thd) { - thd->set_current_time(); - last_executed= (my_time_t) thd->query_start(); last_executed_changed= TRUE;