.nf
 
 .nf
 
    ========== licence begin  GPL
    Copyright (c) 2000-2005 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
 
 
.fo
*****************************************************
Copyright (c) 2000-2005 SAP AG
SAP Database Technology
 
Release :      Date : 2003-07-15
*****************************************************
modname : VGG041
changed : 2003-07-15
module  : Trace_Help_Procedures
 
Author  : GertG
Created : 2003-07-15
*****************************************************
 
Purpose : enable trace output
 
Define  :
 
        PROCEDURE
              g041join_expl_row_trace (
                    VAR t              : tgg00_TransContext;
                    VAR strat          : tsp00_C40;
                    VAR owner          : tsp00_KnlIdentifier;
                    VAR table          : tsp00_KnlIdentifier;
                    recs_found         : tsp00_Longreal;
                    multiplier         : tsp00_Longreal;
                    new_left_size      : tsp00_Longreal;
                    new_left_recs      : tsp00_Longreal;
                    costs              : tsp00_Longreal);
 
        PROCEDURE
              g041c30_to_trace (
                    VAR t    : tgg00_TransContext;
                    c30      : tsp00_C30);
 
        PROCEDURE
              g041longreal_to_trace (
                    VAR t  : tgg00_TransContext;
                    name   : tsp00_Name;
                    realval: tsp00_Longreal);
 
        PROCEDURE
              g041int4_to_trace (
                    VAR t  : tgg00_TransContext;
                    name   : tsp00_Name;
                    intval : tsp00_Int4);
 
        PROCEDURE
              g041p2int4_to_trace (
                    VAR t   : tgg00_TransContext;
                    name1   : tsp00_Name;
                    intval1 : tsp00_Int4;
                    name2   : tsp00_Name;
                    intval2 : tsp00_Int4);
 
        PROCEDURE
              g041name_to_trace (
                    VAR t  : tgg00_TransContext;
                    name   : tsp00_Name);
 
        PROCEDURE
              g041line_to_trace (
                    VAR t      : tgg00_TransContext;
                    VAR line   : tsp00_Line);
 
        PROCEDURE
              g041explain_trace (
                    VAR t      : tgg00_TransContext;
                    VAR shinfo : tsp00_MoveObj);
 
        PROCEDURE
              g041statistic_trace (
                    VAR t     : tgg00_TransContext;
                    arr_index : tgg00_RefInfoIndex;
                    int1      : tsp00_Int4;
                    int2      : tsp00_Int4;
                    int3      : tsp00_Int4;
                    int4      : tsp00_Int4);
 
        PROCEDURE
              g041bool_to_trace (
                    VAR t  : tgg00_TransContext;
                    name   : tsp00_Name;
                    boolval: boolean);
 
        PROCEDURE
              g041identifier_to_trace (
                    VAR t  : tgg00_TransContext;
                    name   : tsp00_KnlIdentifier);
 
.CM *-END-* define --------------------------------------
***********************************************************
 
Use     :
 
        FROM
              Build_Strategy_2 : VAK71;
 
        VAR
              a71blankline : tsp00_Line;
 
      ------------------------------ 
 
        FROM
              Configuration_Parameter : VGG01;
 
        VAR
              g01unicode        : boolean;
 
      ------------------------------ 
 
        FROM
              Kernel_move_and_fill : VGG101;
 
        PROCEDURE
              SAPDB_PascalFill (
                    mod_id      : tsp00_C6;
                    mod_num     : tsp00_Int4;
                    obj_upb     : tsp00_Int4;
                    obj         : tsp00_MoveObjPtr;
                    obj_pos     : tsp00_Int4;
                    length      : tsp00_Int4;
                    fillchar    : char;
                    VAR e       : tgg00_BasisError);
 
        PROCEDURE
              SAPDB_PascalMove (
                    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
              SAPDB_PascalForcedFill (
                    size        : tsp00_Int4;
                    m           : tsp00_MoveObjPtr;
                    pos         : tsp00_Int4;
                    len         : tsp00_Int4;
                    fillchar    : char);
 
        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);
 
      ------------------------------ 
 
        FROM
              GG_edit_routines : VGG17;
 
        PROCEDURE
              g17longreal_to_line (
                    re        : tsp00_Longreal;
                    digits    : integer;
                    pos       : integer;
                    VAR ln    : tsp00_Line);
 
        PROCEDURE
              g17nameto_line (
                    n           : tsp00_Name;
                    VAR ln_len  : integer;
                    VAR ln      : tsp00_Line);
 
        PROCEDURE
              g17int4to_line (
                    intval    : tsp00_Int4;
                    with_zero : boolean;
                    int_len   : integer;
                    ln_pos    : integer;
                    VAR ln    : tsp00_Line);
 
      ------------------------------ 
 
        FROM
              Trace : VBD120;
 
        PROCEDURE
              b120InsertTrace (
                    VAR Trans  : tgg00_TransContext;
                    TraceLayer : tgg00_Debug;
                    TraceType  : tgg00_VtraceType;
                    BodyLen    : tsp00_Int2;
                    pEntry     : tsp00_Addr);
 
      ------------------------------ 
 
        FROM
              RTE-Extension-20 : VSP20;
 
        PROCEDURE
              s20ch4 (
                    val      : tsp00_Int4;
                    VAR dest : tsp00_Line;
                    di       : tsp00_Int4);
 
      ------------------------------ 
 
        FROM
              RTE-Extension-80: VSP80;
 
        PROCEDURE
              s80uni_trans (
                    src_ptr         : tsp00_MoveObjPtr;
                    src_len         : tsp00_Int4;
                    src_codeset     : tsp00_Int2;
                    dest_ptr        : tsp00_MoveObjPtr;
                    VAR dest_len    : tsp00_Int4;
                    dest_codeset    : tsp00_Int2;
                    trans_options   : tsp8_uni_opt_set;
                    VAR rc          : tsp8_uni_error;
                    VAR err_char_no : tsp00_Int4);
 
.CM *-END-* use -----------------------------------------
***********************************************************
 
Synonym :
 
        PROCEDURE
              b120InsertTrace;
 
              tgg11_VtraceBodyPtr tsp00_Addr
 
        PROCEDURE
              s20ch4;
 
              tsp00_MoveObj tsp00_Line
 
.CM *-END-* synonym -------------------------------------
***********************************************************
.CM -lll-
Code    :
 
 
(*------------------------------*) 
 
PROCEDURE
      g041longreal_to_trace (
            VAR t  : tgg00_TransContext;
            name   : tsp00_Name;
            realval: tsp00_Longreal);
 
VAR
      _len  : tsp00_Int4;
      _line : tsp00_Line;
 
BEGIN
_len  := 0;
_line := a71blankline;
g17nameto_line( name, _len, _line );
g17longreal_to_line( realval, 6, 16, _line );
g041line_to_trace( t, _line );
END;
 
(*------------------------------*) 
 
PROCEDURE
      g041int4_to_trace (
            VAR t  : tgg00_TransContext;
            name   : tsp00_Name;
            intval : tsp00_Int4);
 
VAR
      move_err : tgg00_BasisError;
      len      : integer;
      trace_ln : tsp00_Line;
 
BEGIN
len := sizeof (name);
WHILE (len > 1) AND (name [len] = ' ') DO
    len := len - 1;
(*ENDWHILE*) 
s20ch4 (intval, trace_ln, 1);
move_err := e_ok;
g10mv ('VGG041',   1,    
      sizeof (name), sizeof (trace_ln),
      @name, 1, @trace_ln, sizeof (intval) + 1, len, move_err);
len := sizeof (intval) + len;
b120InsertTrace (t, ak_strat, ak_strat_with_int, len, @trace_ln);
END;
 
(*------------------------------*) 
 
PROCEDURE
      g041name_to_trace (
            VAR t  : tgg00_TransContext;
            name   : tsp00_Name);
 
VAR
      move_err : tgg00_BasisError;
      len      : integer;
      trace_ln : tsp00_Line;
 
BEGIN
len := sizeof (name);
WHILE (len >= 1) AND (name [len] = ' ') DO
    len := len - 1;
(*ENDWHILE*) 
IF  len > 0
THEN
    BEGIN
    move_err := e_ok;
    g10mv ('VGG041',   2,    
          sizeof (name), sizeof (trace_ln),
          @name, 1, @trace_ln, 1, len, move_err);
    b120InsertTrace (t, ak_strat, td_none, len, @trace_ln);
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      g041c30_to_trace (
            VAR t  : tgg00_TransContext;
            c30    : tsp00_C30);
 
VAR
      move_err : tgg00_BasisError;
      len      : integer;
      trace_ln : tsp00_Line;
 
BEGIN
len := sizeof (c30);
WHILE (len >= 1) AND (c30 [len] = ' ') DO
    len := len - 1;
(*ENDWHILE*) 
IF  len > 0
THEN
    BEGIN
    move_err := e_ok;
    g10mv ('VGG041',   3,    
          sizeof (c30), sizeof (trace_ln),
          @c30, 1, @trace_ln, 1, len, move_err);
    b120InsertTrace (t, ak_strat, td_none, len, @trace_ln);
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      g041line_to_trace (
            VAR t      : tgg00_TransContext;
            VAR line   : tsp00_Line);
 
VAR
      len : integer;
 
BEGIN
len := sizeof (line);
WHILE (len >= 1) AND (line [len] = ' ') DO
    len := len - 1;
(*ENDWHILE*) 
IF  len > 0
THEN
    b120InsertTrace (t, ak_strat, td_none, len, @line);
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      g041statistic_trace (
            VAR t     : tgg00_TransContext;
            arr_index : tgg00_RefInfoIndex;
            int1      : tsp00_Int4;
            int2      : tsp00_Int4;
            int3      : tsp00_Int4;
            int4      : tsp00_Int4);
 
VAR
      trace_ln : tsp00_Line;
      t_len    : tsp00_Int4;
 
BEGIN
s20ch4 (int1, trace_ln, 1);
s20ch4 (int2, trace_ln, 5);
s20ch4 (int3, trace_ln, 9);
s20ch4 (int4, trace_ln, 13);
t_len := sizeof (int1) * 4;
CASE arr_index OF
    iprim_key :
        g17nameto_line ('KEY_EQUAL        >', t_len, trace_ln);
    iprim_key_range :
        g17nameto_line ('KEY_RANGE        >', t_len, trace_ln);
    itable_scan :
        g17nameto_line ('TABLE_SCAN       >', t_len, trace_ln);
    iindex :
        g17nameto_line ('INDEX_EQUAL      >', t_len, trace_ln);
    iindex_range :
        g17nameto_line ('INDEX_RANGE      >', t_len, trace_ln);
    iis_index :
        g17nameto_line ('ONLY_INDEX_EQUAL >', t_len, trace_ln);
    iis_index_range :
        g17nameto_line ('ONLY_INDEX_RANGE >', t_len, trace_ln);
    iis_index_scan :
        g17nameto_line ('ONLY_INDEX_SCAN  >', t_len, trace_ln);
    OTHERWISE
        g17nameto_line ('WRONG_STRATEGY   >', t_len, trace_ln);
    END;
(*ENDCASE*) 
g17nameto_line (' READ/QUAL/PG/VI :', t_len, trace_ln);
b120InsertTrace (t, kb_qual, td_none, t_len, @trace_ln);
END;
 
(*------------------------------*) 
 
PROCEDURE
      g041explain_trace (
            VAR t      : tgg00_TransContext;
            VAR shinfo : tsp00_MoveObj);
 
VAR
      trace_ln    : tsp00_Line;
      move_err    : tgg00_BasisError;
      t_len       : integer;
      s_len       : integer;
      s_pos       : integer;
      rc          : tsp8_uni_error;
      err_char_no : tsp00_Int4;
      identlen    : integer;
 
BEGIN
(* PTS 1000186 *)
(* see a01identifier_size *)
IF  g01unicode
THEN
    identlen := sizeof (tsp00_KnlIdentifier)
ELSE
    identlen := sizeof (tsp00_KnlIdentifier) DIV 2;
(*ENDIF*) 
s_pos := 1;
s_len := 1 + identlen;
t_len := 0;
move_err := e_ok;
g17nameto_line ('USERNAME  :       ',
      t_len, trace_ln);
g10mv ('VGG041',   4,    
      sizeof (shinfo), sizeof (trace_ln),
      @shinfo, s_pos, @trace_ln, t_len+1, s_len, move_err);
move_err := e_ok;
t_len := t_len + s_len;
b120InsertTrace (t, ak_strat, ak_send, t_len, @trace_ln);
;
s_pos := s_pos + s_len;
s_len := 1 + identlen;
t_len := 0;
g17nameto_line ('TABLENAME :       ',
      t_len, trace_ln);
g10mv ('VGG041',   5,    
      sizeof (shinfo), sizeof (trace_ln),
      @shinfo, s_pos, @trace_ln, t_len+1, s_len, move_err);
move_err := e_ok;
t_len := t_len + s_len;
b120InsertTrace (t, ak_strat, ak_send, t_len, @trace_ln);
;
s_pos := s_pos + s_len;
s_len := 1 + identlen;
t_len := 0;
g17nameto_line ('COLUMNNAME:       ',
      t_len, trace_ln);
g10mv ('VGG041',   6,    
      sizeof (shinfo), sizeof (trace_ln),
      @shinfo, s_pos, @trace_ln, t_len+1, s_len, move_err);
move_err := e_ok;
t_len := t_len + s_len;
b120InsertTrace (t, ak_strat, ak_send, t_len, @trace_ln);
;
s_pos := s_pos + s_len;
s_len := 40;
t_len := 40;
IF  shinfo[s_pos] = csp_unicode_def_byte
THEN
    BEGIN
    s_len := 2*s_len;
    s80uni_trans (@shinfo[s_pos+1], s_len,
          csp_unicode, @trace_ln, t_len, csp_ascii,
          [], rc, err_char_no)
    END
ELSE
    g10mv ('VGG041',   7,    
          sizeof (shinfo), sizeof (trace_ln),
          @shinfo, s_pos+1, @trace_ln, 1, t_len, move_err);
(*ENDIF*) 
move_err := e_ok;
s_pos := s_pos + 1 + s_len;
s_len := 1+10 + 2 + 2 + 2 + 2 + 1+18;
g10mv ('VGG041',   8,    
      sizeof (shinfo), sizeof (trace_ln),
      @shinfo, s_pos, @trace_ln, t_len+1, t_len, move_err);
t_len := t_len + s_len;
b120InsertTrace (t, ak_strat, ak_send, t_len, @trace_ln);
END;
 
(*------------------------------*) 
 
PROCEDURE
      g041join_expl_row_trace (
            VAR t              : tgg00_TransContext;
            VAR strat          : tsp00_C40;
            VAR owner          : tsp00_KnlIdentifier;
            VAR table          : tsp00_KnlIdentifier;
            recs_found         : tsp00_Longreal;
            multiplier         : tsp00_Longreal;
            new_left_size      : tsp00_Longreal;
            new_left_recs      : tsp00_Longreal;
            costs              : tsp00_Longreal);
 
VAR
      move_err : tgg00_BasisError;
      nam      : tsp00_Name;
      len      : integer;
      trace_ln : tsp00_Line;
 
BEGIN
move_err := e_ok;
SAPDB_PascalFill ('VGG041',   9,    
      sizeof (trace_ln), @trace_ln, 1, sizeof (trace_ln), bsp_c1, move_err);
nam    := 'STRATEGY         >';
move_err := e_ok;
g10mv ('VGG041',  10,    
      sizeof(nam), sizeof(trace_ln),
      @nam, 1, @trace_ln, 1, sizeof(nam), move_err);
len := sizeof (tsp00_Name) + 2;
move_err := e_ok;
g10mv ('VGG041',  11,    
      sizeof (strat), sizeof (trace_ln),
      @strat, 1, @trace_ln, len, sizeof(strat), move_err);
move_err := e_ok;
len := len + sizeof (strat) - 1;
b120InsertTrace (t, ak_strat, ak_join_strat, len, @trace_ln);
;
nam := 'OWNER            >';
g10mv ('VGG041',  12,    
      sizeof(nam), sizeof(trace_ln),
      @nam, 1, @trace_ln, 1, sizeof(nam), move_err);
move_err := e_ok;
len := sizeof (tsp00_Name) + 2;
g10mv ('VGG041',  13,    
      sizeof (owner), sizeof (trace_ln),
      @owner, 1, @trace_ln, len, sizeof (owner), move_err);
move_err := e_ok;
len := len + sizeof (owner) - 1;
b120InsertTrace (t, ak_strat, ak_join_strat, len, @trace_ln);
;
nam := 'TABLENAME        >';
g10mv ('VGG041',  14,    
      sizeof(nam), sizeof(trace_ln),
      @nam, 1, @trace_ln, 1, sizeof(nam), move_err);
move_err := e_ok;
len := sizeof (tsp00_Name) + 2;
g10mv ('VGG041',  15,    
      sizeof (table), sizeof (trace_ln),
      @table, 1, @trace_ln, len, sizeof (table), move_err);
move_err := e_ok;
len := len + sizeof (table) - 1;
b120InsertTrace (t, ak_strat, ak_join_strat, len, @trace_ln);
;
nam := 'MAX ADDNL. ROWS  >';
g10mv ('VGG041',  16,    
      sizeof(nam), sizeof(trace_ln),
      @nam, 1, @trace_ln, 1, sizeof(nam), move_err);
move_err := e_ok;
len := sizeof (tsp00_Name) + 1;
IF  recs_found = 0
THEN
    BEGIN
    len := succ(len);
    trace_ln[ len ] := '0';
    END
ELSE
    BEGIN
    g17longreal_to_line (recs_found, 6, len, trace_ln);
    len := len + 12;
    END;
(*ENDIF*) 
b120InsertTrace (t, ak_strat, ak_join_strat, len, @trace_ln);
;
nam := 'MULTIPLIER       >';
g10mv ('VGG041',  17,    
      sizeof(nam), sizeof(trace_ln),
      @nam, 1, @trace_ln, 1, sizeof(nam), move_err);
move_err := e_ok;
len := sizeof (tsp00_Name) + 1;
g17longreal_to_line (multiplier, 6, len, trace_ln);
len := len + 12;
b120InsertTrace (t, ak_strat, ak_join_strat, len, @trace_ln);
;
nam := 'ADDITIONAL PAGES >';
g10mv ('VGG041',  18,    
      sizeof(nam), sizeof(trace_ln),
      @nam, 1, @trace_ln, 1, sizeof(nam), move_err);
move_err := e_ok;
len := sizeof (tsp00_Name) + 1;
g17longreal_to_line (new_left_size, 6, len, trace_ln);
len := len + 12;
b120InsertTrace (t, ak_strat, ak_join_strat, len, @trace_ln);
;
nam := 'ADDITIONAL ROWS  >';
g10mv ('VGG041',  19,    
      sizeof(nam), sizeof(trace_ln),
      @nam, 1, @trace_ln, 1, sizeof(nam), move_err);
move_err := e_ok;
len := sizeof (tsp00_Name) + 1;
g17longreal_to_line (new_left_recs, 6, len, trace_ln);
len := len + 12;
b120InsertTrace (t, ak_strat, ak_join_strat, len, @trace_ln);
;
nam := 'ACCUMULATED-COSTS>';
g10mv ('VGG041',  20,    
      sizeof(nam), sizeof(trace_ln),
      @nam, 1, @trace_ln, 1, sizeof(nam), move_err);
len := sizeof (tsp00_Name) + 1;
g17longreal_to_line (costs, 6, len, trace_ln);
len := len + 12;
b120InsertTrace (t, ak_strat, ak_join_strat, len, @trace_ln);
END;
 
(*------------------------------*) 
 
PROCEDURE
      g041p2int4_to_trace (
            VAR t   : tgg00_TransContext;
            name1   : tsp00_Name;
            intval1 : tsp00_Int4;
            name2   : tsp00_Name;
            intval2 : tsp00_Int4);
 
VAR
      move_err   : tgg00_BasisError;
      len        : integer;
      trace_ln   : tsp00_Line;
 
BEGIN
SAPDB_PascalForcedFill (sizeof(trace_ln), @trace_ln, 1,
      sizeof(trace_ln), bsp_c1);
len := 0;
g17nameto_line ( name1, len, trace_ln);
trace_ln[ len + 1 ] := ':';
len := len + 2;
g17int4to_line (intval1, false, 10, len + 1, trace_ln);
len := len + 15;
g17nameto_line ( name2, len, trace_ln);
trace_ln[ len + 1 ] := ':';
len := len + 2;
g17int4to_line (intval2, false, 10, len + 1, trace_ln);
len := len + 11;
b120InsertTrace (t, ak_strat, td_none, len, @trace_ln);
END;
 
(*------------------------------*) 
 
PROCEDURE
      g041bool_to_trace (
            VAR t  : tgg00_TransContext;
            name   : tsp00_Name;
            boolval: boolean);
 
VAR
      move_err : tgg00_BasisError;
      len      : integer;
      intval   : integer;
      trace_ln : tsp00_Line;
 
BEGIN
len := sizeof (name);
IF  ( boolval )
THEN
    intval := 1
ELSE
    intval := 0;
(*ENDIF*) 
WHILE (len > 1) AND (name [len] = ' ') DO
    len := len - 1;
(*ENDWHILE*) 
s20ch4 (intval, trace_ln, 1);
move_err := e_ok;
SAPDB_PascalMove ('VGG041',  21,    
      sizeof (name), sizeof (trace_ln),
      @name, 1, @trace_ln, sizeof (intval) + 1, len, move_err);
len := sizeof (intval) + len;
b120InsertTrace (t, ak_strat, ak_strat_with_bool, len, @trace_ln);
END;
 
(*------------------------------*) 
 
PROCEDURE
      g041identifier_to_trace (
            VAR t  : tgg00_TransContext;
            name   : tsp00_KnlIdentifier);
 
VAR
      move_err : tgg00_BasisError;
      len      : integer;
      trace_ln : tsp00_Line;
 
BEGIN
IF  g01unicode
THEN
    len := sizeof (name)
ELSE
    len := sizeof (name) DIV 2;
(*ENDIF*) 
WHILE (len >= 1) AND (name [len] = ' ') DO
    len := len - 1;
(*ENDWHILE*) 
IF  len > 0
THEN
    BEGIN
    move_err := e_ok;
    g10mv ('VGG041',  22,    
          sizeof (name), sizeof (trace_ln),
          @name, 1, @trace_ln, 1, len, move_err);
    b120InsertTrace (t, ak_strat, td_none, len, @trace_ln);
    END;
(*ENDIF*) 
END;
 
.CM *-END-* code ----------------------------------------
.SP 2 
***********************************************************
.PA 
