📄 result.cpp
字号:
"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 + -