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

📄 cursor.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
bool CTDS_CursorCmd::Close(){    if (!m_IsOpen)        return false;    if (m_Res) {        delete m_Res;        m_Res = 0;    }    if (m_LCmd)        delete m_LCmd;    if (m_IsOpen) {        string buff = "close " + m_Name;        m_LCmd = 0;        try {            m_LCmd = m_Connect->LangCmd(buff);            m_LCmd->Send();            m_LCmd->DumpResults();#if 0            while (m_LCmd->HasMoreResults()) {                CDB_Result* r = m_LCmd->Result();                if (r) {                    while (r->Fetch())                        ;                    delete r;                }            }#endif            delete m_LCmd;        } catch (CDB_Exception& e) {            if (m_LCmd)                delete m_LCmd;            m_LCmd = 0;            throw CDB_ClientEx(eDB_Error, 222003, "CTDS_CursorCmd::Close",                               "failed to close cursor");        }        m_IsOpen = false;        m_LCmd = 0;    }    if (m_IsDeclared) {        string buff = "deallocate " + m_Name;        m_LCmd = 0;        try {            m_LCmd = m_Connect->LangCmd(buff);            m_LCmd->Send();            m_LCmd->DumpResults();#if 0            while (m_LCmd->HasMoreResults()) {                CDB_Result* r = m_LCmd->Result();                if (r) {                    while (r->Fetch())                        ;                    delete r;                }            }#endif            delete m_LCmd;        } catch (CDB_Exception& e) {            if (m_LCmd)                delete m_LCmd;            m_LCmd = 0;            throw CDB_ClientEx(eDB_Error, 222003, "CTDS_CursorCmd::Close",                               "failed to deallocate cursor");        }        m_IsDeclared = false;        m_LCmd = 0;    }    return true;}void CTDS_CursorCmd::Release(){    m_BR = 0;    if (m_IsOpen) {        Close();        m_IsOpen = false;    }    m_Connect->DropCmd(*this);    delete this;}CTDS_CursorCmd::~CTDS_CursorCmd(){    if (m_BR)        *m_BR = 0;    if (m_IsOpen)        Close();}bool CTDS_CursorCmd::x_AssignParams(){    static const char s_hexnum[] = "0123456789ABCDEF";    for (unsigned int n = 0; n < m_Params.NofParams(); n++) {        const string& name = m_Params.GetParamName(n);        if (name.empty())            continue;        CDB_Object& param = *m_Params.GetParam(n);        char val_buffer[16*1024];        if (!param.IsNULL()) {            switch (param.GetType()) {            case eDB_Int: {                CDB_Int& val = dynamic_cast<CDB_Int&> (param);                sprintf(val_buffer, "%d", val.Value());                break;            }            case eDB_SmallInt: {                CDB_SmallInt& val = dynamic_cast<CDB_SmallInt&> (param);                sprintf(val_buffer, "%d", (int) val.Value());                break;            }            case eDB_TinyInt: {                CDB_TinyInt& val = dynamic_cast<CDB_TinyInt&> (param);                sprintf(val_buffer, "%d", (int) val.Value());                break;            }            case eDB_BigInt: {                CDB_BigInt& val = dynamic_cast<CDB_BigInt&> (param);                Int8 v8 = val.Value();                sprintf(val_buffer, "%lld", v8);                break;            }            case eDB_Char: {                CDB_Char& val = dynamic_cast<CDB_Char&> (param);                const char* c = val.Value(); // NB: 255 bytes at most                size_t i = 0;                val_buffer[i++] = '\'';                while (*c) {                    if (*c == '\'')                        val_buffer[i++] = '\'';                    val_buffer[i++] = *c++;                }                val_buffer[i++] = '\'';                val_buffer[i] = '\0';                break;            }            case eDB_VarChar: {                CDB_VarChar& val = dynamic_cast<CDB_VarChar&> (param);                const char* c = val.Value(); // NB: 255 bytes at most                size_t i = 0;                val_buffer[i++] = '\'';                while (*c) {                    if (*c == '\'')                        val_buffer[i++] = '\'';                    val_buffer[i++] = *c++;                }                val_buffer[i++] = '\'';                val_buffer[i] = '\0';                break;            }            case eDB_LongChar: {                CDB_LongChar& val = dynamic_cast<CDB_LongChar&> (param);                const char* c = val.Value(); // NB: 255 bytes at most                size_t i = 0;                val_buffer[i++] = '\'';                while (*c && (i < sizeof(val_buffer) - 2)) {                    if (*c == '\'')                        val_buffer[i++] = '\'';                    val_buffer[i++] = *c++;                }				if(*c != '\0') return false;                 val_buffer[i++] = '\'';                val_buffer[i] = '\0';                break;            }            case eDB_Binary: {                CDB_Binary& val = dynamic_cast<CDB_Binary&> (param);                const unsigned char* c = (const unsigned char*) val.Value();                size_t i = 0, size = val.Size();                val_buffer[i++] = '0';                val_buffer[i++] = 'x';                for (size_t j = 0; j < size; j++) {                    val_buffer[i++] = s_hexnum[c[j] >> 4];                    val_buffer[i++] = s_hexnum[c[j] & 0x0F];                }                val_buffer[i++] = '\0';                break;            }            case eDB_VarBinary: {                CDB_VarBinary& val = dynamic_cast<CDB_VarBinary&> (param);                const unsigned char* c = (const unsigned char*) val.Value();                size_t i = 0, size = val.Size();                val_buffer[i++] = '0';                val_buffer[i++] = 'x';                for (size_t j = 0; j < size; j++) {                    val_buffer[i++] = s_hexnum[c[j] >> 4];                    val_buffer[i++] = s_hexnum[c[j] & 0x0F];                }                val_buffer[i++] = '\0';                break;            }            case eDB_LongBinary: {                CDB_LongBinary& val = dynamic_cast<CDB_LongBinary&> (param);                const unsigned char* c = (const unsigned char*) val.Value();                size_t i = 0, size = val.DataSize();				if(size*2 > sizeof(val_buffer) - 4) return false;                val_buffer[i++] = '0';                val_buffer[i++] = 'x';                for (size_t j = 0; j < size; j++) {                    val_buffer[i++] = s_hexnum[c[j] >> 4];                    val_buffer[i++] = s_hexnum[c[j] & 0x0F];                }                val_buffer[i++] = '\0';                break;            }            case eDB_Float: {                CDB_Float& val = dynamic_cast<CDB_Float&> (param);                sprintf(val_buffer, "%E", (double) val.Value());                break;            }            case eDB_Double: {                CDB_Double& val = dynamic_cast<CDB_Double&> (param);                sprintf(val_buffer, "%E", val.Value());                break;            }            case eDB_SmallDateTime: {                CDB_SmallDateTime& val =                    dynamic_cast<CDB_SmallDateTime&> (param);                string t = val.Value().AsString("M/D/Y h:m");                sprintf(val_buffer, "'%s'", t.c_str());                break;            }            case eDB_DateTime: {                CDB_DateTime& val =                    dynamic_cast<CDB_DateTime&> (param);                string t = val.Value().AsString("M/D/Y h:m:s");                sprintf(val_buffer, "'%s:%.3d'", t.c_str(),			(int)(val.Value().NanoSecond()/1000000));                break;            }            default:                return false;            }        } else            strcpy(val_buffer, "NULL");        // substitute the param        g_SubstituteParam(m_Query, name, val_buffer);    }    return true;}END_NCBI_SCOPE/* * =========================================================================== * $Log: cursor.cpp,v $ * Revision 1000.1  2004/06/01 19:20:49  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.11 * * Revision 1.11  2004/05/17 21:13:37  gorelenk * Added include of PCH ncbi_pch.hpp * * Revision 1.10  2003/06/05 16:01:40  soussov * adds code for DumpResults and for the dumped results processing * * Revision 1.9  2003/04/29 21:15:03  soussov * new datatypes CDB_LongChar and CDB_LongBinary added * * Revision 1.8  2003/02/28 23:27:24  soussov * fixes double quote bug in char/varchar parameters substitute * * Revision 1.7  2002/12/03 19:18:58  soussov * adopting the TDS8 cursors * * Revision 1.6  2002/05/16 21:36:45  soussov * fixes the memory leak in text/image processing * * Revision 1.5  2002/03/26 15:35:10  soussov * new image/text operations added * * Revision 1.4  2001/12/18 19:29:08  soussov * adds conversion from nanosecs to milisecs for datetime args * * Revision 1.3  2001/12/18 17:56:38  soussov * copy-paste bug in datetime processing fixed * * 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 + -