.ad 8
.bm 8
.fm 4
.bt $Copyright (c) 2000-2004 SAP AG$$Page %$
.tm 12
.hm 6
.hs 3
.tt 1 $SQL$Project Distributed Database System$VPR08B$
.tt 2 $$$
.TT 3 $BurkhardD$Precompiler_ORACLE_Runtime_Routinen$2000-09-20$
***********************************************************
.nf
 
.nf
 
 
    ========== licence begin  GPL
    Copyright (c) 2000-2004 SAP AG
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
    as published by the Free Software Foundation; either version 2
    of the License, or (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    ========== licence end
 
.fo
 
 
.fo
.nf
.sp
MODULE  : Precompiler_ORACLE_Runtime_Routinen
=========
.sp
Purpose : Precompiler_ORACLE_Runtime_Routinen
.CM *-END-* purpose -------------------------------------
.sp
.cp 3
Define  :
 
&       define PREPSTMT
        PROCEDURE
              p08batdbanalyse (VAR sqlca : sqlcatype;
                    VAR sqlxa : sqlxatype;
                    VAR sypos : tsp00_Int4;
                    VAR sylen : tsp00_Int4;
                    VAR symb  : tpr_symbol;
                    buflen  : tsp00_Int4;
                    VAR buf : tsp00_MoveObj);
 
        PROCEDURE
              p08bfillga (VAR sqlgap : sqlgapointer;
                    index : tsp00_Int2;
                    VAR dbstring : tsp00_NodeId);
 
        PROCEDURE
              p08bfindgaempty (VAR sqlca : sqlcatype;
                    VAR atgaindex : tsp00_Int2);
 
        PROCEDURE
              p08busingdbanalyse (VAR sqlca : sqlcatype;
                    VAR sqlxa : sqlxatype;
                    VAR sypos : tsp00_Int4;
                    VAR sylen : tsp00_Int4;
                    VAR symb  : tpr_symbol;
                    buflen  : tsp00_Int4;
                    VAR buf : tsp00_MoveObj);
 
.CM *-END-* define --------------------------------------
.sp;.cp 3
Use     :
 
        FROM
              C-Type-Checker-Module  : VPR102;
 
        PROCEDURE
              p03sqlgaentryinit (VAR ga : sqlgaentry;
                    xuindex : tsp00_Int2;
                    errmsg : sqlempointer);
 
        PROCEDURE
              pr01TraceRuntimeError (VAR sqlca : sqlcatype;
                    VAR sqlxa : sqlxatype;
                    error : tpr_runtime_errors);
&       ifdef TRACE
 
        PROCEDURE
              m90hostname (
                    layer : tsp00_ToolLayer;
                    nam   : tsp00_Sname;
                    h     : tsp00_NodeId);
 
        PROCEDURE
              m90str1 (
                    layer   : tsp00_ToolLayer;
                    VAR buf : tsp00_NodeId;
                    pos_anf : integer;
                    len     : integer);
 
        PROCEDURE
              m90str (
                    layer   : tsp00_ToolLayer;
                    VAR buf : tsp00_DbName;
                    pos_anf : integer;
                    len     : integer);
 
        PROCEDURE
              m90int (layer : tsp00_ToolLayer;
                    nam : tsp00_Sname;
                    int : integer);
 
        PROCEDURE
              m90int4 (layer : tsp00_ToolLayer;
                    nam : tsp00_Sname;
                    int  : tsp00_Int4);
 
        PROCEDURE
              m90int2 (layer : tsp00_ToolLayer;
                    nam : tsp00_Sname;
                    int  : tsp00_Int2);
 
        PROCEDURE
              m90name (layer : tsp00_ToolLayer;
                    nam : tsp00_DbName);
 
        PROCEDURE
              m90buf (layer : tsp00_ToolLayer;
                    VAR buf : char;
                    pos_anf : integer;
                    pos_end : integer);
 
        PROCEDURE
              m90buf4 (
                    layer   : tsp00_ToolLayer;
                    VAR buf : tsp4_xuser_record;
                    pos_anf : integer;
                    pos_end : integer);
&       endif
 
      ------------------------------ 
 
        FROM
              SQLDB-Auftrags-Schnittstelle  : VPR03;
 
        PROCEDURE
              p03getparameteraddr (VAR sqlca : sqlcatype;
                    VAR sqlxa : sqlxatype;
                    VAR paix : integer;
                    VAR cmcnt : integer;
                    VAR vaaddr : tpr_vtypepointer;
                    VAR vaind  : integer;
                    VAR indaddr : tpr_vtypepointer;
                    VAR indind  : integer);
 
      ------------------------------ 
 
        FROM
              Runtime-Stringroutinen   : VPR05;
 
        PROCEDURE
              p05nextsymbol (VAR buf : tsp00_MoveObj;
                    buflen  : tsp00_Int4;
                    pasanf     : tsp00_Int4;
                    VAR sympos : tsp00_Int4;
                    VAR symlen : tsp00_Int4;
                    VAR symb   : tpr_symbol);
 
      ------------------------------ 
 
        FROM
              Kernel_move_and_fill   : VGG101;
 
        PROCEDURE
              SAPDB_PascalForcedMove (
                    source_upb  : tsp00_Int4;
                    destin_upb  : tsp00_Int4;
                    source      : tsp00_MoveObjPtr;
                    source_pos  : tsp00_Int4;
                    destin      : tsp00_MoveObjPtr;
                    destin_pos  : tsp00_Int4;
                    length      : tsp00_Int4);
 
        PROCEDURE
              s10mv (
                    source_upb  : tsp00_Int4;       
                    destin_upb  : tsp00_Int4;
                    source      : tsp00_MoveObjPtr;    
                    source_pos  : tsp00_Int4;
                    destin      : tsp00_MoveObjPtr;    
                    destin_pos  : tsp00_Int4;
                    length      : tsp00_Int4);
 
      ------------------------------ 
 
        FROM
              RTE-Extension-30    : VSP30;
 
        FUNCTION
              s30lenl (VAR str : tsp00_NodeId;
                    val : char;
                    start : tsp00_Int4;
                    cnt : tsp00_Int4) : tsp00_Int4;
 
        FUNCTION
              s30len1 (VAR str : tsp00_NodeId;
                    val : char; cnt : tsp00_Int4) : tsp00_Int4;
 
        FUNCTION
              s30len (VAR str : tpr_valuerec;
                    val : char; cnt : tsp00_Int4) : tsp00_Int4;
 
        FUNCTION
              s30lnr (VAR str : tsp00_C80;
                    val : char;
                    start : tsp00_Int4;
                    cnt : tsp00_Int4) : tsp00_Int4;
 
        FUNCTION
              s30klen (VAR str : tpr_valuerec;
                    val : char; cnt : integer) : integer;
 
.CM *-END-* use -----------------------------------------
.sp;.cp 3
Synonym :
 
        PROCEDURE
              m90hostname ;
 
              tsp00_VFilename  tsp00_NodeId
 
        PROCEDURE
              m90str;
 
              tsp00_Buf  tsp00_DbName
 
        PROCEDURE
              m90str1;
 
              tsp00_Buf  tsp00_NodeId
 
        PROCEDURE
              m90name;
 
              tsp00_Name  tsp00_DbName
 
        PROCEDURE
              m90buf;
 
              tsp00_Buf   char
 
        PROCEDURE
              m90buf4;
 
              tsp00_Buf tsp4_xuser_record
 
        PROCEDURE
              s30lnr;
 
              tsp00_MoveObj  tsp00_C80
 
        PROCEDURE
              s30len;
 
              tsp00_MoveObj  tpr_valuerec
 
        PROCEDURE
              s30len1;
 
              tsp00_MoveObj  tsp00_NodeId
 
        PROCEDURE
              s30lenl;
 
              tsp00_MoveObj  tsp00_NodeId
 
        PROCEDURE
              s30klen;
 
              tsp00_MoveObj       tpr_valuerec
 
.CM *-END-* synonym -------------------------------------
.sp;.cp 3
Author  : BurkhardD
.sp
.cp 3
Created : 1992-08-28
.sp
.cp 3
.sp
.cp 3
Release :      Date : 2000-09-20
.sp
***********************************************************
.sp
.cp 10
.fo
.oc _/1
Specification:
.sp 2
.sp 2
        PROCEDURE P08B_AT_DBANALYSE
.sp 2
.sp 2
        PROCEDURE P08B_SETUP_SESSION
.sp 2
.sp 2
        PROCEDURE P08B_GET_SESSION
.sp 2
.sp 2
        PROCEDURE P08B_GET_HOSTVAR
.sp 2
.sp 2
        PROCEDURE P08B_USING_DBANALYSE
.sp 2
.sp 2
        PROCEDURE P08B_FIND_GA_EMPTY
.sp 2
.sp 2
        PROCEDURE P08B_FILL_GA
.sp 2
.sp 4
 
.CM *-END-* specification -------------------------------
.sp 2
***********************************************************
.sp
.cp 10
.fo
.oc _/1
Description:
 
.CM *-END-* description ---------------------------------
.sp 2
***********************************************************
.sp
.cp 10
.nf
.oc _/1
Structure:
 
.CM *-END-* structure -----------------------------------
.sp 2
**********************************************************
.sp
.cp 10
.nf
.oc _/1
.CM -lll-
Code    :
 
 
(*------------------------------*) 
 
PROCEDURE
      p08bfillga (VAR sqlgap : sqlgapointer;
            index : tsp00_Int2;
            VAR dbstring : tsp00_NodeId);
 
VAR
      netpos, netlen : integer;
      nodepos, nodelen : integer;
      dbpos, dblen : integer;
 
BEGIN
WITH sqlgap^. gaentry[index]^, gaxuserrec DO
    BEGIN
&   ifdef TRACE
    m90hostname ( pc, 'dbstring    ', dbstring);
&   endif
    xu_timeout := -1;
    xu_cachelimit := -1;
    netpos := 1;
    netlen := s30lenl (dbstring, ':', netpos, NODEID_MXSP00);
&   ifdef TRACE
    m90int2 (pc, 'netlen      ', netlen);
&   endif
    (* IF  netlen < NODEID_MXSP00
          THEN
          BEGIN *)
    nodepos := netpos + netlen + 1;
    (* nodelen := s30lenl (dbstring, '-', nodepos, NODEID_MXSP00); *)
    nodelen := NODEID_MXSP00;
    WHILE ((dbstring[nodelen] <> '-') AND (nodelen >= nodepos)) DO
        nodelen := nodelen - 1;
    (*ENDWHILE*) 
    IF  (nodelen < nodepos)
    THEN
        nodelen := NODEID_MXSP00
    ELSE
        nodelen := nodelen - nodepos;
    (*ENDIF*) 
&   ifdef TRACE
    m90int2 (pc, 'nodepos     ', nodepos);
    m90int2 (pc, 'nodelen     ', nodelen);
&   endif
    IF  (nodelen < NODEID_MXSP00)
    THEN
        BEGIN
        xu_servernode := bsp_nodeid;
        s10mv (NODEID_MXSP00, NODEID_MXSP00,
              @dbstring, nodepos,
              @xu_servernode, 1, nodelen);
&       ifdef TRACE
        m90hostname ( pc, 'xu_servernod', xu_servernode);
&       endif
        dbpos := nodepos + nodelen + 1;
        dblen := s30lenl (dbstring, ' ', dbpos, NODEID_MXSP00);
        IF  (dblen < NODEID_MXSP00)
        THEN
            BEGIN
            xu_serverdb := bsp_dbname;
            s10mv (NODEID_MXSP00, DBNAME_MXSP00,
                  @dbstring, dbpos,
                  @xu_serverdb, 1, dblen);
&           ifdef TRACE
            m90name ( pc, xu_serverdb);
&           endif
            END;
        (*ENDIF*) 
        END;
&   ifdef TRACE
    (*ENDIF*) 
    m90int2 (pc, 'xu_timeout  ', xu_timeout);
    m90int4 (pc, 'xu_cachelimi', xu_cachelimit);
&   endif
    END;
(*ENDWITH*) 
(* END; *)
END;
 
(*------------------------------*) 
 
PROCEDURE
      p08bfindgaempty (VAR sqlca : sqlcatype;
            VAR atgaindex : tsp00_Int2);
 
VAR
      i : tsp00_Int2;
      not_found : boolean;
      retganolog : tsp00_Int2;
 
BEGIN
WITH sqlca DO
    BEGIN
    not_found := true;
    i := cpr_se_primary;
    atgaindex := mxpr_sqlga + 1;
    WHILE not_found AND (i <= mxpr_sqlga) DO
        BEGIN
        WITH sqlgap^.gaentry[i]^ DO
            BEGIN
&           ifdef TRACE
            m90int2(pc, 'gareference ',  gareference);
&           endif
            IF  gareference = 0
            THEN
                BEGIN
                atgaindex := i;
&               ifdef TRACE
                m90int2(pc, 'atgaindex   ',  atgaindex);
&               endif
                retganolog := ganolog;
                p03sqlgaentryinit (sqlgap^.gaentry[i]^, cpr_se_primary,
                      sqlca.sqlemp);
                (* ADIS 1001248 *)
                sqlca.sqlemp^.elzu := sp1ce_ok;
                ganolog := retganolog;
                not_found := false;
                END;
            (*ENDIF*) 
            END;
        (*ENDWITH*) 
        i := i + 1;
        END;
    (*ENDWHILE*) 
&   ifdef TRACE
    m90int2(pc, 'atgaindex   ', atgaindex);
&   endif
    END;
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      p08batdbanalyse (VAR sqlca : sqlcatype;
            VAR sqlxa : sqlxatype;
            VAR sypos : tsp00_Int4;
            VAR sylen : tsp00_Int4;
            VAR symb  : tpr_symbol;
            buflen  : tsp00_Int4;
            VAR buf : tsp00_MoveObj);
 
VAR
      pcat : integer;
      not_found :boolean;
      dbsname: tsp00_KnlIdentifier;
 
BEGIN
WITH sqlca, sqlxa,
     sqlkap^[xakano], sqlatp^[xaatcount] DO
    BEGIN
    p05nextsymbol (buf, buflen, sypos+sylen, sypos, sylen,
          symb);
&   ifdef TRACE
    m90int (pc, 'xakano      ', xakano );
    m90int (pc, 'sypos       ', sypos );
    m90int (pc, 'sylen       ', sylen );
    m90int (pc, 'symb        ', ord (symb) );
&   endif
    IF   (symb = cpr_s_identifier)
    THEN
        BEGIN
        IF   sylen > DBNAME_MXSP00
        THEN
            pr01TraceRuntimeError (sqlca, sqlxa,
                  cpr_connect_syntax_wrong)
        ELSE
            BEGIN
            s10mv (buflen, sizeof(dbsname), @buf, sypos,
                  @dbsname, 1, sylen);
            not_found := true;
            pcat := xaatcount;
&           ifdef TRACE
            m90int (pc, 'pcat        ', pcat );
&           endif
            WHILE (pcat > 0) AND not_found DO
                BEGIN
                IF  sqlatp^[pcat]. atdbname = dbsname
                THEN
                    not_found := false;
                (*ENDIF*) 
                pcat := pcat - 1;
                END;
            (*ENDWHILE*) 
&           ifdef TRACE
            m90int (pc, 'pcat        ', pcat );
            IF  not_found
            THEN
                m90int (pc, 'not_found   ', 1 )
            ELSE
                m90int (pc, 'not_found   ', 0 );
            (*ENDIF*) 
&           endif
            IF  not_found
            THEN
                BEGIN
                xaatcount := xaatcount + 1;
                IF  xaatcount > mxpr_sqlat
                THEN
                    pr01TraceRuntimeError (sqlca, sqlxa,
                          cpr_r_too_many_statements)
                ELSE
                    BEGIN
&                   ifdef TRACE
                    m90int (pc, 'xaatcount   ', xaatcount);
&                   endif
                    sqlatp^[xaatcount] .atdbname := dbsname;
                    (* 0  string *)
                    (* +n hostvar *)
                    sqlatp^[xaatcount] .atdbindex := 0;
                    END;
                (*ENDIF*) 
                END;
            (*ENDIF*) 
            kaatindex := xaatcount;
            END;
        (*ENDIF*) 
        p05nextsymbol (buf, buflen, sypos+sylen, sypos, sylen,
              symb);
&       ifdef TRACE
        m90int (pc, 'pcat        ', pcat);
        m90int (pc, 'xaatcount   ', xaatcount);
        m90int (pc, 'atdbindex   ', sqlatp^[xaatcount]. atdbindex);
        m90int (pc, 'atgaindex   ', sqlatp^[xaatcount]. atgaindex );
&       endif
        END
    ELSE
        pr01TraceRuntimeError (sqlca, sqlxa,
              cpr_connect_syntax_wrong);
    (*ENDIF*) 
    END;
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      p08busingdbanalyse (VAR sqlca : sqlcatype;
            VAR sqlxa : sqlxatype;
            VAR sypos : tsp00_Int4;
            VAR sylen : tsp00_Int4;
            VAR symb  : tpr_symbol;
            buflen  : tsp00_Int4;
            VAR buf : tsp00_MoveObj);
 
VAR
      pcat : integer;
      i    : integer;
      ind, len, pos : integer;
      sint   : tsp00_Int2;
 
BEGIN
WITH sqlca, sqlxa,
     sqlkap^[xakano], sqlatp^[kaatindex] DO
    BEGIN
    pcat := kaatindex;
&   ifdef TRACE
    m90int (pc, 'pcat        ', pcat);
    m90int (pc, 'atdbindex   ', sqlatp^ [pcat]. atdbindex);
    m90int (pc, 'atgaindex   ', sqlatp^ [pcat]. atgaindex );
&   endif
    p05nextsymbol (buf, buflen, sypos+sylen, sypos, sylen,
          symb);
&   ifdef TRACE
    m90int (pc, 'symb        ', ord(symb));
&   endif
    IF   (symb = cpr_s_string_literal)
        OR  (symb = cpr_s_cstring_literal)
    THEN
        BEGIN
        IF   sylen > NODEID_MXSP00
        THEN
            pr01TraceRuntimeError (sqlca, sqlxa,
                  cpr_connect_syntax_wrong)
        ELSE
            BEGIN
            sqlatp^ [pcat] .atdbindex := 0;
            s10mv (buflen, NODEID_MXSP00, @buf,
                  sypos, @sqlatp^[pcat].atdbstring, 1, sylen);
&           ifdef TRACE
            m90str1 (pc, sqlatp^[pcat]. atdbstring, 1, sylen)
&                 endif
            END
        (*ENDIF*) 
        END
    ELSE
        IF   symb = cpr_s_parameter_name
        THEN
            BEGIN
            (* hole wert aus hostvariable *)
            ind := 0;
            WITH sqlkap^ [xakano ] DO
                FOR i := kapaindex TO kapaindex + kapacount - 1 DO
                    WITH sqlpap^ [i]  DO
                        IF  pakindel = sqlparel
                        THEN
                            BEGIN
                            ind := pavarno;
                            END;
                        (*ENDIF*) 
                    (*ENDWITH*) 
                (*ENDFOR*) 
            (*ENDWITH*) 
            WITH sqlv1p^ [ind ], sqlv2p^ [va1indva2_sc] DO
                BEGIN
                sqlatp^[pcat]. atdbstring := bsp_c64;
                len   := va2size;
                IF   va2typ = cpr_vcharc
                THEN
                    BEGIN
                    IF  va2size = cpr_pointerlen
                    THEN
                        len := NODEID_MXSP00;
                    (*ENDIF*) 
                    len := s30len (va1addr_sc.vtypep^, chr(0), len);
                    END;
                (*ENDIF*) 
                IF   len  > NODEID_MXSP00
                THEN
                    len := NODEID_MXSP00;
                (*ENDIF*) 
                IF   (va2typ = cpr_vchar) OR (va2typ = cpr_vbchar)
                    OR (va2typ = cpr_vcharc)
                THEN
                    s10mv (NODEID_MXSP00, NODEID_MXSP00,
                          @va1addr_sc.vtypep^.ch, 1,
                          @sqlatp^[pcat]. atdbstring, 1, len)
                ELSE
                    IF   (va2typ = cpr_vstring)
                        OR  (va2typ = cpr_vstring1)
                    THEN
                        BEGIN
                        IF  (va2typ <> cpr_vstring1)
                        THEN
                            BEGIN
                            s10mv (mxsp_c2, mxsp_c2, @va1addr_sc.vtypep^, 1,
                                  @sint, 1, mxsp_c2);
                            pos := 3;
                            END
                        ELSE
                            BEGIN
                            sint := ord (va1addr_sc.vtypep^.buf[1]);
                            pos  := 2;
                            END;
                        (*ENDIF*) 
                        len := sint;
                        IF   len  > NODEID_MXSP00
                        THEN
                            len := NODEID_MXSP00;
&                       ifdef TRACE
                        (*ENDIF*) 
                        m90int2 (pc, 'movc14 len  ', len);
&                       endif
                        s10mv (mxsp_name+2, mxsp_name,
                              @va1addr_sc.vtypep^.ch, pos,
                              @sqlatp^[pcat]. atdbstring, 1, len)
                        END
                    ELSE
                        pr01TraceRuntimeError (sqlca, sqlxa,
                              cpr_paramlist_wrong);
                    (*ENDIF*) 
                (*ENDIF*) 
                END;
            (*ENDWITH*) 
            END
        ELSE
            pr01TraceRuntimeError (sqlca, sqlxa,
                  cpr_connect_syntax_wrong);
        (*ENDIF*) 
    (*ENDIF*) 
&   ifdef TRACE
    m90int (pc, 'pcat        ', pcat);
    m90int (pc, 'atdbindex   ', sqlatp^[pcat]. atdbindex);
    m90int (pc, 'atgaindex   ', sqlatp^[pcat]. atgaindex );
    m90str1 (pc, sqlatp^[pcat]. atdbstring, 1, mxsp_c64);
&   endif
    p05nextsymbol (buf, buflen, sypos+sylen, sypos, sylen,
          symb);
&   ifdef TRACE
    m90int (pc, 'sypos       ', sypos );
    m90int (pc, 'sylen       ', sylen );
    m90int (pc, 'symb        ', ord (symb) );
&   endif
    END;
(*ENDWITH*) 
END;
 
(*------------------------------*) 
 
PROCEDURE
      p08bpagetdbvariable (VAR sqlca : sqlcatype;
            VAR sqlxa : sqlxatype;
            paind     : tsp00_Int2;
            VAR dbnode: tsp00_NodeId;
            VAR len   : tsp00_Int4);
 
VAR
      in4 : tsp00_Int4;
      in2 : tsp00_Int2;
      error : tpr_runtime_errors;
      vptr      : tpr_vtypepointer;
      iptr      : tpr_vtypepointer;
      va1ind   : integer;
      indind   : integer;
      paix     : integer;
      cnt      : integer;
 
BEGIN
WITH sqlca, sqlxa, sqlpap^ [paind] DO
    BEGIN
    error := cpr_p_ok;
    paix  := paind;
    p03getparameteraddr (sqlca, sqlxa, paix (* paindex *),
          cnt, vptr, va1ind,
          iptr, indind );
    IF  vptr.intaddr = 0
    THEN
        error :=  cpr_missing_variable_addr;
    (*ENDIF*) 
    IF  error = cpr_p_ok
    THEN
        WITH sqlv1p^ [va1ind], sqlv2p^ [va1indva2_sc] DO
            BEGIN
            dbnode := bsp_c64;
            CASE va2typ OF
                cpr_vbuf, cpr_vchar, cpr_vbchar :
                    BEGIN
                    len := s30klen (vptr.vtypep^, bsp_c1, va2size);
&                   ifdef TRACE
                    m90int2 (pc, 'len         ', len   );
&                   endif
                    IF  len > NODEID_MXSP00
                    THEN
                        BEGIN
                        len   := NODEID_MXSP00;
                        error := cpr_cmd_too_long;
                        END;
                    (*ENDIF*) 
                    s10mv (NODEID_MXSP00, NODEID_MXSP00, @vptr.vtypep^, 1,
                          @dbnode, 1, len);
                    END;
                cpr_vstring4 :
                    BEGIN
                    s10mv (mxsp_c4, mxsp_c4, @vptr.vtypep^, 1,
                          @in4, 1, mxsp_c4);
                    len := in4;
&                   ifdef TRACE
                    m90int4 (pc, 'len         ', len  );
&                   endif
                    IF  len+4 > NODEID_MXSP00
                    THEN
                        BEGIN
                        len   := NODEID_MXSP00 - 4 ;
                        error := cpr_cmd_too_long;
                        END;
                    (*ENDIF*) 
                    s10mv (NODEID_MXSP00, NODEID_MXSP00, @vptr.vtypep^, 5,
                          @dbnode, 1, len);
                    END;
                cpr_vstring :
                    BEGIN
                    s10mv (mxsp_c2, mxsp_c2, @vptr.vtypep^, 1,
                          @in2, 1, mxsp_c2);
                    len := in2;
&                   ifdef TRACE
                    m90int2 (pc, 'len         ', len   );
&                   endif
                    IF  len+2 > NODEID_MXSP00
                    THEN
                        BEGIN
                        len   := NODEID_MXSP00 - 2;
                        error := cpr_cmd_too_long;
                        END;
                    (*ENDIF*) 
                    s10mv (NODEID_MXSP00, NODEID_MXSP00, @vptr.vtypep^, 3,
                          @dbnode, 1, len);
                    END;
                cpr_vstring1 :
                    BEGIN
                    len := ord (vptr.vtypep^.buf[1]);
                    s10mv (NODEID_MXSP00, NODEID_MXSP00, @vptr.vtypep^, 2,
                          @dbnode, 1, len);
                    END;
                cpr_vcharc, cpr_vcharz  :
                    BEGIN
                    IF  va2size = cpr_pointerlen
                    THEN
                        len := NODEID_MXSP00
                    ELSE
                        len := va2size;
                    (*ENDIF*) 
                    len := s30len (vptr.vtypep^ , chr(0), len);
&                   ifdef TRACE
                    m90int2 (pc, 'len         ', len   );
&                   endif
                    IF  len > NODEID_MXSP00
                    THEN
                        BEGIN
                        len   := NODEID_MXSP00;
                        error := cpr_cmd_too_long;
                        END;
                    (*ENDIF*) 
                    s10mv (NODEID_MXSP00, NODEID_MXSP00, @vptr.vtypep^, 1,
                          @dbnode, 1, len);
                    END;
                OTHERWISE:
                    BEGIN
                    error :=  cpr_unknown_datatype;
                    END;
                END;
            (*ENDCASE*) 
            END;
        (*ENDWITH*) 
    (*ENDIF*) 
    IF  error <> cpr_p_ok
    THEN
        pr01TraceRuntimeError (sqlca, sqlxa, error);
    (*ENDIF*) 
    END;
(*ENDWITH*) 
END;
 
(* ADIS 1001499 *)
(*------------------------------*) 
 
FUNCTION
      pr08bGetSessionFromName(VAR sqlca : sqlcatype;
            atdbname : tsp00_KnlIdentifier) : integer;
 
VAR
      gaindex : integer;
      i : integer;
 
BEGIN
gaindex := 0;
IF  (atdbname <> bsp_knl_identifier)
    AND (atdbname[1] <> chr(0))
THEN
    WITH sqlca, sqlgap^ DO
        BEGIN
        i := 1;
        WHILE (i < mxpr_sqlga) AND (gaindex = 0) DO
            BEGIN
            IF  (gaentry[i]^.gaatdbname = atdbname)
                AND (gaentry[i]^.gareference <> 0)
            THEN
                gaindex := i;
            (*ENDIF*) 
            i := i + 1;
            END;
        (*ENDWHILE*) 
        END;
    (*ENDWITH*) 
(*ENDIF*) 
pr08bGetSessionFromName := gaindex;
END;
 
.CM *-END-* code ----------------------------------------
.SP 2 
***********************************************************
.PA 
