Skip to content

Commit fcd57f6

Browse files
[Util] cardinality_gen prints sorted output.
Sort the output JSON table by subproblems.
1 parent 9a6cdb0 commit fcd57f6

File tree

1 file changed

+7
-17
lines changed

1 file changed

+7
-17
lines changed

src/cardinality_gen.cpp

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -349,24 +349,14 @@ void emit_cardinalities(std::ostream &out, const m::QueryGraph &G, const table_t
349349
m::Catalog &C = m::Catalog::Get();
350350
m::Database &DB = C.get_database_in_use();
351351

352+
std::vector<std::pair<Subproblem, double>> cardinalities{table.cbegin(), table.cend()};
353+
std::sort(cardinalities.begin(), cardinalities.end(), [](const auto &first, const auto &second) {
354+
return uint64_t(first.first) < uint64_t(second.first);
355+
});
356+
352357
out << "{\n \"" << DB.name << "\": [\n";
353358
bool first = true;
354-
const Subproblem All = Subproblem::All(G.num_sources());
355-
356-
/*----- Print singletons aka base relations. -----*/
357-
for (auto it = All.begin(); it != All.end(); ++it) {
358-
if (first) first = false;
359-
else out << ",\n";
360-
out << " { \"relations\": [\"" << G.sources()[*it]->name() << "\"], "
361-
<< "\"size\": " << table.at(it.as_set()) << "}";
362-
}
363-
364-
/*----- Print non-singletons. -----*/
365-
for (auto entry : table) {
366-
const Subproblem S = entry.first;
367-
if (S.is_singleton()) continue; // skip singleton
368-
const std::size_t size = entry.second;
369-
359+
for (auto [S, C] : cardinalities) {
370360
/*----- Emit relations. -----*/
371361
if (first) first = false;
372362
else out << ",\n";
@@ -377,7 +367,7 @@ void emit_cardinalities(std::ostream &out, const m::QueryGraph &G, const table_t
377367
out << '"' << DS->name() << '"';
378368
}
379369
/*----- Emit size. -----*/
380-
out << "], \"size\": " << size << "}";
370+
out << "], \"size\": " << std::size_t(C) << "}";
381371
}
382372
out << "\n ]\n}\n";
383373
}

0 commit comments

Comments
 (0)