64 lines
1.9 KiB
Plaintext
64 lines
1.9 KiB
Plaintext
DELIMITER //
|
|
|
|
CREATE OR REPLACE FUNCTION orm_retrive_json_v2(
|
|
paras TEXT
|
|
)
|
|
RETURNS TEXT
|
|
DETERMINISTIC
|
|
/*
|
|
Function : orm_api_v2 [傳入 json 的資料預處理] 的核心程式, 被 orm_api_v2 呼叫使用
|
|
Description: 刪除 @para 多餘的內容(amis)
|
|
如果有特殊元件(如 transfer) 會多 POST 非 orm 所需的資料, 一樣要拿掉
|
|
picker 如果有設 joinValues:false, 也會多傳一些多餘的資料
|
|
Build Date : 2024-06-20
|
|
Modify History:
|
|
1 Michael 2023/12/16 原始版本
|
|
2 Michael 2024-06-20 改寫為MariaDB版本並優化
|
|
*/
|
|
BEGIN
|
|
DECLARE result TEXT;
|
|
DECLARE maxcount INT;
|
|
DECLARE currid INT;
|
|
DECLARE trans_data TEXT;
|
|
DECLARE json_valid BOOLEAN;
|
|
|
|
-- 檢查是否為有效JSON,如果是則直接處理,否則按原邏輯處理
|
|
SET json_valid = JSON_VALID(paras);
|
|
|
|
-- 進行一些操作,根據需求修改下面的程式碼
|
|
SET result = paras;
|
|
|
|
-- 處理 config 部分
|
|
SET maxcount = INSTR(result, '"config":[');
|
|
IF maxcount > 0 THEN
|
|
-- 在 config 後可能還有資料
|
|
SET trans_data = SUBSTRING(result FROM maxcount);
|
|
SET currid = INSTR(trans_data, '],');
|
|
SET trans_data = SUBSTRING(trans_data FROM currid + 2);
|
|
|
|
SET result = CONCAT(SUBSTRING(result FROM 1 FOR maxcount - 1), ' ', trans_data);
|
|
END IF;
|
|
|
|
-- 處理 token 部分(除非是電子書情況)
|
|
SET maxcount = INSTR(result, '"token"');
|
|
IF maxcount > 0 THEN
|
|
SET result = CONCAT(SUBSTRING(result FROM 1 FOR maxcount - 2), '}');
|
|
END IF;
|
|
|
|
-- 處理換行符
|
|
IF INSTR(result, '\\n') > 0 THEN
|
|
SET result = REPLACE(REPLACE(result, '\\r\\n', CHAR(10)), '\\n', CHAR(10));
|
|
END IF;
|
|
|
|
-- 如果是有效JSON,最後再驗證一次
|
|
IF json_valid THEN
|
|
IF NOT JSON_VALID(result) THEN
|
|
-- 如果處理後變無效,返回原始值
|
|
RETURN paras;
|
|
END IF;
|
|
END IF;
|
|
|
|
RETURN result;
|
|
END //
|
|
|
|
DELIMITER ; |