Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Remove the sqlite3_libencoding() api and the ISO8859 encoding option. (CVS 1523) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
b53640ed2232aaf173a71636073477d8 |
User & Date: | drh 2004-06-02 00:41:09.000 |
Context
2004-06-02
| ||
01:22 | Work toward combining the OP_MakeKey, OP_MakeIdxKey, and OP_MakeRecord opcodes into one. The work is incomplete. (CVS 1524) (check-in: 165d69a04c user: drh tags: trunk) | |
00:41 | Remove the sqlite3_libencoding() api and the ISO8859 encoding option. (CVS 1523) (check-in: b53640ed22 user: drh tags: trunk) | |
00:29 | Fix a bug with UTF-16 byte-order-marks on big-endian hosts. (CVS 1522) (check-in: c17b864103 user: danielk1977 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.203 2004/06/02 00:41:09 drh Exp $ */ #include "sqliteInt.h" #include "os.h" #include <ctype.h> /* ** A pointer to this structure is used to communicate information |
︙ | ︙ | |||
384 385 386 387 388 389 390 | /* ** The version of the library */ const char rcsid[] = "@(#) \044Id: SQLite version " SQLITE_VERSION " $"; const char sqlite3_version[] = SQLITE_VERSION; | < < < < < < < < < < | 384 385 386 387 388 389 390 391 392 393 394 395 396 397 | /* ** The version of the library */ const char rcsid[] = "@(#) \044Id: SQLite version " SQLITE_VERSION " $"; const char sqlite3_version[] = SQLITE_VERSION; /* ** This is the default collating function named "BINARY" which is always ** available. */ static int binaryCollatingFunc( void *NotUsed, int nKey1, const void *pKey1, |
︙ | ︙ | |||
637 638 639 640 641 642 643 | ** Note that we need to call free() not sqliteFree() here, since every ** string that is exported from SQLite should have already passed through ** sqlite3StrRealloc(). */ void sqlite3_free(char *p){ free(p); } /* | | < < < < < | 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 | ** Note that we need to call free() not sqliteFree() here, since every ** string that is exported from SQLite should have already passed through ** sqlite3StrRealloc(). */ void sqlite3_free(char *p){ free(p); } /* ** Create new user functions. */ int sqlite3_create_function( sqlite3 *db, const char *zFunctionName, int nArg, int eTextRep, int iCollateArg, void *pUserData, |
︙ | ︙ |
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.90 2004/06/02 00:41:09 drh Exp $ */ #ifndef _SQLITE_H_ #define _SQLITE_H_ #include <stdarg.h> /* Needed for the definition of va_list */ /* ** Make sure we can call this stuff from C++. |
︙ | ︙ | |||
366 367 368 369 370 371 372 | ** should always use %q instead of %s when inserting text into a string ** literal. */ char *sqlite3_mprintf(const char*,...); char *sqlite3_vmprintf(const char*, va_list); void sqlite3_free(char *z); | < < < < < < < | 366 367 368 369 370 371 372 373 374 375 376 377 378 379 | ** should always use %q instead of %s when inserting text into a string ** literal. */ char *sqlite3_mprintf(const char*,...); char *sqlite3_vmprintf(const char*, va_list); void sqlite3_free(char *z); /* ** This routine registers a callback with the SQLite library. The ** callback is invoked (at compile-time, not at run-time) for each ** attempt to access a column of a table in the database. The callback ** returns SQLITE_OK if access is allowed, SQLITE_DENY if the entire ** SQL statement should be aborted with an error and SQLITE_IGNORE ** if the column should be treated as a NULL value. |
︙ | ︙ |
Changes to src/sqliteInt.h.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* ** 2001 September 15 ** ** 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. ** ************************************************************************* ** Internal interface definitions for SQLite. ** | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* ** 2001 September 15 ** ** 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. ** ************************************************************************* ** Internal interface definitions for SQLite. ** ** @(#) $Id: sqliteInt.h,v 1.267 2004/06/02 00:41:09 drh Exp $ */ #include "config.h" #include "sqlite3.h" #include "hash.h" #include "parse.h" #include <stdio.h> #include <stdlib.h> |
︙ | ︙ | |||
444 445 446 447 448 449 450 451 452 453 454 455 456 457 | ** structure. A pointer to this structure is stored in the sqlite.aFunc ** hash table. When multiple functions have the same name, the hash table ** points to a linked list of these structures. */ struct FuncDef { char *zName; /* SQL name of the function */ int nArg; /* Number of arguments. -1 means unlimited */ void *pUserData; /* User data parameter */ FuncDef *pNext; /* Next function with same name */ void (*xFunc)(sqlite3_context*,int,sqlite3_value**); /* Regular function */ void (*xStep)(sqlite3_context*,int,sqlite3_value**); /* Aggregate step */ void (*xFinalize)(sqlite3_context*); /* Aggregate finializer */ }; | > | 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 | ** structure. A pointer to this structure is stored in the sqlite.aFunc ** hash table. When multiple functions have the same name, the hash table ** points to a linked list of these structures. */ struct FuncDef { char *zName; /* SQL name of the function */ int nArg; /* Number of arguments. -1 means unlimited */ int iPrefEnc; /* Preferred text encoding */ void *pUserData; /* User data parameter */ FuncDef *pNext; /* Next function with same name */ void (*xFunc)(sqlite3_context*,int,sqlite3_value**); /* Regular function */ void (*xStep)(sqlite3_context*,int,sqlite3_value**); /* Aggregate step */ void (*xFinalize)(sqlite3_context*); /* Aggregate finializer */ }; |
︙ | ︙ |
Changes to src/tclsqlite.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* ** 2001 September 15 ** ** 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. ** ************************************************************************* ** A TCL Interface to SQLite ** | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* ** 2001 September 15 ** ** 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. ** ************************************************************************* ** A TCL Interface to SQLite ** ** $Id: tclsqlite.c,v 1.79 2004/06/02 00:41:09 drh Exp $ */ #ifndef NO_TCL /* Omit this whole file if TCL is unavailable */ #include "sqliteInt.h" #include "tcl.h" #include <stdlib.h> #include <string.h> |
︙ | ︙ | |||
896 897 898 899 900 901 902 | const char *zArg; char *zErrMsg; const char *zFile; const char *zOpts[2] = {0, 0}; char zBuf[80]; if( objc==2 ){ zArg = Tcl_GetStringFromObj(objv[1], 0); | < < < < | 896 897 898 899 900 901 902 903 904 905 906 907 908 909 | const char *zArg; char *zErrMsg; const char *zFile; const char *zOpts[2] = {0, 0}; char zBuf[80]; if( objc==2 ){ zArg = Tcl_GetStringFromObj(objv[1], 0); if( strcmp(zArg,"-version")==0 ){ Tcl_AppendResult(interp,sqlite3_version,0); return TCL_OK; } if( strcmp(zArg,"-has-codec")==0 ){ #ifdef SQLITE_HAS_CODEC Tcl_AppendResult(interp,"1",0); |
︙ | ︙ |
Changes to src/test5.c.
︙ | ︙ | |||
11 12 13 14 15 16 17 | ************************************************************************* ** Code for testing the utf.c module in SQLite. This code ** is not included in the SQLite library. It is used for automated ** testing of the SQLite library. Specifically, the code in this file ** is used for testing the SQLite routines for converting between ** the various supported unicode encodings. ** | | | 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | ************************************************************************* ** Code for testing the utf.c module in SQLite. This code ** is not included in the SQLite library. It is used for automated ** testing of the SQLite library. Specifically, the code in this file ** is used for testing the SQLite routines for converting between ** the various supported unicode encodings. ** ** $Id: test5.c,v 1.7 2004/06/02 00:41:10 drh Exp $ */ #include "sqliteInt.h" #include "os.h" /* to get SQLITE_BIGENDIAN */ #include "tcl.h" #include <stdlib.h> #include <string.h> |
︙ | ︙ | |||
33 34 35 36 37 38 39 40 41 42 43 44 45 46 | while( *pC1 || *pC2 ){ pC1 += 2; pC2 += 2; } return (pC1-pZ)+2; } static int sqlite_utf8to16le( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){ unsigned char *out; | > > > > > > | 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | while( *pC1 || *pC2 ){ pC1 += 2; pC2 += 2; } return (pC1-pZ)+2; } /* ** tclcmd: sqlite_utf8to16le STRING ** title: Convert STRING from utf-8 to utf-16le ** ** Return the utf-16le encoded string */ static int sqlite_utf8to16le( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){ unsigned char *out; |
︙ | ︙ | |||
59 60 61 62 63 64 65 66 67 68 69 70 71 72 | sqliteFree(out); Tcl_SetObjResult(interp, res); return TCL_OK; } static int sqlite_utf8to16be( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){ unsigned char *out; | > > > > > > | 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | sqliteFree(out); Tcl_SetObjResult(interp, res); return TCL_OK; } /* ** tclcmd: sqlite_utf8to16be STRING ** title: Convert STRING from utf-8 to utf-16be ** ** Return the utf-16be encoded string */ static int sqlite_utf8to16be( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){ unsigned char *out; |
︙ | ︙ | |||
86 87 88 89 90 91 92 93 94 95 96 97 98 99 | sqliteFree(out); Tcl_SetObjResult(interp, res); return TCL_OK; } static int sqlite_utf16to16le( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){ unsigned char *out; | > > > > > > > > | 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | sqliteFree(out); Tcl_SetObjResult(interp, res); return TCL_OK; } /* ** tclcmd: sqlite_utf16to16le STRING ** title: Convert STRING from utf-16 in native byte order to utf-16le ** ** Return the utf-16le encoded string. If the input string contains ** a byte-order mark, then the byte order mark should override the ** native byte order. */ static int sqlite_utf16to16le( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){ unsigned char *out; |
︙ | ︙ | |||
116 117 118 119 120 121 122 123 124 125 126 127 128 129 | sqliteFree(out); Tcl_SetObjResult(interp, res); return TCL_OK; } static int sqlite_utf16to16be( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){ unsigned char *out; | > > > > > > > > | 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | sqliteFree(out); Tcl_SetObjResult(interp, res); return TCL_OK; } /* ** tclcmd: sqlite_utf16to16be STRING ** title: Convert STRING from utf-16 in native byte order to utf-16be ** ** Return the utf-16be encoded string. If the input string contains ** a byte-order mark, then the byte order mark should override the ** native byte order. */ static int sqlite_utf16to16be( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){ unsigned char *out; |
︙ | ︙ | |||
146 147 148 149 150 151 152 153 154 155 156 157 158 159 | sqliteFree(out); Tcl_SetObjResult(interp, res); return TCL_OK; } static int sqlite_utf16to8( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){ unsigned char *out; | > > > > > > > > | 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 | sqliteFree(out); Tcl_SetObjResult(interp, res); return TCL_OK; } /* ** tclcmd: sqlite_utf16to8 STRING ** title: Convert STRING from utf-16 in native byte order to utf-8 ** ** Return the utf-8 encoded string. If the input string contains ** a byte-order mark, then the byte order mark should override the ** native byte order. */ static int sqlite_utf16to8( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){ unsigned char *out; |
︙ | ︙ |
Changes to src/util.c.
︙ | ︙ | |||
10 11 12 13 14 15 16 | ** ************************************************************************* ** Utility functions used throughout sqlite. ** ** This file contains functions for allocating memory, comparing ** strings, and stuff like that. ** | | | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | ** ************************************************************************* ** Utility functions used throughout sqlite. ** ** This file contains functions for allocating memory, comparing ** strings, and stuff like that. ** ** $Id: util.c,v 1.96 2004/06/02 00:41:10 drh Exp $ */ #include "sqliteInt.h" #include <stdarg.h> #include <ctype.h> /* ** If malloc() ever fails, this global variable gets set to 1. |
︙ | ︙ | |||
888 889 890 891 892 893 894 | a += strlen(&a[1]) + 2; b += strlen(&b[1]) + 2; } if( dir=='-' || dir=='D' ) res = -res; return res; } | | | | | | 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 | a += strlen(&a[1]) + 2; b += strlen(&b[1]) + 2; } if( dir=='-' || dir=='D' ) res = -res; return res; } #if 1 /* We are now always UTF-8 */ /* ** X is a pointer to the first byte of a UTF-8 character. Increment ** X so that it points to the next character. This only works right ** if X points to a well-formed UTF-8 string. */ #define sqliteNextChar(X) while( (0xc0&*++(X))==0x80 ){} #define sqliteCharVal(X) sqlite3ReadUtf8(X) #else /* !defined(SQLITE_UTF8) */ /* ** For iso8859 encoding, the next character is just the next byte. */ #define sqliteNextChar(X) (++(X)); #define sqliteCharVal(X) ((int)*(X)) #endif /* defined(SQLITE_UTF8) */ #if 1 /* We are now always UTF-8 */ /* ** Convert the UTF-8 character to which z points into a 31-bit ** UCS character. This only works right if z points to a well-formed ** UTF-8 string. */ static int sqlite3ReadUtf8(const unsigned char *z){ int c; static const int initVal[] = { 0, 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, 74, |
︙ | ︙ |
Changes to test/expr.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2001 September 15 # # 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 file is testing expressions. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2001 September 15 # # 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 file is testing expressions. # # $Id: expr.test,v 1.33 2004/06/02 00:41:10 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Create a table to work with. # execsql {CREATE TABLE test1(i1 int, i2 int, r1 real, r2 real, t1 text, t2 text)} |
︙ | ︙ | |||
239 240 241 242 243 244 245 | test_expr expr-5.8b {t1='abxyzzycy', t2='A%CX'} {t1 LIKE t2} 0 test_expr expr-5.9 {t1='abc', t2='A%_C'} {t1 LIKE t2} 1 test_expr expr-5.9b {t1='ac', t2='A%_C'} {t1 LIKE t2} 0 test_expr expr-5.10 {t1='abxyzzyc', t2='A%_C'} {t1 LIKE t2} 1 test_expr expr-5.11 {t1='abc', t2='xyz'} {t1 NOT LIKE t2} 1 test_expr expr-5.12 {t1='abc', t2='ABC'} {t1 NOT LIKE t2} 0 | | < | < < < < < < < < < < < < < < < < < | 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 | test_expr expr-5.8b {t1='abxyzzycy', t2='A%CX'} {t1 LIKE t2} 0 test_expr expr-5.9 {t1='abc', t2='A%_C'} {t1 LIKE t2} 1 test_expr expr-5.9b {t1='ac', t2='A%_C'} {t1 LIKE t2} 0 test_expr expr-5.10 {t1='abxyzzyc', t2='A%_C'} {t1 LIKE t2} 1 test_expr expr-5.11 {t1='abc', t2='xyz'} {t1 NOT LIKE t2} 1 test_expr expr-5.12 {t1='abc', t2='ABC'} {t1 NOT LIKE t2} 0 # The following tests only work on versions of TCL that support Unicode # if {"\u1234"!="u1234"} { test_expr expr-5.13 "t1='a\u0080c', t2='A_C'" {t1 LIKE t2} 1 test_expr expr-5.14 "t1='a\u07FFc', t2='A_C'" {t1 LIKE t2} 1 test_expr expr-5.15 "t1='a\u0800c', t2='A_C'" {t1 LIKE t2} 1 test_expr expr-5.16 "t1='a\uFFFFc', t2='A_C'" {t1 LIKE t2} 1 test_expr expr-5.17 "t1='a\u0080', t2='A__'" {t1 LIKE t2} 0 test_expr expr-5.18 "t1='a\u07FF', t2='A__'" {t1 LIKE t2} 0 test_expr expr-5.19 "t1='a\u0800', t2='A__'" {t1 LIKE t2} 0 test_expr expr-5.20 "t1='a\uFFFF', t2='A__'" {t1 LIKE t2} 0 test_expr expr-5.21 "t1='ax\uABCD', t2='A_\uABCD'" {t1 LIKE t2} 1 test_expr expr-5.22 "t1='ax\u1234', t2='A%\u1234'" {t1 LIKE t2} 1 test_expr expr-5.23 "t1='ax\uFEDC', t2='A_%'" {t1 LIKE t2} 1 test_expr expr-5.24 "t1='ax\uFEDCy\uFEDC', t2='A%\uFEDC'" {t1 LIKE t2} 1 } test_expr expr-5.54 {t1='abc', t2=NULL} {t1 LIKE t2} {{}} test_expr expr-5.55 {t1='abc', t2=NULL} {t1 NOT LIKE t2} {{}} test_expr expr-5.56 {t1='abc', t2=NULL} {t2 LIKE t1} {{}} test_expr expr-5.57 {t1='abc', t2=NULL} {t2 NOT LIKE t1} {{}} test_expr expr-6.1 {t1='abc', t2='xyz'} {t1 GLOB t2} 0 |
︙ | ︙ | |||
313 314 315 316 317 318 319 | test_expr expr-6.23 {t1='abcdefg', t2='a*?g'} {t1 GLOB t2} 1 test_expr expr-6.24 {t1='ac', t2='a*c'} {t1 GLOB t2} 1 test_expr expr-6.25 {t1='ac', t2='a*?c'} {t1 GLOB t2} 0 # These tests only work on versions of TCL that support Unicode # | | | 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 | test_expr expr-6.23 {t1='abcdefg', t2='a*?g'} {t1 GLOB t2} 1 test_expr expr-6.24 {t1='ac', t2='a*c'} {t1 GLOB t2} 1 test_expr expr-6.25 {t1='ac', t2='a*?c'} {t1 GLOB t2} 0 # These tests only work on versions of TCL that support Unicode # if {"\u1234"!="u1234"} { test_expr expr-6.26 "t1='a\u0080c', t2='a?c'" {t1 GLOB t2} 1 test_expr expr-6.27 "t1='a\u07ffc', t2='a?c'" {t1 GLOB t2} 1 test_expr expr-6.28 "t1='a\u0800c', t2='a?c'" {t1 GLOB t2} 1 test_expr expr-6.29 "t1='a\uffffc', t2='a?c'" {t1 GLOB t2} 1 test_expr expr-6.30 "t1='a\u1234', t2='a?'" {t1 GLOB t2} 1 test_expr expr-6.31 "t1='a\u1234', t2='a??'" {t1 GLOB t2} 0 test_expr expr-6.32 "t1='ax\u1234', t2='a?\u1234'" {t1 GLOB t2} 1 |
︙ | ︙ | |||
361 362 363 364 365 366 367 | test_expr expr-6.70c {t1='A]C', t2='A[^]B]C'} {t1 GLOB t2} 0 test_expr expr-6.71 {t1='ABCDEFG', t2='A*[DE]G'} {t1 GLOB t2} 0 test_expr expr-6.72 {t1='ABCDEFG', t2='A*[^DE]G'} {t1 GLOB t2} 1 test_expr expr-6.73 {t1='ABCDEFG', t2='A*?G'} {t1 GLOB t2} 1 test_expr expr-6.74 {t1='AC', t2='A*C'} {t1 GLOB t2} 1 test_expr expr-6.75 {t1='AC', t2='A*?C'} {t1 GLOB t2} 0 | < < < < < < < < < < < < < < < < < < < < < < < < < < | 343 344 345 346 347 348 349 350 351 352 353 354 355 356 | test_expr expr-6.70c {t1='A]C', t2='A[^]B]C'} {t1 GLOB t2} 0 test_expr expr-6.71 {t1='ABCDEFG', t2='A*[DE]G'} {t1 GLOB t2} 0 test_expr expr-6.72 {t1='ABCDEFG', t2='A*[^DE]G'} {t1 GLOB t2} 1 test_expr expr-6.73 {t1='ABCDEFG', t2='A*?G'} {t1 GLOB t2} 1 test_expr expr-6.74 {t1='AC', t2='A*C'} {t1 GLOB t2} 1 test_expr expr-6.75 {t1='AC', t2='A*?C'} {t1 GLOB t2} 0 test_expr expr-6.63 {t1=NULL, t2='a*?c'} {t1 GLOB t2} {{}} test_expr expr-6.64 {t1='ac', t2=NULL} {t1 GLOB t2} {{}} test_expr expr-6.65 {t1=NULL, t2='a*?c'} {t1 NOT GLOB t2} {{}} test_expr expr-6.66 {t1='ac', t2=NULL} {t1 NOT GLOB t2} {{}} test_expr expr-case.1 {i1=1, i2=2} \ {CASE WHEN i1 = i2 THEN 'eq' ELSE 'ne' END} ne |
︙ | ︙ |
Changes to test/func.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2001 September 15 # # 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 file is testing built-in functions. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2001 September 15 # # 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 file is testing built-in functions. # # $Id: func.test,v 1.20 2004/06/02 00:41:10 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Create a table to work with. # do_test func-0.0 { |
︙ | ︙ | |||
90 91 92 93 94 95 96 | do_test func-2.9 { execsql {SELECT substr(a,1,1) FROM t2} } {1 {} 3 {} 6} do_test func-2.10 { execsql {SELECT substr(a,2,2) FROM t2} } {{} {} 45 {} 78} | | < | | 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | do_test func-2.9 { execsql {SELECT substr(a,1,1) FROM t2} } {1 {} 3 {} 6} do_test func-2.10 { execsql {SELECT substr(a,2,2) FROM t2} } {{} {} 45 {} 78} # Only do the following tests if TCL has UTF-8 capabilities # if {"\u1234"!="u1234"} { # Put some UTF-8 characters in the database # do_test func-3.0 { execsql {DELETE FROM tbl1} foreach word "contains UTF-8 characters hi\u1234ho" { execsql "INSERT INTO tbl1 VALUES('$word')" |
︙ | ︙ | |||
142 143 144 145 146 147 148 | execsql {DELETE FROM tbl1} foreach word {this program is free software} { execsql "INSERT INTO tbl1 VALUES('$word')" } execsql {SELECT t1 FROM tbl1} } {this program is free software} | | | 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | execsql {DELETE FROM tbl1} foreach word {this program is free software} { execsql "INSERT INTO tbl1 VALUES('$word')" } execsql {SELECT t1 FROM tbl1} } {this program is free software} } ;# End \u1234!=u1234 # Test the abs() and round() functions. # do_test func-4.1 { execsql { CREATE TABLE t1(a,b,c); INSERT INTO t1 VALUES(1,2,3); |
︙ | ︙ |
Changes to test/tclsqlite.test.
︙ | ︙ | |||
11 12 13 14 15 16 17 | # This file implements regression tests for TCL interface to the # SQLite library. # # Actually, all tests are based on the TCL interface, so the main # interface is pretty well tested. This file contains some addition # tests for fringe issues that the main test suite does not cover. # | | | 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # This file implements regression tests for TCL interface to the # SQLite library. # # Actually, all tests are based on the TCL interface, so the main # interface is pretty well tested. This file contains some addition # tests for fringe issues that the main test suite does not cover. # # $Id: tclsqlite.test,v 1.21 2004/06/02 00:41:10 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Check the error messages generated by tclsqlite # if {[sqlite -has-codec]} { |
︙ | ︙ | |||
67 68 69 70 71 72 73 | expr x* } } msg] regsub {:.*$} $msg {} msg lappend v $msg } {1 {syntax error in expression "x*"}} | | < < < < < < < < < < < | 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | expr x* } } msg] regsub {:.*$} $msg {} msg lappend v $msg } {1 {syntax error in expression "x*"}} if {[sqlite -tcl-uses-utf]} { do_test tcl-2.1 { execsql "CREATE TABLE t\u0123x(a int, b\u1235 float)" execsql "PRAGMA table_info(t\u0123x)" } "0 a int 0 {} 0 1 b\u1235 float 0 {} 0" do_test tcl-2.2 { execsql "INSERT INTO t\u0123x VALUES(1,2.3)" db eval "SELECT * FROM t\u0123x" result break set result(*) } "a b\u1235" } # Test the onecolumn method # do_test tcl-3.1 { execsql { INSERT INTO t1 SELECT a*2, b*2 FROM t1; INSERT INTO t1 SELECT a*2+1, b*2+1 FROM t1; |
︙ | ︙ |