Skip to content

Commit 8df85d7

Browse files
authored
collect a map of dataset types per column (#5791)
now we always encode the type of the column with it
1 parent b22d65d commit 8df85d7

File tree

8 files changed

+44
-11
lines changed

8 files changed

+44
-11
lines changed

CommonData/dataset.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,18 @@ stringvec DataSet::getColumnNames()
218218
return names;
219219
}
220220

221+
222+
std::map<std::string,columnType> DataSet::getColumnTypesMap()
223+
{
224+
std::map<std::string,columnType> theMap;
225+
226+
for(const Column * col : columns())
227+
theMap[col->name()] = col->type();
228+
229+
return theMap;
230+
}
231+
232+
221233
void DataSet::dbCreate()
222234
{
223235
JASPTIMER_SCOPE(DataSet::dbCreate);

CommonData/dataset.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,10 @@ class DataSet : public DataSetBaseNode
5252

5353
bool allColumnsPassFilter() const;
5454

55-
size_t getMaximumColumnWidthInCharacters(size_t columnIndex) const;
55+
size_t getMaximumColumnWidthInCharacters(size_t columnIndex) const;
5656
stringvec getColumnNames();
57+
std::map<std::string,
58+
columnType> getColumnTypesMap();
5759

5860
void setDataFile( const std::string & dataFilePath, long timestamp) { _dataFilePath = dataFilePath; _dataFileTimestamp = timestamp; dbUpdate(); }
5961
void setDatabaseJson( const std::string & databaseJson) { _databaseJson = databaseJson; dbUpdate(); }

Desktop/data/datasetpackage.cpp

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,8 @@ void DataSetPackage::enginesReceiveNewData()
114114
else emit enginesReceiveNewDataSignal();
115115
}
116116

117-
ColumnEncoder::setCurrentColumnNames(getColumnNames()); //Same place as in engine, should be fine right?
117+
ColumnEncoder::setCurrentColumnNames( getColumnNames()); //Same place as in engine, should be fine right?
118+
ColumnEncoder::setCurrentColTypePerName(getColumnTypesMap());
118119
}
119120

120121
bool DataSetPackage::dataSetBaseNodeStillExists(DataSetBaseNode *node) const
@@ -1506,12 +1507,24 @@ stringvec DataSetPackage::getColumnNames()
15061507
stringvec names;
15071508

15081509
if(_dataSet)
1509-
for(const Column * col : _dataSet->columns())
1510-
names.push_back(col->name());
1510+
return _dataSet->getColumnNames();
15111511

15121512
return names;
15131513
}
15141514

1515+
1516+
std::map<std::string,columnType> DataSetPackage::getColumnTypesMap()
1517+
{
1518+
std::map<std::string,columnType> theMap;
1519+
1520+
if(_dataSet)
1521+
return _dataSet->getColumnTypesMap();
1522+
1523+
return theMap;
1524+
}
1525+
1526+
1527+
15151528
bool DataSetPackage::isColumnDifferentFromStringValues(const std::string & columnName, const std::string & title, const stringvec & strVals, const stringvec & strLabs, const stringset & strEmptyVals)
15161529
{
15171530
Column * col = _dataSet->column(columnName);
@@ -2033,7 +2046,8 @@ QString DataSetPackage::insertColumnSpecial(int columnIndex, const QMap<QString,
20332046

20342047
emit datasetChanged(tq(stringvec{column->name()}), {}, {}, false, true);
20352048

2036-
ColumnEncoder::setCurrentColumnNames(getColumnNames());
2049+
ColumnEncoder::setCurrentColumnNames( getColumnNames());
2050+
ColumnEncoder::setCurrentColTypePerName(getColumnTypesMap());
20372051

20382052
if(column->codeType() == computedColumnType::constructorCode || column->codeType() == computedColumnType::rCode)
20392053
emit columnAddedManually(tq(column->name())); //Will trigger setChosenColumn and setVisible(true) on ColumnModel, showing it to the user
@@ -2081,7 +2095,8 @@ bool DataSetPackage::insertColumns(int column, int count, const QModelIndex & ap
20812095

20822096
emit datasetChanged(tq(changed), tq(missingColumns), tq(changeNameColumns), true, false);
20832097

2084-
ColumnEncoder::setCurrentColumnNames(getColumnNames());
2098+
ColumnEncoder::setCurrentColumnNames( getColumnNames());
2099+
ColumnEncoder::setCurrentColTypePerName(getColumnTypesMap());
20852100

20862101
return true;
20872102
}
@@ -2116,7 +2131,8 @@ bool DataSetPackage::removeColumns(int column, int count, const QModelIndex & ap
21162131
#endif
21172132
emit datasetChanged(tq(changed), tq(missingColumns), tq(changeNameColumns), false, true);
21182133

2119-
ColumnEncoder::setCurrentColumnNames(getColumnNames());
2134+
ColumnEncoder::setCurrentColumnNames( getColumnNames());
2135+
ColumnEncoder::setCurrentColTypePerName(getColumnTypesMap());
21202136

21212137
return true;
21222138
}

Desktop/data/datasetpackage.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ class DataSetPackage : public QAbstractItemModel //Not QAbstractTableModel becau
200200
void columnsReorder( const stringvec & order);
201201

202202
stringvec getColumnNames();
203+
std::map<std::string, columnType> getColumnTypesMap();
203204
bool isColumnDifferentFromStringValues(const std::string & columnName, const std::string & title, const stringvec & strVals, const stringvec & strLabs, const stringset & strEmptyVals);
204205
int findIndexByName(const std::string & name) const;
205206

@@ -272,6 +273,7 @@ class DataSetPackage : public QAbstractItemModel //Not QAbstractTableModel becau
272273
void resetVariableTypes();
273274

274275

276+
275277
signals:
276278
void datasetChanged( QStringList changedColumns,
277279
QStringList missingColumns,

Engine/enginebase.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,8 @@ bool EngineBase::setColumnDataAndType(const std::string &columnName, const std::
136136

137137
void EngineBase::reloadColumnNames()
138138
{
139-
ColumnEncoder::columnEncoder()->setCurrentColumnNames(provideAndUpdateDataSet() == nullptr ? std::vector<std::string>({}) : provideAndUpdateDataSet()->getColumnNames());
139+
ColumnEncoder::columnEncoder()->setCurrentColumnNames( provideAndUpdateDataSet() == nullptr ? std::vector<std::string>({}) : provideAndUpdateDataSet()->getColumnNames());
140+
ColumnEncoder::columnEncoder()->setCurrentColTypePerName( provideAndUpdateDataSet() == nullptr ? std::map<std::string,columnType>() : provideAndUpdateDataSet()->getColumnTypesMap());
140141
}
141142

142143

Engine/jaspBase

0 commit comments

Comments
 (0)