80 sqlite3_context *pCtx,
85 sqlite3_snprintf(128, zBuf,
"ICU error: %s(): %s", zName, u_errorName(e));
87 sqlite3_result_error(pCtx, zBuf, -1);
113 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
114 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
115 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
116 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
117 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
118 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
119 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
120 0x00, 0x01, 0x02, 0x03, 0x00, 0x01, 0x00, 0x00,
145 const uint8_t *zPattern,
146 const uint8_t *zString,
149 static const uint32_t MATCH_ONE = (uint32_t)
'_';
150 static const uint32_t MATCH_ALL = (uint32_t)
'%';
159 if( uPattern==0 )
break;
168 if( uPattern==MATCH_ALL && !prevEscape && uPattern!=(uint32_t)uEsc ){
176 while( (c=*zPattern) == MATCH_ALL || c == MATCH_ONE ){
178 if( *zString==0 )
return 0;
184 if( *zPattern==0 )
return 1;
194 }
else if( uPattern==MATCH_ONE && !prevEscape && uPattern!=(uint32_t)uEsc ){
196 if( *zString==0 )
return 0;
199 }
else if( uPattern==(uint32_t)uEsc && !prevEscape ){
207 uString = (uint32_t)u_foldCase((UChar32)uString, U_FOLD_CASE_DEFAULT);
208 uPattern = (uint32_t)u_foldCase((UChar32)uPattern, U_FOLD_CASE_DEFAULT);
209 if( uString!=uPattern ){
233 sqlite3_context *context,
237 const unsigned char *zA = sqlite3_value_text(argv[0]);
238 const unsigned char *zB = sqlite3_value_text(argv[1]);
245 sqlite3_result_error(context,
"LIKE or GLOB pattern too complex", -1);
254 int nE= sqlite3_value_bytes(argv[2]);
255 const unsigned char *zE = sqlite3_value_text(argv[2]);
258 U8_NEXT(zE,
i, nE, uEsc);
260 sqlite3_result_error(context,
261 "ESCAPE expression must be a single character", -1);
300 UErrorCode
status = U_ZERO_ERROR;
301 URegularExpression *pExpr;
303 const UChar *zString = sqlite3_value_text16(apArg[1]);
314 pExpr = sqlite3_get_auxdata(
p, 0);
316 const UChar *zPattern = sqlite3_value_text16(apArg[0]);
320 pExpr = uregex_open(zPattern, -1, 0, 0, &
status);
332 uregex_setText(pExpr, zString, -1, &
status);
350 uregex_setText(pExpr, 0, 0, &
status);
353 sqlite3_result_int(
p,
res ? 1 : 0);
390 const char *zLocale = 0;
392 assert(nArg==1 || nArg==2);
393 bToUpper = (sqlite3_user_data(
p)!=0);
395 zLocale = (
const char *)sqlite3_value_text(apArg[1]);
398 zInput = sqlite3_value_text16(apArg[0]);
402 nOut = nInput = sqlite3_value_bytes16(apArg[0]);
404 sqlite3_result_text16(
p,
"", 0, SQLITE_STATIC);
408 for(cnt=0; cnt<2; cnt++){
409 UChar *zNew = sqlite3_realloc(zOutput, nOut);
411 sqlite3_free(zOutput);
412 sqlite3_result_error_nomem(
p);
418 nOut = 2*u_strToUpper(zOutput,nOut/2,zInput,nInput/2,zLocale,&
status);
420 nOut = 2*u_strToLower(zOutput,nOut/2,zInput,nInput/2,zLocale,&
status);
424 sqlite3_result_text16(
p, zOutput, nOut,
xFree);
425 }
else if(
status==U_BUFFER_OVERFLOW_ERROR ){
486 sqlite3_value **apArg
488 sqlite3 *db = (sqlite3 *)sqlite3_user_data(
p);
489 UErrorCode
status = U_ZERO_ERROR;
492 UCollator *pUCollator;
497 zLocale = (
const char *)sqlite3_value_text(apArg[0]);
498 zName = (
const char *)sqlite3_value_text(apArg[1]);
504 pUCollator = ucol_open(zLocale, &
status);
511 rc = sqlite3_create_collation_v2(db, zName, SQLITE_UTF16, (
void *)pUCollator,
515 ucol_close(pUCollator);
516 sqlite3_result_error(
p,
"Error registering collation function", -1);