Hello,

here is a patch which adds initcap function for use with icu.c (which uses
the icu4c library - International Components for Unicode).

SQL syntax for use of initcap is similar to lower or upper functions
(see documentation in the file ext/icu/README.txt.

If you need it (or like it) use it freely.  Otherwise, ignore it.  :)

--- patch ---
diff -Nru sqlite-3.6.7-orig/ext/icu/icu.c sqlite-3.6.7/ext/icu/icu.c
--- sqlite-3.6.7-orig/ext/icu/icu.c     2008-11-05 23:38:52.000000000 +0100
+++ sqlite-3.6.7/ext/icu/icu.c  2008-12-20 01:37:53.000000000 +0100
@@ -26,6 +26,8 @@
 **
 **   * An implementation of the LIKE operator that uses ICU to 
 **     provide case-independent matching.
+**
+** gcc -shared icu.c `icu-config --ldflags` -o libSqliteIcu.so
 */
 
 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU)
@@ -348,7 +350,9 @@
     return;
   }
 
-  if( sqlite3_user_data(p) ){
+  if( sqlite3_user_data(p) == (void*)2){
+    u_strToTitle(zOutput, nOutput/2, zInput, nInput/2, NULL, zLocale, &status);
+  }else if( sqlite3_user_data(p) == (void*)1){
     u_strToUpper(zOutput, nOutput/2, zInput, nInput/2, zLocale, &status);
   }else{
     u_strToLower(zOutput, nOutput/2, zInput, nInput/2, zLocale, &status);
@@ -454,20 +458,24 @@
     void *pContext;                           /* sqlite3_user_data() context */
     void (*xFunc)(sqlite3_context*,int,sqlite3_value**);
   } scalars[] = {
-    {"regexp",-1, SQLITE_ANY,          0, icuRegexpFunc},
+    {"regexp",  -1, SQLITE_ANY,          0, icuRegexpFunc},
 
-    {"lower",  1, SQLITE_UTF16,        0, icuCaseFunc16},
-    {"lower",  2, SQLITE_UTF16,        0, icuCaseFunc16},
-    {"upper",  1, SQLITE_UTF16, (void*)1, icuCaseFunc16},
-    {"upper",  2, SQLITE_UTF16, (void*)1, icuCaseFunc16},
-
-    {"lower",  1, SQLITE_UTF8,         0, icuCaseFunc16},
-    {"lower",  2, SQLITE_UTF8,         0, icuCaseFunc16},
-    {"upper",  1, SQLITE_UTF8,  (void*)1, icuCaseFunc16},
-    {"upper",  2, SQLITE_UTF8,  (void*)1, icuCaseFunc16},
+    {"lower",    1, SQLITE_UTF16,        0, icuCaseFunc16},
+    {"lower",    2, SQLITE_UTF16,        0, icuCaseFunc16},
+    {"upper",    1, SQLITE_UTF16, (void*)1, icuCaseFunc16},
+    {"upper",    2, SQLITE_UTF16, (void*)1, icuCaseFunc16},
+    {"initcap",  1, SQLITE_UTF16, (void*)2, icuCaseFunc16},
+    {"initcap",  2, SQLITE_UTF16, (void*)2, icuCaseFunc16},
+
+    {"lower",    1, SQLITE_UTF8,         0, icuCaseFunc16},
+    {"lower",    2, SQLITE_UTF8,         0, icuCaseFunc16},
+    {"upper",    1, SQLITE_UTF8,  (void*)1, icuCaseFunc16},
+    {"upper",    2, SQLITE_UTF8,  (void*)1, icuCaseFunc16},
+    {"initcap",  1, SQLITE_UTF8,  (void*)2, icuCaseFunc16},
+    {"initcap",  2, SQLITE_UTF8,  (void*)2, icuCaseFunc16},
 
-    {"like",   2, SQLITE_UTF8,         0, icuLikeFunc},
-    {"like",   3, SQLITE_UTF8,         0, icuLikeFunc},
+    {"like",     2, SQLITE_UTF8,         0, icuLikeFunc},
+    {"like",     3, SQLITE_UTF8,         0, icuLikeFunc},
 
     {"icu_load_collation",  2, SQLITE_UTF8, (void*)db, icuLoadCollation},
   };
--- patch ---

-- 
Zaga

You have worked and not worked.  Not working is the hardest work of all.
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to