Feat(SQL, UI): Redesign database with much more detailed command response quality analysis and created successfully loading Dog Command Links page

This commit is contained in:
2025-06-28 20:48:37 +01:00
parent ab50a81a0e
commit caeb13429a
245 changed files with 7244 additions and 2035 deletions

View File

@@ -0,0 +1,28 @@
# Unit of Measurement Audits
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'DOG_Unit_Measurement_Audit'
;
CREATE TABLE IF NOT EXISTS DOG_Unit_Measurement_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id_unit_measurement INT NOT NULL,
CONSTRAINT FK_DOG_Unit_Measurement_Audit_id_unit_measurement
FOREIGN KEY (id_unit_measurement)
REFERENCES DOG_Unit_Measurement(id_unit_measurement)
ON UPDATE RESTRICT,
name_field VARCHAR(50),
value_prev VARCHAR(500),
value_new VARCHAR(500),
id_change_set INT NOT NULL,
CONSTRAINT FK_DOG_Unit_Measurement_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES DOG_Dog_Change_Set(id_change_set)
);

View File

@@ -0,0 +1,27 @@
# Unit of Measurement Conversion Audits
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'DOG_Unit_Measurement_Conversion_Audit'
;
CREATE TABLE IF NOT EXISTS DOG_Unit_Measurement_Conversion_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id_conversion INT NOT NULL,
CONSTRAINT FK_DOG_Unit_Measurement_Conversion_Audit_id_conversion
FOREIGN KEY (id_conversion)
REFERENCES DOG_Unit_Measurement_Conversion(id_conversion)
ON UPDATE RESTRICT,
name_field VARCHAR(50),
value_prev VARCHAR(500),
value_new VARCHAR(500),
id_change_set INT NOT NULL,
CONSTRAINT FK_DOG_Unit_Measurement_Conversion_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES DOG_Dog_Change_Set(id_change_set)
);

View File

@@ -0,0 +1,25 @@
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'DOG_Understanding_Level'
;
CREATE TABLE IF NOT EXISTS parts.DOG_Understanding_Level (
id_understanding_level INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, code VARCHAR(100) NOT NULL
, name VARCHAR(250) NOT NULL
, active BIT NOT NULL DEFAULT 1
, created_on DATETIME
, id_user_created_by INT
, CONSTRAINT FK_DOG_Understanding_Level_id_user_created_by
FOREIGN KEY (id_user_created_by)
REFERENCES parts.DOG_User(id_user)
, id_change_set INT
, CONSTRAINT FK_DOG_Understanding_Level_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES parts.DOG_Dog_Change_Set(id_change_set)
);

View File

@@ -0,0 +1,24 @@
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'DOG_Understanding_Level_Audit'
;
CREATE TABLE IF NOT EXISTS parts.DOG_Understanding_Level_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, id_understanding_level INT NOT NULL
, CONSTRAINT FK_DOG_Understanding_Level_Audit_id_understanding_level
FOREIGN KEY (id_understanding_level)
REFERENCES parts.DOG_Understanding_Level(id_understanding_level)
, name_field VARCHAR(100) NOT NULL
, value_prev TEXT
, value_new TEXT
, id_change_set INT NOT NULL
, CONSTRAINT FK_DOG_Understanding_Level_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES parts.DOG_Dog_Change_Set(id_change_set)
);

View File

@@ -0,0 +1,18 @@
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'DOG_Understanding_Level_Temp'
;
CREATE TABLE IF NOT EXISTS parts.DOG_Understanding_Level_Temp (
id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_understanding_level INT
, code VARCHAR(100)
, name VARCHAR(250)
, active BIT
, guid BINARY(36)
);

View File

@@ -0,0 +1,25 @@
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'DOG_Understanding_Level'
;
CREATE TABLE IF NOT EXISTS parts.DOG_Understanding_Level (
id_understanding_level INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, code VARCHAR(100) NOT NULL
, name VARCHAR(250) NOT NULL
, active BIT NOT NULL DEFAULT 1
, created_on DATETIME
, id_user_created_by INT
, CONSTRAINT FK_DOG_Understanding_Level_id_user_created_by
FOREIGN KEY (id_user_created_by)
REFERENCES parts.DOG_User(id_user)
, id_change_set INT
, CONSTRAINT FK_DOG_Understanding_Level_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES parts.DOG_Dog_Change_Set(id_change_set)
);

View File

@@ -0,0 +1,24 @@
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'DOG_Understanding_Level_Audit'
;
CREATE TABLE IF NOT EXISTS parts.DOG_Understanding_Level_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, id_understanding_level INT NOT NULL
, CONSTRAINT FK_DOG_Understanding_Level_Audit_id_understanding_level
FOREIGN KEY (id_understanding_level)
REFERENCES parts.DOG_Understanding_Level(id_understanding_level)
, name_field VARCHAR(100) NOT NULL
, value_prev TEXT
, value_new TEXT
, id_change_set INT NOT NULL
, CONSTRAINT FK_DOG_Understanding_Level_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES parts.DOG_Dog_Change_Set(id_change_set)
);

View File

@@ -0,0 +1,18 @@
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'DOG_Understanding_Level_Temp'
;
CREATE TABLE IF NOT EXISTS parts.DOG_Understanding_Level_Temp (
id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_understanding_level INT
, code VARCHAR(100)
, name VARCHAR(250)
, active BIT
, guid BINARY(36)
);

View File

@@ -0,0 +1,25 @@
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'DOG_Understanding_Level'
;
CREATE TABLE IF NOT EXISTS parts.DOG_Understanding_Level (
id_understanding_level INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, code VARCHAR(100) NOT NULL
, name VARCHAR(250) NOT NULL
, active BIT NOT NULL DEFAULT 1
, created_on DATETIME
, id_user_created_by INT
, CONSTRAINT FK_DOG_Understanding_Level_id_user_created_by
FOREIGN KEY (id_user_created_by)
REFERENCES parts.DOG_User(id_user)
, id_change_set INT
, CONSTRAINT FK_DOG_Understanding_Level_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES parts.DOG_Dog_Change_Set(id_change_set)
);

View File

@@ -0,0 +1,24 @@
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'DOG_Understanding_Level_Audit'
;
CREATE TABLE IF NOT EXISTS parts.DOG_Understanding_Level_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, id_understanding_level INT NOT NULL
, CONSTRAINT FK_DOG_Understanding_Level_Audit_id_understanding_level
FOREIGN KEY (id_understanding_level)
REFERENCES parts.DOG_Understanding_Level(id_understanding_level)
, name_field VARCHAR(100) NOT NULL
, value_prev TEXT
, value_new TEXT
, id_change_set INT NOT NULL
, CONSTRAINT FK_DOG_Understanding_Level_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES parts.DOG_Dog_Change_Set(id_change_set)
);

View File

@@ -0,0 +1,18 @@
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'DOG_Understanding_Level_Temp'
;
CREATE TABLE IF NOT EXISTS parts.DOG_Understanding_Level_Temp (
id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_understanding_level INT
, code VARCHAR(100)
, name VARCHAR(250)
, active BIT
, guid BINARY(36)
);

View File

@@ -0,0 +1,31 @@
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'DOG_Personal_Best'
;
CREATE TABLE IF NOT EXISTS parts.DOG_Personal_Best (
id_personal_best INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, id_dog_command_link INT NOT NULL
, CONSTRAINT FK_DOG_Personal_Best_id_dog_command_link
FOREIGN KEY (id_dog_command_link)
REFERENCES parts.DOG_Dog_Command_Link(id_link)
, is_achieved_using_button BIT NOT NULL DEFAULT 0
, situation TEXT NOT NULL
, duration_seconds INT
, quantity INT
, active BIT NOT NULL DEFAULT 1
, created_on DATETIME
, id_user_created_by INT
, CONSTRAINT FK_DOG_Personal_Best_id_user_created_by
FOREIGN KEY (id_user_created_by)
REFERENCES parts.DOG_User(id_user)
, id_change_set INT
, CONSTRAINT FK_DOG_Personal_Best_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES parts.DOG_Dog_Change_Set(id_change_set)
);

View File

@@ -0,0 +1,24 @@
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'DOG_Personal_Best_Audit'
;
CREATE TABLE IF NOT EXISTS parts.DOG_Personal_Best_Audit (
id_audit INT NOT NULL AUTO_INCREMENT PRIMARY KEY
, id_personal_best INT NOT NULL
, CONSTRAINT FK_DOG_Personal_Best_Audit_id_personal_best
FOREIGN KEY (id_personal_best)
REFERENCES parts.DOG_Personal_Best(id_personal_best)
, name_field VARCHAR(100) NOT NULL
, value_prev TEXT
, value_new TEXT
, id_change_set INT NOT NULL
, CONSTRAINT FK_DOG_Personal_Best_Audit_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES parts.DOG_Dog_Change_Set(id_change_set)
);

View File

@@ -0,0 +1,21 @@
USE parts;
SELECT CONCAT('WARNING: Table ', TABLE_SCHEMA, '.', TABLE_NAME, ' already exists.') AS msg_warning
FROM INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'parts'
AND TABLE_NAME = 'DOG_Personal_Best_Temp'
;
CREATE TABLE IF NOT EXISTS parts.DOG_Personal_Best_Temp (
id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_personal_best INT
, id_dog_command_link INT
, is_achieved_using_button BIT
, situation TEXT
, duration_seconds INT
, quantity INT
, active BIT
, guid BINARY(36)
);

View File

@@ -0,0 +1,76 @@
# Shop Unit of Measurement
DROP TRIGGER IF EXISTS before_insert_DOG_Unit_Measurement;
DROP TRIGGER IF EXISTS before_update_DOG_Unit_Measurement;
DELIMITER //
CREATE TRIGGER before_insert_DOG_Unit_Measurement
BEFORE INSERT ON DOG_Unit_Measurement
FOR EACH ROW
BEGIN
SET NEW.created_on := IFNULL(NEW.created_on, NOW());
SET NEW.created_by := IFNULL(NEW.created_by, IFNULL((SELECT id_user FROM DOG_User WHERE firstname = CURRENT_USER()), -1));
END //
DELIMITER ;
DELIMITER //
CREATE TRIGGER before_update_DOG_Unit_Measurement
BEFORE UPDATE ON DOG_Unit_Measurement
FOR EACH ROW
BEGIN
IF OLD.id_change_set <=> NEW.id_change_set THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'New change Set ID must be provided.';
END IF;
INSERT INTO DOG_Unit_Measurement_Audit (
id_unit_measurement,
name_field,
value_prev,
value_new,
id_change_set
)
# Changed name_singular
SELECT NEW.id_unit_measurement, 'name_singular', OLD.name_singular, NEW.name_singular, NEW.id_change_set
WHERE NOT OLD.name_singular <=> NEW.name_singular
UNION
# Changed name_plural
SELECT NEW.id_unit_measurement, 'name_plural', OLD.name_plural, NEW.name_plural, NEW.id_change_set
WHERE NOT OLD.name_plural <=> NEW.name_plural
UNION
# Changed symbol
SELECT NEW.id_unit_measurement, 'symbol', OLD.symbol, NEW.symbol, NEW.id_change_set
WHERE NOT OLD.symbol <=> NEW.symbol
UNION
# Changed is_base_unit
SELECT NEW.id_unit_measurement, 'is_base_unit', OLD.is_base_unit, NEW.is_base_unit, NEW.id_change_set
WHERE NOT OLD.is_base_unit <=> NEW.is_base_unit
UNION
# Changed is_unit_of_distance
SELECT NEW.id_unit_measurement, 'is_unit_of_distance', OLD.is_unit_of_distance, NEW.is_unit_of_distance, NEW.id_change_set
WHERE NOT OLD.is_unit_of_distance <=> NEW.is_unit_of_distance
UNION
# Changed is_unit_of_mass
SELECT NEW.id_unit_measurement, 'is_unit_of_mass', OLD.is_unit_of_mass, NEW.is_unit_of_mass, NEW.id_change_set
WHERE NOT OLD.is_unit_of_mass <=> NEW.is_unit_of_mass
UNION
# Changed is_unit_of_time
SELECT NEW.id_unit_measurement, 'is_unit_of_time', OLD.is_unit_of_time, NEW.is_unit_of_time, NEW.id_change_set
WHERE NOT OLD.is_unit_of_time <=> NEW.is_unit_of_time
UNION
# Changed is_unit_of_volume
SELECT NEW.id_unit_measurement, 'is_unit_of_volume', OLD.is_unit_of_volume, NEW.is_unit_of_volume, NEW.id_change_set
WHERE NOT OLD.is_unit_of_volume <=> NEW.is_unit_of_volume
UNION
# Changed active
SELECT NEW.id_unit_measurement, 'active', OLD.active, NEW.active, NEW.id_change_set
WHERE NOT OLD.active <=> NEW.active
;
END //
DELIMITER ;

View File

@@ -0,0 +1,64 @@
# Shop Unit of Measurement Conversion
DROP TRIGGER IF EXISTS before_insert_DOG_Unit_Measurement_Conversion;
DROP TRIGGER IF EXISTS before_update_DOG_Unit_Measurement_Conversion;
DELIMITER //
CREATE TRIGGER before_insert_DOG_Unit_Measurement_Conversion
BEFORE INSERT ON DOG_Unit_Measurement_Conversion
FOR EACH ROW
BEGIN
SET NEW.created_on := IFNULL(NEW.created_on, NOW());
SET NEW.created_by := IFNULL(NEW.created_by, IFNULL((SELECT id_user FROM DOG_User WHERE firstname = CURRENT_USER()), -1));
END //
DELIMITER ;
DELIMITER //
CREATE TRIGGER before_update_DOG_Unit_Measurement_Conversion
BEFORE UPDATE ON DOG_Unit_Measurement_Conversion
FOR EACH ROW
BEGIN
IF OLD.id_change_set <=> NEW.id_change_set THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'New change Set ID must be provided.';
END IF;
INSERT INTO DOG_Unit_Measurement_Conversion_Audit (
id_conversion,
name_field,
value_prev,
value_new,
id_change_set
)
# Changed id_unit_derived
SELECT NEW.id_conversion, 'id_unit_derived', OLD.id_unit_derived, NEW.id_unit_derived, NEW.id_change_set
WHERE NOT OLD.id_unit_derived <=> NEW.id_unit_derived
UNION
# Changed id_unit_base
SELECT NEW.id_conversion, 'id_unit_base', OLD.id_unit_base, NEW.id_unit_base, NEW.id_change_set
WHERE NOT OLD.id_unit_base <=> NEW.id_unit_base
UNION
# Changed multiplier_unit_base
SELECT NEW.id_conversion, 'multiplier_unit_base', OLD.multiplier_unit_base, NEW.multiplier_unit_base, NEW.id_change_set
WHERE NOT OLD.multiplier_unit_base <=> NEW.multiplier_unit_base
UNION
# Changed increment_unit_base
SELECT NEW.id_conversion, 'active', OLD.increment_unit_base, NEW.increment_unit_base, NEW.id_change_set
WHERE NOT OLD.increment_unit_base <=> NEW.increment_unit_base
UNION
# Changed apply_multiplier_before_increment
SELECT NEW.id_conversion, 'apply_multiplier_before_increment', OLD.apply_multiplier_before_increment, NEW.apply_multiplier_before_increment, NEW.id_change_set
WHERE NOT OLD.apply_multiplier_before_increment <=> NEW.apply_multiplier_before_increment
UNION
# Changed active
SELECT NEW.id_conversion, 'active', OLD.active, NEW.active, NEW.id_change_set
WHERE NOT OLD.active <=> NEW.active
;
END //
DELIMITER ;

View File

@@ -0,0 +1,46 @@
USE parts;
DROP TRIGGER IF EXISTS parts.before_insert_DOG_Understanding_Level;
DROP TRIGGER IF EXISTS parts.before_update_DOG_Understanding_Level;
DELIMITER //
CREATE TRIGGER parts.before_insert_DOG_Understanding_Level
BEFORE INSERT ON parts.DOG_Understanding_Level
FOR EACH ROW
BEGIN
SET NEW.created_on := IFNULL(NEW.created_on, NOW());
END //
DELIMITER ;
DELIMITER //
CREATE TRIGGER parts.before_update_DOG_Understanding_Level
BEFORE UPDATE ON parts.DOG_Understanding_Level
FOR EACH ROW
BEGIN
IF OLD.id_change_set <=> NEW.id_change_set THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'New change Set ID must be provided.';
END IF;
INSERT INTO parts.DOG_Understanding_Level_Audit (
id_understanding_level
, name_field
, value_prev
, value_new
, id_change_set
)
-- Changed code
SELECT NEW.id_understanding_level, 'code', OLD.code, NEW.code, NEW.id_change_set
WHERE NOT OLD.code <=> NEW.code
UNION
-- Changed name
SELECT NEW.id_understanding_level, 'name', OLD.name, NEW.name, NEW.id_change_set
WHERE NOT OLD.name <=> NEW.name
UNION
-- Changed active
SELECT NEW.id_understanding_level, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
WHERE NOT (OLD.active <=> NEW.active)
;
END //
DELIMITER ;

View File

@@ -0,0 +1,58 @@
USE parts;
DROP TRIGGER IF EXISTS parts.before_insert_DOG_Personal_Best;
DROP TRIGGER IF EXISTS parts.before_update_DOG_Personal_Best;
DELIMITER //
CREATE TRIGGER parts.before_insert_DOG_Personal_Best
BEFORE INSERT ON parts.DOG_Personal_Best
FOR EACH ROW
BEGIN
SET NEW.created_on := IFNULL(NEW.created_on, NOW());
END //
DELIMITER ;
DELIMITER //
CREATE TRIGGER parts.before_update_DOG_Personal_Best
BEFORE UPDATE ON parts.DOG_Personal_Best
FOR EACH ROW
BEGIN
IF OLD.id_change_set <=> NEW.id_change_set THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'New change Set ID must be provided.';
END IF;
INSERT INTO parts.DOG_Personal_Best_Audit (
id_personal_best
, name_field
, value_prev
, value_new
, id_change_set
)
-- Changed id_dog_command_link
SELECT NEW.id_personal_best, 'id_dog_command_link', CONVERT(OLD.id_dog_command_link, CHAR), CONVERT(NEW.id_dog_command_link, CHAR), NEW.id_change_set
WHERE NOT (OLD.id_dog_command_link <=> NEW.id_dog_command_link)
UNION
-- Changed is_achieved_using_button
SELECT NEW.id_personal_best, 'is_achieved_using_button', CONVERT(CONVERT(OLD.is_achieved_using_button, SIGNED), CHAR), CONVERT(CONVERT(NEW.is_achieved_using_button, SIGNED), CHAR), NEW.id_change_set
WHERE NOT (OLD.is_achieved_using_button <=> NEW.is_achieved_using_button)
UNION
-- Changed situation
SELECT NEW.id_personal_best, 'situation', OLD.situation, NEW.situation, NEW.id_change_set
WHERE NOT OLD.situation <=> NEW.situation
UNION
-- Changed quantity
SELECT NEW.id_personal_best, 'quantity', CONVERT(OLD.quantity, CHAR), CONVERT(NEW.quantity, CHAR), NEW.id_change_set
WHERE NOT (OLD.quantity <=> NEW.quantity)
UNION
-- Changed duration_seconds
SELECT NEW.id_personal_best, 'duration_seconds', CONVERT(OLD.duration_seconds, CHAR), CONVERT(NEW.duration_seconds, CHAR), NEW.id_change_set
WHERE NOT (OLD.duration_seconds <=> NEW.duration_seconds)
UNION
-- Changed active
SELECT NEW.id_personal_best, 'active', CONVERT(CONVERT(OLD.active, SIGNED), CHAR), CONVERT(CONVERT(NEW.active, SIGNED), CHAR), NEW.id_change_set
WHERE NOT (OLD.active <=> NEW.active)
;
END //
DELIMITER ;

View File

@@ -0,0 +1,404 @@
USE parts;
DROP PROCEDURE IF EXISTS parts.p_DOG_get_many_understanding_level;
DELIMITER //
CREATE PROCEDURE parts.p_DOG_get_many_understanding_level (
IN a_id_user INT
, IN a_get_all_understanding_level BIT
, IN a_get_inactive_understanding_level BIT
, IN a_ids_understanding_level TEXT
, IN a_codes_understanding_level TEXT
, IN a_names_understanding_level TEXT
, IN a_debug BIT
)
BEGIN
DECLARE v_code_type_error_bad_data VARCHAR(100);
DECLARE v_code_type_error_no_permission VARCHAR(100);
DECLARE v_id_type_error_bad_data INT;
DECLARE v_id_type_error_no_permission INT;
DECLARE v_has_filter_understanding_level_id BIT;
DECLARE v_has_filter_understanding_level_code BIT;
DECLARE v_has_filter_understanding_level_name BIT;
DECLARE v_guid BINARY(36);
DECLARE v_id_permission_understanding_level_view INT;
DECLARE v_id_minimum INT;
DECLARE v_time_start TIMESTAMP(6);
DECLARE v_can_view BIT;
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(100) NOT NULL
, msg VARCHAR(4000) 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_understanding_level_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
SET a_id_user := IFNULL(a_id_user, 0);
SET a_get_all_understanding_level := IFNULL(a_get_all_understanding_level, 0);
SET a_get_inactive_understanding_level := IFNULL(a_get_inactive_understanding_level, 0);
SET a_ids_understanding_level := TRIM(IFNULL(a_ids_understanding_level, ''));
SET a_codes_understanding_level := TRIM(IFNULL(a_codes_understanding_level, ''));
SET a_names_understanding_level := TRIM(IFNULL(a_names_understanding_level, ''));
SET a_debug := IFNULL(a_debug, 0);
IF a_debug = 1 THEN
SELECT
a_id_user
, a_get_all_understanding_level
, a_get_inactive_understanding_level
, a_ids_understanding_level
, a_codes_understanding_level
, a_names_understanding_level
, a_debug
;
SELECT
v_id_type_error_bad_data
, v_id_type_error_no_permission
, v_guid
, v_id_permission_understanding_level_view
, v_time_start
;
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Code;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
DROP TEMPORARY TABLE IF EXISTS tmp_Understanding_Level;
CREATE TEMPORARY TABLE tmp_Understanding_Level (
id_understanding_level INT NOT NULL
, code VARCHAR(100)
, name VARCHAR(250)
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
, code VARCHAR(100) NOT NULL
, msg VARCHAR(4000) NOT NULL
);
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id (
substring VARCHAR(4000) NOT NULL
, as_int INT NULL
);
DELETE FROM tmp_Split_Id;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Code (
substring VARCHAR(4000) NOT NULL
, as_int INT NULL
);
DELETE FROM tmp_Split_Code;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name (
substring VARCHAR(4000) NOT NULL
, as_int INT NULL
);
DELETE FROM tmp_Split_Name;
CALL parts.p_core_validate_guid ( v_guid );
SET v_has_filter_understanding_level_id = CASE WHEN a_ids_understanding_level = '' THEN 0 ELSE 1 END;
SET v_has_filter_understanding_level_code = CASE WHEN a_codes_understanding_level = '' THEN 0 ELSE 1 END;
SET v_has_filter_understanding_level_name = CASE WHEN a_names_understanding_level = '' THEN 0 ELSE 1 END;
-- Understanding_Levels
IF v_has_filter_understanding_level_id = 1 THEN
CALL parts.p_split(v_guid, a_ids_understanding_level, ',', a_debug);
INSERT INTO tmp_Split_Id (
substring
, as_int
)
SELECT
SPLIT_T.substring
, CONVERT(SPLIT_T.substring, DECIMAL(10,0)) AS as_int
FROM parts.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = v_guid
AND IFNULL(SPLIT_T.substring, '') <> ''
;
CALL parts.p_clear_split_temp( v_guid );
END IF;
IF v_has_filter_understanding_level_code = 1 THEN
CALL parts.p_split(v_guid, a_codes_understanding_level, ',', a_debug);
INSERT INTO tmp_Split_Code (
substring
, as_int
)
SELECT
SPLIT_T.substring
, CONVERT(SPLIT_T.substring, DECIMAL(10,0)) AS as_int
FROM parts.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = v_guid
AND IFNULL(SPLIT_T.substring, '') <> ''
;
CALL parts.p_clear_split_temp( v_guid );
END IF;
IF v_has_filter_understanding_level_name = 1 THEN
CALL parts.p_split(v_guid, a_names_understanding_level, ',', a_debug);
INSERT INTO tmp_Split_Name (
substring
, as_int
)
SELECT
SPLIT_T.substring
, CONVERT(SPLIT_T.substring, DECIMAL(10,0)) AS as_int
FROM parts.CORE_Split_Temp SPLIT_T
WHERE
SPLIT_T.GUID = v_guid
AND IFNULL(SPLIT_T.substring, '') <> ''
;
CALL parts.p_clear_split_temp( v_guid );
END IF;
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 EXISTS (
SELECT *
FROM tmp_Split_Id t_SPLIT_ID
LEFT JOIN parts.DOG_Understanding_Level UNDERSTANDING_LEVEL ON t_SPLIT_ID.as_int = UNDERSTANDING_LEVEL.id_understanding_level
WHERE
ISNULL(t_SPLIT_ID.as_int)
OR ISNULL(UNDERSTANDING_LEVEL.id_understanding_level)
OR (
UNDERSTANDING_LEVEL.active = 0
AND a_get_inactive_understanding_level = 0
)
) THEN
INSERT INTO tmp_Msg_Error (
id_type
, code
, msg
)
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
, CONCAT('Invalid or inactive Understanding_Level IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL'))
FROM tmp_Split_Id t_SPLIT_ID
LEFT JOIN parts.DOG_Understanding_Level UNDERSTANDING_LEVEL ON t_SPLIT_ID.as_int = UNDERSTANDING_LEVEL.id_understanding_level
WHERE
ISNULL(t_SPLIT_ID.as_int)
OR ISNULL(UNDERSTANDING_LEVEL.id_understanding_level)
OR (
UNDERSTANDING_LEVEL.active = 0
AND a_get_inactive_understanding_level = 0
)
;
/* Don't error on codes or names not found
ELSEIF EXISTS (
SELECT *
*/
ELSE
INSERT INTO tmp_Understanding_Level (
id_understanding_level
, code
, name
)
SELECT
UNDERSTANDING_LEVEL.id_understanding_level
, UNDERSTANDING_LEVEL.code
, UNDERSTANDING_LEVEL.name
FROM parts.DOG_Understanding_Level UNDERSTANDING_LEVEL
LEFT JOIN tmp_Split_Id t_SPLIT_ID ON UNDERSTANDING_LEVEL.id_understanding_level = t_SPLIT_ID.as_int
LEFT JOIN tmp_Split_Code t_SPLIT_CODE ON UNDERSTANDING_LEVEL.code = t_SPLIT_CODE.substring
LEFT JOIN tmp_Split_Name t_SPLIT_NAME ON UNDERSTANDING_LEVEL.name = t_SPLIT_NAME.substring
WHERE
(
a_get_all_understanding_level = 1
OR (
v_has_filter_understanding_level_id = 1
OR v_has_filter_understanding_level_code = 1
OR v_has_filter_understanding_level_name = 1
)
)
AND (
a_get_inactive_understanding_level = 1
OR UNDERSTANDING_LEVEL.active = 1
)
;
END IF;
END IF;
DELETE FROM tmp_Split_Id;
DELETE FROM tmp_Split_Code;
DELETE FROM tmp_Split_Name;
-- Permissions
IF a_debug = 1 THEN
SELECT
v_guid
, a_id_user
, FALSE -- a_get_inactive_user
, v_id_permission_understanding_level_view
, 0 -- a_debug
;
END IF;
CALL parts.p_DOG_calc_user(
v_guid
, a_id_user
, FALSE -- a_get_inactive_user
, v_id_permission_understanding_level_view
, 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;
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 Understanding_Levels.'
)
;
END IF;
CALL parts.p_DOG_clear_calc_user(
v_guid
, 0 -- a_debug
);
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_Understanding_Level;
END IF;
DELETE FROM tmp_Understanding_Level;
END IF;
-- Outputs
-- Understanding_Levels
SELECT
t_UNDERSTANDING_LEVEL.id_understanding_level
, t_UNDERSTANDING_LEVEL.code
, t_UNDERSTANDING_LEVEL.name
, UNDERSTANDING_LEVEL.active
FROM parts.DOG_Understanding_Level UNDERSTANDING_LEVEL
INNER JOIN tmp_Understanding_Level t_UNDERSTANDING_LEVEL ON UNDERSTANDING_LEVEL.id_understanding_level = t_UNDERSTANDING_LEVEL.id_understanding_level
;
-- 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_Understanding_Level;
END IF;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Code;
DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id;
DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
DROP TEMPORARY TABLE IF EXISTS tmp_Understanding_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_understanding_level (
1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
, 1 -- a_get_all_understanding_level
, 0 -- a_get_inactive_understanding_level
, '' -- a_ids_understanding_level
, '' -- a_codes_understanding_level
, '' -- a_names_understanding_level
, 1 -- a_debug
);
*/

View File

@@ -0,0 +1,105 @@
-- Core tables
-- Error Message type
SELECT * FROM parts.CORE_Msg_Error_Type;
-- Common project tables
-- User Change Sets
SELECT * FROM parts.DOG_User_Change_Set;
-- Access Levels
SELECT * FROM parts.DOG_Access_Level;
-- Permission Groups
SELECT * FROM parts.DOG_Permission_Group;
-- Permissions
SELECT * FROM parts.DOG_Permission;
-- Users
SELECT * FROM parts.DOG_User;
SELECT * FROM parts.DOG_User_Audit;
-- Roles
SELECT * FROM parts.DOG_Role;
SELECT * FROM parts.DOG_Role_Audit;
-- Role Permission link
SELECT * FROM parts.DOG_Role_Permission_Link;
SELECT * FROM parts.DOG_Role_Permission_Link_Audit;
-- User Role link
SELECT * FROM parts.DOG_User_Role_Link;
SELECT * FROM parts.DOG_User_Role_Link_Audit;
-- Project-specific tables
-- Command Change Sets
SELECT * FROM parts.DOG_Dog_Change_Set;
-- Commands
SELECT * FROM parts.DOG_Dog;
SELECT * FROM parts.DOG_Dog_Audit;
SELECT * FROM parts.DOG_Dog_Temp;
SELECT * FROM parts.DOG_Breed;
SELECT * FROM parts.DOG_Breed_Audit;
SELECT * FROM parts.DOG_Breed_Temp;
SELECT * FROM parts.DOG_Dog_Breed_Link;
SELECT * FROM parts.DOG_Dog_Breed_Link_Audit;
SELECT * FROM parts.DOG_Dog_Breed_Link_Temp;
SELECT * FROM parts.DOG_Obedience_Level;
SELECT * FROM parts.DOG_Obedience_Level_Audit;
SELECT * FROM parts.DOG_Obedience_Level_Temp;
SELECT * FROM parts.DOG_Command_Category;
SELECT * FROM parts.DOG_Command_Category_Audit;
SELECT * FROM parts.DOG_Command_Category_Temp;
SELECT * FROM parts.DOG_Command;
SELECT * FROM parts.DOG_Command_Audit;
SELECT * FROM parts.DOG_Command_Temp;
SELECT * FROM parts.DOG_Dog_Command_Link;
SELECT * FROM parts.DOG_Dog_Command_Link_Audit;
SELECT * FROM parts.DOG_Dog_Command_Link_Temp;
SELECT * FROM parts.DOG_Location;
SELECT * FROM parts.DOG_Location_Audit;
SELECT * FROM parts.DOG_Location_Temp;
SELECT * FROM parts.DOG_Location_Link;
SELECT * FROM parts.DOG_Location_Link_Audit;
SELECT * FROM parts.DOG_Location_Link_Temp;
SELECT * FROM parts.DOG_Colour;
SELECT * FROM parts.DOG_Colour_Audit;
SELECT * FROM parts.DOG_Colour_Temp;
SELECT * FROM parts.DOG_Button_Shape;
SELECT * FROM parts.DOG_Button_Shape_Audit;
SELECT * FROM parts.DOG_Button_Shape_Temp;
SELECT * FROM parts.DOG_Image;
SELECT * FROM parts.DOG_Image_Audit;
SELECT * FROM parts.DOG_Image_Temp;
SELECT * FROM parts.DOG_Button_Icon;
SELECT * FROM parts.DOG_Button_Icon_Audit;
SELECT * FROM parts.DOG_Button_Icon_Temp;
SELECT * FROM parts.DOG_Command_Button_Link;
SELECT * FROM parts.DOG_Command_Button_Link_Audit;
SELECT * FROM parts.DOG_Command_Button_Link_Temp;
SELECT * FROM parts.DOG_Drive;
SELECT * FROM parts.DOG_Drive_Audit;
SELECT * FROM parts.DOG_Drive_Temp;
SELECT * FROM parts.DOG_Dog_Drive_Link;
SELECT * FROM parts.DOG_Dog_Drive_Link_Audit;
SELECT * FROM parts.DOG_Dog_Drive_Link_Temp;