void MTable::fieldStruct( TConfig &cfg ) { if(tblStrct.empty()) throw TError(nodePath().c_str(), _("Table is empty.")); mLstUse = SYS->sysTm(); for(unsigned i_fld = 1; i_fld < tblStrct.size(); i_fld++) { string sid = tblStrct[i_fld][1]; if(cfg.cfgPresent(sid)) continue; int flg = (tblStrct[i_fld][5] == "1") ? (int)TCfg::Key : (int)TFld::NoFlag; if(tblStrct[i_fld][2] == "TEXT") cfg.elem().fldAdd(new TFld(sid.c_str(),sid.c_str(),TFld::String,flg,"16777215")); else if(tblStrct[i_fld][2] == "INTEGER") cfg.elem().fldAdd(new TFld(sid.c_str(),sid.c_str(),TFld::Integer,flg)); else if(tblStrct[i_fld][2] == "REAL" || tblStrct[i_fld][2] == "DOUBLE") cfg.elem().fldAdd(new TFld(sid.c_str(),sid.c_str(),TFld::Real,flg)); } }
void MTable::fieldStruct( TConfig &cfg ) { MtxAlloc resource(owner().connRes, true); if(!owner().enableStat()) return; LDAPMessage *result, *entry; if(ldap_search_s(owner().ldp,("ou="+name()+","+owner().bdn).c_str(),LDAP_SCOPE_ONE,NULL,NULL,0,&result) != LDAP_SUCCESS) return; for(entry = ldap_first_entry(owner().ldp,result); entry; entry = ldap_next_entry(owner().ldp,entry)) { char *chDN, *a, **vals; //Use the DN for key attribute detection if(!(chDN=ldap_get_dn(owner().ldp,entry))) continue; string keyA = TSYS::strParse(TSYS::strParse(chDN,0,","),0,"="); ldap_memfree(chDN); BerElement *ber; for(a = ldap_first_attribute(owner().ldp,entry,&ber); a != NULL; a = ldap_next_attribute(owner().ldp,entry,ber)) { //!! May be read the attribute properties from the schema cfg.elem().fldAdd(new TFld(a,a,TFld::String,(keyA==a)?(int)TCfg::Key:(int)TFld::NoFlag)); ldap_memfree(a); } } ldap_msgfree(result); }