diff --git a/mysql-test/suite/sql_sequence/create.result b/mysql-test/suite/sql_sequence/create.result index a7138756b11..e80400023e7 100644 --- a/mysql-test/suite/sql_sequence/create.result +++ b/mysql-test/suite/sql_sequence/create.result @@ -698,3 +698,6 @@ ERROR 42S02: Unknown SEQUENCE: 'x' # Task 2: CREATE SEQUENCE x START WITH 1 INCREMENT BY 123456789012345678; ERROR HY000: Sequence 'test.x' has out of range value for options +# Task 3: +CREATE SEQUENCE seq1 START WITH 1 cache -1; +ERROR HY000: Sequence 'test.seq1' has out of range value for options diff --git a/mysql-test/suite/sql_sequence/create.test b/mysql-test/suite/sql_sequence/create.test index 39fb5a9c9cd..766282be781 100644 --- a/mysql-test/suite/sql_sequence/create.test +++ b/mysql-test/suite/sql_sequence/create.test @@ -529,3 +529,7 @@ SET @x = PREVIOUS VALUE FOR x; --echo # Task 2: --error ER_SEQUENCE_INVALID_DATA CREATE SEQUENCE x START WITH 1 INCREMENT BY 123456789012345678; + +--echo # Task 3: +--error ER_SEQUENCE_INVALID_DATA +CREATE SEQUENCE seq1 START WITH 1 cache -1; diff --git a/sql/sql_sequence.cc b/sql/sql_sequence.cc index 03f2f1b117f..367fbad144c 100644 --- a/sql/sql_sequence.cc +++ b/sql/sql_sequence.cc @@ -121,7 +121,7 @@ bool sequence_definition::check_and_adjust(bool set_reserved_until) start >= min_value && max_value != LONGLONG_MAX && min_value != LONGLONG_MIN && - cache < (LONGLONG_MAX - max_increment) / max_increment && + cache >= 0 && cache < (LONGLONG_MAX - max_increment) / max_increment && ((real_increment > 0 && reserved_until >= min_value) || (real_increment < 0 && reserved_until <= max_value))) DBUG_RETURN(FALSE);