Return TypeFunction nameArguments
hzEcodehdbIndexUkey::Select(unsigned int&,const hzAtom&,)

Declared in file: hzDatabase.h
Defined in file : hdbIndex.cpp

Function Logic:

0:START 1:Result 2:!m_bInit 3:Return E_NOINIT 4:key.IsNull() 5:Return hzerr(E_NODATA,No key supplied) 6:key.Type()!=m_eBasetype 7:Return hzerr(E_TYPE,Index type %s - supplied value type %s,Basetype2Txt(m_eBasetype),Basetype2Txt(key.Type())) 8:hzAtom::Show hzAtom::Str 9:m_eBasetype 10:BASETYPE_DOMAIN 11:hzAtom::Domain dom 12:dom 13:m_keys.pDom->Exists(dom) 14:hzMapS::operator[] Result

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