Skip to content

Commit 9698f4e

Browse files
JorisGoosenboutinb
authored andcommitted
Stop infinite loop
fixes jasp-stats/jasp-test-release#2478
1 parent 867fc55 commit 9698f4e

File tree

5 files changed

+29
-6
lines changed

5 files changed

+29
-6
lines changed

Desktop/analysis/analysis.cpp

+6-1
Original file line numberDiff line numberDiff line change
@@ -518,13 +518,18 @@ performType Analysis::desiredPerformTypeFromAnalysisStatus() const
518518
}
519519
}
520520

521-
std::set<std::string> Analysis::usedVariables()
521+
stringset Analysis::usedVariables()
522522
{
523523
if (form()) return form()->usedVariables();
524524

525525
return {};
526526
}
527527

528+
stringset Analysis::createdVariables()
529+
{
530+
return DataSetPackage::pkg()->columnsCreatedByAnalysis(this);
531+
}
532+
528533
void Analysis::runScriptRequestDone(const QString& result, const QString& controlName, bool hasError)
529534
{
530535
if (_analysisForm)

Desktop/analysis/analysis.h

+1
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ class Analysis : public AnalysisBase
146146
performType desiredPerformTypeFromAnalysisStatus() const;
147147

148148
stringset usedVariables();
149+
stringset createdVariables();
149150
void runScriptRequestDone(const QString & result, const QString & controlName, bool hasError);
150151

151152
void setUpgradeMsgs(const Modules::UpgradeMsgs & msgs);

Desktop/data/computedcolumnsmodel.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -268,9 +268,11 @@ void ComputedColumnsModel::checkForDependentAnalyses(const std::string & columnN
268268
{
269269
Analyses::analyses()->applyToAll([&](Analysis * analysis)
270270
{
271-
std::set<std::string> usedCols = analysis->usedVariables();
271+
stringset usedCols = analysis->usedVariables(),
272+
createdCols = analysis->createdVariables();
272273

273-
if(usedCols.count(columnName) > 0)
274+
//Dont create an infinite loop please
275+
if(usedCols.count(columnName) && !createdCols.count(columnName))
274276
{
275277
bool allColsValidated = true;
276278

Desktop/data/datasetpackage.cpp

+16-2
Original file line numberDiff line numberDiff line change
@@ -2600,11 +2600,25 @@ void DataSetPackage::checkComputedColumnDependenciesForAnalysis(Analysis * analy
26002600
{
26012601
if(!_dataSet)
26022602
return;
2603-
2603+
26042604
for(Column * col : _dataSet->columns())
26052605
if(col->isComputedByAnalysis(analysis->id()))
26062606
col->setDependsOn(analysis->usedVariables());
2607-
2607+
2608+
}
2609+
2610+
stringset DataSetPackage::columnsCreatedByAnalysis(Analysis * analysis)
2611+
{
2612+
if(!_dataSet)
2613+
return {};
2614+
2615+
stringset cols;
2616+
2617+
for(Column * col : _dataSet->columns())
2618+
if(col->analysisId() == analysis->id())
2619+
cols.insert(col->name());
2620+
2621+
return cols;
26082622
}
26092623

26102624
Column * DataSetPackage::createComputedColumn(const std::string & name, columnType type, computedColumnType desiredType, Analysis * analysis)

Desktop/data/datasetpackage.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,8 @@ class DataSetPackage : public QAbstractItemModel //Not QAbstractTableModel becau
281281
void databaseStartSynching(bool syncImmediately);
282282
void databaseStopSynching();
283283
bool synchingExternally() const;
284-
void checkComputedColumnDependenciesForAnalysis(Analysis * analysis);
284+
void checkComputedColumnDependenciesForAnalysis( Analysis * analysis);
285+
stringset columnsCreatedByAnalysis( Analysis * analysis);
285286
std::string freeNewColumnName(size_t startHere);
286287
void dbDelete();
287288

0 commit comments

Comments
 (0)