USE PARTS; /* CALL p_shop_edit_user ( 'auth0|6582b95c895d09a70ba10fef', # a_id_user '', # a_name '', # a_email 0 # a_email_verified ) */ -- Clear previous proc DROP PROCEDURE IF EXISTS p_shop_edit_user; DELIMITER // CREATE PROCEDURE p_shop_edit_user ( IN a_id_user VARCHAR(200), IN a_name VARCHAR(255), IN a_email VARCHAR(254), IN a_email_verified BIT ) BEGIN -- Argument redeclaration -- Variable declaration DECLARE v_has_filter_user BIT; -- DECLARE v_now DATETIME; -- Argument validation + default values IF a_id_user IS NULL THEN SET a_id_user = ''; ELSE SET a_id_user = TRIM(a_id_user); END IF; IF a_name IS NULL THEN SET a_name = ''; ELSE SET a_name = TRIM(a_name); END IF; IF a_email IS NULL THEN SET a_email = ''; ELSE SET a_email = TRIM(a_email); END IF; IF a_email_verified IS NULL THEN SET a_email_verified = 0; END IF; -- Temporary tables DROP TABLE IF EXISTS tmp_Msg_Error; DROP TABLE IF EXISTS tmp_Shop_User; CREATE TABLE tmp_Shop_User ( id_user VARCHAR(200) NOT NULL, CONSTRAINT FK_tmp_Shop_User_id_user FOREIGN KEY (id_user) REFERENCES Shop_User(id_user), active BIT NOT NULL ); CREATE TABLE tmp_Msg_Error ( display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT, id_type INT NOT NULL, # code VARCHAR(50) NOT NULL, # CONSTRAINT chk_tmp_Msg_Error_code CHECK (code IN (SELECT code FROM Shop_Msg_Error_Type)), CONSTRAINT FK_tmp_Msg_Error_id_type FOREIGN KEY (id_type) REFERENCES Shop_Msg_Error_Type(id_type), msg VARCHAR(4000) NOT NULL ); -- Parse filters SET v_has_filter_user = CASE WHEN a_id_user = '' THEN 0 ELSE 1 END; -- User IF v_has_filter_user THEN INSERT INTO tmp_Shop_User ( id_user, active ) SELECT id_user, active FROM Shop_User WHERE id_user LIKE CONCAT('%', a_id_user, '%') AND active LIMIT 1 ; IF NOT EXISTS (SELECT id_user FROM tmp_Shop_User LIMIT 1) THEN INSERT INTO Shop_User ( id_user, name, email, email_verified ) VALUES ( a_id_user, a_name, a_email, a_email_verified ); INSERT INTO tmp_Shop_User ( id_user, active ) SELECT id_user, active FROM Shop_User WHERE id_user LIKE CONCAT('%', a_id_user, '%') AND active LIMIT 1 ; END IF; SET a_id_user := (SELECT id_user FROM tmp_Shop_User LIMIT 1); ELSE INSERT INTO tmp_Msg_Error ( id_type, msg ) VALUES ( (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = 'BAD_DATA' LIMIT 1), 'No user ID provided.' ) ; END IF; /* IF NOT EXISTS (SELECT msg FROM tmp_Msg_Error LIMIT 1) THEN END IF; */ -- Returns # User SELECT * FROM tmp_Shop_User ; # Errors SELECT * FROM tmp_Msg_Error ; /* # Return arguments for test SELECT a_id_user, a_name, a_email, a_email_verified ; */ -- Clean up DROP TABLE IF EXISTS tmp_Msg_Error; DROP TABLE IF EXISTS tmp_Shop_User; END // DELIMITER ; /* CALL p_shop_edit_user ( '', '', '', 0 ) */