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

📄 connection.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    CTDS_ITDescriptor& desc = p_desc? dynamic_cast<CTDS_ITDescriptor&> (*p_desc) :         dynamic_cast<CTDS_ITDescriptor&> (descr_in);    // CTDS_ITDescriptor& desc = dynamic_cast<CTDS_ITDescriptor&> (descr_in);    char buff[1800]; // maximal page size    if (size <= sizeof(buff)) { // we could write a blob in one chunk        size_t s = stream.Read(buff, sizeof(buff));        if (dbwritetext(m_Link, (char*) desc.m_ObjName.c_str(),                        desc.m_TxtPtr_is_NULL ? 0 : desc.m_TxtPtr,                        DBTXPLEN,                        desc.m_TimeStamp_is_NULL ? 0 : desc.m_TimeStamp,                        log_it ? TRUE : FALSE, (DBINT) s, (BYTE*) buff)            != SUCCEED) {            throw CDB_ClientEx(eDB_Error, 210030, "CTDS_Connection::SendData",                               "dbwritetext failed");        }        return true;    }    // write it in chunks    if (dbwritetext(m_Link, (char*) desc.m_ObjName.c_str(),                    desc.m_TxtPtr_is_NULL ? 0 : desc.m_TxtPtr,                    DBTXPLEN,                    desc.m_TimeStamp_is_NULL ? 0 : desc.m_TimeStamp,                    log_it ? TRUE : FALSE, (DBINT) size, 0) != SUCCEED ||        dbsqlok(m_Link) != SUCCEED ||        //        dbresults(m_Link) == FAIL) {        x_Results(m_Link) == FAIL) {        throw CDB_ClientEx(eDB_Error, 210031, "CTDS_Connection::SendData",                           "dbwritetext/dbsqlok/dbresults failed");    }    while (size > 0) {        size_t s = stream.Read(buff, sizeof(buff));        if (s < 1) {            dbcancel(m_Link);            throw CDB_ClientEx(eDB_Fatal, 210032, "CTDS_Connection::SendData",                               "Text/Image data corrupted");        }        if (dbmoretext(m_Link, (DBINT) s, (BYTE*) buff) != SUCCEED) {            dbcancel(m_Link);            throw CDB_ClientEx(eDB_Error, 210033, "CTDS_Connection::SendData",                               "dbmoretext failed");        }        size -= s;    }    //    if (dbsqlok(m_Link) != SUCCEED || dbresults(m_Link) == FAIL) {    if (dbsqlok(m_Link) != SUCCEED || x_Results(m_Link) == FAIL) {        throw CDB_ClientEx(eDB_Error, 110034, "CTDS_Connection::SendData",                           "dbsqlok/dbresults failed");    }    return true;}I_ITDescriptor* CTDS_Connection::x_GetNativeITDescriptor(const CDB_ITDescriptor& descr_in){    string q= "set rowcount 1\nupdate ";    q+= descr_in.TableName();    q+= " set ";    q+= descr_in.ColumnName();    q+= "='0x0' where ";    q+= descr_in.SearchConditions();    q+= " \nselect ";    q+= descr_in.ColumnName();    q+= " from ";    q+= descr_in.TableName();    q+= " where ";    q+= descr_in.SearchConditions();    q+= " \nset rowcount 0";        CDB_LangCmd* lcmd= LangCmd(q, 0);    if(!lcmd->Send()) {        throw CDB_ClientEx(eDB_Error, 210035, "CTDS_Connection::x_GetNativeITDescriptor",                           "can not send the language command");    }    CDB_Result* res;    I_ITDescriptor* descr= 0;    bool i;    while(lcmd->HasMoreResults()) {        res= lcmd->Result();        if(res == 0) continue;        if((res->ResultType() == eDB_RowResult) && (descr == 0)) {            EDB_Type tt= res->ItemDataType(0);            if(tt == eDB_Text || tt == eDB_Image) {                while(res->Fetch()) {                    res->ReadItem(&i, 1);		                    descr= new CTDS_ITDescriptor(m_Link, descr_in);                    // descr= res->GetImageOrTextDescriptor();                    if(descr) break;                }            }        }        delete res;    }    delete lcmd;		    return descr;}RETCODE CTDS_Connection::x_Results(DBPROCESS* pLink){    unsigned int x_Status= 0x1;    CDB_Result* dbres;    I_Result* res= 0;    while ((x_Status & 0x1) != 0) {        switch (dbresults(pLink)) {        case SUCCEED:            if (DBCMDROW(pLink) == SUCCEED) { // we may get rows in this result                if(!m_ResProc) {                    for(;;) {                        switch(dbnextrow(pLink)) {                        case NO_MORE_ROWS:                        case FAIL:                        case BUF_FULL: break;                        default: continue;                        }                        break;                    }                    continue;                }                res = new CTDS_RowResult(pLink, &x_Status);                if(res) {                    dbres= Create_Result(*res);                    m_ResProc->ProcessResult(*dbres);                    delete dbres;                    delete res;                }                if ((x_Status & 0x10) != 0) { // we do have a compute result                    res = new CTDS_ComputeResult(pLink, &x_Status);                    if(res) {                        dbres= Create_Result(*res);                        m_ResProc->ProcessResult(*dbres);                        delete dbres;                        delete res;                    }                }            }             continue;                    case NO_MORE_RESULTS:            x_Status = 2;            break;        default:            return FAIL;        }        break;    }        // we've done with the row results at this point    // let's look at return parameters and ret status    if (m_ResProc && x_Status == 2) {        x_Status = 4;        int n = dbnumrets(pLink);        if (n > 0) {            res = new CTDS_ParamResult(pLink, n);            if(res) {                dbres= Create_Result(*res);                m_ResProc->ProcessResult(*dbres);                delete dbres;                delete res;            }        }    }        if (m_ResProc && x_Status == 4) {        if (dbhasretstat(pLink)) {            res = new CTDS_StatusResult(pLink);            if(res) {                dbres= Create_Result(*res);                m_ResProc->ProcessResult(*dbres);                delete dbres;                delete res;            }        }    }    return SUCCEED;}/////////////////////////////////////////////////////////////////////////////////  CTDS_SendDataCmd:://CTDS_SendDataCmd::CTDS_SendDataCmd(CTDS_Connection* con, DBPROCESS* cmd,                                   size_t nof_bytes){    m_Connect  = con;    m_Cmd      = cmd;    m_Bytes2go = nof_bytes;}size_t CTDS_SendDataCmd::SendChunk(const void* pChunk, size_t nof_bytes){    if (!pChunk  ||  !nof_bytes) {        throw CDB_ClientEx(eDB_Fatal, 290000, "CTDS_SendDataCmd::SendChunk",                           "wrong (zero) arguments");    }    if (!m_Bytes2go)        return 0;    if (nof_bytes > m_Bytes2go)        nof_bytes = m_Bytes2go;    if (dbmoretext(m_Cmd, nof_bytes, (BYTE*) pChunk) != SUCCEED) {        dbcancel(m_Cmd);        throw CDB_ClientEx(eDB_Error, 290001, "CTDS_SendDataCmd::SendChunk",                           "dbmoretext failed");    }    m_Bytes2go -= nof_bytes;    if (m_Bytes2go <= 0) {        //        if (dbsqlok(m_Cmd) != SUCCEED || dbresults(m_Cmd) == FAIL) {        if (dbsqlok(m_Cmd) != SUCCEED || m_Connect->x_Results(m_Cmd) == FAIL) {            throw CDB_ClientEx(eDB_Error, 290002,                               "CTDS_SendDataCmd::SendChunk",                               "dbsqlok/results failed");        }    }    return nof_bytes;}void CTDS_SendDataCmd::Release(){    m_BR = 0;    if (m_Bytes2go > 0) {        dbcancel(m_Cmd);        m_Bytes2go = 0;    }    m_Connect->DropCmd(*this);    delete this;}CTDS_SendDataCmd::~CTDS_SendDataCmd(){    if (m_Bytes2go > 0)        dbcancel(m_Cmd);    if (m_BR)        *m_BR = 0;}END_NCBI_SCOPE/* * =========================================================================== * $Log: connection.cpp,v $ * Revision 1000.1  2004/06/01 19:20:42  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7 * * Revision 1.7  2004/05/17 21:13:37  gorelenk * Added include of PCH ncbi_pch.hpp * * Revision 1.6  2003/06/05 16:01:40  soussov * adds code for DumpResults and for the dumped results processing * * Revision 1.5  2002/12/03 19:21:24  soussov * formatting * * Revision 1.4  2002/08/23 16:32:11  soussov * fixes bug in ~CTDS_Connection() * * Revision 1.3  2002/03/26 15:35:10  soussov * new image/text operations added * * Revision 1.2  2001/11/06 18:00:02  lavr * Formatted uniformly as the rest of the library * * Revision 1.1  2001/10/25 00:39:22  vakatov * Initial revision * * =========================================================================== */

⌨️ 快捷键说明

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