.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
*****************************************************
Copyright (c) 2000-2004 SAP AG
SAP Database Technology
 
Release :      Date : 2000-11-23
*****************************************************
modname : VAK727
changed : 2000-11-23
module  : Trace_Strategy_2
 
Author  : GertG
Created : 2000-03-08
*****************************************************
 
Purpose : module for tracing of strategy information
 
Define  :
 
        PROCEDURE
              a727trace_strategy_text(
                    VAR transid : tgg00_TransContext;
                    name       : tsp00_Sname;
                    strategy   : tgg07_StratEnum);
 
        PROCEDURE
              a727trace_eval (
                    VAR transid : tgg00_TransContext;
                    txt        : tsp00_C30;
                    cnt_rec    : boolean;
                    all_rows   : tsp00_Int4;
                    act_rows   : tsp00_Int4;
                    all_pages  : tsp00_Int4;
                    min_pages  : tsp00_Int4;
                    act_pages  : tsp00_Int4;
                    fraction   : tsp00_Longreal);
 
        PROCEDURE
              a727trace_access_info (
                    VAR transid     : tgg00_TransContext;
                    proc_name       : tsp00_Name;
                    VAR access_info : tak70_strategy_record);
 
        PROCEDURE
              a727trace_query_prop (
                    VAR transid     : tgg00_TransContext;
                    VAR qprop       : tak70_query_properties);
 
        PROCEDURE
              a727trace_costs (
                    VAR transid  : tgg00_TransContext;
                    VAR strategy : tak70_one_strat);
 
        PROCEDURE
              a727trace_colposarr_ex (
                    VAR transid : tgg00_TransContext;
                    nam         : tsp00_Sname;
                    VAR keypos  : tgg07_ColPosArr;
                    length      : tsp00_Int2);
 
        PROCEDURE
              a727trace_colposarr (
                    VAR transid : tgg00_TransContext;
                    nam         : tsp00_Sname;
                    VAR keypos  : tgg07_ColPosArr);
 
        PROCEDURE
              a727trace_involved_cols (
                    VAR transid : tgg00_TransContext;
                    proc_name   : tsp00_Name;
                    ic_info     : tak70_involved_columns;
                    distinct    : boolean;
                    inv_only    : boolean);
 
        PROCEDURE
              a727trace_one_strat (
                    VAR transid     : tgg00_TransContext;
                    proc_name       : tsp00_Name;
                    VAR one_strat   : tak70_one_strat);
 
        PROCEDURE
              a727trace_keystrat(
                    VAR transid   : tgg00_TransContext;
                    name          : tsp00_Sname;
                    VAR key_strat : tgg07_StrKeyInRange);
 
        PROCEDURE
              a727trace_invstrat(
                    VAR transid   : tgg00_TransContext;
                    name          : tsp00_Sname;
                    VAR inv_strat : tgg07_StrInvInRange;
                    trace_keyarr  : boolean);
 
        PROCEDURE
              a727trace_tablename (
                    VAR transid     : tgg00_TransContext;
                    name            : tsp00_Sname;
                    VAR tabname     :tsp00_KnlIdentifier);
 
        PROCEDURE
              a727trace_col_cluster (
                    VAR transid     : tgg00_TransContext;
                    nam             : tsp00_Sname;
                    VAR col_cluster : tak70_sort_col_arr;
                    array_len       : tsp00_Int2);
 
        PROCEDURE
              a727L1_terms_trace (
                    VAR acv      : tak_all_command_glob;
                    VAR L1_terms : tak70_term);
 
        PROCEDURE
              a727trace_ord_fields (
                    VAR transid : tgg00_TransContext;
                    proc_name   : tsp00_Name;
                    ord_fields  : tak00_ord_fields);
 
.CM *-END-* define --------------------------------------
***********************************************************
 
Use     :
 
        FROM
              Build_Strategy : VAK70;
 
        VAR
              a70glob_key_strats        : tgg07_StratEnumSet;
              a70glob_inv_strats        : tgg07_StratEnumSet;
 
      ------------------------------ 
 
        FROM
              Build_Strategy_2 : VAK71;
 
        VAR
              a71blankline : tsp00_Line;
 
      ------------------------------ 
 
        FROM
              Trace_Help_Procedures : VGG041;
 
        PROCEDURE
              g041longreal_to_trace (
                    VAR t  : tgg00_TransContext;
                    name   : tsp00_Name;
                    realval: tsp00_Longreal);
 
        PROCEDURE
              g041line_to_trace (
                    VAR t      : tgg00_TransContext;
                    VAR line   : tsp00_Line);
 
        PROCEDURE
              g041int4_to_trace (
                    VAR t  : tgg00_TransContext;
                    name   : tsp00_Name;
                    intval : tsp00_Int4);
 
        PROCEDURE
              g041c30_to_trace (
                    VAR t  : tgg00_TransContext;
                    msg    : tsp00_C30);
 
        PROCEDURE
              g041name_to_trace (
                    VAR t  : tgg00_TransContext;
                    name   : tsp00_Name);
 
      ------------------------------ 
 
        FROM
              GG_edit_routines : VGG17;
 
        PROCEDURE
              g17stratenum_to_line (
                    strat      : tgg07_StratEnum;
                    VAR ln_len : integer;
                    VAR ln     : tsp00_Line);
 
        FUNCTION
              g17printable_char (c : char) : boolean;
 
        PROCEDURE
              g17longreal_to_line (
                    r         : 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
              g17sname_to_line (
                    n             : tsp00_Sname;
                    VAR ln_len    : integer;
                    VAR ln        : tsp00_Line);
 
        PROCEDURE
              g17trimint4_to_line (
                    int4       : tsp00_Int4;
                    VAR ln_len : integer;
                    VAR ln     : tsp00_Line);
 
        PROCEDURE
              g17int4to_line (
                    int       : tsp00_Int4;
                    with_zero : boolean;
                    int_len   : integer;
                    ln_pos    : integer;
                    VAR ln    : tsp00_Line);
&       ifdef TRACE
 
      ------------------------------ 
 
        FROM
              Test_Procedures : VTA01;
 
        PROCEDURE
              t01set_bool_debug_or_trace;
 
        PROCEDURE
              t01disable_debug_or_trace;
&       endif
 
.CM *-END-* use -----------------------------------------
***********************************************************
 
Synonym :
 
.CM *-END-* synonym -------------------------------------
***********************************************************
.CM -lll-
Code    :
 
 
(*------------------------------*) 
 
PROCEDURE
      a727trace_one_strat (
            VAR transid     : tgg00_TransContext;
            proc_name       : tsp00_Name;
            VAR one_strat   : tak70_one_strat);
 
BEGIN
&ifdef trace
t01disable_debug_or_trace;
&endif
g041name_to_trace( transid, proc_name );
;
g041c30_to_trace( transid, '---------- one strategy ------' );
a727trace_strategy_text( transid, 'strategy    ', one_strat.ostr_strategy );
;
IF  ( one_strat.ostr_strategy in a70glob_key_strats )
THEN
    a727trace_keystrat( transid, 'STRAT DATA  ', one_strat.ostr_key_in_range )
ELSE
    BEGIN
    IF  ( one_strat.ostr_strategy in a70glob_inv_strats )
    THEN
        a727trace_invstrat( transid, 'STRAT DATA  ',
              one_strat.ostr_inv_in_range, true );
    (*ENDIF*) 
    END;
(*ENDIF*) 
a727trace_costs( transid, one_strat );
g041c30_to_trace( transid, '------------------------------' );
&ifdef trace
t01set_bool_debug_or_trace;
&endif
END;
 
(*------------------------------*) 
 
PROCEDURE
      a727trace_access_info (
            VAR transid     : tgg00_TransContext;
            proc_name       : tsp00_Name;
            VAR access_info : tak70_strategy_record);
 
BEGIN
&ifdef trace
t01disable_debug_or_trace;
&endif
g041name_to_trace( transid, proc_name );
;
g041c30_to_trace( transid, '-------- ACCESS INFO ---------' );
ak727trace_keyaccess( transid, '-- key access --  ',
      access_info.srec_keyaccess );
ak727trace_invaccess( transid, '-- inv access --  ',
      access_info.srec_invaccess );
g041c30_to_trace( transid, '------------------------------' );
&ifdef trace
t01set_bool_debug_or_trace;
&endif
END;
 
(*------------------------------*) 
 
PROCEDURE
      a727trace_query_prop (
            VAR transid     : tgg00_TransContext;
            VAR qprop       : tak70_query_properties);
 
VAR
      _first_entry  : boolean;
      _ln_len       : integer;
      _ln           : tsp00_Line;
 
BEGIN
&ifdef trace
t01disable_debug_or_trace;
&endif
g041c30_to_trace( transid, '------- query property -------' );
_first_entry := true;
(**************************************)
(* qp_build_result, qp_no_result_set, qp_missing_value *)
_ln           := a71blankline;
_ln_len       := 0;
IF  ( qp_build_result in qprop.qps_switches )
THEN
    BEGIN
    IF  ( NOT _first_entry )
    THEN
        BEGIN
        _ln[ _ln_len + 1 ] := ',';
        _ln_len := _ln_len + 2;
        END;
    (*ENDIF*) 
    g17sname_to_line( 'buildresult ', _ln_len, _ln );
    _first_entry  := false;
    END;
(*ENDIF*) 
IF  ( qp_no_result_set in qprop.qps_switches )
THEN
    BEGIN
    IF  ( NOT _first_entry )
    THEN
        BEGIN
        _ln[ _ln_len + 1 ] := ',';
        _ln_len := _ln_len + 2;
        END;
    (*ENDIF*) 
    g17sname_to_line( 'no result   ', _ln_len, _ln );
    _first_entry  := false;
    END;
(*ENDIF*) 
IF  ( qp_missing_value in qprop.qps_switches )
THEN
    BEGIN
    IF  ( NOT _first_entry )
    THEN
        BEGIN
        _ln[ _ln_len + 1 ] := ',';
        _ln_len := _ln_len + 2;
        END;
    (*ENDIF*) 
    g17sname_to_line( 'missing valu', _ln_len, _ln );
    _first_entry  := false;
    END;
(*ENDIF*) 
g041line_to_trace( transid, _ln );
_first_entry := true;
(**************************************)
(* qp_given_rescnt, qp_given_rescnt_param, qp_inv_only_impossible *)
_ln          := a71blankline;
_ln_len      := 0;
IF  ( qp_given_rescnt in qprop.qps_switches )
THEN
    BEGIN
    IF  ( NOT _first_entry )
    THEN
        BEGIN
        _ln[ _ln_len + 1 ] := ',';
        _ln_len := _ln_len + 2;
        END;
    (*ENDIF*) 
    g17sname_to_line( 'gvn rescnt: ', _ln_len, _ln );
    _ln_len := succ( _ln_len );
    g17trimint4_to_line( qprop.qps_rescnt, _ln_len, _ln );
    _first_entry  := false;
    END;
(*ENDIF*) 
IF  ( qp_given_rescnt_param in qprop.qps_switches )
THEN
    BEGIN
    IF  ( NOT _first_entry )
    THEN
        BEGIN
        _ln[ _ln_len + 1 ] := ',';
        _ln_len := _ln_len + 2;
        END;
    (*ENDIF*) 
    g17sname_to_line( 'rescnt param', _ln_len, _ln );
    _first_entry  := false;
    END;
(*ENDIF*) 
IF  ( qp_inv_only_impossible in qprop.qps_switches )
THEN
    BEGIN
    IF  ( NOT _first_entry )
    THEN
        BEGIN
        _ln[ _ln_len + 1 ] := ',';
        _ln_len := _ln_len + 2;
        END;
    (*ENDIF*) 
    g17sname_to_line( 'invo imposs ', _ln_len, _ln );
    _first_entry  := false;
    END;
(*ENDIF*) 
g041line_to_trace( transid, _ln );
_first_entry := true;
(**************************************)
(* qp_check_order_support, qp_archive_access, qp_aggr_opt_poss *)
_ln          := a71blankline;
_ln_len      := 0;
IF  ( qp_check_order_support in qprop.qps_switches )
THEN
    BEGIN
    IF  ( NOT _first_entry )
    THEN
        BEGIN
        _ln[ _ln_len + 1 ] := ',';
        _ln_len := _ln_len + 2;
        END;
    (*ENDIF*) 
    g17sname_to_line( 'check order ', _ln_len, _ln );
    _first_entry  := false;
    END;
(*ENDIF*) 
IF  ( qp_archive_access in qprop.qps_switches )
THEN
    BEGIN
    IF  ( NOT _first_entry )
    THEN
        BEGIN
        _ln[ _ln_len + 1 ] := ',';
        _ln_len := _ln_len + 2;
        END;
    (*ENDIF*) 
    g17sname_to_line( 'arch access ', _ln_len, _ln );
    _first_entry  := false;
    END;
(*ENDIF*) 
IF  ( qp_aggr_optim_poss in qprop.qps_switches )
THEN
    BEGIN
    IF  ( NOT _first_entry )
    THEN
        BEGIN
        _ln[ _ln_len + 1 ] := ',';
        _ln_len := _ln_len + 2;
        END;
    (*ENDIF*) 
    g17sname_to_line( 'aggr optim  ', _ln_len, _ln );
    _first_entry  := false;
    END;
(*ENDIF*) 
g041line_to_trace( transid, _ln );
_first_entry := true;
(**************************************)
(* qp_check_key_min_max_opt, qp_check_inv_min_max_opt, qp_auto_distinct *)
_ln          := a71blankline;
_ln_len      := 0;
IF  ( qp_check_key_MIN_MAX_opt in qprop.qps_switches )
THEN
    BEGIN
    IF  ( NOT _first_entry )
    THEN
        BEGIN
        _ln[ _ln_len + 1 ] := ',';
        _ln_len := _ln_len + 2;
        END;
    (*ENDIF*) 
    g17sname_to_line( 'key MIN/MAX ', _ln_len, _ln );
    _first_entry  := false;
    END;
(*ENDIF*) 
IF  ( qp_check_inv_MIN_MAX_opt in qprop.qps_switches )
THEN
    BEGIN
    IF  ( NOT _first_entry )
    THEN
        BEGIN
        _ln[ _ln_len + 1 ] := ',';
        _ln_len := _ln_len + 2;
        END;
    (*ENDIF*) 
    g17sname_to_line( 'inv MIN/MAX ', _ln_len, _ln );
    _first_entry  := false;
    END;
(*ENDIF*) 
IF  ( qp_auto_distinct in qprop.qps_switches )
THEN
    BEGIN
    IF  ( NOT _first_entry )
    THEN
        BEGIN
        _ln[ _ln_len + 1 ] := ',';
        _ln_len := _ln_len + 2;
        END;
    (*ENDIF*) 
    g17sname_to_line( 'auto distinc', _ln_len, _ln );
    _first_entry  := false;
    END;
(*ENDIF*) 
g041line_to_trace( transid, _ln );
_first_entry := true;
(**************************************)
g041c30_to_trace( transid, '------------------------------' );
&ifdef trace
t01set_bool_debug_or_trace;
&endif
END;
 
(*------------------------------*) 
 
PROCEDURE
      a727trace_eval (
            VAR transid : tgg00_TransContext;
            txt        : tsp00_C30;
            cnt_rec    : boolean;
            all_rows   : tsp00_Int4;
            act_rows   : tsp00_Int4;
            all_pages  : tsp00_Int4;
            min_pages  : tsp00_Int4;
            act_pages  : tsp00_Int4;
            fraction   : tsp00_Longreal);
 
VAR
      len  : tsp00_Int4;
      line : tsp00_Line;
 
BEGIN
&ifdef trace
t01disable_debug_or_trace;
&endif
g041c30_to_trace( transid, txt );
IF  ( cnt_rec )
THEN
    BEGIN
    g041int4_to_trace (transid, 'stat  prim rows   ', all_rows);
    IF  ( act_rows = IS_UNDEFINED_GG07 )
    THEN
        g041c30_to_trace( transid,  'found primrows undef          ' )
    ELSE
        g041int4_to_trace (transid, 'found prim rows   ', act_rows);
    (*ENDIF*) 
    END;
(*ENDIF*) 
g041int4_to_trace (transid, 'stat  pages       ', all_pages);
g041int4_to_trace (transid, 'min,  pages       ', min_pages);
g041int4_to_trace (transid, 'found pages       ', act_pages);
len  := 0;
line := a71blankline;
g17nameto_line( 'Fraction          ', len, line );
g17longreal_to_line( fraction, 6, 16, line );
g041line_to_trace( transid, line );
&ifdef trace
t01set_bool_debug_or_trace;
&endif
END;
 
(*------------------------------*) 
 
PROCEDURE
      a727trace_strategy_text(
            VAR transid : tgg00_TransContext;
            name        : tsp00_Sname;
            strategy    : tgg07_StratEnum);
 
VAR
      _len     : tsp00_Int4;
      _line    : tsp00_Line;
 
BEGIN
&ifdef trace
t01disable_debug_or_trace;
&endif
_len  := 0;
_line := a71blankline;
g17sname_to_line( name, _len, _line );
_len  := sizeof( name ) + 2;
_line[ _len ] := ':';
_len := succ( _len );
g17stratenum_to_line( strategy, _len, _line );
g041line_to_trace( transid, _line );
&ifdef trace
t01set_bool_debug_or_trace;
&endif
END;
 
(*------------------------------*) 
 
PROCEDURE
      a727trace_involved_cols (
            VAR transid : tgg00_TransContext;
            proc_name   : tsp00_Name;
            ic_info     : tak70_involved_columns;
            distinct    : boolean;
            inv_only    : boolean);
 
BEGIN
&ifdef trace
t01disable_debug_or_trace;
&endif
WITH ic_info DO
    BEGIN
    IF  ( distinct OR inv_only )
    THEN
        BEGIN
        g041name_to_trace( transid, proc_name );
        ;
        ak727trace_colsequence_ex( transid, 'index output',
              ic_i_outp_cols, ic_i_outp_cnt );
        a727trace_colposarr_ex( transid,    'key   output',
              ic_k_outp_cols, ic_k_outp_cnt );
        IF  ( inv_only )
        THEN
            BEGIN
            ak727trace_colsequence_ex( transid, 'index qual  ',
                  ic_i_qual_cols, ic_i_qual_cnt );
            a727trace_colposarr_ex( transid,    'key   qual  ',
                  ic_k_qual_cols, ic_k_qual_cnt );
            END;
        (*ENDIF*) 
        END;
    (*ENDIF*) 
    END;
(*ENDWITH*) 
&ifdef trace
t01set_bool_debug_or_trace;
&endif
END;
 
(*------------------------------*) 
 
PROCEDURE
      a727trace_colposarr (
            VAR transid : tgg00_TransContext;
            nam         : tsp00_Sname;
            VAR keypos  : tgg07_ColPosArr);
 
BEGIN
a727trace_colposarr_ex( transid, nam, keypos, MAX_STRATEGY_KEYS_GG04 );
END;
 
(*------------------------------*) 
 
PROCEDURE
      a727trace_colposarr_ex (
            VAR transid : tgg00_TransContext;
            nam         : tsp00_Sname;
            VAR keypos  : tgg07_ColPosArr;
            length      : tsp00_Int2);
 
VAR
      _ix       : tsp00_Int2;
      _ln_len   : integer;
      _line     : tsp00_Line;
 
BEGIN
&ifdef trace
t01disable_debug_or_trace;
&endif
_line   := a71blankline;
_ln_len := 0;
g17sname_to_line( nam, _ln_len, _line );
_ln_len := sizeof( nam ) + 2;
_line[ _ln_len ] := ':';
_ln_len := _ln_len + 2;
IF  length = 0
THEN
    BEGIN
    g17sname_to_line( 'NONE        ', _ln_len, _line );
    END
ELSE
    FOR _ix := 0 TO length - 1 DO
        BEGIN
        g17trimint4_to_line( keypos[ _ix ], _ln_len, _line );
        _ln_len := succ( _ln_len );
        IF  ( _ln_len > 70 ) AND ( _ix < MAX_COLPOSARR_IDX_GG07 )
        THEN
            BEGIN
            g041line_to_trace( transid, _line );
            _line := a71blankline;
            _ln_len := sizeof( nam ) + 4;
            END
        (*ENDIF*) 
        END;
    (*ENDFOR*) 
(*ENDIF*) 
g041line_to_trace( transid, _line );
&ifdef trace
t01set_bool_debug_or_trace;
&endif
END;
 
(*------------------------------*) 
 
PROCEDURE
      a727trace_keystrat(
            VAR transid   : tgg00_TransContext;
            name          : tsp00_Sname;
            VAR key_strat : tgg07_StrKeyInRange);
 
VAR
      _ln_len   : integer;
      _line     : tsp00_Line;
 
BEGIN
&ifdef trace
t01disable_debug_or_trace;
&endif
_line   := a71blankline;
_ln_len := 0;
g17sname_to_line( name, _ln_len, _line );
_ln_len := sizeof( name ) + 2;
_line[ _ln_len ] := ':';
_ln_len := _ln_len + 2;
g041line_to_trace( transid, _line );
WITH key_strat DO
    BEGIN
    a727trace_colposarr( transid, 'key start   ', skir_keystart );
    a727trace_colposarr( transid, 'key stop    ', skir_keystop );
    IF  ( skir_IN_SUBQ_stpos <> IS_UNDEFINED_GG07 )
    THEN
        BEGIN
        g041int4_to_trace( transid, 'IN/SUBQ stackpos  ', skir_IN_SUBQ_stpos );
        g041int4_to_trace( transid, 'IN elem cnt       ', skir_inelemcnt );
        IF  ( ksp_auto_distinct in skir_strat_props )
        THEN
            g041name_to_trace( transid, 'auto distinct     ' );
        (*ENDIF*) 
        IF  ( ksp_exact_match in skir_strat_props )
        THEN
            g041name_to_trace( transid, 'exact match       ' );
        (*ENDIF*) 
        IF  ( ksp_exact_IN_SUBQ_match in skir_strat_props )
        THEN
            g041name_to_trace( transid, 'exact INSUBQ match' );
        (*ENDIF*) 
        IF  ( ksp_order_support in skir_strat_props )
        THEN
            BEGIN
            IF  ( ksp_order_support_reverse in skir_strat_props )
            THEN
                g041name_to_trace( transid, 'reverse           ' );
            (*ENDIF*) 
            g041name_to_trace( transid, 'key order support ' );
            END;
        (*ENDIF*) 
        END;
    (*ENDIF*) 
    IF  ( ksp_aggr_MIN_opt in key_strat.skir_strat_props )
    THEN
        g041name_to_trace( transid, 'MIN optim         ' );
    (*ENDIF*) 
    IF  ( ksp_aggr_MAX_opt in key_strat.skir_strat_props )
    THEN
        g041name_to_trace( transid, 'MAX optim         ' );
    (*ENDIF*) 
    END;
(*ENDWITH*) 
&ifdef trace
t01set_bool_debug_or_trace;
&endif
END;
 
(*------------------------------*) 
 
PROCEDURE
      a727trace_invstrat(
            VAR transid   : tgg00_TransContext;
            name          : tsp00_Sname;
            VAR inv_strat : tgg07_StrInvInRange;
            trace_keyarr  : boolean);
 
VAR
      _ln_len   : integer;
      _line     : tsp00_Line;
 
BEGIN
&ifdef trace
t01disable_debug_or_trace;
&endif
_line   := a71blankline;
_ln_len := 0;
g17sname_to_line( name, _ln_len, _line );
_ln_len := sizeof( name ) + 2;
_line[ _ln_len ] := ':';
_ln_len := _ln_len + 2;
g041line_to_trace( transid, _line );
WITH inv_strat DO
    BEGIN
    IF  ( trace_keyarr )
    THEN
        BEGIN
        a727trace_colposarr( transid, 'key start   ', siir_keystart );
        a727trace_colposarr( transid, 'key stop    ', siir_keystop );
        END;
    (*ENDIF*) 
    a727trace_colposarr_ex( transid, 'inv start   ',
          siir_invstart, siir_startcnt );
    a727trace_colposarr_ex( transid, 'inv stop    ',
          siir_invstop, siir_stopcnt );
    (**)
    g041int4_to_trace( transid, 'index_no          ', siir_indexno );
    g041int4_to_trace( transid, 'icount            ', siir_icount );
    g041int4_to_trace( transid, 'invlen            ', siir_invlen );
    ak727InvColSet( transid, 'invcoldesc  ', siir_invcoldesc );
    IF  ( siir_IN_SUBQ_stpos = IS_UNDEFINED_GG07 )
    THEN
        g041c30_to_trace( transid,  'IN/SUBQ stpos undef           ' )
    ELSE
        g041int4_to_trace( transid, 'IN/SUBQ stpos     ', siir_IN_SUBQ_stpos );
    (*ENDIF*) 
    IF  ( siir_inelemcnt = IS_UNDEFINED_GG07 )
    THEN
        g041c30_to_trace( transid,  'IN elem cnt undef             ' )
    ELSE
        g041int4_to_trace( transid, 'IN elem cnt       ', siir_inelemcnt );
    (*ENDIF*) 
    IF  ( siir_subq_idx = IS_UNDEFINED_GG07 )
    THEN
        g041name_to_trace( transid,  'subq idx  undef   ' )
    ELSE
        g041int4_to_trace( transid, 'subq idx          ', siir_subq_idx );
    (*ENDIF*) 
    IF  ( siir_out_invseqlen = IS_UNDEFINED_GG07 )
    THEN
        g041c30_to_trace( transid, 'out invseqlen  undef          ' )
    ELSE
        g041int4_to_trace( transid, 'out invseqlen     ', siir_out_invseqlen );
    (*ENDIF*) 
    g041name_to_trace( transid, '- inv properties -' );
    IF  ( isp_auto_distinct in siir_strat_props )
    THEN
        g041name_to_trace( transid, 'auto distinct     ' );
    (*ENDIF*) 
    IF  ( isp_unique_idx in siir_strat_props )
    THEN
        g041name_to_trace( transid, 'iunique           ' );
    (*ENDIF*) 
    IF  ( isp_inv_only in siir_strat_props )
    THEN
        g041name_to_trace( transid, 'inv only          ' );
    (*ENDIF*) 
    IF  ( isp_exact_match in siir_strat_props )
    THEN
        g041name_to_trace( transid, 'exact match       ' );
    (*ENDIF*) 
    IF  ( isp_exact_IN_SUBQ_match in siir_strat_props )
    THEN
        g041name_to_trace( transid, 'exact INSUBQ match' );
    (*ENDIF*) 
    IF  ( isp_order_support in siir_strat_props )
    THEN
        BEGIN
        IF  ( isp_order_support_reverse in siir_strat_props )
        THEN
            g041name_to_trace( transid, 'reverse           ' );
        (*ENDIF*) 
        g041name_to_trace( transid, 'inv order support ' );
        END;
    (*ENDIF*) 
    IF  ( isp_listmerge_allowed in siir_strat_props )
    THEN
        g041name_to_trace( transid, 'merge possible    ' );
    (*ENDIF*) 
    IF  ( isp_aggr_MIN_opt in inv_strat.siir_strat_props )
    THEN
        BEGIN
        IF  ( isp_aggr_MIN_opt_reverse in inv_strat.siir_strat_props )
        THEN
            g041name_to_trace( transid, 'MIN opt as MAX opt' )
        ELSE
            g041name_to_trace( transid, 'MIN opt           ' );
        (*ENDIF*) 
        IF  ( siir_MIN_recpos = IS_UNDEFINED_GG07 )
        THEN
            g041c30_to_trace( transid, 'MIN recpos undef              ' )
        ELSE
            g041int4_to_trace( transid, 'MIN recpos        ', siir_MIN_recpos );
        (*ENDIF*) 
        END;
    (*ENDIF*) 
    IF  ( isp_aggr_MAX_opt in inv_strat.siir_strat_props )
    THEN
        BEGIN
        IF  ( isp_aggr_MAX_opt_reverse in inv_strat.siir_strat_props )
        THEN
            g041name_to_trace( transid, 'MAX opt as MIN opt' )
        ELSE
            g041name_to_trace( transid, 'MAX opt           ' );
        (*ENDIF*) 
        IF  ( siir_MAX_recpos = IS_UNDEFINED_GG07 )
        THEN
            g041c30_to_trace( transid, 'MAX recpos undef              ' )
        ELSE
            g041int4_to_trace( transid, 'MAX recpos        ', siir_MAX_recpos );
        (*ENDIF*) 
        END;
    (*ENDIF*) 
    IF  ( isp_pure_inv_output in siir_strat_props )
    THEN
        g041name_to_trace( transid, 'pure inv output   ' );
    (*ENDIF*) 
    IF  ( isp_aggr_optim in siir_strat_props )
    THEN
        g041name_to_trace( transid, 'aggregation optim ' );
    (*ENDIF*) 
    END;
(*ENDWITH*) 
&ifdef trace
t01set_bool_debug_or_trace;
&endif
END;
 
(*------------------------------*) 
 
PROCEDURE
      a727trace_tablename (
            VAR transid     : tgg00_TransContext;
            name            : tsp00_Sname;
            VAR tabname     :tsp00_KnlIdentifier);
 
VAR
      _line         : tsp00_Line;
      _ln_len       : integer;
      _j            : tsp00_Int2;
 
BEGIN
&ifdef trace
t01disable_debug_or_trace;
&endif
_line   := a71blankline;
_ln_len := 0;
g17sname_to_line( name, _ln_len, _line );
_ln_len := sizeof( name ) + 2;
_line[ _ln_len ] := ':';
_ln_len := _ln_len + 2;
;
FOR _j := 1 TO sizeof( tabname ) DO
    BEGIN
    IF  ( g17printable_char( tabname[ _j ] ))
    THEN
        _line[ _ln_len ] := tabname [ _j ]
    ELSE
        _line[ _ln_len ] := '.';
    (*ENDIF*) 
    _ln_len := succ( _ln_len );
    END;
(*ENDFOR*) 
g041line_to_trace( transid, _line );
&ifdef trace
t01set_bool_debug_or_trace;
&endif
END;
 
(*------------------------------*) 
 
PROCEDURE
      a727trace_col_cluster (
            VAR transid     : tgg00_TransContext;
            nam             : tsp00_Sname;
            VAR col_cluster : tak70_sort_col_arr;
            array_len       : tsp00_Int2);
 
VAR
      _ix       : tsp00_Int2;
      _colpos   : tsp00_Int2;
      _colcnt   : tsp00_Int2;
      _ln_len   : integer;
      _line     : tsp00_Line;
 
BEGIN
&ifdef trace
t01disable_debug_or_trace;
&endif
_line   := a71blankline;
_ln_len := 0;
g17sname_to_line( nam, _ln_len, _line );
_ln_len := sizeof( nam ) + 2;
_line[ _ln_len ] := ':';
_colpos := 0;
_colcnt := 0;
_ix     := 1;
IF  ( array_len = 0 )
THEN
    BEGIN
    g17sname_to_line( '  NONE      ', _ln_len, _line );
    END
ELSE
    WHILE _ix <= array_len DO
        BEGIN
        IF  _colpos = col_cluster[ _ix ].col_id
        THEN
            BEGIN
            IF  col_cluster[ _ix ].col_stpos <> 0
            THEN
                CASE col_cluster[ _ix ].col_eop OF
                    op_eq:
                        BEGIN
                        IF  _ln_len + 8 <= sizeof( tsp00_Line )
                        THEN
                            IF  NOT col_cluster[ _ix ].col_subq
                            THEN
                                BEGIN
                                _line[ _ln_len + 1 ] := '=';
                                _line[ _ln_len + 2 ] := '(';
                                _ln_len := _ln_len + 2;
                                g17trimint4_to_line( col_cluster[ _ix ].col_stpos,
                                      _ln_len, _line );
                                _line[ _ln_len + 1 ] := ')';
                                _ln_len := _ln_len + 2;
                                END
                            ELSE
                                BEGIN
                                _line[ _ln_len + 1 ] := 'S';
                                _line[ _ln_len + 2 ] := 'U';
                                _line[ _ln_len + 3 ] := 'B';
                                _line[ _ln_len + 4 ] := 'Q';
                                _line[ _ln_len + 5 ] := '(';
                                _ln_len := _ln_len + 5;
                                g17trimint4_to_line( col_cluster[ _ix ].col_stpos,
                                      _ln_len, _line );
                                _line[ _ln_len + 1 ] := ')';
                                _ln_len := _ln_len + 2;
                                END;
                            (*ENDIF*) 
                        (*ENDIF*) 
                        END;
                    op_gt:
                        BEGIN
                        IF  _ln_len + 8 <= sizeof( tsp00_Line )
                        THEN
                            BEGIN
                            _line[ _ln_len + 1 ] := '>';
                            _line[ _ln_len + 2 ] := '(';
                            _ln_len := _ln_len + 2;
                            g17trimint4_to_line( col_cluster[ _ix ].col_stpos,
                                  _ln_len, _line );
                            _line[ _ln_len + 1 ] := ')';
                            _ln_len := _ln_len + 2;
                            END;
                        (*ENDIF*) 
                        END;
                    op_ge:
                        BEGIN
                        IF  _ln_len + 9 <= sizeof( tsp00_Line )
                        THEN
                            BEGIN
                            _line[ _ln_len + 1 ] := '>';
                            _line[ _ln_len + 2 ] := '=';
                            _line[ _ln_len + 3 ] := '(';
                            _ln_len := _ln_len + 3;
                            g17trimint4_to_line( col_cluster[ _ix ].col_stpos,
                                  _ln_len, _line );
                            _line[ _ln_len + 1 ] := ')';
                            _ln_len := _ln_len + 2;
                            END;
                        (*ENDIF*) 
                        END;
                    op_lt:
                        BEGIN
                        IF  _ln_len + 8 <= sizeof( tsp00_Line )
                        THEN
                            BEGIN
                            _line[ _ln_len + 1 ] := '<';
                            _line[ _ln_len + 2 ] := '(';
                            _ln_len := _ln_len + 2;
                            g17trimint4_to_line( col_cluster[ _ix ].col_stpos,
                                  _ln_len, _line );
                            _line[ _ln_len + 1 ] := ')';
                            _ln_len := _ln_len + 2;
                            END;
                        (*ENDIF*) 
                        END;
                    op_le:
                        BEGIN
                        IF  _ln_len + 9 <= sizeof( tsp00_Line )
                        THEN
                            BEGIN
                            _line[ _ln_len + 1 ] := '<';
                            _line[ _ln_len + 2 ] := '=';
                            _line[ _ln_len + 3 ] := '(';
                            _ln_len := _ln_len + 3;
                            g17trimint4_to_line( col_cluster[ _ix ].col_stpos,
                                  _ln_len, _line );
                            _line[ _ln_len + 1 ] := ')';
                            _ln_len := _ln_len + 2;
                            END;
                        (*ENDIF*) 
                        END;
                    op_between:
                        IF  _ln_len + 11 <= sizeof( tsp00_Line )
                        THEN
                            BEGIN
                            g17sname_to_line( 'BTWN        ', _ln_len, _line );
                            _line[ _ln_len + 1 ] := '(';
                            _ln_len := succ( _ln_len );
                            g17trimint4_to_line( col_cluster[ _ix ].col_stpos,
                                  _ln_len, _line );
                            _line[ _ln_len + 1 ] := ')';
                            _ln_len := _ln_len + 2;
                            END;
                        (*ENDIF*) 
                    op_like:
                        IF  _ln_len + 11 <= sizeof( tsp00_Line )
                        THEN
                            BEGIN
                            g17sname_to_line( 'LIKE        ', _ln_len, _line );
                            _line[ _ln_len + 1 ] := '(';
                            _ln_len := succ( _ln_len );
                            g17trimint4_to_line( col_cluster[ _ix ].col_stpos,
                                  _ln_len, _line );
                            _line[ _ln_len + 1 ] := ')';
                            _ln_len := _ln_len + 2;
                            END;
                        (*ENDIF*) 
                    op_in:
                        IF  _ln_len + 8 <= sizeof( tsp00_Line )
                        THEN
                            BEGIN
                            g17sname_to_line( 'IN          ', _ln_len, _line );
                            _line[ _ln_len + 1 ] := '(';
                            _ln_len := succ( _ln_len );
                            g17trimint4_to_line( col_cluster[ _ix ].col_stpos,
                                  _ln_len, _line );
                            _line[ _ln_len + 1 ] := ')';
                            _ln_len := _ln_len + 2;
                            END;
                        (*ENDIF*) 
                    OTHERWISE
                        BEGIN
                        IF  _ln_len + 8 <= sizeof( tsp00_Line )
                        THEN
                            BEGIN
                            _line[ _ln_len + 1 ] := '?';
                            _line[ _ln_len + 2 ] := '(';
                            _ln_len := _ln_len + 2;
                            g17trimint4_to_line( col_cluster[ _ix ].col_stpos,
                                  _ln_len, _line );
                            _line[ _ln_len + 1 ] := ')';
                            _ln_len := _ln_len + 2;
                            END;
                        (*ENDIF*) 
                        END;
                    END;
                (*ENDCASE*) 
            (*ENDIF*) 
            _ix := succ( _ix );
            END
        ELSE
            BEGIN
            g041line_to_trace (transid, _line );
            _colcnt := succ( _colcnt );
            _colpos := col_cluster[ _ix ].col_id;
            _line   := a71blankline;
            _ln_len := 0;
            g17sname_to_line( 'Key         ', _ln_len, _line );
            _ln_len := succ( _ln_len );
            g17trimint4_to_line( _colcnt, _ln_len, _line );
            _ln_len := _ln_len + 2;
            _line[ _ln_len ] := ':';
            _ln_len := _ln_len + 2;
            END;
        (*ENDIF*) 
        END;
    (*ENDWHILE*) 
(*ENDIF*) 
g041line_to_trace (transid, _line );
&ifdef trace
t01set_bool_debug_or_trace;
&endif
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak727trace_colsequence_ex (
            VAR transid : tgg00_TransContext;
            nam         : tsp00_Sname;
            VAR colseq  : tak_colsequence;
            length      : tsp00_Int2);
 
VAR
      _ix       : tsp00_Int2;
      _ln_len   : integer;
      _line     : tsp00_Line;
 
BEGIN
&ifdef trace
t01disable_debug_or_trace;
&endif
_line   := a71blankline;
_ln_len := 0;
g17sname_to_line( nam, _ln_len, _line );
_ln_len := sizeof( nam ) + 2;
_line[ _ln_len ] := ':';
_ln_len := _ln_len + 2;
IF  length = 0
THEN
    BEGIN
    g17sname_to_line( 'NONE        ', _ln_len, _line );
    END
ELSE
    FOR _ix := 1 TO length DO
        BEGIN
        g17trimint4_to_line( colseq[ _ix ], _ln_len, _line );
        _ln_len := succ( _ln_len );
        IF  ( _ln_len > 70 ) AND ( _ix < MAX_COL_SEQUENCE_GG00 )
        THEN
            BEGIN
            g041line_to_trace( transid, _line );
            _line := a71blankline;
            _ln_len := sizeof( nam ) + 4;
            END
        (*ENDIF*) 
        END;
    (*ENDFOR*) 
(*ENDIF*) 
g041line_to_trace( transid, _line );
&ifdef trace
t01set_bool_debug_or_trace;
&endif
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak727InvColSet (
            VAR transid     : tgg00_TransContext;
            nam             : tsp00_Sname;
            invcolset       : tgg07_InvColSet);
 
VAR
      _ix       : tsp00_Int2;
      _ln_len   : integer;
      _line     : tsp00_Line;
 
BEGIN
&ifdef trace
t01disable_debug_or_trace;
&endif
_line   := a71blankline;
_ln_len := 0;
g17sname_to_line( nam, _ln_len, _line );
_ln_len := sizeof( nam ) + 2;
_line[ _ln_len ] := ':';
_ln_len := _ln_len + 2;
IF  ( invcolset = [] )
THEN
    BEGIN
    g17sname_to_line( 'EMPTY       ', _ln_len, _line );
    END
ELSE
    FOR _ix := 1 TO MAX_COL_SEQUENCE_GG00 DO
        BEGIN
        IF  ( _ix in invcolset )
        THEN
            BEGIN
            g17trimint4_to_line( _ix, _ln_len, _line );
            _ln_len := succ( _ln_len );
            IF  ( _ln_len > 70 ) AND ( _ix < MAX_COL_SEQUENCE_GG00 )
            THEN
                BEGIN
                g041line_to_trace( transid, _line );
                _line   := a71blankline;
                _ln_len := sizeof( nam ) + 4;
                END
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        END;
    (*ENDFOR*) 
(*ENDIF*) 
g041line_to_trace( transid, _line );
&ifdef trace
t01set_bool_debug_or_trace;
&endif
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak727trace_keyaccess (
            VAR transid     : tgg00_TransContext;
            nam             : tsp00_Name;
            VAR keyaccess   : tak70_key_access);
 
VAR
      _ln_len   : integer;
      _line     : tsp00_Line;
 
BEGIN
&ifdef trace
t01disable_debug_or_trace;
&endif
_line   := a71blankline;
_ln_len := 0;
g17nameto_line( nam, _ln_len, _line );
_ln_len := sizeof( nam ) + 2;
_line[ _ln_len ] := ':';
g041line_to_trace( transid, _line );
a727trace_colposarr_ex( transid, 'start fields',
      keyaccess.ka_startfields, keyaccess.ka_startcnt );
a727trace_colposarr_ex( transid, 'stop fields ',
      keyaccess.ka_stopfields, keyaccess.ka_stopcnt );
IF  keyaccess.ka_infield.in_stpos <> 0
THEN
    BEGIN
    g041int4_to_trace( transid, 'IN stack pos      ', keyaccess.ka_infield.in_stpos );
    g041int4_to_trace( transid, 'IN elem cnt       ', keyaccess.ka_infield.in_elemcnt );
    END;
(*ENDIF*) 
IF  keyaccess.ka_SUBQ_idx <> IS_UNDEFINED_GG07
THEN
    g041int4_to_trace( transid, 'SUBQ idx          ', keyaccess.ka_SUBQ_idx );
&ifdef trace
(*ENDIF*) 
t01set_bool_debug_or_trace;
&endif
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak727trace_invposarr_ex (
            VAR transid : tgg00_TransContext;
            nam         : tsp00_Sname;
            VAR invpos  : tak70_Invposarr;
            length      : tsp00_Int2);
 
VAR
      _ix       : tsp00_Int2;
      _ln_len   : integer;
      _line     : tsp00_Line;
 
BEGIN
&ifdef trace
t01disable_debug_or_trace;
&endif
_line   := a71blankline;
_ln_len := 0;
g17sname_to_line( nam, _ln_len, _line );
_ln_len := sizeof( nam ) + 2;
_line[ _ln_len ] := ':';
_ln_len := _ln_len + 2;
IF  length = 0
THEN
    BEGIN
    g17sname_to_line( 'NONE        ', _ln_len, _line );
    END
ELSE
    FOR _ix := 0 TO length - 1 DO
        BEGIN
        g17trimint4_to_line( invpos[ _ix ], _ln_len, _line );
        _ln_len := succ( _ln_len );
        IF  ( _ln_len > 70 ) AND ( _ix < length - 1 )
        THEN
            BEGIN
            g041line_to_trace( transid, _line );
            _line := a71blankline;
            _ln_len := sizeof( nam ) + 4;
            END
        (*ENDIF*) 
        END;
    (*ENDFOR*) 
(*ENDIF*) 
g041line_to_trace( transid, _line );
&ifdef trace
t01set_bool_debug_or_trace;
&endif
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak727trace_invinposarr_ex (
            VAR transid : tgg00_TransContext;
            nam         : tsp00_Sname;
            VAR invpos  : tak70_InvInposarr;
            length      : tsp00_Int2);
 
VAR
      _ix       : tsp00_Int2;
      _ln_len   : integer;
      _line     : tsp00_Line;
 
BEGIN
&ifdef trace
t01disable_debug_or_trace;
&endif
_line   := a71blankline;
_ln_len := 0;
g17sname_to_line( nam, _ln_len, _line );
_ln_len := sizeof( nam ) + 2;
_line[ _ln_len ] := ':';
_ln_len := _ln_len + 2;
IF  length = 0
THEN
    BEGIN
    g17sname_to_line( 'NONE        ', _ln_len, _line );
    END
ELSE
    FOR _ix := 0 TO length - 1 DO
        BEGIN
        g17trimint4_to_line( invpos[ _ix ].in_stpos, _ln_len, _line );
        _ln_len := succ( _ln_len );
        _line[ _ln_len ] := '[';
        _ln_len := succ( _ln_len );
        g17trimint4_to_line( invpos[ _ix ].in_elemcnt, _ln_len, _line );
        _ln_len := succ( _ln_len );
        _line[ _ln_len ] := ']';
        _ln_len := succ( _ln_len );
        IF  ( _ln_len > 70 ) AND ( _ix < length - 1 )
        THEN
            BEGIN
            g041line_to_trace( transid, _line );
            _line := a71blankline;
            _ln_len := sizeof( nam ) + 4;
            END
        (*ENDIF*) 
        END;
    (*ENDFOR*) 
(*ENDIF*) 
g041line_to_trace( transid, _line );
&ifdef trace
t01set_bool_debug_or_trace;
&endif
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak727trace_invaccess (
            VAR transid     : tgg00_TransContext;
            nam             : tsp00_Name;
            VAR invaccess   : tak70_index_access);
 
VAR
      _ln_len   : integer;
      _line     : tsp00_Line;
 
BEGIN
&ifdef trace
t01disable_debug_or_trace;
&endif
_line   := a71blankline;
_ln_len := 0;
g17nameto_line( nam, _ln_len, _line );
_ln_len := sizeof( nam ) + 2;
_line[ _ln_len ] := ':';
g041line_to_trace( transid, _line );
ak727trace_invposarr_ex( transid, 'start fields',
      invaccess.ia_startfields, invaccess.ia_startcnt );
ak727trace_invposarr_ex( transid, 'stop fields ',
      invaccess.ia_stopfields, invaccess.ia_stopcnt );
ak727trace_invinposarr_ex( transid, 'in fields   ',
      invaccess.ia_infields, invaccess.ia_incnt );
&ifdef trace
t01set_bool_debug_or_trace;
&endif
END;
 
(*------------------------------*) 
 
PROCEDURE
      a727trace_costs (
            VAR transid  : tgg00_TransContext;
            VAR strategy : tak70_one_strat);
 
BEGIN
g041int4_to_trace( transid, 'whole cost pages  ', strategy.ostr_wholeIO_pages );
IF  ( strategy.ostr_readIO_pages = IS_UNDEFINED_GG07 )
THEN
    g041c30_to_trace( transid,  'read pages    undef           ' )
ELSE
    g041int4_to_trace( transid, 'read pages        ', strategy.ostr_readIO_pages );
(*ENDIF*) 
IF  ( strategy.ostr_readIO_rows = IS_UNDEFINED_GG07 )
THEN
    g041c30_to_trace( transid,  'read rows     undef           ' )
ELSE
    g041int4_to_trace( transid, 'read rows         ', strategy.ostr_readIO_rows );
(*ENDIF*) 
IF  ( strategy.ostr_strat_value = IS_UNDEFINED_GG07 )
THEN
    g041c30_to_trace( transid,  'strat value   undef           ' )
ELSE
    g041longreal_to_trace( transid, 'strat value       ', strategy.ostr_strat_value );
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a727L1_terms_trace (
            VAR acv      : tak_all_command_glob;
            VAR L1_terms : tak70_term);
 
VAR
      _l1term : tsp00_Int2;
      _preds  : tsp00_Int2;
      _t      : tsp00_Int2;
      _dt     : tsp00_DataLine;
 
BEGIN
g041name_to_trace( acv.a_transinf.tri_trans, '---- L1 terms ----' );
g041int4_to_trace( acv.a_transinf.tri_trans,
      'L1term cnt        ', L1_terms.trm_L1termcnt );
_l1term := 0;
WHILE ( _l1term <= L1_terms.trm_L1termcnt - 1 ) AND
      ( _l1term <= cak70_max_L1terms - 1 ) DO
    BEGIN
    WITH L1_terms.trm_L1terms[ _l1term ] DO
        IF  l1t_is_usable
        THEN
            BEGIN
            IF  ( l1t_L2pL3tcnt > 0 )
            THEN
                BEGIN
                g041int4_to_trace( acv.a_transinf.tri_trans,
                      'L2pL3term         ', l1t_L2pL3tcnt );
                _t := 1;
                WHILE ( _t <= l1t_L2pL3tcnt ) DO
                    BEGIN
                    WITH l1t_L2terms[ _t - 1 ], _dt DO
                        BEGIN
                        _dt.text       := a71blankline;
                        _dt.text[ 1 ]  := 'L';
                        _dt.text[ 2 ]  := '1';
                        _dt.text[ 3 ]  := 'T';
                        _dt.text[ 4 ]  := 'E';
                        _dt.text[ 5 ]  := 'R';
                        _dt.text[ 6 ]  := 'M';
                        _dt.text[ 7 ]  := chr( _l1term + ord( '0' ) );
                        _dt.text[ 9 ]  := 'T';
                        _dt.text[ 10 ] := 'E';
                        _dt.text[ 11 ] := 'R';
                        _dt.text[ 12 ] := 'M';
                        IF  ( _t < 10 )
                        THEN
                            _dt.text[ 13 ] := chr( _t + ord('0') )
                        ELSE
                            BEGIN
                            _dt.text[ 13 ] :=
                                  chr( ( _t DIV 10 ) + ord( '0' ) );
                            _dt.text[ 14 ] :=
                                  chr( ( _t MOD 10 ) + ord( '0' ) )
                            END;
                        (*ENDIF*) 
                        g041line_to_trace(acv.a_transinf.tri_trans, _dt.text);
                        _preds := 1;
                        WHILE ( _preds <= l2l3p_predcnt ) DO
                            WITH l2l3p_preds[ _preds - 1 ] DO
                                BEGIN
                                _dt.text := a71blankline;
                                _dt.text[ 12 ] := 'P';
                                _dt.text[ 13 ] := 'R';
                                _dt.text[ 14 ] := 'E';
                                _dt.text[ 15 ] := 'D';
                                _dt.text[ 17 ] :=
                                      chr( _preds + ord( '0' ) );
                                pos    := 19;
                                length := 21;
                                g17int4to_line ( pred_start, false, 3,
                                      _dt.pos, _dt.text);
                                pos    := 23;
                                length := 25;
                                g17int4to_line ( pred_stop, false, 3,
                                      _dt.pos, _dt.text);
                                IF  pred_key
                                THEN
                                    _dt.text[ 29 ] := 'K';
                                (*ENDIF*) 
                                IF  pred_inv
                                THEN
                                    _dt.text[ 31 ] := 'I';
                                (*ENDIF*) 
                                pos    := 33;
                                length := 42;
                                g041line_to_trace(acv.a_transinf.tri_trans, _dt.text);
                                _preds := succ( _preds );
                                END;
                            (*ENDWITH*) 
                        (*ENDWHILE*) 
                        END;
                    (*ENDWITH*) 
                    _t := succ( _t );
                    END;
                (*ENDWHILE*) 
                END;
            (*ENDIF*) 
            END
        ELSE
            BEGIN
            g041name_to_trace( acv.a_transinf.tri_trans, 'L1 term unusable  ' );
            END;
        (*ENDIF*) 
    (*ENDWITH*) 
    _l1term := succ(_l1term);
    END;
(*ENDWHILE*) 
g041name_to_trace( acv.a_transinf.tri_trans, '------------------' );
END;
 
(*------------------------------*) 
 
PROCEDURE
      a727trace_ord_fields (
            VAR transid : tgg00_TransContext;
            proc_name   : tsp00_Name;
            ord_fields  : tak00_ord_fields);
 
VAR
      _line   : tsp00_Line;
      _lnln   : tsp00_Int4;
      _i      : tsp00_Int2;
 
BEGIN
g041name_to_trace( transid, proc_name );
FOR _i := 1 TO ord_fields.ocntord DO
    BEGIN
    _lnln := 0;
    _line := a71blankline;
    g17sname_to_line( 'st:         ', _lnln, _line );
    _lnln := _lnln + 2;
    g17int4to_line ( ord_fields.ofield[ _i ].ofstno, false, 4, _lnln, _line);
    _lnln := _lnln + 6;
    g17sname_to_line( 'fno:        ', _lnln, _line );
    _lnln := _lnln + 2;
    g17int4to_line ( ord_fields.ofield[ _i ].offno, false, 4, _lnln, _line);
    _lnln := _lnln + 6;
    IF  ( is_order_asc in ord_fields.ofield[ _i ].ofasc )
    THEN
        BEGIN
        g17sname_to_line( 'oasc|       ', _lnln, _line );
        _lnln := _lnln + 1
        END;
    (*ENDIF*) 
    IF  ( is_opt in ord_fields.ofield[ _i ].ofasc )
    THEN
        BEGIN
        g17sname_to_line( 'opt|        ', _lnln, _line );
        _lnln := _lnln + 1
        END;
    (*ENDIF*) 
    IF  ( is_possible_oflw_field in ord_fields.ofield[ _i ].ofasc )
    THEN
        BEGIN
        g17sname_to_line( 'pof|        ', _lnln, _line );
        _lnln := _lnln + 1
        END;
    (*ENDIF*) 
    IF  ( is_val_expression in ord_fields.ofield[ _i ].ofasc )
    THEN
        BEGIN
        g17sname_to_line( 'vexp|       ', _lnln, _line );
        _lnln := _lnln + 1
        END;
    (*ENDIF*) 
    IF  ( is_nls_column in ord_fields.ofield[ _i ].ofasc )
    THEN
        BEGIN
        g17sname_to_line( 'nls|        ', _lnln, _line );
        _lnln := _lnln + 1
        END;
    (*ENDIF*) 
    IF  ( is_not_definite in ord_fields.ofield[ _i ].ofasc )
    THEN
        BEGIN
        g17sname_to_line( 'nd|         ', _lnln, _line );
        _lnln := _lnln + 1
        END;
    (*ENDIF*) 
    IF  ( is_col_only_specified in ord_fields.ofield[ _i ].ofasc )
    THEN
        BEGIN
        g17sname_to_line( 'co          ', _lnln, _line );
        _lnln := _lnln + 1
        END;
    (*ENDIF*) 
    g041line_to_trace(transid, _line);
    END;
(*ENDFOR*) 
END;
 
.CM *-END-* code ----------------------------------------
.SP 2 
***********************************************************
.PA 
