    .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 : 2000-10-11
*****************************************************
modname : VAK351
changed : 2000-10-11
module  : Statement_Syntax
 
Author  : ElkeZ
Created : 1985-10-16
*****************************************************
 
Purpose :
 
Define  :
 
        PROCEDURE
              a351syntax (VAR acv : tak_all_command_glob;
                    kw_index                 : integer;
                    expected_odbc_terminator : tak_odbc_partype);
 
        PROCEDURE
              a351select_statement (
                    VAR acv      : tak_all_command_glob;
                    StmtStartPos : tsp00_Int4;
                    VAR put_node : tsp00_Int2);
 
.CM *-END-* define --------------------------------------
***********************************************************
 
Use     :
 
        FROM
              Scanner : VAK01;
 
        VAR
              a01join_hash_min_ratio   : tsp00_Int4;
              a01join_parall_minsize   : tsp00_Int4;
              a01char_size             : integer;
              a01kw                    : tak_keywordtab;
              a01diag_minmax_optim     : boolean;
              a01use_join_hashtable    : boolean;
              a01trigger               : boolean;
              a01one_join_phase        : boolean;
              a01outer_join_ordered    : boolean;
              a01aggr_optim            : boolean;
              a01join_forced_opjoin    : boolean;
              a01diag_reverse_fetch    : boolean;
 
        PROCEDURE
              a01_call_put (
                    VAR acv  : tak_all_command_glob;
                    proc     : tak_procs;
                    subproc  : tsp00_Int2;
                    VAR curr_n : tsp00_Int2);
 
        PROCEDURE
              a01_get_password (
                    VAR acv        : tak_all_command_glob;
                    VAR put_node   : tsp00_Int2;
                    VAR last_node  : tsp00_Int2);
 
        PROCEDURE
              a01_init_command (VAR acv : tak_all_command_glob);
 
        PROCEDURE
              a01_is_end_symbol (VAR acv : tak_all_command_glob);
 
        PROCEDURE
              a01_next_symbol (VAR acv : tak_all_command_glob);
 
        PROCEDURE
              a01_force_symbol (
                    VAR acv         : tak_all_command_glob;
                    expected_symbol : tak_sc_symbol;
                    VAR node1       : tsp00_Int2;
                    VAR node2       : tsp00_Int2);
 
        PROCEDURE
              a01_get_keyword (
                    VAR acv   : tak_all_command_glob;
                    VAR index : integer;
                    VAR reserved : boolean);
 
        FUNCTION
              a01_eqkey (
                    VAR a      : tak_keyword;
                    sqlmode    : tsp00_SqlMode;
                    VAR b      : tsp00_MoveObj;
                    VAR scv    : tak_scanner_glob) : boolean;
 
        FUNCTION
              a01mandatory_keyword (
                    VAR acv          : tak_all_command_glob;
                    required_keyword : integer) : boolean;
 
        PROCEDURE
              a01_put_node (
                    VAR acv    : tak_all_command_glob;
                    VAR curr_n : tsp00_Int2);
&       ifdef TRACE
 
        PROCEDURE
              a01_write_keywords;
&       endif
 
      ------------------------------ 
 
        FROM
              AK_syntax_tools : VAK02;
 
        PROCEDURE
              a02_ahostfile_name  (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2;
                    VAR last_node : tsp00_Int2);
 
        PROCEDURE
              a02_aauthid (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2;
                    VAR last_node : tsp00_Int2);
 
        PROCEDURE
              a02_asystem_devspace (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2;
                    VAR last_node : tsp00_Int2);
 
        PROCEDURE
              a02_atablename (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2;
                    VAR last_node : tsp00_Int2);
 
        PROCEDURE
              a02_acolumnspec (
                    VAR acv        : tak_all_command_glob;
                    table_required : boolean;
                    VAR put_node   : tsp00_Int2;
                    VAR last_node  : tsp00_Int2);
 
        PROCEDURE
              a02_l_acolumn_list (
                    VAR acv         : tak_all_command_glob;
                    VAR put_node    : tsp00_Int2;
                    VAR last_node   : tsp00_Int2);
 
        PROCEDURE
              a02_put_identifier (
                    VAR acv       : tak_all_command_glob;
                    VAR put_node  : tsp00_Int2;
                    VAR last_node : tsp00_Int2);
 
      ------------------------------ 
 
        FROM
              AK_syntax_values_tools : VAK03;
 
        PROCEDURE
              a03_aunsigned_integer (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2;
                    VAR last_node : tsp00_Int2);
 
        PROCEDURE
              a03_ainteger (
                    VAR acv            : tak_all_command_glob;
                    VAR put_node       : tsp00_Int2;
                    VAR last_node      : tsp00_Int2);
 
        PROCEDURE
              a03_astring_literal (
                    VAR acv          : tak_all_command_glob;
                    VAR put_node     : tsp00_Int2;
                    VAR last_node    : tsp00_Int2);
 
        PROCEDURE
              a03_avalue_spec (
                    VAR acv         : tak_all_command_glob;
                    null_allowed    : boolean;
                    stamp_allowed   : boolean;
                    default_allowed : boolean;
                    sysdba_allowed  : boolean;
                    VAR put_node    : tsp00_Int2;
                    VAR last_node   : tsp00_Int2);
 
      ------------------------------ 
 
        FROM
              AK_semantic_scanner_tools : VAK05;
 
        PROCEDURE
              a05_unsigned_int2_get (
                    VAR acv  : tak_all_command_glob;
                    pos      : integer;
                    l        : tsp00_Int2;
                    err_code : tsp00_Int4;
                    VAR int  : tsp00_Int2);
 
        PROCEDURE
              a05_int4_unsigned_get (
                    VAR acv            : tak_all_command_glob;
                    pos                : integer;
                    l                  : tsp00_Int2;
                    VAR val            : tsp00_Int4);
 
        PROCEDURE
              a05int4_get (
                    VAR acv            : tak_all_command_glob;
                    pos                : integer;
                    l                  : tsp00_Int2;
                    VAR val            : tsp00_Int4);
 
      ------------------------------ 
 
        FROM
              AK_universal_semantic_tools : VAK06;
 
        PROCEDURE
              a06char_retpart_move (
                    VAR acv     : tak_all_command_glob;
                    moveobj_ptr : tsp00_MoveObjPtr;
                    move_len    : tsp00_Int4);
 
        PROCEDURE
              a06finish_curr_retpart (
                    VAR acv   : tak_all_command_glob;
                    part_kind : tsp1_part_kind;
                    arg_count : tsp00_Int2);
 
        PROCEDURE
              a06init_curr_retpart (VAR acv : tak_all_command_glob);
 
        PROCEDURE
              a06retpart_move (
                    VAR acv     : tak_all_command_glob;
                    moveobj_ptr : tsp00_MoveObjPtr;
                    move_len    : tsp00_Int4);
 
        PROCEDURE
              a06colname_retpart_move (
                    VAR acv     : tak_all_command_glob;
                    moveobj_ptr : tsp00_MoveObjPtr;
                    move_len    : tsp00_Int4;
                    src_codeset : tsp00_Int2);
 
      ------------------------------ 
 
        FROM
              AK_error_handling : VAK07;
 
        PROCEDURE
              a07_error (
                    VAR a_scv : tak_all_command_glob;
                    errorcode : tgg00_BasisError;
                    VAR nod1  : tsp00_Int2;
                    VAR nod2  : tsp00_Int2);
 
        PROCEDURE
              a07_b_put_error (
                    VAR acv : tak_all_command_glob;
                    b_err : tgg00_BasisError;
                    err_code : tsp00_Int4);
 
      ------------------------------ 
 
        FROM
              Systeminfo_cache : VAK10;
 
        VAR
              a10chk               : boolean;
              a10EvalParseFileSize : boolean;
 
        PROCEDURE
              a10dump (VAR acv : tak_all_command_glob);
 
      ------------------------------ 
 
        FROM
              AK_DDL_Syntax : VAK20;
 
        PROCEDURE
              a20aalter_statement (
                    VAR acv          : tak_all_command_glob;
                    VAR put_node     : tsp00_Int2;
                    symbindex        : integer);
 
        PROCEDURE
              a20acomment_statement (
                    VAR acv           : tak_all_command_glob;
                    VAR put_node      : tsp00_Int2);
 
        PROCEDURE
              a20acreate_statement (
                    VAR acv         : tak_all_command_glob;
                    VAR put_node    : tsp00_Int2;
                    symbindex       : integer;
                    res_kw          : boolean);
 
        PROCEDURE
              a20adiagnose_alter (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
        PROCEDURE
              a20adiagnose_drop_file_statement(VAR acv : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
        PROCEDURE
              a20adrop_statement (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2;
                    symbindex    : integer);
 
        PROCEDURE
              a20agrant_revoke_statement (
                    VAR acv         : tak_all_command_glob;
                    VAR put_node    : tsp00_Int2;
                    kw_index        : integer);
 
        PROCEDURE
              a20check_table_stmt (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
        PROCEDURE
              a20describe (
                    VAR acv      : tak_all_command_glob;
                    kw_index     : integer;
                    VAR put_node : tsp00_Int2);
 
        PROCEDURE
              a20end_statement (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
        PROCEDURE
              a20_aexist_table (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
        PROCEDURE
              a20_arename_statement (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
        PROCEDURE
              a20_asave_restore (
                    VAR acv      : tak_all_command_glob;
                    kw_index     : integer;
                    VAR put_node : tsp00_Int2);
 
        PROCEDURE
              a20_abegin_end_load_stmt (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2;
                    kw_index     : integer);
 
        PROCEDURE
              a20unload_statistics (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
      ------------------------------ 
 
        FROM
              DBProc_DDL_Syntax : VAK201;
 
        PROCEDURE
              a201call_proc (VAR acv : tak_all_command_glob;
                    expected_odbc_terminator : tak_odbc_partype;
                    resultNameNode : integer;
                    VAR put_node   : tsp00_Int2);
 
      ------------------------------ 
 
        FROM
              AK_Trigger : VAK262;
 
        PROCEDURE
              a262DebugSyntax (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
      ------------------------------ 
 
        FROM
              Kernel_Sink_1 : VAK341;
 
        PROCEDURE
              ak341SetDumpError(errorNo : tsp00_Int4;
                    action : integer);
 
      ------------------------------ 
 
        FROM
              Catalog_Migration_2 : VAK362;
 
        VAR
              a362OnlineTaskId : tsp00_TaskId;
 
      ------------------------------ 
 
        FROM
              AK_warm_utility_functions : VAK37;
 
        PROCEDURE
              a37state_get (
                    VAR acv  : tak_all_command_glob;
                    kw_index : integer);
 
        PROCEDURE
              a37state_vtrace (VAR acv : tak_all_command_glob);
 
      ------------------------------ 
 
        FROM
              AK_data_dictionary : VAK38;
 
        PROCEDURE
              a38_ausage_statement (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
      ------------------------------ 
 
        FROM
              AK_show_syntax : VAK41;
 
        PROCEDURE
              a41_a_check_database (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
        PROCEDURE
              a41_astart_stop_statement (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
      ------------------------------ 
 
        FROM
              AK_Connect : VAK51;
 
        PROCEDURE
              a51_aconnect_statement (
                    VAR acv           : tak_all_command_glob;
                    VAR put_node      : tsp00_Int2);
 
        PROCEDURE
              a51_aset_statement (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
        PROCEDURE
              a51_acurrent_user  (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
      ------------------------------ 
 
        FROM
              AK_Lock_Commit_Rollback : VAK52;
 
        PROCEDURE
              a52_asavepoint (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
        PROCEDURE
              a52asubtrans_statement (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
        PROCEDURE
              a52_acommit_rollback_statement (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2;
                    commit       : boolean);
 
        PROCEDURE
              a52_alock_statement (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
        PROCEDURE
              a52_aunlock_statement (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
        PROCEDURE
              a52_aforce_statement (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
      ------------------------------ 
 
        FROM
              diagnose analyze : VAK544;
 
        PROCEDURE
              a544syntax_diag_analyze  (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
      ------------------------------ 
 
        FROM
              diagnose monitor : VAK545;
 
        PROCEDURE
              a545diag_monitor_syntax  (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
      ------------------------------ 
 
        FROM
              AK_Insert : VAK56;
 
        PROCEDURE
              a56_ainsert_statement (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
      ------------------------------ 
 
        FROM
              AK_Update : VAK57;
 
        PROCEDURE
              a57_aupdate_statement (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2;
                    kw_index     : integer);
 
      ------------------------------ 
 
        FROM
              AK_Delete : VAK58;
 
        PROCEDURE
              a58_adelete_statement (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
        PROCEDURE
              a58atruncate_statement (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
      ------------------------------ 
 
        FROM
              Select_Syntax : VAK60;
 
        PROCEDURE
              a60_aselect_statement (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
        PROCEDURE
              a60_adeclare (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
        PROCEDURE
              a60_aexplain_statement (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
      ------------------------------ 
 
        FROM
              Resulttable : VAK73;
 
        PROCEDURE
              a73_afetch_statement (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
        PROCEDURE
              a73_aclose_resulttable (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
        PROCEDURE
              a73_adescribe_resulttable (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
        PROCEDURE
              a73_anext_statement (
                    VAR acv      : tak_all_command_glob;
                    VAR put_node : tsp00_Int2);
 
      ------------------------------ 
 
        FROM
              filesysteminterface_1 : VBD01;
 
        PROCEDURE
              bd01ProtectDataCacheFrames (
                    TaskId : tsp00_TaskId;
                    Enable : boolean);
 
      ------------------------------ 
 
        FROM
              KB_Check : VKB03;
 
        PROCEDURE
              kb03SetBackupCheck     (SetOn : boolean);
 
        PROCEDURE
              kb03SetKbCheck         (SetOn : boolean);
 
        PROCEDURE
              kb03SetLockCheck       (SetOn : boolean);
 
        PROCEDURE
              kb03SetLockSupplyCheck (SetOn : boolean);
 
        PROCEDURE
              kb03SetRegionCheck     (SetOn : boolean);
 
        PROCEDURE
              kb03SetTransCheck      (SetOn : boolean);
 
      ------------------------------ 
 
        FROM
              KB_locklist : VKB51;
 
        FUNCTION
              k51is_locklist_generated (taskid : tsp00_TaskId) : boolean;
 
      ------------------------------ 
 
        FROM
              Configuration_Parameter : VGG01;
 
        VAR
              g01glob                       : tgg00_KernelGlobals;
              g01unicode                    : boolean;
              g01vtrace                     : tgg00_VtraceState;
              g01updstatalgo                : tsp00_Int4;
              g01operator_join              : tgg07_opjoin_usage;
              gg01_operator_join_costfunc   : boolean;
              gg01_operator_join_sort       : boolean;
              gg01optimize_parallel_server  : tsp00_Int4;
              gg01_optim_inv_only           : boolean;
              gg01_diag_frows_optim         : boolean;
 
        FUNCTION
              g01is_archive : boolean;
 
      ------------------------------ 
 
        FROM
              GG_ComponentTests : VGG942;
 
        PROCEDURE
              gg942ComponentTests (VAR Trans : tgg00_TransContext;
                    TestNo : tsp00_Int4);
 
      ------------------------------ 
 
        FROM
              SQLManager : VAK101;
 
        PROCEDURE
              a101_CleanUpAll (
                    VAR acv        : tak_all_command_glob);
 
        PROCEDURE
              a101_InvalidateAll (
                    VAR acv        : tak_all_command_glob);
 
        PROCEDURE
              a101_ResetSharedSQLStatistics (
                    VAR acv        : tak_all_command_glob);
 
        FUNCTION
              a101_SetMaxParallelServers (max : tsp00_Int4) : tsp00_Int4;
 
        PROCEDURE
              a101_SharedSQL_SetStatusParameter(
                    Status : boolean );
 
      ------------------------------ 
 
        FROM
              KernelAdministration_Interface : VGG999;
 
        FUNCTION
              gg999KernelStateIsOnline : boolean;
 
        FUNCTION
              gg999KernelStateIsAdmin : boolean;
 
        FUNCTION
              gg999KernelStateIsRestart : boolean;
 
        FUNCTION
              gg999IsStandby : boolean;
 
      ------------------------------ 
 
        FROM
              RTE_kernel : VEN101;
 
        PROCEDURE
              vinsert_keep_alive;
 
        FUNCTION
              RTEHSS_GetMappingInfo(
                    VAR ownMappingInfoSize : tsp00_Int4;
                    VAR ownMappingInfo     : tsp00_MoveObjPtr) : boolean;
&       IFDEF TRACE
 
      ------------------------------ 
 
        FROM
              Test_Procedures : VTA01;
 
        PROCEDURE
              t01moveobj (
                    level       : tgg00_Debug;
                    VAR buf     : tsp00_MoveObj;
                    pos_start   : tsp00_Int4;
                    pos_end     : tsp00_Int4);
 
        PROCEDURE
              t01int4 (
                    debug    : tgg00_Debug;
                    nam      : tsp00_Sname;
                    int      : tsp00_Int4);
&       ENDIF
 
      ------------------------------ 
 
        FROM
              RTE-Extension-30 : VSP30;
 
        FUNCTION
              s30eq (VAR a,b : tsp00_C3;
                    bi  : tsp00_Int4;
                    cnt : tsp00_Int4) : boolean;
 
.CM *-END-* use -----------------------------------------
.sp;.cp 3
Synonym :
 
        PROCEDURE
              b21m_parseid;
 
              tsp00_C12      tak_parsid
 
        PROCEDURE
              t01aptree;
 
              tsp00_MoveObj tak_ap_max_tree
 
        PROCEDURE
              a42put_running_cmds;
 
              tsp00_C12 tak_parsid
 
        PROCEDURE
              b21mp_parseid_put;
 
              tsp00_C12 tak_parsid
 
        FUNCTION
              s30eq;
 
              tsp00_MoveObj tsp00_C3
 
.CM *-END-* synonym -------------------------------------
***********************************************************
.CM -lll-
Code    :
 
 
CONST
      c_admin_ok            = true;
      c_redo_mode_ok        = true;
      c_online_ok           = true;
      c_needs_superuser     = true;
      c_needs_internal_mode = true;
      c_needs_oracle_mode   = true;
      (*-------------------------*)
      c_commit              = true;
      c_null_allowed        = true (* a03_avalue_spec *);
      c_stamp_allowed       = true (* a03_avalue_spec *);
      c_default_allowed     = true (* a03_avalue_spec *);
      c_sysdba_allowed      = true (* a03_avalue_spec *);
 
 
(*------------------------------*) 
 
FUNCTION
      ak351state_check (VAR acv  : tak_all_command_glob;
            admin_ok            : boolean;
            redo_mode_ok        : boolean;
            online_ok           : boolean;
            needed_application  : tak_appl_type;
            needs_superuser     : boolean;
            needs_internal_mode : boolean;
            needs_oracle_mode   : boolean) : boolean;
 
VAR
      all_ok : boolean;
      cmpstr : tsp00_C3;
 
BEGIN
(* check for                                              *)
(*    - correct state (admin/read-only/online of db       *)
(*    - if dbm is needed for command (administor_cmds)    *)
(*          implies: no parse/execute                     *)
(*    - if (if sysdba-priv needed) current user is sysdba *)
(*    - if sqlmode is fine for command                    *)
all_ok := true;
IF  
    (online_ok    AND gg999KernelStateIsOnline)
    OR
    (
    redo_mode_ok              AND
    gg999KernelStateIsAdmin   AND
    gg999KernelStateIsRestart AND
    gg999IsStandby
    )
    OR
    (
    admin_ok                                                            AND
    gg999KernelStateIsAdmin                                             AND
    ((NOT gg999KernelStateIsRestart AND gg999IsStandby) OR
    NOT gg999IsStandby)                                                 AND
    (a362OnlineTaskId = UNDEF_SP00)                             OR
    (a362OnlineTaskId = acv.a_transinf.tri_trans.trTaskId_gg00)
    )
THEN
    BEGIN
    IF  ((needed_application <> at_unknown) AND
        ( needed_application <> acv.a_comp_type))
    THEN
        (* PTS 1138797 E.Z. *)
        IF  needed_application = at_load
        THEN
            BEGIN
            cmpstr := csp_comp_load;
            WITH acv.a_out_packet^.sp1_header DO
                IF  NOT s30eq (sp1h_application, cmpstr, 1,
                    sizeof (sp1h_application))
                THEN
                    BEGIN
                    all_ok := false;
                    a07_b_put_error (acv, e_wrong_application, 1)
                    END;
                (*ENDIF*) 
            (*ENDWITH*) 
            END
        ELSE
            BEGIN
            all_ok := false;
            a07_b_put_error (acv, e_wrong_application, 1)
            END;
        (*ENDIF*) 
    (*ENDIF*) 
    IF  all_ok
    THEN
        IF  ((needed_application = at_db_manager) AND
            (acv.a_ex_kind = only_parsing))
        THEN
            BEGIN
            all_ok := false;
            a07_b_put_error (acv, e_invalid_messagetype, 1)
            END
        ELSE
            IF  (needs_superuser                          AND
                (acv.a_current_user_kind <> ucontroluser) AND
                (acv.a_current_user_kind <> usysdba))
            THEN
                BEGIN
                all_ok := false;
                a07_b_put_error (acv, e_missing_privilege, 1)
                END
            ELSE
                IF  needs_internal_mode            AND
                    needs_oracle_mode              AND
                    (acv.a_sqlmode <> sqlm_internal) AND
                    (acv.a_sqlmode <> sqlm_oracle)
                THEN
                    BEGIN
                    all_ok := false;
                    a07_b_put_error (acv, e_invalid_command, 1)
                    END
                ELSE
                    IF  (
                        needs_internal_mode   AND
                        NOT needs_oracle_mode AND
                        (acv.a_sqlmode <> sqlm_internal)
                        )
                        OR
                        (
                        needs_oracle_mode       AND
                        NOT needs_internal_mode AND
                        (acv.a_sqlmode <> sqlm_oracle)
                        )
                    THEN
                        BEGIN
                        all_ok := false;
                        a07_b_put_error (acv, e_invalid_command, 1)
                        END
                    (*ENDIF*) 
                (*ENDIF*) 
            (*ENDIF*) 
        (*ENDIF*) 
    (*ENDIF*) 
    END
ELSE
    BEGIN
    all_ok := false;
    a07_b_put_error (acv, e_wrong_database_mode, 1)
    END;
(*ENDIF*) 
ak351state_check := all_ok;
END;
 
(*------------------------------*) 
 
PROCEDURE
      a351syntax (VAR acv : tak_all_command_glob;
            kw_index                 : integer;
            expected_odbc_terminator : tak_odbc_partype);
 
BEGIN
(*===============================================================*)
(* always use:                                                   *)
(*      IF  ak351state_check (acv,                               *)
(*          NOT c_admin_ok, NOT c_redo_mode_ok, NOT c_online_ok, *)
(*          at_unknown, NOT c_needs_superuser,                   *)
(*          NOT c_needs_internal_mode, NOT c_needs_oracle_mode)  *)
(*      THEN                                                     *)
(*===============================================================*)
CASE kw_index OF
    cak_i_add :
        ak351add_volume_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_alter :
        ak351alter_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_analyze :
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            NOT c_needs_internal_mode, c_needs_oracle_mode)
        THEN
            a57_aupdate_statement (acv,
                  acv.a_ap_tree^[ 0 ].n_lo_level, kw_index);
        (*ENDIF*) 
    cak_i_append :
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            c_needs_internal_mode, c_needs_oracle_mode)
        THEN
            a57_aupdate_statement (acv,
                  acv.a_ap_tree^[ 0 ].n_lo_level, kw_index);
        (*ENDIF*) 
    cak_i_autosave :
        ak351autosave_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_begin :
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_load, NOT c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a20_abegin_end_load_stmt  (acv,
                  acv.a_ap_tree^[ 0 ].n_lo_level, cak_i_save);
        (*ENDIF*) 
    cak_i_beginload :
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_load, NOT c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a20_abegin_end_load_stmt  (acv,
                  acv.a_ap_tree^[ 0 ].n_lo_level, kw_index);
        (*ENDIF*) 
    cak_i_check :
        ak351check_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_clear :
        ak351clear_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_close :
        IF  ak351state_check (acv,
            NOT c_admin_ok, c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a73_aclose_resulttable (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
        (*ENDIF*) 
    cak_i_comment :
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a20acomment_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
        (*ENDIF*) 
    cak_i_commit :
        IF  ak351state_check (acv,
            c_admin_ok, c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a52_acommit_rollback_statement (acv,
                  acv.a_ap_tree^[ 0 ].n_lo_level, c_commit);
        (*ENDIF*) 
    cak_i_connect :
        ak351connect_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_create :
        ak351create_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_current:
        IF  ak351state_check (acv,
            NOT c_admin_ok, c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a51_acurrent_user (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
        (*ENDIF*) 
    cak_i_dbproc, cak_i_dbprocedure,
    cak_i_proc,   cak_i_procedure,
    cak_i_call :
        IF  ak351state_check (acv,
            NOT c_admin_ok, c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            c_needs_internal_mode, c_needs_oracle_mode)
        THEN
            a201call_proc (acv, expected_odbc_terminator, 0,
                  acv.a_ap_tree^[ 0 ].n_lo_level);
        (*ENDIF*) 
    cak_i_debug :
        a262DebugSyntax (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_declare :
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a60_adeclare (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
        (*ENDIF*) 
    cak_i_delete :
        ak351delete_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_describe :
        ak351describe_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_diagnose :
        ak351diagnose_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_drop :
        ak351drop_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_end :
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_load, NOT c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a20end_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
        (*ENDIF*) 
    cak_i_endload :
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_load, NOT c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a20_abegin_end_load_stmt  (acv,
                  acv.a_ap_tree^[ 0 ].n_lo_level, kw_index);
        (*ENDIF*) 
    cak_i_exists :
        IF  ak351state_check (acv,
            NOT c_admin_ok, c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a20_aexist_table (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
        (*ENDIF*) 
    cak_i_explain :
        IF  ak351state_check (acv,
            NOT c_admin_ok, c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            c_needs_internal_mode, c_needs_oracle_mode)
        THEN
            a60_aexplain_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
        (*ENDIF*) 
    cak_i_fetch :
        IF  ak351state_check (acv,
            NOT c_admin_ok, c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a73_afetch_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
        (*ENDIF*) 
    cak_i_force :
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a52_aforce_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
        (*ENDIF*) 
    cak_i_get :
        ak351get_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_grant :
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a20agrant_revoke_statement (acv,
                  acv.a_ap_tree^[ 0 ].n_lo_level, cak_i_grant);
        (*ENDIF*) 
    cak_i_info :
        ak351info_statement (acv,  acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_init :
        ak351init_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_insert :
        ak351insert_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_load :
        ak351load_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_lock :
        IF  ak351state_check (acv,
            NOT c_admin_ok, c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            IF  acv.a_sqlmode <> sqlm_ansi
            THEN
                a52_alock_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level)
            ELSE
                a07_b_put_error (acv, e_invalid_command, 1);
            (*ENDIF*) 
        (*ENDIF*) 
    cak_i_migrate :
        ak351migrate_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_monitor :
        ak351monitor_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_next :
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a73_anext_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
        (*ENDIF*) 
    cak_i_prepare :
        ak351prepare_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_read :
        ak351read_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_rename :
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a20_arename_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
        (*ENDIF*) 
    cak_i_register :
        ak351register_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_remove :
        ak351remove_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_restart :
        ak351restart_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_restore :
        ak351restore_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_resume :
        ak351resume_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_revoke :
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a20agrant_revoke_statement (acv,
                  acv.a_ap_tree^[ 0 ].n_lo_level, cak_i_revoke);
        (*ENDIF*) 
    cak_i_rollback :
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a52_acommit_rollback_statement (acv,
                  acv.a_ap_tree^[ 0 ].n_lo_level, NOT c_commit);
        (*ENDIF*) 
    cak_i_save :
        ak351save_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_savepoint :
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            c_needs_internal_mode, c_needs_oracle_mode)
        THEN
            a52_asavepoint (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
        (*ENDIF*) 
    cak_i_select :
        a351select_statement (acv, 1, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_set :
        ak351set_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_shutdown :
        ak351shutdown_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_state :
        ak351state_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_subtrans :
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a52asubtrans_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
        (*ENDIF*) 
    cak_i_suspend :
        ak351suspend_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_synchronize :
        ak351synchronize_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_takeover :
        ak351takeover_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_truncate :
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            c_needs_internal_mode, c_needs_oracle_mode)
        THEN
            a58atruncate_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
        (*ENDIF*) 
    cak_i_unload :
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a20unload_statistics (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
        (*ENDIF*) 
    cak_i_unlock :
        ak351unlock_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_update :
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a57_aupdate_statement (acv,
                  acv.a_ap_tree^[ 0 ].n_lo_level, kw_index);
        (*ENDIF*) 
    cak_i_usage :
        IF  ak351state_check (acv,
            NOT c_admin_ok, c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a38_ausage_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
        (*ENDIF*) 
    cak_i_verify :
        ak351verify_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_view :
        ak351view_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    cak_i_write :
        ak351write_statement (acv, acv.a_ap_tree^[ 0 ].n_lo_level);
    OTHERWISE
        a07_b_put_error (acv, e_invalid_command, 1)
    END;
(*ENDCASE*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351add_volume_statement (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      (* PTS 1111040 E.Z. *)
      logdev   : boolean;
      last_n   : tsp00_Int2;
 
BEGIN
IF  ak351state_check (acv,
    c_admin_ok, c_redo_mode_ok, c_online_ok,
    at_db_manager, c_needs_superuser,
    c_needs_internal_mode, NOT c_needs_oracle_mode)
THEN
    WITH acv, a_scv DO
        BEGIN
        a01_call_put (acv, a37, cak_x_add_devspace, put_node);
        a_ap_tree^[put_node].n_length := 0;
        a01_next_symbol (acv);
        (* PTS 1111040 E.Z. *)
        logdev := false;
        IF  a01_eqkey (a01kw[ cak_i_log], a_sqlmode,
            a_cmd_part^.sp1p_buf, a_scv)
        THEN
            BEGIN
            a_ap_tree^[put_node].n_length := cak_i_log;
            (* PTS 1111040 E.Z. *)
            logdev := true;
            (* PTS 1105850 UH 07-03-2000 *)
            a01_next_symbol (acv)
            END
        ELSE
            IF  a01_eqkey (a01kw[ cak_i_data], a_sqlmode,
                a_cmd_part^.sp1p_buf, a_scv)
            THEN
                a01_next_symbol (acv);
            (*ENDIF*) 
        (*ENDIF*) 
        IF  a01_eqkey (a01kw[ cak_i_volume], a_sqlmode,
            a_cmd_part^.sp1p_buf, a_scv)
        THEN
            BEGIN
            a01_next_symbol (acv);
            a02_asystem_devspace (acv,
                  a_ap_tree^[ put_node ].n_lo_level, last_n);
            IF  (
                NOT (a01_eqkey (a01kw[ cak_i_pages], a_sqlmode,
                a_cmd_part^.sp1p_buf, a_scv))
                )
                (* PTS 1111040 E.Z. *)
                AND logdev
            THEN
                a02_asystem_devspace (acv,
                      a_ap_tree^[ last_n ].n_lo_level, last_n);
            (*ENDIF*) 
            IF  a01_eqkey (a01kw[ cak_i_pages], a_sqlmode,
                a_cmd_part^.sp1p_buf, a_scv)
            THEN
                BEGIN
                a01_next_symbol (acv);
                a03_aunsigned_integer (acv,
                      a_ap_tree^[ put_node ].n_sa_level, last_n);
                (* PTS 1111040 E.Z. *)
                IF  a01_eqkey (a01kw[ cak_i_device], a_sqlmode,
                    a_cmd_part^.sp1p_buf, a_scv)
                THEN
                    BEGIN
                    a01_next_symbol (acv);
                    a03_aunsigned_integer (acv,
                          a_ap_tree^[ last_n ].n_sa_level, last_n);
                    (* PTS 1111040 E.Z. *)
                    END
                ELSE
                    a07_error (acv, e_missing_keyword, last_n, last_n);
                (*ENDIF*) 
                END
            ELSE
                a07_error (acv, e_missing_keyword, last_n, last_n);
            (*ENDIF*) 
            END
        ELSE
            a07_error (acv, e_missing_keyword, last_n, last_n);
        (*ENDIF*) 
        a01_is_end_symbol (acv)
        END;
    (*ENDWITH*) 
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351alter_statement (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      res_kw    : boolean;
      symbindex : integer;
 
BEGIN
a01_next_symbol (acv);
a01_get_keyword (acv, symbindex, res_kw);
CASE symbindex OF
    cak_i_mapchar :
        ak351alter_create_set (acv, put_node, cak_x_alter_mapset);
    (* PTS 1116602 E.Z. *)
    OTHERWISE
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a20aalter_statement (acv, put_node, symbindex);
        (*ENDIF*) 
    END;
(*ENDCASE*) 
IF  acv.a_returncode = 0
THEN
    a01_is_end_symbol (acv)
(*ENDIF*) 
END;
 
(* PTS 1115978 E.Z. *)
(*------------------------------*) 
 
PROCEDURE
      ak351autosave_statement (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      res_kw     : boolean;
      ikw        : integer;
      file_count : integer;
      last_n     : tsp00_Int2;
      curr_n     : tsp00_Int2;
 
BEGIN
IF  ak351state_check (acv,
    NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
    at_db_manager, c_needs_superuser,
    c_needs_internal_mode, NOT c_needs_oracle_mode)
THEN
    WITH acv, a_scv DO
        BEGIN
        a01_call_put (acv, a37, cak_x_autosave, put_node);
        a01_next_symbol (acv);
        a01_get_keyword (acv, ikw, res_kw);
        a_ap_tree^[put_node].n_length := ikw;
        curr_n := put_node;
        CASE ikw OF
            cak_i_on :
                BEGIN
                file_count := 0;
                REPEAT
                    file_count := file_count + 1;
                    a02_ahostfile_name (acv,
                          a_ap_tree^[curr_n].n_lo_level, last_n);
                    IF  a_returncode = 0
                    THEN
                        ak351file_type (acv,
                              a_ap_tree^[last_n].n_lo_level, curr_n);
                    (*ENDIF*) 
                UNTIL
                    (sc_symb <> s_comma) OR (file_count = 2)
                    OR  (a_returncode <> 0);
                (*ENDREPEAT*) 
                curr_n := put_node;
                ak351media_name (acv, a_ap_tree^[curr_n].n_sa_level, curr_n);
                IF  a01_eqkey (a01kw[cak_i_before], a_sqlmode,
                    a_cmd_part^.sp1p_buf, a_scv)
                THEN
                    BEGIN
                    a01_call_put (acv, a37, cak_i_date, last_n);
                    a_ap_tree^[curr_n].n_sa_level := last_n;
                    curr_n := last_n;
                    a01_next_symbol (acv);
                    a03_astring_literal (acv,
                          a_ap_tree^[last_n].n_lo_level, last_n);
                    END;
                (*ENDIF*) 
                ak351count_check (acv,
                      a_ap_tree^[curr_n].n_sa_level, curr_n);
                IF  a01_eqkey (a01kw[cak_i_fversion], a_sqlmode,
                    a_cmd_part^.sp1p_buf, a_scv)
                THEN
                    BEGIN
                    a01_call_put (acv, a37, cak_i_fversion, last_n);
                    a_ap_tree^[curr_n].n_sa_level := last_n;
                    curr_n := last_n;
                    a01_next_symbol (acv)
                    END;
                (*ENDIF*) 
                IF  sc_symb <> s_eof
                THEN
                    IF  a01_eqkey (a01kw[cak_i_cascade], a_sqlmode,
                        a_cmd_part^.sp1p_buf,
                        a_scv)
                    THEN
                        BEGIN
                        a01_call_put (acv, a37, cak_i_cascade, last_n);
                        a_ap_tree^[ curr_n ].n_sa_level := last_n;
                        a01_next_symbol (acv)
                        END;
                    (*ENDIF*) 
                (*ENDIF*) 
                END;
            cak_i_cancel, cak_i_show, cak_i_end :
                a01_next_symbol (acv);
            OTHERWISE
                a07_error (acv, e_wanted_keyword, put_node, last_n)
            END;
        (*ENDCASE*) 
        a01_is_end_symbol (acv)
        END;
    (*ENDWITH*) 
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351check_statement (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      res_kw     : boolean;
      ikw        : integer;
 
BEGIN
WITH acv, a_scv DO
    BEGIN
    IF  gg999KernelStateIsAdmin   AND
        NOT gg999KernelStateIsRestart
    THEN
        a01_call_put (acv, a36, cak_x_verify, put_node)
    ELSE
        a01_call_put (acv, a37, cak_x_verify, put_node);
    (*ENDIF*) 
    a01_next_symbol (acv);
    a01_get_keyword (acv, ikw, res_kw);
    CASE ikw OF
        cak_i_catalog :
            IF  ak351state_check (acv,
                NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
                at_unknown, NOT c_needs_superuser,
                NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_next_symbol (acv);
                IF  a01_eqkey (a01kw[ cak_i_with], a_sqlmode,
                    a_cmd_part^.sp1p_buf, a_scv)
                THEN
                    BEGIN
                    a01_next_symbol (acv);
                    IF  a01mandatory_keyword (acv, cak_i_update)
                    THEN
                        a_ap_tree^[put_node].n_length := cak_i_modify
                    (*ENDIF*) 
                    END
                ELSE
                    a_ap_tree^[put_node].n_length := cak_i_catalog
                (*ENDIF*) 
                END;
            (*ENDIF*) 
        cak_i_data :
            IF  ak351state_check (acv,
                c_admin_ok, c_redo_mode_ok, c_online_ok,
                at_db_manager, c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_next_symbol (acv);
                IF  a01_eqkey (a01kw[ cak_i_extended], a_sqlmode,
                    a_cmd_part^.sp1p_buf, a_scv)
                THEN
                    BEGIN
                    a01_call_put (acv, a30, cak_x_extended_check,
                          acv.a_ap_tree^[put_node].n_sa_level);
                    a01_next_symbol (acv)
                    END;
                (* PTS 1126032 E.Z. *)
                (*ENDIF*) 
                IF  gg999KernelStateIsAdmin   AND
                    NOT gg999KernelStateIsRestart
                THEN
                    (* PTS 1122761 E.Z. *)
                    IF  g01is_archive
                    THEN
                        a07_error (acv, e_wrong_database_instance, put_node, put_node)
                    ELSE
                        BEGIN
                        IF  a01mandatory_keyword (acv, cak_i_with)
                        THEN
                            IF  a01mandatory_keyword (acv, cak_i_update)
                            THEN
                                BEGIN
                                END
                            (*ENDIF*) 
                        (*ENDIF*) 
                        END
                    (*ENDIF*) 
                (* PTS 1105851 E.Z. *)
                ELSE
                    IF  sc_symb <> s_eof
                    THEN
                        BEGIN
                        IF  a01mandatory_keyword (acv, cak_i_except)
                        THEN
                            IF  a01mandatory_keyword (acv, cak_i_index)
                            THEN
                                a_ap_tree^[put_node].n_length := cak_i_index;
                            (*ENDIF*) 
                        (*ENDIF*) 
                        END;
                    (*ENDIF*) 
                (*ENDIF*) 
                END;
            (*ENDIF*) 
        cak_i_database :
            IF  ak351state_check (acv,
                NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
                at_unknown, NOT c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                a41_a_check_database (acv, put_node);
            (*ENDIF*) 
        cak_i_table :
            IF  ak351state_check (acv,
                NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
                at_unknown, NOT c_needs_superuser,
                c_needs_internal_mode, c_needs_oracle_mode)
            THEN
                a20check_table_stmt (acv, put_node);
            (*ENDIF*) 
        OTHERWISE
            a07_error (acv, e_missing_keyword, put_node, put_node);
        END;
    (*ENDCASE*) 
    a01_is_end_symbol (acv)
    END;
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351clear_statement (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      curr_n : tsp00_Int2;
      last_n : tsp00_Int2;
 
BEGIN
IF  ak351state_check (acv,
    c_admin_ok, NOT c_redo_mode_ok, NOT c_online_ok,
    at_db_manager, c_needs_superuser,
    c_needs_internal_mode, NOT c_needs_oracle_mode)
THEN
    WITH acv, a_scv DO
        BEGIN
        a01_next_symbol (acv);
        IF  a01_eqkey (a01kw[ cak_i_log], a_sqlmode,
            a_cmd_part^.sp1p_buf, a_scv)
        THEN
            BEGIN
            a01_call_put (acv, a36, cak_x_clear_log, curr_n);
            put_node := curr_n;
            a01_next_symbol (acv)
            END
        ELSE
            a07_error (acv, e_missing_keyword, put_node, last_n);
        (*ENDIF*) 
        a01_is_end_symbol (acv)
        END;
    (*ENDWITH*) 
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351connect_statement (VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      curr_n : tsp00_Int2;
 
BEGIN
IF  ak351state_check (acv,
    c_admin_ok, c_redo_mode_ok, c_online_ok,
    at_unknown, NOT c_needs_superuser,
    NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
THEN
    IF  (gg999KernelStateIsAdmin      AND
        NOT gg999KernelStateIsRestart AND
        NOT acv.a_internalConnection)
        OR NOT k51is_locklist_generated (acv.a_transinf.tri_trans.trTaskId_gg00)
    THEN
        BEGIN
        a01_call_put (acv, a36, cak_x_connect, curr_n);
        put_node := curr_n;
        a51_aconnect_statement (acv, acv.a_ap_tree^[ curr_n ].n_lo_level);
        END
    ELSE
        a51_aconnect_statement (acv, put_node);
    (*ENDIF*) 
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351create_statement (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      res_kw    : boolean;
      symbindex : integer;
 
BEGIN
a01_next_symbol (acv);
a01_get_keyword (acv, symbindex, res_kw);
CASE symbindex OF
    (* PTS 1120611 E.Z. *)
    cak_i_instance :
        IF  ak351state_check (acv,
            c_admin_ok, NOT c_redo_mode_ok, NOT c_online_ok,
            at_db_manager, c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            ak351instance_create (acv, put_node);
        (*ENDIF*) 
    cak_i_mapchar :
        ak351alter_create_set (acv, put_node, cak_x_create_mapset);
    cak_i_snapshot :
        IF  ak351state_check (acv,
            c_admin_ok, NOT c_redo_mode_ok, NOT c_online_ok,
            at_db_manager, c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            BEGIN
            a01_call_put (acv, a36, cak_x_create_snapshot, put_node);
            a01_next_symbol (acv)
            END;
        (* PTS 1116602 E.Z. *)
        (*ENDIF*) 
    OTHERWISE
        IF  ak351state_check (acv,
            NOT c_admin_ok OR
            (a362OnlineTaskId = acv.a_transinf.tri_trans.trTaskId_gg00), (* PTS 1120287 M.Ki *)
            NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a20acreate_statement (acv,
                  put_node, symbindex, res_kw);
        (*ENDIF*) 
    END;
(*ENDCASE*) 
IF  acv.a_returncode = 0
THEN
    a01_is_end_symbol (acv)
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351delete_statement (VAR acv : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      last_n    : tsp00_Int2;
      res_kw    : boolean;
      symbindex : integer;
      scvh      : tak_scanner_glob;
 
BEGIN
WITH acv DO
    BEGIN
    scvh := acv.a_scv;
    a01_next_symbol (acv);
    a01_get_keyword (acv, symbindex, res_kw);
    CASE symbindex OF
        cak_i_event :
            IF  ak351state_check (acv,
                c_admin_ok, c_redo_mode_ok, c_online_ok,
                at_db_manager, c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_call_put (acv, a37,
                      cak_x_delete_event, put_node);
                a01_next_symbol (acv);
                ak351event (acv, cak_x_delete_event,
                      a_ap_tree^[ put_node ].n_lo_level);
                END;
            (*ENDIF*) 
        cak_i_log :
            IF  ak351state_check (acv,
                c_admin_ok, c_redo_mode_ok, c_online_ok,
                at_db_manager, c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_next_symbol (acv);
                IF  a01mandatory_keyword (acv, cak_i_from)
                THEN
                    BEGIN
                    a01_call_put (acv, a37, cak_x_delete_log_from_to, put_node);
                    a03_aunsigned_integer (acv, a_ap_tree^[put_node].n_lo_level, last_n);
                    IF  a01mandatory_keyword (acv, cak_i_to)
                    THEN
                        a03_aunsigned_integer (acv, a_ap_tree^[last_n].n_sa_level, last_n);
                    (*ENDIF*) 
                    END
                (*ENDIF*) 
                END;
            (*ENDIF*) 
        OTHERWISE
            IF  ak351state_check (acv,
                NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
                at_unknown, NOT c_needs_superuser,
                NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                acv.a_scv := scvh;
                a58_adelete_statement (acv, put_node);
                END;
            (*ENDIF*) 
        END
    (*ENDCASE*) 
    END
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351describe_statement (VAR acv : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      res_kw   : boolean;
      aux_pos  : integer;
      kw_index : integer;
 
BEGIN
WITH acv, a_scv DO
    BEGIN
    a_return_segm^.sp1r_function_code := csp1_describe_fc;
    aux_pos := sc_newpos;
    a01_next_symbol (acv);
    a01_get_keyword (acv, kw_index, res_kw);
    CASE kw_index OF
        (* PTS 1111576 E.Z. *)
        (* PTS 1120287 E.Z. *)
        cak_i_default, cak_i_index, cak_i_table :
            IF  ak351state_check (acv,
                NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
                at_load, NOT c_needs_superuser,
                NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                a20describe (acv, kw_index, put_node);
            (*ENDIF*) 
        OTHERWISE
            IF  ak351state_check (acv,
                NOT c_admin_ok, c_redo_mode_ok, c_online_ok,
                at_unknown, NOT c_needs_superuser,
                NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                sc_newpos := aux_pos;
                a73_adescribe_resulttable (acv, put_node)
                END;
            (*ENDIF*) 
        END;
    (*ENDCASE*) 
    END;
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351diagnose_statement (VAR acv : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      is_ok       : boolean;
      is_on       : boolean;
      res_kw      : boolean;
      kw_index    : integer;
      kw          : integer;
      new_val     : integer;
      curr_n      : tsp00_Int2;
      last_node   : tsp00_Int2;
      init_sqlmode: tsp00_SqlMode;
 
BEGIN
WITH acv, a_scv DO
    BEGIN
    acv.a_return_segm^.sp1r_function_code := csp1_diagnose_fc;
    init_sqlmode := acv.a_sqlmode;
    IF  acv.a_sqlmode = sqlm_oracle
    THEN
        acv.a_sqlmode := sqlm_internal;
    (*ENDIF*) 
    a01_next_symbol (acv);
    a01_get_keyword (acv, kw_index, res_kw);
    (* with some statements this first put_node will be overwritten *)
    IF  gg999KernelStateIsAdmin
    THEN
        a01_call_put (acv, a36, cak_x_diagnose, put_node)
    ELSE
        a01_call_put (acv, a37, cak_x_diagnose, put_node);
    (*ENDIF*) 
    CASE kw_index OF
        cak_i_alter :
            IF  ak351state_check (acv,
                NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
                at_unknown, NOT c_needs_superuser,
                NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_next_symbol (acv);
                a20adiagnose_alter (acv, acv.a_ap_tree^[0].n_lo_level);
                END;
            (*ENDIF*) 
        cak_i_analyze :
            IF  ak351state_check (acv,
                NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
                at_unknown, NOT c_needs_superuser,
                NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                a544syntax_diag_analyze (acv, put_node);
            (*ENDIF*) 
        cak_i_break :
            IF  ak351state_check (acv,
                NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
                at_unknown, NOT c_needs_superuser,
                NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                IF  NOT ak351SetCountDown(acv)
                THEN
                    a07_error (acv, e_wanted_keyword,
                          put_node, put_node);
                (*ENDIF*) 
            (*ENDIF*) 
        cak_i_caches, cak_i_trigger :
            IF  ak351state_check (acv,
                c_admin_ok, c_redo_mode_ok, c_online_ok,
                at_db_manager, NOT c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_next_symbol (acv);
                IF  a01_eqkey (a01kw[ cak_i_on], a_sqlmode,
                    a_cmd_part^.sp1p_buf, a_scv)
                THEN
                    BEGIN
                    is_on := true;
                    a01_next_symbol (acv);
                    END
                ELSE
                    IF  a01_eqkey (a01kw[ cak_i_off], a_sqlmode,
                        a_cmd_part^.sp1p_buf, a_scv)
                    THEN
                        BEGIN
                        is_on := false;
                        a01_next_symbol (acv);
                        END
                    ELSE
                        a07_error (acv,
                              e_missing_keyword,put_node,last_node);
                    (*ENDIF*) 
                (*ENDIF*) 
                IF  a_returncode = 0
                THEN
                    IF  ((a_current_user_kind <> unoprivate) AND
                        (a_current_user_kind  <> uprivate))
                    THEN
                        BEGIN
                        a_ap_tree^[ put_node ].n_proc := a30;
                        CASE kw_index OF
                            cak_i_caches :
                                a10chk := is_on;
                            cak_i_trigger :
                                a01trigger := is_on;
                            END;
                        (*ENDCASE*) 
                        END
                    ELSE
                        a07_b_put_error (acv, e_invalid_command, 1);
                    (*ENDIF*) 
                (*ENDIF*) 
                END;
            (*ENDIF*) 
        cak_i_count :
            IF  ak351state_check (acv,
                c_admin_ok, c_redo_mode_ok, c_online_ok,
                at_db_manager, NOT c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_next_symbol (acv);
                IF  a01mandatory_keyword (acv, cak_i_session)
                THEN
                    IF  a01mandatory_keyword (acv, cak_i_file)
                    THEN
                        BEGIN
                        a01_get_keyword (acv, kw_index, res_kw);
                        CASE kw_index OF
                            cak_i_on, cak_i_off :
                                BEGIN
                                a_ap_tree^[ put_node ].n_proc := a30;
                                a10EvalParseFileSize := kw_index = cak_i_on;
                                a01_next_symbol (acv);
                                END;
                            OTHERWISE
                                a07_error (acv, e_wanted_keyword, put_node, put_node);
                            END;
                        (*ENDCASE*) 
                        END;
                    (*ENDIF*) 
                (*ENDIF*) 
                END;
            (*ENDIF*) 
        cak_i_check :
            BEGIN (* 1113008 *)
            a01_next_symbol(acv);
            a01_get_keyword (acv, kw, res_kw);
            IF  kw = cak_i_instance
            THEN
                BEGIN
                IF  ak351state_check (acv,
                    c_admin_ok, c_redo_mode_ok, c_online_ok,
                    at_unknown, NOT c_needs_superuser,
                    NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
                THEN
                    ak351CheckInstance(acv)
                (*ENDIF*) 
                END
            ELSE
                IF  kw = cak_i_index  (* PTS 1134856 FF *)
                THEN
                    BEGIN
                    IF  ak351state_check (acv,
                        NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
                        at_unknown, NOT c_needs_superuser,
                        NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
                    THEN
                        ak351CheckIndex(acv)
                    (*ENDIF*) 
                    END
                ELSE
                    IF  ak351state_check (acv,
                        c_admin_ok, c_redo_mode_ok, c_online_ok,
                        at_db_manager, c_needs_superuser,
                        NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
                    THEN
                        ak351diag_check (acv, put_node);
                    (*ENDIF*) 
                (*ENDIF*) 
            (*ENDIF*) 
            END;
        cak_i_data :
            IF  ak351state_check (acv,
                c_admin_ok, c_redo_mode_ok, c_online_ok,
                at_db_manager, c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_next_symbol (acv);
                a01_get_keyword (acv, kw, res_kw);
                CASE  kw OF
                    cak_i_buffer :
                        BEGIN
                        a_ap_tree^[ put_node ].n_proc := a30;
                        a01_next_symbol (acv);
                        a01_get_keyword (acv, kw, res_kw);
                        IF  (kw = cak_i_on) OR (kw = cak_i_off)
                        THEN
                            BEGIN
                            a01_next_symbol (acv);
                            g01glob.datacachecheck := kw = cak_i_on
                            END
                        (*ENDIF*) 
                        END;
                    cak_i_cache :
                        BEGIN
                        a_ap_tree^[ put_node ].n_proc := a30;
                        a01_next_symbol (acv);
                        IF  a01mandatory_keyword (acv, cak_i_lock)
                        THEN
                            BEGIN
                            a01_get_keyword (acv, kw, res_kw);
                            IF  (kw = cak_i_on) OR (kw = cak_i_off)
                            THEN
                                BEGIN
                                a01_next_symbol (acv);
                                bd01ProtectDataCacheFrames (
                                      acv.a_transinf.tri_trans.trTaskId_gg00 , kw = cak_i_on)
                                END
                            (*ENDIF*) 
                            END;
                        (*ENDIF*) 
                        END;
                    cak_i_to :
                        BEGIN
                        a_ap_tree^[put_node].n_subproc := cak_x_diag_dump;
                        a_ap_tree^[put_node].n_length := 0;
                        a02_ahostfile_name (acv,
                              a_ap_tree^[ put_node ].n_lo_level, last_node);
                        curr_n := 1;
                        WHILE (sc_symb <> s_eof) AND
                              (a_returncode = 0) DO
                            BEGIN
                            a01_put_node (acv, last_node);
                            a_ap_tree^[curr_n].n_sa_level := last_node;
                            curr_n := last_node;
                            ak351dump_kind (acv, curr_n);
                            a01_next_symbol (acv)
                            END;
                        (*ENDWHILE*) 
                        END;
                    OTHERWISE
                        a07_error (acv, e_missing_keyword, put_node, put_node);
                    END;
                (*ENDCASE*) 
                END;
            (* PTS 1119691 E.Z. *)
            (*ENDIF*) 
        cak_i_delete :
            IF  ak351state_check (acv,
                c_admin_ok, NOT c_redo_mode_ok, NOT c_online_ok,
                at_db_manager, c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                ak351diag_delete (acv, put_node);
            (*ENDIF*) 
        cak_i_drop : (* PTS 1115972 *)
            IF  ak351state_check (acv,
                NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
                at_unknown, NOT c_needs_superuser,
                NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                a20adiagnose_drop_file_statement (acv, put_node);
            (* PTS 1119691 E.Z. *)
            (*ENDIF*) 
        cak_i_get :
            IF  ak351state_check (acv,
                c_admin_ok, c_redo_mode_ok, c_online_ok,
                at_db_manager, c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                ak351diag_get (acv, put_node);
            (*ENDIF*) 
        cak_i_index :
            IF  ak351state_check (acv,
                NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
                at_db_manager, NOT c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_call_put (acv, a37, cak_x_diagnose, put_node);
                a_ap_tree^[ put_node ].n_subproc := cak_x_diag_index;
                a01_next_symbol (acv);
                a02_acolumnspec (acv, false, a_ap_tree^[ put_node ].n_lo_level,
                      last_node);
                IF  (a_ap_tree^[ last_node ].n_symb = s_columnname)
                    AND ( sc_symb <> s_eof)
                THEN
                    BEGIN
                    a_ap_tree^[ last_node ].n_symb := s_identifier;
                    IF  a01_eqkey (a01kw[ cak_i_on], a_sqlmode,
                        a_cmd_part^.sp1p_buf, a_scv)
                    THEN
                        BEGIN
                        a01_next_symbol (acv);
                        a02_atablename (acv,
                              a_ap_tree^[ last_node ].n_lo_level,
                              last_node);
                        END;
                    (*ENDIF*) 
                    END;
                (*ENDIF*) 
                END;
            (*ENDIF*) 
        cak_i_lock :
            IF  ak351state_check (acv,
                c_admin_ok, c_redo_mode_ok, c_online_ok,
                at_db_manager, c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_next_symbol (acv);
                IF  a01mandatory_keyword (acv, cak_i_level)
                THEN
                    BEGIN
                    a_ap_tree^[ put_node ].n_proc := a30;
                    a01_get_keyword (acv, kw, res_kw);
                    IF  (kw = cak_i_on) OR (kw = cak_i_off)
                    THEN
                        BEGIN
                        a01_next_symbol (acv);
                        g01glob.bd_subtree := (kw = cak_i_on)
                        END
                    ELSE
                        a07_error (acv, e_missing_keyword,
                              put_node, put_node)
                    (*ENDIF*) 
                    END;
                (*ENDIF*) 
                END;
            (*ENDIF*) 
        cak_i_monitor :
            IF  ak351state_check (acv,
                NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
                at_unknown, NOT c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                a545diag_monitor_syntax (acv, put_node);
            (*ENDIF*) 
        cak_i_object :
            IF  ak351state_check (acv,
                NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
                at_unknown, NOT c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                ak351diag_oms(acv);
            (*ENDIF*) 
        cak_i_pages :
            IF  ak351state_check (acv,
                c_admin_ok, c_redo_mode_ok, c_online_ok,
                at_db_manager, c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_next_symbol (acv);
                IF  a01mandatory_keyword (acv, cak_i_lock)
                THEN
                    BEGIN
                    a_ap_tree^[ put_node ].n_proc := a30;
                    a01_get_keyword (acv, kw, res_kw);
                    IF  (kw = cak_i_on) OR (kw = cak_i_off)
                    THEN
                        BEGIN
                        a01_next_symbol (acv);
                        g01glob.bd_lock_check := (kw = cak_i_on)
                        END
                    ELSE
                        a07_error (acv, e_missing_keyword,
                              put_node, put_node)
                    (*ENDIF*) 
                    END;
                (*ENDIF*) 
                END;
            (*ENDIF*) 
        cak_i_parseid :
            IF  ak351state_check (acv,
                NOT c_admin_ok, c_redo_mode_ok, c_online_ok,
                at_unknown, NOT c_needs_superuser,
                NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_call_put (acv, a37, cak_x_diagnose, put_node);
                a01_next_symbol (acv);
                IF  a01_eqkey (a01kw[ cak_i_on], a_sqlmode,
                    a_cmd_part^.sp1p_buf, a_scv)
                THEN
                    BEGIN
                    a_ap_tree^[ put_node ].n_subproc := cak_x_on_diag_parse;
                    a01_next_symbol (acv)
                    END
                ELSE
                    IF  a01_eqkey (a01kw[ cak_i_off], a_sqlmode,
                        a_cmd_part^.sp1p_buf, a_scv)
                    THEN
                        BEGIN
                        a_ap_tree^[ put_node ].n_subproc := cak_x_off_diag_parse;
                        a01_next_symbol (acv)
                        END
                    ELSE
                        a07_error (acv, e_missing_keyword, put_node, put_node);
                    (*ENDIF*) 
                (*ENDIF*) 
                END;
            (*ENDIF*) 
        cak_i_replace :  (* PTS 1134856 FF *)
            IF  ak351state_check (acv,
                NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
                at_unknown, NOT c_needs_superuser,
                NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_call_put (acv, a37, cak_x_recreate_index, put_node);
                a01_next_symbol (acv);
                a01_get_keyword (acv, kw_index, res_kw);
                IF  a01mandatory_keyword (acv, cak_i_index)
                THEN
                    IF  a01mandatory_keyword (acv, cak_i_for)
                    THEN
                        IF  a01mandatory_keyword (acv, cak_i_container)
                        THEN
                            BEGIN
                            a03_aunsigned_integer (acv, a_ap_tree^[put_node].n_sa_level, last_node);
                            END;
                        (*ENDIF*) 
                    (*ENDIF*) 
                (*ENDIF*) 
                END;
            (*ENDIF*) 
        cak_i_restore :
            IF  ak351state_check (acv,
                c_admin_ok, NOT c_redo_mode_ok, NOT c_online_ok,
                at_db_manager, c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                last_node := put_node;
                a_ap_tree^[put_node].n_length := ord(diagRestore_egg00);
                a01_call_put (acv, a36, cak_x_diagnose, curr_n);
                a_ap_tree^[last_node].n_sa_level := curr_n;
                last_node := curr_n;
                a01_next_symbol (acv);
                IF  a01_eqkey (a01kw [cak_i_data], a_sqlmode,
                    a_cmd_part^.sp1p_buf, a_scv)
                THEN
                    BEGIN
                    a_ap_tree^[curr_n].n_length := ord(diagPermPages_egg00);
                    a01_next_symbol (acv)
                    END
                ELSE
                    IF  a01_eqkey (a01kw [cak_i_static], a_sqlmode,
                        a_cmd_part^.sp1p_buf, a_scv)
                    THEN
                        BEGIN
                        a_ap_tree^[curr_n].n_length := ord(diagStaticPages_egg00);
                        a01_next_symbol (acv)
                        END
                    ELSE
                        IF  a01_eqkey (a01kw [cak_i_restart], a_sqlmode,
                            a_cmd_part^.sp1p_buf, a_scv)
                        THEN
                            BEGIN
                            a_ap_tree^[curr_n].n_length := ord(diagRestart_egg00);
                            a01_next_symbol (acv)
                            END
                        ELSE
                            IF  a01_eqkey (a01kw [cak_i_logfull], a_sqlmode,
                                a_cmd_part^.sp1p_buf, a_scv)
                            THEN
                                BEGIN
                                a_ap_tree^[curr_n].n_length := ord(diagLoginfoPage_egg00);
                                a01_next_symbol (acv)
                                END
                            ELSE
                                IF  a01_eqkey (a01kw [cak_i_volume],
                                    a_sqlmode, a_cmd_part^.sp1p_buf, a_scv)
                                THEN
                                    ak351devspace (acv, 2, a_ap_tree^[curr_n].n_sa_level)
                                (*ENDIF*) 
                            (*ENDIF*) 
                        (*ENDIF*) 
                    (*ENDIF*) 
                (*ENDIF*) 
                END;
            (*ENDIF*) 
        cak_i_set :
            ak351diag_set (acv, put_node);
        cak_i_share :
            IF  ak351state_check (acv,
                NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
                at_unknown, NOT c_needs_superuser,
                NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                ak351diag_share (acv, put_node);
&           ifdef trace
            (*ENDIF*) 
        cak_i_switch:
            IF  ak351state_check (acv,
                c_admin_ok, c_redo_mode_ok, c_online_ok,
                at_unknown, NOT c_needs_superuser,
                NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                ak351diag_switch_syntax(acv, put_node);
&           endif
            (*ENDIF*) 
        cak_i_to :
            IF  ak351state_check (acv,
                c_admin_ok, c_redo_mode_ok, c_online_ok,
                at_db_manager, NOT c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a02_ahostfile_name (acv, a_ap_tree^[ put_node ].n_sa_level,
                      last_node);
                IF  a_returncode = 0
                THEN
                    BEGIN
                    curr_n := last_node;
                    a01_get_keyword (acv, kw_index, res_kw);
                    CASE kw_index OF
                        cak_i_data,
                        cak_i_static,
                        cak_i_logfull,
                        cak_i_restart,
                        cak_i_column,
                        cak_i_index,
                        cak_i_table,
                        cak_i_first,
                        cak_i_second :
                            BEGIN
                            (* allowed in any db_state *)
                            END;
                        OTHERWISE
                            is_ok := ak351state_check (acv,
                                  c_admin_ok, NOT c_redo_mode_ok, NOT c_online_ok,
                                  at_db_manager, NOT c_needs_superuser,
                                  c_needs_internal_mode, NOT c_needs_oracle_mode)
                        END
                    (*ENDCASE*) 
                    END;
                (*ENDIF*) 
                IF  acv.a_returncode = 0
                THEN
                    WITH a_ap_tree^[ curr_n ] DO
                        CASE kw_index OF
                            cak_i_column :
                                ak351column (acv, n_sa_level);
                            (* PTS 1123696 E.Z. *)
                            cak_i_data, cak_i_static :
                                ak351data_page (acv, n_sa_level, kw_index = cak_i_static);
                            cak_i_volume  :
                                ak351devspace (acv, 1, n_sa_level);
                            cak_i_index :
                                ak351index (acv, n_sa_level);
                            cak_i_logfull  :
                                BEGIN
                                (* get log info page *)
                                a_ap_tree^[ put_node ].n_length := ord(diagLoginfoPage_egg00);
                                a01_next_symbol (acv);
                                END;
                            cak_i_restart  :
                                BEGIN
                                (* get restart record *)
                                a_ap_tree^[ put_node ].n_length := ord(diagRestart_egg00);
                                a01_next_symbol (acv);
                                END;
                            cak_i_table :
                                ak351table (acv, n_sa_level);
                            cak_i_first  : (* get fdir 1 *)
                                BEGIN
                                a_ap_tree^[ put_node ].n_length := ord(diagFDir1_egg00);
                                a01_next_symbol (acv);
                                END;
                            cak_i_second  : (* get fdir 2 *)
                                BEGIN
                                a_ap_tree^[ put_node ].n_length := ord(diagFDir2_egg00);
                                a01_next_symbol (acv);
                                END;
                            OTHERWISE
                                a07_error (acv, e_invalid_keyword, put_node, last_node)
                            END
                        (*ENDCASE*) 
                    (*ENDWITH*) 
                (*ENDIF*) 
                END;
            (*ENDIF*) 
        cak_i_optimize :
            IF  ak351state_check (acv,
                NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
                at_unknown, NOT c_needs_superuser,
                NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                curr_n := 0;
                ak351diag_optimize_syntax( acv, curr_n, put_node );
                END;
            (*ENDIF*) 
        cak_i_update :
            IF  ak351state_check (acv,
                NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
                at_unknown, NOT c_needs_superuser,
                NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN (* PTS 1118179 *)
                a01_next_symbol(acv);
                a01_get_keyword (acv, kw, res_kw);
                IF  (kw = cak_i_stat) OR
                    (kw = cak_i_statistics)
                THEN
                    BEGIN
                    a01_next_symbol(acv);
                    IF  sc_symb = s_unsigned_integer
                    THEN
                        a05_int4_unsigned_get (acv, acv.a_scv.sc_sypos,
                              acv.a_scv.sc_sylength, new_val)
                    ELSE
                        a07_b_put_error (acv, e_missing_number,
                              acv.a_scv.sc_sypos);
                    (*ENDIF*) 
                    IF  acv.a_returncode = 0
                    THEN
                        BEGIN
                        acv.a_ap_tree^[ put_node ].n_proc := a30;
                        a01_next_symbol(acv);
                        a01_is_end_symbol (acv)
                        END;
                    (*ENDIF*) 
                    IF  acv.a_returncode = 0
                    THEN
                        g01updstatalgo := new_val;
                    (*ENDIF*) 
                    END
                ELSE
                    a07_error (acv, e_wanted_keyword,
                          acv.a_ap_tree^[ 0 ].n_lo_level,
                          acv.a_ap_tree^[ 0 ].n_lo_level);
                (*ENDIF*) 
                END;
            (*ENDIF*) 
        cak_i_vtrace :
            (* to restrictive in case of migration
                  IF  ak351state_check (acv,
                  c_admin_ok, c_redo_mode_ok, c_online_ok,
                  at_unknown, NOT c_needs_superuser,
                  c_needs_internal_mode, NOT c_needs_oracle_mode)
                  *)
            IF   acv.a_sqlmode <> sqlm_internal
            THEN
                a07_b_put_error (acv, e_invalid_command, 1)
            ELSE
                ak351diag_vtrace_syntax (acv, put_node);
            (*ENDIF*) 
        OTHERWISE
            a07_error (acv, e_missing_keyword,
                  put_node, put_node)
        END;
    (*ENDCASE*) 
    a01_is_end_symbol (acv)
    END;
(*ENDWITH*) 
IF  init_sqlmode = sqlm_oracle
THEN
    acv.a_sqlmode := init_sqlmode;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351drop_statement (VAR acv : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      symbindex    : integer;
      res_kw       : boolean;
 
BEGIN
a01_next_symbol (acv);
a01_get_keyword (acv, symbindex, res_kw);
CASE symbindex OF
    cak_i_mapchar :
        ak351drop_mapchar_set (acv, put_node);
    cak_i_snapshot :
        IF  ak351state_check (acv,
            c_admin_ok, NOT c_redo_mode_ok, NOT c_online_ok,
            at_db_manager, c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            BEGIN
            a01_call_put (acv, a36, cak_x_drop_snapshot, put_node);
            a01_next_symbol (acv)
            END;
        (* PTS 1116602 E.Z. *)
        (* PTS 1120287 E.Z. *)
        (*ENDIF*) 
    OTHERWISE
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            a20adrop_statement (acv, put_node, symbindex);
        (*ENDIF*) 
    END;
(*ENDCASE*) 
IF  acv.a_returncode = 0
THEN
    a01_is_end_symbol (acv)
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351get_statement (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      curr_n    : tsp00_Int2;
      last_n    : tsp00_Int2;
      ikw       : integer;
      kw_index  : integer;
      res_kw    : boolean;
 
BEGIN
WITH acv, a_scv DO
    BEGIN
    acv.a_return_segm^.sp1r_function_code := csp1_diagnose_fc;
    a01_next_symbol (acv);
    a01_get_keyword (acv, kw_index, res_kw);
    CASE kw_index OF
        (* PTS 1117472 E.Z. *)
        cak_i_bad :
            IF  ak351state_check (acv,
                c_admin_ok, c_redo_mode_ok, NOT c_online_ok,
                at_db_manager, c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_next_symbol (acv);
                IF  a01mandatory_keyword (acv, cak_i_log)
                THEN
                    IF  a01mandatory_keyword (acv, cak_i_volume)
                    THEN
                        a01_call_put (acv, a36, cak_x_get_bad_log_volume, curr_n);
                    (*ENDIF*) 
                (*ENDIF*) 
                END;
            (*ENDIF*) 
        cak_i_config :
            IF  ak351state_check (acv,
                c_admin_ok, c_redo_mode_ok, c_online_ok,
                at_db_manager, c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_call_put (acv, a36, cak_x_get_config, curr_n);
                put_node := curr_n;
                a01_next_symbol (acv)
                END;
            (*ENDIF*) 
        cak_i_device :
            IF  ak351state_check (acv,
                c_admin_ok, c_redo_mode_ok, NOT c_online_ok,
                at_db_manager, c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_call_put (acv, a36, cak_x_get_dev_config, curr_n);
                put_node := curr_n;
                a01_next_symbol (acv);
                IF  a01_eqkey (a01kw[ cak_i_config], a_sqlmode,
                    a_cmd_part^.sp1p_buf, a_scv)
                THEN
                    a01_next_symbol (acv)
                ELSE
                    a07_error (acv, e_missing_keyword,put_node,last_n)
                (*ENDIF*) 
                END;
            (*ENDIF*) 
        cak_i_mapchar :
            IF  ak351state_check (acv,
                NOT c_admin_ok, c_redo_mode_ok, c_online_ok,
                at_db_manager, c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_call_put (acv, a37, cak_x_get_mapset, put_node);
                a01_next_symbol (acv);
                IF  NOT a01_eqkey (a01kw[ cak_i_set], a_sqlmode,
                    a_cmd_part^.sp1p_buf, a_scv)
                THEN
                    a07_error (acv, e_invalid_end_of_command,
                          put_node, put_node)
                ELSE
                    BEGIN
                    a01_next_symbol (acv);
                    IF  sc_symb <> s_identifier
                    THEN
                        a07_b_put_error (acv, e_invalid_command, sc_sypos)
                    ELSE
                        BEGIN
                        a01_get_keyword (acv, ikw, res_kw);
                        IF  res_kw
                        THEN
                            a07_error (acv, e_reserved_identifier,
                                  put_node, put_node)
                        ELSE
                            a02_put_identifier (acv,
                                  a_ap_tree^[ put_node ].n_lo_level,
                                  curr_n);
                        (*ENDIF*) 
                        END;
                    (*ENDIF*) 
                    END;
                (*ENDIF*) 
                END;
            (*ENDIF*) 
        cak_i_restart :
            IF  ak351state_check (acv,
                c_admin_ok, c_redo_mode_ok, c_online_ok,
                at_db_manager, c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_next_symbol (acv);
                IF  a01mandatory_keyword (acv, cak_i_version)
                THEN
                    a01_call_put (acv, a36,
                          cak_x_get_restart_version, put_node);
                (*ENDIF*) 
                END;
            (*ENDIF*) 
        OTHERWISE
            a07_error (acv, e_missing_keyword, put_node, last_n);
        END;
    (*ENDCASE*) 
    a01_is_end_symbol (acv)
    END;
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351info_statement (VAR acv : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      mapping_info_ptr : tsp00_MoveObjPtr;
      mapping_info_len : tsp00_Int4;
      shortinfo        : tak_shortinforecord;
      pos              : tsp00_Int4;
      name             : tsp00_C18;
      c                : tsp00_C1;
 
BEGIN
IF  ak351state_check (acv,
    c_admin_ok, c_redo_mode_ok, c_online_ok,
    at_unknown, c_needs_superuser,
    c_needs_internal_mode, NOT c_needs_oracle_mode)
THEN
    WITH acv DO
        BEGIN
        a01_next_symbol (acv);
        IF  a01mandatory_keyword (acv, cak_i_standby)
        THEN
            BEGIN
            a01_next_symbol (acv);
            a01_is_end_symbol (acv);
            IF  acv.a_returncode = 0
            THEN
                BEGIN
                a01_call_put (acv, a30, 0, put_node);
                IF  a_curr_retpart = NIL
                THEN
                    a06init_curr_retpart (acv);
                (*ENDIF*) 
                IF  a_curr_retpart <> NIL
                THEN
                    IF  RTEHSS_GetMappingInfo (mapping_info_len,
                        mapping_info_ptr)
                    THEN
                        BEGIN
                        pos := 1;
                        name := 'DEVICE INFO       ';
                        (* PTS 1113268 E.Z. *)
                        a06colname_retpart_move (acv, @name, 11, csp_ascii);
                        WITH shortinfo.siinfo[1] DO
                            BEGIN
                            sp1i_mode       := [ sp1ot_mandatory ];
                            sp1i_io_type    := sp1io_output;
                            sp1i_data_type  := dcha;
                            sp1i_frac       := 0;
                            sp1i_length     := mapping_info_len;
                            sp1i_in_out_len := succ(mapping_info_len);
                            sp1i_bufpos     := pos;
                            pos             := pos + sp1i_in_out_len
                            END;
                        (*ENDWITH*) 
                        a06finish_curr_retpart (acv, sp1pk_columnnames, 1);
                        shortinfo.sicount := 1;
                        a06retpart_move (acv, @shortinfo.siinfo,
                              shortinfo.sicount * sizeof (shortinfo.siinfo[1]));
                        a06finish_curr_retpart (acv, sp1pk_shortinfo, shortinfo.sicount);
                        c[1] := csp_defined_byte;
                        a06retpart_move (acv, @c[1], 1);
                        a06char_retpart_move (acv, mapping_info_ptr, mapping_info_len);
                        a06finish_curr_retpart (acv, sp1pk_data, 1)
                        END
                    ELSE
                        a07_b_put_error (acv, e_standby_info_not_ok, 1);
                    (*ENDIF*) 
                (*ENDIF*) 
                acv.a_ex_kind := only_syntax;
                END
            (*ENDIF*) 
            END
        (*ENDIF*) 
        END
    (*ENDWITH*) 
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351init_statement (VAR acv : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      symbindex    : integer;
      res_kw       : boolean;
      last_n       : tsp00_Int2;
 
BEGIN
a01_next_symbol (acv);
a01_get_keyword (acv, symbindex, res_kw);
CASE symbindex OF
    cak_i_after :
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            BEGIN
            a01_next_symbol (acv);
            IF  a01mandatory_keyword (acv, cak_i_load)
            THEN
                a01_call_put (acv, a37, cak_x_init_after_load, put_node);
            (*ENDIF*) 
            END;
        (*ENDIF*) 
    cak_i_standby :
        IF  ak351state_check (acv,
            c_admin_ok, NOT c_redo_mode_ok, NOT c_online_ok,
            at_db_manager, c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            BEGIN
            a01_call_put (acv, a36, cak_x_init_standby, put_node);
            a01_next_symbol (acv);
            END;
        (*ENDIF*) 
    OTHERWISE
        a07_error (acv, e_missing_keyword, put_node, last_n);
    END;
(*ENDCASE*) 
a01_is_end_symbol (acv)
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351insert_statement (VAR acv : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      symbindex    : integer;
      res_kw       : boolean;
      last_node    : tsp00_Int2;
      aux_scv      : tak_scanner_glob;
 
BEGIN
aux_scv := acv.a_scv;
a01_next_symbol (acv);
a01_get_keyword (acv, symbindex, res_kw);
CASE symbindex OF
    cak_i_standby :
        IF  ak351state_check (acv,
            NOT c_admin_ok, c_redo_mode_ok, NOT c_online_ok,
            at_db_manager, c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            BEGIN
            a01_call_put (acv, a36, cak_x_insert_standby, put_node);
            a03_astring_literal (acv,
                  acv.a_ap_tree^[ put_node ].n_sa_level, last_node);
            IF  acv.a_returncode = 0
            THEN
                WITH acv.a_ap_tree^[ last_node ] DO
                    IF  n_length > NODEID_MXSP00
                    THEN
                        n_length := NODEID_MXSP00;
                    (*ENDIF*) 
                (*ENDWITH*) 
            (*ENDIF*) 
            END;
        (*ENDIF*) 
    OTHERWISE
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            BEGIN
            acv.a_scv := aux_scv;
            a56_ainsert_statement (acv, put_node);
            IF  acv.a_returncode = cak_e_expr_in_insert
            THEN
                BEGIN
&               ifdef TRACE
                t01moveobj (ak_syn, acv.a_cmd_part^.sp1p_buf, 1, acv.a_cmd_part^.sp1p_buf_len);
&               endif
                a01_init_command (acv);
                acv.a_returncode := 0;
                a56_ainsert_statement (acv, put_node);
                acv.a_ap_tree^[ put_node ].n_length :=
                      acv.a_ap_tree^[ put_node ].n_length + cak_x_pseudo_ins_select
                END
            (*ENDIF*) 
            END
        (*ENDIF*) 
    END
(*ENDCASE*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351load_statement (
            VAR acv          : tak_all_command_glob;
            VAR put_node     : tsp00_Int2);
 
VAR
      last_n : tsp00_Int2;
 
BEGIN
a01_next_symbol (acv);
WITH acv, a_scv DO
    IF  a01_eqkey (a01kw[ cak_i_statistics ], a_sqlmode,
        a_cmd_part^.sp1p_buf, a_scv) AND
        (a_sqlmode = sqlm_internal)
    THEN
        BEGIN
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            BEGIN
            a_is_ddl := ddl_update_statistics;
            a01_next_symbol (acv);
            a01_call_put (acv, a28, cak_i_load, put_node);
            END
        (*ENDIF*) 
        END
    ELSE
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_load, NOT c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            IF  a_cmd_segment_header.sp1c_producer in
                [sp1pr_internal_cmd, sp1pr_installation]
            THEN
                BEGIN
                a01_call_put (acv, a11, cak_x_load, put_node);
                a02_atablename (acv,
                      a_ap_tree^[ put_node ].n_lo_level, last_n);
                a01_force_symbol (acv, s_leftpar, put_node, last_n);
                IF  a_returncode = 0
                THEN
                    BEGIN
                    a02_l_acolumn_list (acv,a_ap_tree^[ last_n ].n_lo_level,
                          last_n);
                    a01_force_symbol (acv, s_rightpar, put_node, last_n);
                    END
                (*ENDIF*) 
                END
            ELSE
                a07_b_put_error (acv, e_invalid_command, 1);
            (*ENDIF*) 
        (*ENDIF*) 
    (*ENDIF*) 
(*ENDWITH*) 
a01_is_end_symbol (acv)
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351migrate_statement (
            VAR acv              : tak_all_command_glob;
            VAR put_node         : tsp00_Int2);
 
VAR
      symbindex    : integer;
      res_kw       : boolean;
      last_n       : tsp00_Int2;
 
BEGIN
IF  ak351state_check (acv,
    c_admin_ok, NOT c_redo_mode_ok, NOT c_online_ok,
    at_db_manager, c_needs_superuser,
    c_needs_internal_mode, NOT c_needs_oracle_mode)
THEN
    BEGIN
    a01_next_symbol (acv);
    a01_get_keyword (acv, symbindex, res_kw);
    CASE symbindex OF
        cak_i_database :
            BEGIN
            a01_call_put (acv, a36, cak_x_migrate_database, put_node);
            a01_next_symbol (acv);
            END;
        cak_i_to :
            BEGIN
            a01_next_symbol (acv);
            IF  a01mandatory_keyword (acv, cak_i_unicode)
            THEN
                a01_call_put (acv, a36, cak_x_migrate_to_unicode, put_node);
            (*ENDIF*) 
            END;
        OTHERWISE
            a07_error (acv, e_missing_keyword, put_node, last_n);
        END;
    (*ENDCASE*) 
    a01_is_end_symbol (acv)
    END
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351monitor_statement (
            VAR acv              : tak_all_command_glob;
            VAR put_node         : tsp00_Int2);
 
VAR
      init_sqlmode          : tsp00_SqlMode;
 
BEGIN
IF  ak351state_check (acv,
    NOT c_admin_ok, c_redo_mode_ok, c_online_ok,
    at_unknown, NOT c_needs_superuser,
    c_needs_internal_mode, c_needs_oracle_mode)
THEN
    BEGIN
    init_sqlmode := acv.a_sqlmode;
    IF  acv.a_sqlmode = sqlm_oracle
    THEN
        acv.a_sqlmode := sqlm_internal;
    (*ENDIF*) 
    a41_astart_stop_statement (acv, put_node);
    IF  init_sqlmode = sqlm_oracle
    THEN
        acv.a_sqlmode := init_sqlmode;
    (*ENDIF*) 
    END
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351prepare_statement (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      last_node : tsp00_Int2;
 
BEGIN
IF  ak351state_check (acv,
    NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
    at_db_manager, c_needs_superuser,
    c_needs_internal_mode, NOT c_needs_oracle_mode)
THEN
    WITH acv DO
        BEGIN
        a01_next_symbol (acv);
        IF  a01mandatory_keyword (acv, cak_i_standby)
        THEN
            BEGIN
            a01_call_put (acv, a37, cak_x_prepare_standby, last_node);
            put_node := last_node;
            a03_astring_literal (acv,
                  a_ap_tree^[ last_node ].n_sa_level, last_node);
            IF  a_returncode = 0
            THEN
                WITH a_ap_tree^[ last_node ] DO
                    IF  n_length > NODEID_MXSP00
                    THEN
                        n_length := NODEID_MXSP00;
                    (*ENDIF*) 
                (*ENDWITH*) 
            (*ENDIF*) 
            END
        (*ENDIF*) 
        END;
    (*ENDWITH*) 
(*ENDIF*) 
IF  acv.a_returncode = 0
THEN
    a01_is_end_symbol (acv)
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351read_statement (VAR acv : tak_all_command_glob;
            VAR put_node         : tsp00_Int2);
 
VAR
      last_n : tsp00_Int2;
 
BEGIN
IF  ak351state_check (acv,
    c_admin_ok, c_redo_mode_ok, c_online_ok,
    at_db_manager, c_needs_superuser,
    c_needs_internal_mode, NOT c_needs_oracle_mode)
THEN
    WITH acv, a_scv DO
        BEGIN
        a01_call_put (acv, a37, cak_x_read_label, put_node);
        a01_next_symbol (acv);
        IF  a01_eqkey (a01kw[cak_i_label], a_sqlmode,
            a_cmd_part^.sp1p_buf, a_scv)
        THEN
            BEGIN
            (* a01_next_symbol done in a02 *)
            a02_ahostfile_name (acv,
                  a_ap_tree^[put_node].n_lo_level, last_n);
            IF  acv.a_returncode = 0
            THEN
                ak351file_type (acv,
                      a_ap_tree^[ last_n ].n_sa_level, last_n)
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        a01_is_end_symbol (acv)
        END;
    (*ENDWITH*) 
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351register_statement (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      last_node : tsp00_Int2;
 
BEGIN
IF  ak351state_check (acv,
    NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
    at_db_manager, c_needs_superuser,
    c_needs_internal_mode, NOT c_needs_oracle_mode)
THEN
    WITH acv DO
        BEGIN
        a01_next_symbol (acv);
        IF  a01mandatory_keyword (acv, cak_i_standby)
        THEN
            BEGIN
            a01_call_put (acv, a37, cak_x_register_standby, last_node);
            put_node := last_node;
            a03_astring_literal (acv,
                  a_ap_tree^[ last_node ].n_sa_level, last_node);
            IF  a_returncode = 0
            THEN
                BEGIN
                WITH a_ap_tree^[ last_node ] DO
                    IF  n_length > NODEID_MXSP00
                    THEN
                        n_length := NODEID_MXSP00;
                    (*ENDIF*) 
                (*ENDWITH*) 
                IF  a_scv.sc_symb = s_byte_string
                THEN
                    a03_astring_literal (acv, a_ap_tree^[ last_node ].n_sa_level, last_node)
                ELSE
                    a07_error (acv, e_missing_string_literal, put_node, last_node)
                (*ENDIF*) 
                END
            (*ENDIF*) 
            END
        (*ENDIF*) 
        END;
    (*ENDWITH*) 
(*ENDIF*) 
IF  acv.a_returncode = 0
THEN
    a01_is_end_symbol (acv)
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351remove_statement (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      last_node    : tsp00_Int2;
 
BEGIN
IF  ak351state_check (acv,
    NOT c_admin_ok, c_redo_mode_ok, NOT c_online_ok,
    at_db_manager, c_needs_superuser,
    c_needs_internal_mode, NOT c_needs_oracle_mode)
THEN
    WITH acv, a_scv DO
        BEGIN
        a01_next_symbol (acv);
        IF  a01mandatory_keyword (acv, cak_i_standby)
        THEN
            BEGIN
            a01_call_put (acv, a36, cak_x_remove_standby, put_node);
            a03_astring_literal (acv,
                  a_ap_tree^[ put_node ].n_sa_level, last_node);
            IF  a_returncode = 0
            THEN
                WITH a_ap_tree^[ last_node ] DO
                    IF  n_length > NODEID_MXSP00
                    THEN
                        n_length := NODEID_MXSP00;
                    (*ENDIF*) 
                (*ENDWITH*) 
            (*ENDIF*) 
            END
        (*ENDIF*) 
        END;
    (*ENDWITH*) 
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351restart_statement (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      res_kw   : boolean;
      curr_n   : tsp00_Int2;
      last_n   : tsp00_Int2;
      kw_index : integer;
 
BEGIN
IF  ak351state_check (acv,
    c_admin_ok, NOT c_redo_mode_ok, NOT c_online_ok,
    at_db_manager, c_needs_superuser,
    c_needs_internal_mode, NOT c_needs_oracle_mode)
THEN
    WITH acv, a_scv DO
        BEGIN
        (* PTS 1111229 E.Z. *)
        a01_next_symbol (acv);
        a01_get_keyword (acv, kw_index, res_kw);
        CASE kw_index OF
            cak_i_standby :
                BEGIN
                a01_call_put (acv, a36, cak_x_restart_standby, put_node);
                a01_next_symbol (acv);
                END;
            OTHERWISE
                BEGIN
                a01_call_put (acv, a36, cak_x_restart, last_n);
                a_ap_tree^[last_n].n_length := 0;
                put_node := last_n;
                CASE kw_index OF
                    cak_i_until :
                        BEGIN
                        a01_next_symbol (acv);
                        a01_call_put (acv, a36, cak_i_until, curr_n);
                        a_ap_tree^[last_n].n_lo_level := curr_n;
                        last_n := curr_n;
                        IF  (acv.a_scv.sc_symb = s_unsigned_integer)
                        THEN
                            BEGIN
                            a03_ainteger (acv,
                                  a_ap_tree^[ last_n ].n_sa_level, last_n);
                            END
                        ELSE
                            BEGIN
                            a03_astring_literal (acv,
                                  a_ap_tree^[ last_n ].n_sa_level, last_n);
                            a03_astring_literal (acv,
                                  a_ap_tree^[ last_n ].n_sa_level, last_n)
                            END;
                        (*ENDIF*) 
                        END;
                    OTHERWISE ;
                    END
                (*ENDCASE*) 
                END;
            END;
        (*ENDCASE*) 
        a01_is_end_symbol (acv)
        END;
    (*ENDWITH*) 
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351restore_statement (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      res_kw            : boolean;
      kw_index          : integer;
      aux_scv           : tak_scanner_glob;
 
BEGIN
aux_scv := acv.a_scv;
a01_next_symbol (acv);
a01_get_keyword (acv, kw_index, res_kw);
CASE kw_index OF
    cak_i_catalog :
        BEGIN
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            BEGIN
            acv.a_scv := aux_scv;
            a20_asave_restore (acv, cak_i_restore, put_node)
            END
        (*ENDIF*) 
        END;
    cak_i_column,
    cak_i_long,
    cak_i_table :
        BEGIN
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_load, NOT c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            BEGIN
            acv.a_scv := aux_scv;
            a20_asave_restore (acv, cak_i_restore, put_node)
            END
        (*ENDIF*) 
        END;
    (* PTS 1123440 E.Z. *)
    cak_i_snapshot :
        IF  ak351state_check (acv,
            c_admin_ok, NOT c_redo_mode_ok, NOT c_online_ok,
            at_db_manager, c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            BEGIN
            a01_call_put (acv, a36, cak_x_restore_snapshot, put_node);
            a01_next_symbol (acv);
            a01_is_end_symbol (acv)
            END;
        (*ENDIF*) 
    OTHERWISE
        IF  ak351state_check (acv,
            c_admin_ok, NOT c_redo_mode_ok, NOT c_online_ok,
            at_db_manager, c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            ak351admin_restore (acv, put_node, kw_index)
        (*ENDIF*) 
    END;
(*ENDCASE*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351resume_statement (VAR acv : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
BEGIN
IF  ak351state_check (acv,
    NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
    at_db_manager, c_needs_superuser,
    c_needs_internal_mode, NOT c_needs_oracle_mode)
THEN
    BEGIN
    a01_next_symbol (acv);
    IF  a01mandatory_keyword (acv, cak_i_logwriter)
    THEN
        a01_call_put (acv, a37, cak_i_resume, put_node);
    (*ENDIF*) 
    a01_is_end_symbol (acv)
    END
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351save_statement (VAR acv : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      curr_n        : tsp00_Int2;
      last_n        : tsp00_Int2;
      x_save_mode   : tsp00_Int2;
      save_data_kind: integer;
      kw_index      : integer;
      res_kw        : boolean;
      aux_scv       : tak_scanner_glob;
 
BEGIN
aux_scv := acv.a_scv;
a01_next_symbol (acv);
a01_get_keyword (acv, kw_index, res_kw);
CASE kw_index OF
    cak_i_catalog :
        BEGIN
        IF  ak351state_check (acv,
            NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
            at_unknown, NOT c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            BEGIN
            acv.a_scv := aux_scv;
            a20_asave_restore (acv, cak_i_save, put_node)
            END
        (*ENDIF*) 
        END;
    OTHERWISE
        (*=========================================================*)
        (*              redo_mode and admin-save                *)
        (*=========================================================*)
        (* PTS 1103119 E.Z. *)
        IF  ak351state_check (acv,
            c_admin_ok, c_redo_mode_ok, c_online_ok,
            at_db_manager, c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            WITH acv, a_scv DO
                BEGIN
                save_data_kind:= cak_i_no_keyword;
                CASE kw_index OF
                    cak_i_data,
                    cak_i_pages :
                        BEGIN
                        IF  kw_index = cak_i_data
                        THEN
                            x_save_mode := cak_x_save_database
                        ELSE
                            (* PTS 1122761 E.Z. *)
                            BEGIN
                            x_save_mode   := cak_x_save_pages;
                            IF  g01is_archive
                            THEN
                                a07_error (acv, e_wrong_database_instance, put_node, put_node)
                            (*ENDIF*) 
                            END;
                        (*ENDIF*) 
                        aux_scv     := a_scv;
                        a01_next_symbol (acv);
                        a01_get_keyword (acv, save_data_kind, res_kw);
                        IF  (save_data_kind <> cak_i_ignore) AND
                            (save_data_kind <> cak_i_cancel) AND
                            (save_data_kind <> cak_i_replace)
                        THEN
                            BEGIN
                            save_data_kind := cak_i_no_keyword;
                            a_scv          := aux_scv;
                            END
                        ELSE
                            a01_next_symbol (acv);
                        (*ENDIF*) 
                        END;
                    cak_i_log :
                        BEGIN
                        aux_scv := a_scv;
                        a01_next_symbol (acv);
                        a01_get_keyword (acv, save_data_kind, res_kw);
                        IF  (save_data_kind <> cak_i_ignore) AND
                            (save_data_kind <> cak_i_cancel) AND
                            (save_data_kind <> cak_i_replace)
                        THEN
                            BEGIN
                            save_data_kind := cak_i_no_keyword;
                            a_scv          := aux_scv;
                            x_save_mode    := cak_x_save_log
                            END
                        ELSE
                            BEGIN
                            x_save_mode := cak_x_save_log;
                            a01_next_symbol (acv)
                            END;
                        (*ENDIF*) 
                        END;
                    OTHERWISE
                        a07_error (acv, e_missing_keyword, put_node, put_node);
                    END;
                (*ENDCASE*) 
                IF  a_returncode = 0
                THEN
                    BEGIN
                    a01_call_put (acv, a37, x_save_mode, put_node);
                    last_n := put_node;
                    a_ap_tree^[last_n].n_length := save_data_kind;
                    IF  save_data_kind = cak_i_no_keyword
                    THEN
                        BEGIN
                        a01_next_symbol (acv);
                        IF  a01_eqkey (a01kw[cak_i_quick], a_sqlmode,
                            a_cmd_part^.sp1p_buf, a_scv)
                        THEN
                            BEGIN
                            a01_call_put (acv, a37, cak_i_quick, last_n);
                            a_ap_tree^[put_node].n_sa_level := last_n;
                            a01_next_symbol (acv);
                            IF  a01_eqkey (a01kw[cak_i_to], a_sqlmode,
                                a_cmd_part^.sp1p_buf, a_scv)
                            THEN
                                REPEAT
                                    a02_ahostfile_name (acv,
                                          a_ap_tree^[ last_n ].n_sa_level, last_n);
                                    IF  a_returncode = 0
                                    THEN
                                        ak351file_type (acv,
                                              a_ap_tree^[ last_n ].n_sa_level, last_n);
                                    (*ENDIF*) 
                                    IF  acv.a_returncode = 0
                                    THEN
                                        ak351count_check (acv,
                                              a_ap_tree^[ last_n ].n_sa_level, last_n);
                                    (*ENDIF*) 
                                UNTIL
                                    (sc_symb <> s_comma)
                                (*ENDREPEAT*) 
                            ELSE
                                a07_error (acv, e_wanted_keyword, put_node, last_n);
                            (*ENDIF*) 
                            IF  a_returncode = 0
                            THEN
                                IF  a01_eqkey (a01kw[cak_i_fversion], a_sqlmode,
                                    a_cmd_part^.sp1p_buf, a_scv)
                                THEN
                                    BEGIN
                                    curr_n := last_n;
                                    a01_call_put (acv, a37, cak_i_fversion, last_n);
                                    a_ap_tree^[curr_n].n_sa_level := last_n;
                                    a01_next_symbol (acv)
                                    END;
                                (*ENDIF*) 
                            (*ENDIF*) 
                            IF  a_returncode = 0
                            THEN
                                BEGIN
                                ak351block_size  (acv,
                                      a_ap_tree^[ last_n ].n_sa_level, last_n);
                                IF  sc_symb <> s_eof
                                THEN
                                    IF  a01_eqkey (a01kw[cak_i_cascade], a_sqlmode,
                                        a_cmd_part^.sp1p_buf,
                                        a_scv)
                                    THEN
                                        BEGIN
                                        curr_n := last_n;
                                        a01_call_put (acv, a37, cak_i_cascade, last_n);
                                        a_ap_tree^[ curr_n ].n_sa_level := last_n;
                                        a01_next_symbol (acv)
                                        END;
                                    (*ENDIF*) 
                                (*ENDIF*) 
                                IF  sc_symb <> s_eof
                                THEN (* PTS 2040 *)
                                    IF  a01_eqkey (a01kw[cak_i_no], a_sqlmode,
                                        a_cmd_part^.sp1p_buf, a_scv)
                                    THEN
                                        BEGIN
                                        a01_next_symbol (acv);
                                        IF  a01mandatory_keyword (acv,
                                            cak_i_checkpoint)
                                        THEN
                                            BEGIN
                                            curr_n := last_n;
                                            a01_call_put (acv,
                                                  a37, cak_i_no, last_n);
                                            a_ap_tree^[curr_n].n_sa_level := last_n
                                            END;
                                        (*ENDIF*) 
                                        END;
                                    (*ENDIF*) 
                                (*ENDIF*) 
                                ak351media_name (acv,
                                      a_ap_tree^[last_n].n_sa_level, last_n);
                                END
                            ELSE
                                ak351block_size  (acv,
                                      a_ap_tree^[put_node].n_sa_level, last_n);
                            (*ENDIF*) 
                            ak351media_name (acv,
                                  a_ap_tree^[last_n].n_sa_level, last_n);
                            END
                        ELSE
                            ak351block_size  (acv,
                                  a_ap_tree^[put_node].n_sa_level, last_n);
                        (*ENDIF*) 
                        IF  sc_symb <> s_eof (* PTS 1128703 mb 2004-05-05 repeatable save log *)
                        THEN
                            BEGIN
                            IF  a01_eqkey (a01kw[cak_i_hold], a_sqlmode,
                                a_cmd_part^.sp1p_buf, a_scv)
                            THEN
                                BEGIN
                                curr_n := last_n;
                                a01_call_put (acv, a37, cak_i_hold, last_n);
                                a_ap_tree^[ curr_n ].n_sa_level := last_n;
                                a01_next_symbol (acv)
                                END;
                            (*ENDIF*) 
                            END;
                        (*ENDIF*) 
                        END
                    ELSE
                        IF  save_data_kind = cak_i_replace
                        THEN
                            BEGIN
                            IF  (sc_symb <> s_eof) AND
                                NOT a01_eqkey(a01kw[cak_i_count], a_sqlmode,
                                a_cmd_part^.sp1p_buf, a_scv)
                            THEN
                                BEGIN
                                a03_astring_literal (acv,
                                      a_ap_tree^[ last_n ].n_sa_level,
                                      last_n);
                                IF  a_returncode = 0
                                THEN
                                    WITH a_ap_tree^[ last_n ] DO
                                        n_symb := s_hostfilename;
                                    (*ENDWITH*) 
                                (*ENDIF*) 
                                ak351file_type (acv,
                                      a_ap_tree^[last_n].n_sa_level, last_n)
                                END;
                            (*ENDIF*) 
                            ak351count_check (acv,
                                  a_ap_tree^[ last_n ].n_sa_level, last_n)
                            END
                        (*ENDIF*) 
                    (*ENDIF*) 
                    END;
                (* PTS 1107603 E.Z. *)
                (*ENDIF*) 
                a01_is_end_symbol (acv)
                END
            (*ENDWITH*) 
        (*ENDIF*) 
    END;
(*ENDCASE*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a351select_statement (
            VAR acv      : tak_all_command_glob;
            StmtStartPos : tsp00_Int4;
            VAR put_node : tsp00_Int2);
 
VAR
      index     : integer;
      res_kw    : boolean;
      scvh      : tak_scanner_glob;
 
BEGIN
IF  ak351state_check (acv,
    NOT c_admin_ok, c_redo_mode_ok, c_online_ok,
    at_unknown, NOT c_needs_superuser,
    NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
THEN
    BEGIN
    a01_next_symbol (acv);
    (* skip hint *)
    IF  acv.a_scv.sc_symb = s_hint
    THEN
        BEGIN
&       ifdef TRACE
        t01int4(ak_syn, 'skip hintpos', acv.a_scv.sc_sypos);
&       endif
        scvh := acv.a_scv;
        a01_next_symbol(acv);
        WHILE ( NOT ((scvh.sc_symb = s_asterisk) AND (acv.a_scv.sc_symb = s_divide ))
              AND
              (acv.a_scv.sc_symb <> s_eof) ) DO
            BEGIN
            scvh := acv.a_scv;
            a01_next_symbol(acv);
            END;
        (*ENDWHILE*) 
        a01_next_symbol(acv);
        END;
    (*ENDIF*) 
    scvh := acv.a_scv;
    a01_get_keyword (acv, index, res_kw);
    a01_next_symbol (acv);
    WITH acv, a_scv DO
        BEGIN
        acv.a_scv         := scvh;
        sc_newpos         := StmtStartPos;
        sc_sypos          := StmtStartPos;
        a_returncode := 0;
        sc_states         := sc_states - [ scs_reserved_check ];
        sc_double_quote   := 0;
        a01_next_symbol(acv);
        (* PTS 1111575 E.Z. *)
        IF  (a_ex_kind = only_parsing)
            AND
            (a_max_intern_select = 0)
            (* no complex view in FROM-part *)
        THEN
            a_may_be_direct_sel := true;
        (*ENDIF*) 
        a60_aselect_statement (acv, put_node)
        END
    (*ENDWITH*) 
    END
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351set_statement (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      is_ok    : boolean;
      curr_n   : tsp00_Int2;
      last_n   : tsp00_Int2;
      kw_index : integer;
      res_kw   : boolean;
      scvh     : tak_scanner_glob;
 
BEGIN
WITH acv, a_scv DO
    BEGIN
    scvh := acv.a_scv;
    a01_next_symbol (acv);
    a01_get_keyword (acv, kw_index, res_kw);
    CASE kw_index OF
        cak_i_event :
            IF  ak351state_check (acv,
                c_admin_ok, c_redo_mode_ok, c_online_ok,
                at_db_manager, c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_call_put (acv, a37, cak_x_set_event, put_node);
                a01_next_symbol (acv);
                ak351event (acv, cak_x_set_event,
                      a_ap_tree^[ put_node ].n_lo_level);
                END;
            (*ENDIF*) 
        cak_i_log :
            (* PTS 1113190 E.Z. *)
            BEGIN
            a01_next_symbol (acv);
            (* PTS 1120104 E.Z. *)
            IF  a01_eqkey (a01kw[ cak_i_writer], a_sqlmode,
                a_cmd_part^.sp1p_buf, a_scv)
            THEN
                BEGIN
                IF  ak351state_check (acv,
                    c_admin_ok, NOT c_redo_mode_ok, NOT c_online_ok,
                    at_db_manager, c_needs_superuser,
                    c_needs_internal_mode, NOT c_needs_oracle_mode)
                THEN
                    BEGIN
                    a01_next_symbol (acv);
                    IF  a01_eqkey (a01kw[ cak_i_on], a_sqlmode,
                        a_cmd_part^.sp1p_buf, a_scv)
                    THEN
                        a01_call_put (acv, a36,
                              cak_x_log_devspace_on, curr_n)
                    ELSE
                        IF  a01_eqkey (a01kw[ cak_i_off], a_sqlmode,
                            a_cmd_part^.sp1p_buf, a_scv)
                        THEN
                            a01_call_put (acv, a36,
                                  cak_x_log_devspace_off, curr_n)
                        ELSE
                            a07_error (acv, e_missing_keyword,
                                  put_node, last_n);
                        (*ENDIF*) 
                    (*ENDIF*) 
                    a01_next_symbol (acv);
                    END
                (*ENDIF*) 
                END
            ELSE
                (* PTS 1120104 E.Z. *)
                IF  a01_eqkey (a01kw[ cak_i_auto], a_sqlmode,
                    a_cmd_part^.sp1p_buf, a_scv)
                THEN
                    BEGIN
                    IF  ak351state_check (acv,
                        c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
                        at_db_manager, c_needs_superuser,
                        c_needs_internal_mode, NOT c_needs_oracle_mode)
                    THEN
                        BEGIN
                        a01_next_symbol (acv);
                        IF  a01mandatory_keyword (acv, cak_i_overwrite)
                        THEN
                            BEGIN
                            IF  a01_eqkey (a01kw[ cak_i_on], a_sqlmode,
                                a_cmd_part^.sp1p_buf, a_scv)
                            THEN
                                a01_call_put (acv, a37,
                                      cak_x_auto_overwrite_on, curr_n)
                            ELSE
                                IF  a01_eqkey (a01kw[ cak_i_off], a_sqlmode,
                                    a_cmd_part^.sp1p_buf, a_scv)
                                THEN
                                    a01_call_put (acv, a37,
                                          cak_x_auto_overwrite_off, curr_n)
                                ELSE
                                    a07_error (acv, e_missing_keyword,
                                          put_node, last_n);
                                (*ENDIF*) 
                            (*ENDIF*) 
                            a01_next_symbol (acv);
                            END
                        (*ENDIF*) 
                        END
                    (*ENDIF*) 
                    END
                ELSE
                    a07_error (acv, e_missing_keyword, put_node, last_n);
                (*ENDIF*) 
            (*ENDIF*) 
            END;
        cak_i_nolog :
            IF  ak351state_check (acv,
                c_admin_ok, c_redo_mode_ok, c_online_ok,
                at_load, NOT c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_next_symbol (acv);
                IF  (a01_eqkey (a01kw[ cak_i_off], a_sqlmode,
                    a_cmd_part^.sp1p_buf, a_scv))
                THEN
                    BEGIN
                    a01_next_symbol (acv);
                    a01_call_put (acv, a37, cak_x_set_nolog_off, curr_n);
                    put_node := curr_n;
                    END
                ELSE
                    a07_error (acv, e_missing_keyword,
                          put_node, last_n);
                (*ENDIF*) 
                END
            ELSE
                BEGIN
                acv.a_returncode := 0;
                IF  ak351state_check (acv,
                    c_admin_ok, c_redo_mode_ok, c_online_ok,
                    at_db_manager, c_needs_superuser,
                    c_needs_internal_mode, NOT c_needs_oracle_mode)
                THEN
                    BEGIN
                    a01_next_symbol (acv);
                    IF  (a01_eqkey (a01kw[ cak_i_off], a_sqlmode,
                        a_cmd_part^.sp1p_buf, a_scv))
                    THEN
                        BEGIN
                        a01_next_symbol (acv);
                        a01_call_put (acv, a37, cak_x_set_nolog_off, curr_n);
                        put_node := curr_n;
                        END
                    ELSE
                        a07_error (acv, e_missing_keyword,
                              put_node, last_n);
                    (*ENDIF*) 
                    END
                (*ENDIF*) 
                END;
            (*ENDIF*) 
        cak_i_timeout :
            BEGIN
            is_ok := true;
            IF  a_cmd_segment_header.sp1c_producer = sp1pr_user_cmd
            THEN
                is_ok := ak351state_check (acv,
                      NOT c_admin_ok, c_redo_mode_ok, c_online_ok,
                      at_db_manager, c_needs_superuser,
                      c_needs_internal_mode, NOT c_needs_oracle_mode);
            (*ENDIF*) 
            IF  NOT is_ok
            THEN
                a07_b_put_error (acv, e_invalid_command, 1)
            ELSE
                BEGIN
                a01_next_symbol (acv);
                IF  a01_eqkey (a01kw[ cak_i_on], a_sqlmode,
                    a_cmd_part^.sp1p_buf, a_scv)
                THEN
                    BEGIN
                    a01_call_put (acv, a37, cak_x_timeout_on, put_node);
                    a01_next_symbol (acv)
                    END
                ELSE
                    IF  a01_eqkey (a01kw[ cak_i_off], a_sqlmode,
                        a_cmd_part^.sp1p_buf, a_scv)
                    THEN
                        BEGIN
                        a01_call_put (acv,
                              a37, cak_x_timeout_off, put_node);
                        a01_next_symbol (acv)
                        END
                    ELSE
                        a07_error (acv, e_missing_keyword,
                              put_node, last_n);
                    (*ENDIF*) 
                (*ENDIF*) 
                END
            (*ENDIF*) 
            END;
        cak_i_write :
            BEGIN
            a01_next_symbol (acv);
            IF  ak351state_check (acv,
                NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
                at_db_manager, c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                IF  a01_eqkey (a01kw[ cak_i_on], a_sqlmode,
                    a_cmd_part^.sp1p_buf, a_scv)
                THEN
                    a01_call_put (acv, a37,
                          cak_x_write_on, curr_n)
                ELSE
                    IF  a01_eqkey (a01kw[ cak_i_off], a_sqlmode,
                        a_cmd_part^.sp1p_buf, a_scv)
                    THEN
                        a01_call_put (acv, a37,
                              cak_x_write_off, curr_n)
                    ELSE
                        a07_error (acv, e_missing_keyword,
                              put_node, curr_n);
                    (*ENDIF*) 
                (*ENDIF*) 
                put_node := curr_n;
                a01_next_symbol (acv);
                IF  a_returncode = 0
                THEN
                    BEGIN
                    IF  a01_eqkey(a01kw[ cak_i_for], a_sqlmode,
                        a_cmd_part^.sp1p_buf, a_scv)
                    THEN
                        BEGIN
                        a01_next_symbol (acv);
                        IF  a01_eqkey(a01kw[ cak_i_table], a_sqlmode,
                            a_cmd_part^.sp1p_buf, a_scv)
                        THEN
                            BEGIN
                            IF  a_ap_tree^[ curr_n ].n_subproc
                                = cak_x_write_off
                            THEN
                                a_ap_tree^[ curr_n ].n_subproc :=
                                      cak_x_tab_off_write
                            ELSE
                                a_ap_tree^[ curr_n ].n_subproc :=
                                      cak_x_tab_on_write;
                            (*ENDIF*) 
                            a01_next_symbol (acv);
                            a02_atablename (acv,
                                  a_ap_tree^[ curr_n ].n_lo_level,
                                  curr_n);
                            END
                        ELSE
                            a07_error (acv, e_missing_keyword,
                                  put_node, last_n);
                        (*ENDIF*) 
                        END
                    ELSE
                        a07_error (acv, e_missing_keyword, put_node,
                              last_n);
                    (*ENDIF*) 
                    END
                (*ENDIF*) 
                END
            (*ENDIF*) 
            END;
        OTHERWISE
            IF  ak351state_check (acv,
                NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
                at_unknown, NOT c_needs_superuser,
                NOT c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                acv.a_scv := scvh;
                a51_aset_statement (acv, put_node);
                END;
            (*ENDIF*) 
        END;
    (*ENDCASE*) 
    a01_is_end_symbol (acv)
    END;
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351shutdown_statement (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      curr_n : tsp00_Int2;
      call_id: tsp00_Int2;
 
BEGIN
IF  ak351state_check (acv,
    NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
    at_db_manager, c_needs_superuser,
    c_needs_internal_mode, NOT c_needs_oracle_mode)
THEN
    WITH acv, a_scv DO
        BEGIN
        a01_next_symbol (acv);
        (* PTS 1111289 E.Z. *)
        call_id := cak_x_shutdown;
        a01_call_put (acv, a37, call_id, curr_n);
        put_node := curr_n;
        a01_is_end_symbol (acv)
        END;
    (*ENDWITH*) 
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351state_statement (VAR acv : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      res_kw       : boolean;
      kw_index     : integer;
 
BEGIN
IF  ak351state_check (acv,
    c_admin_ok, c_redo_mode_ok, c_online_ok,
    at_db_manager, c_needs_superuser,
    c_needs_internal_mode, NOT c_needs_oracle_mode)
THEN
    BEGIN
    a01_call_put (acv, a30, 0, put_node);
    a01_next_symbol (acv);
    a01_get_keyword (acv, kw_index, res_kw);
    CASE kw_index OF
        cak_i_save, cak_i_restore :
            a37state_get    (acv, kw_index);
        cak_i_vtrace :
            a37state_vtrace (acv);
        OTHERWISE
            a07_b_put_error (acv, e_invalid_command, 1)
        END;
    (*ENDCASE*) 
    acv.a_ex_kind := only_syntax;
    END
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351suspend_statement (VAR acv : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
BEGIN
IF  ak351state_check (acv,
    NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
    at_db_manager, c_needs_superuser,
    c_needs_internal_mode, NOT c_needs_oracle_mode)
THEN
    BEGIN
    a01_next_symbol (acv);
    IF  a01mandatory_keyword (acv, cak_i_logwriter)
    THEN
        a01_call_put (acv, a37, cak_i_suspend, put_node);
    (*ENDIF*) 
    a01_is_end_symbol (acv)
    END
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351synchronize_statement (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      last_node    : tsp00_Int2;
 
BEGIN
(* standby *)
IF  ak351state_check (acv,
    NOT c_admin_ok, c_redo_mode_ok, NOT c_online_ok,
    at_db_manager, c_needs_superuser,
    c_needs_internal_mode, NOT c_needs_oracle_mode)
THEN
    WITH acv, a_scv DO
        BEGIN
        a01_next_symbol (acv);
        a01_call_put (acv, a36, cak_x_synchronize_log, put_node);
        IF  sc_symb = s_byte_string
        THEN
            BEGIN
            a03_astring_literal (acv, a_ap_tree^[ put_node ].n_sa_level, last_node);
            a01_is_end_symbol (acv)
            END
        ELSE
            a07_error (acv, e_missing_string_literal, put_node, last_node)
        (*ENDIF*) 
        END;
    (*ENDWITH*) 
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351takeover_statement (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
BEGIN
(* standby *)
IF  ak351state_check (acv,
    NOT c_admin_ok, c_redo_mode_ok, NOT c_online_ok,
    at_db_manager, c_needs_superuser,
    c_needs_internal_mode, NOT c_needs_oracle_mode)
THEN
    BEGIN
    a01_call_put (acv, a36, cak_x_takeover, put_node);
    a01_next_symbol (acv);
    a01_is_end_symbol (acv)
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351unlock_statement (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      symbindex : integer;
      res_kw    : boolean;
 
BEGIN
IF  ak351state_check (acv,
    NOT c_admin_ok, c_redo_mode_ok, c_online_ok,
    at_unknown, NOT c_needs_superuser,
    c_needs_internal_mode, c_needs_oracle_mode)
THEN
    BEGIN
    a01_next_symbol (acv);
    a01_get_keyword (acv, symbindex, res_kw);
    a52_aunlock_statement (acv, put_node)
    END
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351verify_statement (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
BEGIN
IF  ak351state_check (acv,
    c_admin_ok, c_redo_mode_ok, c_online_ok,
    at_db_manager, c_needs_superuser,
    c_needs_internal_mode, NOT c_needs_oracle_mode)
THEN
    BEGIN
    IF  gg999KernelStateIsOnline
    THEN
        a01_call_put (acv, a37, cak_x_verify, put_node)
    ELSE
        a01_call_put (acv, a36, cak_x_verify, put_node);
    (*ENDIF*) 
    a01_next_symbol (acv);
    IF  a01_eqkey (a01kw[ cak_i_extended], acv.a_sqlmode,
        acv.a_cmd_part^.sp1p_buf, acv.a_scv)
    THEN
        BEGIN
        a01_call_put (acv, a30, cak_x_extended_check,
              acv.a_ap_tree^[put_node].n_sa_level);
        a01_next_symbol (acv)
        END;
    (*ENDIF*) 
    a01_is_end_symbol (acv)
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351view_statement (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      kw_index : integer;
      res_kw   : boolean;
      last_n   : tsp00_Int2;
 
BEGIN
WITH acv, a_scv DO
    BEGIN
    a01_next_symbol (acv);
    a01_get_keyword (acv, kw_index, res_kw);
    CASE kw_index OF
        (*PTS 1103475 E.Z.*)
        cak_i_event :
            IF  ak351state_check (acv,
                c_admin_ok, c_redo_mode_ok, c_online_ok,
                at_db_manager, c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                vinsert_keep_alive;
            (*ENDIF*) 
        OTHERWISE
            a07_error (acv, e_missing_keyword, put_node, last_n);
        END;
    (*ENDCASE*) 
    a01_is_end_symbol (acv)
    END;
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351write_statement (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      symbindex : integer;
      last_node : tsp00_Int2;
      res_kw    : boolean;
 
BEGIN
a01_next_symbol (acv);
a01_get_keyword (acv, symbindex, res_kw);
IF  symbindex = cak_i_cache
THEN
    BEGIN
    IF  ak351state_check (acv,
        NOT c_admin_ok, c_redo_mode_ok, c_online_ok,
        at_unknown, NOT c_needs_superuser,
        c_needs_internal_mode, NOT c_needs_oracle_mode)
    THEN
        BEGIN
        a01_call_put (acv, a30, 0, put_node);
        acv.a_ex_kind := only_syntax;
        a10dump (acv)
        END
    (*ENDIF*) 
    END
ELSE
    BEGIN
    IF  symbindex = cak_i_history
    THEN
        BEGIN
        IF  ak351state_check (acv,
            NOT c_admin_ok, c_redo_mode_ok, NOT c_online_ok,
            at_db_manager, c_needs_superuser,
            c_needs_internal_mode, NOT c_needs_oracle_mode)
        THEN
            BEGIN
            a01_call_put (acv, a37, cak_x_write_backuphistory, put_node);
            a01_next_symbol (acv);
            a03_astring_literal (acv,
                  acv.a_ap_tree^[ put_node ].n_sa_level, last_node);
            IF  acv.a_returncode = 0
            THEN
                BEGIN
                WITH acv.a_ap_tree^[ last_node ] DO
                    IF  n_length > BUF_MXSP00
                    THEN
                        n_length := BUF_MXSP00;
                    (*ENDIF*) 
                (*ENDWITH*) 
                a01_is_end_symbol (acv)
                END;
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        END
    ELSE
        BEGIN
        IF  symbindex = cak_i_medium
        THEN
            BEGIN
            IF  ak351state_check (acv,
                NOT c_admin_ok, c_redo_mode_ok, NOT c_online_ok,
                at_db_manager, c_needs_superuser,
                c_needs_internal_mode, NOT c_needs_oracle_mode)
            THEN
                BEGIN
                a01_call_put (acv, a37, cak_x_write_backupmedium, put_node);
                a01_next_symbol (acv);
                a03_astring_literal (acv,
                      acv.a_ap_tree^[ put_node ].n_sa_level, last_node);
                IF  acv.a_returncode = 0
                THEN
                    BEGIN
                    WITH acv.a_ap_tree^[ last_node ] DO
                        IF  n_length > BUF_MXSP00
                        THEN
                            n_length := BUF_MXSP00;
                        (*ENDIF*) 
                    (*ENDWITH*) 
                    a01_is_end_symbol (acv)
                    END;
                (*ENDIF*) 
                END
            (*ENDIF*) 
            END
        ELSE
            BEGIN
&           ifdef TRACE
            IF  symbindex = cak_i_key
            THEN
                a01_write_keywords
            ELSE
&               endif
                BEGIN
                a07_error (acv, e_wanted_keyword, put_node, last_node);
                acv.a_ex_kind := only_syntax;
                END
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        END;
    (*ENDIF*) 
    END;
(*ENDIF*) 
END;
 
(*=========================================================*)
(*------------------------------*) 
 
PROCEDURE
      ak351admin_restore (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2;
            kw_index     : integer);
 
VAR
      restore_from_dev  : boolean;
      res_kw            : boolean;
      curr_n            : tsp00_Int2;
      last_n            : tsp00_Int2;
      indicator         : tsp00_Int2;
      restore_data_kind : integer;
      aux_scv           : tak_scanner_glob;
 
BEGIN
WITH acv, a_scv DO
    BEGIN
    restore_from_dev  := false;
    restore_data_kind := cak_i_no_keyword;
    CASE kw_index OF
        cak_i_data,
        cak_i_log,
        cak_i_pages :
            BEGIN
            IF  kw_index = cak_i_data
            THEN
                indicator := cak_x_restore_db
            ELSE
                IF  kw_index = cak_i_log
                THEN
                    indicator := cak_x_restore_log
                ELSE
                    indicator := cak_x_restore_pages;
                (*ENDIF*) 
            (*ENDIF*) 
            aux_scv   := a_scv;
            a01_next_symbol (acv);
            a01_get_keyword (acv, restore_data_kind, res_kw);
            IF  (restore_data_kind <> cak_i_begin) AND
                (restore_data_kind <> cak_i_ignore) AND
                (restore_data_kind <> cak_i_cancel) AND
                (restore_data_kind <> cak_i_replace)
            THEN
                BEGIN
                restore_data_kind := cak_i_no_keyword;
                a_scv             := aux_scv
                END
            ELSE
                a01_next_symbol (acv)
            (*ENDIF*) 
            END;
        cak_i_config :
            indicator := cak_x_restore_config;
        OTHERWISE
            a07_error (acv, e_missing_keyword, put_node, last_n);
        END;
    (*ENDCASE*) 
    IF  a_returncode = 0
    THEN
        BEGIN
        a01_call_put (acv, a36, indicator, last_n);
        a_ap_tree^[last_n].n_length := restore_data_kind;
        put_node := last_n;
        curr_n   := last_n;
        IF  indicator = cak_x_restore_log
        THEN
            BEGIN (* restore log .. *)
            aux_scv   := a_scv;
            a01_next_symbol (acv);
            IF  a01_eqkey (a01kw[ cak_i_from], a_sqlmode,
                a_cmd_part^.sp1p_buf, a_scv)
            THEN
                BEGIN
                a01_next_symbol (acv);
                IF  a01_eqkey (a01kw[ cak_i_volume], a_sqlmode,
                    a_cmd_part^.sp1p_buf, a_scv)
                THEN
                    BEGIN (* restore log from dev to dev *)
                    restore_from_dev := true;
                    a_ap_tree^[ put_node ].n_subproc :=
                          cak_x_rest_log_from;
                    a01_next_symbol (acv)
                    END
                ELSE
                    BEGIN
                    (* no restore from dev to dev, backtracking *)
                    a_scv  := aux_scv;
                    last_n := curr_n
                    END;
                (*ENDIF*) 
                END
            ELSE
                (* PTS 1117472 E.Z. *)
                IF  a01_eqkey (a01kw[ cak_i_volume], a_sqlmode,
                    a_cmd_part^.sp1p_buf, a_scv)
                THEN
                    BEGIN
                    a_ap_tree^[put_node].n_subproc := cak_x_restore_bad_log;
                    restore_data_kind := cak_i_bad;
                    a01_next_symbol (acv);
                    a02_asystem_devspace (acv,
                          a_ap_tree^[ put_node ].n_lo_level, last_n);
                    END
                ELSE
                    BEGIN
                    (* no restore log from, backtracking *)
                    a_scv  := aux_scv;
                    last_n := curr_n
                    END;
                (*ENDIF*) 
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        IF  (restore_data_kind = cak_i_replace)
        THEN
            BEGIN
            a03_astring_literal (acv,
                  a_ap_tree^[ last_n ].n_sa_level,
                  last_n);
            IF  a_returncode = 0
            THEN
                WITH a_ap_tree^[ last_n ] DO
                    BEGIN
                    n_symb := s_hostfilename;
                    ak351file_type (acv,
                          a_ap_tree^[last_n].n_sa_level, last_n)
                    END;
                (*ENDWITH*) 
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        END;
    (*ENDIF*) 
    IF  (a_returncode = 0) AND NOT
        ((restore_data_kind <> cak_i_no_keyword) OR restore_from_dev)
    THEN
        BEGIN
        a01_next_symbol (acv);
        IF  a01_eqkey (a01kw[ cak_i_quick], a_sqlmode,
            a_cmd_part^.sp1p_buf, a_scv)
        THEN
            a01_next_symbol (acv);
        (*ENDIF*) 
        IF  a01_eqkey (a01kw[ cak_i_from], a_sqlmode,
            a_cmd_part^.sp1p_buf, a_scv)
        THEN
            REPEAT
                a02_ahostfile_name (acv,
                      a_ap_tree^[ last_n ].n_sa_level, last_n);
                IF  acv.a_returncode = 0
                THEN
                    ak351file_type (acv,
                          a_ap_tree^[ last_n ].n_sa_level, last_n);
                (*ENDIF*) 
            UNTIL
                (sc_symb <> s_comma)
                OR  (acv.a_returncode <> 0)
                OR (indicator = cak_x_restore_config)
            (*ENDREPEAT*) 
        ELSE
            a07_error (acv, e_missing_keyword,
                  put_node, last_n);
        (*ENDIF*) 
        IF  a_returncode = 0
        THEN
            BEGIN
            IF  indicator = cak_x_restore_config
            THEN
                BEGIN
                IF  a01_eqkey (a01kw[ cak_i_to], a_sqlmode,
                    a_cmd_part^.sp1p_buf, a_scv)
                THEN
                    BEGIN
                    a01_next_symbol (acv);
                    a03_astring_literal (acv,
                          a_ap_tree^[ last_n ].n_sa_level, last_n);
                    IF  a_returncode = 0
                    THEN
                        WITH a_ap_tree^[ last_n] DO
                            IF  n_length > DBNAME_MXSP00
                            THEN
                                n_length := DBNAME_MXSP00;
                            (*ENDIF*) 
                        (*ENDWITH*) 
                    (*ENDIF*) 
                    END
                (*ENDIF*) 
                END
            ELSE
                IF  indicator = cak_x_restore_log
                THEN
                    IF  a01_eqkey (a01kw[ cak_i_until], a_sqlmode,
                        a_cmd_part^.sp1p_buf, a_scv)
                    THEN
                        BEGIN
                        a01_next_symbol (acv);
                        IF  (acv.a_scv.sc_symb = s_unsigned_integer)
                        THEN
                            BEGIN
                            a03_ainteger (acv,
                                  a_ap_tree^[ last_n ].n_sa_level, last_n);
                            END
                        ELSE
                            BEGIN
                            a03_astring_literal (acv,
                                  a_ap_tree^[ last_n ].n_sa_level, last_n);
                            a03_astring_literal (acv,
                                  a_ap_tree^[ last_n ].n_sa_level, last_n)
                            END;
                        (*ENDIF*) 
                        END;
                    (*ENDIF*) 
                (*ENDIF*) 
            (*ENDIF*) 
            ak351block_size  (acv,
                  a_ap_tree^[ last_n ].n_sa_level, last_n);
            IF  (sc_symb <> s_eof) AND (indicator = cak_x_restore_db)
            THEN
                BEGIN
                IF  sc_symb <> s_eof
                THEN
                    IF  a01_eqkey (a01kw[ cak_i_config], a_sqlmode,
                        a_cmd_part^.sp1p_buf, a_scv)
                    THEN
                        BEGIN
                        curr_n := last_n;
                        a01_call_put (acv, a36, cak_i_config, last_n);
                        a_ap_tree^[ curr_n ].n_sa_level := last_n;
                        a01_next_symbol (acv);
                        END
                    (*ENDIF*) 
                (*ENDIF*) 
                END;
            (*ENDIF*) 
            IF  indicator <> cak_x_restore_config
            THEN
                BEGIN
                IF  sc_symb <> s_eof
                THEN
                    IF  a01_eqkey (a01kw[cak_i_cascade], a_sqlmode,
                        a_cmd_part^.sp1p_buf, a_scv)
                    THEN
                        BEGIN
                        curr_n := last_n;
                        a01_call_put (acv, a37, cak_i_cascade, last_n);
                        a_ap_tree^[ curr_n ].n_sa_level := last_n;
                        a01_next_symbol (acv)
                        END;
                    (*ENDIF*) 
                (*ENDIF*) 
                ak351media_name (acv, a_ap_tree^[last_n].n_sa_level, last_n)
                END;
            (*ENDIF*) 
            ak351label_name (acv, a_ap_tree^[last_n].n_sa_level, last_n); (* PTS 1128100 mb 2004-03-03 *)
            END;
        (*ENDIF*) 
        END;
    (*ENDIF*) 
    a01_is_end_symbol (acv)
    END
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351alter_create_set (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2;
            indicator    : integer);
 
VAR
      res_kw       : boolean;
      mapcharbytes : integer;
      ikw          : integer;
      curr_node    : tsp00_Int2;
 
BEGIN
WITH acv, a_scv DO
    IF  ak351state_check (acv,
        NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
        at_db_manager, c_needs_superuser,
        c_needs_internal_mode, NOT c_needs_oracle_mode)
    THEN
        BEGIN
        a01_call_put (acv, a37, indicator, curr_node);
        put_node    := curr_node;
        a01_next_symbol (acv);
        IF  NOT a01_eqkey (a01kw[ cak_i_set], a_sqlmode,
            a_cmd_part^.sp1p_buf, a_scv)
        THEN
            a07_error (acv, e_invalid_end_of_command,
                  curr_node, curr_node)
        ELSE
            BEGIN
            a01_next_symbol (acv);
            IF  sc_symb <> s_identifier
            THEN
                a07_b_put_error (acv, e_invalid_command, sc_sypos)
            ELSE
                BEGIN
                a01_get_keyword (acv, ikw, res_kw);
                IF  res_kw
                THEN
                    a07_error (acv, e_reserved_identifier,
                          curr_node, curr_node)
                ELSE(* create mapchar set <set name> ...  *)
                    a02_put_identifier (acv,
                          a_ap_tree^[ put_node ].n_lo_level, curr_node);
                (*ENDIF*) 
                IF  a_returncode =  0
                THEN
                    BEGIN
                    (* PTS 1120720 E.Z. *)
                    IF  NOT a01_eqkey (a01kw[ cak_i_as], a_sqlmode,
                        a_cmd_part^.sp1p_buf, a_scv)
                    THEN
                        a07_error (acv, e_missing_keyword,
                              curr_node, curr_node)
                    ELSE
                        BEGIN
                        (* create mapchar set <set name> as ... *)
                        a01_next_symbol (acv);
                        mapcharbytes := 1;
                        IF  NOT (a01_eqkey (a01kw[ cak_i_ascii], a_sqlmode,
                            a_cmd_part^.sp1p_buf, a_scv) OR
                            (* PTS 1122828 E.Z. *)
                            (a01_eqkey (a01kw[ cak_i_unicode], a_sqlmode,
                            a_cmd_part^.sp1p_buf, a_scv) AND g01unicode))
                        THEN
                            a07_error (acv, e_missing_keyword,
                                  curr_node, curr_node)
                        ELSE (* create mapchar set <set name>
                              as ascii/unicode ...  *)
                            BEGIN
                            IF  a01_eqkey (a01kw[ cak_i_unicode], a_sqlmode,
                                a_cmd_part^.sp1p_buf, a_scv)
                            THEN
                                BEGIN
                                a_scv.sc_symb := s_unicode;
                                mapcharbytes  := 2;
                                END
                            ELSE
                                a_scv.sc_symb := s_ascii;
                            (*ENDIF*) 
                            a01_put_node (acv, a_ap_tree^[ curr_node ].n_lo_level);
                            curr_node := a_ap_tree^[ curr_node ].n_lo_level;
                            a01_next_symbol (acv);
                            IF  NOT a01_eqkey (a01kw[ cak_i_with], a_sqlmode,
                                a_cmd_part^.sp1p_buf, a_scv)
                            THEN
                                a07_error (acv, e_missing_keyword,
                                      curr_node, curr_node)
                            ELSE (* create mapchar set <set name>
                                  as ascii/unicode with ...  *)
                                ak351get_map_codes (acv, curr_node, mapcharbytes);
                            (*ENDIF*) 
                            END;
                        (*ENDIF*) 
                        END;
                    (*ENDIF*) 
                    END;
                (*ENDIF*) 
                END;
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        END;
    (*ENDIF*) 
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351block_size  (
            VAR acv       : tak_all_command_glob;
            VAR put_node  : tsp00_Int2;
            VAR last_node : tsp00_Int2);
 
VAR
      curr_n : tsp00_Int2;
 
BEGIN
WITH acv, a_scv DO
    IF  sc_symb = s_identifier
    THEN
        IF  a01_eqkey (a01kw[ cak_i_blocksize], a_sqlmode,
            a_cmd_part^.sp1p_buf, a_scv)
        THEN
            BEGIN
            a01_call_put (acv, a37, cak_i_blocksize, put_node);
            last_node := put_node;
            a01_next_symbol (acv);
            a03_aunsigned_integer (acv,
                  a_ap_tree^[last_node].n_lo_level, curr_n)
            END;
        (*ENDIF*) 
    (*ENDIF*) 
(*ENDWITH*) 
END;
 
(* PTS 1134856 FF *)
(*------------------------------*) 
 
PROCEDURE
      ak351CheckIndex(VAR acv : tak_all_command_glob);
 
VAR
      res_kw      : boolean;
      kw_index    : integer;
      put_node   : tsp00_Int2;
      last_node  : tsp00_Int2;
 
BEGIN
a01_call_put (acv, a37, cak_x_check_index, put_node);
acv.a_ap_tree^[0].n_lo_level := put_node;
a01_get_keyword (acv, kw_index, res_kw);
IF  a01mandatory_keyword (acv, cak_i_index)
THEN
    IF  a01mandatory_keyword (acv, cak_i_for)
    THEN
        IF  a01mandatory_keyword (acv, cak_i_container)
        THEN
            BEGIN
            a03_aunsigned_integer (acv, acv.a_ap_tree^[put_node].n_sa_level, last_node);
            END;
        (*ENDIF*) 
    (*ENDIF*) 
(*ENDIF*) 
a01_is_end_symbol (acv)
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351CheckInstance(VAR acv : tak_all_command_glob);
 
VAR
      put_node   : tsp00_Int2;
      last_node  : tsp00_Int2;
      instanceno : tsp00_Int2;
 
BEGIN (* 1113008 *)
a01_call_put (acv, a30, 0, last_node);
a01_next_symbol (acv);
a03_ainteger (acv, put_node, last_node);
WITH acv.a_ap_tree^[ last_node ] DO
    a05_unsigned_int2_get (acv, n_pos,
          n_length, e_invalid_unsign_integer, instanceno);
(*ENDWITH*) 
gg942ComponentTests (acv.a_transinf.tri_trans, instanceno);
IF  acv.a_transinf.tri_trans.trError_gg00 <> e_ok
THEN
    a07_b_put_error (acv, acv.a_transinf.tri_trans.trError_gg00, 1);
(*ENDIF*) 
acv.a_ex_kind := only_syntax;
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351column (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      last_n : tsp00_Int2;
 
BEGIN
WITH acv, a_scv DO
    IF  a_returncode = 0
    THEN
        BEGIN
        a01_next_symbol (acv);
        a_ap_tree^ [ a_ap_tree^[ 0 ].n_lo_level ].n_length := ord(diagColRoot_egg00);
        a03_aunsigned_integer (acv, put_node, last_n);
        a01_is_end_symbol (acv)
        END;
    (*ENDIF*) 
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351count_check (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2;
            VAR last_n   : tsp00_Int2);
 
VAR
      curr_n : tsp00_Int2;
 
BEGIN
WITH acv, a_scv DO
    BEGIN
    IF  a01_eqkey (a01kw[ cak_i_count], a_sqlmode,
        a_cmd_part^.sp1p_buf, a_scv)
    THEN
        BEGIN
        a01_call_put (acv, a37, cak_i_count, last_n);
        put_node := last_n;
        a01_next_symbol (acv);
        a03_aunsigned_integer (acv,
              a_ap_tree^[last_n].n_lo_level, curr_n)
        END;
    (*ENDIF*) 
    END;
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351data_page (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2;
            bIsStatic    : boolean);
 
VAR
      last_n : tsp00_Int2;
 
BEGIN
WITH acv, a_scv DO
    IF  a_returncode = 0
    THEN
        BEGIN
        a01_next_symbol (acv);
        IF  bIsStatic
        THEN
            a_ap_tree^ [ a_ap_tree^[ 0 ].n_lo_level ].n_length := ord(diagStaticPages_egg00)
        ELSE
            a_ap_tree^ [ a_ap_tree^[ 0 ].n_lo_level ].n_length := ord(diagPermPages_egg00);
        (*ENDIF*) 
        a03_aunsigned_integer (acv, put_node, last_n);
        a01_is_end_symbol (acv)
        END
    (*ENDIF*) 
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351devspace (
            VAR acv         : tak_all_command_glob;
            diag_node       : tsp00_Int2;
            VAR put_node    : tsp00_Int2);
 
VAR
      last_n  : tsp00_Int2;
 
BEGIN
WITH acv, a_scv DO
    IF  a_returncode = 0
    THEN
        BEGIN
        a01_next_symbol (acv);
        a_ap_tree^[diag_node].n_length := ord(diagDev_egg00);
        IF  a01_eqkey (a01kw [cak_i_second], a_sqlmode,
            a_cmd_part^.sp1p_buf, a_scv)
        THEN
            BEGIN
            a01_next_symbol (acv);
            IF  a01_eqkey (a01kw [cak_i_log], a_sqlmode,
                a_cmd_part^.sp1p_buf, a_scv)
            THEN
                a_ap_tree^[diag_node].n_length := ord (diagMirrLogDev_egg00)
            ELSE
                a07_error (acv, e_missing_keyword, put_node, last_n)
            (*ENDIF*) 
            END
        ELSE
            IF  a01_eqkey (a01kw [cak_i_log], a_sqlmode,
                a_cmd_part^.sp1p_buf, a_scv)
            THEN
                a_ap_tree^[diag_node].n_length := ord (diagLogDev_egg00);
            (*ENDIF*) 
        (*ENDIF*) 
        IF  (a_returncode = 0)
            AND
            (a_ap_tree^[diag_node].n_length <> ord (diagDev_egg00))
        THEN
            (* devspace number *)
            BEGIN
            a01_next_symbol (acv);
            a03_aunsigned_integer (acv, put_node, last_n);
            END;
        (*ENDIF*) 
        IF  (a_returncode = 0)
            AND
            (a_ap_tree^[diag_node].n_length = ord (diagDev_egg00))
        THEN
            (* devspace name *)
            BEGIN
            a_ap_tree^ [diag_node].n_length := ord(diagDev_egg00);
            a02_asystem_devspace (acv, put_node, last_n)
            END;
        (*ENDIF*) 
        IF  a_returncode = 0
        THEN
            BEGIN
            IF  a01_eqkey (a01kw [cak_i_from], a_sqlmode,
                a_cmd_part^.sp1p_buf, a_scv)
            THEN
                BEGIN
                a01_next_symbol (acv);
                a03_aunsigned_integer (acv,
                      a_ap_tree^[last_n].n_sa_level, last_n);
                IF  a01_eqkey (a01kw[cak_i_to], a_sqlmode,
                    a_cmd_part^.sp1p_buf, a_scv)
                THEN
                    BEGIN
                    a01_next_symbol (acv);
                    a03_aunsigned_integer (acv,
                          a_ap_tree^[last_n].n_sa_level, last_n);
                    END
                ELSE
                    a07_error (acv, e_missing_keyword, put_node, last_n)
                (*ENDIF*) 
                END
            ELSE
                a07_error (acv, e_missing_keyword, put_node, last_n)
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        a01_is_end_symbol (acv)
        END
    (*ENDIF*) 
(*ENDWITH*) 
END;
 
(* PTS 1108234 E.Z. *)
(*------------------------------*) 
 
PROCEDURE
      ak351diag_check (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
CONST
      c_check_items = 20;
 
VAR
      i          : integer;
      item_cnt   : integer;
      instanceno : tsp00_Int2;
      last_node  : tsp00_Int2;
      set_on     : boolean;
      kw_index   : integer;
      res_kw     : boolean;
      check_item : ARRAY [1..c_check_items] OF integer;
 
BEGIN
acv.a_ap_tree^[ put_node ].n_proc := a30;
(* PTS 1103957 JA 199-09-15 *)
set_on   := false;
item_cnt := 0;
REPEAT
    a01_get_keyword (acv, kw_index, res_kw);
    CASE kw_index OF
        cak_i_all,
        cak_i_bufferpool,  (* LockSupply     *)
        cak_i_cache,       (* datacachecheck *)
        cak_i_current,     (* KB-Region      *)
        cak_i_default,     (* vtrCheck0      *)
        cak_i_freepage,    (* bd_lock_check  *)
        cak_i_lock,        (* Lock           *)
        cak_i_log,         (* Log            *)
        cak_i_pages,       (* treecheck      *)
        cak_i_save,        (* Backup         *)
        cak_i_transaction, (* Trans          *)
        cak_i_write:       (* LogQueue       *)
            BEGIN
            item_cnt := item_cnt + 1;
            check_item [item_cnt] := kw_index;
            IF  item_cnt >= c_check_items
            THEN
                a07_error (acv, e_missing_keyword, put_node, put_node)
            ELSE
                a01_next_symbol (acv)
            (*ENDIF*) 
            END;
        cak_i_instance :
            BEGIN
            item_cnt := item_cnt + 1;
            check_item [item_cnt] := kw_index;
            a01_next_symbol (acv);
            a03_aunsigned_integer (acv, acv.a_ap_tree^[put_node].n_sa_level,
                  last_node);
            END;
        OTHERWISE
            IF  ((kw_index = cak_i_on ) OR
                ( kw_index = cak_i_off))
                AND
                (item_cnt > 0)
            THEN
                BEGIN
                set_on := kw_index = cak_i_on;
                a01_next_symbol (acv);
                END
            ELSE
                a07_error (acv, e_missing_keyword, put_node, put_node)
            (*ENDIF*) 
        END;
    (*ENDCASE*) 
UNTIL
    (kw_index = cak_i_on      ) OR
    (kw_index = cak_i_off     ) OR
    (kw_index = cak_i_instance) OR  (* PTS 1108234 JA 2000-11-23 *)
    (acv.a_returncode <> 0);
(*ENDREPEAT*) 
IF  acv.a_returncode = 0
THEN
    FOR i := 1 TO item_cnt DO
        CASE check_item [i] OF
            cak_i_all:
                BEGIN
                kb03SetKbCheck (set_on);
                g01vtrace.vtrCheck_gg00 := set_on;
                g01glob.datacachecheck  := set_on;
                g01glob.bd_lock_check   := set_on;
                g01glob.treecheck       := set_on
                END;
            cak_i_bufferpool:
                kb03SetLockSupplyCheck (set_on);
            cak_i_cache:
                g01glob.datacachecheck := set_on;
            cak_i_current:
                kb03SetRegionCheck (set_on);
            cak_i_default:
                g01vtrace.vtrCheck_gg00 := set_on;
            cak_i_freepage:
                g01glob.bd_lock_check := set_on;
            cak_i_instance:
                BEGIN
                WITH acv.a_ap_tree^[ last_node ] DO
                    a05_unsigned_int2_get (acv, n_pos,
                          n_length, e_invalid_unsign_integer, instanceno);
                (*ENDWITH*) 
                (* PTS 1108234 JA 2000-11-23 *)
                gg942ComponentTests (acv.a_transinf.tri_trans, instanceno);
                IF  acv.a_transinf.tri_trans.trError_gg00 <> e_ok
                THEN
                    a07_b_put_error (acv, acv.a_transinf.tri_trans.trError_gg00, 1);
                (*ENDIF*) 
                END;
            cak_i_lock:
                kb03SetLockCheck (set_on);
            cak_i_pages:
                g01glob.treecheck := set_on;
            cak_i_save:
                kb03SetBackupCheck (set_on);
            cak_i_transaction:
                kb03SetTransCheck (set_on);
            OTHERWISE
                ;
            END;
        (*ENDCASE*) 
    (*ENDFOR*) 
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351diag_delete (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      last_node : tsp00_Int2;
 
BEGIN
(* DIAGNOSE DELETE BLOCK ADDRESS FOR <AddressMode> PAGE <PageNo> *)
a01_next_symbol (acv);
IF  a01mandatory_keyword (acv, cak_i_block)
THEN
    BEGIN
    a01_call_put (acv, a37, cak_x_delete_block, put_node);
    IF  a01mandatory_keyword (acv, cak_i_address)
    THEN
        IF  a01mandatory_keyword (acv, cak_i_for)
        THEN
            BEGIN
            a351get_recovery_mode (acv, put_node);
            IF  acv.a_returncode = 0
            THEN
                BEGIN
                a01_next_symbol (acv);
                IF  a01mandatory_keyword (acv, cak_i_page)
                THEN
                    a03_aunsigned_integer (acv,
                          acv.a_ap_tree^[ put_node ].n_sa_level, last_node );
                (*ENDIF*) 
                END
            (*ENDIF*) 
            END
        (*ENDIF*) 
    (*ENDIF*) 
    END
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      a351get_recovery_mode (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      sn_word                 : tak_keyword;
 
BEGIN
sn_word := 'PERMANENT         ';
IF  (a01_eqkey (a01kw[cak_i_dynamic], acv.a_sqlmode,
    acv.a_cmd_part^.sp1p_buf, acv.a_scv)) OR
    (a01_eqkey (sn_word, acv.a_sqlmode,
    acv.a_cmd_part^.sp1p_buf, acv.a_scv) )
THEN
    acv.a_ap_tree^[put_node].n_length := ord(rmPerm_egg00)
ELSE
    IF  a01_eqkey (a01kw[cak_i_static], acv.a_sqlmode,
        acv.a_cmd_part^.sp1p_buf, acv.a_scv)
    THEN
        acv.a_ap_tree^[put_node].n_length := ord(rmStatic_egg00)
    ELSE
        IF  a01_eqkey (a01kw[cak_i_temp], acv.a_sqlmode,
            acv.a_cmd_part^.sp1p_buf, acv.a_scv)
        THEN
            acv.a_ap_tree^[put_node].n_length := ord(rmTemp_egg00)
        ELSE
            a07_error (acv, e_missing_keyword, put_node, put_node);
        (*ENDIF*) 
    (*ENDIF*) 
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351diag_get (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      last_node : tsp00_Int2;
 
BEGIN
(* DIAGNOSE GET BLOCK ADDRESS FOR <AddressMode> PAGE <PageNo> *)
a01_next_symbol (acv);
IF  a01mandatory_keyword (acv, cak_i_block)
THEN
    BEGIN
    a01_call_put (acv, a37, cak_x_get_block, put_node);
    IF  a01mandatory_keyword (acv, cak_i_address)
    THEN
        IF  a01mandatory_keyword (acv, cak_i_for)
        THEN
            BEGIN
            a351get_recovery_mode (acv, put_node);
            IF  acv.a_returncode = 0
            THEN
                BEGIN
                a01_next_symbol (acv);
                IF  a01mandatory_keyword (acv, cak_i_page)
                THEN
                    a03_aunsigned_integer (acv,
                          acv.a_ap_tree^[ put_node ].n_sa_level, last_node );
                (*ENDIF*) 
                END
            (*ENDIF*) 
            END
        (*ENDIF*) 
    (*ENDIF*) 
    END
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351diag_oms (VAR acv :tak_all_command_glob);
 
VAR
      res_kw    : boolean;
      kw        : integer;
      put_node  : tsp00_Int2;
      last_node : tsp00_Int2;
      errorCode : tsp00_Int4;
      kw_dump   : tak_keyword;
 
BEGIN
a01_call_put (acv, a30, 0, last_node);
a01_next_symbol (acv);
IF  a01mandatory_keyword (acv, cak_i_catch)
THEN
    BEGIN
    a03_ainteger (acv, put_node, last_node);
    a05int4_get (acv, acv.a_ap_tree^[last_node].n_pos,
          acv.a_ap_tree^[last_node].n_length, errorCode);
    IF  acv.a_scv.sc_symb <> s_eof
    THEN
        BEGIN
        kw_dump := 'DUMP              ';
        IF  a01_eqkey (kw_dump, acv.a_sqlmode, acv.a_cmd_part^.sp1p_buf, acv.a_scv)
        THEN
            kw := cak_i_to
        ELSE
            BEGIN
            a01_get_keyword (acv, kw, res_kw);
            IF  (kw <> cak_i_flush) AND (kw <> cak_i_stop)
            THEN
                a07_error (acv, e_wanted_keyword, put_node, last_node);
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        END
    ELSE
        a07_error (acv, e_wanted_keyword, put_node, last_node);
    (*ENDIF*) 
    IF  acv.a_returncode = 0
    THEN
        BEGIN
        acv.a_ex_kind := only_syntax;
        a01_next_symbol (acv);
        a01_is_end_symbol (acv);
        IF  acv.a_returncode = 0
        THEN
            ak341SetDumpError(errorCode, kw);
        (*ENDIF*) 
        END;
    (*ENDIF*) 
    END;
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351diag_set (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      aux_scv   : tak_scanner_glob;
      last_node : tsp00_Int2;
 
BEGIN
aux_scv := acv.a_scv;
a01_next_symbol (acv);
IF  a01_eqkey (a01kw[cak_i_block], acv.a_sqlmode,
    acv.a_cmd_part^.sp1p_buf, acv.a_scv)
THEN
    BEGIN
    (* DIAGNOSE SET BLOCK ADDRESS FOR <AddressMode>       *)
    (* PAGE <PageNo> TO VOLUME <VolumeNo> BLOCK <BlockNo> *)
    IF  ak351state_check (acv,
        c_admin_ok, NOT c_redo_mode_ok, NOT c_online_ok,
        at_db_manager, c_needs_superuser,
        c_needs_internal_mode, NOT c_needs_oracle_mode)
    THEN
        BEGIN
        a01_call_put (acv, a37, cak_x_set_block, put_node);
        a01_next_symbol (acv);
        IF  a01mandatory_keyword (acv, cak_i_address)
        THEN
            IF  a01mandatory_keyword (acv, cak_i_for)
            THEN
                a351get_recovery_mode (acv, put_node);
            (*ENDIF*) 
        (*ENDIF*) 
        IF  acv.a_returncode = 0
        THEN
            BEGIN
            a01_next_symbol (acv);
            IF  a01mandatory_keyword (acv, cak_i_page)
            THEN
                BEGIN
                a03_aunsigned_integer (acv,
                      acv.a_ap_tree^[ put_node ].n_sa_level, last_node);
                IF  a01mandatory_keyword (acv, cak_i_to)
                THEN
                    IF  a01mandatory_keyword (acv, cak_i_volume)
                    THEN
                        a03_aunsigned_integer (acv,
                              acv.a_ap_tree^[ last_node ].n_sa_level, last_node);
                    (*ENDIF*) 
                (*ENDIF*) 
                END
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        IF  acv.a_returncode = 0
        THEN
            BEGIN
            IF  a01mandatory_keyword (acv, cak_i_block)
            THEN
                a03_aunsigned_integer (acv,
                      acv.a_ap_tree^[ last_node ].n_sa_level, last_node);
            (*ENDIF*) 
            END
        (*ENDIF*) 
        END
    (*ENDIF*) 
    END
ELSE
    BEGIN
    acv.a_scv := aux_scv;
    IF  ak351state_check (acv,
        NOT c_admin_ok, c_redo_mode_ok, c_online_ok,
        at_unknown, NOT c_needs_superuser,
        c_needs_internal_mode, NOT c_needs_oracle_mode)
    THEN
        BEGIN (* h.b. PTS 1105143 *)
        a01_call_put (acv, a37, cak_x_set_parameter, put_node);
        ak351set_parameter_syntax (acv, acv.a_ap_tree^[ put_node ].n_lo_level);
        END;
    (*ENDIF*) 
    END
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351diag_share (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
BEGIN
a01_call_put (acv, a30, 0, put_node);
a01_next_symbol (acv);
IF  a01mandatory_keyword (acv, cak_i_parse)
THEN
    IF  a01_eqkey (a01kw[cak_i_on], acv.a_sqlmode,
        acv.a_cmd_part^.sp1p_buf, acv.a_scv)
    THEN
        a101_SharedSQL_SetStatusParameter(true)
    ELSE
        IF  a01_eqkey (a01kw[cak_i_off], acv.a_sqlmode,
            acv.a_cmd_part^.sp1p_buf, acv.a_scv)
        THEN
            a101_SharedSQL_SetStatusParameter(false)
        ELSE
            IF  a01_eqkey (a01kw[cak_i_drop], acv.a_sqlmode,
                acv.a_cmd_part^.sp1p_buf, acv.a_scv)
            THEN
                a101_CleanUpAll(acv)
            ELSE
                IF  a01_eqkey (a01kw[cak_i_reject], acv.a_sqlmode,
                    acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                THEN
                    a101_InvalidateAll(acv)
                ELSE
                    IF  a01_eqkey (a01kw[cak_i_restart], acv.a_sqlmode,
                        acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                    THEN
                        BEGIN
                        a01_next_symbol (acv);
                        IF  a01_eqkey (a01kw[cak_i_statistics], acv.a_sqlmode,
                            acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                        THEN
                            a101_ResetSharedSQLStatistics(acv)
                        ELSE
                            a07_error (acv, e_missing_keyword, put_node, put_node);
                        (*ENDIF*) 
                        END
                    ELSE
                        a07_error (acv, e_missing_keyword, put_node, put_node);
                    (*ENDIF*) 
                (*ENDIF*) 
            (*ENDIF*) 
        (*ENDIF*) 
    (*ENDIF*) 
(*ENDIF*) 
a01_next_symbol (acv);
END;
 
&ifdef TRACE
(*------------------------------*) 
 
PROCEDURE
      ak351diag_switch_syntax (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      _kw_index               : integer;
      _last_n                 : tsp00_Int2;
      _kw_keyword             : tak_keyword;
      _kw_keyword_layer       : tak_keyword;
      _kw_keyword_debug       : tak_keyword;
      _res_kw                 : boolean;
      _is_first               : boolean;
 
BEGIN
(* DIAGNOSE SWITCH *)
a01_call_put (acv, a37, cak_x_switch, _last_n);
put_node := _last_n;
a01_next_symbol (acv);
a01_get_keyword (acv, _kw_index, _res_kw);
CASE _kw_index OF
    cak_i_off :
        BEGIN
        (* DIAGNOSE SWITCH OFF *)
        acv.a_ap_tree^[ _last_n ].n_length := cak30_x_switch_off;
        a01_next_symbol (acv);
        END;
    OTHERWISE
        BEGIN
        _kw_keyword := 'MAXBUF            ';
        IF  a01_eqkey (_kw_keyword, acv.a_sqlmode, acv.a_cmd_part^.sp1p_buf,
            acv.a_scv)
        THEN
            BEGIN
            (* DIAGNOSE SWITCH MAXBUF *)
            acv.a_ap_tree^[ _last_n ].n_length := cak30_x_switch_maxbuf;
            a01_next_symbol (acv);
            END
        ELSE
            BEGIN
            _kw_keyword := 'MINBUF            ';
            IF  a01_eqkey (_kw_keyword, acv.a_sqlmode, acv.a_cmd_part^.sp1p_buf,
                acv.a_scv)
            THEN
                BEGIN
                (* DIAGNOSE SWITCH MINBUF *)
                acv.a_ap_tree^[ _last_n ].n_length := cak30_x_switch_minbuf;
                a01_next_symbol (acv);
                END
            ELSE
                BEGIN
                _kw_keyword := 'BUFLIMIT          ';
                IF  a01_eqkey (_kw_keyword, acv.a_sqlmode,
                    acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                THEN
                    BEGIN
                    (* DIAGNOSE SWITCH BUFLIMIT <unsigned> *)
                    acv.a_ap_tree^[ _last_n ].n_length := cak30_x_switch_buflimit;
                    a01_next_symbol (acv);
                    a03_aunsigned_integer (acv,
                          acv.a_ap_tree^[ _last_n ].n_sa_level, _last_n );
                    END
                ELSE
                    BEGIN
                    _kw_keyword_layer       := 'LAYER             ';
                    _kw_keyword_debug       := 'DEBUG             ';
                    _is_first               := true;
                    IF  a01_eqkey (_kw_keyword_layer, acv.a_sqlmode,
                        acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                        OR
                        a01_eqkey (_kw_keyword_debug, acv.a_sqlmode,
                        acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                    THEN
                        BEGIN
                        (* LAYER optional *)
                        IF  a01_eqkey (_kw_keyword_layer, acv.a_sqlmode,
                            acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                        THEN
                            BEGIN
                            (* DIAGNOSE SWITCH LAYER <string> [...] *)
                            acv.a_ap_tree^[ _last_n ].n_length := cak30_x_switch_trace;
                            a01_next_symbol (acv);
                            a03_astring_literal (acv,
                                  acv.a_ap_tree^[ _last_n ].n_sa_level ,
                                  acv.a_ap_tree^[ _last_n ].n_sa_level );
                            _is_first := false
                            END;
                        (*ENDIF*) 
                        ;
                        (* DEBUG optional *)
                        IF  a01_eqkey (_kw_keyword_debug, acv.a_sqlmode,
                            acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                        THEN
                            BEGIN
                            (* DIAGNOSE SWITCH [LAYER <string>] DEBUG <string> [...] *)
                            IF  NOT _is_first
                            THEN
                                BEGIN
                                a01_call_put (acv, a37, cak_x_switch,
                                      acv.a_ap_tree^[ _last_n ].n_lo_level );
                                _last_n := acv.a_ap_tree^[ _last_n ].n_lo_level
                                END;
                            (*ENDIF*) 
                            acv.a_ap_tree^[ _last_n ].n_length := cak30_x_switch_debug;
                            a01_next_symbol (acv);
                            a03_astring_literal (acv,
                                  acv.a_ap_tree^[ _last_n ].n_sa_level ,
                                  acv.a_ap_tree^[ _last_n ].n_sa_level );
                            _is_first := false
                            END;
                        (*ENDIF*) 
                        ;
                        _kw_keyword := 'LIMIT             ';
                        IF  a01_eqkey (_kw_keyword, acv.a_sqlmode,
                            acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                        THEN
                            (* DIAGNOSE SWITCH ... [LIMIT ... ] *)
                            BEGIN
                            a01_next_symbol (acv);
                            IF  a01mandatory_keyword (acv, cak_i_start)
                            THEN
                                BEGIN
                                (* DIAGNOSE SWITCH ...             *)
                                (*    [LIMIT START <string> [...]] *)
                                a01_call_put (acv, a37, cak_x_switch,
                                      acv.a_ap_tree^[ _last_n ].n_lo_level );
                                _last_n := acv.a_ap_tree^[ _last_n ].n_lo_level;
                                acv.a_ap_tree^[ _last_n ].n_length :=
                                      cak30_x_switchlimit_start;
                                a03_astring_literal (acv,
                                      acv.a_ap_tree^[ _last_n ].n_sa_level ,
                                      acv.a_ap_tree^[ _last_n ].n_sa_level);
                                (* COUNT optional *)
                                _kw_keyword := 'COUNT             ';
                                IF  a01_eqkey (_kw_keyword, acv.a_sqlmode,
                                    acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                                THEN
                                    (* DIAGNOSE SWITCH ...                                *)
                                    (*    [LIMIT START <string> [COUNT <unsigned>] [...]] *)
                                    BEGIN
                                    a01_call_put (acv, a37, cak_x_switch,
                                          acv.a_ap_tree^[ _last_n ].n_lo_level );
                                    _last_n := acv.a_ap_tree^[ _last_n ].n_lo_level;
                                    acv.a_ap_tree^[ _last_n ].n_length :=
                                          cak30_x_switchlimit_count;
                                    a01_next_symbol (acv);
                                    a03_aunsigned_integer (acv,
                                          acv.a_ap_tree^[ _last_n ].n_sa_level ,
                                          acv.a_ap_tree^[ _last_n ].n_sa_level);
                                    END;
                                (*ENDIF*) 
                                a01_get_keyword (acv, _kw_index, _res_kw);
                                (* STOP optional *)
                                IF  _kw_index = cak_i_stop
                                THEN
                                    (* DIAGNOSE SWITCH ...                                          *)
                                    (*    [LIMIT START <string> [COUNT <unsigned>] [STOP <string>]] *)
                                    BEGIN
                                    a01_call_put (acv, a37, cak_x_switch,
                                          acv.a_ap_tree^[ _last_n ].n_lo_level );
                                    _last_n := acv.a_ap_tree^[ _last_n ].n_lo_level;
                                    acv.a_ap_tree^[ _last_n ].n_length :=
                                          cak30_x_switchlimit_stop;
                                    a01_next_symbol (acv);
                                    a03_astring_literal (acv,
                                          acv.a_ap_tree^[ _last_n ].n_sa_level ,
                                          acv.a_ap_tree^[ _last_n ].n_sa_level);
                                    END
                                ELSE
                                    IF  acv.a_scv.sc_symb <> s_eof
                                    THEN
                                        a07_error (acv, e_missing_keyword, put_node, _last_n);
                                    (*ENDIF*) 
                                (*ENDIF*) 
                                END;
                            (*ENDIF*) 
                            END
                        ELSE
                            IF  acv.a_scv.sc_symb <> s_eof
                            THEN
                                a07_error (acv, e_missing_keyword, put_node, _last_n);
                            (*ENDIF*) 
                        (*ENDIF*) 
                        END
                    ELSE
                        a07_error (acv, e_missing_keyword, put_node, _last_n);
                    (*ENDIF*) 
                    END;
                (*ENDIF*) 
                END;
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        END;
    END;
(*ENDCASE*) 
a01_is_end_symbol (acv)
END;
 
&endif
(*------------------------------*) 
 
PROCEDURE
      ak351diag_vtrace_syntax (
            VAR acv      :tak_all_command_glob;
            VAR put_node : tsp00_Int2 );
 
VAR
      _exit_loop  : boolean;
      _kw_index   : integer;
      _obj_kw_idx : integer;
      _h_pos      : integer;
      _last_node  : tsp00_Int2;
      _new_node   : tsp00_Int2;
      _selected   : boolean;
      _oms_node   : tsp00_Int2;
      _oms_last   : tsp00_Int2;
      _res_kw     : boolean;
 
BEGIN
WITH acv, a_scv DO
    BEGIN
    _selected  := false;
    _oms_node  := 0;
    _new_node  := put_node;
    REPEAT
        _last_node := _new_node;
        a01_next_symbol (acv);
        a01_get_keyword (acv, _kw_index, _res_kw);
        CASE _kw_index OF
            (* PTS 1111576 E.Z. *)
            cak_i_analyze,
            cak_i_default,  cak_i_delete,
            cak_i_index,    cak_i_insert,
            cak_i_lock,     cak_i_long,
            cak_i_optimize, cak_i_order,
            cak_i_pages,
            cak_i_select,   cak_i_session,
            cak_i_table,    cak_i_time,
            cak_i_update,
            cak_i_object :
                BEGIN
                IF  _kw_index = cak_i_order
                THEN
                    BEGIN
                    _h_pos := sc_newpos;
                    a01_next_symbol (acv);
                    IF  a01_eqkey (a01kw[ cak_i_standard], a_sqlmode,
                        a_cmd_part^.sp1p_buf, a_scv)
                    THEN
                        _kw_index := cak_i_standard
                    ELSE
                        sc_newpos := _h_pos;
                    (*ENDIF*) 
                    END;
                (*ENDIF*) 
                IF  _kw_index = cak_i_object
                THEN
                    BEGIN
                    _h_pos := sc_newpos;
                    a01_next_symbol (acv);
                    IF  a01_eqkey (a01kw [cak_i_get], a_sqlmode,
                        a_cmd_part^.sp1p_buf, a_scv)
                    THEN
                        _kw_index := cak_i_get (* OsmGet *)
                    ELSE
                        IF  a01_eqkey (a01kw [cak_i_add], a_sqlmode,
                            a_cmd_part^.sp1p_buf, a_scv)
                        THEN
                            _kw_index := cak_i_add (* OsmNew *)
                        ELSE
                            IF  a01_eqkey (a01kw [cak_i_alter], a_sqlmode,
                                a_cmd_part^.sp1p_buf, a_scv)
                            THEN
                                _kw_index := cak_i_alter (* OsmUpd *)
                            ELSE
                                IF  a01_eqkey (a01kw [cak_i_freepage], a_sqlmode,
                                    a_cmd_part^.sp1p_buf, a_scv)
                                THEN
                                    _kw_index := cak_i_freepage (* OsmFree *)
                                ELSE
                                    BEGIN
                                    _exit_loop := false;
                                    REPEAT
                                        a01_get_keyword (acv, _obj_kw_idx, _res_kw);
                                        IF  _obj_kw_idx = 0
                                        THEN
                                            BEGIN
                                            IF  _oms_node = 0
                                            THEN
                                                BEGIN
                                                a01_put_node (acv, _oms_node);
                                                _oms_last := _oms_node
                                                END
                                            ELSE
                                                BEGIN
                                                a01_put_node (acv, a_ap_tree^[_oms_last].n_sa_level);
                                                _oms_last := a_ap_tree^[_oms_last].n_sa_level
                                                END;
                                            (*ENDIF*) 
                                            _h_pos := sc_newpos;
                                            a01_next_symbol(acv);
                                            END
                                        ELSE
                                            _exit_loop := true;
                                        (*ENDIF*) 
                                    UNTIL
                                        _exit_loop;
                                    (*ENDREPEAT*) 
                                    sc_newpos := _h_pos;
                                    END;
                                (*ENDIF*) 
                            (*ENDIF*) 
                        (*ENDIF*) 
                    (*ENDIF*) 
                    END;
                (*ENDIF*) 
                a01_call_put (acv, a37, _kw_index, _new_node);
                a_ap_tree^[_new_node].n_lo_level    := _oms_node;
                a_ap_tree^[ _last_node ].n_sa_level:= _new_node;
                (* PTS 1111576 E.Z. *)
                IF  _kw_index = cak_i_session
                THEN
                    BEGIN
                    a01_next_symbol (acv);
                    IF  (sc_symb = s_byte_string) OR
                        (sc_symb = s_asterisk)    OR
                        (sc_symb = s_equal)
                    THEN
                        BEGIN
                        a01_put_node (acv, _last_node);
                        a_ap_tree^[_new_node].n_sa_level :=
                              _last_node;
                        a01_next_symbol (acv); (* should be ON *)
                        END
                    ELSE
                        a07_error (acv, e_missing_keyword,
                              put_node, _last_node);
                    (*ENDIF*) 
                    a_ap_tree^[a_ap_tree^[ 0 ].n_lo_level].n_subproc := cak_x_vtrace_on;
                    _kw_index           := cak_i_on
                    END;
                (*ENDIF*) 
                _selected := true;
                END;
            cak_i_clear, cak_i_flush :
                BEGIN
                a01_call_put (acv, a37, _kw_index, _new_node);
                a_ap_tree^[ _last_node ].n_sa_level:= _new_node;
                a01_next_symbol (acv);
                a_ap_tree^[ a_ap_tree^[ 0 ].n_lo_level ].n_subproc :=
                      cak_x_vtrace_on;
                _kw_index := cak_i_on;
                END;
            cak_i_stop :
                BEGIN
                a01_call_put (acv, a37, _kw_index, _new_node);
                a_ap_tree^[ _last_node ].n_sa_level:= _new_node;
                a01_next_symbol (acv);
                IF  a01mandatory_keyword (acv, cak_i_on)
                THEN
                    IF  a01mandatory_keyword (acv, cak_i_error)
                    THEN
                        BEGIN
                        a03_ainteger (acv,  a_ap_tree^[ _new_node ].n_lo_level,
                              _new_node);
                        a_ap_tree^[ a_ap_tree^[ 0 ].n_lo_level ].n_subproc :=
                              cak_x_vtrace_on;
                        _kw_index := cak_i_on;
                        END
                    (*ENDIF*) 
                (*ENDIF*) 
                END;
            (* PTS 1110976 E.Z. *)
            cak_i_check :
                BEGIN
                _h_pos := sc_newpos;
                a01_next_symbol (acv);
                IF  sc_symb = s_string_literal
                THEN
                    BEGIN
                    _h_pos := sc_newpos;
                    a01_call_put (acv, a37, _kw_index, _new_node);
                    a03_astring_literal (acv,
                          a_ap_tree^[ _new_node ].n_lo_level, _oms_node);
                    a_ap_tree^[ _last_node ].n_sa_level:= _new_node;
                    sc_newpos := _h_pos;
                    END
                ELSE
                    BEGIN
                    _kw_index := cak_i_constraint;
                    a01_call_put (acv, a37, _kw_index, _new_node);
                    a_ap_tree^[ _last_node ].n_sa_level:= _new_node;
                    sc_newpos := _h_pos;
                    END;
                (*ENDIF*) 
                _selected := true;
                END;
            cak_i_topic :
                BEGIN
                a01_call_put (acv, a37, _kw_index, _new_node);
                a01_next_symbol (acv);
                _h_pos := sc_newpos;
                a03_astring_literal (acv,
                      a_ap_tree^[ _new_node ].n_lo_level, _oms_node);
                a_ap_tree^[ _last_node ].n_sa_level:= _new_node;
                sc_newpos := _h_pos;
                _selected := true;
                END;
            OTHERWISE
                IF  NOT (_kw_index in [ cak_i_on, cak_i_off ]) OR
                    NOT (_selected)
                THEN
                    a07_error (acv, e_missing_keyword,
                          put_node, _last_node)
                ELSE
                    IF  _kw_index = cak_i_on
                    THEN
                        a_ap_tree^[ a_ap_tree^[ 0 ].n_lo_level ].n_subproc :=
                              cak_x_vtrace_on
                    ELSE
                        a_ap_tree^[ a_ap_tree^[ 0 ].n_lo_level ].n_subproc :=
                              cak_x_vtrace_off;
                    (*ENDIF*) 
                (*ENDIF*) 
            END;
        (*ENDCASE*) 
    UNTIL
        (_kw_index in [ cak_i_on, cak_i_off ]) OR
        (a_returncode <> 0);
    (*ENDREPEAT*) 
    IF  (a_returncode = 0)
    THEN
        a01_next_symbol (acv);
    (*ENDIF*) 
    END;
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351drop_mapchar_set (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      res_kw    : boolean;
      ikw       : integer;
      curr_node : tsp00_Int2;
 
BEGIN
IF  ak351state_check (acv,
    NOT c_admin_ok, NOT c_redo_mode_ok, c_online_ok,
    at_db_manager, c_needs_superuser,
    c_needs_internal_mode, NOT c_needs_oracle_mode)
THEN
    WITH acv, a_scv DO
        BEGIN
        a01_call_put (acv, a37, cak_x_drop_mapset, curr_node);
        put_node := curr_node;
        a01_next_symbol (acv);
        IF  NOT a01_eqkey (a01kw[ cak_i_set], a_sqlmode,
            a_cmd_part^.sp1p_buf, a_scv)
        THEN
            a07_error (acv, e_invalid_end_of_command,
                  curr_node, curr_node)
        ELSE (* drop mapchar set ... *)
            BEGIN
            a01_next_symbol (acv);
            IF  sc_symb <> s_identifier
            THEN
                a07_error (acv, e_invalid_tablename, curr_node, curr_node)
            ELSE
                BEGIN
                a01_get_keyword (acv, ikw, res_kw);
                IF  res_kw
                THEN
                    a07_error (acv, e_reserved_identifier,
                          curr_node, curr_node)
                ELSE (* drop mapchar set <set name> *)
                    a02_put_identifier (acv,
                          a_ap_tree^[ put_node ].n_lo_level, curr_node);
                (*ENDIF*) 
                END;
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        END;
    (*ENDWITH*) 
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351dump_kind (
            VAR acv : tak_all_command_glob;
            curr_n : tsp00_Int2);
 
VAR
      dump_kind : tak_keyword;
 
BEGIN
WITH acv, a_scv DO
    BEGIN
    dump_kind := 'CONFIGURATION     ';
    IF  a01_eqkey (dump_kind, a_sqlmode,
        a_cmd_part^.sp1p_buf, a_scv)
    THEN
        a_ap_tree^[curr_n].n_subproc := cak_i_config;
    (* *)
    (*ENDIF*) 
    dump_kind := 'CONVERTER         ';
    IF  a01_eqkey (dump_kind, a_sqlmode,
        a_cmd_part^.sp1p_buf, a_scv)
    THEN
        a_ap_tree^[curr_n].n_subproc := cak_i_psm;
    (* *)
    (*ENDIF*) 
    dump_kind := 'CONVERTERCACHE    ';
    IF  a01_eqkey (dump_kind, a_sqlmode,
        a_cmd_part^.sp1p_buf, a_scv)
    THEN
        a_ap_tree^[curr_n].n_subproc := cak_i_buffer;
    (* *)
    (*ENDIF*) 
    dump_kind := 'DATACACHE         ';
    IF  a01_eqkey (dump_kind, a_sqlmode,
        a_cmd_part^.sp1p_buf, a_scv)
    THEN
        a_ap_tree^[curr_n].n_subproc := cak_i_data;
    (* *)
    (*ENDIF*) 
    dump_kind := 'PAGERWRITER       ';
    IF  a01_eqkey (dump_kind, a_sqlmode,
        a_cmd_part^.sp1p_buf, a_scv)
    THEN
        a_ap_tree^[curr_n].n_subproc := cak_i_write;
    (* *)
    (*ENDIF*) 
    dump_kind := 'FBM               ';
    IF  a01_eqkey (dump_kind, a_sqlmode,
        a_cmd_part^.sp1p_buf, a_scv)
    THEN
        a_ap_tree^[curr_n].n_subproc := cak_i_freepage;
    (* *)
    (*ENDIF*) 
    dump_kind := 'HEADMASTER        ';
    IF  a01_eqkey (dump_kind, a_sqlmode,
        a_cmd_part^.sp1p_buf, a_scv)
    THEN
        a_ap_tree^[curr_n].n_subproc := cak_i_autosave;
    (* *)
    (*ENDIF*) 
    dump_kind := 'KBLOCKLIST        ';
    IF  a01_eqkey (dump_kind, a_sqlmode,
        a_cmd_part^.sp1p_buf, a_scv)
    THEN
        a_ap_tree^[curr_n].n_subproc := cak_i_lock;
    (* *)
    (*ENDIF*) 
    dump_kind := 'SERVER            ';
    IF  a01_eqkey (dump_kind, a_sqlmode,
        a_cmd_part^.sp1p_buf, a_scv)
    THEN
        a_ap_tree^[curr_n].n_subproc := cak_i_serverdb;
    (* *)
    (*ENDIF*) 
    dump_kind := 'RESTARTRECORD     ';
    IF  a01_eqkey (dump_kind, a_sqlmode,
        a_cmd_part^.sp1p_buf, a_scv)
    THEN
        a_ap_tree^[curr_n].n_subproc := cak_i_restart;
    (* *)
    (*ENDIF*) 
    dump_kind := 'RTE               ';
    IF  a01_eqkey (dump_kind, a_sqlmode,
        a_cmd_part^.sp1p_buf, a_scv)
    THEN
        a_ap_tree^[curr_n].n_subproc := cak_i_version;
    (* *)
    (*ENDIF*) 
    dump_kind := 'TRANSFORMATION    ';
    IF  a01_eqkey (dump_kind, a_sqlmode,
        a_cmd_part^.sp1p_buf, a_scv)
    THEN
        a_ap_tree^[curr_n].n_subproc := cak_i_translate;
    (* *)
    (*ENDIF*) 
    dump_kind := 'GARBAGECOLLECTION ';
    IF  a01_eqkey (dump_kind, a_sqlmode,
        a_cmd_part^.sp1p_buf, a_scv)
    THEN
        a_ap_tree^[curr_n].n_subproc := cak_i_release;
    (* *)
    (*ENDIF*) 
    dump_kind := 'OBJFDIR           ';
    IF  a01_eqkey (dump_kind, a_sqlmode,
        a_cmd_part^.sp1p_buf, a_scv)
    THEN
        a_ap_tree^[curr_n].n_subproc := cak_i_object;
    (* *)
    (*ENDIF*) 
    dump_kind := 'FILEDIRECTORY     ';
    IF  a01_eqkey (dump_kind, a_sqlmode,
        a_cmd_part^.sp1p_buf, a_scv)
    THEN
        a_ap_tree^[curr_n].n_subproc := cak_i_pages;
    (* *)
    (*ENDIF*) 
    IF   a_ap_tree^[curr_n].n_subproc = 0
    THEN
        a07_error (acv, e_missing_keyword, curr_n, curr_n);
    (*ENDIF*) 
    END
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351event (
            VAR acv      : tak_all_command_glob;
            subproc      : tsp00_Int2;
            VAR put_node : tsp00_Int2);
 
VAR
      curr_n     : tsp00_Int2;
      last_n     : tsp00_Int2;
      kw_index   : integer;
      exp_values : integer;
      value_no   : integer;
      res_kw     : boolean;
 
BEGIN
(* PTS 1104572 E.Z. *)
WITH acv, a_scv DO
    BEGIN
    exp_values := 0;
    a01_get_keyword (acv, kw_index, res_kw);
    CASE kw_index OF
        cak_i_backup_pages,
        cak_i_db_above_limit,
        cak_i_db_below_limit,
        cak_i_log_above_limit (* PTS 1124876 UH 2003-10-23 *)
        :
            BEGIN
            a01_call_put (acv, a37, kw_index, put_node);
            exp_values := 1;
            END;
        OTHERWISE
            a07_error (acv, e_missing_keyword, put_node, put_node)
        END;
    (*ENDCASE*) 
    curr_n := put_node;
    a01_next_symbol (acv);
    IF  (a_returncode = 0) AND
        (subproc = cak_x_set_event)
    THEN
        BEGIN
        a01_get_keyword (acv, kw_index, res_kw);
        CASE kw_index OF
            cak_i_high, cak_i_low, cak_i_medium :
                BEGIN
                a01_call_put (acv, a37, kw_index,
                      a_ap_tree^[ put_node ].n_sa_level);
                a01_next_symbol (acv);
                curr_n := a_ap_tree^[ put_node ].n_sa_level;
                END;
            OTHERWISE
                a07_error (acv, e_missing_keyword, put_node, put_node)
            END;
        (*ENDCASE*) 
        END;
    (*ENDIF*) 
    IF  a_returncode = 0
    THEN
        BEGIN
        IF  sc_symb <> s_eof
        THEN
            BEGIN
            value_no := 0;
            WHILE ((sc_symb <> s_eof)      AND
                  ( value_no < exp_values) AND
                  ( a_returncode = 0)) DO
                BEGIN
                a03_ainteger (acv,
                      a_ap_tree^[ curr_n ].n_sa_level, last_n);
                value_no := succ(value_no);
                curr_n := last_n;
                END
            (*ENDWHILE*) 
            END
        (*ENDIF*) 
        END;
    (*ENDIF*) 
    a01_is_end_symbol (acv)
    END
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351file_type (
            VAR acv       : tak_all_command_glob;
            VAR put_node  : tsp00_Int2;
            VAR last_node : tsp00_Int2);
 
VAR
      res_kw : boolean;
      ikw    : integer;
 
BEGIN
a01_get_keyword (acv, ikw, res_kw);
IF  (ikw = cak_i_file    ) OR
    (ikw = cak_i_norewind) OR
    (ikw = cak_i_pipe    ) OR
    (ikw = cak_i_raw     ) OR
    (ikw = cak_i_tape     ) OR
    (ikw = cak_i_unknown )
THEN
    BEGIN (* filetype *)
    a01_call_put (acv, a37, ikw, put_node);
    last_node := put_node;
    a01_next_symbol (acv)
    END
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351get_map_codes (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2;
            mapcharbytes : integer);
 
VAR
      last      : boolean;
      cnt       : integer;
      curr_node : tsp00_Int2;
      first_val : tsp00_Int2;
      last_node : tsp00_Int2;
 
BEGIN
WITH acv, a_scv DO
    BEGIN
    a01_next_symbol (acv);
    cnt       := 0;
    last      := false;
    first_val := put_node;
    WHILE (a_returncode = 0)           AND
          (cnt < cgg04_mapset_entries) AND
          NOT last DO
        BEGIN
        (* first value *)
        (* PTS 1120720 E.Z. *)
        IF  (sc_symb = s_byte_string) AND
            (sc_sylength = 2 * mapcharbytes * a01char_size)
        THEN
            BEGIN
            a01_put_node (acv, curr_node);
            a_ap_tree^[ first_val ].n_sa_level :=
                  curr_node;
            first_val := curr_node;
            END
        ELSE
            a07_b_put_error (acv, e_incompatible_datatypes, sc_sypos);
        (*ENDIF*) 
        a01_next_symbol (acv);
        (* ... to ... *)
        IF  NOT a01_eqkey (a01kw[ cak_i_to], a_sqlmode,
            a_cmd_part^.sp1p_buf, a_scv)
        THEN
            a07_error (acv, e_missing_keyword, curr_node, curr_node)
        ELSE
            BEGIN
            a01_next_symbol (acv);
            (* second value *)
            IF  (sc_symb = s_string_literal) AND
                ((sc_sylength = 1 * a01char_size) OR (sc_sylength = 2 * a01char_size))
            THEN
                BEGIN
                a01_put_node (acv, curr_node);
                a_ap_tree^[ first_val ].
                      n_lo_level := curr_node;
                last_node  := curr_node;
                cnt        := succ(cnt);
                END
            ELSE
                IF  (sc_symb = s_byte_string) AND
                    ((sc_sylength = 2 * mapcharbytes * a01char_size) OR
                    ( sc_sylength = 4 * mapcharbytes * a01char_size))
                THEN
                    BEGIN
                    a01_put_node (acv, curr_node);
                    a_ap_tree^[ first_val ].n_lo_level :=
                          curr_node;
                    last_node := curr_node;
                    cnt       := succ(cnt);
                    END
                ELSE
                    a07_b_put_error (acv, e_incompatible_datatypes, sc_sypos);
                (*ENDIF*) 
            (*ENDIF*) 
            a01_next_symbol (acv);
            (* comma or eof *)
            IF  sc_symb = s_comma
            THEN
                a01_next_symbol (acv)
            ELSE
                last := true;
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        END;
    (*ENDWHILE*) 
    IF  NOT last
    THEN
        a07_b_put_error (acv, e_too_many_values, sc_sypos);
    (*ENDIF*) 
    END;
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351index  (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      last_n : tsp00_Int2;
 
BEGIN
WITH acv, a_scv DO
    IF  a_returncode = 0
    THEN
        BEGIN
        a01_next_symbol (acv);
        a_ap_tree^ [ a_ap_tree^[ 0 ].n_lo_level ].n_length := ord(diagInvRoot_egg00);
        a03_aunsigned_integer (acv, put_node, last_n);
        a01_is_end_symbol (acv)
        END
    (*ENDIF*) 
(*ENDWITH*) 
END;
 
(* PTS 1120611 E.Z. *)
(*------------------------------*) 
 
PROCEDURE
      ak351instance_create (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      curr_n   : tsp00_Int2;
      kw_index : integer;
      kw_ind1  : integer;
      res_kw   : boolean;
      last_n   : tsp00_Int2;
 
BEGIN
a01_call_put (acv, a36, cak_x_init_config, curr_n);
put_node := curr_n;
a01_next_symbol (acv);
a01_get_keyword (acv, kw_index, res_kw);
CASE kw_index OF
    cak_i_sysdba :
        BEGIN
        a01_call_put (acv, a36, cak_x_activate, curr_n);
        acv.a_ap_tree^[put_node].n_sa_level := curr_n;
        a01_next_symbol (acv);
        a01_get_keyword (acv, kw_index, res_kw);
        IF  res_kw OR (kw_index = cak_i_temp)
        THEN
            a07_error (acv, e_reserved_identifier,
                  put_node, last_n);
        (*ENDIF*) 
        IF  acv.a_returncode = 0
        THEN
            BEGIN
            a02_aauthid (acv,
                  acv.a_ap_tree^[ curr_n ].n_sa_level, curr_n);
            IF  a01_eqkey (a01kw[ cak_i_password], acv.a_sqlmode,
                acv.a_cmd_part^.sp1p_buf, acv.a_scv)
            THEN
                BEGIN
                a01_get_password (acv,
                      acv.a_ap_tree^[ curr_n ].n_sa_level, curr_n);
                a01_next_symbol (acv);
                END;
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        END;
    cak_i_with :
        BEGIN
        a01_next_symbol (acv);
        IF  a01mandatory_keyword (acv, cak_i_restore)
        THEN
            BEGIN
            a01_get_keyword (acv, kw_ind1, res_kw);
            ak351admin_restore (acv, acv.a_ap_tree^[put_node].n_sa_level, kw_ind1);
            END;
        (*ENDIF*) 
        END;
    OTHERWISE
        a07_error (acv, e_missing_keyword, put_node, curr_n);
    END;
(*ENDCASE*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351media_name (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2;
            VAR last_n   : tsp00_Int2);
 
VAR
      dummy_n : tsp00_Int2;
 
BEGIN
IF  acv.a_scv.sc_symb <> s_eof
THEN
    IF  a01_eqkey (a01kw[cak_i_medianame], acv.a_sqlmode,
        acv.a_cmd_part^.sp1p_buf, acv.a_scv)
    THEN
        BEGIN
        a01_call_put (acv, a37, cak_i_medianame, put_node);
        last_n := put_node;
        a01_next_symbol (acv);
        a03_astring_literal (acv,
              acv.a_ap_tree^[put_node].n_lo_level, dummy_n)
        END;
    (*ENDIF*) 
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351label_name (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2;
            VAR last_n   : tsp00_Int2);
 
VAR
      dummy_n : tsp00_Int2;
 
BEGIN
IF  acv.a_scv.sc_symb <> s_eof
THEN
    IF  a01_eqkey (a01kw[cak_i_label], acv.a_sqlmode,
        acv.a_cmd_part^.sp1p_buf, acv.a_scv)
    THEN
        BEGIN
        a01_call_put (acv, a37, cak_i_label, put_node);
        last_n := put_node;
        a01_next_symbol (acv);
        a03_astring_literal (acv,
              acv.a_ap_tree^[put_node].n_lo_level, dummy_n)
        END;
    (*ENDIF*) 
(*ENDIF*) 
END;
 
(*------------------------------*) 
 
FUNCTION
      ak351SetCountDown(VAR acv : tak_all_command_glob) : boolean;
 
VAR
      put_node  : tsp00_Int2;
      last_node : tsp00_Int2;
 
BEGIN
a01_call_put (acv, a30, 0, last_node);
a01_next_symbol (acv);
a03_ainteger (acv, put_node, last_node);
a05int4_get (acv, acv.a_ap_tree^[last_node].n_pos,
      acv.a_ap_tree^[last_node].n_length, acv.a_allocatorInfo.ai_badAllocCountDown);
IF  acv.a_allocatorInfo.ai_badAllocCountDown <= 0
THEN
    acv.a_allocatorInfo.ai_badAllocCountDown := -1;
(*ENDIF*) 
acv.a_ex_kind   := only_syntax;
ak351SetCountDown := true;
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351set_parameter_syntax (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2 );
 
VAR
      _last_n : tsp00_Int2;
 
BEGIN
WITH acv, a_scv DO
    IF  a_returncode = 0
    THEN
        BEGIN (* h.b. PTS 1105143 *)
        a01_next_symbol (acv);
        ak351set_parameter_clause (acv,
              a_ap_tree^[ put_node ].n_lo_level, _last_n);
        (* h.b. 03.09.1999  for future release, semantik exists already
              WHILE sc_symb = s_comma DO
              BEGIN
              a01_next_symbol (acv);
              ak351set_parameter_clause (acv, a_ap_tree^[ _last_n ].n_sa_level,
              _last_n)
              END;
              *)
        a01_is_end_symbol (acv);
        END;
    (*ENDIF*) 
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351set_parameter_clause (
            VAR acv       : tak_all_command_glob;
            VAR put_node  : tsp00_Int2;
            VAR last_node : tsp00_Int2);
 
VAR
      _last_n : tsp00_Int2;
 
BEGIN
WITH acv, a_scv DO
    IF  a_returncode = 0
    THEN
        BEGIN
        a02_put_identifier (acv, put_node, last_node);
        a01_force_symbol (acv, s_equal, put_node, last_node);
        IF  a_returncode = 0
        THEN
            a03_avalue_spec (acv, NOT c_null_allowed, NOT c_stamp_allowed,
                  NOT c_default_allowed, NOT c_sysdba_allowed,
                  a_ap_tree^[ put_node ].n_lo_level, _last_n);
        (*ENDIF*) 
        IF  a_returncode = 0
        THEN
            IF  NOT (a_ap_tree^[ _last_n ].n_symb in [
                s_string_literal, s_unsigned_integer,
                s_fixed_point_literal, s_floating_point_literal])
            THEN
                a07_error (acv, e_missing_value_spec, put_node, _last_n);
            (*ENDIF*) 
        (*ENDIF*) 
        END
    (*ENDIF*) 
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351table  (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2);
 
VAR
      last_n : tsp00_Int2;
 
BEGIN
WITH acv, a_scv DO
    IF  a_returncode = 0
    THEN
        BEGIN
        a01_next_symbol (acv);
        a_ap_tree^ [ a_ap_tree^[ 0 ].n_lo_level ].n_length := ord(diagFile_egg00);
        a03_aunsigned_integer (acv, put_node, last_n);
        a01_is_end_symbol (acv)
        END;
    (*ENDIF*) 
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      ak351diag_optimize_syntax (
            VAR acv      : tak_all_command_glob;
            VAR put_node : tsp00_Int2;
            root_node    : tsp00_Int2);
 
VAR
      _sn_word                 : tak_keyword;
      _last_node               : tsp00_Int2;
      _maxServers              : tsp00_Int2;
      _int4Val                 : tsp00_Int4;
      _kw_index                : integer;
      _m_join_hash_min_ratio   : tsp00_Int4;
      _m_join_parall_minsize   : tsp00_Int4;
      _m_aggr_optim            : boolean;
      _m_one_join_phase        : boolean;
      _m_outer_join_ordered    : boolean;
      _m_diag_operator_join_on : tgg07_opjoin_usage;
      _m_diag_minmax_optim     : boolean;
      _m_use_join_hashtable    : boolean;
      _m_join_forced_opjoin    : boolean;
      _res_kw                  : boolean;
      _forced_opjoin           : boolean;
      _sort_opjoin             : boolean;
      _costfunc_opjoin         : boolean;
      _improved_opjoin         : boolean;
      _m_reverse_fetch         : boolean;
      _m_join_operator_sort    : boolean;
      _m_join_operator_costfunc: boolean;
      _m_optim_inv_only        : boolean;
      _m_optim_first_rows      : boolean;
 
BEGIN
_m_aggr_optim            := a01aggr_optim;
_m_join_hash_min_ratio   := a01join_hash_min_ratio;
_m_one_join_phase        := a01one_join_phase;
_m_outer_join_ordered    := a01outer_join_ordered;
_m_diag_operator_join_on := g01operator_join;
_m_use_join_hashtable    := a01use_join_hashtable;
_m_join_parall_minsize   := a01join_parall_minsize;
_m_diag_minmax_optim     := a01diag_minmax_optim;
_m_join_forced_opjoin    := a01join_forced_opjoin;
_m_reverse_fetch         := a01diag_reverse_fetch;
_m_join_operator_costfunc:= gg01_operator_join_costfunc;
_m_join_operator_sort    := gg01_operator_join_sort;
_m_optim_inv_only        := gg01_optim_inv_only;
_m_optim_first_rows      := gg01_diag_frows_optim;
_last_node               := put_node;
a01_next_symbol (acv);
a01_get_keyword (acv, _kw_index, _res_kw);
CASE _kw_index OF
    cak_i_first :
        BEGIN
        (* disable semantic *)
        acv.a_ap_tree^[ root_node ].n_proc := a30;
        a01_next_symbol (acv);
        IF  a01mandatory_keyword (acv, cak_i_rows)
        THEN
            BEGIN
            a01_get_keyword (acv, _kw_index, _res_kw);
            IF  (_kw_index = cak_i_on)
            THEN
                gg01_diag_frows_optim := true
            ELSE
                BEGIN
                IF  (_kw_index = cak_i_off)
                THEN
                    gg01_diag_frows_optim := false
                ELSE
                    a07_error (acv, e_wanted_keyword, put_node, put_node);
                (*ENDIF*) 
                END;
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        END;
    cak_i_min :
        BEGIN
        (* disable semantic *)
        acv.a_ap_tree^[ root_node ].n_proc := a30;
        a01_next_symbol (acv);
        IF  a01mandatory_keyword (acv, cak_i_max)
        THEN
            BEGIN
            a01_get_keyword (acv, _kw_index, _res_kw);
            IF  (_kw_index = cak_i_on)
            THEN
                a01diag_minmax_optim := true
            ELSE
                BEGIN
                IF  (_kw_index = cak_i_off)
                THEN
                    a01diag_minmax_optim := false
                ELSE
                    a07_error (acv, e_wanted_keyword, put_node, put_node);
                (*ENDIF*) 
                END;
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        END;
    cak_i_fetch:
        BEGIN
        (* disable semantic *)
        acv.a_ap_tree^[ root_node ].n_proc := a30;
        a01_next_symbol (acv);
        IF  a01mandatory_keyword (acv, cak_i_order)
        THEN
            BEGIN
            a01_get_keyword (acv, _kw_index, _res_kw);
            IF  (_kw_index = cak_i_on)
            THEN
                a01diag_reverse_fetch := true
            ELSE
                BEGIN
                IF  (_kw_index = cak_i_off)
                THEN
                    a01diag_reverse_fetch := false
                ELSE
                    a07_error (acv, e_wanted_keyword, put_node, put_node);
                (*ENDIF*) 
                END;
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        END;
    cak_i_join :
        BEGIN
        (* disable semantic *)
        acv.a_ap_tree^[ root_node ].n_proc := a30;
        a01_next_symbol(acv);
        IF  a01_eqkey (a01kw[ cak_i_outer], acv.a_sqlmode,
            acv.a_cmd_part^.sp1p_buf, acv.a_scv)
        THEN
            BEGIN
            a01_next_symbol(acv);
            IF  a01_eqkey (a01kw[ cak_i_on], acv.a_sqlmode,
                acv.a_cmd_part^.sp1p_buf, acv.a_scv)
            THEN
                a01outer_join_ordered := true
            ELSE
                IF  a01_eqkey (a01kw[ cak_i_off], acv.a_sqlmode,
                    acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                THEN
                    a01outer_join_ordered := false
                ELSE
                    a07_error (acv, e_wanted_keyword, put_node, _last_node);
                (*ENDIF*) 
            (*ENDIF*) 
            END
        ELSE
            BEGIN
            _sn_word := 'ONEPHASE          ';
            IF  a01_eqkey (_sn_word, acv.a_sqlmode,
                acv.a_cmd_part^.sp1p_buf, acv.a_scv)
            THEN
                BEGIN
                a01_next_symbol (acv);
                IF  a01_eqkey (a01kw[ cak_i_on], acv.a_sqlmode,
                    acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                THEN
                    BEGIN
                    a01one_join_phase := true;
                    a01_next_symbol (acv);
                    END
                ELSE
                    IF  a01_eqkey (a01kw[ cak_i_off], acv.a_sqlmode,
                        acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                    THEN
                        BEGIN
                        a01one_join_phase := false;
                        a01_next_symbol (acv);
                        END
                    (*ENDIF*) 
                (*ENDIF*) 
                END
            ELSE
                BEGIN
                _sn_word := 'PARALLEL          ';
                IF  a01_eqkey (_sn_word, acv.a_sqlmode,
                    acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                THEN
                    BEGIN
                    a01_next_symbol (acv);
                    _sn_word := 'MINSIZE           ';
                    IF  a01_eqkey (_sn_word, acv.a_sqlmode,
                        acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                    THEN
                        BEGIN
                        a01_next_symbol (acv);
                        a03_ainteger (acv, put_node, _last_node);
                        WITH acv.a_ap_tree^[ _last_node ] DO
                            a05_int4_unsigned_get (acv, n_pos,
                                  n_length, _int4Val);
                        (*ENDWITH*) 
                        IF  acv.a_returncode = 0
                        THEN
                            a01join_parall_minsize := _int4Val;
                        (*ENDIF*) 
                        END
                    ELSE
                        BEGIN
                        a03_ainteger (acv, put_node, _last_node);
                        WITH acv.a_ap_tree^[ _last_node ] DO
                            a05_unsigned_int2_get (acv, n_pos,
                                  n_length, e_invalid_unsign_integer, _maxServers);
                        (*ENDWITH*) 
                        IF  acv.a_returncode = 0
                        THEN
                            gg01optimize_parallel_server :=
                                  a101_SetMaxParallelServers (_maxServers);
                        (*ENDIF*) 
                        END;
                    (*ENDIF*) 
                    END
                ELSE
                    BEGIN (* PTS 1127791 M.Ki *)
                    _sn_word := 'HASH              ';
                    IF  a01_eqkey (_sn_word, acv.a_sqlmode,
                        acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                    THEN
                        BEGIN
                        a01_next_symbol (acv);
                        IF  a01_eqkey (a01kw[ cak_i_on], acv.a_sqlmode,
                            acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                        THEN
                            BEGIN
                            a01use_join_hashtable := true;
                            a01_next_symbol (acv);
                            END
                        ELSE
                            BEGIN
                            IF  a01_eqkey (a01kw[ cak_i_off], acv.a_sqlmode,
                                acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                            THEN
                                BEGIN
                                a01use_join_hashtable := false;
                                a01_next_symbol (acv);
                                END
                            ELSE
                                BEGIN
                                _sn_word := 'RATIO             ';
                                IF  a01_eqkey (_sn_word, acv.a_sqlmode,
                                    acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                                THEN
                                    BEGIN
                                    a01_next_symbol (acv);
                                    a03_ainteger (acv, put_node, _last_node);
                                    WITH acv.a_ap_tree^[ _last_node ] DO
                                        a05_int4_unsigned_get (acv, n_pos,
                                              n_length, _int4Val);
                                    (*ENDWITH*) 
                                    IF  acv.a_returncode = 0
                                    THEN
                                        a01join_hash_min_ratio := _int4Val;
                                    (*ENDIF*) 
                                    END;
                                (*ENDIF*) 
                                END;
                            (*ENDIF*) 
                            END;
                        (*ENDIF*) 
                        END
                    ELSE
                        a07_error (acv, e_wanted_keyword, put_node, _last_node);
                    (*ENDIF*) 
                    END;
                (*ENDIF*) 
                END;
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        END;
    cak_i_index:
        BEGIN
        (* disable semantic *)
        acv.a_ap_tree^[ root_node ].n_proc := a30;
        a01_next_symbol (acv);
        _sn_word := 'ONLY              ';
        IF  a01_eqkey (_sn_word, acv.a_sqlmode,
            acv.a_cmd_part^.sp1p_buf, acv.a_scv)
        THEN
            BEGIN
            a01_next_symbol (acv);
            IF  a01_eqkey (a01kw[ cak_i_on], acv.a_sqlmode,
                acv.a_cmd_part^.sp1p_buf, acv.a_scv)
            THEN
                BEGIN
                gg01_optim_inv_only := true;
                a01_next_symbol (acv);
                END
            ELSE
                IF  a01_eqkey (a01kw[ cak_i_off], acv.a_sqlmode,
                    acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                THEN
                    BEGIN
                    gg01_optim_inv_only := false;
                    a01_next_symbol (acv);
                    END
                ELSE
                    a07_error (acv, e_missing_keyword, root_node, root_node)
                (*ENDIF*) 
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        END;
    OTHERWISE
        BEGIN
        _sn_word := 'AGGREGATION       ';
        IF  a01_eqkey (_sn_word, acv.a_sqlmode,
            acv.a_cmd_part^.sp1p_buf, acv.a_scv)
        THEN
            BEGIN
            (* disable semantic *)
            acv.a_ap_tree^[ root_node ].n_proc := a30;
            a01_next_symbol (acv);
            IF  a01_eqkey (a01kw[ cak_i_on], acv.a_sqlmode,
                acv.a_cmd_part^.sp1p_buf, acv.a_scv)
            THEN
                BEGIN
                a01aggr_optim := true;
                a01_next_symbol (acv);
                END
            ELSE
                IF  a01_eqkey (a01kw[ cak_i_off], acv.a_sqlmode,
                    acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                THEN
                    BEGIN
                    a01aggr_optim := false;
                    a01_next_symbol (acv);
                    END
                ELSE
                    a07_error (acv, e_missing_keyword, root_node, root_node)
                (*ENDIF*) 
            (*ENDIF*) 
            END
        ELSE
            BEGIN
            _improved_opjoin := false;
            _sn_word := 'IMPROVED          ';
            IF  a01_eqkey (_sn_word, acv.a_sqlmode,
                acv.a_cmd_part^.sp1p_buf, acv.a_scv)
            THEN
                BEGIN
                _improved_opjoin := true;
                a01_next_symbol (acv);
                END;
            (*ENDIF*) 
            ;
            _sn_word := 'OPERATOR          ';
            IF  a01_eqkey (_sn_word, acv.a_sqlmode,
                acv.a_cmd_part^.sp1p_buf, acv.a_scv)
            THEN
                BEGIN
                a01_next_symbol (acv);
                IF  a01mandatory_keyword (acv, cak_i_join)
                THEN
                    BEGIN
                    _forced_opjoin   := false;
                    _sort_opjoin     := false;
                    _costfunc_opjoin := false;
                    _sn_word := 'FORCED            ';
                    IF  a01_eqkey (_sn_word, acv.a_sqlmode,
                        acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                    THEN
                        BEGIN
                        _forced_opjoin := true;
                        a01_next_symbol (acv);
                        END
                    ELSE
                        BEGIN
                        _sn_word := 'SORT              ';
                        IF  ( _improved_opjoin ) AND
                            a01_eqkey (_sn_word, acv.a_sqlmode,
                            acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                        THEN
                            BEGIN
                            _sort_opjoin := true;
                            a01_next_symbol (acv);
                            END
                        ELSE
                            BEGIN
                            _sn_word := 'COSTFUNC          ';
                            IF  ( NOT _improved_opjoin ) AND
                                a01_eqkey (_sn_word, acv.a_sqlmode,
                                acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                            THEN
                                BEGIN
                                _costfunc_opjoin := true;
                                a01_next_symbol (acv);
                                END
                            (*ENDIF*) 
                            END;
                        (*ENDIF*) 
                        END;
                    (*ENDIF*) 
                    ;
                    (* disable semantic *)
                    acv.a_ap_tree^[ root_node ].n_proc := a30;
                    IF  a01_eqkey (a01kw[ cak_i_on], acv.a_sqlmode,
                        acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                    THEN
                        BEGIN
                        IF  ( _sort_opjoin )
                        THEN
                            gg01_operator_join_sort := true
                        ELSE
                            BEGIN
                            IF  ( _costfunc_opjoin )
                            THEN
                                gg01_operator_join_costfunc := true
                            ELSE
                                BEGIN
                                IF  ( _forced_opjoin )
                                THEN
                                    a01join_forced_opjoin := true;
                                (*ENDIF*) 
                                IF  ( _improved_opjoin )
                                THEN
                                    g01operator_join := jopu_op_improved
                                ELSE
                                    g01operator_join := jopu_op_legacy;
                                (*ENDIF*) 
                                END;
                            (*ENDIF*) 
                            END;
                        (*ENDIF*) 
                        a01_next_symbol (acv);
                        END
                    ELSE
                        IF  a01_eqkey (a01kw[ cak_i_off], acv.a_sqlmode,
                            acv.a_cmd_part^.sp1p_buf, acv.a_scv)
                        THEN
                            BEGIN
                            IF  ( _sort_opjoin )
                            THEN
                                gg01_operator_join_sort := false
                            ELSE
                                BEGIN
                                IF  ( _costfunc_opjoin )
                                THEN
                                    gg01_operator_join_costfunc := false
                                ELSE
                                    BEGIN
                                    IF  ( g01operator_join in
                                        [ jopu_op_legacy, jopu_op_improved ] )
                                    THEN
                                        BEGIN
                                        g01operator_join      := jopu_none;
                                        a01join_forced_opjoin := false;
                                        END;
                                    (*ENDIF*) 
                                    END;
                                (*ENDIF*) 
                                END;
                            (*ENDIF*) 
                            a01_next_symbol (acv);
                            END
                        ELSE
                            a07_error (acv, e_wanted_keyword, put_node,
                                  _last_node);
                        (*ENDIF*) 
                    (*ENDIF*) 
                    END;
                (*ENDIF*) 
                END
            ELSE
                a07_error (acv, e_wanted_keyword, put_node, _last_node);
            (*ENDIF*) 
            END;
        (*ENDIF*) 
        END;
    END;
(*ENDCASE*) 
IF  ( acv.a_returncode = 0 )
THEN
    a01_next_symbol (acv);
(*ENDIF*) 
IF  ( acv.a_returncode = 0 ) AND
    ((_m_aggr_optim           <> a01aggr_optim)               OR
    (_m_join_hash_min_ratio   <> a01join_hash_min_ratio)      OR
    (_m_one_join_phase        <> a01one_join_phase)           OR
    (_m_outer_join_ordered    <> a01outer_join_ordered)       OR
    (_m_diag_operator_join_on <> g01operator_join)            OR
    (_m_diag_minmax_optim     <> a01diag_minmax_optim)        OR
    (_m_use_join_hashtable    <> a01use_join_hashtable)       OR
    (_m_join_forced_opjoin    <> a01join_forced_opjoin)       OR
    (_m_reverse_fetch         <> a01diag_reverse_fetch)       OR
    (_m_join_operator_sort    <> gg01_operator_join_sort)     OR
    (_m_join_operator_costfunc<> gg01_operator_join_costfunc) OR
    (_m_join_parall_minsize   <> a01join_parall_minsize)      OR
    (_m_optim_inv_only        <> gg01_optim_inv_only)         OR
    (_m_optim_first_rows      <> gg01_diag_frows_optim)
    )
THEN
    a101_InvalidateAll (acv);
(*ENDIF*) 
END;
 
.CM *-END-* code ----------------------------------------
.SP 2 
***********************************************************
.PA 
