Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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.
- Loading branch information
Showing
93 changed files
with
8,009 additions
and
500 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -194,6 +194,7 @@ END | |
roles- | ||
rpl- | ||
sys_vars- | ||
sql_sequence- | ||
unit- | ||
vcol- | ||
wsrep- | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
create function sequence returns integer soname "UDF_EXAMPLE_LIB"; | ||
create table t1 (n int key not null auto_increment, msg int as (sequence()) virtual); | ||
create function udf_sequence returns integer soname "UDF_EXAMPLE_LIB"; | ||
create table t1 (n int key not null auto_increment, msg int as (udf_sequence()) virtual); | ||
select * from t1; | ||
n msg | ||
drop table t1; | ||
drop function sequence; | ||
drop function udf_sequence; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
SET sql_mode=ORACLE; | ||
CREATE SEQUENCE s1; | ||
SHOW CREATE SEQUENCE s1; | ||
Table Create Table | ||
s1 CREATE SEQUENCE "s1" start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 1 cache 1000 nocycle | ||
SELECT s1.currval; | ||
s1.currval | ||
NULL | ||
SELECT s1.nextval; | ||
s1.nextval | ||
1 | ||
SELECT s1.nextval; | ||
s1.nextval | ||
2 | ||
SELECT s1.nextval; | ||
s1.nextval | ||
3 | ||
EXPLAIN EXTENDED SELECT s1.nextval; | ||
id select_type table type possible_keys key key_len ref rows filtered Extra | ||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used | ||
Warnings: | ||
Note 1003 select nextval("test"."s1") AS "s1.nextval" | ||
SELECT nextval(s1); | ||
nextval(s1) | ||
4 | ||
EXPLAIN EXTENDED SELECT s1.currval; | ||
id select_type table type possible_keys key key_len ref rows filtered Extra | ||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL No tables used | ||
Warnings: | ||
Note 1003 select lastval("test"."s1") AS "s1.currval" | ||
SELECT lastval(s1); | ||
lastval(s1) | ||
4 | ||
DROP SEQUENCE s1; | ||
CREATE SEQUENCE s1; | ||
CREATE VIEW v1 AS SELECT s1.nextval AS a; | ||
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='v1'; | ||
VIEW_DEFINITION | ||
select nextval(`test`.`s1`) AS `a` | ||
SELECT * FROM v1; | ||
a | ||
1 | ||
SHOW CREATE VIEW v1; | ||
View Create View character_set_client collation_connection | ||
v1 CREATE VIEW "v1" AS select nextval("test"."s1") AS "a" latin1 latin1_swedish_ci | ||
DROP VIEW v1; | ||
DROP SEQUENCE s1; | ||
CREATE SEQUENCE s1; | ||
CREATE VIEW v1 AS SELECT s1.currval AS a; | ||
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='v1'; | ||
VIEW_DEFINITION | ||
select lastval(`test`.`s1`) AS `a` | ||
SELECT * FROM v1; | ||
a | ||
NULL | ||
SHOW CREATE VIEW v1; | ||
View Create View character_set_client collation_connection | ||
v1 CREATE VIEW "v1" AS select lastval("test"."s1") AS "a" latin1 latin1_swedish_ci | ||
DROP VIEW v1; | ||
DROP SEQUENCE s1; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
--source include/have_binlog_format_row.inc | ||
|
||
SET sql_mode=ORACLE; | ||
|
||
CREATE SEQUENCE s1; | ||
SHOW CREATE SEQUENCE s1; | ||
SELECT s1.currval; | ||
SELECT s1.nextval; | ||
SELECT s1.nextval; | ||
SELECT s1.nextval; | ||
EXPLAIN EXTENDED SELECT s1.nextval; | ||
SELECT nextval(s1); | ||
EXPLAIN EXTENDED SELECT s1.currval; | ||
SELECT lastval(s1); | ||
DROP SEQUENCE s1; | ||
|
||
|
||
CREATE SEQUENCE s1; | ||
CREATE VIEW v1 AS SELECT s1.nextval AS a; | ||
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='v1'; | ||
SELECT * FROM v1; | ||
SHOW CREATE VIEW v1; | ||
DROP VIEW v1; | ||
DROP SEQUENCE s1; | ||
|
||
|
||
CREATE SEQUENCE s1; | ||
CREATE VIEW v1 AS SELECT s1.currval AS a; | ||
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='v1'; | ||
SELECT * FROM v1; | ||
SHOW CREATE VIEW v1; | ||
DROP VIEW v1; | ||
DROP SEQUENCE s1; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
create or replace sequence s1 cache 3; | ||
select next value for s1, min_value from s1 where max_value> 1; | ||
next value for s1 min_value | ||
1 1 | ||
select next value for s1, min_value from s1 where max_value> 2; | ||
next value for s1 min_value | ||
2 1 | ||
select next value for s1, min_value from s1 where max_value> 3; | ||
next value for s1 min_value | ||
3 1 | ||
select next value for s1, min_value from s1 where max_value> 4; | ||
next value for s1 min_value | ||
4 1 | ||
drop sequence s1; | ||
"Runnig SHOW BINLOG EVENTS" | ||
Log_name Pos Event_type Server_id End_log_pos Info | ||
# # Gtid 1 # GTID #-#-# | ||
# # Query 1 # use `test`; create or replace sequence s1 cache 3 | ||
# # Gtid 1 # BEGIN GTID #-#-# | ||
# # Annotate_rows 1 # select next value for s1, min_value from s1 where max_value> 1 | ||
# # Table_map 1 # table_id: 30 (test.s1) | ||
# # Write_rows_v1 1 # table_id: 30 flags: STMT_END_F | ||
# # Query 1 # COMMIT | ||
# # Gtid 1 # BEGIN GTID #-#-# | ||
# # Annotate_rows 1 # select next value for s1, min_value from s1 where max_value> 4 | ||
# # Table_map 1 # table_id: 30 (test.s1) | ||
# # Write_rows_v1 1 # table_id: 30 flags: STMT_END_F | ||
# # Query 1 # COMMIT | ||
# # Gtid 1 # GTID #-#-# | ||
# # Query 1 # use `test`; DROP TABLE `s1` /* generated by server */ | ||
RESET MASTER; |
Oops, something went wrong.