summaryrefslogtreecommitdiff
path: root/android/sqlite3_android.cpp
diff options
context:
space:
mode:
authorTaesu Lee <taesu82.lee@samsung.com>2019-05-29 14:09:11 +0900
committerHui Yu <huiyu@google.com>2019-07-18 17:14:50 -0700
commit33fdf2ebeaa9f26948a54d0f733719c91e907491 (patch)
tree4a606738c1197e4125534bac5ebe4e37db3b05dc /android/sqlite3_android.cpp
parent47092a72a0d07b76e6d592d71bfee993264fa42d (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
Diffstat (limited to 'android/sqlite3_android.cpp')
-rw-r--r--android/sqlite3_android.cpp24
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) {