MojErr MojDb::updateLocale(const MojChar* locale, MojDbReqRef req) { MojAssert(locale); MojLogTrace(s_log); MojErr err = beginReq(req, true); MojErrCheck(err); MojString oldLocale; err = getLocale(oldLocale, req); MojErrCheck(err); MojString newLocale; err = newLocale.assign(locale); MojErrCheck(err); MojErr updateErr = err = updateLocaleImpl(oldLocale, newLocale, req); MojErrCatchAll(err) { err = req->abort(); MojErrCheck(err); err = m_kindEngine.close(); MojErrCheck(err); MojDbReq openReq; err = beginReq(openReq, true); MojErrCheck(err); err = m_kindEngine.open(this, openReq); MojErrCheck(err); err = openReq.end(); MojErrCheck(err); MojErrThrow(updateErr); } return MojErrNone; }
MojErr MojDb::updateLocaleImpl(const MojString& oldLocale, const MojString& newLocale, MojDbReq& req) { if (oldLocale != newLocale) { MojErr err = m_kindEngine.updateLocale(newLocale, req); MojErrCheck(err); err = updateState(LocaleKey, newLocale, req); MojErrCheck(err); } MojErr err = req.end(); MojErrCheck(err); return MojErrNone; }
MojErr MojDb::putConfig(MojObject* begin, const MojObject* end, MojDbReq& req, MojDbPutHandler& handler) { MojAssert(begin || begin == end); MojAssert(end >= begin); MojLogTrace(s_log); MojErr err = beginReq(req, true); MojErrCheck(err); for (MojObject* i = begin; i != end; ++i) { err = handler.put(*i, req); MojErrCheck(err); } err = req.end(); MojErrCheck(err); return MojErrNone; }
MojErr MojDb::drop(const MojChar* path) { MojAssert(path); MojLogTrace(s_log); MojErr err = requireOpen(); MojErrCheck(err); MojDbReq req; err = req.begin(this, true); MojErrCheck(err); err = m_storageEngine->drop(path, req.txn()); MojErrCheck(err); err = req.end(); MojErrCheck(err); err = close(); MojErrCheck(err); return MojErrNone; }
MojErr MojDb::open(const MojChar* path, MojDbStorageEngine* engine) { MojAssert(path); MojLogTrace(s_log); MojErr err = requireNotOpen(); MojErrCheck(err); MojLogInfo(s_log, _T("opening: '%s'..."), path); MojAutoCloser<MojDb> closer(this); m_isOpen = true; // check the database version number and bail if there's a mismatch err = checkDbVersion(path); MojErrCheck(err); // engine if (engine == NULL) { err = createEngine(); MojErrCheck(err); MojAssert(m_storageEngine.get()); err = m_storageEngine->configure(m_conf); MojErrCheck(err); err = m_storageEngine->open(path); MojErrCheck(err); } else { m_storageEngine.reset(engine); } MojDbReq req; err = req.begin(this, true); MojErrCheck(err); // db MojLogInfo(s_log, _T("Open Database: '%s'"), ObjDbName); err = m_storageEngine->openDatabase(ObjDbName, req.txn(), m_objDb); MojErrCheck(err); MojAssert(m_objDb.get()); // seq MojLogInfo(s_log, _T("Open Database: '%s'"), IdSeqName); err = m_storageEngine->openSequence(IdSeqName, req.txn(), m_idSeq); MojErrCheck(err); MojAssert(m_idSeq.get()); // kinds MojLogInfo(s_log, _T("Open Kind Engine")); err = m_kindEngine.open(this, req); MojLogInfo(s_log, _T("Kind Opened...")); MojErrCheck(err); // perms MojLogInfo(s_log, _T("Open Permissions")); err = m_permissionEngine.open(m_conf, this, req); MojErrCheck(err); // quota err = m_quotaEngine.open(m_conf, this, req); MojErrCheck(err); err = req.end(); MojErrCheck(err); // idgen err = m_idGenerator.init(); MojErrCheck(err); closer.release(); MojLogInfo(s_log, _T("open completed")); return MojErrNone; }