diff options
author | Oleksandr Byelkin <sanja@mariadb.com> | 2018-04-25 21:32:47 +0200 |
---|---|---|
committer | Oleksandr Byelkin <sanja@mariadb.com> | 2018-04-25 21:32:47 +0200 |
commit | ddb1e1d009aaf0272a46ffdd9977bcde32c89305 (patch) | |
tree | d51f6477b8e1d58737e3b6a7d18d6afd19ea3d4e | |
parent | b4ee699a89ccf4f3cf52a18236e821f0d8466e8d (diff) | |
download | mariadb-git-bb-10.3-MDEV-15732.tar.gz |
MDEV-15732: Assertion `next_free_value % real_increment == offset && next_free_value >= reserved_until' failed in sequence_definition::adjust_values upon SETVAL for sequence with INCREMENT 0bb-10.3-MDEV-15732
there was 2 problems with "next_free_value >= reserved_until" condition:
1) it should be <=
2) SEQUENCE::set_value handle next_free_value & reserved_until after adjust_values() call, so it is incorect to put assert on it in adjust_values()
-rw-r--r-- | mysql-test/suite/sql_sequence/setval.result | 15 | ||||
-rw-r--r-- | mysql-test/suite/sql_sequence/setval.test | 17 | ||||
-rw-r--r-- | sql/sql_sequence.cc | 3 |
3 files changed, 33 insertions, 2 deletions
diff --git a/mysql-test/suite/sql_sequence/setval.result b/mysql-test/suite/sql_sequence/setval.result index b7cda27cf96..504d460fea5 100644 --- a/mysql-test/suite/sql_sequence/setval.result +++ b/mysql-test/suite/sql_sequence/setval.result @@ -254,3 +254,18 @@ def SETVAL(s1,10) 8 20 2 Y 32896 0 63 SETVAL(s1,10) 10 DROP SEQUENCE s1; +# +# MDEV-15732: Assertion `next_free_value % real_increment == offset && +# next_free_value >= reserved_until' failed in +# sequence_definition::adjust_values upon SETVAL for sequence with +# INCREMENT 0 +# +CREATE SEQUENCE s INCREMENT 0; +SELECT NEXTVAL(s); +NEXTVAL(s) +1 +SELECT SETVAL(s, 10); +SETVAL(s, 10) +10 +DROP SEQUENCE s; +# End of 10.3 tests diff --git a/mysql-test/suite/sql_sequence/setval.test b/mysql-test/suite/sql_sequence/setval.test index 8f8059fdcae..1993bdbe077 100644 --- a/mysql-test/suite/sql_sequence/setval.test +++ b/mysql-test/suite/sql_sequence/setval.test @@ -137,3 +137,20 @@ SELECT SETVAL(s1,10); DROP SEQUENCE s1; --enable_ps_protocol --disable_metadata + +--echo # +--echo # MDEV-15732: Assertion `next_free_value % real_increment == offset && +--echo # next_free_value >= reserved_until' failed in +--echo # sequence_definition::adjust_values upon SETVAL for sequence with +--echo # INCREMENT 0 +--echo # + +CREATE SEQUENCE s INCREMENT 0; +SELECT NEXTVAL(s); +SELECT SETVAL(s, 10); + +# Cleanup +DROP SEQUENCE s; + + +--echo # End of 10.3 tests diff --git a/sql/sql_sequence.cc b/sql/sql_sequence.cc index 18f0028908f..4d0f15386e7 100644 --- a/sql/sql_sequence.cc +++ b/sql/sql_sequence.cc @@ -560,8 +560,7 @@ void sequence_definition::adjust_values(longlong next_value) else { next_free_value+= to_add; - DBUG_ASSERT(next_free_value % real_increment == offset && - next_free_value >= reserved_until); + DBUG_ASSERT(next_free_value % real_increment == offset); } } } |