41 lines
1.3 KiB
MySQL
41 lines
1.3 KiB
MySQL
|
CREATE TABLE command_macro (
|
||
|
id INT UNSIGNED AUTO_INCREMENT,
|
||
|
guild_id INT UNSIGNED NOT NULL,
|
||
|
|
||
|
name VARCHAR(100) NOT NULL,
|
||
|
description VARCHAR(100),
|
||
|
commands JSON NOT NULL,
|
||
|
|
||
|
FOREIGN KEY (guild_id) REFERENCES guilds(id) ON DELETE CASCADE,
|
||
|
PRIMARY KEY (id)
|
||
|
);
|
||
|
|
||
|
# New JSON structure is {command_name: "Remind", "<option name>": "<option value>", ...}
|
||
|
INSERT INTO command_macro (guild_id, description, name, commands)
|
||
|
SELECT
|
||
|
guild_id,
|
||
|
description,
|
||
|
name,
|
||
|
(
|
||
|
SELECT JSON_ARRAYAGG(
|
||
|
(
|
||
|
SELECT JSON_OBJECTAGG(t2.name, t2.value)
|
||
|
FROM JSON_TABLE(
|
||
|
JSON_ARRAY_APPEND(t1.options, '$', JSON_OBJECT('name', 'command_name', 'value', t1.command_name)),
|
||
|
'$[*]' COLUMNS (
|
||
|
name VARCHAR(64) PATH '$.name' ERROR ON ERROR,
|
||
|
value TEXT PATH '$.value' ERROR ON ERROR
|
||
|
)) AS t2
|
||
|
)
|
||
|
)
|
||
|
FROM macro m2
|
||
|
JOIN JSON_TABLE(
|
||
|
commands,
|
||
|
'$[*]' COLUMNS (
|
||
|
command_name VARCHAR(64) PATH '$.command_name' ERROR ON ERROR,
|
||
|
options JSON PATH '$.options' ERROR ON ERROR
|
||
|
)) AS t1
|
||
|
WHERE m1.id = m2.id
|
||
|
)
|
||
|
FROM macro m1;
|