diff --git a/static/MySQL/00000_combined.sql b/static/MySQL/00000_combined.sql index 5e344aa..2109f1c 100644 --- a/static/MySQL/00000_combined.sql +++ b/static/MySQL/00000_combined.sql @@ -1,10 +1,10 @@ USE demo; -DROP PROCEDURE IF EXISTS demo.p_dog_save_command_category; +DROP PROCEDURE IF EXISTS demo.p_dog_save_command; DELIMITER // -CREATE PROCEDURE demo.p_dog_save_command_category ( +CREATE PROCEDURE demo.p_dog_save_command ( IN a_comment VARCHAR(500), IN a_guid BINARY(36), IN a_id_user INT, @@ -14,8 +14,10 @@ BEGIN DECLARE v_can_admin BIT; DECLARE v_can_create BIT; DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_id_access_level_admin INT; DECLARE v_id_access_level_edit INT; DECLARE v_id_change_set INT; + DECLARE v_id_permission_dog_admin INT; DECLARE v_id_permission_dog_new INT; DECLARE v_id_type_error_bad_data INT; DECLARE v_time_start TIMESTAMP(6); @@ -67,37 +69,47 @@ BEGIN DROP TABLE IF EXISTS tmp_Msg_Error; END; - SET SESSION group_concat_max_len=15000; - SET v_time_start := CURRENT_TIMESTAMP(6); SET v_code_type_error_bad_data := 'BAD_DATA'; SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM demo.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_permission_dog_admin := (SELECT PERMISSION.id_permission FROM demo.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_ADMIN' LIMIT 1); SET v_id_permission_dog_new := (SELECT PERMISSION.id_permission FROM demo.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_CREATE' LIMIT 1); + SET v_id_access_level_admin := (SELECT ACCESS_LEVEL.id_access_level FROM demo.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'ADMIN' LIMIT 1); SET v_id_access_level_edit := (SELECT ACCESS_LEVEL.id_access_level FROM demo.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'EDIT' LIMIT 1); CALL demo.p_core_validate_guid ( a_guid ); - DROP TABLE IF EXISTS tmp_Command_Category_Copy; - DROP TABLE IF EXISTS tmp_Command_Category; + DROP TABLE IF EXISTS tmp_Command_Copy; + DROP TABLE IF EXISTS tmp_Command; - CREATE TEMPORARY TABLE tmp_Command_Category ( + CREATE TEMPORARY TABLE tmp_Command ( id_temp INT + , id_command INT , id_command_category INT - , code VARCHAR(100) , name VARCHAR(250) + , hand_signal_default_description TEXT + , can_have_button BIT + , notes TEXT , active BIT , is_new BIT , name_error VARCHAR(250) - ); - CREATE TEMPORARY TABLE tmp_Command_Category_Copy ( + , name_command_category VARCHAR(250) + ); + + CREATE TEMPORARY TABLE tmp_Command_Copy ( id_temp INT + , id_command INT , id_command_category INT - , code VARCHAR(100) , name VARCHAR(250) + , hand_signal_default_description TEXT + , can_have_button BIT + , notes TEXT , active BIT , is_new BIT , name_error VARCHAR(250) + + , name_command_category VARCHAR(250) ); CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( @@ -109,230 +121,300 @@ BEGIN -- Get data from Temp table - INSERT INTO tmp_Command_Category ( - id_temp + INSERT INTO tmp_Command ( + id_temp + , id_command , id_command_category - , code , name + , hand_signal_default_description + , can_have_button + , notes , active , is_new + + , name_command_category ) SELECT - COMMAND_CATEGORY_T.id_temp - , COMMAND_CATEGORY_T.id_command_category + COMMAND_T.id_temp AS id_temp , COALESCE( - COMMAND_CATEGORY_T.code - , COMMAND_CATEGORY.code - ) AS code + COMMAND.id_command + , COMMAND_T.id_command + ) AS id_command , COALESCE( - COMMAND_CATEGORY_T.name - , COMMAND_CATEGORY.name + COMMAND_T.id_command_category + , COMMAND_CATEGORY_NAME.id_command_category + , COMMAND.id_command_category + ) AS id_command_category + , COALESCE( + COMMAND_T.name + , COMMAND.name ) AS name - , COALESCE(COMMAND_CATEGORY_T.active, 1) AS active - , CASE WHEN IFNULL(COMMAND_CATEGORY_T.id_command_category, 0) < 1 THEN 1 ELSE 0 END AS is_new - FROM demo.DOG_Command_Category_Temp COMMAND_CATEGORY_T - LEFT JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON COMMAND_CATEGORY_T.id_command_category = COMMAND_CATEGORY.id_command_category - WHERE COMMAND_CATEGORY_T.guid = a_guid + , COALESCE( + COMMAND_T.hand_signal_default_description + , COMMAND.hand_signal_default_description + ) AS hand_signal_default_description + , COALESCE( + COMMAND_T.can_have_button + , COMMAND.can_have_button + ) AS can_have_button + , COALESCE( + COMMAND_T.notes + , COMMAND.notes + ) AS notes + , COALESCE( + COMMAND_T.active + , COMMAND.active + , 1 + ) AS active + , CASE WHEN IFNULL(COMMAND_T.id_command, 0) < 1 THEN 1 ELSE 0 END AS is_new + -- , CASE WHEN NOT ISNULL(COMMAND_T.id_command) THEN 1 ELSE 0 END AS does_have_valid_command_id + + , COMMAND_T.name_command_category AS name_command_category + FROM demo.DOG_Command_Temp COMMAND_T + LEFT JOIN demo.DOG_Command_Category COMMAND_CATEGORY_NAME + ON COMMAND_T.name_command_category = COMMAND_CATEGORY_NAME.name + LEFT JOIN demo.DOG_Command COMMAND + ON COMMAND_T.id_command = COMMAND.id_command + OR ( + ( + COMMAND_T.id_command_category = COMMAND.id_command_category + OR COMMAND_CATEGORY_NAME.id_command_category = COMMAND.id_command_category + ) + AND COMMAND_T.name = COMMAND.name + AND ( + COMMAND.hand_signal_default_description IS NULL + OR COMMAND_T.hand_signal_default_description <=> COMMAND.hand_signal_default_description + ) + AND ( + COMMAND.notes IS NULL + OR COMMAND_T.notes <=> COMMAND.notes + ) + ) + WHERE COMMAND_T.guid = a_guid ; IF a_debug = 1 THEN - SELECT 'Command_Category_Temp records'; - SELECT * FROM tmp_Command_Category; - SELECT COUNT(*) FROM tmp_Command_Category; + SELECT 'Command_Temp records'; + SELECT * FROM tmp_Command; + SELECT COUNT(*) FROM tmp_Command; END IF; -- Error names - UPDATE tmp_Command_Category t_COMMAND_CATEGORY - SET t_COMMAND_CATEGORY.name_error = COALESCE(t_COMMAND_CATEGORY.code, t_COMMAND_CATEGORY.name, '(No Command Category)') + UPDATE tmp_Command t_COMMAND + LEFT JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND.id_command_category = COMMAND_CATEGORY.id_command_category + LEFT JOIN demo.DOG_Command COMMAND ON t_COMMAND.id_command = COMMAND.id_command + SET t_COMMAND.name_error = CONCAT( + COALESCE(COMMAND_CATEGORY.name, t_COMMAND.id_command_category, '(No Command Category)') + , ' - ' + , COALESCE(COMMAND.name, t_COMMAND.id_command, '(No Command)') + ) ; IF a_debug = 1 THEN SELECT 'After set name_error'; - SELECT * FROM tmp_Command_Category; - SELECT COUNT(*) FROM tmp_Command_Category; - END IF; - - -- Missing Command Category Ids - UPDATE tmp_Command_Category t_COMMAND_CATEGORY - LEFT JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND_CATEGORY.code = COMMAND_CATEGORY.code - SET - t_COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY.id_command_category - , t_COMMAND_CATEGORY.is_new = 0 - WHERE - IFNULL(t_COMMAND_CATEGORY.id_command_category, 0) < 1 - AND NOT ISNULL(COMMAND_CATEGORY.id_command_category) - ; - - IF a_debug = 1 THEN - SELECT 'After set missing id_command_category'; - SELECT * FROM tmp_Command_Category; - SELECT COUNT(*) FROM tmp_Command_Category; - END IF; - - -- Validation - -- Missing mandatory fields - -- code - IF EXISTS ( SELECT * FROM tmp_Command_Category t_COMMAND_CATEGORY WHERE t_COMMAND_CATEGORY.code IS NULL ) THEN - INSERT INTO tmp_Msg_Error ( - id_type - , code - , msg - ) - SELECT - v_id_type_error_bad_data - , v_code_type_error_bad_data - , CONCAT('The following Command Category(s) do not have a valid Code: ', GROUP_CONCAT(t_COMMAND_CATEGORY.name_error SEPARATOR ', ')) AS msg - FROM tmp_Command_Category t_COMMAND_CATEGORY - WHERE t_COMMAND_CATEGORY.code IS NULL - ; - END IF; - -- name - IF EXISTS ( SELECT * FROM tmp_Command_Category t_COMMAND_CATEGORY WHERE t_COMMAND_CATEGORY.name IS NULL ) THEN - INSERT INTO tmp_Msg_Error ( - id_type - , code - , msg - ) - SELECT - v_id_type_error_bad_data - , v_code_type_error_bad_data - , CONCAT('The following Command Category(s) do not have a valid Command: ', GROUP_CONCAT(t_COMMAND_CATEGORY.name_error SEPARATOR ', ')) AS msg - FROM tmp_Command_Category t_COMMAND_CATEGORY - WHERE t_COMMAND_CATEGORY.name IS NULL - ; + SELECT * FROM tmp_Command; + SELECT COUNT(*) FROM tmp_Command; END IF; /* + -- Find missing id_command_category by name_command_category + UPDATE tmp_Command t_COMMAND + INNER JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND.name_command_category = COMMAND_CATEGORY.name + SET t_COMMAND.id_command_category = COMMAND_CATEGORY.id_command_category + WHERE + t_COMMAND.id_command_category IS NULL + AND COMMAND_CATEGORY.id_command_category IS NOT NULL + ; + + IF a_debug = 1 THEN + SELECT 'After set missing id_command_category from name'; + SELECT * FROM tmp_Command; + SELECT COUNT(*) FROM tmp_Command; + END IF; + + -- Missing Command Ids + UPDATE tmp_Command t_COMMAND + LEFT JOIN demo.DOG_Command COMMAND + ON t_COMMAND.id_command_category = COMMAND.id_command_category + AND t_COMMAND.name = COMMAND.name + SET + t_COMMAND.id_command = COMMAND.id_command + , t_COMMAND.is_new = 0 + WHERE + IFNULL(t_COMMAND.id_command, 0) < 1 + AND NOT ISNULL(COMMAND.id_command) + ; + + IF a_debug = 1 THEN + SELECT 'After set missing id_command'; + SELECT * FROM tmp_Command; + SELECT COUNT(*) FROM tmp_Command; + END IF; + */ + + -- Validation + -- Missing mandatory fields + -- id_command_category + IF EXISTS (SELECT * FROM tmp_Command t_COMMAND WHERE ISNULL(t_COMMAND.id_command_category) LIMIT 1) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('The following Command(s) do not have a Category: ', GROUP_CONCAT(t_COMMAND.name_error SEPARATOR ', ')) AS msg + FROM tmp_Command t_COMMAND + WHERE ISNULL(t_COMMAND.id_command_category) + ; + END IF; + -- name + IF EXISTS (SELECT * FROM tmp_Command t_COMMAND WHERE ISNULL(t_COMMAND.name) LIMIT 1) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('The following Command(s) do not have a Name: ', GROUP_CONCAT(t_COMMAND.name_error SEPARATOR ', ')) AS msg + FROM tmp_Command t_COMMAND + WHERE ISNULL(t_COMMAND.name) + ; + END IF; + -- can_have_button + IF EXISTS (SELECT * FROM tmp_Command t_COMMAND WHERE ISNULL(t_COMMAND.can_have_button) LIMIT 1) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('The following Command(s) do not have a Can-Have-Button: ', GROUP_CONCAT(t_COMMAND.name_error SEPARATOR ', ')) AS msg + FROM tmp_Command t_COMMAND + WHERE ISNULL(t_COMMAND.can_have_button) + ; + END IF; + -- Duplicates - INSERT INTO tmp_Command_Category_Copy ( - id_temp - , id_command_category - , id_dog + INSERT INTO tmp_Command_Copy ( + id_temp , id_command - , hand_signal_description + , id_command_category + , name + , hand_signal_default_description , notes , active , is_new , name_error - , does_have_valid_command_category_id + + , name_command_category ) SELECT - t_COMMAND_CATEGORY.id_temp - , t_COMMAND_CATEGORY.id_command_category - , t_COMMAND_CATEGORY.id_dog - , t_COMMAND_CATEGORY.id_command - , t_COMMAND_CATEGORY.hand_signal_description - , t_COMMAND_CATEGORY.notes - , t_COMMAND_CATEGORY.active - , t_COMMAND_CATEGORY.is_new - , t_COMMAND_CATEGORY.name_error - , t_COMMAND_CATEGORY.does_have_valid_command_category_id - FROM tmp_Command_Category t_COMMAND_CATEGORY + t_COMMAND.id_temp + , t_COMMAND.id_command + , t_COMMAND.id_command_category + , t_COMMAND.name + , t_COMMAND.hand_signal_default_description + , t_COMMAND.notes + , t_COMMAND.active + , t_COMMAND.is_new + , t_COMMAND.name_error + + , t_COMMAND.name_command_category + FROM tmp_Command t_COMMAND ; IF a_debug = 1 THEN - SELECT COUNT(*) AS Count_Temp_Link FROM tmp_Command_Category; - SELECT COUNT(*) AS Count_Temp_Link_Copy FROM tmp_Command_Category_Copy; + SELECT COUNT(*) AS Count_Temp_Link FROM tmp_Command; + SELECT COUNT(*) AS Count_Temp_Link_Copy FROM tmp_Command_Copy; WITH - Combined_Links AS ( + Combined_Commands AS ( SELECT - t_COMMAND_CATEGORY.id_command_category - , t_COMMAND_CATEGORY.id_dog - , t_COMMAND_CATEGORY.id_command - , t_COMMAND_CATEGORY.name_error - -- , 1 AS is_from_temporary_table - -- , 0 AS is_from_permanent_table - FROM tmp_Command_Category t_COMMAND_CATEGORY - -- LEFT JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY.id_command_category - UNION - SELECT - COMMAND_CATEGORY.id_command_category - , COMMAND_CATEGORY.id_dog - , COMMAND_CATEGORY.id_command + COMMAND.id_command + , COMMAND.id_command_category + , COMMAND.name , IFNULL( - t_COMMAND_CATEGORY_COPY.name_error + t_COMMAND_COPY.name_error , CONCAT( - COALESCE(DOG.name, t_COMMAND_CATEGORY_COPY.id_dog, '(No Dog)') + COALESCE(COMMAND_CATEGORY.name, t_COMMAND.id_command_category, '(No Command Category)') , ' - ' - , COALESCE(COMMAND.name, t_COMMAND_CATEGORY_COPY.id_command, '(No Command)') + , COALESCE(COMMAND.name, t_COMMAND.id_command, '(No Command)') ) ) AS name_error - -- , 0 AS is_from_temporary_table - -- , 1 AS is_from_permanent_table - FROM demo.DOG_Command_Category COMMAND_CATEGORY - LEFT JOIN tmp_Command_Category_Copy t_COMMAND_CATEGORY_COPY ON COMMAND_CATEGORY.id_command_category = t_COMMAND_CATEGORY_COPY.id_command_category - INNER JOIN demo.DOG_Dog DOG ON COMMAND_CATEGORY.id_dog = DOG.id_dog - INNER JOIN demo.DOG_Command COMMAND ON COMMAND_CATEGORY.id_command = COMMAND.id_command - WHERE - NOT ISNULL(COMMAND_CATEGORY.id_command_category) - AND t_COMMAND_CATEGORY.does_have_valid_command_category_id = 0 - ) - , Duplicate_Link_Row_Numbers AS ( + FROM demo.DOG_Command COMMAND + LEFT JOIN tmp_Command_Copy t_COMMAND_COPY + ON COMMAND.id_command_category = t_COMMAND_COPY.id_command_category + AND COMMAND.name = t_COMMAND_COPY.name + INNER JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON COMMAND.id_command_category = COMMAND_CATEGORY.id_command_category + WHERE t_COMMAND_COPY.is_new = 1 + UNION SELECT - COMBINED_LINK.id_command_category - , COMBINED_LINK.id_dog - , COMBINED_LINK.id_command - , COMBINED_LINK.name_error - , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command) AS index_link_as_duplicate - FROM Combined_Links COMBINED_LINK - -- LEFT JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON COMBINED_LINK.id_command_category = COMMAND_CATEGORY.id_command_category + t_COMMAND.id_command + , t_COMMAND.id_command_category + , t_COMMAND.name + , t_COMMAND.name_error + FROM tmp_Command t_COMMAND ) - SELECT * -- AS count_duplicate_link_row_numbers - FROM Duplicate_Link_Row_Numbers; + , Duplicate_Command_Row_Numbers AS ( + SELECT + COMBINED_COMMAND.id_command + , COMBINED_COMMAND.id_command_category + , COMBINED_COMMAND.name + , COMBINED_COMMAND.name_error + , ROW_NUMBER() OVER (PARTITION BY COMBINED_COMMAND.id_command_category, COMBINED_COMMAND.name ORDER BY COMBINED_COMMAND.name_error ASC) AS index_link_as_duplicate + FROM Combined_Commands COMBINED_COMMAND + ) + SELECT * + FROM Duplicate_Command_Row_Numbers; END IF; - + IF EXISTS ( WITH - Combined_Links AS ( + Combined_Commands AS ( SELECT - t_COMMAND_CATEGORY.id_command_category - , t_COMMAND_CATEGORY.id_dog - , t_COMMAND_CATEGORY.id_command - , t_COMMAND_CATEGORY.name_error - -- , 1 AS is_from_temporary_table - -- , 0 AS is_from_permanent_table - FROM tmp_Command_Category t_COMMAND_CATEGORY - -- LEFT JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY.id_command_category - UNION - SELECT - COMMAND_CATEGORY.id_command_category - , COMMAND_CATEGORY.id_dog - , COMMAND_CATEGORY.id_command + COMMAND.id_command + , COMMAND.id_command_category + , COMMAND.name , IFNULL( - t_COMMAND_CATEGORY_COPY.name_error + t_COMMAND_COPY.name_error , CONCAT( - COALESCE(DOG.name, t_COMMAND_CATEGORY_COPY.id_dog, '(No Dog)') + COALESCE(COMMAND_CATEGORY.name, t_COMMAND.id_command_category, '(No Command Category)') , ' - ' - , COALESCE(COMMAND.name, t_COMMAND_CATEGORY_COPY.id_command, '(No Command)') + , COALESCE(COMMAND.name, t_COMMAND.id_command, '(No Command)') ) ) AS name_error - -- , 0 AS is_from_temporary_table - -- , 1 AS is_from_permanent_table - FROM demo.DOG_Command_Category COMMAND_CATEGORY - LEFT JOIN tmp_Command_Category_Copy t_COMMAND_CATEGORY_COPY ON COMMAND_CATEGORY.id_command_category = t_COMMAND_CATEGORY_COPY.id_command_category - INNER JOIN demo.DOG_Dog DOG ON COMMAND_CATEGORY.id_dog = DOG.id_dog - INNER JOIN demo.DOG_Command COMMAND ON COMMAND_CATEGORY.id_command = COMMAND.id_command - WHERE - ISNULL(t_COMMAND_CATEGORY_COPY.id_command_category) - AND NOT ISNULL(COMMAND_CATEGORY.id_command_category) - ) - , Duplicate_Link_Row_Numbers AS ( + FROM demo.DOG_Command COMMAND + LEFT JOIN tmp_Command_Copy t_COMMAND_COPY + ON COMMAND.id_command_category = t_COMMAND_COPY.id_command_category + AND COMMAND.name = t_COMMAND_COPY.name + INNER JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON COMMAND.id_command_category = COMMAND_CATEGORY.id_command_category + WHERE t_COMMAND_COPY.is_new = 1 + UNION SELECT - COMBINED_LINK.id_command_category - , COMBINED_LINK.id_dog - , COMBINED_LINK.id_command - , COMBINED_LINK.name_error - , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command) AS index_link_as_duplicate - FROM Combined_Links COMBINED_LINK - -- LEFT JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON COMBINED_LINK.id_command_category = COMMAND_CATEGORY.id_command_category + t_COMMAND.id_command + , t_COMMAND.id_command_category + , t_COMMAND.name + , t_COMMAND.name_error + FROM tmp_Command t_COMMAND ) - SELECT - v_id_type_error_bad_data - , v_code_type_error_bad_data - , CONCAT('Attempt to create duplicate Command Categorys on: ', GROUP_CONCAT(DUPLICATE_LINK.name_error SEPARATOR ', ')) AS msg + , Duplicate_Command_Row_Numbers AS ( + SELECT + COMBINED_COMMAND.id_command + , COMBINED_COMMAND.id_command_category + , COMBINED_COMMAND.name + , COMBINED_COMMAND.name_error + , ROW_NUMBER() OVER (PARTITION BY COMBINED_COMMAND.id_command_category, COMBINED_COMMAND.name ORDER BY COMBINED_COMMAND.name_error ASC) AS index_link_as_duplicate + FROM Combined_Commands COMBINED_COMMAND + ) + SELECT * FROM Duplicate_Link_Row_Numbers DUPLICATE_LINK - WHERE DUPLICATE_LINK.index_link_as_duplicate = 2 + WHERE DUPLICATE_LINK.index_link_as_duplicate > 1 GROUP BY DUPLICATE_LINK.id_dog, DUPLICATE_LINK.id_command ) THEN INSERT INTO tmp_Msg_Error ( @@ -341,64 +423,76 @@ BEGIN , msg ) WITH - Combined_Links AS ( + Combined_Commands AS ( SELECT - t_COMMAND_CATEGORY.id_command_category - , t_COMMAND_CATEGORY.id_dog - , t_COMMAND_CATEGORY.id_command - , t_COMMAND_CATEGORY.name_error - -- , 1 AS is_from_temporary_table - -- , 0 AS is_from_permanent_table - FROM tmp_Command_Category t_COMMAND_CATEGORY - -- LEFT JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY.id_command_category - UNION - SELECT - COMMAND_CATEGORY.id_command_category - , COMMAND_CATEGORY.id_dog - , COMMAND_CATEGORY.id_command + COMMAND.id_command + , COMMAND.id_command_category + , COMMAND.name , IFNULL( - t_COMMAND_CATEGORY_COPY.name_error + t_COMMAND_COPY.name_error , CONCAT( - COALESCE(DOG.name, t_COMMAND_CATEGORY_COPY.id_dog, '(No Dog)') + COALESCE(COMMAND_CATEGORY.name, t_COMMAND.id_command_category, '(No Command Category)') , ' - ' - , COALESCE(COMMAND.name, t_COMMAND_CATEGORY_COPY.id_command, '(No Command)') + , COALESCE(COMMAND.name, t_COMMAND.id_command, '(No Command)') ) ) AS name_error - -- , 0 AS is_from_temporary_table - -- , 1 AS is_from_permanent_table - FROM demo.DOG_Command_Category COMMAND_CATEGORY - LEFT JOIN tmp_Command_Category_Copy t_COMMAND_CATEGORY_COPY ON COMMAND_CATEGORY.id_command_category = t_COMMAND_CATEGORY_COPY.id_command_category - INNER JOIN demo.DOG_Dog DOG ON COMMAND_CATEGORY.id_dog = DOG.id_dog - INNER JOIN demo.DOG_Command COMMAND ON COMMAND_CATEGORY.id_command = COMMAND.id_command - WHERE - ISNULL(t_COMMAND_CATEGORY_COPY.id_command_category) - AND NOT ISNULL(COMMAND_CATEGORY.id_command_category) - ) - , Duplicate_Link_Row_Numbers AS ( + FROM demo.DOG_Command COMMAND + LEFT JOIN tmp_Command_Copy t_COMMAND_COPY + ON COMMAND.id_command_category = t_COMMAND_COPY.id_command_category + AND COMMAND.name = t_COMMAND_COPY.name + INNER JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON COMMAND.id_command_category = COMMAND_CATEGORY.id_command_category + WHERE t_COMMAND_COPY.is_new = 1 + UNION SELECT - COMBINED_LINK.id_command_category - , COMBINED_LINK.id_dog - , COMBINED_LINK.id_command - , COMBINED_LINK.name_error - , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command) AS index_link_as_duplicate - FROM Combined_Links COMBINED_LINK - -- LEFT JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON COMBINED_LINK.id_command_category = COMMAND_CATEGORY.id_command_category + t_COMMAND.id_command + , t_COMMAND.id_command_category + , t_COMMAND.name + , t_COMMAND.name_error + FROM tmp_Command t_COMMAND + ) + , Duplicate_Command_Row_Numbers AS ( + SELECT + COMBINED_COMMAND.id_command + , COMBINED_COMMAND.id_command_category + , COMBINED_COMMAND.name + , COMBINED_COMMAND.name_error + , ROW_NUMBER() OVER (PARTITION BY COMBINED_COMMAND.id_command_category, COMBINED_COMMAND.name ORDER BY COMBINED_COMMAND.name_error ASC) AS index_link_as_duplicate + FROM Combined_Commands COMBINED_COMMAND ) SELECT v_id_type_error_bad_data , v_code_type_error_bad_data - , CONCAT('Attempt to create duplicate Command Categorys on: ', GROUP_CONCAT(DUPLICATE_LINK.name_error SEPARATOR ', ')) AS msg - FROM Duplicate_Link_Row_Numbers DUPLICATE_LINK - -- LEFT JOIN demo.DOG_Dog DOG ON DUPLICATE_LINK.id_dog = DOG.id_dog - -- LEFT JOIN demo.DOG_Command COMMAND ON DUPLICATE_LINK.id_command = COMMAND.id_command - WHERE DUPLICATE_LINK.index_link_as_duplicate = 2 - GROUP BY DUPLICATE_LINK.id_dog, DUPLICATE_LINK.id_command + , CONCAT('Attempt to create duplicate or overwrite existing Commands on: ', GROUP_CONCAT(DUPLICATE_COMMAND.name_error SEPARATOR ', ')) AS msg + FROM Duplicate_Command_Row_Numbers DUPLICATE_COMMAND + WHERE DUPLICATE_COMMAND.index_link_as_duplicate > 1 + GROUP BY + DUPLICATE_COMMAND.id_command_category + , DUPLICATE_COMMAND.name ; END IF; - */ -- Permissions -- Can Create + IF a_debug = 1 THEN + SELECT + a_guid + , 0 -- get_all_user + , 0 -- get_inactive_user + , a_id_user -- ids_user + , '' -- a_auth0_ids_user + , '' -- a_names_user + , '' -- a_emails_user + , 1 -- a_require_all_id_search_filters_met + , 1 -- a_require_any_id_search_filters_met + , 0 -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_new -- ids_permission + , v_id_access_level_edit -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + CALL demo.p_dog_calc_user( a_guid , 0 -- get_all_user @@ -431,7 +525,7 @@ BEGIN , 0 -- a_debug ); - IF v_can_create = 0 THEN + IF (v_can_create = 0) THEN DELETE t_ME FROM tmp_Msg_Error t_ME WHERE t_ME.id_type <> v_id_type_error_no_permission @@ -444,17 +538,17 @@ BEGIN VALUES ( v_id_type_error_no_permission , v_code_type_error_no_permission - , 'You do not have permission to edit Commands.' + , 'You do not have permission to edit new Commands.' ) ; END IF; - + IF EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN IF a_debug = 1 THEN - SELECT * from tmp_Command_Category; + SELECT * from tmp_Command; END IF; - DELETE FROM tmp_Command_Category; + DELETE FROM tmp_Command; END IF; IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN @@ -474,34 +568,43 @@ BEGIN SET v_id_change_set := LAST_INSERT_ID(); - UPDATE demo.DOG_Command_Category COMMAND_CATEGORY - INNER JOIN tmp_Command_Category t_COMMAND_CATEGORY - ON COMMAND_CATEGORY.id_command_category = t_COMMAND_CATEGORY.id_command_category - AND t_COMMAND_CATEGORY.is_new = 0 + UPDATE demo.DOG_Command COMMAND + INNER JOIN tmp_Command t_COMMAND + ON COMMAND.id_command = t_COMMAND.id_command + AND t_COMMAND.is_new = 0 SET - COMMAND_CATEGORY.code = t_COMMAND_CATEGORY.code - , COMMAND_CATEGORY.name = t_COMMAND_CATEGORY.name - , COMMAND_CATEGORY.active = t_COMMAND_CATEGORY.active - , COMMAND_CATEGORY.id_change_set = v_id_change_set + COMMAND.id_command_category = t_COMMAND.id_command_category + , COMMAND.name = t_COMMAND.name + , COMMAND.hand_signal_default_description = t_COMMAND.hand_signal_default_description + , COMMAND.can_have_button = t_COMMAND.can_have_button + , COMMAND.notes = t_COMMAND.notes + , COMMAND.active = t_COMMAND.active + , COMMAND.id_change_set = v_id_change_set ; - INSERT INTO demo.DOG_Command_Category ( - code + INSERT INTO demo.DOG_Command ( + id_command_category , name + , hand_signal_default_description + , can_have_button + , notes , active , id_user_created_by , created_on ) SELECT - t_COMMAND_CATEGORY.code AS code - , t_COMMAND_CATEGORY.name AS name - , t_COMMAND_CATEGORY.active AS active - , a_id_user AS created_by - , v_time_start AS created_on - FROM tmp_Command_Category t_COMMAND_CATEGORY + t_COMMAND.id_command_category AS id_command_category + , t_COMMAND.name AS name + , t_COMMAND.hand_signal_default_description AS hand_signal_default_description + , t_COMMAND.can_have_button AS can_have_button + , t_COMMAND.notes AS notes + , t_COMMAND.active AS active + , a_id_user AS created_by + , v_time_start AS created_on + FROM tmp_Command t_COMMAND WHERE - t_COMMAND_CATEGORY.is_new = 1 - AND t_COMMAND_CATEGORY.active = 1 + t_COMMAND.is_new = 1 + AND t_COMMAND.active = 1 ; COMMIT; @@ -509,7 +612,7 @@ BEGIN START TRANSACTION; - DELETE FROM demo.DOG_Command_Category_Temp + DELETE FROM demo.DOG_Command_Temp WHERE GUID = a_guid ; @@ -531,11 +634,12 @@ BEGIN ; IF a_debug = 1 THEN - SELECT * FROM tmp_Command_Category; + SELECT * from tmp_Command; END IF; - DROP TEMPORARY TABLE tmp_Command_Category; DROP TEMPORARY TABLE tmp_Msg_Error; + DROP TEMPORARY TABLE tmp_Command_Copy; + DROP TEMPORARY TABLE tmp_Command; IF a_debug = 1 THEN CALL demo.p_core_debug_timing_reporting ( v_time_start ); @@ -547,49 +651,61 @@ DELIMITER ; /* -'ripplesipplenippletippledipplekipple' -DELETE FROM demo.DOG_Command_Category WHERE id_command_category > 740; -* / -delete -from demo.DOG_Command_Category_Temp -; select * -- COUNT(*) -- delete -from demo.DOG_Command_Category_Temp +from demo.DOG_Command_Temp ; select COUNT(*) -from demo.DOG_Command_Category_Temp -; -select - * - -- COUNT(*) --- delete -from demo.DOG_Command_Category -; -select COUNT(*) -from demo.DOG_Command_Category +from demo.DOG_Command_Temp ; -INSERT INTO demo.DOG_Command_Category_Temp ( - id_command_category - , code +*/ + + + + +DELETE FROM demo.DOG_Command_Temp; +SELECT * + /* + CC.name + , C.name + */ +FROM demo.DOG_Command C +INNER JOIN demo.DOG_Command_Category CC ON C.id_command_category = CC.id_command_category +ORDER BY CC.name, C.name +; +select COUNT(*) +from demo.DOG_Command +; + +INSERT INTO demo.DOG_Command_Temp ( + id_command + , id_command_category , name + , hand_signal_default_description + , can_have_button + , notes , active , guid ) VALUES ( - -1 -- id_command_category - , 'ACTIVITIES' -- code - , 'A Sport Is Fun' -- name + -1 -- id_command + , 1 -- id_command_category + , 'Bath' -- name + , 'Burp and juice' -- hand_signal_default_description + , 1 -- can_have_category + , 'Sweet' -- notes , 1 -- active , 'ripplesipplenippletippledipplekipple' ); -CALL demo.p_dog_save_command_category ( - 'nipples' - , 'ripplesipplenippletippledipplekipple' + + +CALL demo.p_dog_save_command ( + 'ripplesipplenippletippledipplekipple' + , (SELECT GUID FROM demo.DOG_Command_Temp COMMAND_TEMP ORDER BY id_temp DESC LIMIT 1) , 1 , 1 ); @@ -599,19 +715,20 @@ select * -- COUNT(*) -- delete -from demo.DOG_Command_Category_Temp +from demo.DOG_Command_Temp ; select COUNT(*) -from demo.DOG_Command_Category_Temp +from demo.DOG_Command_Temp ; -select - * - -- COUNT(*) --- delete -from demo.DOG_Command_Category +SELECT * + /* + CC.name + , C.name + */ +FROM demo.DOG_Command C +INNER JOIN demo.DOG_Command_Category CC ON C.id_command_category = CC.id_command_category +ORDER BY CC.name, C.name ; select COUNT(*) -from demo.DOG_Command_Category +from demo.DOG_Command ; - -*/ \ No newline at end of file diff --git a/static/MySQL/71003_p_dog_save_command.sql b/static/MySQL/71003_p_dog_save_command.sql index dcd3a64..8e8bac4 100644 --- a/static/MySQL/71003_p_dog_save_command.sql +++ b/static/MySQL/71003_p_dog_save_command.sql @@ -79,10 +79,27 @@ BEGIN CALL parts.p_core_validate_guid ( a_guid ); + DROP TABLE IF EXISTS tmp_Command_Copy; DROP TABLE IF EXISTS tmp_Command; CREATE TEMPORARY TABLE tmp_Command ( - id_command INT + id_temp INT + , id_command INT + , id_command_category INT + , name VARCHAR(250) + , hand_signal_default_description TEXT + , can_have_button BIT + , notes TEXT + , active BIT + , is_new BIT + , name_error VARCHAR(250) + + , name_command_category VARCHAR(250) + ); + + CREATE TEMPORARY TABLE tmp_Command_Copy ( + id_temp INT + , id_command INT , id_command_category INT , name VARCHAR(250) , hand_signal_default_description TEXT @@ -105,7 +122,8 @@ BEGIN -- Get data from Temp table INSERT INTO tmp_Command ( - id_command + id_temp + , id_command , id_command_category , name , hand_signal_default_description @@ -117,8 +135,16 @@ BEGIN , name_command_category ) SELECT - COMMAND_T.id_command AS id_command - , COMMAND_T.id_command_category AS id_command_category + COMMAND_T.id_temp AS id_temp + , COALESCE( + COMMAND.id_command + , COMMAND_T.id_command + ) AS id_command + , COALESCE( + COMMAND_T.id_command_category + , COMMAND_CATEGORY_NAME.id_command_category + , COMMAND.id_command_category + ) AS id_command_category , COALESCE( COMMAND_T.name , COMMAND.name @@ -140,12 +166,30 @@ BEGIN , COMMAND.active , 1 ) AS active - , CASE WHEN IFNULL(COMMAND_T.id_command, 0) < 1 THEN 1 ELSE 0 END AS is_new - -- , CASE WHEN NOT ISNULL(COMMAND_T.id_command) THEN 1 ELSE 0 END AS does_have_valid_command_id + , CASE WHEN COALESCE(COMMAND.id_command, COMMAND_T.id_command, 0) < 1 THEN 1 ELSE 0 END AS is_new , COMMAND_T.name_command_category AS name_command_category FROM parts.DOG_Command_Temp COMMAND_T - LEFT JOIN parts.DOG_Command COMMAND ON COMMAND_T.id_command = COMMAND.id_command + LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY_NAME + ON COMMAND_T.name_command_category = COMMAND_CATEGORY_NAME.name + LEFT JOIN parts.DOG_Command COMMAND + ON COMMAND_T.id_command = COMMAND.id_command + OR ( + ( + COMMAND_T.id_command_category = COMMAND.id_command_category + OR COMMAND_CATEGORY_NAME.id_command_category = COMMAND.id_command_category + ) + AND COMMAND_T.name = COMMAND.name + AND ( + COMMAND.hand_signal_default_description IS NULL + OR COMMAND_T.hand_signal_default_description <=> COMMAND.hand_signal_default_description + ) + AND COMMAND_T.can_have_button = COMMAND.can_have_button + AND ( + COMMAND.notes IS NULL + OR COMMAND_T.notes <=> COMMAND.notes + ) + ) WHERE COMMAND_T.guid = a_guid ; @@ -162,7 +206,7 @@ BEGIN SET t_COMMAND.name_error = CONCAT( COALESCE(COMMAND_CATEGORY.name, t_COMMAND.id_command_category, '(No Command Category)') , ' - ' - , COALESCE(COMMAND.name, t_COMMAND.id_command, '(No Command)') + , COALESCE(COMMAND.name, t_COMMAND.name, t_COMMAND.id_command, '(No Command)') ) ; @@ -172,6 +216,7 @@ BEGIN SELECT COUNT(*) FROM tmp_Command; END IF; + /* -- Find missing id_command_category by name_command_category UPDATE tmp_Command t_COMMAND INNER JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND.name_command_category = COMMAND_CATEGORY.name @@ -205,6 +250,7 @@ BEGIN SELECT * FROM tmp_Command; SELECT COUNT(*) FROM tmp_Command; END IF; + */ -- Validation -- Missing mandatory fields @@ -253,6 +299,173 @@ BEGIN WHERE ISNULL(t_COMMAND.can_have_button) ; END IF; + + -- Duplicates + INSERT INTO tmp_Command_Copy ( + id_temp + , id_command + , id_command_category + , name + , hand_signal_default_description + , notes + , active + , is_new + , name_error + ) + SELECT + t_COMMAND.id_temp + , t_COMMAND.id_command + , t_COMMAND.id_command_category + , t_COMMAND.name + , t_COMMAND.hand_signal_default_description + , t_COMMAND.notes + , t_COMMAND.active + , t_COMMAND.is_new + , t_COMMAND.name_error + FROM tmp_Command t_COMMAND + ; + + IF a_debug = 1 THEN + SELECT COUNT(*) AS Count_Temp_Command FROM tmp_Command; + SELECT COUNT(*) AS Count_Temp_Command_Copy FROM tmp_Command_Copy; + + WITH + Combined_Commands AS ( + SELECT + COMMAND.id_command + , COMMAND.id_command_category + , COMMAND.name + , IFNULL( + t_COMMAND_COPY.name_error + , CONCAT( + COALESCE(COMMAND_CATEGORY.name, t_COMMAND_COPY.id_command_category, '(No Command Category)') + , ' - ' + , COALESCE(COMMAND.name, t_COMMAND_COPY.name, t_COMMAND_COPY.id_command, '(No Command)') + ) + ) AS name_error + FROM parts.DOG_Command COMMAND + LEFT JOIN tmp_Command_Copy t_COMMAND_COPY + ON COMMAND.id_command_category = t_COMMAND_COPY.id_command_category + AND COMMAND.name = t_COMMAND_COPY.name + INNER JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON COMMAND.id_command_category = COMMAND_CATEGORY.id_command_category + WHERE t_COMMAND_COPY.is_new = 1 + UNION + SELECT + t_COMMAND.id_command + , t_COMMAND.id_command_category + , t_COMMAND.name + , t_COMMAND.name_error + FROM tmp_Command t_COMMAND + ) + , Duplicate_Command_Row_Numbers AS ( + SELECT + COMBINED_COMMAND.id_command + , COMBINED_COMMAND.id_command_category + , COMBINED_COMMAND.name + , COMBINED_COMMAND.name_error + , ROW_NUMBER() OVER (PARTITION BY COMBINED_COMMAND.id_command_category, COMBINED_COMMAND.name ORDER BY COMBINED_COMMAND.name_error ASC) AS index_command_as_duplicate + FROM Combined_Commands COMBINED_COMMAND + ) + SELECT * + FROM Duplicate_Command_Row_Numbers; + END IF; + + IF EXISTS ( + WITH + Combined_Commands AS ( + SELECT + COMMAND.id_command + , COMMAND.id_command_category + , COMMAND.name + , IFNULL( + t_COMMAND_COPY.name_error + , CONCAT( + COALESCE(COMMAND_CATEGORY.name, t_COMMAND_COPY.id_command_category, '(No Command Category)') + , ' - ' + , COALESCE(COMMAND.name, t_COMMAND_COPY.name, t_COMMAND_COPY.id_command, '(No Command)') + ) + ) AS name_error + FROM parts.DOG_Command COMMAND + LEFT JOIN tmp_Command_Copy t_COMMAND_COPY + ON COMMAND.id_command_category = t_COMMAND_COPY.id_command_category + AND COMMAND.name = t_COMMAND_COPY.name + INNER JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON COMMAND.id_command_category = COMMAND_CATEGORY.id_command_category + WHERE t_COMMAND_COPY.is_new = 1 + UNION + SELECT + t_COMMAND.id_command + , t_COMMAND.id_command_category + , t_COMMAND.name + , t_COMMAND.name_error + FROM tmp_Command t_COMMAND + ) + , Duplicate_Command_Row_Numbers AS ( + SELECT + COMBINED_COMMAND.id_command + , COMBINED_COMMAND.id_command_category + , COMBINED_COMMAND.name + , COMBINED_COMMAND.name_error + , ROW_NUMBER() OVER (PARTITION BY COMBINED_COMMAND.id_command_category, COMBINED_COMMAND.name ORDER BY COMBINED_COMMAND.name_error ASC) AS index_command_as_duplicate + FROM Combined_Commands COMBINED_COMMAND + ) + SELECT * + FROM Duplicate_Command_Row_Numbers DUPLICATE_COMMAND + WHERE DUPLICATE_COMMAND.index_command_as_duplicate > 1 + GROUP BY DUPLICATE_COMMAND.id_command_category, DUPLICATE_COMMAND.name + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + WITH + Combined_Commands AS ( + SELECT + COMMAND.id_command + , COMMAND.id_command_category + , COMMAND.name + , IFNULL( + t_COMMAND_COPY.name_error + , CONCAT( + COALESCE(COMMAND_CATEGORY.name, t_COMMAND_COPY.id_command_category, '(No Command Category)') + , ' - ' + , COALESCE(COMMAND.name, t_COMMAND_COPY.name, t_COMMAND_COPY.id_command, '(No Command)') + ) + ) AS name_error + FROM parts.DOG_Command COMMAND + LEFT JOIN tmp_Command_Copy t_COMMAND_COPY + ON COMMAND.id_command_category = t_COMMAND_COPY.id_command_category + AND COMMAND.name = t_COMMAND_COPY.name + INNER JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON COMMAND.id_command_category = COMMAND_CATEGORY.id_command_category + WHERE t_COMMAND_COPY.is_new = 1 + UNION + SELECT + t_COMMAND.id_command + , t_COMMAND.id_command_category + , t_COMMAND.name + , t_COMMAND.name_error + FROM tmp_Command t_COMMAND + ) + , Duplicate_Command_Row_Numbers AS ( + SELECT + COMBINED_COMMAND.id_command + , COMBINED_COMMAND.id_command_category + , COMBINED_COMMAND.name + , COMBINED_COMMAND.name_error + , ROW_NUMBER() OVER (PARTITION BY COMBINED_COMMAND.id_command_category, COMBINED_COMMAND.name ORDER BY COMBINED_COMMAND.name_error ASC) AS index_command_as_duplicate + FROM Combined_Commands COMBINED_COMMAND + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Attempt to create duplicate or overwrite existing Commands on: ', GROUP_CONCAT(DUPLICATE_COMMAND.name_error SEPARATOR ', ')) AS msg + FROM Duplicate_Command_Row_Numbers DUPLICATE_COMMAND + WHERE DUPLICATE_COMMAND.index_command_as_duplicate > 1 + GROUP BY + DUPLICATE_COMMAND.id_command_category + , DUPLICATE_COMMAND.name + ; + END IF; -- Permissions -- Can Create @@ -420,8 +633,9 @@ BEGIN SELECT * from tmp_Command; END IF; - DROP TEMPORARY TABLE tmp_Command; DROP TEMPORARY TABLE tmp_Msg_Error; + DROP TEMPORARY TABLE tmp_Command_Copy; + DROP TEMPORARY TABLE tmp_Command; IF a_debug = 1 THEN CALL parts.p_core_debug_timing_reporting ( v_time_start ); @@ -442,12 +656,24 @@ from parts.DOG_Command_Temp select COUNT(*) from parts.DOG_Command_Temp ; +INSERT INTO demo.DOG_Dog_Change_Set ( comment, id_user_updated_last_by ) +VALUES ( 'Nullify empty hand_signal_default_descriptions.', 1 ) +; + +UPDATE demo.DOG_Command C +SET + C.hand_signal_default_description = NULL + , C.id_change_set = (SELECT DCS.id_change_set FROM demo.DOG_Dog_Change_Set DCS ORDER BY DCS.id_change_set DESC LIMIT 1) +WHERE C.hand_signal_default_description = '' +; */ +DELETE FROM demo.DOG_Command C +WHERE C.id_command > 260; DELETE FROM demo.DOG_Command_Temp; SELECT * /* @@ -475,9 +701,9 @@ INSERT INTO parts.DOG_Command_Temp ( VALUES ( -1 -- id_command , 1 -- id_command_category - , 'Bathing' -- name + , 'Bath' -- name , 'Burp and juice' -- hand_signal_default_description - , 1 -- can_have_category + , 1 -- can_have_button , 'Sweet' -- notes , 1 -- active , 'ripplesipplenippletippledipplekipple' diff --git a/static/MySQL/71102_p_dog_save_command_category.sql b/static/MySQL/71102_p_dog_save_command_category.sql index 5aa2e2e..ffeab17 100644 --- a/static/MySQL/71102_p_dog_save_command_category.sql +++ b/static/MySQL/71102_p_dog_save_command_category.sql @@ -119,7 +119,7 @@ BEGIN ) SELECT COMMAND_CATEGORY_T.id_temp - , COMMAND_CATEGORY_T.id_command_category + , COALESCE(COMMAND_CATEGORY.id_command_category, COMMAND_CATEGORY_T.id_command_category) AS id_command_category , COALESCE( COMMAND_CATEGORY_T.code , COMMAND_CATEGORY.code @@ -131,7 +131,12 @@ BEGIN , COALESCE(COMMAND_CATEGORY_T.active, 1) AS active , CASE WHEN IFNULL(COMMAND_CATEGORY_T.id_command_category, 0) < 1 THEN 1 ELSE 0 END AS is_new FROM parts.DOG_Command_Category_Temp COMMAND_CATEGORY_T - LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON COMMAND_CATEGORY_T.id_command_category = COMMAND_CATEGORY.id_command_category + LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY + ON COMMAND_CATEGORY_T.id_command_category = COMMAND_CATEGORY.id_command_category + OR ( + COMMAND_CATEGORY_T.code = COMMAND_CATEGORY.code + AND COMMAND_CATEGORY_T.name = COMMAND_CATEGORY.name + ) WHERE COMMAND_CATEGORY_T.guid = a_guid ; @@ -143,7 +148,7 @@ BEGIN -- Error names UPDATE tmp_Command_Category t_COMMAND_CATEGORY - SET t_COMMAND_CATEGORY.name_error = COALESCE(t_COMMAND_CATEGORY.code, t_COMMAND_CATEGORY.name, '(No Command Category)') + SET t_COMMAND_CATEGORY.name_error = COALESCE(t_COMMAND_CATEGORY.code, t_COMMAND_CATEGORY.name, t_COMMAND_CATEGORY.id_command_category, '(No Command Category)') ; IF a_debug = 1 THEN @@ -152,6 +157,7 @@ BEGIN SELECT COUNT(*) FROM tmp_Command_Category; END IF; + /* -- Missing Command Category Ids UPDATE tmp_Command_Category t_COMMAND_CATEGORY LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND_CATEGORY.code = COMMAND_CATEGORY.code @@ -168,6 +174,7 @@ BEGIN SELECT * FROM tmp_Command_Category; SELECT COUNT(*) FROM tmp_Command_Category; END IF; + */ -- Validation -- Missing mandatory fields @@ -202,138 +209,98 @@ BEGIN ; END IF; - /* -- Duplicates INSERT INTO tmp_Command_Category_Copy ( - id_temp + id_temp , id_command_category - , id_dog - , id_command - , hand_signal_description - , notes + , code + , name , active , is_new , name_error - , does_have_valid_command_category_id ) SELECT t_COMMAND_CATEGORY.id_temp , t_COMMAND_CATEGORY.id_command_category - , t_COMMAND_CATEGORY.id_dog - , t_COMMAND_CATEGORY.id_command - , t_COMMAND_CATEGORY.hand_signal_description - , t_COMMAND_CATEGORY.notes + , t_COMMAND_CATEGORY.code + , t_COMMAND_CATEGORY.name , t_COMMAND_CATEGORY.active , t_COMMAND_CATEGORY.is_new , t_COMMAND_CATEGORY.name_error - , t_COMMAND_CATEGORY.does_have_valid_command_category_id FROM tmp_Command_Category t_COMMAND_CATEGORY ; IF a_debug = 1 THEN - SELECT COUNT(*) AS Count_Temp_Link FROM tmp_Command_Category; - SELECT COUNT(*) AS Count_Temp_Link_Copy FROM tmp_Command_Category_Copy; + SELECT COUNT(*) AS Count_Temp_Command_Category FROM tmp_Command_Category; + SELECT COUNT(*) AS Count_Temp_Command_Category_Copy FROM tmp_Command_Category_Copy; WITH - Combined_Links AS ( - SELECT - t_COMMAND_CATEGORY.id_command_category - , t_COMMAND_CATEGORY.id_dog - , t_COMMAND_CATEGORY.id_command - , t_COMMAND_CATEGORY.name_error - -- , 1 AS is_from_temporary_table - -- , 0 AS is_from_permanent_table - FROM tmp_Command_Category t_COMMAND_CATEGORY - -- LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY.id_command_category - UNION + Combined_Command_Category AS ( SELECT COMMAND_CATEGORY.id_command_category - , COMMAND_CATEGORY.id_dog - , COMMAND_CATEGORY.id_command - , IFNULL( - t_COMMAND_CATEGORY_COPY.name_error - , CONCAT( - COALESCE(DOG.name, t_COMMAND_CATEGORY_COPY.id_dog, '(No Dog)') - , ' - ' - , COALESCE(COMMAND.name, t_COMMAND_CATEGORY_COPY.id_command, '(No Command)') - ) - ) AS name_error - -- , 0 AS is_from_temporary_table - -- , 1 AS is_from_permanent_table - FROM parts.DOG_Command_Category COMMAND_CATEGORY - LEFT JOIN tmp_Command_Category_Copy t_COMMAND_CATEGORY_COPY ON COMMAND_CATEGORY.id_command_category = t_COMMAND_CATEGORY_COPY.id_command_category - INNER JOIN parts.DOG_Dog DOG ON COMMAND_CATEGORY.id_dog = DOG.id_dog - INNER JOIN parts.DOG_Command COMMAND ON COMMAND_CATEGORY.id_command = COMMAND.id_command - WHERE - NOT ISNULL(COMMAND_CATEGORY.id_command_category) - AND t_COMMAND_CATEGORY.does_have_valid_command_category_id = 0 - ) - , Duplicate_Link_Row_Numbers AS ( + , COMMAND_CATEGORY.code + , COMMAND_CATEGORY.name + , COALESCE(t_COMMAND_CATEGORY_COPY.code, t_COMMAND_CATEGORY_COPY.name, t_COMMAND_CATEGORY_COPY.id_command_category, '(No Command Category)') AS name_error + FROM parts.DOG_Command_Category COMMAND_CATEGORY + LEFT JOIN tmp_Command_Category_Copy t_COMMAND_CATEGORY_COPY + ON COMMAND_CATEGORY.code = t_COMMAND_CATEGORY_COPY.code + OR COMMAND_CATEGORY.name = t_COMMAND_CATEGORY_COPY.name + WHERE t_COMMAND_CATEGORY_COPY.is_new = 1 + UNION SELECT - COMBINED_LINK.id_command_category - , COMBINED_LINK.id_dog - , COMBINED_LINK.id_command - , COMBINED_LINK.name_error - , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command) AS index_link_as_duplicate - FROM Combined_Links COMBINED_LINK - -- LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON COMBINED_LINK.id_command_category = COMMAND_CATEGORY.id_command_category + t_COMMAND_CATEGORY.id_command_category + , t_COMMAND_CATEGORY.code + , t_COMMAND_CATEGORY.name + , t_COMMAND_CATEGORY.name_error + FROM tmp_Command_Category t_COMMAND_CATEGORY ) - SELECT * -- AS count_duplicate_link_row_numbers - FROM Duplicate_Link_Row_Numbers; + , Duplicate_Command_Category_Row_Numbers AS ( + SELECT + COMBINED_CATEGORY.id_command_category + , COMBINED_CATEGORY.code + , COMBINED_CATEGORY.name + , COMBINED_CATEGORY.name_error + , ROW_NUMBER() OVER (PARTITION BY COMBINED_CATEGORY.code ORDER BY COMBINED_CATEGORY.name_error ASC) AS index_command_category_as_duplicate + FROM Combined_Command_Category COMBINED_CATEGORY + ) + SELECT * + FROM Duplicate_Command_Category_Row_Numbers; END IF; - + IF EXISTS ( WITH - Combined_Links AS ( - SELECT - t_COMMAND_CATEGORY.id_command_category - , t_COMMAND_CATEGORY.id_dog - , t_COMMAND_CATEGORY.id_command - , t_COMMAND_CATEGORY.name_error - -- , 1 AS is_from_temporary_table - -- , 0 AS is_from_permanent_table - FROM tmp_Command_Category t_COMMAND_CATEGORY - -- LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY.id_command_category - UNION + Combined_Command_Category AS ( SELECT COMMAND_CATEGORY.id_command_category - , COMMAND_CATEGORY.id_dog - , COMMAND_CATEGORY.id_command - , IFNULL( - t_COMMAND_CATEGORY_COPY.name_error - , CONCAT( - COALESCE(DOG.name, t_COMMAND_CATEGORY_COPY.id_dog, '(No Dog)') - , ' - ' - , COALESCE(COMMAND.name, t_COMMAND_CATEGORY_COPY.id_command, '(No Command)') - ) - ) AS name_error - -- , 0 AS is_from_temporary_table - -- , 1 AS is_from_permanent_table - FROM parts.DOG_Command_Category COMMAND_CATEGORY - LEFT JOIN tmp_Command_Category_Copy t_COMMAND_CATEGORY_COPY ON COMMAND_CATEGORY.id_command_category = t_COMMAND_CATEGORY_COPY.id_command_category - INNER JOIN parts.DOG_Dog DOG ON COMMAND_CATEGORY.id_dog = DOG.id_dog - INNER JOIN parts.DOG_Command COMMAND ON COMMAND_CATEGORY.id_command = COMMAND.id_command - WHERE - ISNULL(t_COMMAND_CATEGORY_COPY.id_command_category) - AND NOT ISNULL(COMMAND_CATEGORY.id_command_category) - ) - , Duplicate_Link_Row_Numbers AS ( + , COMMAND_CATEGORY.code + , COMMAND_CATEGORY.name + , COALESCE(t_COMMAND_CATEGORY_COPY.code, t_COMMAND_CATEGORY_COPY.name, t_COMMAND_CATEGORY_COPY.id_command_category, '(No Command Category)') AS name_error + FROM parts.DOG_Command_Category COMMAND_CATEGORY + LEFT JOIN tmp_Command_Category_Copy t_COMMAND_CATEGORY_COPY + ON COMMAND_CATEGORY.code = t_COMMAND_CATEGORY_COPY.code + OR COMMAND_CATEGORY.name = t_COMMAND_CATEGORY_COPY.name + WHERE t_COMMAND_CATEGORY_COPY.is_new = 1 + UNION SELECT - COMBINED_LINK.id_command_category - , COMBINED_LINK.id_dog - , COMBINED_LINK.id_command - , COMBINED_LINK.name_error - , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command) AS index_link_as_duplicate - FROM Combined_Links COMBINED_LINK - -- LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON COMBINED_LINK.id_command_category = COMMAND_CATEGORY.id_command_category + t_COMMAND_CATEGORY.id_command_category + , t_COMMAND_CATEGORY.code + , t_COMMAND_CATEGORY.name + , t_COMMAND_CATEGORY.name_error + FROM tmp_Command_Category t_COMMAND_CATEGORY ) - SELECT - v_id_type_error_bad_data - , v_code_type_error_bad_data - , CONCAT('Attempt to create duplicate Command Categorys on: ', GROUP_CONCAT(DUPLICATE_LINK.name_error SEPARATOR ', ')) AS msg - FROM Duplicate_Link_Row_Numbers DUPLICATE_LINK - WHERE DUPLICATE_LINK.index_link_as_duplicate = 2 - GROUP BY DUPLICATE_LINK.id_dog, DUPLICATE_LINK.id_command + , Duplicate_Command_Category_Row_Numbers AS ( + SELECT + COMBINED_CATEGORY.id_command_category + , COMBINED_CATEGORY.code + , COMBINED_CATEGORY.name + , COMBINED_CATEGORY.name_error + , ROW_NUMBER() OVER (PARTITION BY COMBINED_CATEGORY.code ORDER BY COMBINED_CATEGORY.name_error ASC) AS index_command_category_as_duplicate + FROM Combined_Command_Category COMBINED_CATEGORY + ) + SELECT * + FROM Duplicate_Command_Category_Row_Numbers DUPLICATE_CATEGORY + WHERE DUPLICATE_CATEGORY.index_command_category_as_duplicate > 1 + GROUP BY DUPLICATE_CATEGORY.code ) THEN INSERT INTO tmp_Msg_Error ( id_type @@ -341,61 +308,44 @@ BEGIN , msg ) WITH - Combined_Links AS ( - SELECT - t_COMMAND_CATEGORY.id_command_category - , t_COMMAND_CATEGORY.id_dog - , t_COMMAND_CATEGORY.id_command - , t_COMMAND_CATEGORY.name_error - -- , 1 AS is_from_temporary_table - -- , 0 AS is_from_permanent_table - FROM tmp_Command_Category t_COMMAND_CATEGORY - -- LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND_CATEGORY.id_command_category = COMMAND_CATEGORY.id_command_category - UNION + Combined_Command_Category AS ( SELECT COMMAND_CATEGORY.id_command_category - , COMMAND_CATEGORY.id_dog - , COMMAND_CATEGORY.id_command - , IFNULL( - t_COMMAND_CATEGORY_COPY.name_error - , CONCAT( - COALESCE(DOG.name, t_COMMAND_CATEGORY_COPY.id_dog, '(No Dog)') - , ' - ' - , COALESCE(COMMAND.name, t_COMMAND_CATEGORY_COPY.id_command, '(No Command)') - ) - ) AS name_error - -- , 0 AS is_from_temporary_table - -- , 1 AS is_from_permanent_table - FROM parts.DOG_Command_Category COMMAND_CATEGORY - LEFT JOIN tmp_Command_Category_Copy t_COMMAND_CATEGORY_COPY ON COMMAND_CATEGORY.id_command_category = t_COMMAND_CATEGORY_COPY.id_command_category - INNER JOIN parts.DOG_Dog DOG ON COMMAND_CATEGORY.id_dog = DOG.id_dog - INNER JOIN parts.DOG_Command COMMAND ON COMMAND_CATEGORY.id_command = COMMAND.id_command - WHERE - ISNULL(t_COMMAND_CATEGORY_COPY.id_command_category) - AND NOT ISNULL(COMMAND_CATEGORY.id_command_category) - ) - , Duplicate_Link_Row_Numbers AS ( + , COMMAND_CATEGORY.code + , COMMAND_CATEGORY.name + , COALESCE(t_COMMAND_CATEGORY_COPY.code, t_COMMAND_CATEGORY_COPY.name, t_COMMAND_CATEGORY_COPY.id_command_category, '(No Command Category)') AS name_error + FROM parts.DOG_Command_Category COMMAND_CATEGORY + LEFT JOIN tmp_Command_Category_Copy t_COMMAND_CATEGORY_COPY + ON COMMAND_CATEGORY.code = t_COMMAND_CATEGORY_COPY.code + OR COMMAND_CATEGORY.name = t_COMMAND_CATEGORY_COPY.name + WHERE t_COMMAND_CATEGORY_COPY.is_new = 1 + UNION SELECT - COMBINED_LINK.id_command_category - , COMBINED_LINK.id_dog - , COMBINED_LINK.id_command - , COMBINED_LINK.name_error - , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command) AS index_link_as_duplicate - FROM Combined_Links COMBINED_LINK - -- LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON COMBINED_LINK.id_command_category = COMMAND_CATEGORY.id_command_category + t_COMMAND_CATEGORY.id_command_category + , t_COMMAND_CATEGORY.code + , t_COMMAND_CATEGORY.name + , t_COMMAND_CATEGORY.name_error + FROM tmp_Command_Category t_COMMAND_CATEGORY + ) + , Duplicate_Command_Category_Row_Numbers AS ( + SELECT + COMBINED_CATEGORY.id_command_category + , COMBINED_CATEGORY.code + , COMBINED_CATEGORY.name + , COMBINED_CATEGORY.name_error + , ROW_NUMBER() OVER (PARTITION BY COMBINED_CATEGORY.code ORDER BY COMBINED_CATEGORY.name_error ASC) AS index_command_category_as_duplicate + FROM Combined_Command_Category COMBINED_CATEGORY ) SELECT v_id_type_error_bad_data , v_code_type_error_bad_data - , CONCAT('Attempt to create duplicate Command Categorys on: ', GROUP_CONCAT(DUPLICATE_LINK.name_error SEPARATOR ', ')) AS msg - FROM Duplicate_Link_Row_Numbers DUPLICATE_LINK - -- LEFT JOIN parts.DOG_Dog DOG ON DUPLICATE_LINK.id_dog = DOG.id_dog - -- LEFT JOIN parts.DOG_Command COMMAND ON DUPLICATE_LINK.id_command = COMMAND.id_command - WHERE DUPLICATE_LINK.index_link_as_duplicate = 2 - GROUP BY DUPLICATE_LINK.id_dog, DUPLICATE_LINK.id_command + , CONCAT('Attempt to create duplicate or overwrite existing Command Categories on: ', GROUP_CONCAT(DUPLICATE_CATEGORY.name_error SEPARATOR ', ')) AS msg + FROM Duplicate_Command_Category_Row_Numbers DUPLICATE_CATEGORY + WHERE DUPLICATE_CATEGORY.index_command_category_as_duplicate > 1 + GROUP BY DUPLICATE_CATEGORY.code ; END IF; - */ + -- Permissions -- Can Create @@ -548,6 +498,7 @@ DELIMITER ; /* 'ripplesipplenippletippledipplekipple' +DELETE FROM parts.DOG_Command_Category_Audit WHERE id_command_category > 740; DELETE FROM parts.DOG_Command_Category WHERE id_command_category > 740; * / delete diff --git a/static/MySQL/71110_p_dog_save_dog_command_link.sql b/static/MySQL/71110_p_dog_save_dog_command_link.sql index f3e1c4a..6d34f67 100644 --- a/static/MySQL/71110_p_dog_save_dog_command_link.sql +++ b/static/MySQL/71110_p_dog_save_dog_command_link.sql @@ -90,7 +90,6 @@ BEGIN , active BIT , is_new BIT , name_error VARCHAR(250) - , does_have_valid_link_id BIT ); CREATE TEMPORARY TABLE tmp_Dog_Command_Link_Copy ( @@ -103,7 +102,6 @@ BEGIN , active BIT , is_new BIT , name_error VARCHAR(250) - , does_have_valid_link_id BIT ); CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( @@ -124,11 +122,10 @@ BEGIN , notes , active , is_new - , does_have_valid_link_id ) SELECT DOG_COMMAND_LINK_T.id_temp - , DOG_COMMAND_LINK_T.id_link + , COALESCE(DOG_COMMAND_LINK.id_link, DOG_COMMAND_LINK_T.id_link) , COALESCE( DOG_COMMAND_LINK_T.id_dog , DOG_COMMAND_LINK.id_dog @@ -137,6 +134,7 @@ BEGIN DOG_COMMAND_LINK_T.id_command , DOG_COMMAND_LINK.id_command ) AS id_command + /* , NULLIF( COALESCE( DOG_COMMAND_LINK_T.hand_signal_description @@ -151,11 +149,32 @@ BEGIN ) , '' ) AS notes + */ + , COALESCE( + DOG_COMMAND_LINK_T.hand_signal_description + , DOG_COMMAND_LINK.hand_signal_description + ) AS hand_signal_description + , COALESCE( + DOG_COMMAND_LINK_T.notes + , DOG_COMMAND_LINK.notes + ) AS notes , COALESCE(DOG_COMMAND_LINK_T.active, 1) AS active - , CASE WHEN IFNULL(DOG_COMMAND_LINK_T.id_link, 0) < 1 THEN 1 ELSE 0 END AS is_new - , CASE WHEN NOT ISNULL(DOG_COMMAND_LINK_T.id_link) THEN 1 ELSE 0 END AS does_have_valid_link_id + , CASE WHEN COALESCE(DOG_COMMAND_LINK.id_link, DOG_COMMAND_LINK_T.id_link, 0) < 1 THEN 1 ELSE 0 END AS is_new FROM parts.DOG_Dog_Command_Link_Temp DOG_COMMAND_LINK_T - LEFT JOIN parts.DOG_Dog_Command_Link DOG_COMMAND_LINK ON DOG_COMMAND_LINK_T.id_link = DOG_COMMAND_LINK.id_link + LEFT JOIN parts.DOG_Dog_Command_Link DOG_COMMAND_LINK + ON DOG_COMMAND_LINK_T.id_link = DOG_COMMAND_LINK.id_link + OR ( + DOG_COMMAND_LINK_T.id_dog = DOG_COMMAND_LINK.id_dog + AND DOG_COMMAND_LINK_T.id_command = DOG_COMMAND_LINK.id_command + AND ( + DOG_COMMAND_LINK.hand_signal_description IS NULL + OR DOG_COMMAND_LINK_T.hand_signal_description <=> DOG_COMMAND_LINK.hand_signal_description + ) + AND ( + DOG_COMMAND_LINK.notes IS NULL + OR DOG_COMMAND_LINK_T.notes <=> DOG_COMMAND_LINK.notes + ) + ) WHERE DOG_COMMAND_LINK_T.guid = a_guid ; @@ -185,7 +204,8 @@ BEGIN SELECT * FROM tmp_Dog_Command_Link; SELECT COUNT(*) FROM tmp_Dog_Command_Link; END IF; - + + /* -- Missing Dog Command Link Ids UPDATE tmp_Dog_Command_Link t_DOG_COMMAND_LINK LEFT JOIN parts.DOG_Dog_Command_Link DOG_COMMAND_LINK @@ -205,6 +225,7 @@ BEGIN SELECT * FROM tmp_Dog_Command_Link; SELECT COUNT(*) FROM tmp_Dog_Command_Link; END IF; + */ -- Validation -- Missing mandatory fields @@ -263,7 +284,6 @@ BEGIN ; END IF; - /* -- Duplicates INSERT INTO tmp_Dog_Command_Link_Copy ( id_temp @@ -275,7 +295,6 @@ BEGIN , active , is_new , name_error - , does_have_valid_link_id ) SELECT t_DOG_COMMAND_LINK.id_temp @@ -287,7 +306,6 @@ BEGIN , t_DOG_COMMAND_LINK.active , t_DOG_COMMAND_LINK.is_new , t_DOG_COMMAND_LINK.name_error - , t_DOG_COMMAND_LINK.does_have_valid_link_id FROM tmp_Dog_Command_Link t_DOG_COMMAND_LINK ; @@ -297,16 +315,6 @@ BEGIN WITH Combined_Links AS ( - SELECT - t_DOG_COMMAND_LINK.id_link - , t_DOG_COMMAND_LINK.id_dog - , t_DOG_COMMAND_LINK.id_command - , t_DOG_COMMAND_LINK.name_error - -- , 1 AS is_from_temporary_table - -- , 0 AS is_from_permanent_table - FROM tmp_Dog_Command_Link t_DOG_COMMAND_LINK - -- LEFT JOIN parts.DOG_Dog_Command_Link DOG_COMMAND_LINK ON t_DOG_COMMAND_LINK.id_link = DOG_COMMAND_LINK.id_link - UNION SELECT DOG_COMMAND_LINK.id_link , DOG_COMMAND_LINK.id_dog @@ -319,15 +327,20 @@ BEGIN , COALESCE(COMMAND.name, t_DOG_COMMAND_LINK_COPY.id_command, '(No Command)') ) ) AS name_error - -- , 0 AS is_from_temporary_table - -- , 1 AS is_from_permanent_table FROM parts.DOG_Dog_Command_Link DOG_COMMAND_LINK - LEFT JOIN tmp_Dog_Command_Link_Copy t_DOG_COMMAND_LINK_COPY ON DOG_COMMAND_LINK.id_link = t_DOG_COMMAND_LINK_COPY.id_link + LEFT JOIN tmp_Dog_Command_Link_Copy t_DOG_COMMAND_LINK_COPY + ON DOG_COMMAND_LINK.id_dog = t_DOG_COMMAND_LINK_COPY.id_dog + AND DOG_COMMAND_LINK.id_command = t_DOG_COMMAND_LINK_COPY.id_command INNER JOIN parts.DOG_Dog DOG ON DOG_COMMAND_LINK.id_dog = DOG.id_dog INNER JOIN parts.DOG_Command COMMAND ON DOG_COMMAND_LINK.id_command = COMMAND.id_command - WHERE - NOT ISNULL(DOG_COMMAND_LINK.id_link) - AND t_DOG_COMMAND_LINK.does_have_valid_link_id = 0 + WHERE t_DOG_COMMAND_LINK_COPY.is_new = 1 + UNION + SELECT + t_DOG_COMMAND_LINK.id_link + , t_DOG_COMMAND_LINK.id_dog + , t_DOG_COMMAND_LINK.id_command + , t_DOG_COMMAND_LINK.name_error + FROM tmp_Dog_Command_Link t_DOG_COMMAND_LINK ) , Duplicate_Link_Row_Numbers AS ( SELECT @@ -335,27 +348,16 @@ BEGIN , COMBINED_LINK.id_dog , COMBINED_LINK.id_command , COMBINED_LINK.name_error - , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command) AS index_link_as_duplicate + , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command ORDER BY COMBINED_LINK.name_error ASC) AS index_link_as_duplicate FROM Combined_Links COMBINED_LINK - -- LEFT JOIN parts.DOG_Dog_Command_Link DOG_COMMAND_LINK ON COMBINED_LINK.id_link = DOG_COMMAND_LINK.id_link ) - SELECT * -- AS count_duplicate_link_row_numbers + SELECT * FROM Duplicate_Link_Row_Numbers; END IF; - + IF EXISTS ( WITH Combined_Links AS ( - SELECT - t_DOG_COMMAND_LINK.id_link - , t_DOG_COMMAND_LINK.id_dog - , t_DOG_COMMAND_LINK.id_command - , t_DOG_COMMAND_LINK.name_error - -- , 1 AS is_from_temporary_table - -- , 0 AS is_from_permanent_table - FROM tmp_Dog_Command_Link t_DOG_COMMAND_LINK - -- LEFT JOIN parts.DOG_Dog_Command_Link DOG_COMMAND_LINK ON t_DOG_COMMAND_LINK.id_link = DOG_COMMAND_LINK.id_link - UNION SELECT DOG_COMMAND_LINK.id_link , DOG_COMMAND_LINK.id_dog @@ -368,15 +370,20 @@ BEGIN , COALESCE(COMMAND.name, t_DOG_COMMAND_LINK_COPY.id_command, '(No Command)') ) ) AS name_error - -- , 0 AS is_from_temporary_table - -- , 1 AS is_from_permanent_table FROM parts.DOG_Dog_Command_Link DOG_COMMAND_LINK - LEFT JOIN tmp_Dog_Command_Link_Copy t_DOG_COMMAND_LINK_COPY ON DOG_COMMAND_LINK.id_link = t_DOG_COMMAND_LINK_COPY.id_link + LEFT JOIN tmp_Dog_Command_Link_Copy t_DOG_COMMAND_LINK_COPY + ON DOG_COMMAND_LINK.id_dog = t_DOG_COMMAND_LINK_COPY.id_dog + AND DOG_COMMAND_LINK.id_command = t_DOG_COMMAND_LINK_COPY.id_command INNER JOIN parts.DOG_Dog DOG ON DOG_COMMAND_LINK.id_dog = DOG.id_dog INNER JOIN parts.DOG_Command COMMAND ON DOG_COMMAND_LINK.id_command = COMMAND.id_command - WHERE - ISNULL(t_DOG_COMMAND_LINK_COPY.id_link) - AND NOT ISNULL(DOG_COMMAND_LINK.id_link) + WHERE t_DOG_COMMAND_LINK_COPY.is_new = 1 + UNION + SELECT + t_DOG_COMMAND_LINK.id_link + , t_DOG_COMMAND_LINK.id_dog + , t_DOG_COMMAND_LINK.id_command + , t_DOG_COMMAND_LINK.name_error + FROM tmp_Dog_Command_Link t_DOG_COMMAND_LINK ) , Duplicate_Link_Row_Numbers AS ( SELECT @@ -384,16 +391,12 @@ BEGIN , COMBINED_LINK.id_dog , COMBINED_LINK.id_command , COMBINED_LINK.name_error - , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command) AS index_link_as_duplicate + , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command ORDER BY COMBINED_LINK.name_error ASC) AS index_link_as_duplicate FROM Combined_Links COMBINED_LINK - -- LEFT JOIN parts.DOG_Dog_Command_Link DOG_COMMAND_LINK ON COMBINED_LINK.id_link = DOG_COMMAND_LINK.id_link ) - SELECT - v_id_type_error_bad_data - , v_code_type_error_bad_data - , CONCAT('Attempt to create duplicate Dog Command Links on: ', GROUP_CONCAT(DUPLICATE_LINK.name_error SEPARATOR ', ')) AS msg + SELECT * FROM Duplicate_Link_Row_Numbers DUPLICATE_LINK - WHERE DUPLICATE_LINK.index_link_as_duplicate = 2 + WHERE DUPLICATE_LINK.index_link_as_duplicate > 1 GROUP BY DUPLICATE_LINK.id_dog, DUPLICATE_LINK.id_command ) THEN INSERT INTO tmp_Msg_Error ( @@ -403,16 +406,6 @@ BEGIN ) WITH Combined_Links AS ( - SELECT - t_DOG_COMMAND_LINK.id_link - , t_DOG_COMMAND_LINK.id_dog - , t_DOG_COMMAND_LINK.id_command - , t_DOG_COMMAND_LINK.name_error - -- , 1 AS is_from_temporary_table - -- , 0 AS is_from_permanent_table - FROM tmp_Dog_Command_Link t_DOG_COMMAND_LINK - -- LEFT JOIN parts.DOG_Dog_Command_Link DOG_COMMAND_LINK ON t_DOG_COMMAND_LINK.id_link = DOG_COMMAND_LINK.id_link - UNION SELECT DOG_COMMAND_LINK.id_link , DOG_COMMAND_LINK.id_dog @@ -425,15 +418,20 @@ BEGIN , COALESCE(COMMAND.name, t_DOG_COMMAND_LINK_COPY.id_command, '(No Command)') ) ) AS name_error - -- , 0 AS is_from_temporary_table - -- , 1 AS is_from_permanent_table FROM parts.DOG_Dog_Command_Link DOG_COMMAND_LINK - LEFT JOIN tmp_Dog_Command_Link_Copy t_DOG_COMMAND_LINK_COPY ON DOG_COMMAND_LINK.id_link = t_DOG_COMMAND_LINK_COPY.id_link + LEFT JOIN tmp_Dog_Command_Link_Copy t_DOG_COMMAND_LINK_COPY + ON DOG_COMMAND_LINK.id_dog = t_DOG_COMMAND_LINK_COPY.id_dog + AND DOG_COMMAND_LINK.id_command = t_DOG_COMMAND_LINK_COPY.id_command INNER JOIN parts.DOG_Dog DOG ON DOG_COMMAND_LINK.id_dog = DOG.id_dog INNER JOIN parts.DOG_Command COMMAND ON DOG_COMMAND_LINK.id_command = COMMAND.id_command - WHERE - ISNULL(t_DOG_COMMAND_LINK_COPY.id_link) - AND NOT ISNULL(DOG_COMMAND_LINK.id_link) + WHERE t_DOG_COMMAND_LINK_COPY.is_new = 1 + UNION + SELECT + t_DOG_COMMAND_LINK.id_link + , t_DOG_COMMAND_LINK.id_dog + , t_DOG_COMMAND_LINK.id_command + , t_DOG_COMMAND_LINK.name_error + FROM tmp_Dog_Command_Link t_DOG_COMMAND_LINK ) , Duplicate_Link_Row_Numbers AS ( SELECT @@ -441,22 +439,21 @@ BEGIN , COMBINED_LINK.id_dog , COMBINED_LINK.id_command , COMBINED_LINK.name_error - , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command) AS index_link_as_duplicate + , ROW_NUMBER() OVER (PARTITION BY COMBINED_LINK.id_dog, COMBINED_LINK.id_command ORDER BY COMBINED_LINK.name_error ASC) AS index_link_as_duplicate FROM Combined_Links COMBINED_LINK - -- LEFT JOIN parts.DOG_Dog_Command_Link DOG_COMMAND_LINK ON COMBINED_LINK.id_link = DOG_COMMAND_LINK.id_link ) SELECT v_id_type_error_bad_data , v_code_type_error_bad_data - , CONCAT('Attempt to create duplicate Dog Command Links on: ', GROUP_CONCAT(DUPLICATE_LINK.name_error SEPARATOR ', ')) AS msg + , CONCAT('Attempt to create duplicate or overwrite existing Dog Command Links on: ', GROUP_CONCAT(DUPLICATE_LINK.name_error SEPARATOR ', ')) AS msg FROM Duplicate_Link_Row_Numbers DUPLICATE_LINK - -- LEFT JOIN parts.DOG_Dog DOG ON DUPLICATE_LINK.id_dog = DOG.id_dog - -- LEFT JOIN parts.DOG_Command COMMAND ON DUPLICATE_LINK.id_command = COMMAND.id_command - WHERE DUPLICATE_LINK.index_link_as_duplicate = 2 - GROUP BY DUPLICATE_LINK.id_dog, DUPLICATE_LINK.id_command + WHERE DUPLICATE_LINK.index_link_as_duplicate > 1 + GROUP BY + DUPLICATE_LINK.id_dog + , DUPLICATE_LINK.id_command ; END IF; - */ + -- Permissions -- Can Create @@ -618,6 +615,14 @@ DELIMITER ; DELETE FROM parts.DOG_Dog_Command_Link WHERE id_link > 740; * / delete +from parts.DOG_Dog_Command_Link_Audit +where id_link > 768 +; +delete +from parts.DOG_Dog_Command_Link +where id_link > 768 +; +delete from parts.DOG_Dog_Command_Link_Temp ; select @@ -652,7 +657,7 @@ VALUES ( -1 -- id_link , 1 -- id_dog , 1 -- id_command - , 'Test' -- hand_signal_description + , 'Test deez noots' -- hand_signal_description , NULL -- notes , 1 -- active , 'ripplesipplenippletippledipplekipple' diff --git a/todo.txt b/todo.txt index 3823a7f..a9aa25e 100644 --- a/todo.txt +++ b/todo.txt @@ -6,11 +6,3 @@ Last tested Print page option on Dog Command Links Page, Assessment-single Page for test sessions, giving the dog to another handler temporarily - give view only access UI warning for attempt to create duplicate - -Dog Command Links page Dog filter - many replicated options - -Layout logo - -Create new command - can have button default value broken -Command - default hand signal description field not triggering on change dirty -Dog Command Link - hand signal description field not triggering on change dirty \ No newline at end of file