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))); } } }
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; }
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; }
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; }
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; }