220 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			JSON
		
	
	
	
	
	
			
		
		
	
	
			220 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			JSON
		
	
	
	
	
	
| {
 | |
|     "header": {
 | |
|         "version": 1,
 | |
|         "type": "record",
 | |
|         "approw-key": "WAREHOUSE_TEMPLATE"
 | |
|     },
 | |
|     "body": {
 | |
|         "record1": {
 | |
|             "<1>": "function WP_{procname}(Instruction, Handle, Info)",
 | |
|             "<2>": "",
 | |
|             "<3>": "*****************************************************************************",
 | |
|             "<4>": "*",
 | |
|             "<5>": "* Name       :  WP_{procname}",
 | |
|             "<6>": "* Description:  Warehouse Procedure",
 | |
|             "<7>": "*",
 | |
|             "<8>": "* LH Table   :  {table}",
 | |
|             "<9>": "{datasetcomment}",
 | |
|             "<10>": "{sqltablecomment}",
 | |
|             "<11>": "*",
 | |
|             "<12>": "* History (Date, Initials, Notes)",
 | |
|             "<13>": "*   {date}  cwp  Generated by the Create Warehouse Procedure wizard.",
 | |
|             "<14>": "*",
 | |
|             "<15>": "*****************************************************************************",
 | |
|             "<16>": "",
 | |
|             "<17>": "declare function SQLExp_Select",
 | |
|             "<18>": "",
 | |
|             "<19>": "$insert Logical",
 | |
|             "<20>": "$insert DS_Equates",
 | |
|             "<21>": "$insert XO_Equates",
 | |
|             "<22>": "",
 | |
|             "<23>": "equ CRLF$ to \\0D0A\\",
 | |
|             "<24>": "",
 | |
|             "<25>": "******",
 | |
|             "<26>": "* Main",
 | |
|             "<27>": "******",
 | |
|             "<28>": "  Ret = TRUE$",
 | |
|             "<29>": "  on Instruction gosub CreateTables, ClearTables, DropTables, ProcessInit, ProcessRecord, ProcessTerm",
 | |
|             "<30>": "  return Ret",
 | |
|             "<31>": "",
 | |
|             "<32>": "",
 | |
|             "<33>": "*******************",
 | |
|             "<34>": "* Create SQL Tables",
 | |
|             "<35>": "*******************",
 | |
|             "<36>": "* Instruction [in ] - 1",
 | |
|             "<37>": "* Handle      [in ] - Query Handle (hQry)",
 | |
|             "<38>": "* Ret         [out] - TRUE$ on success, FALSE$ otherwise",
 | |
|             "<39>": "CreateTables:",
 | |
|             "<40>": "{createscript}",
 | |
|             "<41>": "return",
 | |
|             "<42>": "",
 | |
|             "<43>": "",
 | |
|             "<44>": "******************",
 | |
|             "<45>": "* Clear SQL Tables",
 | |
|             "<46>": "******************",
 | |
|             "<47>": "* Instruction [in ] - 2",
 | |
|             "<48>": "* Handle      [in ] - Query handle (hQry)",
 | |
|             "<49>": "* Ret         [out] - TRUE$ on success, FALSE$ otherwise",
 | |
|             "<50>": "ClearTables:",
 | |
|             "<51>": "{clearscript}",
 | |
|             "<52>": "return",
 | |
|             "<53>": "",
 | |
|             "<54>": "",
 | |
|             "<55>": "*****************",
 | |
|             "<56>": "* Drop SQL Tables",
 | |
|             "<57>": "*****************",
 | |
|             "<58>": "* Instruction [in ] - 3",
 | |
|             "<59>": "* Handle      [in ] - Query handle (hQry)",
 | |
|             "<60>": "* Ret         [out] - TRUE$ on success, FALSE$ otherwise",
 | |
|             "<61>": "DropTables:",
 | |
|             "<62>": "{dropscript}",
 | |
|             "<63>": "return",
 | |
|             "<64>": "",
 | |
|             "<65>": "",
 | |
|             "<66>": "**********************************",
 | |
|             "<67>": "* Initialize Warehousing Procedure",
 | |
|             "<68>": "**********************************",
 | |
|             "<69>": "* Instruction [in ] - 4",
 | |
|             "<70>": "* Handle      [in ] - Connection handle (hXO)",
 | |
|             "<71>": "*             [out] - @fm-delimited DataSet handles (hDS)",
 | |
|             "<72>": "* Info        [in ] - Requested warehouse type (e.g. FULL, UPDATES)",
 | |
|             "<73>": "*             [out] - LH table name",
 | |
|             "<74>": "* cursor #0   [out] - A select list of keys to warehouse",
 | |
|             "<75>": "* @reccount   [out] - Number of keys in the select list",
 | |
|             "<76>": "* Ret         [out] - TRUE$ on success, FALSE$ otherwise",
 | |
|             "<77>": "ProcessInit:",
 | |
|             "<78>": "  Table      = \"{table}\"",
 | |
|             "<79>": "{datasetnames}",
 | |
|             "<80>": "  DSHandles  = \"\"",
 | |
|             "<81>": "",
 | |
|             "<82>": " * the SQLExp_Select function selects the LH records to warehouse;",
 | |
|             "<83>": " * by encapsulating this functionality in a separate procedure,",
 | |
|             "<84>": " * addition warehouse types can be added without requiring changes",
 | |
|             "<85>": " * to individual Warehouse Procedures",
 | |
|             "<86>": "  clearselect 0",
 | |
|             "<87>": "  Ret = SQLExp_Select(Table, Info)",
 | |
|             "<88>": "",
 | |
|             "<89>": "  if Ret then",
 | |
|             "<90>": "   * create DataSets",
 | |
|             "<91>": "    Count = count(DSNames, @fm) + (DSNames # \"\")",
 | |
|             "<92>": "    for i = 1 to Count",
 | |
|             "<93>": "      hDS = DSInstance(DSNames<i>, Handle)",
 | |
|             "<94>": "      if hDS else",
 | |
|             "<95>": "        Ret = FALSE$",
 | |
|             "<96>": "      end",
 | |
|             "<97>": "    while Ret",
 | |
|             "<98>": "      DSHandles<i> = hDS",
 | |
|             "<99>": "    next i",
 | |
|             "<100>": "",
 | |
|             "<101>": "   * if one DataSet failed creation, destroy all DataSets",
 | |
|             "<102>": "    if Ret else",
 | |
|             "<103>": "      for i = 1 to Count",
 | |
|             "<104>": "        hDS = DSHandles<i>",
 | |
|             "<105>": "        if hDS then",
 | |
|             "<106>": "          DSMethod(hDS, DS_DESTROY$)",
 | |
|             "<107>": "          DSHandles<i> = 0",
 | |
|             "<108>": "        end",
 | |
|             "<109>": "      next i",
 | |
|             "<110>": "    end",
 | |
|             "<111>": "  end",
 | |
|             "<112>": "",
 | |
|             "<113>": " * return DataSet handles in Handle parameter",
 | |
|             "<114>": "  Handle = DSHandles",
 | |
|             "<115>": "",
 | |
|             "<116>": " * return LH table name in Info parameter",
 | |
|             "<117>": "  Info = Table",
 | |
|             "<118>": "return",
 | |
|             "<119>": "",
 | |
|             "<120>": "",
 | |
|             "<121>": "************************",
 | |
|             "<122>": "* Warehouse an LH Record",
 | |
|             "<123>": "************************",
 | |
|             "<124>": "* Instruction [in ] - 5",
 | |
|             "<125>": "* Handle      [in ] - @fm-delimited DataSet handles (hDS)",
 | |
|             "<126>": "* Info        [in ] - if TRUE$, the Warehouse Procedure must first remove",
 | |
|             "<127>": "*                     any existing data from the warehouse which corresponds",
 | |
|             "<128>": "*                     to this record",
 | |
|             "<129>": "* @id         [in ] - the ID of the LH record",
 | |
|             "<130>": "* @record     [in ] - the LH record",
 | |
|             "<131>": "* @mv         [in ] - zero (all)",
 | |
|             "<132>": "* @dict       [in ] - the table's dictionary file handle",
 | |
|             "<133>": "* Ret         [out] - TRUE$ on success, FALSE$ otherwise",
 | |
|             "<134>": "ProcessRecord:",
 | |
|             "<135>": " * calculate \"base\" key fields",
 | |
|             "<136>": "{calcbasefields}",
 | |
|             "<137>": "",
 | |
|             "<138>": " * delete existing data",
 | |
|             "<139>": "  if Info then",
 | |
|             "<140>": "   * set DataSet arguments (the base key fields)",
 | |
|             "<141>": "    Args      = \"\"",
 | |
|             "<142>": "{argnames}",
 | |
|             "<143>": "",
 | |
|             "<144>": "    Vals      = \"\"",
 | |
|             "<145>": "{argvalues}",
 | |
|             "<146>": "",
 | |
|             "<147>": "    Count = count(Handle, @fm) + (Handle # \"\")",
 | |
|             "<148>": "    for i = 1 to Count",
 | |
|             "<149>": "      Ret = DSSetProperty(Handle<i>, DS_ARG$, Vals, Args)",
 | |
|             "<150>": "    next i",
 | |
|             "<151>": "",
 | |
|             "<152>": "   * execute DataSets",
 | |
|             "<153>": "    for i = 1 to Count",
 | |
|             "<154>": "      Ret = DSMethod(Handle<i>, DS_EXECUTE$)",
 | |
|             "<155>": "    while Ret",
 | |
|             "<156>": "    next i",
 | |
|             "<157>": "",
 | |
|             "<158>": "   * delete all rows from DataSets",
 | |
|             "<159>": "    if Ret then",
 | |
|             "<160>": "      for i = 1 to Count",
 | |
|             "<161>": "        DSGetProperty(Handle<i>, DS_ROWCOUNT$, RowCount)",
 | |
|             "<162>": "        DSSetProperty(Handle<i>, DS_ROWID$, 1)",
 | |
|             "<163>": "        for iRow = 1 to RowCount",
 | |
|             "<164>": "          DSMethod(Handle<i>, DS_DELETE$)",
 | |
|             "<165>": "        next iRow",
 | |
|             "<166>": "      next i",
 | |
|             "<167>": "    end",
 | |
|             "<168>": "  end",
 | |
|             "<169>": "",
 | |
|             "<170>": " * insert new data",
 | |
|             "<171>": "  if Ret and len(@record) then",
 | |
|             "<172>": "   * calculate all used fields",
 | |
|             "<173>": "{calcotherfields}",
 | |
|             "<174>": "",
 | |
|             "<175>": "{filldatasets}",
 | |
|             "<176>": "  end",
 | |
|             "<177>": "return",
 | |
|             "<178>": "",
 | |
|             "<179>": "",
 | |
|             "<180>": "*********************************",
 | |
|             "<181>": "* Terminate Warehousing Procedure",
 | |
|             "<182>": "*********************************",
 | |
|             "<183>": "* Instruction [in ] - 6",
 | |
|             "<184>": "* Handle      [in ] - @fm-delimited DataSet handles (hDS)",
 | |
|             "<185>": "* Ret         [out] - TRUE$ on success, FALSE$ otherwise",
 | |
|             "<186>": "ProcessTerm:",
 | |
|             "<187>": " * destroy all DataSets",
 | |
|             "<188>": "  Count = count(Handle, @fm) + (Handle # \"\")",
 | |
|             "<189>": "  for i = 1 to Count",
 | |
|             "<190>": "    hDS = Handle<i>",
 | |
|             "<191>": "    if hDS then",
 | |
|             "<192>": "      DSMethod(hDS, DS_DESTROY$)",
 | |
|             "<193>": "      Handle<i> = 0",
 | |
|             "<194>": "    end",
 | |
|             "<195>": "  next i",
 | |
|             "<196>": "return",
 | |
|             "<197>": "",
 | |
|             "<198>": "",
 | |
|             "<199>": "**********************",
 | |
|             "<200>": "* Execute a SQL Script",
 | |
|             "<201>": "**********************",
 | |
|             "<202>": "* Handle      [in ] - Query Handle (hQry)",
 | |
|             "<203>": "* Script      [in ] - SQL Script",
 | |
|             "<204>": "* Ret         [out] - Cumulative result:  Assumed to start as TRUE$, failure sets to FALSE$, never reset to TRUE$",
 | |
|             "<205>": "ExecuteScript:",
 | |
|             "<206>": "  Ret = (Ret and QryMethod(Handle, QRY_EXECUTE$, Script))",
 | |
|             "<207>": "  QryMethod(Handle, QRY_CANCEL$)",
 | |
|             "<208>": "return",
 | |
|             "<209>": ""
 | |
|         }
 | |
|     }
 | |
| } |