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)
 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
 AND bufferid = $2
 ORDER BY messageid DESC
 LIMIT $3
index 5541505..98218a6 100644 (file)
@@ -1,3 +1,3 @@
 UPDATE buffer
 UPDATE buffer
-SET lastseenmsgid = :lastseenmsgid
+SET lastseenmsgid = min(:lastseenmsgid, buffer.lastmsgid)
 WHERE userid = :userid AND bufferid = :bufferid
 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,
        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,
        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
 UPDATE buffer
-SET lastseenmsgid = :lastseenmsgid
+SET lastseenmsgid = min(:lastseenmsgid, buffer.lastmsgid)
 WHERE userid = :userid AND bufferid = :bufferid
 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/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>
     <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/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/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/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/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/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>
 </qresource>
 </RCC>
index 53601e0..022db0e 100644 (file)
@@ -1475,6 +1475,16 @@ QHash<BufferId, MsgId> SqliteStorage::bufferMarkerLineMsgIds(UserId user)
     return markerLineHash;
 }
 
     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)
 {
 
 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);
             MsgId msgId = logMessageQuery.lastInsertId().toInt();
             if (msgId.isValid()) {
                 msg.setMsgId(msgId);
+
+                setBufferLastMsg(msg.bufferInfo().bufferId(), msgId);
             }
             else {
                 error = true;
             }
             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 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);
 
     /* Message handling */
     virtual bool logMessage(Message &msg);