#include #include #include #include #include #include #include "data.hpp" namespace { } // namespace mw::E> DataSourceSQLite::fromFile(const std::string& db_file) { auto data_source = std::make_unique(); ASSIGN_OR_RETURN(data_source->db, mw::SQLite::connectFile(db_file)); // Perform schema upgrade here. // // data_source->upgradeSchema1To2(); // Update this line when schema updates. DO_OR_RETURN(data_source->setSchemaVersion(1)); DO_OR_RETURN(data_source->db->execute( "CREATE TABLE IF NOT EXISTS Users " "(id INTEGER PRIMARY KEY, openid_uid TEXT, name TEXT);")); DO_OR_RETURN(data_source->db->execute( "CREATE TABLE IF NOT EXISTS LinkItems " "(id INTEGER PRIMARY KEY," " FOREIGN KEY(owner_id) REFERENCES Users(id) NOT NULL," " FOREIGN KEY(parent_id) REFERENCES LinkItems(id)," " name TEXT NOT NULL, url TEXT, description TEXT," " visibility INTEGER NOT NULL, time INTEGER NOT NULL);")); return data_source; } mw::E> DataSourceSQLite::newFromMemory() { return fromFile(":memory:"); } mw::E DataSourceSQLite::getSchemaVersion() const { return db->evalToValue("PRAGMA user_version;"); } mw::E DataSourceSQLite::setSchemaVersion(int64_t v) const { return db->execute(std::format("PRAGMA user_version = {};", v)); }