2017-05-23 16:18:31 +02:00
|
|
|
#
|
|
|
|
# This test is based on tests from ALISQL test suite
|
|
|
|
#
|
|
|
|
|
MDEV-10139 Support for SEQUENCE objects
Working features:
CREATE OR REPLACE [TEMPORARY] SEQUENCE [IF NOT EXISTS] name
[ INCREMENT [ BY | = ] increment ]
[ MINVALUE [=] minvalue | NO MINVALUE ]
[ MAXVALUE [=] maxvalue | NO MAXVALUE ]
[ START [ WITH | = ] start ] [ CACHE [=] cache ] [ [ NO ] CYCLE ]
ENGINE=xxx COMMENT=".."
SELECT NEXT VALUE FOR sequence_name;
SELECT NEXTVAL(sequence_name);
SELECT PREVIOUS VALUE FOR sequence_name;
SELECT LASTVAL(sequence_name);
SHOW CREATE SEQUENCE sequence_name;
SHOW CREATE TABLE sequence_name;
CREATE TABLE sequence-structure ... SEQUENCE=1
ALTER TABLE sequence RENAME TO sequence2;
RENAME TABLE sequence TO sequence2;
DROP [TEMPORARY] SEQUENCE [IF EXISTS] sequence_names
Missing features
- SETVAL(value,sequence_name), to be used with replication.
- Check replication, including checking that sequence tables are marked
not transactional.
- Check that a commit happens for NEXT VALUE that changes table data (may
already work)
- ALTER SEQUENCE. ANSI SQL version of setval.
- Share identical sequence entries to not add things twice to table list.
- testing insert/delete/update/truncate/load data
- Run and fix Alibaba sequence tests (part of mysql-test/suite/sql_sequence)
- Write documentation for NEXT VALUE / PREVIOUS_VALUE
- NEXTVAL in DEFAULT
- Ensure that NEXTVAL in DEFAULT uses database from base table
- Two NEXTVAL for same row should give same answer.
- Oracle syntax sequence_table.nextval, without any FOR or FROM.
- Sequence tables are treated as 'not read constant tables' by SELECT; Would
be better if we would have a separate list for sequence tables so that
select doesn't know about them, except if refereed to with FROM.
Other things done:
- Improved output for safemalloc backtrack
- frm_type_enum changed to Table_type
- Removed lex->is_view and replaced with lex->table_type. This allows
use to more easy check if item is view, sequence or table.
- Added table flag HA_CAN_TABLES_WITHOUT_ROLLBACK, needed for handlers
that want's to support sequences
- Added handler calls:
- engine_name(), to simplify getting engine name for partition and sequences
- update_first_row(), to be able to do efficient sequence implementations.
- Made binlog_log_row() global to be able to call it from ha_sequence.cc
- Added handler variable: row_already_logged, to be able to flag that the
changed row is already logging to replication log.
- Added CF_DB_CHANGE and CF_SCHEMA_CHANGE flags to simplify
deny_updates_if_read_only_option()
- Added sp_add_cfetch() to avoid new conflicts in sql_yacc.yy
- Moved code for add_table_options() out from sql_show.cc::show_create_table()
- Added String::append_longlong() and used it in sql_show.cc to simplify code.
- Added extra option to dd_frm_type() and ha_table_exists to indicate if
the table is a sequence. Needed by DROP SQUENCE to not drop a table.
2017-03-25 22:36:56 +01:00
|
|
|
--source include/have_binlog_format_row.inc
|
|
|
|
--source include/master-slave.inc
|
|
|
|
--source include/have_innodb.inc
|
|
|
|
|
|
|
|
connection master;
|
|
|
|
create database s_db;
|
|
|
|
grant all on s_db.* to normal_1@'%' identified by 'pass';
|
|
|
|
grant all on test.* to normal_2@'%' identified by 'pass';
|
|
|
|
grant all on s_db.* to normal_3@'%' identified by 'pass';
|
|
|
|
grant all on test.* to normal_4@'%' identified by 'pass';
|
2017-05-30 20:31:30 +02:00
|
|
|
grant select on test.* to normal_5@'%' identified by 'pass';
|
2017-07-01 16:21:02 +02:00
|
|
|
flush status;
|
MDEV-10139 Support for SEQUENCE objects
Working features:
CREATE OR REPLACE [TEMPORARY] SEQUENCE [IF NOT EXISTS] name
[ INCREMENT [ BY | = ] increment ]
[ MINVALUE [=] minvalue | NO MINVALUE ]
[ MAXVALUE [=] maxvalue | NO MAXVALUE ]
[ START [ WITH | = ] start ] [ CACHE [=] cache ] [ [ NO ] CYCLE ]
ENGINE=xxx COMMENT=".."
SELECT NEXT VALUE FOR sequence_name;
SELECT NEXTVAL(sequence_name);
SELECT PREVIOUS VALUE FOR sequence_name;
SELECT LASTVAL(sequence_name);
SHOW CREATE SEQUENCE sequence_name;
SHOW CREATE TABLE sequence_name;
CREATE TABLE sequence-structure ... SEQUENCE=1
ALTER TABLE sequence RENAME TO sequence2;
RENAME TABLE sequence TO sequence2;
DROP [TEMPORARY] SEQUENCE [IF EXISTS] sequence_names
Missing features
- SETVAL(value,sequence_name), to be used with replication.
- Check replication, including checking that sequence tables are marked
not transactional.
- Check that a commit happens for NEXT VALUE that changes table data (may
already work)
- ALTER SEQUENCE. ANSI SQL version of setval.
- Share identical sequence entries to not add things twice to table list.
- testing insert/delete/update/truncate/load data
- Run and fix Alibaba sequence tests (part of mysql-test/suite/sql_sequence)
- Write documentation for NEXT VALUE / PREVIOUS_VALUE
- NEXTVAL in DEFAULT
- Ensure that NEXTVAL in DEFAULT uses database from base table
- Two NEXTVAL for same row should give same answer.
- Oracle syntax sequence_table.nextval, without any FOR or FROM.
- Sequence tables are treated as 'not read constant tables' by SELECT; Would
be better if we would have a separate list for sequence tables so that
select doesn't know about them, except if refereed to with FROM.
Other things done:
- Improved output for safemalloc backtrack
- frm_type_enum changed to Table_type
- Removed lex->is_view and replaced with lex->table_type. This allows
use to more easy check if item is view, sequence or table.
- Added table flag HA_CAN_TABLES_WITHOUT_ROLLBACK, needed for handlers
that want's to support sequences
- Added handler calls:
- engine_name(), to simplify getting engine name for partition and sequences
- update_first_row(), to be able to do efficient sequence implementations.
- Made binlog_log_row() global to be able to call it from ha_sequence.cc
- Added handler variable: row_already_logged, to be able to flag that the
changed row is already logging to replication log.
- Added CF_DB_CHANGE and CF_SCHEMA_CHANGE flags to simplify
deny_updates_if_read_only_option()
- Added sp_add_cfetch() to avoid new conflicts in sql_yacc.yy
- Moved code for add_table_options() out from sql_show.cc::show_create_table()
- Added String::append_longlong() and used it in sql_show.cc to simplify code.
- Added extra option to dd_frm_type() and ha_table_exists to indicate if
the table is a sequence. Needed by DROP SQUENCE to not drop a table.
2017-03-25 22:36:56 +01:00
|
|
|
|
|
|
|
--sync_slave_with_master
|
|
|
|
|
|
|
|
connect(m_normal_1, 127.0.0.1, normal_1, pass, s_db, $MASTER_MYPORT);
|
|
|
|
connect(m_normal_2, 127.0.0.1, normal_2, pass, test, $MASTER_MYPORT);
|
2017-05-30 20:31:30 +02:00
|
|
|
connect(m_normal_3, 127.0.0.1, normal_5, pass, test, $MASTER_MYPORT);
|
MDEV-10139 Support for SEQUENCE objects
Working features:
CREATE OR REPLACE [TEMPORARY] SEQUENCE [IF NOT EXISTS] name
[ INCREMENT [ BY | = ] increment ]
[ MINVALUE [=] minvalue | NO MINVALUE ]
[ MAXVALUE [=] maxvalue | NO MAXVALUE ]
[ START [ WITH | = ] start ] [ CACHE [=] cache ] [ [ NO ] CYCLE ]
ENGINE=xxx COMMENT=".."
SELECT NEXT VALUE FOR sequence_name;
SELECT NEXTVAL(sequence_name);
SELECT PREVIOUS VALUE FOR sequence_name;
SELECT LASTVAL(sequence_name);
SHOW CREATE SEQUENCE sequence_name;
SHOW CREATE TABLE sequence_name;
CREATE TABLE sequence-structure ... SEQUENCE=1
ALTER TABLE sequence RENAME TO sequence2;
RENAME TABLE sequence TO sequence2;
DROP [TEMPORARY] SEQUENCE [IF EXISTS] sequence_names
Missing features
- SETVAL(value,sequence_name), to be used with replication.
- Check replication, including checking that sequence tables are marked
not transactional.
- Check that a commit happens for NEXT VALUE that changes table data (may
already work)
- ALTER SEQUENCE. ANSI SQL version of setval.
- Share identical sequence entries to not add things twice to table list.
- testing insert/delete/update/truncate/load data
- Run and fix Alibaba sequence tests (part of mysql-test/suite/sql_sequence)
- Write documentation for NEXT VALUE / PREVIOUS_VALUE
- NEXTVAL in DEFAULT
- Ensure that NEXTVAL in DEFAULT uses database from base table
- Two NEXTVAL for same row should give same answer.
- Oracle syntax sequence_table.nextval, without any FOR or FROM.
- Sequence tables are treated as 'not read constant tables' by SELECT; Would
be better if we would have a separate list for sequence tables so that
select doesn't know about them, except if refereed to with FROM.
Other things done:
- Improved output for safemalloc backtrack
- frm_type_enum changed to Table_type
- Removed lex->is_view and replaced with lex->table_type. This allows
use to more easy check if item is view, sequence or table.
- Added table flag HA_CAN_TABLES_WITHOUT_ROLLBACK, needed for handlers
that want's to support sequences
- Added handler calls:
- engine_name(), to simplify getting engine name for partition and sequences
- update_first_row(), to be able to do efficient sequence implementations.
- Made binlog_log_row() global to be able to call it from ha_sequence.cc
- Added handler variable: row_already_logged, to be able to flag that the
changed row is already logging to replication log.
- Added CF_DB_CHANGE and CF_SCHEMA_CHANGE flags to simplify
deny_updates_if_read_only_option()
- Added sp_add_cfetch() to avoid new conflicts in sql_yacc.yy
- Moved code for add_table_options() out from sql_show.cc::show_create_table()
- Added String::append_longlong() and used it in sql_show.cc to simplify code.
- Added extra option to dd_frm_type() and ha_table_exists to indicate if
the table is a sequence. Needed by DROP SQUENCE to not drop a table.
2017-03-25 22:36:56 +01:00
|
|
|
|
|
|
|
connect(s_normal_3, 127.0.0.1, normal_3, pass, s_db, $SLAVE_MYPORT);
|
|
|
|
connect(s_normal_4, 127.0.0.1, normal_4, pass, test, $SLAVE_MYPORT);
|
|
|
|
|
|
|
|
connection slave;
|
|
|
|
set global read_only=on;
|
|
|
|
|
|
|
|
--echo ###########################################
|
|
|
|
--echo master and slave sync sequence.
|
|
|
|
--echo ###########################################
|
|
|
|
connection master;
|
|
|
|
use s_db;
|
|
|
|
|
|
|
|
create sequence s1;
|
|
|
|
show create table s1;
|
|
|
|
|
|
|
|
--sync_slave_with_master
|
|
|
|
use s_db;
|
|
|
|
show create table s1;
|
|
|
|
|
|
|
|
connection master;
|
|
|
|
use s_db;
|
|
|
|
|
|
|
|
drop sequence s1;
|
|
|
|
|
|
|
|
--echo ###########################################
|
|
|
|
--echo not support create table engine=sequence.
|
|
|
|
--echo ###########################################
|
|
|
|
connection master;
|
|
|
|
|
|
|
|
--error ER_UNKNOWN_STORAGE_ENGINE
|
|
|
|
create table t(id int)engine=sequence;
|
|
|
|
|
|
|
|
create table t(id int)engine=innodb;
|
|
|
|
|
|
|
|
--error ER_UNKNOWN_STORAGE_ENGINE
|
|
|
|
alter table t engine=sequence;
|
|
|
|
|
|
|
|
drop table t;
|
|
|
|
--echo ###########################################
|
|
|
|
--echo not support alter sequence table.
|
|
|
|
--echo ###########################################
|
|
|
|
connection master;
|
|
|
|
|
|
|
|
create sequence s2;
|
|
|
|
|
|
|
|
--error ER_SEQUENCE_INVALID_TABLE_STRUCTURE
|
|
|
|
alter table s2 add id int;
|
|
|
|
|
|
|
|
--error ER_SEQUENCE_INVALID_TABLE_STRUCTURE
|
|
|
|
alter table s2 add index ind_x(start);
|
|
|
|
drop sequence s2;
|
|
|
|
|
|
|
|
--echo ###########################################
|
|
|
|
--echo Support create temporary sequence.
|
|
|
|
--echo ###########################################
|
|
|
|
connection master;
|
|
|
|
|
|
|
|
create temporary sequence s2;
|
|
|
|
drop temporary sequence s2;
|
|
|
|
|
|
|
|
--echo ###########################################
|
|
|
|
--echo all invalid sequence value
|
|
|
|
--echo ###########################################
|
|
|
|
|
|
|
|
connection master;
|
|
|
|
use s_db;
|
|
|
|
create sequence s2 start with 1
|
|
|
|
minvalue 1
|
|
|
|
maxvalue 100000
|
|
|
|
increment by 1
|
|
|
|
cache 10000
|
|
|
|
cycle;
|
|
|
|
drop sequence s2;
|
|
|
|
create sequence s2 start with 1
|
|
|
|
minvalue 1
|
|
|
|
maxvalue 100000
|
|
|
|
increment by 1
|
|
|
|
cache 10000
|
|
|
|
nocycle;
|
|
|
|
drop sequence s2;
|
|
|
|
create sequence s2 start with 1
|
|
|
|
minvalue 1
|
|
|
|
maxvalue 100000
|
|
|
|
increment by 1
|
|
|
|
nocache
|
|
|
|
nocycle;
|
|
|
|
drop sequence s2;
|
|
|
|
|
|
|
|
--error ER_SEQUENCE_INVALID_DATA
|
|
|
|
create sequence s2 start with 1
|
|
|
|
minvalue 5
|
|
|
|
maxvalue 100000
|
|
|
|
increment by 1
|
|
|
|
nocache
|
|
|
|
nocycle;
|
|
|
|
|
|
|
|
--error ER_SEQUENCE_INVALID_DATA
|
|
|
|
create sequence s2 start with 1
|
|
|
|
minvalue 5
|
|
|
|
maxvalue 5
|
|
|
|
increment by 1
|
|
|
|
nocache
|
|
|
|
nocycle;
|
|
|
|
|
|
|
|
--error ER_SEQUENCE_INVALID_DATA
|
|
|
|
create sequence s2 start with 1
|
|
|
|
minvalue 5
|
|
|
|
maxvalue 4
|
|
|
|
increment by 1
|
|
|
|
nocache
|
|
|
|
nocycle;
|
|
|
|
|
|
|
|
--error ER_SEQUENCE_INVALID_DATA
|
|
|
|
create sequence s2 start with 1
|
|
|
|
minvalue 5
|
|
|
|
maxvalue 4
|
|
|
|
increment by 0
|
|
|
|
nocache
|
|
|
|
nocycle;
|
|
|
|
|
|
|
|
--echo ###########################################
|
|
|
|
--echo global read lock prevent query sequence
|
|
|
|
--echo ###########################################
|
|
|
|
connection master;
|
|
|
|
use s_db;
|
|
|
|
create sequence s_db.s1;
|
|
|
|
flush table with read lock;
|
|
|
|
--error ER_CANT_UPDATE_WITH_READLOCK
|
|
|
|
select next value for s1;
|
|
|
|
|
|
|
|
unlock tables;
|
|
|
|
|
|
|
|
drop sequence s_db.s1;
|
|
|
|
|
|
|
|
--echo ###########################################
|
|
|
|
--echo query cache test
|
|
|
|
--echo ###########################################
|
|
|
|
connection master;
|
|
|
|
use s_db;
|
|
|
|
show global variables like 'query_cache_type';
|
|
|
|
|
|
|
|
show status like 'Qcache_hits';
|
|
|
|
show status like 'Qcache_inserts';
|
|
|
|
|
|
|
|
--echo ###########################################
|
|
|
|
--echo priv test
|
|
|
|
--echo ###########################################
|
|
|
|
connection m_normal_1;
|
|
|
|
create sequence s_db.s1;
|
2017-05-23 16:18:31 +02:00
|
|
|
select * from s_db.s1;
|
MDEV-10139 Support for SEQUENCE objects
Working features:
CREATE OR REPLACE [TEMPORARY] SEQUENCE [IF NOT EXISTS] name
[ INCREMENT [ BY | = ] increment ]
[ MINVALUE [=] minvalue | NO MINVALUE ]
[ MAXVALUE [=] maxvalue | NO MAXVALUE ]
[ START [ WITH | = ] start ] [ CACHE [=] cache ] [ [ NO ] CYCLE ]
ENGINE=xxx COMMENT=".."
SELECT NEXT VALUE FOR sequence_name;
SELECT NEXTVAL(sequence_name);
SELECT PREVIOUS VALUE FOR sequence_name;
SELECT LASTVAL(sequence_name);
SHOW CREATE SEQUENCE sequence_name;
SHOW CREATE TABLE sequence_name;
CREATE TABLE sequence-structure ... SEQUENCE=1
ALTER TABLE sequence RENAME TO sequence2;
RENAME TABLE sequence TO sequence2;
DROP [TEMPORARY] SEQUENCE [IF EXISTS] sequence_names
Missing features
- SETVAL(value,sequence_name), to be used with replication.
- Check replication, including checking that sequence tables are marked
not transactional.
- Check that a commit happens for NEXT VALUE that changes table data (may
already work)
- ALTER SEQUENCE. ANSI SQL version of setval.
- Share identical sequence entries to not add things twice to table list.
- testing insert/delete/update/truncate/load data
- Run and fix Alibaba sequence tests (part of mysql-test/suite/sql_sequence)
- Write documentation for NEXT VALUE / PREVIOUS_VALUE
- NEXTVAL in DEFAULT
- Ensure that NEXTVAL in DEFAULT uses database from base table
- Two NEXTVAL for same row should give same answer.
- Oracle syntax sequence_table.nextval, without any FOR or FROM.
- Sequence tables are treated as 'not read constant tables' by SELECT; Would
be better if we would have a separate list for sequence tables so that
select doesn't know about them, except if refereed to with FROM.
Other things done:
- Improved output for safemalloc backtrack
- frm_type_enum changed to Table_type
- Removed lex->is_view and replaced with lex->table_type. This allows
use to more easy check if item is view, sequence or table.
- Added table flag HA_CAN_TABLES_WITHOUT_ROLLBACK, needed for handlers
that want's to support sequences
- Added handler calls:
- engine_name(), to simplify getting engine name for partition and sequences
- update_first_row(), to be able to do efficient sequence implementations.
- Made binlog_log_row() global to be able to call it from ha_sequence.cc
- Added handler variable: row_already_logged, to be able to flag that the
changed row is already logging to replication log.
- Added CF_DB_CHANGE and CF_SCHEMA_CHANGE flags to simplify
deny_updates_if_read_only_option()
- Added sp_add_cfetch() to avoid new conflicts in sql_yacc.yy
- Moved code for add_table_options() out from sql_show.cc::show_create_table()
- Added String::append_longlong() and used it in sql_show.cc to simplify code.
- Added extra option to dd_frm_type() and ha_table_exists to indicate if
the table is a sequence. Needed by DROP SQUENCE to not drop a table.
2017-03-25 22:36:56 +01:00
|
|
|
select next value for s_db.s1;
|
2017-05-23 16:18:31 +02:00
|
|
|
select * from s_db.s1;
|
MDEV-10139 Support for SEQUENCE objects
Working features:
CREATE OR REPLACE [TEMPORARY] SEQUENCE [IF NOT EXISTS] name
[ INCREMENT [ BY | = ] increment ]
[ MINVALUE [=] minvalue | NO MINVALUE ]
[ MAXVALUE [=] maxvalue | NO MAXVALUE ]
[ START [ WITH | = ] start ] [ CACHE [=] cache ] [ [ NO ] CYCLE ]
ENGINE=xxx COMMENT=".."
SELECT NEXT VALUE FOR sequence_name;
SELECT NEXTVAL(sequence_name);
SELECT PREVIOUS VALUE FOR sequence_name;
SELECT LASTVAL(sequence_name);
SHOW CREATE SEQUENCE sequence_name;
SHOW CREATE TABLE sequence_name;
CREATE TABLE sequence-structure ... SEQUENCE=1
ALTER TABLE sequence RENAME TO sequence2;
RENAME TABLE sequence TO sequence2;
DROP [TEMPORARY] SEQUENCE [IF EXISTS] sequence_names
Missing features
- SETVAL(value,sequence_name), to be used with replication.
- Check replication, including checking that sequence tables are marked
not transactional.
- Check that a commit happens for NEXT VALUE that changes table data (may
already work)
- ALTER SEQUENCE. ANSI SQL version of setval.
- Share identical sequence entries to not add things twice to table list.
- testing insert/delete/update/truncate/load data
- Run and fix Alibaba sequence tests (part of mysql-test/suite/sql_sequence)
- Write documentation for NEXT VALUE / PREVIOUS_VALUE
- NEXTVAL in DEFAULT
- Ensure that NEXTVAL in DEFAULT uses database from base table
- Two NEXTVAL for same row should give same answer.
- Oracle syntax sequence_table.nextval, without any FOR or FROM.
- Sequence tables are treated as 'not read constant tables' by SELECT; Would
be better if we would have a separate list for sequence tables so that
select doesn't know about them, except if refereed to with FROM.
Other things done:
- Improved output for safemalloc backtrack
- frm_type_enum changed to Table_type
- Removed lex->is_view and replaced with lex->table_type. This allows
use to more easy check if item is view, sequence or table.
- Added table flag HA_CAN_TABLES_WITHOUT_ROLLBACK, needed for handlers
that want's to support sequences
- Added handler calls:
- engine_name(), to simplify getting engine name for partition and sequences
- update_first_row(), to be able to do efficient sequence implementations.
- Made binlog_log_row() global to be able to call it from ha_sequence.cc
- Added handler variable: row_already_logged, to be able to flag that the
changed row is already logging to replication log.
- Added CF_DB_CHANGE and CF_SCHEMA_CHANGE flags to simplify
deny_updates_if_read_only_option()
- Added sp_add_cfetch() to avoid new conflicts in sql_yacc.yy
- Moved code for add_table_options() out from sql_show.cc::show_create_table()
- Added String::append_longlong() and used it in sql_show.cc to simplify code.
- Added extra option to dd_frm_type() and ha_table_exists to indicate if
the table is a sequence. Needed by DROP SQUENCE to not drop a table.
2017-03-25 22:36:56 +01:00
|
|
|
create sequence s_db.s2;
|
|
|
|
drop sequence s_db.s2;
|
|
|
|
|
|
|
|
|
|
|
|
connection m_normal_2;
|
|
|
|
--error ER_TABLEACCESS_DENIED_ERROR
|
|
|
|
select next value for s_db.s1;
|
|
|
|
--error ER_TABLEACCESS_DENIED_ERROR
|
|
|
|
create sequence s_db.s2;
|
|
|
|
|
|
|
|
connection m_normal_1;
|
|
|
|
drop sequence s_db.s1;
|
|
|
|
|
|
|
|
--echo ###########################################
|
|
|
|
--echo run out sequence value
|
|
|
|
--echo ###########################################
|
|
|
|
connection m_normal_1;
|
|
|
|
use s_db;
|
|
|
|
create sequence s_t start with 1 cache 2 maxvalue 5;
|
|
|
|
create table t(id int);
|
|
|
|
insert into t values(1111);
|
|
|
|
insert into t select next value for s_t;
|
|
|
|
insert into t select next value for s_t;
|
|
|
|
insert into t select next value for s_t;
|
|
|
|
insert into t select next value for s_t;
|
|
|
|
insert into t select next value for s_t;
|
|
|
|
--error ER_SEQUENCE_RUN_OUT
|
|
|
|
insert into t select next value for s_t;
|
|
|
|
--error ER_SEQUENCE_RUN_OUT
|
|
|
|
insert into t select next value for s_t;
|
|
|
|
commit;
|
|
|
|
select * from t;
|
|
|
|
|
|
|
|
connection master;
|
|
|
|
--sync_slave_with_master
|
|
|
|
|
|
|
|
connection s_normal_3;
|
|
|
|
use s_db;
|
|
|
|
select * from t;
|
|
|
|
|
|
|
|
connection m_normal_1;
|
|
|
|
use s_db;
|
|
|
|
drop sequence s_t;
|
|
|
|
drop table t;
|
|
|
|
|
|
|
|
--echo ###########################################
|
|
|
|
--echo read_only prevent query sequence
|
|
|
|
--echo ###########################################
|
|
|
|
connection m_normal_1;
|
|
|
|
create sequence s_db.s1;
|
|
|
|
show global variables like 'read_only';
|
|
|
|
select next value for s_db.s1;
|
|
|
|
|
2017-07-01 16:21:02 +02:00
|
|
|
connection master;
|
2017-08-25 14:23:24 +02:00
|
|
|
sync_slave_with_master;
|
2017-07-01 16:21:02 +02:00
|
|
|
|
MDEV-10139 Support for SEQUENCE objects
Working features:
CREATE OR REPLACE [TEMPORARY] SEQUENCE [IF NOT EXISTS] name
[ INCREMENT [ BY | = ] increment ]
[ MINVALUE [=] minvalue | NO MINVALUE ]
[ MAXVALUE [=] maxvalue | NO MAXVALUE ]
[ START [ WITH | = ] start ] [ CACHE [=] cache ] [ [ NO ] CYCLE ]
ENGINE=xxx COMMENT=".."
SELECT NEXT VALUE FOR sequence_name;
SELECT NEXTVAL(sequence_name);
SELECT PREVIOUS VALUE FOR sequence_name;
SELECT LASTVAL(sequence_name);
SHOW CREATE SEQUENCE sequence_name;
SHOW CREATE TABLE sequence_name;
CREATE TABLE sequence-structure ... SEQUENCE=1
ALTER TABLE sequence RENAME TO sequence2;
RENAME TABLE sequence TO sequence2;
DROP [TEMPORARY] SEQUENCE [IF EXISTS] sequence_names
Missing features
- SETVAL(value,sequence_name), to be used with replication.
- Check replication, including checking that sequence tables are marked
not transactional.
- Check that a commit happens for NEXT VALUE that changes table data (may
already work)
- ALTER SEQUENCE. ANSI SQL version of setval.
- Share identical sequence entries to not add things twice to table list.
- testing insert/delete/update/truncate/load data
- Run and fix Alibaba sequence tests (part of mysql-test/suite/sql_sequence)
- Write documentation for NEXT VALUE / PREVIOUS_VALUE
- NEXTVAL in DEFAULT
- Ensure that NEXTVAL in DEFAULT uses database from base table
- Two NEXTVAL for same row should give same answer.
- Oracle syntax sequence_table.nextval, without any FOR or FROM.
- Sequence tables are treated as 'not read constant tables' by SELECT; Would
be better if we would have a separate list for sequence tables so that
select doesn't know about them, except if refereed to with FROM.
Other things done:
- Improved output for safemalloc backtrack
- frm_type_enum changed to Table_type
- Removed lex->is_view and replaced with lex->table_type. This allows
use to more easy check if item is view, sequence or table.
- Added table flag HA_CAN_TABLES_WITHOUT_ROLLBACK, needed for handlers
that want's to support sequences
- Added handler calls:
- engine_name(), to simplify getting engine name for partition and sequences
- update_first_row(), to be able to do efficient sequence implementations.
- Made binlog_log_row() global to be able to call it from ha_sequence.cc
- Added handler variable: row_already_logged, to be able to flag that the
changed row is already logging to replication log.
- Added CF_DB_CHANGE and CF_SCHEMA_CHANGE flags to simplify
deny_updates_if_read_only_option()
- Added sp_add_cfetch() to avoid new conflicts in sql_yacc.yy
- Moved code for add_table_options() out from sql_show.cc::show_create_table()
- Added String::append_longlong() and used it in sql_show.cc to simplify code.
- Added extra option to dd_frm_type() and ha_table_exists to indicate if
the table is a sequence. Needed by DROP SQUENCE to not drop a table.
2017-03-25 22:36:56 +01:00
|
|
|
connection s_normal_3;
|
|
|
|
show global variables like 'read_only';
|
|
|
|
--error ER_OPTION_PREVENTS_STATEMENT
|
|
|
|
select next value for s_db.s1;
|
|
|
|
|
|
|
|
connection m_normal_1;
|
|
|
|
drop sequence s_db.s1;
|
|
|
|
|
|
|
|
--echo ###########################################
|
|
|
|
--echo update based table
|
|
|
|
--echo ###########################################
|
|
|
|
connection m_normal_1;
|
|
|
|
use s_db;
|
|
|
|
create sequence s_t start with 1 minvalue 1 maxvalue 20 increment by 1 cache 5 cycle;
|
|
|
|
|
|
|
|
connection master;
|
|
|
|
--sync_slave_with_master
|
|
|
|
|
|
|
|
connection s_normal_3;
|
|
|
|
use s_db;
|
|
|
|
select * from s_t;
|
|
|
|
|
|
|
|
connection m_normal_1;
|
|
|
|
select next value for s_t;
|
2017-05-23 16:18:31 +02:00
|
|
|
select * from s_t;
|
MDEV-10139 Support for SEQUENCE objects
Working features:
CREATE OR REPLACE [TEMPORARY] SEQUENCE [IF NOT EXISTS] name
[ INCREMENT [ BY | = ] increment ]
[ MINVALUE [=] minvalue | NO MINVALUE ]
[ MAXVALUE [=] maxvalue | NO MAXVALUE ]
[ START [ WITH | = ] start ] [ CACHE [=] cache ] [ [ NO ] CYCLE ]
ENGINE=xxx COMMENT=".."
SELECT NEXT VALUE FOR sequence_name;
SELECT NEXTVAL(sequence_name);
SELECT PREVIOUS VALUE FOR sequence_name;
SELECT LASTVAL(sequence_name);
SHOW CREATE SEQUENCE sequence_name;
SHOW CREATE TABLE sequence_name;
CREATE TABLE sequence-structure ... SEQUENCE=1
ALTER TABLE sequence RENAME TO sequence2;
RENAME TABLE sequence TO sequence2;
DROP [TEMPORARY] SEQUENCE [IF EXISTS] sequence_names
Missing features
- SETVAL(value,sequence_name), to be used with replication.
- Check replication, including checking that sequence tables are marked
not transactional.
- Check that a commit happens for NEXT VALUE that changes table data (may
already work)
- ALTER SEQUENCE. ANSI SQL version of setval.
- Share identical sequence entries to not add things twice to table list.
- testing insert/delete/update/truncate/load data
- Run and fix Alibaba sequence tests (part of mysql-test/suite/sql_sequence)
- Write documentation for NEXT VALUE / PREVIOUS_VALUE
- NEXTVAL in DEFAULT
- Ensure that NEXTVAL in DEFAULT uses database from base table
- Two NEXTVAL for same row should give same answer.
- Oracle syntax sequence_table.nextval, without any FOR or FROM.
- Sequence tables are treated as 'not read constant tables' by SELECT; Would
be better if we would have a separate list for sequence tables so that
select doesn't know about them, except if refereed to with FROM.
Other things done:
- Improved output for safemalloc backtrack
- frm_type_enum changed to Table_type
- Removed lex->is_view and replaced with lex->table_type. This allows
use to more easy check if item is view, sequence or table.
- Added table flag HA_CAN_TABLES_WITHOUT_ROLLBACK, needed for handlers
that want's to support sequences
- Added handler calls:
- engine_name(), to simplify getting engine name for partition and sequences
- update_first_row(), to be able to do efficient sequence implementations.
- Made binlog_log_row() global to be able to call it from ha_sequence.cc
- Added handler variable: row_already_logged, to be able to flag that the
changed row is already logging to replication log.
- Added CF_DB_CHANGE and CF_SCHEMA_CHANGE flags to simplify
deny_updates_if_read_only_option()
- Added sp_add_cfetch() to avoid new conflicts in sql_yacc.yy
- Moved code for add_table_options() out from sql_show.cc::show_create_table()
- Added String::append_longlong() and used it in sql_show.cc to simplify code.
- Added extra option to dd_frm_type() and ha_table_exists to indicate if
the table is a sequence. Needed by DROP SQUENCE to not drop a table.
2017-03-25 22:36:56 +01:00
|
|
|
|
|
|
|
connection master;
|
|
|
|
--sync_slave_with_master
|
|
|
|
|
|
|
|
connection s_normal_3;
|
|
|
|
select * from s_t;
|
|
|
|
|
|
|
|
--echo ------------------------------------------
|
|
|
|
--echo master update nextval;
|
|
|
|
--echo ------------------------------------------
|
|
|
|
connection m_normal_1;
|
|
|
|
select next value for s_t;
|
2017-05-23 16:18:31 +02:00
|
|
|
--error ER_ILLEGAL_HA
|
2017-06-03 15:08:23 +02:00
|
|
|
update s_t set next_not_cached_value= 11;
|
2017-05-23 16:18:31 +02:00
|
|
|
alter sequence s_t restart=11;
|
MDEV-10139 Support for SEQUENCE objects
Working features:
CREATE OR REPLACE [TEMPORARY] SEQUENCE [IF NOT EXISTS] name
[ INCREMENT [ BY | = ] increment ]
[ MINVALUE [=] minvalue | NO MINVALUE ]
[ MAXVALUE [=] maxvalue | NO MAXVALUE ]
[ START [ WITH | = ] start ] [ CACHE [=] cache ] [ [ NO ] CYCLE ]
ENGINE=xxx COMMENT=".."
SELECT NEXT VALUE FOR sequence_name;
SELECT NEXTVAL(sequence_name);
SELECT PREVIOUS VALUE FOR sequence_name;
SELECT LASTVAL(sequence_name);
SHOW CREATE SEQUENCE sequence_name;
SHOW CREATE TABLE sequence_name;
CREATE TABLE sequence-structure ... SEQUENCE=1
ALTER TABLE sequence RENAME TO sequence2;
RENAME TABLE sequence TO sequence2;
DROP [TEMPORARY] SEQUENCE [IF EXISTS] sequence_names
Missing features
- SETVAL(value,sequence_name), to be used with replication.
- Check replication, including checking that sequence tables are marked
not transactional.
- Check that a commit happens for NEXT VALUE that changes table data (may
already work)
- ALTER SEQUENCE. ANSI SQL version of setval.
- Share identical sequence entries to not add things twice to table list.
- testing insert/delete/update/truncate/load data
- Run and fix Alibaba sequence tests (part of mysql-test/suite/sql_sequence)
- Write documentation for NEXT VALUE / PREVIOUS_VALUE
- NEXTVAL in DEFAULT
- Ensure that NEXTVAL in DEFAULT uses database from base table
- Two NEXTVAL for same row should give same answer.
- Oracle syntax sequence_table.nextval, without any FOR or FROM.
- Sequence tables are treated as 'not read constant tables' by SELECT; Would
be better if we would have a separate list for sequence tables so that
select doesn't know about them, except if refereed to with FROM.
Other things done:
- Improved output for safemalloc backtrack
- frm_type_enum changed to Table_type
- Removed lex->is_view and replaced with lex->table_type. This allows
use to more easy check if item is view, sequence or table.
- Added table flag HA_CAN_TABLES_WITHOUT_ROLLBACK, needed for handlers
that want's to support sequences
- Added handler calls:
- engine_name(), to simplify getting engine name for partition and sequences
- update_first_row(), to be able to do efficient sequence implementations.
- Made binlog_log_row() global to be able to call it from ha_sequence.cc
- Added handler variable: row_already_logged, to be able to flag that the
changed row is already logging to replication log.
- Added CF_DB_CHANGE and CF_SCHEMA_CHANGE flags to simplify
deny_updates_if_read_only_option()
- Added sp_add_cfetch() to avoid new conflicts in sql_yacc.yy
- Moved code for add_table_options() out from sql_show.cc::show_create_table()
- Added String::append_longlong() and used it in sql_show.cc to simplify code.
- Added extra option to dd_frm_type() and ha_table_exists to indicate if
the table is a sequence. Needed by DROP SQUENCE to not drop a table.
2017-03-25 22:36:56 +01:00
|
|
|
commit;
|
|
|
|
|
|
|
|
select * from s_t;
|
|
|
|
|
|
|
|
connection master;
|
|
|
|
--sync_slave_with_master
|
|
|
|
|
|
|
|
--echo ------------------------------------------
|
|
|
|
--echo show slave nextval;
|
|
|
|
--echo ------------------------------------------
|
|
|
|
connection s_normal_3;
|
|
|
|
select * from s_t;
|
|
|
|
|
|
|
|
connection m_normal_1;
|
|
|
|
select next value for s_t;
|
|
|
|
select * from s_t;
|
|
|
|
|
|
|
|
connection master;
|
|
|
|
--sync_slave_with_master
|
|
|
|
|
|
|
|
connection s_normal_3;
|
|
|
|
select * from s_t;
|
|
|
|
|
|
|
|
|
|
|
|
--echo ------------------------------------------
|
|
|
|
--echo update into invalid sequence
|
|
|
|
--echo ------------------------------------------
|
|
|
|
connection m_normal_1;
|
|
|
|
select * from s_t;
|
2017-05-23 16:18:31 +02:00
|
|
|
--error ER_ILLEGAL_HA
|
2017-06-03 15:08:23 +02:00
|
|
|
update s_t set next_not_cached_value= 11,start_value=10, minimum_value=11;
|
2017-05-23 16:18:31 +02:00
|
|
|
--error ER_SEQUENCE_INVALID_DATA
|
|
|
|
ALTER SEQUENCE s_t restart with 11 start=10 minvalue=11;
|
MDEV-10139 Support for SEQUENCE objects
Working features:
CREATE OR REPLACE [TEMPORARY] SEQUENCE [IF NOT EXISTS] name
[ INCREMENT [ BY | = ] increment ]
[ MINVALUE [=] minvalue | NO MINVALUE ]
[ MAXVALUE [=] maxvalue | NO MAXVALUE ]
[ START [ WITH | = ] start ] [ CACHE [=] cache ] [ [ NO ] CYCLE ]
ENGINE=xxx COMMENT=".."
SELECT NEXT VALUE FOR sequence_name;
SELECT NEXTVAL(sequence_name);
SELECT PREVIOUS VALUE FOR sequence_name;
SELECT LASTVAL(sequence_name);
SHOW CREATE SEQUENCE sequence_name;
SHOW CREATE TABLE sequence_name;
CREATE TABLE sequence-structure ... SEQUENCE=1
ALTER TABLE sequence RENAME TO sequence2;
RENAME TABLE sequence TO sequence2;
DROP [TEMPORARY] SEQUENCE [IF EXISTS] sequence_names
Missing features
- SETVAL(value,sequence_name), to be used with replication.
- Check replication, including checking that sequence tables are marked
not transactional.
- Check that a commit happens for NEXT VALUE that changes table data (may
already work)
- ALTER SEQUENCE. ANSI SQL version of setval.
- Share identical sequence entries to not add things twice to table list.
- testing insert/delete/update/truncate/load data
- Run and fix Alibaba sequence tests (part of mysql-test/suite/sql_sequence)
- Write documentation for NEXT VALUE / PREVIOUS_VALUE
- NEXTVAL in DEFAULT
- Ensure that NEXTVAL in DEFAULT uses database from base table
- Two NEXTVAL for same row should give same answer.
- Oracle syntax sequence_table.nextval, without any FOR or FROM.
- Sequence tables are treated as 'not read constant tables' by SELECT; Would
be better if we would have a separate list for sequence tables so that
select doesn't know about them, except if refereed to with FROM.
Other things done:
- Improved output for safemalloc backtrack
- frm_type_enum changed to Table_type
- Removed lex->is_view and replaced with lex->table_type. This allows
use to more easy check if item is view, sequence or table.
- Added table flag HA_CAN_TABLES_WITHOUT_ROLLBACK, needed for handlers
that want's to support sequences
- Added handler calls:
- engine_name(), to simplify getting engine name for partition and sequences
- update_first_row(), to be able to do efficient sequence implementations.
- Made binlog_log_row() global to be able to call it from ha_sequence.cc
- Added handler variable: row_already_logged, to be able to flag that the
changed row is already logging to replication log.
- Added CF_DB_CHANGE and CF_SCHEMA_CHANGE flags to simplify
deny_updates_if_read_only_option()
- Added sp_add_cfetch() to avoid new conflicts in sql_yacc.yy
- Moved code for add_table_options() out from sql_show.cc::show_create_table()
- Added String::append_longlong() and used it in sql_show.cc to simplify code.
- Added extra option to dd_frm_type() and ha_table_exists to indicate if
the table is a sequence. Needed by DROP SQUENCE to not drop a table.
2017-03-25 22:36:56 +01:00
|
|
|
commit;
|
|
|
|
|
|
|
|
create table t_1(id int);
|
|
|
|
insert into t_1 value(1111);
|
|
|
|
select next value for s_t;
|
|
|
|
insert into t_1 select next value for s_t;
|
|
|
|
commit;
|
|
|
|
|
|
|
|
select * from t_1;
|
|
|
|
|
|
|
|
--echo ------------------------------------------
|
|
|
|
--echo delete sequence row
|
|
|
|
--echo ------------------------------------------
|
|
|
|
connection m_normal_1;
|
|
|
|
--error ER_ILLEGAL_HA
|
|
|
|
delete from s_t;
|
|
|
|
commit;
|
|
|
|
|
|
|
|
select next value for s_t;
|
|
|
|
|
|
|
|
connection m_normal_1;
|
|
|
|
drop sequence s_t;
|
|
|
|
drop table t_1;
|
|
|
|
|
|
|
|
--echo ###########################################
|
|
|
|
--echo test transaction context (innodb)
|
|
|
|
--echo ###########################################
|
|
|
|
|
|
|
|
--echo ------------------------------------------
|
|
|
|
--echo transaction table and sequence
|
|
|
|
--echo normal transaction commit
|
|
|
|
--echo ------------------------------------------
|
|
|
|
connection m_normal_1;
|
|
|
|
use s_db;
|
|
|
|
create sequence s_1 cache 5;
|
|
|
|
|
|
|
|
create table t_1(id int)engine=innodb;
|
|
|
|
begin;
|
|
|
|
insert into t_1 values(1111);
|
|
|
|
insert into t_1 select next value for s_1;
|
|
|
|
insert into t_1 select next value for s_1;
|
|
|
|
insert into t_1 values(2222);
|
|
|
|
commit;
|
|
|
|
|
|
|
|
select * from t_1;
|
|
|
|
|
|
|
|
connection master;
|
|
|
|
--sync_slave_with_master
|
|
|
|
|
|
|
|
connection s_normal_3;
|
|
|
|
use s_db;
|
|
|
|
select * from t_1;
|
|
|
|
|
|
|
|
--echo ------------------------------------------
|
|
|
|
--echo normal transaction rollback
|
|
|
|
--echo ------------------------------------------
|
|
|
|
connection m_normal_1;
|
|
|
|
begin;
|
|
|
|
insert into t_1 values(3333);
|
|
|
|
insert into t_1 select next value for s_1;
|
|
|
|
insert into t_1 select next value for s_1;
|
|
|
|
insert into t_1 select next value for s_1;
|
|
|
|
insert into t_1 select next value for s_1;
|
|
|
|
insert into t_1 select next value for s_1;
|
|
|
|
insert into t_1 select next value for s_1;
|
|
|
|
insert into t_1 select next value for s_1;
|
|
|
|
insert into t_1 select next value for s_1;
|
|
|
|
|
|
|
|
select * from t_1;
|
|
|
|
rollback;
|
|
|
|
|
|
|
|
select * from t_1;
|
|
|
|
select next value for s_1;
|
|
|
|
|
|
|
|
connection master;
|
|
|
|
--sync_slave_with_master
|
|
|
|
|
|
|
|
connection s_normal_3;
|
|
|
|
use s_db;
|
|
|
|
select * from t_1;
|
|
|
|
|
|
|
|
connection m_normal_1;
|
|
|
|
use s_db;
|
|
|
|
drop sequence s_1;
|
|
|
|
drop table t_1;
|
|
|
|
|
|
|
|
--echo ###########################################
|
|
|
|
--echo test transaction context (myisam)
|
|
|
|
--echo ###########################################
|
|
|
|
|
|
|
|
--echo ------------------------------------------
|
|
|
|
--echo transaction table and sequence
|
|
|
|
--echo normal transaction commit
|
|
|
|
--echo ------------------------------------------
|
|
|
|
connection m_normal_1;
|
|
|
|
use s_db;
|
|
|
|
create sequence s_1 cache 5;
|
|
|
|
|
|
|
|
create table t_1(id int)engine=myisam;
|
|
|
|
begin;
|
|
|
|
insert into t_1 values(1111);
|
|
|
|
insert into t_1 select next value for s_1;
|
|
|
|
insert into t_1 select next value for s_1;
|
|
|
|
insert into t_1 values(2222);
|
|
|
|
commit;
|
|
|
|
|
|
|
|
select * from t_1;
|
|
|
|
|
|
|
|
connection master;
|
|
|
|
--sync_slave_with_master
|
|
|
|
|
|
|
|
connection s_normal_3;
|
|
|
|
use s_db;
|
|
|
|
select * from t_1;
|
|
|
|
|
|
|
|
--echo ------------------------------------------
|
|
|
|
--echo normal transaction rollback
|
|
|
|
--echo ------------------------------------------
|
|
|
|
connection m_normal_1;
|
|
|
|
begin;
|
|
|
|
insert into t_1 values(3333);
|
|
|
|
insert into t_1 select next value for s_1;
|
|
|
|
insert into t_1 select next value for s_1;
|
|
|
|
insert into t_1 select next value for s_1;
|
|
|
|
insert into t_1 select next value for s_1;
|
|
|
|
insert into t_1 select next value for s_1;
|
|
|
|
insert into t_1 select next value for s_1;
|
|
|
|
insert into t_1 select next value for s_1;
|
|
|
|
insert into t_1 select next value for s_1;
|
|
|
|
|
|
|
|
select * from t_1;
|
|
|
|
rollback;
|
|
|
|
|
|
|
|
select * from t_1;
|
|
|
|
select next value for s_1;
|
|
|
|
|
|
|
|
connection master;
|
|
|
|
--sync_slave_with_master
|
|
|
|
|
|
|
|
connection s_normal_3;
|
|
|
|
use s_db;
|
|
|
|
select * from t_1;
|
|
|
|
|
|
|
|
connection m_normal_1;
|
|
|
|
use s_db;
|
|
|
|
drop sequence s_1;
|
|
|
|
drop table t_1;
|
|
|
|
|
|
|
|
--echo ###########################################
|
|
|
|
--echo close binlog
|
|
|
|
--echo ###########################################
|
|
|
|
connection m_normal_1;
|
|
|
|
use s_db;
|
|
|
|
create sequence s1 cache 2;
|
|
|
|
select next value for s1;
|
|
|
|
select next value for s1;
|
|
|
|
select next value for s1;
|
|
|
|
select next value for s1;
|
|
|
|
|
|
|
|
commit;
|
|
|
|
select * from s1;
|
|
|
|
|
|
|
|
connection master;
|
|
|
|
--sync_slave_with_master
|
|
|
|
|
|
|
|
connection slave;
|
|
|
|
use s_db;
|
|
|
|
select * from s1;
|
|
|
|
|
|
|
|
--echo ------------------------------------------
|
|
|
|
--echo close session binlog.
|
|
|
|
--echo ------------------------------------------
|
|
|
|
connection master;
|
|
|
|
set session sql_log_bin=off;
|
|
|
|
select next value for s1;
|
|
|
|
select next value for s1;
|
|
|
|
select next value for s1;
|
|
|
|
select next value for s1;
|
|
|
|
|
|
|
|
set session sql_log_bin=on;
|
|
|
|
select * from s1;
|
|
|
|
|
|
|
|
connection master;
|
|
|
|
--sync_slave_with_master
|
|
|
|
|
|
|
|
connection slave;
|
|
|
|
use s_db;
|
|
|
|
select * from s1;
|
|
|
|
|
|
|
|
connection m_normal_1;
|
|
|
|
use s_db;
|
|
|
|
drop sequence s1;
|
|
|
|
|
|
|
|
--echo ###########################################
|
|
|
|
--echo statement binlog
|
|
|
|
--echo ###########################################
|
|
|
|
--echo ------------------------------------------
|
|
|
|
--echo set binlog_format=statement
|
|
|
|
--echo ------------------------------------------
|
|
|
|
connection master;
|
|
|
|
set session binlog_format=statement;
|
2017-11-14 11:16:31 +01:00
|
|
|
select @@session.binlog_format;
|
MDEV-10139 Support for SEQUENCE objects
Working features:
CREATE OR REPLACE [TEMPORARY] SEQUENCE [IF NOT EXISTS] name
[ INCREMENT [ BY | = ] increment ]
[ MINVALUE [=] minvalue | NO MINVALUE ]
[ MAXVALUE [=] maxvalue | NO MAXVALUE ]
[ START [ WITH | = ] start ] [ CACHE [=] cache ] [ [ NO ] CYCLE ]
ENGINE=xxx COMMENT=".."
SELECT NEXT VALUE FOR sequence_name;
SELECT NEXTVAL(sequence_name);
SELECT PREVIOUS VALUE FOR sequence_name;
SELECT LASTVAL(sequence_name);
SHOW CREATE SEQUENCE sequence_name;
SHOW CREATE TABLE sequence_name;
CREATE TABLE sequence-structure ... SEQUENCE=1
ALTER TABLE sequence RENAME TO sequence2;
RENAME TABLE sequence TO sequence2;
DROP [TEMPORARY] SEQUENCE [IF EXISTS] sequence_names
Missing features
- SETVAL(value,sequence_name), to be used with replication.
- Check replication, including checking that sequence tables are marked
not transactional.
- Check that a commit happens for NEXT VALUE that changes table data (may
already work)
- ALTER SEQUENCE. ANSI SQL version of setval.
- Share identical sequence entries to not add things twice to table list.
- testing insert/delete/update/truncate/load data
- Run and fix Alibaba sequence tests (part of mysql-test/suite/sql_sequence)
- Write documentation for NEXT VALUE / PREVIOUS_VALUE
- NEXTVAL in DEFAULT
- Ensure that NEXTVAL in DEFAULT uses database from base table
- Two NEXTVAL for same row should give same answer.
- Oracle syntax sequence_table.nextval, without any FOR or FROM.
- Sequence tables are treated as 'not read constant tables' by SELECT; Would
be better if we would have a separate list for sequence tables so that
select doesn't know about them, except if refereed to with FROM.
Other things done:
- Improved output for safemalloc backtrack
- frm_type_enum changed to Table_type
- Removed lex->is_view and replaced with lex->table_type. This allows
use to more easy check if item is view, sequence or table.
- Added table flag HA_CAN_TABLES_WITHOUT_ROLLBACK, needed for handlers
that want's to support sequences
- Added handler calls:
- engine_name(), to simplify getting engine name for partition and sequences
- update_first_row(), to be able to do efficient sequence implementations.
- Made binlog_log_row() global to be able to call it from ha_sequence.cc
- Added handler variable: row_already_logged, to be able to flag that the
changed row is already logging to replication log.
- Added CF_DB_CHANGE and CF_SCHEMA_CHANGE flags to simplify
deny_updates_if_read_only_option()
- Added sp_add_cfetch() to avoid new conflicts in sql_yacc.yy
- Moved code for add_table_options() out from sql_show.cc::show_create_table()
- Added String::append_longlong() and used it in sql_show.cc to simplify code.
- Added extra option to dd_frm_type() and ha_table_exists to indicate if
the table is a sequence. Needed by DROP SQUENCE to not drop a table.
2017-03-25 22:36:56 +01:00
|
|
|
create sequence s1 cache 2;
|
|
|
|
--error ER_BINLOG_STMT_MODE_AND_ROW_ENGINE
|
|
|
|
select next value for s1;
|
|
|
|
|
|
|
|
set session binlog_format=row;
|
|
|
|
select next value for s1;
|
2017-05-23 16:18:31 +02:00
|
|
|
select * from s1;
|
MDEV-10139 Support for SEQUENCE objects
Working features:
CREATE OR REPLACE [TEMPORARY] SEQUENCE [IF NOT EXISTS] name
[ INCREMENT [ BY | = ] increment ]
[ MINVALUE [=] minvalue | NO MINVALUE ]
[ MAXVALUE [=] maxvalue | NO MAXVALUE ]
[ START [ WITH | = ] start ] [ CACHE [=] cache ] [ [ NO ] CYCLE ]
ENGINE=xxx COMMENT=".."
SELECT NEXT VALUE FOR sequence_name;
SELECT NEXTVAL(sequence_name);
SELECT PREVIOUS VALUE FOR sequence_name;
SELECT LASTVAL(sequence_name);
SHOW CREATE SEQUENCE sequence_name;
SHOW CREATE TABLE sequence_name;
CREATE TABLE sequence-structure ... SEQUENCE=1
ALTER TABLE sequence RENAME TO sequence2;
RENAME TABLE sequence TO sequence2;
DROP [TEMPORARY] SEQUENCE [IF EXISTS] sequence_names
Missing features
- SETVAL(value,sequence_name), to be used with replication.
- Check replication, including checking that sequence tables are marked
not transactional.
- Check that a commit happens for NEXT VALUE that changes table data (may
already work)
- ALTER SEQUENCE. ANSI SQL version of setval.
- Share identical sequence entries to not add things twice to table list.
- testing insert/delete/update/truncate/load data
- Run and fix Alibaba sequence tests (part of mysql-test/suite/sql_sequence)
- Write documentation for NEXT VALUE / PREVIOUS_VALUE
- NEXTVAL in DEFAULT
- Ensure that NEXTVAL in DEFAULT uses database from base table
- Two NEXTVAL for same row should give same answer.
- Oracle syntax sequence_table.nextval, without any FOR or FROM.
- Sequence tables are treated as 'not read constant tables' by SELECT; Would
be better if we would have a separate list for sequence tables so that
select doesn't know about them, except if refereed to with FROM.
Other things done:
- Improved output for safemalloc backtrack
- frm_type_enum changed to Table_type
- Removed lex->is_view and replaced with lex->table_type. This allows
use to more easy check if item is view, sequence or table.
- Added table flag HA_CAN_TABLES_WITHOUT_ROLLBACK, needed for handlers
that want's to support sequences
- Added handler calls:
- engine_name(), to simplify getting engine name for partition and sequences
- update_first_row(), to be able to do efficient sequence implementations.
- Made binlog_log_row() global to be able to call it from ha_sequence.cc
- Added handler variable: row_already_logged, to be able to flag that the
changed row is already logging to replication log.
- Added CF_DB_CHANGE and CF_SCHEMA_CHANGE flags to simplify
deny_updates_if_read_only_option()
- Added sp_add_cfetch() to avoid new conflicts in sql_yacc.yy
- Moved code for add_table_options() out from sql_show.cc::show_create_table()
- Added String::append_longlong() and used it in sql_show.cc to simplify code.
- Added extra option to dd_frm_type() and ha_table_exists to indicate if
the table is a sequence. Needed by DROP SQUENCE to not drop a table.
2017-03-25 22:36:56 +01:00
|
|
|
|
|
|
|
connection master;
|
|
|
|
--sync_slave_with_master
|
|
|
|
|
|
|
|
use s_db;
|
|
|
|
select * from s1;
|
|
|
|
|
|
|
|
connection m_normal_1;
|
|
|
|
use s_db;
|
|
|
|
drop sequence s1;
|
|
|
|
|
|
|
|
--echo ###########################################
|
|
|
|
--echo test savepoint
|
|
|
|
--echo ###########################################
|
|
|
|
connection master;
|
|
|
|
set session binlog_format=row;
|
|
|
|
|
|
|
|
create sequence s1 cache 2;
|
|
|
|
create table t1(id int)engine=innodb;
|
|
|
|
|
|
|
|
begin;
|
|
|
|
insert into t1 values(1111);
|
|
|
|
savepoint sp1;
|
|
|
|
insert into t1 select next value for s1;
|
|
|
|
insert into t1 select next value for s1;
|
|
|
|
insert into t1 select next value for s1;
|
|
|
|
|
|
|
|
insert into t1 values(2222);
|
|
|
|
|
|
|
|
select * from t1;
|
|
|
|
rollback to sp1;
|
|
|
|
select * from t1;
|
|
|
|
select next value for s1;
|
|
|
|
|
|
|
|
commit;
|
|
|
|
|
|
|
|
drop sequence s1;
|
|
|
|
drop table t1;
|
|
|
|
|
|
|
|
--echo ###########################################
|
|
|
|
--echo test proc
|
|
|
|
--echo ###########################################
|
|
|
|
connection m_normal_1;
|
|
|
|
use s_db;
|
|
|
|
create table t(id int)engine=innodb;
|
|
|
|
|
|
|
|
delimiter //;
|
|
|
|
|
|
|
|
create procedure p1()
|
|
|
|
begin
|
|
|
|
create sequence s1 cache 2;
|
|
|
|
end//
|
|
|
|
|
|
|
|
create procedure p2()
|
|
|
|
begin
|
|
|
|
insert into t select next value for s1;
|
|
|
|
commit;
|
|
|
|
end//
|
|
|
|
|
|
|
|
delimiter ;//
|
|
|
|
|
|
|
|
call p1();
|
|
|
|
call p2();
|
|
|
|
call p2();
|
|
|
|
call p2();
|
|
|
|
call p2();
|
|
|
|
|
|
|
|
select * from t;
|
|
|
|
|
|
|
|
connection master;
|
|
|
|
--sync_slave_with_master
|
|
|
|
|
|
|
|
use s_db;
|
|
|
|
select * from t;
|
|
|
|
|
|
|
|
connection m_normal_1;
|
|
|
|
drop table t;
|
|
|
|
drop sequence s1;
|
|
|
|
drop procedure p1;
|
|
|
|
drop procedure p2;
|
|
|
|
|
|
|
|
--echo ###########################################
|
|
|
|
--echo test trigger
|
|
|
|
--echo ###########################################
|
|
|
|
connection m_normal_1;
|
|
|
|
use s_db;
|
|
|
|
create sequence s1 cache 2;
|
|
|
|
create table t1(id int)engine=innodb;
|
|
|
|
create table t2(id int)engine=innodb;
|
|
|
|
|
|
|
|
delimiter //;
|
|
|
|
CREATE TRIGGER tri_1
|
|
|
|
before INSERT ON t2 FOR EACH ROW
|
|
|
|
BEGIN
|
|
|
|
INSERT INTO t1 select next value for s1;
|
|
|
|
END//
|
|
|
|
delimiter ;//
|
|
|
|
|
|
|
|
begin;
|
|
|
|
insert into t2 values(1111);
|
|
|
|
insert into t2 values(1111);
|
|
|
|
insert into t2 values(1111);
|
|
|
|
insert into t2 values(1111);
|
|
|
|
|
|
|
|
select * from t2;
|
|
|
|
select * from t1;
|
|
|
|
rollback;
|
|
|
|
select * from t2;
|
|
|
|
select * from t1;
|
|
|
|
|
|
|
|
select next value for s1;
|
|
|
|
|
|
|
|
|
|
|
|
drop trigger tri_1;
|
|
|
|
drop table t1;
|
|
|
|
drop table t2;
|
|
|
|
drop sequence s1;
|
|
|
|
|
|
|
|
--echo ###########################################
|
|
|
|
--echo test function
|
|
|
|
--echo ###########################################
|
|
|
|
connection m_normal_1;
|
|
|
|
use s_db;
|
|
|
|
create sequence s1 cache 2;
|
|
|
|
create table t1(id int)engine=innodb;
|
|
|
|
|
|
|
|
delimiter //;
|
|
|
|
CREATE function f1() returns int
|
|
|
|
BEGIN
|
|
|
|
INSERT INTO t1 select next value for s1;
|
|
|
|
return (1);
|
|
|
|
END//
|
|
|
|
delimiter ;//
|
|
|
|
|
|
|
|
begin;
|
|
|
|
select f1();
|
|
|
|
select f1();
|
|
|
|
select f1();
|
|
|
|
select f1();
|
|
|
|
|
|
|
|
select * from t1;
|
|
|
|
rollback;
|
|
|
|
select * from t1;
|
|
|
|
|
|
|
|
select next value for s1;
|
|
|
|
|
|
|
|
drop function f1;
|
|
|
|
drop table t1;
|
|
|
|
drop sequence s1;
|
|
|
|
|
2017-05-30 20:31:30 +02:00
|
|
|
--echo ##############
|
|
|
|
--echo Test GRANT
|
|
|
|
--echo ##############
|
|
|
|
|
|
|
|
connection m_normal_2;
|
|
|
|
create table t1 (a int);
|
|
|
|
create sequence s1;
|
|
|
|
select next value for s1;
|
|
|
|
insert into t1 values (1);
|
|
|
|
connection m_normal_3;
|
|
|
|
select * from t1;
|
|
|
|
select * from s1;
|
|
|
|
select previous value for s1;
|
|
|
|
--error ER_TABLEACCESS_DENIED_ERROR
|
|
|
|
insert into t1 values (2);
|
|
|
|
--error ER_TABLEACCESS_DENIED_ERROR
|
|
|
|
select next value for s1;
|
|
|
|
--error ER_TABLEACCESS_DENIED_ERROR
|
|
|
|
do setval(s1,1000,0);
|
|
|
|
connection master;
|
|
|
|
grant insert on test.* to normal_5@'%' identified by 'pass';
|
|
|
|
disconnect m_normal_3;
|
|
|
|
connect(m_normal_3, 127.0.0.1, normal_5, pass, test, $MASTER_MYPORT);
|
|
|
|
insert into t1 values (2);
|
|
|
|
select t1.*, (next value for s1) from t1;
|
|
|
|
do setval(s1,10000,0);
|
|
|
|
select * from s1;
|
|
|
|
connection m_normal_2;
|
|
|
|
drop table t1;
|
|
|
|
drop sequence s1;
|
|
|
|
|
|
|
|
--echo #
|
|
|
|
--echo # Cleanup
|
|
|
|
--echo #
|
|
|
|
|
MDEV-10139 Support for SEQUENCE objects
Working features:
CREATE OR REPLACE [TEMPORARY] SEQUENCE [IF NOT EXISTS] name
[ INCREMENT [ BY | = ] increment ]
[ MINVALUE [=] minvalue | NO MINVALUE ]
[ MAXVALUE [=] maxvalue | NO MAXVALUE ]
[ START [ WITH | = ] start ] [ CACHE [=] cache ] [ [ NO ] CYCLE ]
ENGINE=xxx COMMENT=".."
SELECT NEXT VALUE FOR sequence_name;
SELECT NEXTVAL(sequence_name);
SELECT PREVIOUS VALUE FOR sequence_name;
SELECT LASTVAL(sequence_name);
SHOW CREATE SEQUENCE sequence_name;
SHOW CREATE TABLE sequence_name;
CREATE TABLE sequence-structure ... SEQUENCE=1
ALTER TABLE sequence RENAME TO sequence2;
RENAME TABLE sequence TO sequence2;
DROP [TEMPORARY] SEQUENCE [IF EXISTS] sequence_names
Missing features
- SETVAL(value,sequence_name), to be used with replication.
- Check replication, including checking that sequence tables are marked
not transactional.
- Check that a commit happens for NEXT VALUE that changes table data (may
already work)
- ALTER SEQUENCE. ANSI SQL version of setval.
- Share identical sequence entries to not add things twice to table list.
- testing insert/delete/update/truncate/load data
- Run and fix Alibaba sequence tests (part of mysql-test/suite/sql_sequence)
- Write documentation for NEXT VALUE / PREVIOUS_VALUE
- NEXTVAL in DEFAULT
- Ensure that NEXTVAL in DEFAULT uses database from base table
- Two NEXTVAL for same row should give same answer.
- Oracle syntax sequence_table.nextval, without any FOR or FROM.
- Sequence tables are treated as 'not read constant tables' by SELECT; Would
be better if we would have a separate list for sequence tables so that
select doesn't know about them, except if refereed to with FROM.
Other things done:
- Improved output for safemalloc backtrack
- frm_type_enum changed to Table_type
- Removed lex->is_view and replaced with lex->table_type. This allows
use to more easy check if item is view, sequence or table.
- Added table flag HA_CAN_TABLES_WITHOUT_ROLLBACK, needed for handlers
that want's to support sequences
- Added handler calls:
- engine_name(), to simplify getting engine name for partition and sequences
- update_first_row(), to be able to do efficient sequence implementations.
- Made binlog_log_row() global to be able to call it from ha_sequence.cc
- Added handler variable: row_already_logged, to be able to flag that the
changed row is already logging to replication log.
- Added CF_DB_CHANGE and CF_SCHEMA_CHANGE flags to simplify
deny_updates_if_read_only_option()
- Added sp_add_cfetch() to avoid new conflicts in sql_yacc.yy
- Moved code for add_table_options() out from sql_show.cc::show_create_table()
- Added String::append_longlong() and used it in sql_show.cc to simplify code.
- Added extra option to dd_frm_type() and ha_table_exists to indicate if
the table is a sequence. Needed by DROP SQUENCE to not drop a table.
2017-03-25 22:36:56 +01:00
|
|
|
connection master;
|
|
|
|
use s_db;
|
|
|
|
drop database s_db;
|
|
|
|
drop user normal_1@'%';
|
|
|
|
drop user normal_2@'%';
|
|
|
|
drop user normal_3@'%';
|
|
|
|
drop user normal_4@'%';
|
2017-05-30 20:31:30 +02:00
|
|
|
drop user normal_5@'%';
|
MDEV-10139 Support for SEQUENCE objects
Working features:
CREATE OR REPLACE [TEMPORARY] SEQUENCE [IF NOT EXISTS] name
[ INCREMENT [ BY | = ] increment ]
[ MINVALUE [=] minvalue | NO MINVALUE ]
[ MAXVALUE [=] maxvalue | NO MAXVALUE ]
[ START [ WITH | = ] start ] [ CACHE [=] cache ] [ [ NO ] CYCLE ]
ENGINE=xxx COMMENT=".."
SELECT NEXT VALUE FOR sequence_name;
SELECT NEXTVAL(sequence_name);
SELECT PREVIOUS VALUE FOR sequence_name;
SELECT LASTVAL(sequence_name);
SHOW CREATE SEQUENCE sequence_name;
SHOW CREATE TABLE sequence_name;
CREATE TABLE sequence-structure ... SEQUENCE=1
ALTER TABLE sequence RENAME TO sequence2;
RENAME TABLE sequence TO sequence2;
DROP [TEMPORARY] SEQUENCE [IF EXISTS] sequence_names
Missing features
- SETVAL(value,sequence_name), to be used with replication.
- Check replication, including checking that sequence tables are marked
not transactional.
- Check that a commit happens for NEXT VALUE that changes table data (may
already work)
- ALTER SEQUENCE. ANSI SQL version of setval.
- Share identical sequence entries to not add things twice to table list.
- testing insert/delete/update/truncate/load data
- Run and fix Alibaba sequence tests (part of mysql-test/suite/sql_sequence)
- Write documentation for NEXT VALUE / PREVIOUS_VALUE
- NEXTVAL in DEFAULT
- Ensure that NEXTVAL in DEFAULT uses database from base table
- Two NEXTVAL for same row should give same answer.
- Oracle syntax sequence_table.nextval, without any FOR or FROM.
- Sequence tables are treated as 'not read constant tables' by SELECT; Would
be better if we would have a separate list for sequence tables so that
select doesn't know about them, except if refereed to with FROM.
Other things done:
- Improved output for safemalloc backtrack
- frm_type_enum changed to Table_type
- Removed lex->is_view and replaced with lex->table_type. This allows
use to more easy check if item is view, sequence or table.
- Added table flag HA_CAN_TABLES_WITHOUT_ROLLBACK, needed for handlers
that want's to support sequences
- Added handler calls:
- engine_name(), to simplify getting engine name for partition and sequences
- update_first_row(), to be able to do efficient sequence implementations.
- Made binlog_log_row() global to be able to call it from ha_sequence.cc
- Added handler variable: row_already_logged, to be able to flag that the
changed row is already logging to replication log.
- Added CF_DB_CHANGE and CF_SCHEMA_CHANGE flags to simplify
deny_updates_if_read_only_option()
- Added sp_add_cfetch() to avoid new conflicts in sql_yacc.yy
- Moved code for add_table_options() out from sql_show.cc::show_create_table()
- Added String::append_longlong() and used it in sql_show.cc to simplify code.
- Added extra option to dd_frm_type() and ha_table_exists to indicate if
the table is a sequence. Needed by DROP SQUENCE to not drop a table.
2017-03-25 22:36:56 +01:00
|
|
|
|
|
|
|
--source include/rpl_end.inc
|