summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRucha Deodhar <rucha.deodhar@mariadb.com>2022-03-28 15:12:33 +0530
committerRucha Deodhar <rucha.deodhar@mariadb.com>2022-03-30 15:12:49 +0530
commitc6eeacd10f87eb437097d755d8dd29211ebdab87 (patch)
treee938184db31f23ea83d4c4171a490eeaa98e2d1e
parent0b9842a3e766ec56ff3e14bec387dc639677c4db (diff)
downloadmariadb-git-c6eeacd10f87eb437097d755d8dd29211ebdab87.tar.gz
MDEV-13005: Fixing bugs in SEQUENCE, part 3, 3/5
Task 3: Added an additional condition for SEQUENCE option to check if cache < 0.
-rw-r--r--mysql-test/suite/sql_sequence/create.result3
-rw-r--r--mysql-test/suite/sql_sequence/create.test4
-rw-r--r--sql/sql_sequence.cc2
3 files changed, 8 insertions, 1 deletions
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);