void PreClassRepoProxy::GetPreClassesStmt ::get(UnitEmitter& ue) { RepoTxn txn(m_repo); if (!prepared()) { std::stringstream ssSelect; ssSelect << "SELECT preClassId,name,hoistable,extraData FROM " << m_repo.table(m_repoId, "PreClass") << " WHERE unitSn == @unitSn ORDER BY preClassId ASC;"; txn.prepare(*this, ssSelect.str()); } RepoTxnQuery query(txn, *this); query.bindInt64("@unitSn", ue.sn()); do { query.step(); if (query.row()) { Id preClassId; /**/ query.getId(0, preClassId); StringData* name; /**/ query.getStaticString(1, name); int hoistable; /**/ query.getInt(2, hoistable); BlobDecoder extraBlob = /**/ query.getBlob(3); PreClassEmitter* pce = ue.newPreClassEmitter( name, (PreClass::Hoistable)hoistable); pce->serdeMetaData(extraBlob); if (!SystemLib::s_inited) { assert(pce->attrs() & AttrPersistent); assert(pce->attrs() & AttrUnique); } assert(pce->id() == preClassId); } } while (!query.done()); txn.commit(); }
void UnitRepoProxy::GetUnitArraysStmt ::get(UnitEmitter& ue) { RepoTxn txn(m_repo); if (!prepared()) { std::stringstream ssSelect; ssSelect << "SELECT arrayId,array FROM " << m_repo.table(m_repoId, "UnitArray") << " WHERE unitSn == @unitSn ORDER BY arrayId ASC;"; txn.prepare(*this, ssSelect.str()); } RepoTxnQuery query(txn, *this); query.bindInt64("@unitSn", ue.sn()); do { query.step(); if (query.row()) { Id arrayId; /**/ query.getId(0, arrayId); StringData* array; /**/ query.getStaticString(1, array); String s(array); Variant v = f_unserialize(s); Id id UNUSED = ue.mergeArray(v.asArrRef().get(), array); ASSERT(id == arrayId); } } while (!query.done()); txn.commit(); }
void FuncRepoProxy::GetFuncsStmt ::get(UnitEmitter& ue) { RepoTxn txn(m_repo); if (!prepared()) { std::stringstream ssSelect; ssSelect << "SELECT funcSn,preClassId,name,top,extraData " "FROM " << m_repo.table(m_repoId, "Func") << " WHERE unitSn == @unitSn ORDER BY funcSn ASC;"; txn.prepare(*this, ssSelect.str()); } RepoTxnQuery query(txn, *this); query.bindInt64("@unitSn", ue.sn()); do { query.step(); if (query.row()) { int funcSn; /**/ query.getInt(0, funcSn); Id preClassId; /**/ query.getId(1, preClassId); StringData* name; /**/ query.getStaticString(2, name); bool top; /**/ query.getBool(3, top); BlobDecoder extraBlob = /**/ query.getBlob(4); FuncEmitter* fe; if (preClassId < 0) { fe = ue.newFuncEmitter(name); } else { PreClassEmitter* pce = ue.pce(preClassId); fe = ue.newMethodEmitter(name, pce); bool added UNUSED = pce->addMethod(fe); assert(added); } assert(fe->sn() == funcSn); fe->setTop(top); fe->serdeMetaData(extraBlob); if (!SystemLib::s_inited && !fe->isPseudoMain()) { assert(fe->attrs() & AttrBuiltin); if (preClassId < 0) { assert(fe->attrs() & AttrPersistent); assert(fe->attrs() & AttrUnique); assert(fe->attrs() & AttrSkipFrame); } } fe->setEhTabIsSorted(); fe->finish(fe->past(), true); ue.recordFunction(fe); } } while (!query.done()); txn.commit(); }
void UnitRepoProxy::GetUnitLitstrsStmt ::get(UnitEmitter& ue) { RepoTxn txn(m_repo); if (!prepared()) { std::stringstream ssSelect; ssSelect << "SELECT litstrId,litstr FROM " << m_repo.table(m_repoId, "UnitLitstr") << " WHERE unitSn == @unitSn ORDER BY litstrId ASC;"; txn.prepare(*this, ssSelect.str()); } RepoTxnQuery query(txn, *this); query.bindInt64("@unitSn", ue.sn()); do { query.step(); if (query.row()) { Id litstrId; /**/ query.getId(0, litstrId); StringData* litstr; /**/ query.getStaticString(1, litstr); Id id UNUSED = ue.mergeLitstr(litstr); ASSERT(id == litstrId); } } while (!query.done()); txn.commit(); }
void UnitRepoProxy::GetUnitPreConstsStmt ::get(UnitEmitter& ue) { RepoTxn txn(m_repo); if (!prepared()) { std::stringstream ssSelect; ssSelect << "SELECT name,value,preconstId FROM " << m_repo.table(m_repoId, "UnitPreConst") << " WHERE unitSn == @unitSn ORDER BY preConstId ASC;"; txn.prepare(*this, ssSelect.str()); } RepoTxnQuery query(txn, *this); query.bindInt64("@unitSn", ue.sn()); do { query.step(); if (query.row()) { StringData* name; /**/ query.getStaticString(0, name); TypedValue value; /**/ query.getTypedValue(1, value); Id id; /**/ query.getId(2, id); UNUSED Id addedId = ue.addPreConst(name, value); ASSERT(id == addedId); } } while (!query.done()); txn.commit(); }