mirror of
https://github.com/profanity-im/profanity.git
synced 2025-01-03 14:57:42 -05:00
Improve Database: Replace Empty Strings with NULL Values
Enhance data consistency by updating the database to treat empty strings as NULL values. This change simplifies queries and improves overall database integrity.
This commit is contained in:
parent
d89b5a04fa
commit
89dc7a46f1
@ -284,8 +284,8 @@ log_database_get_limits_info(const gchar* const contact_barejid, gboolean is_las
|
|||||||
|
|
||||||
const char* order = is_last ? "DESC" : "ASC";
|
const char* order = is_last ? "DESC" : "ASC";
|
||||||
auto_sqlite char* query = sqlite3_mprintf("SELECT `archive_id`, `timestamp` FROM `ChatLogs` WHERE "
|
auto_sqlite char* query = sqlite3_mprintf("SELECT `archive_id`, `timestamp` FROM `ChatLogs` WHERE "
|
||||||
"(`from_jid` = '%q' AND `to_jid` = '%q') OR "
|
"(`from_jid` = %Q AND `to_jid` = %Q) OR "
|
||||||
"(`from_jid` = '%q' AND `to_jid` = '%q') "
|
"(`from_jid` = %Q AND `to_jid` = %Q) "
|
||||||
"ORDER BY `timestamp` %s LIMIT 1;",
|
"ORDER BY `timestamp` %s LIMIT 1;",
|
||||||
contact_barejid, myjid->barejid, myjid->barejid, contact_barejid, order);
|
contact_barejid, myjid->barejid, myjid->barejid, contact_barejid, order);
|
||||||
|
|
||||||
@ -335,9 +335,9 @@ log_database_get_previous_chat(const gchar* const contact_barejid, const char* s
|
|||||||
"SELECT COALESCE(B.`message`, A.`message`) AS message, "
|
"SELECT COALESCE(B.`message`, A.`message`) AS message, "
|
||||||
"A.`timestamp`, A.`from_jid`, A.`to_jid`, A.`type`, A.`encryption` FROM `ChatLogs` AS A "
|
"A.`timestamp`, A.`from_jid`, A.`to_jid`, A.`type`, A.`encryption` FROM `ChatLogs` AS A "
|
||||||
"LEFT JOIN `ChatLogs` AS B ON (A.`replaced_by_db_id` = B.`id` AND A.`from_jid` = B.`from_jid`) "
|
"LEFT JOIN `ChatLogs` AS B ON (A.`replaced_by_db_id` = B.`id` AND A.`from_jid` = B.`from_jid`) "
|
||||||
"WHERE (A.`replaces_db_id` IS NULL OR A.`replaces_db_id` = '') "
|
"WHERE (A.`replaces_db_id` IS NULL) "
|
||||||
"AND ((A.`from_jid` = '%q' AND A.`to_jid` = '%q') OR (A.`from_jid` = '%q' AND A.`to_jid` = '%q')) "
|
"AND ((A.`from_jid` = %Q AND A.`to_jid` = %Q) OR (A.`from_jid` = %Q AND A.`to_jid` = %Q)) "
|
||||||
"AND A.`timestamp` < '%q' "
|
"AND A.`timestamp` < %Q "
|
||||||
"AND (%Q IS NULL OR A.`timestamp` > %Q) "
|
"AND (%Q IS NULL OR A.`timestamp` > %Q) "
|
||||||
"ORDER BY A.`timestamp` %s LIMIT %d) "
|
"ORDER BY A.`timestamp` %s LIMIT %d) "
|
||||||
"ORDER BY `timestamp` %s;",
|
"ORDER BY `timestamp` %s;",
|
||||||
@ -523,7 +523,7 @@ _add_to_db(ProfMessage* message, char* type, const Jid* const from_jid, const Ji
|
|||||||
// stanza-id (XEP-0359) doesn't have to be present in the message.
|
// stanza-id (XEP-0359) doesn't have to be present in the message.
|
||||||
// But if it's duplicated, it's a serious server-side problem, so we better track it.
|
// But if it's duplicated, it's a serious server-side problem, so we better track it.
|
||||||
if (message->stanzaid) {
|
if (message->stanzaid) {
|
||||||
auto_sqlite char* duplicate_check_query = sqlite3_mprintf("SELECT 1 FROM `ChatLogs` WHERE (`archive_id` = '%q')",
|
auto_sqlite char* duplicate_check_query = sqlite3_mprintf("SELECT 1 FROM `ChatLogs` WHERE (`archive_id` = %Q)",
|
||||||
message->stanzaid);
|
message->stanzaid);
|
||||||
|
|
||||||
if (!duplicate_check_query) {
|
if (!duplicate_check_query) {
|
||||||
@ -550,17 +550,17 @@ _add_to_db(ProfMessage* message, char* type, const Jid* const from_jid, const Ji
|
|||||||
"`replaces_db_id`, `replace_id`, `type`, `encryption`) "
|
"`replaces_db_id`, `replace_id`, `type`, `encryption`) "
|
||||||
"VALUES (%Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q)",
|
"VALUES (%Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q)",
|
||||||
from_jid->barejid,
|
from_jid->barejid,
|
||||||
from_jid->resourcepart ? from_jid->resourcepart : "",
|
from_jid->resourcepart,
|
||||||
to_jid->barejid,
|
to_jid->barejid,
|
||||||
to_jid->resourcepart ? to_jid->resourcepart : "",
|
to_jid->resourcepart,
|
||||||
message->plain ? message->plain : "",
|
message->plain,
|
||||||
date_fmt ? date_fmt : "",
|
date_fmt,
|
||||||
message->id ? message->id : "",
|
message->id,
|
||||||
message->stanzaid ? message->stanzaid : "",
|
message->stanzaid,
|
||||||
orig_message_id,
|
orig_message_id,
|
||||||
message->replace_id ? message->replace_id : "",
|
message->replace_id,
|
||||||
type ? type : "",
|
type,
|
||||||
enc ? enc : "");
|
enc);
|
||||||
if (!query) {
|
if (!query) {
|
||||||
log_error("Could not allocate memory for SQL insert query in log_database_add()");
|
log_error("Could not allocate memory for SQL insert query in log_database_add()");
|
||||||
return;
|
return;
|
||||||
@ -611,6 +611,7 @@ _migrate_to_v2(void)
|
|||||||
{
|
{
|
||||||
char* err_msg = NULL;
|
char* err_msg = NULL;
|
||||||
|
|
||||||
|
// from_resource, to_resource, message, timestamp, stanza_id, archive_id, replace_id, type, encryption
|
||||||
const char* sql_statements[] = {
|
const char* sql_statements[] = {
|
||||||
"BEGIN TRANSACTION",
|
"BEGIN TRANSACTION",
|
||||||
"ALTER TABLE `ChatLogs` ADD COLUMN `replaces_db_id` INTEGER;",
|
"ALTER TABLE `ChatLogs` ADD COLUMN `replaces_db_id` INTEGER;",
|
||||||
@ -627,7 +628,17 @@ _migrate_to_v2(void)
|
|||||||
"WHERE (A.`replace_id` IS NULL OR A.`replace_id` = '') "
|
"WHERE (A.`replace_id` IS NULL OR A.`replace_id` = '') "
|
||||||
"AND A.`id` = B.`replaces_db_id` "
|
"AND A.`id` = B.`replaces_db_id` "
|
||||||
"AND A.`from_jid` = B.`from_jid`;",
|
"AND A.`from_jid` = B.`from_jid`;",
|
||||||
"UPDATE `DbVersion` SET `version` = 2",
|
"UPDATE ChatLogs SET "
|
||||||
|
"from_resource = COALESCE(NULLIF(from_resource, ''), NULL), "
|
||||||
|
"to_resource = COALESCE(NULLIF(to_resource, ''), NULL), "
|
||||||
|
"message = COALESCE(NULLIF(message, ''), NULL), "
|
||||||
|
"timestamp = COALESCE(NULLIF(timestamp, ''), NULL), "
|
||||||
|
"stanza_id = COALESCE(NULLIF(stanza_id, ''), NULL), "
|
||||||
|
"archive_id = COALESCE(NULLIF(archive_id, ''), NULL), "
|
||||||
|
"replace_id = COALESCE(NULLIF(replace_id, ''), NULL), "
|
||||||
|
"type = COALESCE(NULLIF(type, ''), NULL), "
|
||||||
|
"encryption = COALESCE(NULLIF(encryption, ''), NULL);",
|
||||||
|
"UPDATE `DbVersion` SET `version` = 2;",
|
||||||
"END TRANSACTION"
|
"END TRANSACTION"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user