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
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 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 @@
     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 @@
     }
 
     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 @@
         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) {