@@ -349,24 +349,14 @@ void emit_cardinalities(std::ostream &out, const m::QueryGraph &G, const table_t
349
349
m::Catalog &C = m::Catalog::Get ();
350
350
m::Database &DB = C.get_database_in_use ();
351
351
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
+
352
357
out << " {\n \" " << DB.name << " \" : [\n " ;
353
358
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) {
370
360
/* ----- Emit relations. -----*/
371
361
if (first) first = false ;
372
362
else out << " ,\n " ;
@@ -377,7 +367,7 @@ void emit_cardinalities(std::ostream &out, const m::QueryGraph &G, const table_t
377
367
out << ' "' << DS->name () << ' "' ;
378
368
}
379
369
/* ----- Emit size. -----*/
380
- out << " ], \" size\" : " << size << " }" ;
370
+ out << " ], \" size\" : " << std::size_t (C) << " }" ;
381
371
}
382
372
out << " \n ]\n }\n " ;
383
373
}
0 commit comments