コード例 #1
0
ファイル: stmt_impl.cpp プロジェクト: swuecho/igblast
void CStatement::SetParam(const CVariant& v,
                          const CDBParamVariant& param)
{
    if (param.IsPositional()) {
        if (!m_params.empty()) {
            NCBI_DBAPI_THROW("Binding by position is prohibited if any parameter was bound by name.");
        }
        if (m_posParams.size() < param.GetPosition())
            m_posParams.resize(param.GetPosition());
        CVariant*& var = m_posParams[param.GetPosition() - 1];
        if (var)
            *var = v;
        else
            var = new CVariant(v);
    } else {
        if (!m_posParams.empty()) {
            NCBI_DBAPI_THROW("Binding by name is prohibited if any parameter was bound by position.");
        }
        const string name = param.GetName();
        ParamList::iterator i = m_params.find(name);
        if( i != m_params.end() ) {
            *((*i).second) = v;
        }
        else {
            m_params.insert(make_pair(name, new CVariant(v)));
        }
    }
}
コード例 #2
0
ファイル: cstmt_impl.cpp プロジェクト: DmitrySigaev/ncbi
void CCallableStatement::SetParam(const CVariant& v,
                  const CDBParamVariant& param)
{
    if (param.IsPositional()) {
        // Decrement position by ONE.
        GetRpcCmd()->GetBindParams().Set(param.GetPosition() - 1, v.GetData());
    } else {
        GetRpcCmd()->GetBindParams().Set(param, v.GetData());
    }
}
コード例 #3
0
ファイル: bulkinsert.cpp プロジェクト: DmitrySigaev/ncbi
void CDBAPIBulkInsert::Bind(const CDBParamVariant& param, CVariant* v)
{
    // GetBCPInCmd()->GetBindParams().Bind(col - 1, v->GetData());

    if (param.IsPositional()) {
        // Decrement position by ONE.
        GetBCPInCmd()->GetBindParams().Bind(param.GetPosition() - 1, v->GetData());
    } else {
        GetBCPInCmd()->GetBindParams().Bind(param, v->GetData());
    }
}
コード例 #4
0
unsigned int 
CCachedRowInfo::GetIndex(const CDBParamVariant& param) const
{
    if (!IsInitialized()) {
        Initialize();
    }

    if (param.IsPositional()) {
        return param.GetPosition();
    } else {
        return FindParamPosInternal(param.GetName());
    }

    DATABASE_DRIVER_ERROR("Parameter name not found.", 1);

    return 0;
}
コード例 #5
0
CDBParams::EDirection 
CCachedRowInfo::GetDirection(const CDBParamVariant& param) const
{
    if (!IsInitialized()) {
        Initialize();
    }

    if (param.IsPositional()) {
        unsigned int num = param.GetPosition();

        if (num < GetNumInternal()) {
            return m_Info[num].m_Direction;
        }
    } else {
        return m_Info[FindParamPosInternal(param.GetName())].m_Direction;
    }

    return eOut;
}
コード例 #6
0
EDB_Type 
CCachedRowInfo::GetDataType(const CDBParamVariant& param) const
{
    if (!IsInitialized()) {
        Initialize();
    }

    if (param.IsPositional()) {
        unsigned int num = param.GetPosition();

        if (num < GetNumInternal()) {
            return m_Info[num].m_DataType;
        }
    } else {
        return m_Info[FindParamPosInternal(param.GetName())].m_DataType;
    }

    return eDB_UnsupportedType;
}
コード例 #7
0
size_t 
CCachedRowInfo::GetMaxSize(const CDBParamVariant& param) const
{
    if (!IsInitialized()) {
        Initialize();
    }

    if (param.IsPositional()) {
        unsigned int num = param.GetPosition();

        if (num < GetNumInternal()) {
            return m_Info[num].m_MaxSize;
        }
    } else {
        return m_Info[FindParamPosInternal(param.GetName())].m_MaxSize;
    }

    return 0;
}