TEST(AdminPolicyParser, parse0) { auto input = std::make_shared<std::stringstream>(); Cynara::CynaraAdminPolicies expectedPolicies; expectedPolicies.seal(); auto policies = Cynara::AdminPolicyParser::parse(*input, translatePolicy); ASSERT_TRUE(policies.sealed()); ASSERT_THAT(policies.data(), AdmPolicyListEq(expectedPolicies.data())); }
void RowStoreScanProcessor::process() { for (auto i = pageIdx; i < pageEndIdx; ++i) { for (auto& ptr : *pages[i]) { processMainRecord(&ptr); } } for (auto insIter = logIter; insIter != logEnd; ++insIter) { if (!insIter->sealed()) { continue; } processInsertRecord(reinterpret_cast<const InsertLogEntry*>(insIter->data())); } }
TEST(AdminPolicyParser, parse1) { auto input = std::make_shared<std::stringstream>(); *input << "b;c;u;p;0;m" << std::endl; Cynara::CynaraAdminPolicies expectedPolicies; expectedPolicies.add("b", { 0, "m" }, { "c", "u", "p" }); expectedPolicies.seal(); auto policies = Cynara::AdminPolicyParser::parse(*input, translatePolicy); ASSERT_TRUE(policies.sealed()); ASSERT_THAT(policies.data(), AdmPolicyListEq(expectedPolicies.data())); }
TEST(AdminPolicyParser, parse2) { auto input = std::make_shared<std::stringstream>(); *input << "b1;c1;u1;p1;0;m1" << std::endl; *input << "b2;c2;u2;p2;0;m2" << std::endl; Cynara::CynaraAdminPolicies expectedPolicies; expectedPolicies.add("b1", { 0, "m1" }, { "c1", "u1", "p1" }); expectedPolicies.add("b2", { 0, "m2" }, { "c2", "u2", "p2" }); expectedPolicies.seal(); auto policies = Cynara::AdminPolicyParser::parse(*input, translatePolicy); ASSERT_TRUE(policies.sealed()); ASSERT_THAT(policies.data(), AdmPolicyListEq(expectedPolicies.data())); }
void ColumnMapScanProcessor::process() { for (auto i = pageIdx; i < pageEndIdx; ++i) { processMainPage(pages[i], 0, pages[i]->count); } auto insIter = logIter; while (insIter != logEnd) { if (!insIter->sealed()) { ++insIter; continue; } auto ptr = reinterpret_cast<const InsertLogEntry*>(insIter->data()); ConstInsertRecord record(ptr); if (!record.valid()) { ++insIter; continue; } if (auto relocated = reinterpret_cast<const ColumnMapMainEntry*>(newestMainRecord(record.newest()))) { auto relocatedPage = mContext.pageFromEntry(relocated); auto relocatedStartIdx = ColumnMapContext::pageIndex(relocatedPage, relocated); auto relocatedEndIdx = relocatedStartIdx; for (++insIter; insIter != logEnd; ++insIter) { if (!insIter->sealed()) { continue; } ptr = reinterpret_cast<const InsertLogEntry*>(insIter->data()); record = ConstInsertRecord(ptr); relocated = reinterpret_cast<const ColumnMapMainEntry*>(newestMainRecord(record.newest())); if (relocated) { if (mContext.pageFromEntry(relocated) != relocatedPage) { break; } relocatedEndIdx = ColumnMapContext::pageIndex(relocatedPage, relocated); } else if (!record.valid()) { continue; } else { break; } } auto relocatedEntries = relocatedPage->entryData(); auto key = relocatedEntries[relocatedEndIdx].key; for (++relocatedEndIdx; relocatedEndIdx < relocatedPage->count && relocatedEntries[relocatedEndIdx].key == key; ++relocatedEndIdx); processMainPage(relocatedPage, relocatedStartIdx, relocatedEndIdx); continue; } auto validTo = std::numeric_limits<uint64_t>::max(); if (record.newest() != 0u) { auto lowestVersion = processUpdateRecord(reinterpret_cast<const UpdateLogEntry*>(record.newest()), record.baseVersion(), validTo); if (ptr->version >= lowestVersion) { ++insIter; continue; } } auto entry = LogEntry::entryFromData(reinterpret_cast<const char*>(ptr)); processRowRecord(ptr->key, ptr->version, validTo, ptr->data(), entry->size() - sizeof(InsertLogEntry)); ++insIter; } }