Update: the problem is in the function registration.
I tried to comment out the UTF-16 registration and the really weird
thing is that using the following code, only GLOB with 3 arguments gets
actually registered (along with all 1-arg string functions and the two
collations).
There must be something obvious, but it escapes me completely right now.
Any hint?
---------------------------------------------------
SQLITE_PRIVATE int unifuzz_init(
sqlite3 *db
){
struct FuncScalar {
const char *zName; /* Function name */
int nArg; /* Number of arguments */
int enc; /* Optimal text encoding */
void *pContext; /* sqlite3_user_data() context */
void (*xFunc)(sqlite3_context*, int, sqlite3_value**);
} scalars[] = {
{"version", 0, SQLITE_ANY, 0,
versionFunc },
{"upper", 1, SQLITE_UTF8, (void *) unifuzz_upper,
caseFunc8 },
{"upper", 1, SQLITE_UTF16, (void *) unifuzz_upper,
caseFunc16 },
{"lower", 1, SQLITE_UTF8, (void *) unifuzz_lower,
caseFunc8 },
{"lower", 1, SQLITE_UTF16, (void *) unifuzz_lower,
caseFunc16 },
{"title", 1, SQLITE_UTF8, (void *) unifuzz_title,
caseFunc8 },
{"title", 1, SQLITE_UTF16, (void *) unifuzz_title,
caseFunc16 },
{"fold", 1, SQLITE_UTF8, (void *) unifuzz_fold,
caseFunc8 },
{"fold", 1, SQLITE_UTF16, (void *) unifuzz_fold,
caseFunc16 },
{"unaccent", 1, SQLITE_UTF8, 0,
unaccFunc8 },
{"unaccent", 1, SQLITE_UTF16, 0,
unaccFunc16 },
{"proper", 1, SQLITE_UTF8, 0,
properFunc8 },
{"proper", 1, SQLITE_UTF16, 0,
properFunc16 },
{"like", 2, SQLITE_UTF8, (void *) &likeInfoNorm, likeFunc8 },
// {"like", 2, SQLITE_UTF16, (void *) &likeInfoNorm,
likeFunc16 },
{"like", 3, SQLITE_UTF8, (void *) &likeInfoNorm,
likeFunc8 },
// {"like", 3, SQLITE_UTF16, (void *) &likeInfoNorm,
likeFunc16 },
{"glob", 2, SQLITE_UTF8, (void *) &globInfo,
likeFunc8 },
// {"glob", 2, SQLITE_UTF16, (void *) &globInfo,
likeFunc16 },
{"glob", 3, SQLITE_UTF8, (void *) &globInfo,
likeFunc8 },
// {"glob", 3, SQLITE_UTF16, (void *) &globInfo,
likeFunc16 },
{"typos", 2, SQLITE_UTF8, 0,
typosFunc8 },
{"typos", 2, SQLITE_UTF16, 0, typosFunc16 }
};
int i;
for(i = 0; (i < (sizeof(scalars) / sizeof(struct FuncScalar))); i++){
struct FuncScalar *p = &scalars[i];
sqlite3_create_function(db, p->zName, p->nArg, p->enc,
p->pContext, p->xFunc, 0, 0);
}
/* Also override the default NOCASE case-insensitive collation
sequence. */
sqlite3_create_collation(db, "NOCASE", SQLITE_UTF16LE, 0,
nocase_collate);
sqlite3_create_collation(db, "NAMES", SQLITE_UTF16LE, 0,
letters_collate);
return SQLITE_OK;
}
---------------------------------
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users