DELIMITER //

CREATE OR REPLACE FUNCTION zen_get_mapping(
  p_tablename VARCHAR(100),
  p_fieldname VARCHAR(20)
)
/*
  Function   : Rewrite as an API for AMIS to call. Display JSON content with mapping icons
  Description: As above
  Build Date : 2022/02/16
  
  Modify History
    Item Who        Date       Modify Docs
    ==== ========== ========== ================================================
    1    Michael    2022/02/16 Init 
*/
RETURNS TEXT
BEGIN
  DECLARE v_cnt INT;
  DECLARE v_crlf VARCHAR(2);
  DECLARE v_comma VARCHAR(1);
  DECLARE v_value VARCHAR(100);
  DECLARE v_label VARCHAR(100);
  DECLARE v_keydesc VARCHAR(100);
  DECLARE v_rets TEXT;
  DECLARE v_imax INT;
  DECLARE v_inow INT;
  
  -- 创建临时表来存储JSON数据
  DROP TEMPORARY TABLE IF EXISTS temp_jsondata;
  CREATE TEMPORARY TABLE temp_jsondata (
    value VARCHAR(100),
    label VARCHAR(100),
    keydesc VARCHAR(100),
    rowid INT AUTO_INCREMENT PRIMARY KEY
  );
  
  SET v_crlf = CONCAT(CHAR(13), CHAR(10));
  
  -- 检查是否有设置到 tablename
  SELECT COUNT(*) INTO v_cnt FROM zen_keyvalue 
  WHERE tablename = p_tablename AND fieldname = p_fieldname;
  
  IF v_cnt > 0 THEN
    INSERT INTO temp_jsondata (value, label, keydesc)
    SELECT keyid AS value, keyvalue AS label, keydesc 
    FROM zen_keyvalue 
    WHERE tablename = p_tablename AND fieldname = p_fieldname;
  ELSE
    INSERT INTO temp_jsondata (value, label, keydesc)
    SELECT keyid AS value, keyvalue AS label, keydesc 
    FROM zen_keyvalue 
    WHERE tablename = 'xxxx' AND fieldname = p_fieldname;
  END IF;
  
  -- 返回 options []
  SELECT COUNT(*) INTO v_imax FROM temp_jsondata;
  SET v_inow = 1;
  SET v_rets = '';
  SET v_comma = ',';
  
  WHILE v_inow <= v_imax DO
    IF v_inow = v_imax THEN
      SET v_comma = '';
    END IF;
    
    SELECT value, label, keydesc INTO v_value, v_label, v_keydesc
    FROM temp_jsondata WHERE rowid = v_inow;
    
    SET v_rets = CONCAT(v_rets,
        -- '    "', v_value, '": "<span class=\"label label-', v_keydesc, '\">', v_label, '</span>"', v_comma);
		'    "', v_value, '": "<span class=', CHAR(39), 'label label-', v_keydesc, CHAR(39), '>', v_label, '</span>"', v_comma);
    SET v_inow = v_inow + 1;
  END WHILE;
  
  SET v_rets = CONCAT('"map": { ', v_rets, ' },', v_crlf);
  
  RETURN v_rets;
END //

DELIMITER ;
