Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stop infinite loop #5348

Merged
merged 1 commit into from
Dec 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion Desktop/analysis/analysis.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -518,13 +518,18 @@ performType Analysis::desiredPerformTypeFromAnalysisStatus() const
}
}

std::set<std::string> Analysis::usedVariables()
stringset Analysis::usedVariables()
{
if (form()) return form()->usedVariables();

return {};
}

stringset Analysis::createdVariables()
{
return DataSetPackage::pkg()->columnsCreatedByAnalysis(this);
}

void Analysis::runScriptRequestDone(const QString& result, const QString& controlName, bool hasError)
{
if (_analysisForm)
Expand Down
1 change: 1 addition & 0 deletions Desktop/analysis/analysis.h
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ class Analysis : public AnalysisBase
performType desiredPerformTypeFromAnalysisStatus() const;

stringset usedVariables();
stringset createdVariables();
void runScriptRequestDone(const QString & result, const QString & controlName, bool hasError);

void setUpgradeMsgs(const Modules::UpgradeMsgs & msgs);
Expand Down
6 changes: 4 additions & 2 deletions Desktop/data/computedcolumnsmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -268,9 +268,11 @@ void ComputedColumnsModel::checkForDependentAnalyses(const std::string & columnN
{
Analyses::analyses()->applyToAll([&](Analysis * analysis)
{
std::set<std::string> usedCols = analysis->usedVariables();
stringset usedCols = analysis->usedVariables(),
createdCols = analysis->createdVariables();

if(usedCols.count(columnName) > 0)
//Dont create an infinite loop please
if(usedCols.count(columnName) && !createdCols.count(columnName))
{
bool allColsValidated = true;

Expand Down
18 changes: 16 additions & 2 deletions Desktop/data/datasetpackage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2602,11 +2602,25 @@ void DataSetPackage::checkComputedColumnDependenciesForAnalysis(Analysis * analy
{
if(!_dataSet)
return;

for(Column * col : _dataSet->columns())
if(col->isComputedByAnalysis(analysis->id()))
col->setDependsOn(analysis->usedVariables());


}

stringset DataSetPackage::columnsCreatedByAnalysis(Analysis * analysis)
{
if(!_dataSet)
return {};

stringset cols;

for(Column * col : _dataSet->columns())
if(col->analysisId() == analysis->id())
cols.insert(col->name());

return cols;
}

Column * DataSetPackage::createComputedColumn(const std::string & name, columnType type, computedColumnType desiredType, Analysis * analysis)
Expand Down
3 changes: 2 additions & 1 deletion Desktop/data/datasetpackage.h
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,8 @@ class DataSetPackage : public QAbstractItemModel //Not QAbstractTableModel becau
void databaseStartSynching(bool syncImmediately);
void databaseStopSynching();
bool synchingExternally() const;
void checkComputedColumnDependenciesForAnalysis(Analysis * analysis);
void checkComputedColumnDependenciesForAnalysis( Analysis * analysis);
stringset columnsCreatedByAnalysis( Analysis * analysis);
std::string freeNewColumnName(size_t startHere);
void dbDelete();

Expand Down
Loading