diff --git a/models/model_view_base.py b/models/model_view_base.py index bbb4767..14b7c1f 100644 --- a/models/model_view_base.py +++ b/models/model_view_base.py @@ -228,8 +228,8 @@ class Model_View_Base(BaseModel, ABC): ID_PAGE_BODY: ClassVar[str] = 'pageBody' ID_TABLE_MAIN: ClassVar[str] = 'tableMain' ID_TEXTAREA_CONFIRM: ClassVar[str] = 'textareaConfirm' - NAME_COMPANY: ClassVar[str] = 'Precision And Research Technology Systems Limited' - NAME_COMPANY_SHORT: ClassVar[str] = 'PARTS Ltd' + NAME_COMPANY: ClassVar[str] = 'Precision And Research Technology Systems Limited - Fetch Metrics' + NAME_COMPANY_SHORT: ClassVar[str] = 'Fetch Metrics' NAME_CSRF_TOKEN: ClassVar[str] = 'csrf-token' URL_GITHUB: ClassVar[str] = 'https://github.com/Teddy-1024' URL_LINKEDIN: ClassVar[str] = 'https://uk.linkedin.com/in/teddyms' diff --git a/static/MySQL/00000_combined.sql b/static/MySQL/00000_combined.sql index 058ccf5..cec0451 100644 --- a/static/MySQL/00000_combined.sql +++ b/static/MySQL/00000_combined.sql @@ -1,448 +1,15 @@ - -USE demo; + https://www.molly.teddy.org.uk/login_callback, http://www.molly.teddy.org.uk/login_callback +, https://molly.teddy.org.uk/login_callback, http://molly.teddy.org.uk/login_callback +, https://www.fetch-metrics.co.uk/login_callback, http://www.fetch-metrics.co.uk/login_callback +, https://fetch-metrics.co.uk/login_callback, http://fetch-metrics.co.uk/login_callback +, https://www.fetch-metrics.com/login_callback, http://www.fetch-metrics.com/login_callback +, https://fetch-metrics.com/login_callback, http://fetch-metrics.com/login_callback +, http://127.0.0.1:5000/login_callback -DROP PROCEDURE IF EXISTS demo.p_dog_get_many_button_icon; - -DELIMITER // -CREATE PROCEDURE demo.p_dog_get_many_button_icon ( - IN a_id_user INT - , IN a_get_all_file_type BIT - , IN a_get_inactive_file_type BIT - , IN a_ids_file_type TEXT - , IN a_names_file_type TEXT - , IN a_get_all_image BIT - , IN a_get_inactive_image BIT - , IN a_ids_image TEXT - , IN a_names_image TEXT - , IN a_get_all_button_icon BIT - , IN a_get_inactive_button_icon BIT - , IN a_ids_button_icon TEXT - , IN a_names_button_icon TEXT - , IN a_notes_button_icon TEXT - , IN a_require_all_id_search_filters_met BIT - , IN a_require_any_id_search_filters_met BIT - , IN a_require_all_non_id_search_filters_met BIT - , IN a_require_any_non_id_search_filters_met BIT - , IN a_debug BIT -) -BEGIN - DECLARE v_can_view BIT; - DECLARE v_code_type_error_bad_data VARCHAR(100); - DECLARE v_code_type_error_no_permission VARCHAR(100); - DECLARE v_guid BINARY(36); - DECLARE v_id_access_level_view INT; - DECLARE v_id_minimum INT; - DECLARE v_id_permission_dog_view INT; - DECLARE v_id_type_error_bad_data INT; - DECLARE v_id_type_error_no_permission INT; - DECLARE v_time_start TIMESTAMP(6); - - DECLARE exit handler for SQLEXCEPTION - BEGIN - GET DIAGNOSTICS CONDITION 1 - @sqlstate = RETURNED_SQLSTATE - , @errno = MYSQL_ERRNO - , @text = MESSAGE_TEXT - ; - - ROLLBACK; - - CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( - id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT - , id_type INT NULL - , code VARCHAR(250) NOT NULL - , msg TEXT NOT NULL - ); - - INSERT INTO tmp_Msg_Error ( - id_type - , code - , msg - ) - SELECT - MET.id_type - , @errno - , @text - FROM demo.CORE_Msg_Error_Type MET - WHERE MET.code = 'MYSQL_ERROR' - ; - - SELECT - t_ERROR.id_error - , t_ERROR.id_type - , t_ERROR.code - , ERROR_TYPE.name - , ERROR_TYPE.description - , ERROR_TYPE.is_breaking_error - , ERROR_TYPE.background_colour - , ERROR_TYPE.text_colour - , t_ERROR.msg - FROM tmp_Msg_Error t_ERROR - INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type - ; - - DROP TABLE IF EXISTS tmp_Msg_Error; - END; - - SET v_time_start := CURRENT_TIMESTAMP(6); - SET v_guid := UUID(); - SET v_code_type_error_bad_data := 'BAD_DATA'; - SET v_code_type_error_no_permission := 'NO_PERMISSION'; - 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_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM demo.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); - SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM demo.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); - SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM demo.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); - - SET a_id_user := IFNULL(a_id_user, 0); - /* - SET a_get_all_file_type := IFNULL(a_get_all_file_type, 0); - SET a_get_inactive_file_type := IFNULL(a_get_inactive_file_type, 0); - SET a_ids_file_type := TRIM(IFNULL(a_ids_file_type, '')); - SET a_names_file_type := TRIM(IFNULL(a_names_file_type, '')); - SET a_get_all_image := IFNULL(a_get_all_image, 0); - SET a_get_inactive_image := IFNULL(a_get_inactive_image, 0); - SET a_ids_image := TRIM(IFNULL(a_ids_image, '')); - SET a_names_image := TRIM(IFNULL(a_names_image, '')); - SET a_get_all_button_icon := IFNULL(a_get_all_button_icon, 0); - SET a_get_inactive_button_icon := IFNULL(a_get_inactive_button_icon, 0); - SET a_ids_button_icon := TRIM(IFNULL(a_ids_button_icon, '')); - SET a_names_button_icon := TRIM(IFNULL(a_names_button_icon, '')); - SET a_notes_button_icon := TRIM(IFNULL(a_notes_button_icon, '')); - SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); - SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); - SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); - SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); - */ - SET a_debug := IFNULL(a_debug, 0); - - IF a_debug = 1 THEN - SELECT - a_id_user - , a_get_all_file_type - , a_get_inactive_file_type - , a_ids_file_type - , a_names_file_type - , a_get_all_image - , a_get_inactive_image - , a_ids_image - , a_names_image - , a_get_all_button_icon - , a_get_inactive_button_icon - , a_ids_button_icon - , a_names_button_icon - , a_notes_button_icon - , a_require_all_id_search_filters_met - , a_require_any_id_search_filters_met - , a_require_all_non_id_search_filters_met - , a_require_any_non_id_search_filters_met - , a_debug - ; - - SELECT - v_id_type_error_bad_data - , v_id_type_error_no_permission - , v_guid - , v_id_permission_dog_view - , v_time_start - ; - END IF; - - DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; - DROP TEMPORARY TABLE IF EXISTS tmp_Button_Icon; - - CREATE TEMPORARY TABLE tmp_Button_Icon ( - id_button_icon INT NOT NULL - , id_image INT - , code VARCHAR(250) - , name VARCHAR(250) - , notes TEXT - , active BIT - - , does_meet_id_filters BIT - , does_meet_non_id_filters BIT - ); - - CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( - id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT - , id_type INT NULL - , code VARCHAR(250) NOT NULL - , msg TEXT NOT NULL - ); - - -- Permissions - IF a_debug = 1 THEN - SELECT - v_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_view -- ids_permission - , v_id_access_level_view -- ids_access_level - , 0 -- a_show_errors - , 0 -- a_debug - ; - END IF; - - CALL demo.p_dog_calc_user( - v_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_view -- ids_permission - , v_id_access_level_view -- ids_access_level - , 0 -- a_show_errors - , 0 -- a_debug - ); - - SELECT - IFNULL(CALC_USER_T.has_access, 0) - INTO - v_can_view - FROM demo.DOG_Calc_User_Temp CALC_USER_T - WHERE CALC_USER_T.GUID = v_guid - LIMIT 1 - ; - - IF a_debug = 1 THEN - SELECT v_can_view; - SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR; - SELECT * FROM tmp_Msg_Error t_ERROR; - END IF; - - IF (v_can_view = 0) THEN - DELETE t_ME - FROM tmp_Msg_Error t_ME - WHERE t_ME.id_type <> v_id_type_error_no_permission - ; - INSERT INTO tmp_Msg_Error ( - id_type - , code - , msg - ) - VALUES ( - v_id_type_error_no_permission - , v_code_type_error_no_permission - , 'You do not have permission to view Button_Icons.' - ) - ; - END IF; - - CALL demo.p_dog_clear_calc_user( - v_guid - , 0 -- a_debug - ); - - - -- Call Button_Icon Calc - 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 - IF a_debug = 1 THEN - SELECT - v_guid -- a_guid - , a_id_user -- a_id_user - , a_get_all_file_type -- a_get_all_file_type - , a_get_inactive_file_type -- a_get_inactive_file_type - , a_ids_file_type -- a_ids_file_type - , a_names_file_type -- a_names_file_type - , a_get_all_image -- a_get_all_image - , a_get_inactive_image -- a_get_inactive_image - , a_ids_image -- a_ids_image - , a_names_image -- a_names_image - , a_get_all_button_icon -- a_get_all_button_icon - , a_get_inactive_button_icon -- a_get_inactive_button_icon - , a_ids_button_icon -- a_ids_button_icon - , a_names_button_icon -- a_names_button_icon - , a_notes_button_icon -- a_notes_button_icon - , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met - , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met - , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met - , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met - , 0 -- a_show_errors - , 0 -- a_debug - ; - END IF; - - CALL demo.p_dog_calc_button_icon ( - v_guid -- a_guid - , a_id_user -- a_id_user - , a_get_all_file_type -- a_get_all_file_type - , a_get_inactive_file_type -- a_get_inactive_file_type - , a_ids_file_type -- a_ids_file_type - , a_names_file_type -- a_names_file_type - , a_get_all_image -- a_get_all_image - , a_get_inactive_image -- a_get_inactive_image - , a_ids_image -- a_ids_image - , a_names_image -- a_names_image - , a_get_all_button_icon -- a_get_all_button_icon - , a_get_inactive_button_icon -- a_get_inactive_button_icon - , a_ids_button_icon -- a_ids_button_icon - , a_names_button_icon -- a_names_button_icon - , a_notes_button_icon -- a_notes_button_icon - , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met - , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met - , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met - , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met - , 0 -- a_show_errors - , 0 -- a_debug - ); - - IF a_debug = 1 THEN - SELECT COUNT(*) FROM demo.DOG_Button_Icon_Temp; - SELECT * FROM demo.DOG_Button_Icon_Temp; - END IF; - - INSERT INTO tmp_Button_Icon ( - id_button_icon - , id_image - , code - , name - , notes - , active - - , does_meet_id_filters - , does_meet_non_id_filters - ) - SELECT - BUTTON_ICON_T.id_button_icon - , BUTTON_ICON_T.id_image - , BUTTON_ICON_T.code - , BUTTON_ICON_T.name - , BUTTON_ICON_T.notes - , BUTTON_ICON_T.active - - , BUTTON_ICON_T.does_meet_id_filters - , BUTTON_ICON_T.does_meet_non_id_filters - FROM demo.DOG_Button_Icon_Temp BUTTON_ICON_T - WHERE BUTTON_ICON_T.GUID = v_guid - ; - - IF a_debug = 1 THEN - SELECT COUNT(*) FROM tmp_Button_Icon; - SELECT * FROM tmp_Button_Icon; - END IF; - END IF; - - -- Filter outputs - 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_Button_Icon; - END IF; - - DELETE FROM tmp_Button_Icon; - END IF; - - - -- Outputs - -- Button_Icons - SELECT - t_BUTTON_ICONS.id_button_icon - , t_BUTTON_ICONS.id_image - , IMAGES.path AS path_image - , IMAGES.name AS name_image - , t_BUTTON_ICONS.code - , t_BUTTON_ICONS.name - , t_BUTTON_ICONS.notes - , t_BUTTON_ICONS.active - - , t_BUTTON_ICONS.does_meet_id_filters - , t_BUTTON_ICONS.does_meet_non_id_filters - FROM tmp_Button_Icon t_BUTTON_ICONS - LEFT JOIN demo.DOG_Image IMAGES ON t_BUTTON_ICONS.id_image = IMAGES.id_image - ORDER BY t_BUTTON_ICONS.name - ; - - -- Errors - SELECT - t_ERROR.id_error - , t_ERROR.id_type - , t_ERROR.code - , ERROR_TYPE.name - , ERROR_TYPE.description - , ERROR_TYPE.is_breaking_error - , ERROR_TYPE.background_colour - , ERROR_TYPE.text_colour - , t_ERROR.msg - FROM tmp_Msg_Error t_ERROR - INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type - ; - - IF a_debug = 1 AND v_can_view = 1 THEN - SELECT * FROM tmp_Button_Icon; - END IF; - - CALL demo.p_dog_clear_calc_button_icon( - v_guid -- a_guid - , 0 -- a_debug - ); - - DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; - DROP TEMPORARY TABLE IF EXISTS tmp_Button_Icon; - - IF a_debug = 1 THEN - CALL demo.p_core_debug_timing_reporting ( v_time_start ); - END IF; -END // -DELIMITER ; - - - -CALL demo.p_dog_get_many_button_icon ( - 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user - , 1 -- a_get_all_file_type - , 0 -- a_get_inactive_file_type - , '' -- a_ids_file_type - , '' -- a_names_file_type - , 1 -- a_get_all_image - , 0 -- a_get_inactive_image - , '' -- a_ids_image - , '' -- a_names_image - , 1 -- a_get_all_button_icon - , 0 -- a_get_inactive_button_icon - , '' -- a_ids_button_icon - , '' -- a_names_button_icon - , '' -- a_notes_button_icon - , 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 - , 1 -- a_require_any_non_id_search_filters_met - , 1 -- a_debug -); - - -/* -CALL demo.p_dog_get_many_button_icon ( - 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user - , 1 -- a_get_all_file_type - , 0 -- a_get_inactive_file_type - , '' -- a_ids_file_type - , 'pat,point' -- a_names_file_type - , 1 -- a_get_all_image - , 0 -- a_get_inactive_image - , '' -- a_ids_image - , 'pat,point' -- a_names_image - , 1 -- a_get_all_button_icon - , 0 -- a_get_inactive_button_icon - , '' -- a_ids_button_icon - , 'pat,point' -- a_names_button_icon - , 'pat,point' -- a_notes_button_icon - , 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 - , 1 -- a_require_any_non_id_search_filters_met - , 1 -- a_debug -); - -*/ \ No newline at end of file +http://www.molly.teddy.org.uk/, https://www.molly.teddy.org.uk/, +http://molly.teddy.org.uk/, https://molly.teddy.org.uk/, +http://www.molly.teddy.org.uk/logout, https://www.molly.teddy.org.uk/logout, +http://molly.teddy.org.uk/logout, https://molly.teddy.org.uk/logout, +http://www.molly.teddy.org.uk/logout_callback, https://www.molly.teddy.org.uk/logout_callback, +http://molly.teddy.org.uk/logout_callback, https://molly.teddy.org.uk/logout_callback, +http://127.0.0.1:5000/logout, http://127.0.0.1:5000/logout_callback \ No newline at end of file diff --git a/static/MySQL/10530_tbl_DOG_Calc_User_Temp.sql b/static/MySQL/10530_tbl_DOG_Calc_User_Temp.sql index f31472e..6419357 100644 --- a/static/MySQL/10530_tbl_DOG_Calc_User_Temp.sql +++ b/static/MySQL/10530_tbl_DOG_Calc_User_Temp.sql @@ -11,8 +11,7 @@ WHERE ; CREATE TABLE IF NOT EXISTS parts.DOG_Calc_User_Temp ( - guid BINARY(36) NOT NULL - , id_user INT + id_user INT , id_permission_required INT , priority_access_level_required INT , is_super_user BIT @@ -21,4 +20,9 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Calc_User_Temp ( , can_view BIT , can_edit BIT , can_admin BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + + , guid BINARY(36) NOT NULL ); \ No newline at end of file diff --git a/static/MySQL/11113_tbl_DOG_Command_Modality_Temp.sql b/static/MySQL/11113_tbl_DOG_Command_Modality_Temp.sql index 2a6c2c9..a8844fb 100644 --- a/static/MySQL/11113_tbl_DOG_Command_Modality_Temp.sql +++ b/static/MySQL/11113_tbl_DOG_Command_Modality_Temp.sql @@ -1,6 +1,8 @@ USE parts; +-- DROP TABLE IF EXISTS parts.DOG_Command_Modality_Temp; + SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE @@ -14,5 +16,9 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Command_Modality_Temp ( , code VARCHAR(250) , name VARCHAR(250) , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + , guid BINARY(36) ); diff --git a/static/MySQL/11302_tbl_DOG_Weather_Temp.sql b/static/MySQL/11302_tbl_DOG_Weather_Temp.sql index e38ff88..f3d8eaa 100644 --- a/static/MySQL/11302_tbl_DOG_Weather_Temp.sql +++ b/static/MySQL/11302_tbl_DOG_Weather_Temp.sql @@ -14,5 +14,9 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Weather_Temp ( , code VARCHAR(250) , name VARCHAR(250) , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + , guid BINARY(36) ); diff --git a/static/MySQL/11306_tbl_DOG_Lighting_Level_Temp.sql b/static/MySQL/11306_tbl_DOG_Lighting_Level_Temp.sql index 574dc98..8e739c0 100644 --- a/static/MySQL/11306_tbl_DOG_Lighting_Level_Temp.sql +++ b/static/MySQL/11306_tbl_DOG_Lighting_Level_Temp.sql @@ -14,5 +14,9 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Lighting_Level_Temp ( , code VARCHAR(250) , name VARCHAR(250) , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + , guid BINARY(36) ); diff --git a/static/MySQL/11310_tbl_DOG_Assessment_Temp.sql b/static/MySQL/11310_tbl_DOG_Assessment_Temp.sql index 81cacb1..942edd7 100644 --- a/static/MySQL/11310_tbl_DOG_Assessment_Temp.sql +++ b/static/MySQL/11310_tbl_DOG_Assessment_Temp.sql @@ -19,5 +19,9 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Assessment_Temp ( , temperature_celcius DECIMAL(5, 2) -- , difficulty_level DOUBLE , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + , guid BINARY(36) ); diff --git a/static/MySQL/11314_tbl_DOG_Distraction_Type_Temp.sql b/static/MySQL/11314_tbl_DOG_Distraction_Type_Temp.sql index 359b077..4fd3a72 100644 --- a/static/MySQL/11314_tbl_DOG_Distraction_Type_Temp.sql +++ b/static/MySQL/11314_tbl_DOG_Distraction_Type_Temp.sql @@ -14,5 +14,9 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Distraction_Type_Temp ( , code VARCHAR(250) , name VARCHAR(250) , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + , guid BINARY(36) ); diff --git a/static/MySQL/11318_tbl_DOG_Distraction_Intensity_Level_Temp.sql b/static/MySQL/11318_tbl_DOG_Distraction_Intensity_Level_Temp.sql index ea77607..5869881 100644 --- a/static/MySQL/11318_tbl_DOG_Distraction_Intensity_Level_Temp.sql +++ b/static/MySQL/11318_tbl_DOG_Distraction_Intensity_Level_Temp.sql @@ -14,5 +14,9 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Distraction_Intensity_Level_Temp ( , code VARCHAR(250) , name VARCHAR(250) , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + , guid BINARY(36) ); diff --git a/static/MySQL/11320_tbl_DOG_Distraction.sql b/static/MySQL/11320_tbl_DOG_Distraction.sql index 8777d20..ff3ec9f 100644 --- a/static/MySQL/11320_tbl_DOG_Distraction.sql +++ b/static/MySQL/11320_tbl_DOG_Distraction.sql @@ -40,6 +40,7 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Distraction ( REFERENCES parts.DOG_Distraction_Intensity_Level(id_intensity_level) , quantity INT , proximity_metres FLOAT + , notes TEXT , active BIT NOT NULL DEFAULT 1 , created_on DATETIME , id_user_created_by INT diff --git a/static/MySQL/11322_tbl_DOG_Distraction_Temp.sql b/static/MySQL/11322_tbl_DOG_Distraction_Temp.sql index dea3e27..69de7f4 100644 --- a/static/MySQL/11322_tbl_DOG_Distraction_Temp.sql +++ b/static/MySQL/11322_tbl_DOG_Distraction_Temp.sql @@ -10,6 +10,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Distraction_Temp ( id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_distraction INT , id_assessment INT , id_distraction_type INT , id_intensity_level_emotional INT @@ -19,6 +20,11 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Distraction_Temp ( , quantity INT , proximity_metres FLOAT -- , difficulty_level DOUBLE + , notes TEXT , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + , guid BINARY(36) ); diff --git a/static/MySQL/11326_tbl_DOG_Bribe_Temp.sql b/static/MySQL/11326_tbl_DOG_Bribe_Temp.sql index b026f08..56286d1 100644 --- a/static/MySQL/11326_tbl_DOG_Bribe_Temp.sql +++ b/static/MySQL/11326_tbl_DOG_Bribe_Temp.sql @@ -14,5 +14,9 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Bribe_Temp ( , code VARCHAR(250) , name VARCHAR(250) , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + , guid BINARY(36) ); diff --git a/static/MySQL/11330_tbl_DOG_Assessment_Command_Modality_Link_Temp.sql b/static/MySQL/11330_tbl_DOG_Assessment_Command_Modality_Link_Temp.sql index 12b8b82..113ace5 100644 --- a/static/MySQL/11330_tbl_DOG_Assessment_Command_Modality_Link_Temp.sql +++ b/static/MySQL/11330_tbl_DOG_Assessment_Command_Modality_Link_Temp.sql @@ -1,6 +1,8 @@ USE parts; +-- DROP TABLE IF EXISTS parts.DOG_Assessment_Command_Modality_Link_Temp; + SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE @@ -10,6 +12,7 @@ WHERE CREATE TABLE IF NOT EXISTS parts.DOG_Assessment_Command_Modality_Link_Temp ( id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_link INT , id_assessment INT , id_command INT , id_command_modality INT @@ -21,5 +24,9 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Assessment_Command_Modality_Link_Temp ( , is_on_lead BIT , trial_count INT , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + , guid BINARY(36) ); diff --git a/static/MySQL/11334_tbl_DOG_Response_Quality_Metric_Temp.sql b/static/MySQL/11334_tbl_DOG_Response_Quality_Metric_Temp.sql index 3df8254..ad153ce 100644 --- a/static/MySQL/11334_tbl_DOG_Response_Quality_Metric_Temp.sql +++ b/static/MySQL/11334_tbl_DOG_Response_Quality_Metric_Temp.sql @@ -17,5 +17,9 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Response_Quality_Metric_Temp ( , value_min DOUBLE , value_max DOUBLE , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + , guid BINARY(36) ); diff --git a/static/MySQL/11338_tbl_DOG_Obedience_Level_Temp.sql b/static/MySQL/11338_tbl_DOG_Obedience_Level_Temp.sql index 9825b9b..d8d6348 100644 --- a/static/MySQL/11338_tbl_DOG_Obedience_Level_Temp.sql +++ b/static/MySQL/11338_tbl_DOG_Obedience_Level_Temp.sql @@ -14,5 +14,9 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Obedience_Level_Temp ( , code VARCHAR(250) , name VARCHAR(250) , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + , guid BINARY(36) ); diff --git a/static/MySQL/11342_tbl_DOG_Assessment_Response_Temp.sql b/static/MySQL/11342_tbl_DOG_Assessment_Response_Temp.sql index 42164ea..f82b748 100644 --- a/static/MySQL/11342_tbl_DOG_Assessment_Response_Temp.sql +++ b/static/MySQL/11342_tbl_DOG_Assessment_Response_Temp.sql @@ -16,5 +16,9 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Assessment_Response_Temp ( , value_measured DOUBLE , notes TEXT , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + , guid BINARY(36) ); diff --git a/static/MySQL/31320_tri_DOG_Distraction.sql b/static/MySQL/31320_tri_DOG_Distraction.sql index dbda17d..9c5e4ea 100644 --- a/static/MySQL/31320_tri_DOG_Distraction.sql +++ b/static/MySQL/31320_tri_DOG_Distraction.sql @@ -66,6 +66,10 @@ BEGIN SELECT NEW.id_distraction, 'proximity_metres', CONVERT(OLD.proximity_metres, CHAR), CONVERT(NEW.proximity_metres, CHAR), NEW.id_change_set WHERE NOT (OLD.proximity_metres <=> NEW.proximity_metres) UNION + -- Changed notes + SELECT NEW.id_distraction, 'notes', OLD.notes, NEW.notes, NEW.id_change_set + WHERE NOT (OLD.notes <=> NEW.notes) + UNION -- Changed active SELECT NEW.id_distraction, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set WHERE NOT (OLD.active <=> NEW.active) diff --git a/static/MySQL/70530_p_dog_calc_user.sql b/static/MySQL/70530_p_dog_calc_user.sql index 9f4ceca..09eaa84 100644 --- a/static/MySQL/70530_p_dog_calc_user.sql +++ b/static/MySQL/70530_p_dog_calc_user.sql @@ -667,24 +667,24 @@ BEGIN -- Filter records IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_User t_ERROR INNER JOIN parts.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 - DELETE t_USER - FROM tmp_Calc_User t_USER + DELETE t_CALC_USER + FROM tmp_Calc_User t_CALC_USER WHERE ( a_require_all_id_search_filters_met = 1 - AND t_USER.does_meet_id_filters = 0 + AND t_CALC_USER.does_meet_id_filters = 0 ) OR ( a_require_all_non_id_search_filters_met = 1 - AND t_USER.does_meet_non_id_filters = 0 + AND t_CALC_USER.does_meet_non_id_filters = 0 ) OR ( a_require_any_id_search_filters_met = 1 - AND t_USER.does_meet_id_filters = 0 + AND t_CALC_USER.does_meet_id_filters = 0 ) OR ( a_require_any_non_id_search_filters_met = 1 - AND t_USER.does_meet_non_id_filters = 0 + AND t_CALC_USER.does_meet_non_id_filters = 0 ) ; END IF; @@ -759,6 +759,9 @@ BEGIN , can_view , can_edit , can_admin + + , does_meet_id_filters + , does_meet_non_id_filters ) SELECT a_guid @@ -771,6 +774,9 @@ BEGIN , t_CALC_USER.can_view , t_CALC_USER.can_edit , t_CALC_USER.can_admin + + , t_CALC_USER.does_meet_id_filters + , t_CALC_USER.does_meet_non_id_filters FROM tmp_Calc_User t_CALC_USER ; COMMIT; diff --git a/static/MySQL/71104_p_dog_calc_command.sql b/static/MySQL/71104_p_dog_calc_command.sql index bb6f444..09a2fa9 100644 --- a/static/MySQL/71104_p_dog_calc_command.sql +++ b/static/MySQL/71104_p_dog_calc_command.sql @@ -563,7 +563,7 @@ BEGIN , CASE WHEN v_has_filter_command_id = 0 OR COMMAND_FILTERS.does_meet_id_filter = 1 - THEN 1 ELSE 0 END AS does_meet_non_id_filters + THEN 1 ELSE 0 END AS does_meet_id_filters , CASE WHEN ( v_has_filter_command_name = 0 @@ -573,7 +573,7 @@ BEGIN OR COMMAND_FILTERS.does_meet_name_filter = 1 OR COMMAND_FILTERS.does_meet_hand_signal_default_description_filter = 1 OR COMMAND_FILTERS.does_meet_notes_filter = 1 - THEN 1 ELSE 0 END AS does_meet_id_filters + THEN 1 ELSE 0 END AS does_meet_non_id_filters , CASE WHEN t_COMMAND_CATEGORY.id_command_category IS NOT NULL THEN 1 ELSE 0 END AS does_command_category_already_exist_in_temp_table FROM parts.DOG_Command COMMAND INNER JOIN tmp_Command_Category_Calc_Command t_COMMAND_CATEGORY ON COMMAND.id_command_category = t_COMMAND_CATEGORY.id_command_category diff --git a/static/MySQL/71111_p_dog_calc_command_modality.sql b/static/MySQL/71111_p_dog_calc_command_modality.sql new file mode 100644 index 0000000..e841363 --- /dev/null +++ b/static/MySQL/71111_p_dog_calc_command_modality.sql @@ -0,0 +1,549 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_calc_command_modality; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_calc_command_modality ( + IN a_guid BINARY(36) + , IN a_id_user INT + , IN a_get_all_command_modality BIT + , IN a_get_inactive_command_modality BIT + , IN a_ids_command_modality TEXT + , IN a_names_command_modality TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_show_errors BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_has_filter_command_modality_id BIT; + DECLARE v_has_filter_command_modality_name BIT; + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Command_Modality ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error_Calc_Command_Modality ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_Command_Modality t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error_Calc_Command_Modality; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + + CALL parts.p_core_validate_guid ( a_guid ); + + SET a_id_user := IFNULL(a_id_user, 0); + SET a_get_all_command_modality := IFNULL(a_get_all_command_modality, 0); + SET a_get_inactive_command_modality := IFNULL(a_get_inactive_command_modality, 0); + SET a_ids_command_modality := TRIM(IFNULL(a_ids_command_modality, '')); + SET a_names_command_modality := TRIM(IFNULL(a_names_command_modality, '')); + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + SET a_show_errors := IFNULL(a_show_errors, 0); + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_guid + , a_id_user + , a_get_all_command_modality + , a_get_inactive_command_modality + , a_ids_command_modality + , a_names_command_modality + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_show_errors + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Command_Modality; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Command_Modality; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Command_Modality; + DROP TEMPORARY TABLE IF EXISTS tmp_Command_Modality_Calc_Command_Modality; + + CREATE TEMPORARY TABLE tmp_Command_Modality_Calc_Command_Modality ( + id_command_modality INT NOT NULL + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Command_Modality ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_Command_Modality ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Id_Calc_Command_Modality; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name_Calc_Command_Modality ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Name_Calc_Command_Modality; + + SET v_has_filter_command_modality_id = CASE WHEN a_ids_command_modality <> '' THEN 1 ELSE 0 END; + SET v_has_filter_command_modality_name = CASE WHEN a_names_command_modality <> '' THEN 1 ELSE 0 END; + + -- Command_Modalitys + IF v_has_filter_command_modality_id = 1 THEN + CALL parts.p_core_split(a_guid, a_ids_command_modality, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Id_Calc_Command_Modality ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF v_has_filter_command_modality_name = 1 THEN + CALL parts.p_core_split(a_guid, a_names_command_modality, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Name_Calc_Command_Modality ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Command_Modality t_ERROR INNER JOIN parts.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 EXISTS ( + SELECT * + FROM tmp_Split_Id_Calc_Command_Modality t_SPLIT_ID + LEFT JOIN parts.DOG_Command_Modality COMMAND_MODALITYS ON t_SPLIT_ID.as_int = COMMAND_MODALITYS.id_command_modality + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(COMMAND_MODALITYS.id_command_modality) + OR ( + COMMAND_MODALITYS.active = 0 + AND a_get_inactive_command_modality = 0 + ) + ) THEN + INSERT INTO tmp_Msg_Error_Calc_Command_Modality ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Invalid or inactive Command_Modality IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split_Id_Calc_Command_Modality t_SPLIT_ID + LEFT JOIN parts.DOG_Command_Modality COMMAND_MODALITYS ON t_SPLIT_ID.as_int = COMMAND_MODALITYS.id_command_modality + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(COMMAND_MODALITYS.id_command_modality) + OR ( + COMMAND_MODALITYS.active = 0 + AND a_get_inactive_command_modality = 0 + ) + ; + /* Don't error on names, hand signals, or notes not found + ELSEIF EXISTS () + */ + ELSE + INSERT INTO tmp_Command_Modality_Calc_Command_Modality ( + id_command_modality + , does_meet_id_filters + , does_meet_non_id_filters + ) + WITH + Command_Modality_Id_Filter AS ( + SELECT COMMAND_MODALITYS.id_command_modality + FROM tmp_Split_Id_Calc_Command_Modality t_SPLIT_ID + INNER JOIN parts.DOG_Command_Modality COMMAND_MODALITYS ON t_SPLIT_ID.as_int = COMMAND_MODALITYS.id_command_modality + ) + , Command_Modality_Name_Filter AS ( + SELECT COMMAND_MODALITYS.id_command_modality + FROM tmp_Split_Name_Calc_Command_Modality t_SPLIT_NAME + INNER JOIN parts.DOG_Command_Modality COMMAND_MODALITYS ON COMMAND_MODALITYS.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') + WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL + ) + , Command_Modality_Filters AS ( + SELECT + COMMAND_MODALITYS_COMBINED.id_command_modality + , MAX(COMMAND_MODALITYS_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(COMMAND_MODALITYS_COMBINED.does_meet_name_filter) AS does_meet_name_filter + FROM ( + SELECT + COMMAND_MODALITYS_ID_FILTER.id_command_modality + , 1 AS does_meet_id_filter + , 0 AS does_meet_name_filter + FROM Command_Modality_Id_Filter COMMAND_MODALITYS_ID_FILTER + UNION + SELECT + COMMAND_MODALITYS_NAME_FILTER.id_command_modality + , 0 AS does_meet_id_filter + , 1 AS does_meet_name_filter + FROM Command_Modality_Name_Filter COMMAND_MODALITYS_NAME_FILTER + ) COMMAND_MODALITYS_COMBINED + GROUP BY COMMAND_MODALITYS_COMBINED.id_command_modality + ) + SELECT + COMMAND_MODALITYS.id_command_modality + , CASE WHEN + v_has_filter_command_modality_id = 0 + OR IFNULL(COMMAND_MODALITYS_FILTERS.does_meet_id_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_command_modality_name = 0 + ) + OR IFNULL(COMMAND_MODALITYS_FILTERS.does_meet_name_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.DOG_Command_Modality COMMAND_MODALITYS + LEFT JOIN Command_Modality_Filters COMMAND_MODALITYS_FILTERS ON COMMAND_MODALITYS.id_command_modality = COMMAND_MODALITYS_FILTERS.id_command_modality + WHERE + ( + a_get_all_command_modality = 1 + OR ( + v_has_filter_command_modality_id = 1 + AND COMMAND_MODALITYS_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_command_modality_name = 1 + AND COMMAND_MODALITYS_FILTERS.does_meet_name_filter = 1 + ) + ) + AND ( + a_get_inactive_command_modality = 1 + OR COMMAND_MODALITYS.active = 1 + ) + ; + END IF; + END IF; + + DELETE FROM tmp_Split_Id_Calc_Command_Modality; + DELETE FROM tmp_Split_Name_Calc_Command_Modality; + + IF a_debug = 1 THEN + SELECT 'After get Command_Modalitys '; + SELECT * FROM tmp_Command_Modality_Calc_Command_Modality; + END IF; + + -- Filter records + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Command_Modality t_ERROR INNER JOIN parts.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 + DELETE t_COMMAND_MODALITYS + FROM tmp_Command_Modality_Calc_Command_Modality t_COMMAND_MODALITYS + WHERE + ( + a_require_all_id_search_filters_met = 1 + AND ( + t_COMMAND_MODALITYS.does_meet_id_filters = 0 + ) + ) + OR ( + a_require_all_non_id_search_filters_met = 1 + AND ( + t_COMMAND_MODALITYS.does_meet_non_id_filters = 0 + ) + ) + OR ( + a_require_any_id_search_filters_met = 1 + AND t_COMMAND_MODALITYS.does_meet_id_filters = 0 + ) + OR ( + a_require_any_non_id_search_filters_met = 1 + AND t_COMMAND_MODALITYS.does_meet_non_id_filters = 0 + ) + ; + END IF; + + IF a_debug = 1 THEN + SELECT 'After filter Command_Modalitys'; + SELECT * FROM tmp_Command_Modality_Calc_Command_Modality; + END IF; + + -- Calculated fields + + -- Permissions + IF a_debug = 1 THEN + SELECT + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = a_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error_Calc_Command_Modality t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error_Calc_Command_Modality ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Dogs and Command_Modalitys.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT 'Before non-permitted data deletion'; + SELECT * FROM tmp_Command_Modality_Calc_Command_Modality; + SELECT * FROM tmp_Msg_Error_Calc_Command_Modality; + END IF; + + IF EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Command_Modality t_ERROR INNER JOIN parts.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_Modality_Calc_Command_Modality; + END IF; + + DELETE FROM tmp_Command_Modality_Calc_Command_Modality; + END IF; + + IF a_debug = 1 THEN + SELECT 'After non-permitted data deletion'; + END IF; + + -- Outputs + START TRANSACTION; + -- Command_Modalitys + INSERT INTO parts.DOG_Command_Modality_Temp ( + guid + , id_command_modality + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + a_guid + , t_COMMAND_MODALITYS.id_command_modality + , COMMAND_MODALITYS.code + , COMMAND_MODALITYS.name + , COMMAND_MODALITYS.active + + , t_COMMAND_MODALITYS.does_meet_id_filters + , t_COMMAND_MODALITYS.does_meet_non_id_filters + FROM parts.DOG_Command_Modality COMMAND_MODALITYS + INNER JOIN tmp_Command_Modality_Calc_Command_Modality t_COMMAND_MODALITYS ON COMMAND_MODALITYS.id_command_modality = t_COMMAND_MODALITYS.id_command_modality + ORDER BY COMMAND_MODALITYS.name + ; + COMMIT; + + -- Errors + IF a_show_errors = 1 THEN + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_Command_Modality t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + END IF; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Command_Modality_Calc_Command_Modality; + END IF; + + CALL parts.p_dog_clear_calc_dog ( a_guid, 0 ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Command_Modality; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Command_Modality; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Command_Modality; + DROP TEMPORARY TABLE IF EXISTS tmp_Command_Modality_Calc_Command_Modality; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + + +CALL parts.p_dog_calc_command_modality ( + 'gripe ' -- a_guid + , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_command_modality + , 0 -- a_get_inactive_command_modality + , '' -- a_ids_command_modality + , '' -- a_names_command_modality + , 0 -- a_require_all_id_search_filters_met + , 0 -- 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 + , 0 -- a_show_errors + , 0 -- a_debug +); + +SELECT * +FROM parts.DOG_Command_Modality_Temp +; +/* +SELECT * +FROM parts.DOG_Command_Modality_Temp C +WHERE + C.does_meet_id_filters + AND C.does_meet_non_id_filters +; +*/ +CALL parts.p_dog_clear_calc_command_modality ( + 'gripe ' -- a_guid + , 1 -- debug +); + + +DELETE +FROM parts.DOG_Command_Modality_Temp +; + +*/ diff --git a/static/MySQL/71111_p_dog_clear_calc_command_modality.sql b/static/MySQL/71111_p_dog_clear_calc_command_modality.sql new file mode 100644 index 0000000..b850d8f --- /dev/null +++ b/static/MySQL/71111_p_dog_clear_calc_command_modality.sql @@ -0,0 +1,45 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_clear_calc_command_modality; +DROP PROCEDURE IF EXISTS parts.p_command_modality_clear_calc_command_modality; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_clear_calc_command_modality ( + IN a_guid BINARY(36) + , IN a_debug BIT +) +BEGIN + DECLARE v_time_start TIMESTAMP(6); + SET v_time_start := CURRENT_TIMESTAMP(6); + + CALL parts.p_core_validate_guid ( a_guid ); + + START TRANSACTION; + + DELETE COMMAND_MODALITYS_T + FROM parts.DOG_Command_Modality_Temp COMMAND_MODALITYS_T + WHERE COMMAND_MODALITYS_T.GUID = a_guid + ; + + COMMIT; + + IF a_debug = 1 THEN + CALL parts.p_debug_timing_reporting( v_time_start ); + END IF; +END // +DELIMITER ; + +/* + +CALL parts.p_dog_clear_calc_command_modality ( + 'crips ' -- a_guid + , 1 -- debug +); + +SELECT * +FROM parts.DOG_Calc_User_Temp +WHERE GUID = 'chips ' +; + +*/ diff --git a/static/MySQL/71111_p_dog_get_many_command_modality.sql b/static/MySQL/71111_p_dog_get_many_command_modality.sql new file mode 100644 index 0000000..20796cb --- /dev/null +++ b/static/MySQL/71111_p_dog_get_many_command_modality.sql @@ -0,0 +1,375 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_get_many_command_modality; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_get_many_command_modality ( + IN a_id_user INT + , IN a_get_all_command_modality BIT + , IN a_get_inactive_command_modality BIT + , IN a_ids_command_modality TEXT + , IN a_names_command_modality TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_guid BINARY(36); + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_guid := UUID(); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + SET a_id_user := IFNULL(a_id_user, 0); + /* + SET a_get_all_command_modality := IFNULL(a_get_all_command_modality, 0); + SET a_get_inactive_command_modality := IFNULL(a_get_inactive_command_modality, 0); + SET a_ids_command_modality := TRIM(IFNULL(a_ids_command_modality, '')); + SET a_names_command_modality := TRIM(IFNULL(a_names_command_modality, '')); + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + */ + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_id_user + , a_get_all_command_modality + , a_get_inactive_command_modality + , a_ids_command_modality + , a_names_command_modality + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_guid + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Command_Modality; + + CREATE TEMPORARY TABLE tmp_Command_Modality ( + id_command_modality INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + -- Permissions + IF a_debug = 1 THEN + SELECT + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = v_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR; + SELECT * FROM tmp_Msg_Error t_ERROR; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Command_Modalitys.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + v_guid + , 0 -- a_debug + ); + + + -- Call Command_Modality Calc + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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 + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_command_modality -- a_get_all_command_modality + , a_get_inactive_command_modality -- a_get_inactive_command_modality + , a_ids_command_modality -- a_ids_command_modality + , a_names_command_modality -- a_names_command_modality + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_command_modality ( + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_command_modality -- a_get_all_command_modality + , a_get_inactive_command_modality -- a_get_inactive_command_modality + , a_ids_command_modality -- a_ids_command_modality + , a_names_command_modality -- a_names_command_modality + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM parts.DOG_Command_Modality_Temp; + SELECT * FROM parts.DOG_Command_Modality_Temp; + END IF; + + INSERT INTO tmp_Command_Modality ( + id_command_modality + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + COMMAND_MODALITY_T.id_command_modality + , COMMAND_MODALITY_T.code + , COMMAND_MODALITY_T.name + , COMMAND_MODALITY_T.active + + , COMMAND_MODALITY_T.does_meet_id_filters + , COMMAND_MODALITY_T.does_meet_non_id_filters + FROM parts.DOG_Command_Modality_Temp COMMAND_MODALITY_T + WHERE COMMAND_MODALITY_T.GUID = v_guid + ; + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM tmp_Command_Modality; + SELECT * FROM tmp_Command_Modality; + END IF; + END IF; + + -- Filter outputs + IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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_Modality; + END IF; + + DELETE FROM tmp_Command_Modality; + END IF; + + + -- Outputs + -- Command_Modalitys + SELECT + t_COMMAND_MODALITYS.id_command_modality + , t_COMMAND_MODALITYS.code + , t_COMMAND_MODALITYS.name + , t_COMMAND_MODALITYS.active + + , t_COMMAND_MODALITYS.does_meet_id_filters + , t_COMMAND_MODALITYS.does_meet_non_id_filters + FROM tmp_Command_Modality t_COMMAND_MODALITYS + LEFT JOIN parts.DOG_Command_Modality COMMAND_MODALITYS ON t_COMMAND_MODALITYS.id_command_modality = COMMAND_MODALITYS.id_command_modality + ORDER BY t_COMMAND_MODALITYS.name + ; + + -- Errors + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Command_Modality; + END IF; + + CALL parts.p_dog_clear_calc_command_modality( + v_guid -- a_guid + , 0 -- a_debug + ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Command_Modality; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_get_many_command_modality ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_command_modality + , 0 -- a_get_inactive_command_modality + , '' -- a_ids_command_modality + , '' -- a_names_command_modality + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + + +CALL demo.p_dog_get_many_command_modality ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_command_modality + , 0 -- a_get_inactive_command_modality + , '' -- a_ids_command_modality + , 'pat,point' -- a_names_command_modality + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + +*/ \ No newline at end of file diff --git a/static/MySQL/71200_p_dog_calc_location.sql b/static/MySQL/71200_p_dog_calc_location.sql index b4ce12c..e8d843a 100644 --- a/static/MySQL/71200_p_dog_calc_location.sql +++ b/static/MySQL/71200_p_dog_calc_location.sql @@ -289,13 +289,13 @@ BEGIN , CASE WHEN v_has_filter_location_id = 0 OR LOCATIONS_FILTERS.does_meet_id_filter = 1 - THEN 1 ELSE 0 END AS does_meet_non_id_filters + THEN 1 ELSE 0 END AS does_meet_id_filters , CASE WHEN ( v_has_filter_location_name = 0 ) OR LOCATIONS_FILTERS.does_meet_name_filter = 1 - THEN 1 ELSE 0 END AS does_meet_id_filters + THEN 1 ELSE 0 END AS does_meet_non_id_filters FROM parts.DOG_Location LOCATIONS LEFT JOIN Location_Filters LOCATIONS_FILTERS ON LOCATIONS.id_location = LOCATIONS_FILTERS.id_location WHERE diff --git a/static/MySQL/71228_p_dog_calc_image.sql b/static/MySQL/71228_p_dog_calc_image.sql index 71e689a..de5ff6c 100644 --- a/static/MySQL/71228_p_dog_calc_image.sql +++ b/static/MySQL/71228_p_dog_calc_image.sql @@ -325,13 +325,13 @@ BEGIN , CASE WHEN v_has_filter_file_type_id = 0 OR FILE_TYPES_FILTERS.does_meet_id_filter = 1 - THEN 1 ELSE 0 END AS does_meet_non_id_filters + THEN 1 ELSE 0 END AS does_meet_id_filters , CASE WHEN ( v_has_filter_file_type_name = 0 ) OR FILE_TYPES_FILTERS.does_meet_name_filter = 1 - THEN 1 ELSE 0 END AS does_meet_id_filters + THEN 1 ELSE 0 END AS does_meet_non_id_filters FROM parts.CORE_File_Type FILE_TYPES LEFT JOIN File_Type_Filters FILE_TYPES_FILTERS ON FILE_TYPES.id_file_type = FILE_TYPES_FILTERS.id_file_type WHERE diff --git a/static/MySQL/71232_p_dog_calc_button_icon.sql b/static/MySQL/71232_p_dog_calc_button_icon.sql index 4c8b4ca..64ac929 100644 --- a/static/MySQL/71232_p_dog_calc_button_icon.sql +++ b/static/MySQL/71232_p_dog_calc_button_icon.sql @@ -455,7 +455,7 @@ BEGIN , CASE WHEN v_has_filter_button_icon_id = 0 OR BUTTON_ICON_FILTERS.does_meet_id_filter = 1 - THEN 1 ELSE 0 END AS does_meet_non_id_filters + THEN 1 ELSE 0 END AS does_meet_id_filters , CASE WHEN ( v_has_filter_button_icon_name = 0 @@ -463,7 +463,7 @@ BEGIN ) OR BUTTON_ICON_FILTERS.does_meet_name_filter = 1 OR BUTTON_ICON_FILTERS.does_meet_notes_filter = 1 - THEN 1 ELSE 0 END AS does_meet_id_filters + THEN 1 ELSE 0 END AS does_meet_non_id_filters , CASE WHEN t_IMAGE.id_image IS NOT NULL THEN 1 ELSE 0 END AS does_image_already_exist_in_temp_table FROM parts.DOG_Button_Icon BUTTON_ICON LEFT JOIN tmp_Image_Calc_Button_Icon t_IMAGE ON BUTTON_ICON.id_image = t_IMAGE.id_image diff --git a/static/MySQL/71300_p_dog_calc_weather.sql b/static/MySQL/71300_p_dog_calc_weather.sql new file mode 100644 index 0000000..a047869 --- /dev/null +++ b/static/MySQL/71300_p_dog_calc_weather.sql @@ -0,0 +1,549 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_calc_weather; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_calc_weather ( + IN a_guid BINARY(36) + , IN a_id_user INT + , IN a_get_all_weather BIT + , IN a_get_inactive_weather BIT + , IN a_ids_weather TEXT + , IN a_names_weather TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_show_errors BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_has_filter_weather_id BIT; + DECLARE v_has_filter_weather_name BIT; + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Weather ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error_Calc_Weather ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_Weather t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error_Calc_Weather; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + + CALL parts.p_core_validate_guid ( a_guid ); + + SET a_id_user := IFNULL(a_id_user, 0); + SET a_get_all_weather := IFNULL(a_get_all_weather, 0); + SET a_get_inactive_weather := IFNULL(a_get_inactive_weather, 0); + SET a_ids_weather := TRIM(IFNULL(a_ids_weather, '')); + SET a_names_weather := TRIM(IFNULL(a_names_weather, '')); + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + SET a_show_errors := IFNULL(a_show_errors, 0); + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_guid + , a_id_user + , a_get_all_weather + , a_get_inactive_weather + , a_ids_weather + , a_names_weather + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_show_errors + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Weather; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Weather; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Weather; + DROP TEMPORARY TABLE IF EXISTS tmp_Weather_Calc_Weather; + + CREATE TEMPORARY TABLE tmp_Weather_Calc_Weather ( + id_weather INT NOT NULL + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Weather ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_Weather ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Id_Calc_Weather; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name_Calc_Weather ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Name_Calc_Weather; + + SET v_has_filter_weather_id = CASE WHEN a_ids_weather <> '' THEN 1 ELSE 0 END; + SET v_has_filter_weather_name = CASE WHEN a_names_weather <> '' THEN 1 ELSE 0 END; + + -- Weathers + IF v_has_filter_weather_id = 1 THEN + CALL parts.p_core_split(a_guid, a_ids_weather, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Id_Calc_Weather ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF v_has_filter_weather_name = 1 THEN + CALL parts.p_core_split(a_guid, a_names_weather, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Name_Calc_Weather ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Weather t_ERROR INNER JOIN parts.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 EXISTS ( + SELECT * + FROM tmp_Split_Id_Calc_Weather t_SPLIT_ID + LEFT JOIN parts.DOG_Weather WEATHERS ON t_SPLIT_ID.as_int = WEATHERS.id_weather + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(WEATHERS.id_weather) + OR ( + WEATHERS.active = 0 + AND a_get_inactive_weather = 0 + ) + ) THEN + INSERT INTO tmp_Msg_Error_Calc_Weather ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Invalid or inactive Weather IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split_Id_Calc_Weather t_SPLIT_ID + LEFT JOIN parts.DOG_Weather WEATHERS ON t_SPLIT_ID.as_int = WEATHERS.id_weather + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(WEATHERS.id_weather) + OR ( + WEATHERS.active = 0 + AND a_get_inactive_weather = 0 + ) + ; + /* Don't error on names, hand signals, or notes not found + ELSEIF EXISTS () + */ + ELSE + INSERT INTO tmp_Weather_Calc_Weather ( + id_weather + , does_meet_id_filters + , does_meet_non_id_filters + ) + WITH + Weather_Id_Filter AS ( + SELECT WEATHERS.id_weather + FROM tmp_Split_Id_Calc_Weather t_SPLIT_ID + INNER JOIN parts.DOG_Weather WEATHERS ON t_SPLIT_ID.as_int = WEATHERS.id_weather + ) + , Weather_Name_Filter AS ( + SELECT WEATHERS.id_weather + FROM tmp_Split_Name_Calc_Weather t_SPLIT_NAME + INNER JOIN parts.DOG_Weather WEATHERS ON WEATHERS.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') + WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL + ) + , Weather_Filters AS ( + SELECT + WEATHERS_COMBINED.id_weather + , MAX(WEATHERS_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(WEATHERS_COMBINED.does_meet_name_filter) AS does_meet_name_filter + FROM ( + SELECT + WEATHERS_ID_FILTER.id_weather + , 1 AS does_meet_id_filter + , 0 AS does_meet_name_filter + FROM Weather_Id_Filter WEATHERS_ID_FILTER + UNION + SELECT + WEATHERS_NAME_FILTER.id_weather + , 0 AS does_meet_id_filter + , 1 AS does_meet_name_filter + FROM Weather_Name_Filter WEATHERS_NAME_FILTER + ) WEATHERS_COMBINED + GROUP BY WEATHERS_COMBINED.id_weather + ) + SELECT + WEATHERS.id_weather + , CASE WHEN + v_has_filter_weather_id = 0 + OR IFNULL(WEATHERS_FILTERS.does_meet_id_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_weather_name = 0 + ) + OR IFNULL(WEATHERS_FILTERS.does_meet_name_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.DOG_Weather WEATHERS + LEFT JOIN Weather_Filters WEATHERS_FILTERS ON WEATHERS.id_weather = WEATHERS_FILTERS.id_weather + WHERE + ( + a_get_all_weather = 1 + OR ( + v_has_filter_weather_id = 1 + AND WEATHERS_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_weather_name = 1 + AND WEATHERS_FILTERS.does_meet_name_filter = 1 + ) + ) + AND ( + a_get_inactive_weather = 1 + OR WEATHERS.active = 1 + ) + ; + END IF; + END IF; + + DELETE FROM tmp_Split_Id_Calc_Weather; + DELETE FROM tmp_Split_Name_Calc_Weather; + + IF a_debug = 1 THEN + SELECT 'After get Weathers '; + SELECT * FROM tmp_Weather_Calc_Weather; + END IF; + + -- Filter records + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Weather t_ERROR INNER JOIN parts.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 + DELETE t_WEATHERS + FROM tmp_Weather_Calc_Weather t_WEATHERS + WHERE + ( + a_require_all_id_search_filters_met = 1 + AND ( + t_WEATHERS.does_meet_id_filters = 0 + ) + ) + OR ( + a_require_all_non_id_search_filters_met = 1 + AND ( + t_WEATHERS.does_meet_non_id_filters = 0 + ) + ) + OR ( + a_require_any_id_search_filters_met = 1 + AND t_WEATHERS.does_meet_id_filters = 0 + ) + OR ( + a_require_any_non_id_search_filters_met = 1 + AND t_WEATHERS.does_meet_non_id_filters = 0 + ) + ; + END IF; + + IF a_debug = 1 THEN + SELECT 'After filter Weathers'; + SELECT * FROM tmp_Weather_Calc_Weather; + END IF; + + -- Calculated fields + + -- Permissions + IF a_debug = 1 THEN + SELECT + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = a_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error_Calc_Weather t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error_Calc_Weather ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Dogs and Weathers.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT 'Before non-permitted data deletion'; + SELECT * FROM tmp_Weather_Calc_Weather; + SELECT * FROM tmp_Msg_Error_Calc_Weather; + END IF; + + IF EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Weather t_ERROR INNER JOIN parts.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_Weather_Calc_Weather; + END IF; + + DELETE FROM tmp_Weather_Calc_Weather; + END IF; + + IF a_debug = 1 THEN + SELECT 'After non-permitted data deletion'; + END IF; + + -- Outputs + START TRANSACTION; + -- Weathers + INSERT INTO parts.DOG_Weather_Temp ( + guid + , id_weather + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + a_guid + , t_WEATHERS.id_weather + , WEATHERS.code + , WEATHERS.name + , WEATHERS.active + + , t_WEATHERS.does_meet_id_filters + , t_WEATHERS.does_meet_non_id_filters + FROM parts.DOG_Weather WEATHERS + INNER JOIN tmp_Weather_Calc_Weather t_WEATHERS ON WEATHERS.id_weather = t_WEATHERS.id_weather + ORDER BY WEATHERS.name + ; + COMMIT; + + -- Errors + IF a_show_errors = 1 THEN + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_Weather t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + END IF; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Weather_Calc_Weather; + END IF; + + CALL parts.p_dog_clear_calc_dog ( a_guid, 0 ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Weather; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Weather; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Weather; + DROP TEMPORARY TABLE IF EXISTS tmp_Weather_Calc_Weather; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + + +CALL parts.p_dog_calc_weather ( + 'gripe ' -- a_guid + , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_weather + , 0 -- a_get_inactive_weather + , '' -- a_ids_weather + , '' -- a_names_weather + , 0 -- a_require_all_id_search_filters_met + , 0 -- 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 + , 0 -- a_show_errors + , 0 -- a_debug +); + +SELECT * +FROM parts.DOG_Weather_Temp +; +/* +SELECT * +FROM parts.DOG_Weather_Temp C +WHERE + C.does_meet_id_filters + AND C.does_meet_non_id_filters +; +*/ +CALL parts.p_dog_clear_calc_weather ( + 'gripe ' -- a_guid + , 1 -- debug +); + + +DELETE +FROM parts.DOG_Weather_Temp +; + +*/ diff --git a/static/MySQL/71300_p_dog_clear_calc_weather.sql b/static/MySQL/71300_p_dog_clear_calc_weather.sql new file mode 100644 index 0000000..52a726e --- /dev/null +++ b/static/MySQL/71300_p_dog_clear_calc_weather.sql @@ -0,0 +1,45 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_clear_calc_weather; +DROP PROCEDURE IF EXISTS parts.p_weather_clear_calc_weather; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_clear_calc_weather ( + IN a_guid BINARY(36) + , IN a_debug BIT +) +BEGIN + DECLARE v_time_start TIMESTAMP(6); + SET v_time_start := CURRENT_TIMESTAMP(6); + + CALL parts.p_core_validate_guid ( a_guid ); + + START TRANSACTION; + + DELETE WEATHERS_T + FROM parts.DOG_Weather_Temp WEATHERS_T + WHERE WEATHERS_T.GUID = a_guid + ; + + COMMIT; + + IF a_debug = 1 THEN + CALL parts.p_debug_timing_reporting( v_time_start ); + END IF; +END // +DELIMITER ; + +/* + +CALL parts.p_dog_clear_calc_weather ( + 'crips ' -- a_guid + , 1 -- debug +); + +SELECT * +FROM parts.DOG_Calc_User_Temp +WHERE GUID = 'chips ' +; + +*/ diff --git a/static/MySQL/71300_p_dog_get_many_weather.sql b/static/MySQL/71300_p_dog_get_many_weather.sql new file mode 100644 index 0000000..2508249 --- /dev/null +++ b/static/MySQL/71300_p_dog_get_many_weather.sql @@ -0,0 +1,375 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_get_many_weather; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_get_many_weather ( + IN a_id_user INT + , IN a_get_all_weather BIT + , IN a_get_inactive_weather BIT + , IN a_ids_weather TEXT + , IN a_names_weather TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_guid BINARY(36); + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_guid := UUID(); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + SET a_id_user := IFNULL(a_id_user, 0); + /* + SET a_get_all_weather := IFNULL(a_get_all_weather, 0); + SET a_get_inactive_weather := IFNULL(a_get_inactive_weather, 0); + SET a_ids_weather := TRIM(IFNULL(a_ids_weather, '')); + SET a_names_weather := TRIM(IFNULL(a_names_weather, '')); + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + */ + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_id_user + , a_get_all_weather + , a_get_inactive_weather + , a_ids_weather + , a_names_weather + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_guid + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Weather; + + CREATE TEMPORARY TABLE tmp_Weather ( + id_weather INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + -- Permissions + IF a_debug = 1 THEN + SELECT + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = v_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR; + SELECT * FROM tmp_Msg_Error t_ERROR; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Weathers.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + v_guid + , 0 -- a_debug + ); + + + -- Call Weather Calc + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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 + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_weather -- a_get_all_weather + , a_get_inactive_weather -- a_get_inactive_weather + , a_ids_weather -- a_ids_weather + , a_names_weather -- a_names_weather + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_weather ( + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_weather -- a_get_all_weather + , a_get_inactive_weather -- a_get_inactive_weather + , a_ids_weather -- a_ids_weather + , a_names_weather -- a_names_weather + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM parts.DOG_Weather_Temp; + SELECT * FROM parts.DOG_Weather_Temp; + END IF; + + INSERT INTO tmp_Weather ( + id_weather + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + WEATHER_T.id_weather + , WEATHER_T.code + , WEATHER_T.name + , WEATHER_T.active + + , WEATHER_T.does_meet_id_filters + , WEATHER_T.does_meet_non_id_filters + FROM parts.DOG_Weather_Temp WEATHER_T + WHERE WEATHER_T.GUID = v_guid + ; + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM tmp_Weather; + SELECT * FROM tmp_Weather; + END IF; + END IF; + + -- Filter outputs + IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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_Weather; + END IF; + + DELETE FROM tmp_Weather; + END IF; + + + -- Outputs + -- Weathers + SELECT + t_WEATHERS.id_weather + , t_WEATHERS.code + , t_WEATHERS.name + , t_WEATHERS.active + + , t_WEATHERS.does_meet_id_filters + , t_WEATHERS.does_meet_non_id_filters + FROM tmp_Weather t_WEATHERS + LEFT JOIN parts.DOG_Weather WEATHERS ON t_WEATHERS.id_weather = WEATHERS.id_weather + ORDER BY t_WEATHERS.name + ; + + -- Errors + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Weather; + END IF; + + CALL parts.p_dog_clear_calc_weather( + v_guid -- a_guid + , 0 -- a_debug + ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Weather; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_get_many_weather ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_weather + , 0 -- a_get_inactive_weather + , '' -- a_ids_weather + , '' -- a_names_weather + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + + +CALL demo.p_dog_get_many_weather ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_weather + , 0 -- a_get_inactive_weather + , '' -- a_ids_weather + , 'pat,point' -- a_names_weather + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + +*/ \ No newline at end of file diff --git a/static/MySQL/71304_p_dog_calc_lighting_level.sql b/static/MySQL/71304_p_dog_calc_lighting_level.sql new file mode 100644 index 0000000..50e1110 --- /dev/null +++ b/static/MySQL/71304_p_dog_calc_lighting_level.sql @@ -0,0 +1,549 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_calc_lighting_level; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_calc_lighting_level ( + IN a_guid BINARY(36) + , IN a_id_user INT + , IN a_get_all_lighting_level BIT + , IN a_get_inactive_lighting_level BIT + , IN a_ids_lighting_level TEXT + , IN a_names_lighting_level TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_show_errors BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_has_filter_lighting_level_id BIT; + DECLARE v_has_filter_lighting_level_name BIT; + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Lighting_Level ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error_Calc_Lighting_Level ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_lighting_level + , ERROR_TYPE.text_lighting_level + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_Lighting_Level t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error_Calc_Lighting_Level; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + + CALL parts.p_core_validate_guid ( a_guid ); + + SET a_id_user := IFNULL(a_id_user, 0); + SET a_get_all_lighting_level := IFNULL(a_get_all_lighting_level, 0); + SET a_get_inactive_lighting_level := IFNULL(a_get_inactive_lighting_level, 0); + SET a_ids_lighting_level := TRIM(IFNULL(a_ids_lighting_level, '')); + SET a_names_lighting_level := TRIM(IFNULL(a_names_lighting_level, '')); + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + SET a_show_errors := IFNULL(a_show_errors, 0); + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_guid + , a_id_user + , a_get_all_lighting_level + , a_get_inactive_lighting_level + , a_ids_lighting_level + , a_names_lighting_level + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_show_errors + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Lighting_Level; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Lighting_Level; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Lighting_Level; + DROP TEMPORARY TABLE IF EXISTS tmp_Lighting_Level_Calc_Lighting_Level; + + CREATE TEMPORARY TABLE tmp_Lighting_Level_Calc_Lighting_Level ( + id_lighting_level INT NOT NULL + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Lighting_Level ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_Lighting_Level ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Id_Calc_Lighting_Level; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name_Calc_Lighting_Level ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Name_Calc_Lighting_Level; + + SET v_has_filter_lighting_level_id = CASE WHEN a_ids_lighting_level <> '' THEN 1 ELSE 0 END; + SET v_has_filter_lighting_level_name = CASE WHEN a_names_lighting_level <> '' THEN 1 ELSE 0 END; + + -- Lighting_Levels + IF v_has_filter_lighting_level_id = 1 THEN + CALL parts.p_core_split(a_guid, a_ids_lighting_level, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Id_Calc_Lighting_Level ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF v_has_filter_lighting_level_name = 1 THEN + CALL parts.p_core_split(a_guid, a_names_lighting_level, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Name_Calc_Lighting_Level ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Lighting_Level t_ERROR INNER JOIN parts.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 EXISTS ( + SELECT * + FROM tmp_Split_Id_Calc_Lighting_Level t_SPLIT_ID + LEFT JOIN parts.DOG_Lighting_Level LIGHTING_LEVELS ON t_SPLIT_ID.as_int = LIGHTING_LEVELS.id_lighting_level + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(LIGHTING_LEVELS.id_lighting_level) + OR ( + LIGHTING_LEVELS.active = 0 + AND a_get_inactive_lighting_level = 0 + ) + ) THEN + INSERT INTO tmp_Msg_Error_Calc_Lighting_Level ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Invalid or inactive Lighting_Level IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split_Id_Calc_Lighting_Level t_SPLIT_ID + LEFT JOIN parts.DOG_Lighting_Level LIGHTING_LEVELS ON t_SPLIT_ID.as_int = LIGHTING_LEVELS.id_lighting_level + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(LIGHTING_LEVELS.id_lighting_level) + OR ( + LIGHTING_LEVELS.active = 0 + AND a_get_inactive_lighting_level = 0 + ) + ; + /* Don't error on names, hand signals, or notes not found + ELSEIF EXISTS () + */ + ELSE + INSERT INTO tmp_Lighting_Level_Calc_Lighting_Level ( + id_lighting_level + , does_meet_id_filters + , does_meet_non_id_filters + ) + WITH + Lighting_Level_Id_Filter AS ( + SELECT LIGHTING_LEVELS.id_lighting_level + FROM tmp_Split_Id_Calc_Lighting_Level t_SPLIT_ID + INNER JOIN parts.DOG_Lighting_Level LIGHTING_LEVELS ON t_SPLIT_ID.as_int = LIGHTING_LEVELS.id_lighting_level + ) + , Lighting_Level_Name_Filter AS ( + SELECT LIGHTING_LEVELS.id_lighting_level + FROM tmp_Split_Name_Calc_Lighting_Level t_SPLIT_NAME + INNER JOIN parts.DOG_Lighting_Level LIGHTING_LEVELS ON LIGHTING_LEVELS.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') + WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL + ) + , Lighting_Level_Filters AS ( + SELECT + LIGHTING_LEVELS_COMBINED.id_lighting_level + , MAX(LIGHTING_LEVELS_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(LIGHTING_LEVELS_COMBINED.does_meet_name_filter) AS does_meet_name_filter + FROM ( + SELECT + LIGHTING_LEVELS_ID_FILTER.id_lighting_level + , 1 AS does_meet_id_filter + , 0 AS does_meet_name_filter + FROM Lighting_Level_Id_Filter LIGHTING_LEVELS_ID_FILTER + UNION + SELECT + LIGHTING_LEVELS_NAME_FILTER.id_lighting_level + , 0 AS does_meet_id_filter + , 1 AS does_meet_name_filter + FROM Lighting_Level_Name_Filter LIGHTING_LEVELS_NAME_FILTER + ) LIGHTING_LEVELS_COMBINED + GROUP BY LIGHTING_LEVELS_COMBINED.id_lighting_level + ) + SELECT + LIGHTING_LEVELS.id_lighting_level + , CASE WHEN + v_has_filter_lighting_level_id = 0 + OR IFNULL(LIGHTING_LEVELS_FILTERS.does_meet_id_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_lighting_level_name = 0 + ) + OR IFNULL(LIGHTING_LEVELS_FILTERS.does_meet_name_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.DOG_Lighting_Level LIGHTING_LEVELS + LEFT JOIN Lighting_Level_Filters LIGHTING_LEVELS_FILTERS ON LIGHTING_LEVELS.id_lighting_level = LIGHTING_LEVELS_FILTERS.id_lighting_level + WHERE + ( + a_get_all_lighting_level = 1 + OR ( + v_has_filter_lighting_level_id = 1 + AND LIGHTING_LEVELS_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_lighting_level_name = 1 + AND LIGHTING_LEVELS_FILTERS.does_meet_name_filter = 1 + ) + ) + AND ( + a_get_inactive_lighting_level = 1 + OR LIGHTING_LEVELS.active = 1 + ) + ; + END IF; + END IF; + + DELETE FROM tmp_Split_Id_Calc_Lighting_Level; + DELETE FROM tmp_Split_Name_Calc_Lighting_Level; + + IF a_debug = 1 THEN + SELECT 'After get Lighting_Levels '; + SELECT * FROM tmp_Lighting_Level_Calc_Lighting_Level; + END IF; + + -- Filter records + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Lighting_Level t_ERROR INNER JOIN parts.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 + DELETE t_LIGHTING_LEVELS + FROM tmp_Lighting_Level_Calc_Lighting_Level t_LIGHTING_LEVELS + WHERE + ( + a_require_all_id_search_filters_met = 1 + AND ( + t_LIGHTING_LEVELS.does_meet_id_filters = 0 + ) + ) + OR ( + a_require_all_non_id_search_filters_met = 1 + AND ( + t_LIGHTING_LEVELS.does_meet_non_id_filters = 0 + ) + ) + OR ( + a_require_any_id_search_filters_met = 1 + AND t_LIGHTING_LEVELS.does_meet_id_filters = 0 + ) + OR ( + a_require_any_non_id_search_filters_met = 1 + AND t_LIGHTING_LEVELS.does_meet_non_id_filters = 0 + ) + ; + END IF; + + IF a_debug = 1 THEN + SELECT 'After filter Lighting_Levels'; + SELECT * FROM tmp_Lighting_Level_Calc_Lighting_Level; + END IF; + + -- Calculated fields + + -- Permissions + IF a_debug = 1 THEN + SELECT + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = a_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error_Calc_Lighting_Level t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error_Calc_Lighting_Level ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Dogs and Lighting_Levels.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT 'Before non-permitted data deletion'; + SELECT * FROM tmp_Lighting_Level_Calc_Lighting_Level; + SELECT * FROM tmp_Msg_Error_Calc_Lighting_Level; + END IF; + + IF EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Lighting_Level t_ERROR INNER JOIN parts.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_Lighting_Level_Calc_Lighting_Level; + END IF; + + DELETE FROM tmp_Lighting_Level_Calc_Lighting_Level; + END IF; + + IF a_debug = 1 THEN + SELECT 'After non-permitted data deletion'; + END IF; + + -- Outputs + START TRANSACTION; + -- Lighting_Levels + INSERT INTO parts.DOG_Lighting_Level_Temp ( + guid + , id_lighting_level + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + a_guid + , t_LIGHTING_LEVELS.id_lighting_level + , LIGHTING_LEVELS.code + , LIGHTING_LEVELS.name + , LIGHTING_LEVELS.active + + , t_LIGHTING_LEVELS.does_meet_id_filters + , t_LIGHTING_LEVELS.does_meet_non_id_filters + FROM parts.DOG_Lighting_Level LIGHTING_LEVELS + INNER JOIN tmp_Lighting_Level_Calc_Lighting_Level t_LIGHTING_LEVELS ON LIGHTING_LEVELS.id_lighting_level = t_LIGHTING_LEVELS.id_lighting_level + ORDER BY LIGHTING_LEVELS.name + ; + COMMIT; + + -- Errors + IF a_show_errors = 1 THEN + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_lighting_level + , ERROR_TYPE.text_lighting_level + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_Lighting_Level t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + END IF; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Lighting_Level_Calc_Lighting_Level; + END IF; + + CALL parts.p_dog_clear_calc_dog ( a_guid, 0 ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Lighting_Level; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Lighting_Level; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Lighting_Level; + DROP TEMPORARY TABLE IF EXISTS tmp_Lighting_Level_Calc_Lighting_Level; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + + +CALL parts.p_dog_calc_lighting_level ( + 'gripe ' -- a_guid + , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_lighting_level + , 0 -- a_get_inactive_lighting_level + , '' -- a_ids_lighting_level + , '' -- a_names_lighting_level + , 0 -- a_require_all_id_search_filters_met + , 0 -- 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 + , 0 -- a_show_errors + , 0 -- a_debug +); + +SELECT * +FROM parts.DOG_Lighting_Level_Temp +; +/* +SELECT * +FROM parts.DOG_Lighting_Level_Temp C +WHERE + C.does_meet_id_filters + AND C.does_meet_non_id_filters +; +*/ +CALL parts.p_dog_clear_calc_lighting_level ( + 'gripe ' -- a_guid + , 1 -- debug +); + + +DELETE +FROM parts.DOG_Lighting_Level_Temp +; + +*/ diff --git a/static/MySQL/71304_p_dog_clear_calc_lighting_level.sql b/static/MySQL/71304_p_dog_clear_calc_lighting_level.sql new file mode 100644 index 0000000..cf40498 --- /dev/null +++ b/static/MySQL/71304_p_dog_clear_calc_lighting_level.sql @@ -0,0 +1,45 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_clear_calc_lighting_level; +DROP PROCEDURE IF EXISTS parts.p_lighting_level_clear_calc_lighting_level; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_clear_calc_lighting_level ( + IN a_guid BINARY(36) + , IN a_debug BIT +) +BEGIN + DECLARE v_time_start TIMESTAMP(6); + SET v_time_start := CURRENT_TIMESTAMP(6); + + CALL parts.p_core_validate_guid ( a_guid ); + + START TRANSACTION; + + DELETE LIGHTING_LEVELS_T + FROM parts.DOG_Lighting_Level_Temp LIGHTING_LEVELS_T + WHERE LIGHTING_LEVELS_T.GUID = a_guid + ; + + COMMIT; + + IF a_debug = 1 THEN + CALL parts.p_debug_timing_reporting( v_time_start ); + END IF; +END // +DELIMITER ; + +/* + +CALL parts.p_dog_clear_calc_lighting_level ( + 'crips ' -- a_guid + , 1 -- debug +); + +SELECT * +FROM parts.DOG_Calc_User_Temp +WHERE GUID = 'chips ' +; + +*/ diff --git a/static/MySQL/71304_p_dog_get_many_lighting_level.sql b/static/MySQL/71304_p_dog_get_many_lighting_level.sql new file mode 100644 index 0000000..d57241e --- /dev/null +++ b/static/MySQL/71304_p_dog_get_many_lighting_level.sql @@ -0,0 +1,375 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_get_many_lighting_level; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_get_many_lighting_level ( + IN a_id_user INT + , IN a_get_all_lighting_level BIT + , IN a_get_inactive_lighting_level BIT + , IN a_ids_lighting_level TEXT + , IN a_names_lighting_level TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_guid BINARY(36); + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_lighting_level + , ERROR_TYPE.text_lighting_level + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_guid := UUID(); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + SET a_id_user := IFNULL(a_id_user, 0); + /* + SET a_get_all_lighting_level := IFNULL(a_get_all_lighting_level, 0); + SET a_get_inactive_lighting_level := IFNULL(a_get_inactive_lighting_level, 0); + SET a_ids_lighting_level := TRIM(IFNULL(a_ids_lighting_level, '')); + SET a_names_lighting_level := TRIM(IFNULL(a_names_lighting_level, '')); + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + */ + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_id_user + , a_get_all_lighting_level + , a_get_inactive_lighting_level + , a_ids_lighting_level + , a_names_lighting_level + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_guid + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Lighting_Level; + + CREATE TEMPORARY TABLE tmp_Lighting_Level ( + id_lighting_level INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + -- Permissions + IF a_debug = 1 THEN + SELECT + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = v_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR; + SELECT * FROM tmp_Msg_Error t_ERROR; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Lighting_Levels.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + v_guid + , 0 -- a_debug + ); + + + -- Call Lighting_Level Calc + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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 + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_lighting_level -- a_get_all_lighting_level + , a_get_inactive_lighting_level -- a_get_inactive_lighting_level + , a_ids_lighting_level -- a_ids_lighting_level + , a_names_lighting_level -- a_names_lighting_level + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_lighting_level ( + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_lighting_level -- a_get_all_lighting_level + , a_get_inactive_lighting_level -- a_get_inactive_lighting_level + , a_ids_lighting_level -- a_ids_lighting_level + , a_names_lighting_level -- a_names_lighting_level + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM parts.DOG_Lighting_Level_Temp; + SELECT * FROM parts.DOG_Lighting_Level_Temp; + END IF; + + INSERT INTO tmp_Lighting_Level ( + id_lighting_level + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + LIGHTING_LEVEL_T.id_lighting_level + , LIGHTING_LEVEL_T.code + , LIGHTING_LEVEL_T.name + , LIGHTING_LEVEL_T.active + + , LIGHTING_LEVEL_T.does_meet_id_filters + , LIGHTING_LEVEL_T.does_meet_non_id_filters + FROM parts.DOG_Lighting_Level_Temp LIGHTING_LEVEL_T + WHERE LIGHTING_LEVEL_T.GUID = v_guid + ; + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM tmp_Lighting_Level; + SELECT * FROM tmp_Lighting_Level; + END IF; + END IF; + + -- Filter outputs + IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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_Lighting_Level; + END IF; + + DELETE FROM tmp_Lighting_Level; + END IF; + + + -- Outputs + -- Lighting_Levels + SELECT + t_LIGHTING_LEVELS.id_lighting_level + , t_LIGHTING_LEVELS.code + , t_LIGHTING_LEVELS.name + , t_LIGHTING_LEVELS.active + + , t_LIGHTING_LEVELS.does_meet_id_filters + , t_LIGHTING_LEVELS.does_meet_non_id_filters + FROM tmp_Lighting_Level t_LIGHTING_LEVELS + LEFT JOIN parts.DOG_Lighting_Level LIGHTING_LEVELS ON t_LIGHTING_LEVELS.id_lighting_level = LIGHTING_LEVELS.id_lighting_level + ORDER BY t_LIGHTING_LEVELS.name + ; + + -- Errors + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_lighting_level + , ERROR_TYPE.text_lighting_level + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Lighting_Level; + END IF; + + CALL parts.p_dog_clear_calc_lighting_level( + v_guid -- a_guid + , 0 -- a_debug + ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Lighting_Level; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_get_many_lighting_level ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_lighting_level + , 0 -- a_get_inactive_lighting_level + , '' -- a_ids_lighting_level + , '' -- a_names_lighting_level + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + + +CALL demo.p_dog_get_many_lighting_level ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_lighting_level + , 0 -- a_get_inactive_lighting_level + , '' -- a_ids_lighting_level + , 'pat,point' -- a_names_lighting_level + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + +*/ \ No newline at end of file diff --git a/static/MySQL/71308_p_dog_calc_assessment.sql b/static/MySQL/71308_p_dog_calc_assessment.sql new file mode 100644 index 0000000..9ca4a79 --- /dev/null +++ b/static/MySQL/71308_p_dog_calc_assessment.sql @@ -0,0 +1,1132 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_calc_assessment; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_calc_assessment ( + IN a_guid BINARY(36) + , IN a_id_user INT + , IN a_get_all_assessment BIT + , IN a_get_inactive_assessment BIT + , IN a_ids_assessment TEXT + , IN a_notes_assessment TEXT + , IN a_min_temperature_assessment DECIMAL(5, 2) + , IN a_max_temperature_assessment DECIMAL(5, 2) + , IN a_get_all_weather BIT + , IN a_get_inactive_weather BIT + , IN a_ids_weather TEXT + , IN a_names_weather TEXT + , IN a_get_all_lighting_level BIT + , IN a_get_inactive_lighting_level BIT + , IN a_ids_lighting_level TEXT + , IN a_names_lighting_level TEXT + , IN a_get_all_location BIT + , IN a_get_inactive_location BIT + , IN a_ids_location TEXT + , IN a_names_location TEXT + , IN a_get_all_user_handler BIT + , IN a_get_inactive_user_handler BIT + , IN a_ids_user_handler TEXT + -- , IN a_auth0_ids_user_handler TEXT + , IN a_names_user_handler TEXT + , IN a_emails_user_handler TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_show_errors BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_has_filter_assessment_id BIT; + DECLARE v_has_filter_assessment_notes BIT; + DECLARE v_has_filter_assessment_temperature_max BIT; + DECLARE v_has_filter_assessment_temperature_min BIT; + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Assessment ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error_Calc_Assessment ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_Assessment t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error_Calc_Assessment; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + + CALL parts.p_core_validate_guid ( a_guid ); + + SET a_id_user := IFNULL(a_id_user, 0); + SET a_get_all_assessment := IFNULL(a_get_all_assessment, 0); + SET a_get_inactive_assessment := IFNULL(a_get_inactive_assessment, 0); + SET a_ids_assessment := TRIM(IFNULL(a_ids_assessment, '')); + SET a_notes_assessment := TRIM(IFNULL(a_notes_assessment, '')); + -- a_min_temperature_assessment + -- SET a_max_temperature_assessment := + -- Foreign key filters corected in their Calc Stored Procedures + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + SET a_show_errors := IFNULL(a_show_errors, 0); + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_guid + , a_id_user + , a_get_all_assessment + , a_get_inactive_assessment + , a_ids_assessment + , a_notes_assessment + , a_min_temperature_assessment + , a_max_temperature_assessment + , a_get_all_weather + , a_get_inactive_weather + , a_ids_weather + , a_names_weather + , a_get_all_lighting_level + , a_get_inactive_lighting_level + , a_ids_lighting_level + , a_names_lighting_level + , a_get_all_location + , a_get_inactive_location + , a_ids_location + , a_names_location + , a_get_all_user_handler + , a_get_inactive_user_handler + , a_ids_user_handler + -- , a_auth0_ids + , a_names_user_handler + , a_emails_user_handler + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_show_errors + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Notes_Calc_Assessment; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Assessment; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Assessment; + DROP TEMPORARY TABLE IF EXISTS tmp_Assessment_Calc_Assessment; + DROP TEMPORARY TABLE IF EXISTS tmp_User_Handler_Calc_Assessment; + DROP TEMPORARY TABLE IF EXISTS tmp_Location_Calc_Assessment; + DROP TEMPORARY TABLE IF EXISTS tmp_Lighting_Level_Calc_Assessment; + DROP TEMPORARY TABLE IF EXISTS tmp_Weather_Calc_Assessment; + + CREATE TEMPORARY TABLE tmp_Weather_Calc_Assessment ( + id_weather INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE tmp_Lighting_Level_Calc_Assessment ( + id_lighting_level INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE tmp_Location_Calc_Assessment ( + id_location INT NOT NULL + , id_location_parent INT + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE tmp_User_Handler_Calc_Assessment ( + id_user INT NOT NULL + , id_permission_required INT NOT NULL + , priority_access_level_required INT NOT NULL + , is_super_user BIT + , priority_access_level_user INT + , has_access BIT + , can_view BIT + , can_edit BIT + , can_admin BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + ); + + CREATE TEMPORARY TABLE tmp_Assessment_Calc_Assessment ( + id_assessment INT NOT NULL + , id_weather INT + , id_lighting_level INT + , id_location INT + , id_user_handler INT + , notes TEXT + , active BIT + , temperature_celcius DECIMAL(5, 2) + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Assessment ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_Assessment ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Id_Calc_Assessment; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Notes_Calc_Assessment ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Notes_Calc_Assessment; + + SET v_has_filter_assessment_id := CASE WHEN a_ids_assessment <> '' THEN 1 ELSE 0 END; + SET v_has_filter_assessment_notes := CASE WHEN a_notes_assessment <> '' THEN 1 ELSE 0 END; + SET v_has_filter_assessment_temperature_min := NOT ISNULL(a_min_temperature_assessment); + SET v_has_filter_assessment_temperature_max := NOT ISNULL(a_max_temperature_assessment); + + -- Call Calc Weather + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Assessment t_ERROR INNER JOIN parts.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 + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_weather -- a_get_all_weather + , a_get_inactive_weather -- a_get_inactive_weather + , a_ids_weather -- a_ids_weather + , a_names_weather -- a_names_weather + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_weather ( + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_weather -- a_get_all_weather + , a_get_inactive_weather -- a_get_inactive_weather + , a_ids_weather -- a_ids_weather + , a_names_weather -- a_names_weather + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + INSERT INTO tmp_Weather_Calc_Assessment ( + id_weather + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + WEATHER_T.id_weather + , WEATHER_T.code + , WEATHER_T.name + , WEATHER_T.active + + , WEATHER_T.does_meet_id_filters + , WEATHER_T.does_meet_non_id_filters + FROM parts.DOG_Weather_Temp WEATHER_T + WHERE WEATHER_T.GUID = a_guid + ; + + IF a_debug = 1 THEN + SELECT * FROM tmp_Weather_Calc_Assessment; + END IF; + END IF; + + -- Call Calc Lighting_Level + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Assessment t_ERROR INNER JOIN parts.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 + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_lighting_level -- a_get_all_lighting_level + , a_get_inactive_lighting_level -- a_get_inactive_lighting_level + , a_ids_lighting_level -- a_ids_lighting_level + , a_names_lighting_level -- a_names_lighting_level + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_lighting_level ( + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_lighting_level -- a_get_all_lighting_level + , a_get_inactive_lighting_level -- a_get_inactive_lighting_level + , a_ids_lighting_level -- a_ids_lighting_level + , a_names_lighting_level -- a_names_lighting_level + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + INSERT INTO tmp_Lighting_Level_Calc_Assessment ( + id_lighting_level + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + LIGHTING_LEVEL_T.id_lighting_level + , LIGHTING_LEVEL_T.code + , LIGHTING_LEVEL_T.name + , LIGHTING_LEVEL_T.active + + , LIGHTING_LEVEL_T.does_meet_id_filters + , LIGHTING_LEVEL_T.does_meet_non_id_filters + FROM parts.DOG_Lighting_Level_Temp LIGHTING_LEVEL_T + WHERE LIGHTING_LEVEL_T.GUID = a_guid + ; + + IF a_debug = 1 THEN + SELECT * FROM tmp_Lighting_Level_Calc_Assessment; + END IF; + END IF; + + -- Call Calc Location + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Assessment t_ERROR INNER JOIN parts.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 + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_location -- a_get_all_location + , a_get_inactive_location -- a_get_inactive_location + , a_ids_location -- a_ids_location + , a_names_location -- a_names_location + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_location ( + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_location -- a_get_all_location + , a_get_inactive_location -- a_get_inactive_location + , a_ids_location -- a_ids_location + , a_names_location -- a_names_location + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + INSERT INTO tmp_Location_Calc_Assessment ( + id_location + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + LOCATION_T.id_location + , LOCATION_T.code + , LOCATION_T.name + , LOCATION_T.active + + , LOCATION_T.does_meet_id_filters + , LOCATION_T.does_meet_non_id_filters + FROM parts.DOG_Location_Temp LOCATION_T + WHERE LOCATION_T.GUID = a_guid + ; + + IF a_debug = 1 THEN + SELECT * FROM tmp_Location_Calc_Assessment; + END IF; + END IF; + + -- Call Calc User + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Assessment t_ERROR INNER JOIN parts.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 + a_guid -- a_guid + , a_get_all_user_handler -- a_get_all_user + , a_get_inactive_user_handler -- a_get_inactive_user + , a_ids_user_handler -- a_ids_user + , NULL -- a_auth0_ids + , a_names_user_handler -- a_names_user + , a_emails_user_handler -- a_emails_user + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_view -- a_ids_permission_required + , v_id_access_level_view -- a_ids_access_level_required + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user ( + a_guid -- a_guid + , a_get_all_user_handler -- a_get_all_user + , a_get_inactive_user_handler -- a_get_inactive_user + , a_ids_user_handler -- a_ids_user + , NULL -- a_auth0_ids + , a_names_user_handler -- a_names_user + , a_emails_user_handler -- a_emails_user + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , v_id_permission_dog_view -- a_ids_permission_required + , v_id_access_level_view -- a_ids_access_level_required + , 0 -- a_show_errors + , 0 -- a_debug + ); + + INSERT INTO tmp_User_Handler_Calc_Assessment ( + id_user + , id_permission_required + , priority_access_level_required + , is_super_user + , priority_access_level_user + , has_access + , can_view + , can_edit + , can_admin + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + CALC_USER_T.id_user + , CALC_USER_T.id_permission_required + , CALC_USER_T.priority_access_level_required + , CALC_USER_T.is_super_user + , CALC_USER_T.priority_access_level_user + , CALC_USER_T.has_access + , CALC_USER_T.can_view + , CALC_USER_T.can_edit + , CALC_USER_T.can_admin + + , CALC_USER_T.does_meet_id_filters + , CALC_USER_T.does_meet_non_id_filters + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = a_guid + ; + + IF a_debug = 1 THEN + SELECT * FROM tmp_User_Handler_Calc_Assessment; + END IF; + END IF; + + -- Assessments + IF v_has_filter_assessment_id = 1 THEN + CALL parts.p_core_split(a_guid, a_ids_assessment, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Id_Calc_Assessment ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF v_has_filter_assessment_notes = 1 THEN + CALL parts.p_core_split(a_guid, a_notes_assessment, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Notes_Calc_Assessment ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Assessment t_ERROR INNER JOIN parts.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 EXISTS ( + SELECT * + FROM tmp_Split_Id_Calc_Assessment t_SPLIT_ID + LEFT JOIN parts.DOG_Assessment ASSESSMENT ON t_SPLIT_ID.as_int = ASSESSMENT.id_assessment + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(ASSESSMENT.id_assessment) + OR ( + ASSESSMENT.active = 0 + AND a_get_inactive_assessment = 0 + ) + ) THEN + INSERT INTO tmp_Msg_Error_Calc_Assessment ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Invalid or inactive Assessment IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split_Id_Calc_Assessment t_SPLIT_ID + LEFT JOIN parts.DOG_Assessment ASSESSMENT ON t_SPLIT_ID.as_int = ASSESSMENT.id_assessment + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(ASSESSMENT.id_assessment) + OR ( + ASSESSMENT.active = 0 + AND a_get_inactive_assessment = 0 + ) + ; + /* Don't error on names, or notes not found + ELSEIF EXISTS () + */ + ELSE + IF a_debug = 1 THEN + SELECT 'Assessment Filters'; + WITH + Assessment_Id_Filter AS ( + SELECT ASSESSMENT.id_assessment + FROM tmp_Split_Id_Calc_Assessment t_SPLIT_ID + INNER JOIN parts.DOG_Assessment ASSESSMENT ON t_SPLIT_ID.as_int = ASSESSMENT.id_assessment + ) + , Assessment_Notes_Filter AS ( + SELECT ASSESSMENT.id_assessment + FROM tmp_Split_Notes_Calc_Assessment t_SPLIT_NOTES + INNER JOIN parts.DOG_Assessment ASSESSMENT ON ASSESSMENT.notes LIKE CONCAT('%', t_SPLIT_NOTES.substring, '%') + WHERE + t_SPLIT_NOTES.substring IS NOT NULL + AND t_SPLIT_NOTES.substring <> '' + ) + , Assessment_Filters AS ( + SELECT + ASSESSMENT_COMBINED.id_assessment + , MAX(ASSESSMENT_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(ASSESSMENT_COMBINED.does_meet_notes_filter) AS does_meet_notes_filter + FROM ( + SELECT + ASSESSMENT_ID_FILTER.id_assessment + , 1 AS does_meet_id_filter + , 0 AS does_meet_notes_filter + FROM Assessment_Id_Filter ASSESSMENT_ID_FILTER + UNION + SELECT + ASSESSMENT_NOTES_FILTER.id_assessment + , 0 AS does_meet_id_filter + , 1 AS does_meet_notes_filter + FROM Assessment_Notes_Filter ASSESSMENT_NOTES_FILTER + ) ASSESSMENT_COMBINED + GROUP BY ASSESSMENT_COMBINED.id_assessment + ) + SELECT + ASSESSMENT.id_assessment + , ASSESSMENT.id_weather + , ASSESSMENT.id_lighting_level + , ASSESSMENT.id_location + , ASSESSMENT.id_user_handler + , ASSESSMENT.notes + , ASSESSMENT.temperature_celcius + , ASSESSMENT.active + , CASE WHEN + v_has_filter_assessment_id = 0 + OR ASSESSMENT_FILTERS.does_meet_id_filter = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_assessment_notes = 0 + AND v_has_filter_assessment_temperature_min = 0 + AND v_has_filter_assessment_temperature_max = 0 + ) + OR ASSESSMENT_FILTERS.does_meet_notes_filter = 1 + OR ( + v_has_filter_assessment_temperature_min = 0 + OR ( + v_has_filter_assessment_temperature_min = 1 + AND ASSESSMENT.temperature_celcius >= v_has_filter_assessment_temperature_min + ) + ) + OR ( + v_has_filter_assessment_temperature_max = 0 + OR ( + v_has_filter_assessment_temperature_max = 1 + AND ASSESSMENT.temperature_celcius <= v_has_filter_assessment_temperature_max + ) + ) + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.DOG_Assessment ASSESSMENT + LEFT JOIN Assessment_Filters ASSESSMENT_FILTERS ON ASSESSMENT.id_assessment = ASSESSMENT_FILTERS.id_assessment + WHERE + ( + a_get_all_assessment = 1 + OR ( + v_has_filter_assessment_id = 1 + AND ASSESSMENT_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_assessment_notes = 1 + AND ASSESSMENT_FILTERS.does_meet_notes_filter = 1 + ) + OR ( + v_has_filter_assessment_temperature_min = 1 + AND ASSESSMENT.temperature_celcius >= v_has_filter_assessment_temperature_min + ) + OR ( + v_has_filter_assessment_temperature_max = 1 + AND ASSESSMENT.temperature_celcius <= v_has_filter_assessment_temperature_max + ) + ) + AND ( + a_get_inactive_assessment = 1 + OR ASSESSMENT.active = 1 + ) + ; + END IF; + INSERT INTO tmp_Assessment_Calc_Assessment ( + id_assessment + , id_weather + , id_lighting_level + , id_location + , id_user_handler + , notes + , temperature_celcius + , active + , does_meet_id_filters + , does_meet_non_id_filters + ) + WITH + Assessment_Id_Filter AS ( + SELECT ASSESSMENT.id_assessment + FROM tmp_Split_Id_Calc_Assessment t_SPLIT_ID + INNER JOIN parts.DOG_Assessment ASSESSMENT ON t_SPLIT_ID.as_int = ASSESSMENT.id_assessment + ) + , Assessment_Notes_Filter AS ( + SELECT ASSESSMENT.id_assessment + FROM tmp_Split_Notes_Calc_Assessment t_SPLIT_NOTES + INNER JOIN parts.DOG_Assessment ASSESSMENT ON ASSESSMENT.notes LIKE CONCAT('%', t_SPLIT_NOTES.substring, '%') + WHERE + t_SPLIT_NOTES.substring IS NOT NULL + AND t_SPLIT_NOTES.substring <> '' + ) + , Assessment_Filters AS ( + SELECT + ASSESSMENT_COMBINED.id_assessment + , MAX(ASSESSMENT_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(ASSESSMENT_COMBINED.does_meet_notes_filter) AS does_meet_notes_filter + FROM ( + SELECT + ASSESSMENT_ID_FILTER.id_assessment + , 1 AS does_meet_id_filter + , 0 AS does_meet_notes_filter + FROM Assessment_Id_Filter ASSESSMENT_ID_FILTER + UNION + SELECT + ASSESSMENT_NOTES_FILTER.id_assessment + , 0 AS does_meet_id_filter + , 1 AS does_meet_notes_filter + FROM Assessment_Notes_Filter ASSESSMENT_NOTES_FILTER + ) ASSESSMENT_COMBINED + GROUP BY ASSESSMENT_COMBINED.id_assessment + ) + SELECT + ASSESSMENT.id_assessment + , ASSESSMENT.id_weather + , ASSESSMENT.id_lighting_level + , ASSESSMENT.id_location + , ASSESSMENT.id_user_handler + , ASSESSMENT.notes + , ASSESSMENT.temperature_celcius + , ASSESSMENT.active + , CASE WHEN + v_has_filter_assessment_id = 0 + OR ASSESSMENT_FILTERS.does_meet_id_filter = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_assessment_notes = 0 + AND v_has_filter_assessment_temperature_min = 0 + AND v_has_filter_assessment_temperature_max = 0 + ) + OR ASSESSMENT_FILTERS.does_meet_notes_filter = 1 + OR ( + v_has_filter_assessment_temperature_min = 0 + OR ( + v_has_filter_assessment_temperature_min = 1 + AND ASSESSMENT.temperature_celcius >= v_has_filter_assessment_temperature_min + ) + ) + OR ( + v_has_filter_assessment_temperature_max = 0 + OR ( + v_has_filter_assessment_temperature_max = 1 + AND ASSESSMENT.temperature_celcius <= v_has_filter_assessment_temperature_max + ) + ) + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.DOG_Assessment ASSESSMENT + LEFT JOIN Assessment_Filters ASSESSMENT_FILTERS ON ASSESSMENT.id_assessment = ASSESSMENT_FILTERS.id_assessment + WHERE + ( + a_get_all_assessment = 1 + OR ( + v_has_filter_assessment_id = 1 + AND ASSESSMENT_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_assessment_notes = 1 + AND ASSESSMENT_FILTERS.does_meet_notes_filter = 1 + ) + OR ( + v_has_filter_assessment_temperature_min = 1 + AND ASSESSMENT.temperature_celcius >= v_has_filter_assessment_temperature_min + ) + OR ( + v_has_filter_assessment_temperature_max = 1 + AND ASSESSMENT.temperature_celcius <= v_has_filter_assessment_temperature_max + ) + ) + AND ( + a_get_inactive_assessment = 1 + OR ASSESSMENT.active = 1 + ) + ; + END IF; + END IF; + + DELETE FROM tmp_Split_Id_Calc_Assessment; + DELETE FROM tmp_Split_Notes_Calc_Assessment; + + IF a_debug = 1 THEN + SELECT 'After get Assessments'; + SELECT * FROM tmp_Assessment_Calc_Assessment; + END IF; + + -- Filter records + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Assessment t_ERROR INNER JOIN parts.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 + DELETE t_ASSESSMENT + FROM tmp_Assessment_Calc_Assessment t_ASSESSMENT + LEFT JOIN tmp_Weather_Calc_Assessment t_WEATHER ON t_ASSESSMENT.id_weather = t_WEATHER.id_weather + LEFT JOIN tmp_Lighting_Level_Calc_Assessment t_LIGHTING_LEVEL ON t_ASSESSMENT.id_lighting_level = t_LIGHTING_LEVEL.id_lighting_level + LEFT JOIN tmp_Location_Calc_Assessment t_LOCATION ON t_ASSESSMENT.id_location = t_LOCATION.id_location + LEFT JOIN tmp_User_Handler_Calc_Assessment t_USER_HANDLER ON t_ASSESSMENT.id_user_handler = t_USER_HANDLER.id_user + WHERE + ( + a_require_all_id_search_filters_met = 1 + AND ( + t_ASSESSMENT.does_meet_id_filters = 0 + OR IFNULL(t_WEATHER.does_meet_id_filters, 1) = 0 + OR IFNULL(t_LIGHTING_LEVEL.does_meet_id_filters, 1) = 0 + OR IFNULL(t_LOCATION.does_meet_id_filters, 1) = 0 + OR IFNULL(t_USER_HANDLER.does_meet_id_filters, 1) = 0 + ) + ) + OR ( + a_require_all_non_id_search_filters_met = 1 + AND ( + t_ASSESSMENT.does_meet_non_id_filters = 0 + OR IFNULL(t_WEATHER.does_meet_non_id_filters, 1) = 0 + OR IFNULL(t_LIGHTING_LEVEL.does_meet_non_id_filters, 1) = 0 + OR IFNULL(t_LOCATION.does_meet_non_id_filters, 1) = 0 + OR IFNULL(t_USER_HANDLER.does_meet_non_id_filters, 1) = 0 + ) + ) + OR ( + a_require_any_id_search_filters_met = 1 + AND t_ASSESSMENT.does_meet_id_filters = 0 + AND IFNULL(t_WEATHER.does_meet_id_filters, 1) = 0 + AND IFNULL(t_LIGHTING_LEVEL.does_meet_id_filters, 1) = 0 + AND IFNULL(t_LOCATION.does_meet_id_filters, 1) = 0 + AND IFNULL(t_USER_HANDLER.does_meet_id_filters, 1) = 0 + ) + OR ( + a_require_any_non_id_search_filters_met = 1 + AND t_ASSESSMENT.does_meet_non_id_filters = 0 + AND IFNULL(t_WEATHER.does_meet_non_id_filters, 1) = 0 + AND IFNULL(t_LIGHTING_LEVEL.does_meet_non_id_filters, 1) = 0 + AND IFNULL(t_LOCATION.does_meet_non_id_filters, 1) = 0 + AND IFNULL(t_USER_HANDLER.does_meet_non_id_filters, 1) = 0 + ) + ; + END IF; + + IF a_debug = 1 THEN + SELECT 'After filter Assessments'; + SELECT * FROM tmp_Weather_Calc_Assessment; + SELECT * FROM tmp_Lighting_Level_Calc_Assessment; + SELECT * FROM tmp_Location_Calc_Assessment; + SELECT * FROM tmp_User_Handler_Calc_Assessment; + SELECT * FROM tmp_Assessment_Calc_Assessment; + END IF; + + + -- Permissions + IF a_debug = 1 THEN + SELECT + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = a_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error_Calc_Assessment t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error_Calc_Assessment ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Dogs and Button Icons.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT 'Before non-permitted data deletion'; + SELECT * FROM tmp_Weather_Calc_Assessment; + SELECT * FROM tmp_Lighting_Level_Calc_Assessment; + SELECT * FROM tmp_Location_Calc_Assessment; + SELECT * FROM tmp_User_Handler_Calc_Assessment; + SELECT * FROM tmp_Assessment_Calc_Assessment; + SELECT * FROM tmp_Msg_Error_Calc_Assessment; + END IF; + + IF EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Assessment t_ERROR INNER JOIN parts.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_Weather_Calc_Assessment; + SELECT * FROM tmp_Lighting_Level_Calc_Assessment; + SELECT * FROM tmp_Location_Calc_Assessment; + SELECT * FROM tmp_User_Handler_Calc_Assessment; + SELECT * FROM tmp_Assessment_Calc_Assessment; + END IF; + + DELETE FROM tmp_Assessment_Calc_Assessment; + DELETE FROM tmp_User_Handler_Calc_Assessment; + DELETE FROM tmp_Location_Calc_Assessment; + DELETE FROM tmp_Lighting_Level_Calc_Assessment; + DELETE FROM tmp_Weather_Calc_Assessment; + END IF; + + IF a_debug = 1 THEN + SELECT 'After non-permitted data deletion'; + END IF; + + -- Outputs + START TRANSACTION; + -- Assessments + INSERT INTO parts.DOG_Assessment_Temp ( + guid + , id_assessment + , id_weather + , id_lighting_level + , id_location + , id_user_handler + , notes + , temperature_celcius + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + a_guid + , t_ASSESSMENT.id_assessment + , t_ASSESSMENT.id_weather + , t_ASSESSMENT.id_lighting_level + , t_ASSESSMENT.id_location + , t_ASSESSMENT.id_user_handler + , ASSESSMENT.notes + , ASSESSMENT.temperature_celcius + , ASSESSMENT.active + + , t_ASSESSMENT.does_meet_id_filters + , t_ASSESSMENT.does_meet_non_id_filters + FROM parts.DOG_Assessment ASSESSMENT + INNER JOIN tmp_Assessment_Calc_Assessment t_ASSESSMENT ON ASSESSMENT.id_assessment = t_ASSESSMENT.id_assessment + ; + COMMIT; + + -- Errors + IF a_show_errors = 1 THEN + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_Assessment t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + END IF; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Weather_Calc_Assessment; + SELECT * FROM tmp_Lighting_Level_Calc_Assessment; + SELECT * FROM tmp_Location_Calc_Assessment; + SELECT * FROM tmp_User_Handler_Calc_Assessment; + SELECT * FROM tmp_Assessment_Calc_Assessment; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Notes_Calc_Assessment; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Assessment; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Assessment; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Assessment; + DROP TEMPORARY TABLE IF EXISTS tmp_Assessment_Calc_Assessment; + DROP TEMPORARY TABLE IF EXISTS tmp_Image_Calc_Assessment; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_calc_assessment ( + 'slippery ' -- a_guid + , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_assessment + , 0 -- a_get_inactive_assessment + , '' -- a_ids_assessment + , '' -- a_notes_assessment + , NULL -- a_min_temperature_assessment + , NULL -- a_max_temperature_assessment + , 1 -- a_get_all_weather + , 0 -- a_get_inactive_weather + , '' -- a_ids_weather + , '' -- a_names_weather + , 1 -- a_get_all_lighting_level + , 0 -- a_get_inactive_lighting_level + , '' -- a_ids_lighting_level + , '' -- a_names_lighting_level + , 1 -- a_get_all_location + , 0 -- a_get_inactive_location + , '' -- a_ids_location + , '' -- a_names_location + , 1 -- a_get_all_user_handler + , 0 -- a_get_inactive_user_handler + , '' -- a_ids_user_handler + -- , IN a_auth0_ids_user_handler TEXT + , '' -- a_names_user_handler + , '' -- a_emails_user_handler + , 0 -- a_require_all_id_search_filters_met + , 0 -- 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 + , 0 -- a_show_errors + , 0 -- a_debug +); + +CALL parts.p_dog_calc_assessment ( + 'slippery ' -- a_guid + , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_assessment + , 0 -- a_get_inactive_assessment + , '' -- a_ids_assessment + , 'pat,point' -- a_notes_assessment + , 1 -- a_get_all_weather + , 0 -- a_get_inactive_weather + , '' -- a_ids_weather + , '' -- a_names_weather + , 1 -- a_get_all_lighting_level + , 0 -- a_get_inactive_lighting_level + , '' -- a_ids_lighting_level + , '' -- a_names_lighting_level + , 1 -- a_get_all_location + , 0 -- a_get_inactive_location + , '' -- a_ids_location + , '' -- a_names_location + , 1 -- a_get_all_user_handler + , 0 -- a_get_inactive_user_handler + , '' -- a_ids_user_handler + -- , IN a_auth0_ids_user_handler TEXT + , '' -- a_names_user_handler + , '' -- a_emails_user_handler + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_show_errors + , 0 -- a_debug +); +SELECT * +FROM parts.DOG_Assessment_Temp +; + +CALL parts.p_dog_clear_calc_assessment ( + 'slippery ' -- a_guid + , 1 -- debug +); + +-- DELETE FROM parts.DOG_Assessment_Temp; + +*/ diff --git a/static/MySQL/71308_p_dog_clear_calc_assessment.sql b/static/MySQL/71308_p_dog_clear_calc_assessment.sql new file mode 100644 index 0000000..0a171d0 --- /dev/null +++ b/static/MySQL/71308_p_dog_clear_calc_assessment.sql @@ -0,0 +1,45 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_clear_calc_assessment; +DROP PROCEDURE IF EXISTS parts.p_assessment_clear_calc_assessment; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_clear_calc_assessment ( + IN a_guid BINARY(36) + , IN a_debug BIT +) +BEGIN + DECLARE v_time_start TIMESTAMP(6); + SET v_time_start := CURRENT_TIMESTAMP(6); + + CALL parts.p_core_validate_guid ( a_guid ); + + START TRANSACTION; + + DELETE ASSESSMENTS_T + FROM parts.DOG_Assessment_Temp ASSESSMENTS_T + WHERE ASSESSMENTS_T.GUID = a_guid + ; + + COMMIT; + + IF a_debug = 1 THEN + CALL parts.p_debug_timing_reporting( v_time_start ); + END IF; +END // +DELIMITER ; + +/* + +CALL parts.p_dog_clear_calc_assessment ( + 'crips ' -- a_guid + , 1 -- debug +); + +SELECT * +FROM parts.DOG_Calc_User_Temp +WHERE GUID = 'chips ' +; + +*/ diff --git a/static/MySQL/71308_p_dog_get_many_assessment.sql b/static/MySQL/71308_p_dog_get_many_assessment.sql new file mode 100644 index 0000000..cfd395c --- /dev/null +++ b/static/MySQL/71308_p_dog_get_many_assessment.sql @@ -0,0 +1,524 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_get_many_assessment; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_get_many_assessment ( + IN a_id_user INT + , IN a_get_all_assessment BIT + , IN a_get_inactive_assessment BIT + , IN a_ids_assessment TEXT + , IN a_notes_assessment TEXT + , IN a_min_temperature_assessment DECIMAL(5, 2) + , IN a_max_temperature_assessment DECIMAL(5, 2) + , IN a_get_all_weather BIT + , IN a_get_inactive_weather BIT + , IN a_ids_weather TEXT + , IN a_names_weather TEXT + , IN a_get_all_lighting_level BIT + , IN a_get_inactive_lighting_level BIT + , IN a_ids_lighting_level TEXT + , IN a_names_lighting_level TEXT + , IN a_get_all_location BIT + , IN a_get_inactive_location BIT + , IN a_ids_location TEXT + , IN a_names_location TEXT + , IN a_get_all_user_handler BIT + , IN a_get_inactive_user_handler BIT + , IN a_ids_user_handler TEXT + -- , IN a_auth0_ids_user_handler TEXT + , IN a_names_user_handler TEXT + , IN a_emails_user_handler TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_guid BINARY(36); + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_guid := UUID(); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + SET a_id_user := IFNULL(a_id_user, 0); + /* filters handled by Calc Stored Procedure + */ + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_id_user + , a_get_all_assessment + , a_get_inactive_assessment + , a_ids_assessment + , a_notes_assessment + , a_min_temperature_assessment + , a_max_temperature_assessment + , a_get_all_weather + , a_get_inactive_weather + , a_ids_weather + , a_names_weather + , a_get_all_lighting_level + , a_get_inactive_lighting_level + , a_ids_lighting_level + , a_names_lighting_level + , a_get_all_location + , a_get_inactive_location + , a_ids_location + , a_names_location + , a_get_all_user_handler + , a_get_inactive_user_handler + , a_ids_user_handler + -- , a_auth0_ids + , a_names_user_handler + , a_emails_user_handler + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_guid + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Assessment; + + CREATE TEMPORARY TABLE tmp_Assessment ( + id_assessment INT NOT NULL + , id_weather INT + , id_lighting_level INT + , id_location INT + , id_user_handler INT + , notes TEXT + , temperature_celcius DECIMAL(5, 2) + , active BIT + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + -- Permissions + IF a_debug = 1 THEN + SELECT + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = v_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR; + SELECT * FROM tmp_Msg_Error t_ERROR; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Assessments.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + v_guid + , 0 -- a_debug + ); + + + -- Call Assessment Calc + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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 + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_assessment -- a_get_all_assessment + , a_get_inactive_assessment -- a_get_inactive_assessment + , a_ids_assessment -- a_ids_assessment + , a_notes_assessment -- a_notes_assessment + , a_min_temperature_assessment -- a_min_temperature_assessment + , a_max_temperature_assessment -- a_max_temperature_assessment + , a_get_all_weather -- a_get_all_weather + , a_get_inactive_weather -- a_get_inactive_weather + , a_ids_weather + , a_names_weather + , a_get_all_lighting_level + , a_get_inactive_lighting_level + , a_ids_lighting_level + , a_names_lighting_level + , a_get_all_location + , a_get_inactive_location + , a_ids_location + , a_names_location + , a_get_all_user_handler + , a_get_inactive_user_handler + , a_ids_user_handler + -- , a_auth0_ids + , a_names_user_handler + , a_emails_user_handler + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_assessment ( + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_assessment -- a_get_all_assessment + , a_get_inactive_assessment -- a_get_inactive_assessment + , a_ids_assessment -- a_ids_assessment + , a_notes_assessment -- a_notes_assessment + , a_min_temperature_assessment -- a_min_temperature_assessment + , a_max_temperature_assessment -- a_max_temperature_assessment + , a_get_all_weather -- a_get_all_weather + , a_get_inactive_weather -- a_get_inactive_weather + , a_ids_weather + , a_names_weather + , a_get_all_lighting_level + , a_get_inactive_lighting_level + , a_ids_lighting_level + , a_names_lighting_level + , a_get_all_location + , a_get_inactive_location + , a_ids_location + , a_names_location + , a_get_all_user_handler + , a_get_inactive_user_handler + , a_ids_user_handler + -- , a_auth0_ids + , a_names_user_handler + , a_emails_user_handler + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM parts.DOG_Assessment_Temp; + SELECT * FROM parts.DOG_Assessment_Temp; + END IF; + + INSERT INTO tmp_Assessment ( + id_assessment + , id_weather + , id_lighting_level + , id_location + , id_user_handler + , notes + , temperature_celcius + , active + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + ASSESSMENT_T.id_assessment + , ASSESSMENT_T.id_weather + , ASSESSMENT_T.id_lighting_level + , ASSESSMENT_T.id_location + , ASSESSMENT_T.id_user_handler + , ASSESSMENT_T.notes + , ASSESSMENT_T.temperature_celcius + , ASSESSMENT_T.active + + , ASSESSMENT_T.does_meet_id_filters + , ASSESSMENT_T.does_meet_non_id_filters + FROM parts.DOG_Assessment_Temp ASSESSMENT_T + WHERE ASSESSMENT_T.GUID = v_guid + ; + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM tmp_Assessment; + SELECT * FROM tmp_Assessment; + END IF; + END IF; + + -- Filter outputs + IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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_Assessment; + END IF; + + DELETE FROM tmp_Assessment; + END IF; + + + -- Outputs + -- Assessments + SELECT + t_ASSESSMENT.id_assessment + , t_ASSESSMENT.id_weather + , WEATHER.name AS name_weather + , t_ASSESSMENT.id_lighting_level + , LIGHTING_LEVEL.name AS name_lighting_level + , t_ASSESSMENT.id_location + , LOCATIONS.name AS name_location + , t_ASSESSMENT.id_user_handler + , USER.firstname AS firstname_user_handler + , USER.surname AS surname_user_handler + , t_ASSESSMENT.notes + , t_ASSESSMENT.temperature_celcius + , t_ASSESSMENT.active + + , t_ASSESSMENT.does_meet_id_filters + , t_ASSESSMENT.does_meet_non_id_filters + /* + , t_WEATHER.does_meet_id_filters_weather + , t_WEATHER.does_meet_non_id_filters_weather + , t_LIGHTING_LEVEL.does_meet_id_filters_lighting_level + , t_LIGHTING_LEVEL.does_meet_non_id_filters_lighting_level + , t_LOCATIONS.does_meet_id_filters_location + , t_LOCATIONS.does_meet_non_id_filters_location + , t_USER_HANDLER.does_meet_id_filters_user_handler + , t_USER_HANDLER.does_meet_non_id_filters_user_handler + */ + FROM tmp_Assessment t_ASSESSMENT + INNER JOIN parts.DOG_Assessment ASSESSMENT ON t_ASSESSMENT.id_assessment = ASSESSMENT.id_assessment + LEFT JOIN parts.DOG_Weather WEATHER ON t_ASSESSMENT.id_weather = WEATHER.id_weather + -- LEFT JOIN tmp_Weather t_WEATHER ON t_ASSESSMENT.id_weather = t_WEATHER.id_weather + LEFT JOIN parts.DOG_Lighting_Level LIGHTING_LEVEL ON t_ASSESSMENT.id_lighting_level = LIGHTING_LEVEL.id_lighting_level + -- LEFT JOIN tmp_Lighting_Level t_LIGHTING_LEVEL ON t_ASSESSMENT.id_lighting_level = LIGHTING_LEVEL.id_lighting_level + LEFT JOIN parts.DOG_Location LOCATIONS ON t_ASSESSMENT.id_location = LOCATIONS.id_location + -- LEFT JOIN tmp_Location t_LOCATIONS ON t_ASSESSMENT.id_location = t_LOCATIONS.id_location + LEFT JOIN parts.DOG_User USER ON t_ASSESSMENT.id_user_handler = USER.id_user + -- LEFT JOIN tmp_User t_USER_HANDLER ON t_ASSESSMENT.id_user_handler = t_USER_HANDLER.id_user + ORDER BY ASSESSMENT.created_on DESC + ; + + -- Errors + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Assessment; + END IF; + + CALL parts.p_dog_clear_calc_assessment( + v_guid -- a_guid + , 0 -- a_debug + ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Assessment; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_get_many_assessment ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_assessment + , 0 -- a_get_inactive_assessment + , '' -- a_ids_assessment + , '' -- a_notes_assessment + , NULL -- a_min_temperature_assessment + , NULL -- a_max_temperature_assessment + , 1 -- a_get_all_weather + , 0 -- a_get_inactive_weather + , '' -- a_ids_weather + , '' -- a_names_weather + , 1 -- a_get_all_lighting_level + , 0 -- a_get_inactive_lighting_level + , '' -- a_ids_lighting_level + , '' -- a_names_lighting_level + , 1 -- a_get_all_location + , 0 -- a_get_inactive_location + , '' -- a_ids_location + , '' -- a_names_location + , 1 -- a_get_all_user_handler + , 0 -- a_get_inactive_user_handler + , '' -- a_ids_user_handler + -- , IN a_auth0_ids_user_handler TEXT + , '' -- a_names_user_handler + , '' -- a_emails_user_handler + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + + +CALL demo.p_dog_get_many_assessment ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_assessment + , 0 -- a_get_inactive_assessment + , '' -- a_ids_assessment + , 'pat,point' -- a_notes_assessment + , NULL -- a_min_temperature_assessment + , NULL -- a_max_temperature_assessment + , 1 -- a_get_all_weather + , 0 -- a_get_inactive_weather + , '' -- a_ids_weather + , 'pat,point' -- a_names_weather + , 1 -- a_get_all_lighting_level + , 0 -- a_get_inactive_lighting_level + , '' -- a_ids_lighting_level + , 'pat,point' -- a_names_lighting_level + , 1 -- a_get_all_location + , 0 -- a_get_inactive_location + , '' -- a_ids_location + , 'pat,point' -- a_names_location + , 1 -- a_get_all_user_handler + , 0 -- a_get_inactive_user_handler + , '' -- a_ids_user_handler + -- , IN a_auth0_ids_user_handler TEXT + , 'pat,point' -- a_names_user_handler + , 'pat,point' -- a_emails_user_handler + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + +*/ \ No newline at end of file diff --git a/static/MySQL/71312_p_dog_calc_distraction_type.sql b/static/MySQL/71312_p_dog_calc_distraction_type.sql new file mode 100644 index 0000000..aa5f157 --- /dev/null +++ b/static/MySQL/71312_p_dog_calc_distraction_type.sql @@ -0,0 +1,549 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_calc_distraction_type; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_calc_distraction_type ( + IN a_guid BINARY(36) + , IN a_id_user INT + , IN a_get_all_distraction_type BIT + , IN a_get_inactive_distraction_type BIT + , IN a_ids_distraction_type TEXT + , IN a_names_distraction_type TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_show_errors BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_has_filter_distraction_type_id BIT; + DECLARE v_has_filter_distraction_type_name BIT; + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Distraction_Type ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error_Calc_Distraction_Type ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_Distraction_Type t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error_Calc_Distraction_Type; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + + CALL parts.p_core_validate_guid ( a_guid ); + + SET a_id_user := IFNULL(a_id_user, 0); + SET a_get_all_distraction_type := IFNULL(a_get_all_distraction_type, 0); + SET a_get_inactive_distraction_type := IFNULL(a_get_inactive_distraction_type, 0); + SET a_ids_distraction_type := TRIM(IFNULL(a_ids_distraction_type, '')); + SET a_names_distraction_type := TRIM(IFNULL(a_names_distraction_type, '')); + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + SET a_show_errors := IFNULL(a_show_errors, 0); + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_guid + , a_id_user + , a_get_all_distraction_type + , a_get_inactive_distraction_type + , a_ids_distraction_type + , a_names_distraction_type + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_show_errors + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Distraction_Type; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Distraction_Type; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Distraction_Type; + DROP TEMPORARY TABLE IF EXISTS tmp_Distraction_Type_Calc_Distraction_Type; + + CREATE TEMPORARY TABLE tmp_Distraction_Type_Calc_Distraction_Type ( + id_type INT NOT NULL + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Distraction_Type ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_Distraction_Type ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Id_Calc_Distraction_Type; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name_Calc_Distraction_Type ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Name_Calc_Distraction_Type; + + SET v_has_filter_distraction_type_id = CASE WHEN a_ids_distraction_type <> '' THEN 1 ELSE 0 END; + SET v_has_filter_distraction_type_name = CASE WHEN a_names_distraction_type <> '' THEN 1 ELSE 0 END; + + -- Distraction_Types + IF v_has_filter_distraction_type_id = 1 THEN + CALL parts.p_core_split(a_guid, a_ids_distraction_type, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Id_Calc_Distraction_Type ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF v_has_filter_distraction_type_name = 1 THEN + CALL parts.p_core_split(a_guid, a_names_distraction_type, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Name_Calc_Distraction_Type ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Distraction_Type t_ERROR INNER JOIN parts.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 EXISTS ( + SELECT * + FROM tmp_Split_Id_Calc_Distraction_Type t_SPLIT_ID + LEFT JOIN parts.DOG_Distraction_Type DISTRACTION_TYPES ON t_SPLIT_ID.as_int = DISTRACTION_TYPES.id_type + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(DISTRACTION_TYPES.id_type) + OR ( + DISTRACTION_TYPES.active = 0 + AND a_get_inactive_distraction_type = 0 + ) + ) THEN + INSERT INTO tmp_Msg_Error_Calc_Distraction_Type ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Invalid or inactive Distraction_Type IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split_Id_Calc_Distraction_Type t_SPLIT_ID + LEFT JOIN parts.DOG_Distraction_Type DISTRACTION_TYPES ON t_SPLIT_ID.as_int = DISTRACTION_TYPES.id_type + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(DISTRACTION_TYPES.id_type) + OR ( + DISTRACTION_TYPES.active = 0 + AND a_get_inactive_distraction_type = 0 + ) + ; + /* Don't error on names, hand signals, or notes not found + ELSEIF EXISTS () + */ + ELSE + INSERT INTO tmp_Distraction_Type_Calc_Distraction_Type ( + id_type + , does_meet_id_filters + , does_meet_non_id_filters + ) + WITH + Distraction_Type_Id_Filter AS ( + SELECT DISTRACTION_TYPES.id_type + FROM tmp_Split_Id_Calc_Distraction_Type t_SPLIT_ID + INNER JOIN parts.DOG_Distraction_Type DISTRACTION_TYPES ON t_SPLIT_ID.as_int = DISTRACTION_TYPES.id_type + ) + , Distraction_Type_Name_Filter AS ( + SELECT DISTRACTION_TYPES.id_type + FROM tmp_Split_Name_Calc_Distraction_Type t_SPLIT_NAME + INNER JOIN parts.DOG_Distraction_Type DISTRACTION_TYPES ON DISTRACTION_TYPES.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') + WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL + ) + , Distraction_Type_Filters AS ( + SELECT + DISTRACTION_TYPES_COMBINED.id_type + , MAX(DISTRACTION_TYPES_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(DISTRACTION_TYPES_COMBINED.does_meet_name_filter) AS does_meet_name_filter + FROM ( + SELECT + DISTRACTION_TYPES_ID_FILTER.id_type + , 1 AS does_meet_id_filter + , 0 AS does_meet_name_filter + FROM Distraction_Type_Id_Filter DISTRACTION_TYPES_ID_FILTER + UNION + SELECT + DISTRACTION_TYPES_NAME_FILTER.id_type + , 0 AS does_meet_id_filter + , 1 AS does_meet_name_filter + FROM Distraction_Type_Name_Filter DISTRACTION_TYPES_NAME_FILTER + ) DISTRACTION_TYPES_COMBINED + GROUP BY DISTRACTION_TYPES_COMBINED.id_type + ) + SELECT + DISTRACTION_TYPES.id_type + , CASE WHEN + v_has_filter_distraction_type_id = 0 + OR IFNULL(DISTRACTION_TYPES_FILTERS.does_meet_id_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_distraction_type_name = 0 + ) + OR IFNULL(DISTRACTION_TYPES_FILTERS.does_meet_name_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.DOG_Distraction_Type DISTRACTION_TYPES + LEFT JOIN Distraction_Type_Filters DISTRACTION_TYPES_FILTERS ON DISTRACTION_TYPES.id_type = DISTRACTION_TYPES_FILTERS.id_type + WHERE + ( + a_get_all_distraction_type = 1 + OR ( + v_has_filter_distraction_type_id = 1 + AND DISTRACTION_TYPES_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_distraction_type_name = 1 + AND DISTRACTION_TYPES_FILTERS.does_meet_name_filter = 1 + ) + ) + AND ( + a_get_inactive_distraction_type = 1 + OR DISTRACTION_TYPES.active = 1 + ) + ; + END IF; + END IF; + + DELETE FROM tmp_Split_Id_Calc_Distraction_Type; + DELETE FROM tmp_Split_Name_Calc_Distraction_Type; + + IF a_debug = 1 THEN + SELECT 'After get Distraction_Types '; + SELECT * FROM tmp_Distraction_Type_Calc_Distraction_Type; + END IF; + + -- Filter records + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Distraction_Type t_ERROR INNER JOIN parts.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 + DELETE t_DISTRACTION_TYPES + FROM tmp_Distraction_Type_Calc_Distraction_Type t_DISTRACTION_TYPES + WHERE + ( + a_require_all_id_search_filters_met = 1 + AND ( + t_DISTRACTION_TYPES.does_meet_id_filters = 0 + ) + ) + OR ( + a_require_all_non_id_search_filters_met = 1 + AND ( + t_DISTRACTION_TYPES.does_meet_non_id_filters = 0 + ) + ) + OR ( + a_require_any_id_search_filters_met = 1 + AND t_DISTRACTION_TYPES.does_meet_id_filters = 0 + ) + OR ( + a_require_any_non_id_search_filters_met = 1 + AND t_DISTRACTION_TYPES.does_meet_non_id_filters = 0 + ) + ; + END IF; + + IF a_debug = 1 THEN + SELECT 'After filter Distraction_Types'; + SELECT * FROM tmp_Distraction_Type_Calc_Distraction_Type; + END IF; + + -- Calculated fields + + -- Permissions + IF a_debug = 1 THEN + SELECT + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = a_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error_Calc_Distraction_Type t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error_Calc_Distraction_Type ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Dogs and Distraction_Types.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT 'Before non-permitted data deletion'; + SELECT * FROM tmp_Distraction_Type_Calc_Distraction_Type; + SELECT * FROM tmp_Msg_Error_Calc_Distraction_Type; + END IF; + + IF EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Distraction_Type t_ERROR INNER JOIN parts.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_Distraction_Type_Calc_Distraction_Type; + END IF; + + DELETE FROM tmp_Distraction_Type_Calc_Distraction_Type; + END IF; + + IF a_debug = 1 THEN + SELECT 'After non-permitted data deletion'; + END IF; + + -- Outputs + START TRANSACTION; + -- Distraction_Types + INSERT INTO parts.DOG_Distraction_Type_Temp ( + guid + , id_type + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + a_guid + , t_DISTRACTION_TYPES.id_type + , DISTRACTION_TYPES.code + , DISTRACTION_TYPES.name + , DISTRACTION_TYPES.active + + , t_DISTRACTION_TYPES.does_meet_id_filters + , t_DISTRACTION_TYPES.does_meet_non_id_filters + FROM parts.DOG_Distraction_Type DISTRACTION_TYPES + INNER JOIN tmp_Distraction_Type_Calc_Distraction_Type t_DISTRACTION_TYPES ON DISTRACTION_TYPES.id_type = t_DISTRACTION_TYPES.id_type + ORDER BY DISTRACTION_TYPES.name + ; + COMMIT; + + -- Errors + IF a_show_errors = 1 THEN + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_Distraction_Type t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + END IF; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Distraction_Type_Calc_Distraction_Type; + END IF; + + CALL parts.p_dog_clear_calc_dog ( a_guid, 0 ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Distraction_Type; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Distraction_Type; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Distraction_Type; + DROP TEMPORARY TABLE IF EXISTS tmp_Distraction_Type_Calc_Distraction_Type; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + + +CALL parts.p_dog_calc_distraction_type ( + 'gripe ' -- a_guid + , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_distraction_type + , 0 -- a_get_inactive_distraction_type + , '' -- a_ids_distraction_type + , '' -- a_names_distraction_type + , 0 -- a_require_all_id_search_filters_met + , 0 -- 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 + , 0 -- a_show_errors + , 0 -- a_debug +); + +SELECT * +FROM parts.DOG_Distraction_Type_Temp +; +/* +SELECT * +FROM parts.DOG_Distraction_Type_Temp C +WHERE + C.does_meet_id_filters + AND C.does_meet_non_id_filters +; +*/ +CALL parts.p_dog_clear_calc_distraction_type ( + 'gripe ' -- a_guid + , 1 -- debug +); + + +DELETE +FROM parts.DOG_Distraction_Type_Temp +; + +*/ diff --git a/static/MySQL/71312_p_dog_clear_calc_distraction_type.sql b/static/MySQL/71312_p_dog_clear_calc_distraction_type.sql new file mode 100644 index 0000000..533873f --- /dev/null +++ b/static/MySQL/71312_p_dog_clear_calc_distraction_type.sql @@ -0,0 +1,45 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_clear_calc_distraction_type; +DROP PROCEDURE IF EXISTS parts.p_distraction_type_clear_calc_distraction_type; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_clear_calc_distraction_type ( + IN a_guid BINARY(36) + , IN a_debug BIT +) +BEGIN + DECLARE v_time_start TIMESTAMP(6); + SET v_time_start := CURRENT_TIMESTAMP(6); + + CALL parts.p_core_validate_guid ( a_guid ); + + START TRANSACTION; + + DELETE DISTRACTION_TYPES_T + FROM parts.DOG_Distraction_Type_Temp DISTRACTION_TYPES_T + WHERE DISTRACTION_TYPES_T.GUID = a_guid + ; + + COMMIT; + + IF a_debug = 1 THEN + CALL parts.p_debug_timing_reporting( v_time_start ); + END IF; +END // +DELIMITER ; + +/* + +CALL parts.p_dog_clear_calc_distraction_type ( + 'crips ' -- a_guid + , 1 -- debug +); + +SELECT * +FROM parts.DOG_Calc_User_Temp +WHERE GUID = 'chips ' +; + +*/ diff --git a/static/MySQL/71312_p_dog_get_many_distraction_type.sql b/static/MySQL/71312_p_dog_get_many_distraction_type.sql new file mode 100644 index 0000000..cfd24de --- /dev/null +++ b/static/MySQL/71312_p_dog_get_many_distraction_type.sql @@ -0,0 +1,375 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_get_many_distraction_type; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_get_many_distraction_type ( + IN a_id_user INT + , IN a_get_all_distraction_type BIT + , IN a_get_inactive_distraction_type BIT + , IN a_ids_distraction_type TEXT + , IN a_names_distraction_type TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_guid BINARY(36); + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_guid := UUID(); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + SET a_id_user := IFNULL(a_id_user, 0); + /* + SET a_get_all_distraction_type := IFNULL(a_get_all_distraction_type, 0); + SET a_get_inactive_distraction_type := IFNULL(a_get_inactive_distraction_type, 0); + SET a_ids_distraction_type := TRIM(IFNULL(a_ids_distraction_type, '')); + SET a_names_distraction_type := TRIM(IFNULL(a_names_distraction_type, '')); + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + */ + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_id_user + , a_get_all_distraction_type + , a_get_inactive_distraction_type + , a_ids_distraction_type + , a_names_distraction_type + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_guid + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Distraction_Type; + + CREATE TEMPORARY TABLE tmp_Distraction_Type ( + id_type INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + -- Permissions + IF a_debug = 1 THEN + SELECT + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = v_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR; + SELECT * FROM tmp_Msg_Error t_ERROR; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Distraction_Types.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + v_guid + , 0 -- a_debug + ); + + + -- Call Distraction_Type Calc + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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 + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_distraction_type -- a_get_all_distraction_type + , a_get_inactive_distraction_type -- a_get_inactive_distraction_type + , a_ids_distraction_type -- a_ids_distraction_type + , a_names_distraction_type -- a_names_distraction_type + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_distraction_type ( + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_distraction_type -- a_get_all_distraction_type + , a_get_inactive_distraction_type -- a_get_inactive_distraction_type + , a_ids_distraction_type -- a_ids_distraction_type + , a_names_distraction_type -- a_names_distraction_type + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM parts.DOG_Distraction_Type_Temp; + SELECT * FROM parts.DOG_Distraction_Type_Temp; + END IF; + + INSERT INTO tmp_Distraction_Type ( + id_type + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + DISTRACTION_TYPE_T.id_type + , DISTRACTION_TYPE_T.code + , DISTRACTION_TYPE_T.name + , DISTRACTION_TYPE_T.active + + , DISTRACTION_TYPE_T.does_meet_id_filters + , DISTRACTION_TYPE_T.does_meet_non_id_filters + FROM parts.DOG_Distraction_Type_Temp DISTRACTION_TYPE_T + WHERE DISTRACTION_TYPE_T.GUID = v_guid + ; + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM tmp_Distraction_Type; + SELECT * FROM tmp_Distraction_Type; + END IF; + END IF; + + -- Filter outputs + IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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_Distraction_Type; + END IF; + + DELETE FROM tmp_Distraction_Type; + END IF; + + + -- Outputs + -- Distraction_Types + SELECT + t_DISTRACTION_TYPES.id_type + , t_DISTRACTION_TYPES.code + , t_DISTRACTION_TYPES.name + , t_DISTRACTION_TYPES.active + + , t_DISTRACTION_TYPES.does_meet_id_filters + , t_DISTRACTION_TYPES.does_meet_non_id_filters + FROM tmp_Distraction_Type t_DISTRACTION_TYPES + LEFT JOIN parts.DOG_Distraction_Type DISTRACTION_TYPES ON t_DISTRACTION_TYPES.id_type = DISTRACTION_TYPES.id_type + ORDER BY t_DISTRACTION_TYPES.name + ; + + -- Errors + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Distraction_Type; + END IF; + + CALL parts.p_dog_clear_calc_distraction_type( + v_guid -- a_guid + , 0 -- a_debug + ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Distraction_Type; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_get_many_distraction_type ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_distraction_type + , 0 -- a_get_inactive_distraction_type + , '' -- a_ids_distraction_type + , '' -- a_names_distraction_type + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + + +CALL demo.p_dog_get_many_distraction_type ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_distraction_type + , 0 -- a_get_inactive_distraction_type + , '' -- a_ids_distraction_type + , 'pat,point' -- a_names_distraction_type + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + +*/ \ No newline at end of file diff --git a/static/MySQL/71316_p_dog_calc_distraction_intensity_level.sql b/static/MySQL/71316_p_dog_calc_distraction_intensity_level.sql new file mode 100644 index 0000000..5cc7386 --- /dev/null +++ b/static/MySQL/71316_p_dog_calc_distraction_intensity_level.sql @@ -0,0 +1,549 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_calc_distraction_intensity_level; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_calc_distraction_intensity_level ( + IN a_guid BINARY(36) + , IN a_id_user INT + , IN a_get_all_distraction_intensity_level BIT + , IN a_get_inactive_distraction_intensity_level BIT + , IN a_ids_distraction_intensity_level TEXT + , IN a_names_distraction_intensity_level TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_show_errors BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_has_filter_distraction_intensity_level_id BIT; + DECLARE v_has_filter_distraction_intensity_level_name BIT; + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Distraction_Intensity_Level ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error_Calc_Distraction_Intensity_Level ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_Distraction_Intensity_Level t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error_Calc_Distraction_Intensity_Level; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + + CALL parts.p_core_validate_guid ( a_guid ); + + SET a_id_user := IFNULL(a_id_user, 0); + SET a_get_all_distraction_intensity_level := IFNULL(a_get_all_distraction_intensity_level, 0); + SET a_get_inactive_distraction_intensity_level := IFNULL(a_get_inactive_distraction_intensity_level, 0); + SET a_ids_distraction_intensity_level := TRIM(IFNULL(a_ids_distraction_intensity_level, '')); + SET a_names_distraction_intensity_level := TRIM(IFNULL(a_names_distraction_intensity_level, '')); + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + SET a_show_errors := IFNULL(a_show_errors, 0); + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_guid + , a_id_user + , a_get_all_distraction_intensity_level + , a_get_inactive_distraction_intensity_level + , a_ids_distraction_intensity_level + , a_names_distraction_intensity_level + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_show_errors + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Distraction_Intensity_Level; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Distraction_Intensity_Level; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Distraction_Intensity_Level; + DROP TEMPORARY TABLE IF EXISTS tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level; + + CREATE TEMPORARY TABLE tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level ( + id_intensity_level INT NOT NULL + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Distraction_Intensity_Level ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_Distraction_Intensity_Level ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Id_Calc_Distraction_Intensity_Level; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name_Calc_Distraction_Intensity_Level ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Name_Calc_Distraction_Intensity_Level; + + SET v_has_filter_distraction_intensity_level_id = CASE WHEN a_ids_distraction_intensity_level <> '' THEN 1 ELSE 0 END; + SET v_has_filter_distraction_intensity_level_name = CASE WHEN a_names_distraction_intensity_level <> '' THEN 1 ELSE 0 END; + + -- Distraction_Intensity_Levels + IF v_has_filter_distraction_intensity_level_id = 1 THEN + CALL parts.p_core_split(a_guid, a_ids_distraction_intensity_level, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Id_Calc_Distraction_Intensity_Level ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF v_has_filter_distraction_intensity_level_name = 1 THEN + CALL parts.p_core_split(a_guid, a_names_distraction_intensity_level, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Name_Calc_Distraction_Intensity_Level ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Distraction_Intensity_Level t_ERROR INNER JOIN parts.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 EXISTS ( + SELECT * + FROM tmp_Split_Id_Calc_Distraction_Intensity_Level t_SPLIT_ID + LEFT JOIN parts.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVELS ON t_SPLIT_ID.as_int = DISTRACTION_INTENSITY_LEVELS.id_intensity_level + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(DISTRACTION_INTENSITY_LEVELS.id_intensity_level) + OR ( + DISTRACTION_INTENSITY_LEVELS.active = 0 + AND a_get_inactive_distraction_intensity_level = 0 + ) + ) THEN + INSERT INTO tmp_Msg_Error_Calc_Distraction_Intensity_Level ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Invalid or inactive Distraction_Intensity_Level IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split_Id_Calc_Distraction_Intensity_Level t_SPLIT_ID + LEFT JOIN parts.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVELS ON t_SPLIT_ID.as_int = DISTRACTION_INTENSITY_LEVELS.id_intensity_level + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(DISTRACTION_INTENSITY_LEVELS.id_intensity_level) + OR ( + DISTRACTION_INTENSITY_LEVELS.active = 0 + AND a_get_inactive_distraction_intensity_level = 0 + ) + ; + /* Don't error on names, hand signals, or notes not found + ELSEIF EXISTS () + */ + ELSE + INSERT INTO tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level ( + id_intensity_level + , does_meet_id_filters + , does_meet_non_id_filters + ) + WITH + Distraction_Intensity_Level_Id_Filter AS ( + SELECT DISTRACTION_INTENSITY_LEVELS.id_intensity_level + FROM tmp_Split_Id_Calc_Distraction_Intensity_Level t_SPLIT_ID + INNER JOIN parts.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVELS ON t_SPLIT_ID.as_int = DISTRACTION_INTENSITY_LEVELS.id_intensity_level + ) + , Distraction_Intensity_Level_Name_Filter AS ( + SELECT DISTRACTION_INTENSITY_LEVELS.id_intensity_level + FROM tmp_Split_Name_Calc_Distraction_Intensity_Level t_SPLIT_NAME + INNER JOIN parts.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVELS ON DISTRACTION_INTENSITY_LEVELS.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') + WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL + ) + , Distraction_Intensity_Level_Filters AS ( + SELECT + DISTRACTION_INTENSITY_LEVELS_COMBINED.id_intensity_level + , MAX(DISTRACTION_INTENSITY_LEVELS_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(DISTRACTION_INTENSITY_LEVELS_COMBINED.does_meet_name_filter) AS does_meet_name_filter + FROM ( + SELECT + DISTRACTION_INTENSITY_LEVELS_ID_FILTER.id_intensity_level + , 1 AS does_meet_id_filter + , 0 AS does_meet_name_filter + FROM Distraction_Intensity_Level_Id_Filter DISTRACTION_INTENSITY_LEVELS_ID_FILTER + UNION + SELECT + DISTRACTION_INTENSITY_LEVELS_NAME_FILTER.id_intensity_level + , 0 AS does_meet_id_filter + , 1 AS does_meet_name_filter + FROM Distraction_Intensity_Level_Name_Filter DISTRACTION_INTENSITY_LEVELS_NAME_FILTER + ) DISTRACTION_INTENSITY_LEVELS_COMBINED + GROUP BY DISTRACTION_INTENSITY_LEVELS_COMBINED.id_intensity_level + ) + SELECT + DISTRACTION_INTENSITY_LEVELS.id_intensity_level + , CASE WHEN + v_has_filter_distraction_intensity_level_id = 0 + OR IFNULL(DISTRACTION_INTENSITY_LEVELS_FILTERS.does_meet_id_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_distraction_intensity_level_name = 0 + ) + OR IFNULL(DISTRACTION_INTENSITY_LEVELS_FILTERS.does_meet_name_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVELS + LEFT JOIN Distraction_Intensity_Level_Filters DISTRACTION_INTENSITY_LEVELS_FILTERS ON DISTRACTION_INTENSITY_LEVELS.id_intensity_level = DISTRACTION_INTENSITY_LEVELS_FILTERS.id_intensity_level + WHERE + ( + a_get_all_distraction_intensity_level = 1 + OR ( + v_has_filter_distraction_intensity_level_id = 1 + AND DISTRACTION_INTENSITY_LEVELS_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_distraction_intensity_level_name = 1 + AND DISTRACTION_INTENSITY_LEVELS_FILTERS.does_meet_name_filter = 1 + ) + ) + AND ( + a_get_inactive_distraction_intensity_level = 1 + OR DISTRACTION_INTENSITY_LEVELS.active = 1 + ) + ; + END IF; + END IF; + + DELETE FROM tmp_Split_Id_Calc_Distraction_Intensity_Level; + DELETE FROM tmp_Split_Name_Calc_Distraction_Intensity_Level; + + IF a_debug = 1 THEN + SELECT 'After get Distraction_Intensity_Levels '; + SELECT * FROM tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level; + END IF; + + -- Filter records + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Distraction_Intensity_Level t_ERROR INNER JOIN parts.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 + DELETE t_DISTRACTION_INTENSITY_LEVELS + FROM tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level t_DISTRACTION_INTENSITY_LEVELS + WHERE + ( + a_require_all_id_search_filters_met = 1 + AND ( + t_DISTRACTION_INTENSITY_LEVELS.does_meet_id_filters = 0 + ) + ) + OR ( + a_require_all_non_id_search_filters_met = 1 + AND ( + t_DISTRACTION_INTENSITY_LEVELS.does_meet_non_id_filters = 0 + ) + ) + OR ( + a_require_any_id_search_filters_met = 1 + AND t_DISTRACTION_INTENSITY_LEVELS.does_meet_id_filters = 0 + ) + OR ( + a_require_any_non_id_search_filters_met = 1 + AND t_DISTRACTION_INTENSITY_LEVELS.does_meet_non_id_filters = 0 + ) + ; + END IF; + + IF a_debug = 1 THEN + SELECT 'After filter Distraction_Intensity_Levels'; + SELECT * FROM tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level; + END IF; + + -- Calculated fields + + -- Permissions + IF a_debug = 1 THEN + SELECT + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = a_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error_Calc_Distraction_Intensity_Level t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error_Calc_Distraction_Intensity_Level ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Dogs and Distraction_Intensity_Levels.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT 'Before non-permitted data deletion'; + SELECT * FROM tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level; + SELECT * FROM tmp_Msg_Error_Calc_Distraction_Intensity_Level; + END IF; + + IF EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Distraction_Intensity_Level t_ERROR INNER JOIN parts.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_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level; + END IF; + + DELETE FROM tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level; + END IF; + + IF a_debug = 1 THEN + SELECT 'After non-permitted data deletion'; + END IF; + + -- Outputs + START TRANSACTION; + -- Distraction_Intensity_Levels + INSERT INTO parts.DOG_Distraction_Intensity_Level_Temp ( + guid + , id_intensity_level + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + a_guid + , t_DISTRACTION_INTENSITY_LEVELS.id_intensity_level + , DISTRACTION_INTENSITY_LEVELS.code + , DISTRACTION_INTENSITY_LEVELS.name + , DISTRACTION_INTENSITY_LEVELS.active + + , t_DISTRACTION_INTENSITY_LEVELS.does_meet_id_filters + , t_DISTRACTION_INTENSITY_LEVELS.does_meet_non_id_filters + FROM parts.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVELS + INNER JOIN tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level t_DISTRACTION_INTENSITY_LEVELS ON DISTRACTION_INTENSITY_LEVELS.id_intensity_level = t_DISTRACTION_INTENSITY_LEVELS.id_intensity_level + ORDER BY DISTRACTION_INTENSITY_LEVELS.name + ; + COMMIT; + + -- Errors + IF a_show_errors = 1 THEN + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_Distraction_Intensity_Level t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + END IF; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level; + END IF; + + CALL parts.p_dog_clear_calc_dog ( a_guid, 0 ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Distraction_Intensity_Level; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Distraction_Intensity_Level; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Distraction_Intensity_Level; + DROP TEMPORARY TABLE IF EXISTS tmp_Distraction_Intensity_Level_Calc_Distraction_Intensity_Level; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + + +CALL parts.p_dog_calc_distraction_intensity_level ( + 'gripe ' -- a_guid + , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_distraction_intensity_level + , 0 -- a_get_inactive_distraction_intensity_level + , '' -- a_ids_distraction_intensity_level + , '' -- a_names_distraction_intensity_level + , 0 -- a_require_all_id_search_filters_met + , 0 -- 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 + , 0 -- a_show_errors + , 0 -- a_debug +); + +SELECT * +FROM parts.DOG_Distraction_Intensity_Level_Temp +; +/* +SELECT * +FROM parts.DOG_Distraction_Intensity_Level_Temp C +WHERE + C.does_meet_id_filters + AND C.does_meet_non_id_filters +; +*/ +CALL parts.p_dog_clear_calc_distraction_intensity_level ( + 'gripe ' -- a_guid + , 1 -- debug +); + + +DELETE +FROM parts.DOG_Distraction_Intensity_Level_Temp +; + +*/ diff --git a/static/MySQL/71316_p_dog_clear_calc_distraction_intensity_level.sql b/static/MySQL/71316_p_dog_clear_calc_distraction_intensity_level.sql new file mode 100644 index 0000000..55ae165 --- /dev/null +++ b/static/MySQL/71316_p_dog_clear_calc_distraction_intensity_level.sql @@ -0,0 +1,44 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_clear_calc_distraction_intensity_level; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_clear_calc_distraction_intensity_level ( + IN a_guid BINARY(36) + , IN a_debug BIT +) +BEGIN + DECLARE v_time_start TIMESTAMP(6); + SET v_time_start := CURRENT_TIMESTAMP(6); + + CALL parts.p_core_validate_guid ( a_guid ); + + START TRANSACTION; + + DELETE DISTRACTION_INTENSITY_LEVELS_T + FROM parts.DOG_Distraction_Intensity_Level_Temp DISTRACTION_INTENSITY_LEVELS_T + WHERE DISTRACTION_INTENSITY_LEVELS_T.GUID = a_guid + ; + + COMMIT; + + IF a_debug = 1 THEN + CALL parts.p_debug_timing_reporting( v_time_start ); + END IF; +END // +DELIMITER ; + +/* + +CALL parts.p_dog_clear_calc_distraction_intensity_level ( + 'crips ' -- a_guid + , 1 -- debug +); + +SELECT * +FROM parts.DOG_Calc_User_Temp +WHERE GUID = 'chips ' +; + +*/ diff --git a/static/MySQL/71316_p_dog_get_many_distraction_intensity_level.sql b/static/MySQL/71316_p_dog_get_many_distraction_intensity_level.sql new file mode 100644 index 0000000..2c718fb --- /dev/null +++ b/static/MySQL/71316_p_dog_get_many_distraction_intensity_level.sql @@ -0,0 +1,375 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_get_many_distraction_intensity_level; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_get_many_distraction_intensity_level ( + IN a_id_user INT + , IN a_get_all_distraction_intensity_level BIT + , IN a_get_inactive_distraction_intensity_level BIT + , IN a_ids_distraction_intensity_level TEXT + , IN a_names_distraction_intensity_level TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_guid BINARY(36); + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_guid := UUID(); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + SET a_id_user := IFNULL(a_id_user, 0); + /* + SET a_get_all_distraction_intensity_level := IFNULL(a_get_all_distraction_intensity_level, 0); + SET a_get_inactive_distraction_intensity_level := IFNULL(a_get_inactive_distraction_intensity_level, 0); + SET a_ids_distraction_intensity_level := TRIM(IFNULL(a_ids_distraction_intensity_level, '')); + SET a_names_distraction_intensity_level := TRIM(IFNULL(a_names_distraction_intensity_level, '')); + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + */ + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_id_user + , a_get_all_distraction_intensity_level + , a_get_inactive_distraction_intensity_level + , a_ids_distraction_intensity_level + , a_names_distraction_intensity_level + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_guid + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Distraction_Intensity_Level; + + CREATE TEMPORARY TABLE tmp_Distraction_Intensity_Level ( + id_intensity_level INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + -- Permissions + IF a_debug = 1 THEN + SELECT + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = v_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR; + SELECT * FROM tmp_Msg_Error t_ERROR; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Distraction_Intensity_Levels.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + v_guid + , 0 -- a_debug + ); + + + -- Call Distraction_Intensity_Level Calc + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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 + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_distraction_intensity_level -- a_get_all_distraction_intensity_level + , a_get_inactive_distraction_intensity_level -- a_get_inactive_distraction_intensity_level + , a_ids_distraction_intensity_level -- a_ids_distraction_intensity_level + , a_names_distraction_intensity_level -- a_names_distraction_intensity_level + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_distraction_intensity_level ( + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_distraction_intensity_level -- a_get_all_distraction_intensity_level + , a_get_inactive_distraction_intensity_level -- a_get_inactive_distraction_intensity_level + , a_ids_distraction_intensity_level -- a_ids_distraction_intensity_level + , a_names_distraction_intensity_level -- a_names_distraction_intensity_level + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM parts.DOG_Distraction_Intensity_Level_Temp; + SELECT * FROM parts.DOG_Distraction_Intensity_Level_Temp; + END IF; + + INSERT INTO tmp_Distraction_Intensity_Level ( + id_intensity_level + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + DISTRACTION_INTENSITY_LEVEL_T.id_intensity_level + , DISTRACTION_INTENSITY_LEVEL_T.code + , DISTRACTION_INTENSITY_LEVEL_T.name + , DISTRACTION_INTENSITY_LEVEL_T.active + + , DISTRACTION_INTENSITY_LEVEL_T.does_meet_id_filters + , DISTRACTION_INTENSITY_LEVEL_T.does_meet_non_id_filters + FROM parts.DOG_Distraction_Intensity_Level_Temp DISTRACTION_INTENSITY_LEVEL_T + WHERE DISTRACTION_INTENSITY_LEVEL_T.GUID = v_guid + ; + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM tmp_Distraction_Intensity_Level; + SELECT * FROM tmp_Distraction_Intensity_Level; + END IF; + END IF; + + -- Filter outputs + IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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_Distraction_Intensity_Level; + END IF; + + DELETE FROM tmp_Distraction_Intensity_Level; + END IF; + + + -- Outputs + -- Distraction_Intensity_Levels + SELECT + t_DISTRACTION_INTENSITY_LEVELS.id_intensity_level + , t_DISTRACTION_INTENSITY_LEVELS.code + , t_DISTRACTION_INTENSITY_LEVELS.name + , t_DISTRACTION_INTENSITY_LEVELS.active + + , t_DISTRACTION_INTENSITY_LEVELS.does_meet_id_filters + , t_DISTRACTION_INTENSITY_LEVELS.does_meet_non_id_filters + FROM tmp_Distraction_Intensity_Level t_DISTRACTION_INTENSITY_LEVELS + LEFT JOIN parts.DOG_Distraction_Intensity_Level DISTRACTION_INTENSITY_LEVELS ON t_DISTRACTION_INTENSITY_LEVELS.id_intensity_level = DISTRACTION_INTENSITY_LEVELS.id_intensity_level + ORDER BY t_DISTRACTION_INTENSITY_LEVELS.name + ; + + -- Errors + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Distraction_Intensity_Level; + END IF; + + CALL parts.p_dog_clear_calc_distraction_intensity_level( + v_guid -- a_guid + , 0 -- a_debug + ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Distraction_Intensity_Level; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_get_many_distraction_intensity_level ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_distraction_intensity_level + , 0 -- a_get_inactive_distraction_intensity_level + , '' -- a_ids_distraction_intensity_level + , '' -- a_names_distraction_intensity_level + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + + +CALL demo.p_dog_get_many_distraction_intensity_level ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_distraction_intensity_level + , 0 -- a_get_inactive_distraction_intensity_level + , '' -- a_ids_distraction_intensity_level + , 'pat,point' -- a_names_distraction_intensity_level + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + +*/ \ No newline at end of file diff --git a/static/MySQL/71320_p_dog_calc_distraction.sql b/static/MySQL/71320_p_dog_calc_distraction.sql new file mode 100644 index 0000000..81b963b --- /dev/null +++ b/static/MySQL/71320_p_dog_calc_distraction.sql @@ -0,0 +1,1484 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_calc_distraction; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_calc_distraction ( + IN a_guid BINARY(36) + , IN a_id_user INT + , IN a_get_all_distraction BIT + , IN a_get_inactive_distraction BIT + , IN a_ids_distraction TEXT + , IN a_notes_distraction TEXT + , IN a_min_quantity_distraction INT + , IN a_max_quantity_distraction INT + , IN a_min_proximity_metres_distraction FLOAT + , IN a_max_proximity_metres_distraction FLOAT + , IN a_get_all_distraction_type BIT + , IN a_get_inactive_distraction_type BIT + , IN a_ids_distraction_type TEXT + , IN a_names_distraction_type TEXT + , IN a_get_all_intensity_level_emotional BIT + , IN a_get_inactive_intensity_level_emotional BIT + , IN a_ids_intensity_level_emotional TEXT + , IN a_names_intensity_level_emotional TEXT + , IN a_get_all_intensity_level_sight BIT + , IN a_get_inactive_intensity_level_sight BIT + , IN a_ids_intensity_level_sight TEXT + , IN a_names_intensity_level_sight TEXT + , IN a_get_all_intensity_level_sound BIT + , IN a_get_inactive_intensity_level_sound BIT + , IN a_ids_intensity_level_sound TEXT + , IN a_names_intensity_level_sound TEXT + , IN a_get_all_intensity_level_touch BIT + , IN a_get_inactive_intensity_level_touch BIT + , IN a_ids_intensity_level_touch TEXT + , IN a_names_intensity_level_touch TEXT + , IN a_get_all_assessment BIT + , IN a_get_inactive_assessment BIT + , IN a_ids_assessment TEXT + , IN a_notes_assessment TEXT + , IN a_min_temperature_assessment DECIMAL(5, 2) + , IN a_max_temperature_assessment DECIMAL(5, 2) + , IN a_get_all_weather BIT + , IN a_get_inactive_weather BIT + , IN a_ids_weather TEXT + , IN a_names_weather TEXT + , IN a_get_all_lighting_level BIT + , IN a_get_inactive_lighting_level BIT + , IN a_ids_lighting_level TEXT + , IN a_names_lighting_level TEXT + , IN a_get_all_location BIT + , IN a_get_inactive_location BIT + , IN a_ids_location TEXT + , IN a_names_location TEXT + , IN a_get_all_user_handler BIT + , IN a_get_inactive_user_handler BIT + , IN a_ids_user_handler TEXT + -- , IN a_auth0_ids_user_handler TEXT + , IN a_names_user_handler TEXT + , IN a_emails_user_handler TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_show_errors BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_has_filter_distraction_id BIT; + DECLARE v_has_filter_distraction_notes BIT; + DECLARE v_has_filter_distraction_quantity_min BIT; + DECLARE v_has_filter_distraction_quantity_max BIT; + DECLARE v_has_filter_distraction_proximity_metres_min BIT; + DECLARE v_has_filter_distraction_proximity_metres_max BIT; + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Distraction ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error_Calc_Distraction ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_Distraction t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error_Calc_Distraction; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + + CALL parts.p_core_validate_guid ( a_guid ); + + SET a_id_user := IFNULL(a_id_user, 0); + SET a_get_all_distraction := IFNULL(a_get_all_distraction, 0); + SET a_get_inactive_distraction := IFNULL(a_get_inactive_distraction, 0); + SET a_ids_distraction := TRIM(IFNULL(a_ids_distraction, '')); + SET a_notes_distraction := TRIM(IFNULL(a_notes_distraction, '')); + /* + , IN a_min_quantity_distraction INT + , IN a_max_quantity_distraction INT + , IN a_min_proximity_metres_distraction FLOAT + , IN a_max_proximity_metres_distraction FLOAT + */ + -- Foreign key filters corected in their Calc Stored Procedures + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + SET a_show_errors := IFNULL(a_show_errors, 0); + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_guid + , a_id_user + , a_get_all_distraction + , a_get_inactive_distraction + , a_ids_distraction + , a_notes_distraction + , a_min_quantity_distraction + , a_max_quantity_distraction + , a_min_proximity_metres_distraction + , a_max_proximity_metres_distraction + , a_get_all_distraction_type + , a_get_inactive_distraction_type + , a_ids_distraction_type + , a_names_distraction_type + , a_get_all_intensity_level_emotional + , a_get_inactive_intensity_level_emotional + , a_ids_intensity_level_emotional + , a_names_intensity_level_emotional + , a_get_all_intensity_level_sight + , a_get_inactive_intensity_level_sight + , a_ids_intensity_level_sight + , a_names_intensity_level_sight + , a_get_all_intensity_level_sound + , a_get_inactive_intensity_level_sound + , a_ids_intensity_level_sound + , a_names_intensity_level_sound + , a_get_all_intensity_level_touch + , a_get_inactive_intensity_level_touch + , a_ids_intensity_level_touch + , a_names_intensity_level_touch + , a_get_all_assessment + , a_get_inactive_assessment + , a_ids_assessment + , a_notes_assessment + , a_min_temperature_assessment + , a_max_temperature_assessment + , a_get_all_weather + , a_get_inactive_weather + , a_ids_weather + , a_names_weather + , a_get_all_lighting_level + , a_get_inactive_lighting_level + , a_ids_lighting_level + , a_names_lighting_level + , a_get_all_location + , a_get_inactive_location + , a_ids_location + , a_names_location + , a_get_all_user_handler + , a_get_inactive_user_handler + , a_ids_user_handler + -- , a_auth0_ids_user_handler + , a_names_user_handler + , a_emails_user_handler + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_show_errors + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Notes_Calc_Distraction; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Distraction; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Distraction; + DROP TEMPORARY TABLE IF EXISTS tmp_Distraction_Calc_Distraction; + DROP TEMPORARY TABLE IF EXISTS tmp_Intensity_Level_Touch_Calc_Distraction; + DROP TEMPORARY TABLE IF EXISTS tmp_Intensity_Level_Sound_Calc_Distraction; + DROP TEMPORARY TABLE IF EXISTS tmp_Intensity_Level_Sight_Calc_Distraction; + DROP TEMPORARY TABLE IF EXISTS tmp_Intensity_Level_Emotional_Calc_Distraction; + DROP TEMPORARY TABLE IF EXISTS tmp_Distraction_Type_Calc_Distraction; + DROP TEMPORARY TABLE IF EXISTS tmp_Assessment_Calc_Distraction; + + CREATE TEMPORARY TABLE tmp_Assessment_Calc_Distraction ( + id_assessment INT NOT NULL + , id_weather INT + , id_lighting_level INT + , id_location INT + , id_user_handler INT + , notes TEXT + , active BIT + , temperature_celcius DECIMAL(5, 2) + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE tmp_Distraction_Type_Calc_Distraction ( + id_type INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE tmp_Intensity_Level_Emotional_Calc_Distraction ( + id_intensity_level INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE tmp_Intensity_Level_Sight_Calc_Distraction ( + id_intensity_level INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE tmp_Intensity_Level_Sound_Calc_Distraction ( + id_intensity_level INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE tmp_Intensity_Level_Touch_Calc_Distraction ( + id_intensity_level INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE tmp_Distraction_Calc_Distraction ( + id_distraction INT NOT NULL + , id_assessment INT + , id_distraction_type INT + , id_intensity_level_emotional INT + , id_intensity_level_sight INT + , id_intensity_level_sound INT + , id_intensity_level_touch INT + , quantity INT + , proximity_metres FLOAT + -- , difficulty_level DOUBLE + , notes TEXT + , active BIT + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Distraction ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_Distraction ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Id_Calc_Distraction; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Notes_Calc_Distraction ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Notes_Calc_Distraction; + + SET v_has_filter_distraction_id := CASE WHEN a_ids_distraction <> '' THEN 1 ELSE 0 END; + SET v_has_filter_distraction_notes := CASE WHEN a_notes_distraction <> '' THEN 1 ELSE 0 END; + SET v_has_filter_distraction_quantity_min := NOT ISNULL(a_min_quantity_distraction); + SET v_has_filter_distraction_quantity_max := NOT ISNULL(a_max_quantity_distraction); + SET v_has_filter_distraction_proximity_metres_min := NOT ISNULL(a_min_proximity_metres_distraction); + SET v_has_filter_distraction_proximity_metres_max := NOT ISNULL(a_max_proximity_metres_distraction); + + -- Call Calc Assessment + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Distraction t_ERROR INNER JOIN parts.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 + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_assessment -- a_get_all_assessment + , a_get_inactive_assessment -- a_get_inactive_assessment + , a_ids_assessment -- a_ids_assessment + , a_notes_assessment -- a_notes_assessment + , a_min_temperature_assessment -- a_min_temperature_assessment + , a_max_temperature_assessment -- a_max_temperature_assessment + , a_get_all_weather -- a_get_all_weather + , a_get_inactive_weather -- a_get_inactive_weather + , a_ids_weather + , a_names_weather + , a_get_all_lighting_level + , a_get_inactive_lighting_level + , a_ids_lighting_level + , a_names_lighting_level + , a_get_all_location + , a_get_inactive_location + , a_ids_location + , a_names_location + , a_get_all_user_handler + , a_get_inactive_user_handler + , a_ids_user_handler + -- , a_auth0_ids + , a_names_user_handler + , a_emails_user_handler + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_assessment ( + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_assessment -- a_get_all_assessment + , a_get_inactive_assessment -- a_get_inactive_assessment + , a_ids_assessment -- a_ids_assessment + , a_notes_assessment -- a_notes_assessment + , a_min_temperature_assessment -- a_min_temperature_assessment + , a_max_temperature_assessment -- a_max_temperature_assessment + , a_get_all_weather -- a_get_all_weather + , a_get_inactive_weather -- a_get_inactive_weather + , a_ids_weather + , a_names_weather + , a_get_all_lighting_level + , a_get_inactive_lighting_level + , a_ids_lighting_level + , a_names_lighting_level + , a_get_all_location + , a_get_inactive_location + , a_ids_location + , a_names_location + , a_get_all_user_handler + , a_get_inactive_user_handler + , a_ids_user_handler + -- , a_auth0_ids + , a_names_user_handler + , a_emails_user_handler + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + INSERT INTO tmp_Assessment_Calc_Distraction ( + id_assessment + , id_weather + , id_lighting_level + , id_location + , id_user_handler + , notes + , temperature_celcius + , active + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + ASSESSMENT_T.id_assessment + , ASSESSMENT_T.id_weather + , ASSESSMENT_T.id_lighting_level + , ASSESSMENT_T.id_location + , ASSESSMENT_T.id_user_handler + , ASSESSMENT_T.notes + , ASSESSMENT_T.temperature_celcius + , ASSESSMENT_T.active + + , ASSESSMENT_T.does_meet_id_filters + , ASSESSMENT_T.does_meet_non_id_filters + FROM parts.DOG_Assessment_Temp ASSESSMENT_T + WHERE ASSESSMENT_T.GUID = a_guid + ; + + IF a_debug = 1 THEN + SELECT * FROM tmp_Assessment_Calc_Distraction; + END IF; + END IF; + + -- Call Calc Distraction Type + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Distraction t_ERROR INNER JOIN parts.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 + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_distraction_type -- a_get_all_distraction_type + , a_get_inactive_distraction_type -- a_get_inactive_distraction_type + , a_ids_distraction_type -- a_ids_distraction_type + , a_names_distraction_type -- a_names_distraction_type + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_distraction_type ( + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_distraction_type -- a_get_all_distraction_type + , a_get_inactive_distraction_type -- a_get_inactive_distraction_type + , a_ids_distraction_type -- a_ids_distraction_type + , a_names_distraction_type -- a_names_distraction_type + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + INSERT INTO tmp_Distraction_Type_Calc_Distraction ( + id_type + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + DISTRACTION_TYPE_T.id_type + , DISTRACTION_TYPE_T.code + , DISTRACTION_TYPE_T.name + , DISTRACTION_TYPE_T.active + + , DISTRACTION_TYPE_T.does_meet_id_filters + , DISTRACTION_TYPE_T.does_meet_non_id_filters + FROM parts.DOG_Distraction_Type_Temp DISTRACTION_TYPE_T + WHERE DISTRACTION_TYPE_T.GUID = a_guid + ; + + IF a_debug = 1 THEN + SELECT * FROM tmp_Distraction_Type_Calc_Distraction; + END IF; + END IF; + + -- Call Calc Intensity Level Emotional + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Distraction t_ERROR INNER JOIN parts.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 + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_intensity_level_emotional -- a_get_all_intensity_level_emotional + , a_get_inactive_intensity_level_emotional -- a_get_inactive_intensity_level_emotional + , a_ids_intensity_level_emotional -- a_ids_intensity_level_emotional + , a_names_intensity_level_emotional -- a_names_intensity_level_emotional + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_distraction_intensity_level ( + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_intensity_level_emotional -- a_get_all_intensity_level_emotional + , a_get_inactive_intensity_level_emotional -- a_get_inactive_intensity_level_emotional + , a_ids_intensity_level_emotional -- a_ids_intensity_level_emotional + , a_names_intensity_level_emotional -- a_names_intensity_level_emotional + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + INSERT INTO tmp_Intensity_Level_Emotional_Calc_Distraction ( + id_intensity_level + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + INTENSITY_LEVEL_EMOTIONAL_T.id_intensity_level + , INTENSITY_LEVEL_EMOTIONAL_T.code + , INTENSITY_LEVEL_EMOTIONAL_T.name + , INTENSITY_LEVEL_EMOTIONAL_T.active + + , INTENSITY_LEVEL_EMOTIONAL_T.does_meet_id_filters + , INTENSITY_LEVEL_EMOTIONAL_T.does_meet_non_id_filters + FROM parts.DOG_Distraction_Intensity_Level_Temp INTENSITY_LEVEL_EMOTIONAL_T + WHERE INTENSITY_LEVEL_EMOTIONAL_T.GUID = a_guid + ; + + IF a_debug = 1 THEN + SELECT * FROM tmp_Intensity_Level_Emotional_Calc_Distraction; + END IF; + + CALL parts.p_dog_clear_calc_distraction_intensity_level ( + a_guid + , 0 -- a_debug + ); + END IF; + + -- Call Calc Intensity Level Sight + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Distraction t_ERROR INNER JOIN parts.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 + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_intensity_level_sight -- a_get_all_intensity_level_sight + , a_get_inactive_intensity_level_sight -- a_get_inactive_intensity_level_sight + , a_ids_intensity_level_sight -- a_ids_intensity_level_sight + , a_names_intensity_level_sight -- a_names_intensity_level_sight + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_distraction_intensity_level ( + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_intensity_level_sight -- a_get_all_intensity_level_sight + , a_get_inactive_intensity_level_sight -- a_get_inactive_intensity_level_sight + , a_ids_intensity_level_sight -- a_ids_intensity_level_sight + , a_names_intensity_level_sight -- a_names_intensity_level_sight + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + INSERT INTO tmp_Intensity_Level_Sight_Calc_Distraction ( + id_intensity_level + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + INTENSITY_LEVEL_SIGHT_T.id_intensity_level + , INTENSITY_LEVEL_SIGHT_T.code + , INTENSITY_LEVEL_SIGHT_T.name + , INTENSITY_LEVEL_SIGHT_T.active + + , INTENSITY_LEVEL_SIGHT_T.does_meet_id_filters + , INTENSITY_LEVEL_SIGHT_T.does_meet_non_id_filters + FROM parts.DOG_Distraction_Intensity_Level_Temp INTENSITY_LEVEL_SIGHT_T + WHERE INTENSITY_LEVEL_SIGHT_T.GUID = a_guid + ; + + IF a_debug = 1 THEN + SELECT * FROM tmp_Intensity_Level_Sight_Calc_Distraction; + END IF; + + CALL parts.p_dog_clear_calc_distraction_intensity_level ( + a_guid + , 0 -- a_debug + ); + END IF; + + -- Call Calc Intensity Level Sound + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Distraction t_ERROR INNER JOIN parts.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 + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_intensity_level_sound -- a_get_all_intensity_level_sound + , a_get_inactive_intensity_level_sound -- a_get_inactive_intensity_level_sound + , a_ids_intensity_level_sound -- a_ids_intensity_level_sound + , a_names_intensity_level_sound -- a_names_intensity_level_sound + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_distraction_intensity_level ( + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_intensity_level_sound -- a_get_all_intensity_level_sound + , a_get_inactive_intensity_level_sound -- a_get_inactive_intensity_level_sound + , a_ids_intensity_level_sound -- a_ids_intensity_level_sound + , a_names_intensity_level_sound -- a_names_intensity_level_sound + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + INSERT INTO tmp_Intensity_Level_Sound_Calc_Distraction ( + id_intensity_level + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + INTENSITY_LEVEL_SOUND_T.id_intensity_level + , INTENSITY_LEVEL_SOUND_T.code + , INTENSITY_LEVEL_SOUND_T.name + , INTENSITY_LEVEL_SOUND_T.active + + , INTENSITY_LEVEL_SOUND_T.does_meet_id_filters + , INTENSITY_LEVEL_SOUND_T.does_meet_non_id_filters + FROM parts.DOG_Distraction_Intensity_Level_Temp INTENSITY_LEVEL_SOUND_T + WHERE INTENSITY_LEVEL_SOUND_T.GUID = a_guid + ; + + IF a_debug = 1 THEN + SELECT * FROM tmp_Intensity_Level_Sound_Calc_Distraction; + END IF; + + CALL parts.p_dog_clear_calc_distraction_intensity_level ( + a_guid + , 0 -- a_debug + ); + END IF; + + -- Call Calc Intensity Level Touch + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Distraction t_ERROR INNER JOIN parts.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 + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_intensity_level_touch -- a_get_all_intensity_level_touch + , a_get_inactive_intensity_level_touch -- a_get_inactive_intensity_level_touch + , a_ids_intensity_level_touch -- a_ids_intensity_level_touch + , a_names_intensity_level_touch -- a_names_intensity_level_touch + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_distraction_intensity_level ( + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_intensity_level_touch -- a_get_all_intensity_level_touch + , a_get_inactive_intensity_level_touch -- a_get_inactive_intensity_level_touch + , a_ids_intensity_level_touch -- a_ids_intensity_level_touch + , a_names_intensity_level_touch -- a_names_intensity_level_touch + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + INSERT INTO tmp_Intensity_Level_Touch_Calc_Distraction ( + id_intensity_level + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + INTENSITY_LEVEL_TOUCH_T.id_intensity_level + , INTENSITY_LEVEL_TOUCH_T.code + , INTENSITY_LEVEL_TOUCH_T.name + , INTENSITY_LEVEL_TOUCH_T.active + + , INTENSITY_LEVEL_TOUCH_T.does_meet_id_filters + , INTENSITY_LEVEL_TOUCH_T.does_meet_non_id_filters + FROM parts.DOG_Distraction_Intensity_Level_Temp INTENSITY_LEVEL_TOUCH_T + WHERE INTENSITY_LEVEL_TOUCH_T.GUID = a_guid + ; + + IF a_debug = 1 THEN + SELECT * FROM tmp_Intensity_Level_Touch_Calc_Distraction; + END IF; + + CALL parts.p_dog_clear_calc_distraction_intensity_level ( + a_guid + , 0 -- a_debug + ); + END IF; + + -- Distractions + IF v_has_filter_distraction_id = 1 THEN + CALL parts.p_core_split(a_guid, a_ids_distraction, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Id_Calc_Distraction ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF v_has_filter_distraction_notes = 1 THEN + CALL parts.p_core_split(a_guid, a_notes_distraction, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Notes_Calc_Distraction ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Distraction t_ERROR INNER JOIN parts.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 EXISTS ( + SELECT * + FROM tmp_Split_Id_Calc_Distraction t_SPLIT_ID + LEFT JOIN parts.DOG_Distraction DISTRACTION ON t_SPLIT_ID.as_int = DISTRACTION.id_distraction + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(DISTRACTION.id_distraction) + OR ( + DISTRACTION.active = 0 + AND a_get_inactive_distraction = 0 + ) + ) THEN + INSERT INTO tmp_Msg_Error_Calc_Distraction ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Invalid or inactive Distraction IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split_Id_Calc_Distraction t_SPLIT_ID + LEFT JOIN parts.DOG_Distraction DISTRACTION ON t_SPLIT_ID.as_int = DISTRACTION.id_distraction + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(DISTRACTION.id_distraction) + OR ( + DISTRACTION.active = 0 + AND a_get_inactive_distraction = 0 + ) + ; + /* Don't error on notes not found + ELSEIF EXISTS () + */ + ELSE + IF a_debug = 1 THEN + SELECT 'Distraction Filters'; + WITH + Distraction_Id_Filter AS ( + SELECT DISTRACTION.id_distraction + FROM tmp_Split_Id_Calc_Distraction t_SPLIT_ID + INNER JOIN parts.DOG_Distraction DISTRACTION ON t_SPLIT_ID.as_int = DISTRACTION.id_distraction + ) + , Distraction_Notes_Filter AS ( + SELECT DISTRACTION.id_distraction + FROM tmp_Split_Notes_Calc_Distraction t_SPLIT_NOTES + INNER JOIN parts.DOG_Distraction DISTRACTION ON DISTRACTION.notes LIKE CONCAT('%', t_SPLIT_NOTES.substring, '%') + WHERE NULLIF(t_SPLIT_NOTES.substring, '') IS NOT NULL + ) + , Distraction_Filters AS ( + SELECT + DISTRACTION_COMBINED.id_distraction + , MAX(DISTRACTION_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(DISTRACTION_COMBINED.does_meet_notes_filter) AS does_meet_notes_filter + FROM ( + SELECT + DISTRACTION_ID_FILTER.id_distraction + , 1 AS does_meet_id_filter + , 0 AS does_meet_notes_filter + FROM Distraction_Id_Filter DISTRACTION_ID_FILTER + UNION + SELECT + DISTRACTION_NOTES_FILTER.id_distraction + , 0 AS does_meet_id_filter + , 1 AS does_meet_notes_filter + FROM Distraction_Notes_Filter DISTRACTION_NOTES_FILTER + ) DISTRACTION_COMBINED + GROUP BY DISTRACTION_COMBINED.id_distraction + ) + SELECT + DISTRACTION.id_distraction + , DISTRACTION.id_assessment + , DISTRACTION.id_distraction_type + , DISTRACTION.id_intensity_level_emotional + , DISTRACTION.id_intensity_level_sight + , DISTRACTION.id_intensity_level_sound + , DISTRACTION.id_intensity_level_touch + , DISTRACTION.quantity + , DISTRACTION.proximity_metres + , DISTRACTION.notes + , DISTRACTION.active + , CASE WHEN + v_has_filter_distraction_id = 0 + OR DISTRACTION_FILTERS.does_meet_id_filter = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_distraction_notes = 0 + AND v_has_filter_distraction_quantity_min = 0 + AND v_has_filter_distraction_quantity_max = 0 + AND v_has_filter_distraction_proximity_metres_min = 0 + AND v_has_filter_distraction_proximity_metres_max = 0 + ) + OR DISTRACTION_FILTERS.does_meet_notes_filter = 1 + OR ( + v_has_filter_distraction_quantity_min = 0 + OR ( + v_has_filter_distraction_quantity_min = 1 + AND DISTRACTION.quantity >= v_has_filter_distraction_quantity_min + ) + ) + OR ( + v_has_filter_distraction_quantity_max = 0 + OR ( + v_has_filter_distraction_quantity_max = 1 + AND DISTRACTION.quantity <= v_has_filter_distraction_quantity_max + ) + ) + OR ( + v_has_filter_distraction_proximity_metres_min = 0 + OR ( + v_has_filter_distraction_proximity_metres_min = 1 + AND DISTRACTION.proximity_metres >= v_has_filter_distraction_proximity_metres_min + ) + ) + OR ( + v_has_filter_distraction_proximity_metres_max = 0 + OR ( + v_has_filter_distraction_proximity_metres_max = 1 + AND DISTRACTION.proximity_metres <= v_has_filter_distraction_proximity_metres_max + ) + ) + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.DOG_Distraction DISTRACTION + LEFT JOIN Distraction_Filters DISTRACTION_FILTERS ON DISTRACTION.id_distraction = DISTRACTION_FILTERS.id_distraction + WHERE + ( + a_get_all_distraction = 1 + OR ( + v_has_filter_distraction_id = 1 + AND DISTRACTION_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_distraction_notes = 1 + AND DISTRACTION_FILTERS.does_meet_notes_filter = 1 + ) + OR ( + v_has_filter_distraction_quantity_min = 1 + AND DISTRACTION.quantity >= v_has_filter_distraction_quantity_min + ) + OR ( + v_has_filter_distraction_quantity_max = 1 + AND DISTRACTION.quantity <= v_has_filter_distraction_quantity_max + ) + OR ( + v_has_filter_distraction_proximity_metres_min = 1 + AND DISTRACTION.proximity_metres >= v_has_filter_distraction_proximity_metres_min + ) + OR ( + v_has_filter_distraction_proximity_metres_max = 1 + AND DISTRACTION.proximity_metres <= v_has_filter_distraction_proximity_metres_max + ) + ) + AND ( + a_get_inactive_distraction = 1 + OR DISTRACTION.active = 1 + ) + ; + END IF; + INSERT INTO tmp_Distraction_Calc_Distraction ( + id_distraction + , id_assessment + , id_distraction_type + , id_intensity_level_emotional + , id_intensity_level_sight + , id_intensity_level_sound + , id_intensity_level_touch + , quantity + , proximity_metres + , notes + , active + , does_meet_id_filters + , does_meet_non_id_filters + ) + WITH + Distraction_Id_Filter AS ( + SELECT DISTRACTION.id_distraction + FROM tmp_Split_Id_Calc_Distraction t_SPLIT_ID + INNER JOIN parts.DOG_Distraction DISTRACTION ON t_SPLIT_ID.as_int = DISTRACTION.id_distraction + ) + , Distraction_Notes_Filter AS ( + SELECT DISTRACTION.id_distraction + FROM tmp_Split_Notes_Calc_Distraction t_SPLIT_NOTES + INNER JOIN parts.DOG_Distraction DISTRACTION ON DISTRACTION.notes LIKE CONCAT('%', t_SPLIT_NOTES.substring, '%') + WHERE + t_SPLIT_NOTES.substring IS NOT NULL + AND t_SPLIT_NOTES.substring <> '' + ) + , Distraction_Filters AS ( + SELECT + DISTRACTION_COMBINED.id_distraction + , MAX(DISTRACTION_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(DISTRACTION_COMBINED.does_meet_notes_filter) AS does_meet_notes_filter + FROM ( + SELECT + DISTRACTION_ID_FILTER.id_distraction + , 1 AS does_meet_id_filter + , 0 AS does_meet_notes_filter + FROM Distraction_Id_Filter DISTRACTION_ID_FILTER + UNION + SELECT + DISTRACTION_NOTES_FILTER.id_distraction + , 0 AS does_meet_id_filter + , 1 AS does_meet_notes_filter + FROM Distraction_Notes_Filter DISTRACTION_NOTES_FILTER + ) DISTRACTION_COMBINED + GROUP BY DISTRACTION_COMBINED.id_distraction + ) + SELECT + DISTRACTION.id_distraction + , DISTRACTION.id_assessment + , DISTRACTION.id_distraction_type + , DISTRACTION.id_intensity_level_emotional + , DISTRACTION.id_intensity_level_sight + , DISTRACTION.id_intensity_level_sound + , DISTRACTION.id_intensity_level_touch + , DISTRACTION.quantity + , DISTRACTION.proximity_metres + , DISTRACTION.notes + , DISTRACTION.active + , CASE WHEN + v_has_filter_distraction_id = 0 + OR DISTRACTION_FILTERS.does_meet_id_filter = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_distraction_notes = 0 + AND v_has_filter_distraction_quantity_min = 0 + AND v_has_filter_distraction_quantity_max = 0 + AND v_has_filter_distraction_proximity_metres_min = 0 + AND v_has_filter_distraction_proximity_metres_max = 0 + ) + OR DISTRACTION_FILTERS.does_meet_notes_filter = 1 + OR ( + v_has_filter_distraction_quantity_min = 0 + OR ( + v_has_filter_distraction_quantity_min = 1 + AND DISTRACTION.quantity >= v_has_filter_distraction_quantity_min + ) + ) + OR ( + v_has_filter_distraction_quantity_max = 0 + OR ( + v_has_filter_distraction_quantity_max = 1 + AND DISTRACTION.quantity <= v_has_filter_distraction_quantity_max + ) + ) + OR ( + v_has_filter_distraction_proximity_metres_min = 0 + OR ( + v_has_filter_distraction_proximity_metres_min = 1 + AND DISTRACTION.proximity_metres >= v_has_filter_distraction_proximity_metres_min + ) + ) + OR ( + v_has_filter_distraction_proximity_metres_max = 0 + OR ( + v_has_filter_distraction_proximity_metres_max = 1 + AND DISTRACTION.proximity_metres <= v_has_filter_distraction_proximity_metres_max + ) + ) + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.DOG_Distraction DISTRACTION + LEFT JOIN Distraction_Filters DISTRACTION_FILTERS ON DISTRACTION.id_distraction = DISTRACTION_FILTERS.id_distraction + WHERE + ( + a_get_all_distraction = 1 + OR ( + v_has_filter_distraction_id = 1 + AND DISTRACTION_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_distraction_notes = 1 + AND DISTRACTION_FILTERS.does_meet_notes_filter = 1 + ) + OR ( + v_has_filter_distraction_quantity_min = 1 + AND DISTRACTION.quantity >= v_has_filter_distraction_quantity_min + ) + OR ( + v_has_filter_distraction_quantity_max = 1 + AND DISTRACTION.quantity <= v_has_filter_distraction_quantity_max + ) + OR ( + v_has_filter_distraction_proximity_metres_min = 1 + AND DISTRACTION.proximity_metres >= v_has_filter_distraction_proximity_metres_min + ) + OR ( + v_has_filter_distraction_proximity_metres_max = 1 + AND DISTRACTION.proximity_metres <= v_has_filter_distraction_proximity_metres_max + ) + ) + AND ( + a_get_inactive_distraction = 1 + OR DISTRACTION.active = 1 + ) + ; + END IF; + END IF; + + DELETE FROM tmp_Split_Id_Calc_Distraction; + DELETE FROM tmp_Split_Notes_Calc_Distraction; + + IF a_debug = 1 THEN + SELECT 'After get Distractions'; + SELECT * FROM tmp_Distraction_Calc_Distraction; + END IF; + + -- Filter records + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Distraction t_ERROR INNER JOIN parts.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 + DELETE t_DISTRACTION + FROM tmp_Distraction_Calc_Distraction t_DISTRACTION + LEFT JOIN tmp_Assessment_Calc_Distraction t_ASSESSMENT ON t_DISTRACTION.id_assessment = t_ASSESSMENT.id_assessment + LEFT JOIN tmp_Distraction_Type_Calc_Distraction t_DISTRACTION_TYPE ON t_DISTRACTION.id_distraction_type = t_DISTRACTION_TYPE.id_type + LEFT JOIN tmp_Intensity_Level_Emotional_Calc_Distraction t_INTENSITY_LEVEL_EMOTIONAL ON t_DISTRACTION.id_intensity_level_emotional = t_INTENSITY_LEVEL_EMOTIONAL.id_intensity_level + LEFT JOIN tmp_Intensity_Level_Sight_Calc_Distraction t_INTENSITY_LEVEL_SIGHT ON t_DISTRACTION.id_intensity_level_sight = t_INTENSITY_LEVEL_SIGHT.id_intensity_level + LEFT JOIN tmp_Intensity_Level_Sound_Calc_Distraction t_INTENSITY_LEVEL_SOUND ON t_DISTRACTION.id_intensity_level_sound = t_INTENSITY_LEVEL_SOUND.id_intensity_level + LEFT JOIN tmp_Intensity_Level_Touch_Calc_Distraction t_INTENSITY_LEVEL_TOUCH ON t_DISTRACTION.id_intensity_level_touch = t_INTENSITY_LEVEL_TOUCH.id_intensity_level + WHERE + ( + a_require_all_id_search_filters_met = 1 + AND ( + t_DISTRACTION.does_meet_id_filters = 0 + OR IFNULL(t_ASSESSMENT.does_meet_id_filters, 1) = 0 + OR IFNULL(t_DISTRACTION_TYPE.does_meet_id_filters, 1) = 0 + OR IFNULL(t_INTENSITY_LEVEL_EMOTIONAL.does_meet_id_filters, 1) = 0 + OR IFNULL(t_INTENSITY_LEVEL_SIGHT.does_meet_id_filters, 1) = 0 + OR IFNULL(t_INTENSITY_LEVEL_SOUND.does_meet_id_filters, 1) = 0 + OR IFNULL(t_INTENSITY_LEVEL_TOUCH.does_meet_id_filters, 1) = 0 + ) + ) + OR ( + a_require_all_non_id_search_filters_met = 1 + AND ( + t_DISTRACTION.does_meet_non_id_filters = 0 + OR IFNULL(t_ASSESSMENT.does_meet_non_id_filters, 1) = 0 + OR IFNULL(t_DISTRACTION_TYPE.does_meet_non_id_filters, 1) = 0 + OR IFNULL(t_INTENSITY_LEVEL_EMOTIONAL.does_meet_non_id_filters, 1) = 0 + OR IFNULL(t_INTENSITY_LEVEL_SIGHT.does_meet_non_id_filters, 1) = 0 + OR IFNULL(t_INTENSITY_LEVEL_SOUND.does_meet_non_id_filters, 1) = 0 + OR IFNULL(t_INTENSITY_LEVEL_TOUCH.does_meet_non_id_filters, 1) = 0 + ) + ) + OR ( + a_require_any_id_search_filters_met = 1 + AND t_DISTRACTION.does_meet_id_filters = 0 + AND IFNULL(t_ASSESSMENT.does_meet_id_filters, 1) = 0 + AND IFNULL(t_DISTRACTION_TYPE.does_meet_id_filters, 1) = 0 + AND IFNULL(t_INTENSITY_LEVEL_EMOTIONAL.does_meet_id_filters, 1) = 0 + AND IFNULL(t_INTENSITY_LEVEL_SIGHT.does_meet_id_filters, 1) = 0 + AND IFNULL(t_INTENSITY_LEVEL_SOUND.does_meet_id_filters, 1) = 0 + AND IFNULL(t_INTENSITY_LEVEL_TOUCH.does_meet_id_filters, 1) = 0 + ) + OR ( + a_require_any_non_id_search_filters_met = 1 + AND t_DISTRACTION.does_meet_non_id_filters = 0 + AND IFNULL(t_ASSESSMENT.does_meet_non_id_filters, 1) = 0 + AND IFNULL(t_DISTRACTION_TYPE.does_meet_non_id_filters, 1) = 0 + AND IFNULL(t_INTENSITY_LEVEL_EMOTIONAL.does_meet_non_id_filters, 1) = 0 + AND IFNULL(t_INTENSITY_LEVEL_SIGHT.does_meet_non_id_filters, 1) = 0 + AND IFNULL(t_INTENSITY_LEVEL_SOUND.does_meet_non_id_filters, 1) = 0 + AND IFNULL(t_INTENSITY_LEVEL_TOUCH.does_meet_non_id_filters, 1) = 0 + ) + ; + END IF; + + IF a_debug = 1 THEN + SELECT 'After filter Distractions'; + SELECT * FROM tmp_Assessment_Calc_Distraction; + SELECT * FROM tmp_Distraction_Type_Calc_Distraction; + SELECT * FROM tmp_Intensity_Level_Emotional_Calc_Distraction; + SELECT * FROM tmp_Intensity_Level_Sight_Calc_Distraction; + SELECT * FROM tmp_Intensity_Level_Sound_Calc_Distraction; + SELECT * FROM tmp_Intensity_Level_Touch_Calc_Distraction; + SELECT * FROM tmp_Distraction_Calc_Distraction; + END IF; + + + -- Permissions + IF a_debug = 1 THEN + SELECT + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = a_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error_Calc_Distraction t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error_Calc_Distraction ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Dogs and Button Icons.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT 'Before non-permitted data deletion'; + SELECT * FROM tmp_Assessment_Calc_Distraction; + SELECT * FROM tmp_Distraction_Type_Calc_Distraction; + SELECT * FROM tmp_Intensity_Level_Emotional_Calc_Distraction; + SELECT * FROM tmp_Intensity_Level_Sight_Calc_Distraction; + SELECT * FROM tmp_Intensity_Level_Sound_Calc_Distraction; + SELECT * FROM tmp_Intensity_Level_Touch_Calc_Distraction; + SELECT * FROM tmp_Distraction_Calc_Distraction; + END IF; + + IF EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Distraction t_ERROR INNER JOIN parts.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_Assessment_Calc_Distraction; + SELECT * FROM tmp_Distraction_Type_Calc_Distraction; + SELECT * FROM tmp_Intensity_Level_Emotional_Calc_Distraction; + SELECT * FROM tmp_Intensity_Level_Sight_Calc_Distraction; + SELECT * FROM tmp_Intensity_Level_Sound_Calc_Distraction; + SELECT * FROM tmp_Intensity_Level_Touch_Calc_Distraction; + SELECT * FROM tmp_Distraction_Calc_Distraction; + END IF; + + DELETE FROM tmp_Assessment_Calc_Distraction; + DELETE FROM tmp_Distraction_Type_Calc_Distraction; + DELETE FROM tmp_Intensity_Level_Emotional_Calc_Distraction; + DELETE FROM tmp_Intensity_Level_Sight_Calc_Distraction; + DELETE FROM tmp_Intensity_Level_Sound_Calc_Distraction; + DELETE FROM tmp_Intensity_Level_Touch_Calc_Distraction; + DELETE FROM tmp_Distraction_Calc_Distraction; + END IF; + + IF a_debug = 1 THEN + SELECT 'After non-permitted data deletion'; + END IF; + + -- Outputs + START TRANSACTION; + -- Distractions + INSERT INTO parts.DOG_Distraction_Temp ( + guid + , id_distraction + , id_assessment + , id_distraction_type + , id_intensity_level_emotional + , id_intensity_level_sight + , id_intensity_level_sound + , id_intensity_level_touch + , quantity + , proximity_metres + , notes + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + a_guid + , t_DISTRACTION.id_distraction + , t_DISTRACTION.id_assessment + , t_DISTRACTION.id_distraction_type + , t_DISTRACTION.id_intensity_level_emotional + , t_DISTRACTION.id_intensity_level_sight + , t_DISTRACTION.id_intensity_level_sound + , t_DISTRACTION.id_intensity_level_touch + , t_DISTRACTION.quantity + , t_DISTRACTION.proximity_metres + , t_DISTRACTION.notes + , t_DISTRACTION.active + + , t_DISTRACTION.does_meet_id_filters + , t_DISTRACTION.does_meet_non_id_filters + FROM parts.DOG_Distraction DISTRACTION + INNER JOIN tmp_Distraction_Calc_Distraction t_DISTRACTION ON DISTRACTION.id_distraction = t_DISTRACTION.id_distraction + ; + COMMIT; + + -- Errors + IF a_show_errors = 1 THEN + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_Distraction t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + END IF; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Assessment_Calc_Distraction; + SELECT * FROM tmp_Distraction_Type_Calc_Distraction; + SELECT * FROM tmp_Intensity_Level_Emotional_Calc_Distraction; + SELECT * FROM tmp_Intensity_Level_Sight_Calc_Distraction; + SELECT * FROM tmp_Intensity_Level_Sound_Calc_Distraction; + SELECT * FROM tmp_Intensity_Level_Touch_Calc_Distraction; + SELECT * FROM tmp_Distraction_Calc_Distraction; + END IF; + + CALL parts.p_dog_clear_calc_assessment ( + a_guid + , 0 -- a_debug + ); + + CALL parts.p_dog_clear_calc_distraction_type ( + a_guid + , 0 -- a_debug + ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Notes_Calc_Distraction; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Distraction; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Distraction; + DROP TEMPORARY TABLE IF EXISTS tmp_Distraction_Calc_Distraction; + DROP TEMPORARY TABLE IF EXISTS tmp_Intensity_Level_Touch_Calc_Distraction; + DROP TEMPORARY TABLE IF EXISTS tmp_Intensity_Level_Sound_Calc_Distraction; + DROP TEMPORARY TABLE IF EXISTS tmp_Intensity_Level_Sight_Calc_Distraction; + DROP TEMPORARY TABLE IF EXISTS tmp_Intensity_Level_Emotional_Calc_Distraction; + DROP TEMPORARY TABLE IF EXISTS tmp_Distraction_Type_Calc_Distraction; + DROP TEMPORARY TABLE IF EXISTS tmp_Assessment_Calc_Distraction; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_calc_distraction ( + 'slippery ' -- a_guid + , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_distraction + , 0 -- a_get_inactive_distraction + , '' -- a_ids_distraction + , '' -- a_notes_distraction + , NULL -- a_min_quantity_distraction + , NULL -- a_max_quantity_distraction + , NULL -- a_min_proximity_metres_distraction + , NULL -- a_max_proximity_metres_distraction + + , 1 -- a_get_all_distraction_type + , 0 -- a_get_inactive_distraction_type + , '' -- a_ids_distraction_type + , '' -- a_names_distraction_type + + , 1 -- a_get_all_intensity_level_emotional + , 0 -- a_get_inactive_intensity_level_emotional + , '' -- a_ids_intensity_level_emotional + , '' -- a_names_intensity_level_emotional + + , 1 -- a_get_all_intensity_level_sight + , 0 -- a_get_inactive_intensity_level_sight + , '' -- a_ids_intensity_level_sight + , '' -- a_names_intensity_level_sight + + , 1 -- a_get_all_intensity_level_sound + , 0 -- a_get_inactive_intensity_level_sound + , '' -- a_ids_intensity_level_sound + , '' -- a_names_intensity_level_sound + + , 1 -- a_get_all_intensity_level_touch + , 0 -- a_get_inactive_intensity_level_touch + , '' -- a_ids_intensity_level_touch + , '' -- a_names_intensity_level_touch + + , 1 -- a_get_all_assessment + , 0 -- a_get_inactive_assessment + , '' -- a_ids_assessment + , '' -- a_notes_assessment + , NULL -- a_min_temperature_assessment + , NULL -- a_max_temperature_assessment + , 1 -- a_get_all_weather + , 0 -- a_get_inactive_weather + , '' -- a_ids_weather + , '' -- a_names_weather + , 1 -- a_get_all_lighting_level + , 0 -- a_get_inactive_lighting_level + , '' -- a_ids_lighting_level + , '' -- a_names_lighting_level + , 1 -- a_get_all_location + , 0 -- a_get_inactive_location + , '' -- a_ids_location + , '' -- a_names_location + , 1 -- a_get_all_user_handler + , 0 -- a_get_inactive_user_handler + , '' -- a_ids_user_handler + -- , IN a_auth0_ids_user_handler TEXT + , '' -- a_names_user_handler + , '' -- a_emails_user_handler + , 0 -- a_require_all_id_search_filters_met + , 0 -- 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 + , 0 -- a_show_errors + , 0 -- a_debug +); + +SELECT * +FROM parts.DOG_Distraction_Temp +; + +CALL parts.p_dog_clear_calc_distraction ( + 'slippery ' -- a_guid + , 1 -- debug +); + +-- DELETE FROM parts.DOG_Distraction_Temp; + +*/ diff --git a/static/MySQL/71320_p_dog_clear_calc_distraction.sql b/static/MySQL/71320_p_dog_clear_calc_distraction.sql new file mode 100644 index 0000000..857c35c --- /dev/null +++ b/static/MySQL/71320_p_dog_clear_calc_distraction.sql @@ -0,0 +1,45 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_clear_calc_distraction; +DROP PROCEDURE IF EXISTS parts.p_distraction_clear_calc_distraction; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_clear_calc_distraction ( + IN a_guid BINARY(36) + , IN a_debug BIT +) +BEGIN + DECLARE v_time_start TIMESTAMP(6); + SET v_time_start := CURRENT_TIMESTAMP(6); + + CALL parts.p_core_validate_guid ( a_guid ); + + START TRANSACTION; + + DELETE DISTRACTIONS_T + FROM parts.DOG_Distraction_Temp DISTRACTIONS_T + WHERE DISTRACTIONS_T.GUID = a_guid + ; + + COMMIT; + + IF a_debug = 1 THEN + CALL parts.p_debug_timing_reporting( v_time_start ); + END IF; +END // +DELIMITER ; + +/* + +CALL parts.p_dog_clear_calc_distraction ( + 'crips ' -- a_guid + , 1 -- debug +); + +SELECT * +FROM parts.DOG_Calc_User_Temp +WHERE GUID = 'chips ' +; + +*/ diff --git a/static/MySQL/71320_p_dog_get_many_distraction.sql b/static/MySQL/71320_p_dog_get_many_distraction.sql new file mode 100644 index 0000000..8b573bd --- /dev/null +++ b/static/MySQL/71320_p_dog_get_many_distraction.sql @@ -0,0 +1,642 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_get_many_distraction; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_get_many_distraction ( + IN a_id_user INT + , IN a_get_all_distraction BIT + , IN a_get_inactive_distraction BIT + , IN a_ids_distraction TEXT + , IN a_notes_distraction TEXT + , IN a_min_quantity_distraction INT + , IN a_max_quantity_distraction INT + , IN a_min_proximity_metres_distraction FLOAT + , IN a_max_proximity_metres_distraction FLOAT + , IN a_get_all_distraction_type BIT + , IN a_get_inactive_distraction_type BIT + , IN a_ids_distraction_type TEXT + , IN a_names_distraction_type TEXT + , IN a_get_all_intensity_level_emotional BIT + , IN a_get_inactive_intensity_level_emotional BIT + , IN a_ids_intensity_level_emotional TEXT + , IN a_names_intensity_level_emotional TEXT + , IN a_get_all_intensity_level_sight BIT + , IN a_get_inactive_intensity_level_sight BIT + , IN a_ids_intensity_level_sight TEXT + , IN a_names_intensity_level_sight TEXT + , IN a_get_all_intensity_level_sound BIT + , IN a_get_inactive_intensity_level_sound BIT + , IN a_ids_intensity_level_sound TEXT + , IN a_names_intensity_level_sound TEXT + , IN a_get_all_intensity_level_touch BIT + , IN a_get_inactive_intensity_level_touch BIT + , IN a_ids_intensity_level_touch TEXT + , IN a_names_intensity_level_touch TEXT + , IN a_get_all_assessment BIT + , IN a_get_inactive_assessment BIT + , IN a_ids_assessment TEXT + , IN a_notes_assessment TEXT + , IN a_min_temperature_assessment DECIMAL(5, 2) + , IN a_max_temperature_assessment DECIMAL(5, 2) + , IN a_get_all_weather BIT + , IN a_get_inactive_weather BIT + , IN a_ids_weather TEXT + , IN a_names_weather TEXT + , IN a_get_all_lighting_level BIT + , IN a_get_inactive_lighting_level BIT + , IN a_ids_lighting_level TEXT + , IN a_names_lighting_level TEXT + , IN a_get_all_location BIT + , IN a_get_inactive_location BIT + , IN a_ids_location TEXT + , IN a_names_location TEXT + , IN a_get_all_user_handler BIT + , IN a_get_inactive_user_handler BIT + , IN a_ids_user_handler TEXT + -- , IN a_auth0_ids_user_handler TEXT + , IN a_names_user_handler TEXT + , IN a_emails_user_handler TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_show_errors BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_guid BINARY(36); + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_guid := UUID(); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + SET a_id_user := IFNULL(a_id_user, 0); + /* + Filters handled by Calc Stored Procedure + */ + SET a_show_errors := IFNULL(a_show_errors, 1); + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_id_user + , a_get_all_distraction + , a_get_inactive_distraction + , a_ids_distraction + , a_notes_distraction + , a_min_quantity_distraction + , a_max_quantity_distraction + , a_min_proximity_metres_distraction + , a_max_proximity_metres_distraction + , a_get_all_distraction_type + , a_get_inactive_distraction_type + , a_ids_distraction_type + , a_names_distraction_type + , a_get_all_intensity_level_emotional + , a_get_inactive_intensity_level_emotional + , a_ids_intensity_level_emotional + , a_names_intensity_level_emotional + , a_get_all_intensity_level_sight + , a_get_inactive_intensity_level_sight + , a_ids_intensity_level_sight + , a_names_intensity_level_sight + , a_get_all_intensity_level_sound + , a_get_inactive_intensity_level_sound + , a_ids_intensity_level_sound + , a_names_intensity_level_sound + , a_get_all_intensity_level_touch + , a_get_inactive_intensity_level_touch + , a_ids_intensity_level_touch + , a_names_intensity_level_touch + , a_get_all_assessment + , a_get_inactive_assessment + , a_ids_assessment + , a_notes_assessment + , a_min_temperature_assessment + , a_max_temperature_assessment + , a_get_all_weather + , a_get_inactive_weather + , a_ids_weather + , a_names_weather + , a_get_all_lighting_level + , a_get_inactive_lighting_level + , a_ids_lighting_level + , a_names_lighting_level + , a_get_all_location + , a_get_inactive_location + , a_ids_location + , a_names_location + , a_get_all_user_handler + , a_get_inactive_user_handler + , a_ids_user_handler + -- , a_auth0_ids_user_handler + , a_names_user_handler + , a_emails_user_handler + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_show_errors + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_guid + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Distraction; + + CREATE TEMPORARY TABLE tmp_Distraction ( + id_distraction INT NOT NULL + , id_assessment INT + , id_distraction_type INT + , id_intensity_level_emotional INT + , id_intensity_level_sight INT + , id_intensity_level_sound INT + , id_intensity_level_touch INT + , quantity INT + , proximity_metres FLOAT + -- , difficulty_level DOUBLE + , notes TEXT + , active BIT + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + -- Permissions + IF a_debug = 1 THEN + SELECT + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = v_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR; + SELECT * FROM tmp_Msg_Error t_ERROR; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Distractions.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + v_guid + , 0 -- a_debug + ); + + + -- Call Distraction Calc + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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 + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_distraction + , a_get_inactive_distraction + , a_ids_distraction + , a_notes_distraction + , a_min_quantity_distraction + , a_max_quantity_distraction + , a_min_proximity_metres_distraction + , a_max_proximity_metres_distraction + , a_get_all_distraction_type + , a_get_inactive_distraction_type + , a_ids_distraction_type + , a_names_distraction_type + , a_get_all_intensity_level_emotional + , a_get_inactive_intensity_level_emotional + , a_ids_intensity_level_emotional + , a_names_intensity_level_emotional + , a_get_all_intensity_level_sight + , a_get_inactive_intensity_level_sight + , a_ids_intensity_level_sight + , a_names_intensity_level_sight + , a_get_all_intensity_level_sound + , a_get_inactive_intensity_level_sound + , a_ids_intensity_level_sound + , a_names_intensity_level_sound + , a_get_all_intensity_level_touch + , a_get_inactive_intensity_level_touch + , a_ids_intensity_level_touch + , a_names_intensity_level_touch + , a_get_all_assessment + , a_get_inactive_assessment + , a_ids_assessment + , a_notes_assessment + , a_min_temperature_assessment + , a_max_temperature_assessment + , a_get_all_weather + , a_get_inactive_weather + , a_ids_weather + , a_names_weather + , a_get_all_lighting_level + , a_get_inactive_lighting_level + , a_ids_lighting_level + , a_names_lighting_level + , a_get_all_location + , a_get_inactive_location + , a_ids_location + , a_names_location + , a_get_all_user_handler + , a_get_inactive_user_handler + , a_ids_user_handler + -- , a_auth0_ids_user_handler + , a_names_user_handler + , a_emails_user_handler + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_distraction ( + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_distraction + , a_get_inactive_distraction + , a_ids_distraction + , a_notes_distraction + , a_min_quantity_distraction + , a_max_quantity_distraction + , a_min_proximity_metres_distraction + , a_max_proximity_metres_distraction + , a_get_all_distraction_type + , a_get_inactive_distraction_type + , a_ids_distraction_type + , a_names_distraction_type + , a_get_all_intensity_level_emotional + , a_get_inactive_intensity_level_emotional + , a_ids_intensity_level_emotional + , a_names_intensity_level_emotional + , a_get_all_intensity_level_sight + , a_get_inactive_intensity_level_sight + , a_ids_intensity_level_sight + , a_names_intensity_level_sight + , a_get_all_intensity_level_sound + , a_get_inactive_intensity_level_sound + , a_ids_intensity_level_sound + , a_names_intensity_level_sound + , a_get_all_intensity_level_touch + , a_get_inactive_intensity_level_touch + , a_ids_intensity_level_touch + , a_names_intensity_level_touch + , a_get_all_assessment + , a_get_inactive_assessment + , a_ids_assessment + , a_notes_assessment + , a_min_temperature_assessment + , a_max_temperature_assessment + , a_get_all_weather + , a_get_inactive_weather + , a_ids_weather + , a_names_weather + , a_get_all_lighting_level + , a_get_inactive_lighting_level + , a_ids_lighting_level + , a_names_lighting_level + , a_get_all_location + , a_get_inactive_location + , a_ids_location + , a_names_location + , a_get_all_user_handler + , a_get_inactive_user_handler + , a_ids_user_handler + -- , a_auth0_ids_user_handler + , a_names_user_handler + , a_emails_user_handler + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM parts.DOG_Distraction_Temp; + SELECT * FROM parts.DOG_Distraction_Temp; + END IF; + + INSERT INTO tmp_Distraction ( + id_distraction + , id_assessment + , id_distraction_type + , id_intensity_level_emotional + , id_intensity_level_sight + , id_intensity_level_sound + , id_intensity_level_touch + , quantity + , proximity_metres + , notes + , active + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + DISTRACTION_T.id_distraction + , DISTRACTION_T.id_assessment + , DISTRACTION_T.id_distraction_type + , DISTRACTION_T.id_intensity_level_emotional + , DISTRACTION_T.id_intensity_level_sight + , DISTRACTION_T.id_intensity_level_sound + , DISTRACTION_T.id_intensity_level_touch + , DISTRACTION_T.quantity + , DISTRACTION_T.proximity_metres + , DISTRACTION_T.notes + , DISTRACTION_T.active + + , DISTRACTION_T.does_meet_id_filters + , DISTRACTION_T.does_meet_non_id_filters + FROM parts.DOG_Distraction_Temp DISTRACTION_T + WHERE DISTRACTION_T.GUID = v_guid + ; + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM tmp_Distraction; + SELECT * FROM tmp_Distraction; + END IF; + END IF; + + -- Filter outputs + IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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_Distraction; + END IF; + + DELETE FROM tmp_Distraction; + END IF; + + + -- Outputs + -- Distractions + SELECT + t_DISTRACTION.id_distraction + , t_DISTRACTION.id_assessment + , t_DISTRACTION.id_distraction_type + , DISTRACTION_TYPE.name AS name_distraction_type + , t_DISTRACTION.id_intensity_level_emotional + , INTENSITY_LEVEL_EMOTIONAL.name AS name_intensity_level_emotional + , t_DISTRACTION.id_intensity_level_sight + , INTENSITY_LEVEL_SIGHT.name AS name_intensity_level_sight + , t_DISTRACTION.id_intensity_level_sound + , INTENSITY_LEVEL_SOUND.name AS name_intensity_level_sound + , t_DISTRACTION.id_intensity_level_touch + , INTENSITY_LEVEL_TOUCH.name AS name_intensity_level_touch + , t_DISTRACTION.quantity + , t_DISTRACTION.proximity_metres + , t_DISTRACTION.notes + , t_DISTRACTION.active + + , t_DISTRACTION.does_meet_id_filters + , t_DISTRACTION.does_meet_non_id_filters + FROM tmp_Distraction t_DISTRACTION + LEFT JOIN parts.DOG_Distraction_Type DISTRACTION_TYPE ON t_DISTRACTION.id_distraction_type = DISTRACTION_TYPE.id_type + LEFT JOIN parts.DOG_Distraction_Intensity_Level INTENSITY_LEVEL_EMOTIONAL ON t_DISTRACTION.id_intensity_level_emotional = INTENSITY_LEVEL_EMOTIONAL.id_intensity_level + LEFT JOIN parts.DOG_Distraction_Intensity_Level INTENSITY_LEVEL_SIGHT ON t_DISTRACTION.id_intensity_level_sight = INTENSITY_LEVEL_SIGHT.id_intensity_level + LEFT JOIN parts.DOG_Distraction_Intensity_Level INTENSITY_LEVEL_SOUND ON t_DISTRACTION.id_intensity_level_sound = INTENSITY_LEVEL_SOUND.id_intensity_level + LEFT JOIN parts.DOG_Distraction_Intensity_Level INTENSITY_LEVEL_TOUCH ON t_DISTRACTION.id_intensity_level_touch = INTENSITY_LEVEL_TOUCH.id_intensity_level + ORDER BY DISTRACTION_TYPE.name + ; + + -- Errors + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Distraction; + END IF; + + CALL parts.p_dog_clear_calc_distraction( + v_guid -- a_guid + , 0 -- a_debug + ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Distraction; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_get_many_distraction ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_distraction + , 0 -- a_get_inactive_distraction + , '' -- a_ids_distraction + , '' -- a_notes_distraction + , NULL -- a_min_quantity_distraction + , NULL -- a_max_quantity_distraction + , NULL -- a_min_proximity_metres_distraction + , NULL -- a_max_proximity_metres_distraction + + , 1 -- a_get_all_distraction_type + , 0 -- a_get_inactive_distraction_type + , '' -- a_ids_distraction_type + , '' -- a_names_distraction_type + + , 1 -- a_get_all_intensity_level_emotional + , 0 -- a_get_inactive_intensity_level_emotional + , '' -- a_ids_intensity_level_emotional + , '' -- a_names_intensity_level_emotional + + , 1 -- a_get_all_intensity_level_sight + , 0 -- a_get_inactive_intensity_level_sight + , '' -- a_ids_intensity_level_sight + , '' -- a_names_intensity_level_sight + + , 1 -- a_get_all_intensity_level_sound + , 0 -- a_get_inactive_intensity_level_sound + , '' -- a_ids_intensity_level_sound + , '' -- a_names_intensity_level_sound + + , 1 -- a_get_all_intensity_level_touch + , 0 -- a_get_inactive_intensity_level_touch + , '' -- a_ids_intensity_level_touch + , '' -- a_names_intensity_level_touch + + , 1 -- a_get_all_assessment + , 0 -- a_get_inactive_assessment + , '' -- a_ids_assessment + , '' -- a_notes_assessment + , NULL -- a_min_temperature_assessment + , NULL -- a_max_temperature_assessment + , 1 -- a_get_all_weather + , 0 -- a_get_inactive_weather + , '' -- a_ids_weather + , '' -- a_names_weather + , 1 -- a_get_all_lighting_level + , 0 -- a_get_inactive_lighting_level + , '' -- a_ids_lighting_level + , '' -- a_names_lighting_level + , 1 -- a_get_all_location + , 0 -- a_get_inactive_location + , '' -- a_ids_location + , '' -- a_names_location + , 1 -- a_get_all_user_handler + , 0 -- a_get_inactive_user_handler + , '' -- a_ids_user_handler + -- , IN a_auth0_ids_user_handler TEXT + , '' -- a_names_user_handler + , '' -- a_emails_user_handler + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_show_errors + , 1 -- a_debug +); + + + +*/ \ No newline at end of file diff --git a/static/MySQL/71324_p_dog_calc_bribe.sql b/static/MySQL/71324_p_dog_calc_bribe.sql new file mode 100644 index 0000000..d9a5e15 --- /dev/null +++ b/static/MySQL/71324_p_dog_calc_bribe.sql @@ -0,0 +1,549 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_calc_bribe; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_calc_bribe ( + IN a_guid BINARY(36) + , IN a_id_user INT + , IN a_get_all_bribe BIT + , IN a_get_inactive_bribe BIT + , IN a_ids_bribe TEXT + , IN a_names_bribe TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_show_errors BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_has_filter_bribe_id BIT; + DECLARE v_has_filter_bribe_name BIT; + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Bribe ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error_Calc_Bribe ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_Bribe t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error_Calc_Bribe; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + + CALL parts.p_core_validate_guid ( a_guid ); + + SET a_id_user := IFNULL(a_id_user, 0); + SET a_get_all_bribe := IFNULL(a_get_all_bribe, 0); + SET a_get_inactive_bribe := IFNULL(a_get_inactive_bribe, 0); + SET a_ids_bribe := TRIM(IFNULL(a_ids_bribe, '')); + SET a_names_bribe := TRIM(IFNULL(a_names_bribe, '')); + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + SET a_show_errors := IFNULL(a_show_errors, 0); + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_guid + , a_id_user + , a_get_all_bribe + , a_get_inactive_bribe + , a_ids_bribe + , a_names_bribe + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_show_errors + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Bribe; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Bribe; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Bribe; + DROP TEMPORARY TABLE IF EXISTS tmp_Bribe_Calc_Bribe; + + CREATE TEMPORARY TABLE tmp_Bribe_Calc_Bribe ( + id_bribe INT NOT NULL + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Bribe ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_Bribe ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Id_Calc_Bribe; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name_Calc_Bribe ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Name_Calc_Bribe; + + SET v_has_filter_bribe_id = CASE WHEN a_ids_bribe <> '' THEN 1 ELSE 0 END; + SET v_has_filter_bribe_name = CASE WHEN a_names_bribe <> '' THEN 1 ELSE 0 END; + + -- Bribes + IF v_has_filter_bribe_id = 1 THEN + CALL parts.p_core_split(a_guid, a_ids_bribe, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Id_Calc_Bribe ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF v_has_filter_bribe_name = 1 THEN + CALL parts.p_core_split(a_guid, a_names_bribe, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Name_Calc_Bribe ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Bribe t_ERROR INNER JOIN parts.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 EXISTS ( + SELECT * + FROM tmp_Split_Id_Calc_Bribe t_SPLIT_ID + LEFT JOIN parts.DOG_Bribe BRIBES ON t_SPLIT_ID.as_int = BRIBES.id_bribe + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(BRIBES.id_bribe) + OR ( + BRIBES.active = 0 + AND a_get_inactive_bribe = 0 + ) + ) THEN + INSERT INTO tmp_Msg_Error_Calc_Bribe ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Invalid or inactive Bribe IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split_Id_Calc_Bribe t_SPLIT_ID + LEFT JOIN parts.DOG_Bribe BRIBES ON t_SPLIT_ID.as_int = BRIBES.id_bribe + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(BRIBES.id_bribe) + OR ( + BRIBES.active = 0 + AND a_get_inactive_bribe = 0 + ) + ; + /* Don't error on names, hand signals, or notes not found + ELSEIF EXISTS () + */ + ELSE + INSERT INTO tmp_Bribe_Calc_Bribe ( + id_bribe + , does_meet_id_filters + , does_meet_non_id_filters + ) + WITH + Bribe_Id_Filter AS ( + SELECT BRIBES.id_bribe + FROM tmp_Split_Id_Calc_Bribe t_SPLIT_ID + INNER JOIN parts.DOG_Bribe BRIBES ON t_SPLIT_ID.as_int = BRIBES.id_bribe + ) + , Bribe_Name_Filter AS ( + SELECT BRIBES.id_bribe + FROM tmp_Split_Name_Calc_Bribe t_SPLIT_NAME + INNER JOIN parts.DOG_Bribe BRIBES ON BRIBES.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') + WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL + ) + , Bribe_Filters AS ( + SELECT + BRIBES_COMBINED.id_bribe + , MAX(BRIBES_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(BRIBES_COMBINED.does_meet_name_filter) AS does_meet_name_filter + FROM ( + SELECT + BRIBES_ID_FILTER.id_bribe + , 1 AS does_meet_id_filter + , 0 AS does_meet_name_filter + FROM Bribe_Id_Filter BRIBES_ID_FILTER + UNION + SELECT + BRIBES_NAME_FILTER.id_bribe + , 0 AS does_meet_id_filter + , 1 AS does_meet_name_filter + FROM Bribe_Name_Filter BRIBES_NAME_FILTER + ) BRIBES_COMBINED + GROUP BY BRIBES_COMBINED.id_bribe + ) + SELECT + BRIBES.id_bribe + , CASE WHEN + v_has_filter_bribe_id = 0 + OR IFNULL(BRIBES_FILTERS.does_meet_id_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_bribe_name = 0 + ) + OR IFNULL(BRIBES_FILTERS.does_meet_name_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.DOG_Bribe BRIBES + LEFT JOIN Bribe_Filters BRIBES_FILTERS ON BRIBES.id_bribe = BRIBES_FILTERS.id_bribe + WHERE + ( + a_get_all_bribe = 1 + OR ( + v_has_filter_bribe_id = 1 + AND BRIBES_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_bribe_name = 1 + AND BRIBES_FILTERS.does_meet_name_filter = 1 + ) + ) + AND ( + a_get_inactive_bribe = 1 + OR BRIBES.active = 1 + ) + ; + END IF; + END IF; + + DELETE FROM tmp_Split_Id_Calc_Bribe; + DELETE FROM tmp_Split_Name_Calc_Bribe; + + IF a_debug = 1 THEN + SELECT 'After get Bribes '; + SELECT * FROM tmp_Bribe_Calc_Bribe; + END IF; + + -- Filter records + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Bribe t_ERROR INNER JOIN parts.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 + DELETE t_BRIBES + FROM tmp_Bribe_Calc_Bribe t_BRIBES + WHERE + ( + a_require_all_id_search_filters_met = 1 + AND ( + t_BRIBES.does_meet_id_filters = 0 + ) + ) + OR ( + a_require_all_non_id_search_filters_met = 1 + AND ( + t_BRIBES.does_meet_non_id_filters = 0 + ) + ) + OR ( + a_require_any_id_search_filters_met = 1 + AND t_BRIBES.does_meet_id_filters = 0 + ) + OR ( + a_require_any_non_id_search_filters_met = 1 + AND t_BRIBES.does_meet_non_id_filters = 0 + ) + ; + END IF; + + IF a_debug = 1 THEN + SELECT 'After filter Bribes'; + SELECT * FROM tmp_Bribe_Calc_Bribe; + END IF; + + -- Calculated fields + + -- Permissions + IF a_debug = 1 THEN + SELECT + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = a_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error_Calc_Bribe t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error_Calc_Bribe ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Dogs and Bribes.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT 'Before non-permitted data deletion'; + SELECT * FROM tmp_Bribe_Calc_Bribe; + SELECT * FROM tmp_Msg_Error_Calc_Bribe; + END IF; + + IF EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Bribe t_ERROR INNER JOIN parts.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_Bribe_Calc_Bribe; + END IF; + + DELETE FROM tmp_Bribe_Calc_Bribe; + END IF; + + IF a_debug = 1 THEN + SELECT 'After non-permitted data deletion'; + END IF; + + -- Outputs + START TRANSACTION; + -- Bribes + INSERT INTO parts.DOG_Bribe_Temp ( + guid + , id_bribe + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + a_guid + , t_BRIBES.id_bribe + , BRIBES.code + , BRIBES.name + , BRIBES.active + + , t_BRIBES.does_meet_id_filters + , t_BRIBES.does_meet_non_id_filters + FROM parts.DOG_Bribe BRIBES + INNER JOIN tmp_Bribe_Calc_Bribe t_BRIBES ON BRIBES.id_bribe = t_BRIBES.id_bribe + ORDER BY BRIBES.name + ; + COMMIT; + + -- Errors + IF a_show_errors = 1 THEN + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_Bribe t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + END IF; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Bribe_Calc_Bribe; + END IF; + + CALL parts.p_dog_clear_calc_dog ( a_guid, 0 ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Bribe; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Bribe; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Bribe; + DROP TEMPORARY TABLE IF EXISTS tmp_Bribe_Calc_Bribe; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + + +CALL parts.p_dog_calc_bribe ( + 'gripe ' -- a_guid + , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_bribe + , 0 -- a_get_inactive_bribe + , '' -- a_ids_bribe + , '' -- a_names_bribe + , 0 -- a_require_all_id_search_filters_met + , 0 -- 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 + , 0 -- a_show_errors + , 0 -- a_debug +); + +SELECT * +FROM parts.DOG_Bribe_Temp +; +/* +SELECT * +FROM parts.DOG_Bribe_Temp C +WHERE + C.does_meet_id_filters + AND C.does_meet_non_id_filters +; +*/ +CALL parts.p_dog_clear_calc_bribe ( + 'gripe ' -- a_guid + , 1 -- debug +); + + +DELETE +FROM parts.DOG_Bribe_Temp +; + +*/ diff --git a/static/MySQL/71324_p_dog_clear_calc_bribe.sql b/static/MySQL/71324_p_dog_clear_calc_bribe.sql new file mode 100644 index 0000000..7deea47 --- /dev/null +++ b/static/MySQL/71324_p_dog_clear_calc_bribe.sql @@ -0,0 +1,45 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_clear_calc_bribe; +DROP PROCEDURE IF EXISTS parts.p_bribe_clear_calc_bribe; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_clear_calc_bribe ( + IN a_guid BINARY(36) + , IN a_debug BIT +) +BEGIN + DECLARE v_time_start TIMESTAMP(6); + SET v_time_start := CURRENT_TIMESTAMP(6); + + CALL parts.p_core_validate_guid ( a_guid ); + + START TRANSACTION; + + DELETE BRIBES_T + FROM parts.DOG_Bribe_Temp BRIBES_T + WHERE BRIBES_T.GUID = a_guid + ; + + COMMIT; + + IF a_debug = 1 THEN + CALL parts.p_debug_timing_reporting( v_time_start ); + END IF; +END // +DELIMITER ; + +/* + +CALL parts.p_dog_clear_calc_bribe ( + 'crips ' -- a_guid + , 1 -- debug +); + +SELECT * +FROM parts.DOG_Calc_User_Temp +WHERE GUID = 'chips ' +; + +*/ diff --git a/static/MySQL/71324_p_dog_get_many_bribe.sql b/static/MySQL/71324_p_dog_get_many_bribe.sql new file mode 100644 index 0000000..52ea0de --- /dev/null +++ b/static/MySQL/71324_p_dog_get_many_bribe.sql @@ -0,0 +1,375 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_get_many_bribe; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_get_many_bribe ( + IN a_id_user INT + , IN a_get_all_bribe BIT + , IN a_get_inactive_bribe BIT + , IN a_ids_bribe TEXT + , IN a_names_bribe TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_guid BINARY(36); + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_guid := UUID(); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + SET a_id_user := IFNULL(a_id_user, 0); + /* + SET a_get_all_bribe := IFNULL(a_get_all_bribe, 0); + SET a_get_inactive_bribe := IFNULL(a_get_inactive_bribe, 0); + SET a_ids_bribe := TRIM(IFNULL(a_ids_bribe, '')); + SET a_names_bribe := TRIM(IFNULL(a_names_bribe, '')); + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + */ + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_id_user + , a_get_all_bribe + , a_get_inactive_bribe + , a_ids_bribe + , a_names_bribe + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_guid + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Bribe; + + CREATE TEMPORARY TABLE tmp_Bribe ( + id_bribe INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + -- Permissions + IF a_debug = 1 THEN + SELECT + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = v_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR; + SELECT * FROM tmp_Msg_Error t_ERROR; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Bribes.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + v_guid + , 0 -- a_debug + ); + + + -- Call Bribe Calc + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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 + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_bribe -- a_get_all_bribe + , a_get_inactive_bribe -- a_get_inactive_bribe + , a_ids_bribe -- a_ids_bribe + , a_names_bribe -- a_names_bribe + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_bribe ( + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_bribe -- a_get_all_bribe + , a_get_inactive_bribe -- a_get_inactive_bribe + , a_ids_bribe -- a_ids_bribe + , a_names_bribe -- a_names_bribe + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM parts.DOG_Bribe_Temp; + SELECT * FROM parts.DOG_Bribe_Temp; + END IF; + + INSERT INTO tmp_Bribe ( + id_bribe + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + BRIBE_T.id_bribe + , BRIBE_T.code + , BRIBE_T.name + , BRIBE_T.active + + , BRIBE_T.does_meet_id_filters + , BRIBE_T.does_meet_non_id_filters + FROM parts.DOG_Bribe_Temp BRIBE_T + WHERE BRIBE_T.GUID = v_guid + ; + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM tmp_Bribe; + SELECT * FROM tmp_Bribe; + END IF; + END IF; + + -- Filter outputs + IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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_Bribe; + END IF; + + DELETE FROM tmp_Bribe; + END IF; + + + -- Outputs + -- Bribes + SELECT + t_BRIBES.id_bribe + , t_BRIBES.code + , t_BRIBES.name + , t_BRIBES.active + + , t_BRIBES.does_meet_id_filters + , t_BRIBES.does_meet_non_id_filters + FROM tmp_Bribe t_BRIBES + LEFT JOIN parts.DOG_Bribe BRIBES ON t_BRIBES.id_bribe = BRIBES.id_bribe + ORDER BY t_BRIBES.name + ; + + -- Errors + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Bribe; + END IF; + + CALL parts.p_dog_clear_calc_bribe( + v_guid -- a_guid + , 0 -- a_debug + ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Bribe; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_get_many_bribe ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_bribe + , 0 -- a_get_inactive_bribe + , '' -- a_ids_bribe + , '' -- a_names_bribe + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + + +CALL demo.p_dog_get_many_bribe ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_bribe + , 0 -- a_get_inactive_bribe + , '' -- a_ids_bribe + , 'pat,point' -- a_names_bribe + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + +*/ \ No newline at end of file diff --git a/static/MySQL/71328_p_dog_calc_assessment_command_modality_link.sql b/static/MySQL/71328_p_dog_calc_assessment_command_modality_link.sql new file mode 100644 index 0000000..b833b63 --- /dev/null +++ b/static/MySQL/71328_p_dog_calc_assessment_command_modality_link.sql @@ -0,0 +1,1393 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_calc_assessment_command_modality_link; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_calc_assessment_command_modality_link ( + IN a_guid BINARY(36) + , IN a_id_user INT + , IN a_get_all_link BIT + , IN a_get_inactive_link BIT + , IN a_ids_link TEXT + , IN a_min_distance_from_handler_link FLOAT + , IN a_max_distance_from_handler_link FLOAT + , IN a_value_is_in_sight_of_handler_link INT + , IN a_value_is_in_scent_range_of_handler_link INT + , IN a_value_is_in_hearing_range_of_handler_link INT + , IN a_value_is_on_lead_link INT + , IN a_min_trial_count_link FLOAT + , IN a_max_trial_count_link FLOAT + + , IN a_get_all_assessment BIT + , IN a_get_inactive_assessment BIT + , IN a_ids_assessment TEXT + , IN a_notes_assessment TEXT + , IN a_min_temperature_assessment DECIMAL(5, 2) + , IN a_max_temperature_assessment DECIMAL(5, 2) + , IN a_get_all_weather BIT + , IN a_get_inactive_weather BIT + , IN a_ids_weather TEXT + , IN a_names_weather TEXT + , IN a_get_all_lighting_level BIT + , IN a_get_inactive_lighting_level BIT + , IN a_ids_lighting_level TEXT + , IN a_names_lighting_level TEXT + , IN a_get_all_location BIT + , IN a_get_inactive_location BIT + , IN a_ids_location TEXT + , IN a_names_location TEXT + , IN a_get_all_user_handler BIT + , IN a_get_inactive_user_handler BIT + , IN a_ids_user_handler TEXT + -- , IN a_auth0_ids_user_handler TEXT + , IN a_names_user_handler TEXT + , IN a_emails_user_handler TEXT + + , IN a_get_all_command_category BIT + , IN a_get_inactive_command_category BIT + , IN a_ids_command_category TEXT + , IN a_names_command_category TEXT + , IN a_get_all_command BIT + , IN a_get_inactive_command BIT + , IN a_ids_command TEXT + , IN a_names_command TEXT + , IN a_hand_signal_default_descriptions_command TEXT + , IN a_notes_command TEXT + + , IN a_get_all_command_modality BIT + , IN a_get_inactive_command_modality BIT + , IN a_ids_command_modality TEXT + , IN a_names_command_modality TEXT + + , IN a_get_all_bribe BIT + , IN a_get_inactive_bribe BIT + , IN a_ids_bribe TEXT + , IN a_names_bribe TEXT + + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_show_errors BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_has_filter_assessment_command_modality_link_id BIT; + DECLARE v_has_filter_assessment_command_modality_link_is_in_sight_of_handler BIT; + DECLARE v_has_filter_assessment_command_modality_link_is_in_scent_range_of_handler BIT; + DECLARE v_has_filter_assessment_command_modality_link_is_in_hearing_range_of_handler BIT; + DECLARE v_has_filter_assessment_command_modality_link_is_on_lead BIT; + DECLARE v_has_filter_assessment_command_modality_link_distance_from_handler_min BIT; + DECLARE v_has_filter_assessment_command_modality_link_distance_from_handler_max BIT; + DECLARE v_has_filter_assessment_command_modality_link_trial_count_min BIT; + DECLARE v_has_filter_assessment_command_modality_link_trial_count_max BIT; + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_ACM_Link ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error_Calc_ACM_Link ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_ACM_Link t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error_Calc_ACM_Link; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + + CALL parts.p_core_validate_guid ( a_guid ); + + SET a_id_user := IFNULL(a_id_user, 0); + SET a_get_all_link := IFNULL(a_get_all_link, 0); + SET a_get_inactive_link := IFNULL(a_get_inactive_link, 0); + SET a_ids_link := TRIM(IFNULL(a_ids_link, '')); + /* + , IN a_min_distance_from_handler_link FLOAT + , IN a_max_distance_from_handler_link FLOAT + , IN a_value_is_in_sight_of_handler_link INT + , IN a_value_is_in_scent_range_of_handler_link INT + , IN a_value_is_in_hearing_range_of_handler_link INT + , IN a_value_is_on_lead_link INT + , IN a_min_trial_count_link FLOAT + , IN a_max_trial_count_link FLOAT + */ + -- Foreign key filters corected in their Calc Stored Procedures + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + SET a_show_errors := IFNULL(a_show_errors, 0); + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_guid + , a_get_all_link + , a_get_inactive_link + , a_ids_link + , a_min_distance_from_handler_link + , a_max_distance_from_handler_link + , a_value_is_in_sight_of_handler_link + , a_value_is_in_scent_range_of_handler_link + , a_value_is_in_hearing_range_of_handler_link + , a_value_is_on_lead_link + , a_min_trial_count_link + , a_max_trial_count_link + + , a_get_all_assessment + , a_get_inactive_assessment + , a_ids_assessment + , a_notes_assessment + , a_min_temperature_assessment + , a_max_temperature_assessment + , a_get_all_weather + , a_get_inactive_weather + , a_ids_weather + , a_names_weather + , a_get_all_lighting_level + , a_get_inactive_lighting_level + , a_ids_lighting_level + , a_names_lighting_level + , a_get_all_location + , a_get_inactive_location + , a_ids_location + , a_names_location + , a_get_all_user_handler + , a_get_inactive_user_handler + , a_ids_user_handler + -- , a_auth0_ids_user_handler + , a_names_user_handler + , a_emails_user_handler + + , a_get_all_command_category + , a_get_inactive_command_category + , a_ids_command_category + , a_names_command_category + , a_get_all_command + , a_get_inactive_command + , a_ids_command + , a_names_command + , a_hand_signal_default_descriptions_command + , a_notes_command + + , a_get_all_command_modality + , a_get_inactive_command_modality + , a_ids_command_modality + , a_names_command_modality + + , a_get_all_bribe + , a_get_inactive_bribe + , a_ids_bribe + , a_names_bribe + + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_show_errors + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_ACM_Link; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_ACM_Link; + DROP TEMPORARY TABLE IF EXISTS tmp_Assessment_Command_Modality_Link_Calc_ACM_Link; + DROP TEMPORARY TABLE IF EXISTS tmp_Bribe_Calc_ACM_Link; + DROP TEMPORARY TABLE IF EXISTS tmp_Command_Modality_Calc_ACM_Link; + DROP TEMPORARY TABLE IF EXISTS tmp_Command_Calc_ACM_Link; + DROP TEMPORARY TABLE IF EXISTS tmp_Command_Category_Calc_ACM_Link; + DROP TEMPORARY TABLE IF EXISTS tmp_Assessment_Calc_ACM_Link; + + CREATE TEMPORARY TABLE tmp_Assessment_Calc_ACM_Link ( + id_assessment INT NOT NULL + , id_weather INT + , id_lighting_level INT + , id_location INT + , id_user_handler INT + , notes TEXT + , active BIT + , temperature_celcius DECIMAL(5, 2) + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE tmp_Command_Category_Calc_ACM_Link ( + id_command_category INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE tmp_Command_Calc_ACM_Link ( + id_command INT NOT NULL + , id_command_category INT + , name VARCHAR(250) + , hand_signal_default_description text + , can_have_button BIT + , notes TEXT + , active BIT + + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + -- , has_button + ); + + CREATE TEMPORARY TABLE tmp_Command_Modality_Calc_ACM_Link ( + id_command_modality INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE tmp_Bribe_Calc_ACM_Link ( + id_bribe INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE tmp_Assessment_Command_Modality_Link_Calc_ACM_Link ( + id_link INT NOT NULL + , id_assessment INT + , id_command INT + , id_command_modality INT + , id_bribe INT + , distance_from_handler FLOAT + , is_in_sight_of_handler BIT + , is_in_scent_range_of_handler BIT + , is_in_hearing_range_of_handler BIT + , is_on_lead BIT + , trial_count INT + , active BIT + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_ACM_Link ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_ACM_Link ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Id_Calc_ACM_Link; + + SET v_has_filter_assessment_command_modality_link_id := CASE WHEN a_ids_link <> '' THEN 1 ELSE 0 END; + SET v_has_filter_assessment_command_modality_link_is_in_sight_of_handler := NOT ISNULL(a_value_is_in_sight_of_handler_link); + SET v_has_filter_assessment_command_modality_link_is_in_scent_range_of_handler := NOT ISNULL(a_value_is_in_scent_range_of_handler_link); + SET v_has_filter_assessment_command_modality_link_is_in_hearing_range_of_handler := NOT ISNULL(a_value_is_in_hearing_range_of_handler_link); + SET v_has_filter_assessment_command_modality_link_is_on_lead := NOT ISNULL(a_value_is_on_lead_link); + SET v_has_filter_assessment_command_modality_link_distance_from_handler_min := NOT ISNULL(a_min_distance_from_handler_link); + SET v_has_filter_assessment_command_modality_link_distance_from_handler_max := NOT ISNULL(a_max_distance_from_handler_link); + SET v_has_filter_assessment_command_modality_link_trial_count_min := NOT ISNULL(a_min_trial_count_link); + SET v_has_filter_assessment_command_modality_link_trial_count_max := NOT ISNULL(a_max_trial_count_link); + + -- Call Calc Assessment + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error_Calc_ACM_Link t_ERROR INNER JOIN parts.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 + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_assessment -- a_get_all_assessment + , a_get_inactive_assessment -- a_get_inactive_assessment + , a_ids_assessment -- a_ids_assessment + , a_notes_assessment -- a_notes_assessment + , a_min_temperature_assessment -- a_min_temperature_assessment + , a_max_temperature_assessment -- a_max_temperature_assessment + , a_get_all_weather -- a_get_all_weather + , a_get_inactive_weather -- a_get_inactive_weather + , a_ids_weather + , a_names_weather + , a_get_all_lighting_level + , a_get_inactive_lighting_level + , a_ids_lighting_level + , a_names_lighting_level + , a_get_all_location + , a_get_inactive_location + , a_ids_location + , a_names_location + , a_get_all_user_handler + , a_get_inactive_user_handler + , a_ids_user_handler + -- , a_auth0_ids + , a_names_user_handler + , a_emails_user_handler + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_assessment ( + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_assessment -- a_get_all_assessment + , a_get_inactive_assessment -- a_get_inactive_assessment + , a_ids_assessment -- a_ids_assessment + , a_notes_assessment -- a_notes_assessment + , a_min_temperature_assessment -- a_min_temperature_assessment + , a_max_temperature_assessment -- a_max_temperature_assessment + , a_get_all_weather -- a_get_all_weather + , a_get_inactive_weather -- a_get_inactive_weather + , a_ids_weather + , a_names_weather + , a_get_all_lighting_level + , a_get_inactive_lighting_level + , a_ids_lighting_level + , a_names_lighting_level + , a_get_all_location + , a_get_inactive_location + , a_ids_location + , a_names_location + , a_get_all_user_handler + , a_get_inactive_user_handler + , a_ids_user_handler + -- , a_auth0_ids + , a_names_user_handler + , a_emails_user_handler + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + INSERT INTO tmp_Assessment_Calc_ACM_Link ( + id_assessment + , id_weather + , id_lighting_level + , id_location + , id_user_handler + , notes + , temperature_celcius + , active + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + ASSESSMENT_T.id_assessment + , ASSESSMENT_T.id_weather + , ASSESSMENT_T.id_lighting_level + , ASSESSMENT_T.id_location + , ASSESSMENT_T.id_user_handler + , ASSESSMENT_T.notes + , ASSESSMENT_T.temperature_celcius + , ASSESSMENT_T.active + + , ASSESSMENT_T.does_meet_id_filters + , ASSESSMENT_T.does_meet_non_id_filters + FROM parts.DOG_Assessment_Temp ASSESSMENT_T + WHERE ASSESSMENT_T.GUID = a_guid + ; + + IF a_debug = 1 THEN + SELECT * FROM tmp_Assessment_Calc_ACM_Link; + END IF; + END IF; + + -- Call Command Calc + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error_Calc_ACM_Link t_ERROR INNER JOIN parts.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 + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_command_category + , a_get_inactive_command_category + , a_ids_command_category + , a_names_command_category + , a_get_all_command -- a_get_all_command + , a_get_inactive_command -- a_get_inactive_command + , a_ids_command -- a_ids_command + , a_names_command -- a_names_command + , '' -- a_hand_signal_descriptions_link + , a_notes_command -- a_notes_command + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_command ( + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_command_category + , a_get_inactive_command_category + , a_ids_command_category + , a_names_command_category + , a_get_all_command -- a_get_all_command + , a_get_inactive_command -- a_get_inactive_command + , a_ids_command -- a_ids_command + , a_names_command -- a_names_command + , '' -- a_hand_signal_descriptions_link + , a_notes_command -- a_notes_command + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + INSERT INTO tmp_Command_Category_Calc_ACM_Link ( + id_command_category + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + COMMAND_CATEGORY_T.id_command_category + , COMMAND_CATEGORY_T.code + , COMMAND_CATEGORY_T.name + , COMMAND_CATEGORY_T.active + + , COMMAND_CATEGORY_T.does_meet_id_filters + , COMMAND_CATEGORY_T.does_meet_non_id_filters + FROM parts.DOG_Command_Category_Temp COMMAND_CATEGORY_T + WHERE COMMAND_CATEGORY_T.GUID = a_guid + ; + + INSERT INTO tmp_Command_Calc_ACM_Link ( + id_command + , id_command_category + , name + , hand_signal_default_description + , can_have_button + , notes + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + COMMAND_T.id_command + , COMMAND_T.id_command_category + , COMMAND_T.name + , COMMAND_T.hand_signal_default_description + , COMMAND_T.can_have_button + , COMMAND_T.notes + , COMMAND_T.active + + , COMMAND_T.does_meet_id_filters + , COMMAND_T.does_meet_non_id_filters + FROM parts.DOG_Command_Temp COMMAND_T + WHERE COMMAND_T.GUID = a_guid + ; + + IF a_debug = 1 THEN + SELECT * FROM tmp_Command_Category_Calc_ACM_Link; + SELECT * FROM tmp_Command_Calc_ACM_Link; + END IF; + END IF; + + -- Call Calc Command Modality + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error_Calc_ACM_Link t_ERROR INNER JOIN parts.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 + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_command_modality -- a_get_all_command_modality + , a_get_inactive_command_modality -- a_get_inactive_command_modality + , a_ids_command_modality -- a_ids_command_modality + , a_names_command_modality -- a_names_command_modality + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_command_modality ( + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_command_modality -- a_get_all_command_modality + , a_get_inactive_command_modality -- a_get_inactive_command_modality + , a_ids_command_modality -- a_ids_command_modality + , a_names_command_modality -- a_names_command_modality + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + INSERT INTO tmp_Command_Modality_Calc_ACM_Link ( + id_command_modality + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + COMMAND_MODALITY_T.id_command_modality + , COMMAND_MODALITY_T.code + , COMMAND_MODALITY_T.name + , COMMAND_MODALITY_T.active + + , COMMAND_MODALITY_T.does_meet_id_filters + , COMMAND_MODALITY_T.does_meet_non_id_filters + FROM parts.DOG_Command_Modality_Temp COMMAND_MODALITY_T + WHERE COMMAND_MODALITY_T.GUID = a_guid + ; + + IF a_debug = 1 THEN + SELECT * FROM tmp_Command_Modality_Calc_ACM_Link; + END IF; + END IF; + + -- Call Calc Bribe + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error_Calc_ACM_Link t_ERROR INNER JOIN parts.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 + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_bribe -- a_get_all_bribe + , a_get_inactive_bribe -- a_get_inactive_bribe + , a_ids_bribe -- a_ids_bribe + , a_names_bribe -- a_names_bribe + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_bribe ( + a_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_bribe -- a_get_all_bribe + , a_get_inactive_bribe -- a_get_inactive_bribe + , a_ids_bribe -- a_ids_bribe + , a_names_bribe -- a_names_bribe + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , 0 -- a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , 0 -- a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + INSERT INTO tmp_Bribe_Calc_ACM_Link ( + id_bribe + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + BRIBE_T.id_bribe + , BRIBE_T.code + , BRIBE_T.name + , BRIBE_T.active + + , BRIBE_T.does_meet_id_filters + , BRIBE_T.does_meet_non_id_filters + FROM parts.DOG_Bribe_Temp BRIBE_T + WHERE BRIBE_T.GUID = a_guid + ; + + IF a_debug = 1 THEN + SELECT * FROM tmp_Bribe_Calc_ACM_Link; + END IF; + + CALL parts.p_dog_clear_calc_bribe ( + a_guid + , 0 -- a_debug + ); + END IF; + + -- Assessment Command Modality Links + IF v_has_filter_assessment_command_modality_link_id = 1 THEN + CALL parts.p_core_split(a_guid, a_ids_link, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Id_Calc_ACM_Link ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_ACM_Link t_ERROR INNER JOIN parts.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 EXISTS ( + SELECT * + FROM tmp_Split_Id_Calc_ACM_Link t_SPLIT_ID + LEFT JOIN parts.DOG_Assessment_Command_Modality_Link ASSESSMENT_COMMAND_MODALITY_LINK ON t_SPLIT_ID.as_int = ASSESSMENT_COMMAND_MODALITY_LINK.id_link + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(ASSESSMENT_COMMAND_MODALITY_LINK.id_link) + OR ( + ASSESSMENT_COMMAND_MODALITY_LINK.active = 0 + AND a_get_inactive_link = 0 + ) + ) THEN + INSERT INTO tmp_Msg_Error_Calc_ACM_Link ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Invalid or inactive Assessment_Command_Modality_Link IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split_Id_Calc_ACM_Link t_SPLIT_ID + LEFT JOIN parts.DOG_Assessment_Command_Modality_Link ASSESSMENT_COMMAND_MODALITY_LINK ON t_SPLIT_ID.as_int = ASSESSMENT_COMMAND_MODALITY_LINK.id_link + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(ASSESSMENT_COMMAND_MODALITY_LINK.id_link) + OR ( + ASSESSMENT_COMMAND_MODALITY_LINK.active = 0 + AND a_get_inactive_link = 0 + ) + ; + /* Don't error on notes not found + ELSEIF EXISTS () + */ + ELSE + IF a_debug = 1 THEN + SELECT 'Assessment_Command_Modality_Link Filters'; + WITH + Assessment_Command_Modality_Link_Id_Filter AS ( + SELECT ASSESSMENT_COMMAND_MODALITY_LINK.id_link + FROM tmp_Split_Id_Calc_ACM_Link t_SPLIT_ID + INNER JOIN parts.DOG_Assessment_Command_Modality_Link ASSESSMENT_COMMAND_MODALITY_LINK ON t_SPLIT_ID.as_int = ASSESSMENT_COMMAND_MODALITY_LINK.id_link + ) + , Assessment_Command_Modality_Link_Filters AS ( + SELECT + ASSESSMENT_COMMAND_MODALITY_LINK_COMBINED.id_link + , MAX(ASSESSMENT_COMMAND_MODALITY_LINK_COMBINED.does_meet_id_filter) AS does_meet_id_filter + FROM ( + SELECT + ASSESSMENT_COMMAND_MODALITY_LINK_ID_FILTER.id_link + , 1 AS does_meet_id_filter + FROM Assessment_Command_Modality_Link_Id_Filter ASSESSMENT_COMMAND_MODALITY_LINK_ID_FILTER + ) ASSESSMENT_COMMAND_MODALITY_LINK_COMBINED + GROUP BY ASSESSMENT_COMMAND_MODALITY_LINK_COMBINED.id_link + ) + SELECT + ASSESSMENT_COMMAND_MODALITY_LINK.id_link + , ASSESSMENT_COMMAND_MODALITY_LINK.id_assessment + , ASSESSMENT_COMMAND_MODALITY_LINK.id_command + , ASSESSMENT_COMMAND_MODALITY_LINK.id_command_modality + , ASSESSMENT_COMMAND_MODALITY_LINK.id_bribe + , ASSESSMENT_COMMAND_MODALITY_LINK.distance_from_handler + , ASSESSMENT_COMMAND_MODALITY_LINK.is_in_sight_of_handler + , ASSESSMENT_COMMAND_MODALITY_LINK.is_in_scent_range_of_handler + , ASSESSMENT_COMMAND_MODALITY_LINK.is_in_hearing_range_of_handler + , ASSESSMENT_COMMAND_MODALITY_LINK.is_on_lead + , ASSESSMENT_COMMAND_MODALITY_LINK.trial_count + , ASSESSMENT_COMMAND_MODALITY_LINK.active + , CASE WHEN + v_has_filter_assessment_command_modality_link_id = 0 + OR ASSESSMENT_COMMAND_MODALITY_LINK_FILTERS.does_meet_id_filter = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_assessment_command_modality_link_is_in_sight_of_handler = 0 + AND v_has_filter_assessment_command_modality_link_is_in_scent_range_of_handler = 0 + AND v_has_filter_assessment_command_modality_link_is_in_hearing_range_of_handler = 0 + AND v_has_filter_assessment_command_modality_link_is_on_lead = 0 + AND v_has_filter_assessment_command_modality_link_distance_from_handler_min = 0 + AND v_has_filter_assessment_command_modality_link_distance_from_handler_max = 0 + AND v_has_filter_assessment_command_modality_link_trial_count_min = 0 + AND v_has_filter_assessment_command_modality_link_trial_count_max = 0 + ) + OR ( + v_has_filter_assessment_command_modality_link_distance_from_handler_min = 0 + OR ASSESSMENT_COMMAND_MODALITY_LINK.distance_from_handler >= a_min_distance_from_handler_link + ) + OR ( + v_has_filter_assessment_command_modality_link_distance_from_handler_max = 0 + OR ASSESSMENT_COMMAND_MODALITY_LINK.distance_from_handler <= a_max_distance_from_handler_link + ) + OR ( + v_has_filter_assessment_command_modality_link_is_in_sight_of_handler = 0 + OR ASSESSMENT_COMMAND_MODALITY_LINK.is_in_sight_of_handler >= a_value_is_in_sight_of_handler_link + ) + OR ( + v_has_filter_assessment_command_modality_link_is_in_scent_range_of_handler = 0 + OR ASSESSMENT_COMMAND_MODALITY_LINK.is_in_scent_range_of_handler >= a_value_is_in_scent_range_of_handler_link + ) + OR ( + v_has_filter_assessment_command_modality_link_is_in_hearing_range_of_handler = 0 + OR ASSESSMENT_COMMAND_MODALITY_LINK.is_in_hearing_range_of_handler >= a_value_is_in_hearing_range_of_handler_link + ) + OR ( + v_has_filter_assessment_command_modality_link_is_on_lead = 0 + OR ASSESSMENT_COMMAND_MODALITY_LINK.is_on_lead >= a_value_is_on_lead_link + ) + OR ( + v_has_filter_assessment_command_modality_link_trial_count_min = 0 + OR ASSESSMENT_COMMAND_MODALITY_LINK.trial_count >= a_min_trial_count_link + ) + OR ( + v_has_filter_assessment_command_modality_link_trial_count_max = 0 + OR ASSESSMENT_COMMAND_MODALITY_LINK.trial_count <= a_max_trial_count_link + ) + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.DOG_Assessment_Command_Modality_Link ASSESSMENT_COMMAND_MODALITY_LINK + LEFT JOIN Assessment_Command_Modality_Link_Filters ASSESSMENT_COMMAND_MODALITY_LINK_FILTERS ON ASSESSMENT_COMMAND_MODALITY_LINK.id_link = ASSESSMENT_COMMAND_MODALITY_LINK_FILTERS.id_link + WHERE + ( + a_get_all_link = 1 + OR ( + v_has_filter_assessment_command_modality_link_id = 1 + AND ASSESSMENT_COMMAND_MODALITY_LINK_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_assessment_command_modality_link_distance_from_handler_min = 0 + AND ASSESSMENT_COMMAND_MODALITY_LINK.distance_from_handler >= a_min_distance_from_handler_link + ) + OR ( + v_has_filter_assessment_command_modality_link_distance_from_handler_max = 0 + AND ASSESSMENT_COMMAND_MODALITY_LINK.distance_from_handler <= a_max_distance_from_handler_link + ) + OR ( + v_has_filter_assessment_command_modality_link_is_in_sight_of_handler = 0 + AND ASSESSMENT_COMMAND_MODALITY_LINK.is_in_sight_of_handler >= a_value_is_in_sight_of_handler_link + ) + OR ( + v_has_filter_assessment_command_modality_link_is_in_scent_range_of_handler = 0 + AND ASSESSMENT_COMMAND_MODALITY_LINK.is_in_scent_range_of_handler >= a_value_is_in_scent_range_of_handler_link + ) + OR ( + v_has_filter_assessment_command_modality_link_is_in_hearing_range_of_handler = 0 + AND ASSESSMENT_COMMAND_MODALITY_LINK.is_in_hearing_range_of_handler >= a_value_is_in_hearing_range_of_handler_link + ) + OR ( + v_has_filter_assessment_command_modality_link_is_on_lead = 0 + AND ASSESSMENT_COMMAND_MODALITY_LINK.is_on_lead >= a_value_is_on_lead_link + ) + OR ( + v_has_filter_assessment_command_modality_link_trial_count_min = 0 + AND ASSESSMENT_COMMAND_MODALITY_LINK.trial_count >= a_min_trial_count_link + ) + OR ( + v_has_filter_assessment_command_modality_link_trial_count_max = 0 + AND ASSESSMENT_COMMAND_MODALITY_LINK.trial_count <= a_max_trial_count_link + ) + ) + AND ( + a_get_inactive_link = 1 + OR ASSESSMENT_COMMAND_MODALITY_LINK.active = 1 + ) + ; + END IF; + INSERT INTO tmp_Assessment_Command_Modality_Link_Calc_ACM_Link ( + id_link + , id_assessment + , id_command + , id_command_modality + , id_bribe + , distance_from_handler + , is_in_sight_of_handler + , is_in_scent_range_of_handler + , is_in_hearing_range_of_handler + , is_on_lead + , trial_count + , active + , does_meet_id_filters + , does_meet_non_id_filters + ) + WITH + Assessment_Command_Modality_Link_Id_Filter AS ( + SELECT ASSESSMENT_COMMAND_MODALITY_LINK.id_link + FROM tmp_Split_Id_Calc_ACM_Link t_SPLIT_ID + INNER JOIN parts.DOG_Assessment_Command_Modality_Link ASSESSMENT_COMMAND_MODALITY_LINK ON t_SPLIT_ID.as_int = ASSESSMENT_COMMAND_MODALITY_LINK.id_link + ) + , Assessment_Command_Modality_Link_Filters AS ( + SELECT + ASSESSMENT_COMMAND_MODALITY_LINK_COMBINED.id_link + , MAX(ASSESSMENT_COMMAND_MODALITY_LINK_COMBINED.does_meet_id_filter) AS does_meet_id_filter + FROM ( + SELECT + ASSESSMENT_COMMAND_MODALITY_LINK_ID_FILTER.id_link + , 1 AS does_meet_id_filter + FROM Assessment_Command_Modality_Link_Id_Filter ASSESSMENT_COMMAND_MODALITY_LINK_ID_FILTER + ) ASSESSMENT_COMMAND_MODALITY_LINK_COMBINED + GROUP BY ASSESSMENT_COMMAND_MODALITY_LINK_COMBINED.id_link + ) + SELECT + ASSESSMENT_COMMAND_MODALITY_LINK.id_link + , ASSESSMENT_COMMAND_MODALITY_LINK.id_assessment + , ASSESSMENT_COMMAND_MODALITY_LINK.id_command + , ASSESSMENT_COMMAND_MODALITY_LINK.id_command_modality + , ASSESSMENT_COMMAND_MODALITY_LINK.id_bribe + , ASSESSMENT_COMMAND_MODALITY_LINK.distance_from_handler + , ASSESSMENT_COMMAND_MODALITY_LINK.is_in_sight_of_handler + , ASSESSMENT_COMMAND_MODALITY_LINK.is_in_scent_range_of_handler + , ASSESSMENT_COMMAND_MODALITY_LINK.is_in_hearing_range_of_handler + , ASSESSMENT_COMMAND_MODALITY_LINK.is_on_lead + , ASSESSMENT_COMMAND_MODALITY_LINK.trial_count + , ASSESSMENT_COMMAND_MODALITY_LINK.active + , CASE WHEN + v_has_filter_assessment_command_modality_link_id = 0 + OR ASSESSMENT_COMMAND_MODALITY_LINK_FILTERS.does_meet_id_filter = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_assessment_command_modality_link_is_in_sight_of_handler = 0 + AND v_has_filter_assessment_command_modality_link_is_in_scent_range_of_handler = 0 + AND v_has_filter_assessment_command_modality_link_is_in_hearing_range_of_handler = 0 + AND v_has_filter_assessment_command_modality_link_is_on_lead = 0 + AND v_has_filter_assessment_command_modality_link_distance_from_handler_min = 0 + AND v_has_filter_assessment_command_modality_link_distance_from_handler_max = 0 + AND v_has_filter_assessment_command_modality_link_trial_count_min = 0 + AND v_has_filter_assessment_command_modality_link_trial_count_max = 0 + ) + OR ( + v_has_filter_assessment_command_modality_link_distance_from_handler_min = 0 + OR ASSESSMENT_COMMAND_MODALITY_LINK.distance_from_handler >= a_min_distance_from_handler_link + ) + OR ( + v_has_filter_assessment_command_modality_link_distance_from_handler_max = 0 + OR ASSESSMENT_COMMAND_MODALITY_LINK.distance_from_handler <= a_max_distance_from_handler_link + ) + OR ( + v_has_filter_assessment_command_modality_link_is_in_sight_of_handler = 0 + OR ASSESSMENT_COMMAND_MODALITY_LINK.is_in_sight_of_handler >= a_value_is_in_sight_of_handler_link + ) + OR ( + v_has_filter_assessment_command_modality_link_is_in_scent_range_of_handler = 0 + OR ASSESSMENT_COMMAND_MODALITY_LINK.is_in_scent_range_of_handler >= a_value_is_in_scent_range_of_handler_link + ) + OR ( + v_has_filter_assessment_command_modality_link_is_in_hearing_range_of_handler = 0 + OR ASSESSMENT_COMMAND_MODALITY_LINK.is_in_hearing_range_of_handler >= a_value_is_in_hearing_range_of_handler_link + ) + OR ( + v_has_filter_assessment_command_modality_link_is_on_lead = 0 + OR ASSESSMENT_COMMAND_MODALITY_LINK.is_on_lead >= a_value_is_on_lead_link + ) + OR ( + v_has_filter_assessment_command_modality_link_trial_count_min = 0 + OR ASSESSMENT_COMMAND_MODALITY_LINK.trial_count >= a_min_trial_count_link + ) + OR ( + v_has_filter_assessment_command_modality_link_trial_count_max = 0 + OR ASSESSMENT_COMMAND_MODALITY_LINK.trial_count <= a_max_trial_count_link + ) + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.DOG_Assessment_Command_Modality_Link ASSESSMENT_COMMAND_MODALITY_LINK + LEFT JOIN Assessment_Command_Modality_Link_Filters ASSESSMENT_COMMAND_MODALITY_LINK_FILTERS ON ASSESSMENT_COMMAND_MODALITY_LINK.id_link = ASSESSMENT_COMMAND_MODALITY_LINK_FILTERS.id_link + WHERE + ( + a_get_all_link = 1 + OR ( + v_has_filter_assessment_command_modality_link_id = 1 + AND ASSESSMENT_COMMAND_MODALITY_LINK_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_assessment_command_modality_link_distance_from_handler_min = 0 + AND ASSESSMENT_COMMAND_MODALITY_LINK.distance_from_handler >= a_min_distance_from_handler_link + ) + OR ( + v_has_filter_assessment_command_modality_link_distance_from_handler_max = 0 + AND ASSESSMENT_COMMAND_MODALITY_LINK.distance_from_handler <= a_max_distance_from_handler_link + ) + OR ( + v_has_filter_assessment_command_modality_link_is_in_sight_of_handler = 0 + AND ASSESSMENT_COMMAND_MODALITY_LINK.is_in_sight_of_handler >= a_value_is_in_sight_of_handler_link + ) + OR ( + v_has_filter_assessment_command_modality_link_is_in_scent_range_of_handler = 0 + AND ASSESSMENT_COMMAND_MODALITY_LINK.is_in_scent_range_of_handler >= a_value_is_in_scent_range_of_handler_link + ) + OR ( + v_has_filter_assessment_command_modality_link_is_in_hearing_range_of_handler = 0 + AND ASSESSMENT_COMMAND_MODALITY_LINK.is_in_hearing_range_of_handler >= a_value_is_in_hearing_range_of_handler_link + ) + OR ( + v_has_filter_assessment_command_modality_link_is_on_lead = 0 + AND ASSESSMENT_COMMAND_MODALITY_LINK.is_on_lead >= a_value_is_on_lead_link + ) + OR ( + v_has_filter_assessment_command_modality_link_trial_count_min = 0 + AND ASSESSMENT_COMMAND_MODALITY_LINK.trial_count >= a_min_trial_count_link + ) + OR ( + v_has_filter_assessment_command_modality_link_trial_count_max = 0 + AND ASSESSMENT_COMMAND_MODALITY_LINK.trial_count <= a_max_trial_count_link + ) + ) + AND ( + a_get_inactive_link = 1 + OR ASSESSMENT_COMMAND_MODALITY_LINK.active = 1 + ) + ; + END IF; + END IF; + + DELETE FROM tmp_Split_Id_Calc_ACM_Link; + + IF a_debug = 1 THEN + SELECT 'After get Assessment_Command_Modality_Links'; + SELECT * FROM tmp_Assessment_Command_Modality_Link_Calc_ACM_Link; + END IF; + + -- Filter records + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_ACM_Link t_ERROR INNER JOIN parts.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 + DELETE t_ASSESSMENT_COMMAND_MODALITY_LINK + FROM tmp_Assessment_Command_Modality_Link_Calc_ACM_Link t_ASSESSMENT_COMMAND_MODALITY_LINK + LEFT JOIN tmp_Assessment_Calc_ACM_Link t_ASSESSMENT ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_assessment = t_ASSESSMENT.id_assessment + LEFT JOIN tmp_Command_Calc_ACM_Link t_COMMAND ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command = t_COMMAND.id_command + LEFT JOIN tmp_Command_Category_Calc_ACM_Link t_COMMAND_CATEGORY ON t_COMMAND.id_command_category = t_COMMAND_CATEGORY.id_command_category + LEFT JOIN tmp_Command_Modality_Calc_ACM_Link t_COMMAND_MODALITY ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command_modality = t_COMMAND_MODALITY.id_command_modality + LEFT JOIN tmp_Bribe_Calc_ACM_Link t_BRIBE ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_bribe = t_BRIBE.id_bribe + WHERE + ( + a_require_all_id_search_filters_met = 1 + AND ( + t_ASSESSMENT_COMMAND_MODALITY_LINK.does_meet_id_filters = 0 + OR IFNULL(t_ASSESSMENT.does_meet_id_filters, 1) = 0 + OR IFNULL(t_COMMAND.does_meet_id_filters, 1) = 0 + OR IFNULL(t_COMMAND_CATEGORY.does_meet_id_filters, 1) = 0 + OR IFNULL(t_COMMAND_MODALITY.does_meet_id_filters, 1) = 0 + OR IFNULL(t_BRIBE.does_meet_id_filters, 1) = 0 + ) + ) + OR ( + a_require_all_non_id_search_filters_met = 1 + AND ( + t_ASSESSMENT_COMMAND_MODALITY_LINK.does_meet_non_id_filters = 0 + OR IFNULL(t_ASSESSMENT.does_meet_non_id_filters, 1) = 0 + OR IFNULL(t_COMMAND.does_meet_non_id_filters, 1) = 0 + OR IFNULL(t_COMMAND_CATEGORY.does_meet_non_id_filters, 1) = 0 + OR IFNULL(t_COMMAND_MODALITY.does_meet_non_id_filters, 1) = 0 + OR IFNULL(t_BRIBE.does_meet_non_id_filters, 1) = 0 + ) + ) + OR ( + a_require_any_id_search_filters_met = 1 + AND t_ASSESSMENT_COMMAND_MODALITY_LINK.does_meet_id_filters = 0 + AND IFNULL(t_ASSESSMENT.does_meet_id_filters, 1) = 0 + AND IFNULL(t_COMMAND.does_meet_id_filters, 1) = 0 + AND IFNULL(t_COMMAND_CATEGORY.does_meet_id_filters, 1) = 0 + AND IFNULL(t_COMMAND_MODALITY.does_meet_id_filters, 1) = 0 + AND IFNULL(t_BRIBE.does_meet_id_filters, 1) = 0 + ) + OR ( + a_require_any_non_id_search_filters_met = 1 + AND t_ASSESSMENT_COMMAND_MODALITY_LINK.does_meet_non_id_filters = 0 + AND IFNULL(t_ASSESSMENT.does_meet_non_id_filters, 1) = 0 + AND IFNULL(t_COMMAND.does_meet_non_id_filters, 1) = 0 + AND IFNULL(t_COMMAND_CATEGORY.does_meet_non_id_filters, 1) = 0 + AND IFNULL(t_COMMAND_MODALITY.does_meet_non_id_filters, 1) = 0 + AND IFNULL(t_BRIBE.does_meet_non_id_filters, 1) = 0 + ) + ; + END IF; + + IF a_debug = 1 THEN + SELECT 'After filter Assessment_Command_Modality_Links'; + SELECT * FROM tmp_Assessment_Calc_ACM_Link; + SELECT * FROM tmp_Command_Category_Calc_ACM_Link; + SELECT * FROM tmp_Command_Calc_ACM_Link; + SELECT * FROM tmp_Command_Modality_Calc_ACM_Link; + SELECT * FROM tmp_Bribe_Calc_ACM_Link; + SELECT * FROM tmp_Assessment_Command_Modality_Link_Calc_ACM_Link; + END IF; + + + -- Permissions + IF a_debug = 1 THEN + SELECT + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = a_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error_Calc_ACM_Link t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error_Calc_ACM_Link ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Dogs and Button Icons.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT 'Before non-permitted data deletion'; + SELECT * FROM tmp_Assessment_Calc_ACM_Link; + SELECT * FROM tmp_Command_Category_Calc_ACM_Link; + SELECT * FROM tmp_Command_Calc_ACM_Link; + SELECT * FROM tmp_Command_Modality_Calc_ACM_Link; + SELECT * FROM tmp_Bribe_Calc_ACM_Link; + SELECT * FROM tmp_Assessment_Command_Modality_Link_Calc_ACM_Link; + END IF; + + IF EXISTS(SELECT * FROM tmp_Msg_Error_Calc_ACM_Link t_ERROR INNER JOIN parts.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_Assessment_Calc_ACM_Link; + SELECT * FROM tmp_Command_Category_Calc_ACM_Link; + SELECT * FROM tmp_Command_Calc_ACM_Link; + SELECT * FROM tmp_Command_Modality_Calc_ACM_Link; + SELECT * FROM tmp_Bribe_Calc_ACM_Link; + SELECT * FROM tmp_Assessment_Command_Modality_Link_Calc_ACM_Link; + END IF; + + DELETE FROM tmp_Assessment_Calc_ACM_Link; + DELETE FROM tmp_Command_Category_Calc_ACM_Link; + DELETE FROM tmp_Command_Calc_ACM_Link; + DELETE FROM tmp_Command_Modality_Calc_ACM_Link; + DELETE FROM tmp_Bribe_Calc_ACM_Link; + DELETE FROM tmp_Assessment_Command_Modality_Link_Calc_ACM_Link; + END IF; + + IF a_debug = 1 THEN + SELECT 'After non-permitted data deletion'; + END IF; + + -- Outputs + /* + IF ( + NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_ACM_Link t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) + AND EXISTS (SELECT * FROM tmp_Assessment_Command_Modality_Link_Calc_ACM_Link) + ) THEN + */ + START TRANSACTION; + -- Assessment_Command_Modality_Links + INSERT INTO parts.DOG_Assessment_Command_Modality_Link_Temp ( + guid + , id_link + , id_assessment + , id_command + , id_command_modality + , id_bribe + , distance_from_handler + , is_in_sight_of_handler + , is_in_scent_range_of_handler + , is_in_hearing_range_of_handler + , is_on_lead + , trial_count + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + a_guid + , t_ASSESSMENT_COMMAND_MODALITY_LINK.id_link + , t_ASSESSMENT_COMMAND_MODALITY_LINK.id_assessment + , t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command + , t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command_modality + , t_ASSESSMENT_COMMAND_MODALITY_LINK.id_bribe + , t_ASSESSMENT_COMMAND_MODALITY_LINK.distance_from_handler + , t_ASSESSMENT_COMMAND_MODALITY_LINK.is_in_sight_of_handler + , t_ASSESSMENT_COMMAND_MODALITY_LINK.is_in_scent_range_of_handler + , t_ASSESSMENT_COMMAND_MODALITY_LINK.is_in_hearing_range_of_handler + , t_ASSESSMENT_COMMAND_MODALITY_LINK.is_on_lead + , t_ASSESSMENT_COMMAND_MODALITY_LINK.trial_count + , t_ASSESSMENT_COMMAND_MODALITY_LINK.active + + , t_ASSESSMENT_COMMAND_MODALITY_LINK.does_meet_id_filters + , t_ASSESSMENT_COMMAND_MODALITY_LINK.does_meet_non_id_filters + FROM parts.DOG_Assessment_Command_Modality_Link ASSESSMENT_COMMAND_MODALITY_LINK + INNER JOIN tmp_Assessment_Command_Modality_Link_Calc_ACM_Link t_ASSESSMENT_COMMAND_MODALITY_LINK ON ASSESSMENT_COMMAND_MODALITY_LINK.id_link = t_ASSESSMENT_COMMAND_MODALITY_LINK.id_link + ; + COMMIT; + -- END IF; + + -- Errors + IF a_show_errors = 1 THEN + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_ACM_Link t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + END IF; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Assessment_Calc_ACM_Link; + SELECT * FROM tmp_Command_Category_Calc_ACM_Link; + SELECT * FROM tmp_Command_Calc_ACM_Link; + SELECT * FROM tmp_Command_Modality_Calc_ACM_Link; + SELECT * FROM tmp_Bribe_Calc_ACM_Link; + SELECT * FROM tmp_Assessment_Command_Modality_Link_Calc_ACM_Link; + END IF; + + CALL parts.p_dog_clear_calc_assessment ( + a_guid + , 0 -- a_debug + ); + + CALL parts.p_dog_clear_calc_command ( + a_guid + , 0 -- a_debug + ); + + CALL parts.p_dog_clear_calc_command_modality ( + a_guid + , 0 -- a_debug + ); + + CALL parts.p_dog_clear_calc_bribe ( + a_guid + , 0 -- a_debug + ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_ACM_Link; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_ACM_Link; + DROP TEMPORARY TABLE IF EXISTS tmp_Assessment_Command_Modality_Link_Calc_ACM_Link; + DROP TEMPORARY TABLE IF EXISTS tmp_Bribe_Calc_ACM_Link; + DROP TEMPORARY TABLE IF EXISTS tmp_Command_Modality_Calc_ACM_Link; + DROP TEMPORARY TABLE IF EXISTS tmp_Command_Calc_ACM_Link; + DROP TEMPORARY TABLE IF EXISTS tmp_Command_Category_Calc_ACM_Link; + DROP TEMPORARY TABLE IF EXISTS tmp_Assessment_Calc_ACM_Link; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_calc_assessment_command_modality_link ( + 'slappery ' -- a_guid + , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_link + , 0 -- a_get_inactive_link + , '' -- a_ids_link + , NULL -- a_min_distance_from_handler_link + , NULL -- a_max_distance_from_handler_link + , NULL -- a_value_is_in_sight_of_handler_link + , NULL -- a_value_is_in_scent_range_of_handler_link + , NULL -- a_value_is_in_hearing_range_of_handler_link + , NULL -- a_value_is_on_lead_link + , NULL -- a_min_trial_count_link + , NULL -- a_max_trial_count_link + + , 1 -- a_get_all_assessment + , 0 -- a_get_inactive_assessment + , '' -- a_ids_assessment + , '' -- a_notes_assessment + , NULL -- a_min_temperature_assessment + , NULL -- a_max_temperature_assessment + , 1 -- a_get_all_weather + , 0 -- a_get_inactive_weather + , '' -- a_ids_weather + , '' -- a_names_weather + , 1 -- a_get_all_lighting_level + , 0 -- a_get_inactive_lighting_level + , '' -- a_ids_lighting_level + , '' -- a_names_lighting_level + , 1 -- a_get_all_location + , 0 -- a_get_inactive_location + , '' -- a_ids_location + , '' -- a_names_location + , 1 -- a_get_all_user_handler + , 0 -- a_get_inactive_user_handler + , '' -- a_ids_user_handler + -- , IN a_auth0_ids_user_handler TEXT + , '' -- a_names_user_handler + , '' -- a_emails_user_handler + + + , 1 -- a_get_all_command_category + , 0 -- a_get_inactive_command_category + , '' -- a_ids_command_category + , '' -- a_names_command_category + , 1 -- a_get_all_command + , 0 -- a_get_inactive_command + , '' -- a_ids_command + , '' -- a_names_command + , '' -- a_hand_signal_default_descriptions_command + , '' -- a_notes_command + + , 1 -- a_get_all_command_modality + , 0 -- a_get_inactive_command_modality + , '' -- a_ids_command_modality + , '' -- a_names_command_modality + + , 1 -- a_get_all_bribe + , 0 -- a_get_inactive_bribe + , '' -- a_ids_bribe + , '' -- a_names_bribe + + , 0 -- a_require_all_id_search_filters_met + , 0 -- 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 + , 0 -- a_show_errors + , 0 -- a_debug +); + +SELECT * +FROM parts.DOG_Assessment_Command_Modality_Link_Temp +; + +CALL parts.p_dog_clear_calc_assessment_command_modality_link ( + 'slappery ' -- a_guid + , 1 -- debug +); + +-- DELETE FROM parts.DOG_Assessment_Command_Modality_Link_Temp; + +*/ diff --git a/static/MySQL/71328_p_dog_clear_calc_assessment_command_modality_link.sql b/static/MySQL/71328_p_dog_clear_calc_assessment_command_modality_link.sql new file mode 100644 index 0000000..ae085db --- /dev/null +++ b/static/MySQL/71328_p_dog_clear_calc_assessment_command_modality_link.sql @@ -0,0 +1,44 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_clear_calc_assessment_command_modality_link; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_clear_calc_assessment_command_modality_link ( + IN a_guid BINARY(36) + , IN a_debug BIT +) +BEGIN + DECLARE v_time_start TIMESTAMP(6); + SET v_time_start := CURRENT_TIMESTAMP(6); + + CALL parts.p_core_validate_guid ( a_guid ); + + START TRANSACTION; + + DELETE ASSESSMENT_COMMAND_MODALITY_LINKS_T + FROM parts.DOG_Assessment_Command_Modality_Link_Temp ASSESSMENT_COMMAND_MODALITY_LINKS_T + WHERE ASSESSMENT_COMMAND_MODALITY_LINKS_T.GUID = a_guid + ; + + COMMIT; + + IF a_debug = 1 THEN + CALL parts.p_debug_timing_reporting( v_time_start ); + END IF; +END // +DELIMITER ; + +/* + +CALL parts.p_dog_clear_calc_assessment_command_modality_link ( + 'crips ' -- a_guid + , 1 -- debug +); + +SELECT * +FROM parts.DOG_Calc_User_Temp +WHERE GUID = 'chips ' +; + +*/ diff --git a/static/MySQL/71328_p_dog_get_many_assessment_command_modality_link.sql b/static/MySQL/71328_p_dog_get_many_assessment_command_modality_link.sql new file mode 100644 index 0000000..e2a5aaa --- /dev/null +++ b/static/MySQL/71328_p_dog_get_many_assessment_command_modality_link.sql @@ -0,0 +1,663 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_get_many_assessment_command_modality_link; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_get_many_assessment_command_modality_link ( + IN a_id_user INT + , IN a_get_all_link BIT + , IN a_get_inactive_link BIT + , IN a_ids_link TEXT + , IN a_min_distance_from_handler_link FLOAT + , IN a_max_distance_from_handler_link FLOAT + , IN a_value_is_in_sight_of_handler_link INT + , IN a_value_is_in_scent_range_of_handler_link INT + , IN a_value_is_in_hearing_range_of_handler_link INT + , IN a_value_is_on_lead_link INT + , IN a_min_trial_count_link FLOAT + , IN a_max_trial_count_link FLOAT + + , IN a_get_all_assessment BIT + , IN a_get_inactive_assessment BIT + , IN a_ids_assessment TEXT + , IN a_notes_assessment TEXT + , IN a_min_temperature_assessment DECIMAL(5, 2) + , IN a_max_temperature_assessment DECIMAL(5, 2) + , IN a_get_all_weather BIT + , IN a_get_inactive_weather BIT + , IN a_ids_weather TEXT + , IN a_names_weather TEXT + , IN a_get_all_lighting_level BIT + , IN a_get_inactive_lighting_level BIT + , IN a_ids_lighting_level TEXT + , IN a_names_lighting_level TEXT + , IN a_get_all_location BIT + , IN a_get_inactive_location BIT + , IN a_ids_location TEXT + , IN a_names_location TEXT + , IN a_get_all_user_handler BIT + , IN a_get_inactive_user_handler BIT + , IN a_ids_user_handler TEXT + -- , IN a_auth0_ids_user_handler TEXT + , IN a_names_user_handler TEXT + , IN a_emails_user_handler TEXT + + , IN a_get_all_command_category BIT + , IN a_get_inactive_command_category BIT + , IN a_ids_command_category TEXT + , IN a_names_command_category TEXT + , IN a_get_all_command BIT + , IN a_get_inactive_command BIT + , IN a_ids_command TEXT + , IN a_names_command TEXT + , IN a_hand_signal_default_descriptions_command TEXT + , IN a_notes_command TEXT + + , IN a_get_all_command_modality BIT + , IN a_get_inactive_command_modality BIT + , IN a_ids_command_modality TEXT + , IN a_names_command_modality TEXT + + , IN a_get_all_bribe BIT + , IN a_get_inactive_bribe BIT + , IN a_ids_bribe TEXT + , IN a_names_bribe TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_guid BINARY(36); + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_guid := UUID(); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + SET a_id_user := IFNULL(a_id_user, 0); + /* + Filters handled by Calc Stored Procedure + */ + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_id_user + , a_get_all_link + , a_get_inactive_link + , a_ids_link + , a_min_distance_from_handler_link + , a_max_distance_from_handler_link + , a_value_is_in_sight_of_handler_link + , a_value_is_in_scent_range_of_handler_link + , a_value_is_in_hearing_range_of_handler_link + , a_value_is_on_lead_link + , a_min_trial_count_link + , a_max_trial_count_link + + , a_get_all_assessment + , a_get_inactive_assessment + , a_ids_assessment + , a_notes_assessment + , a_min_temperature_assessment + , a_max_temperature_assessment + , a_get_all_weather + , a_get_inactive_weather + , a_ids_weather + , a_names_weather + , a_get_all_lighting_level + , a_get_inactive_lighting_level + , a_ids_lighting_level + , a_names_lighting_level + , a_get_all_location + , a_get_inactive_location + , a_ids_location + , a_names_location + , a_get_all_user_handler + , a_get_inactive_user_handler + , a_ids_user_handler + -- , a_auth0_ids_user_handler + , a_names_user_handler + , a_emails_user_handler + + , a_get_all_command_category + , a_get_inactive_command_category + , a_ids_command_category + , a_names_command_category + , a_get_all_command + , a_get_inactive_command + , a_ids_command + , a_names_command + , a_hand_signal_default_descriptions_command + , a_notes_command + + , a_get_all_command_modality + , a_get_inactive_command_modality + , a_ids_command_modality + , a_names_command_modality + + , a_get_all_bribe + , a_get_inactive_bribe + , a_ids_bribe + , a_names_bribe + + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_guid + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Assessment_Command_Modality_Link; + + CREATE TEMPORARY TABLE tmp_Assessment_Command_Modality_Link ( + id_link INT NOT NULL + , id_assessment INT + , id_command INT + , id_command_modality INT + , id_bribe INT + , distance_from_handler FLOAT + , is_in_sight_of_handler BIT + , is_in_scent_range_of_handler BIT + , is_in_hearing_range_of_handler BIT + , is_on_lead BIT + , trial_count INT + , active BIT + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + -- Permissions + IF a_debug = 1 THEN + SELECT + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = v_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR; + SELECT * FROM tmp_Msg_Error t_ERROR; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Assessment_Command_Modality_Links.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + v_guid + , 0 -- a_debug + ); + + + -- Call Assessment_Command_Modality_Link Calc + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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 + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_link + , a_get_inactive_link + , a_ids_link + , a_min_distance_from_handler_link + , a_max_distance_from_handler_link + , a_value_is_in_sight_of_handler_link + , a_value_is_in_scent_range_of_handler_link + , a_value_is_in_hearing_range_of_handler_link + , a_value_is_on_lead_link + , a_min_trial_count_link + , a_max_trial_count_link + + , a_get_all_assessment + , a_get_inactive_assessment + , a_ids_assessment + , a_notes_assessment + , a_min_temperature_assessment + , a_max_temperature_assessment + , a_get_all_weather + , a_get_inactive_weather + , a_ids_weather + , a_names_weather + , a_get_all_lighting_level + , a_get_inactive_lighting_level + , a_ids_lighting_level + , a_names_lighting_level + , a_get_all_location + , a_get_inactive_location + , a_ids_location + , a_names_location + , a_get_all_user_handler + , a_get_inactive_user_handler + , a_ids_user_handler + -- , a_auth0_ids_user_handler + , a_names_user_handler + , a_emails_user_handler + + , a_get_all_command_category + , a_get_inactive_command_category + , a_ids_command_category + , a_names_command_category + , a_get_all_command + , a_get_inactive_command + , a_ids_command + , a_names_command + , a_hand_signal_default_descriptions_command + , a_notes_command + + , a_get_all_command_modality + , a_get_inactive_command_modality + , a_ids_command_modality + , a_names_command_modality + + , a_get_all_bribe + , a_get_inactive_bribe + , a_ids_bribe + , a_names_bribe + + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_assessment_command_modality_link ( + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_link + , a_get_inactive_link + , a_ids_link + , a_min_distance_from_handler_link + , a_max_distance_from_handler_link + , a_value_is_in_sight_of_handler_link + , a_value_is_in_scent_range_of_handler_link + , a_value_is_in_hearing_range_of_handler_link + , a_value_is_on_lead_link + , a_min_trial_count_link + , a_max_trial_count_link + + , a_get_all_assessment + , a_get_inactive_assessment + , a_ids_assessment + , a_notes_assessment + , a_min_temperature_assessment + , a_max_temperature_assessment + , a_get_all_weather + , a_get_inactive_weather + , a_ids_weather + , a_names_weather + , a_get_all_lighting_level + , a_get_inactive_lighting_level + , a_ids_lighting_level + , a_names_lighting_level + , a_get_all_location + , a_get_inactive_location + , a_ids_location + , a_names_location + , a_get_all_user_handler + , a_get_inactive_user_handler + , a_ids_user_handler + -- , a_auth0_ids_user_handler + , a_names_user_handler + , a_emails_user_handler + + , a_get_all_command_category + , a_get_inactive_command_category + , a_ids_command_category + , a_names_command_category + , a_get_all_command + , a_get_inactive_command + , a_ids_command + , a_names_command + , a_hand_signal_default_descriptions_command + , a_notes_command + + , a_get_all_command_modality + , a_get_inactive_command_modality + , a_ids_command_modality + , a_names_command_modality + + , a_get_all_bribe + , a_get_inactive_bribe + , a_ids_bribe + , a_names_bribe + + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM parts.DOG_Assessment_Command_Modality_Link_Temp; + SELECT * FROM parts.DOG_Assessment_Command_Modality_Link_Temp; + END IF; + + INSERT INTO tmp_Assessment_Command_Modality_Link ( + id_link + , id_assessment + , id_command + , id_command_modality + , id_bribe + , distance_from_handler + , is_in_sight_of_handler + , is_in_scent_range_of_handler + , is_in_hearing_range_of_handler + , is_on_lead + , trial_count + , active + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + ASSESSMENT_COMMAND_MODALITY_LINK_T.id_link + , ASSESSMENT_COMMAND_MODALITY_LINK_T.id_assessment + , ASSESSMENT_COMMAND_MODALITY_LINK_T.id_command + , ASSESSMENT_COMMAND_MODALITY_LINK_T.id_command_modality + , ASSESSMENT_COMMAND_MODALITY_LINK_T.id_bribe + , ASSESSMENT_COMMAND_MODALITY_LINK_T.distance_from_handler + , ASSESSMENT_COMMAND_MODALITY_LINK_T.is_in_sight_of_handler + , ASSESSMENT_COMMAND_MODALITY_LINK_T.is_in_scent_range_of_handler + , ASSESSMENT_COMMAND_MODALITY_LINK_T.is_in_hearing_range_of_handler + , ASSESSMENT_COMMAND_MODALITY_LINK_T.is_on_lead + , ASSESSMENT_COMMAND_MODALITY_LINK_T.trial_count + , ASSESSMENT_COMMAND_MODALITY_LINK_T.active + , ASSESSMENT_COMMAND_MODALITY_LINK_T.does_meet_id_filters + , ASSESSMENT_COMMAND_MODALITY_LINK_T.does_meet_non_id_filters + FROM parts.DOG_Assessment_Command_Modality_Link_Temp ASSESSMENT_COMMAND_MODALITY_LINK_T + WHERE ASSESSMENT_COMMAND_MODALITY_LINK_T.GUID = v_guid + ; + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM tmp_Assessment_Command_Modality_Link; + SELECT * FROM tmp_Assessment_Command_Modality_Link; + END IF; + END IF; + + -- Filter outputs + IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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_Assessment_Command_Modality_Link; + END IF; + + DELETE FROM tmp_Assessment_Command_Modality_Link; + END IF; + + + -- Outputs + -- Assessment_Command_Modality_Links + SELECT + t_ASSESSMENT_COMMAND_MODALITY_LINK.id_link + , t_ASSESSMENT_COMMAND_MODALITY_LINK.id_assessment + , ASSESSMENT.created_on AS created_on_assessment + , COMMAND.id_command_category + , COMMAND_CATEGORY.name AS name_command_category + , t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command + , COMMAND.name AS name_command + , t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command_modality + , COMMAND_MODALITY.name AS name_command_modality + , t_ASSESSMENT_COMMAND_MODALITY_LINK.id_bribe + , BRIBE.name AS name_bribe + , t_ASSESSMENT_COMMAND_MODALITY_LINK.distance_from_handler + , t_ASSESSMENT_COMMAND_MODALITY_LINK.is_in_sight_of_handler + , t_ASSESSMENT_COMMAND_MODALITY_LINK.is_in_scent_range_of_handler + , t_ASSESSMENT_COMMAND_MODALITY_LINK.is_in_hearing_range_of_handler + , t_ASSESSMENT_COMMAND_MODALITY_LINK.is_on_lead + , t_ASSESSMENT_COMMAND_MODALITY_LINK.trial_count + , t_ASSESSMENT_COMMAND_MODALITY_LINK.active + + , t_ASSESSMENT_COMMAND_MODALITY_LINK.does_meet_id_filters + , t_ASSESSMENT_COMMAND_MODALITY_LINK.does_meet_non_id_filters + FROM tmp_Assessment_Command_Modality_Link t_ASSESSMENT_COMMAND_MODALITY_LINK + LEFT JOIN parts.DOG_Assessment_Command_Modality_Link ASSESSMENT_COMMAND_MODALITY_LINK ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_link = ASSESSMENT_COMMAND_MODALITY_LINK.id_link + LEFT JOIN parts.DOG_Assessment ASSESSMENT ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_assessment = ASSESSMENT.id_assessment + LEFT JOIN parts.DOG_Command COMMAND ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command = COMMAND.id_command + LEFT JOIN parts.DOG_Command_Category COMMAND_CATEGORY ON COMMAND.id_command_category = COMMAND_CATEGORY.id_command_category + LEFT JOIN parts.DOG_Command_Modality COMMAND_MODALITY ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_command_modality = COMMAND_MODALITY.id_command_modality + LEFT JOIN parts.DOG_Bribe BRIBE ON t_ASSESSMENT_COMMAND_MODALITY_LINK.id_bribe = BRIBE.id_bribe + ; + + -- Errors + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Assessment_Command_Modality_Link; + END IF; + + CALL parts.p_dog_clear_calc_assessment_command_modality_link( + v_guid -- a_guid + , 0 -- a_debug + ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Assessment_Command_Modality_Link; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_get_many_assessment_command_modality_link ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_link + , 0 -- a_get_inactive_link + , '' -- a_ids_link + , NULL -- a_min_distance_from_handler_link + , NULL -- a_max_distance_from_handler_link + , NULL -- a_value_is_in_sight_of_handler_link + , NULL -- a_value_is_in_scent_range_of_handler_link + , NULL -- a_value_is_in_hearing_range_of_handler_link + , NULL -- a_value_is_on_lead_link + , NULL -- a_min_trial_count_link + , NULL -- a_max_trial_count_link + + , 1 -- a_get_all_assessment + , 0 -- a_get_inactive_assessment + , '' -- a_ids_assessment + , '' -- a_notes_assessment + , NULL -- a_min_temperature_assessment + , NULL -- a_max_temperature_assessment + , 1 -- a_get_all_weather + , 0 -- a_get_inactive_weather + , '' -- a_ids_weather + , '' -- a_names_weather + , 1 -- a_get_all_lighting_level + , 0 -- a_get_inactive_lighting_level + , '' -- a_ids_lighting_level + , '' -- a_names_lighting_level + , 1 -- a_get_all_location + , 0 -- a_get_inactive_location + , '' -- a_ids_location + , '' -- a_names_location + , 1 -- a_get_all_user_handler + , 0 -- a_get_inactive_user_handler + , '' -- a_ids_user_handler + -- , IN a_auth0_ids_user_handler TEXT + , '' -- a_names_user_handler + , '' -- a_emails_user_handler + + + , 1 -- a_get_all_command_category + , 0 -- a_get_inactive_command_category + , '' -- a_ids_command_category + , '' -- a_names_command_category + , 1 -- a_get_all_command + , 0 -- a_get_inactive_command + , '' -- a_ids_command + , '' -- a_names_command + , '' -- a_hand_signal_default_descriptions_command + , '' -- a_notes_command + + , 1 -- a_get_all_command_modality + , 0 -- a_get_inactive_command_modality + , '' -- a_ids_command_modality + , '' -- a_names_command_modality + + , 1 -- a_get_all_bribe + , 0 -- a_get_inactive_bribe + , '' -- a_ids_bribe + , '' -- a_names_bribe + + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + +*/ \ No newline at end of file diff --git a/static/MySQL/71332_p_dog_calc_response_quality_metric.sql b/static/MySQL/71332_p_dog_calc_response_quality_metric.sql new file mode 100644 index 0000000..98a9641 --- /dev/null +++ b/static/MySQL/71332_p_dog_calc_response_quality_metric.sql @@ -0,0 +1,636 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_calc_response_quality_metric; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_calc_response_quality_metric ( + IN a_guid BINARY(36) + , IN a_id_user INT + , IN a_get_all_metric BIT + , IN a_get_inactive_metric BIT + , IN a_ids_metric TEXT + -- , IN a_ids_unit_measurement_metric TEXT + , IN a_names_metric TEXT + + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_show_errors BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_has_filter_response_quality_metric_id BIT; + DECLARE v_has_filter_response_quality_metric_name BIT; + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_RQM ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error_Calc_RQM ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_RQM t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error_Calc_RQM; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + + CALL parts.p_core_validate_guid ( a_guid ); + + SET a_id_user := IFNULL(a_id_user, 0); + SET a_get_all_metric := IFNULL(a_get_all_metric, 0); + SET a_get_inactive_metric := IFNULL(a_get_inactive_metric, 0); + SET a_ids_metric := TRIM(IFNULL(a_ids_metric, '')); + SET a_names_metric := TRIM(IFNULL(a_names_metric, '')); + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + SET a_show_errors := IFNULL(a_show_errors, 0); + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_guid + , a_get_all_metric + , a_get_inactive_metric + , a_ids_metric + , a_names_metric + + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_show_errors + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_RQM; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_RQM; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_RQM; + DROP TEMPORARY TABLE IF EXISTS tmp_Response_Quality_Metric_Calc_RQM; + + CREATE TEMPORARY TABLE tmp_Response_Quality_Metric_Calc_RQM ( + id_metric INT NOT NULL + , id_unit_measurement INT + , code VARCHAR(250) + , name VARCHAR(250) + , value_min DOUBLE + , value_max DOUBLE + , active BIT + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_RQM ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_RQM ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Id_Calc_RQM; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name_Calc_RQM ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Name_Calc_RQM; + + SET v_has_filter_response_quality_metric_id := CASE WHEN a_ids_metric <> '' THEN 1 ELSE 0 END; + SET v_has_filter_response_quality_metric_name := CASE WHEN a_names_metric <> '' THEN 1 ELSE 0 END; + + -- Response Quality Metrics + IF v_has_filter_response_quality_metric_id = 1 THEN + CALL parts.p_core_split(a_guid, a_ids_metric, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Id_Calc_RQM ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF v_has_filter_response_quality_metric_name = 1 THEN + CALL parts.p_core_split(a_guid, a_names_metric, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Name_Calc_RQM ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_RQM t_ERROR INNER JOIN parts.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 EXISTS ( + SELECT * + FROM tmp_Split_Id_Calc_RQM t_SPLIT_ID + LEFT JOIN parts.DOG_Response_Quality_Metric RESPONSE_QUALITY_METRIC ON t_SPLIT_ID.as_int = RESPONSE_QUALITY_METRIC.id_metric + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(RESPONSE_QUALITY_METRIC.id_metric) + OR ( + RESPONSE_QUALITY_METRIC.active = 0 + AND a_get_inactive_metric = 0 + ) + ) THEN + INSERT INTO tmp_Msg_Error_Calc_RQM ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Invalid or inactive Response_Quality_Metric IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split_Id_Calc_RQM t_SPLIT_ID + LEFT JOIN parts.DOG_Response_Quality_Metric RESPONSE_QUALITY_METRIC ON t_SPLIT_ID.as_int = RESPONSE_QUALITY_METRIC.id_metric + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(RESPONSE_QUALITY_METRIC.id_metric) + OR ( + RESPONSE_QUALITY_METRIC.active = 0 + AND a_get_inactive_metric = 0 + ) + ; + /* Don't error on notes not found + ELSEIF EXISTS () + */ + ELSE + IF a_debug = 1 THEN + SELECT 'Response_Quality_Metric Filters'; + WITH + Response_Quality_Metric_Id_Filter AS ( + SELECT RESPONSE_QUALITY_METRIC.id_metric + FROM tmp_Split_Id_Calc_RQM t_SPLIT_ID + INNER JOIN parts.DOG_Response_Quality_Metric RESPONSE_QUALITY_METRIC ON t_SPLIT_ID.as_int = RESPONSE_QUALITY_METRIC.id_metric + ) + , Response_Quality_Metric_Name_Filter AS ( + SELECT RESPONSE_QUALITY_METRIC.id_metric + FROM tmp_Split_Name_Calc_RQM t_SPLIT_NAME + INNER JOIN parts.DOG_Response_Quality_Metric RESPONSE_QUALITY_METRIC ON RESPONSE_QUALITY_METRIC.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') + WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL + ) + , Response_Quality_Metric_Filters AS ( + SELECT + RESPONSE_QUALITY_METRIC_COMBINED.id_metric + , MAX(RESPONSE_QUALITY_METRIC_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(RESPONSE_QUALITY_METRIC_COMBINED.does_meet_name_filter) AS does_meet_name_filter + FROM ( + SELECT + RESPONSE_QUALITY_METRIC_ID_FILTER.id_metric + , 1 AS does_meet_id_filter + , 0 AS does_meet_name_filter + FROM Response_Quality_Metric_Id_Filter RESPONSE_QUALITY_METRIC_ID_FILTER + UNION + SELECT + RESPONSE_QUALITY_METRIC_NAME_FILTER.id_metric + , 0 AS does_meet_id_filter + , 1 AS does_meet_name_filter + FROM Response_Quality_Metric_Name_Filter RESPONSE_QUALITY_METRIC_NAME_FILTER + ) RESPONSE_QUALITY_METRIC_COMBINED + GROUP BY RESPONSE_QUALITY_METRIC_COMBINED.id_metric + ) + SELECT + RESPONSE_QUALITY_METRIC.id_metric + , RESPONSE_QUALITY_METRIC.id_unit_measurement + , RESPONSE_QUALITY_METRIC.code + , RESPONSE_QUALITY_METRIC.name + , RESPONSE_QUALITY_METRIC.value_min + , RESPONSE_QUALITY_METRIC.value_max + , RESPONSE_QUALITY_METRIC.active + , CASE WHEN + v_has_filter_response_quality_metric_id = 0 + OR RESPONSE_QUALITY_METRIC_FILTERS.does_meet_id_filter = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_response_quality_metric_name = 0 + ) + OR RESPONSE_QUALITY_METRIC_FILTERS.does_meet_name_filter = 1 + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.DOG_Response_Quality_Metric RESPONSE_QUALITY_METRIC + LEFT JOIN Response_Quality_Metric_Filters RESPONSE_QUALITY_METRIC_FILTERS ON RESPONSE_QUALITY_METRIC.id_metric = RESPONSE_QUALITY_METRIC_FILTERS.id_metric + WHERE + ( + a_get_all_metric = 1 + OR ( + v_has_filter_response_quality_metric_id = 1 + AND RESPONSE_QUALITY_METRIC_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_response_quality_metric_name = 0 + AND RESPONSE_QUALITY_METRIC_FILTERS.does_meet_name_filter = 1 + ) + ) + AND ( + a_get_inactive_metric = 1 + OR RESPONSE_QUALITY_METRIC.active = 1 + ) + ; + END IF; + INSERT INTO tmp_Response_Quality_Metric_Calc_RQM ( + id_metric + , id_unit_measurement + , code + , name + , value_min + , value_max + , active + , does_meet_id_filters + , does_meet_non_id_filters + ) + WITH + Response_Quality_Metric_Id_Filter AS ( + SELECT RESPONSE_QUALITY_METRIC.id_metric + FROM tmp_Split_Id_Calc_RQM t_SPLIT_ID + INNER JOIN parts.DOG_Response_Quality_Metric RESPONSE_QUALITY_METRIC ON t_SPLIT_ID.as_int = RESPONSE_QUALITY_METRIC.id_metric + ) + , Response_Quality_Metric_Name_Filter AS ( + SELECT RESPONSE_QUALITY_METRIC.id_metric + FROM tmp_Split_Name_Calc_RQM t_SPLIT_NAME + INNER JOIN parts.DOG_Response_Quality_Metric RESPONSE_QUALITY_METRIC ON RESPONSE_QUALITY_METRIC.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') + WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL + ) + , Response_Quality_Metric_Filters AS ( + SELECT + RESPONSE_QUALITY_METRIC_COMBINED.id_metric + , MAX(RESPONSE_QUALITY_METRIC_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(RESPONSE_QUALITY_METRIC_COMBINED.does_meet_name_filter) AS does_meet_name_filter + FROM ( + SELECT + RESPONSE_QUALITY_METRIC_ID_FILTER.id_metric + , 1 AS does_meet_id_filter + , 0 AS does_meet_name_filter + FROM Response_Quality_Metric_Id_Filter RESPONSE_QUALITY_METRIC_ID_FILTER + UNION + SELECT + RESPONSE_QUALITY_METRIC_NAME_FILTER.id_metric + , 0 AS does_meet_id_filter + , 1 AS does_meet_name_filter + FROM Response_Quality_Metric_Name_Filter RESPONSE_QUALITY_METRIC_NAME_FILTER + ) RESPONSE_QUALITY_METRIC_COMBINED + GROUP BY RESPONSE_QUALITY_METRIC_COMBINED.id_metric + ) + SELECT + RESPONSE_QUALITY_METRIC.id_metric + , RESPONSE_QUALITY_METRIC.id_unit_measurement + , RESPONSE_QUALITY_METRIC.code + , RESPONSE_QUALITY_METRIC.name + , RESPONSE_QUALITY_METRIC.value_min + , RESPONSE_QUALITY_METRIC.value_max + , RESPONSE_QUALITY_METRIC.active + , CASE WHEN + v_has_filter_response_quality_metric_id = 0 + OR RESPONSE_QUALITY_METRIC_FILTERS.does_meet_id_filter = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_response_quality_metric_name = 0 + ) + OR RESPONSE_QUALITY_METRIC_FILTERS.does_meet_name_filter = 1 + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.DOG_Response_Quality_Metric RESPONSE_QUALITY_METRIC + LEFT JOIN Response_Quality_Metric_Filters RESPONSE_QUALITY_METRIC_FILTERS ON RESPONSE_QUALITY_METRIC.id_metric = RESPONSE_QUALITY_METRIC_FILTERS.id_metric + WHERE + ( + a_get_all_metric = 1 + OR ( + v_has_filter_response_quality_metric_id = 1 + AND RESPONSE_QUALITY_METRIC_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_response_quality_metric_name = 0 + AND RESPONSE_QUALITY_METRIC_FILTERS.does_meet_name_filter = 1 + ) + ) + AND ( + a_get_inactive_metric = 1 + OR RESPONSE_QUALITY_METRIC.active = 1 + ) + ; + END IF; + END IF; + + DELETE FROM tmp_Split_Id_Calc_RQM; + + IF a_debug = 1 THEN + SELECT 'After get Response_Quality_Metrics'; + SELECT * FROM tmp_Response_Quality_Metric_Calc_RQM; + END IF; + + -- Filter records + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_RQM t_ERROR INNER JOIN parts.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 + DELETE t_RESPONSE_QUALITY_METRIC + FROM tmp_Response_Quality_Metric_Calc_RQM t_RESPONSE_QUALITY_METRIC + WHERE + ( + a_require_all_id_search_filters_met = 1 + AND ( + t_RESPONSE_QUALITY_METRIC.does_meet_id_filters = 0 + ) + ) + OR ( + a_require_all_non_id_search_filters_met = 1 + AND ( + t_RESPONSE_QUALITY_METRIC.does_meet_non_id_filters = 0 + ) + ) + OR ( + a_require_any_id_search_filters_met = 1 + AND t_RESPONSE_QUALITY_METRIC.does_meet_id_filters = 0 + ) + OR ( + a_require_any_non_id_search_filters_met = 1 + AND t_RESPONSE_QUALITY_METRIC.does_meet_non_id_filters = 0 + ) + ; + END IF; + + IF a_debug = 1 THEN + SELECT 'After filter Response_Quality_Metrics'; + SELECT * FROM tmp_Response_Quality_Metric_Calc_RQM; + END IF; + + + -- Permissions + IF a_debug = 1 THEN + SELECT + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = a_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error_Calc_RQM t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error_Calc_RQM ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Dogs and Button Icons.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT 'Before non-permitted data deletion'; + SELECT * FROM tmp_Response_Quality_Metric_Calc_RQM; + END IF; + + IF EXISTS(SELECT * FROM tmp_Msg_Error_Calc_RQM t_ERROR INNER JOIN parts.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_Response_Quality_Metric_Calc_RQM; + END IF; + + DELETE FROM tmp_Response_Quality_Metric_Calc_RQM; + END IF; + + IF a_debug = 1 THEN + SELECT 'After non-permitted data deletion'; + END IF; + + -- Outputs + /* + IF ( + NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_RQM t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) + AND EXISTS (SELECT * FROM tmp_Response_Quality_Metric_Calc_RQM) + ) THEN + */ + START TRANSACTION; + -- Response_Quality_Metrics + INSERT INTO parts.DOG_Response_Quality_Metric_Temp ( + guid + , id_metric + , id_unit_measurement + , code + , name + , value_min + , value_max + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + a_guid + , t_RESPONSE_QUALITY_METRIC.id_metric + , t_RESPONSE_QUALITY_METRIC.id_unit_measurement + , t_RESPONSE_QUALITY_METRIC.code + , t_RESPONSE_QUALITY_METRIC.name + , t_RESPONSE_QUALITY_METRIC.value_min + , t_RESPONSE_QUALITY_METRIC.value_max + , t_RESPONSE_QUALITY_METRIC.active + + , t_RESPONSE_QUALITY_METRIC.does_meet_id_filters + , t_RESPONSE_QUALITY_METRIC.does_meet_non_id_filters + FROM parts.DOG_Response_Quality_Metric RESPONSE_QUALITY_METRIC + INNER JOIN tmp_Response_Quality_Metric_Calc_RQM t_RESPONSE_QUALITY_METRIC ON RESPONSE_QUALITY_METRIC.id_metric = t_RESPONSE_QUALITY_METRIC.id_metric + ; + COMMIT; + -- END IF; + + -- Errors + IF a_show_errors = 1 THEN + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_RQM t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + END IF; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Response_Quality_Metric_Calc_RQM; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_RQM; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_RQM; + DROP TEMPORARY TABLE IF EXISTS tmp_Response_Quality_Metric_Calc_RQM; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_calc_response_quality_metric ( + 'slappery ' -- a_guid + , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_metric + , 0 -- a_get_inactive_metric + , '' -- a_ids_metric + , '' -- a_names_metric + , 0 -- a_require_all_id_search_filters_met + , 0 -- 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 + , 0 -- a_show_errors + , 0 -- a_debug +); + +SELECT * +FROM parts.DOG_Response_Quality_Metric_Temp +; + +CALL parts.p_dog_clear_calc_response_quality_metric ( + 'slappery ' -- a_guid + , 1 -- debug +); + +-- DELETE FROM parts.DOG_Response_Quality_Metric_Temp; + +*/ diff --git a/static/MySQL/71332_p_dog_clear_calc_response_quality_metric.sql b/static/MySQL/71332_p_dog_clear_calc_response_quality_metric.sql new file mode 100644 index 0000000..b6232ae --- /dev/null +++ b/static/MySQL/71332_p_dog_clear_calc_response_quality_metric.sql @@ -0,0 +1,44 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_clear_calc_response_quality_metric; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_clear_calc_response_quality_metric ( + IN a_guid BINARY(36) + , IN a_debug BIT +) +BEGIN + DECLARE v_time_start TIMESTAMP(6); + SET v_time_start := CURRENT_TIMESTAMP(6); + + CALL parts.p_core_validate_guid ( a_guid ); + + START TRANSACTION; + + DELETE RESPONSE_QUALITY_METRICS_T + FROM parts.DOG_Response_Quality_Metric_Temp RESPONSE_QUALITY_METRICS_T + WHERE RESPONSE_QUALITY_METRICS_T.GUID = a_guid + ; + + COMMIT; + + IF a_debug = 1 THEN + CALL parts.p_debug_timing_reporting( v_time_start ); + END IF; +END // +DELIMITER ; + +/* + +CALL parts.p_dog_clear_calc_response_quality_metric ( + 'crips ' -- a_guid + , 1 -- debug +); + +SELECT * +FROM parts.DOG_Calc_User_Temp +WHERE GUID = 'chips ' +; + +*/ diff --git a/static/MySQL/71332_p_dog_get_many_response_quality_metric.sql b/static/MySQL/71332_p_dog_get_many_response_quality_metric.sql new file mode 100644 index 0000000..bca9209 --- /dev/null +++ b/static/MySQL/71332_p_dog_get_many_response_quality_metric.sql @@ -0,0 +1,375 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_get_many_colour; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_get_many_colour ( + IN a_id_user INT + , IN a_get_all_colour BIT + , IN a_get_inactive_colour BIT + , IN a_ids_colour TEXT + , IN a_names_colour TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_guid BINARY(36); + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_guid := UUID(); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + SET a_id_user := IFNULL(a_id_user, 0); + /* + SET a_get_all_colour := IFNULL(a_get_all_colour, 0); + SET a_get_inactive_colour := IFNULL(a_get_inactive_colour, 0); + SET a_ids_colour := TRIM(IFNULL(a_ids_colour, '')); + SET a_names_colour := TRIM(IFNULL(a_names_colour, '')); + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + */ + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_id_user + , a_get_all_colour + , a_get_inactive_colour + , a_ids_colour + , a_names_colour + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_guid + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Colour; + + CREATE TEMPORARY TABLE tmp_Colour ( + id_colour INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + -- Permissions + IF a_debug = 1 THEN + SELECT + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = v_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR; + SELECT * FROM tmp_Msg_Error t_ERROR; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Colours.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + v_guid + , 0 -- a_debug + ); + + + -- Call Colour Calc + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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 + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_colour -- a_get_all_colour + , a_get_inactive_colour -- a_get_inactive_colour + , a_ids_colour -- a_ids_colour + , a_names_colour -- a_names_colour + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_colour ( + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_colour -- a_get_all_colour + , a_get_inactive_colour -- a_get_inactive_colour + , a_ids_colour -- a_ids_colour + , a_names_colour -- a_names_colour + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM parts.DOG_Colour_Temp; + SELECT * FROM parts.DOG_Colour_Temp; + END IF; + + INSERT INTO tmp_Colour ( + id_colour + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + COLOUR_T.id_colour + , COLOUR_T.code + , COLOUR_T.name + , COLOUR_T.active + + , COLOUR_T.does_meet_id_filters + , COLOUR_T.does_meet_non_id_filters + FROM parts.DOG_Colour_Temp COLOUR_T + WHERE COLOUR_T.GUID = v_guid + ; + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM tmp_Colour; + SELECT * FROM tmp_Colour; + END IF; + END IF; + + -- Filter outputs + IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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_Colour; + END IF; + + DELETE FROM tmp_Colour; + END IF; + + + -- Outputs + -- Colours + SELECT + t_COLOURS.id_colour + , t_COLOURS.code + , t_COLOURS.name + , t_COLOURS.active + + , t_COLOURS.does_meet_id_filters + , t_COLOURS.does_meet_non_id_filters + FROM tmp_Colour t_COLOURS + LEFT JOIN parts.DOG_Colour COLOURS ON t_COLOURS.id_colour = COLOURS.id_colour + ORDER BY t_COLOURS.name + ; + + -- Errors + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Colour; + END IF; + + CALL parts.p_dog_clear_calc_colour( + v_guid -- a_guid + , 0 -- a_debug + ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Colour; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_get_many_colour ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_colour + , 0 -- a_get_inactive_colour + , '' -- a_ids_colour + , '' -- a_names_colour + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + + +CALL demo.p_dog_get_many_colour ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_colour + , 0 -- a_get_inactive_colour + , '' -- a_ids_colour + , 'pat,point' -- a_names_colour + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + +*/ \ No newline at end of file diff --git a/static/MySQL/71336_p_dog_calc_obedience_level.sql b/static/MySQL/71336_p_dog_calc_obedience_level.sql new file mode 100644 index 0000000..5af637b --- /dev/null +++ b/static/MySQL/71336_p_dog_calc_obedience_level.sql @@ -0,0 +1,549 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_calc_obedience_level; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_calc_obedience_level ( + IN a_guid BINARY(36) + , IN a_id_user INT + , IN a_get_all_obedience_level BIT + , IN a_get_inactive_obedience_level BIT + , IN a_ids_obedience_level TEXT + , IN a_names_obedience_level TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_show_errors BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_has_filter_obedience_level_id BIT; + DECLARE v_has_filter_obedience_level_name BIT; + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Obedience_Level ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error_Calc_Obedience_Level ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_obedience_level + , ERROR_TYPE.text_obedience_level + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_Obedience_Level t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error_Calc_Obedience_Level; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + + CALL parts.p_core_validate_guid ( a_guid ); + + SET a_id_user := IFNULL(a_id_user, 0); + SET a_get_all_obedience_level := IFNULL(a_get_all_obedience_level, 0); + SET a_get_inactive_obedience_level := IFNULL(a_get_inactive_obedience_level, 0); + SET a_ids_obedience_level := TRIM(IFNULL(a_ids_obedience_level, '')); + SET a_names_obedience_level := TRIM(IFNULL(a_names_obedience_level, '')); + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + SET a_show_errors := IFNULL(a_show_errors, 0); + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_guid + , a_id_user + , a_get_all_obedience_level + , a_get_inactive_obedience_level + , a_ids_obedience_level + , a_names_obedience_level + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_show_errors + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Obedience_Level; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Obedience_Level; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Obedience_Level; + DROP TEMPORARY TABLE IF EXISTS tmp_Obedience_Level_Calc_Obedience_Level; + + CREATE TEMPORARY TABLE tmp_Obedience_Level_Calc_Obedience_Level ( + id_obedience_level INT NOT NULL + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Obedience_Level ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_Obedience_Level ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Id_Calc_Obedience_Level; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name_Calc_Obedience_Level ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Name_Calc_Obedience_Level; + + SET v_has_filter_obedience_level_id = CASE WHEN a_ids_obedience_level <> '' THEN 1 ELSE 0 END; + SET v_has_filter_obedience_level_name = CASE WHEN a_names_obedience_level <> '' THEN 1 ELSE 0 END; + + -- Obedience_Levels + IF v_has_filter_obedience_level_id = 1 THEN + CALL parts.p_core_split(a_guid, a_ids_obedience_level, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Id_Calc_Obedience_Level ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF v_has_filter_obedience_level_name = 1 THEN + CALL parts.p_core_split(a_guid, a_names_obedience_level, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Name_Calc_Obedience_Level ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Obedience_Level t_ERROR INNER JOIN parts.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 EXISTS ( + SELECT * + FROM tmp_Split_Id_Calc_Obedience_Level t_SPLIT_ID + LEFT JOIN parts.DOG_Obedience_Level OBEDIENCE_LEVELS ON t_SPLIT_ID.as_int = OBEDIENCE_LEVELS.id_obedience_level + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(OBEDIENCE_LEVELS.id_obedience_level) + OR ( + OBEDIENCE_LEVELS.active = 0 + AND a_get_inactive_obedience_level = 0 + ) + ) THEN + INSERT INTO tmp_Msg_Error_Calc_Obedience_Level ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Invalid or inactive Obedience_Level IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split_Id_Calc_Obedience_Level t_SPLIT_ID + LEFT JOIN parts.DOG_Obedience_Level OBEDIENCE_LEVELS ON t_SPLIT_ID.as_int = OBEDIENCE_LEVELS.id_obedience_level + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(OBEDIENCE_LEVELS.id_obedience_level) + OR ( + OBEDIENCE_LEVELS.active = 0 + AND a_get_inactive_obedience_level = 0 + ) + ; + /* Don't error on names, hand signals, or notes not found + ELSEIF EXISTS () + */ + ELSE + INSERT INTO tmp_Obedience_Level_Calc_Obedience_Level ( + id_obedience_level + , does_meet_id_filters + , does_meet_non_id_filters + ) + WITH + Obedience_Level_Id_Filter AS ( + SELECT OBEDIENCE_LEVELS.id_obedience_level + FROM tmp_Split_Id_Calc_Obedience_Level t_SPLIT_ID + INNER JOIN parts.DOG_Obedience_Level OBEDIENCE_LEVELS ON t_SPLIT_ID.as_int = OBEDIENCE_LEVELS.id_obedience_level + ) + , Obedience_Level_Name_Filter AS ( + SELECT OBEDIENCE_LEVELS.id_obedience_level + FROM tmp_Split_Name_Calc_Obedience_Level t_SPLIT_NAME + INNER JOIN parts.DOG_Obedience_Level OBEDIENCE_LEVELS ON OBEDIENCE_LEVELS.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') + WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL + ) + , Obedience_Level_Filters AS ( + SELECT + OBEDIENCE_LEVELS_COMBINED.id_obedience_level + , MAX(OBEDIENCE_LEVELS_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(OBEDIENCE_LEVELS_COMBINED.does_meet_name_filter) AS does_meet_name_filter + FROM ( + SELECT + OBEDIENCE_LEVELS_ID_FILTER.id_obedience_level + , 1 AS does_meet_id_filter + , 0 AS does_meet_name_filter + FROM Obedience_Level_Id_Filter OBEDIENCE_LEVELS_ID_FILTER + UNION + SELECT + OBEDIENCE_LEVELS_NAME_FILTER.id_obedience_level + , 0 AS does_meet_id_filter + , 1 AS does_meet_name_filter + FROM Obedience_Level_Name_Filter OBEDIENCE_LEVELS_NAME_FILTER + ) OBEDIENCE_LEVELS_COMBINED + GROUP BY OBEDIENCE_LEVELS_COMBINED.id_obedience_level + ) + SELECT + OBEDIENCE_LEVELS.id_obedience_level + , CASE WHEN + v_has_filter_obedience_level_id = 0 + OR IFNULL(OBEDIENCE_LEVELS_FILTERS.does_meet_id_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_obedience_level_name = 0 + ) + OR IFNULL(OBEDIENCE_LEVELS_FILTERS.does_meet_name_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.DOG_Obedience_Level OBEDIENCE_LEVELS + LEFT JOIN Obedience_Level_Filters OBEDIENCE_LEVELS_FILTERS ON OBEDIENCE_LEVELS.id_obedience_level = OBEDIENCE_LEVELS_FILTERS.id_obedience_level + WHERE + ( + a_get_all_obedience_level = 1 + OR ( + v_has_filter_obedience_level_id = 1 + AND OBEDIENCE_LEVELS_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_obedience_level_name = 1 + AND OBEDIENCE_LEVELS_FILTERS.does_meet_name_filter = 1 + ) + ) + AND ( + a_get_inactive_obedience_level = 1 + OR OBEDIENCE_LEVELS.active = 1 + ) + ; + END IF; + END IF; + + DELETE FROM tmp_Split_Id_Calc_Obedience_Level; + DELETE FROM tmp_Split_Name_Calc_Obedience_Level; + + IF a_debug = 1 THEN + SELECT 'After get Obedience_Levels '; + SELECT * FROM tmp_Obedience_Level_Calc_Obedience_Level; + END IF; + + -- Filter records + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Obedience_Level t_ERROR INNER JOIN parts.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 + DELETE t_OBEDIENCE_LEVELS + FROM tmp_Obedience_Level_Calc_Obedience_Level t_OBEDIENCE_LEVELS + WHERE + ( + a_require_all_id_search_filters_met = 1 + AND ( + t_OBEDIENCE_LEVELS.does_meet_id_filters = 0 + ) + ) + OR ( + a_require_all_non_id_search_filters_met = 1 + AND ( + t_OBEDIENCE_LEVELS.does_meet_non_id_filters = 0 + ) + ) + OR ( + a_require_any_id_search_filters_met = 1 + AND t_OBEDIENCE_LEVELS.does_meet_id_filters = 0 + ) + OR ( + a_require_any_non_id_search_filters_met = 1 + AND t_OBEDIENCE_LEVELS.does_meet_non_id_filters = 0 + ) + ; + END IF; + + IF a_debug = 1 THEN + SELECT 'After filter Obedience_Levels'; + SELECT * FROM tmp_Obedience_Level_Calc_Obedience_Level; + END IF; + + -- Calculated fields + + -- Permissions + IF a_debug = 1 THEN + SELECT + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = a_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error_Calc_Obedience_Level t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error_Calc_Obedience_Level ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Dogs and Obedience_Levels.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT 'Before non-permitted data deletion'; + SELECT * FROM tmp_Obedience_Level_Calc_Obedience_Level; + SELECT * FROM tmp_Msg_Error_Calc_Obedience_Level; + END IF; + + IF EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Obedience_Level t_ERROR INNER JOIN parts.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_Obedience_Level_Calc_Obedience_Level; + END IF; + + DELETE FROM tmp_Obedience_Level_Calc_Obedience_Level; + END IF; + + IF a_debug = 1 THEN + SELECT 'After non-permitted data deletion'; + END IF; + + -- Outputs + START TRANSACTION; + -- Obedience_Levels + INSERT INTO parts.DOG_Obedience_Level_Temp ( + guid + , id_obedience_level + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + a_guid + , t_OBEDIENCE_LEVELS.id_obedience_level + , OBEDIENCE_LEVELS.code + , OBEDIENCE_LEVELS.name + , OBEDIENCE_LEVELS.active + + , t_OBEDIENCE_LEVELS.does_meet_id_filters + , t_OBEDIENCE_LEVELS.does_meet_non_id_filters + FROM parts.DOG_Obedience_Level OBEDIENCE_LEVELS + INNER JOIN tmp_Obedience_Level_Calc_Obedience_Level t_OBEDIENCE_LEVELS ON OBEDIENCE_LEVELS.id_obedience_level = t_OBEDIENCE_LEVELS.id_obedience_level + ORDER BY OBEDIENCE_LEVELS.name + ; + COMMIT; + + -- Errors + IF a_show_errors = 1 THEN + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_obedience_level + , ERROR_TYPE.text_obedience_level + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_Obedience_Level t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + END IF; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Obedience_Level_Calc_Obedience_Level; + END IF; + + CALL parts.p_dog_clear_calc_dog ( a_guid, 0 ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Obedience_Level; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Obedience_Level; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Obedience_Level; + DROP TEMPORARY TABLE IF EXISTS tmp_Obedience_Level_Calc_Obedience_Level; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + + +CALL parts.p_dog_calc_obedience_level ( + 'gripe ' -- a_guid + , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_obedience_level + , 0 -- a_get_inactive_obedience_level + , '' -- a_ids_obedience_level + , '' -- a_names_obedience_level + , 0 -- a_require_all_id_search_filters_met + , 0 -- 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 + , 0 -- a_show_errors + , 0 -- a_debug +); + +SELECT * +FROM parts.DOG_Obedience_Level_Temp +; +/* +SELECT * +FROM parts.DOG_Obedience_Level_Temp C +WHERE + C.does_meet_id_filters + AND C.does_meet_non_id_filters +; +*/ +CALL parts.p_dog_clear_calc_obedience_level ( + 'gripe ' -- a_guid + , 1 -- debug +); + + +DELETE +FROM parts.DOG_Obedience_Level_Temp +; + +*/ diff --git a/static/MySQL/71336_p_dog_clear_calc_obedience_level.sql b/static/MySQL/71336_p_dog_clear_calc_obedience_level.sql new file mode 100644 index 0000000..b27b4f9 --- /dev/null +++ b/static/MySQL/71336_p_dog_clear_calc_obedience_level.sql @@ -0,0 +1,45 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_clear_calc_obedience_level; +DROP PROCEDURE IF EXISTS parts.p_obedience_level_clear_calc_obedience_level; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_clear_calc_obedience_level ( + IN a_guid BINARY(36) + , IN a_debug BIT +) +BEGIN + DECLARE v_time_start TIMESTAMP(6); + SET v_time_start := CURRENT_TIMESTAMP(6); + + CALL parts.p_core_validate_guid ( a_guid ); + + START TRANSACTION; + + DELETE OBEDIENCE_LEVELS_T + FROM parts.DOG_Obedience_Level_Temp OBEDIENCE_LEVELS_T + WHERE OBEDIENCE_LEVELS_T.GUID = a_guid + ; + + COMMIT; + + IF a_debug = 1 THEN + CALL parts.p_debug_timing_reporting( v_time_start ); + END IF; +END // +DELIMITER ; + +/* + +CALL parts.p_dog_clear_calc_obedience_level ( + 'crips ' -- a_guid + , 1 -- debug +); + +SELECT * +FROM parts.DOG_Calc_User_Temp +WHERE GUID = 'chips ' +; + +*/ diff --git a/static/MySQL/71336_p_dog_get_many_obedience_level.sql b/static/MySQL/71336_p_dog_get_many_obedience_level.sql new file mode 100644 index 0000000..1032d7b --- /dev/null +++ b/static/MySQL/71336_p_dog_get_many_obedience_level.sql @@ -0,0 +1,375 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_get_many_obedience_level; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_get_many_obedience_level ( + IN a_id_user INT + , IN a_get_all_obedience_level BIT + , IN a_get_inactive_obedience_level BIT + , IN a_ids_obedience_level TEXT + , IN a_names_obedience_level TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_guid BINARY(36); + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_obedience_level + , ERROR_TYPE.text_obedience_level + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_guid := UUID(); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + SET a_id_user := IFNULL(a_id_user, 0); + /* + SET a_get_all_obedience_level := IFNULL(a_get_all_obedience_level, 0); + SET a_get_inactive_obedience_level := IFNULL(a_get_inactive_obedience_level, 0); + SET a_ids_obedience_level := TRIM(IFNULL(a_ids_obedience_level, '')); + SET a_names_obedience_level := TRIM(IFNULL(a_names_obedience_level, '')); + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + */ + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_id_user + , a_get_all_obedience_level + , a_get_inactive_obedience_level + , a_ids_obedience_level + , a_names_obedience_level + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_guid + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Obedience_Level; + + CREATE TEMPORARY TABLE tmp_Obedience_Level ( + id_obedience_level INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + -- Permissions + IF a_debug = 1 THEN + SELECT + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = v_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR; + SELECT * FROM tmp_Msg_Error t_ERROR; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Obedience_Levels.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + v_guid + , 0 -- a_debug + ); + + + -- Call Obedience_Level Calc + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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 + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_obedience_level -- a_get_all_obedience_level + , a_get_inactive_obedience_level -- a_get_inactive_obedience_level + , a_ids_obedience_level -- a_ids_obedience_level + , a_names_obedience_level -- a_names_obedience_level + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_obedience_level ( + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_obedience_level -- a_get_all_obedience_level + , a_get_inactive_obedience_level -- a_get_inactive_obedience_level + , a_ids_obedience_level -- a_ids_obedience_level + , a_names_obedience_level -- a_names_obedience_level + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM parts.DOG_Obedience_Level_Temp; + SELECT * FROM parts.DOG_Obedience_Level_Temp; + END IF; + + INSERT INTO tmp_Obedience_Level ( + id_obedience_level + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + OBEDIENCE_LEVEL_T.id_obedience_level + , OBEDIENCE_LEVEL_T.code + , OBEDIENCE_LEVEL_T.name + , OBEDIENCE_LEVEL_T.active + + , OBEDIENCE_LEVEL_T.does_meet_id_filters + , OBEDIENCE_LEVEL_T.does_meet_non_id_filters + FROM parts.DOG_Obedience_Level_Temp OBEDIENCE_LEVEL_T + WHERE OBEDIENCE_LEVEL_T.GUID = v_guid + ; + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM tmp_Obedience_Level; + SELECT * FROM tmp_Obedience_Level; + END IF; + END IF; + + -- Filter outputs + IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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_Obedience_Level; + END IF; + + DELETE FROM tmp_Obedience_Level; + END IF; + + + -- Outputs + -- Obedience_Levels + SELECT + t_OBEDIENCE_LEVELS.id_obedience_level + , t_OBEDIENCE_LEVELS.code + , t_OBEDIENCE_LEVELS.name + , t_OBEDIENCE_LEVELS.active + + , t_OBEDIENCE_LEVELS.does_meet_id_filters + , t_OBEDIENCE_LEVELS.does_meet_non_id_filters + FROM tmp_Obedience_Level t_OBEDIENCE_LEVELS + LEFT JOIN parts.DOG_Obedience_Level OBEDIENCE_LEVELS ON t_OBEDIENCE_LEVELS.id_obedience_level = OBEDIENCE_LEVELS.id_obedience_level + ORDER BY t_OBEDIENCE_LEVELS.name + ; + + -- Errors + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_obedience_level + , ERROR_TYPE.text_obedience_level + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Obedience_Level; + END IF; + + CALL parts.p_dog_clear_calc_obedience_level( + v_guid -- a_guid + , 0 -- a_debug + ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Obedience_Level; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_get_many_obedience_level ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_obedience_level + , 0 -- a_get_inactive_obedience_level + , '' -- a_ids_obedience_level + , '' -- a_names_obedience_level + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + + +CALL demo.p_dog_get_many_obedience_level ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_obedience_level + , 0 -- a_get_inactive_obedience_level + , '' -- a_ids_obedience_level + , 'pat,point' -- a_names_obedience_level + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + +*/ \ No newline at end of file diff --git a/static/MySQL/71340_p_dog_calc_assessment_response.sql b/static/MySQL/71340_p_dog_calc_assessment_response.sql new file mode 100644 index 0000000..b6db4b5 --- /dev/null +++ b/static/MySQL/71340_p_dog_calc_assessment_response.sql @@ -0,0 +1,549 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_calc_colour; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_calc_colour ( + IN a_guid BINARY(36) + , IN a_id_user INT + , IN a_get_all_colour BIT + , IN a_get_inactive_colour BIT + , IN a_ids_colour TEXT + , IN a_names_colour TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_show_errors BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_has_filter_colour_id BIT; + DECLARE v_has_filter_colour_name BIT; + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Colour ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error_Calc_Colour ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_Colour t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error_Calc_Colour; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + + CALL parts.p_core_validate_guid ( a_guid ); + + SET a_id_user := IFNULL(a_id_user, 0); + SET a_get_all_colour := IFNULL(a_get_all_colour, 0); + SET a_get_inactive_colour := IFNULL(a_get_inactive_colour, 0); + SET a_ids_colour := TRIM(IFNULL(a_ids_colour, '')); + SET a_names_colour := TRIM(IFNULL(a_names_colour, '')); + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + SET a_show_errors := IFNULL(a_show_errors, 0); + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_guid + , a_id_user + , a_get_all_colour + , a_get_inactive_colour + , a_ids_colour + , a_names_colour + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_show_errors + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Colour; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Colour; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Colour; + DROP TEMPORARY TABLE IF EXISTS tmp_Colour_Calc_Colour; + + CREATE TEMPORARY TABLE tmp_Colour_Calc_Colour ( + id_colour INT NOT NULL + , does_meet_id_filters BIT NOT NULL + , does_meet_non_id_filters BIT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Colour ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_Colour ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Id_Calc_Colour; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name_Calc_Colour ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split_Name_Calc_Colour; + + SET v_has_filter_colour_id = CASE WHEN a_ids_colour <> '' THEN 1 ELSE 0 END; + SET v_has_filter_colour_name = CASE WHEN a_names_colour <> '' THEN 1 ELSE 0 END; + + -- Colours + IF v_has_filter_colour_id = 1 THEN + CALL parts.p_core_split(a_guid, a_ids_colour, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Id_Calc_Colour ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF v_has_filter_colour_name = 1 THEN + CALL parts.p_core_split(a_guid, a_names_colour, ',', a_debug); + + SET sql_mode = ''; + + INSERT INTO tmp_Split_Name_Calc_Colour ( + substring + , as_int + ) + SELECT + SPLIT_T.substring + , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int + FROM parts.CORE_Split_Temp SPLIT_T + WHERE + SPLIT_T.GUID = a_guid + AND IFNULL(SPLIT_T.substring, '') <> '' + ; + + CALL parts.p_core_clear_split( a_guid ); + END IF; + + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Colour t_ERROR INNER JOIN parts.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 EXISTS ( + SELECT * + FROM tmp_Split_Id_Calc_Colour t_SPLIT_ID + LEFT JOIN parts.DOG_Colour COLOURS ON t_SPLIT_ID.as_int = COLOURS.id_colour + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(COLOURS.id_colour) + OR ( + COLOURS.active = 0 + AND a_get_inactive_colour = 0 + ) + ) THEN + INSERT INTO tmp_Msg_Error_Calc_Colour ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('Invalid or inactive Colour IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split_Id_Calc_Colour t_SPLIT_ID + LEFT JOIN parts.DOG_Colour COLOURS ON t_SPLIT_ID.as_int = COLOURS.id_colour + WHERE + ISNULL(t_SPLIT_ID.as_int) + OR ISNULL(COLOURS.id_colour) + OR ( + COLOURS.active = 0 + AND a_get_inactive_colour = 0 + ) + ; + /* Don't error on names, hand signals, or notes not found + ELSEIF EXISTS () + */ + ELSE + INSERT INTO tmp_Colour_Calc_Colour ( + id_colour + , does_meet_id_filters + , does_meet_non_id_filters + ) + WITH + Colour_Id_Filter AS ( + SELECT COLOURS.id_colour + FROM tmp_Split_Id_Calc_Colour t_SPLIT_ID + INNER JOIN parts.DOG_Colour COLOURS ON t_SPLIT_ID.as_int = COLOURS.id_colour + ) + , Colour_Name_Filter AS ( + SELECT COLOURS.id_colour + FROM tmp_Split_Name_Calc_Colour t_SPLIT_NAME + INNER JOIN parts.DOG_Colour COLOURS ON COLOURS.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%') + WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL + ) + , Colour_Filters AS ( + SELECT + COLOURS_COMBINED.id_colour + , MAX(COLOURS_COMBINED.does_meet_id_filter) AS does_meet_id_filter + , MAX(COLOURS_COMBINED.does_meet_name_filter) AS does_meet_name_filter + FROM ( + SELECT + COLOURS_ID_FILTER.id_colour + , 1 AS does_meet_id_filter + , 0 AS does_meet_name_filter + FROM Colour_Id_Filter COLOURS_ID_FILTER + UNION + SELECT + COLOURS_NAME_FILTER.id_colour + , 0 AS does_meet_id_filter + , 1 AS does_meet_name_filter + FROM Colour_Name_Filter COLOURS_NAME_FILTER + ) COLOURS_COMBINED + GROUP BY COLOURS_COMBINED.id_colour + ) + SELECT + COLOURS.id_colour + , CASE WHEN + v_has_filter_colour_id = 0 + OR IFNULL(COLOURS_FILTERS.does_meet_id_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_id_filters + , CASE WHEN + ( + v_has_filter_colour_name = 0 + ) + OR IFNULL(COLOURS_FILTERS.does_meet_name_filter, 0) = 1 + THEN 1 ELSE 0 END AS does_meet_non_id_filters + FROM parts.DOG_Colour COLOURS + LEFT JOIN Colour_Filters COLOURS_FILTERS ON COLOURS.id_colour = COLOURS_FILTERS.id_colour + WHERE + ( + a_get_all_colour = 1 + OR ( + v_has_filter_colour_id = 1 + AND COLOURS_FILTERS.does_meet_id_filter = 1 + ) + OR ( + v_has_filter_colour_name = 1 + AND COLOURS_FILTERS.does_meet_name_filter = 1 + ) + ) + AND ( + a_get_inactive_colour = 1 + OR COLOURS.active = 1 + ) + ; + END IF; + END IF; + + DELETE FROM tmp_Split_Id_Calc_Colour; + DELETE FROM tmp_Split_Name_Calc_Colour; + + IF a_debug = 1 THEN + SELECT 'After get Colours '; + SELECT * FROM tmp_Colour_Calc_Colour; + END IF; + + -- Filter records + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Colour t_ERROR INNER JOIN parts.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 + DELETE t_COLOURS + FROM tmp_Colour_Calc_Colour t_COLOURS + WHERE + ( + a_require_all_id_search_filters_met = 1 + AND ( + t_COLOURS.does_meet_id_filters = 0 + ) + ) + OR ( + a_require_all_non_id_search_filters_met = 1 + AND ( + t_COLOURS.does_meet_non_id_filters = 0 + ) + ) + OR ( + a_require_any_id_search_filters_met = 1 + AND t_COLOURS.does_meet_id_filters = 0 + ) + OR ( + a_require_any_non_id_search_filters_met = 1 + AND t_COLOURS.does_meet_non_id_filters = 0 + ) + ; + END IF; + + IF a_debug = 1 THEN + SELECT 'After filter Colours'; + SELECT * FROM tmp_Colour_Calc_Colour; + END IF; + + -- Calculated fields + + -- Permissions + IF a_debug = 1 THEN + SELECT + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + a_guid -- 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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = a_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error_Calc_Colour t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error_Calc_Colour ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Dogs and Colours.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT 'Before non-permitted data deletion'; + SELECT * FROM tmp_Colour_Calc_Colour; + SELECT * FROM tmp_Msg_Error_Calc_Colour; + END IF; + + IF EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Colour t_ERROR INNER JOIN parts.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_Colour_Calc_Colour; + END IF; + + DELETE FROM tmp_Colour_Calc_Colour; + END IF; + + IF a_debug = 1 THEN + SELECT 'After non-permitted data deletion'; + END IF; + + -- Outputs + START TRANSACTION; + -- Colours + INSERT INTO parts.DOG_Colour_Temp ( + guid + , id_colour + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + a_guid + , t_COLOURS.id_colour + , COLOURS.code + , COLOURS.name + , COLOURS.active + + , t_COLOURS.does_meet_id_filters + , t_COLOURS.does_meet_non_id_filters + FROM parts.DOG_Colour COLOURS + INNER JOIN tmp_Colour_Calc_Colour t_COLOURS ON COLOURS.id_colour = t_COLOURS.id_colour + ORDER BY COLOURS.name + ; + COMMIT; + + -- Errors + IF a_show_errors = 1 THEN + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error_Calc_Colour t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + END IF; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Colour_Calc_Colour; + END IF; + + CALL parts.p_dog_clear_calc_dog ( a_guid, 0 ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Colour; + DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Colour; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Colour; + DROP TEMPORARY TABLE IF EXISTS tmp_Colour_Calc_Colour; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + + +CALL parts.p_dog_calc_colour ( + 'gripe ' -- a_guid + , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_colour + , 0 -- a_get_inactive_colour + , '' -- a_ids_colour + , '' -- a_names_colour + , 0 -- a_require_all_id_search_filters_met + , 0 -- 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 + , 0 -- a_show_errors + , 0 -- a_debug +); + +SELECT * +FROM parts.DOG_Colour_Temp +; +/* +SELECT * +FROM parts.DOG_Colour_Temp C +WHERE + C.does_meet_id_filters + AND C.does_meet_non_id_filters +; +*/ +CALL parts.p_dog_clear_calc_colour ( + 'gripe ' -- a_guid + , 1 -- debug +); + + +DELETE +FROM parts.DOG_Colour_Temp +; + +*/ diff --git a/static/MySQL/71340_p_dog_clear_calc_assessment_response.sql b/static/MySQL/71340_p_dog_clear_calc_assessment_response.sql new file mode 100644 index 0000000..1306eda --- /dev/null +++ b/static/MySQL/71340_p_dog_clear_calc_assessment_response.sql @@ -0,0 +1,45 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_clear_calc_colour; +DROP PROCEDURE IF EXISTS parts.p_colour_clear_calc_colour; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_clear_calc_colour ( + IN a_guid BINARY(36) + , IN a_debug BIT +) +BEGIN + DECLARE v_time_start TIMESTAMP(6); + SET v_time_start := CURRENT_TIMESTAMP(6); + + CALL parts.p_core_validate_guid ( a_guid ); + + START TRANSACTION; + + DELETE COLOURS_T + FROM parts.DOG_Colour_Temp COLOURS_T + WHERE COLOURS_T.GUID = a_guid + ; + + COMMIT; + + IF a_debug = 1 THEN + CALL parts.p_debug_timing_reporting( v_time_start ); + END IF; +END // +DELIMITER ; + +/* + +CALL parts.p_dog_clear_calc_colour ( + 'crips ' -- a_guid + , 1 -- debug +); + +SELECT * +FROM parts.DOG_Calc_User_Temp +WHERE GUID = 'chips ' +; + +*/ diff --git a/static/MySQL/71340_p_dog_get_many_assessment_response.sql b/static/MySQL/71340_p_dog_get_many_assessment_response.sql new file mode 100644 index 0000000..bca9209 --- /dev/null +++ b/static/MySQL/71340_p_dog_get_many_assessment_response.sql @@ -0,0 +1,375 @@ + +USE parts; + +DROP PROCEDURE IF EXISTS parts.p_dog_get_many_colour; + +DELIMITER // +CREATE PROCEDURE parts.p_dog_get_many_colour ( + IN a_id_user INT + , IN a_get_all_colour BIT + , IN a_get_inactive_colour BIT + , IN a_ids_colour TEXT + , IN a_names_colour TEXT + , IN a_require_all_id_search_filters_met BIT + , IN a_require_any_id_search_filters_met BIT + , IN a_require_all_non_id_search_filters_met BIT + , IN a_require_any_non_id_search_filters_met BIT + , IN a_debug BIT +) +BEGIN + DECLARE v_can_view BIT; + DECLARE v_code_type_error_bad_data VARCHAR(100); + DECLARE v_code_type_error_no_permission VARCHAR(100); + DECLARE v_guid BINARY(36); + DECLARE v_id_access_level_view INT; + DECLARE v_id_minimum INT; + DECLARE v_id_permission_dog_view INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + MET.id_type + , @errno + , @text + FROM parts.CORE_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' + ; + + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + DROP TABLE IF EXISTS tmp_Msg_Error; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_guid := UUID(); + SET v_code_type_error_bad_data := 'BAD_DATA'; + SET v_code_type_error_no_permission := 'NO_PERMISSION'; + SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1); + SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1); + SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1); + SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1); + + SET a_id_user := IFNULL(a_id_user, 0); + /* + SET a_get_all_colour := IFNULL(a_get_all_colour, 0); + SET a_get_inactive_colour := IFNULL(a_get_inactive_colour, 0); + SET a_ids_colour := TRIM(IFNULL(a_ids_colour, '')); + SET a_names_colour := TRIM(IFNULL(a_names_colour, '')); + SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1); + SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1); + SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0); + SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1); + */ + SET a_debug := IFNULL(a_debug, 0); + + IF a_debug = 1 THEN + SELECT + a_id_user + , a_get_all_colour + , a_get_inactive_colour + , a_ids_colour + , a_names_colour + , a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met + , a_debug + ; + + SELECT + v_id_type_error_bad_data + , v_id_type_error_no_permission + , v_guid + , v_id_permission_dog_view + , v_time_start + ; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Colour; + + CREATE TEMPORARY TABLE tmp_Colour ( + id_colour INT NOT NULL + , code VARCHAR(250) + , name VARCHAR(250) + , active BIT + + , does_meet_id_filters BIT + , does_meet_non_id_filters BIT + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(250) NOT NULL + , msg TEXT NOT NULL + ); + + -- Permissions + IF a_debug = 1 THEN + SELECT + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_user( + v_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_view -- ids_permission + , v_id_access_level_view -- ids_access_level + , 0 -- a_show_errors + , 0 -- a_debug + ); + + SELECT + IFNULL(CALC_USER_T.has_access, 0) + INTO + v_can_view + FROM parts.DOG_Calc_User_Temp CALC_USER_T + WHERE CALC_USER_T.GUID = v_guid + LIMIT 1 + ; + + IF a_debug = 1 THEN + SELECT v_can_view; + SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR; + SELECT * FROM tmp_Msg_Error t_ERROR; + END IF; + + IF (v_can_view = 0) THEN + DELETE t_ME + FROM tmp_Msg_Error t_ME + WHERE t_ME.id_type <> v_id_type_error_no_permission + ; + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + , 'You do not have permission to view Colours.' + ) + ; + END IF; + + CALL parts.p_dog_clear_calc_user( + v_guid + , 0 -- a_debug + ); + + + -- Call Colour Calc + IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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 + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_colour -- a_get_all_colour + , a_get_inactive_colour -- a_get_inactive_colour + , a_ids_colour -- a_ids_colour + , a_names_colour -- a_names_colour + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ; + END IF; + + CALL parts.p_dog_calc_colour ( + v_guid -- a_guid + , a_id_user -- a_id_user + , a_get_all_colour -- a_get_all_colour + , a_get_inactive_colour -- a_get_inactive_colour + , a_ids_colour -- a_ids_colour + , a_names_colour -- a_names_colour + , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met + , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met + , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met + , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met + , 0 -- a_show_errors + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM parts.DOG_Colour_Temp; + SELECT * FROM parts.DOG_Colour_Temp; + END IF; + + INSERT INTO tmp_Colour ( + id_colour + , code + , name + , active + + , does_meet_id_filters + , does_meet_non_id_filters + ) + SELECT + COLOUR_T.id_colour + , COLOUR_T.code + , COLOUR_T.name + , COLOUR_T.active + + , COLOUR_T.does_meet_id_filters + , COLOUR_T.does_meet_non_id_filters + FROM parts.DOG_Colour_Temp COLOUR_T + WHERE COLOUR_T.GUID = v_guid + ; + + IF a_debug = 1 THEN + SELECT COUNT(*) FROM tmp_Colour; + SELECT * FROM tmp_Colour; + END IF; + END IF; + + -- Filter outputs + IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.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_Colour; + END IF; + + DELETE FROM tmp_Colour; + END IF; + + + -- Outputs + -- Colours + SELECT + t_COLOURS.id_colour + , t_COLOURS.code + , t_COLOURS.name + , t_COLOURS.active + + , t_COLOURS.does_meet_id_filters + , t_COLOURS.does_meet_non_id_filters + FROM tmp_Colour t_COLOURS + LEFT JOIN parts.DOG_Colour COLOURS ON t_COLOURS.id_colour = COLOURS.id_colour + ORDER BY t_COLOURS.name + ; + + -- Errors + SELECT + t_ERROR.id_error + , t_ERROR.id_type + , t_ERROR.code + , ERROR_TYPE.name + , ERROR_TYPE.description + , ERROR_TYPE.is_breaking_error + , ERROR_TYPE.background_colour + , ERROR_TYPE.text_colour + , t_ERROR.msg + FROM tmp_Msg_Error t_ERROR + INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type + ; + + IF a_debug = 1 AND v_can_view = 1 THEN + SELECT * FROM tmp_Colour; + END IF; + + CALL parts.p_dog_clear_calc_colour( + v_guid -- a_guid + , 0 -- a_debug + ); + + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + DROP TEMPORARY TABLE IF EXISTS tmp_Colour; + + IF a_debug = 1 THEN + CALL parts.p_core_debug_timing_reporting ( v_time_start ); + END IF; +END // +DELIMITER ; + + +/* + +CALL parts.p_dog_get_many_colour ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_colour + , 0 -- a_get_inactive_colour + , '' -- a_ids_colour + , '' -- a_names_colour + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + + +CALL demo.p_dog_get_many_colour ( + 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user + , 1 -- a_get_all_colour + , 0 -- a_get_inactive_colour + , '' -- a_ids_colour + , 'pat,point' -- a_names_colour + , 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 + , 1 -- a_require_any_non_id_search_filters_met + , 1 -- a_debug +); + +*/ \ No newline at end of file diff --git a/templates/layouts/layout.html b/templates/layouts/layout.html index aac85b7..1caf86c 100644 --- a/templates/layouts/layout.html +++ b/templates/layouts/layout.html @@ -4,8 +4,8 @@ {{ model.title }} - DOG - - + + - + + +