Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Change the name of create_collation_x() to create_collation_v2(). Also add some tests for it. (CVS 3938) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
ddc4e4797ff902692c4f0d86ec5f4e94 |
User & Date: | danielk1977 2007-05-07 14:58:53.000 |
Context
2007-05-07
| ||
16:58 | Add a version of the LIKE operator to the icu extension. Requires optimisation. (CVS 3939) (check-in: 3e96105c1f user: danielk1977 tags: trunk) | |
14:58 | Change the name of create_collation_x() to create_collation_v2(). Also add some tests for it. (CVS 3938) (check-in: ddc4e4797f user: danielk1977 tags: trunk) | |
13:11 | Fix typo in Makefile.in. Ticket #2343 (CVS 3937) (check-in: db51f59a7b user: drh tags: trunk) | |
Changes
Changes to src/main.c.
︙ | ︙ | |||
10 11 12 13 14 15 16 | ** ************************************************************************* ** Main file for the SQLite library. The routines in this file ** implement the programmer interface to the library. Routines in ** other files are for internal use by SQLite and should not be ** accessed by users of the library. ** | | | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | ** ************************************************************************* ** Main file for the SQLite library. The routines in this file ** implement the programmer interface to the library. Routines in ** other files are for internal use by SQLite and should not be ** accessed by users of the library. ** ** $Id: main.c,v 1.373 2007/05/07 14:58:53 danielk1977 Exp $ */ #include "sqliteInt.h" #include "os.h" #include <ctype.h> /* ** The version of the library |
︙ | ︙ | |||
1137 1138 1139 1140 1141 1142 1143 | rc = createCollation(db, zName, enc, pCtx, xCompare, 0); return sqlite3ApiExit(db, rc); } /* ** Register a new collation sequence with the database handle db. */ | | | 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 | rc = createCollation(db, zName, enc, pCtx, xCompare, 0); return sqlite3ApiExit(db, rc); } /* ** Register a new collation sequence with the database handle db. */ int sqlite3_create_collation_v2( sqlite3* db, const char *zName, int enc, void* pCtx, int(*xCompare)(void*,int,const void*,int,const void*), void(*xDel)(void*) ){ |
︙ | ︙ |
Changes to src/sqlite.h.in.
︙ | ︙ | |||
8 9 10 11 12 13 14 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This header file defines the interface that the SQLite library ** presents to client programs. ** | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This header file defines the interface that the SQLite library ** presents to client programs. ** ** @(#) $Id: sqlite.h.in,v 1.206 2007/05/07 14:58:53 danielk1977 Exp $ */ #ifndef _SQLITE3_H_ #define _SQLITE3_H_ #include <stdarg.h> /* Needed for the definition of va_list */ /* ** Make sure we can call this stuff from C++. |
︙ | ︙ | |||
1277 1278 1279 1280 1281 1282 1283 1284 | int eTextRep, void*, int(*xCompare)(void*,int,const void*,int,const void*) ); /* ****** EXPERIMENTAL - subject to change without notice ************** */ | > > > > > > > > > > > > > > > > | | | 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 | int eTextRep, void*, int(*xCompare)(void*,int,const void*,int,const void*) ); /* ****** 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_v2( sqlite3*, const char *zName, int eTextRep, void*, int(*xCompare)(void*,int,const void*,int,const void*), void(*xDestroy)(void*) ); /* ** To avoid having to register all collation sequences before a database ** can be used, a single callback function may be registered with the ** database handle to be called whenever an undefined collation sequence is ** required. |
︙ | ︙ |
Changes to src/test1.c.
︙ | ︙ | |||
9 10 11 12 13 14 15 | ** May you share freely, never taking more than you give. ** ************************************************************************* ** Code for testing all sorts of SQLite interfaces. This code ** is not included in the SQLite library. It is used for automated ** testing of the SQLite library. ** | | | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | ** May you share freely, never taking more than you give. ** ************************************************************************* ** Code for testing all sorts of SQLite interfaces. This code ** is not included in the SQLite library. It is used for automated ** testing of the SQLite library. ** ** $Id: test1.c,v 1.250 2007/05/07 14:58:53 danielk1977 Exp $ */ #include "sqliteInt.h" #include "tcl.h" #include "os.h" #include <stdlib.h> #include <string.h> |
︙ | ︙ | |||
1645 1646 1647 1648 1649 1650 1651 | } return (rc==SQLITE_OK ? TCL_OK : TCL_ERROR); } #endif /* | | | | 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 | } return (rc==SQLITE_OK ? TCL_OK : TCL_ERROR); } #endif /* ** Usage: sqlite3_create_collation_v2 DB-HANDLE NAME CMP-PROC DEL-PROC ** ** This Tcl proc is used for testing the experimental ** sqlite3_create_collation_v2() interface. */ struct TestCollationX { Tcl_Interp *interp; Tcl_Obj *pCmp; Tcl_Obj *pDel; }; typedef struct TestCollationX TestCollationX; |
︙ | ︙ | |||
1692 1693 1694 1695 1696 1697 1698 | ){ Tcl_BackgroundError(p->interp); } Tcl_DecrRefCount(pScript); return iRes; } | | | 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 | ){ Tcl_BackgroundError(p->interp); } Tcl_DecrRefCount(pScript); return iRes; } 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_Obj *CONST objv[] /* Command arguments */ ){ TestCollationX *p; sqlite3 *db; |
︙ | ︙ | |||
1714 1715 1716 1717 1718 1719 1720 | p = (TestCollationX *)sqlite3_malloc(sizeof(TestCollationX)); p->pCmp = objv[3]; p->pDel = objv[4]; p->interp = interp; Tcl_IncrRefCount(p->pCmp); Tcl_IncrRefCount(p->pDel); | | | 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 | p = (TestCollationX *)sqlite3_malloc(sizeof(TestCollationX)); p->pCmp = objv[3]; p->pDel = objv[4]; p->interp = interp; Tcl_IncrRefCount(p->pCmp); Tcl_IncrRefCount(p->pDel); sqlite3_create_collation_v2(db, Tcl_GetString(objv[2]), SQLITE_UTF8, (void *)p, testCreateCollationCmp, testCreateCollationDel ); return TCL_OK; } /* ** Usage: sqlite3_load_extension DB-HANDLE FILE ?PROC? |
︙ | ︙ | |||
4740 4741 4742 4743 4744 4745 4746 | #ifdef SQLITE_ENABLE_COLUMN_METADATA {"sqlite3_column_database_name16", test_stmt_utf16, sqlite3_column_database_name16}, {"sqlite3_column_table_name16", test_stmt_utf16, sqlite3_column_table_name16}, {"sqlite3_column_origin_name16", test_stmt_utf16, sqlite3_column_origin_name16}, #endif #endif | | | 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 | #ifdef SQLITE_ENABLE_COLUMN_METADATA {"sqlite3_column_database_name16", test_stmt_utf16, sqlite3_column_database_name16}, {"sqlite3_column_table_name16", test_stmt_utf16, sqlite3_column_table_name16}, {"sqlite3_column_origin_name16", test_stmt_utf16, sqlite3_column_origin_name16}, #endif #endif { "sqlite3_create_collation_v2", test_create_collation_v2, 0 }, { "sqlite3_global_recover", test_global_recover, 0 }, { "working_64bit_int", working_64bit_int, 0 }, /* Functions from os.h */ #ifndef SQLITE_OMIT_DISKIO { "sqlite3OsOpenReadWrite",test_sqlite3OsOpenReadWrite, 0 }, { "sqlite3OsClose", test_sqlite3OsClose, 0 }, |
︙ | ︙ |
Added test/collate7.test.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 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 |