1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-15 11:41:13 +03:00

Set the "type" correctly of built-in BINARY collating sequences for UTF16.

FossilOrigin-Name: 167644f33c949b532655c2297aedf13f93876396
This commit is contained in:
drh
2009-08-20 02:49:30 +00:00
parent 9aeda79cf6
commit f8d4e8bd3f
3 changed files with 27 additions and 28 deletions

View File

@@ -1,8 +1,8 @@
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
C All\sthe\ssqlite3GetCollSeq()\sfunction\sto\sspecify\san\sarbitrary\stext\sencoding.
D 2009-08-20T02:34:15
C Set\sthe\s"type"\scorrectly\sof\sbuilt-in\sBINARY\scollating\ssequences\sfor\sUTF16.
D 2009-08-20T02:49:31
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in 0f7761c5d1c62ae7a841e3393ffaff1fa0f5c00a
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -129,7 +129,7 @@ F src/journal.c e00df0c0da8413ab6e1bb7d7cab5665d4a9000d0
F src/legacy.c 303b4ffcf1ae652fcf5ef635846c563c254564f6
F src/lempar.c 0c4d1ab0a5ef2b0381eb81a732c54f68f27a574d
F src/loadext.c 0e88a335665db0b2fb4cece3e49dcb65d832635a
F src/main.c 1e87aa66fd43d4a11c9aa4ed1407d0894b359a52
F src/main.c c2fc25f25edf7bfb4b70622e21dc6c8476b6d66d
F src/malloc.c b1725183bcc4ce2e569f1b65da844dc3e4c7a643
F src/mem0.c f2f84062d1f35814d6535c9f9e33de3bfb3b132c
F src/mem1.c e6d5c23941288df8191b8a98c28e3f57771e2270
@@ -750,14 +750,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl 672f81d693a03f80f5ae60bfefacd8a349e76746
P 2467eb68ace46f6185fd14758446a5c887caffe3
R fefce6705301a1ffd6d7c50ffcad3a36
P 4ee44322ca3c92ed8d6f5d4a3f89d219bf379595
R a229bfa6fe4f806b055faae10403d403
U drh
Z 98ec124f66a48a1bb94d3a6b8f22b8e4
Z e854e162390a77ab2c2b41dc6df78930
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
iD8DBQFKjLYqoxKgR168RlERAroAAJ0Svkm1+MWBNNctkTg7ND8Sf9xrSQCghvrq
XTAW3zqMFKerQ0WAo8MAen8=
=ZqkO
iD8DBQFKjLm+oxKgR168RlERAsLHAJwN2kz7PF+0ZFK6UY6zOKEcdbVNmACfRdSQ
gRzico4HrGZ+RZD/AC3jBKY=
=Uer1
-----END PGP SIGNATURE-----

View File

@@ -1 +1 @@
4ee44322ca3c92ed8d6f5d4a3f89d219bf379595
167644f33c949b532655c2297aedf13f93876396

View File

@@ -1357,9 +1357,10 @@ int sqlite3_extended_errcode(sqlite3 *db){
** and the encoding is enc.
*/
static int createCollation(
sqlite3* db,
sqlite3* db,
const char *zName,
int enc,
int enc,
int collType,
void* pCtx,
int(*xCompare)(void*,int,const void*,int,const void*),
void(*xDel)(void*)
@@ -1424,6 +1425,7 @@ static int createCollation(
pColl->pUser = pCtx;
pColl->xDel = xDel;
pColl->enc = (u8)(enc2 | (enc & SQLITE_UTF16_ALIGNED));
pColl->type = collType;
}
sqlite3Error(db, SQLITE_OK, 0);
return SQLITE_OK;
@@ -1521,7 +1523,6 @@ static int openDatabase(
){
sqlite3 *db;
int rc;
CollSeq *pColl;
int isThreadsafe;
*ppDb = 0;
@@ -1607,10 +1608,14 @@ static int openDatabase(
** and UTF-16, so add a version for each to avoid any unnecessary
** conversions. The only error that can occur here is a malloc() failure.
*/
createCollation(db, "BINARY", SQLITE_UTF8, 0, binCollFunc, 0);
createCollation(db, "BINARY", SQLITE_UTF16BE, 0, binCollFunc, 0);
createCollation(db, "BINARY", SQLITE_UTF16LE, 0, binCollFunc, 0);
createCollation(db, "RTRIM", SQLITE_UTF8, (void*)1, binCollFunc, 0);
createCollation(db, "BINARY", SQLITE_UTF8, SQLITE_COLL_BINARY, 0,
binCollFunc, 0);
createCollation(db, "BINARY", SQLITE_UTF16BE, SQLITE_COLL_BINARY, 0,
binCollFunc, 0);
createCollation(db, "BINARY", SQLITE_UTF16LE, SQLITE_COLL_BINARY, 0,
binCollFunc, 0);
createCollation(db, "RTRIM", SQLITE_UTF8, SQLITE_COLL_USER, (void*)1,
binCollFunc, 0);
if( db->mallocFailed ){
goto opendb_out;
}
@@ -1618,14 +1623,8 @@ static int openDatabase(
assert( db->pDfltColl!=0 );
/* Also add a UTF-8 case-insensitive collation sequence. */
createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0);
/* Set flags on the built-in collating sequences */
db->pDfltColl->type = SQLITE_COLL_BINARY;
pColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "NOCASE", 0);
if( pColl ){
pColl->type = SQLITE_COLL_NOCASE;
}
createCollation(db, "NOCASE", SQLITE_UTF8, SQLITE_COLL_NOCASE, 0,
nocaseCollatingFunc, 0);
/* Open the backend database driver */
db->openFlags = flags;
@@ -1806,7 +1805,7 @@ int sqlite3_create_collation(
int rc;
sqlite3_mutex_enter(db->mutex);
assert( !db->mallocFailed );
rc = createCollation(db, zName, enc, pCtx, xCompare, 0);
rc = createCollation(db, zName, enc, SQLITE_COLL_USER, pCtx, xCompare, 0);
rc = sqlite3ApiExit(db, rc);
sqlite3_mutex_leave(db->mutex);
return rc;
@@ -1826,7 +1825,7 @@ int sqlite3_create_collation_v2(
int rc;
sqlite3_mutex_enter(db->mutex);
assert( !db->mallocFailed );
rc = createCollation(db, zName, enc, pCtx, xCompare, xDel);
rc = createCollation(db, zName, enc, SQLITE_COLL_USER, pCtx, xCompare, xDel);
rc = sqlite3ApiExit(db, rc);
sqlite3_mutex_leave(db->mutex);
return rc;
@@ -1849,7 +1848,7 @@ int sqlite3_create_collation16(
assert( !db->mallocFailed );
zName8 = sqlite3Utf16to8(db, zName, -1);
if( zName8 ){
rc = createCollation(db, zName8, enc, pCtx, xCompare, 0);
rc = createCollation(db, zName8, enc, SQLITE_COLL_USER, pCtx, xCompare, 0);
sqlite3DbFree(db, zName8);
}
rc = sqlite3ApiExit(db, rc);