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

📄 result.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
                               "Unsupported column type");    }}CDB_Object* CODBC_RowResult::GetItem(CDB_Object* item_buf){    if ((unsigned int) m_CurrItem >= m_NofCols  ||  m_CurrItem == -1) {        return 0;    }    CDB_Object* item = item_buf? xLoadItem(item_buf) : xMakeItem();    ++m_CurrItem;    return item;}size_t CODBC_RowResult::ReadItem(void* buffer,size_t buffer_size,bool* is_null){    if ((unsigned int) m_CurrItem >= m_NofCols  ||  m_CurrItem == -1 ||        buffer == 0 || buffer_size == 0) {        return 0;    }    SQLINTEGER f= 0;    if(is_null) *is_null= false;    switch(SQLGetData(m_Cmd, m_CurrItem+1, SQL_C_BINARY, buffer, buffer_size, &f)) {    case SQL_SUCCESS_WITH_INFO:        switch(f) {        case SQL_NO_TOTAL:            return buffer_size;        case SQL_NULL_DATA:            ++m_CurrItem;            if(is_null) *is_null= true;            return 0;        default:			   if(f >= 0) return (f <= buffer_size)? (size_t)f : buffer_size;            m_Reporter.ReportErrors();            return 0;        }    case SQL_SUCCESS:        ++m_CurrItem;        if(f == SQL_NULL_DATA) {            if(is_null) *is_null= true;            return 0;        }        return (f >= 0)? ((size_t)f) : 0;    case SQL_NO_DATA:        ++m_CurrItem;        if(f == SQL_NULL_DATA) {            if(is_null) *is_null= true;        }        return 0;    case SQL_ERROR:        m_Reporter.ReportErrors();    default:        throw CDB_ClientEx(eDB_Error, 430026, "CODBC_*Result::ReadItem",                                   "SQLGetData failed ");    }}CDB_ITDescriptor* CODBC_RowResult::GetImageOrTextDescriptor(int item_no,                                                            const string& cond){    char* buffer[128];    SQLSMALLINT slp;    switch(SQLColAttribute(m_Cmd, item_no+1,                           SQL_DESC_BASE_TABLE_NAME,                           (SQLPOINTER)buffer, sizeof(buffer),                           &slp, 0)) {    case SQL_SUCCESS_WITH_INFO:        m_Reporter.ReportErrors();    case SQL_SUCCESS:        break;    case SQL_ERROR:        m_Reporter.ReportErrors();        return 0;    default:        throw CDB_ClientEx(eDB_Error, 430027,                           "CODBC_*Result::GetImageOrTextDescriptor",                           "SQLColAttribute failed");    }    string base_table=(const char*)buffer;    switch(SQLColAttribute(m_Cmd, item_no+1,                           SQL_DESC_BASE_COLUMN_NAME,                           (SQLPOINTER)buffer, sizeof(buffer),                           &slp, 0)) {    case SQL_SUCCESS_WITH_INFO:        m_Reporter.ReportErrors();    case SQL_SUCCESS:        break;    case SQL_ERROR:        m_Reporter.ReportErrors();        return 0;    default:        throw CDB_ClientEx(eDB_Error, 430027,                           "CODBC_*Result::GetImageOrTextDescriptor",                           "SQLColAttribute failed");    }    string base_column=(const char*)buffer;    return new CDB_ITDescriptor(base_table, base_column, cond);}I_ITDescriptor* CODBC_RowResult::GetImageOrTextDescriptor(){    return (I_ITDescriptor*) GetImageOrTextDescriptor(m_CurrItem,                                                      "don't use me");}bool CODBC_RowResult::SkipItem(){    if ((unsigned int) m_CurrItem < m_NofCols) {        ++m_CurrItem;        return true;    }    return false;}CODBC_RowResult::~CODBC_RowResult(){    if (m_ColFmt) {        delete[] m_ColFmt;        m_ColFmt = 0;    }    if (!m_EOR)        SQLFreeStmt(m_Cmd, SQL_CLOSE);}/////////////////////////////////////////////////////////////////////////////////  CTL_ParamResult:://  CTL_StatusResult:://  CTL_CursorResult:://EDB_ResType CODBC_StatusResult::ResultType() const{    return eDB_StatusResult;}CODBC_StatusResult::~CODBC_StatusResult(){}EDB_ResType CODBC_ParamResult::ResultType() const{    return eDB_ParamResult;}CODBC_ParamResult::~CODBC_ParamResult(){}/////////////////////////////////////////////////////////////////////////////////  CODBC_CursorResult:://CODBC_CursorResult::CODBC_CursorResult(CODBC_LangCmd* cmd) :    m_Cmd(cmd), m_Res(0){    try {        m_Cmd->Send();		m_EOR= true;        while (m_Cmd->HasMoreResults()) {            m_Res = m_Cmd->Result();            if (m_Res && m_Res->ResultType() == eDB_RowResult) {				m_EOR= false;                return;            }            if (m_Res) {                while (m_Res->Fetch())                    ;                delete m_Res;                m_Res = 0;            }        }    } catch (CDB_Exception& ) {        throw CDB_ClientEx(eDB_Error, 422010,                           "CODBC_CursorResult::CODBC_CursorResult",                           "failed to get the results");    }}EDB_ResType CODBC_CursorResult::ResultType() const{    return eDB_CursorResult;}unsigned int CODBC_CursorResult::NofItems() const{    return m_Res? m_Res->NofItems() : 0;}const char* CODBC_CursorResult::ItemName(unsigned int item_num) const{    return m_Res ? m_Res->ItemName(item_num) : 0;}size_t CODBC_CursorResult::ItemMaxSize(unsigned int item_num) const{    return m_Res ? m_Res->ItemMaxSize(item_num) : 0;}EDB_Type CODBC_CursorResult::ItemDataType(unsigned int item_num) const{    return m_Res ? m_Res->ItemDataType(item_num) : eDB_UnsupportedType;}bool CODBC_CursorResult::Fetch(){	if(m_EOR) return false;	try {		if (m_Res && m_Res->Fetch()) return true;    } catch (CDB_Exception& ) {		delete m_Res;		m_Res= 0;	}    try {        // finish this command		m_EOR= true;        if(m_Res) {			delete m_Res;			while (m_Cmd->HasMoreResults()) {				m_Res = m_Cmd->Result();				if (m_Res) {					while (m_Res->Fetch())						;					delete m_Res;					m_Res = 0;				}			}		}        // send the another "fetch cursor_name" command        m_Cmd->Send();        while (m_Cmd->HasMoreResults()) {            m_Res = m_Cmd->Result();            if (m_Res && m_Res->ResultType() == eDB_RowResult) {				m_EOR= false;                return m_Res->Fetch();            }            if (m_Res) {                while (m_Res->Fetch())                    ;                delete m_Res;                m_Res = 0;            }        }    } catch (CDB_Exception& ) {        throw CDB_ClientEx(eDB_Error, 422011, "CODBC_CursorResult::Fetch",                           "Failed to fetch the results");    }    return false;}int CODBC_CursorResult::CurrentItemNo() const{    return m_Res ? m_Res->CurrentItemNo() : -1;}CDB_Object* CODBC_CursorResult::GetItem(CDB_Object* item_buff){    return m_Res ? m_Res->GetItem(item_buff) : 0;}size_t CODBC_CursorResult::ReadItem(void* buffer, size_t buffer_size,                                   bool* is_null){    if (m_Res) {        return m_Res->ReadItem(buffer, buffer_size, is_null);    }    if (is_null)        *is_null = true;    return 0;}I_ITDescriptor* CODBC_CursorResult::GetImageOrTextDescriptor(){    return m_Res ? m_Res->GetImageOrTextDescriptor() : 0;}bool CODBC_CursorResult::SkipItem(){    return m_Res ? m_Res->SkipItem() : false;}CODBC_CursorResult::~CODBC_CursorResult(){    if (m_Res)        delete m_Res;}END_NCBI_SCOPE/* * =========================================================================== * $Log: result.cpp,v $ * Revision 1000.3  2004/06/01 19:21:54  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12 * * Revision 1.12  2004/05/17 21:16:06  gorelenk * Added include of PCH ncbi_pch.hpp * * Revision 1.11  2004/01/30 20:00:39  soussov * fixes GetItem for CDB_Numeric * * Revision 1.10  2003/12/09 17:35:29  sapojnik * data sizes returned by SQLGetData() adjusted to fit within the buffer * * Revision 1.9  2003/12/09 15:42:15  sapojnik * CODBC_RowResult::ReadItem(): * was missing in *is_null=false; corrected * * Revision 1.8  2003/11/25 20:09:06  soussov * fixes bug in ReadItem: it did return the text/image size instead of number of bytes in buffer in some cases * * Revision 1.7  2003/05/08 20:30:24  soussov * CDB_LongChar CDB_LongBinary added * * Revision 1.6  2003/01/31 16:51:03  lavr * Remove unused variable "e" from catch() clause * * Revision 1.5  2003/01/06 16:59:20  soussov * sets m_CurrItem = -1 for all result types if no fetch was called * * Revision 1.4  2003/01/03 21:48:37  soussov * set m_CurrItem = -1 if fetch failes * * Revision 1.3  2003/01/02 21:05:35  soussov * SQL_BIGINT added in CODBC_RowResult::xLoadItem * * Revision 1.2  2002/07/05 15:15:10  soussov * fixes bug in ReadItem * * * =========================================================================== */

⌨️ 快捷键说明

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