void Repo::saveGlobalData(GlobalData newData) { s_globalData = newData; auto const repoId = repoIdForNewUnit(UnitOrigin::File); RepoStmt stmt(*this); stmt.prepare( folly::format( "INSERT INTO {} VALUES(@data);", table(repoId, "GlobalData") ).str() ); RepoTxn txn(*this); RepoTxnQuery query(txn, stmt); BlobEncoder encoder; encoder(s_globalData); query.bindBlob("@data", encoder, /* static */ true); query.exec(); // TODO(#3521039): we could just put the litstr table in the same // blob as the above and delete LitstrRepoProxy. LitstrTable::get().forEachNamedEntity( [this, &txn, repoId](int i, const NamedEntityPair& namedEntity) { lsrp().insertLitstr(repoId).insert(txn, i, namedEntity.first); }); txn.commit(); }
void Repo::commitMd5(UnitOrigin unitOrigin, UnitEmitter* ue) { try { RepoTxn txn(*this); bool err = insertMd5(unitOrigin, ue, txn); if (!err) { txn.commit(); } } catch(RepoExc& re) { int repoId = repoIdForNewUnit(unitOrigin); if (repoId != RepoIdInvalid) { TRACE(3, "Failed to commit md5 for '%s' to '%s': %s\n", ue->m_filepath->data(), repoName(repoId).c_str(), re.msg().c_str()); } } }
bool Repo::insertMd5(UnitOrigin unitOrigin, UnitEmitter* ue, RepoTxn& txn) { const StringData* path = ue->m_filepath; const MD5& md5 = ue->md5(); int repoId = repoIdForNewUnit(unitOrigin); if (repoId == RepoIdInvalid) { return true; } try { m_insertFileHash[repoId].insert(txn, path, md5); return false; } catch(RepoExc& re) { TRACE(3, "Failed to commit md5 for '%s' to '%s': %s\n", path->data(), repoName(repoId).c_str(), re.msg().c_str()); return true; } }