| Return Type | Function name | Arguments |
|---|---|---|
| hzEcode | hdbIndexUkey::Select | (unsigned int&,const hzAtom&,) |
Declared in file: hzDatabase.h
Defined in file : hdbIndex.cpp
Function Logic:
Function body:
hzEcode hdbIndexUkey::Select (unsigned int& Result, const hzAtom& key)
{
_hzfunc("hdbIndexUkey::Select") ;
hzString str ;
hzDomain dom ;
hzEmaddr ema ;
hzUrl url ;
hzEcode rc = E_OK ;
Result = 0;
if (!m_bInit)
return E_NOINIT ;
if (key.IsNull())
return hzerr(E_NODATA, "No key supplied") ;
if (key.Type() != m_eBasetype)
return hzerr(E_TYPE, "Index type %s - supplied value type %s", Basetype2Txt(m_eBasetype), Basetype2Txt(key.Type())) ;
threadLog("Selecting [%s, %s]\n", key.Show(), *key.Str()) ;
switch (m_eBasetype)
{
case BASETYPE_DOMAIN: dom = _hzGlobal_setDomains[key.Domain()] ;
if (dom)
{
if (m_keys.pDom->Exists(dom))
Result = m_keys.pDom->operator[](dom) ;
}
break ;
case BASETYPE_EMADDR: ema = _hzGlobal_setEmaddrs[key.Emaddr()] ;
if (ema)
{
if (m_keys.pEma->Exists(ema))
Result = m_keys.pEma->operator[](ema) ;
}
break ;
case BASETYPE_URL: url = key.Url() ;
if (url)
{
if (m_keys.pUrl->Exists(url))
Result = m_keys.pUrl->operator[](url) ;
}
break ;
case BASETYPE_STRING: str = _hzGlobal_setStrings[key.Str()] ;
threadLog("Selecting [%s]\n", *str) ;
if (!str)
str = key.Str() ;
if (str)
{
if (m_keys.pStr->Exists(str))
{
Result = m_keys.pStr->operator[](str) ;
threadLog("Selected %u\n", Result) ;
}
else
threadLog("Select failed\n") ;
}
break ;
case BASETYPE_DOUBLE:
case BASETYPE_XDATE:
case BASETYPE_INT64:
case BASETYPE_UINT64:
if (m_keys.pUI64->Exists(key.Unt64()))
Result = m_keys.pUI64->operator[](key.Unt64()) ;
break ;
case BASETYPE_IPADDR:
case BASETYPE_TIME:
case BASETYPE_SDATE:
case BASETYPE_INT32:
case BASETYPE_UINT32: if (m_keys.pUI32->Exists(key.Unt32()))
Result = m_keys.pUI32->operator[](key.Unt32()) ;
break ;
} ;
return rc ;
}