zOs/TX/WK910

/* rexx ****************************************************************
rexx exec sql gives sql error for set path
***********************************************************************/
    address tso "SUBCOM DSNREXX"
    if rc <> 0 then do
       sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV  */
       if sRc <> 0 then
           call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
       end
    address dsnRexx "connect DBAF"
    say 'connect sqlCode' sqlMsg()
    address dsnRexx "execSql set :var = current timestamp"
    say 'set var' sqlCode 'var=' var
    address dsnRexx "execSql set path = 'SYSIBM'"
    say "set path = 'SYSIBM' sqlCode" sqlCode sqlMsg()
    address dsnRexx "execSql set path = SYSIBM"
    say "set path = SYSIBM sqlCode" sqlCode sqlMsg()
    address dsnRexx "execSql set path = ""SYSIBM"""
    say "set path = ""SYSIBM"" sqlCode" sqlCode sqlMsg()
    address dsnRexx "execSql set path = 'SYSIBM','SYSPROC'"
    say "set path = 'SYSIBM','SYSPROC' sqlCode" sqlCode sqlMsg()
    address dsnRexx "disconnect"
    say 'disconnect sqlCode' sqlCode
    exit

/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
    signal on syntax name sqlMsgOnSyntax
    ggRes = 'sqlCode' sqlCodeT(sqlCode, sqlErrMc, sqlwarn.0':' ,
       || sqlwarn.1||sqlwarn.2||sqlwarn.3||sqlwarn.4||sqlwarn.5',',
       || sqlwarn.6||sqlwarn.7||sqlwarn.8||sqlwarn.9||sqlwarn.10)
    if 0 then
      sqlMsgOnSyntax: do
        ggRes = 'sqlCode' sqlCode translate(sqlErrMc, ',', 'ff'x),
                '<<rexx sqlCodeT not found or syntax>>\nwarnings'
        do ggX=0 to 10
            if sqlWarn.ggx <> '' then
                ggRes = ggRes ggx'='sqlWarn.ggx
            end
        end
    signal off syntax
    ggRes = ggRes'\nstate' sqlState'\nstmt = ' ggSqlStmt
    ggPref = '\nwith'
    ggXX = pos(':', ggSqlStmt)+1
    do 12 while ggXX > 1
        ggYY = verify(ggSqlStmt, ' ,:+-*/&%?|()[]', 'm', ggXX)
        if ggYY < 1 then
            ggYY = length(ggSqlStmt) + 1
        ggVar = substr(ggSqlStmt, ggXX, ggYY - ggXX)
        if ggVar <> '' then do
            ggRes = ggRes || ggPref ggVar '=' value(ggVar)
            ggPref = '\n    '
            end
        ggXX = pos(':', ggSqlStmt, ggYY+1) + 1
        end
    return  ggRes
endSubroutine sqlMsg