]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Change the name of create_collation_x() to create_collation_v2(). Also add some tests...
authordanielk1977 <danielk1977@noemail.net>
Mon, 7 May 2007 14:58:53 +0000 (14:58 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Mon, 7 May 2007 14:58:53 +0000 (14:58 +0000)
FossilOrigin-Name: ddc4e4797ff902692c4f0d86ec5f4e94cc7f0741

manifest
manifest.uuid
src/main.c
src/sqlite.h.in
src/test1.c
test/collate7.test [new file with mode: 0644]

index 9b93f34420511f27fc61b16c7a332ed9c06cef58..4e83c9788d3a3b4d24023ee82a2b4b8244571dd0 100644 (file)
--- 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
index 45850981afe1a6acb9fe485442c2ea177a72208a..fc261798e1c2faa99ce1dde1c3d1c3e7ac04fef0 100644 (file)
@@ -1 +1 @@
-db51f59a7bb7530f919858e2c51057839f6c9f4d
\ No newline at end of file
+ddc4e4797ff902692c4f0d86ec5f4e94cc7f0741
\ No newline at end of file
index bd72bdd97ee99ab867b16c13386afc6d3f9bca25..506c3c78c6a8ce7d5d19ca9cf551fef41d392cf4 100644 (file)
@@ -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, 
index f84128c55a01cb40c7d88400653e4fac238a40da..f0f0544fab8bbaeea0902ad3ba028d122e006a60 100644 (file)
@@ -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*)
 );
 
 /*
index 69f5112d74dbc823d423ad9a0ed3a90c4697d4fa..a0917508e6863e971217435edf12302ffe2bac94 100644 (file)
@@ -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 (file)
index 0000000..0c913e2
--- /dev/null
@@ -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
+