From 91c0be46eb724c06e1880c9bf9eefddfabfabf79 Mon Sep 17 00:00:00 2001 From: Alex Zaw Date: Wed, 25 Feb 2026 23:00:53 +0000 Subject: [PATCH] Update Function GENERATE_JSON --- CISTOOLS/Functions/GENERATE_JSON.sql | 122 ++++++++++++++++++++++++++- 1 file changed, 121 insertions(+), 1 deletion(-) diff --git a/CISTOOLS/Functions/GENERATE_JSON.sql b/CISTOOLS/Functions/GENERATE_JSON.sql index 716c12a..b6254ee 100644 --- a/CISTOOLS/Functions/GENERATE_JSON.sql +++ b/CISTOOLS/Functions/GENERATE_JSON.sql @@ -1 +1,121 @@ -@@\@^@ % %@@@@Km@M@ %@M]@k@ %@@@@@@]@ %@M]@@@ %@@ %@Km@ %@@ %@@@ %@@@@ %@@@ %@@ %@@@@ %@@@@~@\@k@ %@~@\@k@ %@~@\@k@ %@~@\@k@ %@~@Mk@k@]@k@ %@~@\@k@ %@~@\@k@ %@~@@k@ %@~@\@k@ %@~@\@k@ %@~@\@@@ %@ %@m@@M@@@]@@}@}@^@ %@m@@M@@@]@@}@}@^@ %@m@@M@@@]@@}}@^@ %@m@@M@@]@@}}@^@ %@@@@@ %@ %@m@@M@@]@^@ %@mmm@@^@ %@mmm@@M@@]@^@ %@mm@@M@@]@^@ %@@@@ %mmm@~@mm@k@ %m@~@m@k@ %mm@~@m@k@ %mmm@~@mm@^@ %@ %m@M@ %}}@@}}@k@}ɕ}@@m@M@ %}⣁}@@m@k@ %}Ö}@@mmm@k@ %}}@@mmm@k@ %}}@@mm@k@ %}㉔}@@m@k@ %}⣁}@@@K@m@M@@]@ %]@ %]@^@ %@^@ %@m@~@M@ %@@M@ %@M@ %}}}}@OO@ %@M@ %@ %@ %@ %@ %@ %@K@mm@M@ %@ %@ %@M@}m}@k@@]@n@@ %@@M@@]@ %@ %@@@@ %@@M@@]@Ln@}}@ %@@M@@]@ %@@M@@]@ %@]@ %@@M@@]@ %@OO@}}}z}@OO@ %@ %@ %@~@@ %@ %}ÁM㙉M}@OO@ %m@M@@M@@]@]@ %OO@}]@@偙M}@OO@ %@OO@}]@Ã@]}@ %@ %@@M@}m}@k@ %}m}@k@}m}@k@ %}m}@k@}m}@k@ %}m}@k@}m}@k@ %}m}@]@ %@ %m@M@@M@@]@]@OO@ %}@Ɩ@Ѣ}@ %@ %}㙉M}@OO@ %m@M@@M@@]@]@OO@ %}]}@ %@@@M@@@]@]@k@}k@}@]@ %@@M@@@@]@@@M@@@]@]@ %@@M@ %@K@m@M@@]@ %]@]@^@ %@m@~@ %}偓@M⅓@ѢmւM҅@}}}}@@偓@}}}}k@}@ %OO@}҅@}}}}@偓@}@OO@}ѢmMѢmւM}@OO@ %@M@m@]@OO@}]@ \ No newline at end of file +SET PATH *LIBL ; + +CREATE OR REPLACE FUNCTION CISTOOLS.GENERATE_JSON ( + SQLSTMT VARCHAR(32000) , + CAMELCASELABELS SMALLINT DEFAULT 0 ) + RETURNS CLOB(2147483647) + LANGUAGE SQL + SPECIFIC CISTOOLS.GENERATE_JSON + NOT DETERMINISTIC + MODIFIES SQL DATA + CALLED ON NULL INPUT + NO EXTERNAL ACTION + NOT FENCED + CONCURRENT ACCESS RESOLUTION DEFAULT + SET OPTION ALWBLK = *ALLREAD , + ALWCPYDTA = *OPTIMIZE , + COMMIT = *NONE , + DBGVIEW = *SOURCE , + DECRESULT = (31, 31, 00) , + DYNDFTCOL = *NO , + DYNUSRPRF = *OWNER , + LANGID = ENU , + OPTLOB = *YES , + SQLCURRULE = *STD , + SRTSEQ = *LANGIDSHR + BEGIN +DECLARE COLUMN_LIST CLOB ( 2 M ) DEFAULT ' ' ; +DECLARE JSON_SQL CLOB ( 3 M ) DEFAULT ' ' ; +DECLARE JSON_DATA CLOB ( 2 G ) DEFAULT '' ; +DECLARE ERROR_JSON VARCHAR ( 32000 ) DEFAULT '' ; +DECLARE CONTINUE HANDLER FOR SQLEXCEPTION +BEGIN +DECLARE V_SQLSTATE CHAR ( 5 ) ; +DECLARE V_DB2_RETURN_CODE INT ; +DECLARE V_DB2_MESSAGE_ID CHAR ( 7 ) ; +DECLARE V_ERROR_MESSAGE CLOB ( 2048 ) ; +GET DIAGNOSTICS CONDITION 1 +V_DB2_RETURN_CODE = DB2_RETURNED_SQLCODE , +V_SQLSTATE = RETURNED_SQLSTATE , +V_ERROR_MESSAGE = MESSAGE_TEXT , +V_DB2_MESSAGE_ID = DB2_MESSAGE_ID ; +RETURN +JSON_OBJECT ( +'success' VALUE 'false' , 'SQLInfo' VALUE JSON_OBJECT ( +'SQLState' VALUE V_SQLSTATE , +'SQLCode' VALUE V_DB2_RETURN_CODE , +'messageID' VALUE V_DB2_MESSAGE_ID , +'message' VALUE V_ERROR_MESSAGE , +'currentTimestamp' VALUE CURRENT_TIMESTAMP , +'SQLStatement' VALUE CISTOOLS . STRIP_SPACES ( SQLSTMT ) +) +) ; +END ; +SET COLUMN_LIST = ( +SELECT CAST ( +LISTAGG ( +'''' || +CAST ( +CASE +CAMELCASELABELS +WHEN +1 +THEN +CISTOOLS . GET_CAMEL_CASE ( +CASE +WHEN +LOCATE ( '_' , COLUMNNAME ) > 0 +THEN TRIM ( COLUMNNAME ) +WHEN +COLUMNLABEL IS NOT NULL +AND TRIM ( COLUMNLABEL ) <> '' +THEN TRIM ( COLUMNLABEL ) +ELSE TRIM ( COLUMNNAME ) +END ) +ELSE TRIM ( COLUMNNAME ) +END || ''':' || +CASE +WHEN +COLUMNCCSID = 65535 +THEN +'Cast(RTrim(' || +DELIMIT_NAME ( TRIM ( COLUMNNAME ) ) +|| ') As Varchar(' || +COLUMNLENGTH || ') Ccsid 37)' +WHEN +SQLTYPE IN ( 'SQL_DECIMAL' , +'SQL_NUMERIC' , 'SQL_INTERGER' , +'SQL_SMALLINT' , 'SQL_BIGINT' , +'SQL_DOUBLE' , 'SQL_FLOAT' , +'SQL_REAL' ) +THEN +DELIMIT_NAME ( TRIM ( COLUMNNAME ) ) || +' Format Json' +ELSE +'RTrim(' || +DELIMIT_NAME ( TRIM ( COLUMNNAME ) ) || +')' +END AS CLOB ( 1 M ) ) , ', ' ) +WITHIN GROUP ( ORDER BY ORDINALPOS ) AS CLOB ( 2 M ) ) +FROM TABLE ( +CISTOOLS . GET_DESCRIPTOR ( SQLSTMT ) +) ) ; +SET JSON_SQL = +'Values (Select Json_Object(Key ''success'' Value ''true'', ' +|| 'Key ''data'' Value ' || 'Json_ArrayAgg(Json_Object(' || +TRIM ( COLUMN_LIST ) || ') Format Json )) From Table(' || +SQLSTMT || ')) into ? ' ; +SET CISTOOLS . SQL_STATEMENT = JSON_SQL ; -- global variable sql_statement for +PREPARE JSONSTMT FROM JSON_SQL ; +EXECUTE JSONSTMT USING JSON_DATA ; +RETURN JSON_DATA ; +END ; + +GRANT ALTER , EXECUTE +ON SPECIFIC FUNCTION CISTOOLS.GENERATE_JSON +TO AMAPICS WITH GRANT OPTION ; + +GRANT EXECUTE +ON SPECIFIC FUNCTION CISTOOLS.GENERATE_JSON +TO PUBLIC ; +