{
  "Helper_SendTXTEmail": "select txt_title,txt_body,txt_bcc,txt_type from {schema}_txt__tbl where txt_process='EMAIL' and txt_attrib=@txt_attrib",
  "HelperRender_getTXT": "select txt_body from {schema}_txt__tbl where txt_process=@txt_process and txt_attrib=@txt_attrib",
  "get_tstmp": "datetime('now','localtime')",
  "context_user": "(select context from {schema}_meta limit 1)",
  "sms_send_txt": "select txt_title,txt_body,txt_bcc from {schema}_txt__tbl where txt_process='SMS' and txt_attrib=@txt_attrib",
  "str_concat":"||",
  "func_prefix":"",
  "$iif":{ "params": ["cond","vtrue","vfalse"], "sql": "(case when %%%cond%%% then %%%vtrue%%% else %%%vfalse%%% end)" },
  "$ifnull":{ "params": ["a","b"], "sql": "ifnull(%%%a%%%,%%%b%%%)" },
  "$addDays":{ "params": ["date",{ "name": "cnt", "options": { "trim": true } }], "sql": "datetime(%%%date%%%,concat(%%%cnt%%%,' days'))" },
  "$addBusinessDays":{ "params": ["date","cnt"], "sql": [
    "datetime(%%%date%%%, concat((",
    "  select",
    "    case",
    "      when %%%cnt%%% = 0 then 0",
    "      when %%%cnt%%% > 0 then",
    "        t.partial_days + 7 * t.weeks +",
    "        $iif(t.wd + t.partial_days >= 6, 2, 0) +",
    "        $iif(t.wd = 6, -1, 0) +",
    "        $iif(t.partial_days = 0 AND t.wd % 6 = 0, -2, 0)",
    "      when %%%cnt%%% < 0 then",
    "        t.partial_days + 7 * t.weeks +",
    "        $iif(t.wd + t.partial_days <= 0, -2, 0) +",
    "        $iif(t.wd = 0, 1, 0) +",
    "        $iif(t.partial_days = 0 AND t.wd % 6 = 0, 2, 0)",
    "    end",
    "  from (select %%%cnt%%%%5 as partial_days,%%%cnt%%%/5 as weeks,((strftime('%w', %%%date%%%) - 1) + 1) %  7 wd) t",
    "),' days'))",
  ] },
  "$addHours":{ "params": ["date",{ "name": "cnt", "options": { "trim": true } }], "sql": "datetime(%%%date%%%,concat(%%%cnt%%%,' hours'))" },
  "$addMinutes":{ "params": ["date",{ "name": "cnt", "options": { "trim": true } }], "sql": "datetime(%%%date%%%,concat(%%%cnt%%%,' minutes'))" },
  "$toDate":{ "params": ["date"], "sql": "date(%%%date%%%)" },
  "$topn": { "params": ["CNT","..."], "sql": "%%%...%%% limit %%%CNT%%%" },
  "$getInsertCount": { "params": ["..."], "sql": "$getUpdateCount(%%%...%%%)" },
  "$getUpdateCount": {
    "params": [],
    "exec": "return [].slice.call(arguments).join(',')+'; select changes()+(select extra_changes from jsharmony_meta) xrowcount ';"
  },
  "$errorif": {
    "params": ["COND","MSG"],
    "exec": [
      "MSG = MSG.trim();",
      "if(MSG && (MSG[0]=='\\'')) MSG = '\\'Application Error - '+MSG.substr(1);",
      "return 'update jsharmony_meta set errcode=-9,errmsg='+MSG+' where ('+COND.trim()+')';"
    ]
  },
  "$ceiling": { "params": ["VAL"], "sql": "cast ( (%%%VAL%%%) as int ) + ( (%%%VAL%%%) > cast ( (%%%VAL%%%) as int ))" },
  "$floor": { "params": ["VAL"], "sql": "cast ( (%%%VAL%%%) as int ) - ( (%%%VAL%%%) < cast ( (%%%VAL%%%) as int ))" },
  "$binary":{ "params": ["a"], "sql": "X'%%%a%%%'" },
  "$greatest": {
    "params": [],
    "exec": "return 'max('+[].slice.call(arguments).join(',')+')';"
  },
  "$getInsertKey": { "params": ["TBL","KEY","..."], "sql": "%%%...%%%; select %%%KEY%%% from %%%TBL%%% where rowid=(select ifnull(last_insert_rowid_override,last_insert_rowid()) from jsharmony_meta)" },
  "proc_run":"",
  "par_list_beg":"(",
  "par_list_end":")",
  "menu_editor_top":"select @cur_menu_id_auto as cur_menu_id_auto, case when @cur_menu_id_auto <> 0 then @cur_menu_id_auto else (select menu_id_auto from {schema}.menu__tbl where 1=1 order by menu_group desc,coalesce(menu__tbl.menu_seq,menu__tbl.menu_id),menu_name,menu__tbl.menu_id limit 1) end menu_id_auto from {schema}.single",
  "menu_editor_insert":["update {schema}.menu__tbl set menu_seq=coalesce(menu_seq,menu_id)+1",
                  "  where coalesce(menu_seq,menu_id) > (select coalesce(menu_seq,menu_id) from {schema}.menu__tbl where menu_id=@menu_id_parent) ",
                  "    and menu_group = (select menu_group from {schema}.menu__tbl where menu_id=@menu_id_parent)",
                  "    and (coalesce(menu_seq,menu_id)-(select coalesce(menu_seq,menu_id) from {schema}.menu__tbl where menu_id=@menu_id_parent))/(select count(*) from {schema}.menu__tbl sm2 where coalesce(sm2.menu_seq,sm2.menu_id) > (select coalesce(menu_seq,menu_id) from {schema}.menu__tbl where menu_id=@menu_id_parent) and coalesce(sm2.menu_seq,sm2.menu_id) <= coalesce(menu__tbl.menu_seq,menu__tbl.menu_id))<=1.0;",
                  "insert into {schema}.menu__tbl (menu_id,menu_id_parent,menu_group,menu_seq,menu_name,menu_desc,menu_sts)",
                  "  select (select max(menu_id)+1 from {schema}.menu__tbl),menu_id,menu_group,coalesce(menu_seq,menu_id)+1,@menu_name,@menu_desc,'ACTIVE' from {schema}.menu__tbl where menu_id=@menu_id_parent;",
                  "select menu_id_auto from {schema}_menu__tbl where rowid=last_insert_rowid();"],
  "menu_editor_lov":"select menu_id as code_id,menu_id_parent as code_parent_id,menu_id_auto as code_val,menu_desc as code_txt,'folder' as code_icon from {schema}.menu__tbl where 1=1 %%%DATALOCKS%%% order by menu_group desc,coalesce(menu__tbl.menu_seq,menu__tbl.menu_id),menu_name,menu__tbl.menu_id",
  "menu_group_lov":"select 'S' as code_val,'Main' as code_txt union all select 'C','Client'",
  "JSHARMONY_FACTORY_INSTALLED":"select case when ifnull((SELECT count(*)FROM sqlite_master WHERE name='{schema}_single' and type='table'),0) > 0 then 1 else 0 end JSHARMONY_FACTORY_INSTALLED",
  "JSEXEC_STR": {
    "params": [],
    "exec": [
      "var rslt = arguments[0];",
      "return rslt.replace(/'/g,\"''\").replace(/\\;/g,\"\\\\\\\\;\").replace(/\\r/g,\" \").replace(/\\n/g,\"\\\\n \");"
    ]
  },
  "$lpad": {
    "params": ["STR","LEN","PADCHAR"],
    "exec": [
      "var iLEN = parseInt(LEN);",
      "PADCHAR = PADCHAR || ' ';",
      "if(PADCHAR.length>1 && (PADCHAR[0]==\"'\")) PADCHAR=PADCHAR.substr(1);",
      "if(PADCHAR.length>1) PADCHAR = PADCHAR.substr(0,1);",
      "return 'substr(\\''+PADCHAR.repeat(iLEN)+'\\' || '+STR+', '+(-1*iLEN).toString()+', '+iLEN.toString()+')';",
    ]
  },
  "{{concat}}":{
    "params": [],
    "exec": [
      "if(arguments.length<1) return 'null';",
      "var rslt = '(' + arguments[0];",
      "for(var i=1;i<arguments.length;i++){",
      "  rslt += ' || ' + arguments[i];",
      "}",
      "rslt += ')';",
      "return rslt;"
    ]
  },
  "decode": {
    "params": [],
    "exec": [
      "if(arguments.length<2) return 'null';",
      "var rslt = '(case ('+arguments[0]+')';",
      "for(var i=0;i<arguments.length-2;i+=2){",
      "  rslt += ' when ('+arguments[i+1]+') then ('+arguments[i+2]+')'",
      "}",
      "if((arguments.length%2)==0) rslt += ' else ('+arguments[arguments.length-1]+')';",
      "else rslt += ' else null';",
      "rslt += ' end)';",
      "return rslt;"
    ]
  },
  "{schema}.create_code" : {
    "params": ["SCHEMA","ID","COMMENT"],
    "sql": ["create_code(ifnull(%%%SCHEMA%%%||'_','')||'code_'||%%%ID%%%)"]
  },
  "create_code" : {
    "params": ["TBL_NAME"],
    "sql": [
      "update jsharmony_meta set jsexec = '{ \"function\": \"exec\", \"sql\": \"",
      "  create table '||%%%TBL_NAME%%%||' (",
      "    code_id integer primary key autoincrement not null,",
      "    code_seq integer,",
      "    code_val text unique not null,",
      "    code_txt text,",
      "    code_code text,",
      "    code_end_dt text,",
      "    code_end_reason text,",
      "    code_etstmp text,",
      "    code_euser text,",
      "    code_mtstmp text,",
      "    code_muser text,",
      "    code_snotes text,",
      "    code_notes text,",
      "    code_attrib text",
      "  )\\;",
      "  create trigger '||%%%TBL_NAME%%%||'_after_insert after insert on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    update '||%%%TBL_NAME%%%||' set ",
      "      code_euser = (select context from jsharmony_meta limit 1),code_etstmp=datetime(''now'',''localtime''),",
      "      code_muser = (select context from jsharmony_meta limit 1),code_mtstmp=datetime(''now'',''localtime'')",
      "      where rowid = new.rowid\\\\\\;",
      "    %%%JSEXEC_ESCAPE(%%%log_audit_insert(\"'||%%%TBL_NAME%%%||'\",\"new.code_id\",\"code_id\",\"null\",\"null\",\"null\")%%%)%%%",
      "    update jsharmony_meta set {{audit_seq}} = null\\\\\\;",
      "  end\\;",
      " create trigger '||%%%TBL_NAME%%%||'_before_update before update on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    select case when %%%nequal(\"NEW.code_id\",\"OLD.code_id\")%%% then raise(FAIL,''Application Error - ID cannot be updated.'') end\\\\\\;",
      "    select case when %%%nequal(\"NEW.code_val\",\"OLD.code_val\")%%% then raise(FAIL,''Application Error - Code Value 1 cannot be updated..'') end\\\\\\;",
      "  end\\;",
      " create trigger '||%%%TBL_NAME%%%||'_after_update after update on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    %%%JSEXEC_ESCAPE(%%%log_audit_update_mult(\"'||%%%TBL_NAME%%%||'\",\"new.code_id\",[\"code_id\",\"code_seq\",\"code_val\",\"code_txt\",\"code_code\",\"code_end_dt\",\"code_end_reason\",\"code_notes\"],\"null\",\"null\",\"null\")%%%)%%%",
      "    update '||%%%TBL_NAME%%%||' set ",
      "      code_muser = (select context from jsharmony_meta limit 1),code_mtstmp=datetime(''now'',''localtime'') ",
      "      where rowid = new.rowid and exists(select * from jsharmony_meta where {{audit_seq}} is not null)\\\\\\;",
      "    update jsharmony_meta set {{audit_seq}} = null\\\\\\;",
      "  end\\;",
      " create trigger '||%%%TBL_NAME%%%||'_delete before delete on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    %%%JSEXEC_ESCAPE(%%%log_audit_delete_mult(\"'||%%%TBL_NAME%%%||'\",\"old.code_id\",[\"code_id\",\"code_seq\",\"code_val\",\"code_txt\",\"code_code\",\"code_end_dt\",\"code_end_reason\",\"code_notes\"],\"null\",\"null\",\"null\")%%%)%%%",
      "    update jsharmony_meta set {{audit_seq}} = null\\\\\\;",
      "  end\\;",
      "\" }';"
    ]
  },
  "{schema}.create_code2" : {
    "params": ["SCHEMA","ID","COMMENT"],
    "sql": ["create_code2(ifnull(%%%SCHEMA%%%||'_','')||'code2_'||%%%ID%%%)"]
  },
  "create_code2" : {
    "params": ["TBL_NAME"],
    "sql": [
      "update jsharmony_meta set jsexec = '{ \"function\": \"exec\", \"sql\": \"",
      "  create table '||%%%TBL_NAME%%%||' (",
      "    code2_id integer primary key autoincrement not null,",
      "    code_seq integer,",
      "    code_val1 text not null,",
      "    code_val2 text not null,",
      "    code_txt text,",
      "    code_code text,",
      "    code_end_dt text,",
      "    code_end_reason text,",
      "    code_etstmp text,",
      "    code_euser text,",
      "    code_mtstmp text,",
      "    code_muser text,",
      "    code_snotes text,",
      "    code_notes text,",
      "    code_attrib text,",
      "    unique(code_val1,code_val2)",
      "  )\\;",
      "  create trigger '||%%%TBL_NAME%%%||'_after_insert after insert on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    update '||%%%TBL_NAME%%%||' set ",
      "      code_euser = (select context from jsharmony_meta limit 1),code_etstmp=datetime(''now'',''localtime''),",
      "      code_muser = (select context from jsharmony_meta limit 1),code_mtstmp=datetime(''now'',''localtime'')",
      "      where rowid = new.rowid\\\\\\;",
      "    %%%JSEXEC_ESCAPE(%%%log_audit_insert(\"'||%%%TBL_NAME%%%||'\",\"new.code2_id\",\"code2_id\",\"null\",\"null\",\"null\")%%%)%%%",
      "    update jsharmony_meta set {{audit_seq}} = null\\\\\\;",
      "  end\\;",
      " create trigger '||%%%TBL_NAME%%%||'_before_update before update on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    select case when %%%nequal(\"NEW.code2_id\",\"OLD.code2_id\")%%% then raise(FAIL,''Application Error - ID cannot be updated.'') end\\\\\\;",
      "    select case when %%%nequal(\"NEW.code_val1\",\"OLD.code_val1\")%%% then raise(FAIL,''Application Error - Code Value 1 cannot be updated.'') end\\\\\\;",
      "    select case when %%%nequal(\"NEW.code_val2\",\"OLD.code_val2\")%%% then raise(FAIL,''Application Error - Code Value 2 cannot be updated.'') end\\\\\\;",
      "  end\\;",
      " create trigger '||%%%TBL_NAME%%%||'_after_update after update on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    %%%JSEXEC_ESCAPE(%%%log_audit_update_mult(\"'||%%%TBL_NAME%%%||'\",\"new.code2_id\",[\"code2_id\",\"code_seq\",\"code_val1\",\"code_val2\",\"code_txt\",\"code_code\",\"code_end_dt\",\"code_end_reason\",\"code_notes\"],\"null\",\"null\",\"null\")%%%)%%%",
      "    update '||%%%TBL_NAME%%%||' set ",
      "      code_muser = (select context from jsharmony_meta limit 1),code_mtstmp=datetime(''now'',''localtime'') ",
      "      where rowid = new.rowid and exists(select * from jsharmony_meta where {{audit_seq}} is not null)\\\\\\;",
      "    update jsharmony_meta set {{audit_seq}} = null\\\\\\;",
      "  end\\;",
      " create trigger '||%%%TBL_NAME%%%||'_delete before delete on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    %%%JSEXEC_ESCAPE(%%%log_audit_delete_mult(\"'||%%%TBL_NAME%%%||'\",\"old.code2_id\",[\"code2_id\",\"code_seq\",\"code_val1\",\"code_val2\",\"code_txt\",\"code_code\",\"code_end_dt\",\"code_end_reason\",\"code_notes\"],\"null\",\"null\",\"null\")%%%)%%%",
      "    update jsharmony_meta set {{audit_seq}} = null\\\\\\;",
      "  end\\;",
      "\" }';"
    ]
  },
  "{schema}.create_code_app" : {
    "params": ["SCHEMA","ID","COMMENT"],
    "sql": ["create_code_app(ifnull(%%%SCHEMA%%%||'_','')||'code_app_'||%%%ID%%%)"]
  },
  "create_code_app" : {
    "params": ["TBL_NAME"],
    "sql": [
      "update jsharmony_meta set jsexec = '{ \"function\": \"exec\", \"sql\": \"",
      "  create table '||%%%TBL_NAME%%%||' (",
      "    code_app_id integer primary key autoincrement not null,",
      "    code_seq integer,",
      "    code_val text unique not null,",
      "    code_txt text,",
      "    code_code text,",
      "    code_end_dt text,",
      "    code_end_reason text,",
      "    code_etstmp text,",
      "    code_euser text,",
      "    code_mtstmp text,",
      "    code_muser text,",
      "    code_snotes text,",
      "    code_notes text,",
      "    code_attrib text",
      "  )\\;",
      "  create trigger '||%%%TBL_NAME%%%||'_after_insert after insert on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    update '||%%%TBL_NAME%%%||' set ",
      "      code_euser = (select context from jsharmony_meta limit 1),code_etstmp=datetime(''now'',''localtime''),",
      "      code_muser = (select context from jsharmony_meta limit 1),code_mtstmp=datetime(''now'',''localtime'')",
      "      where rowid = new.rowid\\\\\\;",
      "    %%%JSEXEC_ESCAPE(%%%log_audit_insert(\"'||%%%TBL_NAME%%%||'\",\"new.code_app_id\",\"code_app_id\",\"null\",\"null\",\"null\")%%%)%%%",
      "    update jsharmony_meta set {{audit_seq}} = null\\\\\\;",
      "  end\\;",
      " create trigger '||%%%TBL_NAME%%%||'_before_update before update on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    select case when %%%nequal(\"NEW.code_app_id\",\"OLD.code_app_id\")%%% then raise(FAIL,''Application Error - ID cannot be updated.'') end\\\\\\;",
      "    select case when %%%nequal(\"NEW.code_val\",\"OLD.code_val\")%%% then raise(FAIL,''Application Error - Code Value 1 cannot be updated.'') end\\\\\\;",
      "  end\\;",
      " create trigger '||%%%TBL_NAME%%%||'_after_update after update on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    %%%JSEXEC_ESCAPE(%%%log_audit_update_mult(\"'||%%%TBL_NAME%%%||'\",\"new.code_app_id\",[\"code_app_id\",\"code_seq\",\"code_val\",\"code_txt\",\"code_code\",\"code_end_dt\",\"code_end_reason\",\"code_notes\"],\"null\",\"null\",\"null\")%%%)%%%",
      "    update '||%%%TBL_NAME%%%||' set ",
      "      code_muser = (select context from jsharmony_meta limit 1),code_mtstmp=datetime(''now'',''localtime'') ",
      "      where rowid = new.rowid and exists(select * from jsharmony_meta where {{audit_seq}} is not null)\\\\\\;",
      "    update jsharmony_meta set {{audit_seq}} = null\\\\\\;",
      "  end\\;",
      " create trigger '||%%%TBL_NAME%%%||'_delete before delete on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    %%%JSEXEC_ESCAPE(%%%log_audit_delete_mult(\"'||%%%TBL_NAME%%%||'\",\"old.code_app_id\",[\"code_app_id\",\"code_seq\",\"code_val\",\"code_txt\",\"code_code\",\"code_end_dt\",\"code_end_reason\",\"code_notes\"],\"null\",\"null\",\"null\")%%%)%%%",
      "    update jsharmony_meta set {{audit_seq}} = null\\\\\\;",
      "  end\\;",
      "\" }';"
    ]
  },
  "{schema}.create_code2_app" : {
    "params": ["SCHEMA","ID","COMMENT"],
    "sql": ["create_code2_app(ifnull(%%%SCHEMA%%%||'_','')||'code2_app_'||%%%ID%%%)"]
  },
  "create_code2_app" : {
    "params": ["TBL_NAME"],
    "sql": [
      "update jsharmony_meta set jsexec = '{ \"function\": \"exec\", \"sql\": \"",
      "  create table '||%%%TBL_NAME%%%||' (",
      "    code2_app_id integer primary key autoincrement not null,",
      "    code_seq integer,",
      "    code_val1 text not null,",
      "    code_val2 text not null,",
      "    code_txt text,",
      "    code_code text,",
      "    code_end_dt text,",
      "    code_end_reason text,",
      "    code_etstmp text,",
      "    code_euser text,",
      "    code_mtstmp text,",
      "    code_muser text,",
      "    code_snotes text,",
      "    code_notes text,",
      "    code_attrib text,",
      "    unique(code_val1,code_val2)",
      "  )\\;",
      "  create trigger '||%%%TBL_NAME%%%||'_after_insert after insert on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    update '||%%%TBL_NAME%%%||' set ",
      "      code_euser = (select context from jsharmony_meta limit 1),code_etstmp=datetime(''now'',''localtime''),",
      "      code_muser = (select context from jsharmony_meta limit 1),code_mtstmp=datetime(''now'',''localtime'')",
      "      where rowid = new.rowid\\\\\\;",
      "    %%%JSEXEC_ESCAPE(%%%log_audit_insert(\"'||%%%TBL_NAME%%%||'\",\"new.code2_app_id\",\"code2_app_id\",\"null\",\"null\",\"null\")%%%)%%%",
      "    update jsharmony_meta set {{audit_seq}} = null\\\\\\;",
      "  end\\;",
      " create trigger '||%%%TBL_NAME%%%||'_before_update before update on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    select case when %%%nequal(\"NEW.code2_app_id\",\"OLD.code2_app_id\")%%% then raise(FAIL,''Application Error - ID cannot be updated.'') end\\\\\\;",
      "    select case when %%%nequal(\"NEW.code_val1\",\"OLD.code_val1\")%%% then raise(FAIL,''Application Error - Code Value 1 cannot be updated..'') end\\\\\\;",
      "    select case when %%%nequal(\"NEW.code_val2\",\"OLD.code_val2\")%%% then raise(FAIL,''Application Error - Code Value 2 cannot be updated..'') end\\\\\\;",
      "  end\\;",
      " create trigger '||%%%TBL_NAME%%%||'_after_update after update on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    %%%JSEXEC_ESCAPE(%%%log_audit_update_mult(\"'||%%%TBL_NAME%%%||'\",\"new.code2_app_id\",[\"code2_app_id\",\"code_seq\",\"code_val1\",\"code_val2\",\"code_txt\",\"code_code\",\"code_end_dt\",\"code_end_reason\",\"code_notes\"],\"null\",\"null\",\"null\")%%%)%%%",
      "    update '||%%%TBL_NAME%%%||' set ",
      "      code_muser = (select context from jsharmony_meta limit 1),code_mtstmp=datetime(''now'',''localtime'') ",
      "      where rowid = new.rowid and exists(select * from jsharmony_meta where {{audit_seq}} is not null)\\\\\\;",
      "    update jsharmony_meta set {{audit_seq}} = null\\\\\\;",
      "  end\\;",
      " create trigger '||%%%TBL_NAME%%%||'_delete before delete on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    %%%JSEXEC_ESCAPE(%%%log_audit_delete_mult(\"'||%%%TBL_NAME%%%||'\",\"old.code2_app_id\",[\"code2_app_id\",\"code_seq\",\"code_val1\",\"code_val2\",\"code_txt\",\"code_code\",\"code_end_dt\",\"code_end_reason\",\"code_notes\"],\"null\",\"null\",\"null\")%%%)%%%",
      "    update jsharmony_meta set {{audit_seq}} = null\\\\\\;",
      "  end\\;",
      "\" }';"
    ]
  },
  "{schema}.create_code_sys" : {
    "params": ["SCHEMA","ID","COMMENT"],
    "sql": ["create_code_sys(ifnull(%%%SCHEMA%%%||'_','')||'code_sys_'||%%%ID%%%)"]
  },
  "create_code_sys" : {
    "params": ["TBL_NAME"],
    "sql": [
      "update jsharmony_meta set jsexec = '{ \"function\": \"exec\", \"sql\": \"",
      "  create table '||%%%TBL_NAME%%%||' (",
      "    code_sys_id integer primary key autoincrement not null,",
      "    code_seq integer,",
      "    code_val text unique not null,",
      "    code_txt text,",
      "    code_code text,",
      "    code_end_dt text,",
      "    code_end_reason text,",
      "    code_etstmp text,",
      "    code_euser text,",
      "    code_mtstmp text,",
      "    code_muser text,",
      "    code_snotes text,",
      "    code_notes text,",
      "    code_attrib text",
      "  )\\;",
      "  create trigger '||%%%TBL_NAME%%%||'_after_insert after insert on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    update '||%%%TBL_NAME%%%||' set ",
      "      code_euser = (select context from jsharmony_meta limit 1),code_etstmp=datetime(''now'',''localtime''),",
      "      code_muser = (select context from jsharmony_meta limit 1),code_mtstmp=datetime(''now'',''localtime'')",
      "      where rowid = new.rowid\\\\\\;",
      "    %%%JSEXEC_ESCAPE(%%%log_audit_insert(\"'||%%%TBL_NAME%%%||'\",\"new.code_sys_id\",\"code_sys_id\",\"null\",\"null\",\"null\")%%%)%%%",
      "    update jsharmony_meta set {{audit_seq}} = null\\\\\\;",
      "  end\\;",
      " create trigger '||%%%TBL_NAME%%%||'_before_update before update on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    select case when %%%nequal(\"NEW.code_sys_id\",\"OLD.code_sys_id\")%%% then raise(FAIL,''Application Error - ID cannot be updated.'') end\\\\\\;",
      "    select case when %%%nequal(\"NEW.code_val\",\"OLD.code_val\")%%% then raise(FAIL,''Application Error - Code Value 1 cannot be updated.'') end\\\\\\;",
      "  end\\;",
      " create trigger '||%%%TBL_NAME%%%||'_after_update after update on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    %%%JSEXEC_ESCAPE(%%%log_audit_update_mult(\"'||%%%TBL_NAME%%%||'\",\"new.code_sys_id\",[\"code_sys_id\",\"code_seq\",\"code_val\",\"code_txt\",\"code_code\",\"code_end_dt\",\"code_end_reason\",\"code_notes\"],\"null\",\"null\",\"null\")%%%)%%%",
      "    update '||%%%TBL_NAME%%%||' set ",
      "      code_muser = (select context from jsharmony_meta limit 1),code_mtstmp=datetime(''now'',''localtime'') ",
      "      where rowid = new.rowid and exists(select * from jsharmony_meta where {{audit_seq}} is not null)\\\\\\;",
      "    update jsharmony_meta set {{audit_seq}} = null\\\\\\;",
      "  end\\;",
      " create trigger '||%%%TBL_NAME%%%||'_delete before delete on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    %%%JSEXEC_ESCAPE(%%%log_audit_delete_mult(\"'||%%%TBL_NAME%%%||'\",\"old.code_sys_id\",[\"code_sys_id\",\"code_seq\",\"code_val\",\"code_txt\",\"code_code\",\"code_end_dt\",\"code_end_reason\",\"code_notes\"],\"null\",\"null\",\"null\")%%%)%%%",
      "    update jsharmony_meta set {{audit_seq}} = null\\\\\\;",
      "  end\\;",
      "\" }';"
    ]
  },
  "{schema}.create_code2_sys" : {
    "params": ["SCHEMA","ID","COMMENT"],
    "sql": ["create_code2_sys(ifnull(%%%SCHEMA%%%||'_','')||'code2_sys_'||%%%ID%%%)"]
  },
  "create_code2_sys" : {
    "params": ["TBL_NAME"],
    "sql": [
      "update jsharmony_meta set jsexec = '{ \"function\": \"exec\", \"sql\": \"",
      "  create table '||%%%TBL_NAME%%%||' (",
      "    code2_sys_id integer primary key autoincrement not null,",
      "    code_seq integer,",
      "    code_val1 text not null,",
      "    code_val2 text not null,",
      "    code_txt text,",
      "    code_code text,",
      "    code_end_dt text,",
      "    code_end_reason text,",
      "    code_etstmp text,",
      "    code_euser text,",
      "    code_mtstmp text,",
      "    code_muser text,",
      "    code_snotes text,",
      "    code_notes text,",
      "    code_attrib text,",
      "    unique(code_val1,code_val2)",
      "  )\\;",
      "  create trigger '||%%%TBL_NAME%%%||'_after_insert after insert on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    update '||%%%TBL_NAME%%%||' set ",
      "      code_euser = (select context from jsharmony_meta limit 1),code_etstmp=datetime(''now'',''localtime''),",
      "      code_muser = (select context from jsharmony_meta limit 1),code_mtstmp=datetime(''now'',''localtime'')",
      "      where rowid = new.rowid\\\\\\;",
      "    %%%JSEXEC_ESCAPE(%%%log_audit_insert(\"'||%%%TBL_NAME%%%||'\",\"new.code2_sys_id\",\"code2_sys_id\",\"null\",\"null\",\"null\")%%%)%%%",
      "    update jsharmony_meta set {{audit_seq}} = null\\\\\\;",
      "  end\\;",
      " create trigger '||%%%TBL_NAME%%%||'_before_update before update on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    select case when %%%nequal(\"NEW.code2_sys_id\",\"OLD.code2_sys_id\")%%% then raise(FAIL,''Application Error - ID cannot be updated.'') end\\\\\\;",
      "    select case when %%%nequal(\"NEW.code_val1\",\"OLD.code_val1\")%%% then raise(FAIL,''Application Error - Code Value 1 cannot be updated..'') end\\\\\\;",
      "    select case when %%%nequal(\"NEW.code_val2\",\"OLD.code_val2\")%%% then raise(FAIL,''Application Error - Code Value 2 cannot be updated..'') end\\\\\\;",
      "  end\\;",
      " create trigger '||%%%TBL_NAME%%%||'_after_update after update on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    %%%JSEXEC_ESCAPE(%%%log_audit_update_mult(\"'||%%%TBL_NAME%%%||'\",\"new.code2_sys_id\",[\"code2_sys_id\",\"code_seq\",\"code_val1\",\"code_val2\",\"code_txt\",\"code_code\",\"code_end_dt\",\"code_end_reason\",\"code_notes\"],\"null\",\"null\",\"null\")%%%)%%%",
      "    update '||%%%TBL_NAME%%%||' set ",
      "      code_muser = (select context from jsharmony_meta limit 1),code_mtstmp=datetime(''now'',''localtime'') ",
      "      where rowid = new.rowid and exists(select * from jsharmony_meta where {{audit_seq}} is not null)\\\\\\;",
      "    update jsharmony_meta set {{audit_seq}} = null\\\\\\;",
      "  end\\;",
      " create trigger '||%%%TBL_NAME%%%||'_delete before delete on '||%%%TBL_NAME%%%||'",
      "  begin",
      "    %%%JSEXEC_ESCAPE(%%%log_audit_delete_mult(\"'||%%%TBL_NAME%%%||'\",\"old.code2_sys_id\",[\"code2_sys_id\",\"code_seq\",\"code_val1\",\"code_val2\",\"code_txt\",\"code_code\",\"code_end_dt\",\"code_end_reason\",\"code_notes\"],\"null\",\"null\",\"null\")%%%)%%%",
      "    update jsharmony_meta set {{audit_seq}} = null\\\\\\;",
      "  end\\;",
      "\" }';"
    ]
  },
  "{schema}.nequal" : {
    "params": ["A","B"],
    "sql": ["(%%%A%%% is null and %%%B%%% is not null or %%%B%%% is null and %%%A%%% is not null or %%%A%%%<>%%%B%%%)"]
  },
  "nequal" : {
    "params": ["A","B"],
    "sql": ["(%%%A%%% is null and %%%B%%% is not null or %%%B%%% is null and %%%A%%% is not null or %%%A%%%<>%%%B%%%)"]
  },
  "with_insert_trigger_identity": {
    "params": ["KEY","INSERT_STATEMENT"],
    "sql": [
      "%%%INSERT_STATEMENT%%%;",
      "select last_insert_rowid_override %%%KEY%%% from jsharmony_meta;"
    ]
  },
  "log_audit_insert_ext" : {
    "params": ["TABLE","ID","COL_NAME","audit_ref_name","audit_ref_id","audit_subject","cust_id","item_id"],
    "sql": [
      "insert into {schema}_audit__tbl(audit_table_name,audit_table_id,audit_op,audit_tstmp,audit_ref_name,audit_ref_id,audit_subject,cust_id,item_id,audit_user)",
      "  select '%%%TABLE%%%',%%%ID%%%,'I',datetime('now','localtime'),%%%audit_ref_name%%%,%%%audit_ref_id%%%,%%%audit_subject%%%,%%%cust_id%%%,%%%item_id%%%,(select context from jsharmony_meta limit 1)",
      "  where exists(select * from jsharmony_meta where {{audit_seq}} is null)\\\\\\;",
      "update jsharmony_meta set {{audit_seq}} = (select audit_seq from {schema}_audit__tbl where rowid = last_insert_rowid())",
      "  where exists(select * from jsharmony_meta where {{audit_seq}} is null)\\\\\\;"
    ]
  },
  "log_audit_insert" : {
    "params": ["TABLE","ID","COL_NAME","audit_ref_name","audit_ref_id","audit_subject","cust_id","item_id"],
    "sql": [
      "insert into {schema}_audit__tbl(audit_table_name,audit_table_id,audit_op,audit_tstmp,audit_ref_name,audit_ref_id,audit_subject,cust_id,item_id,audit_user)",
      "  select '%%%TABLE%%%',%%%ID%%%,'I',datetime('now','localtime'),%%%audit_ref_name%%%,%%%audit_ref_id%%%,%%%audit_subject%%%,%%%cust_id%%%,%%%item_id%%%,(select context from jsharmony_meta limit 1)",
      "  where exists(select * from jsharmony_meta where {{audit_seq}} is null)\\;",
      "update jsharmony_meta set {{audit_seq}} = (select audit_seq from {schema}_audit__tbl where rowid = last_insert_rowid())",
      "  where exists(select * from jsharmony_meta where {{audit_seq}} is null)\\;"
    ]
  },
  "log_audit_update_mult" : {
    "params": ["TABLE","ID","COL_ARRAY","audit_ref_name","audit_ref_id","audit_subject","cust_id","item_id"],
    "exec": [
      "var rslt = '';",
      "if ((typeof COL_ARRAY === 'string' || COL_ARRAY instanceof String) && COL_ARRAY.length && COL_ARRAY.trim()[0]=='[') COL_ARRAY = JSON.parse(COL_ARRAY.trim());",
      "for(var i=0;i<COL_ARRAY.length;i++){",
      "  rslt += '%%%log_audit_update('+JSON.stringify(TABLE)+','+JSON.stringify(ID)+','+JSON.stringify(COL_ARRAY[i])+','+JSON.stringify(audit_ref_name)+','+JSON.stringify(audit_ref_id)+','+JSON.stringify(audit_subject)+','+JSON.stringify(cust_id)+','+JSON.stringify(item_id)+')%%%\\r\\n';",
      "}",
      "return rslt;"
    ]
  },
  "log_audit_update" : {
    "params": ["TABLE","ID","COL_NAME","audit_ref_name","audit_ref_id","audit_subject","cust_id","item_id"],
    "sql": [
      "insert into {schema}_audit__tbl(audit_table_name,audit_table_id,audit_op,audit_tstmp,audit_ref_name,audit_ref_id,audit_subject,cust_id,item_id,audit_user)",
      "  select '%%%TABLE%%%',%%%ID%%%,'U',datetime('now','localtime'),%%%audit_ref_name%%%,%%%audit_ref_id%%%,%%%audit_subject%%%,%%%cust_id%%%,%%%item_id%%%,(select context from jsharmony_meta limit 1)",
      "  where exists(select * from jsharmony_meta where {{audit_seq}} is null) and (%%%nequal(\"OLD.%%%COL_NAME%%%\", \"NEW.%%%COL_NAME%%%\")%%%)\\;",
      "update jsharmony_meta set {{audit_seq}} = (select audit_seq from {schema}_audit__tbl where rowid = last_insert_rowid())",
      "  where exists(select * from jsharmony_meta where {{audit_seq}} is null) and (%%%nequal(\"OLD.%%%COL_NAME%%%\", \"NEW.%%%COL_NAME%%%\")%%%)\\;",
      "insert into {schema}_audit_detail(audit_seq,audit_column_name,audit_column_val)",
      "  select (select {{audit_seq}} from jsharmony_meta),lower('%%%COL_NAME%%%'),OLD.%%%COL_NAME%%%",
      "  where (%%%nequal(\"OLD.%%%COL_NAME%%%\", \"NEW.%%%COL_NAME%%%\")%%%)\\;",
      ""
    ]
  },
  "log_audit_update_custom" : {
    "params": ["TABLE","ID","CONDITION","audit_ref_name","audit_ref_id","audit_subject","cust_id","item_id"],
    "sql": [
      "insert into {schema}_audit__tbl(audit_table_name,audit_table_id,audit_op,audit_tstmp,audit_ref_name,audit_ref_id,audit_subject,cust_id,item_id,audit_user)",
      "  select '%%%TABLE%%%',%%%ID%%%,'U',datetime('now','localtime'),%%%audit_ref_name%%%,%%%audit_ref_id%%%,%%%audit_subject%%%,%%%cust_id%%%,%%%item_id%%%,(select context from jsharmony_meta limit 1)",
      "  where exists(select * from jsharmony_meta where {{audit_seq}} is null) and (%%%CONDITION%%%)\\;",
      "update jsharmony_meta set {{audit_seq}} = (select audit_seq from {schema}_audit__tbl where rowid = last_insert_rowid())",
      "  where exists(select * from jsharmony_meta where {{audit_seq}} is null) and (%%%CONDITION%%%)\\;",
      ""
    ]
  },
  "log_audit_delete_mult" : {
    "params": ["TABLE","ID","COL_ARRAY","audit_ref_name","audit_ref_id","audit_subject","cust_id","item_id"],
    "exec": [
      "var rslt = '';",
      "if ((typeof COL_ARRAY === 'string' || COL_ARRAY instanceof String) && COL_ARRAY.length && COL_ARRAY.trim()[0]=='[') COL_ARRAY = JSON.parse(COL_ARRAY.trim());",
        "for(var i=0;i<COL_ARRAY.length;i++){",
      "  rslt += '%%%log_audit_delete('+JSON.stringify(TABLE)+','+JSON.stringify(ID)+','+JSON.stringify(COL_ARRAY[i])+','+JSON.stringify(audit_ref_name)+','+JSON.stringify(audit_ref_id)+','+JSON.stringify(audit_subject)+','+JSON.stringify(cust_id)+','+JSON.stringify(item_id)+')%%%\\r\\n';",
      "}",
      "return rslt;"
    ]
  },
  "log_audit_delete" : {
    "params": ["TABLE","ID","COL_NAME","audit_ref_name","audit_ref_id","audit_subject","cust_id","item_id"],
    "sql": [
      "insert into {schema}_audit__tbl(audit_table_name,audit_table_id,audit_op,audit_tstmp,audit_ref_name,audit_ref_id,audit_subject,cust_id,item_id,audit_user)",
      "  select ",
      "    '%%%TABLE%%%',%%%ID%%%,'D',datetime('now','localtime'),",
      "    (select audit_ref_name from {schema}_audit__tbl where audit_table_name='%%%TABLE%%%' and audit_table_id=%%%ID%%% and audit_op='I' order by audit_seq desc),",
      "    (select audit_ref_id from {schema}_audit__tbl where audit_table_name='%%%TABLE%%%' and audit_table_id=%%%ID%%% and audit_op='I' order by audit_seq desc),",
      "    (select audit_subject from {schema}_audit__tbl where audit_table_name='%%%TABLE%%%' and audit_table_id=%%%ID%%% and audit_op='I' order by audit_seq desc),",
      "    (select cust_id from {schema}_audit__tbl where audit_table_name='%%%TABLE%%%' and audit_table_id=%%%ID%%% and audit_op='I' order by audit_seq desc),",
      "    (select item_id from {schema}_audit__tbl where audit_table_name='%%%TABLE%%%' and audit_table_id=%%%ID%%% and audit_op='I' order by audit_seq desc),",
      "    (select context from jsharmony_meta limit 1)",
      "  where exists(select * from jsharmony_meta where {{audit_seq}} is null)\\;",
      "update jsharmony_meta set {{audit_seq}} = (select audit_seq from {schema}_audit__tbl where rowid = last_insert_rowid())",
      "  where exists(select * from jsharmony_meta where {{audit_seq}} is null)\\;",

      "insert into {schema}_audit_detail(audit_seq,audit_column_name,audit_column_val)",
      "  select (select {{audit_seq}} from jsharmony_meta),lower('%%%COL_NAME%%%'),OLD.%%%COL_NAME%%%\\;",
      ""
    ]
  },
  "{schema}.get_cust_id":{
    "params": ["tabn","tabid"],
    "sql": [
      "(select null)"
    ]
  },
  "{schema}.get_item_id":{
    "params": ["tabn","tabid"],
    "sql": [
      "(select null)"
    ]
  },
  "{schema}.my_cust_id":{
    "params": [],
    "sql": [
      //:if:client_portal:
      "(select {schema}_cust_user.cust_id from {schema}_cust_user where {schema}_cust_user.sys_user_id={schema}.my_cust_user())"
      //:else:
      "(select null)"
      //:endif:
    ]
  },
  "{schema}.check_scope_id":{
    "params": ["in_scope","in_scope_id","in_cust_id"],
    "sql": [
      "(case ",
      "  when %%%in_cust_id%%% is null then",
      "    (case %%%in_scope%%%",
      "      when 'U' then (select sys_user_id from jsharmony.sys_user where sys_user_id=%%%in_scope_id%%%)",
      "      when 'S' then 1",
      "      else null",
      "    end)",
      "  when %%%in_cust_id%%% = (case %%%in_scope%%%",
      "      when 'U' then null",
      "      else null",
      "    end) then %%%in_cust_id%%%",
      "  else null",
      "end)"
    ]
  },
  "{schema}.get_cust_name":{
    "params": ["col"],
    "sql": [
      "(select null)"
    ]
  },
  "{schema}.get_cust_name_ext":{
    "params": ["col"],
    "sql": [
      "(select null)"
    ]
  },
  "{schema}.get_item_name":{
    "params": ["col"],
    "sql": [
      "(select null)"
    ]
  },
  "{schema}.doc_ctgr_table":"{schema}_code2_doc_scope_doc_ctgr",
  "{schema}.my_db_user":{
    "params": [],
    "sql": [
      "(select context from jsharmony_meta)"
    ]
  },
  "{schema}.my_db_user_fmt":{
    "params": ["u"],
    "sql": [
      "(case substr(%%%u%%%,1,1)",
      //:if:client_portal:
      "  when 'S' then (select my_db_user_fmt_sname from (select sys_user_id my_db_user_fmt_spe_id,'S-'||sys_user_lname||', '||sys_user_fname as my_db_user_fmt_sname from {schema}.sys_user) my_db_user_fmt_stbl where my_db_user_fmt_spe_id=substr(%%%u%%%,2,1024))",
      "  when 'C' then (select my_db_user_fmt_cname from (select sys_user_id my_db_user_fmt_cust_user_id,'C-'||sys_user_lname||', '||sys_user_fname as my_db_user_fmt_cname from {schema}.cust_user) my_db_user_fmt_ctbl where my_db_user_fmt_cust_user_id=substr(%%%u%%%,2,1024))",
      //:else:
      "  when 'S' then (select my_db_user_fmt_sname from (select sys_user_id my_db_user_fmt_spe_id,''||sys_user_lname||', '||sys_user_fname as my_db_user_fmt_sname from {schema}.sys_user) my_db_user_fmt_stbl where my_db_user_fmt_spe_id=substr(%%%u%%%,2,1024))",
      //:endif:
      "  when 'U' then substr(%%%u%%%,2,2014)",
      "  else 'SYSTEM'",
      "end)"
    ]
  },
  "{schema}.my_cust_user":{
    "params": [],
    "sql": [
      "(select (case substr(context,1,1)",
      "  when 'C' then cast(substr(context,2,1024) as int)",
      "  else null",
      "end) from jsharmony_meta)"
    ]
  },
  "{schema}.get_sys_user_name":{
    "params": ["id"],
    "sql": [
      "(select get_sys_user_name_{schema}_sys_user_name from (select sys_user_lname||', '||sys_user_fname get_sys_user_name_{schema}_sys_user_name,sys_user_id get_sys_user_name_{schema}_sys_user_id from {schema}_sys_user) get_sys_user_name_{schema}_sys_user where get_sys_user_name_{schema}_sys_user_id = %%%id%%%)"
    ]
  },
  "{schema}.get_param_desc":{
    "params": ["in_param_process","in_param_attrib"],
    "sql": [
      "(select get_param_desc_{schema}_param_desc from (select param_desc get_param_desc_{schema}_param_desc, param_process get_param_desc_{schema}_param_process, param_attrib get_param_desc_{schema}_param_attrib from {schema}_param__tbl) get_param_desc_{schema}_param__tbl where get_param_desc_{schema}_param_process = %%%in_param_process%%% and get_param_desc_{schema}_param_attrib = %%%in_param_attrib%%%)"
    ]
  },
  "{schema}.get_cust_user_name":{
    "params": ["id"],
    "sql": [
      //:if:client_portal:
      "(select get_cust_user_name_{schema}_cust_user_name from (select sys_user_id get_cust_user_name_{schema}_cust_user_id, sys_user_lname||', '||sys_user_fname get_cust_user_name_{schema}_cust_user_name from {schema}_cust_user) get_cust_user_name_{schema}_cust_user where get_cust_user_name_{schema}_cust_user_id = %%%id%%%)"
      //:else:
      "(select null)"
      //:endif:
    ]
  },
  "{schema}.table_type":{
    "params": ["schema","TBL_NAME"],
    "sql": [
      "(select (SELECT case type when 'table' then 'BASE TABLE' else null end FROM sqlite_master where lower(name)=ifnull(%%%schema%%%||'_','')||lower(%%%TBL_NAME%%%)))"
    ]
  },
  "{schema}.log_audit_info":{
    "params": ["etstmp","eu","mtstmp","mu"],
    "sql": [
      "(select 'INFO'||char(13,10)||",
      "        '     Entered:  '||%%%etstmp%%%||'  '||{schema}.my_db_user_fmt(%%%eu%%%)||char(13,10)||",
      "        'Last Updated:  '||%%%mtstmp%%%||'  '||{schema}.my_db_user_fmt(%%%mu%%%)",
      ")"
    ]
  },
  "{schema}.my_sys_user_id":{
    "params": [],
    "sql": [
      "(case substr({schema}.my_db_user(),1,1)",
      "  when 'S' then cast(substr({schema}.my_db_user(),2,1024) as int)",
      "  else  null",
      "end)"
    ]
  },
  "{schema}.my_cust_user_id":{
    "params": [],
    "sql": [
      "(case substr({schema}.my_db_user(),1,1)",
      "  when 'C' then cast(substr({schema}.my_db_user(),2,1024) as int)",
      "  else  null",
      "end)"
    ]
  },
  "{schema}.my_now":{
    "params": [],
    "sql": "datetime('now','localtime')"
  },
  "{schema}.my_to_date":{
    "params": ["dt"],
    "sql": "date(%%%dt%%%)"
  },
  "{schema}.doc_filename":{
    "params": ["doc_id","doc_ext"],
    "sql": [
      "(cast(%%%doc_id%%% as text)||%%%doc_ext%%%)"
    ]
  },
  "{schema}.log_audit_done" : {
    "params": [],
    "sql": "    update jsharmony_meta set {{audit_seq}} = null",
  },
  "{schema}.log_audit_insert" : {
    "params": ["TABLE","ID","COL_NAME","audit_ref_name","audit_ref_id","audit_subject","cust_id","item_id",{"name":"SCHEMA","options":{"default":"{schema}"}}],
    "exec": [
      "var rslt = '';",
      "rslt += 'update jsharmony_meta set {{audit_seq}} = null\\\\;\\r\\n';",
      "function sqlescape(txt){ if(txt===null) return 'null'; return txt; };",
      "rslt += '{schema}.log_audit_insert_base('+sqlescape(TABLE)+','+sqlescape(ID)+','+sqlescape(COL_NAME)+','+sqlescape(audit_ref_name)+','+sqlescape(audit_ref_id)+','+sqlescape(audit_subject)+','+sqlescape(cust_id)+','+sqlescape(item_id)+','+sqlescape(SCHEMA)+')\\\\;\\r\\n';",
      "rslt += '{schema}.log_audit_done()\\r\\n';",
      "return rslt;"
    ]
  },
  "{schema}.log_audit_insert_base" : {
    "params": ["TABLE","ID","COL_NAME","audit_ref_name","audit_ref_id","audit_subject","cust_id","item_id",{"name":"SCHEMA","options":{"default":"{schema}"}}],
    "sql": [
      "insert into %%%SCHEMA%%%_audit__tbl(audit_table_name,audit_table_id,audit_op,audit_tstmp,audit_ref_name,audit_ref_id,audit_subject,cust_id,item_id,audit_user)\n",
      "  select %%%TABLE%%%,%%%ID%%%,'I',datetime('now','localtime'),%%%audit_ref_name%%%,%%%audit_ref_id%%%,%%%audit_subject%%%,%%%cust_id%%%,%%%item_id%%%,(select context from jsharmony_meta limit 1)\n",
      "  where exists(select * from jsharmony_meta where {{audit_seq}} is null)\\;\n",
      "update jsharmony_meta set {{audit_seq}} = (select audit_seq from %%%SCHEMA%%%_audit__tbl where rowid = last_insert_rowid())\n",
      "  where exists(select * from jsharmony_meta where {{audit_seq}} is null)"
    ]
  },
  "{schema}.log_audit_update_mult" : {
    "params": ["TABLE","ID","COL_ARRAY","audit_ref_name","audit_ref_id","audit_subject","cust_id","item_id",{"name":"SCHEMA","options":{"default":"{schema}"}}],
    "exec": [
      "var rslt = '';",
      "if ((typeof COL_ARRAY === 'string' || COL_ARRAY instanceof String) && COL_ARRAY.length && COL_ARRAY.trim()[0]=='[') COL_ARRAY = JSON.parse(COL_ARRAY.trim());",
      "function sqlescape(txt){ if(txt===null) return 'null'; return txt; };",
      "var stmts = [];",
      "for(var i=0;i<COL_ARRAY.length;i++){",
      "  stmts.push('{schema}.log_audit_update_base('+TABLE+','+ID+','+COL_ARRAY[i]+','+audit_ref_name+','+sqlescape(audit_ref_id)+','+sqlescape(audit_subject)+','+sqlescape(cust_id)+','+sqlescape(item_id)+','+sqlescape(SCHEMA)+')');",
      "}",
      "stmts.push('{schema}.log_audit_done()');",
      "rslt += stmts.join('\\\\;\\n');",
      "return rslt;"
    ]
  },
  "{schema}.log_audit_update" : {
    "params": ["TABLE","ID","COL_NAME","audit_ref_name","audit_ref_id","audit_subject","cust_id","item_id",{"name":"SCHEMA","options":{"default":"{schema}"}}],
    "exec": [
      "var rslt = '';",
      "function sqlescape(txt){ if(txt===null) return 'null'; return txt; };",
      "rslt += '{schema}.log_audit_update_base('+TABLE+','+ID+','+COL_NAME+','+audit_ref_name+','+sqlescape(audit_ref_id)+','+sqlescape(audit_subject)+','+sqlescape(cust_id)+','+sqlescape(item_id)+','+sqlescape(SCHEMA)+')\\\\;';",
      "rslt += '{schema}.log_audit_done()';",
      "return rslt;"
    ]
  },
  "{schema}.log_audit_update_base" : {
    "params": ["TABLE","ID","COL_NAME","audit_ref_name","audit_ref_id","audit_subject","cust_id","item_id",{"name":"SCHEMA","options":{"default":"{schema}"}}],
    "sql": [
      "insert into %%%SCHEMA%%%_audit__tbl(audit_table_name,audit_table_id,audit_op,audit_tstmp,audit_ref_name,audit_ref_id,audit_subject,cust_id,item_id,audit_user)",
      "  select %%%TABLE%%%,%%%ID%%%,'U',datetime('now','localtime'),%%%audit_ref_name%%%,%%%audit_ref_id%%%,%%%audit_subject%%%,%%%cust_id%%%,%%%item_id%%%,(select context from jsharmony_meta limit 1)",
      "  where exists(select * from jsharmony_meta where {{audit_seq}} is null) and (%%%nequal(\"OLD.%%%COL_NAME%%%\", \"NEW.%%%COL_NAME%%%\")%%%)\\;",
      "update jsharmony_meta set {{audit_seq}} = (select audit_seq from %%%SCHEMA%%%_audit__tbl where rowid = last_insert_rowid())",
      "  where exists(select * from jsharmony_meta where {{audit_seq}} is null) and (%%%nequal(\"OLD.%%%COL_NAME%%%\", \"NEW.%%%COL_NAME%%%\")%%%)\\;",
      "insert into %%%SCHEMA%%%_audit_detail(audit_seq,audit_column_name,audit_column_val)",
      "  select (select {{audit_seq}} from jsharmony_meta),lower('%%%COL_NAME%%%'),OLD.%%%COL_NAME%%%",
      "  where (%%%nequal(\"OLD.%%%COL_NAME%%%\", \"NEW.%%%COL_NAME%%%\")%%%)",
      ""
    ]
  },
  "{schema}.log_audit_update_custom" : {
    "params": ["TABLE","ID","CONDITION","audit_ref_name","audit_ref_id","audit_subject","cust_id","item_id",{"name":"SCHEMA","options":{"default":"{schema}"}}],
    "exec": [
      "var rslt = '';",
      "function sqlescape(txt){ if(txt===null) return 'null'; return txt; };",
      "rslt += '{schema}.log_audit_update_custom_base('+TABLE+','+ID+','+sqlescape(CONDITION)+','+audit_ref_name+','+sqlescape(audit_ref_id)+','+sqlescape(audit_subject)+','+sqlescape(cust_id)+','+sqlescape(item_id)+','+sqlescape(SCHEMA)+')';",
      "return rslt;"
    ]
  },
  "{schema}.log_audit_update_custom_base" : {
    "params": ["TABLE","ID","CONDITION","audit_ref_name","audit_ref_id","audit_subject","cust_id","item_id",{"name":"SCHEMA","options":{"default":"{schema}"}}],
    "sql": [
      "insert into %%%SCHEMA%%%_audit__tbl(audit_table_name,audit_table_id,audit_op,audit_tstmp,audit_ref_name,audit_ref_id,audit_subject,cust_id,item_id,audit_user)",
      "  select %%%TABLE%%%,%%%ID%%%,'U',datetime('now','localtime'),%%%audit_ref_name%%%,%%%audit_ref_id%%%,%%%audit_subject%%%,%%%cust_id%%%,%%%item_id%%%,(select context from jsharmony_meta limit 1)",
      "  where exists(select * from jsharmony_meta where {{audit_seq}} is null) and (%%%CONDITION%%%)\\;",
      "update jsharmony_meta set {{audit_seq}} = (select audit_seq from %%%SCHEMA%%%_audit__tbl where rowid = last_insert_rowid())",
      "  where exists(select * from jsharmony_meta where {{audit_seq}} is null) and (%%%CONDITION%%%)",
      ""
    ]
  },
  "{schema}.log_audit_delete_mult" : {
    "params": ["TABLE","ID","COL_ARRAY",{"name":"SCHEMA","options":{"default":"{schema}"}}],
    "exec": [
      "var rslt = '';",
      "if ((typeof COL_ARRAY === 'string' || COL_ARRAY instanceof String) && COL_ARRAY.length && COL_ARRAY.trim()[0]=='[') COL_ARRAY = JSON.parse(COL_ARRAY.trim());",
      "function sqlescape(txt){ if(txt===null) return 'null'; return txt; };",
      "var stmts = [];",
      "for(var i=0;i<COL_ARRAY.length;i++){",
      "  stmts.push('{schema}.log_audit_delete_base('+TABLE+','+ID+','+COL_ARRAY[i]+','+sqlescape(SCHEMA)+')');",
      "}",
      "stmts.push('{schema}.log_audit_done()');",
      "rslt += stmts.join('\\\\;\\r\\n');",
      "return rslt;"
    ]
  },
  "{schema}.log_audit_delete" : {
    "params": ["TABLE","ID","COL_NAME",{"name":"SCHEMA","options":{"default":"{schema}"}}],
    "exec": [
      "var rslt = '';",
      "function sqlescape(txt){ if(txt===null) return 'null'; return txt; };",
      "rslt += '{schema}.log_audit_delete_base('+TABLE+','+ID+','+COL_NAME+','+sqlescape(SCHEMA)+')\\\\;';",
      "rslt += '{schema}.log_audit_done()\\r\\n';",
      "return rslt;"
    ]
  },
  "{schema}.log_audit_delete_base" : {
    "params": ["TABLE","ID","COL_NAME",{"name":"SCHEMA","options":{"default":"{schema}"}}],
    "sql": [
      "insert into %%%SCHEMA%%%_audit__tbl(audit_table_name,audit_table_id,audit_op,audit_tstmp,audit_ref_name,audit_ref_id,audit_subject,cust_id,item_id,audit_user)",
      "  select ",
      "    %%%TABLE%%%,%%%ID%%%,'D',datetime('now','localtime'),",
      "    (select audit_ref_name from %%%SCHEMA%%%_audit__tbl where audit_table_name=%%%TABLE%%% and audit_table_id=%%%ID%%% and audit_op='I' order by audit_seq desc),",
      "    (select audit_ref_id from %%%SCHEMA%%%_audit__tbl where audit_table_name=%%%TABLE%%% and audit_table_id=%%%ID%%% and audit_op='I' order by audit_seq desc),",
      "    (select audit_subject from %%%SCHEMA%%%_audit__tbl where audit_table_name=%%%TABLE%%% and audit_table_id=%%%ID%%% and audit_op='I' order by audit_seq desc),",
      "    (select cust_id from %%%SCHEMA%%%_audit__tbl where audit_table_name=%%%TABLE%%% and audit_table_id=%%%ID%%% and audit_op='I' order by audit_seq desc),",
      "    (select item_id from %%%SCHEMA%%%_audit__tbl where audit_table_name=%%%TABLE%%% and audit_table_id=%%%ID%%% and audit_op='I' order by audit_seq desc),",
      "    (select context from jsharmony_meta limit 1)",
      "  where exists(select * from jsharmony_meta where {{audit_seq}} is null)\\;",
      "update jsharmony_meta set {{audit_seq}} = (select audit_seq from %%%SCHEMA%%%_audit__tbl where rowid = last_insert_rowid())",
      "  where exists(select * from jsharmony_meta where {{audit_seq}} is null)\\;",

      "insert into %%%SCHEMA%%%_audit_detail(audit_seq,audit_column_name,audit_column_val)",
      "  select (select {{audit_seq}} from jsharmony_meta),lower('%%%COL_NAME%%%'),OLD.%%%COL_NAME%%%",
      ""
    ]
  },
  "{schema}.log_audit_other" : {
    "params": ["TABLE","ID","CONDITION","COL_NAME","VALUE","audit_ref_name","audit_ref_id","audit_subject","cust_id","item_id",{"name":"SCHEMA","options":{"default":"{schema}"}}],
    "exec": [
      "var rslt = '';",
      "function sqlescape(txt){ if(txt===null) return 'null'; return txt; };",
      "rslt += '{schema}.log_audit_other_base('+TABLE+','+ID+','+sqlescape(CONDITION)+','+COL_NAME+','+VALUE+','+audit_ref_name+','+sqlescape(audit_ref_id)+','+sqlescape(audit_subject)+','+sqlescape(cust_id)+','+sqlescape(item_id)+','+sqlescape(SCHEMA)+')';",
      "return rslt;"
    ]
  },
  "{schema}.log_audit_other_base" : {
    "params": ["TABLE","ID","CONDITION","COL_NAME","VALUE","audit_ref_name","audit_ref_id","audit_subject","cust_id","item_id",{"name":"SCHEMA","options":{"default":"{schema}"}}],
    "sql": [
      "insert into %%%SCHEMA%%%_audit__tbl(audit_table_name,audit_table_id,audit_op,audit_tstmp,audit_ref_name,audit_ref_id,audit_subject,cust_id,item_id,audit_user)",
      "  select %%%TABLE%%%,%%%ID%%%,'O',datetime('now','localtime'),%%%audit_ref_name%%%,%%%audit_ref_id%%%,%%%audit_subject%%%,%%%cust_id%%%,%%%item_id%%%,(select context from jsharmony_meta limit 1)",
      "  where exists(select * from jsharmony_meta where {{audit_seq}} is null) and (%%%CONDITION%%%);",

      "update jsharmony_meta set {{audit_seq}} = (select audit_seq from %%%SCHEMA%%%_audit__tbl where rowid = last_insert_rowid())",
      "  where exists(select * from jsharmony_meta where {{audit_seq}} is null) and (%%%CONDITION%%%);",

      "insert into %%%SCHEMA%%%_audit_detail(audit_seq,audit_column_name,audit_column_val)",
      "  select (select {{audit_seq}} from jsharmony_meta),lower(%%%COL_NAME%%%),%%%VALUE%%%",
      "  where (%%%CONDITION%%%)"
    ]
  },
  "{schema}.audit_history" : {
    "params": ["TABLE","AUDIT_TABLE_NAME","ID","COL_ARRAY",{"name":"SCHEMA","options":{"default":"{schema}"}}],
    "exec": [
      "var rslt = '';",
      "if ((typeof COL_ARRAY === 'string' || COL_ARRAY instanceof String) && COL_ARRAY.length && COL_ARRAY.trim()[0]=='[') COL_ARRAY = JSON.parse(COL_ARRAY.trim());",
      "function sqlescape(txt){ if(txt===null) return 'null'; return txt; };",
      "var rslt = 'select audit_seq, audit_op, audit_tstmp, audit_user, '+ID;",
      "for(var i=0;i<COL_ARRAY.length;i++){",
      "  rslt += ',$ifnull((select $topn(1, $ifnull(audit_column_val,\\'\\') from '+SCHEMA+'.audit_detail inner join '+SCHEMA+'.audit__tbl audit2 on audit2.audit_seq = audit_detail.audit_seq and audit2.audit_table_name=audit__tbl.audit_table_name and audit2.audit_table_id=audit__tbl.audit_table_id where audit_detail.audit_seq > audit__tbl.audit_seq and audit_column_name=\\''+COL_ARRAY[i]+'\\' order by audit_detail.audit_seq)), '+COL_ARRAY[i]+') '+COL_ARRAY[i];",
      "}",
      "rslt += ' from '+TABLE;",
      "rslt += ' inner join '+SCHEMA+'.audit__tbl on audit__tbl.audit_table_name = '+AUDIT_TABLE_NAME+' and audit__tbl.audit_table_id = '+ID;",
      "return rslt;"
    ]
  },
  "{schema}.audit_listing" : {
    "params": ["TABLE","AUDIT_TABLE_NAME","ID","COL_ARRAY",{"name":"SCHEMA","options":{"default":"{schema}"}}],
    "exec": [
      "var rslt = '';",
      "if ((typeof COL_ARRAY === 'string' || COL_ARRAY instanceof String) && COL_ARRAY.length && COL_ARRAY.trim()[0]=='[') COL_ARRAY = JSON.parse(COL_ARRAY.trim());",
      "function sqlescape(txt){ if(txt===null) return 'null'; return txt; };",
      "var rslt = 'select audit_seq, audit_op, audit_tstmp, audit_user, audit_ref_name, audit_ref_id, audit_subject, cust_id, item_id, audit_table_id '+ID;",
      "for(var i=0;i<COL_ARRAY.length;i++){",
      "  rslt += ',$ifnull((select $topn(1, $ifnull(audit_column_val,\\'\\') from '+SCHEMA+'.audit_detail inner join '+SCHEMA+'.audit__tbl audit2 on audit2.audit_seq = audit_detail.audit_seq and audit2.audit_table_name=audit__tbl.audit_table_name and audit2.audit_table_id=audit__tbl.audit_table_id where audit_detail.audit_seq > audit__tbl.audit_seq and audit_column_name=\\''+COL_ARRAY[i]+'\\' order by audit_detail.audit_seq)), '+COL_ARRAY[i]+') '+COL_ARRAY[i];",
      "}",
      "rslt += ' from '+SCHEMA+'.audit__tbl';",
      "rslt += ' left outer join '+TABLE+' on '+TABLE+'.'+ID+'=audit__tbl.audit_table_id';",
      "rslt += ' where audit__tbl.audit_table_name = '+AUDIT_TABLE_NAME;",
      "return rslt;"
    ]
  },
}