DROP
TABLE
IF EXISTS
sequence
;
CREATE
TABLE
sequence
(
name
VARCHAR
(50)
NOT
NULL
,
current_value
BIGINT
UNSIGNED
NOT
NULL
DEFAULT
0,
increment
INT
NOT
NULL
DEFAULT
1,
PRIMARY
KEY
(
name
)
) ENGINE=InnoDB;
DELIMITER /
DROP
FUNCTION
IF EXISTS currval /
CREATE
FUNCTION
currval(seq_name
VARCHAR
(50))
RETURNS
BIGINT
BEGIN
DECLARE
value
BIGINT
;
SELECT
current_value
INTO
value
FROM
sequence
WHERE
upper
(
name
) =
upper
(seq_name);
RETURN
value;
END
;
/
DELIMITER ;
DELIMITER /
DROP
FUNCTION
IF EXISTS nextval /
CREATE
FUNCTION
nextval (seq_name
VARCHAR
(50))
RETURNS
BIGINT
BEGIN
DECLARE
value
BIGINT
;
UPDATE
sequence
SET
current_value = current_value + increment
WHERE
upper
(
name
) =
upper
(seq_name);
RETURN
currval(seq_name);
END
;
/
DELIMITER ;
DELIMITER /
DROP
FUNCTION
IF EXISTS setval /
CREATE
FUNCTION
setval (seq_name
VARCHAR
(50), value
BIGINT
)
RETURNS
BIGINT
BEGIN
UPDATE
sequence
SET
current_value = value
WHERE
upper
(
name
) =
upper
(seq_name);
RETURN
currval(seq_name);
END
;
/
DELIMITER ;