diff options
author | Taesu Lee <taesu82.lee@samsung.com> | 2019-05-29 14:09:11 +0900 |
---|---|---|
committer | Hui Yu <huiyu@google.com> | 2019-08-05 23:46:31 +0000 |
commit | 73e13d1078b32044ffa858112f748eb52b7f02ae (patch) | |
tree | 4a606738c1197e4125534bac5ebe4e37db3b05dc /android/sqlite3_android.cpp | |
parent | 058c2ff89834e542729516e5d333a4b6c679b561 (diff) |
Support loose comparison using minimum matched chars
Specific min match is required for each country.
Test: Manual
Change-Id: I2f1355c4ba712170464e4c23a916024e0bf58e71
Merged-In: I2f1355c4ba712170464e4c23a916024e0bf58e71
Signed-off-by: Taesu Lee <taesu82.lee@samsung.com>
Bug:134246556
(cherry picked from commit 33fdf2ebeaa9f26948a54d0f733719c91e907491)
Diffstat (limited to 'android/sqlite3_android.cpp')
-rw-r--r-- | android/sqlite3_android.cpp | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/android/sqlite3_android.cpp b/android/sqlite3_android.cpp index 659ee6c..d2f1802 100644 --- a/android/sqlite3_android.cpp +++ b/android/sqlite3_android.cpp @@ -79,7 +79,7 @@ static int collate8(void *p, int n1, const void *v1, int n2, const void *v2) static void phone_numbers_equal(sqlite3_context * context, int argc, sqlite3_value ** argv) { - if (argc != 2 && argc != 3) { + if (argc != 2 && argc != 3 && argc != 4) { sqlite3_result_int(context, 0); return; } @@ -88,8 +88,12 @@ static void phone_numbers_equal(sqlite3_context * context, int argc, sqlite3_val char const * num2 = (char const *)sqlite3_value_text(argv[1]); bool use_strict = false; - if (argc == 3) { + int min_match = 0; + if (argc == 3 || argc == 4) { use_strict = (sqlite3_value_int(argv[2]) != 0); + if (!use_strict && argc == 4) { + min_match = sqlite3_value_int(argv[3]); + } } if (num1 == NULL || num2 == NULL) { @@ -98,9 +102,11 @@ static void phone_numbers_equal(sqlite3_context * context, int argc, sqlite3_val } bool equal = - (use_strict ? - android::phone_number_compare_strict(num1, num2) : - android::phone_number_compare_loose(num1, num2)); + (use_strict ? android::phone_number_compare_strict(num1, num2) + : ((min_match > 0) + ? android::phone_number_compare_loose_with_minmatch( + num1, num2, min_match) + : android::phone_number_compare_loose(num1, num2))); if (equal) { sqlite3_result_int(context, 1); @@ -543,6 +549,14 @@ extern "C" int register_android_functions(sqlite3 * handle, int utf16Storage __a return err; } + // Register the PHONE_NUM_EQUALS function with additional arguments "use_strict" and "min_match" + err = sqlite3_create_function( + handle, "PHONE_NUMBERS_EQUAL", 4, + SQLITE_UTF8, NULL, phone_numbers_equal, NULL, NULL); + if (err != SQLITE_OK) { + return err; + } + // Register the _DELETE_FILE function err = sqlite3_create_function(handle, "_DELETE_FILE", 1, SQLITE_UTF8, NULL, delete_file, NULL, NULL); if (err != SQLITE_OK) { |