.ad 8
.bm 8
.fm 4
.bt $Copyright (c) 2000-2004 SAP AG$$Page %$
.tm 12
.hm 6
.hs 3
.tt 1 $SQL$Project Distributed Database System$VBD21$
.tt 2 $$$
.tt 3 $JuergenP$BD-tdata-cache$2000-08-18$
***********************************************************
.nf
 
 
    ========== licence begin  GPL
    Copyright (c) 2000-2004 SAP AG
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
    as published by the Free Software Foundation; either version 2
    of the License, or (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    ========== licence end
 
.fo
.nf
.sp
Module  : task_temp_data_cache
=========
.sp
Purpose : task bound cache to access local temp data
.CM *-END-* purpose -------------------------------------
.sp
.cp 3
Define  :
 
        PROCEDURE
              b21init_temp_cache (pid  : tsp00_TaskId;
                    buffers            : tsp00_Int4;
                    allocate_monitor   : boolean;
                    is_control_session : boolean;
                    VAR temp_cache_ptr : tgg00_TempDataCachePtr;
                    VAR err            : tgg00_BasisError);
 
        PROCEDURE
              b21m_cmdid (temp_cache_ptr : tgg00_TempDataCachePtr;
                    VAR cmdid : tgg00_Surrogate);
 
        PROCEDURE
              b21m_copy_result (temp_cache_ptr : tgg00_TempDataCachePtr;
                    VAR copy_result : tsp00_C3);
 
        PROCEDURE
              b21m_date_time (VAR curr_date : tsp00_Date;
                    VAR curr_time : tsp00_Time);
 
        PROCEDURE
              b21m_init_monitor_rec;
 
        FUNCTION
              b21m_is_select (temp_cache_ptr : tgg00_TempDataCachePtr) : boolean;
 
        FUNCTION
              b21m_fetch_calls (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
        FUNCTION
              b21m_kb_calls (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
        FUNCTION
              b21m_microsec (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
        FUNCTION
              b21m_obj_hist_read_count (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
        PROCEDURE
              b21m_parse_again (temp_cache_ptr : tgg00_TempDataCachePtr;
                    VAR parse_again : tsp00_C3);
 
        PROCEDURE
              b21m_parseid (temp_cache_ptr : tgg00_TempDataCachePtr;
                    VAR parseid       : tsp00_C12;
                    VAR masterparseid : tsp00_C12);
 
        FUNCTION
              b21m_phys_ios (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
        PROCEDURE
              b21m_reset_monitor (temp_cache_ptr : tgg00_TempDataCachePtr;
                    reset_sum : boolean);
 
        PROCEDURE
              b21m_roots (temp_cache_ptr : tgg00_TempDataCachePtr;
                    VAR cnt          : tsp00_Int4;
                    VAR rootlist_ptr : tgg00_RootListPtr);
 
        FUNCTION
              b21m_rows_fetched (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
        FUNCTION
              b21m_rows_qual (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
        FUNCTION
              b21m_rows_read (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
        FUNCTION
              b21m_sec (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
        PROCEDURE
              b21m_strat (temp_cache_ptr : tgg00_TempDataCachePtr;
                    VAR strategy : tsp00_C40);
 
        FUNCTION
              b21m_suspends (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
        PROCEDURE
              b21m_termid (temp_cache_ptr : tgg00_TempDataCachePtr;
                    VAR termid : tsp00_TermId);
 
        PROCEDURE
              b21m_username (temp_cache_ptr : tgg00_TempDataCachePtr;
                    VAR username : tsp00_KnlIdentifier);
 
        PROCEDURE
              b21m_values (temp_cache_ptr : tgg00_TempDataCachePtr;
                    VAR values_addr : tsp00_MoveObjPtr;
                    VAR values_len  : tsp00_Int4);
 
        FUNCTION
              b21m_virt_reads (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
        FUNCTION
              b21m_waits (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
        PROCEDURE
              b21mp_cmdid_put (temp_cache_ptr : tgg00_TempDataCachePtr;
                    VAR cmdid : tgg00_Surrogate);
 
        PROCEDURE
              b21mp_copy_result_put (temp_cache_ptr : tgg00_TempDataCachePtr;
                    copy_result : tsp00_C3);
 
        PROCEDURE
              b21mp_fetch_calls_put (temp_cache_ptr : tgg00_TempDataCachePtr);
 
        PROCEDURE
              b21mp_is_select (temp_cache_ptr : tgg00_TempDataCachePtr;
                    is_select : boolean);
 
        PROCEDURE
              b21mp_kb_calls_put (temp_cache_ptr : tgg00_TempDataCachePtr);
 
        PROCEDURE
              b21mp_microsec_put (temp_cache_ptr : tgg00_TempDataCachePtr;
                    microsec : tsp00_Int4);
 
        PROCEDURE
              b21mp_new_sum_put (temp_cache_ptr : tgg00_TempDataCachePtr);
 
        PROCEDURE
              b21mp_obj_hist_read_count_put (temp_cache_ptr : tgg00_TempDataCachePtr;
                    read_count : tsp00_Int4);
 
        PROCEDURE
              b21mp_parse_again_put (temp_cache_ptr : tgg00_TempDataCachePtr;
                    parse_again : tsp00_C3);
 
        PROCEDURE
              b21mp_parseid_put (temp_cache_ptr : tgg00_TempDataCachePtr;
                    VAR parseid       : tsp00_C12;
                    VAR masterparseid : tsp00_C12);
 
        PROCEDURE
              b21mp_phys_ios_put (temp_cache_ptr : tgg00_TempDataCachePtr;
                    phys_ios : tsp00_Int4);
 
        PROCEDURE
              b21mp_root_put (temp_cache_ptr : tgg00_TempDataCachePtr;
                    root : tsp00_PageNo);
 
        PROCEDURE
              b21mp_rows_fetched_put (temp_cache_ptr : tgg00_TempDataCachePtr;
                    rows_fetched : tsp00_Int4);
 
        PROCEDURE
              b21mp_rows_qual_put (temp_cache_ptr : tgg00_TempDataCachePtr;
                    rows_qual : tsp00_Int4);
 
        PROCEDURE
              b21mp_rows_read_put (temp_cache_ptr : tgg00_TempDataCachePtr;
                    rows_read : tsp00_Int4);
 
        PROCEDURE
              b21mp_sec_put (temp_cache_ptr : tgg00_TempDataCachePtr;
                    sec : tsp00_Int4);
 
        PROCEDURE
              b21mp_strat_put (temp_cache_ptr : tgg00_TempDataCachePtr;
                    VAR strategy : tsp00_C40;
                    len : tsp00_Int4);
 
        PROCEDURE
              b21mp_suspends_put (temp_cache_ptr : tgg00_TempDataCachePtr;
                    suspends : tsp00_Int4);
 
        PROCEDURE
              b21mp_termid_put (temp_cache_ptr : tgg00_TempDataCachePtr;
                    VAR termid : tsp00_TermId);
 
        PROCEDURE
              b21mp_username_put (temp_cache_ptr : tgg00_TempDataCachePtr;
                    VAR username : tsp00_KnlIdentifier);
 
        PROCEDURE
              b21mp_value_put (temp_cache_ptr : tgg00_TempDataCachePtr;
                    curr_value_addr : tsp00_MoveObjPtr;
                    curr_value_len  : tsp00_Int4);
 
        PROCEDURE
              b21mp_virt_reads_put (temp_cache_ptr : tgg00_TempDataCachePtr;
                    virt_reads : tsp00_Int4);
 
        PROCEDURE
              b21mp_waits_put (temp_cache_ptr : tgg00_TempDataCachePtr;
                    waits : tsp00_Int4);
 
        PROCEDURE
              b21lcl_tfdir_root (temp_cache_ptr : tgg00_TempDataCachePtr;
                    is_set  : boolean;
                    VAR pno : tsp00_PageNo);
 
        PROCEDURE
              b21temp_cache_release (pid : tsp00_TaskId;
                    temp_cache_ptr : tgg00_TempDataCachePtr);
 
        FUNCTION
              b21tmp_cache_size (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
.CM *-END-* define --------------------------------------
.sp;.cp 3
Use     :
 
        FROM
              Configuration_Parameter : VGG01;
 
        FUNCTION
              g01packet_size : tsp00_Int4;
 
      ------------------------------ 
 
        FROM
              RTE_kernel : VEN101;
 
        PROCEDURE
              vdattime (VAR date : tsp00_Date;
                    VAR time     : tsp00_Time);
 
        PROCEDURE
              vmalloc (length : tsp00_Int4;
                    VAR p     : tsp00_ObjAddr;
                    VAR ok    : boolean);
 
        PROCEDURE
              vmfree  (p : tsp00_ObjAddr);
 
      ------------------------------ 
 
        FROM
              Kernel_move_and_fill : VGG101;
 
        PROCEDURE
              SAPDB_PascalForcedFill (
                    size        : tsp00_Int4;
                    m           : tsp00_MoveObjPtr;
                    pos         : tsp00_Int4;
                    len         : tsp00_Int4;
                    fillchar    : char);
 
        PROCEDURE
              SAPDB_PascalForcedMove (
                    source_upb  : tsp00_Int4;
                    destin_upb  : tsp00_Int4;
                    source      : tsp00_MoveObjPtr;
                    source_pos  : tsp00_Int4;
                    destin      : tsp00_MoveObjPtr;
                    destin_pos  : tsp00_Int4;
                    length      : tsp00_Int4);
 
        PROCEDURE
              g10mv (
                    mod_id      : tsp00_C6;
                    mod_num     : tsp00_Int4;
                    source_upb  : tsp00_Int4;
                    dest_upb    : tsp00_Int4;
                    source      : tsp00_MoveObjPtr;
                    src_pos     : tsp00_Int4;
                    destin      : tsp00_MoveObjPtr;
                    dest_pos    : tsp00_Int4;
                    length      : tsp00_Int4;
                    VAR e       : tgg00_BasisError);
 
        PROCEDURE
              s10mv (
                    source_upb  : tsp00_Int4;
                    destin_upb  : tsp00_Int4;
                    source      : tsp00_MoveObjPtr;
                    source_pos  : tsp00_Int4;
                    destin      : tsp00_MoveObjPtr;
                    destin_pos  : tsp00_Int4;
                    length      : tsp00_Int4);
&       ifdef TRACE
 
      ------------------------------ 
 
        FROM
              Test_Procedures : VTA01;
 
        PROCEDURE
              t01int4 (layer : tgg00_Debug;
                    nam : tsp00_Sname;
                    int : tsp00_Int4);
&       endif
 
.CM *-END-* use -----------------------------------------
.sp;.cp 3
Synonym :
 
        PROCEDURE
              b15dbwrite_dbpage;
 
              tbd_univ_ptr tbd_nodeptr
 
.CM *-END-* synonym -------------------------------------
.sp;.cp 3
Author  :
.sp
.cp 3
Created : 1982-11-19
.sp
.cp 3
.sp
.cp 3
Release :      Date : 2000-08-18
.sp
***********************************************************
.sp
.cp 10
.fo
.oc _/1
Specification:
 
.CM *-END-* specification -------------------------------
.sp 2
************************************************************
.sp
.cp 10
.fo
.oc _/1
Description:
 
.CM *-END-* description ---------------------------------
.sp 2
**********************************************************
.sp
.cp 10
.nf
.oc _/1
Structure:
 
.CM *-END-* structure -----------------------------------
.sp 2
**********************************************************
.sp
.cp 10
.nf
.oc _/1
.CM -lll-
Code    :
 
 
CONST
      b_c3 =  '   ';
 
TYPE
 
      b21ptr = RECORD
            CASE integer OF
                1 :
                    (nodeaddr        : tbd_nodeptr);
                2 :
                    (cache_ctrl_addr : tgg00_TempDataCachePtr);
                3 :
                    (obj_addr        : tsp00_ObjAddr);
                4 :
                    (buf_addr        : tsp00_BufAddr);
                5 :
                    (monitor_addr    : tgg00_UserMonitorInfoPtr);
                6 :
                    (AuxBufferAddr   : tgg00_AuxBuffersPtr);
                7 :
                    (moveobjptr      : tsp00_MoveObjPtr);
                END;
            (*ENDCASE*) 
 
 
VAR
      b21nil_monitor : tgg00_MonitorRec;
 
 
(*------------------------------*) 
 
PROCEDURE
      b21init_temp_cache (pid  : tsp00_TaskId;
            buffers            : tsp00_Int4;
            allocate_monitor   : boolean;
            is_control_session : boolean;
            VAR temp_cache_ptr : tgg00_TempDataCachePtr;
            VAR err            : tgg00_BasisError);
 
VAR
      ok : boolean;
      p  : b21ptr;
 
BEGIN
err := e_ok;
IF  buffers < 0
THEN
    buffers := 0;
(*ENDIF*) 
IF  buffers MOD 2 <> 0
THEN
    buffers := buffers - 1;
(* *)
(*ENDIF*) 
buffers := 0; (* temp cache is not supported *)
(* *)
&ifdef TRACE
t01int4 (bd_tbuf,'b01ph0 off  ', 0);
t01int4 (bd_tbuf,'buffers     ',buffers);
&endif
vmalloc (sizeof (tgg00_TempDataCache), p.obj_addr, ok);
IF  NOT ok
THEN
    err := e_sysbuf_storage_exceeded
ELSE
    BEGIN
    temp_cache_ptr                   := p.cache_ctrl_addr;
    temp_cache_ptr^.tdc_fdir_root    := NIL_PAGE_NO_GG00;
    temp_cache_ptr^.tdc_cache_size   := 0;
    temp_cache_ptr^.tdc_cache_active := false;
    temp_cache_ptr^.tdc_fill1        := false;
    temp_cache_ptr^.tdc_fill2        := 0;
    IF  NOT allocate_monitor
    THEN
        temp_cache_ptr^.tdc_monitor_info := NIL (* PTS 1110827 TS 2001-07-06 *)
    ELSE
        BEGIN
        vmalloc (sizeof (tgg00_UserMonitorInfo), p.obj_addr, ok);
        IF  NOT ok
        THEN
            err := e_sysbuf_storage_exceeded
        ELSE
            BEGIN
            temp_cache_ptr^.tdc_monitor_info := p.monitor_addr;
            vmalloc (g01packet_size, p.obj_addr, ok);
            IF  NOT ok
            THEN
                err := e_sysbuf_storage_exceeded
            ELSE
                WITH temp_cache_ptr^.tdc_monitor_info^ DO
                    BEGIN
                    umi_values          := p.moveobjptr;
                    umi_values_size     := g01packet_size;
                    umi_values_len      := 0;
                    umi_parse_again     := b_c3;
                    umi_control_session := is_control_session;
                    SAPDB_PascalForcedFill (sizeof (umi_username), @umi_username, 1,
                          sizeof (umi_username), bsp_c1);
                    umi_termid          := bsp_termid;
                    umi_curr_monitor    := b21nil_monitor;
                    umi_sum_monitor     := b21nil_monitor;
                    umi_obj_hist_count  := 0;
                    END
                (*ENDWITH*) 
            (*ENDIF*) 
            END
        (*ENDIF*) 
        END;
    (*ENDIF*) 
    IF  ok
    THEN
        BEGIN
        temp_cache_ptr^.tdcAuxBufferCount_gg00 := 1;
        vmalloc (sizeof (tsp00_Page) * temp_cache_ptr^.tdcAuxBufferCount_gg00,
              p.obj_addr, ok);
        temp_cache_ptr^.tdcAuxBuffers_gg00     := p.AuxBufferAddr;
        IF  NOT ok
        THEN
            err := e_sysbuf_storage_exceeded
        (*ENDIF*) 
        END
    (*ENDIF*) 
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21m_cmdid (temp_cache_ptr : tgg00_TempDataCachePtr;
            VAR cmdid : tgg00_Surrogate);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    cmdid := umi_sum_monitor.mon_cmdid
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21m_copy_result (temp_cache_ptr : tgg00_TempDataCachePtr;
            VAR copy_result : tsp00_C3);
 
BEGIN
copy_result := temp_cache_ptr^.tdc_monitor_info^.umi_sum_monitor.mon_copy_result
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21m_date_time (VAR curr_date : tsp00_Date;
            VAR curr_time : tsp00_Time);
 
BEGIN
vdattime (curr_date, curr_time);
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21m_init_monitor_rec;
 
VAR
      i : integer;
 
BEGIN
WITH b21nil_monitor DO
    BEGIN
    mon_parseid        := bsp_c12;
    mon_masterparseid  := bsp_c12;
    mon_cmdid          := cgg_zero_id;
    mon_strat          := bsp_c40;
    mon_copy_result    := b_c3;
    mon_is_select      := false;
    mon_rows_read      := 0;
    mon_rows_qual      := 0;
    mon_rows_fetched   := 0;
    mon_fetch_calls    := 0;
    mon_virt_reads     := 0;
    mon_kb_calls       := 0;
    mon_waits          := 0;
    mon_suspends       := 0;
    mon_phys_ios       := 0;
    mon_sec            := 0;
    mon_microsec       := 0;
    mon_strat_len      := 0;
    mon_rootlist_elems := 0;
    FOR i := 1 TO MAX_ROOTLIST_GG00 DO
        mon_rootlist [i] := NIL_PAGE_NO_GG00;
    (*ENDFOR*) 
    END
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      b21m_fetch_calls (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    b21m_fetch_calls := umi_sum_monitor.mon_fetch_calls
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      b21m_is_select (temp_cache_ptr : tgg00_TempDataCachePtr) : boolean;
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    b21m_is_select := umi_sum_monitor.mon_is_select
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      b21m_kb_calls (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    b21m_kb_calls := umi_sum_monitor.mon_kb_calls
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      b21m_microsec (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    b21m_microsec := umi_sum_monitor.mon_microsec
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      b21m_obj_hist_read_count (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    b21m_obj_hist_read_count := umi_obj_hist_count
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21m_parse_again (temp_cache_ptr : tgg00_TempDataCachePtr;
            VAR parse_again : tsp00_C3);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    parse_again := umi_parse_again
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21m_parseid (temp_cache_ptr : tgg00_TempDataCachePtr;
            VAR parseid       : tsp00_C12;
            VAR masterparseid : tsp00_C12);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    BEGIN
    parseid       := umi_sum_monitor.mon_parseid;
    masterparseid := umi_sum_monitor.mon_masterparseid;
    END;
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      b21m_phys_ios (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    b21m_phys_ios := umi_sum_monitor.mon_phys_ios
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21m_reset_monitor (temp_cache_ptr : tgg00_TempDataCachePtr;
            reset_sum : boolean);
 
BEGIN
IF  temp_cache_ptr <> NIL
THEN
    IF  temp_cache_ptr^.tdc_monitor_info <> NIL
    THEN
        WITH temp_cache_ptr^.tdc_monitor_info^ DO
            BEGIN
            IF  reset_sum
            THEN
                BEGIN
                umi_sum_monitor := b21nil_monitor;
                umi_values_len  := 0
                END
            ELSE
                umi_curr_monitor := b21nil_monitor
            (*ENDIF*) 
            END
        (*ENDWITH*) 
    (*ENDIF*) 
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21m_roots (temp_cache_ptr : tgg00_TempDataCachePtr;
            VAR cnt          : tsp00_Int4;
            VAR rootlist_ptr : tgg00_RootListPtr);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^.umi_sum_monitor DO
    BEGIN
    cnt          := mon_rootlist_elems;
    rootlist_ptr := @mon_rootlist
    END;
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      b21m_rows_fetched (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    b21m_rows_fetched := umi_sum_monitor.mon_rows_fetched
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      b21m_rows_qual (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    b21m_rows_qual := umi_sum_monitor.mon_rows_qual
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      b21m_rows_read (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    b21m_rows_read := umi_sum_monitor.mon_rows_read
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      b21m_sec (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    b21m_sec := umi_sum_monitor.mon_sec
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21m_strat (temp_cache_ptr : tgg00_TempDataCachePtr;
            VAR strategy : tsp00_C40);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    strategy := umi_sum_monitor.mon_strat
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      b21m_suspends (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    b21m_suspends := umi_sum_monitor.mon_suspends
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21m_termid (temp_cache_ptr : tgg00_TempDataCachePtr;
            VAR termid : tsp00_TermId);
 
BEGIN
termid := temp_cache_ptr^.tdc_monitor_info^.umi_termid
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21m_username (temp_cache_ptr : tgg00_TempDataCachePtr;
            VAR username : tsp00_KnlIdentifier);
 
BEGIN
username := temp_cache_ptr^.tdc_monitor_info^.umi_username
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21m_values (temp_cache_ptr : tgg00_TempDataCachePtr;
            VAR values_addr : tsp00_MoveObjPtr;
            VAR values_len  : tsp00_Int4);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    BEGIN
    values_addr := umi_values;
    values_len  := umi_values_len
    END
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      b21m_virt_reads (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    b21m_virt_reads := umi_sum_monitor.mon_virt_reads
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      b21m_waits (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    b21m_waits := umi_sum_monitor.mon_waits
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_cmdid_put (temp_cache_ptr : tgg00_TempDataCachePtr;
            VAR cmdid : tgg00_Surrogate);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    umi_sum_monitor.mon_cmdid := cmdid
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_copy_result_put (temp_cache_ptr : tgg00_TempDataCachePtr;
            copy_result : tsp00_C3);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^.umi_curr_monitor DO
    IF  mon_copy_result = b_c3
    THEN
        mon_copy_result := copy_result
    (*ENDIF*) 
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_fetch_calls_put (temp_cache_ptr : tgg00_TempDataCachePtr);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^.umi_sum_monitor DO
    mon_fetch_calls := mon_fetch_calls + 1
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_is_select (temp_cache_ptr : tgg00_TempDataCachePtr;
            is_select : boolean);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^.umi_sum_monitor DO
    mon_is_select := is_select
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_kb_calls_put (temp_cache_ptr : tgg00_TempDataCachePtr);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^.umi_curr_monitor DO
    mon_kb_calls := mon_kb_calls + 1
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_microsec_put (temp_cache_ptr : tgg00_TempDataCachePtr;
            microsec : tsp00_Int4);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^.umi_curr_monitor DO
    BEGIN
    mon_microsec := mon_microsec + microsec;
    IF  mon_microsec >= 1000000
    THEN
        BEGIN
        mon_sec      := mon_sec + 1;
        mon_microsec := mon_microsec - 1000000
        END
    (*ENDIF*) 
    END
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_new_sum_put (temp_cache_ptr : tgg00_TempDataCachePtr);
 
VAR
      i : integer;
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^, umi_sum_monitor DO
    BEGIN
    IF  umi_curr_monitor.mon_strat_len >  sizeof(mon_strat) -  mon_strat_len
    THEN
        umi_curr_monitor.mon_strat_len := sizeof(mon_strat) -  mon_strat_len;
    (*ENDIF*) 
    s10mv (sizeof(umi_curr_monitor.mon_strat),sizeof(mon_strat),
          @umi_curr_monitor.mon_strat, 1,
          @mon_strat, mon_strat_len + 1,
          umi_curr_monitor.mon_strat_len);
    mon_strat_len := mon_strat_len + umi_curr_monitor.mon_strat_len;
    FOR i := 1 TO umi_curr_monitor.mon_rootlist_elems DO
        IF  mon_rootlist_elems < MAX_ROOTLIST_GG00
        THEN
            BEGIN
            mon_rootlist_elems := succ(mon_rootlist_elems);
            mon_rootlist [mon_rootlist_elems] :=
                  umi_curr_monitor.mon_rootlist [i];
            END;
        (*ENDIF*) 
    (*ENDFOR*) 
    IF  mon_copy_result = b_c3
    THEN
        mon_copy_result := umi_curr_monitor.mon_copy_result;
    (*ENDIF*) 
    mon_rows_read   := mon_rows_read  + umi_curr_monitor.mon_rows_read;
    mon_rows_qual   := mon_rows_qual  + umi_curr_monitor.mon_rows_qual;
    mon_virt_reads  := mon_virt_reads + umi_curr_monitor.mon_virt_reads;
    mon_kb_calls    := mon_kb_calls   + umi_curr_monitor.mon_kb_calls;
    mon_waits       := mon_waits      + umi_curr_monitor.mon_waits;
    mon_suspends    := mon_suspends   + umi_curr_monitor.mon_suspends;
    mon_phys_ios    := mon_phys_ios   + umi_curr_monitor.mon_phys_ios;
    mon_sec         := mon_sec        + umi_curr_monitor.mon_sec;
    mon_microsec    := mon_microsec   + umi_curr_monitor.mon_microsec;
    IF  mon_microsec >= 1000000
    THEN
        BEGIN
        mon_sec      := mon_sec + 1;
        mon_microsec := mon_microsec - 1000000
        END
    (*ENDIF*) 
    END
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_obj_hist_read_count_put (temp_cache_ptr : tgg00_TempDataCachePtr;
            read_count : tsp00_Int4);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    umi_obj_hist_count := read_count
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_parse_again_put (temp_cache_ptr : tgg00_TempDataCachePtr;
            parse_again : tsp00_C3);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    umi_parse_again := parse_again
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_parseid_put (temp_cache_ptr : tgg00_TempDataCachePtr;
            VAR parseid       : tsp00_C12;
            VAR masterparseid : tsp00_C12);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    BEGIN
    umi_sum_monitor.mon_parseid       := parseid;
    umi_sum_monitor.mon_masterparseid := masterparseid;
    END;
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_phys_ios_put (temp_cache_ptr : tgg00_TempDataCachePtr;
            phys_ios : tsp00_Int4);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^.umi_curr_monitor DO
    mon_phys_ios := mon_phys_ios + phys_ios
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_root_put (temp_cache_ptr : tgg00_TempDataCachePtr;
            root : tsp00_PageNo);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^.umi_curr_monitor DO
    IF  mon_rootlist_elems < MAX_ROOTLIST_GG00
    THEN
        BEGIN
        mon_rootlist_elems                := mon_rootlist_elems + 1;
        mon_rootlist [mon_rootlist_elems] := root
        END;
    (*ENDIF*) 
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_rows_fetched_put (temp_cache_ptr : tgg00_TempDataCachePtr;
            rows_fetched : tsp00_Int4);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^.umi_sum_monitor DO
    mon_rows_fetched := rows_fetched
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_rows_qual_put (temp_cache_ptr : tgg00_TempDataCachePtr;
            rows_qual : tsp00_Int4);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^.umi_curr_monitor DO
    mon_rows_qual := mon_rows_qual + rows_qual
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_rows_read_put (temp_cache_ptr : tgg00_TempDataCachePtr;
            rows_read : tsp00_Int4);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^.umi_curr_monitor DO
    mon_rows_read := mon_rows_read + rows_read
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_sec_put (temp_cache_ptr : tgg00_TempDataCachePtr;
            sec : tsp00_Int4);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^.umi_curr_monitor DO
    mon_sec := mon_sec + sec
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_strat_put (temp_cache_ptr : tgg00_TempDataCachePtr;
            VAR strategy : tsp00_C40;
            len : tsp00_Int4);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^.umi_curr_monitor DO
    BEGIN
    IF  len >  sizeof(mon_strat) -  mon_strat_len
    THEN
        len := sizeof(mon_strat) -  mon_strat_len;
    (*ENDIF*) 
    s10mv (sizeof(strategy),sizeof(mon_strat), @strategy, 1,
          @mon_strat, mon_strat_len + 1, len);
    mon_strat_len := mon_strat_len + len;
    END;
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_suspends_put (temp_cache_ptr : tgg00_TempDataCachePtr;
            suspends : tsp00_Int4);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^.umi_curr_monitor DO
    mon_suspends := mon_suspends + suspends
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_termid_put (temp_cache_ptr : tgg00_TempDataCachePtr;
            VAR termid : tsp00_TermId);
 
BEGIN
temp_cache_ptr^.tdc_monitor_info^.umi_termid := termid
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_username_put (temp_cache_ptr : tgg00_TempDataCachePtr;
            VAR username : tsp00_KnlIdentifier);
 
BEGIN
temp_cache_ptr^.tdc_monitor_info^.umi_username := username
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_value_put (temp_cache_ptr : tgg00_TempDataCachePtr;
            curr_value_addr : tsp00_MoveObjPtr;
            curr_value_len  : tsp00_Int4);
 
VAR
      aux_len : tsp00_Int4;
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^ DO
    BEGIN
    IF  umi_values_len + curr_value_len <= umi_values_size
    THEN
        aux_len := curr_value_len
    ELSE
        aux_len := umi_values_size - umi_values_len;
    (*ENDIF*) 
    s10mv (curr_value_len, umi_values_size,
          @curr_value_addr^, 1, @umi_values^, umi_values_len + 1,
          aux_len);
    umi_values_len := umi_values_len + aux_len
    END
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_virt_reads_put (temp_cache_ptr : tgg00_TempDataCachePtr;
            virt_reads : tsp00_Int4);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^.umi_curr_monitor DO
    mon_virt_reads := mon_virt_reads + virt_reads
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21mp_waits_put (temp_cache_ptr : tgg00_TempDataCachePtr;
            waits : tsp00_Int4);
 
BEGIN
WITH temp_cache_ptr^.tdc_monitor_info^.umi_curr_monitor DO
    mon_waits := mon_waits + waits
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21lcl_tfdir_root (temp_cache_ptr : tgg00_TempDataCachePtr;
            is_set  : boolean;
            VAR pno : tsp00_PageNo);
 
BEGIN
IF  is_set
THEN
    temp_cache_ptr^.tdc_fdir_root := pno
ELSE
    pno := temp_cache_ptr^.tdc_fdir_root
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      b21temp_cache_release (pid : tsp00_TaskId;
            temp_cache_ptr : tgg00_TempDataCachePtr);
 
VAR
      p : b21ptr;
 
BEGIN
temp_cache_ptr^.tdc_cache_active := false;
(*=====*)
IF  temp_cache_ptr^.tdc_cache_size > 0
THEN
    BEGIN
    (*   b20trelease_ioaddr (pid, b21cache^.io_block_inx);  *)
    (*    p.head_list_addr := b21cache^.hd_list;            *)
    (*   vmfree (p.obj_addr);                               *)
    (*    p.nodeaddr := b21cache^.cb_first^.frameptr;       *)
    (*    vmfreebuf (p.buf_addr);                           *)
    (*    p.cblockaddr := b21cache^.cb_first;               *)
    (*    vmfree (p.obj_addr);                              *)
    END;
(*ENDIF*) 
p.moveobjptr := temp_cache_ptr^.tdc_monitor_info^.umi_values;
IF  p.obj_addr <> NIL
THEN
    vmfree (p.obj_addr);
(*ENDIF*) 
p.monitor_addr := temp_cache_ptr^.tdc_monitor_info;
IF  p.obj_addr <> NIL
THEN
    vmfree (p.obj_addr);
(*ENDIF*) 
p.AuxBufferAddr:= temp_cache_ptr^.tdcAuxBuffers_gg00;
IF  p.obj_addr <> NIL
THEN
    vmfree (p.obj_addr);
(*ENDIF*) 
p.cache_ctrl_addr := temp_cache_ptr;
IF  p.obj_addr <> NIL
THEN
    vmfree (p.obj_addr);
(*=====*)
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      b21tmp_cache_size (temp_cache_ptr : tgg00_TempDataCachePtr) : tsp00_Int4;
 
BEGIN
IF  temp_cache_ptr = NIL
THEN
    b21tmp_cache_size := 0
ELSE
    b21tmp_cache_size := temp_cache_ptr^.tdc_cache_size
(*ENDIF*) 
END;
 
.CM *-END-* code ----------------------------------------
.SP 2 
***********************************************************
.PA 
