Feat(SEO): Rebranded for Fetch Metrics name and added SEO yandex verification meta tags to layout for fetch-metrics.co.uk, fetch-metrics.com, fetchmetrics.co.uk

This commit is contained in:
2025-07-21 12:48:00 +01:00
parent 4e214c3bde
commit 6bb3a77a34
60 changed files with 14895 additions and 472 deletions

View File

@@ -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'

View File

@@ -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
);
*/
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

View File

@@ -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
);

View File

@@ -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)
);

View File

@@ -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)
);

View File

@@ -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)
);

View File

@@ -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)
);

View File

@@ -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)
);

View File

@@ -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)
);

View File

@@ -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

View File

@@ -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)
);

View File

@@ -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)
);

View File

@@ -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)
);

View File

@@ -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)
);

View File

@@ -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)
);

View File

@@ -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)
);

View File

@@ -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)

View File

@@ -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;

View File

@@ -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

View File

@@ -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
;
*/

View File

@@ -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 '
;
*/

View File

@@ -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
);
*/

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
;
*/

View File

@@ -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 '
;
*/

View File

@@ -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
);
*/

View File

@@ -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
;
*/

View File

@@ -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 '
;
*/

View File

@@ -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
);
*/

File diff suppressed because it is too large Load Diff

View File

@@ -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 '
;
*/

View File

@@ -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
);
*/

View File

@@ -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
;
*/

View File

@@ -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 '
;
*/

View File

@@ -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
);
*/

View File

@@ -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
;
*/

View File

@@ -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 '
;
*/

View File

@@ -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
);
*/

File diff suppressed because it is too large Load Diff

View File

@@ -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 '
;
*/

View File

@@ -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
);
*/

View File

@@ -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
;
*/

View File

@@ -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 '
;
*/

View File

@@ -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
);
*/

File diff suppressed because it is too large Load Diff

View File

@@ -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 '
;
*/

View File

@@ -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
);
*/

View File

@@ -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;
*/

View File

@@ -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 '
;
*/

View File

@@ -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
);
*/

View File

@@ -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
;
*/

View File

@@ -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 '
;
*/

View File

@@ -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
);
*/

View File

@@ -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
;
*/

View File

@@ -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 '
;
*/

View File

@@ -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
);
*/

View File

@@ -4,8 +4,8 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="utf-8"/>
<title>{{ model.title }} - DOG</title>
<meta name="description" content="Explore our dog training management web app." />
<meta name="keywords" content="dog training, dog, training" />
<meta name="description" content="Professional dog training management software for UK trainers. Manage clients, track training sessions, monitor progress, and engage dog owners with our comprehensive SaaS platform. Starting from £15/month." />
<meta name="keywords" content="fetch metrics, fetchmetrics, dog training software, dog trainer management, pet training app, canine training system, dog training business software, professional dog training, UK dog trainers, training session management, dog training records, client management for dog trainers, dog training progress tracking, pet training business tools, dog training scheduling, canine behavior tracking, dog trainer CRM, training appointment booking, dog training client portal, canine training documentation, dog obedience training, puppy training programs, behavioral modification, training milestones, dog training certificates, trainer scheduling, client communication, training homework assignments, progress reports, dog training analytics, British dog training, dog training software UK, professional dog training tools" />
<link rel="canonical" href="{{ model.get_url_host() }}" />
<script type="application/ld+json">
{
@@ -14,7 +14,7 @@
"name": "Dog Training",
"url": "{{ model.get_url_host() }}",
"logo": "{{ model.get_url_host() }}{{ url_for('static', filename='images/Wisp_LQ.webp') }}",
"description": "Dog training management web app.",
"description": "Fetch Metrics - Professional dog training management software for UK trainers. Manage clients, track training sessions, monitor progress, and engage dog owners with our comprehensive SaaS platform. Starting from £15/month.",
"address": {
"@type": "PostalAddress",
"streetAddress": "53 Alfred Green Close",
@@ -29,10 +29,12 @@
"longitude": "1.16"
},
"openingHours": "Mo,Tu,We,Th,Fr 09:00-17:00",
"priceRange": "$$",
"priceRange": "$",
}
</script>
<meta name="yandex-verification" content="4693a824cfda082a" />
<meta name="yandex-verification" content="e8c84f13a578a656" /> <!-- fetch-metrics.co.uk -->
<meta name="yandex-verification" content="054b13bc60fb1625" /> <!-- fetch-metrics.com -->
<meta name="yandex-verification" content="f3c1a9bc28976419" /> <!-- fetchmetrics.co.uk -->
<meta id="{{ model.ID_CSRF_TOKEN }}" name="{{ model.FLAG_CSRF_TOKEN }}" content="{{ csrf_token() }}" />
<script>
@@ -248,10 +250,10 @@
-->
<div class="topnav">
<div class="{{ model.FLAG_CONTAINER }} header-logo"> <!-- style="width: 18vw; min-width: 18vw; max-width: 20vw;" -->
<img class="header-logo" src="{{ url_for('static', filename='images/Wisp_LQ.webp') }}" alt="Dog Training logo" aria-label="Dog Training logo" tabindex="0">
<img class="header-logo" src="{{ url_for('static', filename='images/Wisp_LQ.webp') }}" alt="Fetch Metrics logo" aria-label="Fetch Metrics logo" tabindex="0">
</div>
<div class="{{ model.FLAG_CONTAINER }} company-name"> <!-- style="width: 75vw; min-width: 65vw; max-width: 80vw;" -->
<h1 class="company-name">Dog Training - {{ model.title }}</h1>
<h1 class="company-name">{{ model.NAME_COMPANY_SHORT }} - {{ model.title }}</h1>
</div>
{#
<div class="{{ model.FLAG_CONTAINER }}"> <!-- style="width: 7vw; min-width: 7vw; max-width: 15vw; justify-content: flex-end; " padding-left: 25%; -->

View File

@@ -16,8 +16,14 @@ Features:
- Timer / stopwatch functionality
- Hamburger menu links for local website subsection
- Info icon and popup for page purpose on page and against links to page
- User active feature
- Company allow sharing of lookup tables, dogs, around employees
- Company allow admin role to move dogs around
- Get Many Stored Procedures - check they call all necessary clear_calc Stored Procedures
Fix:
- formFilters - centre columns on flex
- Location save and UI logic for tree structure
- Dogs missing from Assessments table?
- Add filter by unit measurement on Response Quality Metric