diff options
author | Adam <Adam@anope.org> | 2016-10-17 18:33:55 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2016-10-17 18:33:55 -0400 |
commit | 22d166fd4e98b67cac7103b48801fb95a0179f01 (patch) | |
tree | 300b00bd52c5d3a26978bfe23bbdc2adc9c0fa26 /docs/SQLite.md | |
parent | 1ba242179fee46583098f48421af39ce9a8985a1 (diff) |
Address casemapping issues in sqlite/mysql
Diffstat (limited to 'docs/SQLite.md')
-rw-r--r-- | docs/SQLite.md | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/docs/SQLite.md b/docs/SQLite.md new file mode 100644 index 000000000..2d5b1c7b8 --- /dev/null +++ b/docs/SQLite.md @@ -0,0 +1,32 @@ +# How to modify Anope sqlite databases + +Anope uses a custom SQLiite function (anope_canonicalize) for canonicalizing strings for case insensitivity comparisons. +It does this by using SQLites support for having indexes on expressions https://www.sqlite.org/expridx.html. + +For example the account table could look like: + +``` +CREATE TABLE `anope_db_account` ( + `display`, + `pass`, + `email`, + `language`, + `id` NOT NULL PRIMARY KEY, + FOREIGN KEY (id) REFERENCES anope_db_objects(id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED +); +CREATE INDEX idx_display ON `anope_db_account` (anope_canonicalize(display)); +``` + +So, to do a SELECT which utilizes the indicies, Anope does something like: + +``` +SELECT id FROM `anope_db_account` WHERE anope_canonicalize(display) = anope_canonicalize('Adam'); +``` + +If you are using your own SQLite instance, like the sqlite command line interface, the anope_canonicalize function +will be missing. To fix this load one of libanope_sqlite_ascii.so, libanope_sqlite_rfc1459_inspircd.so, +or libanope_sqlite_rfc1459.so into SQLite, depending on your casemap configuration. + +``` +sqlite> .load lib/libanope_sqlite_ascii.so +``` |