- The value in the entity table is used to display the field in the general UI
- The values in the arrray_values table are used for selections / filters
So using the arrayAdd and arrayRemove would need to be adaptated to acoomodate that.
| ID | Colors |
| 1 | NULL |
| 2 | ["yellow", "blue"] |
| 3 | ["yellow","green"] |
CREATE FUNCTION `arrayAdd`(jsonField JSON, valueToAdd VARCHAR(255)) RETURNS json DETERMINISTIC BEGIN IF jsonField IS NULL THEN RETURN JSON_ARRAY(valueToAdd); ELSEIF JSON_CONTAINS(jsonField, JSON_QUOTE(valueToAdd)) THEN RETURN jsonField; ELSE RETURN JSON_ARRAY_APPEND(jsonField, '$', valueToAdd); END IF; END;
CREATE FUNCTION `arrayCheck`(jsonField JSON, valueToCheck VARCHAR(255)) RETURNS tinyint(1) DETERMINISTIC BEGIN IF jsonField IS NULL THEN RETURN FALSE; END IF; IF JSON_CONTAINS(jsonField, JSON_QUOTE(valueToCheck)) THEN RETURN TRUE; ELSE RETURN FALSE; END IF; END
CREATE FUNCTION `arrayRemove`(jsonField JSON, valueToRemove VARCHAR(255)) RETURNS json DETERMINISTIC BEGIN DECLARE jsonPath VARCHAR(255); IF jsonField IS NULL THEN RETURN NULL; END IF; SET jsonPath = JSON_UNQUOTE(JSON_SEARCH(jsonField, 'one', valueToRemove)); IF jsonPath IS NULL THEN RETURN jsonField; END IF; RETURN JSON_REMOVE(jsonField, jsonPath); END
select id, colors, arrayRemove(colors,"yellow") as a, arrayAdd(colors,"purple") as b, arrayCheck(colors,"blue") as IsBlue from (select 22 as id , '["yellow","blue"]' as colors ) t
Leave a comment: