⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lang_cmd.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* * =========================================================================== * PRODUCTION $Log: lang_cmd.cpp,v $ * PRODUCTION Revision 1000.1  2004/06/01 19:20:19  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.14 * PRODUCTION * =========================================================================== *//* $Id: lang_cmd.cpp,v 1000.1 2004/06/01 19:20:19 gouriano Exp $ * =========================================================================== * *                            PUBLIC DOMAIN NOTICE *               National Center for Biotechnology Information * *  This software/database is a "United States Government Work" under the *  terms of the United States Copyright Act.  It was written as part of *  the author's official duties as a United States Government employee and *  thus cannot be copyrighted.  This software/database is freely available *  to the public for use. The National Library of Medicine and the U.S. *  Government have not placed any restriction on its use or reproduction. * *  Although all reasonable efforts have been taken to ensure the accuracy *  and reliability of the software and data, the NLM and the U.S. *  Government do not and cannot warrant the performance or results that *  may be obtained by using this software or data. The NLM and the U.S. *  Government disclaim all warranties, express or implied, including *  warranties of performance, merchantability or fitness for any particular *  purpose. * *  Please cite the author in any work or product based on this material. * * =========================================================================== * * Author:  Vladimir Soussov * * File Description:  DBLib language command * */#include <ncbi_pch.hpp>#ifndef USE_MS_DBLIB#  include <dbapi/driver/dblib/interfaces.hpp>#  include <dbapi/driver/dblib/interfaces_p.hpp>#else#  include <dbapi/driver/msdblib/interfaces.hpp>#  include <dbapi/driver/msdblib/interfaces_p.hpp>#endifBEGIN_NCBI_SCOPE/////////////////////////////////////////////////////////////////////////////////  CDBL_LangCmd:://CDBL_LangCmd::CDBL_LangCmd(CDBL_Connection* conn, DBPROCESS* cmd,                           const string& lang_query,                           unsigned int nof_params) :    m_Connect(conn), m_Cmd(cmd), m_Query(lang_query), m_Params(nof_params){    m_WasSent   =  false;    m_HasFailed =  false;    m_Res       =  0;    m_RowCount  = -1;    m_Status    =  0;}bool CDBL_LangCmd::More(const string& query_text){    m_Query.append(query_text);    return true;}bool CDBL_LangCmd::BindParam(const string& param_name, CDB_Object* param_ptr){    return        m_Params.BindParam(CDB_Params::kNoParamNumber, param_name, param_ptr);}bool CDBL_LangCmd::SetParam(const string& param_name, CDB_Object* param_ptr){    return        m_Params.SetParam(CDB_Params::kNoParamNumber, param_name, param_ptr);}bool CDBL_LangCmd::Send(){    if (m_WasSent)        Cancel();    m_HasFailed = false;    if (!x_AssignParams()) {        dbfreebuf(m_Cmd);        m_HasFailed = true;        throw CDB_ClientEx(eDB_Error, 220003, "CDBL_LangCmd::Send",                           "cannot assign params");    }    if (dbcmd(m_Cmd, (char*)(m_Query.c_str())) != SUCCEED) {        dbfreebuf(m_Cmd);        m_HasFailed = true;        throw CDB_ClientEx(eDB_Fatal, 220001, "CDBL_LangCmd::Send",                           "dbcmd failed");    }    if (dbsqlsend(m_Cmd) != SUCCEED) {        m_HasFailed = true;        throw CDB_ClientEx(eDB_Error, 220005, "CDBL_LangCmd::Send",                           "dbsqlsend failed");    }    m_WasSent = true;    m_Status = 0;    return true;}bool CDBL_LangCmd::WasSent() const{    return m_WasSent;}bool CDBL_LangCmd::Cancel(){    if (m_WasSent) {        if (m_Res) {            delete m_Res;            m_Res = 0;        }        m_WasSent = false;        return (dbcancel(m_Cmd) == SUCCEED);    }    dbfreebuf(m_Cmd);    m_Query.erase();    return true;}bool CDBL_LangCmd::WasCanceled() const{    return !m_WasSent;}CDB_Result* CDBL_LangCmd::Result(){    if (m_Res) {        if(m_RowCount < 0) {            m_RowCount = DBCOUNT(m_Cmd);        }        delete m_Res;        m_Res = 0;    }    if (!m_WasSent) {        throw CDB_ClientEx(eDB_Error, 220010, "CDBL_LangCmd::Result",                           "a command has to be sent first");    }    if (m_Status == 0) {        m_Status = 0x1;        if (dbsqlok(m_Cmd) != SUCCEED) {            m_WasSent = false;            m_HasFailed = true;            throw CDB_ClientEx(eDB_Error, 220011, "CDBL_LangCmd::Result",                               "dbsqlok failed");        }    }    if ((m_Status & 0x10) != 0) { // we do have a compute result        m_Res = new CDBL_ComputeResult(m_Cmd, &m_Status);        m_RowCount= 1;        return Create_Result(*m_Res);    }    while ((m_Status & 0x1) != 0) {        if ((m_Status & 0x20) != 0) { // check for return parameters from exec            m_Status ^= 0x20;            int n;            if ((n = dbnumrets(m_Cmd)) > 0) {                m_Res = new CDBL_ParamResult(m_Cmd, n);                m_RowCount= 1;                return Create_Result(*m_Res);            }        }        if ((m_Status & 0x40) != 0) { // check for ret status            m_Status ^= 0x40;            if (dbhasretstat(m_Cmd)) {                m_Res = new CDBL_StatusResult(m_Cmd);                m_RowCount= 1;                return Create_Result(*m_Res);            }        }        switch (dbresults(m_Cmd)) {        case SUCCEED:            m_Status |= 0x60;            if (DBCMDROW(m_Cmd) == SUCCEED) { // we could get rows in result// This optimization is currently unavailable for MS dblib...#ifndef MS_DBLIB_IN_USE /*Text,Image*/                if (dbnumcols(m_Cmd) == 1) {                    int ct = dbcoltype(m_Cmd, 1);                    if ((ct == SYBTEXT) || (ct == SYBIMAGE)) {                        m_Res = new CDBL_BlobResult(m_Cmd);                    }                }#endif                if (!m_Res)                    m_Res = new CDBL_RowResult(m_Cmd, &m_Status);                m_RowCount= -1;                return Create_Result(*m_Res);            } else {                m_RowCount = DBCOUNT(m_Cmd);                continue;            }        case NO_MORE_RESULTS:            m_Status = 2;            break;        default:            m_HasFailed = true;            throw CDB_ClientEx(eDB_Warning, 220016, "CDBL_LangCmd::Result",                               "an error was encountered by server");        }        break;    }    m_WasSent = false;    return 0;}bool CDBL_LangCmd::HasMoreResults() const{    return m_WasSent;}void CDBL_LangCmd::DumpResults(){    CDB_Result* dbres;    while(m_WasSent) {        dbres= Result();        if(dbres) {            if(m_Connect->m_ResProc) {                m_Connect->m_ResProc->ProcessResult(*dbres);            }            else {                while(dbres->Fetch());            }            delete dbres;        }    }}bool CDBL_LangCmd::HasFailed() const

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -