Commit Graph
51 Commits
Author SHA1 Message Date
louiz’ 782732ba16 Remove a bunch of useless empty lines 2018-08-04 14:50:33 +02:00
louiz’ 458ea53db3 Fix a compile error with GCC 5.x
fix #3366
2018-07-14 13:36:53 +02:00
louiz’ b0168fd45b mam: Send “fin complete” only when appropriate
Also simplify how we did the whole “limit + 1”
And fix one bad interpretation of the XEP for the case where the query has
no after or before restriction.

fix #3349
2018-04-29 22:18:26 +02:00
louiz’ 1236b8a03b Only use the ID to order archives
fix #3343
2018-04-24 20:25:40 +02:00
louiz’ 61de6b1dac Revert "Use a different Date data type"
This reverts commit 857c7d3972.
2018-04-24 20:25:40 +02:00
louiz’ a90f196a1c Revert "Use the Date to find a next page in RSM, not the id"
This reverts commit 5ef7ba0802.
2018-04-24 20:25:39 +02:00
louiz’ 5ef7ba0802 Use the Date to find a next page in RSM, not the id
This way, it works, whatever the order of insertion in the database was.

fix #3343
2018-04-14 19:48:45 +02:00
louiz’ 4bd7b6981b Refactor that fixes a compilation issue in Release mode
Some template specialization were not found, because they were not declared
at the point they were used.

We moved things around, things are less inter-dependant, and also now it
works.
2018-04-13 23:35:06 +02:00
louiz’ 857c7d3972 Use a different Date data type
PLEASE backup your database before testing this commit, and report any
migration issue.

In postgresql, we use timestamp with timezone.
In sqlite3 we use REAL (the date is expressed as julianday)

This requires a migration of the muclogline_ table:
In postgresql it’s pretty simple, we convert all the integer into timestamps

With sqlite3, we actually rename the table, create the new one with the
correct type, then copy everything to the new table, with a conversion
function for the Date_ column, and then we delete the old table.

fix #3343
2018-04-11 00:25:18 +02:00
louiz’ 9500bfd4cc Reflect message IDs in channel MUCs
fix #3283
2018-03-18 19:33:07 +01:00
louiz’ 5af0a8040c Use a transaction around the DELETE + INSERT of the after_connection_commands
Otherwise we can imagine that two clients changing this value at the same
time would mix things up.

ref #3275
2018-03-18 02:54:34 +01:00
louiz’ 577984faf2 Allow the execution of multiple commands after the IRC connection
fix #3275
2018-03-18 02:31:18 +01:00
louiz’ d3e07eee13 Sort archive messages by date (and only then by id)
fix #3337

Because apparently the IDs are not always incrementing. We still use them to
know the order of two messages that were received at the same second (in
this case, the ID will always be incrementing).
2018-02-16 00:56:07 +01:00
louiz’ 4a2a280d76 Support the <before/> element in MAM requests 2018-02-13 03:51:03 +01:00
louiz’ fd7c365288 Use the same function for both history orders 2018-02-13 03:10:00 +01:00
louiz’ 0280343ced Handle the “after” RSM value to page through results 2018-02-10 19:51:59 +01:00
louiz’ 99389eefba Always return the oldest matching messages from MAM, even if no date is set 2018-02-10 17:47:42 +01:00
louiz’ a557718bf2 db_name also accepts postgres:// scheme for PostgreSQL connections 2017-12-16 15:34:54 +01:00
louiz’ 414bbca0bc Handle postgresql and sqlite3 libs properly
Do not fail to compile when one of them is missing but the other one is not.

Raise an error when trying to open a database with the missing library.

see #3237
2017-12-02 20:08:50 +01:00
Jonas Wielicki e1c7a6518a Actually free the database on Database::close()
.release() returns the pointer and releases ownership *without*
destruction.
2017-12-02 20:08:50 +01:00
Jonas Wielicki 4f7ad3f985 Support for full postgresql URIs
(cf. https://www.postgresql.org/docs/9.4/static/libpq-connect.html#LIBPQ-CONNSTRING)
2017-12-02 20:08:50 +01:00
louiz’ 0168b96b79 Add postgresql support 2017-12-02 20:08:47 +01:00
Romain DEP. 103e508f3b compat: revert to using sqlite's close() function for compat with older distros.
close_v2(), in use before this commit, was introduced as part of sqlite 3.7.14
 (2012-09-03), and is as such incompatible with debian wheezy (3.7.13) and
 centos6 (3.6.20).
 FTR, Wheezy will be supported until May 2018, and centos6, until November 2020.
2017-09-21 08:38:04 +02:00
louiz’ bfcf294517 Add the persistent_by_default configuration option
fix #3293
2017-09-09 17:09:17 +02:00
louiz’ 2c717d347d Add an index for the muc_log_line table
This immensely speeds up the archive select queries.

fix #3292
2017-08-26 17:42:59 +02:00
louiz’ 655151d88a Cache the encoding_in database value, to avoid doing a query for each message 2017-08-26 13:51:15 +02:00
louiz’ 2a62b8b082 Fix a sqlite3 leak when the database fails to open 2017-08-19 13:02:34 +02:00
louiz’ 9648fd286c Display the correct error message when we fail to open the sqlite3 db
fix #3290
2017-08-19 13:02:13 +02:00
louiz’ 84034ed3dc Use a db roster to manage biboumi’s presence with the contacts 2017-07-16 00:16:43 +02:00
louiz’ b71ca15a0f Move a few functions from select_query to query 2017-06-23 00:13:38 +02:00
louiz’ 8a7166eef9 Set the database pointer to nullptr after a close 2017-06-22 16:14:00 +02:00
louiz’ 4d55a120d8 Re-implement correctly the handling of failure to open the database
If we can’t open it at startup, we exit.
If we can’t open it on reload, we keep the previously-opened database.

This way, we’re assured to always have a valid and open database available.
2017-06-21 17:41:03 +02:00
louiz’ 4a963cc480 At startup, upgrade all database tables by adding missing columns 2017-06-16 09:53:49 +02:00
louiz’ 50cadf3dac Implement our own database ORM, and update the whole code to use it
Entirely replace LiteSQL

fix #3271
2017-06-14 00:19:15 +02:00
louiz’ 7f2127a7ea Add the archive ID to messages when they are sent to users
This makes us compatible with mam 6.0

fix #3249
2017-03-30 18:16:44 +02:00
louiz’ 1a09c965eb Remove two sneaky log_debug 2017-03-29 23:32:43 +02:00
louiz’ 379fe026fb Properly convert the data into a number of seconds by using duration_cast 2016-12-10 04:15:49 +01:00
louiz’ 363a0bf02c Look for uuid/uuid.h instead of just uuid.h
Avoids a conflict between /usr/include/uuid.h and
/usr/local/include/uuid/uuid.h on freebsd
2016-09-29 20:11:35 +02:00
louiz’ 3047bd41b2 MAM results can be filtered by start and end dates 2016-09-04 22:58:38 +02:00
louiz’ 7536a1b3f3 Respond to MAM requests on a channel JID
At the moment, result-set-management is not implemented, the whole history
(well, at most 1024 messages) is returned.
2016-08-28 22:42:50 +02:00
louiz’ 88499d0379 If the maxHistoryLength is negative, make it 0
Instead of doing a broken SQL request that returns weird lines
2016-08-23 01:28:12 +02:00
louiz’ d1626c929f When joining a channel, send the most recent history found in the database 2016-08-22 00:44:17 +02:00
louiz’ 593b326827 When saving the logs, the date must be in seconds, not nanoseconds 2016-08-22 00:39:11 +02:00
louiz’ 6776b827d2 Add a global configure ad-hoc command, with max history length 2016-08-22 00:38:44 +02:00
louiz’ 992fa93895 Add get_first_non_empty and use it into Database to simplify a little bit 2016-08-21 01:51:52 +02:00
louiz’ 8ec823be4f Save received and sent messages into the database 2016-08-12 16:39:19 +02:00
louiz’ 4c1b9abe7e Properly catch and handle database errors
Do not use a singleton for the database.

fix #3203
2016-07-12 00:31:57 +02:00
Florent Le Coz 421c960df5 Add a ChannelOptions table in the DB
And a way to retrieve its values, defaulting on the ServerOptions for unset
values.
2016-01-04 13:47:26 +01:00
Florent Le Coz 580b721ba5 Remove a write to std::cout from Database’s constructor 2015-10-29 03:35:25 +01:00
Florent Le Coz 74c73799ab Only compile database.cpp if configured with litesql 2015-10-24 15:17:53 +02:00