Commit a9bee988 authored by Monty's avatar Monty

Don't allow ALTER TABLE ... ORDER BY on SEQUENCE objects

MDEV-19320 Sequence gets corrupted and produces ER_KEY_NOT_FOUND
           (Can't find record) after ALTER .. ORDER BY
parent e6a6382f
...@@ -242,3 +242,10 @@ CREATE SEQUENCE t1 engine=innodb; ...@@ -242,3 +242,10 @@ CREATE SEQUENCE t1 engine=innodb;
ALTER IGNORE TABLE t1 ADD CHECK (start_value < minimum_value); ALTER IGNORE TABLE t1 ADD CHECK (start_value < minimum_value);
ERROR HY000: Sequence 'test.t1' table structure is invalid (Sequence tables cannot have any constraints) ERROR HY000: Sequence 'test.t1' table structure is invalid (Sequence tables cannot have any constraints)
DROP SEQUENCE t1; DROP SEQUENCE t1;
CREATE SEQUENCE s;
ALTER TABLE s ORDER BY cache_size;
ERROR HY000: Sequence 'test.s' table structure is invalid (ORDER BY)
SELECT NEXTVAL(s);
NEXTVAL(s)
1
DROP SEQUENCE s;
...@@ -149,3 +149,14 @@ CREATE SEQUENCE t1 engine=innodb; ...@@ -149,3 +149,14 @@ CREATE SEQUENCE t1 engine=innodb;
--error ER_SEQUENCE_INVALID_TABLE_STRUCTURE --error ER_SEQUENCE_INVALID_TABLE_STRUCTURE
ALTER IGNORE TABLE t1 ADD CHECK (start_value < minimum_value); ALTER IGNORE TABLE t1 ADD CHECK (start_value < minimum_value);
DROP SEQUENCE t1; DROP SEQUENCE t1;
#
# MDEV-19320 Sequence gets corrupted and produces ER_KEY_NOT_FOUND (Can't
# find record) after ALTER .. ORDER BY
#
CREATE SEQUENCE s;
--error ER_SEQUENCE_INVALID_TABLE_STRUCTURE
ALTER TABLE s ORDER BY cache_size;
SELECT NEXTVAL(s);
DROP SEQUENCE s;
...@@ -208,6 +208,11 @@ bool check_sequence_fields(LEX *lex, List<Create_field> *fields) ...@@ -208,6 +208,11 @@ bool check_sequence_fields(LEX *lex, List<Create_field> *fields)
reason= "Sequence tables cannot have any constraints"; reason= "Sequence tables cannot have any constraints";
goto err; goto err;
} }
if (lex->alter_info.flags & ALTER_ORDER)
{
reason= "ORDER BY";
goto err;
}
for (field_no= 0; (field= it++); field_no++) for (field_no= 0; (field= it++); field_no++)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment