Skip to content

Commit

Permalink
MDEV-13005: Fixing bugs in SEQUENCE, part 3, 1/5
Browse files Browse the repository at this point in the history
Task 1:
If table is added to list using option TL_OPTION_SEQUENCE (done when we
have sequence functions) then then we are dealing with sequence instead
of table. So global table list will have sequence set to true. This is
used to check and give correct error message about unknown sequence
instead of table doesn't exist.
  • Loading branch information
mariadb-RuchaDeodhar committed Mar 30, 2022
1 parent d59b16d commit bb4dd70
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 11 deletions.
5 changes: 2 additions & 3 deletions mysql-test/suite/sql_sequence/alter.result
Original file line number Diff line number Diff line change
Expand Up @@ -211,10 +211,9 @@ alter sequence t1 minvalue=100;
ERROR 42S02: 'test.t1' is not a SEQUENCE
drop table t1;
alter sequence if exists t1 minvalue=100;
Warnings:
Note 4091 Unknown SEQUENCE: 'test.t1'
ERROR 42S02: Unknown SEQUENCE: 't1'
alter sequence t1 minvalue=100;
ERROR 42S02: Table 'test.t1' doesn't exist
ERROR 42S02: Unknown SEQUENCE: 't1'
create sequence t1;
alter sequence t1;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1
Expand Down
3 changes: 2 additions & 1 deletion mysql-test/suite/sql_sequence/alter.test
Original file line number Diff line number Diff line change
Expand Up @@ -119,8 +119,9 @@ create table t1 (a int);
alter sequence t1 minvalue=100;
drop table t1;

--error ER_UNKNOWN_SEQUENCES
alter sequence if exists t1 minvalue=100;
--error ER_NO_SUCH_TABLE
--error ER_UNKNOWN_SEQUENCES
alter sequence t1 minvalue=100;

create sequence t1;
Expand Down
12 changes: 10 additions & 2 deletions mysql-test/suite/sql_sequence/create.result
Original file line number Diff line number Diff line change
Expand Up @@ -478,7 +478,7 @@ next value for t1
1
drop temporary table t1;
select previous value for t1;
ERROR 42S02: Table 'test.t1' doesn't exist
ERROR 42S02: Unknown SEQUENCE: 't1'
CREATE SEQUENCE t1 start with 1 minvalue 1 maxvalue 10 increment by 1 cache 10;
select next value for t1;
next value for t1
Expand Down Expand Up @@ -507,7 +507,7 @@ next value for t1
1
drop temporary table t1;
select previous value for t1;
ERROR 42S02: Table 'test.t1' doesn't exist
ERROR 42S02: Unknown SEQUENCE: 't1'
CREATE SEQUENCE t1 start with 1 minvalue 1 maxvalue 10 increment by 1 cache 10 engine=innodb;
select next value for t1;
next value for t1
Expand Down Expand Up @@ -687,3 +687,11 @@ set global innodb_force_primary_key=default;
ALTER TABLE s1 ADD PRIMARY KEY (next_not_cached_value);
ERROR HY000: Sequence 'test.s1' table structure is invalid (Sequence tables cannot have any keys)
DROP SEQUENCE s1;
#
# Beginning of 10.4 Test
#
# MDEV-13005: Fixing bugs in SEQUENCE, part 3
#
# Task 1:
SET @x = PREVIOUS VALUE FOR x;
ERROR 42S02: Unknown SEQUENCE: 'x'
14 changes: 12 additions & 2 deletions mysql-test/suite/sql_sequence/create.test
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,7 @@ drop view v1;
CREATE TEMPORARY SEQUENCE t1;
select next value for t1;
drop temporary table t1;
--error ER_NO_SUCH_TABLE
--error ER_UNKNOWN_SEQUENCES
select previous value for t1;
CREATE SEQUENCE t1 start with 1 minvalue 1 maxvalue 10 increment by 1 cache 10;
select next value for t1;
Expand All @@ -398,7 +398,7 @@ drop sequence t1;
CREATE TEMPORARY SEQUENCE t1 engine=innodb;
select next value for t1;
drop temporary table t1;
--error ER_NO_SUCH_TABLE
--error ER_UNKNOWN_SEQUENCES
select previous value for t1;
CREATE SEQUENCE t1 start with 1 minvalue 1 maxvalue 10 increment by 1 cache 10 engine=innodb;
select next value for t1;
Expand Down Expand Up @@ -515,3 +515,13 @@ set global innodb_force_primary_key=default;
--error ER_SEQUENCE_INVALID_TABLE_STRUCTURE
ALTER TABLE s1 ADD PRIMARY KEY (next_not_cached_value);
DROP SEQUENCE s1;

--echo #
--echo # Beginning of 10.4 Test
--echo #
--echo # MDEV-13005: Fixing bugs in SEQUENCE, part 3
--echo #

--echo # Task 1:
--error ER_UNKNOWN_SEQUENCES
SET @x = PREVIOUS VALUE FOR x;
2 changes: 1 addition & 1 deletion mysql-test/suite/sql_sequence/next.result
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,7 @@ previous value for t1
1
drop sequence t1;
select previous value for t1;
ERROR 42S02: Table 'test.t1' doesn't exist
ERROR 42S02: Unknown SEQUENCE: 't1'
CREATE SEQUENCE t1 start with 5 minvalue 1 maxvalue 10 increment by 1 cache 5 cycle;
select previous value for t1;
previous value for t1
Expand Down
2 changes: 1 addition & 1 deletion mysql-test/suite/sql_sequence/next.test
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ select previous value for t1;
flush tables;
select previous value for t1;
drop sequence t1;
--error ER_NO_SUCH_TABLE
--error ER_UNKNOWN_SEQUENCES
select previous value for t1;
CREATE SEQUENCE t1 start with 5 minvalue 1 maxvalue 10 increment by 1 cache 5 cycle;
select previous value for t1;
Expand Down
4 changes: 3 additions & 1 deletion sql/handler.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5469,7 +5469,9 @@ int ha_discover_table(THD *thd, TABLE_SHARE *share)
else
found= plugin_foreach(thd, discover_handlerton,
MYSQL_STORAGE_ENGINE_PLUGIN, share);


if (thd->lex->query_tables && thd->lex->query_tables->sequence && !found)
my_error(ER_UNKNOWN_SEQUENCES, MYF(0),share->table_name.str);
if (!found)
open_table_error(share, OPEN_FRM_OPEN_ERROR, ENOENT); // not found

Expand Down

0 comments on commit bb4dd70

Please sign in to comment.