For columns are already included in a compound index there is no
benefit to having a separate index with a subset of the same columns in
the same order, it just wastes space.
Previously to check if hibernated room was old enough we had to fetch info
about all rooms from database. Now we repurpose created_at field in sql
to store that info, that allow us to have more efficient query just for it.
Store PubSub item creation/modification timestamps as integers instead
of "$megasec:$sec:$microsec" strings. This can improve the performance
of certain SQL queries significantly.
Thanks to Ammonit Measurement GmbH for sponsoring this work.
* Fix specified key was too long
This adds the correct engine and sets it to utf8mb4 collate. Prevents "Specified key was too long; max key length is 1000 bytes" from happening.
* Make two import SQL files consistent
As suggested by @prefiks
Note that support for older specification is completely dropped,
i.e. no backward compatibility is provided since the XEPs are
still very experimental and being changed drastically
Accordingly, Mnesia/SQL/Riak table 'carboncopy' is not used anymore
and can be safely removed.
As a consequence, the commit deprecates the following options of
mod_carboncopy:
- ram_db_type
- use_cache
- cache_size
- cache_missed
- cache_life_time
Fixes#2663
Mysql 'utf8' do not support 4-bytes UTF8 chars.
Characters like 'KISS MARK' (U+1F48B) causes mysql
to cut the string at that point.
There is utf8mb4 encoding available on newer mysql
versions that do support 4-bytes utf8. But for storing
stanzas, that doesn't need to be indexed or searched or
inspected in any way, it was easier to use BLOB
(the bytes stored are utf8 encoded anyway, like all XMPP),
and avoids the need to redefine indexes (as allowed size
is shorter on utf8mb4) or having mixed utf8 and utf8mb4
encodings on the same table.