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.m_sn); do { query.step(); if (query.row()) { Id arrayId; /**/ query.getId(0, arrayId); std::string key; /**/ query.getStdString(1, key); Variant v = unserialize_from_buffer(key.data(), key.size()); Id id UNUSED = ue.mergeArray( v.asArrRef().get(), ArrayData::GetScalarArrayKey(key.c_str(), key.size())); assert(id == arrayId); } } while (!query.done()); txn.commit(); }
static Variant unserialize_if_serialized(const char *payload, size_t payload_len, uint32_t flags) { Variant ret = uninit_null(); if (flags & MMC_SERIALIZED) { ret = unserialize_from_buffer(payload, payload_len); } else { ret = String(payload, payload_len, CopyString); } return ret; }
void ArrayUtil::InitScalarArrays(Array arrs[], int nArrs, const char *scalarArrayData, int scalarArrayDataSize) { int len = scalarArrayDataSize; char *uncompressed = gzdecode(scalarArrayData, len); if (uncompressed == nullptr) { throw Exception("Bad scalarArrayData %p", scalarArrayData); } Variant v(unserialize_from_buffer(uncompressed, len)); assert(v.isArray()); Array scalarArrays = v; assert(scalarArrays.size() == nArrs); for (int i = 0; i < nArrs; i++) { arrs[i] = scalarArrays[i]; arrs[i].setEvalScalar(); } }
Variant static memcache_fetch_from_storage(const char *payload, size_t payload_len, uint32_t flags) { Variant ret = uninit_null(); if (flags & MMC_COMPRESSED) { raise_warning("Unable to handle compressed values yet"); return uninit_null(); } if (flags & MMC_SERIALIZED) { ret = unserialize_from_buffer(payload, payload_len); } else { ret = String(payload, payload_len, CopyString); } return ret; }