diff --git a/manifest b/manifest index 9b93f34420..4e83c9788d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\stypo\sin\sMakefile.in.\s\sTicket\s#2343\s(CVS\s3937) -D 2007-05-07T13:11:10 +C Change\sthe\sname\sof\screate_collation_x()\sto\screate_collation_v2().\sAlso\sadd\ssome\stests\sfor\sit.\s(CVS\s3938) +D 2007-05-07T14:58:53 F Makefile.in ab0f3cb6b34aa8ccec0bb57e6696fd4bd6b34a8f F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 @@ -77,7 +77,7 @@ F src/hash.h 1b3f7e2609141fd571f62199fc38687d262e9564 F src/insert.c e595ca26805dfb3a9ebaabc28e7947c479f3b14d F src/legacy.c 388c71ad7fbcd898ba1bcbfc98a3ac954bfa5d01 F src/loadext.c afe4f4755dc49c36ef505748bbdddecb9f1d02a2 -F src/main.c ada896b9554aa71e717a6ab237ab0eff63a1e1e4 +F src/main.c 0e389104acf4a7c26b57f35ee84eecc60a5d6da5 F src/malloc.c b89e31258a85158d15795bf87ae3ba007e56329b F src/md5.c c5fdfa5c2593eaee2e32a5ce6c6927c986eaf217 F src/os.c 4650e98aadd27abfe1698ff58edf6893c58d4881 @@ -101,12 +101,12 @@ F src/random.c 6119474a6f6917f708c1dee25b9a8e519a620e88 F src/select.c a306d03fc7d8365055bef70c3563e8fca897460f F src/server.c 087b92a39d883e3fa113cae259d64e4c7438bc96 F src/shell.c d07ae326b3815d80f71c69b3c7584382e47f6447 -F src/sqlite.h.in e9b82a9e6e24e279d4e9d239535fbdae464b5594 +F src/sqlite.h.in b7682eac8b0365b5c0740a527900449b4815740e F src/sqlite3ext.h 7d0d363ea7327e817ef0dfe1b7eee1f171b72890 F src/sqliteInt.h 5e1cf645ef1bf8b43c5d020adbeed43746df24ed F src/table.c a8de75bcedf84d4060d804264b067ab3b1a3561d F src/tclsqlite.c f3414b2d6bc37e6760b49c9abd3504ff69f4441b -F src/test1.c 84e78efa05a6d36a1868912b84cc5009d990f49d +F src/test1.c 3891b07526d311ad040d099a76d5fbfdcb826783 F src/test2.c 24458b17ab2f3c90cbc1c8446bd7ffe69be62f88 F src/test3.c 946ea9d1a8c928656e3c70f0a2fcb8e733a15e86 F src/test4.c 8b784cd82de158a2317cb4ac4bc86f91ad315e25 @@ -190,6 +190,7 @@ F test/collate3.test 947a77f5b8227e037a7094d0e338a5504f155cc4 F test/collate4.test daf498e294dcd596b961d425c3f2dda117e4717e F test/collate5.test 8fb4e7e0241839356bd8710f437c32efb47bfff8 F test/collate6.test 6c9470d1606ee3e564675b229653e320c49ec638 +F test/collate7.test e23677b1fd271505302643a98178952bb65b6f21 F test/colmeta.test 6505c73ab58796afcb7c89ba9f429d573fbc6e53 F test/conflict.test ac40064d46c4c259cf6c216d30aa5bcc26e7eea2 F test/corrupt.test 18c7a995b1af76a8c8600b996257f2c7b7bff083 @@ -482,7 +483,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5 -P b29a81b4fbb926fa09186340342848b9fe589033 -R 070abd22aa31f658bb086ef0bcccfbd9 -U drh -Z 0f63f70a104768ba21532b79aaca7f73 +P db51f59a7bb7530f919858e2c51057839f6c9f4d +R 27185812931e7f9d41fbfd4819a22118 +U danielk1977 +Z ae7686d308deffcdeb3aacd0475a723f diff --git a/manifest.uuid b/manifest.uuid index 45850981af..fc261798e1 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -db51f59a7bb7530f919858e2c51057839f6c9f4d \ No newline at end of file +ddc4e4797ff902692c4f0d86ec5f4e94cc7f0741 \ No newline at end of file diff --git a/src/main.c b/src/main.c index bd72bdd97e..506c3c78c6 100644 --- a/src/main.c +++ b/src/main.c @@ -14,7 +14,7 @@ ** other files are for internal use by SQLite and should not be ** accessed by users of the library. ** -** $Id: main.c,v 1.372 2007/05/07 09:32:45 danielk1977 Exp $ +** $Id: main.c,v 1.373 2007/05/07 14:58:53 danielk1977 Exp $ */ #include "sqliteInt.h" #include "os.h" @@ -1141,7 +1141,7 @@ int sqlite3_create_collation( /* ** Register a new collation sequence with the database handle db. */ -int sqlite3_create_collation_x( +int sqlite3_create_collation_v2( sqlite3* db, const char *zName, int enc, diff --git a/src/sqlite.h.in b/src/sqlite.h.in index f84128c55a..f0f0544fab 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -12,7 +12,7 @@ ** This header file defines the interface that the SQLite library ** presents to client programs. ** -** @(#) $Id: sqlite.h.in,v 1.205 2007/05/07 09:32:45 danielk1977 Exp $ +** @(#) $Id: sqlite.h.in,v 1.206 2007/05/07 14:58:53 danielk1977 Exp $ */ #ifndef _SQLITE3_H_ #define _SQLITE3_H_ @@ -1281,14 +1281,30 @@ int sqlite3_create_collation16( /* ****** EXPERIMENTAL - subject to change without notice ************** +** +** The following experimental API is identical to the +** sqlite3_create_collation() function described above except that it +** allows a destructor callback function - xDestroy - for the new +** collation sequence to be specified. If this function returns +** successfully, the destructor function will be invoked exactly once +** by SQLite when one of the following occurs: +** +** * The collation sequence is overidden by a subsequent call +** to create_collation(), create_collation16() or +** create_collation_v2(), or +** +** * The database handle is closed. +** +** The argument passed to the destructor function is a copy of +** the void* pointer passed as the 4th argument to this function. */ -int sqlite3_create_collation_x( +int sqlite3_create_collation_v2( sqlite3*, const char *zName, int eTextRep, void*, int(*xCompare)(void*,int,const void*,int,const void*), - void(*xDel)(void*) + void(*xDestroy)(void*) ); /* diff --git a/src/test1.c b/src/test1.c index 69f5112d74..a0917508e6 100644 --- a/src/test1.c +++ b/src/test1.c @@ -13,7 +13,7 @@ ** is not included in the SQLite library. It is used for automated ** testing of the SQLite library. ** -** $Id: test1.c,v 1.249 2007/05/07 11:24:30 drh Exp $ +** $Id: test1.c,v 1.250 2007/05/07 14:58:53 danielk1977 Exp $ */ #include "sqliteInt.h" #include "tcl.h" @@ -1649,10 +1649,10 @@ static int test_blob_write( #endif /* -** Usage: sqlite3_create_collation_x DB-HANDLE NAME CMP-PROC DEL-PROC +** Usage: sqlite3_create_collation_v2 DB-HANDLE NAME CMP-PROC DEL-PROC ** ** This Tcl proc is used for testing the experimental -** sqlite3_create_collation_x() interface. +** sqlite3_create_collation_v2() interface. */ struct TestCollationX { Tcl_Interp *interp; @@ -1696,7 +1696,7 @@ static int testCreateCollationCmp( return iRes; } -static int test_create_collation_x( +static int test_create_collation_v2( ClientData clientData, /* Not used */ Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ int objc, /* Number of arguments */ @@ -1718,7 +1718,7 @@ static int test_create_collation_x( Tcl_IncrRefCount(p->pCmp); Tcl_IncrRefCount(p->pDel); - sqlite3_create_collation_x(db, Tcl_GetString(objv[2]), SQLITE_UTF8, + sqlite3_create_collation_v2(db, Tcl_GetString(objv[2]), SQLITE_UTF8, (void *)p, testCreateCollationCmp, testCreateCollationDel ); return TCL_OK; @@ -4744,7 +4744,7 @@ int Sqlitetest1_Init(Tcl_Interp *interp){ {"sqlite3_column_origin_name16", test_stmt_utf16, sqlite3_column_origin_name16}, #endif #endif - { "sqlite3_create_collation_x", test_create_collation_x, 0 }, + { "sqlite3_create_collation_v2", test_create_collation_v2, 0 }, { "sqlite3_global_recover", test_global_recover, 0 }, { "working_64bit_int", working_64bit_int, 0 }, diff --git a/test/collate7.test b/test/collate7.test new file mode 100644 index 0000000000..0c913e2521 --- /dev/null +++ b/test/collate7.test @@ -0,0 +1,73 @@ +# +# 2007 May 7 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# This file implements regression tests for SQLite library. The +# focus of this script is the experimental sqlite3_create_collation_v2() +# API. +# +# $Id: collate7.test,v 1.1 2007/05/07 14:58:53 danielk1977 Exp $ + +set testdir [file dirname $argv0] +source $testdir/tester.tcl + +set ::caseless_del 0 +proc caseless_cmp {zLeft zRight} { + string compare -nocase $zLeft $zRight +} + +do_test collate7-1.1 { + set cmd [list incr ::caseless_del] + sqlite3_create_collation_v2 db CASELESS caseless_cmp $cmd + set ::caseless_del +} {0} +do_test collate7-1.2 { + sqlite_delete_collation db CASELESS + set ::caseless_del +} {1} +do_test collate7-1.3 { + catchsql { + CREATE TABLE abc(a COLLATE CASELESS, b, c); + } +} {1 {no such collation sequence: CASELESS}} +do_test collate7-1.4 { + sqlite3_create_collation_v2 db CASELESS caseless_cmp {incr ::caseless_del} + db close + set ::caseless_del +} {2} + +do_test collate7-2.1 { + file delete -force test.db test.db-journal + sqlite3 db test.db + sqlite3_create_collation_v2 db CASELESS caseless_cmp {incr ::caseless_del} + execsql { + PRAGMA encoding='utf-16'; + CREATE TABLE abc16(a COLLATE CASELESS, b, c); + } db + set ::caseless_del +} {2} +do_test collate7-2.2 { + execsql { + SELECT * FROM abc16 WHERE a < 'abc'; + } + set ::caseless_del +} {2} +do_test collate7-2.3 { + sqlite_delete_collation db CASELESS + set ::caseless_del +} {3} +do_test collate7-2.4 { + catchsql { + SELECT * FROM abc16 WHERE a < 'abc'; + } +} {1 {no such collation sequence: CASELESS}} + +finish_test +