Skip to content

Commit

Permalink
Remove the isColumn property
Browse files Browse the repository at this point in the history
the _isColumn property of Column class can be deduced by the codeType property, so remove it from the class.
However for downgrade purpose, the isColumn column in the database is kept so that JASP file made in 0.18.3 can be still read in 0.18.2 or 0.18.1.
  • Loading branch information
boutinb committed Jan 8, 2024
1 parent 3f0ed8f commit 735f434
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 39 deletions.
26 changes: 6 additions & 20 deletions CommonData/column.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ void Column::dbLoad(int id, bool getValues)

db().transactionReadBegin();

db().columnGetBasicInfo( _id, _name, _title, _description, _type, _revision);
_isComputed = db().columnGetComputedInfo( _id, _analysisId, _invalidated, _codeType, _rCode, _error, _constructorJson);
db().columnGetBasicInfo( _id, _name, _title, _description, _type, _revision);
db().columnGetComputedInfo( _id, _analysisId, _invalidated, _codeType, _rCode, _error, _constructorJson);

db().labelsLoad(this);

Expand Down Expand Up @@ -65,22 +65,12 @@ void Column::loadComputedColumnJsonBackwardsCompatibly(const Json::Value & json)
//Columnname is used to find this:
//_column = DataSetPackage::pkg()->dataSet()->column(json["name"].asString());

const std::string & rCode = json["rCode"].asString(),
& codeTypeStr = json["codeType"].asString();

computedColumnType codeType = computedColumnType::notComputed;
if (!codeTypeStr.empty())
{
try { codeType = computedColumnTypeFromString(codeTypeStr); }
catch(...) {}
}

try { codeType = computedColumnTypeFromString(codeTypeStr); } catch(...) {}
const std::string & rCode = json["rCode"].asString();

setCompColStuff
(
json["invalidated"].asBool(),
codeType,
computedColumnTypeFromString(json["codeType"].asString()),
rCode,
json["error"].asString(),
json["constructorCode"]
Expand Down Expand Up @@ -188,7 +178,7 @@ void Column::setCustomEmptyValues(const stringset& customEmptyValues)

void Column::dbUpdateComputedColumnStuff()
{
db().columnSetComputedInfo(_id, _analysisId, _isComputed, _invalidated, _codeType, _rCode, _error, constructorJsonStr());
db().columnSetComputedInfo(_id, _analysisId, _invalidated, _codeType, _rCode, _error, constructorJsonStr());
incRevision();
}

Expand Down Expand Up @@ -221,7 +211,6 @@ void Column::setCodeType(computedColumnType codeType)
_analysisId = -1;

_codeType = codeType;
_isComputed = _codeType != computedColumnType::notComputed && _codeType != computedColumnType::analysisNotComputed;

dbUpdateComputedColumnStuff();
}
Expand Down Expand Up @@ -309,7 +298,6 @@ void Column::setCompColStuff(bool invalidated, computedColumnType codeType, cons
{
JASPTIMER_SCOPE(Column::setCompColStuff);

_isComputed = true;
_invalidated = invalidated;
_codeType = codeType;
_rCode = rCode;
Expand Down Expand Up @@ -2131,7 +2119,6 @@ Json::Value Column::serialize() const
json["rCode"] = _rCode;
json["type"] = int(_type);
json["analysisId"] = _analysisId;
json["isComputed"] = _isComputed;
json["invalidated"] = _invalidated;
json["codeType"] = int(_codeType);
json["error"] = _error;
Expand Down Expand Up @@ -2191,10 +2178,9 @@ void Column::deserialize(const Json::Value &json)
_rCode = json["rCode"].asString();
_error = json["error"].asString();
_constructorJson = json["constructorJson"];
_isComputed = json["isComputed"].asBool();
_analysisId = json["analysisId"].asInt();

db().columnSetComputedInfo(_id, _analysisId, _isComputed, _invalidated, _codeType, _rCode, _error, constructorJsonStr());
db().columnSetComputedInfo(_id, _analysisId, _invalidated, _codeType, _rCode, _error, constructorJsonStr());


_dbls.clear();
Expand Down
5 changes: 2 additions & 3 deletions CommonData/column.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ class Column : public DataSetBaseNode
columnType type() const { return _type; }
int id() const { return _id; }
int analysisId() const { return _analysisId; }
bool isComputed() const { return _isComputed; }
bool isComputed() const { return _codeType != computedColumnType::notComputed && _codeType != computedColumnType::analysisNotComputed; }
bool invalidated() const { return _invalidated; }
computedColumnType codeType() const { return _codeType; }
const std::string & name() const { return _name; }
Expand Down Expand Up @@ -198,8 +198,7 @@ class Column : public DataSetBaseNode
_preEditType = columnType::unknown;
int _id = -1,
_analysisId = -1; // Actually initialized in DatabaseInterface::columnInsert
bool _isComputed = false, // Actually initialized in DatabaseInterface::columnInsert
_invalidated = false,
bool _invalidated = false,
_batchedLabel = false;
computedColumnType _codeType = computedColumnType::notComputed;
std::string _name,
Expand Down
28 changes: 14 additions & 14 deletions CommonData/databaseinterface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1015,10 +1015,14 @@ void DatabaseInterface::columnSetDescription(int columnId, const std::string & d
});
}

void DatabaseInterface::columnSetComputedInfo(int columnId, int analysisId, bool isComputed, bool invalidated, computedColumnType codeType, const std::string & rCode, const std::string & error, const std::string & constructorJsonStr)
void DatabaseInterface::columnSetComputedInfo(int columnId, int analysisId, bool invalidated, computedColumnType codeType, const std::string & rCode, const std::string & error, const std::string & constructorJsonStr)
{
JASPTIMER_SCOPE(DatabaseInterface::columnSetComputedInfo);

// The isComputed is not longer needed in the database (this can be deduced by codeType), but for downgrade purpose, the isComputed is still needed.
// In 0.19 we can remove it from the database.
bool isComputed = codeType != computedColumnType::notComputed && codeType != computedColumnType::analysisNotComputed;

runStatements("UPDATE Columns SET isComputed=?, invalidated=?, codeType=?, rCode=?, error=?, constructorJson=?, analysisId=? WHERE id=?;", [&](sqlite3_stmt * stmt)
{
std::string codeT = computedColumnTypeToString(codeType);
Expand Down Expand Up @@ -1068,10 +1072,9 @@ std::string DatabaseInterface::_wrap_sqlite3_column_text(sqlite3_stmt * stmt, in
return !col ? "" : std::string(reinterpret_cast<const char*>(col));
}

bool DatabaseInterface::columnGetComputedInfo(int columnId, int &analysisId, bool &invalidated, computedColumnType &codeType, std::string &rCode, std::string &error, Json::Value &constructorJson)
void DatabaseInterface::columnGetComputedInfo(int columnId, int &analysisId, bool &invalidated, computedColumnType &codeType, std::string &rCode, std::string &error, Json::Value &constructorJson)
{
JASPTIMER_SCOPE(DatabaseInterface::columnGetComputedInfo);
bool isComputed = false;

std::function<void(sqlite3_stmt *stmt)> prepare = [&](sqlite3_stmt *stmt)
{
Expand All @@ -1082,15 +1085,14 @@ bool DatabaseInterface::columnGetComputedInfo(int columnId, int &analysisId, boo
{
int colCount = sqlite3_column_count(stmt);

assert(colCount == 7);
assert(colCount == 6);

isComputed = sqlite3_column_int( stmt, 0);
invalidated = sqlite3_column_int( stmt, 1);
std::string codeTypeStr = _wrap_sqlite3_column_text(stmt, 2);
rCode = _wrap_sqlite3_column_text(stmt, 3);
error = _wrap_sqlite3_column_text(stmt, 4);
std::string constructorJsonStr = _wrap_sqlite3_column_text(stmt, 5);
analysisId = sqlite3_column_int( stmt, 6);
invalidated = sqlite3_column_int( stmt, 0);
std::string codeTypeStr = _wrap_sqlite3_column_text(stmt, 1);
rCode = _wrap_sqlite3_column_text(stmt, 2);
error = _wrap_sqlite3_column_text(stmt, 3);
std::string constructorJsonStr = _wrap_sqlite3_column_text(stmt, 4);
analysisId = sqlite3_column_int( stmt, 5);

codeType = computedColumnType::notComputed;
if (!codeTypeStr.empty())
Expand All @@ -1103,9 +1105,7 @@ bool DatabaseInterface::columnGetComputedInfo(int columnId, int &analysisId, boo
Json::Reader().parse(constructorJsonStr, constructorJson);
};

runStatements("SELECT isComputed, invalidated, codeType, rCode, error, constructorJson, analysisId FROM Columns WHERE id = ?;", prepare, processRow);

return isComputed;
runStatements("SELECT invalidated, codeType, rCode, error, constructorJson, analysisId FROM Columns WHERE id = ?;", prepare, processRow);
}

void DatabaseInterface::labelsClear(int columnId)
Expand Down
4 changes: 2 additions & 2 deletions CommonData/databaseinterface.h
Original file line number Diff line number Diff line change
Expand Up @@ -127,8 +127,8 @@ class DatabaseInterface
void columnSetTitle( int columnId, const std::string & title);
void columnSetDescription( int columnId, const std::string & description);
void columnGetBasicInfo( int columnId, std::string & name, std::string & title, std::string & description, columnType & colType, int & revision);
void columnSetComputedInfo( int columnId, int analysisId, bool isComputed, bool invalidated, computedColumnType codeType, const std::string & rCode, const std::string & error, const std::string & constructorJson);
bool columnGetComputedInfo( int columnId, int &analysisId, bool & invalidated, computedColumnType & codeType, std::string & rCode, std::string & error, Json::Value & constructorJson);
void columnSetComputedInfo( int columnId, int analysisId, bool invalidated, computedColumnType codeType, const std::string & rCode, const std::string & error, const std::string & constructorJson);
void columnGetComputedInfo( int columnId, int &analysisId, bool & invalidated, computedColumnType & codeType, std::string & rCode, std::string & error, Json::Value & constructorJson);
void columnSetValues( int columnId, const intvec & ints);
void columnSetValues( int columnId, const doublevec & dbls);
void columnSetValue( int columnId, size_t row, int value);
Expand Down

0 comments on commit 735f434

Please sign in to comment.