Changeset View
Changeset View
Standalone View
Standalone View
native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp
Show First 20 Lines • Show All 319 Lines • ▼ Show 20 Lines | bool add_avatar_column_to_threads_table(sqlite3 *db) { | ||||
std::ostringstream stringStream; | std::ostringstream stringStream; | ||||
stringStream << "Error adding avatar column to threads table: " << error; | stringStream << "Error adding avatar column to threads table: " << error; | ||||
Logger::log(stringStream.str()); | Logger::log(stringStream.str()); | ||||
sqlite3_free(error); | sqlite3_free(error); | ||||
return false; | return false; | ||||
} | } | ||||
bool add_pinned_count_column_to_threads(sqlite3 *db) { | |||||
sqlite3_stmt *pinned_column_stmt; | |||||
sqlite3_prepare_v2( | |||||
db, | |||||
"SELECT name AS col_name FROM pragma_table_xinfo ('threads') WHERE " | |||||
"col_name='pinned_count';", | |||||
-1, | |||||
&pinned_column_stmt, | |||||
nullptr); | |||||
sqlite3_step(pinned_column_stmt); | |||||
auto num_bytes = sqlite3_column_bytes(pinned_column_stmt, 0); | |||||
sqlite3_finalize(pinned_column_stmt); | |||||
if (num_bytes) { | |||||
return true; | |||||
} | |||||
char *error; | |||||
sqlite3_exec( | |||||
db, | |||||
"ALTER TABLE threads ADD COLUMN pinned_count INTEGER NOT NULL DEFAULT 0;", | |||||
nullptr, | |||||
nullptr, | |||||
&error); | |||||
if (!error) { | |||||
return true; | |||||
} | |||||
std::ostringstream stringStream; | |||||
stringStream << "Error adding pinned_count column to threads table: " | |||||
<< error; | |||||
Logger::log(stringStream.str()); | |||||
sqlite3_free(error); | |||||
return false; | |||||
} | |||||
bool create_schema(sqlite3 *db) { | bool create_schema(sqlite3 *db) { | ||||
char *error; | char *error; | ||||
sqlite3_exec( | sqlite3_exec( | ||||
db, | db, | ||||
"CREATE TABLE IF NOT EXISTS drafts (" | "CREATE TABLE IF NOT EXISTS drafts (" | ||||
" key TEXT UNIQUE PRIMARY KEY NOT NULL," | " key TEXT UNIQUE PRIMARY KEY NOT NULL," | ||||
" text TEXT NOT NULL" | " text TEXT NOT NULL" | ||||
");" | ");" | ||||
Show All 38 Lines | sqlite3_exec( | ||||
" parent_thread_id TEXT," | " parent_thread_id TEXT," | ||||
" containing_thread_id TEXT," | " containing_thread_id TEXT," | ||||
" community TEXT," | " community TEXT," | ||||
" members TEXT NOT NULL," | " members TEXT NOT NULL," | ||||
" roles TEXT NOT NULL," | " roles TEXT NOT NULL," | ||||
" current_user TEXT NOT NULL," | " current_user TEXT NOT NULL," | ||||
" source_message_id TEXT," | " source_message_id TEXT," | ||||
" replies_count INTEGER NOT NULL," | " replies_count INTEGER NOT NULL," | ||||
" avatar TEXT" | " avatar TEXT," | ||||
" pinned_count INTEGER NOT NULL DEFAULT 0" | |||||
");" | ");" | ||||
"CREATE TABLE IF NOT EXISTS metadata (" | "CREATE TABLE IF NOT EXISTS metadata (" | ||||
" name TEXT UNIQUE PRIMARY KEY NOT NULL," | " name TEXT UNIQUE PRIMARY KEY NOT NULL," | ||||
" data TEXT NOT NULL" | " data TEXT NOT NULL" | ||||
");" | ");" | ||||
"CREATE INDEX IF NOT EXISTS media_idx_container" | "CREATE INDEX IF NOT EXISTS media_idx_container" | ||||
▲ Show 20 Lines • Show All 226 Lines • ▼ Show 20 Lines | std::vector<std::pair<uint, SQLiteMigration>> migrations{ | ||||
{18, {create_messages_idx_thread_time, true}}, | {18, {create_messages_idx_thread_time, true}}, | ||||
{19, {create_media_idx_container, true}}, | {19, {create_media_idx_container, true}}, | ||||
{20, {create_threads_table, true}}, | {20, {create_threads_table, true}}, | ||||
{21, {update_threadID_for_pending_threads_in_drafts, true}}, | {21, {update_threadID_for_pending_threads_in_drafts, true}}, | ||||
{22, {enable_write_ahead_logging_mode, false}}, | {22, {enable_write_ahead_logging_mode, false}}, | ||||
{23, {create_metadata_table, true}}, | {23, {create_metadata_table, true}}, | ||||
{24, {add_not_null_constraint_to_drafts, true}}, | {24, {add_not_null_constraint_to_drafts, true}}, | ||||
{25, {add_not_null_constraint_to_metadata, true}}, | {25, {add_not_null_constraint_to_metadata, true}}, | ||||
{26, {add_avatar_column_to_threads_table, true}}}}; | {26, {add_avatar_column_to_threads_table, true}}, | ||||
{27, {add_pinned_count_column_to_threads, true}}}}; | |||||
enum class MigrationResult { SUCCESS, FAILURE, NOT_APPLIED }; | enum class MigrationResult { SUCCESS, FAILURE, NOT_APPLIED }; | ||||
MigrationResult applyMigrationWithTransaction( | MigrationResult applyMigrationWithTransaction( | ||||
sqlite3 *db, | sqlite3 *db, | ||||
const MigrateFunction &migrate, | const MigrateFunction &migrate, | ||||
int index) { | int index) { | ||||
sqlite3_exec(db, "BEGIN TRANSACTION;", nullptr, nullptr, nullptr); | sqlite3_exec(db, "BEGIN TRANSACTION;", nullptr, nullptr, nullptr); | ||||
▲ Show 20 Lines • Show All 185 Lines • ▼ Show 20 Lines | static auto storage = make_storage( | ||||
make_column("parent_thread_id", &Thread::parent_thread_id), | make_column("parent_thread_id", &Thread::parent_thread_id), | ||||
make_column("containing_thread_id", &Thread::containing_thread_id), | make_column("containing_thread_id", &Thread::containing_thread_id), | ||||
make_column("community", &Thread::community), | make_column("community", &Thread::community), | ||||
make_column("members", &Thread::members), | make_column("members", &Thread::members), | ||||
make_column("roles", &Thread::roles), | make_column("roles", &Thread::roles), | ||||
make_column("current_user", &Thread::current_user), | make_column("current_user", &Thread::current_user), | ||||
make_column("source_message_id", &Thread::source_message_id), | make_column("source_message_id", &Thread::source_message_id), | ||||
make_column("replies_count", &Thread::replies_count), | make_column("replies_count", &Thread::replies_count), | ||||
make_column("avatar", &Thread::avatar)), | make_column("avatar", &Thread::avatar), | ||||
make_column("pinned_count", &Thread::pinned_count, default_value(0))), | |||||
make_table( | make_table( | ||||
"metadata", | "metadata", | ||||
make_column("name", &Metadata::name, unique(), primary_key()), | make_column("name", &Metadata::name, unique(), primary_key()), | ||||
make_column("data", &Metadata::data))); | make_column("data", &Metadata::data))); | ||||
storage.on_open = on_database_open; | storage.on_open = on_database_open; | ||||
return storage; | return storage; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 298 Lines • Show Last 20 Lines |