-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
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
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
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
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
-db51f59a7bb7530f919858e2c51057839f6c9f4d
\ No newline at end of file
+ddc4e4797ff902692c4f0d86ec5f4e94cc7f0741
\ No newline at end of file
** 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"
/*
** 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,
** 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_
/*
****** 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*)
);
/*
** 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"
#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;
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 */
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;
{"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 },
--- /dev/null
+#
+# 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
+