51 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			SQL
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			SQL
		
	
	
	
	
	
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;
 | 
						|
 | 
						|
# # Check which commands are used in macros
 | 
						|
# SELECT DISTINCT command_name
 | 
						|
# 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
 |