bool UnitRepoProxy::GetUnitStmt ::get(UnitEmitter& ue, const MD5& md5) { try { RepoTxn txn(m_repo); if (!prepared()) { std::stringstream ssSelect; ssSelect << "SELECT unitSn,preload,bc,data FROM " << m_repo.table(m_repoId, "Unit") << " WHERE md5 == @md5;"; txn.prepare(*this, ssSelect.str()); } RepoTxnQuery query(txn, *this); query.bindMd5("@md5", md5); query.step(); if (!query.row()) { return true; } int64_t unitSn; /**/ query.getInt64(0, unitSn); int preloadPriority; /**/ query.getInt(1, preloadPriority); const void* bc; size_t bclen; /**/ query.getBlob(2, bc, bclen); BlobDecoder dataBlob = /**/ query.getBlob(3); ue.m_repoId = m_repoId; ue.m_sn = unitSn; ue.m_preloadPriority = preloadPriority; ue.setBc(static_cast<const unsigned char*>(bc), bclen); ue.serdeMetaData(dataBlob); txn.commit(); } catch (RepoExc& re) { return true; } return false; }
bool UnitRepoProxy::GetUnitStmt ::get(UnitEmitter& ue, const MD5& md5) { try { RepoTxn txn(m_repo); if (!prepared()) { std::stringstream ssSelect; ssSelect << "SELECT unitSn,bc,bc_meta,mainReturn,mergeable,lines FROM " << m_repo.table(m_repoId, "Unit") << " WHERE md5 == @md5;"; txn.prepare(*this, ssSelect.str()); } RepoTxnQuery query(txn, *this); query.bindMd5("@md5", md5); query.step(); if (!query.row()) { return true; } int64 unitSn; /**/ query.getInt64(0, unitSn); const void* bc; size_t bclen; /**/ query.getBlob(1, bc, bclen); const void* bc_meta; size_t bc_meta_len; /**/ query.getBlob(2, bc_meta, bc_meta_len); TypedValue value; /**/ query.getTypedValue(3, value); bool mergeable; /**/ query.getBool(4, mergeable); BlobDecoder linesBlob = /**/ query.getBlob(5); ue.setRepoId(m_repoId); ue.setSn(unitSn); ue.setBc((const uchar*)bc, bclen); ue.setBcMeta((const uchar*)bc_meta, bc_meta_len); value._count = mergeable; ue.setMainReturn(&value); LineTable lines; linesBlob(lines); ue.setLines(lines); txn.commit(); } catch (RepoExc& re) { return true; } return false; }