diff --git a/README.md b/README.md index 9c52af1..54bb4d4 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,18 @@ int main() { - `cc test.c sqlite3.c sqlite3_eu.c -o test` - `./test` -## Known quirks +## Known mapping issue + +`SELECT LOWER_EU('I')` gives a result with U+0131 (`ı`) + +Here is a manifestation, based on the cordova-sqlite-storage test suite: - Statements such as `SELECT LOWER_EU(9e999)` return results like `ınf` + +## References + +- https://github.com/mobilexag/cordova-sqlite-evplus-ext-free/issues/21 +- https://github.com/storesafe/cordova-sqlite-evcore-extbuild-free/issues/50#issuecomment-498858058 +- https://www.compart.com/en/unicode/U+0131 +- cordova-sqlite-storage test suite ref: + - https://github.com/storesafe/cordova-sqlite-storage/tree/6.0.0/spec diff --git a/sqlite3_eu.c b/sqlite3_eu.c index f3f6518..77c1fd5 100644 --- a/sqlite3_eu.c +++ b/sqlite3_eu.c @@ -40,6 +40,9 @@ void init_map() { } } + // references: + // - https://github.com/mobilexag/cordova-sqlite-evplus-ext-free/issues/21 + // - https://github.com/storesafe/cordova-sqlite-evcore-extbuild-free/issues/50#issuecomment-498858058 EU_MAP_ENTRY(0x00E4, 0x00C4); EU_MAP_ENTRY(0x00E0, 0x00C0); EU_MAP_ENTRY(0x00E1, 0x00C1); @@ -74,6 +77,13 @@ void init_map() { EU_MAP_ENTRY(0x00ED, 0x00CD); EU_MAP_ENTRY(0x00EE, 0x00CE); EU_MAP_ENTRY(0x00EF, 0x00CF); + // XXX TODO: NEED ONE-WAY MAPPING FOR U+0131 -> U+0049 + // TO AVOID KNOWN ISSUE WITH SELECT LOWER_EU(9e999) + // OR SELECT LOWER_EU(-9e999) + // see cordova-sqlite-storage test suite ref: + // - https://github.com/storesafe/cordova-sqlite-storage/tree/6.0.0/spec + // see also: + // - https://www.compart.com/en/unicode/U+0131 EU_MAP_ENTRY(0x0131, 0x0049); EU_MAP_ENTRY(0x012B, 0x012A); EU_MAP_ENTRY(0x012F, 0x012E); diff --git a/test.c b/test.c index 557431c..1a890b2 100644 --- a/test.c +++ b/test.c @@ -58,11 +58,25 @@ int main() { sqlite3_exec(db, "SELECT UPPER_EU('đ ď ð abc')", assert_result_matches, "Đ Ď Ð ABC", NULL); - // TBD STRANGE RESULT for this operation: + // ref: + // - https://www.compart.com/en/unicode/U+0131 + // - https://github.com/mobilexag/cordova-sqlite-evplus-ext-free/issues/21 + TESTLOG("TRY SELECT UPPER_EU('ı') - should be one-way mapping"); + sqlite3_exec(db, "SELECT UPPER_EU('ı')", assert_result_matches, "I", NULL); + + // XXX KNOWN ISSUE REPRODUCED AT THIS POINT: + TESTLOG("TRY SELECT LOWER_EU('I') - KNOWN ISSUE AT THIS POINT"); + sqlite3_exec(db, "SELECT LOWER_EU('I')", assert_result_matches, "\u0131", NULL); + + // XXX KNOWN ISSUE REPRODUCED AT THIS POINT: + // TBD STRANGE RESULT for this operation, + // see cordova-sqlite-storage test suite ref: + // - https://github.com/storesafe/cordova-sqlite-storage/tree/6.0.0/spec TESTLOG("SELECT LOWER_EU(9e999)"); sqlite3_exec(db, "SELECT LOWER_EU(9e999)", assert_result_matches, "ınf", NULL); + // XXX KNOWN ISSUE REPRODUCED AT THIS POINT: // TBD STRANGE RESULT for this operation: TESTLOG("SELECT HEX(LOWER_EU(9e999))"); sqlite3_exec(db, "SELECT HEX(LOWER_EU(9e999))",