From 665561e29ec6d973bbe11d2cc1ceae8d33d51fbd Mon Sep 17 00:00:00 2001 From: Jacob Schmidt Date: Sat, 5 Apr 2025 09:06:46 -0500 Subject: [PATCH] feat(db): Implement hash deletion functions This commit introduces functionality to delete hash values from the Dragonfly database. It includes two new functions: `hashDelete` for deleting a hash value by key, and `hashDeleteId` for deleting a hash value by both key and ID. Key changes: * **`fnc_processQueue.sqf`:** Added cases for "hdel" and "hdelid" task types to process hash deletion requests, calling the corresponding `FUNC(hashDelete)` and `FUNC(hashDeleteId)` functions. * **`XEH_PREP.hpp`:** Added `PREP` definitions for `hashDelete` and `hashDeleteId` to enable event handlers for these functions. --- addons/db/XEH_PREP.hpp | 2 ++ addons/db/functions/fnc_hashDelete.sqf | 41 +++++++++++++++++++++++ addons/db/functions/fnc_hashDeleteId.sqf | 42 ++++++++++++++++++++++++ addons/db/functions/fnc_processQueue.sqf | 14 ++++++++ 4 files changed, 99 insertions(+) create mode 100644 addons/db/functions/fnc_hashDelete.sqf create mode 100644 addons/db/functions/fnc_hashDeleteId.sqf diff --git a/addons/db/XEH_PREP.hpp b/addons/db/XEH_PREP.hpp index afe3877..d7c5390 100644 --- a/addons/db/XEH_PREP.hpp +++ b/addons/db/XEH_PREP.hpp @@ -3,6 +3,8 @@ PREP(delete); PREP(fetch); PREP(get); PREP(handler); +PREP(hashDelete); +PREP(hashDeleteId); PREP(hashGet); PREP(hashGetAll); PREP(hashGetAllId); diff --git a/addons/db/functions/fnc_hashDelete.sqf b/addons/db/functions/fnc_hashDelete.sqf new file mode 100644 index 0000000..59ff9c0 --- /dev/null +++ b/addons/db/functions/fnc_hashDelete.sqf @@ -0,0 +1,41 @@ +#include "..\script_component.hpp" + +/* + * Function: dragonfly_db_fnc_hashDelete + * Author: Creedcoder, J.Schmidt + * Edit: 07.15.2024 + * Copyright © 2024 Creedcoder, J.Schmidt, All rights reserved + * + * Do not edit without permission! + * + * This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. + * To view a copy of this license, vist https://creativecommons.org/licenses/by-nc-sa/4.0/ or send a letter to Creative Commons, + * PO Box 1866, Mountain View, CA 94042 + * + * [Description] + * Delete field in hash stored at key from DB. + * + * Arguments: + * 0: Name of stored field in hash (default: "") + * + * Return Value: + * N/A + * + * Examples: + * ["loadout"] call dragonfly_db_fnc_hashDelete (Server or Singleplayer Only) + * ["loadout"] remoteExecCall ["dragonfly_db_fnc_hashDelete", 2, false] (Multiplayer Only) + * + * Public: Yes + */ + +params [["_keyField", "", [""]]]; + +#ifdef __A3__DEBUG__ + diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_hashDelete' KeyField: '%1'", _keyField]; +#endif + +if (_keyField == "") exitWith { + diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_hashDelete' Invalid Input for KeyField '%1'", _keyField]; +}; + +"ArmaDragonflyClient" callExtension ["hdel", [_keyField]]; \ No newline at end of file diff --git a/addons/db/functions/fnc_hashDeleteId.sqf b/addons/db/functions/fnc_hashDeleteId.sqf new file mode 100644 index 0000000..4cc98d5 --- /dev/null +++ b/addons/db/functions/fnc_hashDeleteId.sqf @@ -0,0 +1,42 @@ +#include "..\script_component.hpp" + +/* + * Function: dragonfly_db_fnc_hashDeleteId + * Author: Creedcoder, J.Schmidt + * Edit: 07.15.2024 + * Copyright © 2024 Creedcoder, J.Schmidt, All rights reserved + * + * Do not edit without permission! + * + * This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. + * To view a copy of this license, vist https://creativecommons.org/licenses/by-nc-sa/4.0/ or send a letter to Creative Commons, + * PO Box 1866, Mountain View, CA 94042 + * + * [Description] + * Delete field in hash stored at key from DB. + * + * Arguments: + * 0: Key (default: "") + * 1: Key Field (default: "") + * + * Return Value: + * N/A + * + * Examples: + * [getPlayerUID player, "loadout"] call dragonfly_db_fnc_hashDeleteId (Server or Singleplayer Only) + * [getPlayerUID player, "loadout"] remoteExecCall ["dragonfly_db_fnc_hashDeleteId", 2, false] (Multiplayer Only) + * + * Public: Yes + */ + +params [["_key", "", [""]], ["_keyField", "", [""]]]; + +#ifdef __A3__DEBUG__ + diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_hashDeleteId' Key: '%1', KeyField: '%2'", _key, _keyField]; +#endif + +if (_key == "" || _keyField == "") exitWith { + diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_hashDeleteId' Invalid Input for Key '%1' or KeyField '%2'", _key, _keyField]; +}; + +"ArmaDragonflyClient" callExtension ["hdelid", [_key, _keyField]]; \ No newline at end of file diff --git a/addons/db/functions/fnc_processQueue.sqf b/addons/db/functions/fnc_processQueue.sqf index 7b442b9..da8d319 100644 --- a/addons/db/functions/fnc_processQueue.sqf +++ b/addons/db/functions/fnc_processQueue.sqf @@ -123,6 +123,20 @@ while { count GVAR(taskQueue) > 0} do { [_value] call FUNC(hashSetIdBulk); }; + case "hdel": { + #ifdef __ARMA_DEBUG__ + diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_processQueue' Processing Task '%1'", _taskType]; + #endif + + [_keyField] call FUNC(hashDelete); + }; + case "hdelid": { + #ifdef __ARMA_DEBUG__ + diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_processQueue' Processing Task '%1'", _taskType]; + #endif + + [_key, _keyField] call FUNC(hashDeleteId); + }; case "listadd": { #ifdef __ARMA_DEBUG__ diag_log text format ["ArmaDragonflyClient: 'dragonfly_db_fnc_processQueue' Processing Task '%1'", _taskType];