Port the previous PostgreSQL improvements to SQLite3. 273/head
authorAlex Ingram <reimu@reimuhakurei.net>
Sat, 4 Mar 2017 02:34:20 +0000 (20:34 -0600)
committerAlex Ingram <reimu@reimuhakurei.net>
Sat, 4 Mar 2017 04:47:14 +0000 (23:47 -0500)
99 files changed:
src/core/SQL/PostgreSQL/20/select_messagesNewerThan.sql
src/core/SQL/PostgreSQL/20/update_buffer_lastseen.sql
src/core/SQL/SQLite/21/delete_backlog_by_uid.sql [moved from src/core/SQL/SQLite/20/delete_backlog_by_uid.sql with 100% similarity]
src/core/SQL/SQLite/21/delete_backlog_for_buffer.sql [moved from src/core/SQL/SQLite/20/delete_backlog_for_buffer.sql with 100% similarity]
src/core/SQL/SQLite/21/delete_backlog_for_network.sql [moved from src/core/SQL/SQLite/20/delete_backlog_for_network.sql with 100% similarity]
src/core/SQL/SQLite/21/delete_buffer_for_bufferid.sql [moved from src/core/SQL/SQLite/20/delete_buffer_for_bufferid.sql with 100% similarity]
src/core/SQL/SQLite/21/delete_buffers_by_uid.sql [moved from src/core/SQL/SQLite/20/delete_buffers_by_uid.sql with 100% similarity]
src/core/SQL/SQLite/21/delete_buffers_for_network.sql [moved from src/core/SQL/SQLite/20/delete_buffers_for_network.sql with 100% similarity]
src/core/SQL/SQLite/21/delete_identity.sql [moved from src/core/SQL/SQLite/20/delete_identity.sql with 100% similarity]
src/core/SQL/SQLite/21/delete_ircservers_for_network.sql [moved from src/core/SQL/SQLite/20/delete_ircservers_for_network.sql with 100% similarity]
src/core/SQL/SQLite/21/delete_network.sql [moved from src/core/SQL/SQLite/20/delete_network.sql with 100% similarity]
src/core/SQL/SQLite/21/delete_networks_by_uid.sql [moved from src/core/SQL/SQLite/20/delete_networks_by_uid.sql with 100% similarity]
src/core/SQL/SQLite/21/delete_nicks.sql [moved from src/core/SQL/SQLite/20/delete_nicks.sql with 100% similarity]
src/core/SQL/SQLite/21/delete_quasseluser.sql [moved from src/core/SQL/SQLite/20/delete_quasseluser.sql with 100% similarity]
src/core/SQL/SQLite/21/insert_buffer.sql [moved from src/core/SQL/SQLite/20/insert_buffer.sql with 100% similarity]
src/core/SQL/SQLite/21/insert_identity.sql [moved from src/core/SQL/SQLite/20/insert_identity.sql with 100% similarity]
src/core/SQL/SQLite/21/insert_message.sql [moved from src/core/SQL/SQLite/20/insert_message.sql with 100% similarity]
src/core/SQL/SQLite/21/insert_network.sql [moved from src/core/SQL/SQLite/20/insert_network.sql with 100% similarity]
src/core/SQL/SQLite/21/insert_nick.sql [moved from src/core/SQL/SQLite/20/insert_nick.sql with 100% similarity]
src/core/SQL/SQLite/21/insert_quasseluser.sql [moved from src/core/SQL/SQLite/20/insert_quasseluser.sql with 100% similarity]
src/core/SQL/SQLite/21/insert_sender.sql [moved from src/core/SQL/SQLite/20/insert_sender.sql with 100% similarity]
src/core/SQL/SQLite/21/insert_server.sql [moved from src/core/SQL/SQLite/20/insert_server.sql with 100% similarity]
src/core/SQL/SQLite/21/insert_user_setting.sql [moved from src/core/SQL/SQLite/20/insert_user_setting.sql with 100% similarity]
src/core/SQL/SQLite/21/migrate_read_backlog.sql [moved from src/core/SQL/SQLite/20/migrate_read_backlog.sql with 100% similarity]
src/core/SQL/SQLite/21/migrate_read_buffer.sql [moved from src/core/SQL/SQLite/20/migrate_read_buffer.sql with 100% similarity]
src/core/SQL/SQLite/21/migrate_read_identity.sql [moved from src/core/SQL/SQLite/20/migrate_read_identity.sql with 100% similarity]
src/core/SQL/SQLite/21/migrate_read_identity_nick.sql [moved from src/core/SQL/SQLite/20/migrate_read_identity_nick.sql with 100% similarity]
src/core/SQL/SQLite/21/migrate_read_ircserver.sql [moved from src/core/SQL/SQLite/20/migrate_read_ircserver.sql with 100% similarity]
src/core/SQL/SQLite/21/migrate_read_network.sql [moved from src/core/SQL/SQLite/20/migrate_read_network.sql with 100% similarity]
src/core/SQL/SQLite/21/migrate_read_quasseluser.sql [moved from src/core/SQL/SQLite/20/migrate_read_quasseluser.sql with 100% similarity]
src/core/SQL/SQLite/21/migrate_read_sender.sql [moved from src/core/SQL/SQLite/20/migrate_read_sender.sql with 100% similarity]
src/core/SQL/SQLite/21/migrate_read_usersetting.sql [moved from src/core/SQL/SQLite/20/migrate_read_usersetting.sql with 100% similarity]
src/core/SQL/SQLite/21/select_authuser.sql [moved from src/core/SQL/SQLite/20/select_authuser.sql with 100% similarity]
src/core/SQL/SQLite/21/select_bufferByName.sql [moved from src/core/SQL/SQLite/20/select_bufferByName.sql with 100% similarity]
src/core/SQL/SQLite/21/select_bufferExists.sql [moved from src/core/SQL/SQLite/20/select_bufferExists.sql with 100% similarity]
src/core/SQL/SQLite/21/select_buffer_by_id.sql [moved from src/core/SQL/SQLite/20/select_buffer_by_id.sql with 100% similarity]
src/core/SQL/SQLite/21/select_buffer_lastseen_messages.sql [moved from src/core/SQL/SQLite/20/select_buffer_lastseen_messages.sql with 100% similarity]
src/core/SQL/SQLite/21/select_buffer_markerlinemsgids.sql [moved from src/core/SQL/SQLite/20/select_buffer_markerlinemsgids.sql with 100% similarity]
src/core/SQL/SQLite/21/select_buffers.sql [moved from src/core/SQL/SQLite/20/select_buffers.sql with 100% similarity]
src/core/SQL/SQLite/21/select_buffers_for_merge.sql [moved from src/core/SQL/SQLite/20/select_buffers_for_merge.sql with 100% similarity]
src/core/SQL/SQLite/21/select_buffers_for_network.sql [moved from src/core/SQL/SQLite/20/select_buffers_for_network.sql with 100% similarity]
src/core/SQL/SQLite/21/select_checkidentity.sql [moved from src/core/SQL/SQLite/20/select_checkidentity.sql with 100% similarity]
src/core/SQL/SQLite/21/select_connected_networks.sql [moved from src/core/SQL/SQLite/20/select_connected_networks.sql with 100% similarity]
src/core/SQL/SQLite/21/select_identities.sql [moved from src/core/SQL/SQLite/20/select_identities.sql with 100% similarity]
src/core/SQL/SQLite/21/select_internaluser.sql [moved from src/core/SQL/SQLite/20/select_internaluser.sql with 100% similarity]
src/core/SQL/SQLite/21/select_messages.sql [moved from src/core/SQL/SQLite/20/select_messages.sql with 100% similarity]
src/core/SQL/SQLite/21/select_messagesAll.sql [moved from src/core/SQL/SQLite/20/select_messagesAll.sql with 100% similarity]
src/core/SQL/SQLite/21/select_messagesAllNew.sql [moved from src/core/SQL/SQLite/20/select_messagesAllNew.sql with 100% similarity]
src/core/SQL/SQLite/21/select_messagesNewerThan.sql [moved from src/core/SQL/SQLite/20/select_messagesNewerThan.sql with 100% similarity]
src/core/SQL/SQLite/21/select_messagesNewestK.sql [moved from src/core/SQL/SQLite/20/select_messagesNewestK.sql with 100% similarity]
src/core/SQL/SQLite/21/select_networkExists.sql [moved from src/core/SQL/SQLite/20/select_networkExists.sql with 100% similarity]
src/core/SQL/SQLite/21/select_network_awaymsg.sql [moved from src/core/SQL/SQLite/20/select_network_awaymsg.sql with 100% similarity]
src/core/SQL/SQLite/21/select_network_usermode.sql [moved from src/core/SQL/SQLite/20/select_network_usermode.sql with 100% similarity]
src/core/SQL/SQLite/21/select_networks_for_user.sql [moved from src/core/SQL/SQLite/20/select_networks_for_user.sql with 100% similarity]
src/core/SQL/SQLite/21/select_nicks.sql [moved from src/core/SQL/SQLite/20/select_nicks.sql with 100% similarity]
src/core/SQL/SQLite/21/select_persistent_channels.sql [moved from src/core/SQL/SQLite/20/select_persistent_channels.sql with 100% similarity]
src/core/SQL/SQLite/21/select_servers_for_network.sql [moved from src/core/SQL/SQLite/20/select_servers_for_network.sql with 100% similarity]
src/core/SQL/SQLite/21/select_user_setting.sql [moved from src/core/SQL/SQLite/20/select_user_setting.sql with 100% similarity]
src/core/SQL/SQLite/21/select_userid.sql [moved from src/core/SQL/SQLite/20/select_userid.sql with 100% similarity]
src/core/SQL/SQLite/21/setup_000_quasseluser.sql [moved from src/core/SQL/SQLite/20/setup_000_quasseluser.sql with 100% similarity]
src/core/SQL/SQLite/21/setup_010_sender.sql [moved from src/core/SQL/SQLite/20/setup_010_sender.sql with 100% similarity]
src/core/SQL/SQLite/21/setup_020_network.sql [moved from src/core/SQL/SQLite/20/setup_020_network.sql with 100% similarity]
src/core/SQL/SQLite/21/setup_030_buffer.sql [moved from src/core/SQL/SQLite/20/setup_030_buffer.sql with 74% similarity]
src/core/SQL/SQLite/21/setup_040_buffer_idx.sql [moved from src/core/SQL/SQLite/20/setup_040_buffer_idx.sql with 100% similarity]
src/core/SQL/SQLite/21/setup_050_buffer_cname_idx.sql [moved from src/core/SQL/SQLite/20/setup_050_buffer_cname_idx.sql with 100% similarity]
src/core/SQL/SQLite/21/setup_060_backlog.sql [moved from src/core/SQL/SQLite/20/setup_060_backlog.sql with 100% similarity]
src/core/SQL/SQLite/21/setup_070_coreinfo.sql [moved from src/core/SQL/SQLite/20/setup_070_coreinfo.sql with 100% similarity]
src/core/SQL/SQLite/21/setup_080_ircservers.sql [moved from src/core/SQL/SQLite/20/setup_080_ircservers.sql with 100% similarity]
src/core/SQL/SQLite/21/setup_090_backlog_idx.sql [moved from src/core/SQL/SQLite/20/setup_090_backlog_idx.sql with 100% similarity]
src/core/SQL/SQLite/21/setup_100_backlog_idx2.sql [moved from src/core/SQL/SQLite/20/setup_100_backlog_idx2.sql with 100% similarity]
src/core/SQL/SQLite/21/setup_110_buffer_user_idx.sql [moved from src/core/SQL/SQLite/20/setup_110_buffer_user_idx.sql with 100% similarity]
src/core/SQL/SQLite/21/setup_120_user_setting.sql [moved from src/core/SQL/SQLite/20/setup_120_user_setting.sql with 100% similarity]
src/core/SQL/SQLite/21/setup_130_identity.sql [moved from src/core/SQL/SQLite/20/setup_130_identity.sql with 100% similarity]
src/core/SQL/SQLite/21/setup_140_identity_nick.sql [moved from src/core/SQL/SQLite/20/setup_140_identity_nick.sql with 100% similarity]
src/core/SQL/SQLite/21/update_backlog_bufferid.sql [moved from src/core/SQL/SQLite/20/update_backlog_bufferid.sql with 100% similarity]
src/core/SQL/SQLite/21/update_buffer_lastmsgid.sql [new file with mode: 0644]
src/core/SQL/SQLite/21/update_buffer_lastseen.sql [moved from src/core/SQL/SQLite/20/update_buffer_lastseen.sql with 51% similarity]
src/core/SQL/SQLite/21/update_buffer_markerlinemsgid.sql [moved from src/core/SQL/SQLite/20/update_buffer_markerlinemsgid.sql with 100% similarity]
src/core/SQL/SQLite/21/update_buffer_name.sql [moved from src/core/SQL/SQLite/20/update_buffer_name.sql with 100% similarity]
src/core/SQL/SQLite/21/update_buffer_persistent_channel.sql [moved from src/core/SQL/SQLite/20/update_buffer_persistent_channel.sql with 100% similarity]
src/core/SQL/SQLite/21/update_buffer_set_channel_key.sql [moved from src/core/SQL/SQLite/20/update_buffer_set_channel_key.sql with 100% similarity]
src/core/SQL/SQLite/21/update_identity.sql [moved from src/core/SQL/SQLite/20/update_identity.sql with 100% similarity]
src/core/SQL/SQLite/21/update_network.sql [moved from src/core/SQL/SQLite/20/update_network.sql with 100% similarity]
src/core/SQL/SQLite/21/update_network_connected.sql [moved from src/core/SQL/SQLite/20/update_network_connected.sql with 100% similarity]
src/core/SQL/SQLite/21/update_network_set_awaymsg.sql [moved from src/core/SQL/SQLite/20/update_network_set_awaymsg.sql with 100% similarity]
src/core/SQL/SQLite/21/update_network_set_usermode.sql [moved from src/core/SQL/SQLite/20/update_network_set_usermode.sql with 100% similarity]
src/core/SQL/SQLite/21/update_user_setting.sql [moved from src/core/SQL/SQLite/20/update_user_setting.sql with 100% similarity]
src/core/SQL/SQLite/21/update_username.sql [moved from src/core/SQL/SQLite/20/update_username.sql with 100% similarity]
src/core/SQL/SQLite/21/update_userpassword.sql [moved from src/core/SQL/SQLite/20/update_userpassword.sql with 100% similarity]
src/core/SQL/SQLite/21/upgrade_000_alter_buffer_add_lastmsgid.sql [new file with mode: 0644]
src/core/SQL/SQLite/21/upgrade_001_update_buffer_set_lastmsgid.sql [new file with mode: 0644]
src/core/SQL/SQLite/21/upgrade_002_update_buffer_fix_lastseenmsgid_over_lastmsgid.sql [new file with mode: 0644]
src/core/SQL/SQLite/21/upgrade_003_create_table_buffer_new.sql [new file with mode: 0644]
src/core/SQL/SQLite/21/upgrade_004_insert_into_buffer_new_from_buffer.sql [new file with mode: 0644]
src/core/SQL/SQLite/21/upgrade_005_drop_table_buffer.sql [new file with mode: 0644]
src/core/SQL/SQLite/21/upgrade_006_alter_table_buffer_new_rename_to_buffer.sql [new file with mode: 0644]
src/core/sql.qrc
src/core/sqlitestorage.cpp
src/core/sqlitestorage.h

index a40bd5a..881ce5e 100644 (file)
@@ -3,7 +3,6 @@ FROM backlog
 JOIN sender ON backlog.senderid = sender.senderid
 WHERE backlog.messageid >= $1
 AND backlog.messageid <= (SELECT buffer.lastmsgid FROM buffer WHERE buffer.bufferid = $1)
-AND backlog.messageid <= buffer.lastmsgid
 AND bufferid = $2
 ORDER BY messageid DESC
 LIMIT $3
index 5541505..98218a6 100644 (file)
@@ -1,3 +1,3 @@
 UPDATE buffer
-SET lastseenmsgid = :lastseenmsgid
+SET lastseenmsgid = min(:lastseenmsgid, buffer.lastmsgid)
 WHERE userid = :userid AND bufferid = :bufferid
similarity index 74%
rename from src/core/SQL/SQLite/20/setup_030_buffer.sql
rename to src/core/SQL/SQLite/21/setup_030_buffer.sql
index facb75c..53ea542 100644 (file)
@@ -6,8 +6,10 @@ CREATE TABLE buffer (
        buffername TEXT NOT NULL,
        buffercname TEXT NOT NULL, -- CANONICAL BUFFER NAME (lowercase version)
        buffertype INTEGER NOT NULL DEFAULT 0,
+        lastmsgid INTEGER NOT NULL DEFAULT 0,
        lastseenmsgid INTEGER NOT NULL DEFAULT 0,
        markerlinemsgid INTEGER NOT NULL DEFAULT 0,
        key TEXT,
-       joined INTEGER NOT NULL DEFAULT 0 -- BOOL
+       joined INTEGER NOT NULL DEFAULT 0, -- BOOL
+       ALTER TABLE buffer_new RENAME TO buffer;
 )
diff --git a/src/core/SQL/SQLite/21/update_buffer_lastmsgid.sql b/src/core/SQL/SQLite/21/update_buffer_lastmsgid.sql
new file mode 100644 (file)
index 0000000..b0f1711
--- /dev/null
@@ -0,0 +1,3 @@
+UPDATE buffer
+SET lastmsgid = :lastmsgid
+WHERE bufferid = :bufferid
@@ -1,3 +1,3 @@
 UPDATE buffer
-SET lastseenmsgid = :lastseenmsgid
+SET lastseenmsgid = min(:lastseenmsgid, buffer.lastmsgid)
 WHERE userid = :userid AND bufferid = :bufferid
diff --git a/src/core/SQL/SQLite/21/upgrade_000_alter_buffer_add_lastmsgid.sql b/src/core/SQL/SQLite/21/upgrade_000_alter_buffer_add_lastmsgid.sql
new file mode 100644 (file)
index 0000000..35a9017
--- /dev/null
@@ -0,0 +1,2 @@
+ALTER TABLE buffer
+ADD COLUMN lastmsgid INTEGER NOT NULL DEFAULT 0;
diff --git a/src/core/SQL/SQLite/21/upgrade_001_update_buffer_set_lastmsgid.sql b/src/core/SQL/SQLite/21/upgrade_001_update_buffer_set_lastmsgid.sql
new file mode 100644 (file)
index 0000000..221e814
--- /dev/null
@@ -0,0 +1,8 @@
+UPDATE buffer
+SET lastmsgid = (
+       SELECT messageid 
+       FROM backlog 
+       WHERE backlog.bufferid = buffer.bufferid
+       ORDER BY messageid 
+       DESC LIMIT 1
+);
diff --git a/src/core/SQL/SQLite/21/upgrade_002_update_buffer_fix_lastseenmsgid_over_lastmsgid.sql b/src/core/SQL/SQLite/21/upgrade_002_update_buffer_fix_lastseenmsgid_over_lastmsgid.sql
new file mode 100644 (file)
index 0000000..0b71b69
--- /dev/null
@@ -0,0 +1,3 @@
+UPDATE buffer
+SET lastseenmsgid = buffer.lastmsgid
+WHERE buffer.lastseenmsgid > buffer.lastmsgid;
diff --git a/src/core/SQL/SQLite/21/upgrade_003_create_table_buffer_new.sql b/src/core/SQL/SQLite/21/upgrade_003_create_table_buffer_new.sql
new file mode 100644 (file)
index 0000000..d0f54e1
--- /dev/null
@@ -0,0 +1,15 @@
+CREATE TABLE buffer_new (
+        bufferid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+        userid INTEGER NOT NULL,
+        groupid INTEGER,
+        networkid INTEGER NOT NULL,
+        buffername TEXT NOT NULL,
+        buffercname TEXT NOT NULL, -- CANONICAL BUFFER NAME (lowercase version)
+        buffertype INTEGER NOT NULL DEFAULT 0,
+        lastmsgid INTEGER NOT NULL DEFAULT 0,
+        lastseenmsgid INTEGER NOT NULL DEFAULT 0,
+        markerlinemsgid INTEGER NOT NULL DEFAULT 0,
+        key TEXT,
+        joined INTEGER NOT NULL DEFAULT 0, -- BOOL
+        CHECK (lastseenmsgid <= lastmsgid)
+);
diff --git a/src/core/SQL/SQLite/21/upgrade_004_insert_into_buffer_new_from_buffer.sql b/src/core/SQL/SQLite/21/upgrade_004_insert_into_buffer_new_from_buffer.sql
new file mode 100644 (file)
index 0000000..08468c3
--- /dev/null
@@ -0,0 +1,28 @@
+INSERT INTO buffer_new (
+       bufferid, 
+       userid, 
+       groupid, 
+       networkid, 
+       buffername, 
+       buffercname, 
+       buffertype, 
+       lastmsgid, 
+       lastseenmsgid,
+       markerlinemsgid,
+       key,
+       joined
+)
+SELECT 
+       bufferid,
+       userid,
+       groupid,
+       networkid,
+       buffername,
+       buffercname,
+       buffertype,
+       lastmsgid,
+       lastseenmsgid,
+       markerlinemsgid,
+       key,
+       joined
+FROM buffer;
diff --git a/src/core/SQL/SQLite/21/upgrade_005_drop_table_buffer.sql b/src/core/SQL/SQLite/21/upgrade_005_drop_table_buffer.sql
new file mode 100644 (file)
index 0000000..f99ea6a
--- /dev/null
@@ -0,0 +1 @@
+DROP TABLE buffer;
diff --git a/src/core/SQL/SQLite/21/upgrade_006_alter_table_buffer_new_rename_to_buffer.sql b/src/core/SQL/SQLite/21/upgrade_006_alter_table_buffer_new_rename_to_buffer.sql
new file mode 100644 (file)
index 0000000..cda4714
--- /dev/null
@@ -0,0 +1,2 @@
+ALTER TABLE buffer_new RENAME TO buffer;
+
index 52e2f4a..bbf41ac 100644 (file)
@@ -81,7 +81,6 @@
     <file>./SQL/PostgreSQL/20/setup_130_function_lastmsgid.sql</file>
     <file>./SQL/PostgreSQL/20/update_backlog_bufferid.sql</file>
     <file>./SQL/PostgreSQL/20/update_buffer_lastmsgid.sql</file>
-    <file>./SQL/PostgreSQL/20/update_buffer_lastseen.sql</file>
     <file>./SQL/PostgreSQL/20/update_buffer_markerlinemsgid.sql</file>
     <file>./SQL/PostgreSQL/20/update_buffer_name.sql</file>
     <file>./SQL/PostgreSQL/20/update_buffer_persistent_channel.sql</file>
@@ -99,6 +98,7 @@
     <file>./SQL/PostgreSQL/20/upgrade_002_run_function_populate_lastmsgid.sql</file>
     <file>./SQL/PostgreSQL/20/upgrade_003_correct_bad_lastseenmsgid.sql</file>
     <file>./SQL/PostgreSQL/20/upgrade_004_add_lastseenmsgid_constraint.sql</file>
+    <file>./SQL/PostgreSQL/20/update_buffer_lastseen.sql</file>
     <file>./SQL/SQLite/1/upgrade_000_drop_coreinfo.sql</file>
     <file>./SQL/SQLite/1/upgrade_010_create_coreinfo.sql</file>
     <file>./SQL/SQLite/1/upgrade_020_update_schemaversion.sql</file>
     <file>./SQL/SQLite/19/upgrade_000_alter_ircserver_add_sslverify.sql</file>
     <file>./SQL/SQLite/2/upgrade_000_drop_buffergroup.sql</file>
     <file>./SQL/SQLite/2/upgrade_010_update_schemaversion.sql</file>
-    <file>./SQL/SQLite/20/delete_backlog_by_uid.sql</file>
-    <file>./SQL/SQLite/20/delete_backlog_for_buffer.sql</file>
-    <file>./SQL/SQLite/20/delete_backlog_for_network.sql</file>
-    <file>./SQL/SQLite/20/delete_buffer_for_bufferid.sql</file>
-    <file>./SQL/SQLite/20/delete_buffers_by_uid.sql</file>
-    <file>./SQL/SQLite/20/delete_buffers_for_network.sql</file>
-    <file>./SQL/SQLite/20/delete_identity.sql</file>
-    <file>./SQL/SQLite/20/delete_ircservers_for_network.sql</file>
-    <file>./SQL/SQLite/20/delete_network.sql</file>
-    <file>./SQL/SQLite/20/delete_networks_by_uid.sql</file>
-    <file>./SQL/SQLite/20/delete_nicks.sql</file>
-    <file>./SQL/SQLite/20/delete_quasseluser.sql</file>
-    <file>./SQL/SQLite/20/insert_buffer.sql</file>
-    <file>./SQL/SQLite/20/insert_identity.sql</file>
-    <file>./SQL/SQLite/20/insert_message.sql</file>
-    <file>./SQL/SQLite/20/insert_network.sql</file>
-    <file>./SQL/SQLite/20/insert_nick.sql</file>
-    <file>./SQL/SQLite/20/insert_quasseluser.sql</file>
-    <file>./SQL/SQLite/20/insert_sender.sql</file>
-    <file>./SQL/SQLite/20/insert_server.sql</file>
-    <file>./SQL/SQLite/20/insert_user_setting.sql</file>
-    <file>./SQL/SQLite/20/migrate_read_backlog.sql</file>
-    <file>./SQL/SQLite/20/migrate_read_buffer.sql</file>
-    <file>./SQL/SQLite/20/migrate_read_identity.sql</file>
-    <file>./SQL/SQLite/20/migrate_read_identity_nick.sql</file>
-    <file>./SQL/SQLite/20/migrate_read_ircserver.sql</file>
-    <file>./SQL/SQLite/20/migrate_read_network.sql</file>
-    <file>./SQL/SQLite/20/migrate_read_quasseluser.sql</file>
-    <file>./SQL/SQLite/20/migrate_read_sender.sql</file>
-    <file>./SQL/SQLite/20/migrate_read_usersetting.sql</file>
-    <file>./SQL/SQLite/20/select_authuser.sql</file>
-    <file>./SQL/SQLite/20/select_bufferByName.sql</file>
-    <file>./SQL/SQLite/20/select_bufferExists.sql</file>
-    <file>./SQL/SQLite/20/select_buffer_by_id.sql</file>
-    <file>./SQL/SQLite/20/select_buffer_lastseen_messages.sql</file>
-    <file>./SQL/SQLite/20/select_buffer_markerlinemsgids.sql</file>
-    <file>./SQL/SQLite/20/select_buffers.sql</file>
-    <file>./SQL/SQLite/20/select_buffers_for_merge.sql</file>
-    <file>./SQL/SQLite/20/select_buffers_for_network.sql</file>
-    <file>./SQL/SQLite/20/select_checkidentity.sql</file>
-    <file>./SQL/SQLite/20/select_connected_networks.sql</file>
-    <file>./SQL/SQLite/20/select_identities.sql</file>
-    <file>./SQL/SQLite/20/select_internaluser.sql</file>
-    <file>./SQL/SQLite/20/select_messages.sql</file>
-    <file>./SQL/SQLite/20/select_messagesAll.sql</file>
-    <file>./SQL/SQLite/20/select_messagesAllNew.sql</file>
-    <file>./SQL/SQLite/20/select_messagesNewerThan.sql</file>
-    <file>./SQL/SQLite/20/select_messagesNewestK.sql</file>
-    <file>./SQL/SQLite/20/select_networkExists.sql</file>
-    <file>./SQL/SQLite/20/select_network_awaymsg.sql</file>
-    <file>./SQL/SQLite/20/select_network_usermode.sql</file>
-    <file>./SQL/SQLite/20/select_networks_for_user.sql</file>
-    <file>./SQL/SQLite/20/select_nicks.sql</file>
-    <file>./SQL/SQLite/20/select_persistent_channels.sql</file>
-    <file>./SQL/SQLite/20/select_servers_for_network.sql</file>
-    <file>./SQL/SQLite/20/select_user_setting.sql</file>
-    <file>./SQL/SQLite/20/select_userid.sql</file>
-    <file>./SQL/SQLite/20/setup_000_quasseluser.sql</file>
-    <file>./SQL/SQLite/20/setup_010_sender.sql</file>
-    <file>./SQL/SQLite/20/setup_020_network.sql</file>
-    <file>./SQL/SQLite/20/setup_030_buffer.sql</file>
-    <file>./SQL/SQLite/20/setup_040_buffer_idx.sql</file>
-    <file>./SQL/SQLite/20/setup_050_buffer_cname_idx.sql</file>
-    <file>./SQL/SQLite/20/setup_060_backlog.sql</file>
-    <file>./SQL/SQLite/20/setup_070_coreinfo.sql</file>
-    <file>./SQL/SQLite/20/setup_080_ircservers.sql</file>
-    <file>./SQL/SQLite/20/setup_090_backlog_idx.sql</file>
-    <file>./SQL/SQLite/20/setup_100_backlog_idx2.sql</file>
-    <file>./SQL/SQLite/20/setup_110_buffer_user_idx.sql</file>
-    <file>./SQL/SQLite/20/setup_120_user_setting.sql</file>
-    <file>./SQL/SQLite/20/setup_130_identity.sql</file>
-    <file>./SQL/SQLite/20/setup_140_identity_nick.sql</file>
-    <file>./SQL/SQLite/20/update_backlog_bufferid.sql</file>
-    <file>./SQL/SQLite/20/update_buffer_lastseen.sql</file>
-    <file>./SQL/SQLite/20/update_buffer_markerlinemsgid.sql</file>
-    <file>./SQL/SQLite/20/update_buffer_name.sql</file>
-    <file>./SQL/SQLite/20/update_buffer_persistent_channel.sql</file>
-    <file>./SQL/SQLite/20/update_buffer_set_channel_key.sql</file>
-    <file>./SQL/SQLite/20/update_identity.sql</file>
-    <file>./SQL/SQLite/20/update_network.sql</file>
-    <file>./SQL/SQLite/20/update_network_connected.sql</file>
-    <file>./SQL/SQLite/20/update_network_set_awaymsg.sql</file>
-    <file>./SQL/SQLite/20/update_network_set_usermode.sql</file>
-    <file>./SQL/SQLite/20/update_user_setting.sql</file>
-    <file>./SQL/SQLite/20/update_username.sql</file>
-    <file>./SQL/SQLite/20/update_userpassword.sql</file>
     <file>./SQL/SQLite/20/upgrade_000_alter_network_add_ratelimit_usecustom.sql</file>
     <file>./SQL/SQLite/20/upgrade_001_alter_network_add_ratelimit_burstsize.sql</file>
     <file>./SQL/SQLite/20/upgrade_002_alter_network_add_ratelimit_delay.sql</file>
     <file>./SQL/SQLite/9/upgrade_000_create_backlog_idx.sql</file>
     <file>./SQL/SQLite/9/upgrade_010_create_backlog_idx2.sql</file>
     <file>./SQL/SQLite/9/upgrade_020_create_buffer_idx.sql</file>
+    <file>./SQL/SQLite/21/delete_backlog_by_uid.sql</file>
+    <file>./SQL/SQLite/21/delete_backlog_for_buffer.sql</file>
+    <file>./SQL/SQLite/21/delete_backlog_for_network.sql</file>
+    <file>./SQL/SQLite/21/delete_buffer_for_bufferid.sql</file>
+    <file>./SQL/SQLite/21/delete_buffers_by_uid.sql</file>
+    <file>./SQL/SQLite/21/delete_buffers_for_network.sql</file>
+    <file>./SQL/SQLite/21/delete_identity.sql</file>
+    <file>./SQL/SQLite/21/delete_ircservers_for_network.sql</file>
+    <file>./SQL/SQLite/21/delete_network.sql</file>
+    <file>./SQL/SQLite/21/delete_networks_by_uid.sql</file>
+    <file>./SQL/SQLite/21/delete_nicks.sql</file>
+    <file>./SQL/SQLite/21/delete_quasseluser.sql</file>
+    <file>./SQL/SQLite/21/insert_buffer.sql</file>
+    <file>./SQL/SQLite/21/insert_identity.sql</file>
+    <file>./SQL/SQLite/21/insert_message.sql</file>
+    <file>./SQL/SQLite/21/insert_network.sql</file>
+    <file>./SQL/SQLite/21/insert_nick.sql</file>
+    <file>./SQL/SQLite/21/insert_quasseluser.sql</file>
+    <file>./SQL/SQLite/21/insert_sender.sql</file>
+    <file>./SQL/SQLite/21/insert_server.sql</file>
+    <file>./SQL/SQLite/21/insert_user_setting.sql</file>
+    <file>./SQL/SQLite/21/migrate_read_backlog.sql</file>
+    <file>./SQL/SQLite/21/migrate_read_buffer.sql</file>
+    <file>./SQL/SQLite/21/migrate_read_identity.sql</file>
+    <file>./SQL/SQLite/21/migrate_read_identity_nick.sql</file>
+    <file>./SQL/SQLite/21/migrate_read_ircserver.sql</file>
+    <file>./SQL/SQLite/21/migrate_read_network.sql</file>
+    <file>./SQL/SQLite/21/migrate_read_quasseluser.sql</file>
+    <file>./SQL/SQLite/21/migrate_read_sender.sql</file>
+    <file>./SQL/SQLite/21/migrate_read_usersetting.sql</file>
+    <file>./SQL/SQLite/21/select_authuser.sql</file>
+    <file>./SQL/SQLite/21/select_bufferByName.sql</file>
+    <file>./SQL/SQLite/21/select_bufferExists.sql</file>
+    <file>./SQL/SQLite/21/select_buffer_by_id.sql</file>
+    <file>./SQL/SQLite/21/select_buffer_lastseen_messages.sql</file>
+    <file>./SQL/SQLite/21/select_buffer_markerlinemsgids.sql</file>
+    <file>./SQL/SQLite/21/select_buffers.sql</file>
+    <file>./SQL/SQLite/21/select_buffers_for_merge.sql</file>
+    <file>./SQL/SQLite/21/select_buffers_for_network.sql</file>
+    <file>./SQL/SQLite/21/select_checkidentity.sql</file>
+    <file>./SQL/SQLite/21/select_connected_networks.sql</file>
+    <file>./SQL/SQLite/21/select_identities.sql</file>
+    <file>./SQL/SQLite/21/select_internaluser.sql</file>
+    <file>./SQL/SQLite/21/select_messages.sql</file>
+    <file>./SQL/SQLite/21/select_messagesAll.sql</file>
+    <file>./SQL/SQLite/21/select_messagesAllNew.sql</file>
+    <file>./SQL/SQLite/21/select_messagesNewerThan.sql</file>
+    <file>./SQL/SQLite/21/select_messagesNewestK.sql</file>
+    <file>./SQL/SQLite/21/select_networkExists.sql</file>
+    <file>./SQL/SQLite/21/select_network_awaymsg.sql</file>
+    <file>./SQL/SQLite/21/select_network_usermode.sql</file>
+    <file>./SQL/SQLite/21/select_networks_for_user.sql</file>
+    <file>./SQL/SQLite/21/select_nicks.sql</file>
+    <file>./SQL/SQLite/21/select_persistent_channels.sql</file>
+    <file>./SQL/SQLite/21/select_servers_for_network.sql</file>
+    <file>./SQL/SQLite/21/select_user_setting.sql</file>
+    <file>./SQL/SQLite/21/select_userid.sql</file>
+    <file>./SQL/SQLite/21/setup_000_quasseluser.sql</file>
+    <file>./SQL/SQLite/21/setup_010_sender.sql</file>
+    <file>./SQL/SQLite/21/setup_020_network.sql</file>
+    <file>./SQL/SQLite/21/setup_030_buffer.sql</file>
+    <file>./SQL/SQLite/21/setup_040_buffer_idx.sql</file>
+    <file>./SQL/SQLite/21/setup_050_buffer_cname_idx.sql</file>
+    <file>./SQL/SQLite/21/setup_060_backlog.sql</file>
+    <file>./SQL/SQLite/21/setup_070_coreinfo.sql</file>
+    <file>./SQL/SQLite/21/setup_080_ircservers.sql</file>
+    <file>./SQL/SQLite/21/setup_090_backlog_idx.sql</file>
+    <file>./SQL/SQLite/21/setup_100_backlog_idx2.sql</file>
+    <file>./SQL/SQLite/21/setup_110_buffer_user_idx.sql</file>
+    <file>./SQL/SQLite/21/setup_120_user_setting.sql</file>
+    <file>./SQL/SQLite/21/setup_130_identity.sql</file>
+    <file>./SQL/SQLite/21/setup_140_identity_nick.sql</file>
+    <file>./SQL/SQLite/21/update_backlog_bufferid.sql</file>
+    <file>./SQL/SQLite/21/update_buffer_markerlinemsgid.sql</file>
+    <file>./SQL/SQLite/21/update_buffer_name.sql</file>
+    <file>./SQL/SQLite/21/update_buffer_persistent_channel.sql</file>
+    <file>./SQL/SQLite/21/update_buffer_set_channel_key.sql</file>
+    <file>./SQL/SQLite/21/update_identity.sql</file>
+    <file>./SQL/SQLite/21/update_network.sql</file>
+    <file>./SQL/SQLite/21/update_network_connected.sql</file>
+    <file>./SQL/SQLite/21/update_network_set_awaymsg.sql</file>
+    <file>./SQL/SQLite/21/update_network_set_usermode.sql</file>
+    <file>./SQL/SQLite/21/update_user_setting.sql</file>
+    <file>./SQL/SQLite/21/update_username.sql</file>
+    <file>./SQL/SQLite/21/update_userpassword.sql</file>
+    <file>./SQL/SQLite/21/upgrade_000_alter_buffer_add_lastmsgid.sql</file>
+    <file>./SQL/SQLite/21/upgrade_001_update_buffer_set_lastmsgid.sql</file>
+    <file>./SQL/SQLite/21/upgrade_002_update_buffer_fix_lastseenmsgid_over_lastmsgid.sql</file>
+    <file>./SQL/SQLite/21/upgrade_003_create_table_buffer_new.sql</file>
+    <file>./SQL/SQLite/21/upgrade_004_insert_into_buffer_new_from_buffer.sql</file>
+    <file>./SQL/SQLite/21/upgrade_006_alter_table_buffer_new_rename_to_buffer.sql</file>
+    <file>./SQL/SQLite/21/update_buffer_lastmsgid.sql</file>
+    <file>./SQL/SQLite/21/update_buffer_lastseen.sql</file>
+    <file>./SQL/SQLite/21/upgrade_005_drop_table_buffer.sql</file>
 </qresource>
 </RCC>
index 53601e0..022db0e 100644 (file)
@@ -1475,6 +1475,16 @@ QHash<BufferId, MsgId> SqliteStorage::bufferMarkerLineMsgIds(UserId user)
     return markerLineHash;
 }
 
+void SqliteStorage::setBufferLastMsg(const BufferId &bufferId, const MsgId &msgId)
+{
+    QSqlQuery query(logDb());
+    query.prepare(queryString("update_buffer_lastmsgid"));
+
+    query.bindValue(":bufferid", bufferId.toInt());
+    query.bindValue(":lastmsgid", msgId.toInt());
+    safeExec(query);
+    watchQuery(query);
+}
 
 bool SqliteStorage::logMessage(Message &msg)
 {
@@ -1514,6 +1524,8 @@ bool SqliteStorage::logMessage(Message &msg)
             MsgId msgId = logMessageQuery.lastInsertId().toInt();
             if (msgId.isValid()) {
                 msg.setMsgId(msgId);
+
+                setBufferLastMsg(msg.bufferInfo().bufferId(), msgId);
             }
             else {
                 error = true;
index 9a12fbe..f66e70f 100644 (file)
@@ -96,6 +96,7 @@ public slots:
     virtual QHash<BufferId, MsgId> bufferLastSeenMsgIds(UserId user);
     virtual void setBufferMarkerLineMsg(UserId user, const BufferId &bufferId, const MsgId &msgId);
     virtual QHash<BufferId, MsgId> bufferMarkerLineMsgIds(UserId user);
+    virtual void setBufferLastMsg(const BufferId &bufferId, const MsgId &msgId);
 
     /* Message handling */
     virtual bool logMessage(Message &msg);