Implement custom rate limits
authorShane Synan <digitalcircuit36939@gmail.com>
Mon, 5 Sep 2016 21:26:44 +0000 (16:26 -0500)
committerManuel Nickschas <sputnick@quassel-irc.org>
Tue, 13 Sep 2016 22:07:58 +0000 (00:07 +0200)
commit7d30b18136eecbdf2089e5d5877c7e41c6f4bcb6
treedf01aad16c8de94e70dcec49216448feccc1a52c
parent3a5df5589e3cbefcaad966ba23643d58d4ec9768
Implement custom rate limits

Add custom rate limits flag and settings.
> In database, add 'usecustommessagerate', 'messagerateburstsize',
'messageratedelay', and 'unlimitedmessagerate' to 'network' table,
defaulting to the values already used.  This modifies schema,
requiring a version bump, changes to migration scripts, etc.
Use 4 upgrade scripts as SQLite does not support adding multiple
columns at once.
> In protocol, add 'useCustomMessageRate', 'msgRateBurstSize',
'msgRateMessageDelay', and 'unlimitedMessageRate' to Network,
configuring custom rate limits.

Add 'CustomRateLimits' feature flag so the client can tell users
about needing to upgrade their core to get this feature.

If rate limits set to unlimited, disable the token bucket timer and
send messages immediately.  Otherwise, modify the existing token
bucket variables according to the new limits.  The defaults are
unchanged.

Add "Use Custom Rate Limits" checkbox to network "Connection" tab
with an explanatory tooltip warning against setting too low of rate
limits.  Tooltip is modified and checkbox disabled if the core does
not support the feature.

Testing:
> Database schema handling
SQLite new install - works
SQLite upgrade - works
SQLite migrate to Postgres - works
Postgres new install - works
Postgres upgrade - works

> Client/core connections
New client, new core - works
New client, old core - works, custom rates grayed out
Old client, new core - works, custom rates reset + disabled on edit
(Unfortunately there's no way to use a boolean and tell if the client
 is old, or actually disabling custom rate limits.  Would need the
 work-in-progress ClientFeature system 'esainane' designed)
192 files changed:
src/common/network.cpp
src/common/network.h
src/common/quassel.h
src/core/SQL/PostgreSQL/18/insert_network.sql [deleted file]
src/core/SQL/PostgreSQL/18/migrate_write_network.sql [deleted file]
src/core/SQL/PostgreSQL/19/delete_backlog_by_uid.sql [moved from src/core/SQL/PostgreSQL/18/delete_backlog_by_uid.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/delete_backlog_for_buffer.sql [moved from src/core/SQL/PostgreSQL/18/delete_backlog_for_buffer.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/delete_backlog_for_network.sql [moved from src/core/SQL/PostgreSQL/18/delete_backlog_for_network.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/delete_buffer_for_bufferid.sql [moved from src/core/SQL/PostgreSQL/18/delete_buffer_for_bufferid.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/delete_buffers_by_uid.sql [moved from src/core/SQL/PostgreSQL/18/delete_buffers_by_uid.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/delete_buffers_for_network.sql [moved from src/core/SQL/PostgreSQL/18/delete_buffers_for_network.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/delete_identity.sql [moved from src/core/SQL/PostgreSQL/18/delete_identity.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/delete_ircservers_for_network.sql [moved from src/core/SQL/PostgreSQL/18/delete_ircservers_for_network.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/delete_network.sql [moved from src/core/SQL/PostgreSQL/18/delete_network.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/delete_networks_by_uid.sql [moved from src/core/SQL/PostgreSQL/18/delete_networks_by_uid.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/delete_nicks.sql [moved from src/core/SQL/PostgreSQL/18/delete_nicks.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/delete_quasseluser.sql [moved from src/core/SQL/PostgreSQL/18/delete_quasseluser.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/insert_buffer.sql [moved from src/core/SQL/PostgreSQL/18/insert_buffer.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/insert_identity.sql [moved from src/core/SQL/PostgreSQL/18/insert_identity.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/insert_message.sql [moved from src/core/SQL/PostgreSQL/18/insert_message.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/insert_network.sql [new file with mode: 0644]
src/core/SQL/PostgreSQL/19/insert_nick.sql [moved from src/core/SQL/PostgreSQL/18/insert_nick.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/insert_quasseluser.sql [moved from src/core/SQL/PostgreSQL/18/insert_quasseluser.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/insert_sender.sql [moved from src/core/SQL/PostgreSQL/18/insert_sender.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/insert_server.sql [moved from src/core/SQL/PostgreSQL/18/insert_server.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/insert_user_setting.sql [moved from src/core/SQL/PostgreSQL/18/insert_user_setting.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/migrate_write_backlog.sql [moved from src/core/SQL/PostgreSQL/18/migrate_write_backlog.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/migrate_write_buffer.sql [moved from src/core/SQL/PostgreSQL/18/migrate_write_buffer.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/migrate_write_identity.sql [moved from src/core/SQL/PostgreSQL/18/migrate_write_identity.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/migrate_write_identity_nick.sql [moved from src/core/SQL/PostgreSQL/18/migrate_write_identity_nick.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/migrate_write_ircserver.sql [moved from src/core/SQL/PostgreSQL/18/migrate_write_ircserver.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/migrate_write_network.sql [new file with mode: 0644]
src/core/SQL/PostgreSQL/19/migrate_write_quasseluser.sql [moved from src/core/SQL/PostgreSQL/18/migrate_write_quasseluser.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/migrate_write_sender.sql [moved from src/core/SQL/PostgreSQL/18/migrate_write_sender.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/migrate_write_usersetting.sql [moved from src/core/SQL/PostgreSQL/18/migrate_write_usersetting.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_authuser.sql [moved from src/core/SQL/PostgreSQL/18/select_authuser.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_bufferByName.sql [moved from src/core/SQL/PostgreSQL/18/select_bufferByName.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_bufferExists.sql [moved from src/core/SQL/PostgreSQL/18/select_bufferExists.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_buffer_by_id.sql [moved from src/core/SQL/PostgreSQL/18/select_buffer_by_id.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_buffer_lastseen_messages.sql [moved from src/core/SQL/PostgreSQL/18/select_buffer_lastseen_messages.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_buffer_markerlinemsgids.sql [moved from src/core/SQL/PostgreSQL/18/select_buffer_markerlinemsgids.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_buffers.sql [moved from src/core/SQL/PostgreSQL/18/select_buffers.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_buffers_for_network.sql [moved from src/core/SQL/PostgreSQL/18/select_buffers_for_network.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_checkidentity.sql [moved from src/core/SQL/PostgreSQL/18/select_checkidentity.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_connected_networks.sql [moved from src/core/SQL/PostgreSQL/18/select_connected_networks.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_identities.sql [moved from src/core/SQL/PostgreSQL/18/select_identities.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_internaluser.sql [moved from src/core/SQL/PostgreSQL/18/select_internaluser.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_messages.sql [moved from src/core/SQL/PostgreSQL/18/select_messages.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_messagesAll.sql [moved from src/core/SQL/PostgreSQL/18/select_messagesAll.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_messagesAllNew.sql [moved from src/core/SQL/PostgreSQL/18/select_messagesAllNew.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_messagesNewerThan.sql [moved from src/core/SQL/PostgreSQL/18/select_messagesNewerThan.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_messagesRange.sql [moved from src/core/SQL/PostgreSQL/18/select_messagesRange.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_networkExists.sql [moved from src/core/SQL/PostgreSQL/18/select_networkExists.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_network_awaymsg.sql [moved from src/core/SQL/PostgreSQL/18/select_network_awaymsg.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_network_usermode.sql [moved from src/core/SQL/PostgreSQL/18/select_network_usermode.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_networks_for_user.sql [moved from src/core/SQL/SQLite/19/select_networks_for_user.sql with 60% similarity]
src/core/SQL/PostgreSQL/19/select_nicks.sql [moved from src/core/SQL/PostgreSQL/18/select_nicks.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_persistent_channels.sql [moved from src/core/SQL/PostgreSQL/18/select_persistent_channels.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_senderid.sql [moved from src/core/SQL/PostgreSQL/18/select_senderid.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_servers_for_network.sql [moved from src/core/SQL/PostgreSQL/18/select_servers_for_network.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_user_setting.sql [moved from src/core/SQL/PostgreSQL/18/select_user_setting.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/select_userid.sql [moved from src/core/SQL/PostgreSQL/18/select_userid.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/setup_000_quasseluser.sql [moved from src/core/SQL/PostgreSQL/18/setup_000_quasseluser.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/setup_010_sender.sql [moved from src/core/SQL/PostgreSQL/18/setup_010_sender.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/setup_020_identity.sql [moved from src/core/SQL/PostgreSQL/18/setup_020_identity.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/setup_030_identity_nick.sql [moved from src/core/SQL/PostgreSQL/18/setup_030_identity_nick.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/setup_040_network.sql [moved from src/core/SQL/PostgreSQL/18/setup_040_network.sql with 79% similarity]
src/core/SQL/PostgreSQL/19/setup_050_buffer.sql [moved from src/core/SQL/PostgreSQL/18/setup_050_buffer.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/setup_060_backlog.sql [moved from src/core/SQL/PostgreSQL/18/setup_060_backlog.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/setup_070_coreinfo.sql [moved from src/core/SQL/PostgreSQL/18/setup_070_coreinfo.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/setup_080_ircservers.sql [moved from src/core/SQL/PostgreSQL/18/setup_080_ircservers.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/setup_090_backlog_idx.sql [moved from src/core/SQL/PostgreSQL/18/setup_090_backlog_idx.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/setup_100_user_setting.sql [moved from src/core/SQL/PostgreSQL/18/setup_100_user_setting.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/setup_110_alter_sender_seq.sql [moved from src/core/SQL/PostgreSQL/18/setup_110_alter_sender_seq.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/setup_120_alter_messageid_seq.sql [moved from src/core/SQL/PostgreSQL/18/setup_120_alter_messageid_seq.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/update_backlog_bufferid.sql [moved from src/core/SQL/PostgreSQL/18/update_backlog_bufferid.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/update_buffer_lastseen.sql [moved from src/core/SQL/PostgreSQL/18/update_buffer_lastseen.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/update_buffer_markerlinemsgid.sql [moved from src/core/SQL/PostgreSQL/18/update_buffer_markerlinemsgid.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/update_buffer_name.sql [moved from src/core/SQL/PostgreSQL/18/update_buffer_name.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/update_buffer_persistent_channel.sql [moved from src/core/SQL/PostgreSQL/18/update_buffer_persistent_channel.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/update_buffer_set_channel_key.sql [moved from src/core/SQL/PostgreSQL/18/update_buffer_set_channel_key.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/update_identity.sql [moved from src/core/SQL/PostgreSQL/18/update_identity.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/update_network.sql [moved from src/core/SQL/PostgreSQL/18/update_network.sql with 79% similarity]
src/core/SQL/PostgreSQL/19/update_network_connected.sql [moved from src/core/SQL/PostgreSQL/18/update_network_connected.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/update_network_set_awaymsg.sql [moved from src/core/SQL/PostgreSQL/18/update_network_set_awaymsg.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/update_network_set_usermode.sql [moved from src/core/SQL/PostgreSQL/18/update_network_set_usermode.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/update_user_setting.sql [moved from src/core/SQL/PostgreSQL/18/update_user_setting.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/update_username.sql [moved from src/core/SQL/PostgreSQL/18/update_username.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/update_userpassword.sql [moved from src/core/SQL/PostgreSQL/18/update_userpassword.sql with 100% similarity]
src/core/SQL/PostgreSQL/19/upgrade_000_alter_network_add_ratelimit_usecustom.sql [new file with mode: 0644]
src/core/SQL/PostgreSQL/19/upgrade_001_alter_network_add_ratelimit_burstsize.sql [new file with mode: 0644]
src/core/SQL/PostgreSQL/19/upgrade_002_alter_network_add_ratelimit_delay.sql [new file with mode: 0644]
src/core/SQL/PostgreSQL/19/upgrade_003_alter_network_add_ratelimit_unlimited.sql [new file with mode: 0644]
src/core/SQL/SQLite/19/insert_network.sql [deleted file]
src/core/SQL/SQLite/20/delete_backlog_by_uid.sql [moved from src/core/SQL/SQLite/19/delete_backlog_by_uid.sql with 100% similarity]
src/core/SQL/SQLite/20/delete_backlog_for_buffer.sql [moved from src/core/SQL/SQLite/19/delete_backlog_for_buffer.sql with 100% similarity]
src/core/SQL/SQLite/20/delete_backlog_for_network.sql [moved from src/core/SQL/SQLite/19/delete_backlog_for_network.sql with 100% similarity]
src/core/SQL/SQLite/20/delete_buffer_for_bufferid.sql [moved from src/core/SQL/SQLite/19/delete_buffer_for_bufferid.sql with 100% similarity]
src/core/SQL/SQLite/20/delete_buffers_by_uid.sql [moved from src/core/SQL/SQLite/19/delete_buffers_by_uid.sql with 100% similarity]
src/core/SQL/SQLite/20/delete_buffers_for_network.sql [moved from src/core/SQL/SQLite/19/delete_buffers_for_network.sql with 100% similarity]
src/core/SQL/SQLite/20/delete_identity.sql [moved from src/core/SQL/SQLite/19/delete_identity.sql with 100% similarity]
src/core/SQL/SQLite/20/delete_ircservers_for_network.sql [moved from src/core/SQL/SQLite/19/delete_ircservers_for_network.sql with 100% similarity]
src/core/SQL/SQLite/20/delete_network.sql [moved from src/core/SQL/SQLite/19/delete_network.sql with 100% similarity]
src/core/SQL/SQLite/20/delete_networks_by_uid.sql [moved from src/core/SQL/SQLite/19/delete_networks_by_uid.sql with 100% similarity]
src/core/SQL/SQLite/20/delete_nicks.sql [moved from src/core/SQL/SQLite/19/delete_nicks.sql with 100% similarity]
src/core/SQL/SQLite/20/delete_quasseluser.sql [moved from src/core/SQL/SQLite/19/delete_quasseluser.sql with 100% similarity]
src/core/SQL/SQLite/20/insert_buffer.sql [moved from src/core/SQL/SQLite/19/insert_buffer.sql with 100% similarity]
src/core/SQL/SQLite/20/insert_identity.sql [moved from src/core/SQL/SQLite/19/insert_identity.sql with 100% similarity]
src/core/SQL/SQLite/20/insert_message.sql [moved from src/core/SQL/SQLite/19/insert_message.sql with 100% similarity]
src/core/SQL/SQLite/20/insert_network.sql [new file with mode: 0644]
src/core/SQL/SQLite/20/insert_nick.sql [moved from src/core/SQL/SQLite/19/insert_nick.sql with 100% similarity]
src/core/SQL/SQLite/20/insert_quasseluser.sql [moved from src/core/SQL/SQLite/19/insert_quasseluser.sql with 100% similarity]
src/core/SQL/SQLite/20/insert_sender.sql [moved from src/core/SQL/SQLite/19/insert_sender.sql with 100% similarity]
src/core/SQL/SQLite/20/insert_server.sql [moved from src/core/SQL/SQLite/19/insert_server.sql with 100% similarity]
src/core/SQL/SQLite/20/insert_user_setting.sql [moved from src/core/SQL/SQLite/19/insert_user_setting.sql with 100% similarity]
src/core/SQL/SQLite/20/migrate_read_backlog.sql [moved from src/core/SQL/SQLite/19/migrate_read_backlog.sql with 100% similarity]
src/core/SQL/SQLite/20/migrate_read_buffer.sql [moved from src/core/SQL/SQLite/19/migrate_read_buffer.sql with 100% similarity]
src/core/SQL/SQLite/20/migrate_read_identity.sql [moved from src/core/SQL/SQLite/19/migrate_read_identity.sql with 100% similarity]
src/core/SQL/SQLite/20/migrate_read_identity_nick.sql [moved from src/core/SQL/SQLite/19/migrate_read_identity_nick.sql with 100% similarity]
src/core/SQL/SQLite/20/migrate_read_ircserver.sql [moved from src/core/SQL/SQLite/19/migrate_read_ircserver.sql with 100% similarity]
src/core/SQL/SQLite/20/migrate_read_network.sql [moved from src/core/SQL/SQLite/19/migrate_read_network.sql with 74% similarity]
src/core/SQL/SQLite/20/migrate_read_quasseluser.sql [moved from src/core/SQL/SQLite/19/migrate_read_quasseluser.sql with 100% similarity]
src/core/SQL/SQLite/20/migrate_read_sender.sql [moved from src/core/SQL/SQLite/19/migrate_read_sender.sql with 100% similarity]
src/core/SQL/SQLite/20/migrate_read_usersetting.sql [moved from src/core/SQL/SQLite/19/migrate_read_usersetting.sql with 100% similarity]
src/core/SQL/SQLite/20/select_authuser.sql [moved from src/core/SQL/SQLite/19/select_authuser.sql with 100% similarity]
src/core/SQL/SQLite/20/select_bufferByName.sql [moved from src/core/SQL/SQLite/19/select_bufferByName.sql with 100% similarity]
src/core/SQL/SQLite/20/select_bufferExists.sql [moved from src/core/SQL/SQLite/19/select_bufferExists.sql with 100% similarity]
src/core/SQL/SQLite/20/select_buffer_by_id.sql [moved from src/core/SQL/SQLite/19/select_buffer_by_id.sql with 100% similarity]
src/core/SQL/SQLite/20/select_buffer_lastseen_messages.sql [moved from src/core/SQL/SQLite/19/select_buffer_lastseen_messages.sql with 100% similarity]
src/core/SQL/SQLite/20/select_buffer_markerlinemsgids.sql [moved from src/core/SQL/SQLite/19/select_buffer_markerlinemsgids.sql with 100% similarity]
src/core/SQL/SQLite/20/select_buffers.sql [moved from src/core/SQL/SQLite/19/select_buffers.sql with 100% similarity]
src/core/SQL/SQLite/20/select_buffers_for_merge.sql [moved from src/core/SQL/SQLite/19/select_buffers_for_merge.sql with 100% similarity]
src/core/SQL/SQLite/20/select_buffers_for_network.sql [moved from src/core/SQL/SQLite/19/select_buffers_for_network.sql with 100% similarity]
src/core/SQL/SQLite/20/select_checkidentity.sql [moved from src/core/SQL/SQLite/19/select_checkidentity.sql with 100% similarity]
src/core/SQL/SQLite/20/select_connected_networks.sql [moved from src/core/SQL/SQLite/19/select_connected_networks.sql with 100% similarity]
src/core/SQL/SQLite/20/select_identities.sql [moved from src/core/SQL/SQLite/19/select_identities.sql with 100% similarity]
src/core/SQL/SQLite/20/select_internaluser.sql [moved from src/core/SQL/SQLite/19/select_internaluser.sql with 100% similarity]
src/core/SQL/SQLite/20/select_messages.sql [moved from src/core/SQL/SQLite/19/select_messages.sql with 100% similarity]
src/core/SQL/SQLite/20/select_messagesAll.sql [moved from src/core/SQL/SQLite/19/select_messagesAll.sql with 100% similarity]
src/core/SQL/SQLite/20/select_messagesAllNew.sql [moved from src/core/SQL/SQLite/19/select_messagesAllNew.sql with 100% similarity]
src/core/SQL/SQLite/20/select_messagesNewerThan.sql [moved from src/core/SQL/SQLite/19/select_messagesNewerThan.sql with 100% similarity]
src/core/SQL/SQLite/20/select_messagesNewestK.sql [moved from src/core/SQL/SQLite/19/select_messagesNewestK.sql with 100% similarity]
src/core/SQL/SQLite/20/select_networkExists.sql [moved from src/core/SQL/SQLite/19/select_networkExists.sql with 100% similarity]
src/core/SQL/SQLite/20/select_network_awaymsg.sql [moved from src/core/SQL/SQLite/19/select_network_awaymsg.sql with 100% similarity]
src/core/SQL/SQLite/20/select_network_usermode.sql [moved from src/core/SQL/SQLite/19/select_network_usermode.sql with 100% similarity]
src/core/SQL/SQLite/20/select_networks_for_user.sql [moved from src/core/SQL/PostgreSQL/18/select_networks_for_user.sql with 60% similarity]
src/core/SQL/SQLite/20/select_nicks.sql [moved from src/core/SQL/SQLite/19/select_nicks.sql with 100% similarity]
src/core/SQL/SQLite/20/select_persistent_channels.sql [moved from src/core/SQL/SQLite/19/select_persistent_channels.sql with 100% similarity]
src/core/SQL/SQLite/20/select_servers_for_network.sql [moved from src/core/SQL/SQLite/19/select_servers_for_network.sql with 100% similarity]
src/core/SQL/SQLite/20/select_user_setting.sql [moved from src/core/SQL/SQLite/19/select_user_setting.sql with 100% similarity]
src/core/SQL/SQLite/20/select_userid.sql [moved from src/core/SQL/SQLite/19/select_userid.sql with 100% similarity]
src/core/SQL/SQLite/20/setup_000_quasseluser.sql [moved from src/core/SQL/SQLite/19/setup_000_quasseluser.sql with 100% similarity]
src/core/SQL/SQLite/20/setup_010_sender.sql [moved from src/core/SQL/SQLite/19/setup_010_sender.sql with 100% similarity]
src/core/SQL/SQLite/20/setup_020_network.sql [moved from src/core/SQL/SQLite/19/setup_020_network.sql with 78% similarity]
src/core/SQL/SQLite/20/setup_030_buffer.sql [moved from src/core/SQL/SQLite/19/setup_030_buffer.sql with 100% similarity]
src/core/SQL/SQLite/20/setup_040_buffer_idx.sql [moved from src/core/SQL/SQLite/19/setup_040_buffer_idx.sql with 100% similarity]
src/core/SQL/SQLite/20/setup_050_buffer_cname_idx.sql [moved from src/core/SQL/SQLite/19/setup_050_buffer_cname_idx.sql with 100% similarity]
src/core/SQL/SQLite/20/setup_060_backlog.sql [moved from src/core/SQL/SQLite/19/setup_060_backlog.sql with 100% similarity]
src/core/SQL/SQLite/20/setup_070_coreinfo.sql [moved from src/core/SQL/SQLite/19/setup_070_coreinfo.sql with 100% similarity]
src/core/SQL/SQLite/20/setup_080_ircservers.sql [moved from src/core/SQL/SQLite/19/setup_080_ircservers.sql with 100% similarity]
src/core/SQL/SQLite/20/setup_090_backlog_idx.sql [moved from src/core/SQL/SQLite/19/setup_090_backlog_idx.sql with 100% similarity]
src/core/SQL/SQLite/20/setup_100_backlog_idx2.sql [moved from src/core/SQL/SQLite/19/setup_100_backlog_idx2.sql with 100% similarity]
src/core/SQL/SQLite/20/setup_110_buffer_user_idx.sql [moved from src/core/SQL/SQLite/19/setup_110_buffer_user_idx.sql with 100% similarity]
src/core/SQL/SQLite/20/setup_120_user_setting.sql [moved from src/core/SQL/SQLite/19/setup_120_user_setting.sql with 100% similarity]
src/core/SQL/SQLite/20/setup_130_identity.sql [moved from src/core/SQL/SQLite/19/setup_130_identity.sql with 100% similarity]
src/core/SQL/SQLite/20/setup_140_identity_nick.sql [moved from src/core/SQL/SQLite/19/setup_140_identity_nick.sql with 100% similarity]
src/core/SQL/SQLite/20/update_backlog_bufferid.sql [moved from src/core/SQL/SQLite/19/update_backlog_bufferid.sql with 100% similarity]
src/core/SQL/SQLite/20/update_buffer_lastseen.sql [moved from src/core/SQL/SQLite/19/update_buffer_lastseen.sql with 100% similarity]
src/core/SQL/SQLite/20/update_buffer_markerlinemsgid.sql [moved from src/core/SQL/SQLite/19/update_buffer_markerlinemsgid.sql with 100% similarity]
src/core/SQL/SQLite/20/update_buffer_name.sql [moved from src/core/SQL/SQLite/19/update_buffer_name.sql with 100% similarity]
src/core/SQL/SQLite/20/update_buffer_persistent_channel.sql [moved from src/core/SQL/SQLite/19/update_buffer_persistent_channel.sql with 100% similarity]
src/core/SQL/SQLite/20/update_buffer_set_channel_key.sql [moved from src/core/SQL/SQLite/19/update_buffer_set_channel_key.sql with 100% similarity]
src/core/SQL/SQLite/20/update_identity.sql [moved from src/core/SQL/SQLite/19/update_identity.sql with 100% similarity]
src/core/SQL/SQLite/20/update_network.sql [moved from src/core/SQL/SQLite/19/update_network.sql with 79% similarity]
src/core/SQL/SQLite/20/update_network_connected.sql [moved from src/core/SQL/SQLite/19/update_network_connected.sql with 100% similarity]
src/core/SQL/SQLite/20/update_network_set_awaymsg.sql [moved from src/core/SQL/SQLite/19/update_network_set_awaymsg.sql with 100% similarity]
src/core/SQL/SQLite/20/update_network_set_usermode.sql [moved from src/core/SQL/SQLite/19/update_network_set_usermode.sql with 100% similarity]
src/core/SQL/SQLite/20/update_user_setting.sql [moved from src/core/SQL/SQLite/19/update_user_setting.sql with 100% similarity]
src/core/SQL/SQLite/20/update_username.sql [moved from src/core/SQL/SQLite/19/update_username.sql with 100% similarity]
src/core/SQL/SQLite/20/update_userpassword.sql [moved from src/core/SQL/SQLite/19/update_userpassword.sql with 100% similarity]
src/core/SQL/SQLite/20/upgrade_000_alter_network_add_ratelimit_usecustom.sql [new file with mode: 0644]
src/core/SQL/SQLite/20/upgrade_001_alter_network_add_ratelimit_burstsize.sql [new file with mode: 0644]
src/core/SQL/SQLite/20/upgrade_002_alter_network_add_ratelimit_delay.sql [new file with mode: 0644]
src/core/SQL/SQLite/20/upgrade_003_alter_network_add_ratelimit_unlimited.sql [new file with mode: 0644]
src/core/abstractsqlstorage.h
src/core/corenetwork.cpp
src/core/corenetwork.h
src/core/postgresqlstorage.cpp
src/core/sql.qrc
src/core/sqlitestorage.cpp
src/qtui/settingspages/networkssettingspage.cpp
src/qtui/settingspages/networkssettingspage.ui