31 for(
const auto &i : sources) {
44 auto result = source->analyze(stats, jobStageId);
47 physicalPlanToOutput.insert(physicalPlanToOutput.end(),
48 result->physicalPlanToOutput.begin(),
49 result->physicalPlanToOutput.end());
52 interGlobalSets.insert(interGlobalSets.end(),
53 result->interGlobalSets.begin(),
54 result->interGlobalSets.end());
60 jobStageId += result->physicalPlanToOutput.size();
63 for(
auto &it : result->createdSourceComputations) {
68 if(!source->hasConsumers()) {
77 return result->success;
90 if(source.second->isConsuming(set)) {
103 double cost = std::numeric_limits<double>::max();
109 double sourceCost = it.second->getCost(ptr);
117 if(sourceCost < cost) {
bool hasConsumers(Handle< SetIdentifier > &set)
std::shared_ptr< Statistics > StatisticsPtr
static constexpr double SOURCE_PENALIZE_FACTOR
std::set< std::string > penalizedSets
bool getNextStagesOptimized(std::vector< pdb::Handle< AbstractJobStage >> &physicalPlanToOutput, std::vector< pdb::Handle< SetIdentifier >> &interGlobalSets, StatisticsPtr &stats, int &jobStageId)
std::map< std::string, AbstractPhysicalNodePtr > sourceNodes
std::shared_ptr< AbstractPhysicalNode > AbstractPhysicalNodePtr
std::shared_ptr< PDBLogger > PDBLoggerPtr
PhysicalOptimizer(std::vector< AbstractPhysicalNodePtr > &sources, PDBLoggerPtr &logger)
AbstractPhysicalNodePtr getBestNode(StatisticsPtr &ptr)