diff --git a/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp b/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp --- a/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp +++ b/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp @@ -308,6 +308,81 @@ return false; } +bool create_tables(sqlite3 *db) { + char *error; + sqlite3_exec( + db, + "CREATE TABLE IF NOT EXISTS drafts (" + "key TEXT UNIQUE PRIMARY KEY NOT NULL, " + "text TEXT NOT NULL);" + + "CREATE TABLE IF NOT EXISTS messages (" + "id TEXT UNIQUE PRIMARY KEY NOT NULL, " + "local_id TEXT, " + "thread TEXT NOT NULL, " + "user TEXT NOT NULL, " + "type INTEGER NOT NULL, " + "future_type INTEGER, " + "content TEXT, " + "time INTEGER NOT NULL);" + + "CREATE TABLE IF NOT EXISTS olm_persist_account (" + "id INTEGER UNIQUE PRIMARY KEY NOT NULL, " + "account_data TEXT NOT NULL);" + + "CREATE TABLE IF NOT EXISTS olm_persist_sessions (" + "target_user_id TEXT UNIQUE PRIMARY KEY NOT NULL, " + "session_data TEXT NOT NULL);" + + "CREATE TABLE IF NOT EXISTS media (" + "id TEXT UNIQUE PRIMARY KEY NOT NULL, " + "container TEXT NOT NULL, " + "thread TEXT NOT NULL, " + "uri TEXT NOT NULL, " + "type TEXT NOT NULL, " + "extras TEXT NOT NULL);" + + "CREATE TABLE IF NOT EXISTS threads (" + "id TEXT UNIQUE PRIMARY KEY NOT NULL, " + "type INTEGER NOT NULL, " + "name TEXT, " + "description TEXT, " + "color TEXT NOT NULL, " + "creation_time BIGINT NOT NULL, " + "parent_thread_id TEXT, " + "containing_thread_id TEXT, " + "community TEXT, " + "members TEXT NOT NULL, " + "roles TEXT NOT NULL, " + "current_user TEXT NOT NULL, " + "source_message_id TEXT, " + "replies_count INTEGER NOT NULL);" + + "CREATE TABLE IF NOT EXISTS metadata (" + "name TEXT UNIQUE PRIMARY KEY NOT NULL, " + "data TEXT NOT NULL);" + + "CREATE INDEX IF NOT EXISTS media_idx_container " + "ON media (container);" + + "CREATE INDEX IF NOT EXISTS messages_idx_thread_time " + "ON messages (thread, time);", + nullptr, + nullptr, + &error); + + if (!error) { + return true; + } + + std::ostringstream stringStream; + stringStream << "Error creating tables: " << error; + Logger::log(stringStream.str()); + + sqlite3_free(error); + return false; +} + void set_encryption_key(sqlite3 *db) { std::string set_encryption_key_query = "PRAGMA key = \"x'" + SQLiteQueryExecutor::encryptionKey + "'\";";